diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/2022/08/29/dev-meeting.html b/2022/08/29/dev-meeting.html new file mode 100644 index 000000000..b642e3a69 --- /dev/null +++ b/2022/08/29/dev-meeting.html @@ -0,0 +1,447 @@ + + + + + + + + + + + + + Dev meeting | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 04 September 2022, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

NanoMsg instead of ZeroMQ

+ +

During the meeting, Joseph suggested using Nanomsg instead of ZeroMQ because building ZeroMQ is not easy, +especially in Windows. Additionally, we can use the pure Go implementation of Nanomsg.

+ +

The format of block events was defined as follows:

+ +
<event_id: 1 byte><event_data: variant><height: 4 bytes><seq_num: 4 bytes>
+
+ +

As a consequence of this, smart contracts events can be defined more easily and +Infura-like services become simple, as we can just replay the events.

+ +

Reviewing a Pull Request

+ +

Nagaraj’s pull request reviewed.

+ +

Renaming project

+ +

The team discussed renaming (rebranding) the project and decided to create an online survey to +gather suggestions for a new name. +Everyone is encouraged to participate in the survey and suggest new names for the project.

+ + + + +
+
+
+
+ + + + diff --git a/2022/09/04/dev-meeting.html b/2022/09/04/dev-meeting.html new file mode 100644 index 000000000..da455d1fb --- /dev/null +++ b/2022/09/04/dev-meeting.html @@ -0,0 +1,556 @@ + + + + + + + + + + + + + Dev meeting | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 29 August 2022, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

Project renamed to Pactus

+ +

During the last meeting, the team conducted an online survey to rename the project. +A total of 31 responses were received, and the following names were suggested:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVotes
Sirius11
Pactus10
Nova7
Texo6
Zemus6
Helios6
Tutti5
Haki5
Aegeus4
Virgo4
Zentora3
Zinova3
Xerxes2
Ledgeria2
Solidus2
Welt2
Ventura2
Zebra2
Miranet2
Monetha2
FutureHub1
Muonet1
Mentha1
Hypatios0
Chaintopia0
Sycee0
Lepus0
+ +

After reviewing the responses, the team chose “Pactus” as the new name for the project. 🎉 +The project will be moved to “pactus-project/pactus,” and the team plans to announce it on social media.

+ +

Discussion on GUI

+ +

In terms of the GUI, Joseph suggested using Flutter, and the team agreed. +To interact with the wallet, gRPC APIs will be provided, and the GUI will use these APIs.

+ + + + +
+
+
+
+ + + + diff --git a/2022/09/18/dev-meeting.html b/2022/09/18/dev-meeting.html new file mode 100644 index 000000000..83acbff98 --- /dev/null +++ b/2022/09/18/dev-meeting.html @@ -0,0 +1,466 @@ + + + + + + + + + + + + + Dev meeting | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 18 September 2022, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

Discussion about Testnet

+ +

The team discussed Testnet and related issues, including IP block issues that were found by Hadi. +Due to sanctions, some IPs are blocked, so the team will run a support node to assist users inside Iran. +The GUI application had some issues on Windows, but they were fixed and tested by Hadi.

+ +

Discussion about Website

+ +

The website still has some issues, such as the need to rename the animation to “Pactus” and the lack of a logo. +The community suggested some logos. Additionally, the roadmap page is missing.

+ +

Status of social medias

+ +

The team discussed the status of social media platforms, including:

+ +
    +
  • Discord: 70 members
  • +
  • Instagram: 87 followers
  • +
  • Telegram: 20 followers
  • +
  • Linkedin: 20 followers
  • +
  • Twitter: Not yet
  • +
+ +

The team also decided to announce the project on social media on 29 September.

+ +

Consensus parameters

+ +

The team discussed the current consensus parameters:

+ +
    +
  • Total supply: 21 million coins
  • +
  • Reward: 1 coin per block
  • +
  • Block time: 10 second
  • +
  • Committee size: 21 members
  • +
  • Bond interval: one hour
  • +
  • Unbond interval: 21 days
  • +
  • Fee fraction: 0.0001
  • +
  • Min fee: 0.0000001
  • +
  • Max fee: 0.01
  • +
  • Maximum stake: 12381
  • +
+ + + + +
+
+
+
+ + + + diff --git a/2022/09/20/release-0-9-0.html b/2022/09/20/release-0-9-0.html new file mode 100644 index 000000000..4adc9eb29 --- /dev/null +++ b/2022/09/20/release-0-9-0.html @@ -0,0 +1,436 @@ + + + + + + + + + + + + + Pactus 0.9.0 released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.9.0 released

+ +

Overview

+ +

Pactus Blockchain Release Version 0.9.0 +is now available for download. +This release includes a new graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Download

+ +

This version has been implemented for Testnet-0 and is preparing for the upcoming Mainnet launch. +To get started with the Pactus Blockchain Testnet-0, simply download +the latest version and run the Pactus software.

+ +

Join the Testnet now and get ready for the future!

+ + + + +
+
+
+
+ + + + diff --git a/2022/09/24/testnet-0-launched.html b/2022/09/24/testnet-0-launched.html new file mode 100644 index 000000000..8a0ee4876 --- /dev/null +++ b/2022/09/24/testnet-0-launched.html @@ -0,0 +1,432 @@ + + + + + + + + + + + + + Testnet-0 launch announcement | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Testnet-0 launch announcement

+ +

testnet

+ +

The Pactus blockchain Testnet-0 is now accessible. +To participate, simply download the Pactus application version 0.9.0 and +connect to the Testnet without any special configurations. +For test coins, please visit our Discord channel and share your validator address.

+ +

By taking part in the Testnet, you can familiarize yourself with the Pactus blockchain and +get ready for the Mainnet launch. +Testnet participants will also be given higher priority during the Mainnet launch.

+ +

Please share your feedback with us to help improve the user experience in future versions of the software.

+ + + + +
+
+
+
+ + + + diff --git a/2022/10/30/dev-meeting.html b/2022/10/30/dev-meeting.html new file mode 100644 index 000000000..540feb5c1 --- /dev/null +++ b/2022/10/30/dev-meeting.html @@ -0,0 +1,459 @@ + + + + + + + + + + + + + Dev meeting | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 30 October 2022, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

In memory of Mahsa Amini

+ +

The meeting started in memory of Mahsa Amini. +We in the Pactus family stand in solidarity with courageous people who are fighting for equality, equity and freedom in Iran.

+ +

Woman Life Freedom

+ +

Launching Block explorer

+ +

The beta version of the block explorer has been launched 🚀 and is now available at +https://pacviewer.com.

+ +

Nagaraj explained the block explorer and some of the features.

+ +

Project road map

+ +

Project road map was discussed.

+ +

IdeaKita pitch deck

+ +

Ali presented the Pactus pitch deck for the IdeaKita in Malaysia. +The IdeaKita program, under the Malaysia Digital Economy Corporation (MDEC), is designed to +support entrepreneurs and startups in Malaysia.

+ +

Latest development progress

+ +

The latest pull requests were reviewed:

+ + + + + + +
+
+
+
+ + + + diff --git a/2022/11/24/release-0-9-1.html b/2022/11/24/release-0-9-1.html new file mode 100644 index 000000000..edb5be00d --- /dev/null +++ b/2022/11/24/release-0-9-1.html @@ -0,0 +1,451 @@ + + + + + + + + + + + + + Pactus 0.9.1 released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.9.1 released

+ +

Overview

+ +

Pactus Blockchain Release Version 0.9.1 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Download

+ +

This version has been implemented for Testnet-0 and is preparing for the upcoming Mainnet launch. +To start using the Pactus Blockchain Testnet-0, +you can download the latest version from download page +and join the Testnet.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +
    +
  • Blocks can be fully decoded when queried in gRPC
  • +
  • The HTTP module now uses gRPC module, making node configuration simpler by removing the CapnP module
  • +
  • Reducing the blockchain size by saving blocks by number instead of hash
  • +
  • The wallet can hold unconfirmed transactions
  • +
  • The wallet can use different gRPC servers
  • +
  • The GUI displays committee information
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2023/03/01/what-is-testnet.html b/2023/03/01/what-is-testnet.html new file mode 100644 index 000000000..e5e57cfe6 --- /dev/null +++ b/2023/03/01/what-is-testnet.html @@ -0,0 +1,503 @@ + + + + + + + + + + + + + What is a Testnet? | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

What is a Testnet?

+ +

Mainnet vs Testnet?

+ +

If you have ever wondered what Testnet is and how it is different from Mainnet, read this article to the end to find out!

+ +

Mainnet and Testnet are two widely used terminologies in the Blockchain ecosystem; +so it is important to understand the meaning and differences while working in the industry or +following announcements of the Blockchain projects like Pactus.

+ +

Here’s a quick explanation: +Before the actual live version of a Blockchain network that is used for real transactions, +functions and smart-contracts (which is referred as Mainnet), +there is a test version of the Blockchain network for testing purposes (which is referred as Testnet). +In Testnet, a safe environment is provided to help developers experiment and test their applications, +and make sure that everything functions smoothly in the Mainnet version.

+ +

Testnet

+ +

A Testnet is a simulation of a Blockchain, in which developers can test all the functionalities of +their Blockchain network without risking their assets and convenience of end-users. +Using Testnet, any possible error, bug or malfunctions can be fixed before the Mainnet launch. +Testnet also can be an experimental environment for new features, updates and upgrades. +So several Testnet networks of the same version or newer version of the Mainnet can be implemented on the roadmap.

+ +

What are use cases of Testnet?

+ +

A secure environment to test development ideas and updates. +So many features and minor details in Pactus project have been successfully developed so far using the Testnet; such as:

+ +
    +
  • extra details and information on Pactus-GUI;
  • +
  • well-functioning Pactus Blockchain explorer to access transactions and block details;
  • +
  • Upgrades that led to decreasing the size of the Pactus network
  • +
+ +

Providing a safe testing ground for resolve scalability and security problems, as well as decentralization issues. +Pactus network is also a secure and purely decentralized network. However in the last updates during the Testnet, +developers are now able to decrease the database size by approximately 10% without compromising performance. +They did it by utilizing block height instead of hash to store blocks within the database. (you can find out more +here).

+ +

Testing new versions, patches and features on Testnet. it is vital for enhancing the security, load testing, +Blockchain migration, integration tests, and etc. This is why you can now use the latest version of Pactus-GUI +that works like clockwork and is extremely secure.

+ +

Testing the functions of cryptocurrency without disrupting the Mainnet. In the Testnet of Pactus Blockchain, +you as a user or validator can use all the features to send, receive, bond or unbond your assets in the Pactus-GUI.

+ +

Development and simulation of smart contract features and DApps. Note that many Blockchain projects like Pactus, +can be used as smart-contract platforms. So the Testnet can be designed in different stages to test and improve +different applications of the network.

+ +

Please note that after a certain period of time, when developers get satisfied with the functionality and debugging process, +they launch Mainnet. Mainnet has its own independent genesis blocks; +so the assets and addresses that users use in Testnet are not valid inside the new Mainnet Blockchain anymore. +In fact the whole Blockchain network starts working from the scratch and users and validators start to +work with real coins and transactions instead of the simulated ones. But since Testnet has an important effect +on the health and improvement of the network, in Pactus Blockchain, we have several advantages +for the people who join the Testnet.

+ +

Why should you join the Testnet?

+ +

There are different contributors in a Blockchain network; +Some people are developers and programmers that use the Testnet to contribute, enhance and lead the project to a better future. +Testnet is actually vital for them to perform their changes and try their innovations and ideas.

+ +

But you might also be an end user; you might want to either be a validator and stake your assets to earn more Pactus coins, +or you might want to learn how to use the network for future personal applications. Either way, +you might find it handy to give it a try and be familiar with Pactus-GUI and its different features.

+ +

However, there is another advantage for end users who join the Testnet. +While using the network, running a node or testing the Pactus-GUI in Testnet period, you are contributing to +the community to find improvement potentials, that’s why there are more advantages contemplated for the Testnet users; +Soon our Mainnet will be launched and also Pactus network will be announced and listed in well-known exchanges. +As an early contributor, you will have the advantage of getting some extra initial coins at the beginning of Mainnet launch. +So that you can use it to run a validator node and earn more from staking your assets. This airdrop is considered +for every individual who installs Pactus-GUI and starts a node in Testnet.

+ +

There are other positive conditions you may experience as an early contributor.

+ +
    +
  • Advanced and very responsive support for your issues (we dedicate more time to provide you with solutions)
  • +
  • Embracing your suggestions, improvement ideas, needs and information you may require to have a better user experience.
  • +
+ + + + +
+
+
+
+ + + + diff --git a/2023/04/21/testnet-0-concluded.html b/2023/04/21/testnet-0-concluded.html new file mode 100644 index 000000000..1b8a751f5 --- /dev/null +++ b/2023/04/21/testnet-0-concluded.html @@ -0,0 +1,465 @@ + + + + + + + + + + + + + Story of Testnet-0 | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Story of Testnet-0

+ +

What is Testnet?

+ +

Testnet is a testing environment where developers and users can try out the functionality of a blockchain project, +without putting real assets or data at risk. +It helps to ensure that the final product is reliable and secure for users to use. +If you like to read more about the Testnet you can check out our post on +“What is Testnet?”.

+ +

Summary of Testnet-0

+ +

In September 2022, we launched Testnet-0. +The purpose of this Testnet was to +check the consensus protocol, +test different transaction types, +and ensure the stability of the blockchain. +We also wanted to test the sortition algorithm +to make sure it works properly.

+ +

The committee +for the Testnet-0 was set to five validators, and more than 19 validators joined during the Testnet period. +Over 2 million blocks were created, and more than 3.2 million transactions were processed during this time. +The size of the blockchain is approximately 1 gigabyte. +The maximum number of transactions recorded in a single block was 386. With a block time of 10 seconds, +we can confirm that Pactus blockchain can support up to 30 transactions per second (TPS), +which is a reasonable number for TPS. Based on real-time statistics available at realtps, +we can see that Pactus is among the top 10 blockchains in terms of TPS.

+ +

At this point, the development team decided to end the Testnet-0 and move on to the next one, +Testnet-1. We are planning to run the Testnet-1 to prepare for the MainNet launch. +We will provide updates on our progress and share the details of the new Testnet soon.

+ +

Special thanks to the community

+ +

This Testnet was important for us. +It helped us learn what we need to do to make Pactus work even better. +Without the community that supports us and dedicates their time and resources to testing and feedback, +we wouldn’t have been able to progress as we have.

+ +

We thank all of them for their valuable contributions. +As promised, participants in Testnets will be given priority as validators for the MainNet, and +will receive bounty PAC coins to set up their validators.

+ +

We are grateful to all those who participated in Testnet-0, and +we encourage them to join our next Testnet to help us improve Pactus. +As a community-based project, we rely on the support of our community members, and we value any help we receive.

+ + + + +
+
+
+
+ + + + diff --git a/2023/05/08/release-0-10-0.html b/2023/05/08/release-0-10-0.html new file mode 100644 index 000000000..7ca627a3c --- /dev/null +++ b/2023/05/08/release-0-10-0.html @@ -0,0 +1,479 @@ + + + + + + + + + + + + + Pactus 0.10.0 released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.10.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.10.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlight

+ +

The main update in this version allows users to set up multiple validators in one node. +Users can set up to 32 validators in a single node, and each validator can stake up to 1,000 coins.

+ +

Multi validators

+ +

Download

+ +

This version has been implemented for Testnet-1 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • removing address from account (#454)
  • +
  • supporting multiple consensus instances (#450)
  • +
  • adding sortition interval to the parameters (#442)
  • +
+ +

Fix

+ +
    +
  • gui: check if the node has an active consensus instance (#458)
  • +
  • Use of a Persistent Merkle tree to enhance performance of calculating the +state hash; fully tested in Testnet-0 (#432)
  • +
  • GetBlockchainInfo API in gRPC now returns the total number of validators and accounts (#439)
  • +
  • wallet path as argument (#455)
  • +
  • adding reward addresses to config (#453)
  • +
  • removing committers from the certificate hash (#444)
  • +
  • prevent data race conditions in committee (#452)
  • +
  • using 2^256 for the vrf denominator (#445)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2023/05/09/testnet-1-launched.html b/2023/05/09/testnet-1-launched.html new file mode 100644 index 000000000..9c054448c --- /dev/null +++ b/2023/05/09/testnet-1-launched.html @@ -0,0 +1,462 @@ + + + + + + + + + + + + + Testnet-1 launch announcement | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Testnet-1 launch announcement

+ +

Overview

+ +

The Pactus blockchain Testnet-1 is now available for participation. +This version simulates the Mainnet environment and evaluate the system’s performance, stability, +and security in a controlled environment. +The primary goal of this version of Testnet is to determine the efficient and secure committee size for the Mainnet.

+ +

Key Aspects

+ +
    +
  • Simulating the Mainnet environment
  • +
  • Determining the actual block creation time
  • +
  • Assessing the staking mechanism and consensus protocol
  • +
  • Evaluating network usage under different loads
  • +
  • Evaluating the syncing process for new nodes joining the network
  • +
  • Ensuring network stability with over 1000 validators
  • +
  • Evaluating transaction performance
  • +
  • Conducting stress tests
  • +
  • Performing security tests, including double spend attacks, Sybil attacks +(nodes with different identities), and forking resistance
  • +
+ +

Joining Testnet-1

+ +

To join the Testnet, download Pactus software +version 0.10.0 and +connect to Testnet without any special configuration or hardware. +You can run the software on your personal computer or laptop. +To acquire test coins, visit the Discord channel and +provide your validator address.

+ +

Benefits for Participation

+ +

By taking part in the Testnet, users can familiarize themselves with the Pactus blockchain and +be well-prepared for the Mainnet launch. +Testnet participants will also receive higher priority during the Mainnet launch and +get free coins for initial staking on the Mainnet.

+ +

Your Feedback Matters

+ +

User feedback plays a vital role in the improvement of the Pactus blockchain. +Share your thoughts and experiences to contribute to the enhancement of future software versions.

+ + + + +
+
+
+
+ + + + diff --git a/2023/05/29/release-0-11-0.html b/2023/05/29/release-0-11-0.html new file mode 100644 index 000000000..d86e53a37 --- /dev/null +++ b/2023/05/29/release-0-11-0.html @@ -0,0 +1,491 @@ + + + + + + + + + + + + + Pactus 0.11.0 released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.11.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.11.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

The main update in this version is the fix for the relay +connection issue. +A relay is a peer in the network that facilitates the connection between two peers, +particularly when they are using home internet.

+ +

Another significant update is that sending a Bond transaction +is now more user-friendly. +Users no longer need to set the validator public key if they want to bond Test PAC coins to their validators.

+ +

Bond transaction dialog

+ +

Download

+ +

This version has been implemented for Testnet-1 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • gui: showing the total number of validators (#474)
  • +
  • network: fixing relay connection issue (#475)
  • +
  • consensus: rejecting vote with round numbers exceeding the limit (#466)
  • +
  • increase failed counter when stream got error (#489)
  • +
  • boosting syncing process (#482)
  • +
  • waiting for proposal in pre-commit phase (#486)
  • +
  • retrieving public key from wallet for bond transactions (#485)
  • +
  • restoring config file to the default (#484)
  • +
  • defining ChainType in genesis to detect the type of network (#483)
  • +
  • reducing the default Argon2d to consume less memory (#480)
  • +
  • adding password option to the start commands (#473)
  • +
+ +

Refactor

+ +
    +
  • rename send to transfer. (#469)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2023/06/19/release-0-12-0.html b/2023/06/19/release-0-12-0.html new file mode 100644 index 000000000..02b155740 --- /dev/null +++ b/2023/06/19/release-0-12-0.html @@ -0,0 +1,489 @@ + + + + + + + + + + + + + Pactus 0.12.0 released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.12.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.12.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version is focused on improving the sync time to make it faster. +This is achieved by implementing a caching mechanism that executes transactions more quickly and +improves the calculation of total power (stake) of the blockchain in a more effective way.

+ +

Syncing progress

+ +

Download

+ +

This version has been implemented for Testnet-1 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • add GetAccountByNumber API to get account by number (#511)
  • +
+ +

Fix

+ +
    +
  • caching account and validator in store (#513)
  • +
  • get recent blocks by stamp (#509)
  • +
  • closing the mDNS connection upon stopping the network (#508)
  • +
  • updating linkedmap to use generic (#507)
  • +
  • removing state from cache (#506)
  • +
  • Typo in GUI (#499)
  • +
  • supporting localnet (#492)
  • +
+ +

Refactor

+ +
    +
  • update total power calculation based on power change(deltas) (#518)
  • +
  • GetValidators return all validators in state validators map (#512)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2023/07/01/release-0-13-0.html b/2023/07/01/release-0-13-0.html new file mode 100644 index 000000000..f24018fa8 --- /dev/null +++ b/2023/07/01/release-0-13-0.html @@ -0,0 +1,480 @@ + + + + + + + + + + + + + Pactus 0.13.0 released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.13.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.13.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

Users can now restore the default_wallet during the node initialization. +If users have a backup of the seed phrase (mnemonic) for the default_wallet, +they can now restore it and re-initialize the node.

+ +

Restore mode

+ +

Download

+ +

This version has been implemented for Testnet-1 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • implemented restore wallet base on input seed (#553)
  • +
  • measuring total sent and received bytes (#552)
  • +
  • add validate seed and restore wallet (#533)
  • +
  • HTTP: Missing handlers (#549)
  • +
  • gui: update about dialog and menu items in help (#532)
  • +
+ +

Refactor

+ +
    +
  • implementing TestSuite (#535)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2023/07/05/testnet-500-validators.html b/2023/07/05/testnet-500-validators.html new file mode 100644 index 000000000..342c6b96a --- /dev/null +++ b/2023/07/05/testnet-500-validators.html @@ -0,0 +1,454 @@ + + + + + + + + + + + + + 500 validators joined Testnet | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

500 validators joined Testnet

+ +

For a Proof of Stake blockchain, validators are important for +maintaining the network’s integrity and security. They are similar to miners in Proof of Work blockchains like Bitcoin.

+ +

Pactus as a real Proof of Stake blockchain, has achieved a significant milestone. +More than 500 validators joined the Testnet +in less than 2 months. +This accomplishment proves that Pactus is reliable, resilient, and trustworthy. More importantly, it sets new standards +in the blockchain world. In fact, the Pactus Testnet is even more decentralized than some well-known blockchains.

+ +

500 validators of Testnet

+ +

One key reason why Pactus can accommodate more validators is its powerful +consensus mechanism. +The consensus mechanism in Pactus eliminates the need for delegation, making it possible for anyone to become a validator. +Additionally, the user-friendly application ensures that even those new to blockchain can easily contribute to the network.

+ +

What is the next

+ +

To remain competitive in the market, Pactus recognizes the importance of prioritizing user space. +We aim to ensure that running Pactus is affordable and accessible to anyone, regardless of their technical expertise or +available resources.

+ +

To achieve this, the Pactus team constantly monitors network, storage, and computational usage, striving to keep them +at minimal levels. +By doing so, we enable more individuals to participate in the Pactus blockchain.

+ +

Currently, the Pactus team is working on optimizing and reducing network usage. This effort will lead to reduced costs, +especially for users who are using home internet connections.

+ +

Furthermore, we are planning to introduce a pruning mode, allowing users to run the Pactus blockchain with significantly +less storage. +Although we believe the storage size is already small, our goal is to enable users to +retain only the most recent blockchain history. +This approach ensures that the blockchain size remains as compact as possible by disregarding some history of the blockchain.

+ + + + +
+
+
+
+ + + + diff --git a/2023/07/09/dev-meeting.html b/2023/07/09/dev-meeting.html new file mode 100644 index 000000000..e0fed543b --- /dev/null +++ b/2023/07/09/dev-meeting.html @@ -0,0 +1,460 @@ + + + + + + + + + + + + + Dev meeting | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 09 July 2023, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

Overview to the Network Module

+ +

The meeting began with an overview of the Network module in Pactus. +This module uses Libp2p as its underlying network protocol.

+ +

The Network module is agnostic about the content of the message and +handles two types of messages: Gossip messages, which are broadcasted, +and Stream messages, which are sent directly to a specific peer. +The team discussed the relay nodes that enable communication for nodes behind NAT. +Upon receiving a message, the module publishes an event. +The two types of events are Gossip events and Steam events.

+ +

Network messages

+ +

The team discussed the issue of Relay connections resetting, and explored solutions such as +hole punching or using UDP and IPv6.

+ +

Some users in the Testnet reported high network usage. +The team discussed implementing metrics for LibP2P to monitor network usage effectively. +The discussion related to this issue can be found here. +Additionally, the team discussed the customization of network resources, +including setting limits for inbound and outbound connections.

+ +

Overview to the Sync Module

+ +

Moving on, the Sync module was discussed. +Unlike the Network module, the Sync module has full knowledge about the messages and packets. +The module handles a range of message types, which can be found +here.

+ +

It was suggested that we need to define metrics for each message type. +There was also a discussion about the need for reducing the messages to optimize the use of network resources.

+ +

The team decided to continue discussing these topics in future meetings. +They also plan to work on improving the Network and Sync modules based on these discussions.

+ + + + +
+
+
+
+ + + + diff --git a/2023/08/01/testnet-1-concluded.html b/2023/08/01/testnet-1-concluded.html new file mode 100644 index 000000000..6104fb256 --- /dev/null +++ b/2023/08/01/testnet-1-concluded.html @@ -0,0 +1,489 @@ + + + + + + + + + + + + + Story of Testnet-1 | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Story of Testnet-1

+ +

What is Testnet?

+ +

Testnet is a testing environment where developers and users can try out the functionality of a blockchain project, +without putting real assets or data at risk. +It helps to ensure that the final product is reliable and secure for users to use. +If you like to read more about the Testnet you can check out our post on +“What is Testnet?”.

+ +

Summary

+ +

In May 2023, we launched Testnet-1. +The main purpose of this Testnet was to measure block time creation and the responsiveness of the blockchain. +The development team also focused on evaluating the network’s performance. +Additionally, the overall performance of the software and the syncing process were closely examined and assessed.

+ +

The committee for Testnet-1 was set to 21 validators, +and 584 validators joined during the Testnet period. +More than 600,000 blocks were created, and more than 1 million transactions were processed during this time. +The size of the blockchain is about 300 megabytes.

+ +

About 300,000 coins were staked during this period, it was almost 50% of the total generated coins. +It shows that users, even in Testnet, tend to stake their coins.

+ +

Staking chart

+ +

We were able to extract the confirmation time of transactions. +More than 97% of transactions were confirmed in just one block after submission. +This indicates that the transaction pool and broadcasting models are working fine.

+ +

Transaction confirmation chart

+ +

Based on logs from one of the validators, the time for creating a block is about 3 seconds in normal cases. +More than 97% of blocks are committed in the first rounds.

+ +

Consensus round chart

+ +

Major updates

+ +

During Testnet-1, we released three versions(Version +0.11.0, +0.12.0, +0.13.0), and the upgrade process was smooth. +Unfortunately, during Testnet-1, we encountered a consensus failure that may occur at any time in the future. +The consensus failure was resolved by requiring some validators to re-sync their nodes. +At this time, the development team decided to stop Testnet-1 and work on improvements that are not backward compatible, +including:

+ +
    +
  • Improving the consensus protocol
  • +
  • Reducing the blockchain size
  • +
  • Optimizing the network usage
  • +
+ +

After stabilizing the changes, we will announce the next Testnet, and hopefully, this will be the pre-launch Testnet.

+ +

Special thanks to the community

+ +

This Testnet was important for us. +It helped us learn what we need to do to make Pactus work even better. +Without the community that supports us and dedicates their time and resources to testing and feedback, +we wouldn’t have been able to progress as we have.

+ +

We thank all of them for their valuable contributions. +As promised, participants in Testnets will be given priority as validators for the MainNet, and +will receive bounty PAC coins to set up their validators.

+ +

We are grateful to all those who participated in Testnet-1, and +we encourage them to join our next Testnet to help us improve Pactus. +As a community-based project, we rely on the support of our community members, and we value any help we receive.

+ + + + +
+
+
+
+ + + + diff --git a/2023/08/22/dev-report.html b/2023/08/22/dev-report.html new file mode 100644 index 000000000..09deb175c --- /dev/null +++ b/2023/08/22/dev-report.html @@ -0,0 +1,454 @@ + + + + + + + + + + + + + Dev report | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev report

+ +

Abstract

+ +

there is several activities in Pactus github this month, here is a clear report and explain of activities.

+ +

Github Pactus

+ +

Linters

+ +

one of new changes in Pactus project is new linters we added this month. +what is linters? +linters are just a set of rules for the style of source codes, they force developers to write new codes +in correct, clean and safe way.

+ +

why we use them? +the reason we are using linters in Pactus and add new ones, is to make the code more safe, +and also make it easy to work on for new contributors because we are focus on being decentralized even in development.

+ +

Linters we added till now

+ +

TLA+ spec

+ +

one another new change in Pactus is updating TLA+ spec, which is related to consensus, +as you know we had some problem with consensus in Testnet-1, we fixed the issues and now we are trying to make it more clean.

+ +

link to changes

+ +

if you wish you can learn more about Pactus consensus here.

+ +

Refactoring

+ +

some of previous Pactus dependencies was so old, so we start refactoring them and use new libraries. +also we used some libraries with higher performance which is make Pactus full node more faster in mainnet.

+ +

one of refactors

+ + + + +
+
+
+
+ + + + diff --git a/2023/09/04/introduction-to-pips.html b/2023/09/04/introduction-to-pips.html new file mode 100644 index 000000000..cd170fa07 --- /dev/null +++ b/2023/09/04/introduction-to-pips.html @@ -0,0 +1,462 @@ + + + + + + + + + + + + + Introduction to PIPs | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Introduction to PIPs

+ +

Introduction to PIPs

+ +

In our commitment to transparency and innovation, we’re excited to introduce a major step in Pactus’s journey: +the Pactus Improvement Proposals, or PIPs.

+ +

PIPs image

+ +

What are PIPs?

+ +

Pactus Improvement Proposals (PIPs) define standards for the ongoing development and enhancement of the Pactus platform. +Each PIP has a unique number like PIP-2, +PIP-3, and so on. +These proposals provide technical details for suggested modifications or enactments, serving as a guide for development.

+ +

The PIP process

+ +

The PIP process is open, allowing any member of the Pactus community to propose a PIP. +The author should provide a summary, motivation, and a detailed technical explanation. +The Pactus Laboratory team will carefully review each PIP. +Security considerations must be addressed before finalizing a PIP. +Once finalized, it can be added to the code. +This process helps avoid unexpected issues during development and maintain consistency and safety.

+ +

The Origins of PIPs

+ +

The Pactus Improvement Proposals (PIPs) was inspired by the +Ethereum Improvement Proposals (EIPs) system, +which had its roots in the Bitcoin Improvement Proposals (BIPs) and +Python Enhancement Proposals (PEPs).

+ +

New Feature Policy

+ +

From now on, all major changes or new features in the Pactus project require a PIP. +Any implementation must reference its specific PIP. +Without approval from Pactus Laboratory team, changes won’t be approved and added to the codebase.

+ +

PIPs Repository

+ +

For a complete list of Pactus Improvement Proposals, visit this link. +The corresponding GitHub repository is accessible here.

+ +

PIPs repository on Github

+ + + + +
+
+
+
+ + + + diff --git a/2023/09/24/dev-report-pre-testnet-2.html b/2023/09/24/dev-report-pre-testnet-2.html new file mode 100644 index 000000000..05b62746c --- /dev/null +++ b/2023/09/24/dev-report-pre-testnet-2.html @@ -0,0 +1,472 @@ + + + + + + + + + + + + + Dev Report pre-testnet2 | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev Report pre-testnet2

+ +

Abstract

+ +

there is several activities in Pactus github in September month, here is a clear report and explain of activities.

+ +

Github Pactus

+ +

Implementing PIP 2, 3 and 4

+ +

After starting Pactus Labs and PIPs, +we start implementing each accepted PIP one by one to improve Pactus, here is a list of implemented PIPs:

+ + + +

Network

+ +

There is some very good change and new features for Pactus network module, +this list contain a list of important changes in Pactus networking:

+ + + +

gRPC and nanomessage services

+ +

We also updated, improved and enhanced gRPC and nanomessage services for better developer experience, +for third-party and side project developers, here is some changes:

+ + + +

Refactoring and other new feature or debugs

+ +

We had some not implemented feature request, not fixed bugs and some issue with new golang version, +list of this changes:

+ + + + + + +
+
+
+
+ + + + diff --git a/2023/09/28/how-sspos-works-in-simple-word.html b/2023/09/28/how-sspos-works-in-simple-word.html new file mode 100644 index 000000000..219082cd7 --- /dev/null +++ b/2023/09/28/how-sspos-works-in-simple-word.html @@ -0,0 +1,506 @@ + + + + + + + + + + + + + How SSPoS (Solid State Proof of Stake) works in simple word | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

How SSPoS (Solid State Proof of Stake) works in simple word

+ +

Abstract

+ +

In all Blockchain protocols, there is a concept called a consensus mechanism. +This mechanism is used to enable nodes to reach an agreement +on the state of the Blockchain they are +maintaining, in order to have a synchronized and integrated Blockchain.

+ +

For now, we have a lot of consensus mechanisms in the Blockchain world. +Pactus Blockchain uses the SSPoS (Solid State Proof of State) which is a new consensus model.

+ +

To explain how it works let’s start with explaining one of the first and simplest +consensus mechanisms (or if you already know them, just jump into the last part named SSPoS).

+ +

Solid State Proof of Stake

+ +

PoW (Proof of Work)

+ +

In the proof of work model, each node in the network should solve a complex mathematical +problem that requires lots of computing resources to make a new block.

+ +

In this way, it’s highly unlikely that anyone would be able to change +past transactions and change Blockchain states such as balances, +without expending equivalent computational power.

+ +

By doing this we ensure the security and integrity of the Blockchain.

+ +

The concept was adapted from digital tokens by Hal Finney in 2004 +through the idea of “reusable proof of work” using the 160-bit secure hash algorithm 1 (SHA-1).

+ +

Bitcoin uses this consensus model.

+ +

PoS (Proof of Stake)

+ +

On the other hand, PoS or Proof of Stake is another consensus mechanism that instead of miners has validators!

+ +

Validators lock a number of their assets in the Blockchain and they can transfer or use it +till it is locked which we call staking. +after each Block is committed one of the validators will be chosen randomly (more amount of stake, +more chance to be chosen) when a validator is chosen +it proposes a block and announces it to other nodes to be validated, +when a supermajority of validators accept the block it’s going to be committed.

+ +

In this system, validators have no incentive to behave maliciously or dishonestly. +If they do, they risk losing the stake amount.

+ +

More amount of validators in a PoS Blockchain makes it more secure, +decentralized, and trustable, but it also makes the validation and consensus process slower and more difficult.

+ +

Ethereum uses this model.

+ +

DPoS (Delegated Proof of Stake)

+ +

DPoS or Delegated Proof of Stake, is a variant of the PoS consensus algorithm. +users entrust their stakes to a small group of “delegates”. +These delegates are responsible for validating transactions +and creating blocks. The number of delegates is limited +to ensure accountability and efficiency in the validation process.

+ +

Some Blockchains like Cardano and Tron use DPoS.

+ +

DPoS tries to solve the issue of PoS which when validators +increase we have an inefficient validation process. but the main issue with DPoS itself is putting a lot +of trust in the hands of a small number of delegates, +which goes against the principle of “don’t trust, verify”.

+ +

SSPoS (Solid State Proof of Stake)

+ +

BUT, HOW ABOUT SSPoS? HOW ABOUT PACTUS?

+ +

In Pactus Blockchain, we have something called Solid State Proof of Stake +and we try to fix the previous model’s issue, let me explain.

+ +

Pactus uses a dynamic committee of validators with a fixed size of 51, +but the members of the committee randomly change in each round, +based on stake amount the chance of being chosen is higher. on the other hand, +the number of validators out on the committee is unlimited, allowing anyone +to become a validator by staking coins.

+ +

At each block, validators participate in a sortition algorithm by generating a random number +between zero and the total staked coins. If the number is less +than the validator’s stake, they can enter the committee and replace the oldest committee member.

+ +

So, in SSPoS models which are a variant of PoS, we can reach a consensus, +without using high computation resources, having an inefficient +validation process by increasing validator numbers, +and also without breaking the principle of “don’t trust, verify”.

+ + + + +
+
+
+
+ + + + diff --git a/2023/10/15/release-0-15-0.html b/2023/10/15/release-0-15-0.html new file mode 100644 index 000000000..84e1dc151 --- /dev/null +++ b/2023/10/15/release-0-15-0.html @@ -0,0 +1,546 @@ + + + + + + + + + + + + + Pactus 0.15.0 released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.15.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.15.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Splash screen

+ +

Download

+ +

This version is the bootstrap version for +Testnet-2. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +
+ If you participated in Testnet-1, ensure to delete your previous working directory and + create a new wallet. +

+ By default, the working directory is located at "C:\Users\<name>\pactus" on Windows, + or "~/pactus" on Unix-compatible platforms. +
+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gui: adding the splash screen (#743)
  • +
  • add absentees votes to the certificate (#746)
  • +
  • logger: short stringer for loggers (#732)
  • +
  • implementing pip-7 (#731)
  • +
  • implementing pip-11 (#712)
  • +
  • implementing pip-8 (#711)
  • +
  • implementing pip-9 (#706)
  • +
  • new API to get Public key by address (#704)
  • +
  • Adding address field for AccountInfo (#703)
  • +
  • CreateValidatorEvent and CreateAccountEvent for nanomsg (#702)
  • +
  • implementing PIP-2 and PIP-3 (#699)
  • +
  • Adding Hole Punching to network (#697)
  • +
  • write logs into file (#673)
  • +
  • check protocol support before sending connect/disconnect event (#683)
  • +
  • updating genesis for pre-testnet-2 (#679)
  • +
  • adding udp protocol for network (#672)
  • +
  • implementing pip-4 (#671)
  • +
  • Notifee service events (#628)
  • +
  • adding MinimumStake parameter (#574)
  • +
  • adding Sent and Received bytes per message metrics for peers (#618)
  • +
  • add reason to BlockResponse messages (#607)
  • +
  • Add CalcualteFee in GRPC (#601)
  • +
  • add sent bytes and received bytes metrics to peerset plus update grpc (#606)
  • +
  • added metrics of libp2p with supporting prometheus (#588)
  • +
  • Check node address is valid (#565)
  • +
  • add LastSent and LastReceived properties to peer (#569)
  • +
+ +

Fix

+ +
    +
  • data race issue on updating certificate (#747)
  • +
  • network: async connection (#744)
  • +
  • adding query vote timer for CP phase (#738)
  • +
  • trim transactions in proposed block (#737)
  • +
  • fixing query votes and proposal issue (#736)
  • +
  • fixing issue when a block has max transactions (#735)
  • +
  • consensus: anti-entroy mechanism for the consensus (#734)
  • +
  • logger: invalid level parsing error (#733)
  • +
  • cache certificate by height (#730)
  • +
  • fixing a crash on consensus (#729)
  • +
  • consensus: prevent double entry in new height (#728)
  • +
  • resolve consensus halt caused by time discrepancy in network. (#727)
  • +
  • unsorted addresses in wallet listing (#721)
  • +
  • send query votes message, if there is no proposal yet (#723)
  • +
  • fixing logger level issue (#722)
  • +
  • fixing syncing stuck issue (#720)
  • +
  • fixing some minor issues on pre-testnet (#719)
  • +
  • supporting go version 1.21 and higher (#692)
  • +
  • ensure log rotation using tests (#693)
  • +
  • restoring at the first block (#691)
  • +
  • swagger doesn’t work with multiple proto files (#687)
  • +
  • fixing wallet-cli issues (#686)
  • +
  • prevent stripping public key for subsidy transactions (#678)
  • +
  • updating the consensus protocol (#668)
  • +
  • aggregating signature for hello message (#640)
  • +
  • error case for logger (#634)
  • +
  • adding committers to the certificate (#623)
  • +
  • updating sortition executor (#608)
  • +
  • update buf and fixing proto generation issue (#600)
  • +
  • adding block hash to peer (#584)
  • +
  • copy to clipboard option for address and pubkey (#583)
  • +
  • public key aggregate (#576)
  • +
  • remove GetValidators rpc method (#573)
  • +
  • missing swagger ui for grpc get account by number (#564)
  • +
  • incorrect handler for validator by number (#563)
  • +
+ +

Refactor

+ +
    +
  • sync: refactoring syncing process (#676)
  • +
  • remove payload prefix from payload transaction type (#669)
  • +
  • change Hello message from broadcasting to direct messaging (#665)
  • +
  • committee: using generic list for validators (#667)
  • +
  • rename SanityCheck to BasicCheck (#643)
  • +
  • cli: Migrating from mow.cli to cobra for wallet (#629)
  • +
  • cli: replacing mow.cli with cobra for daemon (#621)
  • +
  • logger: using fast JSON logger (zerolog) (#613)
  • +
  • Using Generics for calculating Min and Max for numeric type #604 (#609)
  • +
  • Updating LRU cache to version 2 #514 (#602)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2023/10/15/testnet-2-launched.html b/2023/10/15/testnet-2-launched.html new file mode 100644 index 000000000..b35fb7c76 --- /dev/null +++ b/2023/10/15/testnet-2-launched.html @@ -0,0 +1,470 @@ + + + + + + + + + + + + + Testnet-2 launch announcement | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Testnet-2 launch announcement

+ +

Overview

+ +

Exciting news for the Pactus Community: Testnet-2 is has launched! +The journey through Testnet-1 +brought success and invaluable experiences, with over 500 validators joining the network. +Despite its noteworthy achievements, it also faced challenges that led to a tough decision: to pause the Testnet and +thoroughly address these issues. +After two months of dedicated work and testing, many problems have been resolved, and +we feel confident launching the Testnet again. +Testnet-2 comes with substantial improvements compared to its predecessor by enhancing the core of the Pactus Blockchain. +Notably, the new consensus mechanism and improved overall network performance.

+ +

At this point, we want to assure the Pactus community that this version of +the Testnet will not stop until the mainnet launches, +and our main focus is on improving its overall performance and launching the Mainnet.

+ +

If you’re new to the concept of Testnet, check out our informative post: +What is the Testnet?

+ +

Key Focus Areas

+ +

Testnet-2 has important tasks ahead. +Firstly, we aim to confirm that the new consensus mechanism is both safe and efficient. +A close eye will be kept on the network’s performance, ensuring it operates as expected. +For Testnet-2, the committee +size has been expanded to 51 members. +Both the committee’s performance and block production will be closely monitored. +The goal is a blockchain that remains stable and trustworthy, +even with thousands of validators in the network, +ensuring it manages its regular duties seamlessly.

+ +

How To Join

+ +

Want to join the Testnet-2? Great! It’s super easy. +Just download the latest Pactus software and you’re good to go. +no fancy setups or special gear needed. +You can run the software straight from your personal computer or laptop. +Need some test coins? Pop over to our Discord channel and share your validator address there.

+ +

Benefits for Participation

+ +

By taking part in the Testnet, users can familiarize themselves with the Pactus blockchain and +be well-prepared for the Mainnet launch. +Testnet participants will also receive higher priority during the Mainnet launch and +get free coins for initial staking on the Mainnet.

+ +

Your Feedback Matters

+ +

User feedback plays a vital role in the improvement of the Pactus blockchain. +Share your thoughts and experiences to contribute to the enhancement of future software versions.

+ + + + +
+
+
+
+ + + + diff --git a/2023/10/29/release-0-16-0.html b/2023/10/29/release-0-16-0.html new file mode 100644 index 000000000..6dd910922 --- /dev/null +++ b/2023/10/29/release-0-16-0.html @@ -0,0 +1,493 @@ + + + + + + + + + + + + + Pactus 0.16.0 Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.16.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.16.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version allows users to create new addresses for both validators and accounts. +The networking module has been improved, and users can now set limits on the number of connections. +A random crash on the agreement protocol has been fixed in this version.

+ +

New address dialog

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gui: display network ID (#780)
  • +
  • create new validator address (CLI and GUI) (#757)
  • +
  • add community bootstrap nodes to testnet config (#764)
  • +
  • network: implementing connection manager (#773)
  • +
  • network: adding bootstrapper mode to the network config (#760)
  • +
+ +

Fix

+ +
    +
  • network: redefine the network limits (#788)
  • +
  • consensus: not increase the vote-box power on duplicated votes (#785)
  • +
  • network: close connection when unable to get supported protocols (#781)
  • +
  • network: enabling peer exchange for bootstrappers (#779)
  • +
  • network: set connection limit for the resource manager (#775)
  • +
  • sync: peer status set to known on sucessfull handshaking (#774)
  • +
  • consensus: strong termination for the binary agreement (#765)
  • +
  • consensus: not increase the voting power on duplicated binary votes (#762)
  • +
+ +

Refactor

+ +
    +
  • network: refactoring peer manager (#787)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2023/11/12/release-0-17-0.html b/2023/11/12/release-0-17-0.html new file mode 100644 index 000000000..c17ada713 --- /dev/null +++ b/2023/11/12/release-0-17-0.html @@ -0,0 +1,502 @@ + + + + + + + + + + + + + Pactus 0.17.0 Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.17.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.17.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

The Testnet has been upgraded and all validators must update their nodes.

+ +

This version will address major networking issues, reduce network usage, and improve overall performance.

+ +

A new node type, “Node Gossips”, has been introduced to help broadcast and spread messages across the network. +Node Gossips support the network by delivering messages to non-gossiping nodes. +This gossip option is disabled by default but can be enabled in the configuration file. +If you are running Pactus on a stable and reliable server, we recommend enabling this option for your node. +Please note that this option is still experimental and subject to potential changes in future releases.

+ +

Node gossip in config file

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

+After updating the node, the configuration file will be overwritten with a new version. +You need to make modifications to the config file if you had customized it prior to the update. +

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • network: default configs for bootstrap and relay peers (#812)
  • +
  • introducing node gossip type (#811)
  • +
  • sync: adding remote address to the peer info (#804)
  • +
  • network: adding public address to factory (#795)
  • +
  • network: filter private ips (#793)
  • +
+ +

Fix

+ +
    +
  • upgrading Testnet (#814)
  • +
  • sync: prevent opening sessions indefinitely (#813)
  • +
  • execution: fixing mistake on calculating unbonded power (#806)
  • +
  • network: check connection threshold on gater (#803)
  • +
  • network: no transient connection (#799)
  • +
  • not close connection for bootstrap nodes (#792)
  • +
+ +

Refactor

+ +
    +
  • sync: refactoring sync process (#807)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2023/12/12/release-0-18-0.html b/2023/12/12/release-0-18-0.html new file mode 100644 index 000000000..a6ebf76b0 --- /dev/null +++ b/2023/12/12/release-0-18-0.html @@ -0,0 +1,503 @@ + + + + + + + + + + + + + Pactus 0.18.0 Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.18.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.18.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version has significantly improved the syncing progress. +The syncing process concurrently requests blocks from 8 different peers and +actively connects to the most optimal peers for downloading the blockchain.

+ +

Additionally, users can now import private keys into their wallet and securely encrypt them using their wallet password.

+ +

Breaking change

+ +

For Unix-based systems, please note that the working directory for root users has changed from /pactus to /root/pactus.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

+After you update the node, the configuration file will automatically get updated, keeping the old settings. +If you want to return the configuration file to its default settings, +just delete the current config file and restart the node. +

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement pip-14 (#841)
  • +
  • sort wallet addresses (#836)
  • +
  • grpc: endpoints for creating raw transaction (#838)
  • +
  • network reachability API (#834)
  • +
  • implement pip-13 (#835)
  • +
  • subscribing to libp2p eventbus (#831)
  • +
  • implement helper methods for wallet address path (#830)
  • +
  • logger: adding rotate log file after days, compress and maxgae for logger config (#822)
  • +
  • enable bandwidth router metric (#819)
  • +
+ +

Fix

+ +
    +
  • network: refining the connection limit (#849)
  • +
  • corrected mistake when retrieving the reward address (#848)
  • +
  • config: restore default config when it is deleted (#847)
  • +
  • cmd: changing home directory for root users (#846)
  • +
  • removing BasicCheck for hash (#845)
  • +
  • disabling libp2p ping protocol (#844)
  • +
  • build docker file (#839)
  • +
  • sync: ignore publishing a block if it is received before (#829)
  • +
  • network: subscribing to the Libp2p event bus (#828)
  • +
  • sync: ignore block request if blocks are already inside the cache (#817)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/01/04/release-0-19-0.html b/2024/01/04/release-0-19-0.html new file mode 100644 index 000000000..4ec0cf530 --- /dev/null +++ b/2024/01/04/release-0-19-0.html @@ -0,0 +1,507 @@ + + + + + + + + + + + + + Pactus 0.19.0 Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.19.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.19.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version has improved the overall performance of the blockchain by implementing +PIP-15. +PIP-15 suggests to add caching algorithms to the database for the most frequently used items.

+ +

Additionally, this version has enhanced the connectivity of the nodes in the P2P network.

+ +

Availability Score

+ +

This version comes with the implementation of PIP-19. +PIP-19 suggests assigning the “Availability Score” to each validator based on their activities in the +committee. +Validators with a score less than 0.8 won’t receive the block reward, +as their proposals will be rejected by other validators. +The main reason behind this PIP is to prevent users from downgrading +their node specifications and running Pactus on machines with low resources.

+ +

Breaking change

+ +

The Docker container now contains both daemon and wallet binary files. +Users who use Docker to run Pacts now need to add the entry point to run Pactus.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gRPC: defining network and peers info response’s properly (#898)
  • +
  • implementing pip-19 (#899)
  • +
  • network: disabling GosipSub, only FloodSub (#895)
  • +
  • www: adding change proposer round and value to consensus info votes (#892)
  • +
  • network: adding relay service to dial relay nodes (#887)
  • +
  • implementing pip-15 (#843)
  • +
  • check already running by lock file (#871)
  • +
+ +

Fix

+ +
    +
  • store: use cache to check if public key exists (#902)
  • +
  • executor: not rejecting bond transaction for bootstrap validator (#901)
  • +
  • GUI: removing unnecessary tags in transaction confirm dialog (#893)
  • +
  • network: close relay connection for public node (#891)
  • +
  • network: refining GossipSubParams for Gossiper node (#882)
  • +
  • sync: adding sequence number to the bundle (#881)
  • +
  • network: turn off mesh for gossiper node (#880)
  • +
  • consensus: check voteset for CP strong termination (#879)
  • +
  • adding querier to query messages (#878)
  • +
  • execution: fixing issue #869 (#870)
  • +
  • fixing logger issue on rotating log file (#859)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/01/08/mainnet-announcement.html b/2024/01/08/mainnet-announcement.html new file mode 100644 index 000000000..e63054836 --- /dev/null +++ b/2024/01/08/mainnet-announcement.html @@ -0,0 +1,439 @@ + + + + + + + + + + + + + Mainnet announcement | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Mainnet announcement

+ +

The much-awaited Mainnet Launch of The Pactus Blockchain is finally here! +On January 24, 2024, at 20:24:00 UTC, the first block, known as the Genesis block, +will be minted by four Bootstrap validators. +After that, every 10 seconds, a new block will be added to the blockchain. +Each block contains the committed transactions in the network. +The block finality in the Pactus blockchain is immediate. +It means that there is no need to wait for block confirmation to ensure a transaction is committed.

+ +

Later, more than 2000 community validators will secure the blockchain and make it decentralized. +These validators are Testnet participants who helped test Pactus during our testing period. +The community validators will receive the initial staking coins from a Discord Bot named RoboPac.

+ +

To ensure everything works smoothly on the Mainnet, three different Testnets ( +Testnet0, +Testnet1, and +Testnet2) have been run.

+ +

The Mainnet will never be stopped or interrupted by the core developers of Pactus, +and validators should primarily participate in and maintain the security of the blockchain.

+ + + + +
+
+
+
+ + + + diff --git a/2024/01/11/release-0-20-0.html b/2024/01/11/release-0-20-0.html new file mode 100644 index 000000000..477513d5a --- /dev/null +++ b/2024/01/11/release-0-20-0.html @@ -0,0 +1,504 @@ + + + + + + + + + + + + + Pactus 0.20.0 Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.20.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.20.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

Validator Stake Management

+ +

The new GUI application enables users to easily Unbond and Withdraw their validator’s stake.

+ +

Withdraw dialog

+ +

Improving Network Connectivity

+ +

Some users have reported that UDP packets are being dropped by their Internet Service Providers. +Therefore, the UDP protocol is disabled by default. +Users can still activate the UDP protocol by configuring the settings in the file if necessary.

+ +

Also, the experimental Node Gossip feature has been removed in this version. +Node gossip could cause some validators to become isolated from the rest of the network.

+ +

Relay service

+ +

This version enables users to turn their node into a relay service. +A relay service node can help users behind NAT to communicate with each other. +It is disabled by default and can be enabled inside the config file. +Please note that it is still in an experimental state.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement relay service (#931)
  • +
  • HTTP: Integrate AddRowDouble and update tests (#926)
  • +
  • network: making listen address private in config (#921)
  • +
  • http: adding AvailabilityScore to http module (#917)
  • +
  • network: adding ‘enable_udp’ config (#918)
  • +
  • network: removing gossip node service (#916)
  • +
  • gRPC: adding AvailabilityScore to gRPC (#910)
  • +
  • GUI: unbond and withdraw transaction dialogs (#908)
  • +
+ +

Fix

+ +
    +
  • gRPC: adding missing get raw transaction APIs to gRPC gateway (#925)
  • +
  • network: preventing self dial (#924)
  • +
  • fixing time lag on starting node (#923)
  • +
  • network: fixing network deadlock on linux arm64 (#922)
  • +
  • GUI: updating unbond and withdraw dialogs (#911)
  • +
  • fixing gRPC node info issue (#906)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/01/22/testnet-2-concluded.html b/2024/01/22/testnet-2-concluded.html new file mode 100644 index 000000000..31b9b4207 --- /dev/null +++ b/2024/01/22/testnet-2-concluded.html @@ -0,0 +1,487 @@ + + + + + + + + + + + + + Story of Testnet-2 | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Story of Testnet-2

+ +

What is Testnet?

+ +

Testnet is a testing environment where developers and users can try out the functionality of a blockchain project, +without putting real assets or data at risk. +It helps to ensure that the final product is reliable and secure for users to use. +If you like to read more about the Testnet you can check out our post on +“What is Testnet?”.

+ +

Summary

+ +

In October 2023, we launched Testnet-2. +The main purpose of this Testnet was to closely monitor the new consensus mechanism and the stability of the P2P network.

+ +

The committee for Testnet-2 was set to 51 validators, +and 2084 validators joined during the Testnet period. +More than 1500 computers and servers joined the network, and we experienced a high volume of data transmission in the network. +More than 800,000 blocks were created, and about 2 million transactions were processed during this time. +The size of the blockchain is about 450 megabytes.

+ +

About 500,000 coins were staked during this period, almost 60% of the total generated coins. +It shows that users, even in Testnet, tend to stake their coins.

+ +

Stability of Consensus

+ +

In Testnet-1, we had one consensus failure that caused us to +conclude the Testnet-1. +During Testnet-2, there were no issues with the consensus mechanism, and +we had no case of failure during the testing period, +although the number of validators and nodes significantly increased on Testnet-2 compared to its predecessor. +It proved that the consensus mechanism is in a stable situation.

+ +

Networking issues

+ +

In Testnet-2, the blockchain stopped twice, and each time it took more than 24 hours to fix the problem. +In the second blockage, we had no choice but to ask active validators inside the committee to +update their nodes to overcome the networking issue. +The development team faced a difficult situation and had to make the proper decision to fix the networking issues. +On one hand, the networking traffic increased significantly, and on the other hand, we had to +make sure normal users with limited internet bandwidth could still participate in the consensus mechanism without any problems. +After examining different scenarios, the networking issues were resolved, and +no major problems were reported till the end of Testnet.

+ +

Major updates

+ +

During Testnet-2, we introduced several updates, including versions +0.15.0, +0.16.0, +0.17.0, +0.18.0, +0.19.0, and +0.20.0. +The update process went smoothly, and with the stability of Version 0.20.0 confirmed, +the development team shifted its focus to the Mainnet launch.

+ +

Special thanks to the community

+ +

This Testnet was important for us. +It helped us learn what we need to do to make Pactus work even better. +Without the community that supports us and dedicates their time and resources to testing and feedback, +we wouldn’t have been able to progress as we have.

+ +

We thank all of them for their valuable contributions. +As promised, participants in Testnets will be given priority as validators for the MainNet, and +will receive bounty PAC coins to set up their validators.

+ +

We are grateful to all those who participated in Testnets, and we encourage them to join the Mainnet. +As a community-based project, we rely on the support of our community members, and we value any help we receive.

+ + + + +
+
+
+
+ + + + diff --git a/2024/01/24/mainnet-launched.html b/2024/01/24/mainnet-launched.html new file mode 100644 index 000000000..73a304a69 --- /dev/null +++ b/2024/01/24/mainnet-launched.html @@ -0,0 +1,477 @@ + + + + + + + + + + + + + Mainnet launched 🚀 | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Mainnet launched 🚀

+ +

Years to Launch

+ +

Pactus Mainnet started creating the first block on 24 January 2024 at 20:24:10 UTC time. +Pactus Mainnet is the result of years of hard work, research, and innovation. +It started from one idea:

+ +

A low-cost, truly decentralized blockchain, built by the people for the people, +where anyone could run and be their own validator.

+ +

We faced many challenges and obstacles along the way, but we never gave up.
+We overcame them with our determination and perseverance.
+We learned from our mistakes and improved our solutions.
+We grew from a small team to a large community.
+We achieved many milestones and breakthroughs. And we did it.
+We created Pactus, the platform that empowers you.

+ +

Thanks to Community

+ +

We want to thank Pactus community for helping us on the Testnet.

+ +

You have been instrumental in testing and improving the Testnet.
+You have given us your honest feedback and constructive suggestions.
+You have reported and help fixed bugs and errors.
+You have challenged and pushed us to do better.
+You have been our partners and friends in this journey.

+ +

On the Road

+ +

The true journey has just started.
+The Mainnet is not the end, but the beginning.
+The beginning of a new era of blockchain innovation.
+The beginning of a new challenge and opportunity.
+The beginning of a new revolution and evolution!

+ +

We welcome you more than ever.
+We need you to join us in this exciting adventure.
+We need you to support us in this ambitious endeavor.
+We need you to be part of Pactus, the platform that empowers you!

+ +

We Have a Dream

+ +

We have a dream.
+A dream of a world where blockchain technology is not a privilege, but a right for everyone.
+A dream of a world where smart contracts and decentralized applications are fast, secure, and scalable.
+A dream of a world where Pactus is the platform that empowers you.

+ +

This dream is not just ours. It is yours too.
+You share our vision and passion for blockchain innovation.
+You believe in our potential and impact.
+You support our goals and values.
+You are part of our dream.

+ +

And this dream is not just a fantasy. It is a reality.
+A reality that we have created together.
+A reality that we have launched today. A reality that we can explore and enjoy together.
+A reality that we can shape and improve together.
+A reality that we can make better and brighter together!

+ + + + +
+
+
+
+ + + + diff --git a/2024/01/31/release-1-0-0.html b/2024/01/31/release-1-0-0.html new file mode 100644 index 000000000..e67d7aa9d --- /dev/null +++ b/2024/01/31/release-1-0-0.html @@ -0,0 +1,492 @@ + + + + + + + + + + + + + Pactus 1.0.0 (Beijing) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.0.0 (Beijing) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.0.0 (Beijing) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Pactus Version 1.0.0 (Beijing)

+ +

Highlights

+ +

Mainnet Official Release v1.0.0 (Beijing)

+ +

The much-anticipated official software release of Pactus v1.0.0 (Beijing) marks a significant milestone +for our community. +This impressive mainnet release represents the culmination of extensive development efforts. +Pactus v1.0.0 (Beijing) offers a pioneering solution for streamlining the validation of Pactus blockchain, +enhancing security, and providing a user-friendly experience. We’re excited to unveil the official software +and welcome users to experience the power of Pactus in revolutionizing the future of blockchain. Join us on +this exciting journey.

+ +

Onboarding validators

+ +

On February 1st, a total of 53,494 PAC coins will be distributed among 1,311 validators who participated in +Testnet-0, +Testnet-1, and +Testnet-2. +This marks the beginning of a new chapter in the decentralized world.

+ +

Download

+ +

This version has been implemented for Mainnet +To start using Pactus Mainnet, download the latest version from the download +page and join the Mainnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement get validator address for grpc (#975)
  • +
  • add bootstrap.json and load in config on build (#964)
  • +
  • add mainnet config and genesis files (#951)
  • +
  • add Consensus-address to network info (#952)
  • +
  • grpc: sign transaction using wallet client (#945)
  • +
  • pactus gui lock support (#947)
  • +
  • consensus: turning consensus to a zero-config module (#942)
  • +
+ +

Fix

+ +
    +
  • localnet wallet issue (#970)
  • +
  • sync: remove ReachabilityStatus from agent info (#956)
  • +
  • daemon: keeping previous behavior for password flag, linting CLI messages (#950)
  • +
  • consensus: detect if the system time is behind the network (#939)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/02/10/release-1-0-1.html b/2024/02/10/release-1-0-1.html new file mode 100644 index 000000000..7a8c1f01c --- /dev/null +++ b/2024/02/10/release-1-0-1.html @@ -0,0 +1,472 @@ + + + + + + + + + + + + + Pactus 1.0.1 (Beijing) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.0.1 (Beijing) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.0.1 (Beijing) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

This release is named after the city of Beijing and it +was unanimously selected by Pactus community.

+ +

Pactus Version 1.0.1 (Beijing)

+ +

Highlights

+ +

This update fixes several issues identified after the release of +1.0.0 (Beijing). +Specifically, it fixes the missed log file on the Windows GUI application and improves the node connectivity.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gui: add connections and moniker fields to main windows (#1090)
  • +
+ +

Fix

+ +
    +
  • network: set dial and accept limit in connection gater (#1089)
  • +
  • gui stderr logger in windows os (#1081)
  • +
  • sync: improve syncing process (#1087)
  • +
  • network: redefine resource limits (#1086)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/02/18/release-1-0-2.html b/2024/02/18/release-1-0-2.html new file mode 100644 index 000000000..c33d14e1d --- /dev/null +++ b/2024/02/18/release-1-0-2.html @@ -0,0 +1,463 @@ + + + + + + + + + + + + + Pactus 1.0.2 (Istanbul) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.0.2 (Istanbul) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.0.2 (Istanbul) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

This release is named after the city of Istanbul and it +was unanimously selected by Pactus community.

+ +

Pactus Version 1.0.2 (Istanbul)

+ +

Highlights

+ +

This update fixes a major issue that decreases the number of inbound connections of the nodes over time. +We highly recommend all users to upgrade to the new version for better connectivity.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • sync: fix concurrent map read-write crash (#1112)
  • +
  • network: remove disconnected peers from peerMgr (#1110)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/03/16/testnet-phoenix-launched.html b/2024/03/16/testnet-phoenix-launched.html new file mode 100644 index 000000000..059a9d1be --- /dev/null +++ b/2024/03/16/testnet-phoenix-launched.html @@ -0,0 +1,451 @@ + + + + + + + + + + + + + Pactus Permanent Phoenix Testnet Launched | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus Permanent Phoenix Testnet Launched

+ +

The public and permanent Phoenix Testnet +for the Pactus blockchain has been launched. +This Testnet serves as a valuable platform for developers to thoroughly examine their projects, +providing a safe playground to test and deploy their applications before transitioning to the Mainnet.

+ +

Pactus Public Phoenix Testnet

+ +

All parameters within the Testnet mirror those of the Mainnet, +ensuring a consistent environment for testing and development. +The genesis block for the Testnet is available +here.

+ +

Currently, there are four active nodes running the Testnet, accessible at the following addresses:

+ +
    +
  • testnet1.pactus.org
  • +
  • testnet2.pactus.org
  • +
  • testnet3.pactus.org
  • +
  • testnet4.pactus.org
  • +
+ +

The Testnet’s name, Phoenix, was chosen by the Pactus community from various suggestions. +It embodies the spirit of rebirth and renewal, highlighting the innovative and testing-focused nature of the network. +Developers can utilize the RoboPAC as a faucet to receive test coins and +thoroughly test their applications within this environment. +It’s important to note that the coins within this Testnet hold no monetary value and are only meant for testing purpose.

+ +

All addresses within the Phoenix network are prefixed with tpc1..., +distinguishing them from Mainnet addresses that start with pc1...’. +This clear differentiation streamlines development and ensures seamless integration when transitioning to +the Mainnet environment.

+ + + + +
+
+
+
+ + + + diff --git a/2024/04/14/release-1-1-0.html b/2024/04/14/release-1-1-0.html new file mode 100644 index 000000000..31dc251ee --- /dev/null +++ b/2024/04/14/release-1-1-0.html @@ -0,0 +1,556 @@ + + + + + + + + + + + + + Pactus 1.1.0 (Hanoi) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.0 (Hanoi) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.0 (Hanoi) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Hanoi, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.0 (Hanoi)

+ +

Highlights

+ +

This update brings some changes that are not compatible with the earlier version. +Here are the key points:

+ +
    +
  1. Fee calculations are now rounded, and fees can be accepted within a range of one NanaoPAC (see #1174).
  2. +
  3. Small bonds for existing validators are now accepted (see #1152).
  4. +
+ +

Validators must update their nodes to this version as soon as possible.

+ +

Other major changes in this version include:

+ +
    +
  • The addition of a JSON-RPC endpoint required by third parties like exchanges to connect to Pactus nodes.
  • +
  • The implementation of Pactus Shell tools, allowing users to query the node.
  • +
+ +

Additionally, this version improves the syncing process for new nodes, enhances the GUI, and addresses several issues.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gRPC: add get address history method (#1206)
  • +
  • grpc: Add GetNewAddress/GetTotalBalance endpoint to gateway (#1197)
  • +
  • GUI: adding total balance to wallet widget (#1194)
  • +
  • Add GetNewAddress gRPC API (#1193)
  • +
  • gRPC: add new API to get the total balance of wallet (#1190)
  • +
  • GUI: showing transaction hash after broadcasting transaction (#1187)
  • +
  • add jsonrpc gateway support (#1183)
  • +
  • config: one reward address in config for all validators (#1178)
  • +
  • GUI: memo field for transactions on GUI wallet (#1182)
  • +
  • implement basic auth for pactus shell (#1177)
  • +
  • grpc: add rust code gen for proto (#1151)
  • +
  • testnet: define permanent Testent genesis (#1173)
  • +
  • add basic auth authentication for securing grpc (#1162)
  • +
  • grpc: calculate fee for create-raw-transaction APIs (#1159)
  • +
  • grpc: add fixed-amount to calc-fee API (#1146)
  • +
  • wallet: adding all account address functions (#1128)
  • +
  • grpc: update swagger API to version 1.1 (#1106)
  • +
  • GUI: adding availability score in wallet (#1118)
  • +
  • logger: adding log target (#1122)
  • +
  • logger: adding file_only option (#1117)
  • +
  • gui: add connections and moniker fields to main windows (#1090)
  • +
  • implementation for PIP-22 (#1067)
  • +
  • generate documentation for proto files (#1064)
  • +
  • pactus-ctl (#946)
  • +
+ +

Fix

+ +
    +
  • gRPC: add basic auth option in header (#1217)
  • +
  • gRPC: not return block data on information verbosity (#1212)
  • +
  • wallet: fix wallet conn issue (#1211)
  • +
  • GUI: update total balance on wallet timeout (#1204)
  • +
  • accept small bond to existing validator (#1152)
  • +
  • GUI: make transaction hash selactable (#1196)
  • +
  • close connections with peers that have no supported protocol (#1181)
  • +
  • sync: check the start block request height (#1176)
  • +
  • config: load logger levels in Mainnet config (#1168)
  • +
  • gRPC: pactus swagger not found (#1163)
  • +
  • add error type for invalid configs (#1153)
  • +
  • save Mainnet config with inline comments (#1143)
  • +
  • network: set deadline for streams (#1149)
  • +
  • grpc: fix error 404 on grpc gateway (#1144)
  • +
  • wallet: checking args in history add (#1141)
  • +
  • gRPC: adding sign raw transaction API to gateway (#1116)
  • +
  • sync: fix concurrent map read-write crash (#1112)
  • +
  • network: remove disconnected peers from peerMgr (#1110)
  • +
  • network: set dial and accept limit in connection gater (#1089)
  • +
  • stderr logger in windows os (#1081)
  • +
  • sync: improve syncing process (#1087)
  • +
  • network: redefine resource limits (#1086)
  • +
+ +

Refactor

+ +
    +
  • sync: improve syncing process (#1207)
  • +
  • move fee calculation logic to execution package (#1195)
  • +
  • introduce Amount data type for converting PAC units (#1174)
  • +
  • using PAC instead of atomic units for external input/outputs (#1161)
  • +
  • change func() to cancel func type (#1142)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/04/18/release-1-1-1.html b/2024/04/18/release-1-1-1.html new file mode 100644 index 000000000..9f26a324f --- /dev/null +++ b/2024/04/18/release-1-1-1.html @@ -0,0 +1,491 @@ + + + + + + + + + + + + + Pactus 1.1.1 (Jakarta) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.1 (Jakarta) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.1 (Jakarta) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Jakarta, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.1 (Jakarta)

+ +

Highlights

+ +

This update fixes the issue of zero-bonding +that identified after the release of 1.1.0 (Hanoi). +This fix will be applied at block height 740,000 to ensure a smooth upgrade.

+ +

Additionally, this version rejects connections from nodes version 1.0.2 and earlier.

+ +

Validators must update their nodes to this version as soon as possible.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • reject direct message from non-supporting agents (#1225)
  • +
+ +

Fix

+ +
    +
  • prevent zero stake for bond transactions (#1227)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/04/25/release-1-1-3.html b/2024/04/25/release-1-1-3.html new file mode 100644 index 000000000..8f3e7090c --- /dev/null +++ b/2024/04/25/release-1-1-3.html @@ -0,0 +1,495 @@ + + + + + + + + + + + + + Pactus 1.1.3 (Kuala Lumpur) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.3 (Kuala Lumpur) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.3 (Kuala Lumpur) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Kuala Lumpur, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.3 (Kuala Lumpur)

+ +

Highlights

+ +

This version prevents spamming transactions by defining a minimum value per transaction. +It is not part of the consensus parameters, +and each node can set its own threshold. +By default, it is set to 0.1 PAC.

+ +

The version also bans validators that were part of the recent spam attack on the network. +Their stake will be frozen at block 820,000.

+ +

Validators must update their nodes to this version as soon as possible.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • ban attacker validators (#1235)
  • +
  • txpool: prevent spamming transactions by defining a minimum value (#1233)
  • +
+ +

Fix

+ +
    +
  • wallet: saving wallet file after generating new address in gRPC (#1236)
  • +
  • network: disconnect from peers that has no protocol (#1243)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/05/07/release-1-1-4.html b/2024/05/07/release-1-1-4.html new file mode 100644 index 000000000..d1d66db85 --- /dev/null +++ b/2024/05/07/release-1-1-4.html @@ -0,0 +1,484 @@ + + + + + + + + + + + + + Pactus 1.1.4 (London) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.4 (London) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.4 (London) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.1.4 (London)

+ +

Highlights

+ +

This version fixes some issues related to the syncing process and improves the connectivity of the nodes.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • network: set infinite limit for resource manager (#1261)
  • +
  • sync: introduce session manager (#1257)
  • +
  • HTTP: using amount type for fee in transaction details (#1255)
  • +
+ +

Refactor

+ +
    +
  • network: refactor peer manager and redefine the min cons (#1259)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/05/30/release-1-1-5.html b/2024/05/30/release-1-1-5.html new file mode 100644 index 000000000..12885ae45 --- /dev/null +++ b/2024/05/30/release-1-1-5.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + Pactus 1.1.5 (Cape Town) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.5 (Cape Town) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.5 (Cape Town) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

Rate limit

+ +

This version applies a rate limit to the messages in the general topics including blocks and transactions. +This will help nodes to manage the network traffic in times of network congestion or spam attacks.

+ +

Dynamic fee

+ +

To prevent attackers from sending spam transactions, a dynamic fee model is introduced in this patch. +Each node can define a minimum fee that is defaulted to 0.000001 PAC. +However, if the transaction pool becomes full, the transaction fee can increase up to 1 PAC.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • add dynamic fee (#1290)
  • +
  • network: define config for rate limit threshold (#1284)
  • +
  • network: ratelimit gossip for prevent spamming (#1283)
  • +
+ +

Fix

+ +
    +
  • change CalculateFee to be backward compatible (#1291)
  • +
  • proposal basic checks deferred to consensus (#1288)
  • +
  • rejected spam tx for same from and to (#1287)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/05/31/release-1-1-6.html b/2024/05/31/release-1-1-6.html new file mode 100644 index 000000000..71b75ae46 --- /dev/null +++ b/2024/05/31/release-1-1-6.html @@ -0,0 +1,483 @@ + + + + + + + + + + + + + Pactus 1.1.6 (Ottawa) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.6 (Ottawa) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.6 (Ottawa) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

This version updates the consensus mechanism to move to new rounds once +a proper and justified “Decided” vote seen by a non-faulty validator. +This helps ensure that the consensus mechanism stays in sync with the network when the validator restarts.

+ +

In this version, the minimum availability score is set to 0.6666. +This change will help validators receive rewards even in faulty network conditions, +ensuring that they can continue to participate in the consensus mechanism.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • consensus: move to new round on decided vote (#1293)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/06/02/release-1-1-7.html b/2024/06/02/release-1-1-7.html new file mode 100644 index 000000000..92f668694 --- /dev/null +++ b/2024/06/02/release-1-1-7.html @@ -0,0 +1,500 @@ + + + + + + + + + + + + + Pactus 1.1.7 (Santiago) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.7 (Santiago) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.7 (Santiago) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

Here are the key improvements in this version:

+ +
    +
  • +

    Resolves critical issue in consensus: +This version addresses a critical issue in consensus that prevents broadcasting expired proposals across the network.

    +
  • +
  • +

    Improved network security: +The version defines a list of blacklisted IPs and disconnects from them, enhancing network security.

    +
  • +
  • +

    Node compatibility: +This version only connects to nodes with version 1.1.6 or above, ensuring compatibility with the latest software.

    +
  • +
+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • network: add firewall black list ips to banning when connecting to peer (#1298)
  • +
+ +

Fix

+ +
    +
  • sync: load black listed addresses from the config (#1301)
  • +
  • consensus: only proposer responds to the query proposal (#1300)
  • +
  • network: set latest support version to 1.1.6 (#1299)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/06/02/release-1-1-8.html b/2024/06/02/release-1-1-8.html new file mode 100644 index 000000000..281ab6b91 --- /dev/null +++ b/2024/06/02/release-1-1-8.html @@ -0,0 +1,494 @@ + + + + + + + + + + + + + Pactus 1.1.8 (Budapest) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.8 (Budapest) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.8 (Budapest) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.1.8 (Budapest)

+ +

Highlights

+ +

This version aims to reduce the consensus message once there is a delay on block creation. +It also defines a fixed fee of 0.1 PAC for transactions. +This fixed fee will be replaced by a dynamic fee in future releases, +which will provide more flexibility and efficiency.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • firewall: define rate limit for network topics (#1308)
  • +
+ +

Fix

+ +
    +
  • set fix fee 0.1 PAC for transactions (#1315)
  • +
  • consensus: add round to query proposal message (#1314)
  • +
  • firewall: block peer base on blacklisted CIDR (#1309)
  • +
  • consensus: reduce ChangeProposerTimeout to 6 seconds (#1311)
  • +
  • sync: define rate limit for query vote and proposal (#1310)
  • +
  • decrease to 100 maximum transaction per block (#1306)
  • +
  • consume message first then ignore on ratelimit (#1304)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/06/20/release-1-2-0.html b/2024/06/20/release-1-2-0.html new file mode 100644 index 000000000..551b969dd --- /dev/null +++ b/2024/06/20/release-1-2-0.html @@ -0,0 +1,538 @@ + + + + + + + + + + + + + Pactus 1.2.0 (Sydney) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.2.0 (Sydney) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.2.0 (Sydney) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.2.0 (Sydney)

+ +

Highlights

+ +

This version includes some improvements and new features, such as:

+ +
    +
  • Clock offset calculation: Adding clock offset check to +alert the user if their machine’s time is not synced with the network. +See PIP-18: Clock Offset Calculation.
  • +
  • Minimum fee: The minimum fee is configurable in this version, with the default set to 0.01. +Each validator can decide the minimum fee of transactions they want to include in the block +by changing the min_fee value inside the config file.
  • +
  • ip blocker: A new option allows nodes to block certain IPs and disconnect from them.
  • +
  • rate limit: Nodes can set rate limits for incoming messages, including transactions.
  • +
  • wallet manager: The wallet manager allows users to create and manage wallets using gRPC endpoints.
  • +
+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • config: make minimum fee configurable (#1349)
  • +
  • apply rate limit for the network topics (#1332)
  • +
  • add ipblocker package (#1323)
  • +
  • consensus: fast consensus path implementation (#1253)
  • +
  • version: add alias to node version (#1281)
  • +
  • ntp: add ntp util (#1274)
  • +
  • gRPC: add connection info to node info (#1273)
  • +
  • gRPC: add only_connected parameter to getNetworkInfo API (#1264)
  • +
  • grpc: refactor CreateWallet and add RestoreWallet API endpoint (#1256)
  • +
  • add wallet service (#1241)
  • +
  • ban attacker validators (#1235)
  • +
  • txpool: prevent spamming transactions by defining a minimum value (#1233)
  • +
  • reject direct message from non-supporting agents (#1225)
  • +
+ +

Fix

+ +
    +
  • wallet: add public key on get new address (#1350)
  • +
  • sync: add IsBannedAddress check in processing connect event (#1347)
  • +
  • sync: update latest supporting version (#1336)
  • +
  • state: improve node startup by optimizing availability score calculation (#1338)
  • +
  • HTTP: add clock offset and connection info to node-info API (#1334)
  • +
  • grpc: add stacktrace to locate panic (#1333)
  • +
  • consensus: implement PIP-26 (#1331)
  • +
  • grpc: improve grpc server and client (#1330)
  • +
  • util: add more ntp pool (#1328)
  • +
  • jsonrpc: update JSON-RPC Gateway to support headers and improve client registry (#1327)
  • +
  • consensus: improve consensus algorithm (#1329)
  • +
  • txpool: set fix fee of 0.1 PAC for transactions (#1320)
  • +
  • network: add block and transaction topics (#1319)
  • +
  • gRPC: prevent concurrent map iteration and map write (#1279)
  • +
  • api: add swagger schemes (#1270)
  • +
  • network: set infinite limit for resource manager (#1261)
  • +
  • sync: introduce session manager (#1257)
  • +
  • HTTP: using amount type for fee in transaction details (#1255)
  • +
  • network: disconnect from peers that has no protocol (#1243)
  • +
  • wallet: saving wallet file after generating new address in gRPC (#1236)
  • +
  • prevent zero stake for bond transactions (#1227)
  • +
  • set bounding interval for first boudning tx only (#1224)
  • +
+ +

Refactor

+ +
    +
  • wallet: set server address on loading wallet (#1348)
  • +
  • removed deprecated LockWallet and UnLockWallet from WalletService (#1343)
  • +
  • crypto: decode data to point on verification (#1339)
  • +
  • network: define connection info in network proto (#1297)
  • +
  • sync: define peer package (#1271)
  • +
  • network: refactor peer manager and redefine the min cons (#1259)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/2024/06/27/release-1-3-0.html b/2024/06/27/release-1-3-0.html new file mode 100644 index 000000000..003c7b42e --- /dev/null +++ b/2024/06/27/release-1-3-0.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + Pactus 1.3.0 (Warsaw) Released | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.3.0 (Warsaw) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.3.0 (Warsaw) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.3.0 (Warsaw)

+ +

Highlights

+ +

This version fixes an issue that caused some nodes to get stuck for one minutes and +not receive any new messages during that time.

+ +

Breaking Change: gRPC APIs now convert all binary values to hexadecimal strings.

+ +
+ Attention Exchanges and Third-Party Pactus Blockchain Users: +
+
+ After upgrading to this version, be aware that binary data, such as hashes and signatures, + are now formatted as hexadecimal strings. You must update your code to accommodate this change. +
+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • grpc: get txpool content API (#1364)
  • +
  • network: permanent peer store (#1354)
  • +
+ +

Fix

+ +
    +
  • grpc: change bytes type to hex string (#1371)
  • +
  • http: add basic auth middleware for http server (#1372)
  • +
  • network: use goroutines for sending streams (#1365)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/404.html b/404.html new file mode 100644 index 000000000..09932ac03 --- /dev/null +++ b/404.html @@ -0,0 +1,263 @@ + + + + + + + + + + + + + Error 404, Page Not Found | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

404

+ +

Page not found :(

+

The requested page could not be found.

+
+ + + diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..4ad1830d6 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +pactus.org diff --git a/about/faq/index.html b/about/faq/index.html new file mode 100644 index 000000000..e1070f6fe --- /dev/null +++ b/about/faq/index.html @@ -0,0 +1,1435 @@ + + + + + + + + + + + + + FAQ | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
+

FAQ

+

This FAQ (Frequently Asked Questions) page aims to provide helpful information and guidance on common questions and concerns related to Pactus. +

+
+ +
+ + + + + + + + + + + +
+
***
+ +
+ +
+
+
+ + General +
+
+ + +

+ What does "Pactus" mean? +

+
+ + + + + + + The word "Pactus" is of Latin origin and means "to agree together", "contract", or "transact". In English, the term "Pact" is derived from the Latin word "Pactus". + + + +
+ + +

+ Is Pactus a copy of any other blockchain? +

+
+ + + + + + + No, Pactus is not a copy or a derivative of any other blockchain. It is a new and unique blockchain protocol that has been designed from scratch. The consensus mechanism used in Pactus is unique and specifically created to solve the scalability issue of validators in the Proof of Stake blockchains. + + + +
+ + +

+ Did Pactus have an ICO? +

+
+ + + + + + + No, Pactus didn't have any ICO or Initial Coin Offering. + + + +
+ + +

+ Where can I buy Pactus coins? +

+
+ + + + + + + Pactus does not have any pre-sales coins. The only way to obtain Pactus coins at the moment is by installing the Pactus software and actively participating in block validation. By engaging in the network and contributing to block validation, you will be rewarded with Pactus coins. + + + +
+ + +

+ Why was Pactus developed? +

+
+ + + + + + + Pactus was developed with the goal of scaling blockchain without compromising security and decentralization. To achieve this, Pactus utilizes a unique consensus mechanism that enables the creation of blocks in just 10 seconds. Moreover, Pactus was designed to be more accessible to all users, regardless of their technical expertise or financial resources. + + + +
+ + +

+ What problems does Pactus solve that other blockchains don't? +

+
+ + + + + + + Pactus tries to solve several problems faced by other blockchain networks, including:

Scalability: Pactus has a unique consensus mechanism that is specifically designed to address the scalability issue without sacrificing the security and decentralization.

Accessibility: Running a node on Pactus is designed to be more accessible to normal users compared to other blockchains.

Storage cost: Pactus offers a novel storage solution by allowing users to allocate dedicated storage files, reducing storage costs and simplifying the smart contracts. + + + +
+ + +

+ How is Pactus different from Bitcoin? +

+
+ + + + + + + Pactus and Bitcoin are two different types of blockchain networks. While Bitcoin uses a process called "Proof of Work" to secure its network, Pactus uses a different method called "Proof of Stake". This means that instead of mining, validators are responsible for voting on incoming blocks and must hold a certain amount of the network's coin, known as "stake", as a security deposit to prevent malicious behavior. + + + +
+ + +

+ How is Pactus different from Ethereum? +

+
+ + + + + + + Pactus and Ethereum are both Proof of Stake blockchains, but they differ in their approach to running a validator. Running a validator on Ethereum can be challenging and requires 32 Ethereum coins to stake. In Pactus, there is no fixed amount for staking. Pactus is specifically designed to be more accessible to normal users, and you can run the Pactus blockchain on your personal computer with basic hardware. + + + +
+ +
+ +
+
+
+ + Validator +
+
+ + +

+ What are validators? +

+
+ + + + + + + Validators on Pactus are responsible for processing transactions and creating blocks and, by doing so, helping to secure the network and keep it decentralized. They use their own coins as a stake to ensure the network's security and receive rewards for their contributions. + + + + + +
+ + +

+ How many validators does Pactus have? +

+
+ + + + + + + Pactus is a real Proof of Stake blockchain, which means there is no limit on the number of validators in the network. However, a committee of 51 validators is responsible for creating blocks. It's important to note that the committee members are not fixed and they change over time. + + + + + +
+ + +

+ What are the minimum and maximum amounts I can stake? +

+
+ + + + + + + In Pactus, there is no minimum limit for staking coins, but the maximum amount you can stake is 1000 coins. If you want to stake more than 1000 coins, you can run a new validator. Running multiple validators keeps the network more decentralized and helps maintain its security and stability. + + + +
+ + +

+ What are the minimum hardware requirements? +

+
+ + + + + + + After thorough testing on multiple machines, we can conclude that the recommended minimum hardware requirements are as follows:

VPS:
* CPU's: 1/2 physical core / 1vCPU
* RAM: 1 GB Ram
* Storage (SSD): 20 GB NVMe Drive
* Network: stable internet connection with 1 TBps speed

PC:
* CPU's: 2 physical cores / 4vCPU
* RAM: 4 GB Ram
* Storage (SSD): 64 GB SSD Drive
* Network: stable internet connection with over 15 MBps speed

**Note** These specifications have been tested and provide an availability score of over 0.9. + + + + + +
+ + +

+ Why is there a limit for maximum stake? +

+
+ + + + + + + The limit for the maximum stake per validator enhances decentralization and prevents validators from gaining too much power, which could potentially lead them to control the committee. The maximum staking limit is part of the consensus parameters and can be changed in the future through consensus among the validators. + + + +
+ + +

+ Can I run multiple validators on one computer? +

+
+ + + + + + + The Pactus software allows you to run up to 32 validators on a single node. Running multiple validators may require slightly more memory, but it has no impact on storage, and has a negligible effect on CPU and networking usage. Running multiple validators on a single node enables users to distribute their stake across multiple validators, especially when they want to stake more than the maximum stake per validator. This eliminates the need for additional resources and simplifies node management. + + + + + +
+ + +

+ How do validators get rewarded? +

+
+ + + + + + + Once a validator proposes a valid block and it is accepted by the network, the validator receives one coin as a block reward. The reward is an incentive given to validators for their contribution to the network. + + + + + +
+ + +

+ How much is the block reward in Pactus? +

+
+ + + + + + + Block reward in Pactus is fixed, and it is always one coin per block. This flat reward scheme helps to ensure simplicity, fairness and better coin distribution. + + + How much is the block reward in Pactus? + + + + +
+ + +

+ How many PAC coins are generated per day? +

+
+ + + + + + + Daily, a total amount of 8640 PAC is generated. This figure translates to 241,000 every 28 days and 3,153,600 per year. + + + +
+ +
+ +
+
+
+ + Consensus +
+
+ + +

+ How does Pactus blockchain work? +

+
+ + + + + + + Pactus operates with a committee of validators who are responsible for creating new blocks. The committee consists of 51 validators, however, the members of the committee change randomly over time. Every 10 seconds, a validator in the committee known as the proposer collects all the valid transactions, adds them into a block, and shares it with other validators in the committee. If more than ⅔ of the stakeholders in the committee attest to the proposed block by signing it, the block gets committed and all the transactions inside the block will be executed. This process repeats every 10 seconds. + + + How does Pactus blockchain work? + + + + +
+ + +

+ How can a validator enter to the committee? +

+
+ + + + + + + To enter the committee in Pactus, validators participate in a sortition process that occurs at each block. In this process, validators generate a provable random number between zero and the total staked coins, and if the number is less than their stake, they can send a transaction known as sortition transaction with the proof of sortition. Once the sortition transaction is included in a block, the validator replaces the oldest committee member. + + + + + +
+ + +

+ How are block proposers selected in the committee? +

+
+ + + + + + + The block proposer inside the committee is selected based on the time they entered the committee. This means that the selection process follows a first-come, first-propose order. + + + + + +
+ + +

+ Can multiple validators enter the committee at once? +

+
+ + + + + + + The process of sortition in Pactus is random, so it's possible for more than one validator to enter the committee at once, or no validator at all. However, on average, one validator should join the committee at each block. + + + +
+ + +

+ Is it possible to have two valid blocks at the same time? +

+
+ + + + + + + It is not possible to have two valid blocks at the same time in Pactus blockchain. The consensus algorithm in Pactus prevents the possibility of having two block proposers at the same time. This ensures that there will be no fork in the network. + + + + + +
+ + +

+ How much is the block confirmation in the Pactus Blockchain? +

+
+ + + + + + + Block confirmation refers to the number of blocks that need to be created before a transaction is considered final and irreversible. In Pactus, block confirmation is immediate, meaning that once a transaction is added to a block, it is considered confirmed and cannot be reversed. + + + + + +
+ +
+ +
+
+
+ + Economy +
+
+ + +

+ What is the total supply of Pactus coins? +

+
+ + + + + + + Pactus has a total supply of 42 million coins, and each coin is divided into 1 billion units. $$ 1 \ PAC = 10^9 \ SatoshiPAC $$ + + + +
+ + +

+ How are Genesis Coins allocated in Pactus? +

+
+ + + + + + + The initial allocation of Genesis Coins in the Pactus blockchain is distributed as follows:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Genesis Coin Allocation for Pactus
CategoryCoin AllocationPercentage
Treasury21 Million coins50%
Foundation8.4 Million coins20%
VC Allocation6.3 Million coins15%
Team and Operations4.2 Million coins10%
Community2.1 Million coins5%
+ + + How are Genesis Coins allocated in Pactus? + + +
+ + +

+ What is the Treasury account? +

+
+ + + + + + + The Treasury account is a special account in Pactus blockchain that holds 21 million coins at the genesis time. It has no key pair associated with it, meaning it cannot be accessed or controlled by anyone. Every time a block is created, one coin from the Treasury account transfers to the proposer account as a block reward. + + + + + +
+ + +

+ How will the Treasury coins be distributed? +

+
+ + + + + + + Treasury coins are distributed as block rewards to the block proposers. Every 10 seconds, one coin from the Treasury account transfers to the block proposer account. This process is called "coin minting". As a result, the total number of Pactus coins in circulation gradually increases over time as new blocks are added to the blockchain. Every day, 8,640 coins are minted, resulting in approximately 3 million coins being minted annually by the Treasury account. + + + How will the Treasury coins be distributed? + + + + +
+ + +

+ How will the Support coins be spent? +

+
+ + + + + + + The support accounts are designed to provide financial backing for the project. Initially, Pactus Genesis contained only the Treasury accounts without any Backup or Support accounts. The introduction of support coins was a strategic response to the absence of investors, despite the significant progress of the project.

These coins are allocated in several ways:
    +
  • Community: + This portion will mainly support the community. + As part of this, the participants on Testnets receive initial staking coins to + setup their validator and secure the Mainnet. +
  • +
  • Team and Operations: + Another portion supports the project team. + Team members receive a monthly distribution of these coins, which is estimated to sustain the team for over six years. +
  • +
  • Venture Capital (VC) Allocation: + Another portion is set aside for any potential venture capitalists who + might show interest in investing in the project in the future. +
  • +
  • Foundation: + The foundation coins are reserved for future use, potentially in supporting strong projects that align with Pactus's objectives. +
  • +
+Transparency is a key aspect of this allocation, as all movements of these coins are trackable due to the fully transparent nature of the blockchain. + + + +
+ +
+ +
+
+
+ + Transaction +
+
+ + +

+ What is a Transfer transaction? +

+
+ + + + + + + A transfer transaction is a type of transaction that allows users to transfer Pactus coin from one account to another. + + + + + +
+ + +

+ What is a Bond transaction? +

+
+ + + + + + + A bond transaction is a type of transaction that allows users to become a validator by staking some coins. The amount of stake determines the voting power in the consensus. + + + + + +
+ + +

+ What is a Sortition transaction? +

+
+ + + + + + + A sortition transaction is a type of transaction that allows validators to enter the committee. + + + + + +
+ + +

+ What is an Unbond transaction? +

+
+ + + + + + + An unbond transaction is a type of transaction that allows users to unbond their validator. Once a validator is unbonded, they can no longer participate in the consensus mechanism. + + + + + +
+ + +

+ What is a Withdraw transaction? +

+
+ + + + + + + A withdraw transaction is a type of transaction that allows a validator to withdraw their staked coins from the network. + + + + + +
+ +
+ +
+ + + + +
+ +
+
+
+
+ + + + + diff --git a/about/roadmap/index.html b/about/roadmap/index.html new file mode 100644 index 000000000..598bf8521 --- /dev/null +++ b/about/roadmap/index.html @@ -0,0 +1,826 @@ + + + + + + + + + + + + + Roadmap | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

Roadmap

+ +
+
✅ Completed Task
+
🚧 Ongoing Task
+
⏳ Upcoming Task
+
+ +
+
+
+ + +
+
+
+
+ + Smart contract and Decentralized Storage Platform + +
+
Q1 2025
+
+
+
+ +
+
+
+
+ + Browser Extension + +
+
Q1 2025
+
+
+
+ +
+
+
+
+ + Integrating with Wallets applications + +
+
Q4 2024
+
+
+
+ +
+
+
+
+ + Desktop and Mobile Friendly GUI + +
+
Q3 2024
+
+
+
+ +
+
+
+
+ + Pactus Light Client + +
+
Q3 2024
+
+
+
+ +
+
+
+ +
June 2024
+
+
+
+ +
+
+
+ +
June 2024
+
+
+
+ +
+
+
+ +
April 2024
+
+
+
+ +
+
+
+
+ + Pactus Shell + +
+
April 2024
+
+
+
+ +
+
+
+
+ + Block Explorer + +
+
April 2024
+
+
+
+ +
+
+
+ +
March 2024
+
+
+
+ +
+
+
+ +
January 2024
+
+
+
+ +
+
+
+ +
24 January 2024
+
+
+
+ +
+
+
+ +
January 2024
+
+
+
+ +
+
+
+ +
January 2024
+
+
+
+ +
+
+
+ +
January 2024
+
+
+
+ +
+
+
+ +
December 2023
+
+
+
+ +
+
+
+ +
November 2023
+
+
+
+ +
+
+
+ +
October 2023
+
+
+
+ +
+
+
+ +
October 2023
+
+
+
+ +
+
+
+ +
October 2023
+
+
+
+ +
+
+
+ +
August 2023
+
+
+
+ +
+
+
+ +
July 2023
+
+
+
+ +
+
+
+ +
June 2023
+
+
+
+ +
+
+
+ +
May 2023
+
+
+
+ +
+
+
+ +
May 2023
+
+
+
+ +
+
+
+ +
May 2023
+
+
+
+ +
+
+
+ +
April 2023
+
+
+
+ +
+
+
+ +
September 2022
+
+
+
+ +
+
+
+ +
September 2022
+
+
+
+ +
+
+
+ +
+
+
+
+ + + + + diff --git a/about/what-is-pactus/index.html b/about/what-is-pactus/index.html new file mode 100644 index 000000000..6e3a310ac --- /dev/null +++ b/about/what-is-pactus/index.html @@ -0,0 +1,457 @@ + + + + + + + + + + + + + What is Pactus? | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

What is Pactus?

+ +
+ +
+
+

Pactus is a blockchain focused on decentralization

+ Pactus is built on the principle that a fair and transparent system can only be achieved through decentralization. Unlike many other blockchain platforms, Pactus aims to eliminate the potential for centralization and manipulation by removing the need for delegation and miners. This allows anyone to become a part of the ecosystem and ensures that the platform remains truly decentralized. + +
+
+ +
+
+

Pactus is a user-friendly blockchain

+ Pactus aims to create a user-friendly blockchain that can be easily used by anyone, not just tech experts. Our protocol is designed to be simple, easy to maintain, and develop. Pactus offers a simple GUI application that makes it easy for users to run a node. + +
+
+ +
+
+

Pactus uses a percentage-based fee model

+ Transaction fees are calculated based on a percentage model with a minimum and maximum fee. These parameters provide greater control over the fee structure and prevent overpaying or underpaying. The percentage-based model ensures fairness and predictability, and can be adjusted through consensus among all validators. + +
+
+ +
+
+

Dedicated Decentralized Storage in Pactus

+ In Pactus, users can purchase a dedicated storage file that can be renewed annually, leading to reduced costs for storage and smart contract execution. This unique feature can pave the way for a new protocols in the decentralized platforms. + +
+
+ +
+ +
+
+
+
+ + + + + diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png new file mode 100644 index 000000000..6b8b563b7 Binary files /dev/null and b/android-chrome-192x192.png differ diff --git a/android-chrome-256x256.png b/android-chrome-256x256.png new file mode 100644 index 000000000..5386e869a Binary files /dev/null and b/android-chrome-256x256.png differ diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 000000000..6419a53bc Binary files /dev/null and b/apple-touch-icon.png differ diff --git a/ar/2022/08/29/dev-meeting.html b/ar/2022/08/29/dev-meeting.html new file mode 100644 index 000000000..bc7fbc607 --- /dev/null +++ b/ar/2022/08/29/dev-meeting.html @@ -0,0 +1,447 @@ + + + + + + + + + + + + + Dev meeting | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 04 September 2022, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

NanoMsg instead of ZeroMQ

+ +

During the meeting, Joseph suggested using Nanomsg instead of ZeroMQ because building ZeroMQ is not easy, +especially in Windows. Additionally, we can use the pure Go implementation of Nanomsg.

+ +

The format of block events was defined as follows:

+ +
<event_id: 1 byte><event_data: variant><height: 4 bytes><seq_num: 4 bytes>
+
+ +

As a consequence of this, smart contracts events can be defined more easily and +Infura-like services become simple, as we can just replay the events.

+ +

Reviewing a Pull Request

+ +

Nagaraj’s pull request reviewed.

+ +

Renaming project

+ +

The team discussed renaming (rebranding) the project and decided to create an online survey to +gather suggestions for a new name. +Everyone is encouraged to participate in the survey and suggest new names for the project.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2022/09/04/dev-meeting.html b/ar/2022/09/04/dev-meeting.html new file mode 100644 index 000000000..668cd0a20 --- /dev/null +++ b/ar/2022/09/04/dev-meeting.html @@ -0,0 +1,556 @@ + + + + + + + + + + + + + Dev meeting | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 29 August 2022, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

Project renamed to Pactus

+ +

During the last meeting, the team conducted an online survey to rename the project. +A total of 31 responses were received, and the following names were suggested:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVotes
Sirius11
Pactus10
Nova7
Texo6
Zemus6
Helios6
Tutti5
Haki5
Aegeus4
Virgo4
Zentora3
Zinova3
Xerxes2
Ledgeria2
Solidus2
Welt2
Ventura2
Zebra2
Miranet2
Monetha2
FutureHub1
Muonet1
Mentha1
Hypatios0
Chaintopia0
Sycee0
Lepus0
+ +

After reviewing the responses, the team chose “Pactus” as the new name for the project. 🎉 +The project will be moved to “pactus-project/pactus,” and the team plans to announce it on social media.

+ +

Discussion on GUI

+ +

In terms of the GUI, Joseph suggested using Flutter, and the team agreed. +To interact with the wallet, gRPC APIs will be provided, and the GUI will use these APIs.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2022/09/18/dev-meeting.html b/ar/2022/09/18/dev-meeting.html new file mode 100644 index 000000000..200fc0dc5 --- /dev/null +++ b/ar/2022/09/18/dev-meeting.html @@ -0,0 +1,466 @@ + + + + + + + + + + + + + Dev meeting | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 18 September 2022, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

Discussion about Testnet

+ +

The team discussed Testnet and related issues, including IP block issues that were found by Hadi. +Due to sanctions, some IPs are blocked, so the team will run a support node to assist users inside Iran. +The GUI application had some issues on Windows, but they were fixed and tested by Hadi.

+ +

Discussion about Website

+ +

The website still has some issues, such as the need to rename the animation to “Pactus” and the lack of a logo. +The community suggested some logos. Additionally, the roadmap page is missing.

+ +

Status of social medias

+ +

The team discussed the status of social media platforms, including:

+ +
    +
  • Discord: 70 members
  • +
  • Instagram: 87 followers
  • +
  • Telegram: 20 followers
  • +
  • Linkedin: 20 followers
  • +
  • Twitter: Not yet
  • +
+ +

The team also decided to announce the project on social media on 29 September.

+ +

Consensus parameters

+ +

The team discussed the current consensus parameters:

+ +
    +
  • Total supply: 21 million coins
  • +
  • Reward: 1 coin per block
  • +
  • Block time: 10 second
  • +
  • Committee size: 21 members
  • +
  • Bond interval: one hour
  • +
  • Unbond interval: 21 days
  • +
  • Fee fraction: 0.0001
  • +
  • Min fee: 0.0000001
  • +
  • Max fee: 0.01
  • +
  • Maximum stake: 12381
  • +
+ + + + +
+
+
+
+ + + + diff --git a/ar/2022/09/20/release-0-9-0.html b/ar/2022/09/20/release-0-9-0.html new file mode 100644 index 000000000..c58a9ff25 --- /dev/null +++ b/ar/2022/09/20/release-0-9-0.html @@ -0,0 +1,436 @@ + + + + + + + + + + + + + Pactus 0.9.0 released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.9.0 released

+ +

Overview

+ +

Pactus Blockchain Release Version 0.9.0 +is now available for download. +This release includes a new graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Download

+ +

This version has been implemented for Testnet-0 and is preparing for the upcoming Mainnet launch. +To get started with the Pactus Blockchain Testnet-0, simply download +the latest version and run the Pactus software.

+ +

Join the Testnet now and get ready for the future!

+ + + + +
+
+
+
+ + + + diff --git a/ar/2022/09/24/testnet-0-launched.html b/ar/2022/09/24/testnet-0-launched.html new file mode 100644 index 000000000..8b82772c3 --- /dev/null +++ b/ar/2022/09/24/testnet-0-launched.html @@ -0,0 +1,432 @@ + + + + + + + + + + + + + Testnet-0 launch announcement | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Testnet-0 launch announcement

+ +

testnet

+ +

The Pactus blockchain Testnet-0 is now accessible. +To participate, simply download the Pactus application version 0.9.0 and +connect to the Testnet without any special configurations. +For test coins, please visit our Discord channel and share your validator address.

+ +

By taking part in the Testnet, you can familiarize yourself with the Pactus blockchain and +get ready for the Mainnet launch. +Testnet participants will also be given higher priority during the Mainnet launch.

+ +

Please share your feedback with us to help improve the user experience in future versions of the software.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2022/10/30/dev-meeting.html b/ar/2022/10/30/dev-meeting.html new file mode 100644 index 000000000..94767ee48 --- /dev/null +++ b/ar/2022/10/30/dev-meeting.html @@ -0,0 +1,459 @@ + + + + + + + + + + + + + Dev meeting | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 30 October 2022, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

In memory of Mahsa Amini

+ +

The meeting started in memory of Mahsa Amini. +We in the Pactus family stand in solidarity with courageous people who are fighting for equality, equity and freedom in Iran.

+ +

Woman Life Freedom

+ +

Launching Block explorer

+ +

The beta version of the block explorer has been launched 🚀 and is now available at +https://pacviewer.com.

+ +

Nagaraj explained the block explorer and some of the features.

+ +

Project road map

+ +

Project road map was discussed.

+ +

IdeaKita pitch deck

+ +

Ali presented the Pactus pitch deck for the IdeaKita in Malaysia. +The IdeaKita program, under the Malaysia Digital Economy Corporation (MDEC), is designed to +support entrepreneurs and startups in Malaysia.

+ +

Latest development progress

+ +

The latest pull requests were reviewed:

+ + + + + + +
+
+
+
+ + + + diff --git a/ar/2022/11/24/release-0-9-1.html b/ar/2022/11/24/release-0-9-1.html new file mode 100644 index 000000000..457e2ca2a --- /dev/null +++ b/ar/2022/11/24/release-0-9-1.html @@ -0,0 +1,451 @@ + + + + + + + + + + + + + Pactus 0.9.1 released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.9.1 released

+ +

Overview

+ +

Pactus Blockchain Release Version 0.9.1 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Download

+ +

This version has been implemented for Testnet-0 and is preparing for the upcoming Mainnet launch. +To start using the Pactus Blockchain Testnet-0, +you can download the latest version from download page +and join the Testnet.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +
    +
  • Blocks can be fully decoded when queried in gRPC
  • +
  • The HTTP module now uses gRPC module, making node configuration simpler by removing the CapnP module
  • +
  • Reducing the blockchain size by saving blocks by number instead of hash
  • +
  • The wallet can hold unconfirmed transactions
  • +
  • The wallet can use different gRPC servers
  • +
  • The GUI displays committee information
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/03/01/what-is-testnet.html b/ar/2023/03/01/what-is-testnet.html new file mode 100644 index 000000000..c39e7a6d9 --- /dev/null +++ b/ar/2023/03/01/what-is-testnet.html @@ -0,0 +1,503 @@ + + + + + + + + + + + + + What is a Testnet? | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

What is a Testnet?

+ +

Mainnet vs Testnet?

+ +

If you have ever wondered what Testnet is and how it is different from Mainnet, read this article to the end to find out!

+ +

Mainnet and Testnet are two widely used terminologies in the Blockchain ecosystem; +so it is important to understand the meaning and differences while working in the industry or +following announcements of the Blockchain projects like Pactus.

+ +

Here’s a quick explanation: +Before the actual live version of a Blockchain network that is used for real transactions, +functions and smart-contracts (which is referred as Mainnet), +there is a test version of the Blockchain network for testing purposes (which is referred as Testnet). +In Testnet, a safe environment is provided to help developers experiment and test their applications, +and make sure that everything functions smoothly in the Mainnet version.

+ +

Testnet

+ +

A Testnet is a simulation of a Blockchain, in which developers can test all the functionalities of +their Blockchain network without risking their assets and convenience of end-users. +Using Testnet, any possible error, bug or malfunctions can be fixed before the Mainnet launch. +Testnet also can be an experimental environment for new features, updates and upgrades. +So several Testnet networks of the same version or newer version of the Mainnet can be implemented on the roadmap.

+ +

What are use cases of Testnet?

+ +

A secure environment to test development ideas and updates. +So many features and minor details in Pactus project have been successfully developed so far using the Testnet; such as:

+ +
    +
  • extra details and information on Pactus-GUI;
  • +
  • well-functioning Pactus Blockchain explorer to access transactions and block details;
  • +
  • Upgrades that led to decreasing the size of the Pactus network
  • +
+ +

Providing a safe testing ground for resolve scalability and security problems, as well as decentralization issues. +Pactus network is also a secure and purely decentralized network. However in the last updates during the Testnet, +developers are now able to decrease the database size by approximately 10% without compromising performance. +They did it by utilizing block height instead of hash to store blocks within the database. (you can find out more +here).

+ +

Testing new versions, patches and features on Testnet. it is vital for enhancing the security, load testing, +Blockchain migration, integration tests, and etc. This is why you can now use the latest version of Pactus-GUI +that works like clockwork and is extremely secure.

+ +

Testing the functions of cryptocurrency without disrupting the Mainnet. In the Testnet of Pactus Blockchain, +you as a user or validator can use all the features to send, receive, bond or unbond your assets in the Pactus-GUI.

+ +

Development and simulation of smart contract features and DApps. Note that many Blockchain projects like Pactus, +can be used as smart-contract platforms. So the Testnet can be designed in different stages to test and improve +different applications of the network.

+ +

Please note that after a certain period of time, when developers get satisfied with the functionality and debugging process, +they launch Mainnet. Mainnet has its own independent genesis blocks; +so the assets and addresses that users use in Testnet are not valid inside the new Mainnet Blockchain anymore. +In fact the whole Blockchain network starts working from the scratch and users and validators start to +work with real coins and transactions instead of the simulated ones. But since Testnet has an important effect +on the health and improvement of the network, in Pactus Blockchain, we have several advantages +for the people who join the Testnet.

+ +

Why should you join the Testnet?

+ +

There are different contributors in a Blockchain network; +Some people are developers and programmers that use the Testnet to contribute, enhance and lead the project to a better future. +Testnet is actually vital for them to perform their changes and try their innovations and ideas.

+ +

But you might also be an end user; you might want to either be a validator and stake your assets to earn more Pactus coins, +or you might want to learn how to use the network for future personal applications. Either way, +you might find it handy to give it a try and be familiar with Pactus-GUI and its different features.

+ +

However, there is another advantage for end users who join the Testnet. +While using the network, running a node or testing the Pactus-GUI in Testnet period, you are contributing to +the community to find improvement potentials, that’s why there are more advantages contemplated for the Testnet users; +Soon our Mainnet will be launched and also Pactus network will be announced and listed in well-known exchanges. +As an early contributor, you will have the advantage of getting some extra initial coins at the beginning of Mainnet launch. +So that you can use it to run a validator node and earn more from staking your assets. This airdrop is considered +for every individual who installs Pactus-GUI and starts a node in Testnet.

+ +

There are other positive conditions you may experience as an early contributor.

+ +
    +
  • Advanced and very responsive support for your issues (we dedicate more time to provide you with solutions)
  • +
  • Embracing your suggestions, improvement ideas, needs and information you may require to have a better user experience.
  • +
+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/04/21/testnet-0-concluded.html b/ar/2023/04/21/testnet-0-concluded.html new file mode 100644 index 000000000..0f9a3fccd --- /dev/null +++ b/ar/2023/04/21/testnet-0-concluded.html @@ -0,0 +1,465 @@ + + + + + + + + + + + + + Story of Testnet-0 | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Story of Testnet-0

+ +

What is Testnet?

+ +

Testnet is a testing environment where developers and users can try out the functionality of a blockchain project, +without putting real assets or data at risk. +It helps to ensure that the final product is reliable and secure for users to use. +If you like to read more about the Testnet you can check out our post on +“What is Testnet?”.

+ +

Summary of Testnet-0

+ +

In September 2022, we launched Testnet-0. +The purpose of this Testnet was to +check the consensus protocol, +test different transaction types, +and ensure the stability of the blockchain. +We also wanted to test the sortition algorithm +to make sure it works properly.

+ +

The committee +for the Testnet-0 was set to five validators, and more than 19 validators joined during the Testnet period. +Over 2 million blocks were created, and more than 3.2 million transactions were processed during this time. +The size of the blockchain is approximately 1 gigabyte. +The maximum number of transactions recorded in a single block was 386. With a block time of 10 seconds, +we can confirm that Pactus blockchain can support up to 30 transactions per second (TPS), +which is a reasonable number for TPS. Based on real-time statistics available at realtps, +we can see that Pactus is among the top 10 blockchains in terms of TPS.

+ +

At this point, the development team decided to end the Testnet-0 and move on to the next one, +Testnet-1. We are planning to run the Testnet-1 to prepare for the MainNet launch. +We will provide updates on our progress and share the details of the new Testnet soon.

+ +

Special thanks to the community

+ +

This Testnet was important for us. +It helped us learn what we need to do to make Pactus work even better. +Without the community that supports us and dedicates their time and resources to testing and feedback, +we wouldn’t have been able to progress as we have.

+ +

We thank all of them for their valuable contributions. +As promised, participants in Testnets will be given priority as validators for the MainNet, and +will receive bounty PAC coins to set up their validators.

+ +

We are grateful to all those who participated in Testnet-0, and +we encourage them to join our next Testnet to help us improve Pactus. +As a community-based project, we rely on the support of our community members, and we value any help we receive.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/05/08/release-0-10-0.html b/ar/2023/05/08/release-0-10-0.html new file mode 100644 index 000000000..7d096d29b --- /dev/null +++ b/ar/2023/05/08/release-0-10-0.html @@ -0,0 +1,479 @@ + + + + + + + + + + + + + Pactus 0.10.0 released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.10.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.10.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlight

+ +

The main update in this version allows users to set up multiple validators in one node. +Users can set up to 32 validators in a single node, and each validator can stake up to 1,000 coins.

+ +

Multi validators

+ +

Download

+ +

This version has been implemented for Testnet-1 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • removing address from account (#454)
  • +
  • supporting multiple consensus instances (#450)
  • +
  • adding sortition interval to the parameters (#442)
  • +
+ +

Fix

+ +
    +
  • gui: check if the node has an active consensus instance (#458)
  • +
  • Use of a Persistent Merkle tree to enhance performance of calculating the +state hash; fully tested in Testnet-0 (#432)
  • +
  • GetBlockchainInfo API in gRPC now returns the total number of validators and accounts (#439)
  • +
  • wallet path as argument (#455)
  • +
  • adding reward addresses to config (#453)
  • +
  • removing committers from the certificate hash (#444)
  • +
  • prevent data race conditions in committee (#452)
  • +
  • using 2^256 for the vrf denominator (#445)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/05/09/testnet-1-launched.html b/ar/2023/05/09/testnet-1-launched.html new file mode 100644 index 000000000..077be8384 --- /dev/null +++ b/ar/2023/05/09/testnet-1-launched.html @@ -0,0 +1,462 @@ + + + + + + + + + + + + + Testnet-1 launch announcement | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Testnet-1 launch announcement

+ +

Overview

+ +

The Pactus blockchain Testnet-1 is now available for participation. +This version simulates the Mainnet environment and evaluate the system’s performance, stability, +and security in a controlled environment. +The primary goal of this version of Testnet is to determine the efficient and secure committee size for the Mainnet.

+ +

Key Aspects

+ +
    +
  • Simulating the Mainnet environment
  • +
  • Determining the actual block creation time
  • +
  • Assessing the staking mechanism and consensus protocol
  • +
  • Evaluating network usage under different loads
  • +
  • Evaluating the syncing process for new nodes joining the network
  • +
  • Ensuring network stability with over 1000 validators
  • +
  • Evaluating transaction performance
  • +
  • Conducting stress tests
  • +
  • Performing security tests, including double spend attacks, Sybil attacks +(nodes with different identities), and forking resistance
  • +
+ +

Joining Testnet-1

+ +

To join the Testnet, download Pactus software +version 0.10.0 and +connect to Testnet without any special configuration or hardware. +You can run the software on your personal computer or laptop. +To acquire test coins, visit the Discord channel and +provide your validator address.

+ +

Benefits for Participation

+ +

By taking part in the Testnet, users can familiarize themselves with the Pactus blockchain and +be well-prepared for the Mainnet launch. +Testnet participants will also receive higher priority during the Mainnet launch and +get free coins for initial staking on the Mainnet.

+ +

Your Feedback Matters

+ +

User feedback plays a vital role in the improvement of the Pactus blockchain. +Share your thoughts and experiences to contribute to the enhancement of future software versions.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/05/29/release-0-11-0.html b/ar/2023/05/29/release-0-11-0.html new file mode 100644 index 000000000..986be7d9c --- /dev/null +++ b/ar/2023/05/29/release-0-11-0.html @@ -0,0 +1,491 @@ + + + + + + + + + + + + + Pactus 0.11.0 released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.11.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.11.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

The main update in this version is the fix for the relay +connection issue. +A relay is a peer in the network that facilitates the connection between two peers, +particularly when they are using home internet.

+ +

Another significant update is that sending a Bond transaction +is now more user-friendly. +Users no longer need to set the validator public key if they want to bond Test PAC coins to their validators.

+ +

Bond transaction dialog

+ +

Download

+ +

This version has been implemented for Testnet-1 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • gui: showing the total number of validators (#474)
  • +
  • network: fixing relay connection issue (#475)
  • +
  • consensus: rejecting vote with round numbers exceeding the limit (#466)
  • +
  • increase failed counter when stream got error (#489)
  • +
  • boosting syncing process (#482)
  • +
  • waiting for proposal in pre-commit phase (#486)
  • +
  • retrieving public key from wallet for bond transactions (#485)
  • +
  • restoring config file to the default (#484)
  • +
  • defining ChainType in genesis to detect the type of network (#483)
  • +
  • reducing the default Argon2d to consume less memory (#480)
  • +
  • adding password option to the start commands (#473)
  • +
+ +

Refactor

+ +
    +
  • rename send to transfer. (#469)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/06/19/release-0-12-0.html b/ar/2023/06/19/release-0-12-0.html new file mode 100644 index 000000000..db2d30d85 --- /dev/null +++ b/ar/2023/06/19/release-0-12-0.html @@ -0,0 +1,489 @@ + + + + + + + + + + + + + Pactus 0.12.0 released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.12.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.12.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version is focused on improving the sync time to make it faster. +This is achieved by implementing a caching mechanism that executes transactions more quickly and +improves the calculation of total power (stake) of the blockchain in a more effective way.

+ +

Syncing progress

+ +

Download

+ +

This version has been implemented for Testnet-1 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • add GetAccountByNumber API to get account by number (#511)
  • +
+ +

Fix

+ +
    +
  • caching account and validator in store (#513)
  • +
  • get recent blocks by stamp (#509)
  • +
  • closing the mDNS connection upon stopping the network (#508)
  • +
  • updating linkedmap to use generic (#507)
  • +
  • removing state from cache (#506)
  • +
  • Typo in GUI (#499)
  • +
  • supporting localnet (#492)
  • +
+ +

Refactor

+ +
    +
  • update total power calculation based on power change(deltas) (#518)
  • +
  • GetValidators return all validators in state validators map (#512)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/07/01/release-0-13-0.html b/ar/2023/07/01/release-0-13-0.html new file mode 100644 index 000000000..8b3030f3a --- /dev/null +++ b/ar/2023/07/01/release-0-13-0.html @@ -0,0 +1,480 @@ + + + + + + + + + + + + + Pactus 0.13.0 released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.13.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.13.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

Users can now restore the default_wallet during the node initialization. +If users have a backup of the seed phrase (mnemonic) for the default_wallet, +they can now restore it and re-initialize the node.

+ +

Restore mode

+ +

Download

+ +

This version has been implemented for Testnet-1 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • implemented restore wallet base on input seed (#553)
  • +
  • measuring total sent and received bytes (#552)
  • +
  • add validate seed and restore wallet (#533)
  • +
  • HTTP: Missing handlers (#549)
  • +
  • gui: update about dialog and menu items in help (#532)
  • +
+ +

Refactor

+ +
    +
  • implementing TestSuite (#535)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/07/05/testnet-500-validators.html b/ar/2023/07/05/testnet-500-validators.html new file mode 100644 index 000000000..10ea311bf --- /dev/null +++ b/ar/2023/07/05/testnet-500-validators.html @@ -0,0 +1,454 @@ + + + + + + + + + + + + + 500 validators joined Testnet | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

500 validators joined Testnet

+ +

For a Proof of Stake blockchain, validators are important for +maintaining the network’s integrity and security. They are similar to miners in Proof of Work blockchains like Bitcoin.

+ +

Pactus as a real Proof of Stake blockchain, has achieved a significant milestone. +More than 500 validators joined the Testnet +in less than 2 months. +This accomplishment proves that Pactus is reliable, resilient, and trustworthy. More importantly, it sets new standards +in the blockchain world. In fact, the Pactus Testnet is even more decentralized than some well-known blockchains.

+ +

500 validators of Testnet

+ +

One key reason why Pactus can accommodate more validators is its powerful +consensus mechanism. +The consensus mechanism in Pactus eliminates the need for delegation, making it possible for anyone to become a validator. +Additionally, the user-friendly application ensures that even those new to blockchain can easily contribute to the network.

+ +

What is the next

+ +

To remain competitive in the market, Pactus recognizes the importance of prioritizing user space. +We aim to ensure that running Pactus is affordable and accessible to anyone, regardless of their technical expertise or +available resources.

+ +

To achieve this, the Pactus team constantly monitors network, storage, and computational usage, striving to keep them +at minimal levels. +By doing so, we enable more individuals to participate in the Pactus blockchain.

+ +

Currently, the Pactus team is working on optimizing and reducing network usage. This effort will lead to reduced costs, +especially for users who are using home internet connections.

+ +

Furthermore, we are planning to introduce a pruning mode, allowing users to run the Pactus blockchain with significantly +less storage. +Although we believe the storage size is already small, our goal is to enable users to +retain only the most recent blockchain history. +This approach ensures that the blockchain size remains as compact as possible by disregarding some history of the blockchain.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/07/09/dev-meeting.html b/ar/2023/07/09/dev-meeting.html new file mode 100644 index 000000000..d788da4d1 --- /dev/null +++ b/ar/2023/07/09/dev-meeting.html @@ -0,0 +1,460 @@ + + + + + + + + + + + + + Dev meeting | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 09 July 2023, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

Overview to the Network Module

+ +

The meeting began with an overview of the Network module in Pactus. +This module uses Libp2p as its underlying network protocol.

+ +

The Network module is agnostic about the content of the message and +handles two types of messages: Gossip messages, which are broadcasted, +and Stream messages, which are sent directly to a specific peer. +The team discussed the relay nodes that enable communication for nodes behind NAT. +Upon receiving a message, the module publishes an event. +The two types of events are Gossip events and Steam events.

+ +

Network messages

+ +

The team discussed the issue of Relay connections resetting, and explored solutions such as +hole punching or using UDP and IPv6.

+ +

Some users in the Testnet reported high network usage. +The team discussed implementing metrics for LibP2P to monitor network usage effectively. +The discussion related to this issue can be found here. +Additionally, the team discussed the customization of network resources, +including setting limits for inbound and outbound connections.

+ +

Overview to the Sync Module

+ +

Moving on, the Sync module was discussed. +Unlike the Network module, the Sync module has full knowledge about the messages and packets. +The module handles a range of message types, which can be found +here.

+ +

It was suggested that we need to define metrics for each message type. +There was also a discussion about the need for reducing the messages to optimize the use of network resources.

+ +

The team decided to continue discussing these topics in future meetings. +They also plan to work on improving the Network and Sync modules based on these discussions.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/08/01/testnet-1-concluded.html b/ar/2023/08/01/testnet-1-concluded.html new file mode 100644 index 000000000..6b8d1f513 --- /dev/null +++ b/ar/2023/08/01/testnet-1-concluded.html @@ -0,0 +1,489 @@ + + + + + + + + + + + + + Story of Testnet-1 | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Story of Testnet-1

+ +

What is Testnet?

+ +

Testnet is a testing environment where developers and users can try out the functionality of a blockchain project, +without putting real assets or data at risk. +It helps to ensure that the final product is reliable and secure for users to use. +If you like to read more about the Testnet you can check out our post on +“What is Testnet?”.

+ +

Summary

+ +

In May 2023, we launched Testnet-1. +The main purpose of this Testnet was to measure block time creation and the responsiveness of the blockchain. +The development team also focused on evaluating the network’s performance. +Additionally, the overall performance of the software and the syncing process were closely examined and assessed.

+ +

The committee for Testnet-1 was set to 21 validators, +and 584 validators joined during the Testnet period. +More than 600,000 blocks were created, and more than 1 million transactions were processed during this time. +The size of the blockchain is about 300 megabytes.

+ +

About 300,000 coins were staked during this period, it was almost 50% of the total generated coins. +It shows that users, even in Testnet, tend to stake their coins.

+ +

Staking chart

+ +

We were able to extract the confirmation time of transactions. +More than 97% of transactions were confirmed in just one block after submission. +This indicates that the transaction pool and broadcasting models are working fine.

+ +

Transaction confirmation chart

+ +

Based on logs from one of the validators, the time for creating a block is about 3 seconds in normal cases. +More than 97% of blocks are committed in the first rounds.

+ +

Consensus round chart

+ +

Major updates

+ +

During Testnet-1, we released three versions(Version +0.11.0, +0.12.0, +0.13.0), and the upgrade process was smooth. +Unfortunately, during Testnet-1, we encountered a consensus failure that may occur at any time in the future. +The consensus failure was resolved by requiring some validators to re-sync their nodes. +At this time, the development team decided to stop Testnet-1 and work on improvements that are not backward compatible, +including:

+ +
    +
  • Improving the consensus protocol
  • +
  • Reducing the blockchain size
  • +
  • Optimizing the network usage
  • +
+ +

After stabilizing the changes, we will announce the next Testnet, and hopefully, this will be the pre-launch Testnet.

+ +

Special thanks to the community

+ +

This Testnet was important for us. +It helped us learn what we need to do to make Pactus work even better. +Without the community that supports us and dedicates their time and resources to testing and feedback, +we wouldn’t have been able to progress as we have.

+ +

We thank all of them for their valuable contributions. +As promised, participants in Testnets will be given priority as validators for the MainNet, and +will receive bounty PAC coins to set up their validators.

+ +

We are grateful to all those who participated in Testnet-1, and +we encourage them to join our next Testnet to help us improve Pactus. +As a community-based project, we rely on the support of our community members, and we value any help we receive.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/08/22/dev-report.html b/ar/2023/08/22/dev-report.html new file mode 100644 index 000000000..8c5fc4f94 --- /dev/null +++ b/ar/2023/08/22/dev-report.html @@ -0,0 +1,454 @@ + + + + + + + + + + + + + Dev report | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev report

+ +

Abstract

+ +

there is several activities in Pactus github this month, here is a clear report and explain of activities.

+ +

Github Pactus

+ +

Linters

+ +

one of new changes in Pactus project is new linters we added this month. +what is linters? +linters are just a set of rules for the style of source codes, they force developers to write new codes +in correct, clean and safe way.

+ +

why we use them? +the reason we are using linters in Pactus and add new ones, is to make the code more safe, +and also make it easy to work on for new contributors because we are focus on being decentralized even in development.

+ +

Linters we added till now

+ +

TLA+ spec

+ +

one another new change in Pactus is updating TLA+ spec, which is related to consensus, +as you know we had some problem with consensus in Testnet-1, we fixed the issues and now we are trying to make it more clean.

+ +

link to changes

+ +

if you wish you can learn more about Pactus consensus here.

+ +

Refactoring

+ +

some of previous Pactus dependencies was so old, so we start refactoring them and use new libraries. +also we used some libraries with higher performance which is make Pactus full node more faster in mainnet.

+ +

one of refactors

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/09/04/introduction-to-pips.html b/ar/2023/09/04/introduction-to-pips.html new file mode 100644 index 000000000..5a09c695e --- /dev/null +++ b/ar/2023/09/04/introduction-to-pips.html @@ -0,0 +1,462 @@ + + + + + + + + + + + + + Introduction to PIPs | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Introduction to PIPs

+ +

Introduction to PIPs

+ +

In our commitment to transparency and innovation, we’re excited to introduce a major step in Pactus’s journey: +the Pactus Improvement Proposals, or PIPs.

+ +

PIPs image

+ +

What are PIPs?

+ +

Pactus Improvement Proposals (PIPs) define standards for the ongoing development and enhancement of the Pactus platform. +Each PIP has a unique number like PIP-2, +PIP-3, and so on. +These proposals provide technical details for suggested modifications or enactments, serving as a guide for development.

+ +

The PIP process

+ +

The PIP process is open, allowing any member of the Pactus community to propose a PIP. +The author should provide a summary, motivation, and a detailed technical explanation. +The Pactus Laboratory team will carefully review each PIP. +Security considerations must be addressed before finalizing a PIP. +Once finalized, it can be added to the code. +This process helps avoid unexpected issues during development and maintain consistency and safety.

+ +

The Origins of PIPs

+ +

The Pactus Improvement Proposals (PIPs) was inspired by the +Ethereum Improvement Proposals (EIPs) system, +which had its roots in the Bitcoin Improvement Proposals (BIPs) and +Python Enhancement Proposals (PEPs).

+ +

New Feature Policy

+ +

From now on, all major changes or new features in the Pactus project require a PIP. +Any implementation must reference its specific PIP. +Without approval from Pactus Laboratory team, changes won’t be approved and added to the codebase.

+ +

PIPs Repository

+ +

For a complete list of Pactus Improvement Proposals, visit this link. +The corresponding GitHub repository is accessible here.

+ +

PIPs repository on Github

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/09/24/dev-report-pre-testnet-2.html b/ar/2023/09/24/dev-report-pre-testnet-2.html new file mode 100644 index 000000000..41e4f993f --- /dev/null +++ b/ar/2023/09/24/dev-report-pre-testnet-2.html @@ -0,0 +1,472 @@ + + + + + + + + + + + + + Dev Report pre-testnet2 | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev Report pre-testnet2

+ +

Abstract

+ +

there is several activities in Pactus github in September month, here is a clear report and explain of activities.

+ +

Github Pactus

+ +

Implementing PIP 2, 3 and 4

+ +

After starting Pactus Labs and PIPs, +we start implementing each accepted PIP one by one to improve Pactus, here is a list of implemented PIPs:

+ + + +

Network

+ +

There is some very good change and new features for Pactus network module, +this list contain a list of important changes in Pactus networking:

+ + + +

gRPC and nanomessage services

+ +

We also updated, improved and enhanced gRPC and nanomessage services for better developer experience, +for third-party and side project developers, here is some changes:

+ + + +

Refactoring and other new feature or debugs

+ +

We had some not implemented feature request, not fixed bugs and some issue with new golang version, +list of this changes:

+ + + + + + +
+
+
+
+ + + + diff --git a/ar/2023/09/28/how-sspos-works-in-simple-word.html b/ar/2023/09/28/how-sspos-works-in-simple-word.html new file mode 100644 index 000000000..fe1c792eb --- /dev/null +++ b/ar/2023/09/28/how-sspos-works-in-simple-word.html @@ -0,0 +1,506 @@ + + + + + + + + + + + + + How SSPoS (Solid State Proof of Stake) works in simple word | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

How SSPoS (Solid State Proof of Stake) works in simple word

+ +

Abstract

+ +

In all Blockchain protocols, there is a concept called a consensus mechanism. +This mechanism is used to enable nodes to reach an agreement +on the state of the Blockchain they are +maintaining, in order to have a synchronized and integrated Blockchain.

+ +

For now, we have a lot of consensus mechanisms in the Blockchain world. +Pactus Blockchain uses the SSPoS (Solid State Proof of State) which is a new consensus model.

+ +

To explain how it works let’s start with explaining one of the first and simplest +consensus mechanisms (or if you already know them, just jump into the last part named SSPoS).

+ +

Solid State Proof of Stake

+ +

PoW (Proof of Work)

+ +

In the proof of work model, each node in the network should solve a complex mathematical +problem that requires lots of computing resources to make a new block.

+ +

In this way, it’s highly unlikely that anyone would be able to change +past transactions and change Blockchain states such as balances, +without expending equivalent computational power.

+ +

By doing this we ensure the security and integrity of the Blockchain.

+ +

The concept was adapted from digital tokens by Hal Finney in 2004 +through the idea of “reusable proof of work” using the 160-bit secure hash algorithm 1 (SHA-1).

+ +

Bitcoin uses this consensus model.

+ +

PoS (Proof of Stake)

+ +

On the other hand, PoS or Proof of Stake is another consensus mechanism that instead of miners has validators!

+ +

Validators lock a number of their assets in the Blockchain and they can transfer or use it +till it is locked which we call staking. +after each Block is committed one of the validators will be chosen randomly (more amount of stake, +more chance to be chosen) when a validator is chosen +it proposes a block and announces it to other nodes to be validated, +when a supermajority of validators accept the block it’s going to be committed.

+ +

In this system, validators have no incentive to behave maliciously or dishonestly. +If they do, they risk losing the stake amount.

+ +

More amount of validators in a PoS Blockchain makes it more secure, +decentralized, and trustable, but it also makes the validation and consensus process slower and more difficult.

+ +

Ethereum uses this model.

+ +

DPoS (Delegated Proof of Stake)

+ +

DPoS or Delegated Proof of Stake, is a variant of the PoS consensus algorithm. +users entrust their stakes to a small group of “delegates”. +These delegates are responsible for validating transactions +and creating blocks. The number of delegates is limited +to ensure accountability and efficiency in the validation process.

+ +

Some Blockchains like Cardano and Tron use DPoS.

+ +

DPoS tries to solve the issue of PoS which when validators +increase we have an inefficient validation process. but the main issue with DPoS itself is putting a lot +of trust in the hands of a small number of delegates, +which goes against the principle of “don’t trust, verify”.

+ +

SSPoS (Solid State Proof of Stake)

+ +

BUT, HOW ABOUT SSPoS? HOW ABOUT PACTUS?

+ +

In Pactus Blockchain, we have something called Solid State Proof of Stake +and we try to fix the previous model’s issue, let me explain.

+ +

Pactus uses a dynamic committee of validators with a fixed size of 51, +but the members of the committee randomly change in each round, +based on stake amount the chance of being chosen is higher. on the other hand, +the number of validators out on the committee is unlimited, allowing anyone +to become a validator by staking coins.

+ +

At each block, validators participate in a sortition algorithm by generating a random number +between zero and the total staked coins. If the number is less +than the validator’s stake, they can enter the committee and replace the oldest committee member.

+ +

So, in SSPoS models which are a variant of PoS, we can reach a consensus, +without using high computation resources, having an inefficient +validation process by increasing validator numbers, +and also without breaking the principle of “don’t trust, verify”.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/10/15/release-0-15-0.html b/ar/2023/10/15/release-0-15-0.html new file mode 100644 index 000000000..29ca85dd0 --- /dev/null +++ b/ar/2023/10/15/release-0-15-0.html @@ -0,0 +1,546 @@ + + + + + + + + + + + + + Pactus 0.15.0 released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.15.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.15.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Splash screen

+ +

Download

+ +

This version is the bootstrap version for +Testnet-2. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +
+ If you participated in Testnet-1, ensure to delete your previous working directory and + create a new wallet. +

+ By default, the working directory is located at "C:\Users\<name>\pactus" on Windows, + or "~/pactus" on Unix-compatible platforms. +
+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gui: adding the splash screen (#743)
  • +
  • add absentees votes to the certificate (#746)
  • +
  • logger: short stringer for loggers (#732)
  • +
  • implementing pip-7 (#731)
  • +
  • implementing pip-11 (#712)
  • +
  • implementing pip-8 (#711)
  • +
  • implementing pip-9 (#706)
  • +
  • new API to get Public key by address (#704)
  • +
  • Adding address field for AccountInfo (#703)
  • +
  • CreateValidatorEvent and CreateAccountEvent for nanomsg (#702)
  • +
  • implementing PIP-2 and PIP-3 (#699)
  • +
  • Adding Hole Punching to network (#697)
  • +
  • write logs into file (#673)
  • +
  • check protocol support before sending connect/disconnect event (#683)
  • +
  • updating genesis for pre-testnet-2 (#679)
  • +
  • adding udp protocol for network (#672)
  • +
  • implementing pip-4 (#671)
  • +
  • Notifee service events (#628)
  • +
  • adding MinimumStake parameter (#574)
  • +
  • adding Sent and Received bytes per message metrics for peers (#618)
  • +
  • add reason to BlockResponse messages (#607)
  • +
  • Add CalcualteFee in GRPC (#601)
  • +
  • add sent bytes and received bytes metrics to peerset plus update grpc (#606)
  • +
  • added metrics of libp2p with supporting prometheus (#588)
  • +
  • Check node address is valid (#565)
  • +
  • add LastSent and LastReceived properties to peer (#569)
  • +
+ +

Fix

+ +
    +
  • data race issue on updating certificate (#747)
  • +
  • network: async connection (#744)
  • +
  • adding query vote timer for CP phase (#738)
  • +
  • trim transactions in proposed block (#737)
  • +
  • fixing query votes and proposal issue (#736)
  • +
  • fixing issue when a block has max transactions (#735)
  • +
  • consensus: anti-entroy mechanism for the consensus (#734)
  • +
  • logger: invalid level parsing error (#733)
  • +
  • cache certificate by height (#730)
  • +
  • fixing a crash on consensus (#729)
  • +
  • consensus: prevent double entry in new height (#728)
  • +
  • resolve consensus halt caused by time discrepancy in network. (#727)
  • +
  • unsorted addresses in wallet listing (#721)
  • +
  • send query votes message, if there is no proposal yet (#723)
  • +
  • fixing logger level issue (#722)
  • +
  • fixing syncing stuck issue (#720)
  • +
  • fixing some minor issues on pre-testnet (#719)
  • +
  • supporting go version 1.21 and higher (#692)
  • +
  • ensure log rotation using tests (#693)
  • +
  • restoring at the first block (#691)
  • +
  • swagger doesn’t work with multiple proto files (#687)
  • +
  • fixing wallet-cli issues (#686)
  • +
  • prevent stripping public key for subsidy transactions (#678)
  • +
  • updating the consensus protocol (#668)
  • +
  • aggregating signature for hello message (#640)
  • +
  • error case for logger (#634)
  • +
  • adding committers to the certificate (#623)
  • +
  • updating sortition executor (#608)
  • +
  • update buf and fixing proto generation issue (#600)
  • +
  • adding block hash to peer (#584)
  • +
  • copy to clipboard option for address and pubkey (#583)
  • +
  • public key aggregate (#576)
  • +
  • remove GetValidators rpc method (#573)
  • +
  • missing swagger ui for grpc get account by number (#564)
  • +
  • incorrect handler for validator by number (#563)
  • +
+ +

Refactor

+ +
    +
  • sync: refactoring syncing process (#676)
  • +
  • remove payload prefix from payload transaction type (#669)
  • +
  • change Hello message from broadcasting to direct messaging (#665)
  • +
  • committee: using generic list for validators (#667)
  • +
  • rename SanityCheck to BasicCheck (#643)
  • +
  • cli: Migrating from mow.cli to cobra for wallet (#629)
  • +
  • cli: replacing mow.cli with cobra for daemon (#621)
  • +
  • logger: using fast JSON logger (zerolog) (#613)
  • +
  • Using Generics for calculating Min and Max for numeric type #604 (#609)
  • +
  • Updating LRU cache to version 2 #514 (#602)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/10/15/testnet-2-launched.html b/ar/2023/10/15/testnet-2-launched.html new file mode 100644 index 000000000..bf6b5b1ab --- /dev/null +++ b/ar/2023/10/15/testnet-2-launched.html @@ -0,0 +1,470 @@ + + + + + + + + + + + + + Testnet-2 launch announcement | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Testnet-2 launch announcement

+ +

Overview

+ +

Exciting news for the Pactus Community: Testnet-2 is has launched! +The journey through Testnet-1 +brought success and invaluable experiences, with over 500 validators joining the network. +Despite its noteworthy achievements, it also faced challenges that led to a tough decision: to pause the Testnet and +thoroughly address these issues. +After two months of dedicated work and testing, many problems have been resolved, and +we feel confident launching the Testnet again. +Testnet-2 comes with substantial improvements compared to its predecessor by enhancing the core of the Pactus Blockchain. +Notably, the new consensus mechanism and improved overall network performance.

+ +

At this point, we want to assure the Pactus community that this version of +the Testnet will not stop until the mainnet launches, +and our main focus is on improving its overall performance and launching the Mainnet.

+ +

If you’re new to the concept of Testnet, check out our informative post: +What is the Testnet?

+ +

Key Focus Areas

+ +

Testnet-2 has important tasks ahead. +Firstly, we aim to confirm that the new consensus mechanism is both safe and efficient. +A close eye will be kept on the network’s performance, ensuring it operates as expected. +For Testnet-2, the committee +size has been expanded to 51 members. +Both the committee’s performance and block production will be closely monitored. +The goal is a blockchain that remains stable and trustworthy, +even with thousands of validators in the network, +ensuring it manages its regular duties seamlessly.

+ +

How To Join

+ +

Want to join the Testnet-2? Great! It’s super easy. +Just download the latest Pactus software and you’re good to go. +no fancy setups or special gear needed. +You can run the software straight from your personal computer or laptop. +Need some test coins? Pop over to our Discord channel and share your validator address there.

+ +

Benefits for Participation

+ +

By taking part in the Testnet, users can familiarize themselves with the Pactus blockchain and +be well-prepared for the Mainnet launch. +Testnet participants will also receive higher priority during the Mainnet launch and +get free coins for initial staking on the Mainnet.

+ +

Your Feedback Matters

+ +

User feedback plays a vital role in the improvement of the Pactus blockchain. +Share your thoughts and experiences to contribute to the enhancement of future software versions.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/10/29/release-0-16-0.html b/ar/2023/10/29/release-0-16-0.html new file mode 100644 index 000000000..ea6c2a842 --- /dev/null +++ b/ar/2023/10/29/release-0-16-0.html @@ -0,0 +1,493 @@ + + + + + + + + + + + + + Pactus 0.16.0 Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.16.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.16.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version allows users to create new addresses for both validators and accounts. +The networking module has been improved, and users can now set limits on the number of connections. +A random crash on the agreement protocol has been fixed in this version.

+ +

New address dialog

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gui: display network ID (#780)
  • +
  • create new validator address (CLI and GUI) (#757)
  • +
  • add community bootstrap nodes to testnet config (#764)
  • +
  • network: implementing connection manager (#773)
  • +
  • network: adding bootstrapper mode to the network config (#760)
  • +
+ +

Fix

+ +
    +
  • network: redefine the network limits (#788)
  • +
  • consensus: not increase the vote-box power on duplicated votes (#785)
  • +
  • network: close connection when unable to get supported protocols (#781)
  • +
  • network: enabling peer exchange for bootstrappers (#779)
  • +
  • network: set connection limit for the resource manager (#775)
  • +
  • sync: peer status set to known on sucessfull handshaking (#774)
  • +
  • consensus: strong termination for the binary agreement (#765)
  • +
  • consensus: not increase the voting power on duplicated binary votes (#762)
  • +
+ +

Refactor

+ +
    +
  • network: refactoring peer manager (#787)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/11/12/release-0-17-0.html b/ar/2023/11/12/release-0-17-0.html new file mode 100644 index 000000000..f74834621 --- /dev/null +++ b/ar/2023/11/12/release-0-17-0.html @@ -0,0 +1,502 @@ + + + + + + + + + + + + + Pactus 0.17.0 Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.17.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.17.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

The Testnet has been upgraded and all validators must update their nodes.

+ +

This version will address major networking issues, reduce network usage, and improve overall performance.

+ +

A new node type, “Node Gossips”, has been introduced to help broadcast and spread messages across the network. +Node Gossips support the network by delivering messages to non-gossiping nodes. +This gossip option is disabled by default but can be enabled in the configuration file. +If you are running Pactus on a stable and reliable server, we recommend enabling this option for your node. +Please note that this option is still experimental and subject to potential changes in future releases.

+ +

Node gossip in config file

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

+After updating the node, the configuration file will be overwritten with a new version. +You need to make modifications to the config file if you had customized it prior to the update. +

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • network: default configs for bootstrap and relay peers (#812)
  • +
  • introducing node gossip type (#811)
  • +
  • sync: adding remote address to the peer info (#804)
  • +
  • network: adding public address to factory (#795)
  • +
  • network: filter private ips (#793)
  • +
+ +

Fix

+ +
    +
  • upgrading Testnet (#814)
  • +
  • sync: prevent opening sessions indefinitely (#813)
  • +
  • execution: fixing mistake on calculating unbonded power (#806)
  • +
  • network: check connection threshold on gater (#803)
  • +
  • network: no transient connection (#799)
  • +
  • not close connection for bootstrap nodes (#792)
  • +
+ +

Refactor

+ +
    +
  • sync: refactoring sync process (#807)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2023/12/12/release-0-18-0.html b/ar/2023/12/12/release-0-18-0.html new file mode 100644 index 000000000..ea6698ca2 --- /dev/null +++ b/ar/2023/12/12/release-0-18-0.html @@ -0,0 +1,503 @@ + + + + + + + + + + + + + Pactus 0.18.0 Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.18.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.18.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version has significantly improved the syncing progress. +The syncing process concurrently requests blocks from 8 different peers and +actively connects to the most optimal peers for downloading the blockchain.

+ +

Additionally, users can now import private keys into their wallet and securely encrypt them using their wallet password.

+ +

Breaking change

+ +

For Unix-based systems, please note that the working directory for root users has changed from /pactus to /root/pactus.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

+After you update the node, the configuration file will automatically get updated, keeping the old settings. +If you want to return the configuration file to its default settings, +just delete the current config file and restart the node. +

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement pip-14 (#841)
  • +
  • sort wallet addresses (#836)
  • +
  • grpc: endpoints for creating raw transaction (#838)
  • +
  • network reachability API (#834)
  • +
  • implement pip-13 (#835)
  • +
  • subscribing to libp2p eventbus (#831)
  • +
  • implement helper methods for wallet address path (#830)
  • +
  • logger: adding rotate log file after days, compress and maxgae for logger config (#822)
  • +
  • enable bandwidth router metric (#819)
  • +
+ +

Fix

+ +
    +
  • network: refining the connection limit (#849)
  • +
  • corrected mistake when retrieving the reward address (#848)
  • +
  • config: restore default config when it is deleted (#847)
  • +
  • cmd: changing home directory for root users (#846)
  • +
  • removing BasicCheck for hash (#845)
  • +
  • disabling libp2p ping protocol (#844)
  • +
  • build docker file (#839)
  • +
  • sync: ignore publishing a block if it is received before (#829)
  • +
  • network: subscribing to the Libp2p event bus (#828)
  • +
  • sync: ignore block request if blocks are already inside the cache (#817)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/01/04/release-0-19-0.html b/ar/2024/01/04/release-0-19-0.html new file mode 100644 index 000000000..14c1a792c --- /dev/null +++ b/ar/2024/01/04/release-0-19-0.html @@ -0,0 +1,507 @@ + + + + + + + + + + + + + Pactus 0.19.0 Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.19.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.19.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version has improved the overall performance of the blockchain by implementing +PIP-15. +PIP-15 suggests to add caching algorithms to the database for the most frequently used items.

+ +

Additionally, this version has enhanced the connectivity of the nodes in the P2P network.

+ +

Availability Score

+ +

This version comes with the implementation of PIP-19. +PIP-19 suggests assigning the “Availability Score” to each validator based on their activities in the +committee. +Validators with a score less than 0.8 won’t receive the block reward, +as their proposals will be rejected by other validators. +The main reason behind this PIP is to prevent users from downgrading +their node specifications and running Pactus on machines with low resources.

+ +

Breaking change

+ +

The Docker container now contains both daemon and wallet binary files. +Users who use Docker to run Pacts now need to add the entry point to run Pactus.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gRPC: defining network and peers info response’s properly (#898)
  • +
  • implementing pip-19 (#899)
  • +
  • network: disabling GosipSub, only FloodSub (#895)
  • +
  • www: adding change proposer round and value to consensus info votes (#892)
  • +
  • network: adding relay service to dial relay nodes (#887)
  • +
  • implementing pip-15 (#843)
  • +
  • check already running by lock file (#871)
  • +
+ +

Fix

+ +
    +
  • store: use cache to check if public key exists (#902)
  • +
  • executor: not rejecting bond transaction for bootstrap validator (#901)
  • +
  • GUI: removing unnecessary tags in transaction confirm dialog (#893)
  • +
  • network: close relay connection for public node (#891)
  • +
  • network: refining GossipSubParams for Gossiper node (#882)
  • +
  • sync: adding sequence number to the bundle (#881)
  • +
  • network: turn off mesh for gossiper node (#880)
  • +
  • consensus: check voteset for CP strong termination (#879)
  • +
  • adding querier to query messages (#878)
  • +
  • execution: fixing issue #869 (#870)
  • +
  • fixing logger issue on rotating log file (#859)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/01/08/mainnet-announcement.html b/ar/2024/01/08/mainnet-announcement.html new file mode 100644 index 000000000..ca0c78e91 --- /dev/null +++ b/ar/2024/01/08/mainnet-announcement.html @@ -0,0 +1,439 @@ + + + + + + + + + + + + + Mainnet announcement | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Mainnet announcement

+ +

The much-awaited Mainnet Launch of The Pactus Blockchain is finally here! +On January 24, 2024, at 20:24:00 UTC, the first block, known as the Genesis block, +will be minted by four Bootstrap validators. +After that, every 10 seconds, a new block will be added to the blockchain. +Each block contains the committed transactions in the network. +The block finality in the Pactus blockchain is immediate. +It means that there is no need to wait for block confirmation to ensure a transaction is committed.

+ +

Later, more than 2000 community validators will secure the blockchain and make it decentralized. +These validators are Testnet participants who helped test Pactus during our testing period. +The community validators will receive the initial staking coins from a Discord Bot named RoboPac.

+ +

To ensure everything works smoothly on the Mainnet, three different Testnets ( +Testnet0, +Testnet1, and +Testnet2) have been run.

+ +

The Mainnet will never be stopped or interrupted by the core developers of Pactus, +and validators should primarily participate in and maintain the security of the blockchain.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/01/11/release-0-20-0.html b/ar/2024/01/11/release-0-20-0.html new file mode 100644 index 000000000..65ad03e9c --- /dev/null +++ b/ar/2024/01/11/release-0-20-0.html @@ -0,0 +1,504 @@ + + + + + + + + + + + + + Pactus 0.20.0 Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.20.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.20.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

Validator Stake Management

+ +

The new GUI application enables users to easily Unbond and Withdraw their validator’s stake.

+ +

Withdraw dialog

+ +

Improving Network Connectivity

+ +

Some users have reported that UDP packets are being dropped by their Internet Service Providers. +Therefore, the UDP protocol is disabled by default. +Users can still activate the UDP protocol by configuring the settings in the file if necessary.

+ +

Also, the experimental Node Gossip feature has been removed in this version. +Node gossip could cause some validators to become isolated from the rest of the network.

+ +

Relay service

+ +

This version enables users to turn their node into a relay service. +A relay service node can help users behind NAT to communicate with each other. +It is disabled by default and can be enabled inside the config file. +Please note that it is still in an experimental state.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement relay service (#931)
  • +
  • HTTP: Integrate AddRowDouble and update tests (#926)
  • +
  • network: making listen address private in config (#921)
  • +
  • http: adding AvailabilityScore to http module (#917)
  • +
  • network: adding ‘enable_udp’ config (#918)
  • +
  • network: removing gossip node service (#916)
  • +
  • gRPC: adding AvailabilityScore to gRPC (#910)
  • +
  • GUI: unbond and withdraw transaction dialogs (#908)
  • +
+ +

Fix

+ +
    +
  • gRPC: adding missing get raw transaction APIs to gRPC gateway (#925)
  • +
  • network: preventing self dial (#924)
  • +
  • fixing time lag on starting node (#923)
  • +
  • network: fixing network deadlock on linux arm64 (#922)
  • +
  • GUI: updating unbond and withdraw dialogs (#911)
  • +
  • fixing gRPC node info issue (#906)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/01/22/testnet-2-concluded.html b/ar/2024/01/22/testnet-2-concluded.html new file mode 100644 index 000000000..225ec4125 --- /dev/null +++ b/ar/2024/01/22/testnet-2-concluded.html @@ -0,0 +1,487 @@ + + + + + + + + + + + + + Story of Testnet-2 | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Story of Testnet-2

+ +

What is Testnet?

+ +

Testnet is a testing environment where developers and users can try out the functionality of a blockchain project, +without putting real assets or data at risk. +It helps to ensure that the final product is reliable and secure for users to use. +If you like to read more about the Testnet you can check out our post on +“What is Testnet?”.

+ +

Summary

+ +

In October 2023, we launched Testnet-2. +The main purpose of this Testnet was to closely monitor the new consensus mechanism and the stability of the P2P network.

+ +

The committee for Testnet-2 was set to 51 validators, +and 2084 validators joined during the Testnet period. +More than 1500 computers and servers joined the network, and we experienced a high volume of data transmission in the network. +More than 800,000 blocks were created, and about 2 million transactions were processed during this time. +The size of the blockchain is about 450 megabytes.

+ +

About 500,000 coins were staked during this period, almost 60% of the total generated coins. +It shows that users, even in Testnet, tend to stake their coins.

+ +

Stability of Consensus

+ +

In Testnet-1, we had one consensus failure that caused us to +conclude the Testnet-1. +During Testnet-2, there were no issues with the consensus mechanism, and +we had no case of failure during the testing period, +although the number of validators and nodes significantly increased on Testnet-2 compared to its predecessor. +It proved that the consensus mechanism is in a stable situation.

+ +

Networking issues

+ +

In Testnet-2, the blockchain stopped twice, and each time it took more than 24 hours to fix the problem. +In the second blockage, we had no choice but to ask active validators inside the committee to +update their nodes to overcome the networking issue. +The development team faced a difficult situation and had to make the proper decision to fix the networking issues. +On one hand, the networking traffic increased significantly, and on the other hand, we had to +make sure normal users with limited internet bandwidth could still participate in the consensus mechanism without any problems. +After examining different scenarios, the networking issues were resolved, and +no major problems were reported till the end of Testnet.

+ +

Major updates

+ +

During Testnet-2, we introduced several updates, including versions +0.15.0, +0.16.0, +0.17.0, +0.18.0, +0.19.0, and +0.20.0. +The update process went smoothly, and with the stability of Version 0.20.0 confirmed, +the development team shifted its focus to the Mainnet launch.

+ +

Special thanks to the community

+ +

This Testnet was important for us. +It helped us learn what we need to do to make Pactus work even better. +Without the community that supports us and dedicates their time and resources to testing and feedback, +we wouldn’t have been able to progress as we have.

+ +

We thank all of them for their valuable contributions. +As promised, participants in Testnets will be given priority as validators for the MainNet, and +will receive bounty PAC coins to set up their validators.

+ +

We are grateful to all those who participated in Testnets, and we encourage them to join the Mainnet. +As a community-based project, we rely on the support of our community members, and we value any help we receive.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/01/24/mainnet-launched.html b/ar/2024/01/24/mainnet-launched.html new file mode 100644 index 000000000..7df438664 --- /dev/null +++ b/ar/2024/01/24/mainnet-launched.html @@ -0,0 +1,477 @@ + + + + + + + + + + + + + Mainnet launched 🚀 | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Mainnet launched 🚀

+ +

Years to Launch

+ +

Pactus Mainnet started creating the first block on 24 January 2024 at 20:24:10 UTC time. +Pactus Mainnet is the result of years of hard work, research, and innovation. +It started from one idea:

+ +

A low-cost, truly decentralized blockchain, built by the people for the people, +where anyone could run and be their own validator.

+ +

We faced many challenges and obstacles along the way, but we never gave up.
+We overcame them with our determination and perseverance.
+We learned from our mistakes and improved our solutions.
+We grew from a small team to a large community.
+We achieved many milestones and breakthroughs. And we did it.
+We created Pactus, the platform that empowers you.

+ +

Thanks to Community

+ +

We want to thank Pactus community for helping us on the Testnet.

+ +

You have been instrumental in testing and improving the Testnet.
+You have given us your honest feedback and constructive suggestions.
+You have reported and help fixed bugs and errors.
+You have challenged and pushed us to do better.
+You have been our partners and friends in this journey.

+ +

On the Road

+ +

The true journey has just started.
+The Mainnet is not the end, but the beginning.
+The beginning of a new era of blockchain innovation.
+The beginning of a new challenge and opportunity.
+The beginning of a new revolution and evolution!

+ +

We welcome you more than ever.
+We need you to join us in this exciting adventure.
+We need you to support us in this ambitious endeavor.
+We need you to be part of Pactus, the platform that empowers you!

+ +

We Have a Dream

+ +

We have a dream.
+A dream of a world where blockchain technology is not a privilege, but a right for everyone.
+A dream of a world where smart contracts and decentralized applications are fast, secure, and scalable.
+A dream of a world where Pactus is the platform that empowers you.

+ +

This dream is not just ours. It is yours too.
+You share our vision and passion for blockchain innovation.
+You believe in our potential and impact.
+You support our goals and values.
+You are part of our dream.

+ +

And this dream is not just a fantasy. It is a reality.
+A reality that we have created together.
+A reality that we have launched today. A reality that we can explore and enjoy together.
+A reality that we can shape and improve together.
+A reality that we can make better and brighter together!

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/01/31/release-1-0-0.html b/ar/2024/01/31/release-1-0-0.html new file mode 100644 index 000000000..fe58d5d52 --- /dev/null +++ b/ar/2024/01/31/release-1-0-0.html @@ -0,0 +1,492 @@ + + + + + + + + + + + + + Pactus 1.0.0 (Beijing) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.0.0 (Beijing) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.0.0 (Beijing) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Pactus Version 1.0.0 (Beijing)

+ +

Highlights

+ +

Mainnet Official Release v1.0.0 (Beijing)

+ +

The much-anticipated official software release of Pactus v1.0.0 (Beijing) marks a significant milestone +for our community. +This impressive mainnet release represents the culmination of extensive development efforts. +Pactus v1.0.0 (Beijing) offers a pioneering solution for streamlining the validation of Pactus blockchain, +enhancing security, and providing a user-friendly experience. We’re excited to unveil the official software +and welcome users to experience the power of Pactus in revolutionizing the future of blockchain. Join us on +this exciting journey.

+ +

Onboarding validators

+ +

On February 1st, a total of 53,494 PAC coins will be distributed among 1,311 validators who participated in +Testnet-0, +Testnet-1, and +Testnet-2. +This marks the beginning of a new chapter in the decentralized world.

+ +

Download

+ +

This version has been implemented for Mainnet +To start using Pactus Mainnet, download the latest version from the download +page and join the Mainnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement get validator address for grpc (#975)
  • +
  • add bootstrap.json and load in config on build (#964)
  • +
  • add mainnet config and genesis files (#951)
  • +
  • add Consensus-address to network info (#952)
  • +
  • grpc: sign transaction using wallet client (#945)
  • +
  • pactus gui lock support (#947)
  • +
  • consensus: turning consensus to a zero-config module (#942)
  • +
+ +

Fix

+ +
    +
  • localnet wallet issue (#970)
  • +
  • sync: remove ReachabilityStatus from agent info (#956)
  • +
  • daemon: keeping previous behavior for password flag, linting CLI messages (#950)
  • +
  • consensus: detect if the system time is behind the network (#939)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/02/10/release-1-0-1.html b/ar/2024/02/10/release-1-0-1.html new file mode 100644 index 000000000..621bacc82 --- /dev/null +++ b/ar/2024/02/10/release-1-0-1.html @@ -0,0 +1,472 @@ + + + + + + + + + + + + + Pactus 1.0.1 (Beijing) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.0.1 (Beijing) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.0.1 (Beijing) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

This release is named after the city of Beijing and it +was unanimously selected by Pactus community.

+ +

Pactus Version 1.0.1 (Beijing)

+ +

Highlights

+ +

This update fixes several issues identified after the release of +1.0.0 (Beijing). +Specifically, it fixes the missed log file on the Windows GUI application and improves the node connectivity.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gui: add connections and moniker fields to main windows (#1090)
  • +
+ +

Fix

+ +
    +
  • network: set dial and accept limit in connection gater (#1089)
  • +
  • gui stderr logger in windows os (#1081)
  • +
  • sync: improve syncing process (#1087)
  • +
  • network: redefine resource limits (#1086)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/02/18/release-1-0-2.html b/ar/2024/02/18/release-1-0-2.html new file mode 100644 index 000000000..7ae0434d6 --- /dev/null +++ b/ar/2024/02/18/release-1-0-2.html @@ -0,0 +1,463 @@ + + + + + + + + + + + + + Pactus 1.0.2 (Istanbul) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.0.2 (Istanbul) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.0.2 (Istanbul) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

This release is named after the city of Istanbul and it +was unanimously selected by Pactus community.

+ +

Pactus Version 1.0.2 (Istanbul)

+ +

Highlights

+ +

This update fixes a major issue that decreases the number of inbound connections of the nodes over time. +We highly recommend all users to upgrade to the new version for better connectivity.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • sync: fix concurrent map read-write crash (#1112)
  • +
  • network: remove disconnected peers from peerMgr (#1110)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/03/16/testnet-phoenix-launched.html b/ar/2024/03/16/testnet-phoenix-launched.html new file mode 100644 index 000000000..d755af836 --- /dev/null +++ b/ar/2024/03/16/testnet-phoenix-launched.html @@ -0,0 +1,451 @@ + + + + + + + + + + + + + Pactus Permanent Phoenix Testnet Launched | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus Permanent Phoenix Testnet Launched

+ +

The public and permanent Phoenix Testnet +for the Pactus blockchain has been launched. +This Testnet serves as a valuable platform for developers to thoroughly examine their projects, +providing a safe playground to test and deploy their applications before transitioning to the Mainnet.

+ +

Pactus Public Phoenix Testnet

+ +

All parameters within the Testnet mirror those of the Mainnet, +ensuring a consistent environment for testing and development. +The genesis block for the Testnet is available +here.

+ +

Currently, there are four active nodes running the Testnet, accessible at the following addresses:

+ +
    +
  • testnet1.pactus.org
  • +
  • testnet2.pactus.org
  • +
  • testnet3.pactus.org
  • +
  • testnet4.pactus.org
  • +
+ +

The Testnet’s name, Phoenix, was chosen by the Pactus community from various suggestions. +It embodies the spirit of rebirth and renewal, highlighting the innovative and testing-focused nature of the network. +Developers can utilize the RoboPAC as a faucet to receive test coins and +thoroughly test their applications within this environment. +It’s important to note that the coins within this Testnet hold no monetary value and are only meant for testing purpose.

+ +

All addresses within the Phoenix network are prefixed with tpc1..., +distinguishing them from Mainnet addresses that start with pc1...’. +This clear differentiation streamlines development and ensures seamless integration when transitioning to +the Mainnet environment.

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/04/14/release-1-1-0.html b/ar/2024/04/14/release-1-1-0.html new file mode 100644 index 000000000..7ef879490 --- /dev/null +++ b/ar/2024/04/14/release-1-1-0.html @@ -0,0 +1,556 @@ + + + + + + + + + + + + + Pactus 1.1.0 (Hanoi) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.0 (Hanoi) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.0 (Hanoi) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Hanoi, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.0 (Hanoi)

+ +

Highlights

+ +

This update brings some changes that are not compatible with the earlier version. +Here are the key points:

+ +
    +
  1. Fee calculations are now rounded, and fees can be accepted within a range of one NanaoPAC (see #1174).
  2. +
  3. Small bonds for existing validators are now accepted (see #1152).
  4. +
+ +

Validators must update their nodes to this version as soon as possible.

+ +

Other major changes in this version include:

+ +
    +
  • The addition of a JSON-RPC endpoint required by third parties like exchanges to connect to Pactus nodes.
  • +
  • The implementation of Pactus Shell tools, allowing users to query the node.
  • +
+ +

Additionally, this version improves the syncing process for new nodes, enhances the GUI, and addresses several issues.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gRPC: add get address history method (#1206)
  • +
  • grpc: Add GetNewAddress/GetTotalBalance endpoint to gateway (#1197)
  • +
  • GUI: adding total balance to wallet widget (#1194)
  • +
  • Add GetNewAddress gRPC API (#1193)
  • +
  • gRPC: add new API to get the total balance of wallet (#1190)
  • +
  • GUI: showing transaction hash after broadcasting transaction (#1187)
  • +
  • add jsonrpc gateway support (#1183)
  • +
  • config: one reward address in config for all validators (#1178)
  • +
  • GUI: memo field for transactions on GUI wallet (#1182)
  • +
  • implement basic auth for pactus shell (#1177)
  • +
  • grpc: add rust code gen for proto (#1151)
  • +
  • testnet: define permanent Testent genesis (#1173)
  • +
  • add basic auth authentication for securing grpc (#1162)
  • +
  • grpc: calculate fee for create-raw-transaction APIs (#1159)
  • +
  • grpc: add fixed-amount to calc-fee API (#1146)
  • +
  • wallet: adding all account address functions (#1128)
  • +
  • grpc: update swagger API to version 1.1 (#1106)
  • +
  • GUI: adding availability score in wallet (#1118)
  • +
  • logger: adding log target (#1122)
  • +
  • logger: adding file_only option (#1117)
  • +
  • gui: add connections and moniker fields to main windows (#1090)
  • +
  • implementation for PIP-22 (#1067)
  • +
  • generate documentation for proto files (#1064)
  • +
  • pactus-ctl (#946)
  • +
+ +

Fix

+ +
    +
  • gRPC: add basic auth option in header (#1217)
  • +
  • gRPC: not return block data on information verbosity (#1212)
  • +
  • wallet: fix wallet conn issue (#1211)
  • +
  • GUI: update total balance on wallet timeout (#1204)
  • +
  • accept small bond to existing validator (#1152)
  • +
  • GUI: make transaction hash selactable (#1196)
  • +
  • close connections with peers that have no supported protocol (#1181)
  • +
  • sync: check the start block request height (#1176)
  • +
  • config: load logger levels in Mainnet config (#1168)
  • +
  • gRPC: pactus swagger not found (#1163)
  • +
  • add error type for invalid configs (#1153)
  • +
  • save Mainnet config with inline comments (#1143)
  • +
  • network: set deadline for streams (#1149)
  • +
  • grpc: fix error 404 on grpc gateway (#1144)
  • +
  • wallet: checking args in history add (#1141)
  • +
  • gRPC: adding sign raw transaction API to gateway (#1116)
  • +
  • sync: fix concurrent map read-write crash (#1112)
  • +
  • network: remove disconnected peers from peerMgr (#1110)
  • +
  • network: set dial and accept limit in connection gater (#1089)
  • +
  • stderr logger in windows os (#1081)
  • +
  • sync: improve syncing process (#1087)
  • +
  • network: redefine resource limits (#1086)
  • +
+ +

Refactor

+ +
    +
  • sync: improve syncing process (#1207)
  • +
  • move fee calculation logic to execution package (#1195)
  • +
  • introduce Amount data type for converting PAC units (#1174)
  • +
  • using PAC instead of atomic units for external input/outputs (#1161)
  • +
  • change func() to cancel func type (#1142)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/04/18/release-1-1-1.html b/ar/2024/04/18/release-1-1-1.html new file mode 100644 index 000000000..6ea4cc527 --- /dev/null +++ b/ar/2024/04/18/release-1-1-1.html @@ -0,0 +1,491 @@ + + + + + + + + + + + + + Pactus 1.1.1 (Jakarta) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.1 (Jakarta) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.1 (Jakarta) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Jakarta, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.1 (Jakarta)

+ +

Highlights

+ +

This update fixes the issue of zero-bonding +that identified after the release of 1.1.0 (Hanoi). +This fix will be applied at block height 740,000 to ensure a smooth upgrade.

+ +

Additionally, this version rejects connections from nodes version 1.0.2 and earlier.

+ +

Validators must update their nodes to this version as soon as possible.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • reject direct message from non-supporting agents (#1225)
  • +
+ +

Fix

+ +
    +
  • prevent zero stake for bond transactions (#1227)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/04/25/release-1-1-3.html b/ar/2024/04/25/release-1-1-3.html new file mode 100644 index 000000000..842daaf62 --- /dev/null +++ b/ar/2024/04/25/release-1-1-3.html @@ -0,0 +1,495 @@ + + + + + + + + + + + + + Pactus 1.1.3 (Kuala Lumpur) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.3 (Kuala Lumpur) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.3 (Kuala Lumpur) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Kuala Lumpur, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.3 (Kuala Lumpur)

+ +

Highlights

+ +

This version prevents spamming transactions by defining a minimum value per transaction. +It is not part of the consensus parameters, +and each node can set its own threshold. +By default, it is set to 0.1 PAC.

+ +

The version also bans validators that were part of the recent spam attack on the network. +Their stake will be frozen at block 820,000.

+ +

Validators must update their nodes to this version as soon as possible.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • ban attacker validators (#1235)
  • +
  • txpool: prevent spamming transactions by defining a minimum value (#1233)
  • +
+ +

Fix

+ +
    +
  • wallet: saving wallet file after generating new address in gRPC (#1236)
  • +
  • network: disconnect from peers that has no protocol (#1243)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/05/07/release-1-1-4.html b/ar/2024/05/07/release-1-1-4.html new file mode 100644 index 000000000..d764a9198 --- /dev/null +++ b/ar/2024/05/07/release-1-1-4.html @@ -0,0 +1,484 @@ + + + + + + + + + + + + + Pactus 1.1.4 (London) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.4 (London) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.4 (London) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.1.4 (London)

+ +

Highlights

+ +

This version fixes some issues related to the syncing process and improves the connectivity of the nodes.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • network: set infinite limit for resource manager (#1261)
  • +
  • sync: introduce session manager (#1257)
  • +
  • HTTP: using amount type for fee in transaction details (#1255)
  • +
+ +

Refactor

+ +
    +
  • network: refactor peer manager and redefine the min cons (#1259)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/05/30/release-1-1-5.html b/ar/2024/05/30/release-1-1-5.html new file mode 100644 index 000000000..2cf12f1ad --- /dev/null +++ b/ar/2024/05/30/release-1-1-5.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + Pactus 1.1.5 (Cape Town) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.5 (Cape Town) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.5 (Cape Town) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

Rate limit

+ +

This version applies a rate limit to the messages in the general topics including blocks and transactions. +This will help nodes to manage the network traffic in times of network congestion or spam attacks.

+ +

Dynamic fee

+ +

To prevent attackers from sending spam transactions, a dynamic fee model is introduced in this patch. +Each node can define a minimum fee that is defaulted to 0.000001 PAC. +However, if the transaction pool becomes full, the transaction fee can increase up to 1 PAC.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • add dynamic fee (#1290)
  • +
  • network: define config for rate limit threshold (#1284)
  • +
  • network: ratelimit gossip for prevent spamming (#1283)
  • +
+ +

Fix

+ +
    +
  • change CalculateFee to be backward compatible (#1291)
  • +
  • proposal basic checks deferred to consensus (#1288)
  • +
  • rejected spam tx for same from and to (#1287)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/05/31/release-1-1-6.html b/ar/2024/05/31/release-1-1-6.html new file mode 100644 index 000000000..25f92c957 --- /dev/null +++ b/ar/2024/05/31/release-1-1-6.html @@ -0,0 +1,483 @@ + + + + + + + + + + + + + Pactus 1.1.6 (Ottawa) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.6 (Ottawa) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.6 (Ottawa) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

This version updates the consensus mechanism to move to new rounds once +a proper and justified “Decided” vote seen by a non-faulty validator. +This helps ensure that the consensus mechanism stays in sync with the network when the validator restarts.

+ +

In this version, the minimum availability score is set to 0.6666. +This change will help validators receive rewards even in faulty network conditions, +ensuring that they can continue to participate in the consensus mechanism.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • consensus: move to new round on decided vote (#1293)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/06/02/release-1-1-7.html b/ar/2024/06/02/release-1-1-7.html new file mode 100644 index 000000000..a8ceb90af --- /dev/null +++ b/ar/2024/06/02/release-1-1-7.html @@ -0,0 +1,500 @@ + + + + + + + + + + + + + Pactus 1.1.7 (Santiago) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.7 (Santiago) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.7 (Santiago) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

Here are the key improvements in this version:

+ +
    +
  • +

    Resolves critical issue in consensus: +This version addresses a critical issue in consensus that prevents broadcasting expired proposals across the network.

    +
  • +
  • +

    Improved network security: +The version defines a list of blacklisted IPs and disconnects from them, enhancing network security.

    +
  • +
  • +

    Node compatibility: +This version only connects to nodes with version 1.1.6 or above, ensuring compatibility with the latest software.

    +
  • +
+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • network: add firewall black list ips to banning when connecting to peer (#1298)
  • +
+ +

Fix

+ +
    +
  • sync: load black listed addresses from the config (#1301)
  • +
  • consensus: only proposer responds to the query proposal (#1300)
  • +
  • network: set latest support version to 1.1.6 (#1299)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/06/02/release-1-1-8.html b/ar/2024/06/02/release-1-1-8.html new file mode 100644 index 000000000..fcc3fa4c1 --- /dev/null +++ b/ar/2024/06/02/release-1-1-8.html @@ -0,0 +1,494 @@ + + + + + + + + + + + + + Pactus 1.1.8 (Budapest) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.8 (Budapest) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.8 (Budapest) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.1.8 (Budapest)

+ +

Highlights

+ +

This version aims to reduce the consensus message once there is a delay on block creation. +It also defines a fixed fee of 0.1 PAC for transactions. +This fixed fee will be replaced by a dynamic fee in future releases, +which will provide more flexibility and efficiency.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • firewall: define rate limit for network topics (#1308)
  • +
+ +

Fix

+ +
    +
  • set fix fee 0.1 PAC for transactions (#1315)
  • +
  • consensus: add round to query proposal message (#1314)
  • +
  • firewall: block peer base on blacklisted CIDR (#1309)
  • +
  • consensus: reduce ChangeProposerTimeout to 6 seconds (#1311)
  • +
  • sync: define rate limit for query vote and proposal (#1310)
  • +
  • decrease to 100 maximum transaction per block (#1306)
  • +
  • consume message first then ignore on ratelimit (#1304)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/06/20/release-1-2-0.html b/ar/2024/06/20/release-1-2-0.html new file mode 100644 index 000000000..2d7480f6d --- /dev/null +++ b/ar/2024/06/20/release-1-2-0.html @@ -0,0 +1,538 @@ + + + + + + + + + + + + + Pactus 1.2.0 (Sydney) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.2.0 (Sydney) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.2.0 (Sydney) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.2.0 (Sydney)

+ +

Highlights

+ +

This version includes some improvements and new features, such as:

+ +
    +
  • Clock offset calculation: Adding clock offset check to +alert the user if their machine’s time is not synced with the network. +See PIP-18: Clock Offset Calculation.
  • +
  • Minimum fee: The minimum fee is configurable in this version, with the default set to 0.01. +Each validator can decide the minimum fee of transactions they want to include in the block +by changing the min_fee value inside the config file.
  • +
  • ip blocker: A new option allows nodes to block certain IPs and disconnect from them.
  • +
  • rate limit: Nodes can set rate limits for incoming messages, including transactions.
  • +
  • wallet manager: The wallet manager allows users to create and manage wallets using gRPC endpoints.
  • +
+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • config: make minimum fee configurable (#1349)
  • +
  • apply rate limit for the network topics (#1332)
  • +
  • add ipblocker package (#1323)
  • +
  • consensus: fast consensus path implementation (#1253)
  • +
  • version: add alias to node version (#1281)
  • +
  • ntp: add ntp util (#1274)
  • +
  • gRPC: add connection info to node info (#1273)
  • +
  • gRPC: add only_connected parameter to getNetworkInfo API (#1264)
  • +
  • grpc: refactor CreateWallet and add RestoreWallet API endpoint (#1256)
  • +
  • add wallet service (#1241)
  • +
  • ban attacker validators (#1235)
  • +
  • txpool: prevent spamming transactions by defining a minimum value (#1233)
  • +
  • reject direct message from non-supporting agents (#1225)
  • +
+ +

Fix

+ +
    +
  • wallet: add public key on get new address (#1350)
  • +
  • sync: add IsBannedAddress check in processing connect event (#1347)
  • +
  • sync: update latest supporting version (#1336)
  • +
  • state: improve node startup by optimizing availability score calculation (#1338)
  • +
  • HTTP: add clock offset and connection info to node-info API (#1334)
  • +
  • grpc: add stacktrace to locate panic (#1333)
  • +
  • consensus: implement PIP-26 (#1331)
  • +
  • grpc: improve grpc server and client (#1330)
  • +
  • util: add more ntp pool (#1328)
  • +
  • jsonrpc: update JSON-RPC Gateway to support headers and improve client registry (#1327)
  • +
  • consensus: improve consensus algorithm (#1329)
  • +
  • txpool: set fix fee of 0.1 PAC for transactions (#1320)
  • +
  • network: add block and transaction topics (#1319)
  • +
  • gRPC: prevent concurrent map iteration and map write (#1279)
  • +
  • api: add swagger schemes (#1270)
  • +
  • network: set infinite limit for resource manager (#1261)
  • +
  • sync: introduce session manager (#1257)
  • +
  • HTTP: using amount type for fee in transaction details (#1255)
  • +
  • network: disconnect from peers that has no protocol (#1243)
  • +
  • wallet: saving wallet file after generating new address in gRPC (#1236)
  • +
  • prevent zero stake for bond transactions (#1227)
  • +
  • set bounding interval for first boudning tx only (#1224)
  • +
+ +

Refactor

+ +
    +
  • wallet: set server address on loading wallet (#1348)
  • +
  • removed deprecated LockWallet and UnLockWallet from WalletService (#1343)
  • +
  • crypto: decode data to point on verification (#1339)
  • +
  • network: define connection info in network proto (#1297)
  • +
  • sync: define peer package (#1271)
  • +
  • network: refactor peer manager and redefine the min cons (#1259)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/2024/06/27/release-1-3-0.html b/ar/2024/06/27/release-1-3-0.html new file mode 100644 index 000000000..7de546e0c --- /dev/null +++ b/ar/2024/06/27/release-1-3-0.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + Pactus 1.3.0 (Warsaw) Released | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.3.0 (Warsaw) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.3.0 (Warsaw) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.3.0 (Warsaw)

+ +

Highlights

+ +

This version fixes an issue that caused some nodes to get stuck for one minutes and +not receive any new messages during that time.

+ +

Breaking Change: gRPC APIs now convert all binary values to hexadecimal strings.

+ +
+ Attention Exchanges and Third-Party Pactus Blockchain Users: +
+
+ After upgrading to this version, be aware that binary data, such as hashes and signatures, + are now formatted as hexadecimal strings. You must update your code to accommodate this change. +
+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • grpc: get txpool content API (#1364)
  • +
  • network: permanent peer store (#1354)
  • +
+ +

Fix

+ +
    +
  • grpc: change bytes type to hex string (#1371)
  • +
  • http: add basic auth middleware for http server (#1372)
  • +
  • network: use goroutines for sending streams (#1365)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ + + + +
+
+
+
+ + + + diff --git a/ar/404.html b/ar/404.html new file mode 100644 index 000000000..9bbdcce50 --- /dev/null +++ b/ar/404.html @@ -0,0 +1,263 @@ + + + + + + + + + + + + + Error 404, Page Not Found | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

404

+ +

Page not found :(

+

The requested page could not be found.

+
+ + + diff --git a/ar/about/faq/index.html b/ar/about/faq/index.html new file mode 100644 index 000000000..9450af8b8 --- /dev/null +++ b/ar/about/faq/index.html @@ -0,0 +1,1478 @@ + + + + + + + + + + + + + الأسئلة المتكررة | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
+

الأسئلة المتكررة

+

تهدف هذه الصفحة الشائعة الاستخدام (الأسئلة المتكررة) إلى توفير معلومات مفيدة وإرشادات حول الأسئلة الشائعة والمخاوف المتعلقة بـ بكتوس. +

+
+ +
+ + + + + + + + + + + +
+
***
+ +
+ +
+
+
+ + عام +
+
+ + +

+ ما معنى "بكتوس"؟ +

+
+ + + + + + + كلمة "Pactus" ذات أصل لاتيني + وتعني "الاتفاق معًا" أو "عقد" أو "معاملة". في الإنجليزية، يتم استخراج مصطلح "Pact" من الكلمة اللاتينية "Pactus". + + + +
+ + +

+ هل بكتوس هي نسخة من أي بلوكشين أخرى؟ +

+
+ + + + + + + لا، بكتوس ليست نسخة أو مشتقة من أي بلوكشين آخر. إنها بروتوكول بلوكشين جديد وفريد تم تصميمه من الصفر. آلية التوافق المستخدمة في بكتوس فريدة وتم إنشاؤها خصيصًا لحل مشكلة قابلية توسع محققي الحصة الأدلة بلوكشين. + + + +
+ + +

+ Did Pactus have an ICO? +

+
+ + + + + + + + + لا، بكتوس ليس لديها ICO (Initial Coin Offering) ولا توجد حسابات محددة مسبقًا أو محظوظة في بكتوس. يبدأ بلوكشين بكتوس من الصفر وتتم طباعة جميع العملات من خلال آلية التوافق. هذا يضمن توزيع العملات بشكل عادل وعدم وجود تمركز للثروة. + + + +
+ + +

+ Where can I buy Pactus coins? +

+
+ + + + + + + Pactus does not have any pre-sales coins. The only way to obtain Pactus coins at the moment is by installing the Pactus software and actively participating in block validation. By engaging in the network and contributing to block validation, you will be rewarded with Pactus coins. + + + +
+ + +

+ لماذا تم تطوير بكتوس؟ +

+
+ + + + + + + + + تم تطوير بكتوس بهدف توسيع مقياس بلوكشين دون التأثير على الأمان والتفرد. ولتحقيق ذلك، يستخدم بكتوس آلية توافق فريدة تمكّن من إنشاء بلوك في 10 ثوانٍ فقط. وعلاوة على ذلك، تم تصميم بكتوس لتكون أكثر إمكانية الوصول لجميع المستخدمين، بغض النظر عن خبراتهم التقنية أو مواردهم المالية.

تعكس التزامنا بالتفرد والعدالة في قرارنا + بالبدء في بلوكشين بكتوس من الصفر وضمان طباعة جميع العملات من خلال آلية التوافق، بدلاً من إجراء ICO أو حسابات محظوظة. + + + +
+ + +

+ ما المشكلات التي يحلّها بكتوس ولا يحلّها غيرها من البلوكتشينات؟ +

+
+ + + + + + + + + تحاول بكتوس حلّ العديد من المشاكل التي تواجهها شبكات البلوكتشين الأخرى، بما في ذلك مشكلات القابلية للتوسع، والوصول، والعدالة في التوزيع، وتكلفة التخزين.

مشكلات القابلية للتوسع: تتميز بكتوس بآلية اتفاق فريدة من نوعها تم تصميمها خصيصًا للتعامل مع مشكلة القابلية للتوسع، دون التضحية بالأمان واللامركزية.

الوصول: تم تصميم تشغيل المعالج على بكتوس بحيث يكون أكثر وصولًا للمستخدمين العاديين مقارنة بالبلوكتشينات الأخرى.

العدالة في التوزيع: تمتلك بكتوس نموذجًا عادلاً وشفافًا لتوزيع العملات، بهدف منع تراكم الثروة.

تكلفة التخزين: توفر بكتوس حلًا جديدًا لمشكلة التخزين، حيث يمكن للمستخدمين تخصيص ملفات تخزين مخصصة، مما يقلل من تكلفة التخزين ويبسط العقود الذكية. + + + +
+ + +

+ ما الفرق بين بكتوس وبيتكوين؟ +

+
+ + + + + + + بكتوس وبيتكوين هما نوعان مختلفان من شبكات البلوكتشين. بينما يستخدم بيتكوين + عملية تسمى "إثبات العمل" لتأمين شبكته، يستخدم بكتوس طريقة مختلفة تسمى "إثبات الحصة". هذا يعني أنه بدلاً من التعدين، +يكون المصدقون مسؤولين عن التصويت على الكتل الواردة ويجب أن يمتلكوا مبلغًا معينًا من عملة الشبكة، المعروفة باسم "الحصة"، كوديعة أمان لمنع السلوك الخبيث. + + + +
+ + +

+ ما الفرق بين بكتوس وإيثيريوم؟ +

+
+ + + + + + + + + بكتوس و إيثيريوم هما شبكتي بلوكتشين تعتمدان على إثبات الحصة، لكنهما يختلفان في نهجهما لتشغيل المصدق. يمكن أن يكون تشغيل المصدق في إيثيريوم تحديًا ويتطلب حصةً بحد أدنى 32 عملة إيثيريوم. بالمقابل، صُمم بكتوس ليكون أكثر قابلية للاستخدام للمستخدمين العاديين. لا يوجد متطلب حصة دنيا، ويمكنك تشغيل عقدة بكتوس على أي نظام تشغيل بمعدات أساسية. يعكس هذا النهج التزامنا بتعزيز التوزيع وجعل تقنية البلوكتشين متاحة لجمهور أوسع. + + + +
+ +
+ +
+
+
+ + المُصدّق +
+
+ + +

+ ما هي المُعالِجين؟ +

+
+ + + + + + + يتحمّل المعالجون في بكتوس مسؤولية معالجة المعاملات وإنشاء الكتل وبالتالي، يساعدون في تأمين الشبكة والحفاظ على انحيازها. يستخدمون عملاتهم الخاصة كرهان لضمان أمان الشبكة وتلقي مكافآت عن مساهماتهم. + + + + + +
+ + +

+ ما هو عدد المعالجين الذي يدعمه بكتوس؟ +

+
+ + + + + + + + + بكتوس عبارة عن بلوكتشين حقيقي للإثبات بالحصة، مما يعني أنه لا يوجد حد لعدد المعالجين في الشبكة. ومع ذلك، فإن لجنة مكونة من 21 معالجًا مسؤولة عن إنشاء الكتل. من المهم الإشارة إلى أن أعضاء اللجنة ليسوا ثابتين ويتغيرون مع مرور الوقت. + + + + + +
+ + +

+ ما هي الحدود الدنيا والعليا للرهان الممكنة؟ +

+
+ + + + + + + + + في بكتوس، لا يوجد حد أدنى لتجميد العملات، ولكن الحد الأقصى للعملات التي يمكنك تجميدها هو 1000 عملة. إذا كنت ترغب في تجميد أكثر من 1000 عملة، يمكنك تشغيل محقق جديد. تشغيل العديد من المحققين يحافظ على توزيع الشبكة بشكل أفضل ويساعد على الحفاظ على أمانها واستقرارها. + + + +
+ + +

+ What are the minimum hardware requirements? +

+
+ + + + + + + After thorough testing on multiple machines, we can conclude that the reccomended minimum hardware
requirements are as follows:

VPS:
* CPU's: 1/2 physical core / 1vCPU
* RAM: 1 GB Ram
* Storage (SSD): 20 GB NVMe Drive
* Network: stable internet connection with 1 TBps speed

PC:
* CPU's: 2 physical cores / 4vCPU
* RAM: 4 GB Ram
* Storage (SSD): 64 GB SSD Drive
* Network: stable internet connection with over 15 MBps speed

**Note** These specifications have been tested and provide an availabilty score of over 0.9. + + + + + +
+ + +

+ Why is there a limit for maximum stake? +

+
+ + + + + + + The limit for the maximum stake per validator enhances decentralization and prevents validators from gaining too much power, which could potentially lead them to control the committee. The maximum staking limit is part of the consensus parameters and can be changed in the future through consensus among the validators. + + + +
+ + +

+ Can I run multiple validators on one computer? +

+
+ + + + + + + The Pactus software allows you to run up to 32 validators on a single node. Running multiple validators may require slightly more memory, but it has no impact on storage, and has a negligible effect on CPU and networking usage. Running multiple validators on a single node enables users to distribute their stake across multiple validators, especially when they want to stake more than the maximum stake per validator. This eliminates the need for additional resources and simplifies node management. + + + + + +
+ + +

+ كيف يتم مكافأة المعالجين؟ +

+
+ + + + + + + + + بمجرد أن يقترح المعالج كتلة صالحة ويتم قبولها من قِبل الشبكة، يحصل المعالج على عملة واحدة كمكافأة للكتلة. تعتبر المكافأة حافزًا يتم إعطاؤه للمعالجين على مساهماتهم في أمان وسلامة الشبكة، مما يساعد على الحفاظ على سير العمل بسلاسة. + + + + + +
+ + +

+ ما هو حجم مكافأة الكتلة في بكتوس؟ +

+
+ + + + + + + تكون مكافأة الكتلة في بكتوس ثابتة، وهي عملة واحدة دائمًا لكل كتلة. تساعد هذه الخطة الثابتة للمكافأة على ضمان البساطة والعدالة وتوزيع العملة بشكل أفضل. + + + ما هو حجم مكافأة الكتلة في بكتوس؟ + + + + +
+ + +

+ How many PAC coins are generated per day? +

+
+ + + + + + + Daily, a total amount of 8640 PAC is generated. This figure translates to 241,000 every 28 days and 3,153,600 per year. + + + +
+ +
+ +
+
+
+ + إجماع +
+
+ + +

+ كيف تعمل بلوكشين بكتوس؟ +

+
+ + + + + + + + + يعمل بكتوس بواسطة لجنة من المصادقين المسؤولين عن إنشاء كتل جديدة. تتكون اللجنة من 21 مصادقًا، ومع ذلك، تتغير أعضاء اللجنة بشكل عشوائي مع مرور الوقت. كل 10 ثوانٍ، يجمع مصادق في اللجنة يُعرف باسم "المقترح" جميع المعاملات الصالحة، ويضيفها إلى كتلة، ويشاركها مع المصادقين الآخرين في اللجنة. إذا أكد أكثر من 2/3 من أصحاب المصلحة في اللجنة على الكتلة المقترحة بتوقيعهم عليها، يتم تأكيد الكتلة ويتم تنفيذ جميع المعاملات داخل الكتلة. يتكرر هذه العملية كل 10 ثوانٍ. + + + كيف تعمل بلوكشين بكتوس؟ + + + + +
+ + +

+ كيف يمكن لمصادق الانضمام إلى اللجنة؟ +

+
+ + + + + + + + + للانضمام إلى اللجنة في بكتوس، يشارك المصادقون في عملية قرعة أو تصفية تحدث في كل كتلة. في هذه العملية، يقوم المصادقون بإنشاء رقم عشوائي قابل للإثبات بين الصفر وإجمالي العملات المرهونة، وإذا كان الرقم أقل من مرهوناتهم، يمكنهم إرسال معاملة تسمى معاملة التصفية مع دليل التصفية. بمجرد تضمين معاملة التصفية في كتلة، يحل المصادق محل أقدم عضو في اللجنة. + + + + + +
+ + +

+ كيف يتم اختيار مقترحي البلوك في اللجنة؟ +

+
+ + + + + + + يتم اختيار مقترح البلوك داخل اللجنة بناءً على وقت دخوله إلى اللجنة. وهذا يعني أن عملية الاختيار تتبع ترتيب "الأولوية لأولئك الذين يدخلون أولاً". + + + + + +
+ + +

+ هل يمكن للمحققين العديدة الدخول إلى اللجنة في وقت واحد؟ +

+
+ + + + + + + + + عملية الفرز العشوائي في بكتوس هي عشوائية، لذلك فمن الممكن أن يدخل أكثر من محقق إلى اللجنة في وقت واحد، أو لا يدخل أي محقق على الإطلاق. ومع ذلك، لكي تعتبر عملية الفرز صالحة وتتم إضافتها إلى البلوك، يجب أن تستوفي شرطين: لا يمكن تغيير أكثر من 1/3 من حصة اللجنة، و لا يمكن إزالة محقق لم يتاح له فرصة تقديم اقتراح لبلوك بعد. + + + +
+ + +

+ هل من الممكن أن يكون هناك بلوكين صحيحين في نفس الوقت؟ +

+
+ + + + + + + لا يمكن أن يكون هناك بلوكين صحيحين في نفس الوقت في سلسلة بكتوس. يمنع خوارزمية الاتفاق في بكتوس إمكانية وجود اثنين من المقترحين في نفس الوقت. هذا يضمن عدم حدوث فورك في الشبكة. + + + + + +
+ + +

+ How much is the block confirmation in the Pactus Blockchain? +

+
+ + + + + + + Block confirmation refers to the number of blocks that need to be created before a transaction is considered final and irreversible. In Pactus, block confirmation is immediate, meaning that once a transaction is added to a block, it is considered confirmed and cannot be reversed. + + + + + +
+ +
+ +
+
+
+ + Economy +
+
+ + +

+ ما هو إجمالي إمدادات عملة بكتوس؟ +

+
+ + + + + + + + + بكتوس لديها إجمالي إمدادات 21 مليون عملة، وكل عملة مقسمة إلى 1 مليار وحدة. كل 10 ثوانٍ، يتم إنشاء عملة جديدة، مما يؤدي إلى 8،640 عملة جديدة في اليوم وحوالي 3 ملايين في السنة. سيتم إنشاء جميع العملات في غضون 7 سنوات. + + + +
+ + +

+ How are Genesis Coins allocated in Pactus? +

+
+ + + + + + + The initial allocation of Genesis Coins in the Pactus blockchain is distributed as follows:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Genesis Coin Allocation for Pactus
CategoryCoin AllocationPercentage
Treasury21 Million coins50%
Foundation8.4 Million coins20%
VC Allocation6.3 Million coins15%
Team and Operations4.2 Million coins10%
Community2.1 Million coins5%
+ + + How are Genesis Coins allocated in Pactus? + + +
+ + +

+ ما هو حساب الخزانة؟ +

+
+ + + + + + + حساب الخزانة هو حساب خاص في بلوكشين بكتوس يحتوي على إجمالي إمدادات العملات والذي يبلغ 21 مليون عملة. يتم إنشاؤه في وقت النشأة وليس له زوج مفاتيح مرتبط به، مما يعني عدم إمكانية الوصول إليه أو التحكم فيه من قبل أي شخص. في كل مرة يتم إنشاء بلوك، يتم نقل عملة واحدة من حساب الخزانة إلى حساب المقترح كمكافأة للبلوك. + + + + + +
+ + +

+ How are Treasury coins distributed? +

+
+ + + + + + + Treasury coins are distributed as block rewards to the block proposers. Every 10 seconds, one coin from the Treasury account transfers to the block proposer account. This process is called "coin minting". As a result, the total number of Pactus coins in circulation gradually increases over time as new blocks are added to the blockchain. Every day, 8,640 coins are minted, resulting in approximately 3 million coins being minted annually by the Treasury account. + + + How are Treasury coins distributed? + + + + +
+ + +

+ How will the Support coins be spent? +

+
+ + + + + + + The support accounts are designed to provide financial backing for the project. Initially, Pactus Genesis contained only the Treasury accounts without any Backup or Support accounts. The introduction of support coins was a strategic response to the absence of investors, despite the significant progress of the project.

These coins are allocated in several ways:
    +
  • Community: + This portion will mainly support the community. + As part of this, the participants on Testnets receive initial staking coins to + setup their validator and secure the Mainnet. +
  • +
  • Team and Operations: + Another portion supports the project team. + Team members receive a monthly distribution of these coins, which is estimated to sustain the team for over six years. +
  • +
  • Venture Capital (VC) Allocation: + Another portion is set aside for any potential venture capitalists who + might show interest in investing in the project in the future. +
  • +
  • Foundation: + The foundation coins are reserved for future use, potentially in supporting strong projects that align with Pactus's objectives. +
  • +
+Transparency is a key aspect of this allocation, as all movements of these coins are trackable due to the fully transparent nature of the blockchain. + + + +
+ +
+ +
+
+
+ + معاملة +
+
+ + +

+ ما هي عملية تحويل الأموال؟ +

+
+ + + + + + + عملية تحويل الأموال هي نوع من العمليات التي تسمح للمستخدمين بتحويل عملات بكتوس من حساب واحد إلى آخر. + + + + + +
+ + +

+ ما هي عملية الرهن؟ +

+
+ + + + + + + + + عملية الرهن هي نوع من العمليات التي تسمح لك بأن تصبح محققاً من خلال رهن بعض العملات. عند إرسال عملية رهن، سيصبح عقدك محققًا. يحدد مقدار الرهن قوتك في الاتفاق. + + + + + +
+ + +

+ ما هي عملية الفرز؟ +

+
+ + + + + + + عملية الفرز هي نوع من العمليات التي تسمح للمحققين بالدخول إلى اللجنة. + + + + + +
+ + +

+ ما هي عملية الغاء الرهن؟ +

+
+ + + + + + + + + عملية الغاء الرهن هي نوع من العمليات التي تسمح لك بإلغاء رهنك كمحقق. عند إرسال عملية الغاء الرهن، لن تكون قادراً بعد ذلك على إرسال عمليات الفرز أو الرهن. + + + + + +
+ + +

+ ما هي عملية السحب؟ +

+
+ + + + + + + عملية السحب هي نوع من العمليات التي تسمح للمحققين بسحب عملاتهم التي تم رهنها من الشبكة. + + + + + +
+ +
+ +
+ + + + +
+ +
+
+
+
+ + + + + diff --git a/ar/about/roadmap/index.html b/ar/about/roadmap/index.html new file mode 100644 index 000000000..2b5d4e395 --- /dev/null +++ b/ar/about/roadmap/index.html @@ -0,0 +1,826 @@ + + + + + + + + + + + + + خارطة الطريق | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

خارطة الطريق

+ +
+
✅ المهمة المكتملة
+
🚧 المهمة الجارية
+
⏳ المهمة القادمة
+
+ +
+
+
+ + +
+
+
+
+ + Smart contract and Decentralized Storage Platform + +
+
Q1 2025
+
+
+
+ +
+
+
+
+ + Browser Extension + +
+
Q1 2025
+
+
+
+ +
+
+
+
+ + Integrating with Wallets applications + +
+
Q4 2024
+
+
+
+ +
+
+
+
+ + Desktop and Mobile Friendly GUI + +
+
Q3 2024
+
+
+
+ +
+
+
+
+ + Pactus Light Client + +
+
Q3 2024
+
+
+
+ +
+
+
+ +
June 2024
+
+
+
+ +
+
+
+ +
June 2024
+
+
+
+ +
+
+
+ +
April 2024
+
+
+
+ +
+
+
+
+ + Pactus Shell + +
+
April 2024
+
+
+
+ +
+
+
+
+ + Block Explorer + +
+
April 2024
+
+
+
+ +
+
+
+ +
March 2024
+
+
+
+ +
+
+
+ +
January 2024
+
+
+
+ +
+
+
+ +
24 January 2024
+
+
+
+ +
+
+
+ +
January 2024
+
+
+
+ +
+
+
+ +
January 2024
+
+
+
+ +
+
+
+ +
January 2024
+
+
+
+ +
+
+
+ +
December 2023
+
+
+
+ +
+
+
+ +
November 2023
+
+
+
+ +
+
+
+ +
October 2023
+
+
+
+ +
+
+
+ +
October 2023
+
+
+
+ +
+
+
+ +
October 2023
+
+
+
+ +
+
+
+ +
August 2023
+
+
+
+ +
+
+
+ +
July 2023
+
+
+
+ +
+
+
+ +
June 2023
+
+
+
+ +
+
+
+ +
May 2023
+
+
+
+ +
+
+
+ +
May 2023
+
+
+
+ +
+
+
+ +
May 2023
+
+
+
+ +
+
+
+ +
April 2023
+
+
+
+ +
+
+
+ +
September 2022
+
+
+
+ +
+
+
+ +
September 2022
+
+
+
+ +
+
+
+ +
+
+
+
+ + + + + diff --git a/ar/about/what-is-pactus/index.html b/ar/about/what-is-pactus/index.html new file mode 100644 index 000000000..6f73dd1d9 --- /dev/null +++ b/ar/about/what-is-pactus/index.html @@ -0,0 +1,457 @@ + + + + + + + + + + + + + ما هو بكتوس؟ | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

ما هو بكتوس؟

+ +
+ +
+
+

بكتوس هو بلوكشين يركز على التوزيع

+ يعتمد بكتوس على مبدأ أنه يمكن تحقيق نظام عادل وشفاف فقط من خلال التوزيع. على عكس العديد من منصات البلوكشين الأخرى، يهدف بكتوس إلى القضاء على إمكانية المركزية والتلاعب من خلال إزالة الحاجة إلى التفويض والمُعدِّنين. يتيح ذلك لأي شخص أن يصبح جزءًا من النظام البيئي ويضمن أن تظل المنصة موزعة بالفعل. + +
+
+ +
+
+

بكتوس هو بلوكشين سهل الاستخدام

+ يهدف بكتوس إلى إنشاء بلوكشين سهل الاستخدام يمكن استخدامه بسهولة من قبل أي شخص، وليس فقط خبراء التقنية. يتم تصميم بروتوكولنا ليكون بسيطًا وسهل الصيانة والتطوير. يقدم بكتوس تطبيق واجهة المستخدم الرسومية البسيطة التي يسهل للمستخدمين تشغيل عقدة. + +
+
+ +
+
+

يستخدم بكتوس نموذج رسوم مبني على النسبة المئوية

+ تُحسَب رسوم المعاملات استنادًا إلى نموذج النسبة المئوية مع رسوم دنيا وعليا. توفر هذه المعايير تحكمًا أكبر في هيكل الرسوم وتمنع الدفع الزائد أو الدفع الناقص. يضمن النموذج المبني على النسبة المئوية النزاهة والقدرة على التنبؤ، ويمكن تعديله من خلال الإجماع بين جميع المصادقين. + +
+
+ +
+
+

تخزين متفرد ولامركزي في بكتوس

+ في بكتوس، يمكن للمستخدمين شراء ملف تخزين مخصص يمكن تجديده سنويًا، مما يؤدي إلى تخفيض التكاليف المتعلقة بالتخزين وتنفيذ العقود الذكية. يمكن أن تمهد هذه الميزة الفريدة الطريق لبروتوكولات جديدة في المنصات الموزعة. + +
+
+ +
+ +
+
+
+
+ + + + + diff --git a/ar/android-chrome-192x192.png b/ar/android-chrome-192x192.png new file mode 100644 index 000000000..8a8e2b6d8 Binary files /dev/null and b/ar/android-chrome-192x192.png differ diff --git a/ar/android-chrome-256x256.png b/ar/android-chrome-256x256.png new file mode 100644 index 000000000..827219e8a Binary files /dev/null and b/ar/android-chrome-256x256.png differ diff --git a/ar/apple-touch-icon.png b/ar/apple-touch-icon.png new file mode 100644 index 000000000..1fa36ea07 Binary files /dev/null and b/ar/apple-touch-icon.png differ diff --git a/ar/assets/css/custom.css b/ar/assets/css/custom.css new file mode 100644 index 000000000..00e05b42d --- /dev/null +++ b/ar/assets/css/custom.css @@ -0,0 +1 @@ +:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}:root,[data-bs-theme=light]{--pa-blue: #0d6efd;--pa-indigo: #6610f2;--pa-purple: #6f42c1;--pa-pink: #d63384;--pa-red: #dc3545;--pa-orange: #fd7e14;--pa-yellow: #ffc107;--pa-green: #198754;--pa-teal: #20c997;--pa-cyan: #0dcaf0;--pa-black: #000;--pa-white: #fff;--pa-gray: #6c757d;--pa-gray-dark: #343a40;--pa-gray-100: #f8f9fa;--pa-gray-200: #e9ecef;--pa-gray-300: #dee2e6;--pa-gray-400: #ced4da;--pa-gray-500: #adb5bd;--pa-gray-600: #6c757d;--pa-gray-700: #495057;--pa-gray-800: #343a40;--pa-gray-900: #212529;--pa-primary: #021a34;--pa-secondary: #075f94;--pa-success: #198754;--pa-info: #0dcaf0;--pa-warning: #ffc107;--pa-danger: #dc3545;--pa-light: #f8f9fa;--pa-dark: #212529;--pa-primary-rgb: 2, 26, 52;--pa-secondary-rgb: 7, 95, 148;--pa-success-rgb: 25, 135, 84;--pa-info-rgb: 13, 202, 240;--pa-warning-rgb: 255, 193, 7;--pa-danger-rgb: 220, 53, 69;--pa-light-rgb: 248, 249, 250;--pa-dark-rgb: 33, 37, 41;--pa-primary-text-emphasis: #010a15;--pa-secondary-text-emphasis: #03263b;--pa-success-text-emphasis: #0a3622;--pa-info-text-emphasis: #055160;--pa-warning-text-emphasis: #664d03;--pa-danger-text-emphasis: #58151c;--pa-light-text-emphasis: #495057;--pa-dark-text-emphasis: #495057;--pa-primary-bg-subtle: #ccd1d6;--pa-secondary-bg-subtle: #cddfea;--pa-success-bg-subtle: #d1e7dd;--pa-info-bg-subtle: #cff4fc;--pa-warning-bg-subtle: #fff3cd;--pa-danger-bg-subtle: #f8d7da;--pa-light-bg-subtle: #fcfcfd;--pa-dark-bg-subtle: #ced4da;--pa-primary-border-subtle: #9aa3ae;--pa-secondary-border-subtle: #9cbfd4;--pa-success-border-subtle: #a3cfbb;--pa-info-border-subtle: #9eeaf9;--pa-warning-border-subtle: #ffe69c;--pa-danger-border-subtle: #f1aeb5;--pa-light-border-subtle: #e9ecef;--pa-dark-border-subtle: #adb5bd;--pa-white-rgb: 255, 255, 255;--pa-black-rgb: 0, 0, 0;--pa-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--pa-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--pa-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--pa-body-font-family: var(--pa-font-sans-serif);--pa-body-font-size:1rem;--pa-body-font-weight: 400;--pa-body-line-height: 1.5;--pa-body-color: #212529;--pa-body-color-rgb: 33, 37, 41;--pa-body-bg: #fff;--pa-body-bg-rgb: 255, 255, 255;--pa-emphasis-color: #000;--pa-emphasis-color-rgb: 0, 0, 0;--pa-secondary-color: rgba(33, 37, 41, 0.75);--pa-secondary-color-rgb: 33, 37, 41;--pa-secondary-bg: #e9ecef;--pa-secondary-bg-rgb: 233, 236, 239;--pa-tertiary-color: rgba(33, 37, 41, 0.5);--pa-tertiary-color-rgb: 33, 37, 41;--pa-tertiary-bg: #f8f9fa;--pa-tertiary-bg-rgb: 248, 249, 250;--pa-heading-color: inherit;--pa-link-color: #021a34;--pa-link-color-rgb: 2, 26, 52;--pa-link-decoration: underline;--pa-link-hover-color: #02152a;--pa-link-hover-color-rgb: 2, 21, 42;--pa-code-color: #d63384;--pa-highlight-color: #212529;--pa-highlight-bg: #fff3cd;--pa-border-width: 1px;--pa-border-style: solid;--pa-border-color: #dee2e6;--pa-border-color-translucent: rgba(0, 0, 0, 0.175);--pa-border-radius: 0.375rem;--pa-border-radius-sm: 0.25rem;--pa-border-radius-lg: 0.5rem;--pa-border-radius-xl: 1rem;--pa-border-radius-xxl: 2rem;--pa-border-radius-2xl: var(--pa-border-radius-xxl);--pa-border-radius-pill: 50rem;--pa-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--pa-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--pa-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--pa-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--pa-focus-ring-width: 0.25rem;--pa-focus-ring-opacity: 0.25;--pa-focus-ring-color: rgba(2, 26, 52, 0.25);--pa-form-valid-color: #198754;--pa-form-valid-border-color: #198754;--pa-form-invalid-color: #dc3545;--pa-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--pa-body-color: #dee2e6;--pa-body-color-rgb: 222, 226, 230;--pa-body-bg: #212529;--pa-body-bg-rgb: 33, 37, 41;--pa-emphasis-color: #fff;--pa-emphasis-color-rgb: 255, 255, 255;--pa-secondary-color: rgba(222, 226, 230, 0.75);--pa-secondary-color-rgb: 222, 226, 230;--pa-secondary-bg: #343a40;--pa-secondary-bg-rgb: 52, 58, 64;--pa-tertiary-color: rgba(222, 226, 230, 0.5);--pa-tertiary-color-rgb: 222, 226, 230;--pa-tertiary-bg: #2b3035;--pa-tertiary-bg-rgb: 43, 48, 53;--pa-primary-text-emphasis: #677685;--pa-secondary-text-emphasis: #6a9fbf;--pa-success-text-emphasis: #75b798;--pa-info-text-emphasis: #6edff6;--pa-warning-text-emphasis: #ffda6a;--pa-danger-text-emphasis: #ea868f;--pa-light-text-emphasis: #f8f9fa;--pa-dark-text-emphasis: #dee2e6;--pa-primary-bg-subtle: #00050a;--pa-secondary-bg-subtle: #01131e;--pa-success-bg-subtle: #051b11;--pa-info-bg-subtle: #032830;--pa-warning-bg-subtle: #332701;--pa-danger-bg-subtle: #2c0b0e;--pa-light-bg-subtle: #343a40;--pa-dark-bg-subtle: #1a1d20;--pa-primary-border-subtle: #01101f;--pa-secondary-border-subtle: #043959;--pa-success-border-subtle: #0f5132;--pa-info-border-subtle: #087990;--pa-warning-border-subtle: #997404;--pa-danger-border-subtle: #842029;--pa-light-border-subtle: #495057;--pa-dark-border-subtle: #343a40;--pa-heading-color: inherit;--pa-link-color: #677685;--pa-link-hover-color: #85919d;--pa-link-color-rgb: 103, 118, 133;--pa-link-hover-color-rgb: 133, 145, 157;--pa-code-color: #e685b5;--pa-highlight-color: #dee2e6;--pa-highlight-bg: #664d03;--pa-border-color: #495057;--pa-border-color-translucent: rgba(255, 255, 255, 0.15);--pa-form-valid-color: #75b798;--pa-form-valid-border-color: #75b798;--pa-form-invalid-color: #ea868f;--pa-form-invalid-border-color: #ea868f}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--pa-body-font-family);font-size:var(--pa-body-font-size);font-weight:var(--pa-body-font-weight);line-height:var(--pa-body-line-height);color:var(--pa-body-color);text-align:var(--pa-body-text-align);background-color:var(--pa-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--pa-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--pa-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--pa-highlight-color);background-color:var(--pa-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--pa-link-color-rgb), var(--pa-link-opacity, 1));text-decoration:underline}a:hover{--pa-link-color-rgb: var(--pa-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--pa-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--pa-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--pa-body-bg);background-color:var(--pa-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--pa-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--pa-body-bg);border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-sm);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--pa-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--pa-gutter-x: 1.5rem;--pa-gutter-y: 0;width:100%;padding-right:calc(var(--pa-gutter-x)*.5);padding-left:calc(var(--pa-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--pa-breakpoint-xs: 0;--pa-breakpoint-sm: 576px;--pa-breakpoint-md: 768px;--pa-breakpoint-lg: 992px;--pa-breakpoint-xl: 1200px;--pa-breakpoint-xxl: 1400px}.row{--pa-gutter-x: 1.5rem;--pa-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--pa-gutter-y));margin-right:calc(-0.5*var(--pa-gutter-x));margin-left:calc(-0.5*var(--pa-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--pa-gutter-x)*.5);padding-left:calc(var(--pa-gutter-x)*.5);margin-top:var(--pa-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--pa-gutter-x: 0}.g-0,.gy-0{--pa-gutter-y: 0}.g-1,.gx-1{--pa-gutter-x: 0.25rem}.g-1,.gy-1{--pa-gutter-y: 0.25rem}.g-2,.gx-2{--pa-gutter-x: 0.5rem}.g-2,.gy-2{--pa-gutter-y: 0.5rem}.g-3,.gx-3{--pa-gutter-x: 1rem}.g-3,.gy-3{--pa-gutter-y: 1rem}.g-4,.gx-4{--pa-gutter-x: 1.5rem}.g-4,.gy-4{--pa-gutter-y: 1.5rem}.g-5,.gx-5{--pa-gutter-x: 3rem}.g-5,.gy-5{--pa-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--pa-gutter-x: 0}.g-sm-0,.gy-sm-0{--pa-gutter-y: 0}.g-sm-1,.gx-sm-1{--pa-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--pa-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--pa-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--pa-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--pa-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--pa-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--pa-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--pa-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--pa-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--pa-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--pa-gutter-x: 0}.g-md-0,.gy-md-0{--pa-gutter-y: 0}.g-md-1,.gx-md-1{--pa-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--pa-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--pa-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--pa-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--pa-gutter-x: 1rem}.g-md-3,.gy-md-3{--pa-gutter-y: 1rem}.g-md-4,.gx-md-4{--pa-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--pa-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--pa-gutter-x: 3rem}.g-md-5,.gy-md-5{--pa-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--pa-gutter-x: 0}.g-lg-0,.gy-lg-0{--pa-gutter-y: 0}.g-lg-1,.gx-lg-1{--pa-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--pa-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--pa-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--pa-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--pa-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--pa-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--pa-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--pa-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--pa-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--pa-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--pa-gutter-x: 0}.g-xl-0,.gy-xl-0{--pa-gutter-y: 0}.g-xl-1,.gx-xl-1{--pa-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--pa-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--pa-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--pa-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--pa-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--pa-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--pa-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--pa-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--pa-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--pa-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--pa-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--pa-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--pa-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--pa-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--pa-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--pa-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--pa-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--pa-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--pa-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--pa-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--pa-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--pa-gutter-y: 3rem}}.table{--pa-table-color-type: initial;--pa-table-bg-type: initial;--pa-table-color-state: initial;--pa-table-bg-state: initial;--pa-table-color: var(--pa-emphasis-color);--pa-table-bg: var(--pa-body-bg);--pa-table-border-color: var(--pa-border-color);--pa-table-accent-bg: transparent;--pa-table-striped-color: var(--pa-emphasis-color);--pa-table-striped-bg: rgba(var(--pa-emphasis-color-rgb), 0.05);--pa-table-active-color: var(--pa-emphasis-color);--pa-table-active-bg: rgba(var(--pa-emphasis-color-rgb), 0.1);--pa-table-hover-color: var(--pa-emphasis-color);--pa-table-hover-bg: rgba(var(--pa-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--pa-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--pa-table-color-state, var(--pa-table-color-type, var(--pa-table-color)));background-color:var(--pa-table-bg);border-bottom-width:var(--pa-border-width);box-shadow:inset 0 0 0 9999px var(--pa-table-bg-state, var(--pa-table-bg-type, var(--pa-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--pa-border-width)*2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--pa-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--pa-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--pa-table-color-type: var(--pa-table-striped-color);--pa-table-bg-type: var(--pa-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--pa-table-color-type: var(--pa-table-striped-color);--pa-table-bg-type: var(--pa-table-striped-bg)}.table-active{--pa-table-color-state: var(--pa-table-active-color);--pa-table-bg-state: var(--pa-table-active-bg)}.table-hover>tbody>tr:hover>*{--pa-table-color-state: var(--pa-table-hover-color);--pa-table-bg-state: var(--pa-table-hover-bg)}.table-primary{--pa-table-color: #000;--pa-table-bg: #ccd1d6;--pa-table-border-color: #a3a7ab;--pa-table-striped-bg: #c2c7cb;--pa-table-striped-color: #000;--pa-table-active-bg: #b8bcc1;--pa-table-active-color: #000;--pa-table-hover-bg: #bdc1c6;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-secondary{--pa-table-color: #000;--pa-table-bg: #cddfea;--pa-table-border-color: #a4b2bb;--pa-table-striped-bg: #c3d4de;--pa-table-striped-color: #000;--pa-table-active-bg: #b9c9d3;--pa-table-active-color: #000;--pa-table-hover-bg: #beced8;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-success{--pa-table-color: #000;--pa-table-bg: #d1e7dd;--pa-table-border-color: #a7b9b1;--pa-table-striped-bg: #c7dbd2;--pa-table-striped-color: #000;--pa-table-active-bg: #bcd0c7;--pa-table-active-color: #000;--pa-table-hover-bg: #c1d6cc;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-info{--pa-table-color: #000;--pa-table-bg: #cff4fc;--pa-table-border-color: #a6c3ca;--pa-table-striped-bg: #c5e8ef;--pa-table-striped-color: #000;--pa-table-active-bg: #badce3;--pa-table-active-color: #000;--pa-table-hover-bg: #bfe2e9;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-warning{--pa-table-color: #000;--pa-table-bg: #fff3cd;--pa-table-border-color: #ccc2a4;--pa-table-striped-bg: #f2e7c3;--pa-table-striped-color: #000;--pa-table-active-bg: #e6dbb9;--pa-table-active-color: #000;--pa-table-hover-bg: #ece1be;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-danger{--pa-table-color: #000;--pa-table-bg: #f8d7da;--pa-table-border-color: #c6acae;--pa-table-striped-bg: #eccccf;--pa-table-striped-color: #000;--pa-table-active-bg: #dfc2c4;--pa-table-active-color: #000;--pa-table-hover-bg: #e5c7ca;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-light{--pa-table-color: #000;--pa-table-bg: #f8f9fa;--pa-table-border-color: #c6c7c8;--pa-table-striped-bg: #ecedee;--pa-table-striped-color: #000;--pa-table-active-bg: #dfe0e1;--pa-table-active-color: #000;--pa-table-hover-bg: #e5e6e7;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-dark{--pa-table-color: #fff;--pa-table-bg: #212529;--pa-table-border-color: #4d5154;--pa-table-striped-bg: #2c3034;--pa-table-striped-color: #fff;--pa-table-active-bg: #373b3e;--pa-table-active-color: #fff;--pa-table-hover-bg: #323539;--pa-table-hover-color: #fff;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + var(--pa-border-width));padding-bottom:calc(0.375rem + var(--pa-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + var(--pa-border-width));padding-bottom:calc(0.5rem + var(--pa-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + var(--pa-border-width));padding-bottom:calc(0.25rem + var(--pa-border-width));font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:var(--pa-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);appearance:none;background-color:var(--pa-body-bg);background-clip:padding-box;border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-inset);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--pa-body-color);background-color:var(--pa-body-bg);border-color:#818d9a;outline:0;box-shadow:var(--pa-box-shadow-inset),0 0 0 .25rem rgba(2,26,52,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--pa-secondary-color);opacity:1}.form-control:disabled{background-color:var(--pa-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:var(--pa-body-color);background-color:var(--pa-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--pa-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--pa-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--pa-body-color);background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:var(--pa-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(var(--pa-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(var(--pa-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--pa-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--pa-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2))}.form-select{--pa-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);appearance:none;background-color:var(--pa-body-bg);background-image:var(--pa-form-select-bg-img),var(--pa-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-inset);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#818d9a;outline:0;box-shadow:var(--pa-box-shadow-inset),0 0 0 .25rem rgba(2,26,52,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--pa-secondary-bg)}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 var(--pa-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}[data-bs-theme=dark] .form-select{--pa-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--pa-form-check-bg: var(--pa-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;background-color:var(--pa-form-check-bg);background-image:var(--pa-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--pa-border-width) solid var(--pa-border-color);print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#818d9a;outline:0;box-shadow:0 0 0 .25rem rgba(2,26,52,.25)}.form-check-input:checked{background-color:#021a34;border-color:#021a34}.form-check-input:checked[type=checkbox]{--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#021a34;border-color:#021a34;--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--pa-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23818d9a'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(2,26,52,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(2,26,52,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;background-color:#021a34;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b3bac2}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--pa-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:var(--pa-box-shadow-inset)}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;background-color:#021a34;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b3bac2}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--pa-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:var(--pa-box-shadow-inset)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--pa-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--pa-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--pa-border-width) * 2));min-height:calc(3.5rem + calc(var(--pa-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--pa-border-width) solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--pa-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--pa-body-bg);border-radius:var(--pa-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--pa-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--pa-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:var(--pa-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);text-align:center;white-space:nowrap;background-color:var(--pa-tertiary-bg);border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--pa-border-width)*-1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--pa-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--pa-success);border-radius:var(--pa-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--pa-form-valid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--pa-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--pa-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--pa-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--pa-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--pa-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--pa-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--pa-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--pa-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--pa-danger);border-radius:var(--pa-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--pa-form-invalid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--pa-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--pa-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--pa-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--pa-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--pa-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--pa-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--pa-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--pa-btn-padding-x: 0.75rem;--pa-btn-padding-y: 0.375rem;--pa-btn-font-family: ;--pa-btn-font-size:1rem;--pa-btn-font-weight: 400;--pa-btn-line-height: 1.5;--pa-btn-color: var(--pa-body-color);--pa-btn-bg: transparent;--pa-btn-border-width: var(--pa-border-width);--pa-btn-border-color: transparent;--pa-btn-border-radius: var(--pa-border-radius);--pa-btn-hover-border-color: transparent;--pa-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--pa-btn-disabled-opacity: 0.65;--pa-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--pa-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--pa-btn-padding-y) var(--pa-btn-padding-x);font-family:var(--pa-btn-font-family);font-size:var(--pa-btn-font-size);font-weight:var(--pa-btn-font-weight);line-height:var(--pa-btn-line-height);color:var(--pa-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--pa-btn-border-width) solid var(--pa-btn-border-color);border-radius:var(--pa-btn-border-radius);background-color:var(--pa-btn-bg);box-shadow:var(--pa-btn-box-shadow);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--pa-btn-hover-color);background-color:var(--pa-btn-hover-bg);border-color:var(--pa-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--pa-btn-color);background-color:var(--pa-btn-bg);border-color:var(--pa-btn-border-color)}.btn:focus-visible{color:var(--pa-btn-hover-color);background-color:var(--pa-btn-hover-bg);border-color:var(--pa-btn-hover-border-color);outline:0;box-shadow:var(--pa-btn-box-shadow),var(--pa-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--pa-btn-hover-border-color);outline:0;box-shadow:var(--pa-btn-box-shadow),var(--pa-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--pa-btn-active-color);background-color:var(--pa-btn-active-bg);border-color:var(--pa-btn-active-border-color);box-shadow:var(--pa-btn-active-shadow)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--pa-btn-active-shadow),var(--pa-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--pa-btn-disabled-color);pointer-events:none;background-color:var(--pa-btn-disabled-bg);border-color:var(--pa-btn-disabled-border-color);opacity:var(--pa-btn-disabled-opacity);box-shadow:none}.btn-primary{--pa-btn-color: #fff;--pa-btn-bg: #021a34;--pa-btn-border-color: #021a34;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #02162c;--pa-btn-hover-border-color: #02152a;--pa-btn-focus-shadow-rgb: 40, 60, 82;--pa-btn-active-color: #fff;--pa-btn-active-bg: #02152a;--pa-btn-active-border-color: #021427;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #021a34;--pa-btn-disabled-border-color: #021a34}.btn-secondary{--pa-btn-color: #fff;--pa-btn-bg: #075f94;--pa-btn-border-color: #075f94;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #06517e;--pa-btn-hover-border-color: #064c76;--pa-btn-focus-shadow-rgb: 44, 119, 164;--pa-btn-active-color: #fff;--pa-btn-active-bg: #064c76;--pa-btn-active-border-color: #05476f;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #075f94;--pa-btn-disabled-border-color: #075f94}.btn-success{--pa-btn-color: #fff;--pa-btn-bg: #198754;--pa-btn-border-color: #198754;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #157347;--pa-btn-hover-border-color: #146c43;--pa-btn-focus-shadow-rgb: 60, 153, 110;--pa-btn-active-color: #fff;--pa-btn-active-bg: #146c43;--pa-btn-active-border-color: #13653f;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #198754;--pa-btn-disabled-border-color: #198754}.btn-info{--pa-btn-color: #000;--pa-btn-bg: #0dcaf0;--pa-btn-border-color: #0dcaf0;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #31d2f2;--pa-btn-hover-border-color: #25cff2;--pa-btn-focus-shadow-rgb: 11, 172, 204;--pa-btn-active-color: #000;--pa-btn-active-bg: #3dd5f3;--pa-btn-active-border-color: #25cff2;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #0dcaf0;--pa-btn-disabled-border-color: #0dcaf0}.btn-warning{--pa-btn-color: #000;--pa-btn-bg: #ffc107;--pa-btn-border-color: #ffc107;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #ffca2c;--pa-btn-hover-border-color: #ffc720;--pa-btn-focus-shadow-rgb: 217, 164, 6;--pa-btn-active-color: #000;--pa-btn-active-bg: #ffcd39;--pa-btn-active-border-color: #ffc720;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #ffc107;--pa-btn-disabled-border-color: #ffc107}.btn-danger{--pa-btn-color: #fff;--pa-btn-bg: #dc3545;--pa-btn-border-color: #dc3545;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #bb2d3b;--pa-btn-hover-border-color: #b02a37;--pa-btn-focus-shadow-rgb: 225, 83, 97;--pa-btn-active-color: #fff;--pa-btn-active-bg: #b02a37;--pa-btn-active-border-color: #a52834;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #dc3545;--pa-btn-disabled-border-color: #dc3545}.btn-light{--pa-btn-color: #000;--pa-btn-bg: #f8f9fa;--pa-btn-border-color: #f8f9fa;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #d3d4d5;--pa-btn-hover-border-color: #c6c7c8;--pa-btn-focus-shadow-rgb: 211, 212, 213;--pa-btn-active-color: #000;--pa-btn-active-bg: #c6c7c8;--pa-btn-active-border-color: #babbbc;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #f8f9fa;--pa-btn-disabled-border-color: #f8f9fa}.btn-dark{--pa-btn-color: #fff;--pa-btn-bg: #212529;--pa-btn-border-color: #212529;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #424649;--pa-btn-hover-border-color: #373b3e;--pa-btn-focus-shadow-rgb: 66, 70, 73;--pa-btn-active-color: #fff;--pa-btn-active-bg: #4d5154;--pa-btn-active-border-color: #373b3e;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #212529;--pa-btn-disabled-border-color: #212529}.btn-outline-primary{--pa-btn-color: #021a34;--pa-btn-border-color: #021a34;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #021a34;--pa-btn-hover-border-color: #021a34;--pa-btn-focus-shadow-rgb: 2, 26, 52;--pa-btn-active-color: #fff;--pa-btn-active-bg: #021a34;--pa-btn-active-border-color: #021a34;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #021a34;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #021a34;--pa-gradient: none}.btn-outline-secondary{--pa-btn-color: #075f94;--pa-btn-border-color: #075f94;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #075f94;--pa-btn-hover-border-color: #075f94;--pa-btn-focus-shadow-rgb: 7, 95, 148;--pa-btn-active-color: #fff;--pa-btn-active-bg: #075f94;--pa-btn-active-border-color: #075f94;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #075f94;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #075f94;--pa-gradient: none}.btn-outline-success{--pa-btn-color: #198754;--pa-btn-border-color: #198754;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #198754;--pa-btn-hover-border-color: #198754;--pa-btn-focus-shadow-rgb: 25, 135, 84;--pa-btn-active-color: #fff;--pa-btn-active-bg: #198754;--pa-btn-active-border-color: #198754;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #198754;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #198754;--pa-gradient: none}.btn-outline-info{--pa-btn-color: #0dcaf0;--pa-btn-border-color: #0dcaf0;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #0dcaf0;--pa-btn-hover-border-color: #0dcaf0;--pa-btn-focus-shadow-rgb: 13, 202, 240;--pa-btn-active-color: #000;--pa-btn-active-bg: #0dcaf0;--pa-btn-active-border-color: #0dcaf0;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #0dcaf0;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #0dcaf0;--pa-gradient: none}.btn-outline-warning{--pa-btn-color: #ffc107;--pa-btn-border-color: #ffc107;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #ffc107;--pa-btn-hover-border-color: #ffc107;--pa-btn-focus-shadow-rgb: 255, 193, 7;--pa-btn-active-color: #000;--pa-btn-active-bg: #ffc107;--pa-btn-active-border-color: #ffc107;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #ffc107;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #ffc107;--pa-gradient: none}.btn-outline-danger{--pa-btn-color: #dc3545;--pa-btn-border-color: #dc3545;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #dc3545;--pa-btn-hover-border-color: #dc3545;--pa-btn-focus-shadow-rgb: 220, 53, 69;--pa-btn-active-color: #fff;--pa-btn-active-bg: #dc3545;--pa-btn-active-border-color: #dc3545;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #dc3545;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #dc3545;--pa-gradient: none}.btn-outline-light{--pa-btn-color: #f8f9fa;--pa-btn-border-color: #f8f9fa;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #f8f9fa;--pa-btn-hover-border-color: #f8f9fa;--pa-btn-focus-shadow-rgb: 248, 249, 250;--pa-btn-active-color: #000;--pa-btn-active-bg: #f8f9fa;--pa-btn-active-border-color: #f8f9fa;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #f8f9fa;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #f8f9fa;--pa-gradient: none}.btn-outline-dark{--pa-btn-color: #212529;--pa-btn-border-color: #212529;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #212529;--pa-btn-hover-border-color: #212529;--pa-btn-focus-shadow-rgb: 33, 37, 41;--pa-btn-active-color: #fff;--pa-btn-active-bg: #212529;--pa-btn-active-border-color: #212529;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #212529;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #212529;--pa-gradient: none}.btn-link{--pa-btn-font-weight: 400;--pa-btn-color: var(--pa-link-color);--pa-btn-bg: transparent;--pa-btn-border-color: transparent;--pa-btn-hover-color: var(--pa-link-hover-color);--pa-btn-hover-border-color: transparent;--pa-btn-active-color: var(--pa-link-hover-color);--pa-btn-active-border-color: transparent;--pa-btn-disabled-color: #6c757d;--pa-btn-disabled-border-color: transparent;--pa-btn-box-shadow: 0 0 0 #000;--pa-btn-focus-shadow-rgb: 40, 60, 82;text-decoration:underline}.btn-link:focus-visible{color:var(--pa-btn-color)}.btn-link:hover{color:var(--pa-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--pa-btn-padding-y: 0.5rem;--pa-btn-padding-x: 1rem;--pa-btn-font-size:1.25rem;--pa-btn-border-radius: var(--pa-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--pa-btn-padding-y: 0.25rem;--pa-btn-padding-x: 0.5rem;--pa-btn-font-size:0.875rem;--pa-btn-border-radius: var(--pa-border-radius-sm)}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--pa-dropdown-zindex: 1000;--pa-dropdown-min-width: 10rem;--pa-dropdown-padding-x: 0;--pa-dropdown-padding-y: 0.5rem;--pa-dropdown-spacer: 0.125rem;--pa-dropdown-font-size:1rem;--pa-dropdown-color: var(--pa-body-color);--pa-dropdown-bg: var(--pa-body-bg);--pa-dropdown-border-color: var(--pa-border-color-translucent);--pa-dropdown-border-radius: var(--pa-border-radius);--pa-dropdown-border-width: var(--pa-border-width);--pa-dropdown-inner-border-radius: calc(var(--pa-border-radius) - var(--pa-border-width));--pa-dropdown-divider-bg: var(--pa-border-color-translucent);--pa-dropdown-divider-margin-y: 0.5rem;--pa-dropdown-box-shadow: var(--pa-box-shadow);--pa-dropdown-link-color: var(--pa-body-color);--pa-dropdown-link-hover-color: var(--pa-body-color);--pa-dropdown-link-hover-bg: var(--pa-tertiary-bg);--pa-dropdown-link-active-color: #fff;--pa-dropdown-link-active-bg: #021a34;--pa-dropdown-link-disabled-color: var(--pa-tertiary-color);--pa-dropdown-item-padding-x: 1rem;--pa-dropdown-item-padding-y: 0.25rem;--pa-dropdown-header-color: #6c757d;--pa-dropdown-header-padding-x: 1rem;--pa-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--pa-dropdown-zindex);display:none;min-width:var(--pa-dropdown-min-width);padding:var(--pa-dropdown-padding-y) var(--pa-dropdown-padding-x);margin:0;font-size:var(--pa-dropdown-font-size);color:var(--pa-dropdown-color);text-align:left;list-style:none;background-color:var(--pa-dropdown-bg);background-clip:padding-box;border:var(--pa-dropdown-border-width) solid var(--pa-dropdown-border-color);border-radius:var(--pa-dropdown-border-radius);box-shadow:var(--pa-dropdown-box-shadow)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--pa-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--pa-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--pa-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--pa-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--pa-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--pa-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--pa-dropdown-item-padding-y) var(--pa-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--pa-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0;border-radius:var(--pa-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--pa-dropdown-link-hover-color);background-color:var(--pa-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--pa-dropdown-link-active-color);text-decoration:none;background-color:var(--pa-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--pa-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--pa-dropdown-header-padding-y) var(--pa-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--pa-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--pa-dropdown-item-padding-y) var(--pa-dropdown-item-padding-x);color:var(--pa-dropdown-link-color)}.dropdown-menu-dark{--pa-dropdown-color: #dee2e6;--pa-dropdown-bg: #343a40;--pa-dropdown-border-color: var(--pa-border-color-translucent);--pa-dropdown-box-shadow: ;--pa-dropdown-link-color: #dee2e6;--pa-dropdown-link-hover-color: #fff;--pa-dropdown-divider-bg: var(--pa-border-color-translucent);--pa-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--pa-dropdown-link-active-color: #fff;--pa-dropdown-link-active-bg: #021a34;--pa-dropdown-link-disabled-color: #adb5bd;--pa-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--pa-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--pa-border-width)*-1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--pa-border-width)*-1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--pa-nav-link-padding-x: 1rem;--pa-nav-link-padding-y: 0.5rem;--pa-nav-link-font-weight: ;--pa-nav-link-color: var(--pa-link-color);--pa-nav-link-hover-color: var(--pa-link-hover-color);--pa-nav-link-disabled-color: var(--pa-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--pa-nav-link-padding-y) var(--pa-nav-link-padding-x);font-size:var(--pa-nav-link-font-size);font-weight:var(--pa-nav-link-font-weight);color:var(--pa-nav-link-color);text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--pa-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(2,26,52,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--pa-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--pa-nav-tabs-border-width: var(--pa-border-width);--pa-nav-tabs-border-color: var(--pa-border-color);--pa-nav-tabs-border-radius: var(--pa-border-radius);--pa-nav-tabs-link-hover-border-color: var(--pa-secondary-bg) var(--pa-secondary-bg) var(--pa-border-color);--pa-nav-tabs-link-active-color: var(--pa-emphasis-color);--pa-nav-tabs-link-active-bg: var(--pa-body-bg);--pa-nav-tabs-link-active-border-color: var(--pa-border-color) var(--pa-border-color) var(--pa-body-bg);border-bottom:var(--pa-nav-tabs-border-width) solid var(--pa-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--pa-nav-tabs-border-width));border:var(--pa-nav-tabs-border-width) solid rgba(0,0,0,0);border-top-left-radius:var(--pa-nav-tabs-border-radius);border-top-right-radius:var(--pa-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--pa-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--pa-nav-tabs-link-active-color);background-color:var(--pa-nav-tabs-link-active-bg);border-color:var(--pa-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--pa-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--pa-nav-pills-border-radius: var(--pa-border-radius);--pa-nav-pills-link-active-color: #fff;--pa-nav-pills-link-active-bg: #021a34}.nav-pills .nav-link{border-radius:var(--pa-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--pa-nav-pills-link-active-color);background-color:var(--pa-nav-pills-link-active-bg)}.nav-underline{--pa-nav-underline-gap: 1rem;--pa-nav-underline-border-width: 0.125rem;--pa-nav-underline-link-active-color: var(--pa-emphasis-color);gap:var(--pa-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--pa-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--pa-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--pa-navbar-padding-x: 0;--pa-navbar-padding-y: 0.5rem;--pa-navbar-color: rgba(var(--pa-emphasis-color-rgb), 0.65);--pa-navbar-hover-color: rgba(var(--pa-emphasis-color-rgb), 0.8);--pa-navbar-disabled-color: rgba(var(--pa-emphasis-color-rgb), 0.3);--pa-navbar-active-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-brand-padding-y: 0.3125rem;--pa-navbar-brand-margin-end: 1rem;--pa-navbar-brand-font-size: 1.25rem;--pa-navbar-brand-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-brand-hover-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-nav-link-padding-x: 0.5rem;--pa-navbar-toggler-padding-y: 0.25rem;--pa-navbar-toggler-padding-x: 0.75rem;--pa-navbar-toggler-font-size: 1.25rem;--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--pa-navbar-toggler-border-color: rgba(var(--pa-emphasis-color-rgb), 0.15);--pa-navbar-toggler-border-radius: var(--pa-border-radius);--pa-navbar-toggler-focus-width: 0.25rem;--pa-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--pa-navbar-padding-y) var(--pa-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--pa-navbar-brand-padding-y);padding-bottom:var(--pa-navbar-brand-padding-y);margin-right:var(--pa-navbar-brand-margin-end);font-size:var(--pa-navbar-brand-font-size);color:var(--pa-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--pa-navbar-brand-hover-color)}.navbar-nav{--pa-nav-link-padding-x: 0;--pa-nav-link-padding-y: 0.5rem;--pa-nav-link-font-weight: ;--pa-nav-link-color: var(--pa-navbar-color);--pa-nav-link-hover-color: var(--pa-navbar-hover-color);--pa-nav-link-disabled-color: var(--pa-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--pa-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--pa-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--pa-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--pa-navbar-toggler-padding-y) var(--pa-navbar-toggler-padding-x);font-size:var(--pa-navbar-toggler-font-size);line-height:1;color:var(--pa-navbar-color);background-color:rgba(0,0,0,0);border:var(--pa-border-width) solid var(--pa-navbar-toggler-border-color);border-radius:var(--pa-navbar-toggler-border-radius);transition:var(--pa-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--pa-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--pa-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--pa-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--pa-navbar-color: rgba(255, 255, 255, 0.55);--pa-navbar-hover-color: rgba(255, 255, 255, 0.75);--pa-navbar-disabled-color: rgba(255, 255, 255, 0.25);--pa-navbar-active-color: #fff;--pa-navbar-brand-color: #fff;--pa-navbar-brand-hover-color: #fff;--pa-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.badge{--pa-badge-padding-x: 0.65em;--pa-badge-padding-y: 0.35em;--pa-badge-font-size:0.75em;--pa-badge-font-weight: 700;--pa-badge-color: #fff;--pa-badge-border-radius: var(--pa-border-radius);display:inline-block;padding:var(--pa-badge-padding-y) var(--pa-badge-padding-x);font-size:var(--pa-badge-font-size);font-weight:var(--pa-badge-font-weight);line-height:1;color:var(--pa-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--pa-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--pa-alert-bg: transparent;--pa-alert-padding-x: 1rem;--pa-alert-padding-y: 1rem;--pa-alert-margin-bottom: 1rem;--pa-alert-color: inherit;--pa-alert-border-color: transparent;--pa-alert-border: var(--pa-border-width) solid var(--pa-alert-border-color);--pa-alert-border-radius: var(--pa-border-radius);--pa-alert-link-color: inherit;position:relative;padding:var(--pa-alert-padding-y) var(--pa-alert-padding-x);margin-bottom:var(--pa-alert-margin-bottom);color:var(--pa-alert-color);background-color:var(--pa-alert-bg);border:var(--pa-alert-border);border-radius:var(--pa-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--pa-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--pa-alert-color: var(--pa-primary-text-emphasis);--pa-alert-bg: var(--pa-primary-bg-subtle);--pa-alert-border-color: var(--pa-primary-border-subtle);--pa-alert-link-color: var(--pa-primary-text-emphasis)}.alert-secondary{--pa-alert-color: var(--pa-secondary-text-emphasis);--pa-alert-bg: var(--pa-secondary-bg-subtle);--pa-alert-border-color: var(--pa-secondary-border-subtle);--pa-alert-link-color: var(--pa-secondary-text-emphasis)}.alert-success{--pa-alert-color: var(--pa-success-text-emphasis);--pa-alert-bg: var(--pa-success-bg-subtle);--pa-alert-border-color: var(--pa-success-border-subtle);--pa-alert-link-color: var(--pa-success-text-emphasis)}.alert-info{--pa-alert-color: var(--pa-info-text-emphasis);--pa-alert-bg: var(--pa-info-bg-subtle);--pa-alert-border-color: var(--pa-info-border-subtle);--pa-alert-link-color: var(--pa-info-text-emphasis)}.alert-warning{--pa-alert-color: var(--pa-warning-text-emphasis);--pa-alert-bg: var(--pa-warning-bg-subtle);--pa-alert-border-color: var(--pa-warning-border-subtle);--pa-alert-link-color: var(--pa-warning-text-emphasis)}.alert-danger{--pa-alert-color: var(--pa-danger-text-emphasis);--pa-alert-bg: var(--pa-danger-bg-subtle);--pa-alert-border-color: var(--pa-danger-border-subtle);--pa-alert-link-color: var(--pa-danger-text-emphasis)}.alert-light{--pa-alert-color: var(--pa-light-text-emphasis);--pa-alert-bg: var(--pa-light-bg-subtle);--pa-alert-border-color: var(--pa-light-border-subtle);--pa-alert-link-color: var(--pa-light-text-emphasis)}.alert-dark{--pa-alert-color: var(--pa-dark-text-emphasis);--pa-alert-bg: var(--pa-dark-bg-subtle);--pa-alert-border-color: var(--pa-dark-border-subtle);--pa-alert-link-color: var(--pa-dark-text-emphasis)}.btn-close{--pa-btn-close-color: #000;--pa-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--pa-btn-close-opacity: 0.5;--pa-btn-close-hover-opacity: 0.75;--pa-btn-close-focus-shadow: 0 0 0 0.25rem rgba(2, 26, 52, 0.25);--pa-btn-close-focus-opacity: 1;--pa-btn-close-disabled-opacity: 0.25;--pa-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--pa-btn-close-color);background:rgba(0,0,0,0) var(--pa-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--pa-btn-close-opacity)}.btn-close:hover{color:var(--pa-btn-close-color);text-decoration:none;opacity:var(--pa-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--pa-btn-close-focus-shadow);opacity:var(--pa-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:var(--pa-btn-close-disabled-opacity)}.btn-close-white{filter:var(--pa-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--pa-btn-close-white-filter)}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--pa-primary-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--pa-secondary-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--pa-success-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--pa-info-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--pa-warning-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--pa-danger-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--pa-light-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--pa-dark-rgb), var(--pa-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--pa-primary-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-primary-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(2, 21, 42, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(2, 21, 42, var(--pa-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--pa-secondary-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-secondary-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(6, 76, 118, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(6, 76, 118, var(--pa-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--pa-success-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-success-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, var(--pa-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--pa-info-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-info-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, var(--pa-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--pa-warning-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-warning-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, var(--pa-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--pa-danger-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-danger-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, var(--pa-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--pa-light-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-light-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--pa-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--pa-dark-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-dark-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--pa-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--pa-focus-ring-x, 0) var(--pa-focus-ring-y, 0) var(--pa-focus-ring-blur, 0) var(--pa-focus-ring-width) var(--pa-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--pa-link-color-rgb), var(--pa-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--pa-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--pa-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--pa-aspect-ratio: 100%}.ratio-4x3{--pa-aspect-ratio: 75%}.ratio-16x9{--pa-aspect-ratio: 56.25%}.ratio-21x9{--pa-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--pa-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:var(--pa-box-shadow) !important}.shadow-sm{box-shadow:var(--pa-box-shadow-sm) !important}.shadow-lg{box-shadow:var(--pa-box-shadow-lg) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--pa-focus-ring-color: rgba(var(--pa-primary-rgb), var(--pa-focus-ring-opacity))}.focus-ring-secondary{--pa-focus-ring-color: rgba(var(--pa-secondary-rgb), var(--pa-focus-ring-opacity))}.focus-ring-success{--pa-focus-ring-color: rgba(var(--pa-success-rgb), var(--pa-focus-ring-opacity))}.focus-ring-info{--pa-focus-ring-color: rgba(var(--pa-info-rgb), var(--pa-focus-ring-opacity))}.focus-ring-warning{--pa-focus-ring-color: rgba(var(--pa-warning-rgb), var(--pa-focus-ring-opacity))}.focus-ring-danger{--pa-focus-ring-color: rgba(var(--pa-danger-rgb), var(--pa-focus-ring-opacity))}.focus-ring-light{--pa-focus-ring-color: rgba(var(--pa-light-rgb), var(--pa-focus-ring-opacity))}.focus-ring-dark{--pa-focus-ring-color: rgba(var(--pa-dark-rgb), var(--pa-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--pa-border-opacity: 1;border-color:rgba(var(--pa-primary-rgb), var(--pa-border-opacity)) !important}.border-secondary{--pa-border-opacity: 1;border-color:rgba(var(--pa-secondary-rgb), var(--pa-border-opacity)) !important}.border-success{--pa-border-opacity: 1;border-color:rgba(var(--pa-success-rgb), var(--pa-border-opacity)) !important}.border-info{--pa-border-opacity: 1;border-color:rgba(var(--pa-info-rgb), var(--pa-border-opacity)) !important}.border-warning{--pa-border-opacity: 1;border-color:rgba(var(--pa-warning-rgb), var(--pa-border-opacity)) !important}.border-danger{--pa-border-opacity: 1;border-color:rgba(var(--pa-danger-rgb), var(--pa-border-opacity)) !important}.border-light{--pa-border-opacity: 1;border-color:rgba(var(--pa-light-rgb), var(--pa-border-opacity)) !important}.border-dark{--pa-border-opacity: 1;border-color:rgba(var(--pa-dark-rgb), var(--pa-border-opacity)) !important}.border-black{--pa-border-opacity: 1;border-color:rgba(var(--pa-black-rgb), var(--pa-border-opacity)) !important}.border-white{--pa-border-opacity: 1;border-color:rgba(var(--pa-white-rgb), var(--pa-border-opacity)) !important}.border-primary-subtle{border-color:var(--pa-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--pa-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--pa-success-border-subtle) !important}.border-info-subtle{border-color:var(--pa-info-border-subtle) !important}.border-warning-subtle{border-color:var(--pa-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--pa-danger-border-subtle) !important}.border-light-subtle{border-color:var(--pa-light-border-subtle) !important}.border-dark-subtle{border-color:var(--pa-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--pa-border-opacity: 0.1}.border-opacity-25{--pa-border-opacity: 0.25}.border-opacity-50{--pa-border-opacity: 0.5}.border-opacity-75{--pa-border-opacity: 0.75}.border-opacity-100{--pa-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--pa-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--pa-text-opacity: 1;color:rgba(var(--pa-primary-rgb), var(--pa-text-opacity)) !important}.text-secondary{--pa-text-opacity: 1;color:rgba(var(--pa-secondary-rgb), var(--pa-text-opacity)) !important}.text-success{--pa-text-opacity: 1;color:rgba(var(--pa-success-rgb), var(--pa-text-opacity)) !important}.text-info{--pa-text-opacity: 1;color:rgba(var(--pa-info-rgb), var(--pa-text-opacity)) !important}.text-warning{--pa-text-opacity: 1;color:rgba(var(--pa-warning-rgb), var(--pa-text-opacity)) !important}.text-danger{--pa-text-opacity: 1;color:rgba(var(--pa-danger-rgb), var(--pa-text-opacity)) !important}.text-light{--pa-text-opacity: 1;color:rgba(var(--pa-light-rgb), var(--pa-text-opacity)) !important}.text-dark{--pa-text-opacity: 1;color:rgba(var(--pa-dark-rgb), var(--pa-text-opacity)) !important}.text-black{--pa-text-opacity: 1;color:rgba(var(--pa-black-rgb), var(--pa-text-opacity)) !important}.text-white{--pa-text-opacity: 1;color:rgba(var(--pa-white-rgb), var(--pa-text-opacity)) !important}.text-body{--pa-text-opacity: 1;color:rgba(var(--pa-body-color-rgb), var(--pa-text-opacity)) !important}.text-muted{--pa-text-opacity: 1;color:var(--pa-secondary-color) !important}.text-black-50{--pa-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--pa-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--pa-text-opacity: 1;color:var(--pa-secondary-color) !important}.text-body-tertiary{--pa-text-opacity: 1;color:var(--pa-tertiary-color) !important}.text-body-emphasis{--pa-text-opacity: 1;color:var(--pa-emphasis-color) !important}.text-reset{--pa-text-opacity: 1;color:inherit !important}.text-opacity-25{--pa-text-opacity: 0.25}.text-opacity-50{--pa-text-opacity: 0.5}.text-opacity-75{--pa-text-opacity: 0.75}.text-opacity-100{--pa-text-opacity: 1}.text-primary-emphasis{color:var(--pa-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--pa-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--pa-success-text-emphasis) !important}.text-info-emphasis{color:var(--pa-info-text-emphasis) !important}.text-warning-emphasis{color:var(--pa-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--pa-danger-text-emphasis) !important}.text-light-emphasis{color:var(--pa-light-text-emphasis) !important}.text-dark-emphasis{color:var(--pa-dark-text-emphasis) !important}.link-opacity-10{--pa-link-opacity: 0.1}.link-opacity-10-hover:hover{--pa-link-opacity: 0.1}.link-opacity-25{--pa-link-opacity: 0.25}.link-opacity-25-hover:hover{--pa-link-opacity: 0.25}.link-opacity-50{--pa-link-opacity: 0.5}.link-opacity-50-hover:hover{--pa-link-opacity: 0.5}.link-opacity-75{--pa-link-opacity: 0.75}.link-opacity-75-hover:hover{--pa-link-opacity: 0.75}.link-opacity-100{--pa-link-opacity: 1}.link-opacity-100-hover:hover{--pa-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-primary{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-primary-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-secondary{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-secondary-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-success{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-success-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-info{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-info-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-warning{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-warning-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-danger{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-danger-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-light{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-light-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-dark{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-dark-rgb), var(--pa-link-underline-opacity)) !important}.link-underline{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-link-color-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--pa-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--pa-link-underline-opacity: 0}.link-underline-opacity-10{--pa-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--pa-link-underline-opacity: 0.1}.link-underline-opacity-25{--pa-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--pa-link-underline-opacity: 0.25}.link-underline-opacity-50{--pa-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--pa-link-underline-opacity: 0.5}.link-underline-opacity-75{--pa-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--pa-link-underline-opacity: 0.75}.link-underline-opacity-100{--pa-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--pa-link-underline-opacity: 1}.bg-primary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-primary-rgb), var(--pa-bg-opacity)) !important}.bg-secondary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-secondary-rgb), var(--pa-bg-opacity)) !important}.bg-success{--pa-bg-opacity: 1;background-color:rgba(var(--pa-success-rgb), var(--pa-bg-opacity)) !important}.bg-info{--pa-bg-opacity: 1;background-color:rgba(var(--pa-info-rgb), var(--pa-bg-opacity)) !important}.bg-warning{--pa-bg-opacity: 1;background-color:rgba(var(--pa-warning-rgb), var(--pa-bg-opacity)) !important}.bg-danger{--pa-bg-opacity: 1;background-color:rgba(var(--pa-danger-rgb), var(--pa-bg-opacity)) !important}.bg-light{--pa-bg-opacity: 1;background-color:rgba(var(--pa-light-rgb), var(--pa-bg-opacity)) !important}.bg-dark{--pa-bg-opacity: 1;background-color:rgba(var(--pa-dark-rgb), var(--pa-bg-opacity)) !important}.bg-black{--pa-bg-opacity: 1;background-color:rgba(var(--pa-black-rgb), var(--pa-bg-opacity)) !important}.bg-white{--pa-bg-opacity: 1;background-color:rgba(var(--pa-white-rgb), var(--pa-bg-opacity)) !important}.bg-body{--pa-bg-opacity: 1;background-color:rgba(var(--pa-body-bg-rgb), var(--pa-bg-opacity)) !important}.bg-transparent{--pa-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-secondary-bg-rgb), var(--pa-bg-opacity)) !important}.bg-body-tertiary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-tertiary-bg-rgb), var(--pa-bg-opacity)) !important}.bg-opacity-10{--pa-bg-opacity: 0.1}.bg-opacity-25{--pa-bg-opacity: 0.25}.bg-opacity-50{--pa-bg-opacity: 0.5}.bg-opacity-75{--pa-bg-opacity: 0.75}.bg-opacity-100{--pa-bg-opacity: 1}.bg-primary-subtle{background-color:var(--pa-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--pa-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--pa-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--pa-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--pa-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--pa-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--pa-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--pa-dark-bg-subtle) !important}.bg-gradient{background-image:var(--pa-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--pa-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--pa-border-radius-sm) !important}.rounded-2{border-radius:var(--pa-border-radius) !important}.rounded-3{border-radius:var(--pa-border-radius-lg) !important}.rounded-4{border-radius:var(--pa-border-radius-xl) !important}.rounded-5{border-radius:var(--pa-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--pa-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--pa-border-radius) !important;border-top-right-radius:var(--pa-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--pa-border-radius-sm) !important;border-top-right-radius:var(--pa-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--pa-border-radius) !important;border-top-right-radius:var(--pa-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--pa-border-radius-lg) !important;border-top-right-radius:var(--pa-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--pa-border-radius-xl) !important;border-top-right-radius:var(--pa-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--pa-border-radius-xxl) !important;border-top-right-radius:var(--pa-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--pa-border-radius-pill) !important;border-top-right-radius:var(--pa-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--pa-border-radius) !important;border-bottom-right-radius:var(--pa-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--pa-border-radius-sm) !important;border-bottom-right-radius:var(--pa-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--pa-border-radius) !important;border-bottom-right-radius:var(--pa-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--pa-border-radius-lg) !important;border-bottom-right-radius:var(--pa-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--pa-border-radius-xl) !important;border-bottom-right-radius:var(--pa-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--pa-border-radius-xxl) !important;border-bottom-right-radius:var(--pa-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--pa-border-radius-pill) !important;border-bottom-right-radius:var(--pa-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--pa-border-radius) !important;border-bottom-left-radius:var(--pa-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--pa-border-radius-sm) !important;border-bottom-left-radius:var(--pa-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--pa-border-radius) !important;border-bottom-left-radius:var(--pa-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--pa-border-radius-lg) !important;border-bottom-left-radius:var(--pa-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--pa-border-radius-xl) !important;border-bottom-left-radius:var(--pa-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--pa-border-radius-xxl) !important;border-bottom-left-radius:var(--pa-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--pa-border-radius-pill) !important;border-bottom-left-radius:var(--pa-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--pa-border-radius) !important;border-top-left-radius:var(--pa-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--pa-border-radius-sm) !important;border-top-left-radius:var(--pa-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--pa-border-radius) !important;border-top-left-radius:var(--pa-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--pa-border-radius-lg) !important;border-top-left-radius:var(--pa-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--pa-border-radius-xl) !important;border-top-left-radius:var(--pa-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--pa-border-radius-xxl) !important;border-top-left-radius:var(--pa-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--pa-border-radius-pill) !important;border-top-left-radius:var(--pa-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}body{font-family:"Open Sans",sans-serif;font-weight:400;color:var(--text-color);background-color:var(--bg-color);max-width:1200px;margin:0 auto}.btn-primary{color:var(--text-color-reverse);background-color:var(--primary-color);border-color:var(--primary-color)}.btn-outline-primary{color:var(--primary-color);background:none;border-color:var(--primary-color)}.btn-outline-primary:hover{background-color:var(--primary-color);color:var(--text-color-reverse)}.btn-secondary{color:#fff;background-color:var(--secondary-color);border-color:var(--secondary-color)}.navbar .nav-top{height:86px}.navbar .fixed-menu{width:220px}.navbar .logo img{width:200px}a{text-decoration:underline;color:var(--link-color)}a:hover{color:var(--link-hover-color)}a:active{color:var(--link-color)}h1,.h1,h2,.h2{font-weight:500;line-height:1.25;padding-bottom:12px;padding-top:14px}h1,.h1{font-weight:600}h3,.h3{padding-top:16px}.motto .title{font-weight:600;font-size:32px;padding-top:36px}.motto .motto{font-weight:500;font-size:20px}.motto .short{font-weight:500;font-size:12px}.btn-fixed{border-width:2px;border-style:solid;width:220px;height:46px;text-transform:uppercase;font-weight:700;border-radius:5px 5px 5px 5px;vertical-align:middle;line-height:42px;padding:0;margin:16px;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)}.pactus-video video{max-width:100%;width:100%;margin-left:auto;margin-right:auto;display:block}.highlighter-rouge .highlight pre{background-color:#0d1117;padding:32px 12px 12px 12px;color:#ccc;position:relative;overflow:auto;direction:ltr}.highlighter-rouge .highlight pre button{position:absolute;top:6px;right:8px;padding:2px;background-color:gray;color:#404040;border-radius:5px;border:ridge 1px gray}.highlighter-rouge .highlight pre button:hover{cursor:pointer;background-color:#bcbabb}.nav-tabs{border-color:#0d1117 !important}.nav-tabs .nav-link{border-width:0 !important}.nav-tabs .nav-link:not(.active):hover{color:#fff !important;background-color:gray !important}.nav-tabs .active{color:#fff !important;background-color:#0d1117 !important}.table thead tr th{font-weight:700;background-color:var(--bg-color) !important}blockquote{background:#eee;border-left:10px solid #ccc;padding:16px;quotes:"“" "”" "‘" "’"}blockquote:before{color:#ccc;content:open-quote;font-size:64px;line-height:.1em;vertical-align:-0.4em}blockquote p{margin-top:16px}blockquote p:first-child{display:inline;padding-bottom:160px;margin-bottom:160px}.footer{background-color:var(--primary-color);color:var(--text-color-reverse)}.footer .section{font-size:1.75rem;font-weight:500;line-height:1.25;padding-bottom:20px}.footer li{padding-bottom:8px}.footer.anchor a{color:var(--text-color-reverse)}.footer.anchor a:link{color:var(--text-color-reverse);background-color:rgba(0,0,0,0);text-decoration:none}.footer.anchor a:hover{color:var(--text-color-reverse)}.footer .legal{color:var(--text-color-reverse);font-size:12px}.community img{margin:4px}.community_ran img{margin:4px}#btn-back-to-top{background-color:var(--primary-color);color:var(--bg-color);position:fixed;bottom:20px;right:20px;display:none}.edit-bar{padding-top:30px}.edit-bar .edit-btn,.edit-bar .edit-btn>a:hover{color:var(--text-color);text-decoration:none}.all-posts .post-link{padding-bottom:8px}.blog-post .post-date{padding-bottom:10px;color:gray}.blog-post .content{padding-top:22px;min-height:600px}.partners img{padding-top:24px}.sensifai{max-width:300px}.hexdump{font-family:monospace;font-size:12px;padding-bottom:1rem}.hexdump .offset{border-right:2px solid #708090;color:#789}.hexdump .ascii{color:dimgray}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.faq h3,.faq .h3{margin-top:20px;padding-top:16px;border-top:1px solid var(--primary-color)}.faq a{text-decoration:none}.faq .group{padding-top:16px}.faq .group .col{font-weight:600;padding-bottom:10px}.faq .separator{padding-top:12px;padding-bottom:12px}.faq .read_more{padding-top:12px}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.toc .btn,.toc a{color:var(--text-color)}.toc .btn-section{padding:.25rem .5rem;font-weight:600;background-color:rgba(0,0,0,0)}.toc .btn-section:hover,.toc .btn-section:focus{background-color:var(--bg-color)}.toc .btn-page a{padding:.1875rem .5rem;margin-top:.125rem;margin-left:1.25rem}.toc .btn-page a:hover,.toc .btn-page a:focus,.toc .btn-page .selected{background-color:var(--bg-color)}.timeline{position:relative}.timeline::after{content:"";position:absolute;width:6px;background-color:#939597;top:0;bottom:0;left:50%;margin-left:-3px}.timeline-card{position:relative;width:50%}.timeline-card .card{border:1px solid rgba(0,0,0,.175);border-radius:5px;background-color:#eee;color:#4c4c4c}.timeline-card .card a{color:#4c4c4c}.timeline-card .card .text-muted{color:#898b8d !important}.timeline-card .card-title{padding-bottom:12px;font-size:1.1rem;font-weight:500}.timeline-card::after{line-height:38px;font-size:24px;position:absolute;text-align:center;width:48px;height:48px;right:-24px;top:15px;border-radius:50%;z-index:1}.timeline-card.completed::after{content:"✅";background-color:#eee;border:5px solid #77b255}.timeline-card.ongoing::after{content:"🚧";background-color:#eee;border:5px solid #ffcb4b}.timeline-card.upcoming::after{content:"⏳";background-color:#eee;border:5px solid #478ec2}.timeline-card.left{padding:0px 50px 20px 0px;left:0}.timeline-card.right{padding:0px 0px 20px 50px;left:50%}.timeline-card.left::before{content:"";position:absolute;height:20px;width:20px;background-color:#eee;box-sizing:border-box;transform:rotate(45deg) translate(-50%);top:34px;z-index:0;right:33px;border-right:1px solid rgba(0,0,0,.175);border-top:1px solid rgba(0,0,0,.175)}.timeline-card.right::before{content:"";position:absolute;height:20px;width:20px;background-color:#eee !important;box-sizing:border-box;transform:rotate(45deg) translate(-50%);top:33px;z-index:0;left:48px;border-left:1px solid rgba(0,0,0,.175);border-bottom:1px solid rgba(0,0,0,.175)}.timeline-card.right::after{left:-24px}@media screen and (max-width: 600px){.timeline::after{left:31px}.timeline-card{width:100%;padding-left:80px !important;padding-right:25px !important}.timeline-card::before{left:77px !important}.timeline-card.left::after,.timeline-card.right::after{left:8px !important}.timeline-card.left::before{border-right:none;border-top:none;border-left:1px solid rgba(0,0,0,.175);border-bottom:1px solid rgba(0,0,0,.175)}.timeline-card.right::before{right:auto}.timeline-card.right{left:0%}}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.learn h2,.learn .h2{border-top:1px solid var(--primary-color)}[data-bs-theme=dark] blockquote{background:#14171c}[data-bs-theme=dark] .toc .btn-section::before{--svg-color: var(--text)}[data-bs-theme=dark] .fa-linux{color:#fff}/*# sourceMappingURL=custom.css.map */ \ No newline at end of file diff --git a/ar/assets/css/custom.css.map b/ar/assets/css/custom.css.map new file mode 100644 index 000000000..e0c48830b --- /dev/null +++ b/ar/assets/css/custom.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../_sass/_vars.scss","../../../node_modules/bootstrap/scss/_root.scss","../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../node_modules/bootstrap/scss/_reboot.scss","../../../node_modules/bootstrap/scss/_variables.scss","../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../node_modules/bootstrap/scss/_type.scss","../../../node_modules/bootstrap/scss/mixins/_lists.scss","../../../node_modules/bootstrap/scss/_images.scss","../../../node_modules/bootstrap/scss/mixins/_image.scss","../../../node_modules/bootstrap/scss/mixins/_box-shadow.scss","../../../node_modules/bootstrap/scss/_containers.scss","../../../node_modules/bootstrap/scss/mixins/_container.scss","../../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../../node_modules/bootstrap/scss/_grid.scss","../../../node_modules/bootstrap/scss/mixins/_grid.scss","../../../node_modules/bootstrap/scss/_tables.scss","../../../node_modules/bootstrap/scss/mixins/_table-variants.scss","../../../node_modules/bootstrap/scss/forms/_labels.scss","../../../node_modules/bootstrap/scss/forms/_form-text.scss","../../../node_modules/bootstrap/scss/forms/_form-control.scss","../../../node_modules/bootstrap/scss/mixins/_transition.scss","../../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../../node_modules/bootstrap/scss/forms/_form-select.scss","../../../node_modules/bootstrap/scss/forms/_form-check.scss","../../../node_modules/bootstrap/scss/forms/_form-range.scss","../../../node_modules/bootstrap/scss/forms/_floating-labels.scss","../../../node_modules/bootstrap/scss/forms/_input-group.scss","../../../node_modules/bootstrap/scss/mixins/_forms.scss","../../../node_modules/bootstrap/scss/_buttons.scss","../../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../../node_modules/bootstrap/scss/_transitions.scss","../../../node_modules/bootstrap/scss/_dropdown.scss","../../../node_modules/bootstrap/scss/mixins/_caret.scss","../../../node_modules/bootstrap/scss/_button-group.scss","../../../node_modules/bootstrap/scss/_nav.scss","../../../node_modules/bootstrap/scss/_navbar.scss","../../../node_modules/bootstrap/scss/_badge.scss","../../../node_modules/bootstrap/scss/_alert.scss","../../../node_modules/bootstrap/scss/_close.scss","../../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../../node_modules/bootstrap/scss/helpers/_color-bg.scss","../../../node_modules/bootstrap/scss/helpers/_colored-links.scss","../../../node_modules/bootstrap/scss/helpers/_focus-ring.scss","../../../node_modules/bootstrap/scss/helpers/_icon-link.scss","../../../node_modules/bootstrap/scss/helpers/_ratio.scss","../../../node_modules/bootstrap/scss/helpers/_position.scss","../../../node_modules/bootstrap/scss/helpers/_stacks.scss","../../../node_modules/bootstrap/scss/helpers/_visually-hidden.scss","../../../node_modules/bootstrap/scss/mixins/_visually-hidden.scss","../../../node_modules/bootstrap/scss/helpers/_stretched-link.scss","../../../node_modules/bootstrap/scss/helpers/_text-truncation.scss","../../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../../node_modules/bootstrap/scss/helpers/_vr.scss","../../../node_modules/bootstrap/scss/mixins/_utilities.scss","../../../node_modules/bootstrap/scss/utilities/_api.scss","../../_sass/_styles.scss","../../_sass/_hexdump.scss","../../_sass/_faq.scss","../../_sass/_toc.scss","../../_sass/_roadmap.scss","../../_sass/_learn.scss","../../_sass/dark_mode.scss"],"names":[],"mappings":"CAGA,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iDChEF,4BASI,mRAIA,+MAIA,yKAIA,wOAIA,yRAIA,yPAIA,yRAGF,8BACA,wBAMA,sNACA,0GACA,0FAOA,iDC2OI,oBALI,KDpOR,2BACA,2BAKA,yBACA,gCACA,mBACA,gCAEA,0BACA,iCAEA,6CACA,qCACA,2BACA,qCAEA,2CACA,oCACA,0BACA,oCAGA,4BAEA,yBACA,+BACA,gCAEA,+BACA,qCAMA,yBACA,8BACA,2BAGA,uBACA,yBACA,2BACA,oDAEA,6BACA,+BACA,8BACA,4BACA,6BACA,oDACA,+BAGA,mDACA,4DACA,qDACA,4DAIA,+BACA,8BACA,6CAIA,+BACA,sCACA,iCACA,wCEhHE,qBFsHA,kBAGA,yBACA,mCACA,sBACA,6BAEA,0BACA,uCAEA,gDACA,wCACA,2BACA,kCAEA,8CACA,uCACA,0BACA,iCAGE,yRAIA,yPAIA,yRAGF,4BAEA,yBACA,+BACA,mCACA,yCAEA,yBACA,8BACA,2BAEA,2BACA,yDAEA,+BACA,sCACA,iCACA,wCGxKJ,qBAGE,sBAeE,8CANJ,MAOM,wBAcN,KACE,SACA,uCF6OI,UALI,yBEtOR,uCACA,uCACA,2BACA,qCACA,mCACA,8BACA,0CASF,GACE,cACA,MCmnB4B,QDlnB5B,SACA,wCACA,QCynB4B,ID/mB9B,0CACE,aACA,cCwjB4B,MDrjB5B,YCwjB4B,IDvjB5B,YCwjB4B,IDvjB5B,8BAGF,OFuMQ,iCA5JJ,0BE3CJ,OF8MQ,kBEzMR,OFkMQ,iCA5JJ,0BEtCJ,OFyMQ,gBEpMR,OF6LQ,+BA5JJ,0BEjCJ,OFoMQ,mBE/LR,OFwLQ,iCA5JJ,0BE5BJ,OF+LQ,kBE1LR,OF+KM,UALI,QErKV,OF0KM,UALI,KE1JV,EACE,aACA,cCwV0B,KD9U5B,YACE,iCACA,YACA,8BAMF,QACE,mBACA,kBACA,oBAMF,MAEE,kBAGF,SAGE,aACA,mBAGF,wBAIE,gBAGF,GACE,YC6b4B,IDxb9B,GACE,oBACA,cAMF,WACE,gBAQF,SAEE,YCsa4B,OD9Z9B,aF6EM,UALI,QEjEV,WACE,QCqf4B,QDpf5B,gCACA,wCASF,QAEE,kBFwDI,UALI,OEjDR,cACA,wBAGF,mBACA,eAKA,EACE,gEACA,gBCgNwC,UD9MxC,QACE,oDAWF,4DAEE,cACA,qBAOJ,kBAIE,YCgV4B,yBHlUxB,UALI,IEDV,IACE,cACA,aACA,mBACA,cFEI,UALI,QEQR,SFHI,UALI,QEUN,cACA,kBAIJ,KFVM,UALI,QEiBR,2BACA,qBAGA,OACE,cAIJ,IACE,yBFtBI,UALI,QE6BR,MCu5CkC,kBDt5ClC,iBCu5CkC,qBC5rDhC,qBFwSF,QACE,UF7BE,UALI,IE6CV,OACE,gBAMF,QAEE,sBAQF,MACE,oBACA,yBAGF,QACE,YC4X4B,MD3X5B,eC2X4B,MD1X5B,MC4Z4B,0BD3Z5B,gBAOF,GAEE,mBACA,gCAGF,2BAME,qBACA,mBACA,eAQF,MACE,qBAMF,OAEE,gBAQF,iCACE,UAKF,sCAKE,SACA,oBF5HI,UALI,QEmIR,oBAIF,cAEE,oBAKF,cACE,eAGF,OAGE,iBAGA,gBACE,UAOJ,0IACE,wBAQF,gDAIE,0BAGE,4GACE,eAON,mBACE,UACA,kBAKF,SACE,gBAUF,SACE,YACA,UACA,SACA,SAQF,OACE,WACA,WACA,UACA,cCmN4B,MHpatB,iCEoNN,oBFhXE,0BEyWJ,OFtMQ,kBE+MN,SACE,WAOJ,+OAOE,UAGF,4BACE,YASF,cACE,6BACA,oBAmBF,4BACE,wBAKF,+BACE,UAOF,uBACE,aACA,0BAKF,OACE,qBAKF,OACE,SAOF,QACE,kBACA,eAQF,SACE,wBAQF,SACE,wBGrkBF,MLmQM,UALI,QK5PR,YFwoB4B,IEnoB5B,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBK/OR,eCvDE,eACA,gBD2DF,aC5DE,eACA,gBD8DF,kBACE,qBAEA,mCACE,aFsoB0B,ME5nB9B,YL8MM,UALI,QKvMR,yBAIF,YACE,cFiUO,KH1HH,UALI,QK/LR,wBACE,gBAIJ,mBACE,iBACA,cFuTO,KH1HH,UALI,QKtLR,MFtFS,QEwFT,2BACE,aEhGJ,WCIE,eAGA,YDDF,eACE,QJ6jDkC,OI5jDlC,iBJ6jDkC,kBI5jDlC,2DHGE,sCKLE,WARW,wBDKf,eAGA,YDcF,QAEE,qBAGF,YACE,oBACA,cAGF,gBPyPM,UALI,QOlPR,MJgjDkC,0BOllDlC,mGCHA,sBACA,iBACA,WACA,0CACA,yCACA,kBACA,iBCsDE,yBF5CE,yBACE,UPkee,OSvbnB,yBF5CE,uCACE,UPkee,OSvbnB,yBF5CE,qDACE,UPkee,OSvbnB,0BF5CE,mEACE,UPkee,QSvbnB,0BF5CE,kFACE,UPkee,QUlfvB,MAEI,2JAKF,KCNA,sBACA,iBACA,aACA,eAEA,uCACA,2CACA,0CDEE,OCOF,cACA,WACA,eACA,0CACA,yCACA,8BA+CI,KACE,YAGF,iBApCJ,cACA,WAcA,cACE,cACA,WAFF,cACE,cACA,UAFF,cACE,cACA,mBAFF,cACE,cACA,UAFF,cACE,cACA,UAFF,cACE,cACA,mBA+BE,UAhDJ,cACA,WAqDQ,OAhEN,cACA,kBA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,UA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,UA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,UA+DM,QAhEN,cACA,mBA+DM,QAhEN,cACA,mBA+DM,QAhEN,cACA,WAuEQ,UAxDV,wBAwDU,UAxDV,yBAwDU,UAxDV,gBAwDU,UAxDV,yBAwDU,UAxDV,yBAwDU,UAxDV,gBAwDU,UAxDV,yBAwDU,UAxDV,yBAwDU,UAxDV,gBAwDU,WAxDV,yBAwDU,WAxDV,yBAmEM,WAEE,iBAGF,WAEE,iBAPF,WAEE,uBAGF,WAEE,uBAPF,WAEE,sBAGF,WAEE,sBAPF,WAEE,oBAGF,WAEE,oBAPF,WAEE,sBAGF,WAEE,sBAPF,WAEE,oBAGF,WAEE,oBF1DN,yBEUE,QACE,YAGF,oBApCJ,cACA,WAcA,iBACE,cACA,WAFF,iBACE,cACA,UAFF,iBACE,cACA,mBAFF,iBACE,cACA,UAFF,iBACE,cACA,UAFF,iBACE,cACA,mBA+BE,aAhDJ,cACA,WAqDQ,UAhEN,cACA,kBA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,UA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,UA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,UA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,WAuEQ,aAxDV,cAwDU,aAxDV,wBAwDU,aAxDV,yBAwDU,aAxDV,gBAwDU,aAxDV,yBAwDU,aAxDV,yBAwDU,aAxDV,gBAwDU,aAxDV,yBAwDU,aAxDV,yBAwDU,aAxDV,gBAwDU,cAxDV,yBAwDU,cAxDV,yBAmEM,iBAEE,iBAGF,iBAEE,iBAPF,iBAEE,uBAGF,iBAEE,uBAPF,iBAEE,sBAGF,iBAEE,sBAPF,iBAEE,oBAGF,iBAEE,oBAPF,iBAEE,sBAGF,iBAEE,sBAPF,iBAEE,oBAGF,iBAEE,qBF1DN,yBEUE,QACE,YAGF,oBApCJ,cACA,WAcA,iBACE,cACA,WAFF,iBACE,cACA,UAFF,iBACE,cACA,mBAFF,iBACE,cACA,UAFF,iBACE,cACA,UAFF,iBACE,cACA,mBA+BE,aAhDJ,cACA,WAqDQ,UAhEN,cACA,kBA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,UA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,UA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,UA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,WAuEQ,aAxDV,cAwDU,aAxDV,wBAwDU,aAxDV,yBAwDU,aAxDV,gBAwDU,aAxDV,yBAwDU,aAxDV,yBAwDU,aAxDV,gBAwDU,aAxDV,yBAwDU,aAxDV,yBAwDU,aAxDV,gBAwDU,cAxDV,yBAwDU,cAxDV,yBAmEM,iBAEE,iBAGF,iBAEE,iBAPF,iBAEE,uBAGF,iBAEE,uBAPF,iBAEE,sBAGF,iBAEE,sBAPF,iBAEE,oBAGF,iBAEE,oBAPF,iBAEE,sBAGF,iBAEE,sBAPF,iBAEE,oBAGF,iBAEE,qBF1DN,yBEUE,QACE,YAGF,oBApCJ,cACA,WAcA,iBACE,cACA,WAFF,iBACE,cACA,UAFF,iBACE,cACA,mBAFF,iBACE,cACA,UAFF,iBACE,cACA,UAFF,iBACE,cACA,mBA+BE,aAhDJ,cACA,WAqDQ,UAhEN,cACA,kBA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,UA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,UA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,UA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,WAuEQ,aAxDV,cAwDU,aAxDV,wBAwDU,aAxDV,yBAwDU,aAxDV,gBAwDU,aAxDV,yBAwDU,aAxDV,yBAwDU,aAxDV,gBAwDU,aAxDV,yBAwDU,aAxDV,yBAwDU,aAxDV,gBAwDU,cAxDV,yBAwDU,cAxDV,yBAmEM,iBAEE,iBAGF,iBAEE,iBAPF,iBAEE,uBAGF,iBAEE,uBAPF,iBAEE,sBAGF,iBAEE,sBAPF,iBAEE,oBAGF,iBAEE,oBAPF,iBAEE,sBAGF,iBAEE,sBAPF,iBAEE,oBAGF,iBAEE,qBF1DN,0BEUE,QACE,YAGF,oBApCJ,cACA,WAcA,iBACE,cACA,WAFF,iBACE,cACA,UAFF,iBACE,cACA,mBAFF,iBACE,cACA,UAFF,iBACE,cACA,UAFF,iBACE,cACA,mBA+BE,aAhDJ,cACA,WAqDQ,UAhEN,cACA,kBA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,UA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,UA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,mBA+DM,UAhEN,cACA,UA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,WAuEQ,aAxDV,cAwDU,aAxDV,wBAwDU,aAxDV,yBAwDU,aAxDV,gBAwDU,aAxDV,yBAwDU,aAxDV,yBAwDU,aAxDV,gBAwDU,aAxDV,yBAwDU,aAxDV,yBAwDU,aAxDV,gBAwDU,cAxDV,yBAwDU,cAxDV,yBAmEM,iBAEE,iBAGF,iBAEE,iBAPF,iBAEE,uBAGF,iBAEE,uBAPF,iBAEE,sBAGF,iBAEE,sBAPF,iBAEE,oBAGF,iBAEE,oBAPF,iBAEE,sBAGF,iBAEE,sBAPF,iBAEE,oBAGF,iBAEE,qBF1DN,0BEUE,SACE,YAGF,qBApCJ,cACA,WAcA,kBACE,cACA,WAFF,kBACE,cACA,UAFF,kBACE,cACA,mBAFF,kBACE,cACA,UAFF,kBACE,cACA,UAFF,kBACE,cACA,mBA+BE,cAhDJ,cACA,WAqDQ,WAhEN,cACA,kBA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,UA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,UA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,mBA+DM,WAhEN,cACA,UA+DM,YAhEN,cACA,mBA+DM,YAhEN,cACA,mBA+DM,YAhEN,cACA,WAuEQ,cAxDV,cAwDU,cAxDV,wBAwDU,cAxDV,yBAwDU,cAxDV,gBAwDU,cAxDV,yBAwDU,cAxDV,yBAwDU,cAxDV,gBAwDU,cAxDV,yBAwDU,cAxDV,yBAwDU,cAxDV,gBAwDU,eAxDV,yBAwDU,eAxDV,yBAmEM,mBAEE,iBAGF,mBAEE,iBAPF,mBAEE,uBAGF,mBAEE,uBAPF,mBAEE,sBAGF,mBAEE,sBAPF,mBAEE,oBAGF,mBAEE,oBAPF,mBAEE,sBAGF,mBAEE,sBAPF,mBAEE,oBAGF,mBAEE,qBCrHV,OAEE,+BACA,4BACA,gCACA,6BAEA,2CACA,iCACA,gDACA,kCACA,mDACA,gEACA,kDACA,8DACA,iDACA,+DAEA,WACA,cZkYO,KYjYP,eZusB4B,IYtsB5B,0CAOA,yBACE,oBAEA,qFACA,oCACA,oBZ+sB0B,uBY9sB1B,2GAGF,aACE,uBAGF,aACE,sBAIJ,qBACE,6DAOF,aACE,iBAUA,4BACE,sBAeF,gCACE,sCAGA,kCACE,sCAOJ,oCACE,sBAGF,qCACE,mBAUF,2CACE,qDACA,+CAMF,yDACE,qDACA,+CAQJ,cACE,qDACA,+CAQA,8BACE,oDACA,8CC5IF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,iBAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,YAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,cAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,aAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,YAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CDiJA,kBACE,gBACA,iCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,6BGyFA,qBACE,gBACA,kCH3FF,6BGyFA,sBACE,gBACA,kCEnKN,YACE,cdu2BsC,Mc91BxC,gBACE,oDACA,uDACA,gBjB8QI,UALI,QiBrQR,Yd+lB4B,Ic3lB9B,mBACE,kDACA,qDjBoQI,UALI,QiB3PV,mBACE,mDACA,sDjB8PI,UALI,SkBtRV,WACE,Wf+1BsC,OHrkBlC,UALI,QkBjRR,Mf+1BsC,0BgBp2BxC,cACE,cACA,WACA,uBnBwRI,UALI,KmBhRR,YhBkmB4B,IgBjmB5B,YhBymB4B,IgBxmB5B,MhB43BsC,qBgB33BtC,gBACA,iBhBq3BsC,kBgBp3BtC,4BACA,2DfGE,sCKLE,WARW,2BWUX,WDMJ,0DCFI,uCDhBN,cCiBQ,iBDGN,yBACE,gBAEA,wDACE,eAKJ,oBACE,MhBs2BoC,qBgBr2BpC,iBhBg2BoC,kBgB/1BpC,ahB82BoC,QgB72BpC,UVvBE,WARW,0DUwCf,2CAME,eAMA,aAKA,SAKF,qCACE,cACA,UAIF,2BACE,MhB40BoC,0BgB10BpC,UAQF,uBAEE,iBhB8yBoC,uBgB3yBpC,UAIF,oCACE,uBACA,0BACA,kBhBorB0B,OgBnrB1B,MhBsyBoC,qBkBp4BtC,iBlBqiCgC,sBgBr8B9B,oBACA,qBACA,mBACA,eACA,wBhBgsB0B,uBgB/rB1B,gBCzFE,WD0FF,mHCtFE,uCD0EJ,oCCzEM,iBDwFN,yEACE,iBhB47B8B,uBgBn7BlC,wBACE,cACA,WACA,kBACA,gBACA,YhBwf4B,IgBvf5B,MhB2xBsC,qBgB1xBtC,+BACA,2BACA,sCAEA,8BACE,UAGF,gFAEE,gBACA,eAWJ,iBACE,WhB4wBsC,wDgB3wBtC,qBnByII,UALI,SIvQN,yCeuIF,uCACE,qBACA,wBACA,kBhBooB0B,MgBhoB9B,iBACE,WhBgwBsC,sDgB/vBtC,mBnB4HI,UALI,QIvQN,yCeoJF,uCACE,mBACA,qBACA,kBhB2nB0B,KgBnnB5B,sBACE,WhB6uBoC,yDgB1uBtC,yBACE,WhB0uBoC,wDgBvuBtC,yBACE,WhBuuBoC,sDgBluBxC,oBACE,MhBquBsC,KgBpuBtC,OhB8tBsC,yDgB7tBtC,QhBilB4B,QgB/kB5B,mDACE,eAGF,uCACE,oBfvLA,sCe2LF,0CACE,oBf5LA,sCegMF,2ChB8sBsC,wDgB7sBtC,2ChB8sBsC,sDmB75BxC,aACE,yPAEA,cACA,WACA,uCtBqRI,UALI,KsB7QR,YnB+lB4B,ImB9lB5B,YnBsmB4B,ImBrmB5B,MnBy3BsC,qBmBx3BtC,gBACA,iBnBk3BsC,kBmBj3BtC,kFACA,4BACA,oBnB+9BkC,oBmB99BlC,gBnB+9BkC,UmB99BlC,2DlBHE,sCKLE,WARW,2BWUX,WESJ,0DFLI,uCEfN,aFgBQ,iBEMN,mBACE,anBs3BoC,QmBr3BpC,UbfE,WARW,0DagCf,0DAEE,cnB6uB0B,OmB5uB1B,sBAGF,sBAEE,iBnBu1BoC,uBmBl1BtC,4BACE,oBACA,uCAIJ,gBACE,YnBsuB4B,OmBruB5B,enBquB4B,OmBpuB5B,anBquB4B,MHlgBxB,UALI,SIvQN,yCkB8CJ,gBACE,YnBkuB4B,MmBjuB5B,enBiuB4B,MmBhuB5B,anBiuB4B,KHtgBxB,UALI,QIvQN,yCkBwDA,kCACE,yPCxEN,YACE,cACA,WpBq6BwC,OoBp6BxC,apBq6BwC,MoBp6BxC,cpBq6BwC,QoBn6BxC,8BACE,WACA,mBAIJ,oBACE,cpB25BwC,MoB15BxC,eACA,iBAEA,sCACE,YACA,oBACA,cAIJ,kBACE,sCAEA,cACA,MpB04BwC,IoBz4BxC,OpBy4BwC,IoBx4BxC,iBACA,mBACA,gBACA,yCACA,+CACA,4BACA,2BACA,wBACA,OpB24BwC,oDoB14BxC,yBAGA,iCnB3BE,oBmB+BF,8BAEE,cpBm4BsC,IoBh4BxC,yBACE,OpB03BsC,gBoBv3BxC,wBACE,apBs1BoC,QoBr1BpC,UACA,WpB8foB,+BoB3ftB,0BACE,iBzBlEY,QyBmEZ,azBnEY,QyBqEZ,yCAII,wPAIJ,sCAII,gKAKN,+CACE,iBzBvFY,QyBwFZ,azBxFY,QyB6FV,kPAIJ,2BACE,oBACA,YACA,QpBk2BuC,GoB31BvC,2FACE,eACA,QpBy1BqC,GoB30B3C,aACE,apBo1BgC,MoBl1BhC,+BACE,4KAEA,MpB80B8B,IoB70B9B,mBACA,0CACA,gCnBjHA,kBgBHE,WGsHF,qCHlHE,uCG0GJ,+BHzGM,iBGmHJ,qCACE,8JAGF,uCACE,oBpB60B4B,aoBx0B1B,2JAKN,gCACE,cpBwzB8B,MoBvzB9B,eAEA,kDACE,oBACA,cAKN,mBACE,qBACA,apBsyBgC,KoBnyBlC,WACE,kBACA,sBACA,oBAIE,mDACE,oBACA,YACA,QpBspBwB,IoB/oB1B,8EACE,kLCnLN,YACE,WACA,cACA,UACA,gBACA,+BAEA,kBACE,UAIA,mDrB8gCuC,8CqB7gCvC,+CrB6gCuC,8CqB1gCzC,8BACE,SAGF,kCACE,MrB+/BuC,KqB9/BvC,OrB8/BuC,KqB7/BvC,oBACA,gBH1BF,iBvBJc,Q0BgCZ,OrB6/BuC,EC1gCvC,mBKLE,WARW,8BWUX,WImBF,4FJfE,uCIMJ,kCJLM,iBIgBJ,yCHjCF,iBlB8hCyC,QqBx/BzC,2CACE,MrBw+B8B,KqBv+B9B,OrBw+B8B,MqBv+B9B,oBACA,OrBu+B8B,QqBt+B9B,iBrBu+B8B,uBqBt+B9B,2BpB7BA,mBKLE,WARW,2Be+Cf,8BACE,MrBo+BuC,KqBn+BvC,OrBm+BuC,KqBl+BvC,gBHpDF,iBvBJc,Q0B0DZ,OrBm+BuC,EC1gCvC,mBKLE,WARW,8BWUX,WI6CF,4FJzCE,uCIiCJ,8BJhCM,iBI0CJ,qCH3DF,iBlB8hCyC,QqB99BzC,8BACE,MrB88B8B,KqB78B9B,OrB88B8B,MqB78B9B,oBACA,OrB68B8B,QqB58B9B,iBrB68B8B,uBqB58B9B,2BpBvDA,mBKLE,WARW,2BeyEf,qBACE,oBAEA,2CACE,iBrBg9BqC,0BqB78BvC,uCACE,iBrB48BqC,0BsBniC3C,eACE,kBAEA,gGAGE,OtBwiCoC,gDsBviCpC,WtBuiCoC,gDsBtiCpC,YtBuiCoC,KsBpiCtC,qBACE,kBACA,MACA,OACA,UACA,YACA,oBACA,gBACA,iBACA,uBACA,mBACA,oBACA,kDACA,qBLRE,WKSF,kDLLE,uCKTJ,qBLUM,iBKON,oEAEE,oBAEA,8FACE,oBAGF,oMAEE,YtB4gCkC,SsB3gClC,etB4gCkC,QsBzgCpC,sGACE,YtBugCkC,SsBtgClC,etBugCkC,QsBngCtC,4BACE,YtBigCoC,SsBhgCpC,etBigCo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ACA,6DACA,8BACA,8BACA,wCDyFA,aCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,UCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,aCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,YCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,WCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,yCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,UCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,sCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDmHA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,qCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,uBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,sCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,kBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,oBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,mBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,yCACA,4BACA,4BACA,sCACA,6DACA,iCACA,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UACA,sDAMJ,qBACE,qBACA,YACA,aACA,sBACA,kDACA,4BACA,2BACA,qBAGF,mBACE,yCACA,gBvB1HE,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,0BuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,0BuBsIA,mBAEI,iBACA,2BAEA,+BACE,mBAEA,8CACE,kBAGF,yCACE,kDACA,iDAIJ,sCACE,iBAGF,oCACE,wBACA,gBAGF,mCACE,aAGF,8BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,gDACE,aAGF,8CACE,aACA,YACA,UACA,oBAtDR,eAEI,iBACA,2BAEA,2BACE,mBAEA,0CACE,kBAGF,qCACE,kDACA,iDAIJ,kCACE,iBAGF,gCACE,wBACA,gBAGF,+BACE,aAGF,0BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,4CACE,aAGF,0CACE,aACA,YACA,UACA,mBAiBZ,yCAGE,6CACA,mDACA,sDACA,+BACA,8BACA,oCACA,2DACA,+QAME,0CACE,+QCxRN,OAEE,6BACA,6BpCuRI,qBALI,OoChRR,4BACA,uBACA,kDAGA,qBACA,4DpC+QI,UALI,0BoCxQR,wCACA,cACA,4BACA,kBACA,mBACA,wBhCJE,4CgCSF,aACE,aAKJ,YACE,kBACA,SChCF,OAEE,2BACA,2BACA,2BACA,+BACA,0BACA,qCACA,6EACA,kDACA,+BAGA,kBACA,4DACA,4CACA,4BACA,oCACA,8BjCHE,4CiCQJ,eAEE,cAIF,YACE,YlC6kB4B,IkC5kB5B,iCAQF,mBACE,clCo+C8B,KkCj+C9B,8BACE,kBACA,MACA,QACA,UACA,qBAQF,eACE,kDACA,2CACA,yDACA,uDAJF,iBACE,oDACA,6CACA,2DACA,yDAJF,eACE,kDACA,2CACA,yDACA,uDAJF,YACE,+CACA,wCACA,sDACA,oDAJF,eACE,kDACA,2CACA,yDACA,uDAJF,cACE,iDACA,0CACA,wDACA,sDAJF,aACE,gDACA,yCACA,uDACA,qDAJF,YACE,+CACA,wCACA,sDACA,oDC3DJ,WAEE,2BACA,qVACA,4BACA,mCACA,iEACA,gCACA,sCACA,wEAGA,uBACA,MnCmpD2B,ImClpD3B,OnCkpD2B,ImCjpD3B,oBACA,gCACA,0EACA,SlCJE,sBkCMF,oCAGA,iBACE,gCACA,qBACA,0CAGF,iBACE,UACA,4CACA,0CAGF,wCAEE,oBACA,iBACA,6CAQJ,iBAHE,wCASE,gCATF,wCC/CA,iBACE,cACA,WACA,WCHF,iBACE,sBACA,iFAFF,mBACE,sBACA,mFAFF,iBACE,sBACA,iFAFF,cACE,sBACA,8EAFF,iBACE,sBACA,iFAFF,gBACE,sBACA,gFAFF,eACE,sBACA,+EAFF,cACE,sBACA,8ECFF,cACE,wEACA,kGAGE,wCAGE,4DACA,sFATN,gBACE,0EACA,oGAGE,4CAGE,6DACA,uFATN,cACE,wEACA,kGAGE,wCAGE,8DACA,wFATN,WACE,qEACA,+FAGE,kCAGE,+DACA,yFATN,cACE,wEACA,kGAGE,wCAGE,+DACA,yFATN,aACE,uEACA,iGAGE,sCAGE,8DACA,wFATN,YACE,sEACA,gGAGE,oCAGE,gEACA,0FATN,WACE,qEACA,+FAGE,kCAGE,6DACA,uFAOR,oBACE,+EACA,yGAGE,oDAEE,kFACA,4GC1BN,kBACE,UAEA,kJCHF,WACE,oBACA,IxC6c4B,QwC5c5B,mBACA,kFACA,sBxC2c4B,MwC1c5B,2BAEA,eACE,cACA,MxCuc0B,IwCtc1B,OxCsc0B,IwCrc1B,kBvBIE,WuBHF,0BvBOE,uCuBZJ,evBaM,iBuBDJ,8DACE,mECnBN,OACE,kBACA,WAEA,eACE,cACA,mCACA,WAGF,SACE,kBACA,MACA,OACA,WACA,YAKF,WACE,wBADF,WACE,uBADF,YACE,0BADF,YACE,kCCrBJ,WACE,eACA,MACA,QACA,OACA,Q1CumCkC,K0CpmCpC,cACE,eACA,QACA,SACA,OACA,Q1C+lCkC,K0CvlChC,YACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,eACE,gBACA,SACA,Q1C6kC8B,KS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,0BiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,0BiCxCA,gBACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,mBACE,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aAGF,UACE,iBAEA,gDAEE,wBACA,qBAKF,sBACE,mBAKF,sBACE,oBACA,WAGF,oBACE,iBACA,iBAKF,cACE,iBAIJ,UACE,gBC3VF,SACE,sBACA,eACA,oBAGF,iBACE,+BACA,WAEF,gBACE,c1DRF,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD2D7DA,iBACE,gBACA,iBACA,0CAGF,OACE,qBAGF,YACE,iBAEA,iBACE,gBACA,oBAIJ,gBACE,iBACA,oBAGF,gBACE,iB3DzBJ,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD4D5DA,iBAEE,wBAGF,kBACE,qBACA,gBACA,+BAGF,gDAEE,iCAGF,iBACE,uBACA,mBACA,oBAGF,uEAGE,iCC1BJ,UACE,kBAGA,iBACE,WACA,kBACA,UACA,iBAXS,QAYT,MACA,SACA,SACA,iBAKJ,eACE,kBACA,UAEA,qBACE,kCACA,kBACA,sBACA,cAEA,uBACE,cAGF,iCACE,yBAIJ,2BACE,oBACA,iBACA,gBAIF,sBACE,iBACA,eACA,kBACA,kBACA,WACA,YACA,YACA,SACA,kBACA,UAGF,gCACE,YACA,sBACA,yBAGF,8BACE,aACA,sBACA,yBAGF,+BACE,YACA,sBACA,yBAIF,oBACE,0BACA,OAIF,qBACE,0BACA,SAIF,4BACE,WACA,kBACA,YACA,WACA,sBACA,sBACA,wCACA,SACA,UACA,WACA,wCACA,sCAIF,6BACE,WACA,kBACA,YACA,WACA,iCACA,sBACA,wCACA,SACA,UACA,UACA,uCACA,yCAIF,4BACE,WAKJ,qCAGE,iBACE,UAIF,eACE,WACA,6BACA,8BAGA,uBACE,qBAIF,uDAEE,oBAGF,4BACE,kBACA,gBACA,uCACA,yCAGF,6BACE,WAIF,qBACE,S7DlKN,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD8D7DA,qBACE,0CCHF,gCACE,mBAKA,+CACE,yBAIJ,+BACE","sourcesContent":["$primary-color: #021a34;\n$secondary-color: #075f94;\n\n:root {\n // -- Light\n --primary-color-light: #021a34;\n --secondary-color-light: #075f94;\n\n --bg-color-light: #edeef0;\n --bg-color-reverse-light: #021a34;\n --bg-color-tinted-light: #b0b2b4;\n\n --text-color-light: #4c4c4c;\n --text-color-reverse-light: #edeef0;\n --text-muted-color-light: #4c4c4c;\n\n --link-color-light: #4c4c4c;\n --link-hover-color-light: #6c6c6c;\n\n // -- Dark\n --primary-color-dark: #edeef0;\n --secondary-color-dark: #075f94;\n\n --bg-color-dark: #14171c;\n --bg-color-reverse-dark: #edeef0;\n --bg-color-tinted-dark: #627191;\n\n --text-color-dark: #edeef0;\n --text-color-reverse-dark: #14171c;\n --text-muted-color-dark: #edeef0;\n\n --link-color-dark: #edeef0;\n --link-hover-color-dark: #ffffff;\n}\n\n[data-bs-theme=\"light\"] {\n --primary-color: var(--primary-color-light);\n --secondary-color: var(--secondary-color-light);\n --bg-color-tinted: var(--bg-color-tinted-light);\n\n --bg-color: var(--bg-color-light);\n --bg-color-reverse: var(--bg-color-reverse-light);\n --text-color: var(--text-color-light);\n\n --text-color-reverse: var(--text-color-reverse-light);\n --text-muted-color: var(--text-muted-color-light);\n\n --link-color: var(--link-color-light);\n --link-hover-color: var(--link-hover-color-light);\n}\n\n[data-bs-theme=\"dark\"] {\n --primary-color: var(--primary-color-dark);\n --secondary-color: var(--secondary-color-dark);\n\n --bg-color: var(--bg-color-dark);\n --bg-color-reverse: var(--bg-color-reverse-dark);\n --bg-color-tinted: var(--bg-color-tinted-dark);\n\n --text-color: var(--text-color-dark);\n --text-color-reverse: var(--text-color-reverse-dark);\n --text-muted-color: var(--text-muted-color-dark);\n\n --link-color: var(--link-color-dark);\n --link-hover-color: var(--link-hover-color-dark);\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-` + + +

+ +
+ +
+
+
+
+

جميع المقالات

+ + + feed + +
+ +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + + +
+ +
+
+
+
+ + + + + diff --git a/ar/browserconfig.xml b/ar/browserconfig.xml new file mode 100644 index 000000000..b3930d0f0 --- /dev/null +++ b/ar/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/ar/community/index.html b/ar/community/index.html new file mode 100644 index 000000000..ff797396e --- /dev/null +++ b/ar/community/index.html @@ -0,0 +1,491 @@ + + + + + + + + + + + + + المجتمع | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

انضم إلى مجتمع بكتوس

+ +

من خلال الانضمام إلى مجتمع بكتوس، تصبح جزءًا من شبكة عالمية من المبتكرين والمفكرين والفاعلين الذين يتحدون برؤية مشتركة لبناء مستقبل أفضل مع تقنية البلوكشين. سواء كنت مطورًا أو رائد أعمال أو مستثمرًا أو مجرد عاشق للبلوكشين، هناك مكان لك هنا في بكتوس.
إذًا، لنتحد ونحدث تغييرًا!

+ + + +

To explore the communities managed by members of the community, you can follow the links below.

+ + + +
+
+
+
+ + + + + diff --git a/ar/contributing/index.html b/ar/contributing/index.html new file mode 100644 index 000000000..aad73ce4b --- /dev/null +++ b/ar/contributing/index.html @@ -0,0 +1,481 @@ + + + + + + + + + + + + + المساهمة | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

المساهمة

+ + +

As an open-source platform, Pactus blockchain empowers from its community. +Whether you’re a developer, designer, or enthusiast, your contributions can make a meaningful impact.

+ +

There are several ways to support the Pactus project:

+ +

Run a Node

+ +

One of the most effective ways to contribute to the Pactus network is by running a node. +A “node” is a software program that downloads a copy of the Pactus blockchain and +ensure the network keeps running safe and decentralized.

+ +

These guides can help you to run and configure your node:

+ + + +

Become a Validator

+ +

Validators play an important role in the Pactus blockchain by verifying transactions and +adding them to the blockchain. +By becoming a validator, you can earn rewards +for contributing to the network’s security and decentralization.

+ +

To become a validator, you will need to stake a certain amount of Pactus coins. +These guides can help you to send a Bond transaction and stake some coins:

+ + + +

Develop

+ +

Pactus is an open-source project that welcomes and encourages contributions from developers. +By contributing to the project, you can help improve the Pactus platform and create new features that +benefit the entire community.

+ +

You can check our Contributing page +for more information on how to get involved and contribute to the project.

+ +

Translation

+ +

Another way to contribute to the Pactus project is by translating this website into other languages and +improving its content.

+ +

Spread the Word

+ +

The more people who know about Pactus, the more opportunities there are for collaboration and growth. +Share our project on social media, attend Pactus events, or simply tell your friends and colleagues about us.

+ +
+ +

Together, Let’s build a better future for blockchain technology.

+ + +
+
+
+
+ + + + + diff --git a/ar/download/index.html b/ar/download/index.html new file mode 100644 index 000000000..e194ee84d --- /dev/null +++ b/ar/download/index.html @@ -0,0 +1,596 @@ + + + + + + + + + + + + + تنزيل | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

تحميل بكتوس

+ +

على هذه الصفحة يمكنك العثور على كيفية تحميل والحصول على أحدث إصدار من برنامج بكتوس.

+ +
+ +

🏗️ تجميع من شفرة المصدر

+ +

يتم توزيع مشروع بكتوس كبرنامج مفتوح المصدر، لذا فإن الطريقة المفضلة لتثبيته هي استنساخ شفرة المصدر من مستودع جيت هاب وتجميع شفرة المصدر.

+ +

تتوفر تعليمات تجميع بكتوس على صفحة التثبيت.

+ +
+ +

⬇️ تنزيل الإصدارات المستقرة

+ +

يمكنك أيضًا تنزيل أحدث إصدارات بكتوس المستقرة. يتم تحديث هذه الإصدارات تلقائيًا عند إصدار نسخة جديدة في مستودع جيت هاب.

+ +

واجهة المستخدم الرسومية لـ بكتوس (GUI)

+ +

يمكنك تشغيل بكتوس في وضع واجهة المستخدم الرسومية (GUI) وهو مناسب للمبتدئين والمستخدمين المتقدمين.

+ +

واجهة المستخدم الرسومية لـ بكتوس (GUI)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
File nameKindOSArch
pactus-gui_1.3.0_darwin_amd64.tar.gzArchive macOS64-bit
pactus-gui_1.3.0_darwin_amd64.dmgDMG macOS64-bit
pactus-gui_1.3.0_darwin_arm64.tar.gzArchive macOSARM64
pactus-gui_1.3.0_darwin_arm64.dmgDMG macOSARM64
pactus-gui_1.3.0_linux_amd64.tar.gzArchive Linux64-bit
pactus-gui_1.3.0_linux_amd64.AppImageAppImage Linux64-bit
pactus-gui_1.3.0_windows_amd64.zipArchive Windows64-bit
pactus-gui_1.3.0_windows_amd64_installer.exeInstaller Windows64-bit
+ +
+تطبيق غير موثوق

كن على علم بأن الثنائيات المجمعة مسبقًا لا يتم شحنها مع أي شهادة توقيع الكود. من المحتمل أن تكون الثنائيات المجمعة مسبقًا غير موثوقة على نظام ويندوز و ماك أو إس. + +
+ +

بمجرد تنزيل واجهة بكتوس الرسومية (GUI)، يمكنك اتباع هذا البرنامج التعليمي لإعداد عقدتك وتشغيلها: + كيفية تشغيل بكتوس في الوضع الرسومي؟

+ +
+ +

واجهة سطر الأوامر لـ بكتوس (CLI)

+ +

يمكن للمستخدم المتقدم تشغيل بكتوس في وضع واجهة سطر الأوامر (CLI).

+ +

واجهة سطر الأوامر لـ بكتوس (CLI)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
File nameOSArch
pactus-cli_1.3.0_android_arm64.tar.gz AndroidARM64
pactus-cli_1.3.0_darwin_amd64.tar.gz macOS64-bit
pactus-cli_1.3.0_darwin_arm64.tar.gz macOSARM64
pactus-cli_1.3.0_freebsd_amd64.tar.gz FreeBSD64-bit
pactus-cli_1.3.0_freebsd_arm.tar.gz FreeBSDARM
pactus-cli_1.3.0_linux_amd64.tar.gz Linux64-bit
pactus-cli_1.3.0_linux_arm64.tar.gz LinuxARM64
pactus-cli_1.3.0_windows_386.zip Windows32-bit
pactus-cli_1.3.0_windows_amd64.zip Windows64-bit
+ +

بمجرد تنزيل بكتوس CLI، يمكنك اتباع هذا البرنامج التعليمي لإعداد عقدتك وتشغيلها: + كيفية تشغيل بكتوس في وضع سطر الأوامر؟

+ +

Downloader script

+ +

For Unix-like systems (e.g., Linux, macOS, or MSYS2 on Windows), there is a downloader script available. This script can download the archived file, verify it, and extract it for you. To use it, simply run the following command in your terminal:

+ +
curl --proto '=https' --tlsv1.2 -sSL https://github.com/pactus-project/pactus/releases/download/v1.3.0/pactus_downloader.sh | sh
+
+ +
+ +

🐳 حاوية دوكر

+ +

يمكن للمستخدم المتقدم الحصول على صورة بكتوس دوكر من Docker Hub.

+ +

يمكنك اتباع هذا البرنامج التعليمي لإعداد عقدتك وتشغيلها باستخدام دوكر: + كيفية تشغيل بكتوس باستخدام دوكر؟

+ +
+
+
+
+ + + + + diff --git a/ar/favicon-128x128.png b/ar/favicon-128x128.png new file mode 100644 index 000000000..56c2f6cb2 Binary files /dev/null and b/ar/favicon-128x128.png differ diff --git a/ar/favicon-16x16.png b/ar/favicon-16x16.png new file mode 100644 index 000000000..4babb6356 Binary files /dev/null and b/ar/favicon-16x16.png differ diff --git a/ar/favicon-32x32.png b/ar/favicon-32x32.png new file mode 100644 index 000000000..e22d5d721 Binary files /dev/null and b/ar/favicon-32x32.png differ diff --git a/ar/favicon-64x64.png b/ar/favicon-64x64.png new file mode 100644 index 000000000..e8d111c2e Binary files /dev/null and b/ar/favicon-64x64.png differ diff --git a/ar/favicon.ico b/ar/favicon.ico new file mode 100644 index 000000000..64080c0ee Binary files /dev/null and b/ar/favicon.ico differ diff --git a/ar/feed.xml b/ar/feed.xml new file mode 100644 index 000000000..a024dd690 --- /dev/null +++ b/ar/feed.xml @@ -0,0 +1,1409 @@ +Jekyll2024-07-02T08:05:22+00:00https://pactus.org/feed.xmlPactus blockchainPactus 1.3.0 (Warsaw) Released2024-06-27T00:00:00+00:002024-06-27T00:00:00+00:00https://pactus.org/2024/06/27/release-1-3-0Overview
+ +

Pactus Blockchain Version 1.3.0 (Warsaw) +is now available for download. +This release includes the following applications:

+ + + +

Pactus Version 1.3.0 (Warsaw)

+ +

Highlights

+ +

This version fixes an issue that caused some nodes to get stuck for one minutes and +not receive any new messages during that time.

+ +

Breaking Change: gRPC APIs now convert all binary values to hexadecimal strings.

+ +
+ Attention Exchanges and Third-Party Pactus Blockchain Users: +
+
+ After upgrading to this version, be aware that binary data, such as hashes and signatures, + are now formatted as hexadecimal strings. You must update your code to accommodate this change. +
+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ + + +

Fix

+ + + +

You can find the full list of changes on Github, +as well as the source code

]]>Pactus 1.2.0 (Sydney) Released2024-06-20T00:00:00+00:002024-06-20T00:00:00+00:00https://pactus.org/2024/06/20/release-1-2-0Overview + +

Pactus Blockchain Version 1.2.0 (Sydney) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.2.0 (Sydney)

+ +

Highlights

+ +

This version includes some improvements and new features, such as:

+ +
    +
  • Clock offset calculation: Adding clock offset check to +alert the user if their machine’s time is not synced with the network. +See PIP-18: Clock Offset Calculation.
  • +
  • Minimum fee: The minimum fee is configurable in this version, with the default set to 0.01. +Each validator can decide the minimum fee of transactions they want to include in the block +by changing the min_fee value inside the config file.
  • +
  • ip blocker: A new option allows nodes to block certain IPs and disconnect from them.
  • +
  • rate limit: Nodes can set rate limits for incoming messages, including transactions.
  • +
  • wallet manager: The wallet manager allows users to create and manage wallets using gRPC endpoints.
  • +
+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • config: make minimum fee configurable (#1349)
  • +
  • apply rate limit for the network topics (#1332)
  • +
  • add ipblocker package (#1323)
  • +
  • consensus: fast consensus path implementation (#1253)
  • +
  • version: add alias to node version (#1281)
  • +
  • ntp: add ntp util (#1274)
  • +
  • gRPC: add connection info to node info (#1273)
  • +
  • gRPC: add only_connected parameter to getNetworkInfo API (#1264)
  • +
  • grpc: refactor CreateWallet and add RestoreWallet API endpoint (#1256)
  • +
  • add wallet service (#1241)
  • +
  • ban attacker validators (#1235)
  • +
  • txpool: prevent spamming transactions by defining a minimum value (#1233)
  • +
  • reject direct message from non-supporting agents (#1225)
  • +
+ +

Fix

+ +
    +
  • wallet: add public key on get new address (#1350)
  • +
  • sync: add IsBannedAddress check in processing connect event (#1347)
  • +
  • sync: update latest supporting version (#1336)
  • +
  • state: improve node startup by optimizing availability score calculation (#1338)
  • +
  • HTTP: add clock offset and connection info to node-info API (#1334)
  • +
  • grpc: add stacktrace to locate panic (#1333)
  • +
  • consensus: implement PIP-26 (#1331)
  • +
  • grpc: improve grpc server and client (#1330)
  • +
  • util: add more ntp pool (#1328)
  • +
  • jsonrpc: update JSON-RPC Gateway to support headers and improve client registry (#1327)
  • +
  • consensus: improve consensus algorithm (#1329)
  • +
  • txpool: set fix fee of 0.1 PAC for transactions (#1320)
  • +
  • network: add block and transaction topics (#1319)
  • +
  • gRPC: prevent concurrent map iteration and map write (#1279)
  • +
  • api: add swagger schemes (#1270)
  • +
  • network: set infinite limit for resource manager (#1261)
  • +
  • sync: introduce session manager (#1257)
  • +
  • HTTP: using amount type for fee in transaction details (#1255)
  • +
  • network: disconnect from peers that has no protocol (#1243)
  • +
  • wallet: saving wallet file after generating new address in gRPC (#1236)
  • +
  • prevent zero stake for bond transactions (#1227)
  • +
  • set bounding interval for first boudning tx only (#1224)
  • +
+ +

Refactor

+ +
    +
  • wallet: set server address on loading wallet (#1348)
  • +
  • removed deprecated LockWallet and UnLockWallet from WalletService (#1343)
  • +
  • crypto: decode data to point on verification (#1339)
  • +
  • network: define connection info in network proto (#1297)
  • +
  • sync: define peer package (#1271)
  • +
  • network: refactor peer manager and redefine the min cons (#1259)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.7 (Santiago) Released2024-06-02T00:00:00+00:002024-06-02T00:00:00+00:00https://pactus.org/2024/06/02/release-1-1-7Overview + +

Pactus Blockchain Version 1.1.7 (Santiago) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

Here are the key improvements in this version:

+ +
    +
  • +

    Resolves critical issue in consensus: +This version addresses a critical issue in consensus that prevents broadcasting expired proposals across the network.

    +
  • +
  • +

    Improved network security: +The version defines a list of blacklisted IPs and disconnects from them, enhancing network security.

    +
  • +
  • +

    Node compatibility: +This version only connects to nodes with version 1.1.6 or above, ensuring compatibility with the latest software.

    +
  • +
+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • network: add firewall black list ips to banning when connecting to peer (#1298)
  • +
+ +

Fix

+ +
    +
  • sync: load black listed addresses from the config (#1301)
  • +
  • consensus: only proposer responds to the query proposal (#1300)
  • +
  • network: set latest support version to 1.1.6 (#1299)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.8 (Budapest) Released2024-06-02T00:00:00+00:002024-06-02T00:00:00+00:00https://pactus.org/2024/06/02/release-1-1-8Overview + +

Pactus Blockchain Version 1.1.8 (Budapest) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.1.8 (Budapest)

+ +

Highlights

+ +

This version aims to reduce the consensus message once there is a delay on block creation. +It also defines a fixed fee of 0.1 PAC for transactions. +This fixed fee will be replaced by a dynamic fee in future releases, +which will provide more flexibility and efficiency.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • firewall: define rate limit for network topics (#1308)
  • +
+ +

Fix

+ +
    +
  • set fix fee 0.1 PAC for transactions (#1315)
  • +
  • consensus: add round to query proposal message (#1314)
  • +
  • firewall: block peer base on blacklisted CIDR (#1309)
  • +
  • consensus: reduce ChangeProposerTimeout to 6 seconds (#1311)
  • +
  • sync: define rate limit for query vote and proposal (#1310)
  • +
  • decrease to 100 maximum transaction per block (#1306)
  • +
  • consume message first then ignore on ratelimit (#1304)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.6 (Ottawa) Released2024-05-31T00:00:00+00:002024-05-31T00:00:00+00:00https://pactus.org/2024/05/31/release-1-1-6Overview + +

Pactus Blockchain Version 1.1.6 (Ottawa) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

This version updates the consensus mechanism to move to new rounds once +a proper and justified “Decided” vote seen by a non-faulty validator. +This helps ensure that the consensus mechanism stays in sync with the network when the validator restarts.

+ +

In this version, the minimum availability score is set to 0.6666. +This change will help validators receive rewards even in faulty network conditions, +ensuring that they can continue to participate in the consensus mechanism.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • consensus: move to new round on decided vote (#1293)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.5 (Cape Town) Released2024-05-30T00:00:00+00:002024-05-30T00:00:00+00:00https://pactus.org/2024/05/30/release-1-1-5Overview + +

Pactus Blockchain Version 1.1.5 (Cape Town) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

Rate limit

+ +

This version applies a rate limit to the messages in the general topics including blocks and transactions. +This will help nodes to manage the network traffic in times of network congestion or spam attacks.

+ +

Dynamic fee

+ +

To prevent attackers from sending spam transactions, a dynamic fee model is introduced in this patch. +Each node can define a minimum fee that is defaulted to 0.000001 PAC. +However, if the transaction pool becomes full, the transaction fee can increase up to 1 PAC.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • add dynamic fee (#1290)
  • +
  • network: define config for rate limit threshold (#1284)
  • +
  • network: ratelimit gossip for prevent spamming (#1283)
  • +
+ +

Fix

+ +
    +
  • change CalculateFee to be backward compatible (#1291)
  • +
  • proposal basic checks deferred to consensus (#1288)
  • +
  • rejected spam tx for same from and to (#1287)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.4 (London) Released2024-05-07T00:00:00+00:002024-05-07T00:00:00+00:00https://pactus.org/2024/05/07/release-1-1-4Overview + +

Pactus Blockchain Version 1.1.4 (London) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.1.4 (London)

+ +

Highlights

+ +

This version fixes some issues related to the syncing process and improves the connectivity of the nodes.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • network: set infinite limit for resource manager (#1261)
  • +
  • sync: introduce session manager (#1257)
  • +
  • HTTP: using amount type for fee in transaction details (#1255)
  • +
+ +

Refactor

+ +
    +
  • network: refactor peer manager and redefine the min cons (#1259)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.3 (Kuala Lumpur) Released2024-04-25T00:00:00+00:002024-04-25T00:00:00+00:00https://pactus.org/2024/04/25/release-1-1-3Overview + +

Pactus Blockchain Version 1.1.3 (Kuala Lumpur) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Kuala Lumpur, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.3 (Kuala Lumpur)

+ +

Highlights

+ +

This version prevents spamming transactions by defining a minimum value per transaction. +It is not part of the consensus parameters, +and each node can set its own threshold. +By default, it is set to 0.1 PAC.

+ +

The version also bans validators that were part of the recent spam attack on the network. +Their stake will be frozen at block 820,000.

+ +

Validators must update their nodes to this version as soon as possible.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • ban attacker validators (#1235)
  • +
  • txpool: prevent spamming transactions by defining a minimum value (#1233)
  • +
+ +

Fix

+ +
    +
  • wallet: saving wallet file after generating new address in gRPC (#1236)
  • +
  • network: disconnect from peers that has no protocol (#1243)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.1 (Jakarta) Released2024-04-18T00:00:00+00:002024-04-18T00:00:00+00:00https://pactus.org/2024/04/18/release-1-1-1Overview + +

Pactus Blockchain Version 1.1.1 (Jakarta) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Jakarta, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.1 (Jakarta)

+ +

Highlights

+ +

This update fixes the issue of zero-bonding +that identified after the release of 1.1.0 (Hanoi). +This fix will be applied at block height 740,000 to ensure a smooth upgrade.

+ +

Additionally, this version rejects connections from nodes version 1.0.2 and earlier.

+ +

Validators must update their nodes to this version as soon as possible.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • reject direct message from non-supporting agents (#1225)
  • +
+ +

Fix

+ +
    +
  • prevent zero stake for bond transactions (#1227)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.0 (Hanoi) Released2024-04-14T00:00:00+00:002024-04-14T00:00:00+00:00https://pactus.org/2024/04/14/release-1-1-0Overview + +

Pactus Blockchain Version 1.1.0 (Hanoi) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Hanoi, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.0 (Hanoi)

+ +

Highlights

+ +

This update brings some changes that are not compatible with the earlier version. +Here are the key points:

+ +
    +
  1. Fee calculations are now rounded, and fees can be accepted within a range of one NanaoPAC (see #1174).
  2. +
  3. Small bonds for existing validators are now accepted (see #1152).
  4. +
+ +

Validators must update their nodes to this version as soon as possible.

+ +

Other major changes in this version include:

+ +
    +
  • The addition of a JSON-RPC endpoint required by third parties like exchanges to connect to Pactus nodes.
  • +
  • The implementation of Pactus Shell tools, allowing users to query the node.
  • +
+ +

Additionally, this version improves the syncing process for new nodes, enhances the GUI, and addresses several issues.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gRPC: add get address history method (#1206)
  • +
  • grpc: Add GetNewAddress/GetTotalBalance endpoint to gateway (#1197)
  • +
  • GUI: adding total balance to wallet widget (#1194)
  • +
  • Add GetNewAddress gRPC API (#1193)
  • +
  • gRPC: add new API to get the total balance of wallet (#1190)
  • +
  • GUI: showing transaction hash after broadcasting transaction (#1187)
  • +
  • add jsonrpc gateway support (#1183)
  • +
  • config: one reward address in config for all validators (#1178)
  • +
  • GUI: memo field for transactions on GUI wallet (#1182)
  • +
  • implement basic auth for pactus shell (#1177)
  • +
  • grpc: add rust code gen for proto (#1151)
  • +
  • testnet: define permanent Testent genesis (#1173)
  • +
  • add basic auth authentication for securing grpc (#1162)
  • +
  • grpc: calculate fee for create-raw-transaction APIs (#1159)
  • +
  • grpc: add fixed-amount to calc-fee API (#1146)
  • +
  • wallet: adding all account address functions (#1128)
  • +
  • grpc: update swagger API to version 1.1 (#1106)
  • +
  • GUI: adding availability score in wallet (#1118)
  • +
  • logger: adding log target (#1122)
  • +
  • logger: adding file_only option (#1117)
  • +
  • gui: add connections and moniker fields to main windows (#1090)
  • +
  • implementation for PIP-22 (#1067)
  • +
  • generate documentation for proto files (#1064)
  • +
  • pactus-ctl (#946)
  • +
+ +

Fix

+ +
    +
  • gRPC: add basic auth option in header (#1217)
  • +
  • gRPC: not return block data on information verbosity (#1212)
  • +
  • wallet: fix wallet conn issue (#1211)
  • +
  • GUI: update total balance on wallet timeout (#1204)
  • +
  • accept small bond to existing validator (#1152)
  • +
  • GUI: make transaction hash selactable (#1196)
  • +
  • close connections with peers that have no supported protocol (#1181)
  • +
  • sync: check the start block request height (#1176)
  • +
  • config: load logger levels in Mainnet config (#1168)
  • +
  • gRPC: pactus swagger not found (#1163)
  • +
  • add error type for invalid configs (#1153)
  • +
  • save Mainnet config with inline comments (#1143)
  • +
  • network: set deadline for streams (#1149)
  • +
  • grpc: fix error 404 on grpc gateway (#1144)
  • +
  • wallet: checking args in history add (#1141)
  • +
  • gRPC: adding sign raw transaction API to gateway (#1116)
  • +
  • sync: fix concurrent map read-write crash (#1112)
  • +
  • network: remove disconnected peers from peerMgr (#1110)
  • +
  • network: set dial and accept limit in connection gater (#1089)
  • +
  • stderr logger in windows os (#1081)
  • +
  • sync: improve syncing process (#1087)
  • +
  • network: redefine resource limits (#1086)
  • +
+ +

Refactor

+ +
    +
  • sync: improve syncing process (#1207)
  • +
  • move fee calculation logic to execution package (#1195)
  • +
  • introduce Amount data type for converting PAC units (#1174)
  • +
  • using PAC instead of atomic units for external input/outputs (#1161)
  • +
  • change func() to cancel func type (#1142)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus Permanent Phoenix Testnet Launched2024-03-16T00:00:00+00:002024-03-16T00:00:00+00:00https://pactus.org/2024/03/16/testnet-phoenix-launchedThe public and permanent Phoenix Testnet +for the Pactus blockchain has been launched. +This Testnet serves as a valuable platform for developers to thoroughly examine their projects, +providing a safe playground to test and deploy their applications before transitioning to the Mainnet.

+ +

Pactus Public Phoenix Testnet

+ +

All parameters within the Testnet mirror those of the Mainnet, +ensuring a consistent environment for testing and development. +The genesis block for the Testnet is available +here.

+ +

Currently, there are four active nodes running the Testnet, accessible at the following addresses:

+ +
    +
  • testnet1.pactus.org
  • +
  • testnet2.pactus.org
  • +
  • testnet3.pactus.org
  • +
  • testnet4.pactus.org
  • +
+ +

The Testnet’s name, Phoenix, was chosen by the Pactus community from various suggestions. +It embodies the spirit of rebirth and renewal, highlighting the innovative and testing-focused nature of the network. +Developers can utilize the RoboPAC as a faucet to receive test coins and +thoroughly test their applications within this environment. +It’s important to note that the coins within this Testnet hold no monetary value and are only meant for testing purpose.

+ +

All addresses within the Phoenix network are prefixed with tpc1..., +distinguishing them from Mainnet addresses that start with pc1...’. +This clear differentiation streamlines development and ensures seamless integration when transitioning to +the Mainnet environment.

]]>
Pactus 1.0.2 (Istanbul) Released2024-02-18T00:00:00+00:002024-02-18T00:00:00+00:00https://pactus.org/2024/02/18/release-1-0-2Overview + +

Pactus Blockchain Version 1.0.2 (Istanbul) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

This release is named after the city of Istanbul and it +was unanimously selected by Pactus community.

+ +

Pactus Version 1.0.2 (Istanbul)

+ +

Highlights

+ +

This update fixes a major issue that decreases the number of inbound connections of the nodes over time. +We highly recommend all users to upgrade to the new version for better connectivity.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • sync: fix concurrent map read-write crash (#1112)
  • +
  • network: remove disconnected peers from peerMgr (#1110)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.0.1 (Beijing) Released2024-02-10T00:00:00+00:002024-02-10T00:00:00+00:00https://pactus.org/2024/02/10/release-1-0-1Overview + +

Pactus Blockchain Version 1.0.1 (Beijing) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

This release is named after the city of Beijing and it +was unanimously selected by Pactus community.

+ +

Pactus Version 1.0.1 (Beijing)

+ +

Highlights

+ +

This update fixes several issues identified after the release of +1.0.0 (Beijing). +Specifically, it fixes the missed log file on the Windows GUI application and improves the node connectivity.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gui: add connections and moniker fields to main windows (#1090)
  • +
+ +

Fix

+ +
    +
  • network: set dial and accept limit in connection gater (#1089)
  • +
  • gui stderr logger in windows os (#1081)
  • +
  • sync: improve syncing process (#1087)
  • +
  • network: redefine resource limits (#1086)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.0.0 (Beijing) Released2024-01-31T00:00:00+00:002024-01-31T00:00:00+00:00https://pactus.org/2024/01/31/release-1-0-0Overview + +

Pactus Blockchain Version 1.0.0 (Beijing) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Pactus Version 1.0.0 (Beijing)

+ +

Highlights

+ +

Mainnet Official Release v1.0.0 (Beijing)

+ +

The much-anticipated official software release of Pactus v1.0.0 (Beijing) marks a significant milestone +for our community. +This impressive mainnet release represents the culmination of extensive development efforts. +Pactus v1.0.0 (Beijing) offers a pioneering solution for streamlining the validation of Pactus blockchain, +enhancing security, and providing a user-friendly experience. We’re excited to unveil the official software +and welcome users to experience the power of Pactus in revolutionizing the future of blockchain. Join us on +this exciting journey.

+ +

Onboarding validators

+ +

On February 1st, a total of 53,494 PAC coins will be distributed among 1,311 validators who participated in +Testnet-0, +Testnet-1, and +Testnet-2. +This marks the beginning of a new chapter in the decentralized world.

+ +

Download

+ +

This version has been implemented for Mainnet +To start using Pactus Mainnet, download the latest version from the download +page and join the Mainnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement get validator address for grpc (#975)
  • +
  • add bootstrap.json and load in config on build (#964)
  • +
  • add mainnet config and genesis files (#951)
  • +
  • add Consensus-address to network info (#952)
  • +
  • grpc: sign transaction using wallet client (#945)
  • +
  • pactus gui lock support (#947)
  • +
  • consensus: turning consensus to a zero-config module (#942)
  • +
+ +

Fix

+ +
    +
  • localnet wallet issue (#970)
  • +
  • sync: remove ReachabilityStatus from agent info (#956)
  • +
  • daemon: keeping previous behavior for password flag, linting CLI messages (#950)
  • +
  • consensus: detect if the system time is behind the network (#939)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Mainnet launched 🚀2024-01-24T20:24:00+00:002024-01-24T20:24:00+00:00https://pactus.org/2024/01/24/mainnet-launchedYears to Launch + +

Pactus Mainnet started creating the first block on 24 January 2024 at 20:24:10 UTC time. +Pactus Mainnet is the result of years of hard work, research, and innovation. +It started from one idea:

+ +

A low-cost, truly decentralized blockchain, built by the people for the people, +where anyone could run and be their own validator.

+ +

We faced many challenges and obstacles along the way, but we never gave up.
+We overcame them with our determination and perseverance.
+We learned from our mistakes and improved our solutions.
+We grew from a small team to a large community.
+We achieved many milestones and breakthroughs. And we did it.
+We created Pactus, the platform that empowers you.

+ +

Thanks to Community

+ +

We want to thank Pactus community for helping us on the Testnet.

+ +

You have been instrumental in testing and improving the Testnet.
+You have given us your honest feedback and constructive suggestions.
+You have reported and help fixed bugs and errors.
+You have challenged and pushed us to do better.
+You have been our partners and friends in this journey.

+ +

On the Road

+ +

The true journey has just started.
+The Mainnet is not the end, but the beginning.
+The beginning of a new era of blockchain innovation.
+The beginning of a new challenge and opportunity.
+The beginning of a new revolution and evolution!

+ +

We welcome you more than ever.
+We need you to join us in this exciting adventure.
+We need you to support us in this ambitious endeavor.
+We need you to be part of Pactus, the platform that empowers you!

+ +

We Have a Dream

+ +

We have a dream.
+A dream of a world where blockchain technology is not a privilege, but a right for everyone.
+A dream of a world where smart contracts and decentralized applications are fast, secure, and scalable.
+A dream of a world where Pactus is the platform that empowers you.

+ +

This dream is not just ours. It is yours too.
+You share our vision and passion for blockchain innovation.
+You believe in our potential and impact.
+You support our goals and values.
+You are part of our dream.

+ +

And this dream is not just a fantasy. It is a reality.
+A reality that we have created together.
+A reality that we have launched today. A reality that we can explore and enjoy together.
+A reality that we can shape and improve together.
+A reality that we can make better and brighter together!

]]>
Story of Testnet-22024-01-22T00:00:00+00:002024-01-22T00:00:00+00:00https://pactus.org/2024/01/22/testnet-2-concludedWhat is Testnet? + +

Testnet is a testing environment where developers and users can try out the functionality of a blockchain project, +without putting real assets or data at risk. +It helps to ensure that the final product is reliable and secure for users to use. +If you like to read more about the Testnet you can check out our post on +“What is Testnet?”.

+ +

Summary

+ +

In October 2023, we launched Testnet-2. +The main purpose of this Testnet was to closely monitor the new consensus mechanism and the stability of the P2P network.

+ +

The committee for Testnet-2 was set to 51 validators, +and 2084 validators joined during the Testnet period. +More than 1500 computers and servers joined the network, and we experienced a high volume of data transmission in the network. +More than 800,000 blocks were created, and about 2 million transactions were processed during this time. +The size of the blockchain is about 450 megabytes.

+ +

About 500,000 coins were staked during this period, almost 60% of the total generated coins. +It shows that users, even in Testnet, tend to stake their coins.

+ +

Stability of Consensus

+ +

In Testnet-1, we had one consensus failure that caused us to +conclude the Testnet-1. +During Testnet-2, there were no issues with the consensus mechanism, and +we had no case of failure during the testing period, +although the number of validators and nodes significantly increased on Testnet-2 compared to its predecessor. +It proved that the consensus mechanism is in a stable situation.

+ +

Networking issues

+ +

In Testnet-2, the blockchain stopped twice, and each time it took more than 24 hours to fix the problem. +In the second blockage, we had no choice but to ask active validators inside the committee to +update their nodes to overcome the networking issue. +The development team faced a difficult situation and had to make the proper decision to fix the networking issues. +On one hand, the networking traffic increased significantly, and on the other hand, we had to +make sure normal users with limited internet bandwidth could still participate in the consensus mechanism without any problems. +After examining different scenarios, the networking issues were resolved, and +no major problems were reported till the end of Testnet.

+ +

Major updates

+ +

During Testnet-2, we introduced several updates, including versions +0.15.0, +0.16.0, +0.17.0, +0.18.0, +0.19.0, and +0.20.0. +The update process went smoothly, and with the stability of Version 0.20.0 confirmed, +the development team shifted its focus to the Mainnet launch.

+ +

Special thanks to the community

+ +

This Testnet was important for us. +It helped us learn what we need to do to make Pactus work even better. +Without the community that supports us and dedicates their time and resources to testing and feedback, +we wouldn’t have been able to progress as we have.

+ +

We thank all of them for their valuable contributions. +As promised, participants in Testnets will be given priority as validators for the MainNet, and +will receive bounty PAC coins to set up their validators.

+ +

We are grateful to all those who participated in Testnets, and we encourage them to join the Mainnet. +As a community-based project, we rely on the support of our community members, and we value any help we receive.

]]>
Pactus 0.20.0 Released2024-01-11T00:00:00+00:002024-01-11T00:00:00+00:00https://pactus.org/2024/01/11/release-0-20-0Overview + +

Pactus Blockchain Version 0.20.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

Validator Stake Management

+ +

The new GUI application enables users to easily Unbond and Withdraw their validator’s stake.

+ +

Withdraw dialog

+ +

Improving Network Connectivity

+ +

Some users have reported that UDP packets are being dropped by their Internet Service Providers. +Therefore, the UDP protocol is disabled by default. +Users can still activate the UDP protocol by configuring the settings in the file if necessary.

+ +

Also, the experimental Node Gossip feature has been removed in this version. +Node gossip could cause some validators to become isolated from the rest of the network.

+ +

Relay service

+ +

This version enables users to turn their node into a relay service. +A relay service node can help users behind NAT to communicate with each other. +It is disabled by default and can be enabled inside the config file. +Please note that it is still in an experimental state.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement relay service (#931)
  • +
  • HTTP: Integrate AddRowDouble and update tests (#926)
  • +
  • network: making listen address private in config (#921)
  • +
  • http: adding AvailabilityScore to http module (#917)
  • +
  • network: adding ‘enable_udp’ config (#918)
  • +
  • network: removing gossip node service (#916)
  • +
  • gRPC: adding AvailabilityScore to gRPC (#910)
  • +
  • GUI: unbond and withdraw transaction dialogs (#908)
  • +
+ +

Fix

+ +
    +
  • gRPC: adding missing get raw transaction APIs to gRPC gateway (#925)
  • +
  • network: preventing self dial (#924)
  • +
  • fixing time lag on starting node (#923)
  • +
  • network: fixing network deadlock on linux arm64 (#922)
  • +
  • GUI: updating unbond and withdraw dialogs (#911)
  • +
  • fixing gRPC node info issue (#906)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Mainnet announcement2024-01-08T00:00:00+00:002024-01-08T00:00:00+00:00https://pactus.org/2024/01/08/mainnet-announcementThe much-awaited Mainnet Launch of The Pactus Blockchain is finally here! +On January 24, 2024, at 20:24:00 UTC, the first block, known as the Genesis block, +will be minted by four Bootstrap validators. +After that, every 10 seconds, a new block will be added to the blockchain. +Each block contains the committed transactions in the network. +The block finality in the Pactus blockchain is immediate. +It means that there is no need to wait for block confirmation to ensure a transaction is committed.

+ +

Later, more than 2000 community validators will secure the blockchain and make it decentralized. +These validators are Testnet participants who helped test Pactus during our testing period. +The community validators will receive the initial staking coins from a Discord Bot named RoboPac.

+ +

To ensure everything works smoothly on the Mainnet, three different Testnets ( +Testnet0, +Testnet1, and +Testnet2) have been run.

+ +

The Mainnet will never be stopped or interrupted by the core developers of Pactus, +and validators should primarily participate in and maintain the security of the blockchain.

]]>
Pactus 0.19.0 Released2024-01-04T00:00:00+00:002024-01-04T00:00:00+00:00https://pactus.org/2024/01/04/release-0-19-0Overview + +

Pactus Blockchain Version 0.19.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version has improved the overall performance of the blockchain by implementing +PIP-15. +PIP-15 suggests to add caching algorithms to the database for the most frequently used items.

+ +

Additionally, this version has enhanced the connectivity of the nodes in the P2P network.

+ +

Availability Score

+ +

This version comes with the implementation of PIP-19. +PIP-19 suggests assigning the “Availability Score” to each validator based on their activities in the +committee. +Validators with a score less than 0.8 won’t receive the block reward, +as their proposals will be rejected by other validators. +The main reason behind this PIP is to prevent users from downgrading +their node specifications and running Pactus on machines with low resources.

+ +

Breaking change

+ +

The Docker container now contains both daemon and wallet binary files. +Users who use Docker to run Pacts now need to add the entry point to run Pactus.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gRPC: defining network and peers info response’s properly (#898)
  • +
  • implementing pip-19 (#899)
  • +
  • network: disabling GosipSub, only FloodSub (#895)
  • +
  • www: adding change proposer round and value to consensus info votes (#892)
  • +
  • network: adding relay service to dial relay nodes (#887)
  • +
  • implementing pip-15 (#843)
  • +
  • check already running by lock file (#871)
  • +
+ +

Fix

+ +
    +
  • store: use cache to check if public key exists (#902)
  • +
  • executor: not rejecting bond transaction for bootstrap validator (#901)
  • +
  • GUI: removing unnecessary tags in transaction confirm dialog (#893)
  • +
  • network: close relay connection for public node (#891)
  • +
  • network: refining GossipSubParams for Gossiper node (#882)
  • +
  • sync: adding sequence number to the bundle (#881)
  • +
  • network: turn off mesh for gossiper node (#880)
  • +
  • consensus: check voteset for CP strong termination (#879)
  • +
  • adding querier to query messages (#878)
  • +
  • execution: fixing issue #869 (#870)
  • +
  • fixing logger issue on rotating log file (#859)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 0.18.0 Released2023-12-12T00:00:00+00:002023-12-12T00:00:00+00:00https://pactus.org/2023/12/12/release-0-18-0Overview + +

Pactus Blockchain Version 0.18.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version has significantly improved the syncing progress. +The syncing process concurrently requests blocks from 8 different peers and +actively connects to the most optimal peers for downloading the blockchain.

+ +

Additionally, users can now import private keys into their wallet and securely encrypt them using their wallet password.

+ +

Breaking change

+ +

For Unix-based systems, please note that the working directory for root users has changed from /pactus to /root/pactus.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

+After you update the node, the configuration file will automatically get updated, keeping the old settings. +If you want to return the configuration file to its default settings, +just delete the current config file and restart the node. +

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement pip-14 (#841)
  • +
  • sort wallet addresses (#836)
  • +
  • grpc: endpoints for creating raw transaction (#838)
  • +
  • network reachability API (#834)
  • +
  • implement pip-13 (#835)
  • +
  • subscribing to libp2p eventbus (#831)
  • +
  • implement helper methods for wallet address path (#830)
  • +
  • logger: adding rotate log file after days, compress and maxgae for logger config (#822)
  • +
  • enable bandwidth router metric (#819)
  • +
+ +

Fix

+ +
    +
  • network: refining the connection limit (#849)
  • +
  • corrected mistake when retrieving the reward address (#848)
  • +
  • config: restore default config when it is deleted (#847)
  • +
  • cmd: changing home directory for root users (#846)
  • +
  • removing BasicCheck for hash (#845)
  • +
  • disabling libp2p ping protocol (#844)
  • +
  • build docker file (#839)
  • +
  • sync: ignore publishing a block if it is received before (#829)
  • +
  • network: subscribing to the Libp2p event bus (#828)
  • +
  • sync: ignore block request if blocks are already inside the cache (#817)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
\ No newline at end of file diff --git a/ar/index.html b/ar/index.html new file mode 100644 index 000000000..5f96d640f --- /dev/null +++ b/ar/index.html @@ -0,0 +1,740 @@ + + + + + + + + + + + + + الصفحة الرئيسية | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + +
+
+
+
+ Pactus - a real Proof-of-Stake blockchain +
+
+
+
+
بلوكشين بكتوس
+
Building decentralized future together!
+
+ +
+
+
+ +
+
+
+


تشغيل عقدة

+ قم بتنزيل أحدث إصدار من بلوكشين بكتوس، وقم بإنشاء محفظتك وابدأ في المزامنة مع الشبكة. تم تصميم بكتوس ليكون خفيف الوزن وسهل الاستخدام، مما يجعل التشغيل بسيطًا. + + +
+
+ <br> تشغيل عقدة +
+
+ +
+
+ <br> احصل على بعض العملات +
+
+


احصل على بعض العملات

+ بمجرد تشغيل عقدتك وبدء تشغيلها، ستحتاج إلى الحصول على بعض العملات لتصبح مُصدِّق. يمكنك الانضمام إلى مجتمعنا واستلام بعض عملات الحصة مجانًا. + + +
+
+ +
+
+


كن مُصدِّق

+ من خلال تعيين بعض العملات، ستتحول عقدتك إلى مصدق وبالتالي، في كل مرة تقترح فيها كتلة، ستتم مكافأتك بعملة جديدة كمكافأة للكتلة. + + +
+
+ <br> كن مُصدِّق +
+
+ +
+
+ <br> جعل بكتوس أفضل +
+
+


جعل بكتوس أفضل

+ هناك العديد من الطرق التي يمكنك من خلالها دعم بكتوس ومساعدته في النمو. لنعمل معًا لجعل بكتوس أفضل! + + +
+
+
+ +
+
+
+

Our Partners

+
+
+
+ + Sensifai + +
+
+ + Dezh Technologies + +
+
+
+
+
+ +
+
+
+

Our Validators

+
+
+
+ + SGTstake + +
+
+ + NodeSync.Top + +
+
+ + CodeBlockLabs + +
+
+ + CoreNode + +
+
+ + CoreNode + +
+
+ + Validator247 + +
+
+ + VNBnode + +
+
+ + Ionode + +
+
+ + dnsarz + +
+
+ + genznodes + +
+
+ + node39 + +
+
+ + tpes + +
+
+ + oshvank + +
+
+ + testnetnodes + +
+
+ + p10node + +
+
+ + kenz + +
+
+ + blocksync + +
+
+ + adora + +
+
+ + ykpbb + +
+
+ + validator-wiki + +
+
+ + nodeops + +
+
+ + catsmile + +
+
+ + str + +
+
+ + Dezh Technologies + +
+
+
+
+ +
+
+
+
+

Subscribe to the Pactus Newsletter

+

+

Dive into the latest updates and insights from the Pactus Blockchain. + Receive crucial information on new developments, enhancements, and partnerships + directly to your inbox. Stay connected and informed, whether you're an investor, developer, + or blockchain enthusiast.

+
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+ + * +
+
+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + +
+
+
+ + +
+
+
+
+
+
+
+ + +
+ + diff --git a/ar/mstile-150x150.png b/ar/mstile-150x150.png new file mode 100644 index 000000000..187b08cc8 Binary files /dev/null and b/ar/mstile-150x150.png differ diff --git a/ar/robots.txt b/ar/robots.txt new file mode 100644 index 000000000..0097513b3 --- /dev/null +++ b/ar/robots.txt @@ -0,0 +1 @@ +Sitemap: https://pactus.org/sitemap.xml diff --git a/ar/safari-pinned-tab.svg b/ar/safari-pinned-tab.svg new file mode 100644 index 000000000..43c436d31 --- /dev/null +++ b/ar/safari-pinned-tab.svg @@ -0,0 +1,27 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/ar/site.webmanifest b/ar/site.webmanifest new file mode 100644 index 000000000..c00b17332 --- /dev/null +++ b/ar/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-256x256.png", + "sizes": "256x256", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/ar/sitemap.xml b/ar/sitemap.xml new file mode 100644 index 000000000..1c65aede0 --- /dev/null +++ b/ar/sitemap.xml @@ -0,0 +1,210 @@ + + + +https://pactus.org/2022/08/29/dev-meeting.html +2022-08-29T00:00:00+00:00 + + +https://pactus.org/2022/09/04/dev-meeting.html +2022-09-04T00:00:00+00:00 + + +https://pactus.org/2022/09/18/dev-meeting.html +2022-09-18T00:00:00+00:00 + + +https://pactus.org/2022/09/20/release-0-9-0.html +2022-09-20T00:00:00+00:00 + + +https://pactus.org/2022/09/24/testnet-0-launched.html +2022-09-24T00:00:00+00:00 + + +https://pactus.org/2022/10/30/dev-meeting.html +2022-10-30T00:00:00+00:00 + + +https://pactus.org/2022/11/24/release-0-9-1.html +2022-11-24T00:00:00+00:00 + + +https://pactus.org/2023/03/01/what-is-testnet.html +2023-03-01T00:00:00+00:00 + + +https://pactus.org/2023/04/21/testnet-0-concluded.html +2023-04-21T00:00:00+00:00 + + +https://pactus.org/2023/05/08/release-0-10-0.html +2023-05-08T00:00:00+00:00 + + +https://pactus.org/2023/05/09/testnet-1-launched.html +2023-05-09T00:00:00+00:00 + + +https://pactus.org/2023/05/29/release-0-11-0.html +2023-05-29T00:00:00+00:00 + + +https://pactus.org/2023/06/19/release-0-12-0.html +2023-06-19T00:00:00+00:00 + + +https://pactus.org/2023/07/01/release-0-13-0.html +2023-07-01T00:00:00+00:00 + + +https://pactus.org/2023/07/05/testnet-500-validators.html +2023-07-05T00:00:00+00:00 + + +https://pactus.org/2023/07/09/dev-meeting.html +2023-07-09T00:00:00+00:00 + + +https://pactus.org/2023/08/01/testnet-1-concluded.html +2023-08-01T00:00:00+00:00 + + +https://pactus.org/2023/08/22/dev-report.html +2023-08-22T00:00:00+00:00 + + +https://pactus.org/2023/09/04/introduction-to-pips.html +2023-09-04T00:00:00+00:00 + + +https://pactus.org/2023/09/24/dev-report-pre-testnet-2.html +2023-09-24T00:00:00+00:00 + + +https://pactus.org/2023/09/28/how-sspos-works-in-simple-word.html +2023-09-28T00:00:00+00:00 + + +https://pactus.org/2023/10/15/release-0-15-0.html +2023-10-15T00:00:00+00:00 + + +https://pactus.org/2023/10/15/testnet-2-launched.html +2023-10-15T00:00:00+00:00 + + +https://pactus.org/2023/10/29/release-0-16-0.html +2023-10-29T00:00:00+00:00 + + +https://pactus.org/2023/11/12/release-0-17-0.html +2023-11-12T00:00:00+00:00 + + +https://pactus.org/2023/12/12/release-0-18-0.html +2023-12-12T00:00:00+00:00 + + +https://pactus.org/2024/01/04/release-0-19-0.html +2024-01-04T00:00:00+00:00 + + +https://pactus.org/2024/01/08/mainnet-announcement.html +2024-01-08T00:00:00+00:00 + + +https://pactus.org/2024/01/11/release-0-20-0.html +2024-01-11T00:00:00+00:00 + + +https://pactus.org/2024/01/22/testnet-2-concluded.html +2024-01-22T00:00:00+00:00 + + +https://pactus.org/2024/01/24/mainnet-launched.html +2024-01-24T20:24:00+00:00 + + +https://pactus.org/2024/01/31/release-1-0-0.html +2024-01-31T00:00:00+00:00 + + +https://pactus.org/2024/02/10/release-1-0-1.html +2024-02-10T00:00:00+00:00 + + +https://pactus.org/2024/02/18/release-1-0-2.html +2024-02-18T00:00:00+00:00 + + +https://pactus.org/2024/03/16/testnet-phoenix-launched.html +2024-03-16T00:00:00+00:00 + + +https://pactus.org/2024/04/14/release-1-1-0.html +2024-04-14T00:00:00+00:00 + + +https://pactus.org/2024/04/18/release-1-1-1.html +2024-04-18T00:00:00+00:00 + + +https://pactus.org/2024/04/25/release-1-1-3.html +2024-04-25T00:00:00+00:00 + + +https://pactus.org/2024/05/07/release-1-1-4.html +2024-05-07T00:00:00+00:00 + + +https://pactus.org/2024/05/30/release-1-1-5.html +2024-05-30T00:00:00+00:00 + + +https://pactus.org/2024/05/31/release-1-1-6.html +2024-05-31T00:00:00+00:00 + + +https://pactus.org/2024/06/02/release-1-1-7.html +2024-06-02T00:00:00+00:00 + + +https://pactus.org/2024/06/02/release-1-1-8.html +2024-06-02T00:00:00+00:00 + + +https://pactus.org/2024/06/20/release-1-2-0.html +2024-06-20T00:00:00+00:00 + + +https://pactus.org/2024/06/27/release-1-3-0.html +2024-06-27T00:00:00+00:00 + + +https://pactus.org/blog/ + + +https://pactus.org/ + + +https://pactus.org/community/ + + +https://pactus.org/about/faq/ + + +https://pactus.org/about/what-is-pactus/ + + +https://pactus.org/about/roadmap/ + + +https://pactus.org/term-of-use/ + + +https://pactus.org/download/ + + +https://pactus.org/contributing/ + + diff --git a/ar/term-of-use/index.html b/ar/term-of-use/index.html new file mode 100644 index 000000000..09117a8c3 --- /dev/null +++ b/ar/term-of-use/index.html @@ -0,0 +1,607 @@ + + + + + + + + + + + + + Term of Use | بلوكشين بكتوس + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

Terms of Use

+ +

Welcome to Pactus.

+ +

By using our website or services, you agree to these Terms of Use (“Terms”). +Please review them carefully. +If you do not accept the Terms, please do not use our website or services.

+ +

We may update the Terms occasionally. +Your continued use of our website or services after any changes means you accept the updates. +If you do not agree to the updates, please stop using our website and services.

+ +

“We,” “us,” “our,” and “Pactus” refer to the Pactus Blockchain Project. “You” refers to each user of our +website or services.

+ +

Website Access and Modifications

+ +

We strive to provide continuous website access but cannot guarantee uninterrupted or error-free service. +Pactus is not liable for any inaccessible features or website unavailability.

+ +

We may modify, expand, limit, or discontinue any part of the website or +services at any time to accommodate users or for other reasons, without notice. +We reserve the right to suspend website access temporarily or permanently, at our discretion, without notice.

+ +

Users may need to update their computer hardware or software to access some website content or features. +Pactus is not responsible for any inability to access the website or services due to user systems, +internet networks, or other causes.

+ +

Age Limit

+ +

Our website and services are not intended for those under 18. +If you are under 18, you may only use this website with the supervision of a parent, guardian, or other responsible adult.

+ +

No Personalized Advice

+ +

This website does not provide individualized legal, tax, financial, or investment advice. +Since everyone’s situation is different, we recommend consulting a qualified professional for financial decisions.

+ +

PAC coin is meant to be used as a medium of exchange. +Nothing on this website should be considered investment advice or a solicitation to +buy, hold, invest in, own, or use PAC coin.

+ +

No Content Guarantees

+ +

We cannot guarantee the accuracy, completeness, or quality of the information on this website. +All content is provided on an “as is” and “as available” basis, and use is at your own risk.

+ +

The content may be sourced from third parties. +Pactus is not responsible for any errors, omissions, or inaccuracies. +The information may not suit everyone and may only apply to certain regions.

+ +

It is your responsibility to evaluate if the information and services are technically and legally suitable for +your intended use and comply with applicable laws. +Always verify any information before using it for personal, financial, or business purposes.

+ +

We may modify website content and services at any time without notice. +We are not obligated to inform you of any changes or corrections.

+ +

External Content

+ +

Any testimonials, opinions, advice, offers, or other third party content on this website reflect the views +and intentions of those parties/people only. +They do not represent the views of Pactus.

+ +

We do not guarantee the accuracy, completeness, reliability, or usefulness of external content. +Users are responsible for assessing external content. +Pactus is not liable for any damage or loss from relying on or using third party content.

+ +

User Generated Content

+ +

By posting or submitting any material to this website, including the forum, you grant Pactus a +worldwide, fully paid-up, non-exclusive license to edit and display your materials on our website and +social media platforms as we deem appropriate.

+ +

You agree to indemnify and hold harmless Pactus and its Users from any third-party claims arising from +your materials. +You also represent that you own or have the right to post the materials, that they are +accurate, their use on the Pactus website complies with laws, and they will not cause harm to any +person.

+ +

Pactus has the right to remove any materials we deem objectionable, offensive, illegal, harmful, or in +violation of these Terms. +We may disclose user information if legally required.

+ +

Please contact info@pactus.org to request the removal of your posted content for reasons such as +privacy concerns, copyright issues, or no longer wanting your content to appear publicly. +We will review removal requests on a case-by-case basis.

+ +

File Safety and Security

+ +

Pactus implements measures to protect downloadable files on our website but cannot guarantee they +are free of infections, viruses, or harmful code.

+ +

We are also not responsible if users’ devices are infected by visiting our website or downloading files in +the event of a security breach.

+ +

If uncertain, users should consider compiling Pactus from the provided source code. +Users are responsible for meeting their own security requirements.

+ + + +

Pactus works with reputable partners, but does not endorse or take responsibility for sponsored content claims. +We do not review, recommend, or endorse any products or services promoted on our site.

+ +

Pactus is not liable for damages from misuse of personal information given to sponsors. +We are also not responsible for losses from using sponsor links or services on our site.

+ + + +

For user convenience, our website may contain links to external sites and resources. +However, we do not control these external sites and are not responsible for +their content, products, services, or information.

+ +

Link inclusion does not imply Pactus endorsement or affiliation. +Users should be aware they may leave our website by clicking links. +External site terms of use may differ from ours.Pactus is not responsible for +losses from users following links to external sites. +We encourage caution and reviewing external sites’ terms and policies before transacting or engaging.

+ +

Electronic Communications

+ +

Our website responses and email communications will be delivered electronically. +Pactus reserves the right to disclose any user emails or objectionable material +to comply with legal processes or protect the +rights and property of Pactus, its customers, suppliers, and users.

+ +

No Financial Services

+ +

This website does not engage in storing, selling, buying, sending, or receiving Pactus coins. +All activities related to owning and transferring Pactus coins occur on the DEX/CEX/decentralized Pactus network. +This website does not actively participate in that network.

+ +

No Liability

+ +

Pactus assumes no liability for any damages, claims, or losses related to using Pactus. +This includes third party actions or inactions and events.

+ +

It includes but is not limited to: security issues when using Pactus software/services, technical problems +when using Pactus software/services, software or data corruption when using Pactus software/services, +or user errors when using Pactus software/services.

+ +

Disclaimer of Warranties

+ +

Pactus expressly disclaims all warranties, representations, and conditions, whether express or implied, +including but not limited to the implied warranties and conditions of merchantability, fitness for a +particular purpose, and non-infringement.

+ +

This disclaimer extends to the use of this website and its services, as well as the accuracy, completeness, +timeliness, or currentness of its content, in any manner and for any purpose.

+ +

No Consequential Damages

+ +

Under no circumstances will Pactus be liable for any incidental, special, consequential, exemplary, +indirect, or other damages arising from use of this website, its services, or content. +This includes but is not limited to data loss, even if advised of such damage possibilities.

+ +

This disclaimer applies whether based on contract, tort, negligence, product liability, strict liability, or otherwise. +It extends to all potential scenarios and circumstances.

+ +

General

+ +

These Terms of Use (TOU) and any applicable Terms of Service are the full agreement for website use by +users and Pactus. They replace previous agreements.

+ +

If Pactus or a user does not exercise a TOU right, this does not waive the right. If a TOU provision is +invalid, the rest remain valid.

+ +

The TOU and Terms of Service are intentionally in English, the governing language for Pactus and users.

+ + + +

Attributed Content

+ +

Logos for operating systems, platforms, and sponsors we support are copyrighted by their respective owners. +Pactus does not own these copyrights but uses the logos with permission or in a clear, non- harmful way.

+ +

Privacy Policy

+ +

Data Collection and Use

+ +

We collect standard server logs from our website. +This data helps provide site statistics, improve content and information flow, analyze errors, and diagnose dead links. +A segment of server logs gathers download statistics to better understand user needs.

+ +
    +
  • Last update: 25 January 2024
  • +
+ +
+
+
+
+ + + + + diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 000000000..00e05b42d --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1 @@ +:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}:root,[data-bs-theme=light]{--pa-blue: #0d6efd;--pa-indigo: #6610f2;--pa-purple: #6f42c1;--pa-pink: #d63384;--pa-red: #dc3545;--pa-orange: #fd7e14;--pa-yellow: #ffc107;--pa-green: #198754;--pa-teal: #20c997;--pa-cyan: #0dcaf0;--pa-black: #000;--pa-white: #fff;--pa-gray: #6c757d;--pa-gray-dark: #343a40;--pa-gray-100: #f8f9fa;--pa-gray-200: #e9ecef;--pa-gray-300: #dee2e6;--pa-gray-400: #ced4da;--pa-gray-500: #adb5bd;--pa-gray-600: #6c757d;--pa-gray-700: #495057;--pa-gray-800: #343a40;--pa-gray-900: #212529;--pa-primary: #021a34;--pa-secondary: #075f94;--pa-success: #198754;--pa-info: #0dcaf0;--pa-warning: #ffc107;--pa-danger: #dc3545;--pa-light: #f8f9fa;--pa-dark: #212529;--pa-primary-rgb: 2, 26, 52;--pa-secondary-rgb: 7, 95, 148;--pa-success-rgb: 25, 135, 84;--pa-info-rgb: 13, 202, 240;--pa-warning-rgb: 255, 193, 7;--pa-danger-rgb: 220, 53, 69;--pa-light-rgb: 248, 249, 250;--pa-dark-rgb: 33, 37, 41;--pa-primary-text-emphasis: #010a15;--pa-secondary-text-emphasis: #03263b;--pa-success-text-emphasis: #0a3622;--pa-info-text-emphasis: #055160;--pa-warning-text-emphasis: #664d03;--pa-danger-text-emphasis: #58151c;--pa-light-text-emphasis: #495057;--pa-dark-text-emphasis: #495057;--pa-primary-bg-subtle: #ccd1d6;--pa-secondary-bg-subtle: #cddfea;--pa-success-bg-subtle: #d1e7dd;--pa-info-bg-subtle: #cff4fc;--pa-warning-bg-subtle: #fff3cd;--pa-danger-bg-subtle: #f8d7da;--pa-light-bg-subtle: #fcfcfd;--pa-dark-bg-subtle: #ced4da;--pa-primary-border-subtle: #9aa3ae;--pa-secondary-border-subtle: #9cbfd4;--pa-success-border-subtle: #a3cfbb;--pa-info-border-subtle: #9eeaf9;--pa-warning-border-subtle: #ffe69c;--pa-danger-border-subtle: #f1aeb5;--pa-light-border-subtle: #e9ecef;--pa-dark-border-subtle: #adb5bd;--pa-white-rgb: 255, 255, 255;--pa-black-rgb: 0, 0, 0;--pa-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--pa-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--pa-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--pa-body-font-family: var(--pa-font-sans-serif);--pa-body-font-size:1rem;--pa-body-font-weight: 400;--pa-body-line-height: 1.5;--pa-body-color: #212529;--pa-body-color-rgb: 33, 37, 41;--pa-body-bg: #fff;--pa-body-bg-rgb: 255, 255, 255;--pa-emphasis-color: #000;--pa-emphasis-color-rgb: 0, 0, 0;--pa-secondary-color: rgba(33, 37, 41, 0.75);--pa-secondary-color-rgb: 33, 37, 41;--pa-secondary-bg: #e9ecef;--pa-secondary-bg-rgb: 233, 236, 239;--pa-tertiary-color: rgba(33, 37, 41, 0.5);--pa-tertiary-color-rgb: 33, 37, 41;--pa-tertiary-bg: #f8f9fa;--pa-tertiary-bg-rgb: 248, 249, 250;--pa-heading-color: inherit;--pa-link-color: #021a34;--pa-link-color-rgb: 2, 26, 52;--pa-link-decoration: underline;--pa-link-hover-color: #02152a;--pa-link-hover-color-rgb: 2, 21, 42;--pa-code-color: #d63384;--pa-highlight-color: #212529;--pa-highlight-bg: #fff3cd;--pa-border-width: 1px;--pa-border-style: solid;--pa-border-color: #dee2e6;--pa-border-color-translucent: rgba(0, 0, 0, 0.175);--pa-border-radius: 0.375rem;--pa-border-radius-sm: 0.25rem;--pa-border-radius-lg: 0.5rem;--pa-border-radius-xl: 1rem;--pa-border-radius-xxl: 2rem;--pa-border-radius-2xl: var(--pa-border-radius-xxl);--pa-border-radius-pill: 50rem;--pa-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--pa-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--pa-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--pa-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--pa-focus-ring-width: 0.25rem;--pa-focus-ring-opacity: 0.25;--pa-focus-ring-color: rgba(2, 26, 52, 0.25);--pa-form-valid-color: #198754;--pa-form-valid-border-color: #198754;--pa-form-invalid-color: #dc3545;--pa-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--pa-body-color: #dee2e6;--pa-body-color-rgb: 222, 226, 230;--pa-body-bg: #212529;--pa-body-bg-rgb: 33, 37, 41;--pa-emphasis-color: #fff;--pa-emphasis-color-rgb: 255, 255, 255;--pa-secondary-color: rgba(222, 226, 230, 0.75);--pa-secondary-color-rgb: 222, 226, 230;--pa-secondary-bg: #343a40;--pa-secondary-bg-rgb: 52, 58, 64;--pa-tertiary-color: rgba(222, 226, 230, 0.5);--pa-tertiary-color-rgb: 222, 226, 230;--pa-tertiary-bg: #2b3035;--pa-tertiary-bg-rgb: 43, 48, 53;--pa-primary-text-emphasis: #677685;--pa-secondary-text-emphasis: #6a9fbf;--pa-success-text-emphasis: #75b798;--pa-info-text-emphasis: #6edff6;--pa-warning-text-emphasis: #ffda6a;--pa-danger-text-emphasis: #ea868f;--pa-light-text-emphasis: #f8f9fa;--pa-dark-text-emphasis: #dee2e6;--pa-primary-bg-subtle: #00050a;--pa-secondary-bg-subtle: #01131e;--pa-success-bg-subtle: #051b11;--pa-info-bg-subtle: #032830;--pa-warning-bg-subtle: #332701;--pa-danger-bg-subtle: #2c0b0e;--pa-light-bg-subtle: #343a40;--pa-dark-bg-subtle: #1a1d20;--pa-primary-border-subtle: #01101f;--pa-secondary-border-subtle: #043959;--pa-success-border-subtle: #0f5132;--pa-info-border-subtle: #087990;--pa-warning-border-subtle: #997404;--pa-danger-border-subtle: #842029;--pa-light-border-subtle: #495057;--pa-dark-border-subtle: #343a40;--pa-heading-color: inherit;--pa-link-color: #677685;--pa-link-hover-color: #85919d;--pa-link-color-rgb: 103, 118, 133;--pa-link-hover-color-rgb: 133, 145, 157;--pa-code-color: #e685b5;--pa-highlight-color: #dee2e6;--pa-highlight-bg: #664d03;--pa-border-color: #495057;--pa-border-color-translucent: rgba(255, 255, 255, 0.15);--pa-form-valid-color: #75b798;--pa-form-valid-border-color: #75b798;--pa-form-invalid-color: #ea868f;--pa-form-invalid-border-color: #ea868f}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--pa-body-font-family);font-size:var(--pa-body-font-size);font-weight:var(--pa-body-font-weight);line-height:var(--pa-body-line-height);color:var(--pa-body-color);text-align:var(--pa-body-text-align);background-color:var(--pa-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--pa-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--pa-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--pa-highlight-color);background-color:var(--pa-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--pa-link-color-rgb), var(--pa-link-opacity, 1));text-decoration:underline}a:hover{--pa-link-color-rgb: var(--pa-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--pa-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--pa-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--pa-body-bg);background-color:var(--pa-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--pa-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--pa-body-bg);border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-sm);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--pa-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--pa-gutter-x: 1.5rem;--pa-gutter-y: 0;width:100%;padding-right:calc(var(--pa-gutter-x)*.5);padding-left:calc(var(--pa-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--pa-breakpoint-xs: 0;--pa-breakpoint-sm: 576px;--pa-breakpoint-md: 768px;--pa-breakpoint-lg: 992px;--pa-breakpoint-xl: 1200px;--pa-breakpoint-xxl: 1400px}.row{--pa-gutter-x: 1.5rem;--pa-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--pa-gutter-y));margin-right:calc(-0.5*var(--pa-gutter-x));margin-left:calc(-0.5*var(--pa-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--pa-gutter-x)*.5);padding-left:calc(var(--pa-gutter-x)*.5);margin-top:var(--pa-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--pa-gutter-x: 0}.g-0,.gy-0{--pa-gutter-y: 0}.g-1,.gx-1{--pa-gutter-x: 0.25rem}.g-1,.gy-1{--pa-gutter-y: 0.25rem}.g-2,.gx-2{--pa-gutter-x: 0.5rem}.g-2,.gy-2{--pa-gutter-y: 0.5rem}.g-3,.gx-3{--pa-gutter-x: 1rem}.g-3,.gy-3{--pa-gutter-y: 1rem}.g-4,.gx-4{--pa-gutter-x: 1.5rem}.g-4,.gy-4{--pa-gutter-y: 1.5rem}.g-5,.gx-5{--pa-gutter-x: 3rem}.g-5,.gy-5{--pa-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--pa-gutter-x: 0}.g-sm-0,.gy-sm-0{--pa-gutter-y: 0}.g-sm-1,.gx-sm-1{--pa-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--pa-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--pa-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--pa-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--pa-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--pa-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--pa-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--pa-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--pa-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--pa-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--pa-gutter-x: 0}.g-md-0,.gy-md-0{--pa-gutter-y: 0}.g-md-1,.gx-md-1{--pa-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--pa-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--pa-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--pa-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--pa-gutter-x: 1rem}.g-md-3,.gy-md-3{--pa-gutter-y: 1rem}.g-md-4,.gx-md-4{--pa-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--pa-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--pa-gutter-x: 3rem}.g-md-5,.gy-md-5{--pa-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--pa-gutter-x: 0}.g-lg-0,.gy-lg-0{--pa-gutter-y: 0}.g-lg-1,.gx-lg-1{--pa-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--pa-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--pa-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--pa-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--pa-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--pa-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--pa-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--pa-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--pa-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--pa-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--pa-gutter-x: 0}.g-xl-0,.gy-xl-0{--pa-gutter-y: 0}.g-xl-1,.gx-xl-1{--pa-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--pa-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--pa-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--pa-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--pa-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--pa-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--pa-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--pa-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--pa-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--pa-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--pa-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--pa-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--pa-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--pa-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--pa-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--pa-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--pa-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--pa-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--pa-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--pa-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--pa-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--pa-gutter-y: 3rem}}.table{--pa-table-color-type: initial;--pa-table-bg-type: initial;--pa-table-color-state: initial;--pa-table-bg-state: initial;--pa-table-color: var(--pa-emphasis-color);--pa-table-bg: var(--pa-body-bg);--pa-table-border-color: var(--pa-border-color);--pa-table-accent-bg: transparent;--pa-table-striped-color: var(--pa-emphasis-color);--pa-table-striped-bg: rgba(var(--pa-emphasis-color-rgb), 0.05);--pa-table-active-color: var(--pa-emphasis-color);--pa-table-active-bg: rgba(var(--pa-emphasis-color-rgb), 0.1);--pa-table-hover-color: var(--pa-emphasis-color);--pa-table-hover-bg: rgba(var(--pa-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--pa-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--pa-table-color-state, var(--pa-table-color-type, var(--pa-table-color)));background-color:var(--pa-table-bg);border-bottom-width:var(--pa-border-width);box-shadow:inset 0 0 0 9999px var(--pa-table-bg-state, var(--pa-table-bg-type, var(--pa-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--pa-border-width)*2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--pa-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--pa-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--pa-table-color-type: var(--pa-table-striped-color);--pa-table-bg-type: var(--pa-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--pa-table-color-type: var(--pa-table-striped-color);--pa-table-bg-type: var(--pa-table-striped-bg)}.table-active{--pa-table-color-state: var(--pa-table-active-color);--pa-table-bg-state: var(--pa-table-active-bg)}.table-hover>tbody>tr:hover>*{--pa-table-color-state: var(--pa-table-hover-color);--pa-table-bg-state: var(--pa-table-hover-bg)}.table-primary{--pa-table-color: #000;--pa-table-bg: #ccd1d6;--pa-table-border-color: #a3a7ab;--pa-table-striped-bg: #c2c7cb;--pa-table-striped-color: #000;--pa-table-active-bg: #b8bcc1;--pa-table-active-color: #000;--pa-table-hover-bg: #bdc1c6;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-secondary{--pa-table-color: #000;--pa-table-bg: #cddfea;--pa-table-border-color: #a4b2bb;--pa-table-striped-bg: #c3d4de;--pa-table-striped-color: #000;--pa-table-active-bg: #b9c9d3;--pa-table-active-color: #000;--pa-table-hover-bg: #beced8;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-success{--pa-table-color: #000;--pa-table-bg: #d1e7dd;--pa-table-border-color: #a7b9b1;--pa-table-striped-bg: #c7dbd2;--pa-table-striped-color: #000;--pa-table-active-bg: #bcd0c7;--pa-table-active-color: #000;--pa-table-hover-bg: #c1d6cc;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-info{--pa-table-color: #000;--pa-table-bg: #cff4fc;--pa-table-border-color: #a6c3ca;--pa-table-striped-bg: #c5e8ef;--pa-table-striped-color: #000;--pa-table-active-bg: #badce3;--pa-table-active-color: #000;--pa-table-hover-bg: #bfe2e9;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-warning{--pa-table-color: #000;--pa-table-bg: #fff3cd;--pa-table-border-color: #ccc2a4;--pa-table-striped-bg: #f2e7c3;--pa-table-striped-color: #000;--pa-table-active-bg: #e6dbb9;--pa-table-active-color: #000;--pa-table-hover-bg: #ece1be;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-danger{--pa-table-color: #000;--pa-table-bg: #f8d7da;--pa-table-border-color: #c6acae;--pa-table-striped-bg: #eccccf;--pa-table-striped-color: #000;--pa-table-active-bg: #dfc2c4;--pa-table-active-color: #000;--pa-table-hover-bg: #e5c7ca;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-light{--pa-table-color: #000;--pa-table-bg: #f8f9fa;--pa-table-border-color: #c6c7c8;--pa-table-striped-bg: #ecedee;--pa-table-striped-color: #000;--pa-table-active-bg: #dfe0e1;--pa-table-active-color: #000;--pa-table-hover-bg: #e5e6e7;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-dark{--pa-table-color: #fff;--pa-table-bg: #212529;--pa-table-border-color: #4d5154;--pa-table-striped-bg: #2c3034;--pa-table-striped-color: #fff;--pa-table-active-bg: #373b3e;--pa-table-active-color: #fff;--pa-table-hover-bg: #323539;--pa-table-hover-color: #fff;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + var(--pa-border-width));padding-bottom:calc(0.375rem + var(--pa-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + var(--pa-border-width));padding-bottom:calc(0.5rem + var(--pa-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + var(--pa-border-width));padding-bottom:calc(0.25rem + var(--pa-border-width));font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:var(--pa-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);appearance:none;background-color:var(--pa-body-bg);background-clip:padding-box;border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-inset);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--pa-body-color);background-color:var(--pa-body-bg);border-color:#818d9a;outline:0;box-shadow:var(--pa-box-shadow-inset),0 0 0 .25rem rgba(2,26,52,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--pa-secondary-color);opacity:1}.form-control:disabled{background-color:var(--pa-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:var(--pa-body-color);background-color:var(--pa-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--pa-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--pa-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--pa-body-color);background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:var(--pa-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(var(--pa-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(var(--pa-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--pa-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--pa-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2))}.form-select{--pa-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);appearance:none;background-color:var(--pa-body-bg);background-image:var(--pa-form-select-bg-img),var(--pa-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-inset);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#818d9a;outline:0;box-shadow:var(--pa-box-shadow-inset),0 0 0 .25rem rgba(2,26,52,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--pa-secondary-bg)}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 var(--pa-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}[data-bs-theme=dark] .form-select{--pa-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--pa-form-check-bg: var(--pa-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;background-color:var(--pa-form-check-bg);background-image:var(--pa-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--pa-border-width) solid var(--pa-border-color);print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#818d9a;outline:0;box-shadow:0 0 0 .25rem rgba(2,26,52,.25)}.form-check-input:checked{background-color:#021a34;border-color:#021a34}.form-check-input:checked[type=checkbox]{--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#021a34;border-color:#021a34;--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--pa-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23818d9a'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(2,26,52,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(2,26,52,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;background-color:#021a34;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b3bac2}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--pa-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:var(--pa-box-shadow-inset)}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;background-color:#021a34;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b3bac2}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--pa-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:var(--pa-box-shadow-inset)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--pa-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--pa-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--pa-border-width) * 2));min-height:calc(3.5rem + calc(var(--pa-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--pa-border-width) solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--pa-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--pa-body-bg);border-radius:var(--pa-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--pa-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--pa-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:var(--pa-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);text-align:center;white-space:nowrap;background-color:var(--pa-tertiary-bg);border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--pa-border-width)*-1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--pa-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--pa-success);border-radius:var(--pa-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--pa-form-valid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--pa-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--pa-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--pa-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--pa-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--pa-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--pa-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--pa-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--pa-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--pa-danger);border-radius:var(--pa-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--pa-form-invalid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--pa-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--pa-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--pa-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--pa-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--pa-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--pa-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--pa-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--pa-btn-padding-x: 0.75rem;--pa-btn-padding-y: 0.375rem;--pa-btn-font-family: ;--pa-btn-font-size:1rem;--pa-btn-font-weight: 400;--pa-btn-line-height: 1.5;--pa-btn-color: var(--pa-body-color);--pa-btn-bg: transparent;--pa-btn-border-width: var(--pa-border-width);--pa-btn-border-color: transparent;--pa-btn-border-radius: var(--pa-border-radius);--pa-btn-hover-border-color: transparent;--pa-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--pa-btn-disabled-opacity: 0.65;--pa-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--pa-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--pa-btn-padding-y) var(--pa-btn-padding-x);font-family:var(--pa-btn-font-family);font-size:var(--pa-btn-font-size);font-weight:var(--pa-btn-font-weight);line-height:var(--pa-btn-line-height);color:var(--pa-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--pa-btn-border-width) solid var(--pa-btn-border-color);border-radius:var(--pa-btn-border-radius);background-color:var(--pa-btn-bg);box-shadow:var(--pa-btn-box-shadow);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--pa-btn-hover-color);background-color:var(--pa-btn-hover-bg);border-color:var(--pa-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--pa-btn-color);background-color:var(--pa-btn-bg);border-color:var(--pa-btn-border-color)}.btn:focus-visible{color:var(--pa-btn-hover-color);background-color:var(--pa-btn-hover-bg);border-color:var(--pa-btn-hover-border-color);outline:0;box-shadow:var(--pa-btn-box-shadow),var(--pa-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--pa-btn-hover-border-color);outline:0;box-shadow:var(--pa-btn-box-shadow),var(--pa-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--pa-btn-active-color);background-color:var(--pa-btn-active-bg);border-color:var(--pa-btn-active-border-color);box-shadow:var(--pa-btn-active-shadow)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--pa-btn-active-shadow),var(--pa-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--pa-btn-disabled-color);pointer-events:none;background-color:var(--pa-btn-disabled-bg);border-color:var(--pa-btn-disabled-border-color);opacity:var(--pa-btn-disabled-opacity);box-shadow:none}.btn-primary{--pa-btn-color: #fff;--pa-btn-bg: #021a34;--pa-btn-border-color: #021a34;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #02162c;--pa-btn-hover-border-color: #02152a;--pa-btn-focus-shadow-rgb: 40, 60, 82;--pa-btn-active-color: #fff;--pa-btn-active-bg: #02152a;--pa-btn-active-border-color: #021427;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #021a34;--pa-btn-disabled-border-color: #021a34}.btn-secondary{--pa-btn-color: #fff;--pa-btn-bg: #075f94;--pa-btn-border-color: #075f94;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #06517e;--pa-btn-hover-border-color: #064c76;--pa-btn-focus-shadow-rgb: 44, 119, 164;--pa-btn-active-color: #fff;--pa-btn-active-bg: #064c76;--pa-btn-active-border-color: #05476f;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #075f94;--pa-btn-disabled-border-color: #075f94}.btn-success{--pa-btn-color: #fff;--pa-btn-bg: #198754;--pa-btn-border-color: #198754;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #157347;--pa-btn-hover-border-color: #146c43;--pa-btn-focus-shadow-rgb: 60, 153, 110;--pa-btn-active-color: #fff;--pa-btn-active-bg: #146c43;--pa-btn-active-border-color: #13653f;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #198754;--pa-btn-disabled-border-color: #198754}.btn-info{--pa-btn-color: #000;--pa-btn-bg: #0dcaf0;--pa-btn-border-color: #0dcaf0;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #31d2f2;--pa-btn-hover-border-color: #25cff2;--pa-btn-focus-shadow-rgb: 11, 172, 204;--pa-btn-active-color: #000;--pa-btn-active-bg: #3dd5f3;--pa-btn-active-border-color: #25cff2;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #0dcaf0;--pa-btn-disabled-border-color: #0dcaf0}.btn-warning{--pa-btn-color: #000;--pa-btn-bg: #ffc107;--pa-btn-border-color: #ffc107;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #ffca2c;--pa-btn-hover-border-color: #ffc720;--pa-btn-focus-shadow-rgb: 217, 164, 6;--pa-btn-active-color: #000;--pa-btn-active-bg: #ffcd39;--pa-btn-active-border-color: #ffc720;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #ffc107;--pa-btn-disabled-border-color: #ffc107}.btn-danger{--pa-btn-color: #fff;--pa-btn-bg: #dc3545;--pa-btn-border-color: #dc3545;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #bb2d3b;--pa-btn-hover-border-color: #b02a37;--pa-btn-focus-shadow-rgb: 225, 83, 97;--pa-btn-active-color: #fff;--pa-btn-active-bg: #b02a37;--pa-btn-active-border-color: #a52834;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #dc3545;--pa-btn-disabled-border-color: #dc3545}.btn-light{--pa-btn-color: #000;--pa-btn-bg: #f8f9fa;--pa-btn-border-color: #f8f9fa;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #d3d4d5;--pa-btn-hover-border-color: #c6c7c8;--pa-btn-focus-shadow-rgb: 211, 212, 213;--pa-btn-active-color: #000;--pa-btn-active-bg: #c6c7c8;--pa-btn-active-border-color: #babbbc;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #f8f9fa;--pa-btn-disabled-border-color: #f8f9fa}.btn-dark{--pa-btn-color: #fff;--pa-btn-bg: #212529;--pa-btn-border-color: #212529;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #424649;--pa-btn-hover-border-color: #373b3e;--pa-btn-focus-shadow-rgb: 66, 70, 73;--pa-btn-active-color: #fff;--pa-btn-active-bg: #4d5154;--pa-btn-active-border-color: #373b3e;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #212529;--pa-btn-disabled-border-color: #212529}.btn-outline-primary{--pa-btn-color: #021a34;--pa-btn-border-color: #021a34;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #021a34;--pa-btn-hover-border-color: #021a34;--pa-btn-focus-shadow-rgb: 2, 26, 52;--pa-btn-active-color: #fff;--pa-btn-active-bg: #021a34;--pa-btn-active-border-color: #021a34;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #021a34;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #021a34;--pa-gradient: none}.btn-outline-secondary{--pa-btn-color: #075f94;--pa-btn-border-color: #075f94;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #075f94;--pa-btn-hover-border-color: #075f94;--pa-btn-focus-shadow-rgb: 7, 95, 148;--pa-btn-active-color: #fff;--pa-btn-active-bg: #075f94;--pa-btn-active-border-color: #075f94;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #075f94;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #075f94;--pa-gradient: none}.btn-outline-success{--pa-btn-color: #198754;--pa-btn-border-color: #198754;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #198754;--pa-btn-hover-border-color: #198754;--pa-btn-focus-shadow-rgb: 25, 135, 84;--pa-btn-active-color: #fff;--pa-btn-active-bg: #198754;--pa-btn-active-border-color: #198754;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #198754;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #198754;--pa-gradient: none}.btn-outline-info{--pa-btn-color: #0dcaf0;--pa-btn-border-color: #0dcaf0;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #0dcaf0;--pa-btn-hover-border-color: #0dcaf0;--pa-btn-focus-shadow-rgb: 13, 202, 240;--pa-btn-active-color: #000;--pa-btn-active-bg: #0dcaf0;--pa-btn-active-border-color: #0dcaf0;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #0dcaf0;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #0dcaf0;--pa-gradient: none}.btn-outline-warning{--pa-btn-color: #ffc107;--pa-btn-border-color: #ffc107;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #ffc107;--pa-btn-hover-border-color: #ffc107;--pa-btn-focus-shadow-rgb: 255, 193, 7;--pa-btn-active-color: #000;--pa-btn-active-bg: #ffc107;--pa-btn-active-border-color: #ffc107;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #ffc107;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #ffc107;--pa-gradient: none}.btn-outline-danger{--pa-btn-color: #dc3545;--pa-btn-border-color: #dc3545;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #dc3545;--pa-btn-hover-border-color: #dc3545;--pa-btn-focus-shadow-rgb: 220, 53, 69;--pa-btn-active-color: #fff;--pa-btn-active-bg: #dc3545;--pa-btn-active-border-color: #dc3545;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #dc3545;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #dc3545;--pa-gradient: none}.btn-outline-light{--pa-btn-color: #f8f9fa;--pa-btn-border-color: #f8f9fa;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #f8f9fa;--pa-btn-hover-border-color: #f8f9fa;--pa-btn-focus-shadow-rgb: 248, 249, 250;--pa-btn-active-color: #000;--pa-btn-active-bg: #f8f9fa;--pa-btn-active-border-color: #f8f9fa;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #f8f9fa;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #f8f9fa;--pa-gradient: none}.btn-outline-dark{--pa-btn-color: #212529;--pa-btn-border-color: #212529;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #212529;--pa-btn-hover-border-color: #212529;--pa-btn-focus-shadow-rgb: 33, 37, 41;--pa-btn-active-color: #fff;--pa-btn-active-bg: #212529;--pa-btn-active-border-color: #212529;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #212529;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #212529;--pa-gradient: none}.btn-link{--pa-btn-font-weight: 400;--pa-btn-color: var(--pa-link-color);--pa-btn-bg: transparent;--pa-btn-border-color: transparent;--pa-btn-hover-color: var(--pa-link-hover-color);--pa-btn-hover-border-color: transparent;--pa-btn-active-color: var(--pa-link-hover-color);--pa-btn-active-border-color: transparent;--pa-btn-disabled-color: #6c757d;--pa-btn-disabled-border-color: transparent;--pa-btn-box-shadow: 0 0 0 #000;--pa-btn-focus-shadow-rgb: 40, 60, 82;text-decoration:underline}.btn-link:focus-visible{color:var(--pa-btn-color)}.btn-link:hover{color:var(--pa-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--pa-btn-padding-y: 0.5rem;--pa-btn-padding-x: 1rem;--pa-btn-font-size:1.25rem;--pa-btn-border-radius: var(--pa-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--pa-btn-padding-y: 0.25rem;--pa-btn-padding-x: 0.5rem;--pa-btn-font-size:0.875rem;--pa-btn-border-radius: var(--pa-border-radius-sm)}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--pa-dropdown-zindex: 1000;--pa-dropdown-min-width: 10rem;--pa-dropdown-padding-x: 0;--pa-dropdown-padding-y: 0.5rem;--pa-dropdown-spacer: 0.125rem;--pa-dropdown-font-size:1rem;--pa-dropdown-color: var(--pa-body-color);--pa-dropdown-bg: var(--pa-body-bg);--pa-dropdown-border-color: var(--pa-border-color-translucent);--pa-dropdown-border-radius: var(--pa-border-radius);--pa-dropdown-border-width: var(--pa-border-width);--pa-dropdown-inner-border-radius: calc(var(--pa-border-radius) - var(--pa-border-width));--pa-dropdown-divider-bg: var(--pa-border-color-translucent);--pa-dropdown-divider-margin-y: 0.5rem;--pa-dropdown-box-shadow: var(--pa-box-shadow);--pa-dropdown-link-color: var(--pa-body-color);--pa-dropdown-link-hover-color: var(--pa-body-color);--pa-dropdown-link-hover-bg: var(--pa-tertiary-bg);--pa-dropdown-link-active-color: #fff;--pa-dropdown-link-active-bg: #021a34;--pa-dropdown-link-disabled-color: var(--pa-tertiary-color);--pa-dropdown-item-padding-x: 1rem;--pa-dropdown-item-padding-y: 0.25rem;--pa-dropdown-header-color: #6c757d;--pa-dropdown-header-padding-x: 1rem;--pa-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--pa-dropdown-zindex);display:none;min-width:var(--pa-dropdown-min-width);padding:var(--pa-dropdown-padding-y) var(--pa-dropdown-padding-x);margin:0;font-size:var(--pa-dropdown-font-size);color:var(--pa-dropdown-color);text-align:left;list-style:none;background-color:var(--pa-dropdown-bg);background-clip:padding-box;border:var(--pa-dropdown-border-width) solid var(--pa-dropdown-border-color);border-radius:var(--pa-dropdown-border-radius);box-shadow:var(--pa-dropdown-box-shadow)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--pa-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--pa-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--pa-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--pa-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--pa-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--pa-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--pa-dropdown-item-padding-y) var(--pa-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--pa-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0;border-radius:var(--pa-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--pa-dropdown-link-hover-color);background-color:var(--pa-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--pa-dropdown-link-active-color);text-decoration:none;background-color:var(--pa-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--pa-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--pa-dropdown-header-padding-y) var(--pa-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--pa-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--pa-dropdown-item-padding-y) var(--pa-dropdown-item-padding-x);color:var(--pa-dropdown-link-color)}.dropdown-menu-dark{--pa-dropdown-color: #dee2e6;--pa-dropdown-bg: #343a40;--pa-dropdown-border-color: var(--pa-border-color-translucent);--pa-dropdown-box-shadow: ;--pa-dropdown-link-color: #dee2e6;--pa-dropdown-link-hover-color: #fff;--pa-dropdown-divider-bg: var(--pa-border-color-translucent);--pa-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--pa-dropdown-link-active-color: #fff;--pa-dropdown-link-active-bg: #021a34;--pa-dropdown-link-disabled-color: #adb5bd;--pa-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--pa-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--pa-border-width)*-1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--pa-border-width)*-1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--pa-nav-link-padding-x: 1rem;--pa-nav-link-padding-y: 0.5rem;--pa-nav-link-font-weight: ;--pa-nav-link-color: var(--pa-link-color);--pa-nav-link-hover-color: var(--pa-link-hover-color);--pa-nav-link-disabled-color: var(--pa-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--pa-nav-link-padding-y) var(--pa-nav-link-padding-x);font-size:var(--pa-nav-link-font-size);font-weight:var(--pa-nav-link-font-weight);color:var(--pa-nav-link-color);text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--pa-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(2,26,52,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--pa-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--pa-nav-tabs-border-width: var(--pa-border-width);--pa-nav-tabs-border-color: var(--pa-border-color);--pa-nav-tabs-border-radius: var(--pa-border-radius);--pa-nav-tabs-link-hover-border-color: var(--pa-secondary-bg) var(--pa-secondary-bg) var(--pa-border-color);--pa-nav-tabs-link-active-color: var(--pa-emphasis-color);--pa-nav-tabs-link-active-bg: var(--pa-body-bg);--pa-nav-tabs-link-active-border-color: var(--pa-border-color) var(--pa-border-color) var(--pa-body-bg);border-bottom:var(--pa-nav-tabs-border-width) solid var(--pa-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--pa-nav-tabs-border-width));border:var(--pa-nav-tabs-border-width) solid rgba(0,0,0,0);border-top-left-radius:var(--pa-nav-tabs-border-radius);border-top-right-radius:var(--pa-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--pa-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--pa-nav-tabs-link-active-color);background-color:var(--pa-nav-tabs-link-active-bg);border-color:var(--pa-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--pa-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--pa-nav-pills-border-radius: var(--pa-border-radius);--pa-nav-pills-link-active-color: #fff;--pa-nav-pills-link-active-bg: #021a34}.nav-pills .nav-link{border-radius:var(--pa-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--pa-nav-pills-link-active-color);background-color:var(--pa-nav-pills-link-active-bg)}.nav-underline{--pa-nav-underline-gap: 1rem;--pa-nav-underline-border-width: 0.125rem;--pa-nav-underline-link-active-color: var(--pa-emphasis-color);gap:var(--pa-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--pa-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--pa-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--pa-navbar-padding-x: 0;--pa-navbar-padding-y: 0.5rem;--pa-navbar-color: rgba(var(--pa-emphasis-color-rgb), 0.65);--pa-navbar-hover-color: rgba(var(--pa-emphasis-color-rgb), 0.8);--pa-navbar-disabled-color: rgba(var(--pa-emphasis-color-rgb), 0.3);--pa-navbar-active-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-brand-padding-y: 0.3125rem;--pa-navbar-brand-margin-end: 1rem;--pa-navbar-brand-font-size: 1.25rem;--pa-navbar-brand-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-brand-hover-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-nav-link-padding-x: 0.5rem;--pa-navbar-toggler-padding-y: 0.25rem;--pa-navbar-toggler-padding-x: 0.75rem;--pa-navbar-toggler-font-size: 1.25rem;--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--pa-navbar-toggler-border-color: rgba(var(--pa-emphasis-color-rgb), 0.15);--pa-navbar-toggler-border-radius: var(--pa-border-radius);--pa-navbar-toggler-focus-width: 0.25rem;--pa-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--pa-navbar-padding-y) var(--pa-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--pa-navbar-brand-padding-y);padding-bottom:var(--pa-navbar-brand-padding-y);margin-right:var(--pa-navbar-brand-margin-end);font-size:var(--pa-navbar-brand-font-size);color:var(--pa-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--pa-navbar-brand-hover-color)}.navbar-nav{--pa-nav-link-padding-x: 0;--pa-nav-link-padding-y: 0.5rem;--pa-nav-link-font-weight: ;--pa-nav-link-color: var(--pa-navbar-color);--pa-nav-link-hover-color: var(--pa-navbar-hover-color);--pa-nav-link-disabled-color: var(--pa-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--pa-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--pa-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--pa-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--pa-navbar-toggler-padding-y) var(--pa-navbar-toggler-padding-x);font-size:var(--pa-navbar-toggler-font-size);line-height:1;color:var(--pa-navbar-color);background-color:rgba(0,0,0,0);border:var(--pa-border-width) solid var(--pa-navbar-toggler-border-color);border-radius:var(--pa-navbar-toggler-border-radius);transition:var(--pa-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--pa-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--pa-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--pa-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--pa-navbar-color: rgba(255, 255, 255, 0.55);--pa-navbar-hover-color: rgba(255, 255, 255, 0.75);--pa-navbar-disabled-color: rgba(255, 255, 255, 0.25);--pa-navbar-active-color: #fff;--pa-navbar-brand-color: #fff;--pa-navbar-brand-hover-color: #fff;--pa-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.badge{--pa-badge-padding-x: 0.65em;--pa-badge-padding-y: 0.35em;--pa-badge-font-size:0.75em;--pa-badge-font-weight: 700;--pa-badge-color: #fff;--pa-badge-border-radius: var(--pa-border-radius);display:inline-block;padding:var(--pa-badge-padding-y) var(--pa-badge-padding-x);font-size:var(--pa-badge-font-size);font-weight:var(--pa-badge-font-weight);line-height:1;color:var(--pa-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--pa-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--pa-alert-bg: transparent;--pa-alert-padding-x: 1rem;--pa-alert-padding-y: 1rem;--pa-alert-margin-bottom: 1rem;--pa-alert-color: inherit;--pa-alert-border-color: transparent;--pa-alert-border: var(--pa-border-width) solid var(--pa-alert-border-color);--pa-alert-border-radius: var(--pa-border-radius);--pa-alert-link-color: inherit;position:relative;padding:var(--pa-alert-padding-y) var(--pa-alert-padding-x);margin-bottom:var(--pa-alert-margin-bottom);color:var(--pa-alert-color);background-color:var(--pa-alert-bg);border:var(--pa-alert-border);border-radius:var(--pa-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--pa-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--pa-alert-color: var(--pa-primary-text-emphasis);--pa-alert-bg: var(--pa-primary-bg-subtle);--pa-alert-border-color: var(--pa-primary-border-subtle);--pa-alert-link-color: var(--pa-primary-text-emphasis)}.alert-secondary{--pa-alert-color: var(--pa-secondary-text-emphasis);--pa-alert-bg: var(--pa-secondary-bg-subtle);--pa-alert-border-color: var(--pa-secondary-border-subtle);--pa-alert-link-color: var(--pa-secondary-text-emphasis)}.alert-success{--pa-alert-color: var(--pa-success-text-emphasis);--pa-alert-bg: var(--pa-success-bg-subtle);--pa-alert-border-color: var(--pa-success-border-subtle);--pa-alert-link-color: var(--pa-success-text-emphasis)}.alert-info{--pa-alert-color: var(--pa-info-text-emphasis);--pa-alert-bg: var(--pa-info-bg-subtle);--pa-alert-border-color: var(--pa-info-border-subtle);--pa-alert-link-color: var(--pa-info-text-emphasis)}.alert-warning{--pa-alert-color: var(--pa-warning-text-emphasis);--pa-alert-bg: var(--pa-warning-bg-subtle);--pa-alert-border-color: var(--pa-warning-border-subtle);--pa-alert-link-color: var(--pa-warning-text-emphasis)}.alert-danger{--pa-alert-color: var(--pa-danger-text-emphasis);--pa-alert-bg: var(--pa-danger-bg-subtle);--pa-alert-border-color: var(--pa-danger-border-subtle);--pa-alert-link-color: var(--pa-danger-text-emphasis)}.alert-light{--pa-alert-color: var(--pa-light-text-emphasis);--pa-alert-bg: var(--pa-light-bg-subtle);--pa-alert-border-color: var(--pa-light-border-subtle);--pa-alert-link-color: var(--pa-light-text-emphasis)}.alert-dark{--pa-alert-color: var(--pa-dark-text-emphasis);--pa-alert-bg: var(--pa-dark-bg-subtle);--pa-alert-border-color: var(--pa-dark-border-subtle);--pa-alert-link-color: var(--pa-dark-text-emphasis)}.btn-close{--pa-btn-close-color: #000;--pa-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--pa-btn-close-opacity: 0.5;--pa-btn-close-hover-opacity: 0.75;--pa-btn-close-focus-shadow: 0 0 0 0.25rem rgba(2, 26, 52, 0.25);--pa-btn-close-focus-opacity: 1;--pa-btn-close-disabled-opacity: 0.25;--pa-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--pa-btn-close-color);background:rgba(0,0,0,0) var(--pa-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--pa-btn-close-opacity)}.btn-close:hover{color:var(--pa-btn-close-color);text-decoration:none;opacity:var(--pa-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--pa-btn-close-focus-shadow);opacity:var(--pa-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:var(--pa-btn-close-disabled-opacity)}.btn-close-white{filter:var(--pa-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--pa-btn-close-white-filter)}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--pa-primary-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--pa-secondary-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--pa-success-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--pa-info-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--pa-warning-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--pa-danger-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--pa-light-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--pa-dark-rgb), var(--pa-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--pa-primary-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-primary-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(2, 21, 42, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(2, 21, 42, var(--pa-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--pa-secondary-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-secondary-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(6, 76, 118, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(6, 76, 118, var(--pa-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--pa-success-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-success-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, var(--pa-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--pa-info-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-info-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, var(--pa-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--pa-warning-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-warning-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, var(--pa-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--pa-danger-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-danger-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, var(--pa-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--pa-light-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-light-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--pa-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--pa-dark-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-dark-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--pa-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--pa-focus-ring-x, 0) var(--pa-focus-ring-y, 0) var(--pa-focus-ring-blur, 0) var(--pa-focus-ring-width) var(--pa-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--pa-link-color-rgb), var(--pa-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--pa-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--pa-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--pa-aspect-ratio: 100%}.ratio-4x3{--pa-aspect-ratio: 75%}.ratio-16x9{--pa-aspect-ratio: 56.25%}.ratio-21x9{--pa-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--pa-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:var(--pa-box-shadow) !important}.shadow-sm{box-shadow:var(--pa-box-shadow-sm) !important}.shadow-lg{box-shadow:var(--pa-box-shadow-lg) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--pa-focus-ring-color: rgba(var(--pa-primary-rgb), var(--pa-focus-ring-opacity))}.focus-ring-secondary{--pa-focus-ring-color: rgba(var(--pa-secondary-rgb), var(--pa-focus-ring-opacity))}.focus-ring-success{--pa-focus-ring-color: rgba(var(--pa-success-rgb), var(--pa-focus-ring-opacity))}.focus-ring-info{--pa-focus-ring-color: rgba(var(--pa-info-rgb), var(--pa-focus-ring-opacity))}.focus-ring-warning{--pa-focus-ring-color: rgba(var(--pa-warning-rgb), var(--pa-focus-ring-opacity))}.focus-ring-danger{--pa-focus-ring-color: rgba(var(--pa-danger-rgb), var(--pa-focus-ring-opacity))}.focus-ring-light{--pa-focus-ring-color: rgba(var(--pa-light-rgb), var(--pa-focus-ring-opacity))}.focus-ring-dark{--pa-focus-ring-color: rgba(var(--pa-dark-rgb), var(--pa-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--pa-border-opacity: 1;border-color:rgba(var(--pa-primary-rgb), var(--pa-border-opacity)) !important}.border-secondary{--pa-border-opacity: 1;border-color:rgba(var(--pa-secondary-rgb), var(--pa-border-opacity)) !important}.border-success{--pa-border-opacity: 1;border-color:rgba(var(--pa-success-rgb), var(--pa-border-opacity)) !important}.border-info{--pa-border-opacity: 1;border-color:rgba(var(--pa-info-rgb), var(--pa-border-opacity)) !important}.border-warning{--pa-border-opacity: 1;border-color:rgba(var(--pa-warning-rgb), var(--pa-border-opacity)) !important}.border-danger{--pa-border-opacity: 1;border-color:rgba(var(--pa-danger-rgb), var(--pa-border-opacity)) !important}.border-light{--pa-border-opacity: 1;border-color:rgba(var(--pa-light-rgb), var(--pa-border-opacity)) !important}.border-dark{--pa-border-opacity: 1;border-color:rgba(var(--pa-dark-rgb), var(--pa-border-opacity)) !important}.border-black{--pa-border-opacity: 1;border-color:rgba(var(--pa-black-rgb), var(--pa-border-opacity)) !important}.border-white{--pa-border-opacity: 1;border-color:rgba(var(--pa-white-rgb), var(--pa-border-opacity)) !important}.border-primary-subtle{border-color:var(--pa-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--pa-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--pa-success-border-subtle) !important}.border-info-subtle{border-color:var(--pa-info-border-subtle) !important}.border-warning-subtle{border-color:var(--pa-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--pa-danger-border-subtle) !important}.border-light-subtle{border-color:var(--pa-light-border-subtle) !important}.border-dark-subtle{border-color:var(--pa-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--pa-border-opacity: 0.1}.border-opacity-25{--pa-border-opacity: 0.25}.border-opacity-50{--pa-border-opacity: 0.5}.border-opacity-75{--pa-border-opacity: 0.75}.border-opacity-100{--pa-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--pa-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--pa-text-opacity: 1;color:rgba(var(--pa-primary-rgb), var(--pa-text-opacity)) !important}.text-secondary{--pa-text-opacity: 1;color:rgba(var(--pa-secondary-rgb), var(--pa-text-opacity)) !important}.text-success{--pa-text-opacity: 1;color:rgba(var(--pa-success-rgb), var(--pa-text-opacity)) !important}.text-info{--pa-text-opacity: 1;color:rgba(var(--pa-info-rgb), var(--pa-text-opacity)) !important}.text-warning{--pa-text-opacity: 1;color:rgba(var(--pa-warning-rgb), var(--pa-text-opacity)) !important}.text-danger{--pa-text-opacity: 1;color:rgba(var(--pa-danger-rgb), var(--pa-text-opacity)) !important}.text-light{--pa-text-opacity: 1;color:rgba(var(--pa-light-rgb), var(--pa-text-opacity)) !important}.text-dark{--pa-text-opacity: 1;color:rgba(var(--pa-dark-rgb), var(--pa-text-opacity)) !important}.text-black{--pa-text-opacity: 1;color:rgba(var(--pa-black-rgb), var(--pa-text-opacity)) !important}.text-white{--pa-text-opacity: 1;color:rgba(var(--pa-white-rgb), var(--pa-text-opacity)) !important}.text-body{--pa-text-opacity: 1;color:rgba(var(--pa-body-color-rgb), var(--pa-text-opacity)) !important}.text-muted{--pa-text-opacity: 1;color:var(--pa-secondary-color) !important}.text-black-50{--pa-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--pa-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--pa-text-opacity: 1;color:var(--pa-secondary-color) !important}.text-body-tertiary{--pa-text-opacity: 1;color:var(--pa-tertiary-color) !important}.text-body-emphasis{--pa-text-opacity: 1;color:var(--pa-emphasis-color) !important}.text-reset{--pa-text-opacity: 1;color:inherit !important}.text-opacity-25{--pa-text-opacity: 0.25}.text-opacity-50{--pa-text-opacity: 0.5}.text-opacity-75{--pa-text-opacity: 0.75}.text-opacity-100{--pa-text-opacity: 1}.text-primary-emphasis{color:var(--pa-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--pa-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--pa-success-text-emphasis) !important}.text-info-emphasis{color:var(--pa-info-text-emphasis) !important}.text-warning-emphasis{color:var(--pa-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--pa-danger-text-emphasis) !important}.text-light-emphasis{color:var(--pa-light-text-emphasis) !important}.text-dark-emphasis{color:var(--pa-dark-text-emphasis) !important}.link-opacity-10{--pa-link-opacity: 0.1}.link-opacity-10-hover:hover{--pa-link-opacity: 0.1}.link-opacity-25{--pa-link-opacity: 0.25}.link-opacity-25-hover:hover{--pa-link-opacity: 0.25}.link-opacity-50{--pa-link-opacity: 0.5}.link-opacity-50-hover:hover{--pa-link-opacity: 0.5}.link-opacity-75{--pa-link-opacity: 0.75}.link-opacity-75-hover:hover{--pa-link-opacity: 0.75}.link-opacity-100{--pa-link-opacity: 1}.link-opacity-100-hover:hover{--pa-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-primary{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-primary-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-secondary{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-secondary-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-success{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-success-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-info{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-info-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-warning{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-warning-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-danger{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-danger-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-light{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-light-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-dark{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-dark-rgb), var(--pa-link-underline-opacity)) !important}.link-underline{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-link-color-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--pa-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--pa-link-underline-opacity: 0}.link-underline-opacity-10{--pa-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--pa-link-underline-opacity: 0.1}.link-underline-opacity-25{--pa-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--pa-link-underline-opacity: 0.25}.link-underline-opacity-50{--pa-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--pa-link-underline-opacity: 0.5}.link-underline-opacity-75{--pa-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--pa-link-underline-opacity: 0.75}.link-underline-opacity-100{--pa-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--pa-link-underline-opacity: 1}.bg-primary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-primary-rgb), var(--pa-bg-opacity)) !important}.bg-secondary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-secondary-rgb), var(--pa-bg-opacity)) !important}.bg-success{--pa-bg-opacity: 1;background-color:rgba(var(--pa-success-rgb), var(--pa-bg-opacity)) !important}.bg-info{--pa-bg-opacity: 1;background-color:rgba(var(--pa-info-rgb), var(--pa-bg-opacity)) !important}.bg-warning{--pa-bg-opacity: 1;background-color:rgba(var(--pa-warning-rgb), var(--pa-bg-opacity)) !important}.bg-danger{--pa-bg-opacity: 1;background-color:rgba(var(--pa-danger-rgb), var(--pa-bg-opacity)) !important}.bg-light{--pa-bg-opacity: 1;background-color:rgba(var(--pa-light-rgb), var(--pa-bg-opacity)) !important}.bg-dark{--pa-bg-opacity: 1;background-color:rgba(var(--pa-dark-rgb), var(--pa-bg-opacity)) !important}.bg-black{--pa-bg-opacity: 1;background-color:rgba(var(--pa-black-rgb), var(--pa-bg-opacity)) !important}.bg-white{--pa-bg-opacity: 1;background-color:rgba(var(--pa-white-rgb), var(--pa-bg-opacity)) !important}.bg-body{--pa-bg-opacity: 1;background-color:rgba(var(--pa-body-bg-rgb), var(--pa-bg-opacity)) !important}.bg-transparent{--pa-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-secondary-bg-rgb), var(--pa-bg-opacity)) !important}.bg-body-tertiary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-tertiary-bg-rgb), var(--pa-bg-opacity)) !important}.bg-opacity-10{--pa-bg-opacity: 0.1}.bg-opacity-25{--pa-bg-opacity: 0.25}.bg-opacity-50{--pa-bg-opacity: 0.5}.bg-opacity-75{--pa-bg-opacity: 0.75}.bg-opacity-100{--pa-bg-opacity: 1}.bg-primary-subtle{background-color:var(--pa-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--pa-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--pa-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--pa-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--pa-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--pa-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--pa-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--pa-dark-bg-subtle) !important}.bg-gradient{background-image:var(--pa-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--pa-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--pa-border-radius-sm) !important}.rounded-2{border-radius:var(--pa-border-radius) !important}.rounded-3{border-radius:var(--pa-border-radius-lg) !important}.rounded-4{border-radius:var(--pa-border-radius-xl) !important}.rounded-5{border-radius:var(--pa-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--pa-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--pa-border-radius) !important;border-top-right-radius:var(--pa-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--pa-border-radius-sm) !important;border-top-right-radius:var(--pa-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--pa-border-radius) !important;border-top-right-radius:var(--pa-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--pa-border-radius-lg) !important;border-top-right-radius:var(--pa-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--pa-border-radius-xl) !important;border-top-right-radius:var(--pa-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--pa-border-radius-xxl) !important;border-top-right-radius:var(--pa-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--pa-border-radius-pill) !important;border-top-right-radius:var(--pa-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--pa-border-radius) !important;border-bottom-right-radius:var(--pa-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--pa-border-radius-sm) !important;border-bottom-right-radius:var(--pa-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--pa-border-radius) !important;border-bottom-right-radius:var(--pa-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--pa-border-radius-lg) !important;border-bottom-right-radius:var(--pa-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--pa-border-radius-xl) !important;border-bottom-right-radius:var(--pa-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--pa-border-radius-xxl) !important;border-bottom-right-radius:var(--pa-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--pa-border-radius-pill) !important;border-bottom-right-radius:var(--pa-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--pa-border-radius) !important;border-bottom-left-radius:var(--pa-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--pa-border-radius-sm) !important;border-bottom-left-radius:var(--pa-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--pa-border-radius) !important;border-bottom-left-radius:var(--pa-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--pa-border-radius-lg) !important;border-bottom-left-radius:var(--pa-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--pa-border-radius-xl) !important;border-bottom-left-radius:var(--pa-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--pa-border-radius-xxl) !important;border-bottom-left-radius:var(--pa-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--pa-border-radius-pill) !important;border-bottom-left-radius:var(--pa-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--pa-border-radius) !important;border-top-left-radius:var(--pa-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--pa-border-radius-sm) !important;border-top-left-radius:var(--pa-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--pa-border-radius) !important;border-top-left-radius:var(--pa-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--pa-border-radius-lg) !important;border-top-left-radius:var(--pa-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--pa-border-radius-xl) !important;border-top-left-radius:var(--pa-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--pa-border-radius-xxl) !important;border-top-left-radius:var(--pa-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--pa-border-radius-pill) !important;border-top-left-radius:var(--pa-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}body{font-family:"Open Sans",sans-serif;font-weight:400;color:var(--text-color);background-color:var(--bg-color);max-width:1200px;margin:0 auto}.btn-primary{color:var(--text-color-reverse);background-color:var(--primary-color);border-color:var(--primary-color)}.btn-outline-primary{color:var(--primary-color);background:none;border-color:var(--primary-color)}.btn-outline-primary:hover{background-color:var(--primary-color);color:var(--text-color-reverse)}.btn-secondary{color:#fff;background-color:var(--secondary-color);border-color:var(--secondary-color)}.navbar .nav-top{height:86px}.navbar .fixed-menu{width:220px}.navbar .logo img{width:200px}a{text-decoration:underline;color:var(--link-color)}a:hover{color:var(--link-hover-color)}a:active{color:var(--link-color)}h1,.h1,h2,.h2{font-weight:500;line-height:1.25;padding-bottom:12px;padding-top:14px}h1,.h1{font-weight:600}h3,.h3{padding-top:16px}.motto .title{font-weight:600;font-size:32px;padding-top:36px}.motto .motto{font-weight:500;font-size:20px}.motto .short{font-weight:500;font-size:12px}.btn-fixed{border-width:2px;border-style:solid;width:220px;height:46px;text-transform:uppercase;font-weight:700;border-radius:5px 5px 5px 5px;vertical-align:middle;line-height:42px;padding:0;margin:16px;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)}.pactus-video video{max-width:100%;width:100%;margin-left:auto;margin-right:auto;display:block}.highlighter-rouge .highlight pre{background-color:#0d1117;padding:32px 12px 12px 12px;color:#ccc;position:relative;overflow:auto;direction:ltr}.highlighter-rouge .highlight pre button{position:absolute;top:6px;right:8px;padding:2px;background-color:gray;color:#404040;border-radius:5px;border:ridge 1px gray}.highlighter-rouge .highlight pre button:hover{cursor:pointer;background-color:#bcbabb}.nav-tabs{border-color:#0d1117 !important}.nav-tabs .nav-link{border-width:0 !important}.nav-tabs .nav-link:not(.active):hover{color:#fff !important;background-color:gray !important}.nav-tabs .active{color:#fff !important;background-color:#0d1117 !important}.table thead tr th{font-weight:700;background-color:var(--bg-color) !important}blockquote{background:#eee;border-left:10px solid #ccc;padding:16px;quotes:"“" "”" "‘" "’"}blockquote:before{color:#ccc;content:open-quote;font-size:64px;line-height:.1em;vertical-align:-0.4em}blockquote p{margin-top:16px}blockquote p:first-child{display:inline;padding-bottom:160px;margin-bottom:160px}.footer{background-color:var(--primary-color);color:var(--text-color-reverse)}.footer .section{font-size:1.75rem;font-weight:500;line-height:1.25;padding-bottom:20px}.footer li{padding-bottom:8px}.footer.anchor a{color:var(--text-color-reverse)}.footer.anchor a:link{color:var(--text-color-reverse);background-color:rgba(0,0,0,0);text-decoration:none}.footer.anchor a:hover{color:var(--text-color-reverse)}.footer .legal{color:var(--text-color-reverse);font-size:12px}.community img{margin:4px}.community_ran img{margin:4px}#btn-back-to-top{background-color:var(--primary-color);color:var(--bg-color);position:fixed;bottom:20px;right:20px;display:none}.edit-bar{padding-top:30px}.edit-bar .edit-btn,.edit-bar .edit-btn>a:hover{color:var(--text-color);text-decoration:none}.all-posts .post-link{padding-bottom:8px}.blog-post .post-date{padding-bottom:10px;color:gray}.blog-post .content{padding-top:22px;min-height:600px}.partners img{padding-top:24px}.sensifai{max-width:300px}.hexdump{font-family:monospace;font-size:12px;padding-bottom:1rem}.hexdump .offset{border-right:2px solid #708090;color:#789}.hexdump .ascii{color:dimgray}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.faq h3,.faq .h3{margin-top:20px;padding-top:16px;border-top:1px solid var(--primary-color)}.faq a{text-decoration:none}.faq .group{padding-top:16px}.faq .group .col{font-weight:600;padding-bottom:10px}.faq .separator{padding-top:12px;padding-bottom:12px}.faq .read_more{padding-top:12px}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.toc .btn,.toc a{color:var(--text-color)}.toc .btn-section{padding:.25rem .5rem;font-weight:600;background-color:rgba(0,0,0,0)}.toc .btn-section:hover,.toc .btn-section:focus{background-color:var(--bg-color)}.toc .btn-page a{padding:.1875rem .5rem;margin-top:.125rem;margin-left:1.25rem}.toc .btn-page a:hover,.toc .btn-page a:focus,.toc .btn-page .selected{background-color:var(--bg-color)}.timeline{position:relative}.timeline::after{content:"";position:absolute;width:6px;background-color:#939597;top:0;bottom:0;left:50%;margin-left:-3px}.timeline-card{position:relative;width:50%}.timeline-card .card{border:1px solid rgba(0,0,0,.175);border-radius:5px;background-color:#eee;color:#4c4c4c}.timeline-card .card a{color:#4c4c4c}.timeline-card .card .text-muted{color:#898b8d !important}.timeline-card .card-title{padding-bottom:12px;font-size:1.1rem;font-weight:500}.timeline-card::after{line-height:38px;font-size:24px;position:absolute;text-align:center;width:48px;height:48px;right:-24px;top:15px;border-radius:50%;z-index:1}.timeline-card.completed::after{content:"✅";background-color:#eee;border:5px solid #77b255}.timeline-card.ongoing::after{content:"🚧";background-color:#eee;border:5px solid #ffcb4b}.timeline-card.upcoming::after{content:"⏳";background-color:#eee;border:5px solid #478ec2}.timeline-card.left{padding:0px 50px 20px 0px;left:0}.timeline-card.right{padding:0px 0px 20px 50px;left:50%}.timeline-card.left::before{content:"";position:absolute;height:20px;width:20px;background-color:#eee;box-sizing:border-box;transform:rotate(45deg) translate(-50%);top:34px;z-index:0;right:33px;border-right:1px solid rgba(0,0,0,.175);border-top:1px solid rgba(0,0,0,.175)}.timeline-card.right::before{content:"";position:absolute;height:20px;width:20px;background-color:#eee !important;box-sizing:border-box;transform:rotate(45deg) translate(-50%);top:33px;z-index:0;left:48px;border-left:1px solid rgba(0,0,0,.175);border-bottom:1px solid rgba(0,0,0,.175)}.timeline-card.right::after{left:-24px}@media screen and (max-width: 600px){.timeline::after{left:31px}.timeline-card{width:100%;padding-left:80px !important;padding-right:25px !important}.timeline-card::before{left:77px !important}.timeline-card.left::after,.timeline-card.right::after{left:8px !important}.timeline-card.left::before{border-right:none;border-top:none;border-left:1px solid rgba(0,0,0,.175);border-bottom:1px solid rgba(0,0,0,.175)}.timeline-card.right::before{right:auto}.timeline-card.right{left:0%}}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.learn h2,.learn .h2{border-top:1px solid var(--primary-color)}[data-bs-theme=dark] blockquote{background:#14171c}[data-bs-theme=dark] .toc .btn-section::before{--svg-color: var(--text)}[data-bs-theme=dark] .fa-linux{color:#fff}/*# sourceMappingURL=custom.css.map */ \ No newline at end of file diff --git a/assets/css/custom.css.map b/assets/css/custom.css.map new file mode 100644 index 000000000..e0c48830b --- /dev/null +++ b/assets/css/custom.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../_sass/_vars.scss","../../../node_modules/bootstrap/scss/_root.scss","../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../node_modules/bootstrap/scss/_reboot.scss","../../../node_modules/bootstrap/scss/_variables.scss","../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../node_modules/bootstrap/scss/_type.scss","../../../node_modules/bootstrap/scss/mixins/_lists.scss","../../../node_modules/bootstrap/scss/_images.scss","../../../node_modules/bootstrap/scss/mixins/_image.scss","../../../node_modules/bootstrap/scss/mixins/_box-shadow.scss","../../../node_modules/bootstrap/scss/_containers.scss","../../../node_modules/bootstrap/scss/mixins/_container.scss","../../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../../node_modules/bootstrap/scss/_grid.scss","../../../node_modules/bootstrap/scss/mixins/_grid.scss","../../../node_modules/bootstrap/scss/_tables.scss","../../../node_modules/bootstrap/scss/mixins/_table-variants.scss","../../../node_modules/bootstrap/scss/forms/_labels.scss","../../../node_modules/bootstrap/scss/forms/_form-text.scss","../../../node_modules/bootstrap/scss/forms/_form-control.scss","../../../node_modules/bootstrap/scss/mixins/_transition.scss","../../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../../node_modules/bootstrap/scss/forms/_form-select.scss","../../../node_modules/bootstrap/scss/forms/_form-check.scss","../../../node_modules/bootstrap/scss/forms/_form-range.scss","../../../node_modules/bootstrap/scss/forms/_floating-labels.scss","../../../node_modules/bootstrap/scss/forms/_input-group.scss","../../../node_modules/bootstrap/scss/mixins/_forms.scss","../../../node_modules/bootstrap/scss/_buttons.scss","../../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../../node_modules/bootstrap/scss/_transitions.scss","../../../node_modules/bootstrap/scss/_dropdown.scss","../../../node_modules/bootstrap/scss/mixins/_caret.scss","../../../node_modules/bootstrap/scss/_button-group.scss","../../../node_modules/bootstrap/scss/_nav.scss","../../../node_modules/bootstrap/scss/_navbar.scss","../../../node_modules/bootstrap/scss/_badge.scss","../../../node_modules/bootstrap/scss/_alert.scss","../../../node_modules/bootstrap/scss/_close.scss","../../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../../node_modules/bootstrap/scss/helpers/_color-bg.scss","../../../node_modules/bootstrap/scss/helpers/_colored-links.scss","../../../node_modules/bootstrap/scss/helpers/_focus-ring.scss","../../../node_modules/bootstrap/scss/helpers/_icon-link.scss","../../../node_modules/bootstrap/scss/helpers/_ratio.scss","../../../node_modules/bootstrap/scss/helpers/_position.scss","../../../node_modules/bootstrap/scss/helpers/_stacks.scss","../../../node_modules/bootstrap/scss/helpers/_visually-hidden.scss","../../../node_modules/bootstrap/scss/mixins/_visually-hidden.scss","../../../node_modules/bootstrap/scss/helpers/_stretched-link.scss","../../../node_modules/bootstrap/scss/helpers/_text-truncation.scss","../../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../../node_modules/bootstrap/scss/helpers/_vr.scss","../../../node_modules/bootstrap/scss/mixins/_utilities.scss","../../../node_modules/bootstrap/scss/utilities/_api.scss","../../_sass/_styles.scss","../../_sass/_hexdump.scss","../../_sass/_faq.scss","../../_sass/_toc.scss","../../_sass/_roadmap.scss","../../_sass/_learn.scss","../../_sass/dark_mode.scss"],"names":[],"mappings":"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,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBK/OR,eCvDE,eACA,gBD2DF,aC5DE,eACA,gBD8DF,kBACE,qBAEA,mCACE,aFsoB0B,ME5nB9B,YL8MM,UALI,QKvMR,yBAIF,YACE,cFiUO,KH1HH,UALI,QK/LR,wBACE,gBAIJ,mBACE,iBACA,cFuTO,KH1HH,UALI,QKtLR,MFtFS,QEwFT,2BACE,aEhGJ,WCIE,eAGA,YDDF,eACE,QJ6jDkC,OI5jDlC,iBJ6jDkC,kBI5jDlC,2DHGE,sCKLE,WARW,wBDKf,eAGA,YDcF,QAEE,qBAGF,YACE,oBACA,cAGF,gBPyPM,UALI,QOlPR,MJgjDkC,0BOllDlC,mGCHA,sBACA,iBACA,WACA,0CACA,yCACA,kBACA,iBCsDE,yBF5CE,yBACE,UPkee,OSvbnB,yBF5CE,uCACE,UPkee,OSvbnB,yBF5CE,qDACE,UPkee,OSvbnB,0BF5CE,mEACE,UPkee,QSvbnB,0BF5CE,kFACE,UPkee,QUlfvB,MAEI,2JAKF,KCNA,sBACA,iBACA,aACA,eAEA,uCACA,2CACA,0CDEE,OCOF,cACA,WACA,eACA,0CACA,yCACA,8BA+CI,KACE,YAGF,iBApCJ,cACA,WAcA,cACE,cACA,WAFF,cACE,cACA,UAFF,cACE,cACA,mBAFF,cACE,cACA,UAFF,cACE,cACA,UAFF,cACE,cACA,mBA+BE,UAhDJ,cACA,WAqDQ,OAhEN,cACA,kBA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,UA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,UA+DM,OAhE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AEE,sBAPF,mBAEE,oBAGF,mBAEE,oBAPF,mBAEE,sBAGF,mBAEE,sBAPF,mBAEE,oBAGF,mBAEE,qBCrHV,OAEE,+BACA,4BACA,gCACA,6BAEA,2CACA,iCACA,gDACA,kCACA,mDACA,gEACA,kDACA,8DACA,iDACA,+DAEA,WACA,cZkYO,KYjYP,eZusB4B,IYtsB5B,0CAOA,yBACE,oBAEA,qFACA,oCACA,oBZ+sB0B,uBY9sB1B,2GAGF,aACE,uBAGF,aACE,sBAIJ,qBACE,6DAOF,aACE,iBAUA,4BACE,sBAeF,gCACE,sCAGA,kCACE,sCAOJ,oCACE,sBAGF,qCACE,mBAUF,2CACE,qDACA,+CAMF,yDACE,qDACA,+CAQJ,cACE,qDACA,+CAQA,8BACE,oDACA,8CC5IF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,iBAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,YAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,cAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,aAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,YAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CDiJA,kBACE,gBACA,iCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,6BGyFA,qBACE,gBACA,kCH3FF,6BGyFA,sBACE,gBACA,kCEnKN,YACE,cdu2BsC,Mc91BxC,gBACE,oDACA,uDACA,gBjB8QI,UALI,QiBrQR,Yd+lB4B,Ic3lB9B,mBACE,kDACA,qDjBoQI,UALI,QiB3PV,mBACE,mDACA,sDjB8PI,UALI,SkBtRV,WACE,Wf+1BsC,OHrkBlC,UALI,QkBjRR,Mf+1BsC,0BgBp2BxC,cACE,cACA,WACA,uBnBwRI,UALI,KmBhRR,YhBkmB4B,IgBjmB5B,YhBymB4B,IgBxmB5B,MhB43BsC,qBgB33BtC,gBACA,iBhBq3BsC,kBgBp3BtC,4BACA,2DfGE,sCKLE,WARW,2BWUX,WDMJ,0DCFI,uCDhBN,cCiBQ,iBDGN,yBACE,gBAEA,wDACE,eAKJ,oBACE,MhBs2BoC,qBgBr2BpC,iBhBg2BoC,kBgB/1BpC,ahB82BoC,QgB72BpC,UVvBE,WARW,0DUwCf,2CAME,eAMA,aAKA,SAKF,qCACE,cACA,UAIF,2BACE,MhB40BoC,0BgB10BpC,UAQF,uBAEE,iBhB8yBoC,uBgB3yBpC,UAIF,oCACE,uBACA,0BACA,kBhBorB0B,OgBnrB1B,MhBsyBoC,qBkBp4BtC,iBlBqiCgC,sBgBr8B9B,oBACA,qBACA,mBACA,eACA,wBhBgsB0B,uBgB/rB1B,gBCzFE,WD0FF,mHCtFE,uCD0EJ,oCCzEM,iBDwFN,yEACE,iBhB47B8B,uBgBn7BlC,wBACE,cACA,WACA,kBACA,gBACA,YhBwf4B,IgBvf5B,MhB2xBsC,qBgB1xBtC,+BACA,2BACA,sCAEA,8BACE,UAGF,gFAEE,gBACA,eAWJ,iBACE,WhB4wBsC,wDgB3wBtC,qBnByII,UALI,SIvQN,yCeuIF,uCACE,qBACA,wBACA,kBhBooB0B,MgBhoB9B,iBACE,WhBgwBsC,sDgB/vBtC,mBnB4HI,UALI,QIvQN,yCeoJF,uCACE,mBACA,qBACA,kBhB2nB0B,KgBnnB5B,sBACE,WhB6uBoC,yDgB1uBtC,yBACE,WhB0uBoC,wDgBvuBtC,yBACE,WhBuuBoC,sDgBluBxC,oBACE,MhBquBsC,KgBpuBtC,OhB8tBsC,yDgB7tBtC,QhBilB4B,QgB/kB5B,mDACE,eAGF,uCACE,oBfvLA,sCe2LF,0CACE,oBf5LA,sCegMF,2ChB8sBsC,wDgB7sBtC,2ChB8sBsC,sDmB75BxC,aACE,yPAEA,cACA,WACA,uCtBqRI,UALI,KsB7QR,YnB+lB4B,ImB9lB5B,YnBsmB4B,ImBrmB5B,MnBy3BsC,qBmBx3BtC,gBACA,iBnBk3BsC,kBmBj3BtC,kFACA,4BACA,oBnB+9BkC,oBmB99BlC,gBnB+9BkC,UmB99BlC,2DlBHE,sCKLE,WARW,2BWUX,WESJ,0DFLI,uCEfN,aFgBQ,iBEMN,mBACE,anBs3BoC,QmBr3BpC,UbfE,WARW,0DagCf,0DAEE,cnB6uB0B,OmB5uB1B,sBAGF,sBAEE,iBnBu1BoC,uBmBl1BtC,4BACE,oBACA,uCAIJ,gBACE,YnBsuB4B,OmBruB5B,enBquB4B,OmBpuB5B,anBquB4B,MHlgBxB,UALI,SIvQN,yCkB8CJ,gBACE,YnBkuB4B,MmBjuB5B,enBiuB4B,MmBhuB5B,anBiuB4B,KHtgBxB,UALI,QIvQN,yCkBwDA,kCACE,yPCxEN,YACE,cACA,WpBq6BwC,OoBp6BxC,apBq6BwC,MoBp6BxC,cpBq6BwC,QoBn6BxC,8BACE,WACA,mBAIJ,oBACE,cpB25BwC,MoB15BxC,eACA,iBAEA,sCACE,YACA,oBACA,cAIJ,kBACE,sCAEA,cACA,MpB04BwC,IoBz4BxC,OpBy4BwC,IoBx4BxC,iBACA,mBACA,gBACA,yCACA,+CACA,4BACA,2BACA,wBACA,OpB24BwC,oDoB14BxC,yBAGA,iCnB3BE,oBmB+BF,8BAEE,cpBm4BsC,IoBh4BxC,yBACE,OpB03BsC,gBoBv3BxC,wBACE,apBs1BoC,QoBr1BpC,UACA,WpB8foB,+BoB3ftB,0BACE,iBzBlEY,QyBmEZ,azBnEY,QyBqEZ,yCAII,wPAIJ,sCAII,gKAKN,+CACE,iBzBvFY,QyBwFZ,azBxFY,QyB6FV,kPAIJ,2BACE,oBACA,YACA,QpBk2BuC,GoB31BvC,2FACE,eACA,QpBy1BqC,GoB30B3C,aACE,apBo1BgC,MoBl1BhC,+BACE,4KAEA,MpB80B8B,IoB70B9B,mBACA,0CACA,gCnBjHA,kBgBHE,WGsHF,qCHlHE,uCG0GJ,+BHzGM,iBGmHJ,qCACE,8JAGF,uCACE,oBpB60B4B,aoBx0B1B,2JAKN,gCACE,cpBwzB8B,MoBvzB9B,eAEA,kDACE,oBACA,cAKN,mBACE,qBACA,apBsyBgC,KoBnyBlC,WACE,kBACA,sBACA,oBAIE,mDACE,oBACA,YACA,QpBspBwB,IoB/oB1B,8EACE,kLCnLN,YACE,WACA,cACA,UACA,gBACA,+BAEA,kBACE,UAIA,mDrB8gCuC,8CqB7gCvC,+CrB6gCuC,8CqB1gCzC,8BACE,SAGF,kCACE,MrB+/BuC,KqB9/BvC,OrB8/BuC,KqB7/BvC,oBACA,gBH1BF,iBvBJc,Q0BgCZ,OrB6/BuC,EC1gCvC,mBKLE,WARW,8BWUX,WImBF,4FJfE,uCIMJ,kCJLM,iBIgBJ,yCHjCF,iBlB8hCyC,QqBx/BzC,2CACE,MrBw+B8B,KqBv+B9B,OrBw+B8B,MqBv+B9B,oBACA,OrBu+B8B,QqBt+B9B,iBrBu+B8B,uBqBt+B9B,2BpB7BA,mBKLE,WARW,2Be+Cf,8BACE,MrBo+BuC,KqBn+BvC,OrBm+BuC,KqBl+BvC,gBHpDF,iBvBJc,Q0B0DZ,OrBm+BuC,EC1gCvC,mBKLE,WARW,8BWUX,WI6CF,4FJzCE,uCIiCJ,8BJhCM,iBI0CJ,qCH3DF,iBlB8hCyC,QqB99BzC,8BACE,MrB88B8B,KqB78B9B,OrB88B8B,MqB78B9B,oBACA,OrB68B8B,QqB58B9B,iBrB68B8B,uBqB58B9B,2BpBvDA,mBKLE,WARW,2BeyEf,qBACE,oBAEA,2CACE,iBrBg9BqC,0BqB78BvC,uCACE,iBrB48BqC,0BsBniC3C,eACE,kBAEA,gGAGE,OtBwiCoC,gDsBviCpC,WtBuiCoC,gDsBtiCpC,YtBuiCoC,KsBpiCtC,qBACE,kBACA,MACA,OACA,UACA,YACA,oBACA,gBACA,iBACA,uBACA,mBACA,oBACA,kDACA,qBLRE,WKSF,kDLLE,uCKTJ,qBLUM,iBKON,oEAEE,oBAEA,8FACE,oBAGF,oMAEE,YtB4gCkC,SsB3gClC,etB4gCkC,QsBzgCpC,sGACE,YtBugCkC,SsBtgClC,etBugCkC,QsBngCtC,4BACE,YtBigCoC,SsBhgCpC,etBigCo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ACA,6DACA,8BACA,8BACA,wCDyFA,aCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,UCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,aCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,YCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,WCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,yCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,UCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,sCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDmHA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,qCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,uBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,sCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,kBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,oBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,mBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,yCACA,4BACA,4BACA,sCACA,6DACA,iCACA,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UACA,sDAMJ,qBACE,qBACA,YACA,aACA,sBACA,kDACA,4BACA,2BACA,qBAGF,mBACE,yCACA,gBvB1HE,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,0BuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,0BuBsIA,mBAEI,iBACA,2BAEA,+BACE,mBAEA,8CACE,kBAGF,yCACE,kDACA,iDAIJ,sCACE,iBAGF,oCACE,wBACA,gBAGF,mCACE,aAGF,8BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,gDACE,aAGF,8CACE,aACA,YACA,UACA,oBAtDR,eAEI,iBACA,2BAEA,2BACE,mBAEA,0CACE,kBAGF,qCACE,kDACA,iDAIJ,kCACE,iBAGF,gCACE,wBACA,gBAGF,+BACE,aAGF,0BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,4CACE,aAGF,0CACE,aACA,YACA,UACA,mBAiBZ,yCAGE,6CACA,mDACA,sDACA,+BACA,8BACA,oCACA,2DACA,+QAME,0CACE,+QCxRN,OAEE,6BACA,6BpCuRI,qBALI,OoChRR,4BACA,uBACA,kDAGA,qBACA,4DpC+QI,UALI,0BoCxQR,wCACA,cACA,4BACA,kBACA,mBACA,wBhCJE,4CgCSF,aACE,aAKJ,YACE,kBACA,SChCF,OAEE,2BACA,2BACA,2BACA,+BACA,0BACA,qCACA,6EACA,kDACA,+BAGA,kBACA,4DACA,4CACA,4BACA,oCACA,8BjCHE,4CiCQJ,eAEE,cAIF,YACE,YlC6kB4B,IkC5kB5B,iCAQF,mBACE,clCo+C8B,KkCj+C9B,8BACE,kBACA,MACA,QACA,UACA,qBAQF,eACE,kDACA,2CACA,yDACA,uDAJF,iBACE,oDACA,6CACA,2DACA,yDAJF,eACE,kDACA,2CACA,yDACA,uDAJF,YACE,+CACA,wCACA,sDACA,oDAJF,eACE,kDACA,2CACA,yDACA,uDAJF,cACE,iDACA,0CACA,wDACA,sDAJF,aACE,gDACA,yCACA,uDACA,qDAJF,YACE,+CACA,wCACA,sDACA,oDC3DJ,WAEE,2BACA,qVACA,4BACA,mCACA,iEACA,gCACA,sCACA,wEAGA,uBACA,MnCmpD2B,ImClpD3B,OnCkpD2B,ImCjpD3B,oBACA,gCACA,0EACA,SlCJE,sBkCMF,oCAGA,iBACE,gCACA,qBACA,0CAGF,iBACE,UACA,4CACA,0CAGF,wCAEE,oBACA,iBACA,6CAQJ,iBAHE,wCASE,gCATF,wCC/CA,iBACE,cACA,WACA,WCHF,iBACE,sBACA,iFAFF,mBACE,sBACA,mFAFF,iBACE,sBACA,iFAFF,cACE,sBACA,8EAFF,iBACE,sBACA,iFAFF,gBACE,sBACA,gFAFF,eACE,sBACA,+EAFF,cACE,sBACA,8ECFF,cACE,wEACA,kGAGE,wCAGE,4DACA,sFATN,gBACE,0EACA,oGAGE,4CAGE,6DACA,uFATN,cACE,wEACA,kGAGE,wCAGE,8DACA,wFATN,WACE,qEACA,+FAGE,kCAGE,+DACA,yFATN,cACE,wEACA,kGAGE,wCAGE,+DACA,yFATN,aACE,uEACA,iGAGE,sCAGE,8DACA,wFATN,YACE,sEACA,gGAGE,oCAGE,gEACA,0FATN,WACE,qEACA,+FAGE,kCAGE,6DACA,uFAOR,oBACE,+EACA,yGAGE,oDAEE,kFACA,4GC1BN,kBACE,UAEA,kJCHF,WACE,oBACA,IxC6c4B,QwC5c5B,mBACA,kFACA,sBxC2c4B,MwC1c5B,2BAEA,eACE,cACA,MxCuc0B,IwCtc1B,OxCsc0B,IwCrc1B,kBvBIE,WuBHF,0BvBOE,uCuBZJ,evBaM,iBuBDJ,8DACE,mECnBN,OACE,kBACA,WAEA,eACE,cACA,mCACA,WAGF,SACE,kBACA,MACA,OACA,WACA,YAKF,WACE,wBADF,WACE,uBADF,YACE,0BADF,YACE,kCCrBJ,WACE,eACA,MACA,QACA,OACA,Q1CumCkC,K0CpmCpC,cACE,eACA,QACA,SACA,OACA,Q1C+lCkC,K0CvlChC,YACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,eACE,gBACA,SACA,Q1C6kC8B,KS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,0BiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,0BiCxCA,gBACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,mBACE,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aAGF,UACE,iBAEA,gDAEE,wBACA,qBAKF,sBACE,mBAKF,sBACE,oBACA,WAGF,oBACE,iBACA,iBAKF,cACE,iBAIJ,UACE,gBC3VF,SACE,sBACA,eACA,oBAGF,iBACE,+BACA,WAEF,gBACE,c1DRF,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD2D7DA,iBACE,gBACA,iBACA,0CAGF,OACE,qBAGF,YACE,iBAEA,iBACE,gBACA,oBAIJ,gBACE,iBACA,oBAGF,gBACE,iB3DzBJ,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD4D5DA,iBAEE,wBAGF,kBACE,qBACA,gBACA,+BAGF,gDAEE,iCAGF,iBACE,uBACA,mBACA,oBAGF,uEAGE,iCC1BJ,UACE,kBAGA,iBACE,WACA,kBACA,UACA,iBAXS,QAYT,MACA,SACA,SACA,iBAKJ,eACE,kBACA,UAEA,qBACE,kCACA,kBACA,sBACA,cAEA,uBACE,cAGF,iCACE,yBAIJ,2BACE,oBACA,iBACA,gBAIF,sBACE,iBACA,eACA,kBACA,kBACA,WACA,YACA,YACA,SACA,kBACA,UAGF,gCACE,YACA,sBACA,yBAGF,8BACE,aACA,sBACA,yBAGF,+BACE,YACA,sBACA,yBAIF,oBACE,0BACA,OAIF,qBACE,0BACA,SAIF,4BACE,WACA,kBACA,YACA,WACA,sBACA,sBACA,wCACA,SACA,UACA,WACA,wCACA,sCAIF,6BACE,WACA,kBACA,YACA,WACA,iCACA,sBACA,wCACA,SACA,UACA,UACA,uCACA,yCAIF,4BACE,WAKJ,qCAGE,iBACE,UAIF,eACE,WACA,6BACA,8BAGA,uBACE,qBAIF,uDAEE,oBAGF,4BACE,kBACA,gBACA,uCACA,yCAGF,6BACE,WAIF,qBACE,S7DlKN,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD8D7DA,qBACE,0CCHF,gCACE,mBAKA,+CACE,yBAIJ,+BACE","sourcesContent":["$primary-color: #021a34;\n$secondary-color: #075f94;\n\n:root {\n // -- Light\n --primary-color-light: #021a34;\n --secondary-color-light: #075f94;\n\n --bg-color-light: #edeef0;\n --bg-color-reverse-light: #021a34;\n --bg-color-tinted-light: #b0b2b4;\n\n --text-color-light: #4c4c4c;\n --text-color-reverse-light: #edeef0;\n --text-muted-color-light: #4c4c4c;\n\n --link-color-light: #4c4c4c;\n --link-hover-color-light: #6c6c6c;\n\n // -- Dark\n --primary-color-dark: #edeef0;\n --secondary-color-dark: #075f94;\n\n --bg-color-dark: #14171c;\n --bg-color-reverse-dark: #edeef0;\n --bg-color-tinted-dark: #627191;\n\n --text-color-dark: #edeef0;\n --text-color-reverse-dark: #14171c;\n --text-muted-color-dark: #edeef0;\n\n --link-color-dark: #edeef0;\n --link-hover-color-dark: #ffffff;\n}\n\n[data-bs-theme=\"light\"] {\n --primary-color: var(--primary-color-light);\n --secondary-color: var(--secondary-color-light);\n --bg-color-tinted: var(--bg-color-tinted-light);\n\n --bg-color: var(--bg-color-light);\n --bg-color-reverse: var(--bg-color-reverse-light);\n --text-color: var(--text-color-light);\n\n --text-color-reverse: var(--text-color-reverse-light);\n --text-muted-color: var(--text-muted-color-light);\n\n --link-color: var(--link-color-light);\n --link-hover-color: var(--link-hover-color-light);\n}\n\n[data-bs-theme=\"dark\"] {\n --primary-color: var(--primary-color-dark);\n --secondary-color: var(--secondary-color-dark);\n\n --bg-color: var(--bg-color-dark);\n --bg-color-reverse: var(--bg-color-reverse-dark);\n --bg-color-tinted: var(--bg-color-tinted-dark);\n\n --text-color: var(--text-color-dark);\n --text-color-reverse: var(--text-color-reverse-dark);\n --text-muted-color: var(--text-muted-color-dark);\n\n --link-color: var(--link-color-dark);\n --link-hover-color: var(--link-hover-color-dark);\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-` + + +

+ +
+ +
+
+
+
+

All posts

+ + + feed + +
+ +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + + +
+ +
+
+
+
+ + + + + diff --git a/browserconfig.xml b/browserconfig.xml new file mode 100644 index 000000000..b3930d0f0 --- /dev/null +++ b/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/community/index.html b/community/index.html new file mode 100644 index 000000000..1d179773d --- /dev/null +++ b/community/index.html @@ -0,0 +1,491 @@ + + + + + + + + + + + + + Community | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

Join the Pactus community

+ +

By joining the Pactus community, you become a part of a global network of innovators, thinkers, and doers who are all united by a shared vision of building a better future with blockchain technology. Whether you’re a developer, entrepreneur, investor, or simply a blockchain enthusiast, there’s a place for you here at Pactus.
So, let’s come together and make a difference!

+ + + +

To explore the communities managed by members of the community, you can follow the links below.

+ + + +
+
+
+
+ + + + + diff --git a/contributing/index.html b/contributing/index.html new file mode 100644 index 000000000..43a8b6cfe --- /dev/null +++ b/contributing/index.html @@ -0,0 +1,479 @@ + + + + + + + + + + + + + Contributing | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

Contributing

+ +

As an open-source platform, Pactus blockchain empowers from its community. +Whether you’re a developer, designer, or enthusiast, your contributions can make a meaningful impact.

+ +

There are several ways to support the Pactus project:

+ +

Run a Node

+ +

One of the most effective ways to contribute to the Pactus network is by running a node. +A “node” is a software program that downloads a copy of the Pactus blockchain and +ensure the network keeps running safe and decentralized.

+ +

These guides can help you to run and configure your node:

+ + + +

Become a Validator

+ +

Validators play an important role in the Pactus blockchain by verifying transactions and +adding them to the blockchain. +By becoming a validator, you can earn rewards +for contributing to the network’s security and decentralization.

+ +

To become a validator, you will need to stake a certain amount of Pactus coins. +These guides can help you to send a Bond transaction and stake some coins:

+ + + +

Develop

+ +

Pactus is an open-source project that welcomes and encourages contributions from developers. +By contributing to the project, you can help improve the Pactus platform and create new features that +benefit the entire community.

+ +

You can check our Contributing page +for more information on how to get involved and contribute to the project.

+ +

Translation

+ +

Another way to contribute to the Pactus project is by translating this website into other languages and +improving its content.

+ +

Spread the Word

+ +

The more people who know about Pactus, the more opportunities there are for collaboration and growth. +Share our project on social media, attend Pactus events, or simply tell your friends and colleagues about us.

+ +
+ +

Together, Let’s build a better future for blockchain technology.

+ + +
+
+
+
+ + + + + diff --git a/download/index.html b/download/index.html new file mode 100644 index 000000000..4416512aa --- /dev/null +++ b/download/index.html @@ -0,0 +1,596 @@ + + + + + + + + + + + + + Download | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

Download Pactus

+ +

On this page you can find how to download and get the latest version of the Pactus software.

+ +
+ +

🏗️ Compile from Source Code

+ +

Project Pactus is distributed as open source software, so the preferred way for installing it is to clone the source code from the GitHub repository and compile the source code.

+ +

Instructions for compiling Pactus is provided on the install page.

+ +
+ +

⬇️ Download Stable Releases

+ +

You can also download the latest stable releases of Pactus. These releases are updated automatically when a new version is released in GitHub repository.

+ +

Pactus Graphical User Interface (GUI)

+ +

You can run Pactus in a graphical user interface (GUI) mode and it is suitable for both beginners and advanced users.

+ +

Pactus Graphical User Interface (GUI)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
File nameKindOSArch
pactus-gui_1.3.0_darwin_amd64.tar.gzArchive macOS64-bit
pactus-gui_1.3.0_darwin_amd64.dmgDMG macOS64-bit
pactus-gui_1.3.0_darwin_arm64.tar.gzArchive macOSARM64
pactus-gui_1.3.0_darwin_arm64.dmgDMG macOSARM64
pactus-gui_1.3.0_linux_amd64.tar.gzArchive Linux64-bit
pactus-gui_1.3.0_linux_amd64.AppImageAppImage Linux64-bit
pactus-gui_1.3.0_windows_amd64.zipArchive Windows64-bit
pactus-gui_1.3.0_windows_amd64_installer.exeInstaller Windows64-bit
+ +
+Untrusted application

Be aware that the precompiled binaries are not shipped with any code signing certificate. Most probability in Windows and macOS the downloaded binaries are detected as untrusted application. + +
+ +

Once you have downloaded the Pactus GUI, you may follow this tutorial to set up and run your node: + How to run Pactus in Graphic Mode?

+ +
+ +

Pactus Command Line Interface (CLI)

+ +

Advanced users can run Pactus in command line interface (CLI) mode.

+ +

Pactus Command Line Interface (CLI)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
File nameOSArch
pactus-cli_1.3.0_android_arm64.tar.gz AndroidARM64
pactus-cli_1.3.0_darwin_amd64.tar.gz macOS64-bit
pactus-cli_1.3.0_darwin_arm64.tar.gz macOSARM64
pactus-cli_1.3.0_freebsd_amd64.tar.gz FreeBSD64-bit
pactus-cli_1.3.0_freebsd_arm.tar.gz FreeBSDARM
pactus-cli_1.3.0_linux_amd64.tar.gz Linux64-bit
pactus-cli_1.3.0_linux_arm64.tar.gz LinuxARM64
pactus-cli_1.3.0_windows_386.zip Windows32-bit
pactus-cli_1.3.0_windows_amd64.zip Windows64-bit
+ +

Once you have downloaded the Pactus CLI, you may follow this tutorial to set up and run your node: + How to run Pactus in Command Line Mode?

+ +

Downloader script

+ +

For Unix-like systems (e.g., Linux, macOS, or MSYS2 on Windows), there is a downloader script available. This script can download the archived file, verify it, and extract it for you. To use it, simply run the following command in your terminal:

+ +
curl --proto '=https' --tlsv1.2 -sSL https://github.com/pactus-project/pactus/releases/download/v1.3.0/pactus_downloader.sh | sh
+
+ +
+ +

🐳 Docker Container

+ +

Advanced users can get the Pactus docker image from Docker Hub.

+ +

You may follow this tutorial to set up and run your node using Docker: + How to run Pactus using Docker?

+ +
+
+
+
+ + + + + diff --git a/favicon-128x128.png b/favicon-128x128.png new file mode 100644 index 000000000..f12927c2a Binary files /dev/null and b/favicon-128x128.png differ diff --git a/favicon-16x16.png b/favicon-16x16.png new file mode 100644 index 000000000..c6d902e56 Binary files /dev/null and b/favicon-16x16.png differ diff --git a/favicon-32x32.png b/favicon-32x32.png new file mode 100644 index 000000000..55447f432 Binary files /dev/null and b/favicon-32x32.png differ diff --git a/favicon-64x64.png b/favicon-64x64.png new file mode 100644 index 000000000..70545a0a3 Binary files /dev/null and b/favicon-64x64.png differ diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 000000000..64080c0ee Binary files /dev/null and b/favicon.ico differ diff --git a/feed.xml b/feed.xml new file mode 100644 index 000000000..b9e442e20 --- /dev/null +++ b/feed.xml @@ -0,0 +1,1409 @@ +Jekyll2024-07-02T08:05:10+00:00https://pactus.org/feed.xmlPactus blockchainPactus 1.3.0 (Warsaw) Released2024-06-27T00:00:00+00:002024-06-27T00:00:00+00:00https://pactus.org/2024/06/27/release-1-3-0Overview
+ +

Pactus Blockchain Version 1.3.0 (Warsaw) +is now available for download. +This release includes the following applications:

+ + + +

Pactus Version 1.3.0 (Warsaw)

+ +

Highlights

+ +

This version fixes an issue that caused some nodes to get stuck for one minutes and +not receive any new messages during that time.

+ +

Breaking Change: gRPC APIs now convert all binary values to hexadecimal strings.

+ +
+ Attention Exchanges and Third-Party Pactus Blockchain Users: +
+
+ After upgrading to this version, be aware that binary data, such as hashes and signatures, + are now formatted as hexadecimal strings. You must update your code to accommodate this change. +
+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ + + +

Fix

+ + + +

You can find the full list of changes on Github, +as well as the source code

]]>Pactus 1.2.0 (Sydney) Released2024-06-20T00:00:00+00:002024-06-20T00:00:00+00:00https://pactus.org/2024/06/20/release-1-2-0Overview + +

Pactus Blockchain Version 1.2.0 (Sydney) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.2.0 (Sydney)

+ +

Highlights

+ +

This version includes some improvements and new features, such as:

+ +
    +
  • Clock offset calculation: Adding clock offset check to +alert the user if their machine’s time is not synced with the network. +See PIP-18: Clock Offset Calculation.
  • +
  • Minimum fee: The minimum fee is configurable in this version, with the default set to 0.01. +Each validator can decide the minimum fee of transactions they want to include in the block +by changing the min_fee value inside the config file.
  • +
  • ip blocker: A new option allows nodes to block certain IPs and disconnect from them.
  • +
  • rate limit: Nodes can set rate limits for incoming messages, including transactions.
  • +
  • wallet manager: The wallet manager allows users to create and manage wallets using gRPC endpoints.
  • +
+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • config: make minimum fee configurable (#1349)
  • +
  • apply rate limit for the network topics (#1332)
  • +
  • add ipblocker package (#1323)
  • +
  • consensus: fast consensus path implementation (#1253)
  • +
  • version: add alias to node version (#1281)
  • +
  • ntp: add ntp util (#1274)
  • +
  • gRPC: add connection info to node info (#1273)
  • +
  • gRPC: add only_connected parameter to getNetworkInfo API (#1264)
  • +
  • grpc: refactor CreateWallet and add RestoreWallet API endpoint (#1256)
  • +
  • add wallet service (#1241)
  • +
  • ban attacker validators (#1235)
  • +
  • txpool: prevent spamming transactions by defining a minimum value (#1233)
  • +
  • reject direct message from non-supporting agents (#1225)
  • +
+ +

Fix

+ +
    +
  • wallet: add public key on get new address (#1350)
  • +
  • sync: add IsBannedAddress check in processing connect event (#1347)
  • +
  • sync: update latest supporting version (#1336)
  • +
  • state: improve node startup by optimizing availability score calculation (#1338)
  • +
  • HTTP: add clock offset and connection info to node-info API (#1334)
  • +
  • grpc: add stacktrace to locate panic (#1333)
  • +
  • consensus: implement PIP-26 (#1331)
  • +
  • grpc: improve grpc server and client (#1330)
  • +
  • util: add more ntp pool (#1328)
  • +
  • jsonrpc: update JSON-RPC Gateway to support headers and improve client registry (#1327)
  • +
  • consensus: improve consensus algorithm (#1329)
  • +
  • txpool: set fix fee of 0.1 PAC for transactions (#1320)
  • +
  • network: add block and transaction topics (#1319)
  • +
  • gRPC: prevent concurrent map iteration and map write (#1279)
  • +
  • api: add swagger schemes (#1270)
  • +
  • network: set infinite limit for resource manager (#1261)
  • +
  • sync: introduce session manager (#1257)
  • +
  • HTTP: using amount type for fee in transaction details (#1255)
  • +
  • network: disconnect from peers that has no protocol (#1243)
  • +
  • wallet: saving wallet file after generating new address in gRPC (#1236)
  • +
  • prevent zero stake for bond transactions (#1227)
  • +
  • set bounding interval for first boudning tx only (#1224)
  • +
+ +

Refactor

+ +
    +
  • wallet: set server address on loading wallet (#1348)
  • +
  • removed deprecated LockWallet and UnLockWallet from WalletService (#1343)
  • +
  • crypto: decode data to point on verification (#1339)
  • +
  • network: define connection info in network proto (#1297)
  • +
  • sync: define peer package (#1271)
  • +
  • network: refactor peer manager and redefine the min cons (#1259)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.7 (Santiago) Released2024-06-02T00:00:00+00:002024-06-02T00:00:00+00:00https://pactus.org/2024/06/02/release-1-1-7Overview + +

Pactus Blockchain Version 1.1.7 (Santiago) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

Here are the key improvements in this version:

+ +
    +
  • +

    Resolves critical issue in consensus: +This version addresses a critical issue in consensus that prevents broadcasting expired proposals across the network.

    +
  • +
  • +

    Improved network security: +The version defines a list of blacklisted IPs and disconnects from them, enhancing network security.

    +
  • +
  • +

    Node compatibility: +This version only connects to nodes with version 1.1.6 or above, ensuring compatibility with the latest software.

    +
  • +
+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • network: add firewall black list ips to banning when connecting to peer (#1298)
  • +
+ +

Fix

+ +
    +
  • sync: load black listed addresses from the config (#1301)
  • +
  • consensus: only proposer responds to the query proposal (#1300)
  • +
  • network: set latest support version to 1.1.6 (#1299)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.8 (Budapest) Released2024-06-02T00:00:00+00:002024-06-02T00:00:00+00:00https://pactus.org/2024/06/02/release-1-1-8Overview + +

Pactus Blockchain Version 1.1.8 (Budapest) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.1.8 (Budapest)

+ +

Highlights

+ +

This version aims to reduce the consensus message once there is a delay on block creation. +It also defines a fixed fee of 0.1 PAC for transactions. +This fixed fee will be replaced by a dynamic fee in future releases, +which will provide more flexibility and efficiency.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • firewall: define rate limit for network topics (#1308)
  • +
+ +

Fix

+ +
    +
  • set fix fee 0.1 PAC for transactions (#1315)
  • +
  • consensus: add round to query proposal message (#1314)
  • +
  • firewall: block peer base on blacklisted CIDR (#1309)
  • +
  • consensus: reduce ChangeProposerTimeout to 6 seconds (#1311)
  • +
  • sync: define rate limit for query vote and proposal (#1310)
  • +
  • decrease to 100 maximum transaction per block (#1306)
  • +
  • consume message first then ignore on ratelimit (#1304)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.6 (Ottawa) Released2024-05-31T00:00:00+00:002024-05-31T00:00:00+00:00https://pactus.org/2024/05/31/release-1-1-6Overview + +

Pactus Blockchain Version 1.1.6 (Ottawa) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

This version updates the consensus mechanism to move to new rounds once +a proper and justified “Decided” vote seen by a non-faulty validator. +This helps ensure that the consensus mechanism stays in sync with the network when the validator restarts.

+ +

In this version, the minimum availability score is set to 0.6666. +This change will help validators receive rewards even in faulty network conditions, +ensuring that they can continue to participate in the consensus mechanism.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • consensus: move to new round on decided vote (#1293)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.5 (Cape Town) Released2024-05-30T00:00:00+00:002024-05-30T00:00:00+00:00https://pactus.org/2024/05/30/release-1-1-5Overview + +

Pactus Blockchain Version 1.1.5 (Cape Town) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

Rate limit

+ +

This version applies a rate limit to the messages in the general topics including blocks and transactions. +This will help nodes to manage the network traffic in times of network congestion or spam attacks.

+ +

Dynamic fee

+ +

To prevent attackers from sending spam transactions, a dynamic fee model is introduced in this patch. +Each node can define a minimum fee that is defaulted to 0.000001 PAC. +However, if the transaction pool becomes full, the transaction fee can increase up to 1 PAC.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • add dynamic fee (#1290)
  • +
  • network: define config for rate limit threshold (#1284)
  • +
  • network: ratelimit gossip for prevent spamming (#1283)
  • +
+ +

Fix

+ +
    +
  • change CalculateFee to be backward compatible (#1291)
  • +
  • proposal basic checks deferred to consensus (#1288)
  • +
  • rejected spam tx for same from and to (#1287)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.4 (London) Released2024-05-07T00:00:00+00:002024-05-07T00:00:00+00:00https://pactus.org/2024/05/07/release-1-1-4Overview + +

Pactus Blockchain Version 1.1.4 (London) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.1.4 (London)

+ +

Highlights

+ +

This version fixes some issues related to the syncing process and improves the connectivity of the nodes.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • network: set infinite limit for resource manager (#1261)
  • +
  • sync: introduce session manager (#1257)
  • +
  • HTTP: using amount type for fee in transaction details (#1255)
  • +
+ +

Refactor

+ +
    +
  • network: refactor peer manager and redefine the min cons (#1259)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.3 (Kuala Lumpur) Released2024-04-25T00:00:00+00:002024-04-25T00:00:00+00:00https://pactus.org/2024/04/25/release-1-1-3Overview + +

Pactus Blockchain Version 1.1.3 (Kuala Lumpur) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Kuala Lumpur, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.3 (Kuala Lumpur)

+ +

Highlights

+ +

This version prevents spamming transactions by defining a minimum value per transaction. +It is not part of the consensus parameters, +and each node can set its own threshold. +By default, it is set to 0.1 PAC.

+ +

The version also bans validators that were part of the recent spam attack on the network. +Their stake will be frozen at block 820,000.

+ +

Validators must update their nodes to this version as soon as possible.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • ban attacker validators (#1235)
  • +
  • txpool: prevent spamming transactions by defining a minimum value (#1233)
  • +
+ +

Fix

+ +
    +
  • wallet: saving wallet file after generating new address in gRPC (#1236)
  • +
  • network: disconnect from peers that has no protocol (#1243)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.1 (Jakarta) Released2024-04-18T00:00:00+00:002024-04-18T00:00:00+00:00https://pactus.org/2024/04/18/release-1-1-1Overview + +

Pactus Blockchain Version 1.1.1 (Jakarta) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Jakarta, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.1 (Jakarta)

+ +

Highlights

+ +

This update fixes the issue of zero-bonding +that identified after the release of 1.1.0 (Hanoi). +This fix will be applied at block height 740,000 to ensure a smooth upgrade.

+ +

Additionally, this version rejects connections from nodes version 1.0.2 and earlier.

+ +

Validators must update their nodes to this version as soon as possible.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • reject direct message from non-supporting agents (#1225)
  • +
+ +

Fix

+ +
    +
  • prevent zero stake for bond transactions (#1227)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.0 (Hanoi) Released2024-04-14T00:00:00+00:002024-04-14T00:00:00+00:00https://pactus.org/2024/04/14/release-1-1-0Overview + +

Pactus Blockchain Version 1.1.0 (Hanoi) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Hanoi, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.0 (Hanoi)

+ +

Highlights

+ +

This update brings some changes that are not compatible with the earlier version. +Here are the key points:

+ +
    +
  1. Fee calculations are now rounded, and fees can be accepted within a range of one NanaoPAC (see #1174).
  2. +
  3. Small bonds for existing validators are now accepted (see #1152).
  4. +
+ +

Validators must update their nodes to this version as soon as possible.

+ +

Other major changes in this version include:

+ +
    +
  • The addition of a JSON-RPC endpoint required by third parties like exchanges to connect to Pactus nodes.
  • +
  • The implementation of Pactus Shell tools, allowing users to query the node.
  • +
+ +

Additionally, this version improves the syncing process for new nodes, enhances the GUI, and addresses several issues.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gRPC: add get address history method (#1206)
  • +
  • grpc: Add GetNewAddress/GetTotalBalance endpoint to gateway (#1197)
  • +
  • GUI: adding total balance to wallet widget (#1194)
  • +
  • Add GetNewAddress gRPC API (#1193)
  • +
  • gRPC: add new API to get the total balance of wallet (#1190)
  • +
  • GUI: showing transaction hash after broadcasting transaction (#1187)
  • +
  • add jsonrpc gateway support (#1183)
  • +
  • config: one reward address in config for all validators (#1178)
  • +
  • GUI: memo field for transactions on GUI wallet (#1182)
  • +
  • implement basic auth for pactus shell (#1177)
  • +
  • grpc: add rust code gen for proto (#1151)
  • +
  • testnet: define permanent Testent genesis (#1173)
  • +
  • add basic auth authentication for securing grpc (#1162)
  • +
  • grpc: calculate fee for create-raw-transaction APIs (#1159)
  • +
  • grpc: add fixed-amount to calc-fee API (#1146)
  • +
  • wallet: adding all account address functions (#1128)
  • +
  • grpc: update swagger API to version 1.1 (#1106)
  • +
  • GUI: adding availability score in wallet (#1118)
  • +
  • logger: adding log target (#1122)
  • +
  • logger: adding file_only option (#1117)
  • +
  • gui: add connections and moniker fields to main windows (#1090)
  • +
  • implementation for PIP-22 (#1067)
  • +
  • generate documentation for proto files (#1064)
  • +
  • pactus-ctl (#946)
  • +
+ +

Fix

+ +
    +
  • gRPC: add basic auth option in header (#1217)
  • +
  • gRPC: not return block data on information verbosity (#1212)
  • +
  • wallet: fix wallet conn issue (#1211)
  • +
  • GUI: update total balance on wallet timeout (#1204)
  • +
  • accept small bond to existing validator (#1152)
  • +
  • GUI: make transaction hash selactable (#1196)
  • +
  • close connections with peers that have no supported protocol (#1181)
  • +
  • sync: check the start block request height (#1176)
  • +
  • config: load logger levels in Mainnet config (#1168)
  • +
  • gRPC: pactus swagger not found (#1163)
  • +
  • add error type for invalid configs (#1153)
  • +
  • save Mainnet config with inline comments (#1143)
  • +
  • network: set deadline for streams (#1149)
  • +
  • grpc: fix error 404 on grpc gateway (#1144)
  • +
  • wallet: checking args in history add (#1141)
  • +
  • gRPC: adding sign raw transaction API to gateway (#1116)
  • +
  • sync: fix concurrent map read-write crash (#1112)
  • +
  • network: remove disconnected peers from peerMgr (#1110)
  • +
  • network: set dial and accept limit in connection gater (#1089)
  • +
  • stderr logger in windows os (#1081)
  • +
  • sync: improve syncing process (#1087)
  • +
  • network: redefine resource limits (#1086)
  • +
+ +

Refactor

+ +
    +
  • sync: improve syncing process (#1207)
  • +
  • move fee calculation logic to execution package (#1195)
  • +
  • introduce Amount data type for converting PAC units (#1174)
  • +
  • using PAC instead of atomic units for external input/outputs (#1161)
  • +
  • change func() to cancel func type (#1142)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus Permanent Phoenix Testnet Launched2024-03-16T00:00:00+00:002024-03-16T00:00:00+00:00https://pactus.org/2024/03/16/testnet-phoenix-launchedThe public and permanent Phoenix Testnet +for the Pactus blockchain has been launched. +This Testnet serves as a valuable platform for developers to thoroughly examine their projects, +providing a safe playground to test and deploy their applications before transitioning to the Mainnet.

+ +

Pactus Public Phoenix Testnet

+ +

All parameters within the Testnet mirror those of the Mainnet, +ensuring a consistent environment for testing and development. +The genesis block for the Testnet is available +here.

+ +

Currently, there are four active nodes running the Testnet, accessible at the following addresses:

+ +
    +
  • testnet1.pactus.org
  • +
  • testnet2.pactus.org
  • +
  • testnet3.pactus.org
  • +
  • testnet4.pactus.org
  • +
+ +

The Testnet’s name, Phoenix, was chosen by the Pactus community from various suggestions. +It embodies the spirit of rebirth and renewal, highlighting the innovative and testing-focused nature of the network. +Developers can utilize the RoboPAC as a faucet to receive test coins and +thoroughly test their applications within this environment. +It’s important to note that the coins within this Testnet hold no monetary value and are only meant for testing purpose.

+ +

All addresses within the Phoenix network are prefixed with tpc1..., +distinguishing them from Mainnet addresses that start with pc1...’. +This clear differentiation streamlines development and ensures seamless integration when transitioning to +the Mainnet environment.

]]>
Pactus 1.0.2 (Istanbul) Released2024-02-18T00:00:00+00:002024-02-18T00:00:00+00:00https://pactus.org/2024/02/18/release-1-0-2Overview + +

Pactus Blockchain Version 1.0.2 (Istanbul) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

This release is named after the city of Istanbul and it +was unanimously selected by Pactus community.

+ +

Pactus Version 1.0.2 (Istanbul)

+ +

Highlights

+ +

This update fixes a major issue that decreases the number of inbound connections of the nodes over time. +We highly recommend all users to upgrade to the new version for better connectivity.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • sync: fix concurrent map read-write crash (#1112)
  • +
  • network: remove disconnected peers from peerMgr (#1110)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.0.1 (Beijing) Released2024-02-10T00:00:00+00:002024-02-10T00:00:00+00:00https://pactus.org/2024/02/10/release-1-0-1Overview + +

Pactus Blockchain Version 1.0.1 (Beijing) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

This release is named after the city of Beijing and it +was unanimously selected by Pactus community.

+ +

Pactus Version 1.0.1 (Beijing)

+ +

Highlights

+ +

This update fixes several issues identified after the release of +1.0.0 (Beijing). +Specifically, it fixes the missed log file on the Windows GUI application and improves the node connectivity.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gui: add connections and moniker fields to main windows (#1090)
  • +
+ +

Fix

+ +
    +
  • network: set dial and accept limit in connection gater (#1089)
  • +
  • gui stderr logger in windows os (#1081)
  • +
  • sync: improve syncing process (#1087)
  • +
  • network: redefine resource limits (#1086)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.0.0 (Beijing) Released2024-01-31T00:00:00+00:002024-01-31T00:00:00+00:00https://pactus.org/2024/01/31/release-1-0-0Overview + +

Pactus Blockchain Version 1.0.0 (Beijing) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Pactus Version 1.0.0 (Beijing)

+ +

Highlights

+ +

Mainnet Official Release v1.0.0 (Beijing)

+ +

The much-anticipated official software release of Pactus v1.0.0 (Beijing) marks a significant milestone +for our community. +This impressive mainnet release represents the culmination of extensive development efforts. +Pactus v1.0.0 (Beijing) offers a pioneering solution for streamlining the validation of Pactus blockchain, +enhancing security, and providing a user-friendly experience. We’re excited to unveil the official software +and welcome users to experience the power of Pactus in revolutionizing the future of blockchain. Join us on +this exciting journey.

+ +

Onboarding validators

+ +

On February 1st, a total of 53,494 PAC coins will be distributed among 1,311 validators who participated in +Testnet-0, +Testnet-1, and +Testnet-2. +This marks the beginning of a new chapter in the decentralized world.

+ +

Download

+ +

This version has been implemented for Mainnet +To start using Pactus Mainnet, download the latest version from the download +page and join the Mainnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement get validator address for grpc (#975)
  • +
  • add bootstrap.json and load in config on build (#964)
  • +
  • add mainnet config and genesis files (#951)
  • +
  • add Consensus-address to network info (#952)
  • +
  • grpc: sign transaction using wallet client (#945)
  • +
  • pactus gui lock support (#947)
  • +
  • consensus: turning consensus to a zero-config module (#942)
  • +
+ +

Fix

+ +
    +
  • localnet wallet issue (#970)
  • +
  • sync: remove ReachabilityStatus from agent info (#956)
  • +
  • daemon: keeping previous behavior for password flag, linting CLI messages (#950)
  • +
  • consensus: detect if the system time is behind the network (#939)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Mainnet launched 🚀2024-01-24T20:24:00+00:002024-01-24T20:24:00+00:00https://pactus.org/2024/01/24/mainnet-launchedYears to Launch + +

Pactus Mainnet started creating the first block on 24 January 2024 at 20:24:10 UTC time. +Pactus Mainnet is the result of years of hard work, research, and innovation. +It started from one idea:

+ +

A low-cost, truly decentralized blockchain, built by the people for the people, +where anyone could run and be their own validator.

+ +

We faced many challenges and obstacles along the way, but we never gave up.
+We overcame them with our determination and perseverance.
+We learned from our mistakes and improved our solutions.
+We grew from a small team to a large community.
+We achieved many milestones and breakthroughs. And we did it.
+We created Pactus, the platform that empowers you.

+ +

Thanks to Community

+ +

We want to thank Pactus community for helping us on the Testnet.

+ +

You have been instrumental in testing and improving the Testnet.
+You have given us your honest feedback and constructive suggestions.
+You have reported and help fixed bugs and errors.
+You have challenged and pushed us to do better.
+You have been our partners and friends in this journey.

+ +

On the Road

+ +

The true journey has just started.
+The Mainnet is not the end, but the beginning.
+The beginning of a new era of blockchain innovation.
+The beginning of a new challenge and opportunity.
+The beginning of a new revolution and evolution!

+ +

We welcome you more than ever.
+We need you to join us in this exciting adventure.
+We need you to support us in this ambitious endeavor.
+We need you to be part of Pactus, the platform that empowers you!

+ +

We Have a Dream

+ +

We have a dream.
+A dream of a world where blockchain technology is not a privilege, but a right for everyone.
+A dream of a world where smart contracts and decentralized applications are fast, secure, and scalable.
+A dream of a world where Pactus is the platform that empowers you.

+ +

This dream is not just ours. It is yours too.
+You share our vision and passion for blockchain innovation.
+You believe in our potential and impact.
+You support our goals and values.
+You are part of our dream.

+ +

And this dream is not just a fantasy. It is a reality.
+A reality that we have created together.
+A reality that we have launched today. A reality that we can explore and enjoy together.
+A reality that we can shape and improve together.
+A reality that we can make better and brighter together!

]]>
Story of Testnet-22024-01-22T00:00:00+00:002024-01-22T00:00:00+00:00https://pactus.org/2024/01/22/testnet-2-concludedWhat is Testnet? + +

Testnet is a testing environment where developers and users can try out the functionality of a blockchain project, +without putting real assets or data at risk. +It helps to ensure that the final product is reliable and secure for users to use. +If you like to read more about the Testnet you can check out our post on +“What is Testnet?”.

+ +

Summary

+ +

In October 2023, we launched Testnet-2. +The main purpose of this Testnet was to closely monitor the new consensus mechanism and the stability of the P2P network.

+ +

The committee for Testnet-2 was set to 51 validators, +and 2084 validators joined during the Testnet period. +More than 1500 computers and servers joined the network, and we experienced a high volume of data transmission in the network. +More than 800,000 blocks were created, and about 2 million transactions were processed during this time. +The size of the blockchain is about 450 megabytes.

+ +

About 500,000 coins were staked during this period, almost 60% of the total generated coins. +It shows that users, even in Testnet, tend to stake their coins.

+ +

Stability of Consensus

+ +

In Testnet-1, we had one consensus failure that caused us to +conclude the Testnet-1. +During Testnet-2, there were no issues with the consensus mechanism, and +we had no case of failure during the testing period, +although the number of validators and nodes significantly increased on Testnet-2 compared to its predecessor. +It proved that the consensus mechanism is in a stable situation.

+ +

Networking issues

+ +

In Testnet-2, the blockchain stopped twice, and each time it took more than 24 hours to fix the problem. +In the second blockage, we had no choice but to ask active validators inside the committee to +update their nodes to overcome the networking issue. +The development team faced a difficult situation and had to make the proper decision to fix the networking issues. +On one hand, the networking traffic increased significantly, and on the other hand, we had to +make sure normal users with limited internet bandwidth could still participate in the consensus mechanism without any problems. +After examining different scenarios, the networking issues were resolved, and +no major problems were reported till the end of Testnet.

+ +

Major updates

+ +

During Testnet-2, we introduced several updates, including versions +0.15.0, +0.16.0, +0.17.0, +0.18.0, +0.19.0, and +0.20.0. +The update process went smoothly, and with the stability of Version 0.20.0 confirmed, +the development team shifted its focus to the Mainnet launch.

+ +

Special thanks to the community

+ +

This Testnet was important for us. +It helped us learn what we need to do to make Pactus work even better. +Without the community that supports us and dedicates their time and resources to testing and feedback, +we wouldn’t have been able to progress as we have.

+ +

We thank all of them for their valuable contributions. +As promised, participants in Testnets will be given priority as validators for the MainNet, and +will receive bounty PAC coins to set up their validators.

+ +

We are grateful to all those who participated in Testnets, and we encourage them to join the Mainnet. +As a community-based project, we rely on the support of our community members, and we value any help we receive.

]]>
Pactus 0.20.0 Released2024-01-11T00:00:00+00:002024-01-11T00:00:00+00:00https://pactus.org/2024/01/11/release-0-20-0Overview + +

Pactus Blockchain Version 0.20.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

Validator Stake Management

+ +

The new GUI application enables users to easily Unbond and Withdraw their validator’s stake.

+ +

Withdraw dialog

+ +

Improving Network Connectivity

+ +

Some users have reported that UDP packets are being dropped by their Internet Service Providers. +Therefore, the UDP protocol is disabled by default. +Users can still activate the UDP protocol by configuring the settings in the file if necessary.

+ +

Also, the experimental Node Gossip feature has been removed in this version. +Node gossip could cause some validators to become isolated from the rest of the network.

+ +

Relay service

+ +

This version enables users to turn their node into a relay service. +A relay service node can help users behind NAT to communicate with each other. +It is disabled by default and can be enabled inside the config file. +Please note that it is still in an experimental state.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement relay service (#931)
  • +
  • HTTP: Integrate AddRowDouble and update tests (#926)
  • +
  • network: making listen address private in config (#921)
  • +
  • http: adding AvailabilityScore to http module (#917)
  • +
  • network: adding ‘enable_udp’ config (#918)
  • +
  • network: removing gossip node service (#916)
  • +
  • gRPC: adding AvailabilityScore to gRPC (#910)
  • +
  • GUI: unbond and withdraw transaction dialogs (#908)
  • +
+ +

Fix

+ +
    +
  • gRPC: adding missing get raw transaction APIs to gRPC gateway (#925)
  • +
  • network: preventing self dial (#924)
  • +
  • fixing time lag on starting node (#923)
  • +
  • network: fixing network deadlock on linux arm64 (#922)
  • +
  • GUI: updating unbond and withdraw dialogs (#911)
  • +
  • fixing gRPC node info issue (#906)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Mainnet announcement2024-01-08T00:00:00+00:002024-01-08T00:00:00+00:00https://pactus.org/2024/01/08/mainnet-announcementThe much-awaited Mainnet Launch of The Pactus Blockchain is finally here! +On January 24, 2024, at 20:24:00 UTC, the first block, known as the Genesis block, +will be minted by four Bootstrap validators. +After that, every 10 seconds, a new block will be added to the blockchain. +Each block contains the committed transactions in the network. +The block finality in the Pactus blockchain is immediate. +It means that there is no need to wait for block confirmation to ensure a transaction is committed.

+ +

Later, more than 2000 community validators will secure the blockchain and make it decentralized. +These validators are Testnet participants who helped test Pactus during our testing period. +The community validators will receive the initial staking coins from a Discord Bot named RoboPac.

+ +

To ensure everything works smoothly on the Mainnet, three different Testnets ( +Testnet0, +Testnet1, and +Testnet2) have been run.

+ +

The Mainnet will never be stopped or interrupted by the core developers of Pactus, +and validators should primarily participate in and maintain the security of the blockchain.

]]>
Pactus 0.19.0 Released2024-01-04T00:00:00+00:002024-01-04T00:00:00+00:00https://pactus.org/2024/01/04/release-0-19-0Overview + +

Pactus Blockchain Version 0.19.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version has improved the overall performance of the blockchain by implementing +PIP-15. +PIP-15 suggests to add caching algorithms to the database for the most frequently used items.

+ +

Additionally, this version has enhanced the connectivity of the nodes in the P2P network.

+ +

Availability Score

+ +

This version comes with the implementation of PIP-19. +PIP-19 suggests assigning the “Availability Score” to each validator based on their activities in the +committee. +Validators with a score less than 0.8 won’t receive the block reward, +as their proposals will be rejected by other validators. +The main reason behind this PIP is to prevent users from downgrading +their node specifications and running Pactus on machines with low resources.

+ +

Breaking change

+ +

The Docker container now contains both daemon and wallet binary files. +Users who use Docker to run Pacts now need to add the entry point to run Pactus.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gRPC: defining network and peers info response’s properly (#898)
  • +
  • implementing pip-19 (#899)
  • +
  • network: disabling GosipSub, only FloodSub (#895)
  • +
  • www: adding change proposer round and value to consensus info votes (#892)
  • +
  • network: adding relay service to dial relay nodes (#887)
  • +
  • implementing pip-15 (#843)
  • +
  • check already running by lock file (#871)
  • +
+ +

Fix

+ +
    +
  • store: use cache to check if public key exists (#902)
  • +
  • executor: not rejecting bond transaction for bootstrap validator (#901)
  • +
  • GUI: removing unnecessary tags in transaction confirm dialog (#893)
  • +
  • network: close relay connection for public node (#891)
  • +
  • network: refining GossipSubParams for Gossiper node (#882)
  • +
  • sync: adding sequence number to the bundle (#881)
  • +
  • network: turn off mesh for gossiper node (#880)
  • +
  • consensus: check voteset for CP strong termination (#879)
  • +
  • adding querier to query messages (#878)
  • +
  • execution: fixing issue #869 (#870)
  • +
  • fixing logger issue on rotating log file (#859)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 0.18.0 Released2023-12-12T00:00:00+00:002023-12-12T00:00:00+00:00https://pactus.org/2023/12/12/release-0-18-0Overview + +

Pactus Blockchain Version 0.18.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version has significantly improved the syncing progress. +The syncing process concurrently requests blocks from 8 different peers and +actively connects to the most optimal peers for downloading the blockchain.

+ +

Additionally, users can now import private keys into their wallet and securely encrypt them using their wallet password.

+ +

Breaking change

+ +

For Unix-based systems, please note that the working directory for root users has changed from /pactus to /root/pactus.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

+After you update the node, the configuration file will automatically get updated, keeping the old settings. +If you want to return the configuration file to its default settings, +just delete the current config file and restart the node. +

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement pip-14 (#841)
  • +
  • sort wallet addresses (#836)
  • +
  • grpc: endpoints for creating raw transaction (#838)
  • +
  • network reachability API (#834)
  • +
  • implement pip-13 (#835)
  • +
  • subscribing to libp2p eventbus (#831)
  • +
  • implement helper methods for wallet address path (#830)
  • +
  • logger: adding rotate log file after days, compress and maxgae for logger config (#822)
  • +
  • enable bandwidth router metric (#819)
  • +
+ +

Fix

+ +
    +
  • network: refining the connection limit (#849)
  • +
  • corrected mistake when retrieving the reward address (#848)
  • +
  • config: restore default config when it is deleted (#847)
  • +
  • cmd: changing home directory for root users (#846)
  • +
  • removing BasicCheck for hash (#845)
  • +
  • disabling libp2p ping protocol (#844)
  • +
  • build docker file (#839)
  • +
  • sync: ignore publishing a block if it is received before (#829)
  • +
  • network: subscribing to the Libp2p event bus (#828)
  • +
  • sync: ignore block request if blocks are already inside the cache (#817)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
\ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 000000000..9eedaeb86 --- /dev/null +++ b/index.html @@ -0,0 +1,740 @@ + + + + + + + + + + + + + Home | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + + +
+
+
+
+ Pactus - a real Proof-of-Stake blockchain +
+
+
+
+
Welcome to Pactus
+
Pactus is a community-run blockchain technology with a revolutionary, secure, Solid State Proof of Stake Consensus. Come join us and build a decentralized future together!
+
+ +
+
+
+ +
+
+
+


Get started

+ To start your Pactus journey, you will need to download the latest software. Pactus is designed to be lightweight and user-friendly, offering support for all operating systems and infrastructures with our GUI and CLI applications. + + +
+
+ <br> Get started +
+
+ +
+
+ <br> Get PAC +
+
+


Get PAC

+ Before you can utilize all that Pactus has to offer, you will need to obtain our native coin. PAC is a currency that can be exchanged for products, services and other currencies with a percentage fee based model of 0.01% per tx. + + +
+
+ +
+
+


Become a validator

+ You can become a Pactus validator by staking some coins to your node. As a Pactus validator you will earn rewards, these are given for collecting valid transactions and creating new blocks. The emission is one coin per block. + + +
+
+ <br> Become a validator +
+
+ +
+
+ <br> Make Pactus better +
+
+


Make Pactus better

+ There are many ways you can support Pactus and help it grow, from being a valuable community member and sharing with your friends to contributing to our core development. Let's work together to make Pactus even better! + + +
+
+
+ +
+
+
+

Our Partners

+
+
+
+ + Sensifai + +
+
+ + Dezh Technologies + +
+
+
+
+
+ +
+
+
+

Featured Validators

+
+
+
+ + SGTstake + +
+
+ + NodeSync.Top + +
+
+ + CodeBlockLabs + +
+
+ + CoreNode + +
+
+ + CoreNode + +
+
+ + Validator247 + +
+
+ + VNBnode + +
+
+ + Ionode + +
+
+ + dnsarz + +
+
+ + genznodes + +
+
+ + node39 + +
+
+ + tpes + +
+
+ + oshvank + +
+
+ + testnetnodes + +
+
+ + p10node + +
+
+ + kenz + +
+
+ + blocksync + +
+
+ + adora + +
+
+ + ykpbb + +
+
+ + validator-wiki + +
+
+ + nodeops + +
+
+ + catsmile + +
+
+ + str + +
+
+ + Dezh Technologies + +
+
+
+
+ +
+
+
+
+

Subscribe to the Pactus Newsletter

+

+

Dive into the latest updates and insights from the Pactus Blockchain. + Receive crucial information on new developments, enhancements, and partnerships + directly to your inbox. Stay connected and informed, whether you're an investor, developer, + or blockchain enthusiast.

+
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+ + * +
+
+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + +
+
+
+ + +
+
+
+
+
+
+
+ + +
+ + diff --git a/mstile-150x150.png b/mstile-150x150.png new file mode 100644 index 000000000..6c2539a90 Binary files /dev/null and b/mstile-150x150.png differ diff --git a/robots.txt b/robots.txt new file mode 100644 index 000000000..0097513b3 --- /dev/null +++ b/robots.txt @@ -0,0 +1 @@ +Sitemap: https://pactus.org/sitemap.xml diff --git a/safari-pinned-tab.svg b/safari-pinned-tab.svg new file mode 100644 index 000000000..43c436d31 --- /dev/null +++ b/safari-pinned-tab.svg @@ -0,0 +1,27 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/site.webmanifest b/site.webmanifest new file mode 100644 index 000000000..c00b17332 --- /dev/null +++ b/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-256x256.png", + "sizes": "256x256", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 000000000..1c65aede0 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,210 @@ + + + +https://pactus.org/2022/08/29/dev-meeting.html +2022-08-29T00:00:00+00:00 + + +https://pactus.org/2022/09/04/dev-meeting.html +2022-09-04T00:00:00+00:00 + + +https://pactus.org/2022/09/18/dev-meeting.html +2022-09-18T00:00:00+00:00 + + +https://pactus.org/2022/09/20/release-0-9-0.html +2022-09-20T00:00:00+00:00 + + +https://pactus.org/2022/09/24/testnet-0-launched.html +2022-09-24T00:00:00+00:00 + + +https://pactus.org/2022/10/30/dev-meeting.html +2022-10-30T00:00:00+00:00 + + +https://pactus.org/2022/11/24/release-0-9-1.html +2022-11-24T00:00:00+00:00 + + +https://pactus.org/2023/03/01/what-is-testnet.html +2023-03-01T00:00:00+00:00 + + +https://pactus.org/2023/04/21/testnet-0-concluded.html +2023-04-21T00:00:00+00:00 + + +https://pactus.org/2023/05/08/release-0-10-0.html +2023-05-08T00:00:00+00:00 + + +https://pactus.org/2023/05/09/testnet-1-launched.html +2023-05-09T00:00:00+00:00 + + +https://pactus.org/2023/05/29/release-0-11-0.html +2023-05-29T00:00:00+00:00 + + +https://pactus.org/2023/06/19/release-0-12-0.html +2023-06-19T00:00:00+00:00 + + +https://pactus.org/2023/07/01/release-0-13-0.html +2023-07-01T00:00:00+00:00 + + +https://pactus.org/2023/07/05/testnet-500-validators.html +2023-07-05T00:00:00+00:00 + + +https://pactus.org/2023/07/09/dev-meeting.html +2023-07-09T00:00:00+00:00 + + +https://pactus.org/2023/08/01/testnet-1-concluded.html +2023-08-01T00:00:00+00:00 + + +https://pactus.org/2023/08/22/dev-report.html +2023-08-22T00:00:00+00:00 + + +https://pactus.org/2023/09/04/introduction-to-pips.html +2023-09-04T00:00:00+00:00 + + +https://pactus.org/2023/09/24/dev-report-pre-testnet-2.html +2023-09-24T00:00:00+00:00 + + +https://pactus.org/2023/09/28/how-sspos-works-in-simple-word.html +2023-09-28T00:00:00+00:00 + + +https://pactus.org/2023/10/15/release-0-15-0.html +2023-10-15T00:00:00+00:00 + + +https://pactus.org/2023/10/15/testnet-2-launched.html +2023-10-15T00:00:00+00:00 + + +https://pactus.org/2023/10/29/release-0-16-0.html +2023-10-29T00:00:00+00:00 + + +https://pactus.org/2023/11/12/release-0-17-0.html +2023-11-12T00:00:00+00:00 + + +https://pactus.org/2023/12/12/release-0-18-0.html +2023-12-12T00:00:00+00:00 + + +https://pactus.org/2024/01/04/release-0-19-0.html +2024-01-04T00:00:00+00:00 + + +https://pactus.org/2024/01/08/mainnet-announcement.html +2024-01-08T00:00:00+00:00 + + +https://pactus.org/2024/01/11/release-0-20-0.html +2024-01-11T00:00:00+00:00 + + +https://pactus.org/2024/01/22/testnet-2-concluded.html +2024-01-22T00:00:00+00:00 + + +https://pactus.org/2024/01/24/mainnet-launched.html +2024-01-24T20:24:00+00:00 + + +https://pactus.org/2024/01/31/release-1-0-0.html +2024-01-31T00:00:00+00:00 + + +https://pactus.org/2024/02/10/release-1-0-1.html +2024-02-10T00:00:00+00:00 + + +https://pactus.org/2024/02/18/release-1-0-2.html +2024-02-18T00:00:00+00:00 + + +https://pactus.org/2024/03/16/testnet-phoenix-launched.html +2024-03-16T00:00:00+00:00 + + +https://pactus.org/2024/04/14/release-1-1-0.html +2024-04-14T00:00:00+00:00 + + +https://pactus.org/2024/04/18/release-1-1-1.html +2024-04-18T00:00:00+00:00 + + +https://pactus.org/2024/04/25/release-1-1-3.html +2024-04-25T00:00:00+00:00 + + +https://pactus.org/2024/05/07/release-1-1-4.html +2024-05-07T00:00:00+00:00 + + +https://pactus.org/2024/05/30/release-1-1-5.html +2024-05-30T00:00:00+00:00 + + +https://pactus.org/2024/05/31/release-1-1-6.html +2024-05-31T00:00:00+00:00 + + +https://pactus.org/2024/06/02/release-1-1-7.html +2024-06-02T00:00:00+00:00 + + +https://pactus.org/2024/06/02/release-1-1-8.html +2024-06-02T00:00:00+00:00 + + +https://pactus.org/2024/06/20/release-1-2-0.html +2024-06-20T00:00:00+00:00 + + +https://pactus.org/2024/06/27/release-1-3-0.html +2024-06-27T00:00:00+00:00 + + +https://pactus.org/blog/ + + +https://pactus.org/ + + +https://pactus.org/community/ + + +https://pactus.org/about/faq/ + + +https://pactus.org/about/what-is-pactus/ + + +https://pactus.org/about/roadmap/ + + +https://pactus.org/term-of-use/ + + +https://pactus.org/download/ + + +https://pactus.org/contributing/ + + diff --git a/term-of-use/index.html b/term-of-use/index.html new file mode 100644 index 000000000..20a45852f --- /dev/null +++ b/term-of-use/index.html @@ -0,0 +1,607 @@ + + + + + + + + + + + + + Term of Use | Welcome to Pactus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

Terms of Use

+ +

Welcome to Pactus.

+ +

By using our website or services, you agree to these Terms of Use (“Terms”). +Please review them carefully. +If you do not accept the Terms, please do not use our website or services.

+ +

We may update the Terms occasionally. +Your continued use of our website or services after any changes means you accept the updates. +If you do not agree to the updates, please stop using our website and services.

+ +

“We,” “us,” “our,” and “Pactus” refer to the Pactus Blockchain Project. “You” refers to each user of our +website or services.

+ +

Website Access and Modifications

+ +

We strive to provide continuous website access but cannot guarantee uninterrupted or error-free service. +Pactus is not liable for any inaccessible features or website unavailability.

+ +

We may modify, expand, limit, or discontinue any part of the website or +services at any time to accommodate users or for other reasons, without notice. +We reserve the right to suspend website access temporarily or permanently, at our discretion, without notice.

+ +

Users may need to update their computer hardware or software to access some website content or features. +Pactus is not responsible for any inability to access the website or services due to user systems, +internet networks, or other causes.

+ +

Age Limit

+ +

Our website and services are not intended for those under 18. +If you are under 18, you may only use this website with the supervision of a parent, guardian, or other responsible adult.

+ +

No Personalized Advice

+ +

This website does not provide individualized legal, tax, financial, or investment advice. +Since everyone’s situation is different, we recommend consulting a qualified professional for financial decisions.

+ +

PAC coin is meant to be used as a medium of exchange. +Nothing on this website should be considered investment advice or a solicitation to +buy, hold, invest in, own, or use PAC coin.

+ +

No Content Guarantees

+ +

We cannot guarantee the accuracy, completeness, or quality of the information on this website. +All content is provided on an “as is” and “as available” basis, and use is at your own risk.

+ +

The content may be sourced from third parties. +Pactus is not responsible for any errors, omissions, or inaccuracies. +The information may not suit everyone and may only apply to certain regions.

+ +

It is your responsibility to evaluate if the information and services are technically and legally suitable for +your intended use and comply with applicable laws. +Always verify any information before using it for personal, financial, or business purposes.

+ +

We may modify website content and services at any time without notice. +We are not obligated to inform you of any changes or corrections.

+ +

External Content

+ +

Any testimonials, opinions, advice, offers, or other third party content on this website reflect the views +and intentions of those parties/people only. +They do not represent the views of Pactus.

+ +

We do not guarantee the accuracy, completeness, reliability, or usefulness of external content. +Users are responsible for assessing external content. +Pactus is not liable for any damage or loss from relying on or using third party content.

+ +

User Generated Content

+ +

By posting or submitting any material to this website, including the forum, you grant Pactus a +worldwide, fully paid-up, non-exclusive license to edit and display your materials on our website and +social media platforms as we deem appropriate.

+ +

You agree to indemnify and hold harmless Pactus and its Users from any third-party claims arising from +your materials. +You also represent that you own or have the right to post the materials, that they are +accurate, their use on the Pactus website complies with laws, and they will not cause harm to any +person.

+ +

Pactus has the right to remove any materials we deem objectionable, offensive, illegal, harmful, or in +violation of these Terms. +We may disclose user information if legally required.

+ +

Please contact info@pactus.org to request the removal of your posted content for reasons such as +privacy concerns, copyright issues, or no longer wanting your content to appear publicly. +We will review removal requests on a case-by-case basis.

+ +

File Safety and Security

+ +

Pactus implements measures to protect downloadable files on our website but cannot guarantee they +are free of infections, viruses, or harmful code.

+ +

We are also not responsible if users’ devices are infected by visiting our website or downloading files in +the event of a security breach.

+ +

If uncertain, users should consider compiling Pactus from the provided source code. +Users are responsible for meeting their own security requirements.

+ + + +

Pactus works with reputable partners, but does not endorse or take responsibility for sponsored content claims. +We do not review, recommend, or endorse any products or services promoted on our site.

+ +

Pactus is not liable for damages from misuse of personal information given to sponsors. +We are also not responsible for losses from using sponsor links or services on our site.

+ + + +

For user convenience, our website may contain links to external sites and resources. +However, we do not control these external sites and are not responsible for +their content, products, services, or information.

+ +

Link inclusion does not imply Pactus endorsement or affiliation. +Users should be aware they may leave our website by clicking links. +External site terms of use may differ from ours.Pactus is not responsible for +losses from users following links to external sites. +We encourage caution and reviewing external sites’ terms and policies before transacting or engaging.

+ +

Electronic Communications

+ +

Our website responses and email communications will be delivered electronically. +Pactus reserves the right to disclose any user emails or objectionable material +to comply with legal processes or protect the +rights and property of Pactus, its customers, suppliers, and users.

+ +

No Financial Services

+ +

This website does not engage in storing, selling, buying, sending, or receiving Pactus coins. +All activities related to owning and transferring Pactus coins occur on the DEX/CEX/decentralized Pactus network. +This website does not actively participate in that network.

+ +

No Liability

+ +

Pactus assumes no liability for any damages, claims, or losses related to using Pactus. +This includes third party actions or inactions and events.

+ +

It includes but is not limited to: security issues when using Pactus software/services, technical problems +when using Pactus software/services, software or data corruption when using Pactus software/services, +or user errors when using Pactus software/services.

+ +

Disclaimer of Warranties

+ +

Pactus expressly disclaims all warranties, representations, and conditions, whether express or implied, +including but not limited to the implied warranties and conditions of merchantability, fitness for a +particular purpose, and non-infringement.

+ +

This disclaimer extends to the use of this website and its services, as well as the accuracy, completeness, +timeliness, or currentness of its content, in any manner and for any purpose.

+ +

No Consequential Damages

+ +

Under no circumstances will Pactus be liable for any incidental, special, consequential, exemplary, +indirect, or other damages arising from use of this website, its services, or content. +This includes but is not limited to data loss, even if advised of such damage possibilities.

+ +

This disclaimer applies whether based on contract, tort, negligence, product liability, strict liability, or otherwise. +It extends to all potential scenarios and circumstances.

+ +

General

+ +

These Terms of Use (TOU) and any applicable Terms of Service are the full agreement for website use by +users and Pactus. They replace previous agreements.

+ +

If Pactus or a user does not exercise a TOU right, this does not waive the right. If a TOU provision is +invalid, the rest remain valid.

+ +

The TOU and Terms of Service are intentionally in English, the governing language for Pactus and users.

+ + + +

Attributed Content

+ +

Logos for operating systems, platforms, and sponsors we support are copyrighted by their respective owners. +Pactus does not own these copyrights but uses the logos with permission or in a clear, non- harmful way.

+ +

Privacy Policy

+ +

Data Collection and Use

+ +

We collect standard server logs from our website. +This data helps provide site statistics, improve content and information flow, analyze errors, and diagnose dead links. +A segment of server logs gathers download statistics to better understand user needs.

+ +
    +
  • Last update: 25 January 2024
  • +
+ +
+
+
+
+ + + + + diff --git a/zh/2022/08/29/dev-meeting.html b/zh/2022/08/29/dev-meeting.html new file mode 100644 index 000000000..dbc11a2d4 --- /dev/null +++ b/zh/2022/08/29/dev-meeting.html @@ -0,0 +1,447 @@ + + + + + + + + + + + + + Dev meeting | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 04 September 2022, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

NanoMsg instead of ZeroMQ

+ +

During the meeting, Joseph suggested using Nanomsg instead of ZeroMQ because building ZeroMQ is not easy, +especially in Windows. Additionally, we can use the pure Go implementation of Nanomsg.

+ +

The format of block events was defined as follows:

+ +
<event_id: 1 byte><event_data: variant><height: 4 bytes><seq_num: 4 bytes>
+
+ +

As a consequence of this, smart contracts events can be defined more easily and +Infura-like services become simple, as we can just replay the events.

+ +

Reviewing a Pull Request

+ +

Nagaraj’s pull request reviewed.

+ +

Renaming project

+ +

The team discussed renaming (rebranding) the project and decided to create an online survey to +gather suggestions for a new name. +Everyone is encouraged to participate in the survey and suggest new names for the project.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2022/09/04/dev-meeting.html b/zh/2022/09/04/dev-meeting.html new file mode 100644 index 000000000..d95779990 --- /dev/null +++ b/zh/2022/09/04/dev-meeting.html @@ -0,0 +1,556 @@ + + + + + + + + + + + + + Dev meeting | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 29 August 2022, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

Project renamed to Pactus

+ +

During the last meeting, the team conducted an online survey to rename the project. +A total of 31 responses were received, and the following names were suggested:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVotes
Sirius11
Pactus10
Nova7
Texo6
Zemus6
Helios6
Tutti5
Haki5
Aegeus4
Virgo4
Zentora3
Zinova3
Xerxes2
Ledgeria2
Solidus2
Welt2
Ventura2
Zebra2
Miranet2
Monetha2
FutureHub1
Muonet1
Mentha1
Hypatios0
Chaintopia0
Sycee0
Lepus0
+ +

After reviewing the responses, the team chose “Pactus” as the new name for the project. 🎉 +The project will be moved to “pactus-project/pactus,” and the team plans to announce it on social media.

+ +

Discussion on GUI

+ +

In terms of the GUI, Joseph suggested using Flutter, and the team agreed. +To interact with the wallet, gRPC APIs will be provided, and the GUI will use these APIs.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2022/09/18/dev-meeting.html b/zh/2022/09/18/dev-meeting.html new file mode 100644 index 000000000..e833d733e --- /dev/null +++ b/zh/2022/09/18/dev-meeting.html @@ -0,0 +1,466 @@ + + + + + + + + + + + + + Dev meeting | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 18 September 2022, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

Discussion about Testnet

+ +

The team discussed Testnet and related issues, including IP block issues that were found by Hadi. +Due to sanctions, some IPs are blocked, so the team will run a support node to assist users inside Iran. +The GUI application had some issues on Windows, but they were fixed and tested by Hadi.

+ +

Discussion about Website

+ +

The website still has some issues, such as the need to rename the animation to “Pactus” and the lack of a logo. +The community suggested some logos. Additionally, the roadmap page is missing.

+ +

Status of social medias

+ +

The team discussed the status of social media platforms, including:

+ +
    +
  • Discord: 70 members
  • +
  • Instagram: 87 followers
  • +
  • Telegram: 20 followers
  • +
  • Linkedin: 20 followers
  • +
  • Twitter: Not yet
  • +
+ +

The team also decided to announce the project on social media on 29 September.

+ +

Consensus parameters

+ +

The team discussed the current consensus parameters:

+ +
    +
  • Total supply: 21 million coins
  • +
  • Reward: 1 coin per block
  • +
  • Block time: 10 second
  • +
  • Committee size: 21 members
  • +
  • Bond interval: one hour
  • +
  • Unbond interval: 21 days
  • +
  • Fee fraction: 0.0001
  • +
  • Min fee: 0.0000001
  • +
  • Max fee: 0.01
  • +
  • Maximum stake: 12381
  • +
+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2022/09/20/release-0-9-0.html b/zh/2022/09/20/release-0-9-0.html new file mode 100644 index 000000000..28a46ceba --- /dev/null +++ b/zh/2022/09/20/release-0-9-0.html @@ -0,0 +1,436 @@ + + + + + + + + + + + + + Pactus 0.9.0 released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.9.0 released

+ +

Overview

+ +

Pactus Blockchain Release Version 0.9.0 +is now available for download. +This release includes a new graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Download

+ +

This version has been implemented for Testnet-0 and is preparing for the upcoming Mainnet launch. +To get started with the Pactus Blockchain Testnet-0, simply download +the latest version and run the Pactus software.

+ +

Join the Testnet now and get ready for the future!

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2022/09/24/testnet-0-launched.html b/zh/2022/09/24/testnet-0-launched.html new file mode 100644 index 000000000..ba702a86b --- /dev/null +++ b/zh/2022/09/24/testnet-0-launched.html @@ -0,0 +1,432 @@ + + + + + + + + + + + + + Testnet-0 launch announcement | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Testnet-0 launch announcement

+ +

testnet

+ +

The Pactus blockchain Testnet-0 is now accessible. +To participate, simply download the Pactus application version 0.9.0 and +connect to the Testnet without any special configurations. +For test coins, please visit our Discord channel and share your validator address.

+ +

By taking part in the Testnet, you can familiarize yourself with the Pactus blockchain and +get ready for the Mainnet launch. +Testnet participants will also be given higher priority during the Mainnet launch.

+ +

Please share your feedback with us to help improve the user experience in future versions of the software.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2022/10/30/dev-meeting.html b/zh/2022/10/30/dev-meeting.html new file mode 100644 index 000000000..408376ab9 --- /dev/null +++ b/zh/2022/10/30/dev-meeting.html @@ -0,0 +1,459 @@ + + + + + + + + + + + + + Dev meeting | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 30 October 2022, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

In memory of Mahsa Amini

+ +

The meeting started in memory of Mahsa Amini. +We in the Pactus family stand in solidarity with courageous people who are fighting for equality, equity and freedom in Iran.

+ +

Woman Life Freedom

+ +

Launching Block explorer

+ +

The beta version of the block explorer has been launched 🚀 and is now available at +https://pacviewer.com.

+ +

Nagaraj explained the block explorer and some of the features.

+ +

Project road map

+ +

Project road map was discussed.

+ +

IdeaKita pitch deck

+ +

Ali presented the Pactus pitch deck for the IdeaKita in Malaysia. +The IdeaKita program, under the Malaysia Digital Economy Corporation (MDEC), is designed to +support entrepreneurs and startups in Malaysia.

+ +

Latest development progress

+ +

The latest pull requests were reviewed:

+ + + +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2022/11/24/release-0-9-1.html b/zh/2022/11/24/release-0-9-1.html new file mode 100644 index 000000000..ae66a3b94 --- /dev/null +++ b/zh/2022/11/24/release-0-9-1.html @@ -0,0 +1,451 @@ + + + + + + + + + + + + + Pactus 0.9.1 released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.9.1 released

+ +

Overview

+ +

Pactus Blockchain Release Version 0.9.1 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Download

+ +

This version has been implemented for Testnet-0 and is preparing for the upcoming Mainnet launch. +To start using the Pactus Blockchain Testnet-0, +you can download the latest version from download page +and join the Testnet.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +
    +
  • Blocks can be fully decoded when queried in gRPC
  • +
  • The HTTP module now uses gRPC module, making node configuration simpler by removing the CapnP module
  • +
  • Reducing the blockchain size by saving blocks by number instead of hash
  • +
  • The wallet can hold unconfirmed transactions
  • +
  • The wallet can use different gRPC servers
  • +
  • The GUI displays committee information
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/03/01/what-is-testnet.html b/zh/2023/03/01/what-is-testnet.html new file mode 100644 index 000000000..4191898f0 --- /dev/null +++ b/zh/2023/03/01/what-is-testnet.html @@ -0,0 +1,503 @@ + + + + + + + + + + + + + What is a Testnet? | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

What is a Testnet?

+ +

Mainnet vs Testnet?

+ +

If you have ever wondered what Testnet is and how it is different from Mainnet, read this article to the end to find out!

+ +

Mainnet and Testnet are two widely used terminologies in the Blockchain ecosystem; +so it is important to understand the meaning and differences while working in the industry or +following announcements of the Blockchain projects like Pactus.

+ +

Here’s a quick explanation: +Before the actual live version of a Blockchain network that is used for real transactions, +functions and smart-contracts (which is referred as Mainnet), +there is a test version of the Blockchain network for testing purposes (which is referred as Testnet). +In Testnet, a safe environment is provided to help developers experiment and test their applications, +and make sure that everything functions smoothly in the Mainnet version.

+ +

Testnet

+ +

A Testnet is a simulation of a Blockchain, in which developers can test all the functionalities of +their Blockchain network without risking their assets and convenience of end-users. +Using Testnet, any possible error, bug or malfunctions can be fixed before the Mainnet launch. +Testnet also can be an experimental environment for new features, updates and upgrades. +So several Testnet networks of the same version or newer version of the Mainnet can be implemented on the roadmap.

+ +

What are use cases of Testnet?

+ +

A secure environment to test development ideas and updates. +So many features and minor details in Pactus project have been successfully developed so far using the Testnet; such as:

+ +
    +
  • extra details and information on Pactus-GUI;
  • +
  • well-functioning Pactus Blockchain explorer to access transactions and block details;
  • +
  • Upgrades that led to decreasing the size of the Pactus network
  • +
+ +

Providing a safe testing ground for resolve scalability and security problems, as well as decentralization issues. +Pactus network is also a secure and purely decentralized network. However in the last updates during the Testnet, +developers are now able to decrease the database size by approximately 10% without compromising performance. +They did it by utilizing block height instead of hash to store blocks within the database. (you can find out more +here).

+ +

Testing new versions, patches and features on Testnet. it is vital for enhancing the security, load testing, +Blockchain migration, integration tests, and etc. This is why you can now use the latest version of Pactus-GUI +that works like clockwork and is extremely secure.

+ +

Testing the functions of cryptocurrency without disrupting the Mainnet. In the Testnet of Pactus Blockchain, +you as a user or validator can use all the features to send, receive, bond or unbond your assets in the Pactus-GUI.

+ +

Development and simulation of smart contract features and DApps. Note that many Blockchain projects like Pactus, +can be used as smart-contract platforms. So the Testnet can be designed in different stages to test and improve +different applications of the network.

+ +

Please note that after a certain period of time, when developers get satisfied with the functionality and debugging process, +they launch Mainnet. Mainnet has its own independent genesis blocks; +so the assets and addresses that users use in Testnet are not valid inside the new Mainnet Blockchain anymore. +In fact the whole Blockchain network starts working from the scratch and users and validators start to +work with real coins and transactions instead of the simulated ones. But since Testnet has an important effect +on the health and improvement of the network, in Pactus Blockchain, we have several advantages +for the people who join the Testnet.

+ +

Why should you join the Testnet?

+ +

There are different contributors in a Blockchain network; +Some people are developers and programmers that use the Testnet to contribute, enhance and lead the project to a better future. +Testnet is actually vital for them to perform their changes and try their innovations and ideas.

+ +

But you might also be an end user; you might want to either be a validator and stake your assets to earn more Pactus coins, +or you might want to learn how to use the network for future personal applications. Either way, +you might find it handy to give it a try and be familiar with Pactus-GUI and its different features.

+ +

However, there is another advantage for end users who join the Testnet. +While using the network, running a node or testing the Pactus-GUI in Testnet period, you are contributing to +the community to find improvement potentials, that’s why there are more advantages contemplated for the Testnet users; +Soon our Mainnet will be launched and also Pactus network will be announced and listed in well-known exchanges. +As an early contributor, you will have the advantage of getting some extra initial coins at the beginning of Mainnet launch. +So that you can use it to run a validator node and earn more from staking your assets. This airdrop is considered +for every individual who installs Pactus-GUI and starts a node in Testnet.

+ +

There are other positive conditions you may experience as an early contributor.

+ +
    +
  • Advanced and very responsive support for your issues (we dedicate more time to provide you with solutions)
  • +
  • Embracing your suggestions, improvement ideas, needs and information you may require to have a better user experience.
  • +
+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/04/21/testnet-0-concluded.html b/zh/2023/04/21/testnet-0-concluded.html new file mode 100644 index 000000000..d6b455802 --- /dev/null +++ b/zh/2023/04/21/testnet-0-concluded.html @@ -0,0 +1,465 @@ + + + + + + + + + + + + + Story of Testnet-0 | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Story of Testnet-0

+ +

What is Testnet?

+ +

Testnet is a testing environment where developers and users can try out the functionality of a blockchain project, +without putting real assets or data at risk. +It helps to ensure that the final product is reliable and secure for users to use. +If you like to read more about the Testnet you can check out our post on +“What is Testnet?”.

+ +

Summary of Testnet-0

+ +

In September 2022, we launched Testnet-0. +The purpose of this Testnet was to +check the consensus protocol, +test different transaction types, +and ensure the stability of the blockchain. +We also wanted to test the sortition algorithm +to make sure it works properly.

+ +

The committee +for the Testnet-0 was set to five validators, and more than 19 validators joined during the Testnet period. +Over 2 million blocks were created, and more than 3.2 million transactions were processed during this time. +The size of the blockchain is approximately 1 gigabyte. +The maximum number of transactions recorded in a single block was 386. With a block time of 10 seconds, +we can confirm that Pactus blockchain can support up to 30 transactions per second (TPS), +which is a reasonable number for TPS. Based on real-time statistics available at realtps, +we can see that Pactus is among the top 10 blockchains in terms of TPS.

+ +

At this point, the development team decided to end the Testnet-0 and move on to the next one, +Testnet-1. We are planning to run the Testnet-1 to prepare for the MainNet launch. +We will provide updates on our progress and share the details of the new Testnet soon.

+ +

Special thanks to the community

+ +

This Testnet was important for us. +It helped us learn what we need to do to make Pactus work even better. +Without the community that supports us and dedicates their time and resources to testing and feedback, +we wouldn’t have been able to progress as we have.

+ +

We thank all of them for their valuable contributions. +As promised, participants in Testnets will be given priority as validators for the MainNet, and +will receive bounty PAC coins to set up their validators.

+ +

We are grateful to all those who participated in Testnet-0, and +we encourage them to join our next Testnet to help us improve Pactus. +As a community-based project, we rely on the support of our community members, and we value any help we receive.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/05/08/release-0-10-0.html b/zh/2023/05/08/release-0-10-0.html new file mode 100644 index 000000000..af9dddc49 --- /dev/null +++ b/zh/2023/05/08/release-0-10-0.html @@ -0,0 +1,479 @@ + + + + + + + + + + + + + Pactus 0.10.0 released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.10.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.10.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlight

+ +

The main update in this version allows users to set up multiple validators in one node. +Users can set up to 32 validators in a single node, and each validator can stake up to 1,000 coins.

+ +

Multi validators

+ +

Download

+ +

This version has been implemented for Testnet-1 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • removing address from account (#454)
  • +
  • supporting multiple consensus instances (#450)
  • +
  • adding sortition interval to the parameters (#442)
  • +
+ +

Fix

+ +
    +
  • gui: check if the node has an active consensus instance (#458)
  • +
  • Use of a Persistent Merkle tree to enhance performance of calculating the +state hash; fully tested in Testnet-0 (#432)
  • +
  • GetBlockchainInfo API in gRPC now returns the total number of validators and accounts (#439)
  • +
  • wallet path as argument (#455)
  • +
  • adding reward addresses to config (#453)
  • +
  • removing committers from the certificate hash (#444)
  • +
  • prevent data race conditions in committee (#452)
  • +
  • using 2^256 for the vrf denominator (#445)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/05/09/testnet-1-launched.html b/zh/2023/05/09/testnet-1-launched.html new file mode 100644 index 000000000..77b61580e --- /dev/null +++ b/zh/2023/05/09/testnet-1-launched.html @@ -0,0 +1,462 @@ + + + + + + + + + + + + + Testnet-1 launch announcement | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Testnet-1 launch announcement

+ +

Overview

+ +

The Pactus blockchain Testnet-1 is now available for participation. +This version simulates the Mainnet environment and evaluate the system’s performance, stability, +and security in a controlled environment. +The primary goal of this version of Testnet is to determine the efficient and secure committee size for the Mainnet.

+ +

Key Aspects

+ +
    +
  • Simulating the Mainnet environment
  • +
  • Determining the actual block creation time
  • +
  • Assessing the staking mechanism and consensus protocol
  • +
  • Evaluating network usage under different loads
  • +
  • Evaluating the syncing process for new nodes joining the network
  • +
  • Ensuring network stability with over 1000 validators
  • +
  • Evaluating transaction performance
  • +
  • Conducting stress tests
  • +
  • Performing security tests, including double spend attacks, Sybil attacks +(nodes with different identities), and forking resistance
  • +
+ +

Joining Testnet-1

+ +

To join the Testnet, download Pactus software +version 0.10.0 and +connect to Testnet without any special configuration or hardware. +You can run the software on your personal computer or laptop. +To acquire test coins, visit the Discord channel and +provide your validator address.

+ +

Benefits for Participation

+ +

By taking part in the Testnet, users can familiarize themselves with the Pactus blockchain and +be well-prepared for the Mainnet launch. +Testnet participants will also receive higher priority during the Mainnet launch and +get free coins for initial staking on the Mainnet.

+ +

Your Feedback Matters

+ +

User feedback plays a vital role in the improvement of the Pactus blockchain. +Share your thoughts and experiences to contribute to the enhancement of future software versions.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/05/29/release-0-11-0.html b/zh/2023/05/29/release-0-11-0.html new file mode 100644 index 000000000..1b1e2a621 --- /dev/null +++ b/zh/2023/05/29/release-0-11-0.html @@ -0,0 +1,491 @@ + + + + + + + + + + + + + Pactus 0.11.0 released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.11.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.11.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

The main update in this version is the fix for the relay +connection issue. +A relay is a peer in the network that facilitates the connection between two peers, +particularly when they are using home internet.

+ +

Another significant update is that sending a Bond transaction +is now more user-friendly. +Users no longer need to set the validator public key if they want to bond Test PAC coins to their validators.

+ +

Bond transaction dialog

+ +

Download

+ +

This version has been implemented for Testnet-1 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • gui: showing the total number of validators (#474)
  • +
  • network: fixing relay connection issue (#475)
  • +
  • consensus: rejecting vote with round numbers exceeding the limit (#466)
  • +
  • increase failed counter when stream got error (#489)
  • +
  • boosting syncing process (#482)
  • +
  • waiting for proposal in pre-commit phase (#486)
  • +
  • retrieving public key from wallet for bond transactions (#485)
  • +
  • restoring config file to the default (#484)
  • +
  • defining ChainType in genesis to detect the type of network (#483)
  • +
  • reducing the default Argon2d to consume less memory (#480)
  • +
  • adding password option to the start commands (#473)
  • +
+ +

Refactor

+ +
    +
  • rename send to transfer. (#469)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/06/19/release-0-12-0.html b/zh/2023/06/19/release-0-12-0.html new file mode 100644 index 000000000..93848a155 --- /dev/null +++ b/zh/2023/06/19/release-0-12-0.html @@ -0,0 +1,489 @@ + + + + + + + + + + + + + Pactus 0.12.0 released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.12.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.12.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version is focused on improving the sync time to make it faster. +This is achieved by implementing a caching mechanism that executes transactions more quickly and +improves the calculation of total power (stake) of the blockchain in a more effective way.

+ +

Syncing progress

+ +

Download

+ +

This version has been implemented for Testnet-1 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • add GetAccountByNumber API to get account by number (#511)
  • +
+ +

Fix

+ +
    +
  • caching account and validator in store (#513)
  • +
  • get recent blocks by stamp (#509)
  • +
  • closing the mDNS connection upon stopping the network (#508)
  • +
  • updating linkedmap to use generic (#507)
  • +
  • removing state from cache (#506)
  • +
  • Typo in GUI (#499)
  • +
  • supporting localnet (#492)
  • +
+ +

Refactor

+ +
    +
  • update total power calculation based on power change(deltas) (#518)
  • +
  • GetValidators return all validators in state validators map (#512)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/07/01/release-0-13-0.html b/zh/2023/07/01/release-0-13-0.html new file mode 100644 index 000000000..11412ac28 --- /dev/null +++ b/zh/2023/07/01/release-0-13-0.html @@ -0,0 +1,480 @@ + + + + + + + + + + + + + Pactus 0.13.0 released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.13.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.13.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

Users can now restore the default_wallet during the node initialization. +If users have a backup of the seed phrase (mnemonic) for the default_wallet, +they can now restore it and re-initialize the node.

+ +

Restore mode

+ +

Download

+ +

This version has been implemented for Testnet-1 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • implemented restore wallet base on input seed (#553)
  • +
  • measuring total sent and received bytes (#552)
  • +
  • add validate seed and restore wallet (#533)
  • +
  • HTTP: Missing handlers (#549)
  • +
  • gui: update about dialog and menu items in help (#532)
  • +
+ +

Refactor

+ +
    +
  • implementing TestSuite (#535)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/07/05/testnet-500-validators.html b/zh/2023/07/05/testnet-500-validators.html new file mode 100644 index 000000000..1d39ce163 --- /dev/null +++ b/zh/2023/07/05/testnet-500-validators.html @@ -0,0 +1,454 @@ + + + + + + + + + + + + + 500 validators joined Testnet | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

500 validators joined Testnet

+ +

For a Proof of Stake blockchain, validators are important for +maintaining the network’s integrity and security. They are similar to miners in Proof of Work blockchains like Bitcoin.

+ +

Pactus as a real Proof of Stake blockchain, has achieved a significant milestone. +More than 500 validators joined the Testnet +in less than 2 months. +This accomplishment proves that Pactus is reliable, resilient, and trustworthy. More importantly, it sets new standards +in the blockchain world. In fact, the Pactus Testnet is even more decentralized than some well-known blockchains.

+ +

500 validators of Testnet

+ +

One key reason why Pactus can accommodate more validators is its powerful +consensus mechanism. +The consensus mechanism in Pactus eliminates the need for delegation, making it possible for anyone to become a validator. +Additionally, the user-friendly application ensures that even those new to blockchain can easily contribute to the network.

+ +

What is the next

+ +

To remain competitive in the market, Pactus recognizes the importance of prioritizing user space. +We aim to ensure that running Pactus is affordable and accessible to anyone, regardless of their technical expertise or +available resources.

+ +

To achieve this, the Pactus team constantly monitors network, storage, and computational usage, striving to keep them +at minimal levels. +By doing so, we enable more individuals to participate in the Pactus blockchain.

+ +

Currently, the Pactus team is working on optimizing and reducing network usage. This effort will lead to reduced costs, +especially for users who are using home internet connections.

+ +

Furthermore, we are planning to introduce a pruning mode, allowing users to run the Pactus blockchain with significantly +less storage. +Although we believe the storage size is already small, our goal is to enable users to +retain only the most recent blockchain history. +This approach ensures that the blockchain size remains as compact as possible by disregarding some history of the blockchain.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/07/09/dev-meeting.html b/zh/2023/07/09/dev-meeting.html new file mode 100644 index 000000000..024244617 --- /dev/null +++ b/zh/2023/07/09/dev-meeting.html @@ -0,0 +1,460 @@ + + + + + + + + + + + + + Dev meeting | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev meeting

+ +

Meeting Summary

+ +

The meeting took place on 09 July 2023, at 2:00 PM UTC via Google Meet, +with team members from different time zones joining to discuss key aspects of the Pactus project.

+ +

Overview to the Network Module

+ +

The meeting began with an overview of the Network module in Pactus. +This module uses Libp2p as its underlying network protocol.

+ +

The Network module is agnostic about the content of the message and +handles two types of messages: Gossip messages, which are broadcasted, +and Stream messages, which are sent directly to a specific peer. +The team discussed the relay nodes that enable communication for nodes behind NAT. +Upon receiving a message, the module publishes an event. +The two types of events are Gossip events and Steam events.

+ +

Network messages

+ +

The team discussed the issue of Relay connections resetting, and explored solutions such as +hole punching or using UDP and IPv6.

+ +

Some users in the Testnet reported high network usage. +The team discussed implementing metrics for LibP2P to monitor network usage effectively. +The discussion related to this issue can be found here. +Additionally, the team discussed the customization of network resources, +including setting limits for inbound and outbound connections.

+ +

Overview to the Sync Module

+ +

Moving on, the Sync module was discussed. +Unlike the Network module, the Sync module has full knowledge about the messages and packets. +The module handles a range of message types, which can be found +here.

+ +

It was suggested that we need to define metrics for each message type. +There was also a discussion about the need for reducing the messages to optimize the use of network resources.

+ +

The team decided to continue discussing these topics in future meetings. +They also plan to work on improving the Network and Sync modules based on these discussions.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/08/01/testnet-1-concluded.html b/zh/2023/08/01/testnet-1-concluded.html new file mode 100644 index 000000000..4153216fe --- /dev/null +++ b/zh/2023/08/01/testnet-1-concluded.html @@ -0,0 +1,489 @@ + + + + + + + + + + + + + Story of Testnet-1 | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Story of Testnet-1

+ +

What is Testnet?

+ +

Testnet is a testing environment where developers and users can try out the functionality of a blockchain project, +without putting real assets or data at risk. +It helps to ensure that the final product is reliable and secure for users to use. +If you like to read more about the Testnet you can check out our post on +“What is Testnet?”.

+ +

Summary

+ +

In May 2023, we launched Testnet-1. +The main purpose of this Testnet was to measure block time creation and the responsiveness of the blockchain. +The development team also focused on evaluating the network’s performance. +Additionally, the overall performance of the software and the syncing process were closely examined and assessed.

+ +

The committee for Testnet-1 was set to 21 validators, +and 584 validators joined during the Testnet period. +More than 600,000 blocks were created, and more than 1 million transactions were processed during this time. +The size of the blockchain is about 300 megabytes.

+ +

About 300,000 coins were staked during this period, it was almost 50% of the total generated coins. +It shows that users, even in Testnet, tend to stake their coins.

+ +

Staking chart

+ +

We were able to extract the confirmation time of transactions. +More than 97% of transactions were confirmed in just one block after submission. +This indicates that the transaction pool and broadcasting models are working fine.

+ +

Transaction confirmation chart

+ +

Based on logs from one of the validators, the time for creating a block is about 3 seconds in normal cases. +More than 97% of blocks are committed in the first rounds.

+ +

Consensus round chart

+ +

Major updates

+ +

During Testnet-1, we released three versions(Version +0.11.0, +0.12.0, +0.13.0), and the upgrade process was smooth. +Unfortunately, during Testnet-1, we encountered a consensus failure that may occur at any time in the future. +The consensus failure was resolved by requiring some validators to re-sync their nodes. +At this time, the development team decided to stop Testnet-1 and work on improvements that are not backward compatible, +including:

+ +
    +
  • Improving the consensus protocol
  • +
  • Reducing the blockchain size
  • +
  • Optimizing the network usage
  • +
+ +

After stabilizing the changes, we will announce the next Testnet, and hopefully, this will be the pre-launch Testnet.

+ +

Special thanks to the community

+ +

This Testnet was important for us. +It helped us learn what we need to do to make Pactus work even better. +Without the community that supports us and dedicates their time and resources to testing and feedback, +we wouldn’t have been able to progress as we have.

+ +

We thank all of them for their valuable contributions. +As promised, participants in Testnets will be given priority as validators for the MainNet, and +will receive bounty PAC coins to set up their validators.

+ +

We are grateful to all those who participated in Testnet-1, and +we encourage them to join our next Testnet to help us improve Pactus. +As a community-based project, we rely on the support of our community members, and we value any help we receive.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/08/22/dev-report.html b/zh/2023/08/22/dev-report.html new file mode 100644 index 000000000..58a8ac7de --- /dev/null +++ b/zh/2023/08/22/dev-report.html @@ -0,0 +1,454 @@ + + + + + + + + + + + + + Dev report | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev report

+ +

Abstract

+ +

there is several activities in Pactus github this month, here is a clear report and explain of activities.

+ +

Github Pactus

+ +

Linters

+ +

one of new changes in Pactus project is new linters we added this month. +what is linters? +linters are just a set of rules for the style of source codes, they force developers to write new codes +in correct, clean and safe way.

+ +

why we use them? +the reason we are using linters in Pactus and add new ones, is to make the code more safe, +and also make it easy to work on for new contributors because we are focus on being decentralized even in development.

+ +

Linters we added till now

+ +

TLA+ spec

+ +

one another new change in Pactus is updating TLA+ spec, which is related to consensus, +as you know we had some problem with consensus in Testnet-1, we fixed the issues and now we are trying to make it more clean.

+ +

link to changes

+ +

if you wish you can learn more about Pactus consensus here.

+ +

Refactoring

+ +

some of previous Pactus dependencies was so old, so we start refactoring them and use new libraries. +also we used some libraries with higher performance which is make Pactus full node more faster in mainnet.

+ +

one of refactors

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/09/04/introduction-to-pips.html b/zh/2023/09/04/introduction-to-pips.html new file mode 100644 index 000000000..42463617f --- /dev/null +++ b/zh/2023/09/04/introduction-to-pips.html @@ -0,0 +1,462 @@ + + + + + + + + + + + + + Introduction to PIPs | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Introduction to PIPs

+ +

Introduction to PIPs

+ +

In our commitment to transparency and innovation, we’re excited to introduce a major step in Pactus’s journey: +the Pactus Improvement Proposals, or PIPs.

+ +

PIPs image

+ +

What are PIPs?

+ +

Pactus Improvement Proposals (PIPs) define standards for the ongoing development and enhancement of the Pactus platform. +Each PIP has a unique number like PIP-2, +PIP-3, and so on. +These proposals provide technical details for suggested modifications or enactments, serving as a guide for development.

+ +

The PIP process

+ +

The PIP process is open, allowing any member of the Pactus community to propose a PIP. +The author should provide a summary, motivation, and a detailed technical explanation. +The Pactus Laboratory team will carefully review each PIP. +Security considerations must be addressed before finalizing a PIP. +Once finalized, it can be added to the code. +This process helps avoid unexpected issues during development and maintain consistency and safety.

+ +

The Origins of PIPs

+ +

The Pactus Improvement Proposals (PIPs) was inspired by the +Ethereum Improvement Proposals (EIPs) system, +which had its roots in the Bitcoin Improvement Proposals (BIPs) and +Python Enhancement Proposals (PEPs).

+ +

New Feature Policy

+ +

From now on, all major changes or new features in the Pactus project require a PIP. +Any implementation must reference its specific PIP. +Without approval from Pactus Laboratory team, changes won’t be approved and added to the codebase.

+ +

PIPs Repository

+ +

For a complete list of Pactus Improvement Proposals, visit this link. +The corresponding GitHub repository is accessible here.

+ +

PIPs repository on Github

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/09/24/dev-report-pre-testnet-2.html b/zh/2023/09/24/dev-report-pre-testnet-2.html new file mode 100644 index 000000000..b7299691c --- /dev/null +++ b/zh/2023/09/24/dev-report-pre-testnet-2.html @@ -0,0 +1,472 @@ + + + + + + + + + + + + + Dev Report pre-testnet2 | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Dev Report pre-testnet2

+ +

Abstract

+ +

there is several activities in Pactus github in September month, here is a clear report and explain of activities.

+ +

Github Pactus

+ +

Implementing PIP 2, 3 and 4

+ +

After starting Pactus Labs and PIPs, +we start implementing each accepted PIP one by one to improve Pactus, here is a list of implemented PIPs:

+ + + +

Network

+ +

There is some very good change and new features for Pactus network module, +this list contain a list of important changes in Pactus networking:

+ + + +

gRPC and nanomessage services

+ +

We also updated, improved and enhanced gRPC and nanomessage services for better developer experience, +for third-party and side project developers, here is some changes:

+ + + +

Refactoring and other new feature or debugs

+ +

We had some not implemented feature request, not fixed bugs and some issue with new golang version, +list of this changes:

+ + + +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/09/28/how-sspos-works-in-simple-word.html b/zh/2023/09/28/how-sspos-works-in-simple-word.html new file mode 100644 index 000000000..b5e0879bd --- /dev/null +++ b/zh/2023/09/28/how-sspos-works-in-simple-word.html @@ -0,0 +1,506 @@ + + + + + + + + + + + + + How SSPoS (Solid State Proof of Stake) works in simple word | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

How SSPoS (Solid State Proof of Stake) works in simple word

+ +

Abstract

+ +

In all Blockchain protocols, there is a concept called a consensus mechanism. +This mechanism is used to enable nodes to reach an agreement +on the state of the Blockchain they are +maintaining, in order to have a synchronized and integrated Blockchain.

+ +

For now, we have a lot of consensus mechanisms in the Blockchain world. +Pactus Blockchain uses the SSPoS (Solid State Proof of State) which is a new consensus model.

+ +

To explain how it works let’s start with explaining one of the first and simplest +consensus mechanisms (or if you already know them, just jump into the last part named SSPoS).

+ +

Solid State Proof of Stake

+ +

PoW (Proof of Work)

+ +

In the proof of work model, each node in the network should solve a complex mathematical +problem that requires lots of computing resources to make a new block.

+ +

In this way, it’s highly unlikely that anyone would be able to change +past transactions and change Blockchain states such as balances, +without expending equivalent computational power.

+ +

By doing this we ensure the security and integrity of the Blockchain.

+ +

The concept was adapted from digital tokens by Hal Finney in 2004 +through the idea of “reusable proof of work” using the 160-bit secure hash algorithm 1 (SHA-1).

+ +

Bitcoin uses this consensus model.

+ +

PoS (Proof of Stake)

+ +

On the other hand, PoS or Proof of Stake is another consensus mechanism that instead of miners has validators!

+ +

Validators lock a number of their assets in the Blockchain and they can transfer or use it +till it is locked which we call staking. +after each Block is committed one of the validators will be chosen randomly (more amount of stake, +more chance to be chosen) when a validator is chosen +it proposes a block and announces it to other nodes to be validated, +when a supermajority of validators accept the block it’s going to be committed.

+ +

In this system, validators have no incentive to behave maliciously or dishonestly. +If they do, they risk losing the stake amount.

+ +

More amount of validators in a PoS Blockchain makes it more secure, +decentralized, and trustable, but it also makes the validation and consensus process slower and more difficult.

+ +

Ethereum uses this model.

+ +

DPoS (Delegated Proof of Stake)

+ +

DPoS or Delegated Proof of Stake, is a variant of the PoS consensus algorithm. +users entrust their stakes to a small group of “delegates”. +These delegates are responsible for validating transactions +and creating blocks. The number of delegates is limited +to ensure accountability and efficiency in the validation process.

+ +

Some Blockchains like Cardano and Tron use DPoS.

+ +

DPoS tries to solve the issue of PoS which when validators +increase we have an inefficient validation process. but the main issue with DPoS itself is putting a lot +of trust in the hands of a small number of delegates, +which goes against the principle of “don’t trust, verify”.

+ +

SSPoS (Solid State Proof of Stake)

+ +

BUT, HOW ABOUT SSPoS? HOW ABOUT PACTUS?

+ +

In Pactus Blockchain, we have something called Solid State Proof of Stake +and we try to fix the previous model’s issue, let me explain.

+ +

Pactus uses a dynamic committee of validators with a fixed size of 51, +but the members of the committee randomly change in each round, +based on stake amount the chance of being chosen is higher. on the other hand, +the number of validators out on the committee is unlimited, allowing anyone +to become a validator by staking coins.

+ +

At each block, validators participate in a sortition algorithm by generating a random number +between zero and the total staked coins. If the number is less +than the validator’s stake, they can enter the committee and replace the oldest committee member.

+ +

So, in SSPoS models which are a variant of PoS, we can reach a consensus, +without using high computation resources, having an inefficient +validation process by increasing validator numbers, +and also without breaking the principle of “don’t trust, verify”.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/10/15/release-0-15-0.html b/zh/2023/10/15/release-0-15-0.html new file mode 100644 index 000000000..9320fc140 --- /dev/null +++ b/zh/2023/10/15/release-0-15-0.html @@ -0,0 +1,546 @@ + + + + + + + + + + + + + Pactus 0.15.0 released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.15.0 released

+ +

Overview

+ +

Pactus Blockchain Version 0.15.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Splash screen

+ +

Download

+ +

This version is the bootstrap version for +Testnet-2. +To start using Pactus Blockchain Testnet-1, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to run and configure your node:

+ + + +
+ If you participated in Testnet-1, ensure to delete your previous working directory and + create a new wallet. +

+ By default, the working directory is located at "C:\Users\<name>\pactus" on Windows, + or "~/pactus" on Unix-compatible platforms. +
+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gui: adding the splash screen (#743)
  • +
  • add absentees votes to the certificate (#746)
  • +
  • logger: short stringer for loggers (#732)
  • +
  • implementing pip-7 (#731)
  • +
  • implementing pip-11 (#712)
  • +
  • implementing pip-8 (#711)
  • +
  • implementing pip-9 (#706)
  • +
  • new API to get Public key by address (#704)
  • +
  • Adding address field for AccountInfo (#703)
  • +
  • CreateValidatorEvent and CreateAccountEvent for nanomsg (#702)
  • +
  • implementing PIP-2 and PIP-3 (#699)
  • +
  • Adding Hole Punching to network (#697)
  • +
  • write logs into file (#673)
  • +
  • check protocol support before sending connect/disconnect event (#683)
  • +
  • updating genesis for pre-testnet-2 (#679)
  • +
  • adding udp protocol for network (#672)
  • +
  • implementing pip-4 (#671)
  • +
  • Notifee service events (#628)
  • +
  • adding MinimumStake parameter (#574)
  • +
  • adding Sent and Received bytes per message metrics for peers (#618)
  • +
  • add reason to BlockResponse messages (#607)
  • +
  • Add CalcualteFee in GRPC (#601)
  • +
  • add sent bytes and received bytes metrics to peerset plus update grpc (#606)
  • +
  • added metrics of libp2p with supporting prometheus (#588)
  • +
  • Check node address is valid (#565)
  • +
  • add LastSent and LastReceived properties to peer (#569)
  • +
+ +

Fix

+ +
    +
  • data race issue on updating certificate (#747)
  • +
  • network: async connection (#744)
  • +
  • adding query vote timer for CP phase (#738)
  • +
  • trim transactions in proposed block (#737)
  • +
  • fixing query votes and proposal issue (#736)
  • +
  • fixing issue when a block has max transactions (#735)
  • +
  • consensus: anti-entroy mechanism for the consensus (#734)
  • +
  • logger: invalid level parsing error (#733)
  • +
  • cache certificate by height (#730)
  • +
  • fixing a crash on consensus (#729)
  • +
  • consensus: prevent double entry in new height (#728)
  • +
  • resolve consensus halt caused by time discrepancy in network. (#727)
  • +
  • unsorted addresses in wallet listing (#721)
  • +
  • send query votes message, if there is no proposal yet (#723)
  • +
  • fixing logger level issue (#722)
  • +
  • fixing syncing stuck issue (#720)
  • +
  • fixing some minor issues on pre-testnet (#719)
  • +
  • supporting go version 1.21 and higher (#692)
  • +
  • ensure log rotation using tests (#693)
  • +
  • restoring at the first block (#691)
  • +
  • swagger doesn’t work with multiple proto files (#687)
  • +
  • fixing wallet-cli issues (#686)
  • +
  • prevent stripping public key for subsidy transactions (#678)
  • +
  • updating the consensus protocol (#668)
  • +
  • aggregating signature for hello message (#640)
  • +
  • error case for logger (#634)
  • +
  • adding committers to the certificate (#623)
  • +
  • updating sortition executor (#608)
  • +
  • update buf and fixing proto generation issue (#600)
  • +
  • adding block hash to peer (#584)
  • +
  • copy to clipboard option for address and pubkey (#583)
  • +
  • public key aggregate (#576)
  • +
  • remove GetValidators rpc method (#573)
  • +
  • missing swagger ui for grpc get account by number (#564)
  • +
  • incorrect handler for validator by number (#563)
  • +
+ +

Refactor

+ +
    +
  • sync: refactoring syncing process (#676)
  • +
  • remove payload prefix from payload transaction type (#669)
  • +
  • change Hello message from broadcasting to direct messaging (#665)
  • +
  • committee: using generic list for validators (#667)
  • +
  • rename SanityCheck to BasicCheck (#643)
  • +
  • cli: Migrating from mow.cli to cobra for wallet (#629)
  • +
  • cli: replacing mow.cli with cobra for daemon (#621)
  • +
  • logger: using fast JSON logger (zerolog) (#613)
  • +
  • Using Generics for calculating Min and Max for numeric type #604 (#609)
  • +
  • Updating LRU cache to version 2 #514 (#602)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/10/15/testnet-2-launched.html b/zh/2023/10/15/testnet-2-launched.html new file mode 100644 index 000000000..c56449671 --- /dev/null +++ b/zh/2023/10/15/testnet-2-launched.html @@ -0,0 +1,470 @@ + + + + + + + + + + + + + Testnet-2 launch announcement | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Testnet-2 launch announcement

+ +

Overview

+ +

Exciting news for the Pactus Community: Testnet-2 is has launched! +The journey through Testnet-1 +brought success and invaluable experiences, with over 500 validators joining the network. +Despite its noteworthy achievements, it also faced challenges that led to a tough decision: to pause the Testnet and +thoroughly address these issues. +After two months of dedicated work and testing, many problems have been resolved, and +we feel confident launching the Testnet again. +Testnet-2 comes with substantial improvements compared to its predecessor by enhancing the core of the Pactus Blockchain. +Notably, the new consensus mechanism and improved overall network performance.

+ +

At this point, we want to assure the Pactus community that this version of +the Testnet will not stop until the mainnet launches, +and our main focus is on improving its overall performance and launching the Mainnet.

+ +

If you’re new to the concept of Testnet, check out our informative post: +What is the Testnet?

+ +

Key Focus Areas

+ +

Testnet-2 has important tasks ahead. +Firstly, we aim to confirm that the new consensus mechanism is both safe and efficient. +A close eye will be kept on the network’s performance, ensuring it operates as expected. +For Testnet-2, the committee +size has been expanded to 51 members. +Both the committee’s performance and block production will be closely monitored. +The goal is a blockchain that remains stable and trustworthy, +even with thousands of validators in the network, +ensuring it manages its regular duties seamlessly.

+ +

How To Join

+ +

Want to join the Testnet-2? Great! It’s super easy. +Just download the latest Pactus software and you’re good to go. +no fancy setups or special gear needed. +You can run the software straight from your personal computer or laptop. +Need some test coins? Pop over to our Discord channel and share your validator address there.

+ +

Benefits for Participation

+ +

By taking part in the Testnet, users can familiarize themselves with the Pactus blockchain and +be well-prepared for the Mainnet launch. +Testnet participants will also receive higher priority during the Mainnet launch and +get free coins for initial staking on the Mainnet.

+ +

Your Feedback Matters

+ +

User feedback plays a vital role in the improvement of the Pactus blockchain. +Share your thoughts and experiences to contribute to the enhancement of future software versions.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/10/29/release-0-16-0.html b/zh/2023/10/29/release-0-16-0.html new file mode 100644 index 000000000..445f3a6b8 --- /dev/null +++ b/zh/2023/10/29/release-0-16-0.html @@ -0,0 +1,493 @@ + + + + + + + + + + + + + Pactus 0.16.0 Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.16.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.16.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version allows users to create new addresses for both validators and accounts. +The networking module has been improved, and users can now set limits on the number of connections. +A random crash on the agreement protocol has been fixed in this version.

+ +

New address dialog

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gui: display network ID (#780)
  • +
  • create new validator address (CLI and GUI) (#757)
  • +
  • add community bootstrap nodes to testnet config (#764)
  • +
  • network: implementing connection manager (#773)
  • +
  • network: adding bootstrapper mode to the network config (#760)
  • +
+ +

Fix

+ +
    +
  • network: redefine the network limits (#788)
  • +
  • consensus: not increase the vote-box power on duplicated votes (#785)
  • +
  • network: close connection when unable to get supported protocols (#781)
  • +
  • network: enabling peer exchange for bootstrappers (#779)
  • +
  • network: set connection limit for the resource manager (#775)
  • +
  • sync: peer status set to known on sucessfull handshaking (#774)
  • +
  • consensus: strong termination for the binary agreement (#765)
  • +
  • consensus: not increase the voting power on duplicated binary votes (#762)
  • +
+ +

Refactor

+ +
    +
  • network: refactoring peer manager (#787)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/11/12/release-0-17-0.html b/zh/2023/11/12/release-0-17-0.html new file mode 100644 index 000000000..4f0b9a4ce --- /dev/null +++ b/zh/2023/11/12/release-0-17-0.html @@ -0,0 +1,502 @@ + + + + + + + + + + + + + Pactus 0.17.0 Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.17.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.17.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

The Testnet has been upgraded and all validators must update their nodes.

+ +

This version will address major networking issues, reduce network usage, and improve overall performance.

+ +

A new node type, “Node Gossips”, has been introduced to help broadcast and spread messages across the network. +Node Gossips support the network by delivering messages to non-gossiping nodes. +This gossip option is disabled by default but can be enabled in the configuration file. +If you are running Pactus on a stable and reliable server, we recommend enabling this option for your node. +Please note that this option is still experimental and subject to potential changes in future releases.

+ +

Node gossip in config file

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

+After updating the node, the configuration file will be overwritten with a new version. +You need to make modifications to the config file if you had customized it prior to the update. +

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • network: default configs for bootstrap and relay peers (#812)
  • +
  • introducing node gossip type (#811)
  • +
  • sync: adding remote address to the peer info (#804)
  • +
  • network: adding public address to factory (#795)
  • +
  • network: filter private ips (#793)
  • +
+ +

Fix

+ +
    +
  • upgrading Testnet (#814)
  • +
  • sync: prevent opening sessions indefinitely (#813)
  • +
  • execution: fixing mistake on calculating unbonded power (#806)
  • +
  • network: check connection threshold on gater (#803)
  • +
  • network: no transient connection (#799)
  • +
  • not close connection for bootstrap nodes (#792)
  • +
+ +

Refactor

+ +
    +
  • sync: refactoring sync process (#807)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2023/12/12/release-0-18-0.html b/zh/2023/12/12/release-0-18-0.html new file mode 100644 index 000000000..ed1274dcd --- /dev/null +++ b/zh/2023/12/12/release-0-18-0.html @@ -0,0 +1,503 @@ + + + + + + + + + + + + + Pactus 0.18.0 Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.18.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.18.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version has significantly improved the syncing progress. +The syncing process concurrently requests blocks from 8 different peers and +actively connects to the most optimal peers for downloading the blockchain.

+ +

Additionally, users can now import private keys into their wallet and securely encrypt them using their wallet password.

+ +

Breaking change

+ +

For Unix-based systems, please note that the working directory for root users has changed from /pactus to /root/pactus.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

+After you update the node, the configuration file will automatically get updated, keeping the old settings. +If you want to return the configuration file to its default settings, +just delete the current config file and restart the node. +

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement pip-14 (#841)
  • +
  • sort wallet addresses (#836)
  • +
  • grpc: endpoints for creating raw transaction (#838)
  • +
  • network reachability API (#834)
  • +
  • implement pip-13 (#835)
  • +
  • subscribing to libp2p eventbus (#831)
  • +
  • implement helper methods for wallet address path (#830)
  • +
  • logger: adding rotate log file after days, compress and maxgae for logger config (#822)
  • +
  • enable bandwidth router metric (#819)
  • +
+ +

Fix

+ +
    +
  • network: refining the connection limit (#849)
  • +
  • corrected mistake when retrieving the reward address (#848)
  • +
  • config: restore default config when it is deleted (#847)
  • +
  • cmd: changing home directory for root users (#846)
  • +
  • removing BasicCheck for hash (#845)
  • +
  • disabling libp2p ping protocol (#844)
  • +
  • build docker file (#839)
  • +
  • sync: ignore publishing a block if it is received before (#829)
  • +
  • network: subscribing to the Libp2p event bus (#828)
  • +
  • sync: ignore block request if blocks are already inside the cache (#817)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/01/04/release-0-19-0.html b/zh/2024/01/04/release-0-19-0.html new file mode 100644 index 000000000..bcf2e2a7b --- /dev/null +++ b/zh/2024/01/04/release-0-19-0.html @@ -0,0 +1,507 @@ + + + + + + + + + + + + + Pactus 0.19.0 Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.19.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.19.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version has improved the overall performance of the blockchain by implementing +PIP-15. +PIP-15 suggests to add caching algorithms to the database for the most frequently used items.

+ +

Additionally, this version has enhanced the connectivity of the nodes in the P2P network.

+ +

Availability Score

+ +

This version comes with the implementation of PIP-19. +PIP-19 suggests assigning the “Availability Score” to each validator based on their activities in the +committee. +Validators with a score less than 0.8 won’t receive the block reward, +as their proposals will be rejected by other validators. +The main reason behind this PIP is to prevent users from downgrading +their node specifications and running Pactus on machines with low resources.

+ +

Breaking change

+ +

The Docker container now contains both daemon and wallet binary files. +Users who use Docker to run Pacts now need to add the entry point to run Pactus.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gRPC: defining network and peers info response’s properly (#898)
  • +
  • implementing pip-19 (#899)
  • +
  • network: disabling GosipSub, only FloodSub (#895)
  • +
  • www: adding change proposer round and value to consensus info votes (#892)
  • +
  • network: adding relay service to dial relay nodes (#887)
  • +
  • implementing pip-15 (#843)
  • +
  • check already running by lock file (#871)
  • +
+ +

Fix

+ +
    +
  • store: use cache to check if public key exists (#902)
  • +
  • executor: not rejecting bond transaction for bootstrap validator (#901)
  • +
  • GUI: removing unnecessary tags in transaction confirm dialog (#893)
  • +
  • network: close relay connection for public node (#891)
  • +
  • network: refining GossipSubParams for Gossiper node (#882)
  • +
  • sync: adding sequence number to the bundle (#881)
  • +
  • network: turn off mesh for gossiper node (#880)
  • +
  • consensus: check voteset for CP strong termination (#879)
  • +
  • adding querier to query messages (#878)
  • +
  • execution: fixing issue #869 (#870)
  • +
  • fixing logger issue on rotating log file (#859)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/01/08/mainnet-announcement.html b/zh/2024/01/08/mainnet-announcement.html new file mode 100644 index 000000000..8e73a2d7b --- /dev/null +++ b/zh/2024/01/08/mainnet-announcement.html @@ -0,0 +1,439 @@ + + + + + + + + + + + + + Mainnet announcement | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Mainnet announcement

+ +

The much-awaited Mainnet Launch of The Pactus Blockchain is finally here! +On January 24, 2024, at 20:24:00 UTC, the first block, known as the Genesis block, +will be minted by four Bootstrap validators. +After that, every 10 seconds, a new block will be added to the blockchain. +Each block contains the committed transactions in the network. +The block finality in the Pactus blockchain is immediate. +It means that there is no need to wait for block confirmation to ensure a transaction is committed.

+ +

Later, more than 2000 community validators will secure the blockchain and make it decentralized. +These validators are Testnet participants who helped test Pactus during our testing period. +The community validators will receive the initial staking coins from a Discord Bot named RoboPac.

+ +

To ensure everything works smoothly on the Mainnet, three different Testnets ( +Testnet0, +Testnet1, and +Testnet2) have been run.

+ +

The Mainnet will never be stopped or interrupted by the core developers of Pactus, +and validators should primarily participate in and maintain the security of the blockchain.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/01/11/release-0-20-0.html b/zh/2024/01/11/release-0-20-0.html new file mode 100644 index 000000000..b42e6e3f9 --- /dev/null +++ b/zh/2024/01/11/release-0-20-0.html @@ -0,0 +1,504 @@ + + + + + + + + + + + + + Pactus 0.20.0 Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 0.20.0 Released

+ +

Overview

+ +

Pactus Blockchain Version 0.20.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

Validator Stake Management

+ +

The new GUI application enables users to easily Unbond and Withdraw their validator’s stake.

+ +

Withdraw dialog

+ +

Improving Network Connectivity

+ +

Some users have reported that UDP packets are being dropped by their Internet Service Providers. +Therefore, the UDP protocol is disabled by default. +Users can still activate the UDP protocol by configuring the settings in the file if necessary.

+ +

Also, the experimental Node Gossip feature has been removed in this version. +Node gossip could cause some validators to become isolated from the rest of the network.

+ +

Relay service

+ +

This version enables users to turn their node into a relay service. +A relay service node can help users behind NAT to communicate with each other. +It is disabled by default and can be enabled inside the config file. +Please note that it is still in an experimental state.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement relay service (#931)
  • +
  • HTTP: Integrate AddRowDouble and update tests (#926)
  • +
  • network: making listen address private in config (#921)
  • +
  • http: adding AvailabilityScore to http module (#917)
  • +
  • network: adding ‘enable_udp’ config (#918)
  • +
  • network: removing gossip node service (#916)
  • +
  • gRPC: adding AvailabilityScore to gRPC (#910)
  • +
  • GUI: unbond and withdraw transaction dialogs (#908)
  • +
+ +

Fix

+ +
    +
  • gRPC: adding missing get raw transaction APIs to gRPC gateway (#925)
  • +
  • network: preventing self dial (#924)
  • +
  • fixing time lag on starting node (#923)
  • +
  • network: fixing network deadlock on linux arm64 (#922)
  • +
  • GUI: updating unbond and withdraw dialogs (#911)
  • +
  • fixing gRPC node info issue (#906)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/01/22/testnet-2-concluded.html b/zh/2024/01/22/testnet-2-concluded.html new file mode 100644 index 000000000..bb0afbb3e --- /dev/null +++ b/zh/2024/01/22/testnet-2-concluded.html @@ -0,0 +1,487 @@ + + + + + + + + + + + + + Story of Testnet-2 | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Story of Testnet-2

+ +

What is Testnet?

+ +

Testnet is a testing environment where developers and users can try out the functionality of a blockchain project, +without putting real assets or data at risk. +It helps to ensure that the final product is reliable and secure for users to use. +If you like to read more about the Testnet you can check out our post on +“What is Testnet?”.

+ +

Summary

+ +

In October 2023, we launched Testnet-2. +The main purpose of this Testnet was to closely monitor the new consensus mechanism and the stability of the P2P network.

+ +

The committee for Testnet-2 was set to 51 validators, +and 2084 validators joined during the Testnet period. +More than 1500 computers and servers joined the network, and we experienced a high volume of data transmission in the network. +More than 800,000 blocks were created, and about 2 million transactions were processed during this time. +The size of the blockchain is about 450 megabytes.

+ +

About 500,000 coins were staked during this period, almost 60% of the total generated coins. +It shows that users, even in Testnet, tend to stake their coins.

+ +

Stability of Consensus

+ +

In Testnet-1, we had one consensus failure that caused us to +conclude the Testnet-1. +During Testnet-2, there were no issues with the consensus mechanism, and +we had no case of failure during the testing period, +although the number of validators and nodes significantly increased on Testnet-2 compared to its predecessor. +It proved that the consensus mechanism is in a stable situation.

+ +

Networking issues

+ +

In Testnet-2, the blockchain stopped twice, and each time it took more than 24 hours to fix the problem. +In the second blockage, we had no choice but to ask active validators inside the committee to +update their nodes to overcome the networking issue. +The development team faced a difficult situation and had to make the proper decision to fix the networking issues. +On one hand, the networking traffic increased significantly, and on the other hand, we had to +make sure normal users with limited internet bandwidth could still participate in the consensus mechanism without any problems. +After examining different scenarios, the networking issues were resolved, and +no major problems were reported till the end of Testnet.

+ +

Major updates

+ +

During Testnet-2, we introduced several updates, including versions +0.15.0, +0.16.0, +0.17.0, +0.18.0, +0.19.0, and +0.20.0. +The update process went smoothly, and with the stability of Version 0.20.0 confirmed, +the development team shifted its focus to the Mainnet launch.

+ +

Special thanks to the community

+ +

This Testnet was important for us. +It helped us learn what we need to do to make Pactus work even better. +Without the community that supports us and dedicates their time and resources to testing and feedback, +we wouldn’t have been able to progress as we have.

+ +

We thank all of them for their valuable contributions. +As promised, participants in Testnets will be given priority as validators for the MainNet, and +will receive bounty PAC coins to set up their validators.

+ +

We are grateful to all those who participated in Testnets, and we encourage them to join the Mainnet. +As a community-based project, we rely on the support of our community members, and we value any help we receive.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/01/24/mainnet-launched.html b/zh/2024/01/24/mainnet-launched.html new file mode 100644 index 000000000..81decfe3c --- /dev/null +++ b/zh/2024/01/24/mainnet-launched.html @@ -0,0 +1,477 @@ + + + + + + + + + + + + + Mainnet launched 🚀 | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Mainnet launched 🚀

+ +

Years to Launch

+ +

Pactus Mainnet started creating the first block on 24 January 2024 at 20:24:10 UTC time. +Pactus Mainnet is the result of years of hard work, research, and innovation. +It started from one idea:

+ +

A low-cost, truly decentralized blockchain, built by the people for the people, +where anyone could run and be their own validator.

+ +

We faced many challenges and obstacles along the way, but we never gave up.
+We overcame them with our determination and perseverance.
+We learned from our mistakes and improved our solutions.
+We grew from a small team to a large community.
+We achieved many milestones and breakthroughs. And we did it.
+We created Pactus, the platform that empowers you.

+ +

Thanks to Community

+ +

We want to thank Pactus community for helping us on the Testnet.

+ +

You have been instrumental in testing and improving the Testnet.
+You have given us your honest feedback and constructive suggestions.
+You have reported and help fixed bugs and errors.
+You have challenged and pushed us to do better.
+You have been our partners and friends in this journey.

+ +

On the Road

+ +

The true journey has just started.
+The Mainnet is not the end, but the beginning.
+The beginning of a new era of blockchain innovation.
+The beginning of a new challenge and opportunity.
+The beginning of a new revolution and evolution!

+ +

We welcome you more than ever.
+We need you to join us in this exciting adventure.
+We need you to support us in this ambitious endeavor.
+We need you to be part of Pactus, the platform that empowers you!

+ +

We Have a Dream

+ +

We have a dream.
+A dream of a world where blockchain technology is not a privilege, but a right for everyone.
+A dream of a world where smart contracts and decentralized applications are fast, secure, and scalable.
+A dream of a world where Pactus is the platform that empowers you.

+ +

This dream is not just ours. It is yours too.
+You share our vision and passion for blockchain innovation.
+You believe in our potential and impact.
+You support our goals and values.
+You are part of our dream.

+ +

And this dream is not just a fantasy. It is a reality.
+A reality that we have created together.
+A reality that we have launched today. A reality that we can explore and enjoy together.
+A reality that we can shape and improve together.
+A reality that we can make better and brighter together!

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/01/31/release-1-0-0.html b/zh/2024/01/31/release-1-0-0.html new file mode 100644 index 000000000..2e170e325 --- /dev/null +++ b/zh/2024/01/31/release-1-0-0.html @@ -0,0 +1,492 @@ + + + + + + + + + + + + + Pactus 1.0.0 (Beijing) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.0.0 (Beijing) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.0.0 (Beijing) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Pactus Version 1.0.0 (Beijing)

+ +

Highlights

+ +

Mainnet Official Release v1.0.0 (Beijing)

+ +

The much-anticipated official software release of Pactus v1.0.0 (Beijing) marks a significant milestone +for our community. +This impressive mainnet release represents the culmination of extensive development efforts. +Pactus v1.0.0 (Beijing) offers a pioneering solution for streamlining the validation of Pactus blockchain, +enhancing security, and providing a user-friendly experience. We’re excited to unveil the official software +and welcome users to experience the power of Pactus in revolutionizing the future of blockchain. Join us on +this exciting journey.

+ +

Onboarding validators

+ +

On February 1st, a total of 53,494 PAC coins will be distributed among 1,311 validators who participated in +Testnet-0, +Testnet-1, and +Testnet-2. +This marks the beginning of a new chapter in the decentralized world.

+ +

Download

+ +

This version has been implemented for Mainnet +To start using Pactus Mainnet, download the latest version from the download +page and join the Mainnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement get validator address for grpc (#975)
  • +
  • add bootstrap.json and load in config on build (#964)
  • +
  • add mainnet config and genesis files (#951)
  • +
  • add Consensus-address to network info (#952)
  • +
  • grpc: sign transaction using wallet client (#945)
  • +
  • pactus gui lock support (#947)
  • +
  • consensus: turning consensus to a zero-config module (#942)
  • +
+ +

Fix

+ +
    +
  • localnet wallet issue (#970)
  • +
  • sync: remove ReachabilityStatus from agent info (#956)
  • +
  • daemon: keeping previous behavior for password flag, linting CLI messages (#950)
  • +
  • consensus: detect if the system time is behind the network (#939)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/02/10/release-1-0-1.html b/zh/2024/02/10/release-1-0-1.html new file mode 100644 index 000000000..127427617 --- /dev/null +++ b/zh/2024/02/10/release-1-0-1.html @@ -0,0 +1,472 @@ + + + + + + + + + + + + + Pactus 1.0.1 (Beijing) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.0.1 (Beijing) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.0.1 (Beijing) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

This release is named after the city of Beijing and it +was unanimously selected by Pactus community.

+ +

Pactus Version 1.0.1 (Beijing)

+ +

Highlights

+ +

This update fixes several issues identified after the release of +1.0.0 (Beijing). +Specifically, it fixes the missed log file on the Windows GUI application and improves the node connectivity.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gui: add connections and moniker fields to main windows (#1090)
  • +
+ +

Fix

+ +
    +
  • network: set dial and accept limit in connection gater (#1089)
  • +
  • gui stderr logger in windows os (#1081)
  • +
  • sync: improve syncing process (#1087)
  • +
  • network: redefine resource limits (#1086)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/02/18/release-1-0-2.html b/zh/2024/02/18/release-1-0-2.html new file mode 100644 index 000000000..20a52b1ec --- /dev/null +++ b/zh/2024/02/18/release-1-0-2.html @@ -0,0 +1,463 @@ + + + + + + + + + + + + + Pactus 1.0.2 (Istanbul) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.0.2 (Istanbul) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.0.2 (Istanbul) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

This release is named after the city of Istanbul and it +was unanimously selected by Pactus community.

+ +

Pactus Version 1.0.2 (Istanbul)

+ +

Highlights

+ +

This update fixes a major issue that decreases the number of inbound connections of the nodes over time. +We highly recommend all users to upgrade to the new version for better connectivity.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • sync: fix concurrent map read-write crash (#1112)
  • +
  • network: remove disconnected peers from peerMgr (#1110)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/03/16/testnet-phoenix-launched.html b/zh/2024/03/16/testnet-phoenix-launched.html new file mode 100644 index 000000000..57eb1989c --- /dev/null +++ b/zh/2024/03/16/testnet-phoenix-launched.html @@ -0,0 +1,451 @@ + + + + + + + + + + + + + Pactus Permanent Phoenix Testnet Launched | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus Permanent Phoenix Testnet Launched

+ +

The public and permanent Phoenix Testnet +for the Pactus blockchain has been launched. +This Testnet serves as a valuable platform for developers to thoroughly examine their projects, +providing a safe playground to test and deploy their applications before transitioning to the Mainnet.

+ +

Pactus Public Phoenix Testnet

+ +

All parameters within the Testnet mirror those of the Mainnet, +ensuring a consistent environment for testing and development. +The genesis block for the Testnet is available +here.

+ +

Currently, there are four active nodes running the Testnet, accessible at the following addresses:

+ +
    +
  • testnet1.pactus.org
  • +
  • testnet2.pactus.org
  • +
  • testnet3.pactus.org
  • +
  • testnet4.pactus.org
  • +
+ +

The Testnet’s name, Phoenix, was chosen by the Pactus community from various suggestions. +It embodies the spirit of rebirth and renewal, highlighting the innovative and testing-focused nature of the network. +Developers can utilize the RoboPAC as a faucet to receive test coins and +thoroughly test their applications within this environment. +It’s important to note that the coins within this Testnet hold no monetary value and are only meant for testing purpose.

+ +

All addresses within the Phoenix network are prefixed with tpc1..., +distinguishing them from Mainnet addresses that start with pc1...’. +This clear differentiation streamlines development and ensures seamless integration when transitioning to +the Mainnet environment.

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/04/14/release-1-1-0.html b/zh/2024/04/14/release-1-1-0.html new file mode 100644 index 000000000..26211f46a --- /dev/null +++ b/zh/2024/04/14/release-1-1-0.html @@ -0,0 +1,556 @@ + + + + + + + + + + + + + Pactus 1.1.0 (Hanoi) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.0 (Hanoi) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.0 (Hanoi) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Hanoi, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.0 (Hanoi)

+ +

Highlights

+ +

This update brings some changes that are not compatible with the earlier version. +Here are the key points:

+ +
    +
  1. Fee calculations are now rounded, and fees can be accepted within a range of one NanaoPAC (see #1174).
  2. +
  3. Small bonds for existing validators are now accepted (see #1152).
  4. +
+ +

Validators must update their nodes to this version as soon as possible.

+ +

Other major changes in this version include:

+ +
    +
  • The addition of a JSON-RPC endpoint required by third parties like exchanges to connect to Pactus nodes.
  • +
  • The implementation of Pactus Shell tools, allowing users to query the node.
  • +
+ +

Additionally, this version improves the syncing process for new nodes, enhances the GUI, and addresses several issues.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gRPC: add get address history method (#1206)
  • +
  • grpc: Add GetNewAddress/GetTotalBalance endpoint to gateway (#1197)
  • +
  • GUI: adding total balance to wallet widget (#1194)
  • +
  • Add GetNewAddress gRPC API (#1193)
  • +
  • gRPC: add new API to get the total balance of wallet (#1190)
  • +
  • GUI: showing transaction hash after broadcasting transaction (#1187)
  • +
  • add jsonrpc gateway support (#1183)
  • +
  • config: one reward address in config for all validators (#1178)
  • +
  • GUI: memo field for transactions on GUI wallet (#1182)
  • +
  • implement basic auth for pactus shell (#1177)
  • +
  • grpc: add rust code gen for proto (#1151)
  • +
  • testnet: define permanent Testent genesis (#1173)
  • +
  • add basic auth authentication for securing grpc (#1162)
  • +
  • grpc: calculate fee for create-raw-transaction APIs (#1159)
  • +
  • grpc: add fixed-amount to calc-fee API (#1146)
  • +
  • wallet: adding all account address functions (#1128)
  • +
  • grpc: update swagger API to version 1.1 (#1106)
  • +
  • GUI: adding availability score in wallet (#1118)
  • +
  • logger: adding log target (#1122)
  • +
  • logger: adding file_only option (#1117)
  • +
  • gui: add connections and moniker fields to main windows (#1090)
  • +
  • implementation for PIP-22 (#1067)
  • +
  • generate documentation for proto files (#1064)
  • +
  • pactus-ctl (#946)
  • +
+ +

Fix

+ +
    +
  • gRPC: add basic auth option in header (#1217)
  • +
  • gRPC: not return block data on information verbosity (#1212)
  • +
  • wallet: fix wallet conn issue (#1211)
  • +
  • GUI: update total balance on wallet timeout (#1204)
  • +
  • accept small bond to existing validator (#1152)
  • +
  • GUI: make transaction hash selactable (#1196)
  • +
  • close connections with peers that have no supported protocol (#1181)
  • +
  • sync: check the start block request height (#1176)
  • +
  • config: load logger levels in Mainnet config (#1168)
  • +
  • gRPC: pactus swagger not found (#1163)
  • +
  • add error type for invalid configs (#1153)
  • +
  • save Mainnet config with inline comments (#1143)
  • +
  • network: set deadline for streams (#1149)
  • +
  • grpc: fix error 404 on grpc gateway (#1144)
  • +
  • wallet: checking args in history add (#1141)
  • +
  • gRPC: adding sign raw transaction API to gateway (#1116)
  • +
  • sync: fix concurrent map read-write crash (#1112)
  • +
  • network: remove disconnected peers from peerMgr (#1110)
  • +
  • network: set dial and accept limit in connection gater (#1089)
  • +
  • stderr logger in windows os (#1081)
  • +
  • sync: improve syncing process (#1087)
  • +
  • network: redefine resource limits (#1086)
  • +
+ +

Refactor

+ +
    +
  • sync: improve syncing process (#1207)
  • +
  • move fee calculation logic to execution package (#1195)
  • +
  • introduce Amount data type for converting PAC units (#1174)
  • +
  • using PAC instead of atomic units for external input/outputs (#1161)
  • +
  • change func() to cancel func type (#1142)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/04/18/release-1-1-1.html b/zh/2024/04/18/release-1-1-1.html new file mode 100644 index 000000000..7271fcf50 --- /dev/null +++ b/zh/2024/04/18/release-1-1-1.html @@ -0,0 +1,491 @@ + + + + + + + + + + + + + Pactus 1.1.1 (Jakarta) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.1 (Jakarta) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.1 (Jakarta) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Jakarta, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.1 (Jakarta)

+ +

Highlights

+ +

This update fixes the issue of zero-bonding +that identified after the release of 1.1.0 (Hanoi). +This fix will be applied at block height 740,000 to ensure a smooth upgrade.

+ +

Additionally, this version rejects connections from nodes version 1.0.2 and earlier.

+ +

Validators must update their nodes to this version as soon as possible.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • reject direct message from non-supporting agents (#1225)
  • +
+ +

Fix

+ +
    +
  • prevent zero stake for bond transactions (#1227)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/04/25/release-1-1-3.html b/zh/2024/04/25/release-1-1-3.html new file mode 100644 index 000000000..928d893bd --- /dev/null +++ b/zh/2024/04/25/release-1-1-3.html @@ -0,0 +1,495 @@ + + + + + + + + + + + + + Pactus 1.1.3 (Kuala Lumpur) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.3 (Kuala Lumpur) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.3 (Kuala Lumpur) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Kuala Lumpur, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.3 (Kuala Lumpur)

+ +

Highlights

+ +

This version prevents spamming transactions by defining a minimum value per transaction. +It is not part of the consensus parameters, +and each node can set its own threshold. +By default, it is set to 0.1 PAC.

+ +

The version also bans validators that were part of the recent spam attack on the network. +Their stake will be frozen at block 820,000.

+ +

Validators must update their nodes to this version as soon as possible.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • ban attacker validators (#1235)
  • +
  • txpool: prevent spamming transactions by defining a minimum value (#1233)
  • +
+ +

Fix

+ +
    +
  • wallet: saving wallet file after generating new address in gRPC (#1236)
  • +
  • network: disconnect from peers that has no protocol (#1243)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/05/07/release-1-1-4.html b/zh/2024/05/07/release-1-1-4.html new file mode 100644 index 000000000..198de3a98 --- /dev/null +++ b/zh/2024/05/07/release-1-1-4.html @@ -0,0 +1,484 @@ + + + + + + + + + + + + + Pactus 1.1.4 (London) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.4 (London) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.4 (London) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.1.4 (London)

+ +

Highlights

+ +

This version fixes some issues related to the syncing process and improves the connectivity of the nodes.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • network: set infinite limit for resource manager (#1261)
  • +
  • sync: introduce session manager (#1257)
  • +
  • HTTP: using amount type for fee in transaction details (#1255)
  • +
+ +

Refactor

+ +
    +
  • network: refactor peer manager and redefine the min cons (#1259)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/05/30/release-1-1-5.html b/zh/2024/05/30/release-1-1-5.html new file mode 100644 index 000000000..4302fed18 --- /dev/null +++ b/zh/2024/05/30/release-1-1-5.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + Pactus 1.1.5 (Cape Town) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.5 (Cape Town) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.5 (Cape Town) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

Rate limit

+ +

This version applies a rate limit to the messages in the general topics including blocks and transactions. +This will help nodes to manage the network traffic in times of network congestion or spam attacks.

+ +

Dynamic fee

+ +

To prevent attackers from sending spam transactions, a dynamic fee model is introduced in this patch. +Each node can define a minimum fee that is defaulted to 0.000001 PAC. +However, if the transaction pool becomes full, the transaction fee can increase up to 1 PAC.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • add dynamic fee (#1290)
  • +
  • network: define config for rate limit threshold (#1284)
  • +
  • network: ratelimit gossip for prevent spamming (#1283)
  • +
+ +

Fix

+ +
    +
  • change CalculateFee to be backward compatible (#1291)
  • +
  • proposal basic checks deferred to consensus (#1288)
  • +
  • rejected spam tx for same from and to (#1287)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/05/31/release-1-1-6.html b/zh/2024/05/31/release-1-1-6.html new file mode 100644 index 000000000..426d6be87 --- /dev/null +++ b/zh/2024/05/31/release-1-1-6.html @@ -0,0 +1,483 @@ + + + + + + + + + + + + + Pactus 1.1.6 (Ottawa) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.6 (Ottawa) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.6 (Ottawa) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

This version updates the consensus mechanism to move to new rounds once +a proper and justified “Decided” vote seen by a non-faulty validator. +This helps ensure that the consensus mechanism stays in sync with the network when the validator restarts.

+ +

In this version, the minimum availability score is set to 0.6666. +This change will help validators receive rewards even in faulty network conditions, +ensuring that they can continue to participate in the consensus mechanism.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • consensus: move to new round on decided vote (#1293)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/06/02/release-1-1-7.html b/zh/2024/06/02/release-1-1-7.html new file mode 100644 index 000000000..032cee9d7 --- /dev/null +++ b/zh/2024/06/02/release-1-1-7.html @@ -0,0 +1,500 @@ + + + + + + + + + + + + + Pactus 1.1.7 (Santiago) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.7 (Santiago) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.7 (Santiago) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

Here are the key improvements in this version:

+ +
    +
  • +

    Resolves critical issue in consensus: +This version addresses a critical issue in consensus that prevents broadcasting expired proposals across the network.

    +
  • +
  • +

    Improved network security: +The version defines a list of blacklisted IPs and disconnects from them, enhancing network security.

    +
  • +
  • +

    Node compatibility: +This version only connects to nodes with version 1.1.6 or above, ensuring compatibility with the latest software.

    +
  • +
+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • network: add firewall black list ips to banning when connecting to peer (#1298)
  • +
+ +

Fix

+ +
    +
  • sync: load black listed addresses from the config (#1301)
  • +
  • consensus: only proposer responds to the query proposal (#1300)
  • +
  • network: set latest support version to 1.1.6 (#1299)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/06/02/release-1-1-8.html b/zh/2024/06/02/release-1-1-8.html new file mode 100644 index 000000000..159545c9e --- /dev/null +++ b/zh/2024/06/02/release-1-1-8.html @@ -0,0 +1,494 @@ + + + + + + + + + + + + + Pactus 1.1.8 (Budapest) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.1.8 (Budapest) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.1.8 (Budapest) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.1.8 (Budapest)

+ +

Highlights

+ +

This version aims to reduce the consensus message once there is a delay on block creation. +It also defines a fixed fee of 0.1 PAC for transactions. +This fixed fee will be replaced by a dynamic fee in future releases, +which will provide more flexibility and efficiency.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • firewall: define rate limit for network topics (#1308)
  • +
+ +

Fix

+ +
    +
  • set fix fee 0.1 PAC for transactions (#1315)
  • +
  • consensus: add round to query proposal message (#1314)
  • +
  • firewall: block peer base on blacklisted CIDR (#1309)
  • +
  • consensus: reduce ChangeProposerTimeout to 6 seconds (#1311)
  • +
  • sync: define rate limit for query vote and proposal (#1310)
  • +
  • decrease to 100 maximum transaction per block (#1306)
  • +
  • consume message first then ignore on ratelimit (#1304)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/06/20/release-1-2-0.html b/zh/2024/06/20/release-1-2-0.html new file mode 100644 index 000000000..9e4e209f1 --- /dev/null +++ b/zh/2024/06/20/release-1-2-0.html @@ -0,0 +1,538 @@ + + + + + + + + + + + + + Pactus 1.2.0 (Sydney) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.2.0 (Sydney) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.2.0 (Sydney) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.2.0 (Sydney)

+ +

Highlights

+ +

This version includes some improvements and new features, such as:

+ +
    +
  • Clock offset calculation: Adding clock offset check to +alert the user if their machine’s time is not synced with the network. +See PIP-18: Clock Offset Calculation.
  • +
  • Minimum fee: The minimum fee is configurable in this version, with the default set to 0.01. +Each validator can decide the minimum fee of transactions they want to include in the block +by changing the min_fee value inside the config file.
  • +
  • ip blocker: A new option allows nodes to block certain IPs and disconnect from them.
  • +
  • rate limit: Nodes can set rate limits for incoming messages, including transactions.
  • +
  • wallet manager: The wallet manager allows users to create and manage wallets using gRPC endpoints.
  • +
+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • config: make minimum fee configurable (#1349)
  • +
  • apply rate limit for the network topics (#1332)
  • +
  • add ipblocker package (#1323)
  • +
  • consensus: fast consensus path implementation (#1253)
  • +
  • version: add alias to node version (#1281)
  • +
  • ntp: add ntp util (#1274)
  • +
  • gRPC: add connection info to node info (#1273)
  • +
  • gRPC: add only_connected parameter to getNetworkInfo API (#1264)
  • +
  • grpc: refactor CreateWallet and add RestoreWallet API endpoint (#1256)
  • +
  • add wallet service (#1241)
  • +
  • ban attacker validators (#1235)
  • +
  • txpool: prevent spamming transactions by defining a minimum value (#1233)
  • +
  • reject direct message from non-supporting agents (#1225)
  • +
+ +

Fix

+ +
    +
  • wallet: add public key on get new address (#1350)
  • +
  • sync: add IsBannedAddress check in processing connect event (#1347)
  • +
  • sync: update latest supporting version (#1336)
  • +
  • state: improve node startup by optimizing availability score calculation (#1338)
  • +
  • HTTP: add clock offset and connection info to node-info API (#1334)
  • +
  • grpc: add stacktrace to locate panic (#1333)
  • +
  • consensus: implement PIP-26 (#1331)
  • +
  • grpc: improve grpc server and client (#1330)
  • +
  • util: add more ntp pool (#1328)
  • +
  • jsonrpc: update JSON-RPC Gateway to support headers and improve client registry (#1327)
  • +
  • consensus: improve consensus algorithm (#1329)
  • +
  • txpool: set fix fee of 0.1 PAC for transactions (#1320)
  • +
  • network: add block and transaction topics (#1319)
  • +
  • gRPC: prevent concurrent map iteration and map write (#1279)
  • +
  • api: add swagger schemes (#1270)
  • +
  • network: set infinite limit for resource manager (#1261)
  • +
  • sync: introduce session manager (#1257)
  • +
  • HTTP: using amount type for fee in transaction details (#1255)
  • +
  • network: disconnect from peers that has no protocol (#1243)
  • +
  • wallet: saving wallet file after generating new address in gRPC (#1236)
  • +
  • prevent zero stake for bond transactions (#1227)
  • +
  • set bounding interval for first boudning tx only (#1224)
  • +
+ +

Refactor

+ +
    +
  • wallet: set server address on loading wallet (#1348)
  • +
  • removed deprecated LockWallet and UnLockWallet from WalletService (#1343)
  • +
  • crypto: decode data to point on verification (#1339)
  • +
  • network: define connection info in network proto (#1297)
  • +
  • sync: define peer package (#1271)
  • +
  • network: refactor peer manager and redefine the min cons (#1259)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/2024/06/27/release-1-3-0.html b/zh/2024/06/27/release-1-3-0.html new file mode 100644 index 000000000..69ece72d2 --- /dev/null +++ b/zh/2024/06/27/release-1-3-0.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + Pactus 1.3.0 (Warsaw) Released | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+

Pactus 1.3.0 (Warsaw) Released

+ +

Overview

+ +

Pactus Blockchain Version 1.3.0 (Warsaw) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.3.0 (Warsaw)

+ +

Highlights

+ +

This version fixes an issue that caused some nodes to get stuck for one minutes and +not receive any new messages during that time.

+ +

Breaking Change: gRPC APIs now convert all binary values to hexadecimal strings.

+ +
+ Attention Exchanges and Third-Party Pactus Blockchain Users: +
+
+ After upgrading to this version, be aware that binary data, such as hashes and signatures, + are now formatted as hexadecimal strings. You must update your code to accommodate this change. +
+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • grpc: get txpool content API (#1364)
  • +
  • network: permanent peer store (#1354)
  • +
+ +

Fix

+ +
    +
  • grpc: change bytes type to hex string (#1371)
  • +
  • http: add basic auth middleware for http server (#1372)
  • +
  • network: use goroutines for sending streams (#1365)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

+ +
+ +
+ + +
+
+
+
+ + + + diff --git a/zh/404.html b/zh/404.html new file mode 100644 index 000000000..0566781d0 --- /dev/null +++ b/zh/404.html @@ -0,0 +1,263 @@ + + + + + + + + + + + + + Error 404, Page Not Found | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

404

+ +

Page not found :(

+

The requested page could not be found.

+
+ + + diff --git a/zh/about/faq/index.html b/zh/about/faq/index.html new file mode 100644 index 000000000..5b0cd4bb2 --- /dev/null +++ b/zh/about/faq/index.html @@ -0,0 +1,1472 @@ + + + + + + + + + + + + + 常见问题解答 | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
+

常见问题解答

+

该常见问题解答页面旨在提供有关Pactus的常见问题和关注点的有用信息和指导。 +

+
+ +
+ + + + + + + + + +
+
+
+ + 交易问题 +
+
+ +
+ +
+
***
+ +
+ +
+
+
+ + 常规问题 +
+
+ + +

+ Pactus是什么意思? +

+
+ + + + + + + Pactus一词源自拉丁语,意为共同协议、契约或交易。 在英语中,Pact一词源自拉丁词汇Pactus。 + + + +
+ + +

+ Pactus是其他任何区块链的副本吗? +

+
+ + + + + + + 不,Pactus不是任何其他区块链的副本或衍生品。它是一种全新而独特的区块链协议,从头开始设计。Pactus使用的共识机制是独特的,专门为解决权益证明区块链中验证者的可扩展性问题而创建。 + + + +
+ + +

+ Pactus进行了ICO吗? +

+
+ + + + + + + + + 不,Pactus没有ICO(首次代币发行),也没有预定义或特权账户。 Pactus区块链从零开始,所有的币都是通过共识机制铸造的。 这确保了币的分配是公平的,没有财富的集中化。 + + + +
+ + +

+ 在哪里可以购买Pactus币? +

+
+ + + + + + + Pactus没有任何预售币. 目前获得Pactus币的唯一方式是安装Pactus软件并积极参与区块验证. 通过参与网络并为区块验证做出贡献,您将获得Pactus币作为奖励. + + + +
+ + +

+ 为什么开发Pactus? +

+
+ + + + + + + + + Pactus的开发目标是在不影响安全性和去中心化的前提下扩展区块链规模。 为了实现这一目标,Pactus采用了独特的共识机制,可以在10秒内创建区块。 此外,Pactus旨在让所有用户更容易使用,无论他们的技术专业知识或财务资源如何。

我们致力于去中心化和公平,这反映在我们从零开始启动Pactus区块链, 并确保所有币都是通过共识机制铸造的,而不是通过ICO或特权账户铸造。 + + + +
+ + +

+ Pactus解决了其他区块链无法解决的问题是什么? +

+
+ + + + + + + + + Pactus试图解决其他区块链网络面临的几个问题,包括可扩展性、可访问性、分配公平性和存储成本。

可扩展性: Pactus拥有一个独特的共识机制,专门设计用于解决可扩展性问题, 同时不牺牲安全性和去中心化。

可访问性: 在Pactus上运行验证者设计更容易普通用户使用,与其他区块链相比更易上手。

分配公平性: Pactus有一个公平透明的币分配模型,旨在防止财富的集中。

存储成本: Pactus通过允许用户分配专用存储文件提供了一种新颖的存储解决方案, 从而降低存储成本并简化智能合约。 + + + +
+ + +

+ Pactus与比特币有何不同? +

+
+ + + + + + + Pactus和比特币是两种不同类型的区块链网络。 + 比特币使用称为工作量证明的过程来保护其网络,而Pactus使用一种称为股权证明的不同方法。 +这意味着,验证者负责对进入的区块进行投票,必须持有网络的一定数量的代币,即押金,以防止恶意行为。 + + + +
+ + +

+ Pactus与以太坊有何不同? +

+
+ + + + + + + + + Pactus和以太坊都是股权证明的区块链,但它们在运行验证者方面存在差异。 在以太坊上运行验证者可能具有挑战性,需要至少抵押32个以太币。 相比之下,Pactus的设计更加普及化。 没有最低押注要求,您可以在任何操作系统上使用基本硬件运行Pactus节点。 这种方法反映了我们推广去中心化和让更多人使用区块链技术的承诺。 + + + +
+ +
+ +
+
+
+ + 验证节点问题 +
+
+ + +

+ 什么是验证节点? +

+
+ + + + + + + 在Pactus上,验证者负责处理交易和创建区块,通过这样的方式帮助保护网络并使其去中心化。 他们使用自己的代币作为押金以确保网络的安全,并获得其贡献的奖励。 + + + + + +
+ + +

+ Pactus有多少个验证者? +

+
+ + + + + + + + + Pactus是一个真正的权益证明区块链,这意味着网络中的验证者数量没有限制。但是,由21个验证者组成的委员会负责创建区块。需要注意的是,委员会成员不固定,随时间变化。 + + + + + +
+ + +

+ 我可以质押的最小和最大金额是多少? +

+
+ + + + + + + + + 在Pactus中,没有质押币的最低限制,但您可以质押的最大金额为1000个币。如果您想质押超过1000个币,可以运行新的验证者。运行多个验证者可以保持网络更加去中心化,并有助于维护其安全性和稳定性。 + + + +
+ + +

+ 硬件最低要求什么配置? +

+
+ + + + + + + 经过在多台机器上的彻底测试,我们可以得出推荐的最低硬件要求
要求如下:

VPS:
* CPU's: 1/2 物理核 / 1vCPU (或1个虚拟核)
* 内存: 1 GB Ram
* 硬盘 (SSD): 20 GB NVMe 硬盘
* 网络: 稳定的互联网连接,速度为1 TBps

PC:
* CPU's: 2 物理核 / 4vCPU (或4个虚拟核)
* 内存: 4 GB 内存
* 硬盘 (SSD): 64 GB SSD 硬盘
* 网络: 稳定的互联网连接,速度为15MBps

**提示** 这些规格经过测试,可提供超过0.9的可用性得分. + + + + + +
+ + +

+ 为什么有最大抵押限制? +

+
+ + + + + + + 最大验证器抵押限制的设立增强了去中心化,并防止验证器获得过多权力,可能导致他们控制委员会。 最大抵押限制是共识参数的一部分,可以通过验证器之间的共识在将来进行更改。 + + + +
+ + +

+ 我可以在一台节点上运行多个验证器吗? +

+
+ + + + + + + Pactus软件允许您在单个节点上运行多达32个验证器。 运行多个验证器可能需要稍多的内存,但对存储没有影响,对CPU和网络使用量的影响可以忽略不计。 在单个节点上运行多个验证器使用户能够将他们的股份分散到多个验证器上。 特别是当他们想要对每个验证器的最大股份进行抵押时。 这消除了对额外资源的需求,并简化了节点管理。 + + + + + +
+ + +

+ 验证者如何获得奖励? +

+
+ + + + + + + + + 一旦验证者提出一个有效的区块,并被网络接受,验证者就会收到一个代币作为区块奖励。 奖励是给予验证者的激励,以表彰他们对网络安全和完整性的贡献,帮助网络平稳运行。 + + + + + +
+ + +

+ Pactus中的区块奖励是多少? +

+
+ + + + + + + Pactus的区块奖励是固定的,每个区块始终为1枚币。这种平坦奖励方案有助于确保简单性、公平性和更好的币分配。 + + + Pactus中的区块奖励是多少? + + + + +
+ + +

+ 每天生成多少个PAC币? +

+
+ + + + + + + 每天总共生成8640个PAC币。这个数字相当于每28天生成241,000个,每年生成3,153,600个. + + + +
+ +
+ +
+
+
+ + 共识问题 +
+
+ + +

+ Pactus区块链是如何工作的? +

+
+ + + + + + + + + Pactus使用一个验证者委员会来创建新的区块。 委员会由21个验证者组成,但委员会成员随时间随机变化。 每10秒,委员会中的验证者(称为提案者)收集所有有效交易,将它们添加到一个区块中, 并与委员会中的其他验证者分享。 如果委员会中的超过2/3的利益相关者签署并认可提议的区块, 区块就会被提交,区块中的所有交易将得到执行。 这个过程每10秒重复一次。 + + + Pactus区块链是如何工作的? + + + + +
+ + +

+ 验证者如何进入委员会? +

+
+ + + + + + + + + 在Pactus中,为了进入委员会,验证者需要参与每个区块的彩票或抽签过程。 在这个过程中,验证者生成一个可证明的随机数,介于0和总质押币之间, 如果这个数字小于他们的质押量,则可以发送一个称为抽签交易的交易,并提供抽签证明。 一旦抽签交易被包含在一个区块中,验证者将取代最老的委员会成员。 + + + + + +
+ + +

+ 委员会内如何选择区块提议者? +

+
+ + + + + + + 在委员会内部,区块提议者是根据他们进入委员会的时间进行选择的。 这意味着选择过程遵循先来先提出的顺序。 + + + + + +
+ + +

+ 是否可以让多个验证者同时进入委员会? +

+
+ + + + + + + + + Pactus中的抽签过程是随机的,因此有可能出现多个验证者同时进入委员会,或者根本没有验证者进入。 然而,为了使抽签交易被视为有效并被包含在一个区块中,必须满足两个条件: 它不能改变超过委员会总质押的1/3,不能移除尚未有机会提议区块的验证者。 + + + +
+ + +

+ Pactus区块链是否可能同时出现两个有效区块? +

+
+ + + + + + + 在Pactus区块链中,不可能同时出现两个有效区块。 Pactus的共识算法防止了同时出现两个区块提议者的可能性。 这确保了网络中不会出现分叉。 + + + + + +
+ + +

+ Pactus链的区块确认时间是多少? +

+
+ + + + + + + 在Pactus中,区块确认是立即的,这意味着一旦交易被添加到区块中,它就被认为是已确认的,并且不能被撤销。 + + + + + +
+ +
+ +
+
+
+ + 经济问题 +
+
+ + +

+ Pactus币的总供应量是多少? +

+
+ + + + + + + + + Pactus的总供应量为2100万枚币,每枚币被分为10亿个单位。每10秒钟会生成一枚新的币,每天会产生8640枚币,每年约300万枚币。所有币将在7年内产生。 + + + +
+ + +

+ Genesis Coins在Pactus中是如何分配的? +

+
+ + + + + + + Pactus区块链中Genesis Coins的初始分配如下:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Pactus的Genesis代币分配
类型代币分配百分比
国库2100万枚代币50%
基金840万枚代币20%
VC分配630万枚代币15%
团队和运营420万枚代币10%
社区210万枚代币5%
+ + + Genesis Coins在Pactus中是如何分配的? + + +
+ + +

+ 什么是国库账户? +

+
+ + + + + + + 国库账户是Pactus区块链中的一个特殊账户,持有总供应量2100万个币。它在创世时创建,没有与之关联的密钥对,这意味着任何人都无法访问或控制它。每当创建一个区块时,从国库账户中转移一枚币到提案者账户作为区块奖励。 + + + + + +
+ + +

+ 国库中的代币是如何分配的? +

+
+ + + + + + + 国库币是作为区块奖励分配给区块提议者的,每10秒钟,国库帐户中的一枚硬币转移到区块提议者帐户,这个过程称为“铸币”。 因此,随着新的区块被添加到区块链中,Pactus币的总量会随时间逐渐增加。每天铸造8,640个硬币,这意味着国库帐户每年大约铸造约300万个硬币。 + + + 国库中的代币是如何分配的? + + + + +
+ + +

+ 支持币将如何被支出? +

+
+ + + + + + + 支持帐户旨在为项目提供财务支持。 最初,Pactus Genesis仅包含国库帐户,没有任何备份或支持帐户。 支持币的引入是对缺乏投资者的战略性回应,尽管项目取得了显着进展。

这些币的分配方式有几种:
    +
  • 社区: + 这部分主要将支持社区。作为其中的一部分,测试网上的参与者将获得初始抵押币来建立他们的验证器并保护主网。 +
  • +
  • 团队运营: + 另一部分支持项目团队。团队成员每月分配这些币,预计可以维持团队超过六年的时间。 +
  • +
  • 风险投资(VC)分配: + 另一部分被留出,以供未来可能对项目感兴趣的风险投资者投资。 +
  • +
  • 基金: + 基金被保留以备将来使用,可能用于支持与Pactus目标相一致的优秀项目。 +
  • +
+透明度是这种分配的关键方面,因为所有这些币的流动都是可追踪的,这是由于区块链的完全透明性质所致。 + + + +
+ +
+ +
+
+
+ + 交易问题 +
+
+ + +

+ 什么是转账交易? +

+
+ + + + + + + 转账交易是一种允许用户将Pactus币从一个账户转移到另一个账户的交易类型。 + + + + + +
+ + +

+ 什么是绑定交易? +

+
+ + + + + + + + + 绑定交易是一种交易类型,允许您通过抵押一些币来成为验证者。 当您发送绑定交易时,您的节点将成为验证者。 抵押的数量确定您在共识中的权力。 + + + + + +
+ + +

+ 什么是随机交易? +

+
+ + + + + + + 随机交易是一种交易类型,允许验证者进入委员会。 + + + + + +
+ + +

+ 什么是解除绑定交易? +

+
+ + + + + + + + + 解除绑定交易是一种交易类型,允许您解除您的验证者身份。 当您发送解除绑定交易时,您将不能再发送随机或绑定交易。 + + + + + +
+ + +

+ 什么是提现交易? +

+
+ + + + + + + 提现交易是一种交易类型,允许验证者从网络中提取他们抵押的币。 + + + + + +
+ +
+ +
+ + + + +
+ +
+
+
+
+ + + + + diff --git a/zh/about/roadmap/index.html b/zh/about/roadmap/index.html new file mode 100644 index 000000000..470ed211c --- /dev/null +++ b/zh/about/roadmap/index.html @@ -0,0 +1,826 @@ + + + + + + + + + + + + + 路线图 | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

路线图

+ +
+
✅ 已完成任务
+
🚧 正在进行的任务
+
⏳ 即将进行的任务
+
+ +
+
+
+ + +
+
+
+
+ + Smart contract and Decentralized Storage Platform + +
+
Q1 2025
+
+
+
+ +
+
+
+
+ + Browser Extension + +
+
Q1 2025
+
+
+
+ +
+
+
+
+ + Integrating with Wallets applications + +
+
Q4 2024
+
+
+
+ +
+
+
+
+ + Desktop and Mobile Friendly GUI + +
+
Q3 2024
+
+
+
+ +
+
+
+
+ + Pactus Light Client + +
+
Q3 2024
+
+
+
+ +
+
+
+ +
June 2024
+
+
+
+ +
+
+
+ +
June 2024
+
+
+
+ +
+
+
+ +
April 2024
+
+
+
+ +
+
+
+
+ + Pactus Shell + +
+
April 2024
+
+
+
+ +
+
+
+
+ + Block Explorer + +
+
April 2024
+
+
+
+ +
+
+
+ +
March 2024
+
+
+
+ +
+
+
+ +
January 2024
+
+
+
+ +
+
+
+ +
24 January 2024
+
+
+
+ +
+
+
+ +
January 2024
+
+
+
+ +
+
+
+ +
January 2024
+
+
+
+ +
+
+
+ +
January 2024
+
+
+
+ +
+
+
+ +
December 2023
+
+
+
+ +
+
+
+ +
November 2023
+
+
+
+ +
+
+
+ +
October 2023
+
+
+
+ +
+
+
+ +
October 2023
+
+
+
+ +
+
+
+ +
October 2023
+
+
+
+ +
+
+
+ +
August 2023
+
+
+
+ +
+
+
+ +
July 2023
+
+
+
+ +
+
+
+ +
June 2023
+
+
+
+ +
+
+
+ +
May 2023
+
+
+
+ +
+
+
+ +
May 2023
+
+
+
+ +
+
+
+ +
May 2023
+
+
+
+ +
+
+
+ +
April 2023
+
+
+
+ +
+
+
+ +
September 2022
+
+
+
+ +
+
+
+ +
September 2022
+
+
+
+ +
+
+
+ +
+
+
+
+ + + + + diff --git a/zh/about/what-is-pactus/index.html b/zh/about/what-is-pactus/index.html new file mode 100644 index 000000000..ad89490b4 --- /dev/null +++ b/zh/about/what-is-pactus/index.html @@ -0,0 +1,457 @@ + + + + + + + + + + + + + 什么是帕图斯? | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

什么是帕图斯?

+ +
+ +
+
+

帕图斯是一个专注于去中心化的区块链

+ 帕图斯建立在这样一个原则之上,即仅通过去中心化才能实现公平和透明的系统。 与许多其他区块链平台不同,帕图斯旨在通过消除委托和矿工的需要,消除集中化和操纵的潜力。 这使任何人都可以成为该生态系统的一部分,并确保平台保持真正的去中心化。 + +
+
+ +
+
+

帕图斯是一种用户友好的区块链

+ 帕图斯旨在创建一种用户友好的区块链,任何人都可以轻松使用,而不仅仅是技术专家。 我们的协议旨在简单易用、易于维护和开发。帕图斯提供了一个简单的GUI应用程序, 使用户可以轻松运行节点。 + +
+
+ +
+
+

帕图斯采用基于百分比的费用模型

+ 交易费用是基于百分比模型计算的,设定了最小和最大费用。这些参数提供了更大的费用结构控制, 防止过高或过低的支付。基于百分比的模型确保公平和可预测性, 可通过所有验证人的共识进行调整。 + +
+
+ +
+
+

帕图斯的专用去中心化存储

+ 在帕图斯中,用户可以购买一个专用存储文件,可每年更新, 从而降低存储和智能合约执行成本。这一独特功能可以为去中心化平台开辟新的协议之路。 + +
+
+ +
+ +
+
+
+
+ + + + + diff --git a/zh/android-chrome-192x192.png b/zh/android-chrome-192x192.png new file mode 100644 index 000000000..8a8e2b6d8 Binary files /dev/null and b/zh/android-chrome-192x192.png differ diff --git a/zh/android-chrome-256x256.png b/zh/android-chrome-256x256.png new file mode 100644 index 000000000..827219e8a Binary files /dev/null and b/zh/android-chrome-256x256.png differ diff --git a/zh/apple-touch-icon.png b/zh/apple-touch-icon.png new file mode 100644 index 000000000..1fa36ea07 Binary files /dev/null and b/zh/apple-touch-icon.png differ diff --git a/zh/assets/css/custom.css b/zh/assets/css/custom.css new file mode 100644 index 000000000..00e05b42d --- /dev/null +++ b/zh/assets/css/custom.css @@ -0,0 +1 @@ +:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}:root,[data-bs-theme=light]{--pa-blue: #0d6efd;--pa-indigo: #6610f2;--pa-purple: #6f42c1;--pa-pink: #d63384;--pa-red: #dc3545;--pa-orange: #fd7e14;--pa-yellow: #ffc107;--pa-green: #198754;--pa-teal: #20c997;--pa-cyan: #0dcaf0;--pa-black: #000;--pa-white: #fff;--pa-gray: #6c757d;--pa-gray-dark: #343a40;--pa-gray-100: #f8f9fa;--pa-gray-200: #e9ecef;--pa-gray-300: #dee2e6;--pa-gray-400: #ced4da;--pa-gray-500: #adb5bd;--pa-gray-600: #6c757d;--pa-gray-700: #495057;--pa-gray-800: #343a40;--pa-gray-900: #212529;--pa-primary: #021a34;--pa-secondary: #075f94;--pa-success: #198754;--pa-info: #0dcaf0;--pa-warning: #ffc107;--pa-danger: #dc3545;--pa-light: #f8f9fa;--pa-dark: #212529;--pa-primary-rgb: 2, 26, 52;--pa-secondary-rgb: 7, 95, 148;--pa-success-rgb: 25, 135, 84;--pa-info-rgb: 13, 202, 240;--pa-warning-rgb: 255, 193, 7;--pa-danger-rgb: 220, 53, 69;--pa-light-rgb: 248, 249, 250;--pa-dark-rgb: 33, 37, 41;--pa-primary-text-emphasis: #010a15;--pa-secondary-text-emphasis: #03263b;--pa-success-text-emphasis: #0a3622;--pa-info-text-emphasis: #055160;--pa-warning-text-emphasis: #664d03;--pa-danger-text-emphasis: #58151c;--pa-light-text-emphasis: #495057;--pa-dark-text-emphasis: #495057;--pa-primary-bg-subtle: #ccd1d6;--pa-secondary-bg-subtle: #cddfea;--pa-success-bg-subtle: #d1e7dd;--pa-info-bg-subtle: #cff4fc;--pa-warning-bg-subtle: #fff3cd;--pa-danger-bg-subtle: #f8d7da;--pa-light-bg-subtle: #fcfcfd;--pa-dark-bg-subtle: #ced4da;--pa-primary-border-subtle: #9aa3ae;--pa-secondary-border-subtle: #9cbfd4;--pa-success-border-subtle: #a3cfbb;--pa-info-border-subtle: #9eeaf9;--pa-warning-border-subtle: #ffe69c;--pa-danger-border-subtle: #f1aeb5;--pa-light-border-subtle: #e9ecef;--pa-dark-border-subtle: #adb5bd;--pa-white-rgb: 255, 255, 255;--pa-black-rgb: 0, 0, 0;--pa-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--pa-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--pa-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--pa-body-font-family: var(--pa-font-sans-serif);--pa-body-font-size:1rem;--pa-body-font-weight: 400;--pa-body-line-height: 1.5;--pa-body-color: #212529;--pa-body-color-rgb: 33, 37, 41;--pa-body-bg: #fff;--pa-body-bg-rgb: 255, 255, 255;--pa-emphasis-color: #000;--pa-emphasis-color-rgb: 0, 0, 0;--pa-secondary-color: rgba(33, 37, 41, 0.75);--pa-secondary-color-rgb: 33, 37, 41;--pa-secondary-bg: #e9ecef;--pa-secondary-bg-rgb: 233, 236, 239;--pa-tertiary-color: rgba(33, 37, 41, 0.5);--pa-tertiary-color-rgb: 33, 37, 41;--pa-tertiary-bg: #f8f9fa;--pa-tertiary-bg-rgb: 248, 249, 250;--pa-heading-color: inherit;--pa-link-color: #021a34;--pa-link-color-rgb: 2, 26, 52;--pa-link-decoration: underline;--pa-link-hover-color: #02152a;--pa-link-hover-color-rgb: 2, 21, 42;--pa-code-color: #d63384;--pa-highlight-color: #212529;--pa-highlight-bg: #fff3cd;--pa-border-width: 1px;--pa-border-style: solid;--pa-border-color: #dee2e6;--pa-border-color-translucent: rgba(0, 0, 0, 0.175);--pa-border-radius: 0.375rem;--pa-border-radius-sm: 0.25rem;--pa-border-radius-lg: 0.5rem;--pa-border-radius-xl: 1rem;--pa-border-radius-xxl: 2rem;--pa-border-radius-2xl: var(--pa-border-radius-xxl);--pa-border-radius-pill: 50rem;--pa-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--pa-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--pa-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--pa-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--pa-focus-ring-width: 0.25rem;--pa-focus-ring-opacity: 0.25;--pa-focus-ring-color: rgba(2, 26, 52, 0.25);--pa-form-valid-color: #198754;--pa-form-valid-border-color: #198754;--pa-form-invalid-color: #dc3545;--pa-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--pa-body-color: #dee2e6;--pa-body-color-rgb: 222, 226, 230;--pa-body-bg: #212529;--pa-body-bg-rgb: 33, 37, 41;--pa-emphasis-color: #fff;--pa-emphasis-color-rgb: 255, 255, 255;--pa-secondary-color: rgba(222, 226, 230, 0.75);--pa-secondary-color-rgb: 222, 226, 230;--pa-secondary-bg: #343a40;--pa-secondary-bg-rgb: 52, 58, 64;--pa-tertiary-color: rgba(222, 226, 230, 0.5);--pa-tertiary-color-rgb: 222, 226, 230;--pa-tertiary-bg: #2b3035;--pa-tertiary-bg-rgb: 43, 48, 53;--pa-primary-text-emphasis: #677685;--pa-secondary-text-emphasis: #6a9fbf;--pa-success-text-emphasis: #75b798;--pa-info-text-emphasis: #6edff6;--pa-warning-text-emphasis: #ffda6a;--pa-danger-text-emphasis: #ea868f;--pa-light-text-emphasis: #f8f9fa;--pa-dark-text-emphasis: #dee2e6;--pa-primary-bg-subtle: #00050a;--pa-secondary-bg-subtle: #01131e;--pa-success-bg-subtle: #051b11;--pa-info-bg-subtle: #032830;--pa-warning-bg-subtle: #332701;--pa-danger-bg-subtle: #2c0b0e;--pa-light-bg-subtle: #343a40;--pa-dark-bg-subtle: #1a1d20;--pa-primary-border-subtle: #01101f;--pa-secondary-border-subtle: #043959;--pa-success-border-subtle: #0f5132;--pa-info-border-subtle: #087990;--pa-warning-border-subtle: #997404;--pa-danger-border-subtle: #842029;--pa-light-border-subtle: #495057;--pa-dark-border-subtle: #343a40;--pa-heading-color: inherit;--pa-link-color: #677685;--pa-link-hover-color: #85919d;--pa-link-color-rgb: 103, 118, 133;--pa-link-hover-color-rgb: 133, 145, 157;--pa-code-color: #e685b5;--pa-highlight-color: #dee2e6;--pa-highlight-bg: #664d03;--pa-border-color: #495057;--pa-border-color-translucent: rgba(255, 255, 255, 0.15);--pa-form-valid-color: #75b798;--pa-form-valid-border-color: #75b798;--pa-form-invalid-color: #ea868f;--pa-form-invalid-border-color: #ea868f}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--pa-body-font-family);font-size:var(--pa-body-font-size);font-weight:var(--pa-body-font-weight);line-height:var(--pa-body-line-height);color:var(--pa-body-color);text-align:var(--pa-body-text-align);background-color:var(--pa-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--pa-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--pa-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--pa-highlight-color);background-color:var(--pa-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--pa-link-color-rgb), var(--pa-link-opacity, 1));text-decoration:underline}a:hover{--pa-link-color-rgb: var(--pa-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--pa-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--pa-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--pa-body-bg);background-color:var(--pa-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--pa-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--pa-body-bg);border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-sm);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--pa-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--pa-gutter-x: 1.5rem;--pa-gutter-y: 0;width:100%;padding-right:calc(var(--pa-gutter-x)*.5);padding-left:calc(var(--pa-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--pa-breakpoint-xs: 0;--pa-breakpoint-sm: 576px;--pa-breakpoint-md: 768px;--pa-breakpoint-lg: 992px;--pa-breakpoint-xl: 1200px;--pa-breakpoint-xxl: 1400px}.row{--pa-gutter-x: 1.5rem;--pa-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--pa-gutter-y));margin-right:calc(-0.5*var(--pa-gutter-x));margin-left:calc(-0.5*var(--pa-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--pa-gutter-x)*.5);padding-left:calc(var(--pa-gutter-x)*.5);margin-top:var(--pa-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--pa-gutter-x: 0}.g-0,.gy-0{--pa-gutter-y: 0}.g-1,.gx-1{--pa-gutter-x: 0.25rem}.g-1,.gy-1{--pa-gutter-y: 0.25rem}.g-2,.gx-2{--pa-gutter-x: 0.5rem}.g-2,.gy-2{--pa-gutter-y: 0.5rem}.g-3,.gx-3{--pa-gutter-x: 1rem}.g-3,.gy-3{--pa-gutter-y: 1rem}.g-4,.gx-4{--pa-gutter-x: 1.5rem}.g-4,.gy-4{--pa-gutter-y: 1.5rem}.g-5,.gx-5{--pa-gutter-x: 3rem}.g-5,.gy-5{--pa-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--pa-gutter-x: 0}.g-sm-0,.gy-sm-0{--pa-gutter-y: 0}.g-sm-1,.gx-sm-1{--pa-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--pa-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--pa-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--pa-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--pa-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--pa-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--pa-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--pa-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--pa-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--pa-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--pa-gutter-x: 0}.g-md-0,.gy-md-0{--pa-gutter-y: 0}.g-md-1,.gx-md-1{--pa-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--pa-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--pa-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--pa-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--pa-gutter-x: 1rem}.g-md-3,.gy-md-3{--pa-gutter-y: 1rem}.g-md-4,.gx-md-4{--pa-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--pa-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--pa-gutter-x: 3rem}.g-md-5,.gy-md-5{--pa-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--pa-gutter-x: 0}.g-lg-0,.gy-lg-0{--pa-gutter-y: 0}.g-lg-1,.gx-lg-1{--pa-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--pa-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--pa-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--pa-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--pa-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--pa-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--pa-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--pa-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--pa-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--pa-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--pa-gutter-x: 0}.g-xl-0,.gy-xl-0{--pa-gutter-y: 0}.g-xl-1,.gx-xl-1{--pa-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--pa-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--pa-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--pa-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--pa-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--pa-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--pa-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--pa-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--pa-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--pa-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--pa-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--pa-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--pa-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--pa-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--pa-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--pa-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--pa-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--pa-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--pa-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--pa-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--pa-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--pa-gutter-y: 3rem}}.table{--pa-table-color-type: initial;--pa-table-bg-type: initial;--pa-table-color-state: initial;--pa-table-bg-state: initial;--pa-table-color: var(--pa-emphasis-color);--pa-table-bg: var(--pa-body-bg);--pa-table-border-color: var(--pa-border-color);--pa-table-accent-bg: transparent;--pa-table-striped-color: var(--pa-emphasis-color);--pa-table-striped-bg: rgba(var(--pa-emphasis-color-rgb), 0.05);--pa-table-active-color: var(--pa-emphasis-color);--pa-table-active-bg: rgba(var(--pa-emphasis-color-rgb), 0.1);--pa-table-hover-color: var(--pa-emphasis-color);--pa-table-hover-bg: rgba(var(--pa-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--pa-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--pa-table-color-state, var(--pa-table-color-type, var(--pa-table-color)));background-color:var(--pa-table-bg);border-bottom-width:var(--pa-border-width);box-shadow:inset 0 0 0 9999px var(--pa-table-bg-state, var(--pa-table-bg-type, var(--pa-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--pa-border-width)*2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--pa-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--pa-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--pa-table-color-type: var(--pa-table-striped-color);--pa-table-bg-type: var(--pa-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--pa-table-color-type: var(--pa-table-striped-color);--pa-table-bg-type: var(--pa-table-striped-bg)}.table-active{--pa-table-color-state: var(--pa-table-active-color);--pa-table-bg-state: var(--pa-table-active-bg)}.table-hover>tbody>tr:hover>*{--pa-table-color-state: var(--pa-table-hover-color);--pa-table-bg-state: var(--pa-table-hover-bg)}.table-primary{--pa-table-color: #000;--pa-table-bg: #ccd1d6;--pa-table-border-color: #a3a7ab;--pa-table-striped-bg: #c2c7cb;--pa-table-striped-color: #000;--pa-table-active-bg: #b8bcc1;--pa-table-active-color: #000;--pa-table-hover-bg: #bdc1c6;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-secondary{--pa-table-color: #000;--pa-table-bg: #cddfea;--pa-table-border-color: #a4b2bb;--pa-table-striped-bg: #c3d4de;--pa-table-striped-color: #000;--pa-table-active-bg: #b9c9d3;--pa-table-active-color: #000;--pa-table-hover-bg: #beced8;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-success{--pa-table-color: #000;--pa-table-bg: #d1e7dd;--pa-table-border-color: #a7b9b1;--pa-table-striped-bg: #c7dbd2;--pa-table-striped-color: #000;--pa-table-active-bg: #bcd0c7;--pa-table-active-color: #000;--pa-table-hover-bg: #c1d6cc;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-info{--pa-table-color: #000;--pa-table-bg: #cff4fc;--pa-table-border-color: #a6c3ca;--pa-table-striped-bg: #c5e8ef;--pa-table-striped-color: #000;--pa-table-active-bg: #badce3;--pa-table-active-color: #000;--pa-table-hover-bg: #bfe2e9;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-warning{--pa-table-color: #000;--pa-table-bg: #fff3cd;--pa-table-border-color: #ccc2a4;--pa-table-striped-bg: #f2e7c3;--pa-table-striped-color: #000;--pa-table-active-bg: #e6dbb9;--pa-table-active-color: #000;--pa-table-hover-bg: #ece1be;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-danger{--pa-table-color: #000;--pa-table-bg: #f8d7da;--pa-table-border-color: #c6acae;--pa-table-striped-bg: #eccccf;--pa-table-striped-color: #000;--pa-table-active-bg: #dfc2c4;--pa-table-active-color: #000;--pa-table-hover-bg: #e5c7ca;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-light{--pa-table-color: #000;--pa-table-bg: #f8f9fa;--pa-table-border-color: #c6c7c8;--pa-table-striped-bg: #ecedee;--pa-table-striped-color: #000;--pa-table-active-bg: #dfe0e1;--pa-table-active-color: #000;--pa-table-hover-bg: #e5e6e7;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-dark{--pa-table-color: #fff;--pa-table-bg: #212529;--pa-table-border-color: #4d5154;--pa-table-striped-bg: #2c3034;--pa-table-striped-color: #fff;--pa-table-active-bg: #373b3e;--pa-table-active-color: #fff;--pa-table-hover-bg: #323539;--pa-table-hover-color: #fff;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + var(--pa-border-width));padding-bottom:calc(0.375rem + var(--pa-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + var(--pa-border-width));padding-bottom:calc(0.5rem + var(--pa-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + var(--pa-border-width));padding-bottom:calc(0.25rem + var(--pa-border-width));font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:var(--pa-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);appearance:none;background-color:var(--pa-body-bg);background-clip:padding-box;border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-inset);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--pa-body-color);background-color:var(--pa-body-bg);border-color:#818d9a;outline:0;box-shadow:var(--pa-box-shadow-inset),0 0 0 .25rem rgba(2,26,52,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--pa-secondary-color);opacity:1}.form-control:disabled{background-color:var(--pa-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:var(--pa-body-color);background-color:var(--pa-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--pa-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--pa-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--pa-body-color);background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:var(--pa-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(var(--pa-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(var(--pa-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--pa-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--pa-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2))}.form-select{--pa-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);appearance:none;background-color:var(--pa-body-bg);background-image:var(--pa-form-select-bg-img),var(--pa-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-inset);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#818d9a;outline:0;box-shadow:var(--pa-box-shadow-inset),0 0 0 .25rem rgba(2,26,52,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--pa-secondary-bg)}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 var(--pa-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}[data-bs-theme=dark] .form-select{--pa-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--pa-form-check-bg: var(--pa-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;background-color:var(--pa-form-check-bg);background-image:var(--pa-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--pa-border-width) solid var(--pa-border-color);print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#818d9a;outline:0;box-shadow:0 0 0 .25rem rgba(2,26,52,.25)}.form-check-input:checked{background-color:#021a34;border-color:#021a34}.form-check-input:checked[type=checkbox]{--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#021a34;border-color:#021a34;--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--pa-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23818d9a'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(2,26,52,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(2,26,52,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;background-color:#021a34;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b3bac2}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--pa-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:var(--pa-box-shadow-inset)}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;background-color:#021a34;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b3bac2}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--pa-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:var(--pa-box-shadow-inset)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--pa-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--pa-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--pa-border-width) * 2));min-height:calc(3.5rem + calc(var(--pa-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--pa-border-width) solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--pa-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--pa-body-bg);border-radius:var(--pa-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--pa-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--pa-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:var(--pa-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);text-align:center;white-space:nowrap;background-color:var(--pa-tertiary-bg);border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--pa-border-width)*-1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--pa-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--pa-success);border-radius:var(--pa-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--pa-form-valid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--pa-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--pa-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--pa-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--pa-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--pa-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--pa-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--pa-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--pa-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--pa-danger);border-radius:var(--pa-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--pa-form-invalid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--pa-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--pa-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--pa-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--pa-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--pa-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--pa-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--pa-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--pa-btn-padding-x: 0.75rem;--pa-btn-padding-y: 0.375rem;--pa-btn-font-family: ;--pa-btn-font-size:1rem;--pa-btn-font-weight: 400;--pa-btn-line-height: 1.5;--pa-btn-color: var(--pa-body-color);--pa-btn-bg: transparent;--pa-btn-border-width: var(--pa-border-width);--pa-btn-border-color: transparent;--pa-btn-border-radius: var(--pa-border-radius);--pa-btn-hover-border-color: transparent;--pa-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--pa-btn-disabled-opacity: 0.65;--pa-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--pa-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--pa-btn-padding-y) var(--pa-btn-padding-x);font-family:var(--pa-btn-font-family);font-size:var(--pa-btn-font-size);font-weight:var(--pa-btn-font-weight);line-height:var(--pa-btn-line-height);color:var(--pa-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--pa-btn-border-width) solid var(--pa-btn-border-color);border-radius:var(--pa-btn-border-radius);background-color:var(--pa-btn-bg);box-shadow:var(--pa-btn-box-shadow);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--pa-btn-hover-color);background-color:var(--pa-btn-hover-bg);border-color:var(--pa-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--pa-btn-color);background-color:var(--pa-btn-bg);border-color:var(--pa-btn-border-color)}.btn:focus-visible{color:var(--pa-btn-hover-color);background-color:var(--pa-btn-hover-bg);border-color:var(--pa-btn-hover-border-color);outline:0;box-shadow:var(--pa-btn-box-shadow),var(--pa-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--pa-btn-hover-border-color);outline:0;box-shadow:var(--pa-btn-box-shadow),var(--pa-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--pa-btn-active-color);background-color:var(--pa-btn-active-bg);border-color:var(--pa-btn-active-border-color);box-shadow:var(--pa-btn-active-shadow)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--pa-btn-active-shadow),var(--pa-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--pa-btn-disabled-color);pointer-events:none;background-color:var(--pa-btn-disabled-bg);border-color:var(--pa-btn-disabled-border-color);opacity:var(--pa-btn-disabled-opacity);box-shadow:none}.btn-primary{--pa-btn-color: #fff;--pa-btn-bg: #021a34;--pa-btn-border-color: #021a34;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #02162c;--pa-btn-hover-border-color: #02152a;--pa-btn-focus-shadow-rgb: 40, 60, 82;--pa-btn-active-color: #fff;--pa-btn-active-bg: #02152a;--pa-btn-active-border-color: #021427;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #021a34;--pa-btn-disabled-border-color: #021a34}.btn-secondary{--pa-btn-color: #fff;--pa-btn-bg: #075f94;--pa-btn-border-color: #075f94;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #06517e;--pa-btn-hover-border-color: #064c76;--pa-btn-focus-shadow-rgb: 44, 119, 164;--pa-btn-active-color: #fff;--pa-btn-active-bg: #064c76;--pa-btn-active-border-color: #05476f;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #075f94;--pa-btn-disabled-border-color: #075f94}.btn-success{--pa-btn-color: #fff;--pa-btn-bg: #198754;--pa-btn-border-color: #198754;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #157347;--pa-btn-hover-border-color: #146c43;--pa-btn-focus-shadow-rgb: 60, 153, 110;--pa-btn-active-color: #fff;--pa-btn-active-bg: #146c43;--pa-btn-active-border-color: #13653f;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #198754;--pa-btn-disabled-border-color: #198754}.btn-info{--pa-btn-color: #000;--pa-btn-bg: #0dcaf0;--pa-btn-border-color: #0dcaf0;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #31d2f2;--pa-btn-hover-border-color: #25cff2;--pa-btn-focus-shadow-rgb: 11, 172, 204;--pa-btn-active-color: #000;--pa-btn-active-bg: #3dd5f3;--pa-btn-active-border-color: #25cff2;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #0dcaf0;--pa-btn-disabled-border-color: #0dcaf0}.btn-warning{--pa-btn-color: #000;--pa-btn-bg: #ffc107;--pa-btn-border-color: #ffc107;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #ffca2c;--pa-btn-hover-border-color: #ffc720;--pa-btn-focus-shadow-rgb: 217, 164, 6;--pa-btn-active-color: #000;--pa-btn-active-bg: #ffcd39;--pa-btn-active-border-color: #ffc720;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #ffc107;--pa-btn-disabled-border-color: #ffc107}.btn-danger{--pa-btn-color: #fff;--pa-btn-bg: #dc3545;--pa-btn-border-color: #dc3545;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #bb2d3b;--pa-btn-hover-border-color: #b02a37;--pa-btn-focus-shadow-rgb: 225, 83, 97;--pa-btn-active-color: #fff;--pa-btn-active-bg: #b02a37;--pa-btn-active-border-color: #a52834;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #dc3545;--pa-btn-disabled-border-color: #dc3545}.btn-light{--pa-btn-color: #000;--pa-btn-bg: #f8f9fa;--pa-btn-border-color: #f8f9fa;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #d3d4d5;--pa-btn-hover-border-color: #c6c7c8;--pa-btn-focus-shadow-rgb: 211, 212, 213;--pa-btn-active-color: #000;--pa-btn-active-bg: #c6c7c8;--pa-btn-active-border-color: #babbbc;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #f8f9fa;--pa-btn-disabled-border-color: #f8f9fa}.btn-dark{--pa-btn-color: #fff;--pa-btn-bg: #212529;--pa-btn-border-color: #212529;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #424649;--pa-btn-hover-border-color: #373b3e;--pa-btn-focus-shadow-rgb: 66, 70, 73;--pa-btn-active-color: #fff;--pa-btn-active-bg: #4d5154;--pa-btn-active-border-color: #373b3e;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #212529;--pa-btn-disabled-border-color: #212529}.btn-outline-primary{--pa-btn-color: #021a34;--pa-btn-border-color: #021a34;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #021a34;--pa-btn-hover-border-color: #021a34;--pa-btn-focus-shadow-rgb: 2, 26, 52;--pa-btn-active-color: #fff;--pa-btn-active-bg: #021a34;--pa-btn-active-border-color: #021a34;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #021a34;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #021a34;--pa-gradient: none}.btn-outline-secondary{--pa-btn-color: #075f94;--pa-btn-border-color: #075f94;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #075f94;--pa-btn-hover-border-color: #075f94;--pa-btn-focus-shadow-rgb: 7, 95, 148;--pa-btn-active-color: #fff;--pa-btn-active-bg: #075f94;--pa-btn-active-border-color: #075f94;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #075f94;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #075f94;--pa-gradient: none}.btn-outline-success{--pa-btn-color: #198754;--pa-btn-border-color: #198754;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #198754;--pa-btn-hover-border-color: #198754;--pa-btn-focus-shadow-rgb: 25, 135, 84;--pa-btn-active-color: #fff;--pa-btn-active-bg: #198754;--pa-btn-active-border-color: #198754;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #198754;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #198754;--pa-gradient: none}.btn-outline-info{--pa-btn-color: #0dcaf0;--pa-btn-border-color: #0dcaf0;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #0dcaf0;--pa-btn-hover-border-color: #0dcaf0;--pa-btn-focus-shadow-rgb: 13, 202, 240;--pa-btn-active-color: #000;--pa-btn-active-bg: #0dcaf0;--pa-btn-active-border-color: #0dcaf0;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #0dcaf0;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #0dcaf0;--pa-gradient: none}.btn-outline-warning{--pa-btn-color: #ffc107;--pa-btn-border-color: #ffc107;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #ffc107;--pa-btn-hover-border-color: #ffc107;--pa-btn-focus-shadow-rgb: 255, 193, 7;--pa-btn-active-color: #000;--pa-btn-active-bg: #ffc107;--pa-btn-active-border-color: #ffc107;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #ffc107;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #ffc107;--pa-gradient: none}.btn-outline-danger{--pa-btn-color: #dc3545;--pa-btn-border-color: #dc3545;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #dc3545;--pa-btn-hover-border-color: #dc3545;--pa-btn-focus-shadow-rgb: 220, 53, 69;--pa-btn-active-color: #fff;--pa-btn-active-bg: #dc3545;--pa-btn-active-border-color: #dc3545;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #dc3545;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #dc3545;--pa-gradient: none}.btn-outline-light{--pa-btn-color: #f8f9fa;--pa-btn-border-color: #f8f9fa;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #f8f9fa;--pa-btn-hover-border-color: #f8f9fa;--pa-btn-focus-shadow-rgb: 248, 249, 250;--pa-btn-active-color: #000;--pa-btn-active-bg: #f8f9fa;--pa-btn-active-border-color: #f8f9fa;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #f8f9fa;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #f8f9fa;--pa-gradient: none}.btn-outline-dark{--pa-btn-color: #212529;--pa-btn-border-color: #212529;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #212529;--pa-btn-hover-border-color: #212529;--pa-btn-focus-shadow-rgb: 33, 37, 41;--pa-btn-active-color: #fff;--pa-btn-active-bg: #212529;--pa-btn-active-border-color: #212529;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #212529;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #212529;--pa-gradient: none}.btn-link{--pa-btn-font-weight: 400;--pa-btn-color: var(--pa-link-color);--pa-btn-bg: transparent;--pa-btn-border-color: transparent;--pa-btn-hover-color: var(--pa-link-hover-color);--pa-btn-hover-border-color: transparent;--pa-btn-active-color: var(--pa-link-hover-color);--pa-btn-active-border-color: transparent;--pa-btn-disabled-color: #6c757d;--pa-btn-disabled-border-color: transparent;--pa-btn-box-shadow: 0 0 0 #000;--pa-btn-focus-shadow-rgb: 40, 60, 82;text-decoration:underline}.btn-link:focus-visible{color:var(--pa-btn-color)}.btn-link:hover{color:var(--pa-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--pa-btn-padding-y: 0.5rem;--pa-btn-padding-x: 1rem;--pa-btn-font-size:1.25rem;--pa-btn-border-radius: var(--pa-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--pa-btn-padding-y: 0.25rem;--pa-btn-padding-x: 0.5rem;--pa-btn-font-size:0.875rem;--pa-btn-border-radius: var(--pa-border-radius-sm)}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--pa-dropdown-zindex: 1000;--pa-dropdown-min-width: 10rem;--pa-dropdown-padding-x: 0;--pa-dropdown-padding-y: 0.5rem;--pa-dropdown-spacer: 0.125rem;--pa-dropdown-font-size:1rem;--pa-dropdown-color: var(--pa-body-color);--pa-dropdown-bg: var(--pa-body-bg);--pa-dropdown-border-color: var(--pa-border-color-translucent);--pa-dropdown-border-radius: var(--pa-border-radius);--pa-dropdown-border-width: var(--pa-border-width);--pa-dropdown-inner-border-radius: calc(var(--pa-border-radius) - var(--pa-border-width));--pa-dropdown-divider-bg: var(--pa-border-color-translucent);--pa-dropdown-divider-margin-y: 0.5rem;--pa-dropdown-box-shadow: var(--pa-box-shadow);--pa-dropdown-link-color: var(--pa-body-color);--pa-dropdown-link-hover-color: var(--pa-body-color);--pa-dropdown-link-hover-bg: var(--pa-tertiary-bg);--pa-dropdown-link-active-color: #fff;--pa-dropdown-link-active-bg: #021a34;--pa-dropdown-link-disabled-color: var(--pa-tertiary-color);--pa-dropdown-item-padding-x: 1rem;--pa-dropdown-item-padding-y: 0.25rem;--pa-dropdown-header-color: #6c757d;--pa-dropdown-header-padding-x: 1rem;--pa-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--pa-dropdown-zindex);display:none;min-width:var(--pa-dropdown-min-width);padding:var(--pa-dropdown-padding-y) var(--pa-dropdown-padding-x);margin:0;font-size:var(--pa-dropdown-font-size);color:var(--pa-dropdown-color);text-align:left;list-style:none;background-color:var(--pa-dropdown-bg);background-clip:padding-box;border:var(--pa-dropdown-border-width) solid var(--pa-dropdown-border-color);border-radius:var(--pa-dropdown-border-radius);box-shadow:var(--pa-dropdown-box-shadow)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--pa-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--pa-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--pa-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--pa-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--pa-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--pa-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--pa-dropdown-item-padding-y) var(--pa-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--pa-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0;border-radius:var(--pa-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--pa-dropdown-link-hover-color);background-color:var(--pa-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--pa-dropdown-link-active-color);text-decoration:none;background-color:var(--pa-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--pa-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--pa-dropdown-header-padding-y) var(--pa-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--pa-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--pa-dropdown-item-padding-y) var(--pa-dropdown-item-padding-x);color:var(--pa-dropdown-link-color)}.dropdown-menu-dark{--pa-dropdown-color: #dee2e6;--pa-dropdown-bg: #343a40;--pa-dropdown-border-color: var(--pa-border-color-translucent);--pa-dropdown-box-shadow: ;--pa-dropdown-link-color: #dee2e6;--pa-dropdown-link-hover-color: #fff;--pa-dropdown-divider-bg: var(--pa-border-color-translucent);--pa-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--pa-dropdown-link-active-color: #fff;--pa-dropdown-link-active-bg: #021a34;--pa-dropdown-link-disabled-color: #adb5bd;--pa-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--pa-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--pa-border-width)*-1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--pa-border-width)*-1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--pa-nav-link-padding-x: 1rem;--pa-nav-link-padding-y: 0.5rem;--pa-nav-link-font-weight: ;--pa-nav-link-color: var(--pa-link-color);--pa-nav-link-hover-color: var(--pa-link-hover-color);--pa-nav-link-disabled-color: var(--pa-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--pa-nav-link-padding-y) var(--pa-nav-link-padding-x);font-size:var(--pa-nav-link-font-size);font-weight:var(--pa-nav-link-font-weight);color:var(--pa-nav-link-color);text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--pa-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(2,26,52,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--pa-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--pa-nav-tabs-border-width: var(--pa-border-width);--pa-nav-tabs-border-color: var(--pa-border-color);--pa-nav-tabs-border-radius: var(--pa-border-radius);--pa-nav-tabs-link-hover-border-color: var(--pa-secondary-bg) var(--pa-secondary-bg) var(--pa-border-color);--pa-nav-tabs-link-active-color: var(--pa-emphasis-color);--pa-nav-tabs-link-active-bg: var(--pa-body-bg);--pa-nav-tabs-link-active-border-color: var(--pa-border-color) var(--pa-border-color) var(--pa-body-bg);border-bottom:var(--pa-nav-tabs-border-width) solid var(--pa-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--pa-nav-tabs-border-width));border:var(--pa-nav-tabs-border-width) solid rgba(0,0,0,0);border-top-left-radius:var(--pa-nav-tabs-border-radius);border-top-right-radius:var(--pa-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--pa-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--pa-nav-tabs-link-active-color);background-color:var(--pa-nav-tabs-link-active-bg);border-color:var(--pa-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--pa-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--pa-nav-pills-border-radius: var(--pa-border-radius);--pa-nav-pills-link-active-color: #fff;--pa-nav-pills-link-active-bg: #021a34}.nav-pills .nav-link{border-radius:var(--pa-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--pa-nav-pills-link-active-color);background-color:var(--pa-nav-pills-link-active-bg)}.nav-underline{--pa-nav-underline-gap: 1rem;--pa-nav-underline-border-width: 0.125rem;--pa-nav-underline-link-active-color: var(--pa-emphasis-color);gap:var(--pa-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--pa-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--pa-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--pa-navbar-padding-x: 0;--pa-navbar-padding-y: 0.5rem;--pa-navbar-color: rgba(var(--pa-emphasis-color-rgb), 0.65);--pa-navbar-hover-color: rgba(var(--pa-emphasis-color-rgb), 0.8);--pa-navbar-disabled-color: rgba(var(--pa-emphasis-color-rgb), 0.3);--pa-navbar-active-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-brand-padding-y: 0.3125rem;--pa-navbar-brand-margin-end: 1rem;--pa-navbar-brand-font-size: 1.25rem;--pa-navbar-brand-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-brand-hover-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-nav-link-padding-x: 0.5rem;--pa-navbar-toggler-padding-y: 0.25rem;--pa-navbar-toggler-padding-x: 0.75rem;--pa-navbar-toggler-font-size: 1.25rem;--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--pa-navbar-toggler-border-color: rgba(var(--pa-emphasis-color-rgb), 0.15);--pa-navbar-toggler-border-radius: var(--pa-border-radius);--pa-navbar-toggler-focus-width: 0.25rem;--pa-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--pa-navbar-padding-y) var(--pa-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--pa-navbar-brand-padding-y);padding-bottom:var(--pa-navbar-brand-padding-y);margin-right:var(--pa-navbar-brand-margin-end);font-size:var(--pa-navbar-brand-font-size);color:var(--pa-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--pa-navbar-brand-hover-color)}.navbar-nav{--pa-nav-link-padding-x: 0;--pa-nav-link-padding-y: 0.5rem;--pa-nav-link-font-weight: ;--pa-nav-link-color: var(--pa-navbar-color);--pa-nav-link-hover-color: var(--pa-navbar-hover-color);--pa-nav-link-disabled-color: var(--pa-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--pa-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--pa-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--pa-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--pa-navbar-toggler-padding-y) var(--pa-navbar-toggler-padding-x);font-size:var(--pa-navbar-toggler-font-size);line-height:1;color:var(--pa-navbar-color);background-color:rgba(0,0,0,0);border:var(--pa-border-width) solid var(--pa-navbar-toggler-border-color);border-radius:var(--pa-navbar-toggler-border-radius);transition:var(--pa-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--pa-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--pa-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--pa-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--pa-navbar-color: rgba(255, 255, 255, 0.55);--pa-navbar-hover-color: rgba(255, 255, 255, 0.75);--pa-navbar-disabled-color: rgba(255, 255, 255, 0.25);--pa-navbar-active-color: #fff;--pa-navbar-brand-color: #fff;--pa-navbar-brand-hover-color: #fff;--pa-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.badge{--pa-badge-padding-x: 0.65em;--pa-badge-padding-y: 0.35em;--pa-badge-font-size:0.75em;--pa-badge-font-weight: 700;--pa-badge-color: #fff;--pa-badge-border-radius: var(--pa-border-radius);display:inline-block;padding:var(--pa-badge-padding-y) var(--pa-badge-padding-x);font-size:var(--pa-badge-font-size);font-weight:var(--pa-badge-font-weight);line-height:1;color:var(--pa-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--pa-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--pa-alert-bg: transparent;--pa-alert-padding-x: 1rem;--pa-alert-padding-y: 1rem;--pa-alert-margin-bottom: 1rem;--pa-alert-color: inherit;--pa-alert-border-color: transparent;--pa-alert-border: var(--pa-border-width) solid var(--pa-alert-border-color);--pa-alert-border-radius: var(--pa-border-radius);--pa-alert-link-color: inherit;position:relative;padding:var(--pa-alert-padding-y) var(--pa-alert-padding-x);margin-bottom:var(--pa-alert-margin-bottom);color:var(--pa-alert-color);background-color:var(--pa-alert-bg);border:var(--pa-alert-border);border-radius:var(--pa-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--pa-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--pa-alert-color: var(--pa-primary-text-emphasis);--pa-alert-bg: var(--pa-primary-bg-subtle);--pa-alert-border-color: var(--pa-primary-border-subtle);--pa-alert-link-color: var(--pa-primary-text-emphasis)}.alert-secondary{--pa-alert-color: var(--pa-secondary-text-emphasis);--pa-alert-bg: var(--pa-secondary-bg-subtle);--pa-alert-border-color: var(--pa-secondary-border-subtle);--pa-alert-link-color: var(--pa-secondary-text-emphasis)}.alert-success{--pa-alert-color: var(--pa-success-text-emphasis);--pa-alert-bg: var(--pa-success-bg-subtle);--pa-alert-border-color: var(--pa-success-border-subtle);--pa-alert-link-color: var(--pa-success-text-emphasis)}.alert-info{--pa-alert-color: var(--pa-info-text-emphasis);--pa-alert-bg: var(--pa-info-bg-subtle);--pa-alert-border-color: var(--pa-info-border-subtle);--pa-alert-link-color: var(--pa-info-text-emphasis)}.alert-warning{--pa-alert-color: var(--pa-warning-text-emphasis);--pa-alert-bg: var(--pa-warning-bg-subtle);--pa-alert-border-color: var(--pa-warning-border-subtle);--pa-alert-link-color: var(--pa-warning-text-emphasis)}.alert-danger{--pa-alert-color: var(--pa-danger-text-emphasis);--pa-alert-bg: var(--pa-danger-bg-subtle);--pa-alert-border-color: var(--pa-danger-border-subtle);--pa-alert-link-color: var(--pa-danger-text-emphasis)}.alert-light{--pa-alert-color: var(--pa-light-text-emphasis);--pa-alert-bg: var(--pa-light-bg-subtle);--pa-alert-border-color: var(--pa-light-border-subtle);--pa-alert-link-color: var(--pa-light-text-emphasis)}.alert-dark{--pa-alert-color: var(--pa-dark-text-emphasis);--pa-alert-bg: var(--pa-dark-bg-subtle);--pa-alert-border-color: var(--pa-dark-border-subtle);--pa-alert-link-color: var(--pa-dark-text-emphasis)}.btn-close{--pa-btn-close-color: #000;--pa-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--pa-btn-close-opacity: 0.5;--pa-btn-close-hover-opacity: 0.75;--pa-btn-close-focus-shadow: 0 0 0 0.25rem rgba(2, 26, 52, 0.25);--pa-btn-close-focus-opacity: 1;--pa-btn-close-disabled-opacity: 0.25;--pa-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--pa-btn-close-color);background:rgba(0,0,0,0) var(--pa-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--pa-btn-close-opacity)}.btn-close:hover{color:var(--pa-btn-close-color);text-decoration:none;opacity:var(--pa-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--pa-btn-close-focus-shadow);opacity:var(--pa-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:var(--pa-btn-close-disabled-opacity)}.btn-close-white{filter:var(--pa-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--pa-btn-close-white-filter)}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--pa-primary-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--pa-secondary-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--pa-success-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--pa-info-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--pa-warning-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--pa-danger-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--pa-light-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--pa-dark-rgb), var(--pa-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--pa-primary-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-primary-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(2, 21, 42, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(2, 21, 42, var(--pa-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--pa-secondary-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-secondary-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(6, 76, 118, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(6, 76, 118, var(--pa-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--pa-success-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-success-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, var(--pa-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--pa-info-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-info-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, var(--pa-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--pa-warning-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-warning-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, var(--pa-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--pa-danger-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-danger-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, var(--pa-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--pa-light-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-light-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--pa-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--pa-dark-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-dark-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--pa-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--pa-focus-ring-x, 0) var(--pa-focus-ring-y, 0) var(--pa-focus-ring-blur, 0) var(--pa-focus-ring-width) var(--pa-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--pa-link-color-rgb), var(--pa-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--pa-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--pa-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--pa-aspect-ratio: 100%}.ratio-4x3{--pa-aspect-ratio: 75%}.ratio-16x9{--pa-aspect-ratio: 56.25%}.ratio-21x9{--pa-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--pa-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:var(--pa-box-shadow) !important}.shadow-sm{box-shadow:var(--pa-box-shadow-sm) !important}.shadow-lg{box-shadow:var(--pa-box-shadow-lg) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--pa-focus-ring-color: rgba(var(--pa-primary-rgb), var(--pa-focus-ring-opacity))}.focus-ring-secondary{--pa-focus-ring-color: rgba(var(--pa-secondary-rgb), var(--pa-focus-ring-opacity))}.focus-ring-success{--pa-focus-ring-color: rgba(var(--pa-success-rgb), var(--pa-focus-ring-opacity))}.focus-ring-info{--pa-focus-ring-color: rgba(var(--pa-info-rgb), var(--pa-focus-ring-opacity))}.focus-ring-warning{--pa-focus-ring-color: rgba(var(--pa-warning-rgb), var(--pa-focus-ring-opacity))}.focus-ring-danger{--pa-focus-ring-color: rgba(var(--pa-danger-rgb), var(--pa-focus-ring-opacity))}.focus-ring-light{--pa-focus-ring-color: rgba(var(--pa-light-rgb), var(--pa-focus-ring-opacity))}.focus-ring-dark{--pa-focus-ring-color: rgba(var(--pa-dark-rgb), var(--pa-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--pa-border-opacity: 1;border-color:rgba(var(--pa-primary-rgb), var(--pa-border-opacity)) !important}.border-secondary{--pa-border-opacity: 1;border-color:rgba(var(--pa-secondary-rgb), var(--pa-border-opacity)) !important}.border-success{--pa-border-opacity: 1;border-color:rgba(var(--pa-success-rgb), var(--pa-border-opacity)) !important}.border-info{--pa-border-opacity: 1;border-color:rgba(var(--pa-info-rgb), var(--pa-border-opacity)) !important}.border-warning{--pa-border-opacity: 1;border-color:rgba(var(--pa-warning-rgb), var(--pa-border-opacity)) !important}.border-danger{--pa-border-opacity: 1;border-color:rgba(var(--pa-danger-rgb), var(--pa-border-opacity)) !important}.border-light{--pa-border-opacity: 1;border-color:rgba(var(--pa-light-rgb), var(--pa-border-opacity)) !important}.border-dark{--pa-border-opacity: 1;border-color:rgba(var(--pa-dark-rgb), var(--pa-border-opacity)) !important}.border-black{--pa-border-opacity: 1;border-color:rgba(var(--pa-black-rgb), var(--pa-border-opacity)) !important}.border-white{--pa-border-opacity: 1;border-color:rgba(var(--pa-white-rgb), var(--pa-border-opacity)) !important}.border-primary-subtle{border-color:var(--pa-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--pa-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--pa-success-border-subtle) !important}.border-info-subtle{border-color:var(--pa-info-border-subtle) !important}.border-warning-subtle{border-color:var(--pa-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--pa-danger-border-subtle) !important}.border-light-subtle{border-color:var(--pa-light-border-subtle) !important}.border-dark-subtle{border-color:var(--pa-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--pa-border-opacity: 0.1}.border-opacity-25{--pa-border-opacity: 0.25}.border-opacity-50{--pa-border-opacity: 0.5}.border-opacity-75{--pa-border-opacity: 0.75}.border-opacity-100{--pa-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--pa-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--pa-text-opacity: 1;color:rgba(var(--pa-primary-rgb), var(--pa-text-opacity)) !important}.text-secondary{--pa-text-opacity: 1;color:rgba(var(--pa-secondary-rgb), var(--pa-text-opacity)) !important}.text-success{--pa-text-opacity: 1;color:rgba(var(--pa-success-rgb), var(--pa-text-opacity)) !important}.text-info{--pa-text-opacity: 1;color:rgba(var(--pa-info-rgb), var(--pa-text-opacity)) !important}.text-warning{--pa-text-opacity: 1;color:rgba(var(--pa-warning-rgb), var(--pa-text-opacity)) !important}.text-danger{--pa-text-opacity: 1;color:rgba(var(--pa-danger-rgb), var(--pa-text-opacity)) !important}.text-light{--pa-text-opacity: 1;color:rgba(var(--pa-light-rgb), var(--pa-text-opacity)) !important}.text-dark{--pa-text-opacity: 1;color:rgba(var(--pa-dark-rgb), var(--pa-text-opacity)) !important}.text-black{--pa-text-opacity: 1;color:rgba(var(--pa-black-rgb), var(--pa-text-opacity)) !important}.text-white{--pa-text-opacity: 1;color:rgba(var(--pa-white-rgb), var(--pa-text-opacity)) !important}.text-body{--pa-text-opacity: 1;color:rgba(var(--pa-body-color-rgb), var(--pa-text-opacity)) !important}.text-muted{--pa-text-opacity: 1;color:var(--pa-secondary-color) !important}.text-black-50{--pa-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--pa-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--pa-text-opacity: 1;color:var(--pa-secondary-color) !important}.text-body-tertiary{--pa-text-opacity: 1;color:var(--pa-tertiary-color) !important}.text-body-emphasis{--pa-text-opacity: 1;color:var(--pa-emphasis-color) !important}.text-reset{--pa-text-opacity: 1;color:inherit !important}.text-opacity-25{--pa-text-opacity: 0.25}.text-opacity-50{--pa-text-opacity: 0.5}.text-opacity-75{--pa-text-opacity: 0.75}.text-opacity-100{--pa-text-opacity: 1}.text-primary-emphasis{color:var(--pa-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--pa-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--pa-success-text-emphasis) !important}.text-info-emphasis{color:var(--pa-info-text-emphasis) !important}.text-warning-emphasis{color:var(--pa-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--pa-danger-text-emphasis) !important}.text-light-emphasis{color:var(--pa-light-text-emphasis) !important}.text-dark-emphasis{color:var(--pa-dark-text-emphasis) !important}.link-opacity-10{--pa-link-opacity: 0.1}.link-opacity-10-hover:hover{--pa-link-opacity: 0.1}.link-opacity-25{--pa-link-opacity: 0.25}.link-opacity-25-hover:hover{--pa-link-opacity: 0.25}.link-opacity-50{--pa-link-opacity: 0.5}.link-opacity-50-hover:hover{--pa-link-opacity: 0.5}.link-opacity-75{--pa-link-opacity: 0.75}.link-opacity-75-hover:hover{--pa-link-opacity: 0.75}.link-opacity-100{--pa-link-opacity: 1}.link-opacity-100-hover:hover{--pa-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-primary{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-primary-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-secondary{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-secondary-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-success{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-success-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-info{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-info-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-warning{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-warning-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-danger{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-danger-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-light{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-light-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-dark{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-dark-rgb), var(--pa-link-underline-opacity)) !important}.link-underline{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-link-color-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--pa-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--pa-link-underline-opacity: 0}.link-underline-opacity-10{--pa-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--pa-link-underline-opacity: 0.1}.link-underline-opacity-25{--pa-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--pa-link-underline-opacity: 0.25}.link-underline-opacity-50{--pa-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--pa-link-underline-opacity: 0.5}.link-underline-opacity-75{--pa-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--pa-link-underline-opacity: 0.75}.link-underline-opacity-100{--pa-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--pa-link-underline-opacity: 1}.bg-primary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-primary-rgb), var(--pa-bg-opacity)) !important}.bg-secondary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-secondary-rgb), var(--pa-bg-opacity)) !important}.bg-success{--pa-bg-opacity: 1;background-color:rgba(var(--pa-success-rgb), var(--pa-bg-opacity)) !important}.bg-info{--pa-bg-opacity: 1;background-color:rgba(var(--pa-info-rgb), var(--pa-bg-opacity)) !important}.bg-warning{--pa-bg-opacity: 1;background-color:rgba(var(--pa-warning-rgb), var(--pa-bg-opacity)) !important}.bg-danger{--pa-bg-opacity: 1;background-color:rgba(var(--pa-danger-rgb), var(--pa-bg-opacity)) !important}.bg-light{--pa-bg-opacity: 1;background-color:rgba(var(--pa-light-rgb), var(--pa-bg-opacity)) !important}.bg-dark{--pa-bg-opacity: 1;background-color:rgba(var(--pa-dark-rgb), var(--pa-bg-opacity)) !important}.bg-black{--pa-bg-opacity: 1;background-color:rgba(var(--pa-black-rgb), var(--pa-bg-opacity)) !important}.bg-white{--pa-bg-opacity: 1;background-color:rgba(var(--pa-white-rgb), var(--pa-bg-opacity)) !important}.bg-body{--pa-bg-opacity: 1;background-color:rgba(var(--pa-body-bg-rgb), var(--pa-bg-opacity)) !important}.bg-transparent{--pa-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-secondary-bg-rgb), var(--pa-bg-opacity)) !important}.bg-body-tertiary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-tertiary-bg-rgb), var(--pa-bg-opacity)) !important}.bg-opacity-10{--pa-bg-opacity: 0.1}.bg-opacity-25{--pa-bg-opacity: 0.25}.bg-opacity-50{--pa-bg-opacity: 0.5}.bg-opacity-75{--pa-bg-opacity: 0.75}.bg-opacity-100{--pa-bg-opacity: 1}.bg-primary-subtle{background-color:var(--pa-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--pa-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--pa-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--pa-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--pa-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--pa-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--pa-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--pa-dark-bg-subtle) !important}.bg-gradient{background-image:var(--pa-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--pa-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--pa-border-radius-sm) !important}.rounded-2{border-radius:var(--pa-border-radius) !important}.rounded-3{border-radius:var(--pa-border-radius-lg) !important}.rounded-4{border-radius:var(--pa-border-radius-xl) !important}.rounded-5{border-radius:var(--pa-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--pa-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--pa-border-radius) !important;border-top-right-radius:var(--pa-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--pa-border-radius-sm) !important;border-top-right-radius:var(--pa-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--pa-border-radius) !important;border-top-right-radius:var(--pa-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--pa-border-radius-lg) !important;border-top-right-radius:var(--pa-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--pa-border-radius-xl) !important;border-top-right-radius:var(--pa-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--pa-border-radius-xxl) !important;border-top-right-radius:var(--pa-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--pa-border-radius-pill) !important;border-top-right-radius:var(--pa-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--pa-border-radius) !important;border-bottom-right-radius:var(--pa-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--pa-border-radius-sm) !important;border-bottom-right-radius:var(--pa-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--pa-border-radius) !important;border-bottom-right-radius:var(--pa-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--pa-border-radius-lg) !important;border-bottom-right-radius:var(--pa-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--pa-border-radius-xl) !important;border-bottom-right-radius:var(--pa-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--pa-border-radius-xxl) !important;border-bottom-right-radius:var(--pa-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--pa-border-radius-pill) !important;border-bottom-right-radius:var(--pa-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--pa-border-radius) !important;border-bottom-left-radius:var(--pa-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--pa-border-radius-sm) !important;border-bottom-left-radius:var(--pa-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--pa-border-radius) !important;border-bottom-left-radius:var(--pa-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--pa-border-radius-lg) !important;border-bottom-left-radius:var(--pa-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--pa-border-radius-xl) !important;border-bottom-left-radius:var(--pa-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--pa-border-radius-xxl) !important;border-bottom-left-radius:var(--pa-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--pa-border-radius-pill) !important;border-bottom-left-radius:var(--pa-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--pa-border-radius) !important;border-top-left-radius:var(--pa-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--pa-border-radius-sm) !important;border-top-left-radius:var(--pa-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--pa-border-radius) !important;border-top-left-radius:var(--pa-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--pa-border-radius-lg) !important;border-top-left-radius:var(--pa-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--pa-border-radius-xl) !important;border-top-left-radius:var(--pa-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--pa-border-radius-xxl) !important;border-top-left-radius:var(--pa-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--pa-border-radius-pill) !important;border-top-left-radius:var(--pa-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}body{font-family:"Open Sans",sans-serif;font-weight:400;color:var(--text-color);background-color:var(--bg-color);max-width:1200px;margin:0 auto}.btn-primary{color:var(--text-color-reverse);background-color:var(--primary-color);border-color:var(--primary-color)}.btn-outline-primary{color:var(--primary-color);background:none;border-color:var(--primary-color)}.btn-outline-primary:hover{background-color:var(--primary-color);color:var(--text-color-reverse)}.btn-secondary{color:#fff;background-color:var(--secondary-color);border-color:var(--secondary-color)}.navbar .nav-top{height:86px}.navbar .fixed-menu{width:220px}.navbar .logo img{width:200px}a{text-decoration:underline;color:var(--link-color)}a:hover{color:var(--link-hover-color)}a:active{color:var(--link-color)}h1,.h1,h2,.h2{font-weight:500;line-height:1.25;padding-bottom:12px;padding-top:14px}h1,.h1{font-weight:600}h3,.h3{padding-top:16px}.motto .title{font-weight:600;font-size:32px;padding-top:36px}.motto .motto{font-weight:500;font-size:20px}.motto .short{font-weight:500;font-size:12px}.btn-fixed{border-width:2px;border-style:solid;width:220px;height:46px;text-transform:uppercase;font-weight:700;border-radius:5px 5px 5px 5px;vertical-align:middle;line-height:42px;padding:0;margin:16px;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)}.pactus-video video{max-width:100%;width:100%;margin-left:auto;margin-right:auto;display:block}.highlighter-rouge .highlight pre{background-color:#0d1117;padding:32px 12px 12px 12px;color:#ccc;position:relative;overflow:auto;direction:ltr}.highlighter-rouge .highlight pre button{position:absolute;top:6px;right:8px;padding:2px;background-color:gray;color:#404040;border-radius:5px;border:ridge 1px gray}.highlighter-rouge .highlight pre button:hover{cursor:pointer;background-color:#bcbabb}.nav-tabs{border-color:#0d1117 !important}.nav-tabs .nav-link{border-width:0 !important}.nav-tabs .nav-link:not(.active):hover{color:#fff !important;background-color:gray !important}.nav-tabs .active{color:#fff !important;background-color:#0d1117 !important}.table thead tr th{font-weight:700;background-color:var(--bg-color) !important}blockquote{background:#eee;border-left:10px solid #ccc;padding:16px;quotes:"“" "”" "‘" "’"}blockquote:before{color:#ccc;content:open-quote;font-size:64px;line-height:.1em;vertical-align:-0.4em}blockquote p{margin-top:16px}blockquote p:first-child{display:inline;padding-bottom:160px;margin-bottom:160px}.footer{background-color:var(--primary-color);color:var(--text-color-reverse)}.footer .section{font-size:1.75rem;font-weight:500;line-height:1.25;padding-bottom:20px}.footer li{padding-bottom:8px}.footer.anchor a{color:var(--text-color-reverse)}.footer.anchor a:link{color:var(--text-color-reverse);background-color:rgba(0,0,0,0);text-decoration:none}.footer.anchor a:hover{color:var(--text-color-reverse)}.footer .legal{color:var(--text-color-reverse);font-size:12px}.community img{margin:4px}.community_ran img{margin:4px}#btn-back-to-top{background-color:var(--primary-color);color:var(--bg-color);position:fixed;bottom:20px;right:20px;display:none}.edit-bar{padding-top:30px}.edit-bar .edit-btn,.edit-bar .edit-btn>a:hover{color:var(--text-color);text-decoration:none}.all-posts .post-link{padding-bottom:8px}.blog-post .post-date{padding-bottom:10px;color:gray}.blog-post .content{padding-top:22px;min-height:600px}.partners img{padding-top:24px}.sensifai{max-width:300px}.hexdump{font-family:monospace;font-size:12px;padding-bottom:1rem}.hexdump .offset{border-right:2px solid #708090;color:#789}.hexdump .ascii{color:dimgray}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.faq h3,.faq .h3{margin-top:20px;padding-top:16px;border-top:1px solid var(--primary-color)}.faq a{text-decoration:none}.faq .group{padding-top:16px}.faq .group .col{font-weight:600;padding-bottom:10px}.faq .separator{padding-top:12px;padding-bottom:12px}.faq .read_more{padding-top:12px}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.toc .btn,.toc a{color:var(--text-color)}.toc .btn-section{padding:.25rem .5rem;font-weight:600;background-color:rgba(0,0,0,0)}.toc .btn-section:hover,.toc .btn-section:focus{background-color:var(--bg-color)}.toc .btn-page a{padding:.1875rem .5rem;margin-top:.125rem;margin-left:1.25rem}.toc .btn-page a:hover,.toc .btn-page a:focus,.toc .btn-page .selected{background-color:var(--bg-color)}.timeline{position:relative}.timeline::after{content:"";position:absolute;width:6px;background-color:#939597;top:0;bottom:0;left:50%;margin-left:-3px}.timeline-card{position:relative;width:50%}.timeline-card .card{border:1px solid rgba(0,0,0,.175);border-radius:5px;background-color:#eee;color:#4c4c4c}.timeline-card .card a{color:#4c4c4c}.timeline-card .card .text-muted{color:#898b8d !important}.timeline-card .card-title{padding-bottom:12px;font-size:1.1rem;font-weight:500}.timeline-card::after{line-height:38px;font-size:24px;position:absolute;text-align:center;width:48px;height:48px;right:-24px;top:15px;border-radius:50%;z-index:1}.timeline-card.completed::after{content:"✅";background-color:#eee;border:5px solid #77b255}.timeline-card.ongoing::after{content:"🚧";background-color:#eee;border:5px solid #ffcb4b}.timeline-card.upcoming::after{content:"⏳";background-color:#eee;border:5px solid #478ec2}.timeline-card.left{padding:0px 50px 20px 0px;left:0}.timeline-card.right{padding:0px 0px 20px 50px;left:50%}.timeline-card.left::before{content:"";position:absolute;height:20px;width:20px;background-color:#eee;box-sizing:border-box;transform:rotate(45deg) translate(-50%);top:34px;z-index:0;right:33px;border-right:1px solid rgba(0,0,0,.175);border-top:1px solid rgba(0,0,0,.175)}.timeline-card.right::before{content:"";position:absolute;height:20px;width:20px;background-color:#eee !important;box-sizing:border-box;transform:rotate(45deg) translate(-50%);top:33px;z-index:0;left:48px;border-left:1px solid rgba(0,0,0,.175);border-bottom:1px solid rgba(0,0,0,.175)}.timeline-card.right::after{left:-24px}@media screen and (max-width: 600px){.timeline::after{left:31px}.timeline-card{width:100%;padding-left:80px !important;padding-right:25px !important}.timeline-card::before{left:77px !important}.timeline-card.left::after,.timeline-card.right::after{left:8px !important}.timeline-card.left::before{border-right:none;border-top:none;border-left:1px solid rgba(0,0,0,.175);border-bottom:1px solid rgba(0,0,0,.175)}.timeline-card.right::before{right:auto}.timeline-card.right{left:0%}}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.learn h2,.learn .h2{border-top:1px solid var(--primary-color)}[data-bs-theme=dark] blockquote{background:#14171c}[data-bs-theme=dark] .toc .btn-section::before{--svg-color: var(--text)}[data-bs-theme=dark] .fa-linux{color:#fff}/*# sourceMappingURL=custom.css.map */ \ No newline at end of file diff --git a/zh/assets/css/custom.css.map b/zh/assets/css/custom.css.map new file mode 100644 index 000000000..e0c48830b --- /dev/null +++ b/zh/assets/css/custom.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../_sass/_vars.scss","../../../node_modules/bootstrap/scss/_root.scss","../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../node_modules/bootstrap/scss/_reboot.scss","../../../node_modules/bootstrap/scss/_variables.scss","../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../node_modules/bootstrap/scss/_type.scss","../../../node_modules/bootstrap/scss/mixins/_lists.scss","../../../node_modules/bootstrap/scss/_images.scss","../../../node_modules/bootstrap/scss/mixins/_image.scss","../../../node_modules/bootstrap/scss/mixins/_box-shadow.scss","../../../node_modules/bootstrap/scss/_containers.scss","../../../node_modules/bootstrap/scss/mixins/_container.scss","../../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../../node_modules/bootstrap/scss/_grid.scss","../../../node_modules/bootstrap/scss/mixins/_grid.scss","../../../node_modules/bootstrap/scss/_tables.scss","../../../node_modules/bootstrap/scss/mixins/_table-variants.scss","../../../node_modules/bootstrap/scss/forms/_labels.scss","../../../node_modules/bootstrap/scss/forms/_form-text.scss","../../../node_modules/bootstrap/scss/forms/_form-control.scss","../../../node_modules/bootstrap/scss/mixins/_transition.scss","../../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../../node_modules/bootstrap/scss/forms/_form-select.scss","../../../node_modules/bootstrap/scss/forms/_form-check.scss","../../../node_modules/bootstrap/scss/forms/_form-range.scss","../../../node_modules/bootstrap/scss/forms/_floating-labels.scss","../../../node_modules/bootstrap/scss/forms/_input-group.scss","../../../node_modules/bootstrap/scss/mixins/_forms.scss","../../../node_modules/bootstrap/scss/_buttons.scss","../../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../../node_modules/bootstrap/scss/_transitions.scss","../../../node_modules/bootstrap/scss/_dropdown.scss","../../../node_modules/bootstrap/scss/mixins/_caret.scss","../../../node_modules/bootstrap/scss/_button-group.scss","../../../node_modules/bootstrap/scss/_nav.scss","../../../node_modules/bootstrap/scss/_navbar.scss","../../../node_modules/bootstrap/scss/_badge.scss","../../../node_modules/bootstrap/scss/_alert.scss","../../../node_modules/bootstrap/scss/_close.scss","../../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../../node_modules/bootstrap/scss/helpers/_color-bg.scss","../../../node_modules/bootstrap/scss/helpers/_colored-links.scss","../../../node_modules/bootstrap/scss/helpers/_focus-ring.scss","../../../node_modules/bootstrap/scss/helpers/_icon-link.scss","../../../node_modules/bootstrap/scss/helpers/_ratio.scss","../../../node_modules/bootstrap/scss/helpers/_position.scss","../../../node_modules/bootstrap/scss/helpers/_stacks.scss","../../../node_modules/bootstrap/scss/helpers/_visually-hidden.scss","../../../node_modules/bootstrap/scss/mixins/_visually-hidden.scss","../../../node_modules/bootstrap/scss/helpers/_stretched-link.scss","../../../node_modules/bootstrap/scss/helpers/_text-truncation.scss","../../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../../node_modules/bootstrap/scss/helpers/_vr.scss","../../../node_modules/bootstrap/scss/mixins/_utilities.scss","../../../node_modules/bootstrap/scss/utilities/_api.scss","../../_sass/_styles.scss","../../_sass/_hexdump.scss","../../_sass/_faq.scss","../../_sass/_toc.scss","../../_sass/_roadmap.scss","../../_sass/_learn.scss","../../_sass/dark_mode.scss"],"names":[],"mappings":"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,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBK/OR,eCvDE,eACA,gBD2DF,aC5DE,eACA,gBD8DF,kBACE,qBAEA,mCACE,aFsoB0B,ME5nB9B,YL8MM,UALI,QKvMR,yBAIF,YACE,cFiUO,KH1HH,UALI,QK/LR,wBACE,gBAIJ,mBACE,iBACA,cFuTO,KH1HH,UALI,QKtLR,MFtFS,QEwFT,2BACE,aEhGJ,WCIE,eAGA,YDDF,eACE,QJ6jDkC,OI5jDlC,iBJ6jDkC,kBI5jDlC,2DHGE,sCKLE,WARW,wBDKf,eAGA,YDcF,QAEE,qBAGF,YACE,oBACA,cAGF,gBPyPM,UALI,QOlPR,MJgjDkC,0BOllDlC,mGCHA,sBACA,iBACA,WACA,0CACA,yCACA,kBACA,iBCsDE,yBF5CE,yBACE,UPkee,OSvbnB,yBF5CE,uCACE,UPkee,OSvbnB,yBF5CE,qDACE,UPkee,OSvbnB,0BF5CE,mEACE,UPkee,QSvbnB,0BF5CE,kFACE,UPkee,QUlfvB,MAEI,2JAKF,KCNA,sBACA,iBACA,aACA,eAEA,uCACA,2CACA,0CDEE,OCOF,cACA,WACA,eACA,0CACA,yCACA,8BA+CI,KACE,YAGF,iBApCJ,cACA,WAcA,cACE,cACA,WAFF,cACE,cACA,UAFF,cACE,cACA,mBAFF,cACE,cACA,UAFF,cACE,cACA,UAFF,cACE,cACA,mBA+BE,UAhDJ,cACA,WAqDQ,OAhEN,cACA,kBA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,UA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,UA+DM,OAhE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AEE,sBAPF,mBAEE,oBAGF,mBAEE,oBAPF,mBAEE,sBAGF,mBAEE,sBAPF,mBAEE,oBAGF,mBAEE,qBCrHV,OAEE,+BACA,4BACA,gCACA,6BAEA,2CACA,iCACA,gDACA,kCACA,mDACA,gEACA,kDACA,8DACA,iDACA,+DAEA,WACA,cZkYO,KYjYP,eZusB4B,IYtsB5B,0CAOA,yBACE,oBAEA,qFACA,oCACA,oBZ+sB0B,uBY9sB1B,2GAGF,aACE,uBAGF,aACE,sBAIJ,qBACE,6DAOF,aACE,iBAUA,4BACE,sBAeF,gCACE,sCAGA,kCACE,sCAOJ,oCACE,sBAGF,qCACE,mBAUF,2CACE,qDACA,+CAMF,yDACE,qDACA,+CAQJ,cACE,qDACA,+CAQA,8BACE,oDACA,8CC5IF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,iBAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,YAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,cAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,aAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,YAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CDiJA,kBACE,gBACA,iCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,6BGyFA,qBACE,gBACA,kCH3FF,6BGyFA,sBACE,gBACA,kCEnKN,YACE,cdu2BsC,Mc91BxC,gBACE,oDACA,uDACA,gBjB8QI,UALI,QiBrQR,Yd+lB4B,Ic3lB9B,mBACE,kDACA,qDjBoQI,UALI,QiB3PV,mBACE,mDACA,sDjB8PI,UALI,SkBtRV,WACE,Wf+1BsC,OHrkBlC,UALI,QkBjRR,Mf+1BsC,0BgBp2BxC,cACE,cACA,WACA,uBnBwRI,UALI,KmBhRR,YhBkmB4B,IgBjmB5B,YhBymB4B,IgBxmB5B,MhB43BsC,qBgB33BtC,gBACA,iBhBq3BsC,kBgBp3BtC,4BACA,2DfGE,sCKLE,WARW,2BWUX,WDMJ,0DCFI,uCDhBN,cCiBQ,iBDGN,yBACE,gBAEA,wDACE,eAKJ,oBACE,MhBs2BoC,qBgBr2BpC,iBhBg2BoC,kBgB/1BpC,ahB82BoC,QgB72BpC,UVvBE,WARW,0DUwCf,2CAME,eAMA,aAKA,SAKF,qCACE,cACA,UAIF,2BACE,MhB40BoC,0BgB10BpC,UAQF,uBAEE,iBhB8yBoC,uBgB3yBpC,UAIF,oCACE,uBACA,0BACA,kBhBorB0B,OgBnrB1B,MhBsyBoC,qBkBp4BtC,iBlBqiCgC,sBgBr8B9B,oBACA,qBACA,mBACA,eACA,wBhBgsB0B,uBgB/rB1B,gBCzFE,WD0FF,mHCtFE,uCD0EJ,oCCzEM,iBDwFN,yEACE,iBhB47B8B,uBgBn7BlC,wBACE,cACA,WACA,kBACA,gBACA,YhBwf4B,IgBvf5B,MhB2xBsC,qBgB1xBtC,+BACA,2BACA,sCAEA,8BACE,UAGF,gFAEE,gBACA,eAWJ,iBACE,WhB4wBsC,wDgB3wBtC,qBnByII,UALI,SIvQN,yCeuIF,uCACE,qBACA,wBACA,kBhBooB0B,MgBhoB9B,iBACE,WhBgwBsC,sDgB/vBtC,mBnB4HI,UALI,QIvQN,yCeoJF,uCACE,mBACA,qBACA,kBhB2nB0B,KgBnnB5B,sBACE,WhB6uBoC,yDgB1uBtC,yBACE,WhB0uBoC,wDgBvuBtC,yBACE,WhBuuBoC,sDgBluBxC,oBACE,MhBquBsC,KgBpuBtC,OhB8tBsC,yDgB7tBtC,QhBilB4B,QgB/kB5B,mDACE,eAGF,uCACE,oBfvLA,sCe2LF,0CACE,oBf5LA,sCegMF,2ChB8sBsC,wDgB7sBtC,2ChB8sBsC,sDmB75BxC,aACE,yPAEA,cACA,WACA,uCtBqRI,UALI,KsB7QR,YnB+lB4B,ImB9lB5B,YnBsmB4B,ImBrmB5B,MnBy3BsC,qBmBx3BtC,gBACA,iBnBk3BsC,kBmBj3BtC,kFACA,4BACA,oBnB+9BkC,oBmB99BlC,gBnB+9BkC,UmB99BlC,2DlBHE,sCKLE,WARW,2BWUX,WESJ,0DFLI,uCEfN,aFgBQ,iBEMN,mBACE,anBs3BoC,QmBr3BpC,UbfE,WARW,0DagCf,0DAEE,cnB6uB0B,OmB5uB1B,sBAGF,sBAEE,iBnBu1BoC,uBmBl1BtC,4BACE,oBACA,uCAIJ,gBACE,YnBsuB4B,OmBruB5B,enBquB4B,OmBpuB5B,anBquB4B,MHlgBxB,UALI,SIvQN,yCkB8CJ,gBACE,YnBkuB4B,MmBjuB5B,enBiuB4B,MmBhuB5B,anBiuB4B,KHtgBxB,UALI,QIvQN,yCkBwDA,kCACE,yPCxEN,YACE,cACA,WpBq6BwC,OoBp6BxC,apBq6BwC,MoBp6BxC,cpBq6BwC,QoBn6BxC,8BACE,WACA,mBAIJ,oBACE,cpB25BwC,MoB15BxC,eACA,iBAEA,sCACE,YACA,oBACA,cAIJ,kBACE,sCAEA,cACA,MpB04BwC,IoBz4BxC,OpBy4BwC,IoBx4BxC,iBACA,mBACA,gBACA,yCACA,+CACA,4BACA,2BACA,wBACA,OpB24BwC,oDoB14BxC,yBAGA,iCnB3BE,oBmB+BF,8BAEE,cpBm4BsC,IoBh4BxC,yBACE,OpB03BsC,gBoBv3BxC,wBACE,apBs1BoC,QoBr1BpC,UACA,WpB8foB,+BoB3ftB,0BACE,iBzBlEY,QyBmEZ,azBnEY,QyBqEZ,yCAII,wPAIJ,sCAII,gKAKN,+CACE,iBzBvFY,QyBwFZ,azBxFY,QyB6FV,kPAIJ,2BACE,oBACA,YACA,QpBk2BuC,GoB31BvC,2FACE,eACA,QpBy1BqC,GoB30B3C,aACE,apBo1BgC,MoBl1BhC,+BACE,4KAEA,MpB80B8B,IoB70B9B,mBACA,0CACA,gCnBjHA,kBgBHE,WGsHF,qCHlHE,uCG0GJ,+BHzGM,iBGmHJ,qCACE,8JAGF,uCACE,oBpB60B4B,aoBx0B1B,2JAKN,gCACE,cpBwzB8B,MoBvzB9B,eAEA,kDACE,oBACA,cAKN,mBACE,qBACA,apBsyBgC,KoBnyBlC,WACE,kBACA,sBACA,oBAIE,mDACE,oBACA,YACA,QpBspBwB,IoB/oB1B,8EACE,kLCnLN,YACE,WACA,cACA,UACA,gBACA,+BAEA,kBACE,UAIA,mDrB8gCuC,8CqB7gCvC,+CrB6gCuC,8CqB1gCzC,8BACE,SAGF,kCACE,MrB+/BuC,KqB9/BvC,OrB8/BuC,KqB7/BvC,oBACA,gBH1BF,iBvBJc,Q0BgCZ,OrB6/BuC,EC1gCvC,mBKLE,WARW,8BWUX,WImBF,4FJfE,uCIMJ,kCJLM,iBIgBJ,yCHjCF,iBlB8hCyC,QqBx/BzC,2CACE,MrBw+B8B,KqBv+B9B,OrBw+B8B,MqBv+B9B,oBACA,OrBu+B8B,QqBt+B9B,iBrBu+B8B,uBqBt+B9B,2BpB7BA,mBKLE,WARW,2Be+Cf,8BACE,MrBo+BuC,KqBn+BvC,OrBm+BuC,KqBl+BvC,gBHpDF,iBvBJc,Q0B0DZ,OrBm+BuC,EC1gCvC,mBKLE,WARW,8BWUX,WI6CF,4FJzCE,uCIiCJ,8BJhCM,iBI0CJ,qCH3DF,iBlB8hCyC,QqB99BzC,8BACE,MrB88B8B,KqB78B9B,OrB88B8B,MqB78B9B,oBACA,OrB68B8B,QqB58B9B,iBrB68B8B,uBqB58B9B,2BpBvDA,mBKLE,WARW,2BeyEf,qBACE,oBAEA,2CACE,iBrBg9BqC,0BqB78BvC,uCACE,iBrB48BqC,0BsBniC3C,eACE,kBAEA,gGAGE,OtBwiCoC,gDsBviCpC,WtBuiCoC,gDsBtiCpC,YtBuiCoC,KsBpiCtC,qBACE,kBACA,MACA,OACA,UACA,YACA,oBACA,gBACA,iBACA,uBACA,mBACA,oBACA,kDACA,qBLRE,WKSF,kDLLE,uCKTJ,qBLUM,iBKON,oEAEE,oBAEA,8FACE,oBAGF,oMAEE,YtB4gCkC,SsB3gClC,etB4gCkC,QsBzgCpC,sGACE,YtBugCkC,SsBtgClC,etBugCkC,QsBngCtC,4BACE,YtBigCoC,SsBhgCpC,etBigCo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ACA,6DACA,8BACA,8BACA,wCDyFA,aCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,UCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,aCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,YCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,WCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,yCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,UCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,sCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDmHA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,qCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,uBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,sCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,kBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,oBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,mBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,yCACA,4BACA,4BACA,sCACA,6DACA,iCACA,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UACA,sDAMJ,qBACE,qBACA,YACA,aACA,sBACA,kDACA,4BACA,2BACA,qBAGF,mBACE,yCACA,gBvB1HE,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,0BuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,0BuBsIA,mBAEI,iBACA,2BAEA,+BACE,mBAEA,8CACE,kBAGF,yCACE,kDACA,iDAIJ,sCACE,iBAGF,oCACE,wBACA,gBAGF,mCACE,aAGF,8BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,gDACE,aAGF,8CACE,aACA,YACA,UACA,oBAtDR,eAEI,iBACA,2BAEA,2BACE,mBAEA,0CACE,kBAGF,qCACE,kDACA,iDAIJ,kCACE,iBAGF,gCACE,wBACA,gBAGF,+BACE,aAGF,0BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,4CACE,aAGF,0CACE,aACA,YACA,UACA,mBAiBZ,yCAGE,6CACA,mDACA,sDACA,+BACA,8BACA,oCACA,2DACA,+QAME,0CACE,+QCxRN,OAEE,6BACA,6BpCuRI,qBALI,OoChRR,4BACA,uBACA,kDAGA,qBACA,4DpC+QI,UALI,0BoCxQR,wCACA,cACA,4BACA,kBACA,mBACA,wBhCJE,4CgCSF,aACE,aAKJ,YACE,kBACA,SChCF,OAEE,2BACA,2BACA,2BACA,+BACA,0BACA,qCACA,6EACA,kDACA,+BAGA,kBACA,4DACA,4CACA,4BACA,oCACA,8BjCHE,4CiCQJ,eAEE,cAIF,YACE,YlC6kB4B,IkC5kB5B,iCAQF,mBACE,clCo+C8B,KkCj+C9B,8BACE,kBACA,MACA,QACA,UACA,qBAQF,eACE,kDACA,2CACA,yDACA,uDAJF,iBACE,oDACA,6CACA,2DACA,yDAJF,eACE,kDACA,2CACA,yDACA,uDAJF,YACE,+CACA,wCACA,sDACA,oDAJF,eACE,kDACA,2CACA,yDACA,uDAJF,cACE,iDACA,0CACA,wDACA,sDAJF,aACE,gDACA,yCACA,uDACA,qDAJF,YACE,+CACA,wCACA,sDACA,oDC3DJ,WAEE,2BACA,qVACA,4BACA,mCACA,iEACA,gCACA,sCACA,wEAGA,uBACA,MnCmpD2B,ImClpD3B,OnCkpD2B,ImCjpD3B,oBACA,gCACA,0EACA,SlCJE,sBkCMF,oCAGA,iBACE,gCACA,qBACA,0CAGF,iBACE,UACA,4CACA,0CAGF,wCAEE,oBACA,iBACA,6CAQJ,iBAHE,wCASE,gCATF,wCC/CA,iBACE,cACA,WACA,WCHF,iBACE,sBACA,iFAFF,mBACE,sBACA,mFAFF,iBACE,sBACA,iFAFF,cACE,sBACA,8EAFF,iBACE,sBACA,iFAFF,gBACE,sBACA,gFAFF,eACE,sBACA,+EAFF,cACE,sBACA,8ECFF,cACE,wEACA,kGAGE,wCAGE,4DACA,sFATN,gBACE,0EACA,oGAGE,4CAGE,6DACA,uFATN,cACE,wEACA,kGAGE,wCAGE,8DACA,wFATN,WACE,qEACA,+FAGE,kCAGE,+DACA,yFATN,cACE,wEACA,kGAGE,wCAGE,+DACA,yFATN,aACE,uEACA,iGAGE,sCAGE,8DACA,wFATN,YACE,sEACA,gGAGE,oCAGE,gEACA,0FATN,WACE,qEACA,+FAGE,kCAGE,6DACA,uFAOR,oBACE,+EACA,yGAGE,oDAEE,kFACA,4GC1BN,kBACE,UAEA,kJCHF,WACE,oBACA,IxC6c4B,QwC5c5B,mBACA,kFACA,sBxC2c4B,MwC1c5B,2BAEA,eACE,cACA,MxCuc0B,IwCtc1B,OxCsc0B,IwCrc1B,kBvBIE,WuBHF,0BvBOE,uCuBZJ,evBaM,iBuBDJ,8DACE,mECnBN,OACE,kBACA,WAEA,eACE,cACA,mCACA,WAGF,SACE,kBACA,MACA,OACA,WACA,YAKF,WACE,wBADF,WACE,uBADF,YACE,0BADF,YACE,kCCrBJ,WACE,eACA,MACA,QACA,OACA,Q1CumCkC,K0CpmCpC,cACE,eACA,QACA,SACA,OACA,Q1C+lCkC,K0CvlChC,YACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,eACE,gBACA,SACA,Q1C6kC8B,KS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,0BiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,0BiCxCA,gBACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,mBACE,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aAGF,UACE,iBAEA,gDAEE,wBACA,qBAKF,sBACE,mBAKF,sBACE,oBACA,WAGF,oBACE,iBACA,iBAKF,cACE,iBAIJ,UACE,gBC3VF,SACE,sBACA,eACA,oBAGF,iBACE,+BACA,WAEF,gBACE,c1DRF,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD2D7DA,iBACE,gBACA,iBACA,0CAGF,OACE,qBAGF,YACE,iBAEA,iBACE,gBACA,oBAIJ,gBACE,iBACA,oBAGF,gBACE,iB3DzBJ,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD4D5DA,iBAEE,wBAGF,kBACE,qBACA,gBACA,+BAGF,gDAEE,iCAGF,iBACE,uBACA,mBACA,oBAGF,uEAGE,iCC1BJ,UACE,kBAGA,iBACE,WACA,kBACA,UACA,iBAXS,QAYT,MACA,SACA,SACA,iBAKJ,eACE,kBACA,UAEA,qBACE,kCACA,kBACA,sBACA,cAEA,uBACE,cAGF,iCACE,yBAIJ,2BACE,oBACA,iBACA,gBAIF,sBACE,iBACA,eACA,kBACA,kBACA,WACA,YACA,YACA,SACA,kBACA,UAGF,gCACE,YACA,sBACA,yBAGF,8BACE,aACA,sBACA,yBAGF,+BACE,YACA,sBACA,yBAIF,oBACE,0BACA,OAIF,qBACE,0BACA,SAIF,4BACE,WACA,kBACA,YACA,WACA,sBACA,sBACA,wCACA,SACA,UACA,WACA,wCACA,sCAIF,6BACE,WACA,kBACA,YACA,WACA,iCACA,sBACA,wCACA,SACA,UACA,UACA,uCACA,yCAIF,4BACE,WAKJ,qCAGE,iBACE,UAIF,eACE,WACA,6BACA,8BAGA,uBACE,qBAIF,uDAEE,oBAGF,4BACE,kBACA,gBACA,uCACA,yCAGF,6BACE,WAIF,qBACE,S7DlKN,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD8D7DA,qBACE,0CCHF,gCACE,mBAKA,+CACE,yBAIJ,+BACE","sourcesContent":["$primary-color: #021a34;\n$secondary-color: #075f94;\n\n:root {\n // -- Light\n --primary-color-light: #021a34;\n --secondary-color-light: #075f94;\n\n --bg-color-light: #edeef0;\n --bg-color-reverse-light: #021a34;\n --bg-color-tinted-light: #b0b2b4;\n\n --text-color-light: #4c4c4c;\n --text-color-reverse-light: #edeef0;\n --text-muted-color-light: #4c4c4c;\n\n --link-color-light: #4c4c4c;\n --link-hover-color-light: #6c6c6c;\n\n // -- Dark\n --primary-color-dark: #edeef0;\n --secondary-color-dark: #075f94;\n\n --bg-color-dark: #14171c;\n --bg-color-reverse-dark: #edeef0;\n --bg-color-tinted-dark: #627191;\n\n --text-color-dark: #edeef0;\n --text-color-reverse-dark: #14171c;\n --text-muted-color-dark: #edeef0;\n\n --link-color-dark: #edeef0;\n --link-hover-color-dark: #ffffff;\n}\n\n[data-bs-theme=\"light\"] {\n --primary-color: var(--primary-color-light);\n --secondary-color: var(--secondary-color-light);\n --bg-color-tinted: var(--bg-color-tinted-light);\n\n --bg-color: var(--bg-color-light);\n --bg-color-reverse: var(--bg-color-reverse-light);\n --text-color: var(--text-color-light);\n\n --text-color-reverse: var(--text-color-reverse-light);\n --text-muted-color: var(--text-muted-color-light);\n\n --link-color: var(--link-color-light);\n --link-hover-color: var(--link-hover-color-light);\n}\n\n[data-bs-theme=\"dark\"] {\n --primary-color: var(--primary-color-dark);\n --secondary-color: var(--secondary-color-dark);\n\n --bg-color: var(--bg-color-dark);\n --bg-color-reverse: var(--bg-color-reverse-dark);\n --bg-color-tinted: var(--bg-color-tinted-dark);\n\n --text-color: var(--text-color-dark);\n --text-color-reverse: var(--text-color-reverse-dark);\n --text-muted-color: var(--text-muted-color-dark);\n\n --link-color: var(--link-color-dark);\n --link-hover-color: var(--link-hover-color-dark);\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-` + + +

+ +
+
+
+
+

所有文章

+ + + feed + +
+ +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + + +
+ +
+
+
+
+ + + + + diff --git a/zh/browserconfig.xml b/zh/browserconfig.xml new file mode 100644 index 000000000..b3930d0f0 --- /dev/null +++ b/zh/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/zh/community/index.html b/zh/community/index.html new file mode 100644 index 000000000..3aac0d2d9 --- /dev/null +++ b/zh/community/index.html @@ -0,0 +1,491 @@ + + + + + + + + + + + + + 社区 | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

加入帕图斯社区

+ +

加入帕图斯社区,您将成为一个全球创新者、思想家和实践者网络的一部分, 所有这些人都有一个共同的愿景,即利用区块链技术构建更美好的未来。无论您是开发人员、企业家、投资者, 还是一个区块链爱好者,在这里,都有一个属于您的位置。
所以,让我们携手并肩,创造改变吧!

+ + + +

要探索由社区成员管理的社区,请跟随下面的链接.

+ + + +
+
+
+
+ + + + + diff --git a/zh/contributing/index.html b/zh/contributing/index.html new file mode 100644 index 000000000..22960db36 --- /dev/null +++ b/zh/contributing/index.html @@ -0,0 +1,478 @@ + + + + + + + + + + + + + 贡献 | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

贡献

+ + +

作为一个开源平台,Pactus区块链从其社区中获得力量。

+ +

无论您是开发人员、设计师还是爱好者,您的贡献都能产生深远的影响。

+ +

支持Pactus项目有几种方式:

+ +

运行节点

+ +

贡献给Pactus网络最有效的方式之一是运行一个节点。

+ +

“node”是一个软件程序,它下载Pactus区块链的副本,并确保网络持续安全和去中心化。

+ +

这些指南可以帮助您运行和配置您的节点:

+ + + +

成为一名验证者

+ +

通过验证交易并将其添加到区块链,验证者在Pactus区块链中发挥着重要作用。

+ +

成为验证者,您可以为为网络的安全性和去中心化做出贡献而获得 奖励

+ +

要成为验证者,您需要抵押一定数量的Pactus币。 +以下指南可以帮助您发送一个质押交易并抵押一些币:

+ + + +

开发

+ +

Pactus是一个开源项目,欢迎并鼓励开发者做出贡献。 +通过为项目做出贡献,您可以帮助改进Pactus平台,并创建新功能,使整个社区受益。

+ +

你可以查看我们的 贡献 页面,了解如何参与并为项目做出贡献的更多信息。

+ +

翻译

+ +

另一种支持Pactus项目的方式是将该网站翻译成其他语言,并改进其内容。

+ +

宣传推广

+ +

了解Pactus的人越多,合作和增长的机会就越多。 +在社交媒体上分享我们的项目,参加Pactus活动,或者简单地告诉您的朋友和同事关于我们。

+ +
+ +

一起来,让我们为区块链技术构建一个更美好的未来。

+ + +
+
+
+
+ + + + + diff --git a/zh/download/index.html b/zh/download/index.html new file mode 100644 index 000000000..701872e57 --- /dev/null +++ b/zh/download/index.html @@ -0,0 +1,596 @@ + + + + + + + + + + + + + 下载 | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

资源下载

+ +

在此页面上,您可以找到如何下载和获取帕图斯软件的最新版本。

+ +
+ +

🏗️ 从源代码编译

+ +

帕图斯项目是作为开源软件分发的,因此安装的首选方法是从 GitHub存储库克隆源代码并编译源代码。

+ +

有关编译帕图斯的说明在安装页面中提供。

+ +
+ +

⬇️ 下载稳定版

+ +

您还可以下载最新的稳定版本的帕图斯。 这些版本会在发布GitHub存储库中的新版本时自动更新。

+ +

帕图斯图形用户界面(GUI)

+ +

您可以以图形用户界面(GUI)模式运行帕图斯,适用于初学者和高级用户。

+ +

帕图斯图形用户界面(GUI)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
File nameKindOSArch
pactus-gui_1.3.0_darwin_amd64.tar.gzArchive macOS64-bit
pactus-gui_1.3.0_darwin_amd64.dmgDMG macOS64-bit
pactus-gui_1.3.0_darwin_arm64.tar.gzArchive macOSARM64
pactus-gui_1.3.0_darwin_arm64.dmgDMG macOSARM64
pactus-gui_1.3.0_linux_amd64.tar.gzArchive Linux64-bit
pactus-gui_1.3.0_linux_amd64.AppImageAppImage Linux64-bit
pactus-gui_1.3.0_windows_amd64.zipArchive Windows64-bit
pactus-gui_1.3.0_windows_amd64_installer.exeInstaller Windows64-bit
+ +
+不受信任的应用程序

请注意,预编译的二进制文件不包含任何 代码签名证书。 在Windows和macOS中,下载的二进制文件可能会被检测为不受信任的应用程序。 + +
+ +

一旦您下载了帕图斯GUI,您可以按照本教程设置和运行节点: + 如何以图形模式运行帕图斯?

+ +
+ +

帕图斯命令行界面(CLI)

+ +

高级用户可以以命令行界面(CLI)模式运行帕图斯。

+ +

帕图斯命令行界面(CLI)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
File nameOSArch
pactus-cli_1.3.0_android_arm64.tar.gz AndroidARM64
pactus-cli_1.3.0_darwin_amd64.tar.gz macOS64-bit
pactus-cli_1.3.0_darwin_arm64.tar.gz macOSARM64
pactus-cli_1.3.0_freebsd_amd64.tar.gz FreeBSD64-bit
pactus-cli_1.3.0_freebsd_arm.tar.gz FreeBSDARM
pactus-cli_1.3.0_linux_amd64.tar.gz Linux64-bit
pactus-cli_1.3.0_linux_arm64.tar.gz LinuxARM64
pactus-cli_1.3.0_windows_386.zip Windows32-bit
pactus-cli_1.3.0_windows_amd64.zip Windows64-bit
+ +

一旦您下载了帕图斯CLI,您可以按照本教程设置和运行节点: + 如何以命令行模式运行帕图斯?

+ +

下载脚本

+ +

对于 类Unix系统 (例如, Linux, macOS, 或 MSYS2 on Windows), 使用的是同一个下载脚本. 该脚本可以下载存档文件,验证它,并为您解压缩它. 要使用它,只需在终端中运行以下命令:

+ +
curl --proto '=https' --tlsv1.2 -sSL https://github.com/pactus-project/pactus/releases/download/v1.3.0/pactus_downloader.sh | sh
+
+ +
+ +

🐳 Docker容器

+ +

高级用户可以从Docker Hub获取帕图斯docker镜像。

+ +

您可以按照本教程使用Docker设置和运行节点: + 如何使用Docker运行帕图斯?

+ +
+
+
+
+ + + + + diff --git a/zh/favicon-128x128.png b/zh/favicon-128x128.png new file mode 100644 index 000000000..56c2f6cb2 Binary files /dev/null and b/zh/favicon-128x128.png differ diff --git a/zh/favicon-16x16.png b/zh/favicon-16x16.png new file mode 100644 index 000000000..4babb6356 Binary files /dev/null and b/zh/favicon-16x16.png differ diff --git a/zh/favicon-32x32.png b/zh/favicon-32x32.png new file mode 100644 index 000000000..e22d5d721 Binary files /dev/null and b/zh/favicon-32x32.png differ diff --git a/zh/favicon-64x64.png b/zh/favicon-64x64.png new file mode 100644 index 000000000..e8d111c2e Binary files /dev/null and b/zh/favicon-64x64.png differ diff --git a/zh/favicon.ico b/zh/favicon.ico new file mode 100644 index 000000000..64080c0ee Binary files /dev/null and b/zh/favicon.ico differ diff --git a/zh/feed.xml b/zh/feed.xml new file mode 100644 index 000000000..1e21d7452 --- /dev/null +++ b/zh/feed.xml @@ -0,0 +1,1409 @@ +Jekyll2024-07-02T08:05:22+00:00https://pactus.org/feed.xmlPactus blockchainPactus 1.3.0 (Warsaw) Released2024-06-27T00:00:00+00:002024-06-27T00:00:00+00:00https://pactus.org/2024/06/27/release-1-3-0Overview
+ +

Pactus Blockchain Version 1.3.0 (Warsaw) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.3.0 (Warsaw)

+ +

Highlights

+ +

This version fixes an issue that caused some nodes to get stuck for one minutes and +not receive any new messages during that time.

+ +

Breaking Change: gRPC APIs now convert all binary values to hexadecimal strings.

+ +
+ Attention Exchanges and Third-Party Pactus Blockchain Users: +
+
+ After upgrading to this version, be aware that binary data, such as hashes and signatures, + are now formatted as hexadecimal strings. You must update your code to accommodate this change. +
+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • grpc: get txpool content API (#1364)
  • +
  • network: permanent peer store (#1354)
  • +
+ +

Fix

+ +
    +
  • grpc: change bytes type to hex string (#1371)
  • +
  • http: add basic auth middleware for http server (#1372)
  • +
  • network: use goroutines for sending streams (#1365)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>Pactus 1.2.0 (Sydney) Released2024-06-20T00:00:00+00:002024-06-20T00:00:00+00:00https://pactus.org/2024/06/20/release-1-2-0Overview + +

Pactus Blockchain Version 1.2.0 (Sydney) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.2.0 (Sydney)

+ +

Highlights

+ +

This version includes some improvements and new features, such as:

+ +
    +
  • Clock offset calculation: Adding clock offset check to +alert the user if their machine’s time is not synced with the network. +See PIP-18: Clock Offset Calculation.
  • +
  • Minimum fee: The minimum fee is configurable in this version, with the default set to 0.01. +Each validator can decide the minimum fee of transactions they want to include in the block +by changing the min_fee value inside the config file.
  • +
  • ip blocker: A new option allows nodes to block certain IPs and disconnect from them.
  • +
  • rate limit: Nodes can set rate limits for incoming messages, including transactions.
  • +
  • wallet manager: The wallet manager allows users to create and manage wallets using gRPC endpoints.
  • +
+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • config: make minimum fee configurable (#1349)
  • +
  • apply rate limit for the network topics (#1332)
  • +
  • add ipblocker package (#1323)
  • +
  • consensus: fast consensus path implementation (#1253)
  • +
  • version: add alias to node version (#1281)
  • +
  • ntp: add ntp util (#1274)
  • +
  • gRPC: add connection info to node info (#1273)
  • +
  • gRPC: add only_connected parameter to getNetworkInfo API (#1264)
  • +
  • grpc: refactor CreateWallet and add RestoreWallet API endpoint (#1256)
  • +
  • add wallet service (#1241)
  • +
  • ban attacker validators (#1235)
  • +
  • txpool: prevent spamming transactions by defining a minimum value (#1233)
  • +
  • reject direct message from non-supporting agents (#1225)
  • +
+ +

Fix

+ +
    +
  • wallet: add public key on get new address (#1350)
  • +
  • sync: add IsBannedAddress check in processing connect event (#1347)
  • +
  • sync: update latest supporting version (#1336)
  • +
  • state: improve node startup by optimizing availability score calculation (#1338)
  • +
  • HTTP: add clock offset and connection info to node-info API (#1334)
  • +
  • grpc: add stacktrace to locate panic (#1333)
  • +
  • consensus: implement PIP-26 (#1331)
  • +
  • grpc: improve grpc server and client (#1330)
  • +
  • util: add more ntp pool (#1328)
  • +
  • jsonrpc: update JSON-RPC Gateway to support headers and improve client registry (#1327)
  • +
  • consensus: improve consensus algorithm (#1329)
  • +
  • txpool: set fix fee of 0.1 PAC for transactions (#1320)
  • +
  • network: add block and transaction topics (#1319)
  • +
  • gRPC: prevent concurrent map iteration and map write (#1279)
  • +
  • api: add swagger schemes (#1270)
  • +
  • network: set infinite limit for resource manager (#1261)
  • +
  • sync: introduce session manager (#1257)
  • +
  • HTTP: using amount type for fee in transaction details (#1255)
  • +
  • network: disconnect from peers that has no protocol (#1243)
  • +
  • wallet: saving wallet file after generating new address in gRPC (#1236)
  • +
  • prevent zero stake for bond transactions (#1227)
  • +
  • set bounding interval for first boudning tx only (#1224)
  • +
+ +

Refactor

+ +
    +
  • wallet: set server address on loading wallet (#1348)
  • +
  • removed deprecated LockWallet and UnLockWallet from WalletService (#1343)
  • +
  • crypto: decode data to point on verification (#1339)
  • +
  • network: define connection info in network proto (#1297)
  • +
  • sync: define peer package (#1271)
  • +
  • network: refactor peer manager and redefine the min cons (#1259)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.7 (Santiago) Released2024-06-02T00:00:00+00:002024-06-02T00:00:00+00:00https://pactus.org/2024/06/02/release-1-1-7Overview + +

Pactus Blockchain Version 1.1.7 (Santiago) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

Here are the key improvements in this version:

+ +
    +
  • +

    Resolves critical issue in consensus: +This version addresses a critical issue in consensus that prevents broadcasting expired proposals across the network.

    +
  • +
  • +

    Improved network security: +The version defines a list of blacklisted IPs and disconnects from them, enhancing network security.

    +
  • +
  • +

    Node compatibility: +This version only connects to nodes with version 1.1.6 or above, ensuring compatibility with the latest software.

    +
  • +
+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • network: add firewall black list ips to banning when connecting to peer (#1298)
  • +
+ +

Fix

+ +
    +
  • sync: load black listed addresses from the config (#1301)
  • +
  • consensus: only proposer responds to the query proposal (#1300)
  • +
  • network: set latest support version to 1.1.6 (#1299)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.8 (Budapest) Released2024-06-02T00:00:00+00:002024-06-02T00:00:00+00:00https://pactus.org/2024/06/02/release-1-1-8Overview + +

Pactus Blockchain Version 1.1.8 (Budapest) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.1.8 (Budapest)

+ +

Highlights

+ +

This version aims to reduce the consensus message once there is a delay on block creation. +It also defines a fixed fee of 0.1 PAC for transactions. +This fixed fee will be replaced by a dynamic fee in future releases, +which will provide more flexibility and efficiency.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • firewall: define rate limit for network topics (#1308)
  • +
+ +

Fix

+ +
    +
  • set fix fee 0.1 PAC for transactions (#1315)
  • +
  • consensus: add round to query proposal message (#1314)
  • +
  • firewall: block peer base on blacklisted CIDR (#1309)
  • +
  • consensus: reduce ChangeProposerTimeout to 6 seconds (#1311)
  • +
  • sync: define rate limit for query vote and proposal (#1310)
  • +
  • decrease to 100 maximum transaction per block (#1306)
  • +
  • consume message first then ignore on ratelimit (#1304)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.6 (Ottawa) Released2024-05-31T00:00:00+00:002024-05-31T00:00:00+00:00https://pactus.org/2024/05/31/release-1-1-6Overview + +

Pactus Blockchain Version 1.1.6 (Ottawa) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

This version updates the consensus mechanism to move to new rounds once +a proper and justified “Decided” vote seen by a non-faulty validator. +This helps ensure that the consensus mechanism stays in sync with the network when the validator restarts.

+ +

In this version, the minimum availability score is set to 0.6666. +This change will help validators receive rewards even in faulty network conditions, +ensuring that they can continue to participate in the consensus mechanism.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • consensus: move to new round on decided vote (#1293)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.5 (Cape Town) Released2024-05-30T00:00:00+00:002024-05-30T00:00:00+00:00https://pactus.org/2024/05/30/release-1-1-5Overview + +

Pactus Blockchain Version 1.1.5 (Cape Town) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Highlights

+ +

Rate limit

+ +

This version applies a rate limit to the messages in the general topics including blocks and transactions. +This will help nodes to manage the network traffic in times of network congestion or spam attacks.

+ +

Dynamic fee

+ +

To prevent attackers from sending spam transactions, a dynamic fee model is introduced in this patch. +Each node can define a minimum fee that is defaulted to 0.000001 PAC. +However, if the transaction pool becomes full, the transaction fee can increase up to 1 PAC.

+ +

To ensure network stability and security, +it is recommended that all validators upgrade to this version as soon as they can.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • add dynamic fee (#1290)
  • +
  • network: define config for rate limit threshold (#1284)
  • +
  • network: ratelimit gossip for prevent spamming (#1283)
  • +
+ +

Fix

+ +
    +
  • change CalculateFee to be backward compatible (#1291)
  • +
  • proposal basic checks deferred to consensus (#1288)
  • +
  • rejected spam tx for same from and to (#1287)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.4 (London) Released2024-05-07T00:00:00+00:002024-05-07T00:00:00+00:00https://pactus.org/2024/05/07/release-1-1-4Overview + +

Pactus Blockchain Version 1.1.4 (London) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

Pactus Version 1.1.4 (London)

+ +

Highlights

+ +

This version fixes some issues related to the syncing process and improves the connectivity of the nodes.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • network: set infinite limit for resource manager (#1261)
  • +
  • sync: introduce session manager (#1257)
  • +
  • HTTP: using amount type for fee in transaction details (#1255)
  • +
+ +

Refactor

+ +
    +
  • network: refactor peer manager and redefine the min cons (#1259)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.3 (Kuala Lumpur) Released2024-04-25T00:00:00+00:002024-04-25T00:00:00+00:00https://pactus.org/2024/04/25/release-1-1-3Overview + +

Pactus Blockchain Version 1.1.3 (Kuala Lumpur) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Kuala Lumpur, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.3 (Kuala Lumpur)

+ +

Highlights

+ +

This version prevents spamming transactions by defining a minimum value per transaction. +It is not part of the consensus parameters, +and each node can set its own threshold. +By default, it is set to 0.1 PAC.

+ +

The version also bans validators that were part of the recent spam attack on the network. +Their stake will be frozen at block 820,000.

+ +

Validators must update their nodes to this version as soon as possible.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • ban attacker validators (#1235)
  • +
  • txpool: prevent spamming transactions by defining a minimum value (#1233)
  • +
+ +

Fix

+ +
    +
  • wallet: saving wallet file after generating new address in gRPC (#1236)
  • +
  • network: disconnect from peers that has no protocol (#1243)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.1 (Jakarta) Released2024-04-18T00:00:00+00:002024-04-18T00:00:00+00:00https://pactus.org/2024/04/18/release-1-1-1Overview + +

Pactus Blockchain Version 1.1.1 (Jakarta) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Jakarta, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.1 (Jakarta)

+ +

Highlights

+ +

This update fixes the issue of zero-bonding +that identified after the release of 1.1.0 (Hanoi). +This fix will be applied at block height 740,000 to ensure a smooth upgrade.

+ +

Additionally, this version rejects connections from nodes version 1.0.2 and earlier.

+ +

Validators must update their nodes to this version as soon as possible.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • reject direct message from non-supporting agents (#1225)
  • +
+ +

Fix

+ +
    +
  • prevent zero stake for bond transactions (#1227)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.1.0 (Hanoi) Released2024-04-14T00:00:00+00:002024-04-14T00:00:00+00:00https://pactus.org/2024/04/14/release-1-1-0Overview + +

Pactus Blockchain Version 1.1.0 (Hanoi) +is now available for download. +This release includes the following applications:

+ +
    +
  • +

    Pactus GUI: +The graphical user interface (GUI) for the Pactus node that is suitable +for both beginners and experienced users.

    +
  • +
  • +

    Pactus Daemon: +The command-line interface (CLI) for the Pactus node that is suitable for experienced users.

    +
  • +
  • +

    Pactus Shell: +The command-line tool that allows users to interact with a Pactus node.

    +
  • +
  • +

    Pactus Wallet: +The wallet software that allows users to manage their wallet and send transactions +without the need to sync the entire blockchain.

    +
  • +
+ +

This release is named after the city of Hanoi, +and it was unanimously selected by the Pactus community.

+ +

Pactus Version 1.1.0 (Hanoi)

+ +

Highlights

+ +

This update brings some changes that are not compatible with the earlier version. +Here are the key points:

+ +
    +
  1. Fee calculations are now rounded, and fees can be accepted within a range of one NanaoPAC (see #1174).
  2. +
  3. Small bonds for existing validators are now accepted (see #1152).
  4. +
+ +

Validators must update their nodes to this version as soon as possible.

+ +

Other major changes in this version include:

+ +
    +
  • The addition of a JSON-RPC endpoint required by third parties like exchanges to connect to Pactus nodes.
  • +
  • The implementation of Pactus Shell tools, allowing users to query the node.
  • +
+ +

Additionally, this version improves the syncing process for new nodes, enhances the GUI, and addresses several issues.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version .

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gRPC: add get address history method (#1206)
  • +
  • grpc: Add GetNewAddress/GetTotalBalance endpoint to gateway (#1197)
  • +
  • GUI: adding total balance to wallet widget (#1194)
  • +
  • Add GetNewAddress gRPC API (#1193)
  • +
  • gRPC: add new API to get the total balance of wallet (#1190)
  • +
  • GUI: showing transaction hash after broadcasting transaction (#1187)
  • +
  • add jsonrpc gateway support (#1183)
  • +
  • config: one reward address in config for all validators (#1178)
  • +
  • GUI: memo field for transactions on GUI wallet (#1182)
  • +
  • implement basic auth for pactus shell (#1177)
  • +
  • grpc: add rust code gen for proto (#1151)
  • +
  • testnet: define permanent Testent genesis (#1173)
  • +
  • add basic auth authentication for securing grpc (#1162)
  • +
  • grpc: calculate fee for create-raw-transaction APIs (#1159)
  • +
  • grpc: add fixed-amount to calc-fee API (#1146)
  • +
  • wallet: adding all account address functions (#1128)
  • +
  • grpc: update swagger API to version 1.1 (#1106)
  • +
  • GUI: adding availability score in wallet (#1118)
  • +
  • logger: adding log target (#1122)
  • +
  • logger: adding file_only option (#1117)
  • +
  • gui: add connections and moniker fields to main windows (#1090)
  • +
  • implementation for PIP-22 (#1067)
  • +
  • generate documentation for proto files (#1064)
  • +
  • pactus-ctl (#946)
  • +
+ +

Fix

+ +
    +
  • gRPC: add basic auth option in header (#1217)
  • +
  • gRPC: not return block data on information verbosity (#1212)
  • +
  • wallet: fix wallet conn issue (#1211)
  • +
  • GUI: update total balance on wallet timeout (#1204)
  • +
  • accept small bond to existing validator (#1152)
  • +
  • GUI: make transaction hash selactable (#1196)
  • +
  • close connections with peers that have no supported protocol (#1181)
  • +
  • sync: check the start block request height (#1176)
  • +
  • config: load logger levels in Mainnet config (#1168)
  • +
  • gRPC: pactus swagger not found (#1163)
  • +
  • add error type for invalid configs (#1153)
  • +
  • save Mainnet config with inline comments (#1143)
  • +
  • network: set deadline for streams (#1149)
  • +
  • grpc: fix error 404 on grpc gateway (#1144)
  • +
  • wallet: checking args in history add (#1141)
  • +
  • gRPC: adding sign raw transaction API to gateway (#1116)
  • +
  • sync: fix concurrent map read-write crash (#1112)
  • +
  • network: remove disconnected peers from peerMgr (#1110)
  • +
  • network: set dial and accept limit in connection gater (#1089)
  • +
  • stderr logger in windows os (#1081)
  • +
  • sync: improve syncing process (#1087)
  • +
  • network: redefine resource limits (#1086)
  • +
+ +

Refactor

+ +
    +
  • sync: improve syncing process (#1207)
  • +
  • move fee calculation logic to execution package (#1195)
  • +
  • introduce Amount data type for converting PAC units (#1174)
  • +
  • using PAC instead of atomic units for external input/outputs (#1161)
  • +
  • change func() to cancel func type (#1142)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus Permanent Phoenix Testnet Launched2024-03-16T00:00:00+00:002024-03-16T00:00:00+00:00https://pactus.org/2024/03/16/testnet-phoenix-launchedThe public and permanent Phoenix Testnet +for the Pactus blockchain has been launched. +This Testnet serves as a valuable platform for developers to thoroughly examine their projects, +providing a safe playground to test and deploy their applications before transitioning to the Mainnet.

+ +

Pactus Public Phoenix Testnet

+ +

All parameters within the Testnet mirror those of the Mainnet, +ensuring a consistent environment for testing and development. +The genesis block for the Testnet is available +here.

+ +

Currently, there are four active nodes running the Testnet, accessible at the following addresses:

+ +
    +
  • testnet1.pactus.org
  • +
  • testnet2.pactus.org
  • +
  • testnet3.pactus.org
  • +
  • testnet4.pactus.org
  • +
+ +

The Testnet’s name, Phoenix, was chosen by the Pactus community from various suggestions. +It embodies the spirit of rebirth and renewal, highlighting the innovative and testing-focused nature of the network. +Developers can utilize the RoboPAC as a faucet to receive test coins and +thoroughly test their applications within this environment. +It’s important to note that the coins within this Testnet hold no monetary value and are only meant for testing purpose.

+ +

All addresses within the Phoenix network are prefixed with tpc1..., +distinguishing them from Mainnet addresses that start with pc1...’. +This clear differentiation streamlines development and ensures seamless integration when transitioning to +the Mainnet environment.

]]>
Pactus 1.0.2 (Istanbul) Released2024-02-18T00:00:00+00:002024-02-18T00:00:00+00:00https://pactus.org/2024/02/18/release-1-0-2Overview + +

Pactus Blockchain Version 1.0.2 (Istanbul) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

This release is named after the city of Istanbul and it +was unanimously selected by Pactus community.

+ +

Pactus Version 1.0.2 (Istanbul)

+ +

Highlights

+ +

This update fixes a major issue that decreases the number of inbound connections of the nodes over time. +We highly recommend all users to upgrade to the new version for better connectivity.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Fix

+ +
    +
  • sync: fix concurrent map read-write crash (#1112)
  • +
  • network: remove disconnected peers from peerMgr (#1110)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.0.1 (Beijing) Released2024-02-10T00:00:00+00:002024-02-10T00:00:00+00:00https://pactus.org/2024/02/10/release-1-0-1Overview + +

Pactus Blockchain Version 1.0.1 (Beijing) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

This release is named after the city of Beijing and it +was unanimously selected by Pactus community.

+ +

Pactus Version 1.0.1 (Beijing)

+ +

Highlights

+ +

This update fixes several issues identified after the release of +1.0.0 (Beijing). +Specifically, it fixes the missed log file on the Windows GUI application and improves the node connectivity.

+ +

Download

+ +

To start using Pactus blockchain, download the latest version from the download +page and join the Mainnet.

+ +

How to Upgrade

+ +

If you are running an older version, close it first. +Then uninstall the previous version and install the newer version. +If you are using the archived version, simply replace it with the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gui: add connections and moniker fields to main windows (#1090)
  • +
+ +

Fix

+ +
    +
  • network: set dial and accept limit in connection gater (#1089)
  • +
  • gui stderr logger in windows os (#1081)
  • +
  • sync: improve syncing process (#1087)
  • +
  • network: redefine resource limits (#1086)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 1.0.0 (Beijing) Released2024-01-31T00:00:00+00:002024-01-31T00:00:00+00:00https://pactus.org/2024/01/31/release-1-0-0Overview + +

Pactus Blockchain Version 1.0.0 (Beijing) +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Pactus Version 1.0.0 (Beijing)

+ +

Highlights

+ +

Mainnet Official Release v1.0.0 (Beijing)

+ +

The much-anticipated official software release of Pactus v1.0.0 (Beijing) marks a significant milestone +for our community. +This impressive mainnet release represents the culmination of extensive development efforts. +Pactus v1.0.0 (Beijing) offers a pioneering solution for streamlining the validation of Pactus blockchain, +enhancing security, and providing a user-friendly experience. We’re excited to unveil the official software +and welcome users to experience the power of Pactus in revolutionizing the future of blockchain. Join us on +this exciting journey.

+ +

Onboarding validators

+ +

On February 1st, a total of 53,494 PAC coins will be distributed among 1,311 validators who participated in +Testnet-0, +Testnet-1, and +Testnet-2. +This marks the beginning of a new chapter in the decentralized world.

+ +

Download

+ +

This version has been implemented for Mainnet +To start using Pactus Mainnet, download the latest version from the download +page and join the Mainnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement get validator address for grpc (#975)
  • +
  • add bootstrap.json and load in config on build (#964)
  • +
  • add mainnet config and genesis files (#951)
  • +
  • add Consensus-address to network info (#952)
  • +
  • grpc: sign transaction using wallet client (#945)
  • +
  • pactus gui lock support (#947)
  • +
  • consensus: turning consensus to a zero-config module (#942)
  • +
+ +

Fix

+ +
    +
  • localnet wallet issue (#970)
  • +
  • sync: remove ReachabilityStatus from agent info (#956)
  • +
  • daemon: keeping previous behavior for password flag, linting CLI messages (#950)
  • +
  • consensus: detect if the system time is behind the network (#939)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Mainnet launched 🚀2024-01-24T20:24:00+00:002024-01-24T20:24:00+00:00https://pactus.org/2024/01/24/mainnet-launchedYears to Launch + +

Pactus Mainnet started creating the first block on 24 January 2024 at 20:24:10 UTC time. +Pactus Mainnet is the result of years of hard work, research, and innovation. +It started from one idea:

+ +

A low-cost, truly decentralized blockchain, built by the people for the people, +where anyone could run and be their own validator.

+ +

We faced many challenges and obstacles along the way, but we never gave up.
+We overcame them with our determination and perseverance.
+We learned from our mistakes and improved our solutions.
+We grew from a small team to a large community.
+We achieved many milestones and breakthroughs. And we did it.
+We created Pactus, the platform that empowers you.

+ +

Thanks to Community

+ +

We want to thank Pactus community for helping us on the Testnet.

+ +

You have been instrumental in testing and improving the Testnet.
+You have given us your honest feedback and constructive suggestions.
+You have reported and help fixed bugs and errors.
+You have challenged and pushed us to do better.
+You have been our partners and friends in this journey.

+ +

On the Road

+ +

The true journey has just started.
+The Mainnet is not the end, but the beginning.
+The beginning of a new era of blockchain innovation.
+The beginning of a new challenge and opportunity.
+The beginning of a new revolution and evolution!

+ +

We welcome you more than ever.
+We need you to join us in this exciting adventure.
+We need you to support us in this ambitious endeavor.
+We need you to be part of Pactus, the platform that empowers you!

+ +

We Have a Dream

+ +

We have a dream.
+A dream of a world where blockchain technology is not a privilege, but a right for everyone.
+A dream of a world where smart contracts and decentralized applications are fast, secure, and scalable.
+A dream of a world where Pactus is the platform that empowers you.

+ +

This dream is not just ours. It is yours too.
+You share our vision and passion for blockchain innovation.
+You believe in our potential and impact.
+You support our goals and values.
+You are part of our dream.

+ +

And this dream is not just a fantasy. It is a reality.
+A reality that we have created together.
+A reality that we have launched today. A reality that we can explore and enjoy together.
+A reality that we can shape and improve together.
+A reality that we can make better and brighter together!

]]>
Story of Testnet-22024-01-22T00:00:00+00:002024-01-22T00:00:00+00:00https://pactus.org/2024/01/22/testnet-2-concludedWhat is Testnet? + +

Testnet is a testing environment where developers and users can try out the functionality of a blockchain project, +without putting real assets or data at risk. +It helps to ensure that the final product is reliable and secure for users to use. +If you like to read more about the Testnet you can check out our post on +“What is Testnet?”.

+ +

Summary

+ +

In October 2023, we launched Testnet-2. +The main purpose of this Testnet was to closely monitor the new consensus mechanism and the stability of the P2P network.

+ +

The committee for Testnet-2 was set to 51 validators, +and 2084 validators joined during the Testnet period. +More than 1500 computers and servers joined the network, and we experienced a high volume of data transmission in the network. +More than 800,000 blocks were created, and about 2 million transactions were processed during this time. +The size of the blockchain is about 450 megabytes.

+ +

About 500,000 coins were staked during this period, almost 60% of the total generated coins. +It shows that users, even in Testnet, tend to stake their coins.

+ +

Stability of Consensus

+ +

In Testnet-1, we had one consensus failure that caused us to +conclude the Testnet-1. +During Testnet-2, there were no issues with the consensus mechanism, and +we had no case of failure during the testing period, +although the number of validators and nodes significantly increased on Testnet-2 compared to its predecessor. +It proved that the consensus mechanism is in a stable situation.

+ +

Networking issues

+ +

In Testnet-2, the blockchain stopped twice, and each time it took more than 24 hours to fix the problem. +In the second blockage, we had no choice but to ask active validators inside the committee to +update their nodes to overcome the networking issue. +The development team faced a difficult situation and had to make the proper decision to fix the networking issues. +On one hand, the networking traffic increased significantly, and on the other hand, we had to +make sure normal users with limited internet bandwidth could still participate in the consensus mechanism without any problems. +After examining different scenarios, the networking issues were resolved, and +no major problems were reported till the end of Testnet.

+ +

Major updates

+ +

During Testnet-2, we introduced several updates, including versions +0.15.0, +0.16.0, +0.17.0, +0.18.0, +0.19.0, and +0.20.0. +The update process went smoothly, and with the stability of Version 0.20.0 confirmed, +the development team shifted its focus to the Mainnet launch.

+ +

Special thanks to the community

+ +

This Testnet was important for us. +It helped us learn what we need to do to make Pactus work even better. +Without the community that supports us and dedicates their time and resources to testing and feedback, +we wouldn’t have been able to progress as we have.

+ +

We thank all of them for their valuable contributions. +As promised, participants in Testnets will be given priority as validators for the MainNet, and +will receive bounty PAC coins to set up their validators.

+ +

We are grateful to all those who participated in Testnets, and we encourage them to join the Mainnet. +As a community-based project, we rely on the support of our community members, and we value any help we receive.

]]>
Pactus 0.20.0 Released2024-01-11T00:00:00+00:002024-01-11T00:00:00+00:00https://pactus.org/2024/01/11/release-0-20-0Overview + +

Pactus Blockchain Version 0.20.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

Validator Stake Management

+ +

The new GUI application enables users to easily Unbond and Withdraw their validator’s stake.

+ +

Withdraw dialog

+ +

Improving Network Connectivity

+ +

Some users have reported that UDP packets are being dropped by their Internet Service Providers. +Therefore, the UDP protocol is disabled by default. +Users can still activate the UDP protocol by configuring the settings in the file if necessary.

+ +

Also, the experimental Node Gossip feature has been removed in this version. +Node gossip could cause some validators to become isolated from the rest of the network.

+ +

Relay service

+ +

This version enables users to turn their node into a relay service. +A relay service node can help users behind NAT to communicate with each other. +It is disabled by default and can be enabled inside the config file. +Please note that it is still in an experimental state.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement relay service (#931)
  • +
  • HTTP: Integrate AddRowDouble and update tests (#926)
  • +
  • network: making listen address private in config (#921)
  • +
  • http: adding AvailabilityScore to http module (#917)
  • +
  • network: adding ‘enable_udp’ config (#918)
  • +
  • network: removing gossip node service (#916)
  • +
  • gRPC: adding AvailabilityScore to gRPC (#910)
  • +
  • GUI: unbond and withdraw transaction dialogs (#908)
  • +
+ +

Fix

+ +
    +
  • gRPC: adding missing get raw transaction APIs to gRPC gateway (#925)
  • +
  • network: preventing self dial (#924)
  • +
  • fixing time lag on starting node (#923)
  • +
  • network: fixing network deadlock on linux arm64 (#922)
  • +
  • GUI: updating unbond and withdraw dialogs (#911)
  • +
  • fixing gRPC node info issue (#906)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Mainnet announcement2024-01-08T00:00:00+00:002024-01-08T00:00:00+00:00https://pactus.org/2024/01/08/mainnet-announcementThe much-awaited Mainnet Launch of The Pactus Blockchain is finally here! +On January 24, 2024, at 20:24:00 UTC, the first block, known as the Genesis block, +will be minted by four Bootstrap validators. +After that, every 10 seconds, a new block will be added to the blockchain. +Each block contains the committed transactions in the network. +The block finality in the Pactus blockchain is immediate. +It means that there is no need to wait for block confirmation to ensure a transaction is committed.

+ +

Later, more than 2000 community validators will secure the blockchain and make it decentralized. +These validators are Testnet participants who helped test Pactus during our testing period. +The community validators will receive the initial staking coins from a Discord Bot named RoboPac.

+ +

To ensure everything works smoothly on the Mainnet, three different Testnets ( +Testnet0, +Testnet1, and +Testnet2) have been run.

+ +

The Mainnet will never be stopped or interrupted by the core developers of Pactus, +and validators should primarily participate in and maintain the security of the blockchain.

]]>
Pactus 0.19.0 Released2024-01-04T00:00:00+00:002024-01-04T00:00:00+00:00https://pactus.org/2024/01/04/release-0-19-0Overview + +

Pactus Blockchain Version 0.19.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version has improved the overall performance of the blockchain by implementing +PIP-15. +PIP-15 suggests to add caching algorithms to the database for the most frequently used items.

+ +

Additionally, this version has enhanced the connectivity of the nodes in the P2P network.

+ +

Availability Score

+ +

This version comes with the implementation of PIP-19. +PIP-19 suggests assigning the “Availability Score” to each validator based on their activities in the +committee. +Validators with a score less than 0.8 won’t receive the block reward, +as their proposals will be rejected by other validators. +The main reason behind this PIP is to prevent users from downgrading +their node specifications and running Pactus on machines with low resources.

+ +

Breaking change

+ +

The Docker container now contains both daemon and wallet binary files. +Users who use Docker to run Pacts now need to add the entry point to run Pactus.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • gRPC: defining network and peers info response’s properly (#898)
  • +
  • implementing pip-19 (#899)
  • +
  • network: disabling GosipSub, only FloodSub (#895)
  • +
  • www: adding change proposer round and value to consensus info votes (#892)
  • +
  • network: adding relay service to dial relay nodes (#887)
  • +
  • implementing pip-15 (#843)
  • +
  • check already running by lock file (#871)
  • +
+ +

Fix

+ +
    +
  • store: use cache to check if public key exists (#902)
  • +
  • executor: not rejecting bond transaction for bootstrap validator (#901)
  • +
  • GUI: removing unnecessary tags in transaction confirm dialog (#893)
  • +
  • network: close relay connection for public node (#891)
  • +
  • network: refining GossipSubParams for Gossiper node (#882)
  • +
  • sync: adding sequence number to the bundle (#881)
  • +
  • network: turn off mesh for gossiper node (#880)
  • +
  • consensus: check voteset for CP strong termination (#879)
  • +
  • adding querier to query messages (#878)
  • +
  • execution: fixing issue #869 (#870)
  • +
  • fixing logger issue on rotating log file (#859)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
Pactus 0.18.0 Released2023-12-12T00:00:00+00:002023-12-12T00:00:00+00:00https://pactus.org/2023/12/12/release-0-18-0Overview + +

Pactus Blockchain Version 0.18.0 +is now available for download. +This release includes a graphical user interface (GUI) that +is suitable for both beginners and experienced users. +It also includes a command-line interface (CLI) for advanced users and wallet software +that allows users to interact with the blockchain without the need to sync the entire blockchain.

+ +

Highlights

+ +

This version has significantly improved the syncing progress. +The syncing process concurrently requests blocks from 8 different peers and +actively connects to the most optimal peers for downloading the blockchain.

+ +

Additionally, users can now import private keys into their wallet and securely encrypt them using their wallet password.

+ +

Breaking change

+ +

For Unix-based systems, please note that the working directory for root users has changed from /pactus to /root/pactus.

+ +

Download

+ +

This version has been implemented for Testnet-2 and +is being prepared for the upcoming Mainnet launch. +To start using Pactus Blockchain Testnet-2, download the latest version from the +download page and join the Testnet.

+ +

These guides can help you to download, install and configure your node:

+ + + +

How to Upgrade

+ +

If you are running an older version, shut it down. +Uninstall the previous version and install the newer version. +If you are using the archived version, simply use the new version.

+ +

+After you update the node, the configuration file will automatically get updated, keeping the old settings. +If you want to return the configuration file to its default settings, +just delete the current config file and restart the node. +

+ +

Change log

+ +

This version includes several changes and improvements, such as:

+ +

Feat

+ +
    +
  • implement pip-14 (#841)
  • +
  • sort wallet addresses (#836)
  • +
  • grpc: endpoints for creating raw transaction (#838)
  • +
  • network reachability API (#834)
  • +
  • implement pip-13 (#835)
  • +
  • subscribing to libp2p eventbus (#831)
  • +
  • implement helper methods for wallet address path (#830)
  • +
  • logger: adding rotate log file after days, compress and maxgae for logger config (#822)
  • +
  • enable bandwidth router metric (#819)
  • +
+ +

Fix

+ +
    +
  • network: refining the connection limit (#849)
  • +
  • corrected mistake when retrieving the reward address (#848)
  • +
  • config: restore default config when it is deleted (#847)
  • +
  • cmd: changing home directory for root users (#846)
  • +
  • removing BasicCheck for hash (#845)
  • +
  • disabling libp2p ping protocol (#844)
  • +
  • build docker file (#839)
  • +
  • sync: ignore publishing a block if it is received before (#829)
  • +
  • network: subscribing to the Libp2p event bus (#828)
  • +
  • sync: ignore block request if blocks are already inside the cache (#817)
  • +
+ +

You can find the full list of changes on Github, +as well as the source code

]]>
\ No newline at end of file diff --git a/zh/index.html b/zh/index.html new file mode 100644 index 000000000..5d5f16d7e --- /dev/null +++ b/zh/index.html @@ -0,0 +1,740 @@ + + + + + + + + + + + + + 主页 | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + + +
+
+
+
+ Pactus - a real Proof-of-Stake blockchain +
+
+
+
+
帕图斯区块链
+
帕图斯是一个由社区运营的区块链技术。
采用了革命性且安全的Solid State Proof of Stake共识机制。
快来加入我们,共同构建去中心化的未来吧!
+
+ +
+
+
+ +
+
+
+


运行节点

+ 下载最新版本的节点程序,创建您的钱包,并开始运行节点。
帕图斯是一款轻量、友好、易于操作的节点程序。 + + +
+
+ <br> 运行节点 +
+
+ +
+
+ <br> 获取代币 +
+
+


获取代币

+ 节点运行之后,您可以质押代币成为验证者。获取方式有多种,比如购买,好友赠送等。也可以加入我们的社区参与贡献获取代币奖励。 + + +
+
+ +
+
+


成为验证者

+ 通过抵押代币,您的节点将升级为验证者节点,验证者节点有机会当选委员会成员,每当您提出一个block时,您将获得 1 个 PAC 代币作为奖励。 + + +
+
+ <br> 成为验证者 +
+
+ +
+
+ <br> 让帕图斯变得更好 +
+
+


让帕图斯变得更好

+ 相信帕图斯在所有验证者和社区贡献者的支持下会变的更好。
让我们一起努力,共同创造属于我们的世界! + + +
+
+
+ +
+
+
+

合作伙伴

+
+
+
+ + Sensifai + +
+
+ + Dezh Technologies + +
+
+
+
+
+ +
+
+
+

我们的验证者

+
+
+
+ + SGTstake + +
+
+ + NodeSync.Top + +
+
+ + CodeBlockLabs + +
+
+ + CoreNode + +
+
+ + CoreNode + +
+
+ + Validator247 + +
+
+ + VNBnode + +
+
+ + Ionode + +
+
+ + dnsarz + +
+
+ + genznodes + +
+
+ + node39 + +
+
+ + tpes + +
+
+ + oshvank + +
+
+ + testnetnodes + +
+
+ + p10node + +
+
+ + kenz + +
+
+ + blocksync + +
+
+ + adora + +
+
+ + ykpbb + +
+
+ + validator-wiki + +
+
+ + nodeops + +
+
+ + catsmile + +
+
+ + str + +
+
+ + Dezh Technologies + +
+
+
+
+ +
+
+
+
+

Subscribe to the Pactus Newsletter

+

+

Dive into the latest updates and insights from the Pactus Blockchain. + Receive crucial information on new developments, enhancements, and partnerships + directly to your inbox. Stay connected and informed, whether you're an investor, developer, + or blockchain enthusiast.

+
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+ + * +
+
+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + +
+
+
+ + +
+
+
+
+
+
+
+ + +
+ + diff --git a/zh/mstile-150x150.png b/zh/mstile-150x150.png new file mode 100644 index 000000000..187b08cc8 Binary files /dev/null and b/zh/mstile-150x150.png differ diff --git a/zh/robots.txt b/zh/robots.txt new file mode 100644 index 000000000..0097513b3 --- /dev/null +++ b/zh/robots.txt @@ -0,0 +1 @@ +Sitemap: https://pactus.org/sitemap.xml diff --git a/zh/safari-pinned-tab.svg b/zh/safari-pinned-tab.svg new file mode 100644 index 000000000..43c436d31 --- /dev/null +++ b/zh/safari-pinned-tab.svg @@ -0,0 +1,27 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/zh/site.webmanifest b/zh/site.webmanifest new file mode 100644 index 000000000..c00b17332 --- /dev/null +++ b/zh/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-256x256.png", + "sizes": "256x256", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/zh/sitemap.xml b/zh/sitemap.xml new file mode 100644 index 000000000..1c65aede0 --- /dev/null +++ b/zh/sitemap.xml @@ -0,0 +1,210 @@ + + + +https://pactus.org/2022/08/29/dev-meeting.html +2022-08-29T00:00:00+00:00 + + +https://pactus.org/2022/09/04/dev-meeting.html +2022-09-04T00:00:00+00:00 + + +https://pactus.org/2022/09/18/dev-meeting.html +2022-09-18T00:00:00+00:00 + + +https://pactus.org/2022/09/20/release-0-9-0.html +2022-09-20T00:00:00+00:00 + + +https://pactus.org/2022/09/24/testnet-0-launched.html +2022-09-24T00:00:00+00:00 + + +https://pactus.org/2022/10/30/dev-meeting.html +2022-10-30T00:00:00+00:00 + + +https://pactus.org/2022/11/24/release-0-9-1.html +2022-11-24T00:00:00+00:00 + + +https://pactus.org/2023/03/01/what-is-testnet.html +2023-03-01T00:00:00+00:00 + + +https://pactus.org/2023/04/21/testnet-0-concluded.html +2023-04-21T00:00:00+00:00 + + +https://pactus.org/2023/05/08/release-0-10-0.html +2023-05-08T00:00:00+00:00 + + +https://pactus.org/2023/05/09/testnet-1-launched.html +2023-05-09T00:00:00+00:00 + + +https://pactus.org/2023/05/29/release-0-11-0.html +2023-05-29T00:00:00+00:00 + + +https://pactus.org/2023/06/19/release-0-12-0.html +2023-06-19T00:00:00+00:00 + + +https://pactus.org/2023/07/01/release-0-13-0.html +2023-07-01T00:00:00+00:00 + + +https://pactus.org/2023/07/05/testnet-500-validators.html +2023-07-05T00:00:00+00:00 + + +https://pactus.org/2023/07/09/dev-meeting.html +2023-07-09T00:00:00+00:00 + + +https://pactus.org/2023/08/01/testnet-1-concluded.html +2023-08-01T00:00:00+00:00 + + +https://pactus.org/2023/08/22/dev-report.html +2023-08-22T00:00:00+00:00 + + +https://pactus.org/2023/09/04/introduction-to-pips.html +2023-09-04T00:00:00+00:00 + + +https://pactus.org/2023/09/24/dev-report-pre-testnet-2.html +2023-09-24T00:00:00+00:00 + + +https://pactus.org/2023/09/28/how-sspos-works-in-simple-word.html +2023-09-28T00:00:00+00:00 + + +https://pactus.org/2023/10/15/release-0-15-0.html +2023-10-15T00:00:00+00:00 + + +https://pactus.org/2023/10/15/testnet-2-launched.html +2023-10-15T00:00:00+00:00 + + +https://pactus.org/2023/10/29/release-0-16-0.html +2023-10-29T00:00:00+00:00 + + +https://pactus.org/2023/11/12/release-0-17-0.html +2023-11-12T00:00:00+00:00 + + +https://pactus.org/2023/12/12/release-0-18-0.html +2023-12-12T00:00:00+00:00 + + +https://pactus.org/2024/01/04/release-0-19-0.html +2024-01-04T00:00:00+00:00 + + +https://pactus.org/2024/01/08/mainnet-announcement.html +2024-01-08T00:00:00+00:00 + + +https://pactus.org/2024/01/11/release-0-20-0.html +2024-01-11T00:00:00+00:00 + + +https://pactus.org/2024/01/22/testnet-2-concluded.html +2024-01-22T00:00:00+00:00 + + +https://pactus.org/2024/01/24/mainnet-launched.html +2024-01-24T20:24:00+00:00 + + +https://pactus.org/2024/01/31/release-1-0-0.html +2024-01-31T00:00:00+00:00 + + +https://pactus.org/2024/02/10/release-1-0-1.html +2024-02-10T00:00:00+00:00 + + +https://pactus.org/2024/02/18/release-1-0-2.html +2024-02-18T00:00:00+00:00 + + +https://pactus.org/2024/03/16/testnet-phoenix-launched.html +2024-03-16T00:00:00+00:00 + + +https://pactus.org/2024/04/14/release-1-1-0.html +2024-04-14T00:00:00+00:00 + + +https://pactus.org/2024/04/18/release-1-1-1.html +2024-04-18T00:00:00+00:00 + + +https://pactus.org/2024/04/25/release-1-1-3.html +2024-04-25T00:00:00+00:00 + + +https://pactus.org/2024/05/07/release-1-1-4.html +2024-05-07T00:00:00+00:00 + + +https://pactus.org/2024/05/30/release-1-1-5.html +2024-05-30T00:00:00+00:00 + + +https://pactus.org/2024/05/31/release-1-1-6.html +2024-05-31T00:00:00+00:00 + + +https://pactus.org/2024/06/02/release-1-1-7.html +2024-06-02T00:00:00+00:00 + + +https://pactus.org/2024/06/02/release-1-1-8.html +2024-06-02T00:00:00+00:00 + + +https://pactus.org/2024/06/20/release-1-2-0.html +2024-06-20T00:00:00+00:00 + + +https://pactus.org/2024/06/27/release-1-3-0.html +2024-06-27T00:00:00+00:00 + + +https://pactus.org/blog/ + + +https://pactus.org/ + + +https://pactus.org/community/ + + +https://pactus.org/about/faq/ + + +https://pactus.org/about/what-is-pactus/ + + +https://pactus.org/about/roadmap/ + + +https://pactus.org/term-of-use/ + + +https://pactus.org/download/ + + +https://pactus.org/contributing/ + + diff --git a/zh/term-of-use/index.html b/zh/term-of-use/index.html new file mode 100644 index 000000000..432ab5f27 --- /dev/null +++ b/zh/term-of-use/index.html @@ -0,0 +1,607 @@ + + + + + + + + + + + + + Term of Use | 帕图斯区块链 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+

Terms of Use

+ +

Welcome to Pactus.

+ +

By using our website or services, you agree to these Terms of Use (“Terms”). +Please review them carefully. +If you do not accept the Terms, please do not use our website or services.

+ +

We may update the Terms occasionally. +Your continued use of our website or services after any changes means you accept the updates. +If you do not agree to the updates, please stop using our website and services.

+ +

“We,” “us,” “our,” and “Pactus” refer to the Pactus Blockchain Project. “You” refers to each user of our +website or services.

+ +

Website Access and Modifications

+ +

We strive to provide continuous website access but cannot guarantee uninterrupted or error-free service. +Pactus is not liable for any inaccessible features or website unavailability.

+ +

We may modify, expand, limit, or discontinue any part of the website or +services at any time to accommodate users or for other reasons, without notice. +We reserve the right to suspend website access temporarily or permanently, at our discretion, without notice.

+ +

Users may need to update their computer hardware or software to access some website content or features. +Pactus is not responsible for any inability to access the website or services due to user systems, +internet networks, or other causes.

+ +

Age Limit

+ +

Our website and services are not intended for those under 18. +If you are under 18, you may only use this website with the supervision of a parent, guardian, or other responsible adult.

+ +

No Personalized Advice

+ +

This website does not provide individualized legal, tax, financial, or investment advice. +Since everyone’s situation is different, we recommend consulting a qualified professional for financial decisions.

+ +

PAC coin is meant to be used as a medium of exchange. +Nothing on this website should be considered investment advice or a solicitation to +buy, hold, invest in, own, or use PAC coin.

+ +

No Content Guarantees

+ +

We cannot guarantee the accuracy, completeness, or quality of the information on this website. +All content is provided on an “as is” and “as available” basis, and use is at your own risk.

+ +

The content may be sourced from third parties. +Pactus is not responsible for any errors, omissions, or inaccuracies. +The information may not suit everyone and may only apply to certain regions.

+ +

It is your responsibility to evaluate if the information and services are technically and legally suitable for +your intended use and comply with applicable laws. +Always verify any information before using it for personal, financial, or business purposes.

+ +

We may modify website content and services at any time without notice. +We are not obligated to inform you of any changes or corrections.

+ +

External Content

+ +

Any testimonials, opinions, advice, offers, or other third party content on this website reflect the views +and intentions of those parties/people only. +They do not represent the views of Pactus.

+ +

We do not guarantee the accuracy, completeness, reliability, or usefulness of external content. +Users are responsible for assessing external content. +Pactus is not liable for any damage or loss from relying on or using third party content.

+ +

User Generated Content

+ +

By posting or submitting any material to this website, including the forum, you grant Pactus a +worldwide, fully paid-up, non-exclusive license to edit and display your materials on our website and +social media platforms as we deem appropriate.

+ +

You agree to indemnify and hold harmless Pactus and its Users from any third-party claims arising from +your materials. +You also represent that you own or have the right to post the materials, that they are +accurate, their use on the Pactus website complies with laws, and they will not cause harm to any +person.

+ +

Pactus has the right to remove any materials we deem objectionable, offensive, illegal, harmful, or in +violation of these Terms. +We may disclose user information if legally required.

+ +

Please contact info@pactus.org to request the removal of your posted content for reasons such as +privacy concerns, copyright issues, or no longer wanting your content to appear publicly. +We will review removal requests on a case-by-case basis.

+ +

File Safety and Security

+ +

Pactus implements measures to protect downloadable files on our website but cannot guarantee they +are free of infections, viruses, or harmful code.

+ +

We are also not responsible if users’ devices are infected by visiting our website or downloading files in +the event of a security breach.

+ +

If uncertain, users should consider compiling Pactus from the provided source code. +Users are responsible for meeting their own security requirements.

+ + + +

Pactus works with reputable partners, but does not endorse or take responsibility for sponsored content claims. +We do not review, recommend, or endorse any products or services promoted on our site.

+ +

Pactus is not liable for damages from misuse of personal information given to sponsors. +We are also not responsible for losses from using sponsor links or services on our site.

+ + + +

For user convenience, our website may contain links to external sites and resources. +However, we do not control these external sites and are not responsible for +their content, products, services, or information.

+ +

Link inclusion does not imply Pactus endorsement or affiliation. +Users should be aware they may leave our website by clicking links. +External site terms of use may differ from ours.Pactus is not responsible for +losses from users following links to external sites. +We encourage caution and reviewing external sites’ terms and policies before transacting or engaging.

+ +

Electronic Communications

+ +

Our website responses and email communications will be delivered electronically. +Pactus reserves the right to disclose any user emails or objectionable material +to comply with legal processes or protect the +rights and property of Pactus, its customers, suppliers, and users.

+ +

No Financial Services

+ +

This website does not engage in storing, selling, buying, sending, or receiving Pactus coins. +All activities related to owning and transferring Pactus coins occur on the DEX/CEX/decentralized Pactus network. +This website does not actively participate in that network.

+ +

No Liability

+ +

Pactus assumes no liability for any damages, claims, or losses related to using Pactus. +This includes third party actions or inactions and events.

+ +

It includes but is not limited to: security issues when using Pactus software/services, technical problems +when using Pactus software/services, software or data corruption when using Pactus software/services, +or user errors when using Pactus software/services.

+ +

Disclaimer of Warranties

+ +

Pactus expressly disclaims all warranties, representations, and conditions, whether express or implied, +including but not limited to the implied warranties and conditions of merchantability, fitness for a +particular purpose, and non-infringement.

+ +

This disclaimer extends to the use of this website and its services, as well as the accuracy, completeness, +timeliness, or currentness of its content, in any manner and for any purpose.

+ +

No Consequential Damages

+ +

Under no circumstances will Pactus be liable for any incidental, special, consequential, exemplary, +indirect, or other damages arising from use of this website, its services, or content. +This includes but is not limited to data loss, even if advised of such damage possibilities.

+ +

This disclaimer applies whether based on contract, tort, negligence, product liability, strict liability, or otherwise. +It extends to all potential scenarios and circumstances.

+ +

General

+ +

These Terms of Use (TOU) and any applicable Terms of Service are the full agreement for website use by +users and Pactus. They replace previous agreements.

+ +

If Pactus or a user does not exercise a TOU right, this does not waive the right. If a TOU provision is +invalid, the rest remain valid.

+ +

The TOU and Terms of Service are intentionally in English, the governing language for Pactus and users.

+ + + +

Attributed Content

+ +

Logos for operating systems, platforms, and sponsors we support are copyrighted by their respective owners. +Pactus does not own these copyrights but uses the logos with permission or in a clear, non- harmful way.

+ +

Privacy Policy

+ +

Data Collection and Use

+ +

We collect standard server logs from our website. +This data helps provide site statistics, improve content and information flow, analyze errors, and diagnose dead links. +A segment of server logs gathers download statistics to better understand user needs.

+ +
    +
  • Last update: 25 January 2024
  • +
+ +
+
+
+
+ + + + +