diff --git a/include/xrpl/tx/InvariantCheck.h b/include/xrpl/tx/InvariantCheck.h deleted file mode 100644 index dc42f9d38c..0000000000 --- a/include/xrpl/tx/InvariantCheck.h +++ /dev/null @@ -1,732 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace xrpl { - -class ReadView; - -#if GENERATING_DOCS -/** - * @brief Prototype for invariant check implementations. - * - * __THIS CLASS DOES NOT EXIST__ - or rather it exists in documentation only to - * communicate the interface required of any invariant checker. Any invariant - * check implementation should implement the public methods documented here. - * - */ -class InvariantChecker_PROTOTYPE -{ -public: - explicit InvariantChecker_PROTOTYPE() = default; - - /** - * @brief called for each ledger entry in the current transaction. - * - * @param isDelete true if the SLE is being deleted - * @param before ledger entry before modification by the transaction - * @param after ledger entry after modification by the transaction - */ - void - visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after); - - /** - * @brief called after all ledger entries have been visited to determine - * the final status of the check - * - * @param tx the transaction being applied - * @param tec the current TER result of the transaction - * @param fee the fee actually charged for this transaction - * @param view a ReadView of the ledger being modified - * @param j journal for logging - * - * @return true if check passes, false if it fails - */ - bool - finalize( - STTx const& tx, - TER const tec, - XRPAmount const fee, - ReadView const& view, - beast::Journal const& j); -}; -#endif - -/** - * @brief Invariant: We should never charge a transaction a negative fee or a - * fee that is larger than what the transaction itself specifies. - * - * We can, in some circumstances, charge less. - */ -class TransactionFeeCheck -{ -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: A transaction must not create XRP and should only destroy - * the XRP fee. - * - * We iterate through all account roots, payment channels and escrow entries - * that were modified and calculate the net change in XRP caused by the - * transactions. - */ -class XRPNotCreated -{ - std::int64_t drops_ = 0; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: we cannot remove an account ledger entry - * - * We iterate all account roots that were modified, and ensure that any that - * were present before the transaction was applied continue to be present - * afterwards unless they were explicitly deleted by a successful - * AccountDelete transaction. - */ -class AccountRootsNotDeleted -{ - std::uint32_t accountsDeleted_ = 0; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: a deleted account must not have any objects left - * - * We iterate all deleted account roots, and ensure that there are no - * objects left that are directly accessible with that account's ID. - * - * There should only be one deleted account, but that's checked by - * AccountRootsNotDeleted. This invariant will handle multiple deleted account - * roots without a problem. - */ -class AccountRootsDeletedClean -{ - // Pair is . Before is used for most of the checks, so that - // if, for example, an object ID field is cleared, but the object is not - // deleted, it can still be found. After is used specifically for any checks - // that are expected as part of the deletion, such as zeroing out the - // balance. - std::vector, std::shared_ptr>> accountsDeleted_; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: An account XRP balance must be in XRP and take a value - * between 0 and INITIAL_XRP drops, inclusive. - * - * We iterate all account roots modified by the transaction and ensure that - * their XRP balances are reasonable. - */ -class XRPBalanceChecks -{ - bool bad_ = false; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: corresponding modified ledger entries should match in type - * and added entries should be a valid type. - */ -class LedgerEntryTypesMatch -{ - bool typeMismatch_ = false; - bool invalidTypeAdded_ = false; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: Trust lines using XRP are not allowed. - * - * We iterate all the trust lines created by this transaction and ensure - * that they are against a valid issuer. - */ -class NoXRPTrustLines -{ - bool xrpTrustLine_ = false; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: Trust lines with deep freeze flag are not allowed if normal - * freeze flag is not set. - * - * We iterate all the trust lines created by this transaction and ensure - * that they don't have deep freeze flag set without normal freeze flag set. - */ -class NoDeepFreezeTrustLinesWithoutFreeze -{ - bool deepFreezeWithoutFreeze_ = false; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: frozen trust line balance change is not allowed. - * - * We iterate all affected trust lines and ensure that they don't have - * unexpected change of balance if they're frozen. - */ -class TransfersNotFrozen -{ - struct BalanceChange - { - std::shared_ptr const line; - int const balanceChangeSign; - }; - - struct IssuerChanges - { - std::vector senders; - std::vector receivers; - }; - - using ByIssuer = std::map; - ByIssuer balanceChanges_; - - std::map const> possibleIssuers_; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); - -private: - bool - isValidEntry(std::shared_ptr const& before, std::shared_ptr const& after); - - STAmount - calculateBalanceChange( - std::shared_ptr const& before, - std::shared_ptr const& after, - bool isDelete); - - void - recordBalance(Issue const& issue, BalanceChange change); - - void - recordBalanceChanges(std::shared_ptr const& after, STAmount const& balanceChange); - - std::shared_ptr - findIssuer(AccountID const& issuerID, ReadView const& view); - - bool - validateIssuerChanges( - std::shared_ptr const& issuer, - IssuerChanges const& changes, - STTx const& tx, - beast::Journal const& j, - bool enforce); - - bool - validateFrozenState( - BalanceChange const& change, - bool high, - STTx const& tx, - beast::Journal const& j, - bool enforce, - bool globalFreeze); -}; - -/** - * @brief Invariant: offers should be for non-negative amounts and must not - * be XRP to XRP. - * - * Examine all offers modified by the transaction and ensure that there are - * no offers which contain negative amounts or which exchange XRP for XRP. - */ -class NoBadOffers -{ - bool bad_ = false; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: an escrow entry must take a value between 0 and - * INITIAL_XRP drops exclusive. - */ -class NoZeroEscrow -{ - bool bad_ = false; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: a new account root must be the consequence of a payment, - * must have the right starting sequence, and the payment - * may not create more than one new account root. - */ -class ValidNewAccountRoot -{ - std::uint32_t accountsCreated_ = 0; - std::uint32_t accountSeq_ = 0; - bool pseudoAccount_ = false; - std::uint32_t flags_ = 0; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: Validates several invariants for NFToken pages. - * - * The following checks are made: - * - The page is correctly associated with the owner. - * - The page is correctly ordered between the next and previous links. - * - The page contains at least one and no more than 32 NFTokens. - * - The NFTokens on this page do not belong on a lower or higher page. - * - The NFTokens are correctly sorted on the page. - * - Each URI, if present, is not empty. - */ -class ValidNFTokenPage -{ - bool badEntry_ = false; - bool badLink_ = false; - bool badSort_ = false; - bool badURI_ = false; - bool invalidSize_ = false; - bool deletedFinalPage_ = false; - bool deletedLink_ = false; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: Validates counts of NFTokens after all transaction types. - * - * The following checks are made: - * - The number of minted or burned NFTokens can only be changed by - * NFTokenMint or NFTokenBurn transactions. - * - A successful NFTokenMint must increase the number of NFTokens. - * - A failed NFTokenMint must not change the number of minted NFTokens. - * - An NFTokenMint transaction cannot change the number of burned NFTokens. - * - A successful NFTokenBurn must increase the number of burned NFTokens. - * - A failed NFTokenBurn must not change the number of burned NFTokens. - * - An NFTokenBurn transaction cannot change the number of minted NFTokens. - */ -class NFTokenCountTracking -{ - std::uint32_t beforeMintedTotal = 0; - std::uint32_t beforeBurnedTotal = 0; - std::uint32_t afterMintedTotal = 0; - std::uint32_t afterBurnedTotal = 0; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariant: Token holder's trustline balance cannot be negative after - * Clawback. - * - * We iterate all the trust lines affected by this transaction and ensure - * that no more than one trustline is modified, and also holder's balance is - * non-negative. - */ -class ValidClawback -{ - std::uint32_t trustlinesChanged = 0; - std::uint32_t mptokensChanged = 0; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -class ValidMPTIssuance -{ - std::uint32_t mptIssuancesCreated_ = 0; - std::uint32_t mptIssuancesDeleted_ = 0; - - std::uint32_t mptokensCreated_ = 0; - std::uint32_t mptokensDeleted_ = 0; - // non-MPT transactions may attempt to create - // MPToken by an issuer - bool mptCreatedByIssuer_ = false; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariants: Permissioned Domains must have some rules and - * AcceptedCredentials must have length between 1 and 10 inclusive. - * - * Since only permissions constitute rules, an empty credentials list - * means that there are no rules and the invariant is violated. - * - * Credentials must be sorted and no duplicates allowed - * - */ -class ValidPermissionedDomain -{ - struct SleStatus - { - std::size_t credentialsSize_{0}; - bool isSorted_ = false; - bool isUnique_ = false; - bool isDelete_ = false; - }; - std::vector sleStatus_; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariants: Pseudo-accounts have valid and consistent properties - * - * Pseudo-accounts have certain properties, and some of those properties are - * unique to pseudo-accounts. Check that all pseudo-accounts are following the - * rules, and that only pseudo-accounts look like pseudo-accounts. - * - */ -class ValidPseudoAccounts -{ - std::vector errors_; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -class ValidPermissionedDEX -{ - bool regularOffers_ = false; - bool badHybrids_ = false; - hash_set domains_; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -class ValidAMM -{ - std::optional ammAccount_; - std::optional lptAMMBalanceAfter_; - std::optional lptAMMBalanceBefore_; - bool ammPoolChanged_; - -public: - enum class ZeroAllowed : bool { No = false, Yes = true }; - - ValidAMM() : ammPoolChanged_{false} - { - } - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); - -private: - bool - finalizeBid(bool enforce, beast::Journal const&) const; - bool - finalizeVote(bool enforce, beast::Journal const&) const; - bool - finalizeCreate(STTx const&, ReadView const&, bool enforce, beast::Journal const&) const; - bool - finalizeDelete(bool enforce, TER res, beast::Journal const&) const; - bool - finalizeDeposit(STTx const&, ReadView const&, bool enforce, beast::Journal const&) const; - // Includes clawback - bool - finalizeWithdraw(STTx const&, ReadView const&, bool enforce, beast::Journal const&) const; - bool - finalizeDEX(bool enforce, beast::Journal const&) const; - bool - generalInvariant(STTx const&, ReadView const&, ZeroAllowed zeroAllowed, beast::Journal const&) - const; -}; - -/** - * @brief Invariants: Some fields are unmodifiable - * - * Check that any fields specified as unmodifiable are not modified when the - * object is modified. Creation and deletion are ignored. - * - */ -class NoModifiedUnmodifiableFields -{ - // Pair is . - std::set> changedEntries_; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariants: Loan brokers are internally consistent - * - * 1. If `LoanBroker.OwnerCount = 0` the `DirectoryNode` will have at most one - * node (the root), which will only hold entries for `RippleState` or - * `MPToken` objects. - * - */ -class ValidLoanBroker -{ - // Not all of these elements will necessarily be populated. Remaining items - // will be looked up as needed. - struct BrokerInfo - { - SLE::const_pointer brokerBefore = nullptr; - // After is used for most of the checks, except - // those that check changed values. - SLE::const_pointer brokerAfter = nullptr; - }; - // Collect all the LoanBrokers found directly or indirectly through - // pseudo-accounts. Key is the brokerID / index. It will be used to find the - // LoanBroker object if brokerBefore and brokerAfter are nullptr - std::map brokers_; - // Collect all the modified trust lines. Their high and low accounts will be - // loaded to look for LoanBroker pseudo-accounts. - std::vector lines_; - // Collect all the modified MPTokens. Their accounts will be loaded to look - // for LoanBroker pseudo-accounts. - std::vector mpts_; - - bool - goodZeroDirectory(ReadView const& view, SLE::const_ref dir, beast::Journal const& j) const; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/** - * @brief Invariants: Loans are internally consistent - * - * 1. If `Loan.PaymentRemaining = 0` then `Loan.PrincipalOutstanding = 0` - * - */ -class ValidLoan -{ - // Pair is . After is used for most of the checks, except - // those that check changed values. - std::vector> loans_; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -/* - * @brief Invariants: Vault object and MPTokenIssuance for vault shares - * - * - vault deleted and vault created is empty - * - vault created must be linked to pseudo-account for shares and assets - * - vault must have MPTokenIssuance for shares - * - vault without shares outstanding must have no shares - * - loss unrealized does not exceed the difference between assets total and - * assets available - * - assets available do not exceed assets total - * - vault deposit increases assets and share issuance, and adds to: - * total assets, assets available, shares outstanding - * - vault withdrawal and clawback reduce assets and share issuance, and - * subtracts from: total assets, assets available, shares outstanding - * - vault set must not alter the vault assets or shares balance - * - no vault transaction can change loss unrealized (it's updated by loan - * transactions) - * - */ -class ValidVault -{ - Number static constexpr zero{}; - - struct Vault final - { - uint256 key = beast::zero; - Asset asset = {}; - AccountID pseudoId = {}; - AccountID owner = {}; - uint192 shareMPTID = beast::zero; - Number assetsTotal = 0; - Number assetsAvailable = 0; - Number assetsMaximum = 0; - Number lossUnrealized = 0; - - Vault static make(SLE const&); - }; - - struct Shares final - { - MPTIssue share = {}; - std::uint64_t sharesTotal = 0; - std::uint64_t sharesMaximum = 0; - - Shares static make(SLE const&); - }; - - std::vector afterVault_ = {}; - std::vector afterMPTs_ = {}; - std::vector beforeVault_ = {}; - std::vector beforeMPTs_ = {}; - std::unordered_map deltas_ = {}; - -public: - void - visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); - - bool - finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); -}; - -// additional invariant checks can be declared above and then added to this -// tuple -using InvariantChecks = std::tuple< - TransactionFeeCheck, - AccountRootsNotDeleted, - AccountRootsDeletedClean, - LedgerEntryTypesMatch, - XRPBalanceChecks, - XRPNotCreated, - NoXRPTrustLines, - NoDeepFreezeTrustLinesWithoutFreeze, - TransfersNotFrozen, - NoBadOffers, - NoZeroEscrow, - ValidNewAccountRoot, - ValidNFTokenPage, - NFTokenCountTracking, - ValidClawback, - ValidMPTIssuance, - ValidPermissionedDomain, - ValidPermissionedDEX, - ValidAMM, - NoModifiedUnmodifiableFields, - ValidPseudoAccounts, - ValidLoanBroker, - ValidLoan, - ValidVault>; - -/** - * @brief get a tuple of all invariant checks - * - * @return std::tuple of instances that implement the required invariant check - * methods - * - * @see xrpl::InvariantChecker_PROTOTYPE - */ -inline InvariantChecks -getInvariantChecks() -{ - return InvariantChecks{}; -} - -} // namespace xrpl diff --git a/include/xrpl/tx/invariants/AMMInvariant.h b/include/xrpl/tx/invariants/AMMInvariant.h new file mode 100644 index 0000000000..63ebb804ae --- /dev/null +++ b/include/xrpl/tx/invariants/AMMInvariant.h @@ -0,0 +1,53 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include + +namespace xrpl { + +class ValidAMM +{ + std::optional ammAccount_; + std::optional lptAMMBalanceAfter_; + std::optional lptAMMBalanceBefore_; + bool ammPoolChanged_; + +public: + enum class ZeroAllowed : bool { No = false, Yes = true }; + + ValidAMM() : ammPoolChanged_{false} + { + } + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); + +private: + bool + finalizeBid(bool enforce, beast::Journal const&) const; + bool + finalizeVote(bool enforce, beast::Journal const&) const; + bool + finalizeCreate(STTx const&, ReadView const&, bool enforce, beast::Journal const&) const; + bool + finalizeDelete(bool enforce, TER res, beast::Journal const&) const; + bool + finalizeDeposit(STTx const&, ReadView const&, bool enforce, beast::Journal const&) const; + // Includes clawback + bool + finalizeWithdraw(STTx const&, ReadView const&, bool enforce, beast::Journal const&) const; + bool + finalizeDEX(bool enforce, beast::Journal const&) const; + bool + generalInvariant(STTx const&, ReadView const&, ZeroAllowed zeroAllowed, beast::Journal const&) + const; +}; + +} // namespace xrpl diff --git a/include/xrpl/tx/invariants/FreezeInvariant.h b/include/xrpl/tx/invariants/FreezeInvariant.h new file mode 100644 index 0000000000..ac9d83166e --- /dev/null +++ b/include/xrpl/tx/invariants/FreezeInvariant.h @@ -0,0 +1,84 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace xrpl { + +/** + * @brief Invariant: frozen trust line balance change is not allowed. + * + * We iterate all affected trust lines and ensure that they don't have + * unexpected change of balance if they're frozen. + */ +class TransfersNotFrozen +{ + struct BalanceChange + { + std::shared_ptr const line; + int const balanceChangeSign; + }; + + struct IssuerChanges + { + std::vector senders; + std::vector receivers; + }; + + using ByIssuer = std::map; + ByIssuer balanceChanges_; + + std::map const> possibleIssuers_; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); + +private: + bool + isValidEntry(std::shared_ptr const& before, std::shared_ptr const& after); + + STAmount + calculateBalanceChange( + std::shared_ptr const& before, + std::shared_ptr const& after, + bool isDelete); + + void + recordBalance(Issue const& issue, BalanceChange change); + + void + recordBalanceChanges(std::shared_ptr const& after, STAmount const& balanceChange); + + std::shared_ptr + findIssuer(AccountID const& issuerID, ReadView const& view); + + bool + validateIssuerChanges( + std::shared_ptr const& issuer, + IssuerChanges const& changes, + STTx const& tx, + beast::Journal const& j, + bool enforce); + + bool + validateFrozenState( + BalanceChange const& change, + bool high, + STTx const& tx, + beast::Journal const& j, + bool enforce, + bool globalFreeze); +}; + +} // namespace xrpl diff --git a/include/xrpl/tx/invariants/InvariantCheck.h b/include/xrpl/tx/invariants/InvariantCheck.h new file mode 100644 index 0000000000..5ded5980da --- /dev/null +++ b/include/xrpl/tx/invariants/InvariantCheck.h @@ -0,0 +1,385 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace xrpl { + +#if GENERATING_DOCS +/** + * @brief Prototype for invariant check implementations. + * + * __THIS CLASS DOES NOT EXIST__ - or rather it exists in documentation only to + * communicate the interface required of any invariant checker. Any invariant + * check implementation should implement the public methods documented here. + * + */ +class InvariantChecker_PROTOTYPE +{ +public: + explicit InvariantChecker_PROTOTYPE() = default; + + /** + * @brief called for each ledger entry in the current transaction. + * + * @param isDelete true if the SLE is being deleted + * @param before ledger entry before modification by the transaction + * @param after ledger entry after modification by the transaction + */ + void + visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after); + + /** + * @brief called after all ledger entries have been visited to determine + * the final status of the check + * + * @param tx the transaction being applied + * @param tec the current TER result of the transaction + * @param fee the fee actually charged for this transaction + * @param view a ReadView of the ledger being modified + * @param j journal for logging + * + * @return true if check passes, false if it fails + */ + bool + finalize( + STTx const& tx, + TER const tec, + XRPAmount const fee, + ReadView const& view, + beast::Journal const& j); +}; +#endif + +/** + * @brief Invariant: We should never charge a transaction a negative fee or a + * fee that is larger than what the transaction itself specifies. + * + * We can, in some circumstances, charge less. + */ +class TransactionFeeCheck +{ +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariant: A transaction must not create XRP and should only destroy + * the XRP fee. + * + * We iterate through all account roots, payment channels and escrow entries + * that were modified and calculate the net change in XRP caused by the + * transactions. + */ +class XRPNotCreated +{ + std::int64_t drops_ = 0; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariant: we cannot remove an account ledger entry + * + * We iterate all account roots that were modified, and ensure that any that + * were present before the transaction was applied continue to be present + * afterwards unless they were explicitly deleted by a successful + * AccountDelete transaction. + */ +class AccountRootsNotDeleted +{ + std::uint32_t accountsDeleted_ = 0; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariant: a deleted account must not have any objects left + * + * We iterate all deleted account roots, and ensure that there are no + * objects left that are directly accessible with that account's ID. + * + * There should only be one deleted account, but that's checked by + * AccountRootsNotDeleted. This invariant will handle multiple deleted account + * roots without a problem. + */ +class AccountRootsDeletedClean +{ + // Pair is . Before is used for most of the checks, so that + // if, for example, an object ID field is cleared, but the object is not + // deleted, it can still be found. After is used specifically for any checks + // that are expected as part of the deletion, such as zeroing out the + // balance. + std::vector, std::shared_ptr>> accountsDeleted_; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariant: An account XRP balance must be in XRP and take a value + * between 0 and INITIAL_XRP drops, inclusive. + * + * We iterate all account roots modified by the transaction and ensure that + * their XRP balances are reasonable. + */ +class XRPBalanceChecks +{ + bool bad_ = false; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariant: corresponding modified ledger entries should match in type + * and added entries should be a valid type. + */ +class LedgerEntryTypesMatch +{ + bool typeMismatch_ = false; + bool invalidTypeAdded_ = false; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariant: Trust lines using XRP are not allowed. + * + * We iterate all the trust lines created by this transaction and ensure + * that they are against a valid issuer. + */ +class NoXRPTrustLines +{ + bool xrpTrustLine_ = false; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariant: Trust lines with deep freeze flag are not allowed if normal + * freeze flag is not set. + * + * We iterate all the trust lines created by this transaction and ensure + * that they don't have deep freeze flag set without normal freeze flag set. + */ +class NoDeepFreezeTrustLinesWithoutFreeze +{ + bool deepFreezeWithoutFreeze_ = false; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariant: offers should be for non-negative amounts and must not + * be XRP to XRP. + * + * Examine all offers modified by the transaction and ensure that there are + * no offers which contain negative amounts or which exchange XRP for XRP. + */ +class NoBadOffers +{ + bool bad_ = false; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariant: an escrow entry must take a value between 0 and + * INITIAL_XRP drops exclusive. + */ +class NoZeroEscrow +{ + bool bad_ = false; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariant: a new account root must be the consequence of a payment, + * must have the right starting sequence, and the payment + * may not create more than one new account root. + */ +class ValidNewAccountRoot +{ + std::uint32_t accountsCreated_ = 0; + std::uint32_t accountSeq_ = 0; + bool pseudoAccount_ = false; + std::uint32_t flags_ = 0; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariant: Token holder's trustline balance cannot be negative after + * Clawback. + * + * We iterate all the trust lines affected by this transaction and ensure + * that no more than one trustline is modified, and also holder's balance is + * non-negative. + */ +class ValidClawback +{ + std::uint32_t trustlinesChanged = 0; + std::uint32_t mptokensChanged = 0; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariants: Pseudo-accounts have valid and consistent properties + * + * Pseudo-accounts have certain properties, and some of those properties are + * unique to pseudo-accounts. Check that all pseudo-accounts are following the + * rules, and that only pseudo-accounts look like pseudo-accounts. + * + */ +class ValidPseudoAccounts +{ + std::vector errors_; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariants: Some fields are unmodifiable + * + * Check that any fields specified as unmodifiable are not modified when the + * object is modified. Creation and deletion are ignored. + * + */ +class NoModifiedUnmodifiableFields +{ + // Pair is . + std::set> changedEntries_; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +// additional invariant checks can be declared above and then added to this +// tuple +using InvariantChecks = std::tuple< + TransactionFeeCheck, + AccountRootsNotDeleted, + AccountRootsDeletedClean, + LedgerEntryTypesMatch, + XRPBalanceChecks, + XRPNotCreated, + NoXRPTrustLines, + NoDeepFreezeTrustLinesWithoutFreeze, + TransfersNotFrozen, + NoBadOffers, + NoZeroEscrow, + ValidNewAccountRoot, + ValidNFTokenPage, + NFTokenCountTracking, + ValidClawback, + ValidMPTIssuance, + ValidPermissionedDomain, + ValidPermissionedDEX, + ValidAMM, + NoModifiedUnmodifiableFields, + ValidPseudoAccounts, + ValidLoanBroker, + ValidLoan, + ValidVault>; + +/** + * @brief get a tuple of all invariant checks + * + * @return std::tuple of instances that implement the required invariant check + * methods + * + * @see xrpl::InvariantChecker_PROTOTYPE + */ +inline InvariantChecks +getInvariantChecks() +{ + return InvariantChecks{}; +} + +} // namespace xrpl diff --git a/include/xrpl/tx/invariants/InvariantCheckPrivilege.h b/include/xrpl/tx/invariants/InvariantCheckPrivilege.h new file mode 100644 index 0000000000..161b3572db --- /dev/null +++ b/include/xrpl/tx/invariants/InvariantCheckPrivilege.h @@ -0,0 +1,60 @@ +#pragma once + +#include + +#include + +namespace xrpl { + +/* +assert(enforce) + +There are several asserts (or XRPL_ASSERTs) in invariant check files that check +a variable named `enforce` when an invariant fails. At first glance, those +asserts may look incorrect, but they are not. + +Those asserts take advantage of two facts: +1. `asserts` are not (normally) executed in release builds. +2. Invariants should *never* fail, except in tests that specifically modify + the open ledger to break them. + +This makes `assert(enforce)` sort of a second-layer of invariant enforcement +aimed at _developers_. It's designed to fire if a developer writes code that +violates an invariant, and runs it in unit tests or a develop build that _does +not have the relevant amendments enabled_. It's intentionally a pain in the neck +so that bad code gets caught and fixed as early as possible. +*/ + +enum Privilege { + noPriv = 0x0000, // The transaction can not do any of the enumerated operations + createAcct = 0x0001, // The transaction can create a new ACCOUNT_ROOT object. + createPseudoAcct = 0x0002, // The transaction can create a pseudo account, + // which implies createAcct + mustDeleteAcct = 0x0004, // The transaction must delete an ACCOUNT_ROOT object + mayDeleteAcct = 0x0008, // The transaction may delete an ACCOUNT_ROOT + // object, but does not have to + overrideFreeze = 0x0010, // The transaction can override some freeze rules + changeNFTCounts = 0x0020, // The transaction can mint or burn an NFT + createMPTIssuance = 0x0040, // The transaction can create a new MPT issuance + destroyMPTIssuance = 0x0080, // The transaction can destroy an MPT issuance + mustAuthorizeMPT = 0x0100, // The transaction MUST create or delete an MPT + // object (except by issuer) + mayAuthorizeMPT = 0x0200, // The transaction MAY create or delete an MPT + // object (except by issuer) + mayDeleteMPT = 0x0400, // The transaction MAY delete an MPT object. May not create. + mustModifyVault = 0x0800, // The transaction must modify, delete or create, a vault + mayModifyVault = 0x1000, // The transaction MAY modify, delete or create, a vault +}; + +constexpr Privilege +operator|(Privilege lhs, Privilege rhs) +{ + return safe_cast( + safe_cast>(lhs) | + safe_cast>(rhs)); +} + +bool +hasPrivilege(STTx const& tx, Privilege priv); + +} // namespace xrpl diff --git a/include/xrpl/tx/invariants/LoanInvariant.h b/include/xrpl/tx/invariants/LoanInvariant.h new file mode 100644 index 0000000000..be771cd582 --- /dev/null +++ b/include/xrpl/tx/invariants/LoanInvariant.h @@ -0,0 +1,75 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include +#include + +namespace xrpl { + +/** + * @brief Invariants: Loan brokers are internally consistent + * + * 1. If `LoanBroker.OwnerCount = 0` the `DirectoryNode` will have at most one + * node (the root), which will only hold entries for `RippleState` or + * `MPToken` objects. + * + */ +class ValidLoanBroker +{ + // Not all of these elements will necessarily be populated. Remaining items + // will be looked up as needed. + struct BrokerInfo + { + SLE::const_pointer brokerBefore = nullptr; + // After is used for most of the checks, except + // those that check changed values. + SLE::const_pointer brokerAfter = nullptr; + }; + // Collect all the LoanBrokers found directly or indirectly through + // pseudo-accounts. Key is the brokerID / index. It will be used to find the + // LoanBroker object if brokerBefore and brokerAfter are nullptr + std::map brokers_; + // Collect all the modified trust lines. Their high and low accounts will be + // loaded to look for LoanBroker pseudo-accounts. + std::vector lines_; + // Collect all the modified MPTokens. Their accounts will be loaded to look + // for LoanBroker pseudo-accounts. + std::vector mpts_; + + bool + goodZeroDirectory(ReadView const& view, SLE::const_ref dir, beast::Journal const& j) const; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariants: Loans are internally consistent + * + * 1. If `Loan.PaymentRemaining = 0` then `Loan.PrincipalOutstanding = 0` + * + */ +class ValidLoan +{ + // Pair is . After is used for most of the checks, except + // those that check changed values. + std::vector> loans_; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +} // namespace xrpl diff --git a/include/xrpl/tx/invariants/MPTInvariant.h b/include/xrpl/tx/invariants/MPTInvariant.h new file mode 100644 index 0000000000..b6533c263d --- /dev/null +++ b/include/xrpl/tx/invariants/MPTInvariant.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include +#include +#include + +#include + +namespace xrpl { + +class ValidMPTIssuance +{ + std::uint32_t mptIssuancesCreated_ = 0; + std::uint32_t mptIssuancesDeleted_ = 0; + + std::uint32_t mptokensCreated_ = 0; + std::uint32_t mptokensDeleted_ = 0; + // non-MPT transactions may attempt to create + // MPToken by an issuer + bool mptCreatedByIssuer_ = false; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +} // namespace xrpl diff --git a/include/xrpl/tx/invariants/NFTInvariant.h b/include/xrpl/tx/invariants/NFTInvariant.h new file mode 100644 index 0000000000..8a88ca1c63 --- /dev/null +++ b/include/xrpl/tx/invariants/NFTInvariant.h @@ -0,0 +1,70 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include + +namespace xrpl { + +/** + * @brief Invariant: Validates several invariants for NFToken pages. + * + * The following checks are made: + * - The page is correctly associated with the owner. + * - The page is correctly ordered between the next and previous links. + * - The page contains at least one and no more than 32 NFTokens. + * - The NFTokens on this page do not belong on a lower or higher page. + * - The NFTokens are correctly sorted on the page. + * - Each URI, if present, is not empty. + */ +class ValidNFTokenPage +{ + bool badEntry_ = false; + bool badLink_ = false; + bool badSort_ = false; + bool badURI_ = false; + bool invalidSize_ = false; + bool deletedFinalPage_ = false; + bool deletedLink_ = false; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +/** + * @brief Invariant: Validates counts of NFTokens after all transaction types. + * + * The following checks are made: + * - The number of minted or burned NFTokens can only be changed by + * NFTokenMint or NFTokenBurn transactions. + * - A successful NFTokenMint must increase the number of NFTokens. + * - A failed NFTokenMint must not change the number of minted NFTokens. + * - An NFTokenMint transaction cannot change the number of burned NFTokens. + * - A successful NFTokenBurn must increase the number of burned NFTokens. + * - A failed NFTokenBurn must not change the number of burned NFTokens. + * - An NFTokenBurn transaction cannot change the number of minted NFTokens. + */ +class NFTokenCountTracking +{ + std::uint32_t beforeMintedTotal = 0; + std::uint32_t beforeBurnedTotal = 0; + std::uint32_t afterMintedTotal = 0; + std::uint32_t afterBurnedTotal = 0; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +} // namespace xrpl diff --git a/include/xrpl/tx/invariants/PermissionedDEXInvariant.h b/include/xrpl/tx/invariants/PermissionedDEXInvariant.h new file mode 100644 index 0000000000..b4e06cd212 --- /dev/null +++ b/include/xrpl/tx/invariants/PermissionedDEXInvariant.h @@ -0,0 +1,25 @@ +#pragma once + +#include +#include +#include +#include +#include + +namespace xrpl { + +class ValidPermissionedDEX +{ + bool regularOffers_ = false; + bool badHybrids_ = false; + hash_set domains_; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +} // namespace xrpl diff --git a/include/xrpl/tx/invariants/PermissionedDomainInvariant.h b/include/xrpl/tx/invariants/PermissionedDomainInvariant.h new file mode 100644 index 0000000000..f6c902ecb2 --- /dev/null +++ b/include/xrpl/tx/invariants/PermissionedDomainInvariant.h @@ -0,0 +1,41 @@ +#pragma once + +#include +#include +#include +#include + +#include + +namespace xrpl { + +/** + * @brief Invariants: Permissioned Domains must have some rules and + * AcceptedCredentials must have length between 1 and 10 inclusive. + * + * Since only permissions constitute rules, an empty credentials list + * means that there are no rules and the invariant is violated. + * + * Credentials must be sorted and no duplicates allowed + * + */ +class ValidPermissionedDomain +{ + struct SleStatus + { + std::size_t credentialsSize_{0}; + bool isSorted_ = false; + bool isUnique_ = false; + bool isDelete_ = false; + }; + std::vector sleStatus_; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +} // namespace xrpl diff --git a/include/xrpl/tx/invariants/VaultInvariant.h b/include/xrpl/tx/invariants/VaultInvariant.h new file mode 100644 index 0000000000..ded9e4618b --- /dev/null +++ b/include/xrpl/tx/invariants/VaultInvariant.h @@ -0,0 +1,77 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace xrpl { + +/* + * @brief Invariants: Vault object and MPTokenIssuance for vault shares + * + * - vault deleted and vault created is empty + * - vault created must be linked to pseudo-account for shares and assets + * - vault must have MPTokenIssuance for shares + * - vault without shares outstanding must have no shares + * - loss unrealized does not exceed the difference between assets total and + * assets available + * - assets available do not exceed assets total + * - vault deposit increases assets and share issuance, and adds to: + * total assets, assets available, shares outstanding + * - vault withdrawal and clawback reduce assets and share issuance, and + * subtracts from: total assets, assets available, shares outstanding + * - vault set must not alter the vault assets or shares balance + * - no vault transaction can change loss unrealized (it's updated by loan + * transactions) + * + */ +class ValidVault +{ + Number static constexpr zero{}; + + struct Vault final + { + uint256 key = beast::zero; + Asset asset = {}; + AccountID pseudoId = {}; + AccountID owner = {}; + uint192 shareMPTID = beast::zero; + Number assetsTotal = 0; + Number assetsAvailable = 0; + Number assetsMaximum = 0; + Number lossUnrealized = 0; + + Vault static make(SLE const&); + }; + + struct Shares final + { + MPTIssue share = {}; + std::uint64_t sharesTotal = 0; + std::uint64_t sharesMaximum = 0; + + Shares static make(SLE const&); + }; + + std::vector afterVault_ = {}; + std::vector afterMPTs_ = {}; + std::vector beforeVault_ = {}; + std::vector beforeMPTs_ = {}; + std::unordered_map deltas_ = {}; + +public: + void + visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); + + bool + finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); +}; + +} // namespace xrpl diff --git a/src/libxrpl/tx/ApplyContext.cpp b/src/libxrpl/tx/ApplyContext.cpp index a8eca09ff2..f62c63d1e6 100644 --- a/src/libxrpl/tx/ApplyContext.cpp +++ b/src/libxrpl/tx/ApplyContext.cpp @@ -1,8 +1,9 @@ +#include +// #include #include #include -#include -#include +#include namespace xrpl { diff --git a/src/libxrpl/tx/InvariantCheck.cpp b/src/libxrpl/tx/InvariantCheck.cpp deleted file mode 100644 index b94f11100b..0000000000 --- a/src/libxrpl/tx/InvariantCheck.cpp +++ /dev/null @@ -1,3483 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace xrpl { - -/* -assert(enforce) - -There are several asserts (or XRPL_ASSERTs) in this file that check a variable -named `enforce` when an invariant fails. At first glance, those asserts may look -incorrect, but they are not. - -Those asserts take advantage of two facts: -1. `asserts` are not (normally) executed in release builds. -2. Invariants should *never* fail, except in tests that specifically modify - the open ledger to break them. - -This makes `assert(enforce)` sort of a second-layer of invariant enforcement -aimed at _developers_. It's designed to fire if a developer writes code that -violates an invariant, and runs it in unit tests or a develop build that _does -not have the relevant amendments enabled_. It's intentionally a pain in the neck -so that bad code gets caught and fixed as early as possible. -*/ - -enum Privilege { - noPriv = 0x0000, // The transaction can not do any of the enumerated operations - createAcct = 0x0001, // The transaction can create a new ACCOUNT_ROOT object. - createPseudoAcct = 0x0002, // The transaction can create a pseudo account, - // which implies createAcct - mustDeleteAcct = 0x0004, // The transaction must delete an ACCOUNT_ROOT object - mayDeleteAcct = 0x0008, // The transaction may delete an ACCOUNT_ROOT - // object, but does not have to - overrideFreeze = 0x0010, // The transaction can override some freeze rules - changeNFTCounts = 0x0020, // The transaction can mint or burn an NFT - createMPTIssuance = 0x0040, // The transaction can create a new MPT issuance - destroyMPTIssuance = 0x0080, // The transaction can destroy an MPT issuance - mustAuthorizeMPT = 0x0100, // The transaction MUST create or delete an MPT - // object (except by issuer) - mayAuthorizeMPT = 0x0200, // The transaction MAY create or delete an MPT - // object (except by issuer) - mayDeleteMPT = 0x0400, // The transaction MAY delete an MPT object. May not create. - mustModifyVault = 0x0800, // The transaction must modify, delete or create, a vault - mayModifyVault = 0x1000, // The transaction MAY modify, delete or create, a vault -}; -constexpr Privilege -operator|(Privilege lhs, Privilege rhs) -{ - return safe_cast( - safe_cast>(lhs) | - safe_cast>(rhs)); -} - -#pragma push_macro("TRANSACTION") -#undef TRANSACTION - -#define TRANSACTION(tag, value, name, delegable, amendment, privileges, ...) \ - case tag: { \ - return (privileges) & priv; \ - } - -bool -hasPrivilege(STTx const& tx, Privilege priv) -{ - switch (tx.getTxnType()) - { -#include - - // Deprecated types - default: - return false; - } -}; - -#undef TRANSACTION -#pragma pop_macro("TRANSACTION") - -void -TransactionFeeCheck::visitEntry( - bool, - std::shared_ptr const&, - std::shared_ptr const&) -{ - // nothing to do -} - -bool -TransactionFeeCheck::finalize( - STTx const& tx, - TER const, - XRPAmount const fee, - ReadView const&, - beast::Journal const& j) -{ - // We should never charge a negative fee - if (fee.drops() < 0) - { - JLOG(j.fatal()) << "Invariant failed: fee paid was negative: " << fee.drops(); - return false; - } - - // We should never charge a fee that's greater than or equal to the - // entire XRP supply. - if (fee >= INITIAL_XRP) - { - JLOG(j.fatal()) << "Invariant failed: fee paid exceeds system limit: " << fee.drops(); - return false; - } - - // We should never charge more for a transaction than the transaction - // authorizes. It's possible to charge less in some circumstances. - if (fee > tx.getFieldAmount(sfFee).xrp()) - { - JLOG(j.fatal()) << "Invariant failed: fee paid is " << fee.drops() - << " exceeds fee specified in transaction."; - return false; - } - - return true; -} - -//------------------------------------------------------------------------------ - -void -XRPNotCreated::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - /* We go through all modified ledger entries, looking only at account roots, - * escrow payments, and payment channels. We remove from the total any - * previous XRP values and add to the total any new XRP values. The net - * balance of a payment channel is computed from two fields (amount and - * balance) and deletions are ignored for paychan and escrow because the - * amount fields have not been adjusted for those in the case of deletion. - */ - if (before) - { - switch (before->getType()) - { - case ltACCOUNT_ROOT: - drops_ -= (*before)[sfBalance].xrp().drops(); - break; - case ltPAYCHAN: - drops_ -= ((*before)[sfAmount] - (*before)[sfBalance]).xrp().drops(); - break; - case ltESCROW: - if (isXRP((*before)[sfAmount])) - drops_ -= (*before)[sfAmount].xrp().drops(); - break; - default: - break; - } - } - - if (after) - { - switch (after->getType()) - { - case ltACCOUNT_ROOT: - drops_ += (*after)[sfBalance].xrp().drops(); - break; - case ltPAYCHAN: - if (!isDelete) - drops_ += ((*after)[sfAmount] - (*after)[sfBalance]).xrp().drops(); - break; - case ltESCROW: - if (!isDelete && isXRP((*after)[sfAmount])) - drops_ += (*after)[sfAmount].xrp().drops(); - break; - default: - break; - } - } -} - -bool -XRPNotCreated::finalize( - STTx const& tx, - TER const, - XRPAmount const fee, - ReadView const&, - beast::Journal const& j) -{ - // The net change should never be positive, as this would mean that the - // transaction created XRP out of thin air. That's not possible. - if (drops_ > 0) - { - JLOG(j.fatal()) << "Invariant failed: XRP net change was positive: " << drops_; - return false; - } - - // The negative of the net change should be equal to actual fee charged. - if (-drops_ != fee.drops()) - { - JLOG(j.fatal()) << "Invariant failed: XRP net change of " << drops_ << " doesn't match fee " - << fee.drops(); - return false; - } - - return true; -} - -//------------------------------------------------------------------------------ - -void -XRPBalanceChecks::visitEntry( - bool, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - auto isBad = [](STAmount const& balance) { - if (!balance.native()) - return true; - - auto const drops = balance.xrp(); - - // Can't have more than the number of drops instantiated - // in the genesis ledger. - if (drops > INITIAL_XRP) - return true; - - // Can't have a negative balance (0 is OK) - if (drops < XRPAmount{0}) - return true; - - return false; - }; - - if (before && before->getType() == ltACCOUNT_ROOT) - bad_ |= isBad((*before)[sfBalance]); - - if (after && after->getType() == ltACCOUNT_ROOT) - bad_ |= isBad((*after)[sfBalance]); -} - -bool -XRPBalanceChecks::finalize( - STTx const&, - TER const, - XRPAmount const, - ReadView const&, - beast::Journal const& j) -{ - if (bad_) - { - JLOG(j.fatal()) << "Invariant failed: incorrect account XRP balance"; - return false; - } - - return true; -} - -//------------------------------------------------------------------------------ - -void -NoBadOffers::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - auto isBad = [](STAmount const& pays, STAmount const& gets) { - // An offer should never be negative - if (pays < beast::zero) - return true; - - if (gets < beast::zero) - return true; - - // Can't have an XRP to XRP offer: - return pays.native() && gets.native(); - }; - - if (before && before->getType() == ltOFFER) - bad_ |= isBad((*before)[sfTakerPays], (*before)[sfTakerGets]); - - if (after && after->getType() == ltOFFER) - bad_ |= isBad((*after)[sfTakerPays], (*after)[sfTakerGets]); -} - -bool -NoBadOffers::finalize( - STTx const&, - TER const, - XRPAmount const, - ReadView const&, - beast::Journal const& j) -{ - if (bad_) - { - JLOG(j.fatal()) << "Invariant failed: offer with a bad amount"; - return false; - } - - return true; -} - -//------------------------------------------------------------------------------ - -void -NoZeroEscrow::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - auto isBad = [](STAmount const& amount) { - // XRP case - if (amount.native()) - { - if (amount.xrp() <= XRPAmount{0}) - return true; - - if (amount.xrp() >= INITIAL_XRP) - return true; - } - else - { - // IOU case - if (amount.holds()) - { - if (amount <= beast::zero) - return true; - - if (badCurrency() == amount.getCurrency()) - return true; - } - - // MPT case - if (amount.holds()) - { - if (amount <= beast::zero) - return true; - - if (amount.mpt() > MPTAmount{maxMPTokenAmount}) - return true; // LCOV_EXCL_LINE - } - } - return false; - }; - - if (before && before->getType() == ltESCROW) - bad_ |= isBad((*before)[sfAmount]); - - if (after && after->getType() == ltESCROW) - bad_ |= isBad((*after)[sfAmount]); - - auto checkAmount = [this](std::int64_t amount) { - if (amount > maxMPTokenAmount || amount < 0) - bad_ = true; - }; - - if (after && after->getType() == ltMPTOKEN_ISSUANCE) - { - auto const outstanding = (*after)[sfOutstandingAmount]; - checkAmount(outstanding); - if (auto const locked = (*after)[~sfLockedAmount]) - { - checkAmount(*locked); - bad_ = outstanding < *locked; - } - } - - if (after && after->getType() == ltMPTOKEN) - { - auto const mptAmount = (*after)[sfMPTAmount]; - checkAmount(mptAmount); - if (auto const locked = (*after)[~sfLockedAmount]) - { - checkAmount(*locked); - } - } -} - -bool -NoZeroEscrow::finalize( - STTx const& txn, - TER const, - XRPAmount const, - ReadView const& rv, - beast::Journal const& j) -{ - if (bad_) - { - JLOG(j.fatal()) << "Invariant failed: escrow specifies invalid amount"; - return false; - } - - return true; -} - -//------------------------------------------------------------------------------ - -void -AccountRootsNotDeleted::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const&) -{ - if (isDelete && before && before->getType() == ltACCOUNT_ROOT) - accountsDeleted_++; -} - -bool -AccountRootsNotDeleted::finalize( - STTx const& tx, - TER const result, - XRPAmount const, - ReadView const&, - beast::Journal const& j) -{ - // AMM account root can be deleted as the result of AMM withdraw/delete - // transaction when the total AMM LP Tokens balance goes to 0. - // A successful AccountDelete or AMMDelete MUST delete exactly - // one account root. - if (hasPrivilege(tx, mustDeleteAcct) && result == tesSUCCESS) - { - if (accountsDeleted_ == 1) - return true; - - if (accountsDeleted_ == 0) - JLOG(j.fatal()) << "Invariant failed: account deletion " - "succeeded without deleting an account"; - else - JLOG(j.fatal()) << "Invariant failed: account deletion " - "succeeded but deleted multiple accounts!"; - return false; - } - - // A successful AMMWithdraw/AMMClawback MAY delete one account root - // when the total AMM LP Tokens balance goes to 0. Not every AMM withdraw - // deletes the AMM account, accountsDeleted_ is set if it is deleted. - if (hasPrivilege(tx, mayDeleteAcct) && result == tesSUCCESS && accountsDeleted_ == 1) - return true; - - if (accountsDeleted_ == 0) - return true; - - JLOG(j.fatal()) << "Invariant failed: an account root was deleted"; - return false; -} - -//------------------------------------------------------------------------------ - -void -AccountRootsDeletedClean::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (isDelete && before && before->getType() == ltACCOUNT_ROOT) - accountsDeleted_.emplace_back(before, after); -} - -bool -AccountRootsDeletedClean::finalize( - STTx const& tx, - TER const result, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - // Always check for objects in the ledger, but to prevent differing - // transaction processing results, however unlikely, only fail if the - // feature is enabled. Enabled, or not, though, a fatal-level message will - // be logged - [[maybe_unused]] bool const enforce = view.rules().enabled(featureInvariantsV1_1) || - view.rules().enabled(featureSingleAssetVault) || - view.rules().enabled(featureLendingProtocol); - - auto const objectExists = [&view, enforce, &j](auto const& keylet) { - (void)enforce; - if (auto const sle = view.read(keylet)) - { - // Finding the object is bad - auto const typeName = [&sle]() { - auto item = LedgerFormats::getInstance().findByType(sle->getType()); - - if (item != nullptr) - return item->getName(); - return std::to_string(sle->getType()); - }(); - - JLOG(j.fatal()) << "Invariant failed: account deletion left behind a " << typeName - << " object"; - // The comment above starting with "assert(enforce)" explains this - // assert. - XRPL_ASSERT( - enforce, - "xrpl::AccountRootsDeletedClean::finalize::objectExists : " - "account deletion left no objects behind"); - return true; - } - return false; - }; - - for (auto const& [before, after] : accountsDeleted_) - { - auto const accountID = before->getAccountID(sfAccount); - // An account should not be deleted with a balance - if (after->at(sfBalance) != beast::zero) - { - JLOG(j.fatal()) << "Invariant failed: account deletion left " - "behind a non-zero balance"; - XRPL_ASSERT( - enforce, - "xrpl::AccountRootsDeletedClean::finalize : " - "deleted account has zero balance"); - if (enforce) - return false; - } - // An account should not be deleted with a non-zero owner count - if (after->at(sfOwnerCount) != 0) - { - JLOG(j.fatal()) << "Invariant failed: account deletion left " - "behind a non-zero owner count"; - XRPL_ASSERT( - enforce, - "xrpl::AccountRootsDeletedClean::finalize : " - "deleted account has zero owner count"); - if (enforce) - return false; - } - // Simple types - for (auto const& [keyletfunc, _, __] : directAccountKeylets) - { - if (objectExists(std::invoke(keyletfunc, accountID)) && enforce) - return false; - } - - { - // NFT pages. nftpage_min and nftpage_max were already explicitly - // checked above as entries in directAccountKeylets. This uses - // view.succ() to check for any NFT pages in between the two - // endpoints. - Keylet const first = keylet::nftpage_min(accountID); - Keylet const last = keylet::nftpage_max(accountID); - - std::optional key = view.succ(first.key, last.key.next()); - - // current page - if (key && objectExists(Keylet{ltNFTOKEN_PAGE, *key}) && enforce) - return false; - } - - // If the account is a pseudo account, then the linked object must - // also be deleted. e.g. AMM, Vault, etc. - for (auto const& field : getPseudoAccountFields()) - { - if (before->isFieldPresent(*field)) - { - auto const key = before->getFieldH256(*field); - if (objectExists(keylet::unchecked(key)) && enforce) - return false; - } - } - } - - return true; -} - -//------------------------------------------------------------------------------ - -void -LedgerEntryTypesMatch::visitEntry( - bool, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (before && after && before->getType() != after->getType()) - typeMismatch_ = true; - - if (after) - { -#pragma push_macro("LEDGER_ENTRY") -#undef LEDGER_ENTRY - -#define LEDGER_ENTRY(tag, ...) case tag: - - switch (after->getType()) - { -#include - - break; - default: - invalidTypeAdded_ = true; - break; - } - -#undef LEDGER_ENTRY -#pragma pop_macro("LEDGER_ENTRY") - } -} - -bool -LedgerEntryTypesMatch::finalize( - STTx const&, - TER const, - XRPAmount const, - ReadView const&, - beast::Journal const& j) -{ - if ((!typeMismatch_) && (!invalidTypeAdded_)) - return true; - - if (typeMismatch_) - { - JLOG(j.fatal()) << "Invariant failed: ledger entry type mismatch"; - } - - if (invalidTypeAdded_) - { - JLOG(j.fatal()) << "Invariant failed: invalid ledger entry type added"; - } - - return false; -} - -//------------------------------------------------------------------------------ - -void -NoXRPTrustLines::visitEntry( - bool, - std::shared_ptr const&, - std::shared_ptr const& after) -{ - if (after && after->getType() == ltRIPPLE_STATE) - { - // checking the issue directly here instead of - // relying on .native() just in case native somehow - // were systematically incorrect - xrpTrustLine_ = after->getFieldAmount(sfLowLimit).issue() == xrpIssue() || - after->getFieldAmount(sfHighLimit).issue() == xrpIssue(); - } -} - -bool -NoXRPTrustLines::finalize( - STTx const&, - TER const, - XRPAmount const, - ReadView const&, - beast::Journal const& j) -{ - if (!xrpTrustLine_) - return true; - - JLOG(j.fatal()) << "Invariant failed: an XRP trust line was created"; - return false; -} - -//------------------------------------------------------------------------------ - -void -NoDeepFreezeTrustLinesWithoutFreeze::visitEntry( - bool, - std::shared_ptr const&, - std::shared_ptr const& after) -{ - if (after && after->getType() == ltRIPPLE_STATE) - { - std::uint32_t const uFlags = after->getFieldU32(sfFlags); - bool const lowFreeze = uFlags & lsfLowFreeze; - bool const lowDeepFreeze = uFlags & lsfLowDeepFreeze; - - bool const highFreeze = uFlags & lsfHighFreeze; - bool const highDeepFreeze = uFlags & lsfHighDeepFreeze; - - deepFreezeWithoutFreeze_ = (lowDeepFreeze && !lowFreeze) || (highDeepFreeze && !highFreeze); - } -} - -bool -NoDeepFreezeTrustLinesWithoutFreeze::finalize( - STTx const&, - TER const, - XRPAmount const, - ReadView const&, - beast::Journal const& j) -{ - if (!deepFreezeWithoutFreeze_) - return true; - - JLOG(j.fatal()) << "Invariant failed: a trust line with deep freeze flag " - "without normal freeze was created"; - return false; -} - -//------------------------------------------------------------------------------ - -void -TransfersNotFrozen::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - /* - * A trust line freeze state alone doesn't determine if a transfer is - * frozen. The transfer must be examined "end-to-end" because both sides of - * the transfer may have different freeze states and freeze impact depends - * on the transfer direction. This is why first we need to track the - * transfers using IssuerChanges senders/receivers. - * - * Only in validateIssuerChanges, after we collected all changes can we - * determine if the transfer is valid. - */ - if (!isValidEntry(before, after)) - { - return; - } - - auto const balanceChange = calculateBalanceChange(before, after, isDelete); - if (balanceChange.signum() == 0) - { - return; - } - - recordBalanceChanges(after, balanceChange); -} - -bool -TransfersNotFrozen::finalize( - STTx const& tx, - TER const ter, - XRPAmount const fee, - ReadView const& view, - beast::Journal const& j) -{ - /* - * We check this invariant regardless of deep freeze amendment status, - * allowing for detection and logging of potential issues even when the - * amendment is disabled. - * - * If an exploit that allows moving frozen assets is discovered, - * we can alert operators who monitor fatal messages and trigger assert in - * debug builds for an early warning. - * - * In an unlikely event that an exploit is found, this early detection - * enables encouraging the UNL to expedite deep freeze amendment activation - * or deploy hotfixes via new amendments. In case of a new amendment, we'd - * only have to change this line setting 'enforce' variable. - * enforce = view.rules().enabled(featureDeepFreeze) || - * view.rules().enabled(fixFreezeExploit); - */ - [[maybe_unused]] bool const enforce = view.rules().enabled(featureDeepFreeze); - - for (auto const& [issue, changes] : balanceChanges_) - { - auto const issuerSle = findIssuer(issue.account, view); - // It should be impossible for the issuer to not be found, but check - // just in case so rippled doesn't crash in release. - if (!issuerSle) - { - // The comment above starting with "assert(enforce)" explains this - // assert. - XRPL_ASSERT( - enforce, - "xrpl::TransfersNotFrozen::finalize : enforce " - "invariant."); - if (enforce) - { - return false; - } - continue; - } - - if (!validateIssuerChanges(issuerSle, changes, tx, j, enforce)) - { - return false; - } - } - - return true; -} - -bool -TransfersNotFrozen::isValidEntry( - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - // `after` can never be null, even if the trust line is deleted. - XRPL_ASSERT(after, "xrpl::TransfersNotFrozen::isValidEntry : valid after."); - if (!after) - { - return false; - } - - if (after->getType() == ltACCOUNT_ROOT) - { - possibleIssuers_.emplace(after->at(sfAccount), after); - return false; - } - - /* While LedgerEntryTypesMatch invariant also checks types, all invariants - * are processed regardless of previous failures. - * - * This type check is still necessary here because it prevents potential - * issues in subsequent processing. - */ - return after->getType() == ltRIPPLE_STATE && (!before || before->getType() == ltRIPPLE_STATE); -} - -STAmount -TransfersNotFrozen::calculateBalanceChange( - std::shared_ptr const& before, - std::shared_ptr const& after, - bool isDelete) -{ - auto const getBalance = [](auto const& line, auto const& other, bool zero) { - STAmount amt = line ? line->at(sfBalance) : other->at(sfBalance).zeroed(); - return zero ? amt.zeroed() : amt; - }; - - /* Trust lines can be created dynamically by other transactions such as - * Payment and OfferCreate that cross offers. Such trust line won't be - * created frozen, but the sender might be, so the starting balance must be - * treated as zero. - */ - auto const balanceBefore = getBalance(before, after, false); - - /* Same as above, trust lines can be dynamically deleted, and for frozen - * trust lines, payments not involving the issuer must be blocked. This is - * achieved by treating the final balance as zero when isDelete=true to - * ensure frozen line restrictions are enforced even during deletion. - */ - auto const balanceAfter = getBalance(after, before, isDelete); - - return balanceAfter - balanceBefore; -} - -void -TransfersNotFrozen::recordBalance(Issue const& issue, BalanceChange change) -{ - XRPL_ASSERT( - change.balanceChangeSign, - "xrpl::TransfersNotFrozen::recordBalance : valid trustline " - "balance sign."); - auto& changes = balanceChanges_[issue]; - if (change.balanceChangeSign < 0) - changes.senders.emplace_back(std::move(change)); - else - changes.receivers.emplace_back(std::move(change)); -} - -void -TransfersNotFrozen::recordBalanceChanges( - std::shared_ptr const& after, - STAmount const& balanceChange) -{ - auto const balanceChangeSign = balanceChange.signum(); - auto const currency = after->at(sfBalance).getCurrency(); - - // Change from low account's perspective, which is trust line default - recordBalance({currency, after->at(sfHighLimit).getIssuer()}, {after, balanceChangeSign}); - - // Change from high account's perspective, which reverses the sign. - recordBalance({currency, after->at(sfLowLimit).getIssuer()}, {after, -balanceChangeSign}); -} - -std::shared_ptr -TransfersNotFrozen::findIssuer(AccountID const& issuerID, ReadView const& view) -{ - if (auto it = possibleIssuers_.find(issuerID); it != possibleIssuers_.end()) - { - return it->second; - } - - return view.read(keylet::account(issuerID)); -} - -bool -TransfersNotFrozen::validateIssuerChanges( - std::shared_ptr const& issuer, - IssuerChanges const& changes, - STTx const& tx, - beast::Journal const& j, - bool enforce) -{ - if (!issuer) - { - return false; - } - - bool const globalFreeze = issuer->isFlag(lsfGlobalFreeze); - if (changes.receivers.empty() || changes.senders.empty()) - { - /* If there are no receivers, then the holder(s) are returning - * their tokens to the issuer. Likewise, if there are no - * senders, then the issuer is issuing tokens to the holder(s). - * This is allowed regardless of the issuer's freeze flags. (The - * holder may have contradicting freeze flags, but that will be - * checked when the holder is treated as issuer.) - */ - return true; - } - - for (auto const& actors : {changes.senders, changes.receivers}) - { - for (auto const& change : actors) - { - bool const high = change.line->at(sfLowLimit).getIssuer() == issuer->at(sfAccount); - - if (!validateFrozenState(change, high, tx, j, enforce, globalFreeze)) - { - return false; - } - } - } - return true; -} - -bool -TransfersNotFrozen::validateFrozenState( - BalanceChange const& change, - bool high, - STTx const& tx, - beast::Journal const& j, - bool enforce, - bool globalFreeze) -{ - bool const freeze = - change.balanceChangeSign < 0 && change.line->isFlag(high ? lsfLowFreeze : lsfHighFreeze); - bool const deepFreeze = change.line->isFlag(high ? lsfLowDeepFreeze : lsfHighDeepFreeze); - bool const frozen = globalFreeze || deepFreeze || freeze; - - bool const isAMMLine = change.line->isFlag(lsfAMMNode); - - if (!frozen) - { - return true; - } - - // AMMClawbacks are allowed to override some freeze rules - if ((!isAMMLine || globalFreeze) && hasPrivilege(tx, overrideFreeze)) - { - JLOG(j.debug()) << "Invariant check allowing funds to be moved " - << (change.balanceChangeSign > 0 ? "to" : "from") - << " a frozen trustline for AMMClawback " << tx.getTransactionID(); - return true; - } - - JLOG(j.fatal()) << "Invariant failed: Attempting to move frozen funds for " - << tx.getTransactionID(); - // The comment above starting with "assert(enforce)" explains this assert. - XRPL_ASSERT( - enforce, - "xrpl::TransfersNotFrozen::validateFrozenState : enforce " - "invariant."); - - if (enforce) - { - return false; - } - - return true; -} - -//------------------------------------------------------------------------------ - -void -ValidNewAccountRoot::visitEntry( - bool, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (!before && after->getType() == ltACCOUNT_ROOT) - { - accountsCreated_++; - accountSeq_ = (*after)[sfSequence]; - pseudoAccount_ = isPseudoAccount(after); - flags_ = after->getFlags(); - } -} - -bool -ValidNewAccountRoot::finalize( - STTx const& tx, - TER const result, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - if (accountsCreated_ == 0) - return true; - - if (accountsCreated_ > 1) - { - JLOG(j.fatal()) << "Invariant failed: multiple accounts " - "created in a single transaction"; - return false; - } - - // From this point on we know exactly one account was created. - if (hasPrivilege(tx, createAcct | createPseudoAcct) && result == tesSUCCESS) - { - bool const pseudoAccount = - (pseudoAccount_ && - (view.rules().enabled(featureSingleAssetVault) || - view.rules().enabled(featureLendingProtocol))); - - if (pseudoAccount && !hasPrivilege(tx, createPseudoAcct)) - { - JLOG(j.fatal()) << "Invariant failed: pseudo-account created by a " - "wrong transaction type"; - return false; - } - - std::uint32_t const startingSeq = pseudoAccount ? 0 : view.seq(); - - if (accountSeq_ != startingSeq) - { - JLOG(j.fatal()) << "Invariant failed: account created with " - "wrong starting sequence number"; - return false; - } - - if (pseudoAccount) - { - std::uint32_t const expected = (lsfDisableMaster | lsfDefaultRipple | lsfDepositAuth); - if (flags_ != expected) - { - JLOG(j.fatal()) << "Invariant failed: pseudo-account created with " - "wrong flags"; - return false; - } - } - - return true; - } - - JLOG(j.fatal()) << "Invariant failed: account root created illegally"; - return false; -} // namespace xrpl - -//------------------------------------------------------------------------------ - -void -ValidNFTokenPage::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - static constexpr uint256 const& pageBits = nft::pageMask; - static constexpr uint256 const accountBits = ~pageBits; - - if ((before && before->getType() != ltNFTOKEN_PAGE) || - (after && after->getType() != ltNFTOKEN_PAGE)) - return; - - auto check = [this, isDelete](std::shared_ptr const& sle) { - uint256 const account = sle->key() & accountBits; - uint256 const hiLimit = sle->key() & pageBits; - std::optional const prev = (*sle)[~sfPreviousPageMin]; - - // Make sure that any page links... - // 1. Are properly associated with the owning account and - // 2. The page is correctly ordered between links. - if (prev) - { - if (account != (*prev & accountBits)) - badLink_ = true; - - if (hiLimit <= (*prev & pageBits)) - badLink_ = true; - } - - if (auto const next = (*sle)[~sfNextPageMin]) - { - if (account != (*next & accountBits)) - badLink_ = true; - - if (hiLimit >= (*next & pageBits)) - badLink_ = true; - } - - { - auto const& nftokens = sle->getFieldArray(sfNFTokens); - - // An NFTokenPage should never contain too many tokens or be empty. - if (std::size_t const nftokenCount = nftokens.size(); - (!isDelete && nftokenCount == 0) || nftokenCount > dirMaxTokensPerPage) - invalidSize_ = true; - - // If prev is valid, use it to establish a lower bound for - // page entries. If prev is not valid the lower bound is zero. - uint256 const loLimit = prev ? *prev & pageBits : uint256(beast::zero); - - // Also verify that all NFTokenIDs in the page are sorted. - uint256 loCmp = loLimit; - for (auto const& obj : nftokens) - { - uint256 const tokenID = obj[sfNFTokenID]; - if (!nft::compareTokens(loCmp, tokenID)) - badSort_ = true; - loCmp = tokenID; - - // None of the NFTs on this page should belong on lower or - // higher pages. - if (uint256 const tokenPageBits = tokenID & pageBits; - tokenPageBits < loLimit || tokenPageBits >= hiLimit) - badEntry_ = true; - - if (auto uri = obj[~sfURI]; uri && uri->empty()) - badURI_ = true; - } - } - }; - - if (before) - { - check(before); - - // While an account's NFToken directory contains any NFTokens, the last - // NFTokenPage (with 96 bits of 1 in the low part of the index) should - // never be deleted. - if (isDelete && (before->key() & nft::pageMask) == nft::pageMask && - before->isFieldPresent(sfPreviousPageMin)) - { - deletedFinalPage_ = true; - } - } - - if (after) - check(after); - - if (!isDelete && before && after) - { - // If the NFTokenPage - // 1. Has a NextMinPage field in before, but loses it in after, and - // 2. This is not the last page in the directory - // Then we have identified a corruption in the links between the - // NFToken pages in the NFToken directory. - if ((before->key() & nft::pageMask) != nft::pageMask && - before->isFieldPresent(sfNextPageMin) && !after->isFieldPresent(sfNextPageMin)) - { - deletedLink_ = true; - } - } -} - -bool -ValidNFTokenPage::finalize( - STTx const& tx, - TER const result, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - if (badLink_) - { - JLOG(j.fatal()) << "Invariant failed: NFT page is improperly linked."; - return false; - } - - if (badEntry_) - { - JLOG(j.fatal()) << "Invariant failed: NFT found in incorrect page."; - return false; - } - - if (badSort_) - { - JLOG(j.fatal()) << "Invariant failed: NFTs on page are not sorted."; - return false; - } - - if (badURI_) - { - JLOG(j.fatal()) << "Invariant failed: NFT contains empty URI."; - return false; - } - - if (invalidSize_) - { - JLOG(j.fatal()) << "Invariant failed: NFT page has invalid size."; - return false; - } - - if (view.rules().enabled(fixNFTokenPageLinks)) - { - if (deletedFinalPage_) - { - JLOG(j.fatal()) << "Invariant failed: Last NFT page deleted with " - "non-empty directory."; - return false; - } - if (deletedLink_) - { - JLOG(j.fatal()) << "Invariant failed: Lost NextMinPage link."; - return false; - } - } - - return true; -} - -//------------------------------------------------------------------------------ -void -NFTokenCountTracking::visitEntry( - bool, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (before && before->getType() == ltACCOUNT_ROOT) - { - beforeMintedTotal += (*before)[~sfMintedNFTokens].value_or(0); - beforeBurnedTotal += (*before)[~sfBurnedNFTokens].value_or(0); - } - - if (after && after->getType() == ltACCOUNT_ROOT) - { - afterMintedTotal += (*after)[~sfMintedNFTokens].value_or(0); - afterBurnedTotal += (*after)[~sfBurnedNFTokens].value_or(0); - } -} - -bool -NFTokenCountTracking::finalize( - STTx const& tx, - TER const result, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - if (!hasPrivilege(tx, changeNFTCounts)) - { - if (beforeMintedTotal != afterMintedTotal) - { - JLOG(j.fatal()) << "Invariant failed: the number of minted tokens " - "changed without a mint transaction!"; - return false; - } - - if (beforeBurnedTotal != afterBurnedTotal) - { - JLOG(j.fatal()) << "Invariant failed: the number of burned tokens " - "changed without a burn transaction!"; - return false; - } - - return true; - } - - if (tx.getTxnType() == ttNFTOKEN_MINT) - { - if (result == tesSUCCESS && beforeMintedTotal >= afterMintedTotal) - { - JLOG(j.fatal()) << "Invariant failed: successful minting didn't increase " - "the number of minted tokens."; - return false; - } - - if (result != tesSUCCESS && beforeMintedTotal != afterMintedTotal) - { - JLOG(j.fatal()) << "Invariant failed: failed minting changed the " - "number of minted tokens."; - return false; - } - - if (beforeBurnedTotal != afterBurnedTotal) - { - JLOG(j.fatal()) << "Invariant failed: minting changed the number of " - "burned tokens."; - return false; - } - } - - if (tx.getTxnType() == ttNFTOKEN_BURN) - { - if (result == tesSUCCESS) - { - if (beforeBurnedTotal >= afterBurnedTotal) - { - JLOG(j.fatal()) << "Invariant failed: successful burning didn't increase " - "the number of burned tokens."; - return false; - } - } - - if (result != tesSUCCESS && beforeBurnedTotal != afterBurnedTotal) - { - JLOG(j.fatal()) << "Invariant failed: failed burning changed the " - "number of burned tokens."; - return false; - } - - if (beforeMintedTotal != afterMintedTotal) - { - JLOG(j.fatal()) << "Invariant failed: burning changed the number of " - "minted tokens."; - return false; - } - } - - return true; -} - -//------------------------------------------------------------------------------ - -void -ValidClawback::visitEntry( - bool, - std::shared_ptr const& before, - std::shared_ptr const&) -{ - if (before && before->getType() == ltRIPPLE_STATE) - trustlinesChanged++; - - if (before && before->getType() == ltMPTOKEN) - mptokensChanged++; -} - -bool -ValidClawback::finalize( - STTx const& tx, - TER const result, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - if (tx.getTxnType() != ttCLAWBACK) - return true; - - if (result == tesSUCCESS) - { - if (trustlinesChanged > 1) - { - JLOG(j.fatal()) << "Invariant failed: more than one trustline changed."; - return false; - } - - if (mptokensChanged > 1) - { - JLOG(j.fatal()) << "Invariant failed: more than one mptokens changed."; - return false; - } - - if (trustlinesChanged == 1) - { - AccountID const issuer = tx.getAccountID(sfAccount); - STAmount const& amount = tx.getFieldAmount(sfAmount); - AccountID const& holder = amount.getIssuer(); - STAmount const holderBalance = - accountHolds(view, holder, amount.getCurrency(), issuer, fhIGNORE_FREEZE, j); - - if (holderBalance.signum() < 0) - { - JLOG(j.fatal()) << "Invariant failed: trustline balance is negative"; - return false; - } - } - } - else - { - if (trustlinesChanged != 0) - { - JLOG(j.fatal()) << "Invariant failed: some trustlines were changed " - "despite failure of the transaction."; - return false; - } - - if (mptokensChanged != 0) - { - JLOG(j.fatal()) << "Invariant failed: some mptokens were changed " - "despite failure of the transaction."; - return false; - } - } - - return true; -} - -//------------------------------------------------------------------------------ - -void -ValidMPTIssuance::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (after && after->getType() == ltMPTOKEN_ISSUANCE) - { - if (isDelete) - mptIssuancesDeleted_++; - else if (!before) - mptIssuancesCreated_++; - } - - if (after && after->getType() == ltMPTOKEN) - { - if (isDelete) - mptokensDeleted_++; - else if (!before) - { - mptokensCreated_++; - MPTIssue const mptIssue{after->at(sfMPTokenIssuanceID)}; - if (mptIssue.getIssuer() == after->at(sfAccount)) - mptCreatedByIssuer_ = true; - } - } -} - -bool -ValidMPTIssuance::finalize( - STTx const& tx, - TER const result, - XRPAmount const _fee, - ReadView const& view, - beast::Journal const& j) -{ - if (result == tesSUCCESS) - { - auto const& rules = view.rules(); - [[maybe_unused]] - bool enforceCreatedByIssuer = - rules.enabled(featureSingleAssetVault) || rules.enabled(featureLendingProtocol); - if (mptCreatedByIssuer_) - { - JLOG(j.fatal()) << "Invariant failed: MPToken created for the MPT issuer"; - // The comment above starting with "assert(enforce)" explains this - // assert. - XRPL_ASSERT_PARTS( - enforceCreatedByIssuer, "xrpl::ValidMPTIssuance::finalize", "no issuer MPToken"); - if (enforceCreatedByIssuer) - return false; - } - - auto const txnType = tx.getTxnType(); - if (hasPrivilege(tx, createMPTIssuance)) - { - if (mptIssuancesCreated_ == 0) - { - JLOG(j.fatal()) << "Invariant failed: transaction " - "succeeded without creating a MPT issuance"; - } - else if (mptIssuancesDeleted_ != 0) - { - JLOG(j.fatal()) << "Invariant failed: transaction " - "succeeded while removing MPT issuances"; - } - else if (mptIssuancesCreated_ > 1) - { - JLOG(j.fatal()) << "Invariant failed: transaction " - "succeeded but created multiple issuances"; - } - - return mptIssuancesCreated_ == 1 && mptIssuancesDeleted_ == 0; - } - - if (hasPrivilege(tx, destroyMPTIssuance)) - { - if (mptIssuancesDeleted_ == 0) - { - JLOG(j.fatal()) << "Invariant failed: MPT issuance deletion " - "succeeded without removing a MPT issuance"; - } - else if (mptIssuancesCreated_ > 0) - { - JLOG(j.fatal()) << "Invariant failed: MPT issuance deletion " - "succeeded while creating MPT issuances"; - } - else if (mptIssuancesDeleted_ > 1) - { - JLOG(j.fatal()) << "Invariant failed: MPT issuance deletion " - "succeeded but deleted multiple issuances"; - } - - return mptIssuancesCreated_ == 0 && mptIssuancesDeleted_ == 1; - } - - bool const lendingProtocolEnabled = view.rules().enabled(featureLendingProtocol); - // ttESCROW_FINISH may authorize an MPT, but it can't have the - // mayAuthorizeMPT privilege, because that may cause - // non-amendment-gated side effects. - bool const enforceEscrowFinish = (txnType == ttESCROW_FINISH) && - (view.rules().enabled(featureSingleAssetVault) || lendingProtocolEnabled); - if (hasPrivilege(tx, mustAuthorizeMPT | mayAuthorizeMPT) || enforceEscrowFinish) - { - bool const submittedByIssuer = tx.isFieldPresent(sfHolder); - - if (mptIssuancesCreated_ > 0) - { - JLOG(j.fatal()) << "Invariant failed: MPT authorize " - "succeeded but created MPT issuances"; - return false; - } - else if (mptIssuancesDeleted_ > 0) - { - JLOG(j.fatal()) << "Invariant failed: MPT authorize " - "succeeded but deleted issuances"; - return false; - } - else if (lendingProtocolEnabled && mptokensCreated_ + mptokensDeleted_ > 1) - { - JLOG(j.fatal()) << "Invariant failed: MPT authorize succeeded " - "but created/deleted bad number mptokens"; - return false; - } - else if (submittedByIssuer && (mptokensCreated_ > 0 || mptokensDeleted_ > 0)) - { - JLOG(j.fatal()) << "Invariant failed: MPT authorize submitted by issuer " - "succeeded but created/deleted mptokens"; - return false; - } - else if ( - !submittedByIssuer && hasPrivilege(tx, mustAuthorizeMPT) && - (mptokensCreated_ + mptokensDeleted_ != 1)) - { - // if the holder submitted this tx, then a mptoken must be - // either created or deleted. - JLOG(j.fatal()) << "Invariant failed: MPT authorize submitted by holder " - "succeeded but created/deleted bad number of mptokens"; - return false; - } - - return true; - } - if (txnType == ttESCROW_FINISH) - { - // ttESCROW_FINISH may authorize an MPT, but it can't have the - // mayAuthorizeMPT privilege, because that may cause - // non-amendment-gated side effects. - XRPL_ASSERT_PARTS( - !enforceEscrowFinish, "xrpl::ValidMPTIssuance::finalize", "not escrow finish tx"); - return true; - } - - if (hasPrivilege(tx, mayDeleteMPT) && mptokensDeleted_ == 1 && mptokensCreated_ == 0 && - mptIssuancesCreated_ == 0 && mptIssuancesDeleted_ == 0) - return true; - } - - if (mptIssuancesCreated_ != 0) - { - JLOG(j.fatal()) << "Invariant failed: a MPT issuance was created"; - } - else if (mptIssuancesDeleted_ != 0) - { - JLOG(j.fatal()) << "Invariant failed: a MPT issuance was deleted"; - } - else if (mptokensCreated_ != 0) - { - JLOG(j.fatal()) << "Invariant failed: a MPToken was created"; - } - else if (mptokensDeleted_ != 0) - { - JLOG(j.fatal()) << "Invariant failed: a MPToken was deleted"; - } - - return mptIssuancesCreated_ == 0 && mptIssuancesDeleted_ == 0 && mptokensCreated_ == 0 && - mptokensDeleted_ == 0; -} - -//------------------------------------------------------------------------------ - -void -ValidPermissionedDomain::visitEntry( - bool isDel, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (before && before->getType() != ltPERMISSIONED_DOMAIN) - return; - if (after && after->getType() != ltPERMISSIONED_DOMAIN) - return; - - auto check = [isDel](std::vector& sleStatus, std::shared_ptr const& sle) { - auto const& credentials = sle->getFieldArray(sfAcceptedCredentials); - auto const sorted = credentials::makeSorted(credentials); - - SleStatus ss{credentials.size(), false, !sorted.empty(), isDel}; - - // If array have duplicates then all the other checks are invalid - if (ss.isUnique_) - { - unsigned i = 0; - for (auto const& cred : sorted) - { - auto const& credTx = credentials[i++]; - ss.isSorted_ = - (cred.first == credTx[sfIssuer]) && (cred.second == credTx[sfCredentialType]); - if (!ss.isSorted_) - break; - } - } - sleStatus.emplace_back(std::move(ss)); - }; - - if (after) - check(sleStatus_, after); -} - -bool -ValidPermissionedDomain::finalize( - STTx const& tx, - TER const result, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - auto check = [](SleStatus const& sleStatus, beast::Journal const& j) { - if (!sleStatus.credentialsSize_) - { - JLOG(j.fatal()) << "Invariant failed: permissioned domain with " - "no rules."; - return false; - } - - if (sleStatus.credentialsSize_ > maxPermissionedDomainCredentialsArraySize) - { - JLOG(j.fatal()) << "Invariant failed: permissioned domain bad " - "credentials size " - << sleStatus.credentialsSize_; - return false; - } - - if (!sleStatus.isUnique_) - { - JLOG(j.fatal()) << "Invariant failed: permissioned domain credentials " - "aren't unique"; - return false; - } - - if (!sleStatus.isSorted_) - { - JLOG(j.fatal()) << "Invariant failed: permissioned domain credentials " - "aren't sorted"; - return false; - } - - return true; - }; - - if (view.rules().enabled(fixPermissionedDomainInvariant)) - { - // No permissioned domains should be affected if the transaction failed - if (result != tesSUCCESS) - // If nothing changed, all is good. If there were changes, that's - // bad. - return sleStatus_.empty(); - - if (sleStatus_.size() > 1) - { - JLOG(j.fatal()) << "Invariant failed: transaction affected more " - "than 1 permissioned domain entry."; - return false; - } - - switch (tx.getTxnType()) - { - case ttPERMISSIONED_DOMAIN_SET: { - if (sleStatus_.empty()) - { - JLOG(j.fatal()) << "Invariant failed: no domain objects affected by " - "PermissionedDomainSet"; - return false; - } - - auto const& sleStatus = sleStatus_[0]; - if (sleStatus.isDelete_) - { - JLOG(j.fatal()) << "Invariant failed: domain object " - "deleted by PermissionedDomainSet"; - return false; - } - return check(sleStatus, j); - } - case ttPERMISSIONED_DOMAIN_DELETE: { - if (sleStatus_.empty()) - { - JLOG(j.fatal()) << "Invariant failed: no domain objects affected by " - "PermissionedDomainDelete"; - return false; - } - - if (!sleStatus_[0].isDelete_) - { - JLOG(j.fatal()) << "Invariant failed: domain object " - "modified, but not deleted by " - "PermissionedDomainDelete"; - return false; - } - return true; - } - default: { - if (!sleStatus_.empty()) - { - JLOG(j.fatal()) << "Invariant failed: " << sleStatus_.size() - << " domain object(s) affected by an " - "unauthorized transaction. " - << tx.getTxnType(); - return false; - } - return true; - } - } - } - else - { - if (tx.getTxnType() != ttPERMISSIONED_DOMAIN_SET || result != tesSUCCESS || - sleStatus_.empty()) - return true; - return check(sleStatus_[0], j); - } -} - -//------------------------------------------------------------------------------ - -void -ValidPseudoAccounts::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (isDelete) - // Deletion is ignored - return; - - if (after && after->getType() == ltACCOUNT_ROOT) - { - bool const isPseudo = [&]() { - // isPseudoAccount checks that any of the pseudo-account fields are - // set. - if (isPseudoAccount(after)) - return true; - // Not all pseudo-accounts have a zero sequence, but all accounts - // with a zero sequence had better be pseudo-accounts. - if (after->at(sfSequence) == 0) - return true; - - return false; - }(); - if (isPseudo) - { - // Pseudo accounts must have the following properties: - // 1. Exactly one of the pseudo-account fields is set. - // 2. The sequence number is not changed. - // 3. The lsfDisableMaster, lsfDefaultRipple, and lsfDepositAuth - // flags are set. - // 4. The RegularKey is not set. - { - std::vector const& fields = getPseudoAccountFields(); - - auto const numFields = - std::count_if(fields.begin(), fields.end(), [&after](SField const* sf) -> bool { - return after->isFieldPresent(*sf); - }); - if (numFields != 1) - { - std::stringstream error; - error << "pseudo-account has " << numFields << " pseudo-account fields set"; - errors_.emplace_back(error.str()); - } - } - if (before && before->at(sfSequence) != after->at(sfSequence)) - { - errors_.emplace_back("pseudo-account sequence changed"); - } - if (!after->isFlag(lsfDisableMaster | lsfDefaultRipple | lsfDepositAuth)) - { - errors_.emplace_back("pseudo-account flags are not set"); - } - if (after->isFieldPresent(sfRegularKey)) - { - errors_.emplace_back("pseudo-account has a regular key"); - } - } - } -} - -bool -ValidPseudoAccounts::finalize( - STTx const& tx, - TER const, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - bool const enforce = view.rules().enabled(featureSingleAssetVault); - XRPL_ASSERT( - errors_.empty() || enforce, - "xrpl::ValidPseudoAccounts::finalize : no bad " - "changes or enforce invariant"); - if (!errors_.empty()) - { - for (auto const& error : errors_) - { - JLOG(j.fatal()) << "Invariant failed: " << error; - } - if (enforce) - return false; - } - return true; -} - -//------------------------------------------------------------------------------ - -void -ValidPermissionedDEX::visitEntry( - bool, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (after && after->getType() == ltDIR_NODE) - { - if (after->isFieldPresent(sfDomainID)) - domains_.insert(after->getFieldH256(sfDomainID)); - } - - if (after && after->getType() == ltOFFER) - { - if (after->isFieldPresent(sfDomainID)) - domains_.insert(after->getFieldH256(sfDomainID)); - else - regularOffers_ = true; - - // if a hybrid offer is missing domain or additional book, there's - // something wrong - if (after->isFlag(lsfHybrid) && - (!after->isFieldPresent(sfDomainID) || !after->isFieldPresent(sfAdditionalBooks) || - after->getFieldArray(sfAdditionalBooks).size() > 1)) - badHybrids_ = true; - } -} - -bool -ValidPermissionedDEX::finalize( - STTx const& tx, - TER const result, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - auto const txType = tx.getTxnType(); - if ((txType != ttPAYMENT && txType != ttOFFER_CREATE) || result != tesSUCCESS) - return true; - - // For each offercreate transaction, check if - // permissioned offers are valid - if (txType == ttOFFER_CREATE && badHybrids_) - { - JLOG(j.fatal()) << "Invariant failed: hybrid offer is malformed"; - return false; - } - - if (!tx.isFieldPresent(sfDomainID)) - return true; - - auto const domain = tx.getFieldH256(sfDomainID); - - if (!view.exists(keylet::permissionedDomain(domain))) - { - JLOG(j.fatal()) << "Invariant failed: domain doesn't exist"; - return false; - } - - // for both payment and offercreate, there shouldn't be another domain - // that's different from the domain specified - for (auto const& d : domains_) - { - if (d != domain) - { - JLOG(j.fatal()) << "Invariant failed: transaction" - " consumed wrong domains"; - return false; - } - } - - if (regularOffers_) - { - JLOG(j.fatal()) << "Invariant failed: domain transaction" - " affected regular offers"; - return false; - } - - return true; -} - -void -ValidAMM::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (isDelete) - return; - - if (after) - { - auto const type = after->getType(); - // AMM object changed - if (type == ltAMM) - { - ammAccount_ = after->getAccountID(sfAccount); - lptAMMBalanceAfter_ = after->getFieldAmount(sfLPTokenBalance); - } - // AMM pool changed - else if ( - (type == ltRIPPLE_STATE && after->getFlags() & lsfAMMNode) || - (type == ltACCOUNT_ROOT && after->isFieldPresent(sfAMMID))) - { - ammPoolChanged_ = true; - } - } - - if (before) - { - // AMM object changed - if (before->getType() == ltAMM) - { - lptAMMBalanceBefore_ = before->getFieldAmount(sfLPTokenBalance); - } - } -} - -static bool -validBalances( - STAmount const& amount, - STAmount const& amount2, - STAmount const& lptAMMBalance, - ValidAMM::ZeroAllowed zeroAllowed) -{ - bool const positive = - amount > beast::zero && amount2 > beast::zero && lptAMMBalance > beast::zero; - if (zeroAllowed == ValidAMM::ZeroAllowed::Yes) - return positive || - (amount == beast::zero && amount2 == beast::zero && lptAMMBalance == beast::zero); - return positive; -} - -bool -ValidAMM::finalizeVote(bool enforce, beast::Journal const& j) const -{ - if (lptAMMBalanceAfter_ != lptAMMBalanceBefore_ || ammPoolChanged_) - { - // LPTokens and the pool can not change on vote - // LCOV_EXCL_START - JLOG(j.error()) << "AMMVote invariant failed: " << lptAMMBalanceBefore_.value_or(STAmount{}) - << " " << lptAMMBalanceAfter_.value_or(STAmount{}) << " " - << ammPoolChanged_; - if (enforce) - return false; - // LCOV_EXCL_STOP - } - - return true; -} - -bool -ValidAMM::finalizeBid(bool enforce, beast::Journal const& j) const -{ - if (ammPoolChanged_) - { - // The pool can not change on bid - // LCOV_EXCL_START - JLOG(j.error()) << "AMMBid invariant failed: pool changed"; - if (enforce) - return false; - // LCOV_EXCL_STOP - } - // LPTokens are burnt, therefore there should be fewer LPTokens - else if ( - lptAMMBalanceBefore_ && lptAMMBalanceAfter_ && - (*lptAMMBalanceAfter_ > *lptAMMBalanceBefore_ || *lptAMMBalanceAfter_ <= beast::zero)) - { - // LCOV_EXCL_START - JLOG(j.error()) << "AMMBid invariant failed: " << *lptAMMBalanceBefore_ << " " - << *lptAMMBalanceAfter_; - if (enforce) - return false; - // LCOV_EXCL_STOP - } - - return true; -} - -bool -ValidAMM::finalizeCreate( - STTx const& tx, - ReadView const& view, - bool enforce, - beast::Journal const& j) const -{ - if (!ammAccount_) - { - // LCOV_EXCL_START - JLOG(j.error()) << "AMMCreate invariant failed: AMM object is not created"; - if (enforce) - return false; - // LCOV_EXCL_STOP - } - else - { - auto const [amount, amount2] = ammPoolHolds( - view, - *ammAccount_, - tx[sfAmount].get(), - tx[sfAmount2].get(), - fhIGNORE_FREEZE, - j); - // Create invariant: - // sqrt(amount * amount2) == LPTokens - // all balances are greater than zero - if (!validBalances(amount, amount2, *lptAMMBalanceAfter_, ZeroAllowed::No) || - ammLPTokens(amount, amount2, lptAMMBalanceAfter_->issue()) != *lptAMMBalanceAfter_) - { - JLOG(j.error()) << "AMMCreate invariant failed: " << amount << " " << amount2 << " " - << *lptAMMBalanceAfter_; - if (enforce) - return false; - } - } - - return true; -} - -bool -ValidAMM::finalizeDelete(bool enforce, TER res, beast::Journal const& j) const -{ - if (ammAccount_) - { - // LCOV_EXCL_START - std::string const msg = (res == tesSUCCESS) ? "AMM object is not deleted on tesSUCCESS" - : "AMM object is changed on tecINCOMPLETE"; - JLOG(j.error()) << "AMMDelete invariant failed: " << msg; - if (enforce) - return false; - // LCOV_EXCL_STOP - } - - return true; -} - -bool -ValidAMM::finalizeDEX(bool enforce, beast::Journal const& j) const -{ - if (ammAccount_) - { - // LCOV_EXCL_START - JLOG(j.error()) << "AMM swap invariant failed: AMM object changed"; - if (enforce) - return false; - // LCOV_EXCL_STOP - } - - return true; -} - -bool -ValidAMM::generalInvariant( - xrpl::STTx const& tx, - xrpl::ReadView const& view, - ZeroAllowed zeroAllowed, - beast::Journal const& j) const -{ - auto const [amount, amount2] = ammPoolHolds( - view, - *ammAccount_, - tx[sfAsset].get(), - tx[sfAsset2].get(), - fhIGNORE_FREEZE, - j); - // Deposit and Withdrawal invariant: - // sqrt(amount * amount2) >= LPTokens - // all balances are greater than zero - // unless on last withdrawal - auto const poolProductMean = root2(amount * amount2); - bool const nonNegativeBalances = - validBalances(amount, amount2, *lptAMMBalanceAfter_, zeroAllowed); - bool const strongInvariantCheck = poolProductMean >= *lptAMMBalanceAfter_; - // Allow for a small relative error if strongInvariantCheck fails - auto weakInvariantCheck = [&]() { - return *lptAMMBalanceAfter_ != beast::zero && - withinRelativeDistance(poolProductMean, Number{*lptAMMBalanceAfter_}, Number{1, -11}); - }; - if (!nonNegativeBalances || (!strongInvariantCheck && !weakInvariantCheck())) - { - JLOG(j.error()) << "AMM " << tx.getTxnType() - << " invariant failed: " << tx.getHash(HashPrefix::transactionID) << " " - << ammPoolChanged_ << " " << amount << " " << amount2 << " " - << poolProductMean << " " << lptAMMBalanceAfter_->getText() << " " - << ((*lptAMMBalanceAfter_ == beast::zero) - ? Number{1} - : ((*lptAMMBalanceAfter_ - poolProductMean) / poolProductMean)); - return false; - } - - return true; -} - -bool -ValidAMM::finalizeDeposit( - xrpl::STTx const& tx, - xrpl::ReadView const& view, - bool enforce, - beast::Journal const& j) const -{ - if (!ammAccount_) - { - // LCOV_EXCL_START - JLOG(j.error()) << "AMMDeposit invariant failed: AMM object is deleted"; - if (enforce) - return false; - // LCOV_EXCL_STOP - } - else if (!generalInvariant(tx, view, ZeroAllowed::No, j) && enforce) - return false; - - return true; -} - -bool -ValidAMM::finalizeWithdraw( - xrpl::STTx const& tx, - xrpl::ReadView const& view, - bool enforce, - beast::Journal const& j) const -{ - if (!ammAccount_) - { - // Last Withdraw or Clawback deleted AMM - } - else if (!generalInvariant(tx, view, ZeroAllowed::Yes, j)) - { - if (enforce) - return false; - } - - return true; -} - -bool -ValidAMM::finalize( - STTx const& tx, - TER const result, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - // Delete may return tecINCOMPLETE if there are too many - // trustlines to delete. - if (result != tesSUCCESS && result != tecINCOMPLETE) - return true; - - bool const enforce = view.rules().enabled(fixAMMv1_3); - - switch (tx.getTxnType()) - { - case ttAMM_CREATE: - return finalizeCreate(tx, view, enforce, j); - case ttAMM_DEPOSIT: - return finalizeDeposit(tx, view, enforce, j); - case ttAMM_CLAWBACK: - case ttAMM_WITHDRAW: - return finalizeWithdraw(tx, view, enforce, j); - case ttAMM_BID: - return finalizeBid(enforce, j); - case ttAMM_VOTE: - return finalizeVote(enforce, j); - case ttAMM_DELETE: - return finalizeDelete(enforce, result, j); - case ttCHECK_CASH: - case ttOFFER_CREATE: - case ttPAYMENT: - return finalizeDEX(enforce, j); - default: - break; - } - - return true; -} - -//------------------------------------------------------------------------------ - -void -NoModifiedUnmodifiableFields::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (isDelete || !before) - // Creation and deletion are ignored - return; - - changedEntries_.emplace(before, after); -} - -bool -NoModifiedUnmodifiableFields::finalize( - STTx const& tx, - TER const, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - static auto const fieldChanged = [](auto const& before, auto const& after, auto const& field) { - bool const beforeField = before->isFieldPresent(field); - bool const afterField = after->isFieldPresent(field); - return beforeField != afterField || (afterField && before->at(field) != after->at(field)); - }; - for (auto const& slePair : changedEntries_) - { - auto const& before = slePair.first; - auto const& after = slePair.second; - auto const type = after->getType(); - bool bad = false; - [[maybe_unused]] bool enforce = false; - switch (type) - { - case ltLOAN_BROKER: - /* - * We check this invariant regardless of lending protocol - * amendment status, allowing for detection and logging of - * potential issues even when the amendment is disabled. - */ - enforce = view.rules().enabled(featureLendingProtocol); - bad = fieldChanged(before, after, sfLedgerEntryType) || - fieldChanged(before, after, sfLedgerIndex) || - fieldChanged(before, after, sfSequence) || - fieldChanged(before, after, sfOwnerNode) || - fieldChanged(before, after, sfVaultNode) || - fieldChanged(before, after, sfVaultID) || - fieldChanged(before, after, sfAccount) || - fieldChanged(before, after, sfOwner) || - fieldChanged(before, after, sfManagementFeeRate) || - fieldChanged(before, after, sfCoverRateMinimum) || - fieldChanged(before, after, sfCoverRateLiquidation); - break; - case ltLOAN: - /* - * We check this invariant regardless of lending protocol - * amendment status, allowing for detection and logging of - * potential issues even when the amendment is disabled. - */ - enforce = view.rules().enabled(featureLendingProtocol); - bad = fieldChanged(before, after, sfLedgerEntryType) || - fieldChanged(before, after, sfLedgerIndex) || - fieldChanged(before, after, sfSequence) || - fieldChanged(before, after, sfOwnerNode) || - fieldChanged(before, after, sfLoanBrokerNode) || - fieldChanged(before, after, sfLoanBrokerID) || - fieldChanged(before, after, sfBorrower) || - fieldChanged(before, after, sfLoanOriginationFee) || - fieldChanged(before, after, sfLoanServiceFee) || - fieldChanged(before, after, sfLatePaymentFee) || - fieldChanged(before, after, sfClosePaymentFee) || - fieldChanged(before, after, sfOverpaymentFee) || - fieldChanged(before, after, sfInterestRate) || - fieldChanged(before, after, sfLateInterestRate) || - fieldChanged(before, after, sfCloseInterestRate) || - fieldChanged(before, after, sfOverpaymentInterestRate) || - fieldChanged(before, after, sfStartDate) || - fieldChanged(before, after, sfPaymentInterval) || - fieldChanged(before, after, sfGracePeriod) || - fieldChanged(before, after, sfLoanScale); - break; - default: - /* - * We check this invariant regardless of lending protocol - * amendment status, allowing for detection and logging of - * potential issues even when the amendment is disabled. - * - * We use the lending protocol as a gate, even though - * all transactions are affected because that's when it - * was added. - */ - enforce = view.rules().enabled(featureLendingProtocol); - bad = fieldChanged(before, after, sfLedgerEntryType) || - fieldChanged(before, after, sfLedgerIndex); - } - XRPL_ASSERT( - !bad || enforce, - "xrpl::NoModifiedUnmodifiableFields::finalize : no bad " - "changes or enforce invariant"); - if (bad) - { - JLOG(j.fatal()) << "Invariant failed: changed an unchangeable field for " - << tx.getTransactionID(); - if (enforce) - return false; - } - } - return true; -} - -//------------------------------------------------------------------------------ - -void -ValidLoanBroker::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (after) - { - if (after->getType() == ltLOAN_BROKER) - { - auto& broker = brokers_[after->key()]; - broker.brokerBefore = before; - broker.brokerAfter = after; - } - else if (after->getType() == ltACCOUNT_ROOT && after->isFieldPresent(sfLoanBrokerID)) - { - auto const& loanBrokerID = after->at(sfLoanBrokerID); - // create an entry if one doesn't already exist - brokers_.emplace(loanBrokerID, BrokerInfo{}); - } - else if (after->getType() == ltRIPPLE_STATE) - { - lines_.emplace_back(after); - } - else if (after->getType() == ltMPTOKEN) - { - mpts_.emplace_back(after); - } - } -} - -bool -ValidLoanBroker::goodZeroDirectory( - ReadView const& view, - SLE::const_ref dir, - beast::Journal const& j) const -{ - auto const next = dir->at(~sfIndexNext); - auto const prev = dir->at(~sfIndexPrevious); - if ((prev && *prev) || (next && *next)) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker with zero " - "OwnerCount has multiple directory pages"; - return false; - } - auto indexes = dir->getFieldV256(sfIndexes); - if (indexes.size() > 1) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker with zero " - "OwnerCount has multiple indexes in the Directory root"; - return false; - } - if (indexes.size() == 1) - { - auto const index = indexes.value().front(); - auto const sle = view.read(keylet::unchecked(index)); - if (!sle) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker directory corrupt"; - return false; - } - if (sle->getType() != ltRIPPLE_STATE && sle->getType() != ltMPTOKEN) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker with zero " - "OwnerCount has an unexpected entry in the directory"; - return false; - } - } - - return true; -} - -bool -ValidLoanBroker::finalize( - STTx const& tx, - TER const, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - // Loan Brokers will not exist on ledger if the Lending Protocol amendment - // is not enabled, so there's no need to check it. - - for (auto const& line : lines_) - { - for (auto const& field : {&sfLowLimit, &sfHighLimit}) - { - auto const account = view.read(keylet::account(line->at(*field).getIssuer())); - // This Invariant doesn't know about the rules for Trust Lines, so - // if the account is missing, don't treat it as an error. This - // loop is only concerned with finding Broker pseudo-accounts - if (account && account->isFieldPresent(sfLoanBrokerID)) - { - auto const& loanBrokerID = account->at(sfLoanBrokerID); - // create an entry if one doesn't already exist - brokers_.emplace(loanBrokerID, BrokerInfo{}); - } - } - } - for (auto const& mpt : mpts_) - { - auto const account = view.read(keylet::account(mpt->at(sfAccount))); - // This Invariant doesn't know about the rules for MPTokens, so - // if the account is missing, don't treat is as an error. This - // loop is only concerned with finding Broker pseudo-accounts - if (account && account->isFieldPresent(sfLoanBrokerID)) - { - auto const& loanBrokerID = account->at(sfLoanBrokerID); - // create an entry if one doesn't already exist - brokers_.emplace(loanBrokerID, BrokerInfo{}); - } - } - - for (auto const& [brokerID, broker] : brokers_) - { - auto const& after = - broker.brokerAfter ? broker.brokerAfter : view.read(keylet::loanbroker(brokerID)); - - if (!after) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker missing"; - return false; - } - - auto const& before = broker.brokerBefore; - - // https://github.com/Tapanito/XRPL-Standards/blob/xls-66-lending-protocol/XLS-0066d-lending-protocol/README.md#3123-invariants - // If `LoanBroker.OwnerCount = 0` the `DirectoryNode` will have at most - // one node (the root), which will only hold entries for `RippleState` - // or `MPToken` objects. - if (after->at(sfOwnerCount) == 0) - { - auto const dir = view.read(keylet::ownerDir(after->at(sfAccount))); - if (dir) - { - if (!goodZeroDirectory(view, dir, j)) - { - return false; - } - } - } - if (before && before->at(sfLoanSequence) > after->at(sfLoanSequence)) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker sequence number " - "decreased"; - return false; - } - if (after->at(sfDebtTotal) < 0) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker debt total is negative"; - return false; - } - if (after->at(sfCoverAvailable) < 0) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker cover available is negative"; - return false; - } - auto const vault = view.read(keylet::vault(after->at(sfVaultID))); - if (!vault) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker vault ID is invalid"; - return false; - } - auto const& vaultAsset = vault->at(sfAsset); - if (after->at(sfCoverAvailable) < accountHolds( - view, - after->at(sfAccount), - vaultAsset, - FreezeHandling::fhIGNORE_FREEZE, - AuthHandling::ahIGNORE_AUTH, - j)) - { - JLOG(j.fatal()) << "Invariant failed: Loan Broker cover available " - "is less than pseudo-account asset balance"; - return false; - } - } - return true; -} - -//------------------------------------------------------------------------------ - -void -ValidLoan::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - if (after && after->getType() == ltLOAN) - { - loans_.emplace_back(before, after); - } -} - -bool -ValidLoan::finalize( - STTx const& tx, - TER const, - XRPAmount const, - ReadView const& view, - beast::Journal const& j) -{ - // Loans will not exist on ledger if the Lending Protocol amendment - // is not enabled, so there's no need to check it. - - for (auto const& [before, after] : loans_) - { - // https://github.com/Tapanito/XRPL-Standards/blob/xls-66-lending-protocol/XLS-0066d-lending-protocol/README.md#3223-invariants - // If `Loan.PaymentRemaining = 0` then the loan MUST be fully paid off - if (after->at(sfPaymentRemaining) == 0 && - (after->at(sfTotalValueOutstanding) != beast::zero || - after->at(sfPrincipalOutstanding) != beast::zero || - after->at(sfManagementFeeOutstanding) != beast::zero)) - { - JLOG(j.fatal()) << "Invariant failed: Loan with zero payments " - "remaining has not been paid off"; - return false; - } - // If `Loan.PaymentRemaining != 0` then the loan MUST NOT be fully paid - // off - if (after->at(sfPaymentRemaining) != 0 && - after->at(sfTotalValueOutstanding) == beast::zero && - after->at(sfPrincipalOutstanding) == beast::zero && - after->at(sfManagementFeeOutstanding) == beast::zero) - { - JLOG(j.fatal()) << "Invariant failed: Loan with zero payments " - "remaining has not been paid off"; - return false; - } - if (before && (before->isFlag(lsfLoanOverpayment) != after->isFlag(lsfLoanOverpayment))) - { - JLOG(j.fatal()) << "Invariant failed: Loan Overpayment flag changed"; - return false; - } - // Must not be negative - STNumber - for (auto const field : - {&sfLoanServiceFee, - &sfLatePaymentFee, - &sfClosePaymentFee, - &sfPrincipalOutstanding, - &sfTotalValueOutstanding, - &sfManagementFeeOutstanding}) - { - if (after->at(*field) < 0) - { - JLOG(j.fatal()) << "Invariant failed: " << field->getName() << " is negative "; - return false; - } - } - // Must be positive - STNumber - for (auto const field : { - &sfPeriodicPayment, - }) - { - if (after->at(*field) <= 0) - { - JLOG(j.fatal()) << "Invariant failed: " << field->getName() - << " is zero or negative "; - return false; - } - } - } - return true; -} - -ValidVault::Vault -ValidVault::Vault::make(SLE const& from) -{ - XRPL_ASSERT(from.getType() == ltVAULT, "ValidVault::Vault::make : from Vault object"); - - ValidVault::Vault self; - self.key = from.key(); - self.asset = from.at(sfAsset); - self.pseudoId = from.getAccountID(sfAccount); - self.owner = from.at(sfOwner); - self.shareMPTID = from.getFieldH192(sfShareMPTID); - self.assetsTotal = from.at(sfAssetsTotal); - self.assetsAvailable = from.at(sfAssetsAvailable); - self.assetsMaximum = from.at(sfAssetsMaximum); - self.lossUnrealized = from.at(sfLossUnrealized); - return self; -} - -ValidVault::Shares -ValidVault::Shares::make(SLE const& from) -{ - XRPL_ASSERT( - from.getType() == ltMPTOKEN_ISSUANCE, - "ValidVault::Shares::make : from MPTokenIssuance object"); - - ValidVault::Shares self; - self.share = MPTIssue(makeMptID(from.getFieldU32(sfSequence), from.getAccountID(sfIssuer))); - self.sharesTotal = from.at(sfOutstandingAmount); - self.sharesMaximum = from[~sfMaximumAmount].value_or(maxMPTokenAmount); - return self; -} - -void -ValidVault::visitEntry( - bool isDelete, - std::shared_ptr const& before, - std::shared_ptr const& after) -{ - // If `before` is empty, this means an object is being created, in which - // case `isDelete` must be false. Otherwise `before` and `after` are set and - // `isDelete` indicates whether an object is being deleted or modified. - XRPL_ASSERT( - after != nullptr && (before != nullptr || !isDelete), - "xrpl::ValidVault::visitEntry : some object is available"); - - // Number balanceDelta will capture the difference (delta) between "before" - // state (zero if created) and "after" state (zero if destroyed), so the - // invariants can validate that the change in account balances matches the - // change in vault balances, stored to deltas_ at the end of this function. - Number balanceDelta{}; - - std::int8_t sign = 0; - if (before) - { - switch (before->getType()) - { - case ltVAULT: - beforeVault_.push_back(Vault::make(*before)); - break; - case ltMPTOKEN_ISSUANCE: - // At this moment we have no way of telling if this object holds - // vault shares or something else. Save it for finalize. - beforeMPTs_.push_back(Shares::make(*before)); - balanceDelta = static_cast(before->getFieldU64(sfOutstandingAmount)); - sign = 1; - break; - case ltMPTOKEN: - balanceDelta = static_cast(before->getFieldU64(sfMPTAmount)); - sign = -1; - break; - case ltACCOUNT_ROOT: - case ltRIPPLE_STATE: - balanceDelta = before->getFieldAmount(sfBalance); - sign = -1; - break; - default:; - } - } - - if (!isDelete && after) - { - switch (after->getType()) - { - case ltVAULT: - afterVault_.push_back(Vault::make(*after)); - break; - case ltMPTOKEN_ISSUANCE: - // At this moment we have no way of telling if this object holds - // vault shares or something else. Save it for finalize. - afterMPTs_.push_back(Shares::make(*after)); - balanceDelta -= - Number(static_cast(after->getFieldU64(sfOutstandingAmount))); - sign = 1; - break; - case ltMPTOKEN: - balanceDelta -= Number(static_cast(after->getFieldU64(sfMPTAmount))); - sign = -1; - break; - case ltACCOUNT_ROOT: - case ltRIPPLE_STATE: - balanceDelta -= Number(after->getFieldAmount(sfBalance)); - sign = -1; - break; - default:; - } - } - - uint256 const key = (before ? before->key() : after->key()); - // Append to deltas if sign is non-zero, i.e. an object of an interesting - // type has been updated. A transaction may update an object even when - // its balance has not changed, e.g. transaction fee equals the amount - // transferred to the account. We intentionally do not compare balanceDelta - // against zero, to avoid missing such updates. - if (sign != 0) - deltas_[key] = balanceDelta * sign; -} - -bool -ValidVault::finalize( - STTx const& tx, - TER const ret, - XRPAmount const fee, - ReadView const& view, - beast::Journal const& j) -{ - bool const enforce = view.rules().enabled(featureSingleAssetVault); - - if (!isTesSuccess(ret)) - return true; // Do not perform checks - - if (afterVault_.empty() && beforeVault_.empty()) - { - if (hasPrivilege(tx, mustModifyVault)) - { - JLOG(j.fatal()) << // - "Invariant failed: vault operation succeeded without modifying " - "a vault"; - XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : vault noop invariant"); - return !enforce; - } - - return true; // Not a vault operation - } - else if (!(hasPrivilege(tx, mustModifyVault) || hasPrivilege(tx, mayModifyVault))) - { - JLOG(j.fatal()) << // - "Invariant failed: vault updated by a wrong transaction type"; - XRPL_ASSERT( - enforce, - "xrpl::ValidVault::finalize : illegal vault transaction " - "invariant"); - return !enforce; // Also not a vault operation - } - - if (beforeVault_.size() > 1 || afterVault_.size() > 1) - { - JLOG(j.fatal()) << // - "Invariant failed: vault operation updated more than single vault"; - XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : single vault invariant"); - return !enforce; // That's all we can do here - } - - auto const txnType = tx.getTxnType(); - - // We do special handling for ttVAULT_DELETE first, because it's the only - // vault-modifying transaction without an "after" state of the vault - if (afterVault_.empty()) - { - if (txnType != ttVAULT_DELETE) - { - JLOG(j.fatal()) << // - "Invariant failed: vault deleted by a wrong transaction type"; - XRPL_ASSERT( - enforce, - "xrpl::ValidVault::finalize : illegal vault deletion " - "invariant"); - return !enforce; // That's all we can do here - } - - // Note, if afterVault_ is empty then we know that beforeVault_ is not - // empty, as enforced at the top of this function - auto const& beforeVault = beforeVault_[0]; - - // At this moment we only know a vault is being deleted and there - // might be some MPTokenIssuance objects which are deleted in the - // same transaction. Find the one matching this vault. - auto const deletedShares = [&]() -> std::optional { - for (auto const& e : beforeMPTs_) - { - if (e.share.getMptID() == beforeVault.shareMPTID) - return std::move(e); - } - return std::nullopt; - }(); - - if (!deletedShares) - { - JLOG(j.fatal()) << "Invariant failed: deleted vault must also " - "delete shares"; - XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : shares deletion invariant"); - return !enforce; // That's all we can do here - } - - bool result = true; - if (deletedShares->sharesTotal != 0) - { - JLOG(j.fatal()) << "Invariant failed: deleted vault must have no " - "shares outstanding"; - result = false; - } - if (beforeVault.assetsTotal != zero) - { - JLOG(j.fatal()) << "Invariant failed: deleted vault must have no " - "assets outstanding"; - result = false; - } - if (beforeVault.assetsAvailable != zero) - { - JLOG(j.fatal()) << "Invariant failed: deleted vault must have no " - "assets available"; - result = false; - } - - return result; - } - else if (txnType == ttVAULT_DELETE) - { - JLOG(j.fatal()) << "Invariant failed: vault deletion succeeded without " - "deleting a vault"; - XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : vault deletion invariant"); - return !enforce; // That's all we can do here - } - - // Note, `afterVault_.empty()` is handled above - auto const& afterVault = afterVault_[0]; - XRPL_ASSERT( - beforeVault_.empty() || beforeVault_[0].key == afterVault.key, - "xrpl::ValidVault::finalize : single vault operation"); - - auto const updatedShares = [&]() -> std::optional { - // At this moment we only know that a vault is being updated and there - // might be some MPTokenIssuance objects which are also updated in the - // same transaction. Find the one matching the shares to this vault. - // Note, we expect updatedMPTs collection to be extremely small. For - // such collections linear search is faster than lookup. - for (auto const& e : afterMPTs_) - { - if (e.share.getMptID() == afterVault.shareMPTID) - return e; - } - - auto const sleShares = view.read(keylet::mptIssuance(afterVault.shareMPTID)); - - return sleShares ? std::optional(Shares::make(*sleShares)) : std::nullopt; - }(); - - bool result = true; - - // Universal transaction checks - if (!beforeVault_.empty()) - { - auto const& beforeVault = beforeVault_[0]; - if (afterVault.asset != beforeVault.asset || afterVault.pseudoId != beforeVault.pseudoId || - afterVault.shareMPTID != beforeVault.shareMPTID) - { - JLOG(j.fatal()) << "Invariant failed: violation of vault immutable data"; - result = false; - } - } - - if (!updatedShares) - { - JLOG(j.fatal()) << "Invariant failed: updated vault must have shares"; - XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : vault has shares invariant"); - return !enforce; // That's all we can do here - } - - if (updatedShares->sharesTotal == 0) - { - if (afterVault.assetsTotal != zero) - { - JLOG(j.fatal()) << "Invariant failed: updated zero sized " - "vault must have no assets outstanding"; - result = false; - } - if (afterVault.assetsAvailable != zero) - { - JLOG(j.fatal()) << "Invariant failed: updated zero sized " - "vault must have no assets available"; - result = false; - } - } - else if (updatedShares->sharesTotal > updatedShares->sharesMaximum) - { - JLOG(j.fatal()) // - << "Invariant failed: updated shares must not exceed maximum " - << updatedShares->sharesMaximum; - result = false; - } - - if (afterVault.assetsAvailable < zero) - { - JLOG(j.fatal()) << "Invariant failed: assets available must be positive"; - result = false; - } - - if (afterVault.assetsAvailable > afterVault.assetsTotal) - { - JLOG(j.fatal()) << "Invariant failed: assets available must " - "not be greater than assets outstanding"; - result = false; - } - else if (afterVault.lossUnrealized > afterVault.assetsTotal - afterVault.assetsAvailable) - { - JLOG(j.fatal()) // - << "Invariant failed: loss unrealized must not exceed " - "the difference between assets outstanding and available"; - result = false; - } - - if (afterVault.assetsTotal < zero) - { - JLOG(j.fatal()) << "Invariant failed: assets outstanding must be positive"; - result = false; - } - - if (afterVault.assetsMaximum < zero) - { - JLOG(j.fatal()) << "Invariant failed: assets maximum must be positive"; - result = false; - } - - // Thanks to this check we can simply do `assert(!beforeVault_.empty()` when - // enforcing invariants on transaction types other than ttVAULT_CREATE - if (beforeVault_.empty() && txnType != ttVAULT_CREATE) - { - JLOG(j.fatal()) << // - "Invariant failed: vault created by a wrong transaction type"; - XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : vault creation invariant"); - return !enforce; // That's all we can do here - } - - if (!beforeVault_.empty() && afterVault.lossUnrealized != beforeVault_[0].lossUnrealized && - txnType != ttLOAN_MANAGE && txnType != ttLOAN_PAY) - { - JLOG(j.fatal()) << // - "Invariant failed: vault transaction must not change loss " - "unrealized"; - result = false; - } - - auto const beforeShares = [&]() -> std::optional { - if (beforeVault_.empty()) - return std::nullopt; - auto const& beforeVault = beforeVault_[0]; - - for (auto const& e : beforeMPTs_) - { - if (e.share.getMptID() == beforeVault.shareMPTID) - return std::move(e); - } - return std::nullopt; - }(); - - if (!beforeShares && - (tx.getTxnType() == ttVAULT_DEPOSIT || // - tx.getTxnType() == ttVAULT_WITHDRAW || // - tx.getTxnType() == ttVAULT_CLAWBACK)) - { - JLOG(j.fatal()) << "Invariant failed: vault operation succeeded " - "without updating shares"; - XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : shares noop invariant"); - return !enforce; // That's all we can do here - } - - auto const& vaultAsset = afterVault.asset; - auto const deltaAssets = [&](AccountID const& id) -> std::optional { - auto const get = // - [&](auto const& it, std::int8_t sign = 1) -> std::optional { - if (it == deltas_.end()) - return std::nullopt; - - return it->second * sign; - }; - - return std::visit( - [&](TIss const& issue) { - if constexpr (std::is_same_v) - { - if (isXRP(issue)) - return get(deltas_.find(keylet::account(id).key)); - return get( - deltas_.find(keylet::line(id, issue).key), id > issue.getIssuer() ? -1 : 1); - } - else if constexpr (std::is_same_v) - { - return get(deltas_.find(keylet::mptoken(issue.getMptID(), id).key)); - } - }, - vaultAsset.value()); - }; - auto const deltaAssetsTxAccount = [&]() -> std::optional { - auto ret = deltaAssets(tx[sfAccount]); - // Nothing returned or not XRP transaction - if (!ret.has_value() || !vaultAsset.native()) - return ret; - - // Delegated transaction; no need to compensate for fees - if (auto const delegate = tx[~sfDelegate]; - delegate.has_value() && *delegate != tx[sfAccount]) - return ret; - - *ret += fee.drops(); - if (*ret == zero) - return std::nullopt; - - return ret; - }; - auto const deltaShares = [&](AccountID const& id) -> std::optional { - auto const it = [&]() { - if (id == afterVault.pseudoId) - return deltas_.find(keylet::mptIssuance(afterVault.shareMPTID).key); - return deltas_.find(keylet::mptoken(afterVault.shareMPTID, id).key); - }(); - - return it != deltas_.end() ? std::optional(it->second) : std::nullopt; - }; - - auto const vaultHoldsNoAssets = [&](Vault const& vault) { - return vault.assetsAvailable == 0 && vault.assetsTotal == 0; - }; - - // Technically this does not need to be a lambda, but it's more - // convenient thanks to early "return false"; the not-so-nice - // alternatives are several layers of nested if/else or more complex - // (i.e. brittle) if statements. - result &= [&]() { - switch (txnType) - { - case ttVAULT_CREATE: { - bool result = true; - - if (!beforeVault_.empty()) - { - JLOG(j.fatal()) // - << "Invariant failed: create operation must not have " - "updated a vault"; - result = false; - } - - if (afterVault.assetsAvailable != zero || afterVault.assetsTotal != zero || - afterVault.lossUnrealized != zero || updatedShares->sharesTotal != 0) - { - JLOG(j.fatal()) // - << "Invariant failed: created vault must be empty"; - result = false; - } - - if (afterVault.pseudoId != updatedShares->share.getIssuer()) - { - JLOG(j.fatal()) // - << "Invariant failed: shares issuer and vault " - "pseudo-account must be the same"; - result = false; - } - - auto const sleSharesIssuer = - view.read(keylet::account(updatedShares->share.getIssuer())); - if (!sleSharesIssuer) - { - JLOG(j.fatal()) // - << "Invariant failed: shares issuer must exist"; - return false; - } - - if (!isPseudoAccount(sleSharesIssuer)) - { - JLOG(j.fatal()) // - << "Invariant failed: shares issuer must be a " - "pseudo-account"; - result = false; - } - - if (auto const vaultId = (*sleSharesIssuer)[~sfVaultID]; - !vaultId || *vaultId != afterVault.key) - { - JLOG(j.fatal()) // - << "Invariant failed: shares issuer pseudo-account " - "must point back to the vault"; - result = false; - } - - return result; - } - case ttVAULT_SET: { - bool result = true; - - XRPL_ASSERT( - !beforeVault_.empty(), "xrpl::ValidVault::finalize : set updated a vault"); - auto const& beforeVault = beforeVault_[0]; - - auto const vaultDeltaAssets = deltaAssets(afterVault.pseudoId); - if (vaultDeltaAssets) - { - JLOG(j.fatal()) << // - "Invariant failed: set must not change vault balance"; - result = false; - } - - if (beforeVault.assetsTotal != afterVault.assetsTotal) - { - JLOG(j.fatal()) << // - "Invariant failed: set must not change assets " - "outstanding"; - result = false; - } - - if (afterVault.assetsMaximum > zero && - afterVault.assetsTotal > afterVault.assetsMaximum) - { - JLOG(j.fatal()) << // - "Invariant failed: set assets outstanding must not " - "exceed assets maximum"; - result = false; - } - - if (beforeVault.assetsAvailable != afterVault.assetsAvailable) - { - JLOG(j.fatal()) << // - "Invariant failed: set must not change assets " - "available"; - result = false; - } - - if (beforeShares && updatedShares && - beforeShares->sharesTotal != updatedShares->sharesTotal) - { - JLOG(j.fatal()) << // - "Invariant failed: set must not change shares " - "outstanding"; - result = false; - } - - return result; - } - case ttVAULT_DEPOSIT: { - bool result = true; - - XRPL_ASSERT( - !beforeVault_.empty(), "xrpl::ValidVault::finalize : deposit updated a vault"); - auto const& beforeVault = beforeVault_[0]; - - auto const vaultDeltaAssets = deltaAssets(afterVault.pseudoId); - - if (!vaultDeltaAssets) - { - JLOG(j.fatal()) << // - "Invariant failed: deposit must change vault balance"; - return false; // That's all we can do - } - - if (*vaultDeltaAssets > tx[sfAmount]) - { - JLOG(j.fatal()) << // - "Invariant failed: deposit must not change vault " - "balance by more than deposited amount"; - result = false; - } - - if (*vaultDeltaAssets <= zero) - { - JLOG(j.fatal()) << // - "Invariant failed: deposit must increase vault balance"; - result = false; - } - - // Any payments (including deposits) made by the issuer - // do not change their balance, but create funds instead. - bool const issuerDeposit = [&]() -> bool { - if (vaultAsset.native()) - return false; - return tx[sfAccount] == vaultAsset.getIssuer(); - }(); - - if (!issuerDeposit) - { - auto const accountDeltaAssets = deltaAssetsTxAccount(); - if (!accountDeltaAssets) - { - JLOG(j.fatal()) << // - "Invariant failed: deposit must change depositor " - "balance"; - return false; - } - - if (*accountDeltaAssets >= zero) - { - JLOG(j.fatal()) << // - "Invariant failed: deposit must decrease depositor " - "balance"; - result = false; - } - - if (*accountDeltaAssets * -1 != *vaultDeltaAssets) - { - JLOG(j.fatal()) << // - "Invariant failed: deposit must change vault and " - "depositor balance by equal amount"; - result = false; - } - } - - if (afterVault.assetsMaximum > zero && - afterVault.assetsTotal > afterVault.assetsMaximum) - { - JLOG(j.fatal()) << // - "Invariant failed: deposit assets outstanding must not " - "exceed assets maximum"; - result = false; - } - - auto const accountDeltaShares = deltaShares(tx[sfAccount]); - if (!accountDeltaShares) - { - JLOG(j.fatal()) << // - "Invariant failed: deposit must change depositor " - "shares"; - return false; // That's all we can do - } - - if (*accountDeltaShares <= zero) - { - JLOG(j.fatal()) << // - "Invariant failed: deposit must increase depositor " - "shares"; - result = false; - } - - auto const vaultDeltaShares = deltaShares(afterVault.pseudoId); - if (!vaultDeltaShares || *vaultDeltaShares == zero) - { - JLOG(j.fatal()) << // - "Invariant failed: deposit must change vault shares"; - return false; // That's all we can do - } - - if (*vaultDeltaShares * -1 != *accountDeltaShares) - { - JLOG(j.fatal()) << // - "Invariant failed: deposit must change depositor and " - "vault shares by equal amount"; - result = false; - } - - if (beforeVault.assetsTotal + *vaultDeltaAssets != afterVault.assetsTotal) - { - JLOG(j.fatal()) << "Invariant failed: deposit and assets " - "outstanding must add up"; - result = false; - } - if (beforeVault.assetsAvailable + *vaultDeltaAssets != afterVault.assetsAvailable) - { - JLOG(j.fatal()) << "Invariant failed: deposit and assets " - "available must add up"; - result = false; - } - - return result; - } - case ttVAULT_WITHDRAW: { - bool result = true; - - XRPL_ASSERT( - !beforeVault_.empty(), - "xrpl::ValidVault::finalize : withdrawal updated a " - "vault"); - auto const& beforeVault = beforeVault_[0]; - - auto const vaultDeltaAssets = deltaAssets(afterVault.pseudoId); - - if (!vaultDeltaAssets) - { - JLOG(j.fatal()) << "Invariant failed: withdrawal must " - "change vault balance"; - return false; // That's all we can do - } - - if (*vaultDeltaAssets >= zero) - { - JLOG(j.fatal()) << "Invariant failed: withdrawal must " - "decrease vault balance"; - result = false; - } - - // Any payments (including withdrawal) going to the issuer - // do not change their balance, but destroy funds instead. - bool const issuerWithdrawal = [&]() -> bool { - if (vaultAsset.native()) - return false; - auto const destination = tx[~sfDestination].value_or(tx[sfAccount]); - return destination == vaultAsset.getIssuer(); - }(); - - if (!issuerWithdrawal) - { - auto const accountDeltaAssets = deltaAssetsTxAccount(); - auto const otherAccountDelta = [&]() -> std::optional { - if (auto const destination = tx[~sfDestination]; - destination && *destination != tx[sfAccount]) - return deltaAssets(*destination); - return std::nullopt; - }(); - - if (accountDeltaAssets.has_value() == otherAccountDelta.has_value()) - { - JLOG(j.fatal()) << // - "Invariant failed: withdrawal must change one " - "destination balance"; - return false; - } - - auto const destinationDelta = // - accountDeltaAssets ? *accountDeltaAssets : *otherAccountDelta; - - if (destinationDelta <= zero) - { - JLOG(j.fatal()) << // - "Invariant failed: withdrawal must increase " - "destination balance"; - result = false; - } - - if (*vaultDeltaAssets * -1 != destinationDelta) - { - JLOG(j.fatal()) << // - "Invariant failed: withdrawal must change vault " - "and destination balance by equal amount"; - result = false; - } - } - - auto const accountDeltaShares = deltaShares(tx[sfAccount]); - if (!accountDeltaShares) - { - JLOG(j.fatal()) << // - "Invariant failed: withdrawal must change depositor " - "shares"; - return false; - } - - if (*accountDeltaShares >= zero) - { - JLOG(j.fatal()) << // - "Invariant failed: withdrawal must decrease depositor " - "shares"; - result = false; - } - - auto const vaultDeltaShares = deltaShares(afterVault.pseudoId); - if (!vaultDeltaShares || *vaultDeltaShares == zero) - { - JLOG(j.fatal()) << // - "Invariant failed: withdrawal must change vault shares"; - return false; // That's all we can do - } - - if (*vaultDeltaShares * -1 != *accountDeltaShares) - { - JLOG(j.fatal()) << // - "Invariant failed: withdrawal must change depositor " - "and vault shares by equal amount"; - result = false; - } - - // Note, vaultBalance is negative (see check above) - if (beforeVault.assetsTotal + *vaultDeltaAssets != afterVault.assetsTotal) - { - JLOG(j.fatal()) << "Invariant failed: withdrawal and " - "assets outstanding must add up"; - result = false; - } - - if (beforeVault.assetsAvailable + *vaultDeltaAssets != afterVault.assetsAvailable) - { - JLOG(j.fatal()) << "Invariant failed: withdrawal and " - "assets available must add up"; - result = false; - } - - return result; - } - case ttVAULT_CLAWBACK: { - bool result = true; - - XRPL_ASSERT( - !beforeVault_.empty(), "xrpl::ValidVault::finalize : clawback updated a vault"); - auto const& beforeVault = beforeVault_[0]; - - if (vaultAsset.native() || vaultAsset.getIssuer() != tx[sfAccount]) - { - // The owner can use clawback to force-burn shares when the - // vault is empty but there are outstanding shares - if (!(beforeShares && beforeShares->sharesTotal > 0 && - vaultHoldsNoAssets(beforeVault) && beforeVault.owner == tx[sfAccount])) - { - JLOG(j.fatal()) << // - "Invariant failed: clawback may only be performed " - "by the asset issuer, or by the vault owner of an " - "empty vault"; - return false; // That's all we can do - } - } - - auto const vaultDeltaAssets = deltaAssets(afterVault.pseudoId); - if (vaultDeltaAssets) - { - if (*vaultDeltaAssets >= zero) - { - JLOG(j.fatal()) << // - "Invariant failed: clawback must decrease vault " - "balance"; - result = false; - } - - if (beforeVault.assetsTotal + *vaultDeltaAssets != afterVault.assetsTotal) - { - JLOG(j.fatal()) << // - "Invariant failed: clawback and assets outstanding " - "must add up"; - result = false; - } - - if (beforeVault.assetsAvailable + *vaultDeltaAssets != - afterVault.assetsAvailable) - { - JLOG(j.fatal()) << // - "Invariant failed: clawback and assets available " - "must add up"; - result = false; - } - } - else if (!vaultHoldsNoAssets(beforeVault)) - { - JLOG(j.fatal()) << // - "Invariant failed: clawback must change vault balance"; - return false; // That's all we can do - } - - auto const accountDeltaShares = deltaShares(tx[sfHolder]); - if (!accountDeltaShares) - { - JLOG(j.fatal()) << // - "Invariant failed: clawback must change holder shares"; - return false; // That's all we can do - } - - if (*accountDeltaShares >= zero) - { - JLOG(j.fatal()) << // - "Invariant failed: clawback must decrease holder " - "shares"; - result = false; - } - - auto const vaultDeltaShares = deltaShares(afterVault.pseudoId); - if (!vaultDeltaShares || *vaultDeltaShares == zero) - { - JLOG(j.fatal()) << // - "Invariant failed: clawback must change vault shares"; - return false; // That's all we can do - } - - if (*vaultDeltaShares * -1 != *accountDeltaShares) - { - JLOG(j.fatal()) << // - "Invariant failed: clawback must change holder and " - "vault shares by equal amount"; - result = false; - } - - return result; - } - - case ttLOAN_SET: - case ttLOAN_MANAGE: - case ttLOAN_PAY: { - // TBD - return true; - } - - default: - // LCOV_EXCL_START - UNREACHABLE("xrpl::ValidVault::finalize : unknown transaction type"); - return false; - // LCOV_EXCL_STOP - } - }(); - - if (!result) - { - // The comment at the top of this file starting with "assert(enforce)" - // explains this assert. - XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : vault invariants"); - return !enforce; - } - - return true; -} - -} // namespace xrpl diff --git a/src/libxrpl/tx/invariants/AMMInvariant.cpp b/src/libxrpl/tx/invariants/AMMInvariant.cpp new file mode 100644 index 0000000000..d98c0a6f50 --- /dev/null +++ b/src/libxrpl/tx/invariants/AMMInvariant.cpp @@ -0,0 +1,305 @@ +#include +// +#include +#include +#include +#include +#include + +namespace xrpl { + +void +ValidAMM::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (isDelete) + return; + + if (after) + { + auto const type = after->getType(); + // AMM object changed + if (type == ltAMM) + { + ammAccount_ = after->getAccountID(sfAccount); + lptAMMBalanceAfter_ = after->getFieldAmount(sfLPTokenBalance); + } + // AMM pool changed + else if ( + (type == ltRIPPLE_STATE && after->getFlags() & lsfAMMNode) || + (type == ltACCOUNT_ROOT && after->isFieldPresent(sfAMMID))) + { + ammPoolChanged_ = true; + } + } + + if (before) + { + // AMM object changed + if (before->getType() == ltAMM) + { + lptAMMBalanceBefore_ = before->getFieldAmount(sfLPTokenBalance); + } + } +} + +static bool +validBalances( + STAmount const& amount, + STAmount const& amount2, + STAmount const& lptAMMBalance, + ValidAMM::ZeroAllowed zeroAllowed) +{ + bool const positive = + amount > beast::zero && amount2 > beast::zero && lptAMMBalance > beast::zero; + if (zeroAllowed == ValidAMM::ZeroAllowed::Yes) + return positive || + (amount == beast::zero && amount2 == beast::zero && lptAMMBalance == beast::zero); + return positive; +} + +bool +ValidAMM::finalizeVote(bool enforce, beast::Journal const& j) const +{ + if (lptAMMBalanceAfter_ != lptAMMBalanceBefore_ || ammPoolChanged_) + { + // LPTokens and the pool can not change on vote + // LCOV_EXCL_START + JLOG(j.error()) << "AMMVote invariant failed: " << lptAMMBalanceBefore_.value_or(STAmount{}) + << " " << lptAMMBalanceAfter_.value_or(STAmount{}) << " " + << ammPoolChanged_; + if (enforce) + return false; + // LCOV_EXCL_STOP + } + + return true; +} + +bool +ValidAMM::finalizeBid(bool enforce, beast::Journal const& j) const +{ + if (ammPoolChanged_) + { + // The pool can not change on bid + // LCOV_EXCL_START + JLOG(j.error()) << "AMMBid invariant failed: pool changed"; + if (enforce) + return false; + // LCOV_EXCL_STOP + } + // LPTokens are burnt, therefore there should be fewer LPTokens + else if ( + lptAMMBalanceBefore_ && lptAMMBalanceAfter_ && + (*lptAMMBalanceAfter_ > *lptAMMBalanceBefore_ || *lptAMMBalanceAfter_ <= beast::zero)) + { + // LCOV_EXCL_START + JLOG(j.error()) << "AMMBid invariant failed: " << *lptAMMBalanceBefore_ << " " + << *lptAMMBalanceAfter_; + if (enforce) + return false; + // LCOV_EXCL_STOP + } + + return true; +} + +bool +ValidAMM::finalizeCreate( + STTx const& tx, + ReadView const& view, + bool enforce, + beast::Journal const& j) const +{ + if (!ammAccount_) + { + // LCOV_EXCL_START + JLOG(j.error()) << "AMMCreate invariant failed: AMM object is not created"; + if (enforce) + return false; + // LCOV_EXCL_STOP + } + else + { + auto const [amount, amount2] = ammPoolHolds( + view, + *ammAccount_, + tx[sfAmount].get(), + tx[sfAmount2].get(), + fhIGNORE_FREEZE, + j); + // Create invariant: + // sqrt(amount * amount2) == LPTokens + // all balances are greater than zero + if (!validBalances(amount, amount2, *lptAMMBalanceAfter_, ZeroAllowed::No) || + ammLPTokens(amount, amount2, lptAMMBalanceAfter_->issue()) != *lptAMMBalanceAfter_) + { + JLOG(j.error()) << "AMMCreate invariant failed: " << amount << " " << amount2 << " " + << *lptAMMBalanceAfter_; + if (enforce) + return false; + } + } + + return true; +} + +bool +ValidAMM::finalizeDelete(bool enforce, TER res, beast::Journal const& j) const +{ + if (ammAccount_) + { + // LCOV_EXCL_START + std::string const msg = (res == tesSUCCESS) ? "AMM object is not deleted on tesSUCCESS" + : "AMM object is changed on tecINCOMPLETE"; + JLOG(j.error()) << "AMMDelete invariant failed: " << msg; + if (enforce) + return false; + // LCOV_EXCL_STOP + } + + return true; +} + +bool +ValidAMM::finalizeDEX(bool enforce, beast::Journal const& j) const +{ + if (ammAccount_) + { + // LCOV_EXCL_START + JLOG(j.error()) << "AMM swap invariant failed: AMM object changed"; + if (enforce) + return false; + // LCOV_EXCL_STOP + } + + return true; +} + +bool +ValidAMM::generalInvariant( + xrpl::STTx const& tx, + xrpl::ReadView const& view, + ZeroAllowed zeroAllowed, + beast::Journal const& j) const +{ + auto const [amount, amount2] = ammPoolHolds( + view, + *ammAccount_, + tx[sfAsset].get(), + tx[sfAsset2].get(), + fhIGNORE_FREEZE, + j); + // Deposit and Withdrawal invariant: + // sqrt(amount * amount2) >= LPTokens + // all balances are greater than zero + // unless on last withdrawal + auto const poolProductMean = root2(amount * amount2); + bool const nonNegativeBalances = + validBalances(amount, amount2, *lptAMMBalanceAfter_, zeroAllowed); + bool const strongInvariantCheck = poolProductMean >= *lptAMMBalanceAfter_; + // Allow for a small relative error if strongInvariantCheck fails + auto weakInvariantCheck = [&]() { + return *lptAMMBalanceAfter_ != beast::zero && + withinRelativeDistance(poolProductMean, Number{*lptAMMBalanceAfter_}, Number{1, -11}); + }; + if (!nonNegativeBalances || (!strongInvariantCheck && !weakInvariantCheck())) + { + JLOG(j.error()) << "AMM " << tx.getTxnType() + << " invariant failed: " << tx.getHash(HashPrefix::transactionID) << " " + << ammPoolChanged_ << " " << amount << " " << amount2 << " " + << poolProductMean << " " << lptAMMBalanceAfter_->getText() << " " + << ((*lptAMMBalanceAfter_ == beast::zero) + ? Number{1} + : ((*lptAMMBalanceAfter_ - poolProductMean) / poolProductMean)); + return false; + } + + return true; +} + +bool +ValidAMM::finalizeDeposit( + xrpl::STTx const& tx, + xrpl::ReadView const& view, + bool enforce, + beast::Journal const& j) const +{ + if (!ammAccount_) + { + // LCOV_EXCL_START + JLOG(j.error()) << "AMMDeposit invariant failed: AMM object is deleted"; + if (enforce) + return false; + // LCOV_EXCL_STOP + } + else if (!generalInvariant(tx, view, ZeroAllowed::No, j) && enforce) + return false; + + return true; +} + +bool +ValidAMM::finalizeWithdraw( + xrpl::STTx const& tx, + xrpl::ReadView const& view, + bool enforce, + beast::Journal const& j) const +{ + if (!ammAccount_) + { + // Last Withdraw or Clawback deleted AMM + } + else if (!generalInvariant(tx, view, ZeroAllowed::Yes, j)) + { + if (enforce) + return false; + } + + return true; +} + +bool +ValidAMM::finalize( + STTx const& tx, + TER const result, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + // Delete may return tecINCOMPLETE if there are too many + // trustlines to delete. + if (result != tesSUCCESS && result != tecINCOMPLETE) + return true; + + bool const enforce = view.rules().enabled(fixAMMv1_3); + + switch (tx.getTxnType()) + { + case ttAMM_CREATE: + return finalizeCreate(tx, view, enforce, j); + case ttAMM_DEPOSIT: + return finalizeDeposit(tx, view, enforce, j); + case ttAMM_CLAWBACK: + case ttAMM_WITHDRAW: + return finalizeWithdraw(tx, view, enforce, j); + case ttAMM_BID: + return finalizeBid(enforce, j); + case ttAMM_VOTE: + return finalizeVote(enforce, j); + case ttAMM_DELETE: + return finalizeDelete(enforce, result, j); + case ttCHECK_CASH: + case ttOFFER_CREATE: + case ttPAYMENT: + return finalizeDEX(enforce, j); + default: + break; + } + + return true; +} + +} // namespace xrpl diff --git a/src/libxrpl/tx/invariants/FreezeInvariant.cpp b/src/libxrpl/tx/invariants/FreezeInvariant.cpp new file mode 100644 index 0000000000..858c4cdcb8 --- /dev/null +++ b/src/libxrpl/tx/invariants/FreezeInvariant.cpp @@ -0,0 +1,278 @@ +#include +// +#include +#include +#include +#include +#include + +namespace xrpl { + +void +TransfersNotFrozen::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + /* + * A trust line freeze state alone doesn't determine if a transfer is + * frozen. The transfer must be examined "end-to-end" because both sides of + * the transfer may have different freeze states and freeze impact depends + * on the transfer direction. This is why first we need to track the + * transfers using IssuerChanges senders/receivers. + * + * Only in validateIssuerChanges, after we collected all changes can we + * determine if the transfer is valid. + */ + if (!isValidEntry(before, after)) + { + return; + } + + auto const balanceChange = calculateBalanceChange(before, after, isDelete); + if (balanceChange.signum() == 0) + { + return; + } + + recordBalanceChanges(after, balanceChange); +} + +bool +TransfersNotFrozen::finalize( + STTx const& tx, + TER const ter, + XRPAmount const fee, + ReadView const& view, + beast::Journal const& j) +{ + /* + * We check this invariant regardless of deep freeze amendment status, + * allowing for detection and logging of potential issues even when the + * amendment is disabled. + * + * If an exploit that allows moving frozen assets is discovered, + * we can alert operators who monitor fatal messages and trigger assert in + * debug builds for an early warning. + * + * In an unlikely event that an exploit is found, this early detection + * enables encouraging the UNL to expedite deep freeze amendment activation + * or deploy hotfixes via new amendments. In case of a new amendment, we'd + * only have to change this line setting 'enforce' variable. + * enforce = view.rules().enabled(featureDeepFreeze) || + * view.rules().enabled(fixFreezeExploit); + */ + [[maybe_unused]] bool const enforce = view.rules().enabled(featureDeepFreeze); + + for (auto const& [issue, changes] : balanceChanges_) + { + auto const issuerSle = findIssuer(issue.account, view); + // It should be impossible for the issuer to not be found, but check + // just in case so rippled doesn't crash in release. + if (!issuerSle) + { + // The comment above starting with "assert(enforce)" explains this + // assert. + XRPL_ASSERT( + enforce, + "xrpl::TransfersNotFrozen::finalize : enforce " + "invariant."); + if (enforce) + { + return false; + } + continue; + } + + if (!validateIssuerChanges(issuerSle, changes, tx, j, enforce)) + { + return false; + } + } + + return true; +} + +bool +TransfersNotFrozen::isValidEntry( + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + // `after` can never be null, even if the trust line is deleted. + XRPL_ASSERT(after, "xrpl::TransfersNotFrozen::isValidEntry : valid after."); + if (!after) + { + return false; + } + + if (after->getType() == ltACCOUNT_ROOT) + { + possibleIssuers_.emplace(after->at(sfAccount), after); + return false; + } + + /* While LedgerEntryTypesMatch invariant also checks types, all invariants + * are processed regardless of previous failures. + * + * This type check is still necessary here because it prevents potential + * issues in subsequent processing. + */ + return after->getType() == ltRIPPLE_STATE && (!before || before->getType() == ltRIPPLE_STATE); +} + +STAmount +TransfersNotFrozen::calculateBalanceChange( + std::shared_ptr const& before, + std::shared_ptr const& after, + bool isDelete) +{ + auto const getBalance = [](auto const& line, auto const& other, bool zero) { + STAmount amt = line ? line->at(sfBalance) : other->at(sfBalance).zeroed(); + return zero ? amt.zeroed() : amt; + }; + + /* Trust lines can be created dynamically by other transactions such as + * Payment and OfferCreate that cross offers. Such trust line won't be + * created frozen, but the sender might be, so the starting balance must be + * treated as zero. + */ + auto const balanceBefore = getBalance(before, after, false); + + /* Same as above, trust lines can be dynamically deleted, and for frozen + * trust lines, payments not involving the issuer must be blocked. This is + * achieved by treating the final balance as zero when isDelete=true to + * ensure frozen line restrictions are enforced even during deletion. + */ + auto const balanceAfter = getBalance(after, before, isDelete); + + return balanceAfter - balanceBefore; +} + +void +TransfersNotFrozen::recordBalance(Issue const& issue, BalanceChange change) +{ + XRPL_ASSERT( + change.balanceChangeSign, + "xrpl::TransfersNotFrozen::recordBalance : valid trustline " + "balance sign."); + auto& changes = balanceChanges_[issue]; + if (change.balanceChangeSign < 0) + changes.senders.emplace_back(std::move(change)); + else + changes.receivers.emplace_back(std::move(change)); +} + +void +TransfersNotFrozen::recordBalanceChanges( + std::shared_ptr const& after, + STAmount const& balanceChange) +{ + auto const balanceChangeSign = balanceChange.signum(); + auto const currency = after->at(sfBalance).getCurrency(); + + // Change from low account's perspective, which is trust line default + recordBalance({currency, after->at(sfHighLimit).getIssuer()}, {after, balanceChangeSign}); + + // Change from high account's perspective, which reverses the sign. + recordBalance({currency, after->at(sfLowLimit).getIssuer()}, {after, -balanceChangeSign}); +} + +std::shared_ptr +TransfersNotFrozen::findIssuer(AccountID const& issuerID, ReadView const& view) +{ + if (auto it = possibleIssuers_.find(issuerID); it != possibleIssuers_.end()) + { + return it->second; + } + + return view.read(keylet::account(issuerID)); +} + +bool +TransfersNotFrozen::validateIssuerChanges( + std::shared_ptr const& issuer, + IssuerChanges const& changes, + STTx const& tx, + beast::Journal const& j, + bool enforce) +{ + if (!issuer) + { + return false; + } + + bool const globalFreeze = issuer->isFlag(lsfGlobalFreeze); + if (changes.receivers.empty() || changes.senders.empty()) + { + /* If there are no receivers, then the holder(s) are returning + * their tokens to the issuer. Likewise, if there are no + * senders, then the issuer is issuing tokens to the holder(s). + * This is allowed regardless of the issuer's freeze flags. (The + * holder may have contradicting freeze flags, but that will be + * checked when the holder is treated as issuer.) + */ + return true; + } + + for (auto const& actors : {changes.senders, changes.receivers}) + { + for (auto const& change : actors) + { + bool const high = change.line->at(sfLowLimit).getIssuer() == issuer->at(sfAccount); + + if (!validateFrozenState(change, high, tx, j, enforce, globalFreeze)) + { + return false; + } + } + } + return true; +} + +bool +TransfersNotFrozen::validateFrozenState( + BalanceChange const& change, + bool high, + STTx const& tx, + beast::Journal const& j, + bool enforce, + bool globalFreeze) +{ + bool const freeze = + change.balanceChangeSign < 0 && change.line->isFlag(high ? lsfLowFreeze : lsfHighFreeze); + bool const deepFreeze = change.line->isFlag(high ? lsfLowDeepFreeze : lsfHighDeepFreeze); + bool const frozen = globalFreeze || deepFreeze || freeze; + + bool const isAMMLine = change.line->isFlag(lsfAMMNode); + + if (!frozen) + { + return true; + } + + // AMMClawbacks are allowed to override some freeze rules + if ((!isAMMLine || globalFreeze) && hasPrivilege(tx, overrideFreeze)) + { + JLOG(j.debug()) << "Invariant check allowing funds to be moved " + << (change.balanceChangeSign > 0 ? "to" : "from") + << " a frozen trustline for AMMClawback " << tx.getTransactionID(); + return true; + } + + JLOG(j.fatal()) << "Invariant failed: Attempting to move frozen funds for " + << tx.getTransactionID(); + // The comment above starting with "assert(enforce)" explains this assert. + XRPL_ASSERT( + enforce, + "xrpl::TransfersNotFrozen::validateFrozenState : enforce " + "invariant."); + + if (enforce) + { + return false; + } + + return true; +} + +} // namespace xrpl diff --git a/src/libxrpl/tx/invariants/InvariantCheck.cpp b/src/libxrpl/tx/invariants/InvariantCheck.cpp new file mode 100644 index 0000000000..79c593c57c --- /dev/null +++ b/src/libxrpl/tx/invariants/InvariantCheck.cpp @@ -0,0 +1,1009 @@ +#include +// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace xrpl { + +#pragma push_macro("TRANSACTION") +#undef TRANSACTION + +#define TRANSACTION(tag, value, name, delegable, amendment, privileges, ...) \ + case tag: { \ + return (privileges) & priv; \ + } + +bool +hasPrivilege(STTx const& tx, Privilege priv) +{ + switch (tx.getTxnType()) + { +#include + + // Deprecated types + default: + return false; + } +}; + +#undef TRANSACTION +#pragma pop_macro("TRANSACTION") + +void +TransactionFeeCheck::visitEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ + // nothing to do +} + +bool +TransactionFeeCheck::finalize( + STTx const& tx, + TER const, + XRPAmount const fee, + ReadView const&, + beast::Journal const& j) +{ + // We should never charge a negative fee + if (fee.drops() < 0) + { + JLOG(j.fatal()) << "Invariant failed: fee paid was negative: " << fee.drops(); + return false; + } + + // We should never charge a fee that's greater than or equal to the + // entire XRP supply. + if (fee >= INITIAL_XRP) + { + JLOG(j.fatal()) << "Invariant failed: fee paid exceeds system limit: " << fee.drops(); + return false; + } + + // We should never charge more for a transaction than the transaction + // authorizes. It's possible to charge less in some circumstances. + if (fee > tx.getFieldAmount(sfFee).xrp()) + { + JLOG(j.fatal()) << "Invariant failed: fee paid is " << fee.drops() + << " exceeds fee specified in transaction."; + return false; + } + + return true; +} + +//------------------------------------------------------------------------------ + +void +XRPNotCreated::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + /* We go through all modified ledger entries, looking only at account roots, + * escrow payments, and payment channels. We remove from the total any + * previous XRP values and add to the total any new XRP values. The net + * balance of a payment channel is computed from two fields (amount and + * balance) and deletions are ignored for paychan and escrow because the + * amount fields have not been adjusted for those in the case of deletion. + */ + if (before) + { + switch (before->getType()) + { + case ltACCOUNT_ROOT: + drops_ -= (*before)[sfBalance].xrp().drops(); + break; + case ltPAYCHAN: + drops_ -= ((*before)[sfAmount] - (*before)[sfBalance]).xrp().drops(); + break; + case ltESCROW: + if (isXRP((*before)[sfAmount])) + drops_ -= (*before)[sfAmount].xrp().drops(); + break; + default: + break; + } + } + + if (after) + { + switch (after->getType()) + { + case ltACCOUNT_ROOT: + drops_ += (*after)[sfBalance].xrp().drops(); + break; + case ltPAYCHAN: + if (!isDelete) + drops_ += ((*after)[sfAmount] - (*after)[sfBalance]).xrp().drops(); + break; + case ltESCROW: + if (!isDelete && isXRP((*after)[sfAmount])) + drops_ += (*after)[sfAmount].xrp().drops(); + break; + default: + break; + } + } +} + +bool +XRPNotCreated::finalize( + STTx const& tx, + TER const, + XRPAmount const fee, + ReadView const&, + beast::Journal const& j) +{ + // The net change should never be positive, as this would mean that the + // transaction created XRP out of thin air. That's not possible. + if (drops_ > 0) + { + JLOG(j.fatal()) << "Invariant failed: XRP net change was positive: " << drops_; + return false; + } + + // The negative of the net change should be equal to actual fee charged. + if (-drops_ != fee.drops()) + { + JLOG(j.fatal()) << "Invariant failed: XRP net change of " << drops_ << " doesn't match fee " + << fee.drops(); + return false; + } + + return true; +} + +//------------------------------------------------------------------------------ + +void +XRPBalanceChecks::visitEntry( + bool, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + auto isBad = [](STAmount const& balance) { + if (!balance.native()) + return true; + + auto const drops = balance.xrp(); + + // Can't have more than the number of drops instantiated + // in the genesis ledger. + if (drops > INITIAL_XRP) + return true; + + // Can't have a negative balance (0 is OK) + if (drops < XRPAmount{0}) + return true; + + return false; + }; + + if (before && before->getType() == ltACCOUNT_ROOT) + bad_ |= isBad((*before)[sfBalance]); + + if (after && after->getType() == ltACCOUNT_ROOT) + bad_ |= isBad((*after)[sfBalance]); +} + +bool +XRPBalanceChecks::finalize( + STTx const&, + TER const, + XRPAmount const, + ReadView const&, + beast::Journal const& j) +{ + if (bad_) + { + JLOG(j.fatal()) << "Invariant failed: incorrect account XRP balance"; + return false; + } + + return true; +} + +//------------------------------------------------------------------------------ + +void +NoBadOffers::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + auto isBad = [](STAmount const& pays, STAmount const& gets) { + // An offer should never be negative + if (pays < beast::zero) + return true; + + if (gets < beast::zero) + return true; + + // Can't have an XRP to XRP offer: + return pays.native() && gets.native(); + }; + + if (before && before->getType() == ltOFFER) + bad_ |= isBad((*before)[sfTakerPays], (*before)[sfTakerGets]); + + if (after && after->getType() == ltOFFER) + bad_ |= isBad((*after)[sfTakerPays], (*after)[sfTakerGets]); +} + +bool +NoBadOffers::finalize( + STTx const&, + TER const, + XRPAmount const, + ReadView const&, + beast::Journal const& j) +{ + if (bad_) + { + JLOG(j.fatal()) << "Invariant failed: offer with a bad amount"; + return false; + } + + return true; +} + +//------------------------------------------------------------------------------ + +void +NoZeroEscrow::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + auto isBad = [](STAmount const& amount) { + // XRP case + if (amount.native()) + { + if (amount.xrp() <= XRPAmount{0}) + return true; + + if (amount.xrp() >= INITIAL_XRP) + return true; + } + else + { + // IOU case + if (amount.holds()) + { + if (amount <= beast::zero) + return true; + + if (badCurrency() == amount.getCurrency()) + return true; + } + + // MPT case + if (amount.holds()) + { + if (amount <= beast::zero) + return true; + + if (amount.mpt() > MPTAmount{maxMPTokenAmount}) + return true; // LCOV_EXCL_LINE + } + } + return false; + }; + + if (before && before->getType() == ltESCROW) + bad_ |= isBad((*before)[sfAmount]); + + if (after && after->getType() == ltESCROW) + bad_ |= isBad((*after)[sfAmount]); + + auto checkAmount = [this](std::int64_t amount) { + if (amount > maxMPTokenAmount || amount < 0) + bad_ = true; + }; + + if (after && after->getType() == ltMPTOKEN_ISSUANCE) + { + auto const outstanding = (*after)[sfOutstandingAmount]; + checkAmount(outstanding); + if (auto const locked = (*after)[~sfLockedAmount]) + { + checkAmount(*locked); + bad_ = outstanding < *locked; + } + } + + if (after && after->getType() == ltMPTOKEN) + { + auto const mptAmount = (*after)[sfMPTAmount]; + checkAmount(mptAmount); + if (auto const locked = (*after)[~sfLockedAmount]) + { + checkAmount(*locked); + } + } +} + +bool +NoZeroEscrow::finalize( + STTx const& txn, + TER const, + XRPAmount const, + ReadView const& rv, + beast::Journal const& j) +{ + if (bad_) + { + JLOG(j.fatal()) << "Invariant failed: escrow specifies invalid amount"; + return false; + } + + return true; +} + +//------------------------------------------------------------------------------ + +void +AccountRootsNotDeleted::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const&) +{ + if (isDelete && before && before->getType() == ltACCOUNT_ROOT) + accountsDeleted_++; +} + +bool +AccountRootsNotDeleted::finalize( + STTx const& tx, + TER const result, + XRPAmount const, + ReadView const&, + beast::Journal const& j) +{ + // AMM account root can be deleted as the result of AMM withdraw/delete + // transaction when the total AMM LP Tokens balance goes to 0. + // A successful AccountDelete or AMMDelete MUST delete exactly + // one account root. + if (hasPrivilege(tx, mustDeleteAcct) && result == tesSUCCESS) + { + if (accountsDeleted_ == 1) + return true; + + if (accountsDeleted_ == 0) + JLOG(j.fatal()) << "Invariant failed: account deletion " + "succeeded without deleting an account"; + else + JLOG(j.fatal()) << "Invariant failed: account deletion " + "succeeded but deleted multiple accounts!"; + return false; + } + + // A successful AMMWithdraw/AMMClawback MAY delete one account root + // when the total AMM LP Tokens balance goes to 0. Not every AMM withdraw + // deletes the AMM account, accountsDeleted_ is set if it is deleted. + if (hasPrivilege(tx, mayDeleteAcct) && result == tesSUCCESS && accountsDeleted_ == 1) + return true; + + if (accountsDeleted_ == 0) + return true; + + JLOG(j.fatal()) << "Invariant failed: an account root was deleted"; + return false; +} + +//------------------------------------------------------------------------------ + +void +AccountRootsDeletedClean::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (isDelete && before && before->getType() == ltACCOUNT_ROOT) + accountsDeleted_.emplace_back(before, after); +} + +bool +AccountRootsDeletedClean::finalize( + STTx const& tx, + TER const result, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + // Always check for objects in the ledger, but to prevent differing + // transaction processing results, however unlikely, only fail if the + // feature is enabled. Enabled, or not, though, a fatal-level message will + // be logged + [[maybe_unused]] bool const enforce = view.rules().enabled(featureInvariantsV1_1) || + view.rules().enabled(featureSingleAssetVault) || + view.rules().enabled(featureLendingProtocol); + + auto const objectExists = [&view, enforce, &j](auto const& keylet) { + (void)enforce; + if (auto const sle = view.read(keylet)) + { + // Finding the object is bad + auto const typeName = [&sle]() { + auto item = LedgerFormats::getInstance().findByType(sle->getType()); + + if (item != nullptr) + return item->getName(); + return std::to_string(sle->getType()); + }(); + + JLOG(j.fatal()) << "Invariant failed: account deletion left behind a " << typeName + << " object"; + // The comment above starting with "assert(enforce)" explains this + // assert. + XRPL_ASSERT( + enforce, + "xrpl::AccountRootsDeletedClean::finalize::objectExists : " + "account deletion left no objects behind"); + return true; + } + return false; + }; + + for (auto const& [before, after] : accountsDeleted_) + { + auto const accountID = before->getAccountID(sfAccount); + // An account should not be deleted with a balance + if (after->at(sfBalance) != beast::zero) + { + JLOG(j.fatal()) << "Invariant failed: account deletion left " + "behind a non-zero balance"; + XRPL_ASSERT( + enforce, + "xrpl::AccountRootsDeletedClean::finalize : " + "deleted account has zero balance"); + if (enforce) + return false; + } + // An account should not be deleted with a non-zero owner count + if (after->at(sfOwnerCount) != 0) + { + JLOG(j.fatal()) << "Invariant failed: account deletion left " + "behind a non-zero owner count"; + XRPL_ASSERT( + enforce, + "xrpl::AccountRootsDeletedClean::finalize : " + "deleted account has zero owner count"); + if (enforce) + return false; + } + // Simple types + for (auto const& [keyletfunc, _, __] : directAccountKeylets) + { + if (objectExists(std::invoke(keyletfunc, accountID)) && enforce) + return false; + } + + { + // NFT pages. nftpage_min and nftpage_max were already explicitly + // checked above as entries in directAccountKeylets. This uses + // view.succ() to check for any NFT pages in between the two + // endpoints. + Keylet const first = keylet::nftpage_min(accountID); + Keylet const last = keylet::nftpage_max(accountID); + + std::optional key = view.succ(first.key, last.key.next()); + + // current page + if (key && objectExists(Keylet{ltNFTOKEN_PAGE, *key}) && enforce) + return false; + } + + // If the account is a pseudo account, then the linked object must + // also be deleted. e.g. AMM, Vault, etc. + for (auto const& field : getPseudoAccountFields()) + { + if (before->isFieldPresent(*field)) + { + auto const key = before->getFieldH256(*field); + if (objectExists(keylet::unchecked(key)) && enforce) + return false; + } + } + } + + return true; +} + +//------------------------------------------------------------------------------ + +void +LedgerEntryTypesMatch::visitEntry( + bool, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (before && after && before->getType() != after->getType()) + typeMismatch_ = true; + + if (after) + { +#pragma push_macro("LEDGER_ENTRY") +#undef LEDGER_ENTRY + +#define LEDGER_ENTRY(tag, ...) case tag: + + switch (after->getType()) + { +#include + + break; + default: + invalidTypeAdded_ = true; + break; + } + +#undef LEDGER_ENTRY +#pragma pop_macro("LEDGER_ENTRY") + } +} + +bool +LedgerEntryTypesMatch::finalize( + STTx const&, + TER const, + XRPAmount const, + ReadView const&, + beast::Journal const& j) +{ + if ((!typeMismatch_) && (!invalidTypeAdded_)) + return true; + + if (typeMismatch_) + { + JLOG(j.fatal()) << "Invariant failed: ledger entry type mismatch"; + } + + if (invalidTypeAdded_) + { + JLOG(j.fatal()) << "Invariant failed: invalid ledger entry type added"; + } + + return false; +} + +//------------------------------------------------------------------------------ + +void +NoXRPTrustLines::visitEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const& after) +{ + if (after && after->getType() == ltRIPPLE_STATE) + { + // checking the issue directly here instead of + // relying on .native() just in case native somehow + // were systematically incorrect + xrpTrustLine_ = after->getFieldAmount(sfLowLimit).issue() == xrpIssue() || + after->getFieldAmount(sfHighLimit).issue() == xrpIssue(); + } +} + +bool +NoXRPTrustLines::finalize( + STTx const&, + TER const, + XRPAmount const, + ReadView const&, + beast::Journal const& j) +{ + if (!xrpTrustLine_) + return true; + + JLOG(j.fatal()) << "Invariant failed: an XRP trust line was created"; + return false; +} + +//------------------------------------------------------------------------------ + +void +NoDeepFreezeTrustLinesWithoutFreeze::visitEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const& after) +{ + if (after && after->getType() == ltRIPPLE_STATE) + { + std::uint32_t const uFlags = after->getFieldU32(sfFlags); + bool const lowFreeze = uFlags & lsfLowFreeze; + bool const lowDeepFreeze = uFlags & lsfLowDeepFreeze; + + bool const highFreeze = uFlags & lsfHighFreeze; + bool const highDeepFreeze = uFlags & lsfHighDeepFreeze; + + deepFreezeWithoutFreeze_ = (lowDeepFreeze && !lowFreeze) || (highDeepFreeze && !highFreeze); + } +} + +bool +NoDeepFreezeTrustLinesWithoutFreeze::finalize( + STTx const&, + TER const, + XRPAmount const, + ReadView const&, + beast::Journal const& j) +{ + if (!deepFreezeWithoutFreeze_) + return true; + + JLOG(j.fatal()) << "Invariant failed: a trust line with deep freeze flag " + "without normal freeze was created"; + return false; +} + +//------------------------------------------------------------------------------ + +void +ValidNewAccountRoot::visitEntry( + bool, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (!before && after->getType() == ltACCOUNT_ROOT) + { + accountsCreated_++; + accountSeq_ = (*after)[sfSequence]; + pseudoAccount_ = isPseudoAccount(after); + flags_ = after->getFlags(); + } +} + +bool +ValidNewAccountRoot::finalize( + STTx const& tx, + TER const result, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + if (accountsCreated_ == 0) + return true; + + if (accountsCreated_ > 1) + { + JLOG(j.fatal()) << "Invariant failed: multiple accounts " + "created in a single transaction"; + return false; + } + + // From this point on we know exactly one account was created. + if (hasPrivilege(tx, createAcct | createPseudoAcct) && result == tesSUCCESS) + { + bool const pseudoAccount = + (pseudoAccount_ && + (view.rules().enabled(featureSingleAssetVault) || + view.rules().enabled(featureLendingProtocol))); + + if (pseudoAccount && !hasPrivilege(tx, createPseudoAcct)) + { + JLOG(j.fatal()) << "Invariant failed: pseudo-account created by a " + "wrong transaction type"; + return false; + } + + std::uint32_t const startingSeq = pseudoAccount ? 0 : view.seq(); + + if (accountSeq_ != startingSeq) + { + JLOG(j.fatal()) << "Invariant failed: account created with " + "wrong starting sequence number"; + return false; + } + + if (pseudoAccount) + { + std::uint32_t const expected = (lsfDisableMaster | lsfDefaultRipple | lsfDepositAuth); + if (flags_ != expected) + { + JLOG(j.fatal()) << "Invariant failed: pseudo-account created with " + "wrong flags"; + return false; + } + } + + return true; + } + + JLOG(j.fatal()) << "Invariant failed: account root created illegally"; + return false; +} // namespace xrpl + +//------------------------------------------------------------------------------ + +void +ValidClawback::visitEntry( + bool, + std::shared_ptr const& before, + std::shared_ptr const&) +{ + if (before && before->getType() == ltRIPPLE_STATE) + trustlinesChanged++; + + if (before && before->getType() == ltMPTOKEN) + mptokensChanged++; +} + +bool +ValidClawback::finalize( + STTx const& tx, + TER const result, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + if (tx.getTxnType() != ttCLAWBACK) + return true; + + if (result == tesSUCCESS) + { + if (trustlinesChanged > 1) + { + JLOG(j.fatal()) << "Invariant failed: more than one trustline changed."; + return false; + } + + if (mptokensChanged > 1) + { + JLOG(j.fatal()) << "Invariant failed: more than one mptokens changed."; + return false; + } + + if (trustlinesChanged == 1) + { + AccountID const issuer = tx.getAccountID(sfAccount); + STAmount const& amount = tx.getFieldAmount(sfAmount); + AccountID const& holder = amount.getIssuer(); + STAmount const holderBalance = + accountHolds(view, holder, amount.getCurrency(), issuer, fhIGNORE_FREEZE, j); + + if (holderBalance.signum() < 0) + { + JLOG(j.fatal()) << "Invariant failed: trustline balance is negative"; + return false; + } + } + } + else + { + if (trustlinesChanged != 0) + { + JLOG(j.fatal()) << "Invariant failed: some trustlines were changed " + "despite failure of the transaction."; + return false; + } + + if (mptokensChanged != 0) + { + JLOG(j.fatal()) << "Invariant failed: some mptokens were changed " + "despite failure of the transaction."; + return false; + } + } + + return true; +} + +//------------------------------------------------------------------------------ + +void +ValidPseudoAccounts::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (isDelete) + // Deletion is ignored + return; + + if (after && after->getType() == ltACCOUNT_ROOT) + { + bool const isPseudo = [&]() { + // isPseudoAccount checks that any of the pseudo-account fields are + // set. + if (isPseudoAccount(after)) + return true; + // Not all pseudo-accounts have a zero sequence, but all accounts + // with a zero sequence had better be pseudo-accounts. + if (after->at(sfSequence) == 0) + return true; + + return false; + }(); + if (isPseudo) + { + // Pseudo accounts must have the following properties: + // 1. Exactly one of the pseudo-account fields is set. + // 2. The sequence number is not changed. + // 3. The lsfDisableMaster, lsfDefaultRipple, and lsfDepositAuth + // flags are set. + // 4. The RegularKey is not set. + { + std::vector const& fields = getPseudoAccountFields(); + + auto const numFields = + std::count_if(fields.begin(), fields.end(), [&after](SField const* sf) -> bool { + return after->isFieldPresent(*sf); + }); + if (numFields != 1) + { + std::stringstream error; + error << "pseudo-account has " << numFields << " pseudo-account fields set"; + errors_.emplace_back(error.str()); + } + } + if (before && before->at(sfSequence) != after->at(sfSequence)) + { + errors_.emplace_back("pseudo-account sequence changed"); + } + if (!after->isFlag(lsfDisableMaster | lsfDefaultRipple | lsfDepositAuth)) + { + errors_.emplace_back("pseudo-account flags are not set"); + } + if (after->isFieldPresent(sfRegularKey)) + { + errors_.emplace_back("pseudo-account has a regular key"); + } + } + } +} + +bool +ValidPseudoAccounts::finalize( + STTx const& tx, + TER const, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + bool const enforce = view.rules().enabled(featureSingleAssetVault); + XRPL_ASSERT( + errors_.empty() || enforce, + "xrpl::ValidPseudoAccounts::finalize : no bad " + "changes or enforce invariant"); + if (!errors_.empty()) + { + for (auto const& error : errors_) + { + JLOG(j.fatal()) << "Invariant failed: " << error; + } + if (enforce) + return false; + } + return true; +} + +//------------------------------------------------------------------------------ + +void +NoModifiedUnmodifiableFields::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (isDelete || !before) + // Creation and deletion are ignored + return; + + changedEntries_.emplace(before, after); +} + +bool +NoModifiedUnmodifiableFields::finalize( + STTx const& tx, + TER const, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + static auto const fieldChanged = [](auto const& before, auto const& after, auto const& field) { + bool const beforeField = before->isFieldPresent(field); + bool const afterField = after->isFieldPresent(field); + return beforeField != afterField || (afterField && before->at(field) != after->at(field)); + }; + for (auto const& slePair : changedEntries_) + { + auto const& before = slePair.first; + auto const& after = slePair.second; + auto const type = after->getType(); + bool bad = false; + [[maybe_unused]] bool enforce = false; + switch (type) + { + case ltLOAN_BROKER: + /* + * We check this invariant regardless of lending protocol + * amendment status, allowing for detection and logging of + * potential issues even when the amendment is disabled. + */ + enforce = view.rules().enabled(featureLendingProtocol); + bad = fieldChanged(before, after, sfLedgerEntryType) || + fieldChanged(before, after, sfLedgerIndex) || + fieldChanged(before, after, sfSequence) || + fieldChanged(before, after, sfOwnerNode) || + fieldChanged(before, after, sfVaultNode) || + fieldChanged(before, after, sfVaultID) || + fieldChanged(before, after, sfAccount) || + fieldChanged(before, after, sfOwner) || + fieldChanged(before, after, sfManagementFeeRate) || + fieldChanged(before, after, sfCoverRateMinimum) || + fieldChanged(before, after, sfCoverRateLiquidation); + break; + case ltLOAN: + /* + * We check this invariant regardless of lending protocol + * amendment status, allowing for detection and logging of + * potential issues even when the amendment is disabled. + */ + enforce = view.rules().enabled(featureLendingProtocol); + bad = fieldChanged(before, after, sfLedgerEntryType) || + fieldChanged(before, after, sfLedgerIndex) || + fieldChanged(before, after, sfSequence) || + fieldChanged(before, after, sfOwnerNode) || + fieldChanged(before, after, sfLoanBrokerNode) || + fieldChanged(before, after, sfLoanBrokerID) || + fieldChanged(before, after, sfBorrower) || + fieldChanged(before, after, sfLoanOriginationFee) || + fieldChanged(before, after, sfLoanServiceFee) || + fieldChanged(before, after, sfLatePaymentFee) || + fieldChanged(before, after, sfClosePaymentFee) || + fieldChanged(before, after, sfOverpaymentFee) || + fieldChanged(before, after, sfInterestRate) || + fieldChanged(before, after, sfLateInterestRate) || + fieldChanged(before, after, sfCloseInterestRate) || + fieldChanged(before, after, sfOverpaymentInterestRate) || + fieldChanged(before, after, sfStartDate) || + fieldChanged(before, after, sfPaymentInterval) || + fieldChanged(before, after, sfGracePeriod) || + fieldChanged(before, after, sfLoanScale); + break; + default: + /* + * We check this invariant regardless of lending protocol + * amendment status, allowing for detection and logging of + * potential issues even when the amendment is disabled. + * + * We use the lending protocol as a gate, even though + * all transactions are affected because that's when it + * was added. + */ + enforce = view.rules().enabled(featureLendingProtocol); + bad = fieldChanged(before, after, sfLedgerEntryType) || + fieldChanged(before, after, sfLedgerIndex); + } + XRPL_ASSERT( + !bad || enforce, + "xrpl::NoModifiedUnmodifiableFields::finalize : no bad " + "changes or enforce invariant"); + if (bad) + { + JLOG(j.fatal()) << "Invariant failed: changed an unchangeable field for " + << tx.getTransactionID(); + if (enforce) + return false; + } + } + return true; +} + +} // namespace xrpl diff --git a/src/libxrpl/tx/invariants/LoanInvariant.cpp b/src/libxrpl/tx/invariants/LoanInvariant.cpp new file mode 100644 index 0000000000..01c4da46ac --- /dev/null +++ b/src/libxrpl/tx/invariants/LoanInvariant.cpp @@ -0,0 +1,278 @@ +#include +// +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl { + +void +ValidLoanBroker::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (after) + { + if (after->getType() == ltLOAN_BROKER) + { + auto& broker = brokers_[after->key()]; + broker.brokerBefore = before; + broker.brokerAfter = after; + } + else if (after->getType() == ltACCOUNT_ROOT && after->isFieldPresent(sfLoanBrokerID)) + { + auto const& loanBrokerID = after->at(sfLoanBrokerID); + // create an entry if one doesn't already exist + brokers_.emplace(loanBrokerID, BrokerInfo{}); + } + else if (after->getType() == ltRIPPLE_STATE) + { + lines_.emplace_back(after); + } + else if (after->getType() == ltMPTOKEN) + { + mpts_.emplace_back(after); + } + } +} + +bool +ValidLoanBroker::goodZeroDirectory( + ReadView const& view, + SLE::const_ref dir, + beast::Journal const& j) const +{ + auto const next = dir->at(~sfIndexNext); + auto const prev = dir->at(~sfIndexPrevious); + if ((prev && *prev) || (next && *next)) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker with zero " + "OwnerCount has multiple directory pages"; + return false; + } + auto indexes = dir->getFieldV256(sfIndexes); + if (indexes.size() > 1) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker with zero " + "OwnerCount has multiple indexes in the Directory root"; + return false; + } + if (indexes.size() == 1) + { + auto const index = indexes.value().front(); + auto const sle = view.read(keylet::unchecked(index)); + if (!sle) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker directory corrupt"; + return false; + } + if (sle->getType() != ltRIPPLE_STATE && sle->getType() != ltMPTOKEN) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker with zero " + "OwnerCount has an unexpected entry in the directory"; + return false; + } + } + + return true; +} + +bool +ValidLoanBroker::finalize( + STTx const& tx, + TER const, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + // Loan Brokers will not exist on ledger if the Lending Protocol amendment + // is not enabled, so there's no need to check it. + + for (auto const& line : lines_) + { + for (auto const& field : {&sfLowLimit, &sfHighLimit}) + { + auto const account = view.read(keylet::account(line->at(*field).getIssuer())); + // This Invariant doesn't know about the rules for Trust Lines, so + // if the account is missing, don't treat it as an error. This + // loop is only concerned with finding Broker pseudo-accounts + if (account && account->isFieldPresent(sfLoanBrokerID)) + { + auto const& loanBrokerID = account->at(sfLoanBrokerID); + // create an entry if one doesn't already exist + brokers_.emplace(loanBrokerID, BrokerInfo{}); + } + } + } + for (auto const& mpt : mpts_) + { + auto const account = view.read(keylet::account(mpt->at(sfAccount))); + // This Invariant doesn't know about the rules for MPTokens, so + // if the account is missing, don't treat is as an error. This + // loop is only concerned with finding Broker pseudo-accounts + if (account && account->isFieldPresent(sfLoanBrokerID)) + { + auto const& loanBrokerID = account->at(sfLoanBrokerID); + // create an entry if one doesn't already exist + brokers_.emplace(loanBrokerID, BrokerInfo{}); + } + } + + for (auto const& [brokerID, broker] : brokers_) + { + auto const& after = + broker.brokerAfter ? broker.brokerAfter : view.read(keylet::loanbroker(brokerID)); + + if (!after) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker missing"; + return false; + } + + auto const& before = broker.brokerBefore; + + // https://github.com/Tapanito/XRPL-Standards/blob/xls-66-lending-protocol/XLS-0066d-lending-protocol/README.md#3123-invariants + // If `LoanBroker.OwnerCount = 0` the `DirectoryNode` will have at most + // one node (the root), which will only hold entries for `RippleState` + // or `MPToken` objects. + if (after->at(sfOwnerCount) == 0) + { + auto const dir = view.read(keylet::ownerDir(after->at(sfAccount))); + if (dir) + { + if (!goodZeroDirectory(view, dir, j)) + { + return false; + } + } + } + if (before && before->at(sfLoanSequence) > after->at(sfLoanSequence)) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker sequence number " + "decreased"; + return false; + } + if (after->at(sfDebtTotal) < 0) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker debt total is negative"; + return false; + } + if (after->at(sfCoverAvailable) < 0) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker cover available is negative"; + return false; + } + auto const vault = view.read(keylet::vault(after->at(sfVaultID))); + if (!vault) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker vault ID is invalid"; + return false; + } + auto const& vaultAsset = vault->at(sfAsset); + if (after->at(sfCoverAvailable) < accountHolds( + view, + after->at(sfAccount), + vaultAsset, + FreezeHandling::fhIGNORE_FREEZE, + AuthHandling::ahIGNORE_AUTH, + j)) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker cover available " + "is less than pseudo-account asset balance"; + return false; + } + } + return true; +} + +//------------------------------------------------------------------------------ + +void +ValidLoan::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (after && after->getType() == ltLOAN) + { + loans_.emplace_back(before, after); + } +} + +bool +ValidLoan::finalize( + STTx const& tx, + TER const, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + // Loans will not exist on ledger if the Lending Protocol amendment + // is not enabled, so there's no need to check it. + + for (auto const& [before, after] : loans_) + { + // https://github.com/Tapanito/XRPL-Standards/blob/xls-66-lending-protocol/XLS-0066d-lending-protocol/README.md#3223-invariants + // If `Loan.PaymentRemaining = 0` then the loan MUST be fully paid off + if (after->at(sfPaymentRemaining) == 0 && + (after->at(sfTotalValueOutstanding) != beast::zero || + after->at(sfPrincipalOutstanding) != beast::zero || + after->at(sfManagementFeeOutstanding) != beast::zero)) + { + JLOG(j.fatal()) << "Invariant failed: Loan with zero payments " + "remaining has not been paid off"; + return false; + } + // If `Loan.PaymentRemaining != 0` then the loan MUST NOT be fully paid + // off + if (after->at(sfPaymentRemaining) != 0 && + after->at(sfTotalValueOutstanding) == beast::zero && + after->at(sfPrincipalOutstanding) == beast::zero && + after->at(sfManagementFeeOutstanding) == beast::zero) + { + JLOG(j.fatal()) << "Invariant failed: Loan with zero payments " + "remaining has not been paid off"; + return false; + } + if (before && (before->isFlag(lsfLoanOverpayment) != after->isFlag(lsfLoanOverpayment))) + { + JLOG(j.fatal()) << "Invariant failed: Loan Overpayment flag changed"; + return false; + } + // Must not be negative - STNumber + for (auto const field : + {&sfLoanServiceFee, + &sfLatePaymentFee, + &sfClosePaymentFee, + &sfPrincipalOutstanding, + &sfTotalValueOutstanding, + &sfManagementFeeOutstanding}) + { + if (after->at(*field) < 0) + { + JLOG(j.fatal()) << "Invariant failed: " << field->getName() << " is negative "; + return false; + } + } + // Must be positive - STNumber + for (auto const field : { + &sfPeriodicPayment, + }) + { + if (after->at(*field) <= 0) + { + JLOG(j.fatal()) << "Invariant failed: " << field->getName() + << " is zero or negative "; + return false; + } + } + } + return true; +} + +} // namespace xrpl diff --git a/src/libxrpl/tx/invariants/MPTInvariant.cpp b/src/libxrpl/tx/invariants/MPTInvariant.cpp new file mode 100644 index 0000000000..20957b8d43 --- /dev/null +++ b/src/libxrpl/tx/invariants/MPTInvariant.cpp @@ -0,0 +1,192 @@ +#include +// +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl { + +void +ValidMPTIssuance::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (after && after->getType() == ltMPTOKEN_ISSUANCE) + { + if (isDelete) + mptIssuancesDeleted_++; + else if (!before) + mptIssuancesCreated_++; + } + + if (after && after->getType() == ltMPTOKEN) + { + if (isDelete) + mptokensDeleted_++; + else if (!before) + { + mptokensCreated_++; + MPTIssue const mptIssue{after->at(sfMPTokenIssuanceID)}; + if (mptIssue.getIssuer() == after->at(sfAccount)) + mptCreatedByIssuer_ = true; + } + } +} + +bool +ValidMPTIssuance::finalize( + STTx const& tx, + TER const result, + XRPAmount const _fee, + ReadView const& view, + beast::Journal const& j) +{ + if (result == tesSUCCESS) + { + auto const& rules = view.rules(); + [[maybe_unused]] + bool enforceCreatedByIssuer = + rules.enabled(featureSingleAssetVault) || rules.enabled(featureLendingProtocol); + if (mptCreatedByIssuer_) + { + JLOG(j.fatal()) << "Invariant failed: MPToken created for the MPT issuer"; + // The comment above starting with "assert(enforce)" explains this + // assert. + XRPL_ASSERT_PARTS( + enforceCreatedByIssuer, "xrpl::ValidMPTIssuance::finalize", "no issuer MPToken"); + if (enforceCreatedByIssuer) + return false; + } + + auto const txnType = tx.getTxnType(); + if (hasPrivilege(tx, createMPTIssuance)) + { + if (mptIssuancesCreated_ == 0) + { + JLOG(j.fatal()) << "Invariant failed: transaction " + "succeeded without creating a MPT issuance"; + } + else if (mptIssuancesDeleted_ != 0) + { + JLOG(j.fatal()) << "Invariant failed: transaction " + "succeeded while removing MPT issuances"; + } + else if (mptIssuancesCreated_ > 1) + { + JLOG(j.fatal()) << "Invariant failed: transaction " + "succeeded but created multiple issuances"; + } + + return mptIssuancesCreated_ == 1 && mptIssuancesDeleted_ == 0; + } + + if (hasPrivilege(tx, destroyMPTIssuance)) + { + if (mptIssuancesDeleted_ == 0) + { + JLOG(j.fatal()) << "Invariant failed: MPT issuance deletion " + "succeeded without removing a MPT issuance"; + } + else if (mptIssuancesCreated_ > 0) + { + JLOG(j.fatal()) << "Invariant failed: MPT issuance deletion " + "succeeded while creating MPT issuances"; + } + else if (mptIssuancesDeleted_ > 1) + { + JLOG(j.fatal()) << "Invariant failed: MPT issuance deletion " + "succeeded but deleted multiple issuances"; + } + + return mptIssuancesCreated_ == 0 && mptIssuancesDeleted_ == 1; + } + + bool const lendingProtocolEnabled = view.rules().enabled(featureLendingProtocol); + // ttESCROW_FINISH may authorize an MPT, but it can't have the + // mayAuthorizeMPT privilege, because that may cause + // non-amendment-gated side effects. + bool const enforceEscrowFinish = (txnType == ttESCROW_FINISH) && + (view.rules().enabled(featureSingleAssetVault) || lendingProtocolEnabled); + if (hasPrivilege(tx, mustAuthorizeMPT | mayAuthorizeMPT) || enforceEscrowFinish) + { + bool const submittedByIssuer = tx.isFieldPresent(sfHolder); + + if (mptIssuancesCreated_ > 0) + { + JLOG(j.fatal()) << "Invariant failed: MPT authorize " + "succeeded but created MPT issuances"; + return false; + } + else if (mptIssuancesDeleted_ > 0) + { + JLOG(j.fatal()) << "Invariant failed: MPT authorize " + "succeeded but deleted issuances"; + return false; + } + else if (lendingProtocolEnabled && mptokensCreated_ + mptokensDeleted_ > 1) + { + JLOG(j.fatal()) << "Invariant failed: MPT authorize succeeded " + "but created/deleted bad number mptokens"; + return false; + } + else if (submittedByIssuer && (mptokensCreated_ > 0 || mptokensDeleted_ > 0)) + { + JLOG(j.fatal()) << "Invariant failed: MPT authorize submitted by issuer " + "succeeded but created/deleted mptokens"; + return false; + } + else if ( + !submittedByIssuer && hasPrivilege(tx, mustAuthorizeMPT) && + (mptokensCreated_ + mptokensDeleted_ != 1)) + { + // if the holder submitted this tx, then a mptoken must be + // either created or deleted. + JLOG(j.fatal()) << "Invariant failed: MPT authorize submitted by holder " + "succeeded but created/deleted bad number of mptokens"; + return false; + } + + return true; + } + if (txnType == ttESCROW_FINISH) + { + // ttESCROW_FINISH may authorize an MPT, but it can't have the + // mayAuthorizeMPT privilege, because that may cause + // non-amendment-gated side effects. + XRPL_ASSERT_PARTS( + !enforceEscrowFinish, "xrpl::ValidMPTIssuance::finalize", "not escrow finish tx"); + return true; + } + + if (hasPrivilege(tx, mayDeleteMPT) && mptokensDeleted_ == 1 && mptokensCreated_ == 0 && + mptIssuancesCreated_ == 0 && mptIssuancesDeleted_ == 0) + return true; + } + + if (mptIssuancesCreated_ != 0) + { + JLOG(j.fatal()) << "Invariant failed: a MPT issuance was created"; + } + else if (mptIssuancesDeleted_ != 0) + { + JLOG(j.fatal()) << "Invariant failed: a MPT issuance was deleted"; + } + else if (mptokensCreated_ != 0) + { + JLOG(j.fatal()) << "Invariant failed: a MPToken was created"; + } + else if (mptokensDeleted_ != 0) + { + JLOG(j.fatal()) << "Invariant failed: a MPToken was deleted"; + } + + return mptIssuancesCreated_ == 0 && mptIssuancesDeleted_ == 0 && mptokensCreated_ == 0 && + mptokensDeleted_ == 0; +} + +} // namespace xrpl diff --git a/src/libxrpl/tx/invariants/NFTInvariant.cpp b/src/libxrpl/tx/invariants/NFTInvariant.cpp new file mode 100644 index 0000000000..db06896023 --- /dev/null +++ b/src/libxrpl/tx/invariants/NFTInvariant.cpp @@ -0,0 +1,274 @@ +#include +// +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl { + +void +ValidNFTokenPage::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + static constexpr uint256 const& pageBits = nft::pageMask; + static constexpr uint256 const accountBits = ~pageBits; + + if ((before && before->getType() != ltNFTOKEN_PAGE) || + (after && after->getType() != ltNFTOKEN_PAGE)) + return; + + auto check = [this, isDelete](std::shared_ptr const& sle) { + uint256 const account = sle->key() & accountBits; + uint256 const hiLimit = sle->key() & pageBits; + std::optional const prev = (*sle)[~sfPreviousPageMin]; + + // Make sure that any page links... + // 1. Are properly associated with the owning account and + // 2. The page is correctly ordered between links. + if (prev) + { + if (account != (*prev & accountBits)) + badLink_ = true; + + if (hiLimit <= (*prev & pageBits)) + badLink_ = true; + } + + if (auto const next = (*sle)[~sfNextPageMin]) + { + if (account != (*next & accountBits)) + badLink_ = true; + + if (hiLimit >= (*next & pageBits)) + badLink_ = true; + } + + { + auto const& nftokens = sle->getFieldArray(sfNFTokens); + + // An NFTokenPage should never contain too many tokens or be empty. + if (std::size_t const nftokenCount = nftokens.size(); + (!isDelete && nftokenCount == 0) || nftokenCount > dirMaxTokensPerPage) + invalidSize_ = true; + + // If prev is valid, use it to establish a lower bound for + // page entries. If prev is not valid the lower bound is zero. + uint256 const loLimit = prev ? *prev & pageBits : uint256(beast::zero); + + // Also verify that all NFTokenIDs in the page are sorted. + uint256 loCmp = loLimit; + for (auto const& obj : nftokens) + { + uint256 const tokenID = obj[sfNFTokenID]; + if (!nft::compareTokens(loCmp, tokenID)) + badSort_ = true; + loCmp = tokenID; + + // None of the NFTs on this page should belong on lower or + // higher pages. + if (uint256 const tokenPageBits = tokenID & pageBits; + tokenPageBits < loLimit || tokenPageBits >= hiLimit) + badEntry_ = true; + + if (auto uri = obj[~sfURI]; uri && uri->empty()) + badURI_ = true; + } + } + }; + + if (before) + { + check(before); + + // While an account's NFToken directory contains any NFTokens, the last + // NFTokenPage (with 96 bits of 1 in the low part of the index) should + // never be deleted. + if (isDelete && (before->key() & nft::pageMask) == nft::pageMask && + before->isFieldPresent(sfPreviousPageMin)) + { + deletedFinalPage_ = true; + } + } + + if (after) + check(after); + + if (!isDelete && before && after) + { + // If the NFTokenPage + // 1. Has a NextMinPage field in before, but loses it in after, and + // 2. This is not the last page in the directory + // Then we have identified a corruption in the links between the + // NFToken pages in the NFToken directory. + if ((before->key() & nft::pageMask) != nft::pageMask && + before->isFieldPresent(sfNextPageMin) && !after->isFieldPresent(sfNextPageMin)) + { + deletedLink_ = true; + } + } +} + +bool +ValidNFTokenPage::finalize( + STTx const& tx, + TER const result, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + if (badLink_) + { + JLOG(j.fatal()) << "Invariant failed: NFT page is improperly linked."; + return false; + } + + if (badEntry_) + { + JLOG(j.fatal()) << "Invariant failed: NFT found in incorrect page."; + return false; + } + + if (badSort_) + { + JLOG(j.fatal()) << "Invariant failed: NFTs on page are not sorted."; + return false; + } + + if (badURI_) + { + JLOG(j.fatal()) << "Invariant failed: NFT contains empty URI."; + return false; + } + + if (invalidSize_) + { + JLOG(j.fatal()) << "Invariant failed: NFT page has invalid size."; + return false; + } + + if (view.rules().enabled(fixNFTokenPageLinks)) + { + if (deletedFinalPage_) + { + JLOG(j.fatal()) << "Invariant failed: Last NFT page deleted with " + "non-empty directory."; + return false; + } + if (deletedLink_) + { + JLOG(j.fatal()) << "Invariant failed: Lost NextMinPage link."; + return false; + } + } + + return true; +} + +//------------------------------------------------------------------------------ +void +NFTokenCountTracking::visitEntry( + bool, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (before && before->getType() == ltACCOUNT_ROOT) + { + beforeMintedTotal += (*before)[~sfMintedNFTokens].value_or(0); + beforeBurnedTotal += (*before)[~sfBurnedNFTokens].value_or(0); + } + + if (after && after->getType() == ltACCOUNT_ROOT) + { + afterMintedTotal += (*after)[~sfMintedNFTokens].value_or(0); + afterBurnedTotal += (*after)[~sfBurnedNFTokens].value_or(0); + } +} + +bool +NFTokenCountTracking::finalize( + STTx const& tx, + TER const result, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + if (!hasPrivilege(tx, changeNFTCounts)) + { + if (beforeMintedTotal != afterMintedTotal) + { + JLOG(j.fatal()) << "Invariant failed: the number of minted tokens " + "changed without a mint transaction!"; + return false; + } + + if (beforeBurnedTotal != afterBurnedTotal) + { + JLOG(j.fatal()) << "Invariant failed: the number of burned tokens " + "changed without a burn transaction!"; + return false; + } + + return true; + } + + if (tx.getTxnType() == ttNFTOKEN_MINT) + { + if (result == tesSUCCESS && beforeMintedTotal >= afterMintedTotal) + { + JLOG(j.fatal()) << "Invariant failed: successful minting didn't increase " + "the number of minted tokens."; + return false; + } + + if (result != tesSUCCESS && beforeMintedTotal != afterMintedTotal) + { + JLOG(j.fatal()) << "Invariant failed: failed minting changed the " + "number of minted tokens."; + return false; + } + + if (beforeBurnedTotal != afterBurnedTotal) + { + JLOG(j.fatal()) << "Invariant failed: minting changed the number of " + "burned tokens."; + return false; + } + } + + if (tx.getTxnType() == ttNFTOKEN_BURN) + { + if (result == tesSUCCESS) + { + if (beforeBurnedTotal >= afterBurnedTotal) + { + JLOG(j.fatal()) << "Invariant failed: successful burning didn't increase " + "the number of burned tokens."; + return false; + } + } + + if (result != tesSUCCESS && beforeBurnedTotal != afterBurnedTotal) + { + JLOG(j.fatal()) << "Invariant failed: failed burning changed the " + "number of burned tokens."; + return false; + } + + if (beforeMintedTotal != afterMintedTotal) + { + JLOG(j.fatal()) << "Invariant failed: burning changed the number of " + "minted tokens."; + return false; + } + } + + return true; +} + +} // namespace xrpl diff --git a/src/libxrpl/tx/invariants/PermissionedDEXInvariant.cpp b/src/libxrpl/tx/invariants/PermissionedDEXInvariant.cpp new file mode 100644 index 0000000000..2ece1f3fc0 --- /dev/null +++ b/src/libxrpl/tx/invariants/PermissionedDEXInvariant.cpp @@ -0,0 +1,93 @@ +#include +// +#include +#include +#include +#include +#include +#include + +namespace xrpl { + +void +ValidPermissionedDEX::visitEntry( + bool, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (after && after->getType() == ltDIR_NODE) + { + if (after->isFieldPresent(sfDomainID)) + domains_.insert(after->getFieldH256(sfDomainID)); + } + + if (after && after->getType() == ltOFFER) + { + if (after->isFieldPresent(sfDomainID)) + domains_.insert(after->getFieldH256(sfDomainID)); + else + regularOffers_ = true; + + // if a hybrid offer is missing domain or additional book, there's + // something wrong + if (after->isFlag(lsfHybrid) && + (!after->isFieldPresent(sfDomainID) || !after->isFieldPresent(sfAdditionalBooks) || + after->getFieldArray(sfAdditionalBooks).size() > 1)) + badHybrids_ = true; + } +} + +bool +ValidPermissionedDEX::finalize( + STTx const& tx, + TER const result, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + auto const txType = tx.getTxnType(); + if ((txType != ttPAYMENT && txType != ttOFFER_CREATE) || result != tesSUCCESS) + return true; + + // For each offercreate transaction, check if + // permissioned offers are valid + if (txType == ttOFFER_CREATE && badHybrids_) + { + JLOG(j.fatal()) << "Invariant failed: hybrid offer is malformed"; + return false; + } + + if (!tx.isFieldPresent(sfDomainID)) + return true; + + auto const domain = tx.getFieldH256(sfDomainID); + + if (!view.exists(keylet::permissionedDomain(domain))) + { + JLOG(j.fatal()) << "Invariant failed: domain doesn't exist"; + return false; + } + + // for both payment and offercreate, there shouldn't be another domain + // that's different from the domain specified + for (auto const& d : domains_) + { + if (d != domain) + { + JLOG(j.fatal()) << "Invariant failed: transaction" + " consumed wrong domains"; + return false; + } + } + + if (regularOffers_) + { + JLOG(j.fatal()) << "Invariant failed: domain transaction" + " affected regular offers"; + return false; + } + + return true; +} + +} // namespace xrpl diff --git a/src/libxrpl/tx/invariants/PermissionedDomainInvariant.cpp b/src/libxrpl/tx/invariants/PermissionedDomainInvariant.cpp new file mode 100644 index 0000000000..77acbe12c6 --- /dev/null +++ b/src/libxrpl/tx/invariants/PermissionedDomainInvariant.cpp @@ -0,0 +1,162 @@ +#include +// +#include +#include +#include +#include +#include + +namespace xrpl { + +void +ValidPermissionedDomain::visitEntry( + bool isDel, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + if (before && before->getType() != ltPERMISSIONED_DOMAIN) + return; + if (after && after->getType() != ltPERMISSIONED_DOMAIN) + return; + + auto check = [isDel](std::vector& sleStatus, std::shared_ptr const& sle) { + auto const& credentials = sle->getFieldArray(sfAcceptedCredentials); + auto const sorted = credentials::makeSorted(credentials); + + SleStatus ss{credentials.size(), false, !sorted.empty(), isDel}; + + // If array have duplicates then all the other checks are invalid + if (ss.isUnique_) + { + unsigned i = 0; + for (auto const& cred : sorted) + { + auto const& credTx = credentials[i++]; + ss.isSorted_ = + (cred.first == credTx[sfIssuer]) && (cred.second == credTx[sfCredentialType]); + if (!ss.isSorted_) + break; + } + } + sleStatus.emplace_back(std::move(ss)); + }; + + if (after) + check(sleStatus_, after); +} + +bool +ValidPermissionedDomain::finalize( + STTx const& tx, + TER const result, + XRPAmount const, + ReadView const& view, + beast::Journal const& j) +{ + auto check = [](SleStatus const& sleStatus, beast::Journal const& j) { + if (!sleStatus.credentialsSize_) + { + JLOG(j.fatal()) << "Invariant failed: permissioned domain with " + "no rules."; + return false; + } + + if (sleStatus.credentialsSize_ > maxPermissionedDomainCredentialsArraySize) + { + JLOG(j.fatal()) << "Invariant failed: permissioned domain bad " + "credentials size " + << sleStatus.credentialsSize_; + return false; + } + + if (!sleStatus.isUnique_) + { + JLOG(j.fatal()) << "Invariant failed: permissioned domain credentials " + "aren't unique"; + return false; + } + + if (!sleStatus.isSorted_) + { + JLOG(j.fatal()) << "Invariant failed: permissioned domain credentials " + "aren't sorted"; + return false; + } + + return true; + }; + + if (view.rules().enabled(fixPermissionedDomainInvariant)) + { + // No permissioned domains should be affected if the transaction failed + if (result != tesSUCCESS) + // If nothing changed, all is good. If there were changes, that's + // bad. + return sleStatus_.empty(); + + if (sleStatus_.size() > 1) + { + JLOG(j.fatal()) << "Invariant failed: transaction affected more " + "than 1 permissioned domain entry."; + return false; + } + + switch (tx.getTxnType()) + { + case ttPERMISSIONED_DOMAIN_SET: { + if (sleStatus_.empty()) + { + JLOG(j.fatal()) << "Invariant failed: no domain objects affected by " + "PermissionedDomainSet"; + return false; + } + + auto const& sleStatus = sleStatus_[0]; + if (sleStatus.isDelete_) + { + JLOG(j.fatal()) << "Invariant failed: domain object " + "deleted by PermissionedDomainSet"; + return false; + } + return check(sleStatus, j); + } + case ttPERMISSIONED_DOMAIN_DELETE: { + if (sleStatus_.empty()) + { + JLOG(j.fatal()) << "Invariant failed: no domain objects affected by " + "PermissionedDomainDelete"; + return false; + } + + if (!sleStatus_[0].isDelete_) + { + JLOG(j.fatal()) << "Invariant failed: domain object " + "modified, but not deleted by " + "PermissionedDomainDelete"; + return false; + } + return true; + } + default: { + if (!sleStatus_.empty()) + { + JLOG(j.fatal()) << "Invariant failed: " << sleStatus_.size() + << " domain object(s) affected by an " + "unauthorized transaction. " + << tx.getTxnType(); + return false; + } + return true; + } + } + } + else + { + if (tx.getTxnType() != ttPERMISSIONED_DOMAIN_SET || result != tesSUCCESS || + sleStatus_.empty()) + return true; + return check(sleStatus_[0], j); + } +} + +} // namespace xrpl diff --git a/src/libxrpl/tx/invariants/VaultInvariant.cpp b/src/libxrpl/tx/invariants/VaultInvariant.cpp new file mode 100644 index 0000000000..c3db3a563a --- /dev/null +++ b/src/libxrpl/tx/invariants/VaultInvariant.cpp @@ -0,0 +1,926 @@ +#include +// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl { + +ValidVault::Vault +ValidVault::Vault::make(SLE const& from) +{ + XRPL_ASSERT(from.getType() == ltVAULT, "ValidVault::Vault::make : from Vault object"); + + ValidVault::Vault self; + self.key = from.key(); + self.asset = from.at(sfAsset); + self.pseudoId = from.getAccountID(sfAccount); + self.owner = from.at(sfOwner); + self.shareMPTID = from.getFieldH192(sfShareMPTID); + self.assetsTotal = from.at(sfAssetsTotal); + self.assetsAvailable = from.at(sfAssetsAvailable); + self.assetsMaximum = from.at(sfAssetsMaximum); + self.lossUnrealized = from.at(sfLossUnrealized); + return self; +} + +ValidVault::Shares +ValidVault::Shares::make(SLE const& from) +{ + XRPL_ASSERT( + from.getType() == ltMPTOKEN_ISSUANCE, + "ValidVault::Shares::make : from MPTokenIssuance object"); + + ValidVault::Shares self; + self.share = MPTIssue(makeMptID(from.getFieldU32(sfSequence), from.getAccountID(sfIssuer))); + self.sharesTotal = from.at(sfOutstandingAmount); + self.sharesMaximum = from[~sfMaximumAmount].value_or(maxMPTokenAmount); + return self; +} + +void +ValidVault::visitEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) +{ + // If `before` is empty, this means an object is being created, in which + // case `isDelete` must be false. Otherwise `before` and `after` are set and + // `isDelete` indicates whether an object is being deleted or modified. + XRPL_ASSERT( + after != nullptr && (before != nullptr || !isDelete), + "xrpl::ValidVault::visitEntry : some object is available"); + + // Number balanceDelta will capture the difference (delta) between "before" + // state (zero if created) and "after" state (zero if destroyed), so the + // invariants can validate that the change in account balances matches the + // change in vault balances, stored to deltas_ at the end of this function. + Number balanceDelta{}; + + std::int8_t sign = 0; + if (before) + { + switch (before->getType()) + { + case ltVAULT: + beforeVault_.push_back(Vault::make(*before)); + break; + case ltMPTOKEN_ISSUANCE: + // At this moment we have no way of telling if this object holds + // vault shares or something else. Save it for finalize. + beforeMPTs_.push_back(Shares::make(*before)); + balanceDelta = static_cast(before->getFieldU64(sfOutstandingAmount)); + sign = 1; + break; + case ltMPTOKEN: + balanceDelta = static_cast(before->getFieldU64(sfMPTAmount)); + sign = -1; + break; + case ltACCOUNT_ROOT: + case ltRIPPLE_STATE: + balanceDelta = before->getFieldAmount(sfBalance); + sign = -1; + break; + default:; + } + } + + if (!isDelete && after) + { + switch (after->getType()) + { + case ltVAULT: + afterVault_.push_back(Vault::make(*after)); + break; + case ltMPTOKEN_ISSUANCE: + // At this moment we have no way of telling if this object holds + // vault shares or something else. Save it for finalize. + afterMPTs_.push_back(Shares::make(*after)); + balanceDelta -= + Number(static_cast(after->getFieldU64(sfOutstandingAmount))); + sign = 1; + break; + case ltMPTOKEN: + balanceDelta -= Number(static_cast(after->getFieldU64(sfMPTAmount))); + sign = -1; + break; + case ltACCOUNT_ROOT: + case ltRIPPLE_STATE: + balanceDelta -= Number(after->getFieldAmount(sfBalance)); + sign = -1; + break; + default:; + } + } + + uint256 const key = (before ? before->key() : after->key()); + // Append to deltas if sign is non-zero, i.e. an object of an interesting + // type has been updated. A transaction may update an object even when + // its balance has not changed, e.g. transaction fee equals the amount + // transferred to the account. We intentionally do not compare balanceDelta + // against zero, to avoid missing such updates. + if (sign != 0) + deltas_[key] = balanceDelta * sign; +} + +bool +ValidVault::finalize( + STTx const& tx, + TER const ret, + XRPAmount const fee, + ReadView const& view, + beast::Journal const& j) +{ + bool const enforce = view.rules().enabled(featureSingleAssetVault); + + if (!isTesSuccess(ret)) + return true; // Do not perform checks + + if (afterVault_.empty() && beforeVault_.empty()) + { + if (hasPrivilege(tx, mustModifyVault)) + { + JLOG(j.fatal()) << // + "Invariant failed: vault operation succeeded without modifying " + "a vault"; + XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : vault noop invariant"); + return !enforce; + } + + return true; // Not a vault operation + } + else if (!(hasPrivilege(tx, mustModifyVault) || hasPrivilege(tx, mayModifyVault))) + { + JLOG(j.fatal()) << // + "Invariant failed: vault updated by a wrong transaction type"; + XRPL_ASSERT( + enforce, + "xrpl::ValidVault::finalize : illegal vault transaction " + "invariant"); + return !enforce; // Also not a vault operation + } + + if (beforeVault_.size() > 1 || afterVault_.size() > 1) + { + JLOG(j.fatal()) << // + "Invariant failed: vault operation updated more than single vault"; + XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : single vault invariant"); + return !enforce; // That's all we can do here + } + + auto const txnType = tx.getTxnType(); + + // We do special handling for ttVAULT_DELETE first, because it's the only + // vault-modifying transaction without an "after" state of the vault + if (afterVault_.empty()) + { + if (txnType != ttVAULT_DELETE) + { + JLOG(j.fatal()) << // + "Invariant failed: vault deleted by a wrong transaction type"; + XRPL_ASSERT( + enforce, + "xrpl::ValidVault::finalize : illegal vault deletion " + "invariant"); + return !enforce; // That's all we can do here + } + + // Note, if afterVault_ is empty then we know that beforeVault_ is not + // empty, as enforced at the top of this function + auto const& beforeVault = beforeVault_[0]; + + // At this moment we only know a vault is being deleted and there + // might be some MPTokenIssuance objects which are deleted in the + // same transaction. Find the one matching this vault. + auto const deletedShares = [&]() -> std::optional { + for (auto const& e : beforeMPTs_) + { + if (e.share.getMptID() == beforeVault.shareMPTID) + return std::move(e); + } + return std::nullopt; + }(); + + if (!deletedShares) + { + JLOG(j.fatal()) << "Invariant failed: deleted vault must also " + "delete shares"; + XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : shares deletion invariant"); + return !enforce; // That's all we can do here + } + + bool result = true; + if (deletedShares->sharesTotal != 0) + { + JLOG(j.fatal()) << "Invariant failed: deleted vault must have no " + "shares outstanding"; + result = false; + } + if (beforeVault.assetsTotal != zero) + { + JLOG(j.fatal()) << "Invariant failed: deleted vault must have no " + "assets outstanding"; + result = false; + } + if (beforeVault.assetsAvailable != zero) + { + JLOG(j.fatal()) << "Invariant failed: deleted vault must have no " + "assets available"; + result = false; + } + + return result; + } + else if (txnType == ttVAULT_DELETE) + { + JLOG(j.fatal()) << "Invariant failed: vault deletion succeeded without " + "deleting a vault"; + XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : vault deletion invariant"); + return !enforce; // That's all we can do here + } + + // Note, `afterVault_.empty()` is handled above + auto const& afterVault = afterVault_[0]; + XRPL_ASSERT( + beforeVault_.empty() || beforeVault_[0].key == afterVault.key, + "xrpl::ValidVault::finalize : single vault operation"); + + auto const updatedShares = [&]() -> std::optional { + // At this moment we only know that a vault is being updated and there + // might be some MPTokenIssuance objects which are also updated in the + // same transaction. Find the one matching the shares to this vault. + // Note, we expect updatedMPTs collection to be extremely small. For + // such collections linear search is faster than lookup. + for (auto const& e : afterMPTs_) + { + if (e.share.getMptID() == afterVault.shareMPTID) + return e; + } + + auto const sleShares = view.read(keylet::mptIssuance(afterVault.shareMPTID)); + + return sleShares ? std::optional(Shares::make(*sleShares)) : std::nullopt; + }(); + + bool result = true; + + // Universal transaction checks + if (!beforeVault_.empty()) + { + auto const& beforeVault = beforeVault_[0]; + if (afterVault.asset != beforeVault.asset || afterVault.pseudoId != beforeVault.pseudoId || + afterVault.shareMPTID != beforeVault.shareMPTID) + { + JLOG(j.fatal()) << "Invariant failed: violation of vault immutable data"; + result = false; + } + } + + if (!updatedShares) + { + JLOG(j.fatal()) << "Invariant failed: updated vault must have shares"; + XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : vault has shares invariant"); + return !enforce; // That's all we can do here + } + + if (updatedShares->sharesTotal == 0) + { + if (afterVault.assetsTotal != zero) + { + JLOG(j.fatal()) << "Invariant failed: updated zero sized " + "vault must have no assets outstanding"; + result = false; + } + if (afterVault.assetsAvailable != zero) + { + JLOG(j.fatal()) << "Invariant failed: updated zero sized " + "vault must have no assets available"; + result = false; + } + } + else if (updatedShares->sharesTotal > updatedShares->sharesMaximum) + { + JLOG(j.fatal()) // + << "Invariant failed: updated shares must not exceed maximum " + << updatedShares->sharesMaximum; + result = false; + } + + if (afterVault.assetsAvailable < zero) + { + JLOG(j.fatal()) << "Invariant failed: assets available must be positive"; + result = false; + } + + if (afterVault.assetsAvailable > afterVault.assetsTotal) + { + JLOG(j.fatal()) << "Invariant failed: assets available must " + "not be greater than assets outstanding"; + result = false; + } + else if (afterVault.lossUnrealized > afterVault.assetsTotal - afterVault.assetsAvailable) + { + JLOG(j.fatal()) // + << "Invariant failed: loss unrealized must not exceed " + "the difference between assets outstanding and available"; + result = false; + } + + if (afterVault.assetsTotal < zero) + { + JLOG(j.fatal()) << "Invariant failed: assets outstanding must be positive"; + result = false; + } + + if (afterVault.assetsMaximum < zero) + { + JLOG(j.fatal()) << "Invariant failed: assets maximum must be positive"; + result = false; + } + + // Thanks to this check we can simply do `assert(!beforeVault_.empty()` when + // enforcing invariants on transaction types other than ttVAULT_CREATE + if (beforeVault_.empty() && txnType != ttVAULT_CREATE) + { + JLOG(j.fatal()) << // + "Invariant failed: vault created by a wrong transaction type"; + XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : vault creation invariant"); + return !enforce; // That's all we can do here + } + + if (!beforeVault_.empty() && afterVault.lossUnrealized != beforeVault_[0].lossUnrealized && + txnType != ttLOAN_MANAGE && txnType != ttLOAN_PAY) + { + JLOG(j.fatal()) << // + "Invariant failed: vault transaction must not change loss " + "unrealized"; + result = false; + } + + auto const beforeShares = [&]() -> std::optional { + if (beforeVault_.empty()) + return std::nullopt; + auto const& beforeVault = beforeVault_[0]; + + for (auto const& e : beforeMPTs_) + { + if (e.share.getMptID() == beforeVault.shareMPTID) + return std::move(e); + } + return std::nullopt; + }(); + + if (!beforeShares && + (tx.getTxnType() == ttVAULT_DEPOSIT || // + tx.getTxnType() == ttVAULT_WITHDRAW || // + tx.getTxnType() == ttVAULT_CLAWBACK)) + { + JLOG(j.fatal()) << "Invariant failed: vault operation succeeded " + "without updating shares"; + XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : shares noop invariant"); + return !enforce; // That's all we can do here + } + + auto const& vaultAsset = afterVault.asset; + auto const deltaAssets = [&](AccountID const& id) -> std::optional { + auto const get = // + [&](auto const& it, std::int8_t sign = 1) -> std::optional { + if (it == deltas_.end()) + return std::nullopt; + + return it->second * sign; + }; + + return std::visit( + [&](TIss const& issue) { + if constexpr (std::is_same_v) + { + if (isXRP(issue)) + return get(deltas_.find(keylet::account(id).key)); + return get( + deltas_.find(keylet::line(id, issue).key), id > issue.getIssuer() ? -1 : 1); + } + else if constexpr (std::is_same_v) + { + return get(deltas_.find(keylet::mptoken(issue.getMptID(), id).key)); + } + }, + vaultAsset.value()); + }; + auto const deltaAssetsTxAccount = [&]() -> std::optional { + auto ret = deltaAssets(tx[sfAccount]); + // Nothing returned or not XRP transaction + if (!ret.has_value() || !vaultAsset.native()) + return ret; + + // Delegated transaction; no need to compensate for fees + if (auto const delegate = tx[~sfDelegate]; + delegate.has_value() && *delegate != tx[sfAccount]) + return ret; + + *ret += fee.drops(); + if (*ret == zero) + return std::nullopt; + + return ret; + }; + auto const deltaShares = [&](AccountID const& id) -> std::optional { + auto const it = [&]() { + if (id == afterVault.pseudoId) + return deltas_.find(keylet::mptIssuance(afterVault.shareMPTID).key); + return deltas_.find(keylet::mptoken(afterVault.shareMPTID, id).key); + }(); + + return it != deltas_.end() ? std::optional(it->second) : std::nullopt; + }; + + auto const vaultHoldsNoAssets = [&](Vault const& vault) { + return vault.assetsAvailable == 0 && vault.assetsTotal == 0; + }; + + // Technically this does not need to be a lambda, but it's more + // convenient thanks to early "return false"; the not-so-nice + // alternatives are several layers of nested if/else or more complex + // (i.e. brittle) if statements. + result &= [&]() { + switch (txnType) + { + case ttVAULT_CREATE: { + bool result = true; + + if (!beforeVault_.empty()) + { + JLOG(j.fatal()) // + << "Invariant failed: create operation must not have " + "updated a vault"; + result = false; + } + + if (afterVault.assetsAvailable != zero || afterVault.assetsTotal != zero || + afterVault.lossUnrealized != zero || updatedShares->sharesTotal != 0) + { + JLOG(j.fatal()) // + << "Invariant failed: created vault must be empty"; + result = false; + } + + if (afterVault.pseudoId != updatedShares->share.getIssuer()) + { + JLOG(j.fatal()) // + << "Invariant failed: shares issuer and vault " + "pseudo-account must be the same"; + result = false; + } + + auto const sleSharesIssuer = + view.read(keylet::account(updatedShares->share.getIssuer())); + if (!sleSharesIssuer) + { + JLOG(j.fatal()) // + << "Invariant failed: shares issuer must exist"; + return false; + } + + if (!isPseudoAccount(sleSharesIssuer)) + { + JLOG(j.fatal()) // + << "Invariant failed: shares issuer must be a " + "pseudo-account"; + result = false; + } + + if (auto const vaultId = (*sleSharesIssuer)[~sfVaultID]; + !vaultId || *vaultId != afterVault.key) + { + JLOG(j.fatal()) // + << "Invariant failed: shares issuer pseudo-account " + "must point back to the vault"; + result = false; + } + + return result; + } + case ttVAULT_SET: { + bool result = true; + + XRPL_ASSERT( + !beforeVault_.empty(), "xrpl::ValidVault::finalize : set updated a vault"); + auto const& beforeVault = beforeVault_[0]; + + auto const vaultDeltaAssets = deltaAssets(afterVault.pseudoId); + if (vaultDeltaAssets) + { + JLOG(j.fatal()) << // + "Invariant failed: set must not change vault balance"; + result = false; + } + + if (beforeVault.assetsTotal != afterVault.assetsTotal) + { + JLOG(j.fatal()) << // + "Invariant failed: set must not change assets " + "outstanding"; + result = false; + } + + if (afterVault.assetsMaximum > zero && + afterVault.assetsTotal > afterVault.assetsMaximum) + { + JLOG(j.fatal()) << // + "Invariant failed: set assets outstanding must not " + "exceed assets maximum"; + result = false; + } + + if (beforeVault.assetsAvailable != afterVault.assetsAvailable) + { + JLOG(j.fatal()) << // + "Invariant failed: set must not change assets " + "available"; + result = false; + } + + if (beforeShares && updatedShares && + beforeShares->sharesTotal != updatedShares->sharesTotal) + { + JLOG(j.fatal()) << // + "Invariant failed: set must not change shares " + "outstanding"; + result = false; + } + + return result; + } + case ttVAULT_DEPOSIT: { + bool result = true; + + XRPL_ASSERT( + !beforeVault_.empty(), "xrpl::ValidVault::finalize : deposit updated a vault"); + auto const& beforeVault = beforeVault_[0]; + + auto const vaultDeltaAssets = deltaAssets(afterVault.pseudoId); + + if (!vaultDeltaAssets) + { + JLOG(j.fatal()) << // + "Invariant failed: deposit must change vault balance"; + return false; // That's all we can do + } + + if (*vaultDeltaAssets > tx[sfAmount]) + { + JLOG(j.fatal()) << // + "Invariant failed: deposit must not change vault " + "balance by more than deposited amount"; + result = false; + } + + if (*vaultDeltaAssets <= zero) + { + JLOG(j.fatal()) << // + "Invariant failed: deposit must increase vault balance"; + result = false; + } + + // Any payments (including deposits) made by the issuer + // do not change their balance, but create funds instead. + bool const issuerDeposit = [&]() -> bool { + if (vaultAsset.native()) + return false; + return tx[sfAccount] == vaultAsset.getIssuer(); + }(); + + if (!issuerDeposit) + { + auto const accountDeltaAssets = deltaAssetsTxAccount(); + if (!accountDeltaAssets) + { + JLOG(j.fatal()) << // + "Invariant failed: deposit must change depositor " + "balance"; + return false; + } + + if (*accountDeltaAssets >= zero) + { + JLOG(j.fatal()) << // + "Invariant failed: deposit must decrease depositor " + "balance"; + result = false; + } + + if (*accountDeltaAssets * -1 != *vaultDeltaAssets) + { + JLOG(j.fatal()) << // + "Invariant failed: deposit must change vault and " + "depositor balance by equal amount"; + result = false; + } + } + + if (afterVault.assetsMaximum > zero && + afterVault.assetsTotal > afterVault.assetsMaximum) + { + JLOG(j.fatal()) << // + "Invariant failed: deposit assets outstanding must not " + "exceed assets maximum"; + result = false; + } + + auto const accountDeltaShares = deltaShares(tx[sfAccount]); + if (!accountDeltaShares) + { + JLOG(j.fatal()) << // + "Invariant failed: deposit must change depositor " + "shares"; + return false; // That's all we can do + } + + if (*accountDeltaShares <= zero) + { + JLOG(j.fatal()) << // + "Invariant failed: deposit must increase depositor " + "shares"; + result = false; + } + + auto const vaultDeltaShares = deltaShares(afterVault.pseudoId); + if (!vaultDeltaShares || *vaultDeltaShares == zero) + { + JLOG(j.fatal()) << // + "Invariant failed: deposit must change vault shares"; + return false; // That's all we can do + } + + if (*vaultDeltaShares * -1 != *accountDeltaShares) + { + JLOG(j.fatal()) << // + "Invariant failed: deposit must change depositor and " + "vault shares by equal amount"; + result = false; + } + + if (beforeVault.assetsTotal + *vaultDeltaAssets != afterVault.assetsTotal) + { + JLOG(j.fatal()) << "Invariant failed: deposit and assets " + "outstanding must add up"; + result = false; + } + if (beforeVault.assetsAvailable + *vaultDeltaAssets != afterVault.assetsAvailable) + { + JLOG(j.fatal()) << "Invariant failed: deposit and assets " + "available must add up"; + result = false; + } + + return result; + } + case ttVAULT_WITHDRAW: { + bool result = true; + + XRPL_ASSERT( + !beforeVault_.empty(), + "xrpl::ValidVault::finalize : withdrawal updated a " + "vault"); + auto const& beforeVault = beforeVault_[0]; + + auto const vaultDeltaAssets = deltaAssets(afterVault.pseudoId); + + if (!vaultDeltaAssets) + { + JLOG(j.fatal()) << "Invariant failed: withdrawal must " + "change vault balance"; + return false; // That's all we can do + } + + if (*vaultDeltaAssets >= zero) + { + JLOG(j.fatal()) << "Invariant failed: withdrawal must " + "decrease vault balance"; + result = false; + } + + // Any payments (including withdrawal) going to the issuer + // do not change their balance, but destroy funds instead. + bool const issuerWithdrawal = [&]() -> bool { + if (vaultAsset.native()) + return false; + auto const destination = tx[~sfDestination].value_or(tx[sfAccount]); + return destination == vaultAsset.getIssuer(); + }(); + + if (!issuerWithdrawal) + { + auto const accountDeltaAssets = deltaAssetsTxAccount(); + auto const otherAccountDelta = [&]() -> std::optional { + if (auto const destination = tx[~sfDestination]; + destination && *destination != tx[sfAccount]) + return deltaAssets(*destination); + return std::nullopt; + }(); + + if (accountDeltaAssets.has_value() == otherAccountDelta.has_value()) + { + JLOG(j.fatal()) << // + "Invariant failed: withdrawal must change one " + "destination balance"; + return false; + } + + auto const destinationDelta = // + accountDeltaAssets ? *accountDeltaAssets : *otherAccountDelta; + + if (destinationDelta <= zero) + { + JLOG(j.fatal()) << // + "Invariant failed: withdrawal must increase " + "destination balance"; + result = false; + } + + if (*vaultDeltaAssets * -1 != destinationDelta) + { + JLOG(j.fatal()) << // + "Invariant failed: withdrawal must change vault " + "and destination balance by equal amount"; + result = false; + } + } + + auto const accountDeltaShares = deltaShares(tx[sfAccount]); + if (!accountDeltaShares) + { + JLOG(j.fatal()) << // + "Invariant failed: withdrawal must change depositor " + "shares"; + return false; + } + + if (*accountDeltaShares >= zero) + { + JLOG(j.fatal()) << // + "Invariant failed: withdrawal must decrease depositor " + "shares"; + result = false; + } + + auto const vaultDeltaShares = deltaShares(afterVault.pseudoId); + if (!vaultDeltaShares || *vaultDeltaShares == zero) + { + JLOG(j.fatal()) << // + "Invariant failed: withdrawal must change vault shares"; + return false; // That's all we can do + } + + if (*vaultDeltaShares * -1 != *accountDeltaShares) + { + JLOG(j.fatal()) << // + "Invariant failed: withdrawal must change depositor " + "and vault shares by equal amount"; + result = false; + } + + // Note, vaultBalance is negative (see check above) + if (beforeVault.assetsTotal + *vaultDeltaAssets != afterVault.assetsTotal) + { + JLOG(j.fatal()) << "Invariant failed: withdrawal and " + "assets outstanding must add up"; + result = false; + } + + if (beforeVault.assetsAvailable + *vaultDeltaAssets != afterVault.assetsAvailable) + { + JLOG(j.fatal()) << "Invariant failed: withdrawal and " + "assets available must add up"; + result = false; + } + + return result; + } + case ttVAULT_CLAWBACK: { + bool result = true; + + XRPL_ASSERT( + !beforeVault_.empty(), "xrpl::ValidVault::finalize : clawback updated a vault"); + auto const& beforeVault = beforeVault_[0]; + + if (vaultAsset.native() || vaultAsset.getIssuer() != tx[sfAccount]) + { + // The owner can use clawback to force-burn shares when the + // vault is empty but there are outstanding shares + if (!(beforeShares && beforeShares->sharesTotal > 0 && + vaultHoldsNoAssets(beforeVault) && beforeVault.owner == tx[sfAccount])) + { + JLOG(j.fatal()) << // + "Invariant failed: clawback may only be performed " + "by the asset issuer, or by the vault owner of an " + "empty vault"; + return false; // That's all we can do + } + } + + auto const vaultDeltaAssets = deltaAssets(afterVault.pseudoId); + if (vaultDeltaAssets) + { + if (*vaultDeltaAssets >= zero) + { + JLOG(j.fatal()) << // + "Invariant failed: clawback must decrease vault " + "balance"; + result = false; + } + + if (beforeVault.assetsTotal + *vaultDeltaAssets != afterVault.assetsTotal) + { + JLOG(j.fatal()) << // + "Invariant failed: clawback and assets outstanding " + "must add up"; + result = false; + } + + if (beforeVault.assetsAvailable + *vaultDeltaAssets != + afterVault.assetsAvailable) + { + JLOG(j.fatal()) << // + "Invariant failed: clawback and assets available " + "must add up"; + result = false; + } + } + else if (!vaultHoldsNoAssets(beforeVault)) + { + JLOG(j.fatal()) << // + "Invariant failed: clawback must change vault balance"; + return false; // That's all we can do + } + + auto const accountDeltaShares = deltaShares(tx[sfHolder]); + if (!accountDeltaShares) + { + JLOG(j.fatal()) << // + "Invariant failed: clawback must change holder shares"; + return false; // That's all we can do + } + + if (*accountDeltaShares >= zero) + { + JLOG(j.fatal()) << // + "Invariant failed: clawback must decrease holder " + "shares"; + result = false; + } + + auto const vaultDeltaShares = deltaShares(afterVault.pseudoId); + if (!vaultDeltaShares || *vaultDeltaShares == zero) + { + JLOG(j.fatal()) << // + "Invariant failed: clawback must change vault shares"; + return false; // That's all we can do + } + + if (*vaultDeltaShares * -1 != *accountDeltaShares) + { + JLOG(j.fatal()) << // + "Invariant failed: clawback must change holder and " + "vault shares by equal amount"; + result = false; + } + + return result; + } + + case ttLOAN_SET: + case ttLOAN_MANAGE: + case ttLOAN_PAY: { + // TBD + return true; + } + + default: + // LCOV_EXCL_START + UNREACHABLE("xrpl::ValidVault::finalize : unknown transaction type"); + return false; + // LCOV_EXCL_STOP + } + }(); + + if (!result) + { + // The comment at the top of this file starting with "assert(enforce)" + // explains this assert. + XRPL_ASSERT(enforce, "xrpl::ValidVault::finalize : vault invariants"); + return !enforce; + } + + return true; +} + +} // namespace xrpl diff --git a/src/libxrpl/tx/transactors/PermissionedDomain/PermissionedDomainSet.cpp b/src/libxrpl/tx/transactors/PermissionedDomain/PermissionedDomainSet.cpp index 51ff4d8217..15bb79b239 100644 --- a/src/libxrpl/tx/transactors/PermissionedDomain/PermissionedDomainSet.cpp +++ b/src/libxrpl/tx/transactors/PermissionedDomain/PermissionedDomainSet.cpp @@ -1,10 +1,9 @@ +#include +// #include #include #include #include -#include - -#include namespace xrpl { diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index d786c4498a..91c80eabe2 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -76,7 +76,10 @@ createApplyContext( } static ApplyContext -createApplyContext(test::jtx::Env& env, OpenView& ov, STTx const& tx = STTx(ttESCROW_FINISH, [](STObject&) {})) +createApplyContext( + test::jtx::Env& env, + OpenView& ov, + STTx const& tx = STTx(ttESCROW_FINISH, [](STObject&) {})) { return createApplyContext(env, ov, env.journal, tx); } @@ -115,7 +118,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto const result = hfs.getParentLedgerTime(); if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == env.current()->parentCloseTime().time_since_epoch().count()); + BEAST_EXPECT( + result.value() == env.current()->parentCloseTime().time_since_epoch().count()); } } @@ -216,9 +220,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmHostFunctionsImpl hfs(ac, dummyEscrow); - BEAST_EXPECT(hfs.cacheLedgerObj(accountKeylet.key, -1).error() == HostFunctionError::SLOT_OUT_RANGE); - BEAST_EXPECT(hfs.cacheLedgerObj(accountKeylet.key, 257).error() == HostFunctionError::SLOT_OUT_RANGE); - BEAST_EXPECT(hfs.cacheLedgerObj(dummyEscrow.key, 0).error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); + BEAST_EXPECT( + hfs.cacheLedgerObj(accountKeylet.key, -1).error() == + HostFunctionError::SLOT_OUT_RANGE); + BEAST_EXPECT( + hfs.cacheLedgerObj(accountKeylet.key, 257).error() == + HostFunctionError::SLOT_OUT_RANGE); + BEAST_EXPECT( + hfs.cacheLedgerObj(dummyEscrow.key, 0).error() == + HostFunctionError::LEDGER_OBJ_NOT_FOUND); BEAST_EXPECT(hfs.cacheLedgerObj(accountKeylet.key, 0).value() == 1); for (int i = 1; i <= 256; ++i) @@ -226,7 +236,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.cacheLedgerObj(accountKeylet.key, i); BEAST_EXPECT(result.has_value() && result.value() == i); } - BEAST_EXPECT(hfs.cacheLedgerObj(accountKeylet.key, 0).error() == HostFunctionError::SLOTS_FULL); + BEAST_EXPECT( + hfs.cacheLedgerObj(accountKeylet.key, 0).error() == HostFunctionError::SLOTS_FULL); } { @@ -237,7 +248,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.cacheLedgerObj(accountKeylet.key, 0); BEAST_EXPECT(result.has_value() && result.value() == i); } - BEAST_EXPECT(hfs.cacheLedgerObj(accountKeylet.key, 0).error() == HostFunctionError::SLOTS_FULL); + BEAST_EXPECT( + hfs.cacheLedgerObj(accountKeylet.key, 0).error() == HostFunctionError::SLOTS_FULL); } } @@ -247,7 +259,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("getTxField"); using namespace test::jtx; - std::string const credIdHex = "0011223344556677889900112233445566778899001122334455667788990011"; + std::string const credIdHex = + "0011223344556677889900112233445566778899001122334455667788990011"; uint256 credId; BEAST_EXPECT(credId.parseHex(credIdHex)); @@ -404,7 +417,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should return nullopt for a field not present auto const notPresent = hfs.getCurrentLedgerObjField(sfOwner); - BEAST_EXPECT(!notPresent.has_value() && notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); + BEAST_EXPECT( + !notPresent.has_value() && notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); { auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); @@ -454,7 +468,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should return error for slot out of range auto const outOfRange = hfs.getLedgerObjField(0, sfAccount); - BEAST_EXPECT(!outOfRange.has_value() && outOfRange.error() == HostFunctionError::SLOT_OUT_RANGE); + BEAST_EXPECT( + !outOfRange.has_value() && outOfRange.error() == HostFunctionError::SLOT_OUT_RANGE); auto const tooHigh = hfs.getLedgerObjField(257, sfAccount); BEAST_EXPECT(!tooHigh.has_value() && tooHigh.error() == HostFunctionError::SLOT_OUT_RANGE); @@ -465,7 +480,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should return error for field not present auto const notPresent = hfs.getLedgerObjField(1, sfOwner); - BEAST_EXPECT(!notPresent.has_value() && notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); + BEAST_EXPECT( + !notPresent.has_value() && notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); } void @@ -477,7 +493,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; - std::string const credIdHex = "0011223344556677889900112233445566778899001122334455667788990011"; + std::string const credIdHex = + "0011223344556677889900112233445566778899001122334455667788990011"; uint256 credId; BEAST_EXPECT(credId.parseHex(credIdHex)); @@ -504,7 +521,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator is a sequence of int32_t codes: // [sfMemos.fieldCode, 0, sfMemoData.fieldCode] std::vector locatorVec = {sfMemos.fieldCode, 0, sfMemoData.fieldCode}; - Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedField(locator); if (BEAST_EXPECTS(result.has_value(), std::to_string(static_cast(result.error())))) @@ -517,7 +536,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // Locator for sfCredentialIDs[0] std::vector locatorVec = {sfCredentialIDs.fieldCode, 0}; - Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedField(locator); if (BEAST_EXPECTS(result.has_value(), std::to_string(static_cast(result.error())))) @@ -530,10 +551,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // can use the nested locator for base fields too std::vector locatorVec = {sfAccount.fieldCode}; - Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const account = hfs.getTxNestedField(locator); - if (BEAST_EXPECTS(account.has_value(), std::to_string(static_cast(account.error())))) + if (BEAST_EXPECTS( + account.has_value(), std::to_string(static_cast(account.error())))) { BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); } @@ -546,17 +570,23 @@ struct HostFuncImpl_test : public beast::unit_test::suite Slice locator(reinterpret_cast(locatorVec.data() + 1), sizeof(int32_t)); auto const account = hfs.getTxNestedField(locator); - if (BEAST_EXPECTS(account.has_value(), std::to_string(static_cast(account.error())))) + if (BEAST_EXPECTS( + account.has_value(), std::to_string(static_cast(account.error())))) { BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); } } - auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError) { - Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + auto expectError = [&](std::vector const& locatorVec, + HostFunctionError expectedError) { + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedField(locator); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECTS(result.error() == expectedError, std::to_string(static_cast(result.error()))); + BEAST_EXPECTS( + result.error() == expectedError, + std::to_string(static_cast(result.error()))); }; // Locator for non-existent base field expectError( @@ -618,7 +648,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite Slice malformedLocator(reinterpret_cast(locatorVec.data()), 3); auto const malformedResult = hfs.getTxNestedField(malformedLocator); BEAST_EXPECT( - !malformedResult.has_value() && malformedResult.error() == HostFunctionError::LOCATOR_MALFORMED); + !malformedResult.has_value() && + malformedResult.error() == HostFunctionError::LOCATOR_MALFORMED); } } @@ -646,18 +677,25 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for base field std::vector baseLocator = {sfSignerQuorum.fieldCode}; Slice baseLocatorSlice( - reinterpret_cast(baseLocator.data()), baseLocator.size() * sizeof(int32_t)); + reinterpret_cast(baseLocator.data()), + baseLocator.size() * sizeof(int32_t)); auto const signerQuorum = hfs.getCurrentLedgerObjNestedField(baseLocatorSlice); - if (BEAST_EXPECTS(signerQuorum.has_value(), std::to_string(static_cast(signerQuorum.error())))) + if (BEAST_EXPECTS( + signerQuorum.has_value(), std::to_string(static_cast(signerQuorum.error())))) { BEAST_EXPECT(*signerQuorum == toBytes(static_cast(2))); } - auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError) { - Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + auto expectError = [&](std::vector const& locatorVec, + HostFunctionError expectedError) { + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getCurrentLedgerObjNestedField(locator); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECTS(result.error() == expectedError, std::to_string(static_cast(result.error()))); + BEAST_EXPECTS( + result.error() == expectedError, + std::to_string(static_cast(result.error()))); }; // Locator for non-existent base field expectError( @@ -675,19 +713,25 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for empty locator Slice emptyLocator(nullptr, 0); auto const emptyResult = hfs.getCurrentLedgerObjNestedField(emptyLocator); - BEAST_EXPECT(!emptyResult.has_value() && emptyResult.error() == HostFunctionError::LOCATOR_MALFORMED); + BEAST_EXPECT( + !emptyResult.has_value() && + emptyResult.error() == HostFunctionError::LOCATOR_MALFORMED); // Locator for malformed locator (not multiple of 4) std::vector malformedLocatorVec = {sfMemos.fieldCode}; Slice malformedLocator(reinterpret_cast(malformedLocatorVec.data()), 3); auto const malformedResult = hfs.getCurrentLedgerObjNestedField(malformedLocator); - BEAST_EXPECT(!malformedResult.has_value() && malformedResult.error() == HostFunctionError::LOCATOR_MALFORMED); + BEAST_EXPECT( + !malformedResult.has_value() && + malformedResult.error() == HostFunctionError::LOCATOR_MALFORMED); { auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); std::vector const locatorVec = {sfAccount.fieldCode}; - Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const result = dummyHfs.getCurrentLedgerObjNestedField(locator); if (BEAST_EXPECT(!result.has_value())) BEAST_EXPECTS( @@ -722,8 +766,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for sfSignerEntries[0].sfAccount { - std::vector const locatorVec = {sfSignerEntries.fieldCode, 0, sfAccount.fieldCode}; - Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + std::vector const locatorVec = { + sfSignerEntries.fieldCode, 0, sfAccount.fieldCode}; + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getLedgerObjNestedField(1, locator); if (BEAST_EXPECTS(result.has_value(), std::to_string(static_cast(result.error())))) @@ -734,11 +781,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for sfSignerEntries[1].sfAccount { - std::vector const locatorVec = {sfSignerEntries.fieldCode, 1, sfAccount.fieldCode}; - Slice const locator = - Slice(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + std::vector const locatorVec = { + sfSignerEntries.fieldCode, 1, sfAccount.fieldCode}; + Slice const locator = Slice( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const result2 = hfs.getLedgerObjNestedField(1, locator); - if (BEAST_EXPECTS(result2.has_value(), std::to_string(static_cast(result2.error())))) + if (BEAST_EXPECTS( + result2.has_value(), std::to_string(static_cast(result2.error())))) { BEAST_EXPECT(std::ranges::equal(*result2, becky.id())); } @@ -746,11 +796,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for sfSignerEntries[0].sfSignerWeight { - std::vector const locatorVec = {sfSignerEntries.fieldCode, 0, sfSignerWeight.fieldCode}; - Slice const locator = - Slice(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + std::vector const locatorVec = { + sfSignerEntries.fieldCode, 0, sfSignerWeight.fieldCode}; + Slice const locator = Slice( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const weightResult = hfs.getLedgerObjNestedField(1, locator); - if (BEAST_EXPECTS(weightResult.has_value(), std::to_string(static_cast(weightResult.error())))) + if (BEAST_EXPECTS( + weightResult.has_value(), + std::to_string(static_cast(weightResult.error())))) { // Should be 1 auto const expected = toBytes(static_cast(1)); @@ -761,10 +815,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for base field sfSignerQuorum { std::vector const locatorVec = {sfSignerQuorum.fieldCode}; - Slice const locator = - Slice(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + Slice const locator = Slice( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const quorumResult = hfs.getLedgerObjNestedField(1, locator); - if (BEAST_EXPECTS(quorumResult.has_value(), std::to_string(static_cast(quorumResult.error())))) + if (BEAST_EXPECTS( + quorumResult.has_value(), + std::to_string(static_cast(quorumResult.error())))) { auto const expected = toBytes(static_cast(2)); BEAST_EXPECT(*quorumResult == expected); @@ -772,12 +829,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite } // Helper for error checks - auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError, int slot = 1) { + auto expectError = [&](std::vector const& locatorVec, + HostFunctionError expectedError, + int slot = 1) { Slice const locator( - reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getLedgerObjNestedField(slot, locator); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECTS(result.error() == expectedError, std::to_string(static_cast(result.error()))); + BEAST_EXPECTS( + result.error() == expectedError, + std::to_string(static_cast(result.error()))); }; // Error: base field not found @@ -804,10 +866,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite HostFunctionError::FIELD_NOT_FOUND); // Error: invalid field code - expectError({field_code(99999, 99999), 0, sfAccount.fieldCode}, HostFunctionError::INVALID_FIELD); + expectError( + {field_code(99999, 99999), 0, sfAccount.fieldCode}, HostFunctionError::INVALID_FIELD); // Error: invalid nested field code - expectError({sfSignerEntries.fieldCode, 0, field_code(99999, 99999)}, HostFunctionError::INVALID_FIELD); + expectError( + {sfSignerEntries.fieldCode, 0, field_code(99999, 99999)}, + HostFunctionError::INVALID_FIELD); // Error: slot out of range expectError({sfSignerQuorum.fieldCode}, HostFunctionError::SLOT_OUT_RANGE, 0); @@ -820,7 +885,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite expectError({sfSignerEntries.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); // Error: nesting into non-array/object field - expectError({sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, HostFunctionError::LOCATOR_MALFORMED); + expectError( + {sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, + HostFunctionError::LOCATOR_MALFORMED); // Error: empty locator expectError({}, HostFunctionError::LOCATOR_MALFORMED); @@ -829,7 +896,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite std::vector const locatorVec = {sfSignerEntries.fieldCode}; Slice const locator = Slice(reinterpret_cast(locatorVec.data()), 3); auto const malformed = hfs.getLedgerObjNestedField(1, locator); - BEAST_EXPECT(!malformed.has_value() && malformed.error() == HostFunctionError::LOCATOR_MALFORMED); + BEAST_EXPECT( + !malformed.has_value() && malformed.error() == HostFunctionError::LOCATOR_MALFORMED); } void @@ -838,7 +906,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("getTxArrayLen"); using namespace test::jtx; - std::string const credIdHex = "0011223344556677889900112233445566778899001122334455667788990011"; + std::string const credIdHex = + "0011223344556677889900112233445566778899001122334455667788990011"; uint256 credId; BEAST_EXPECT(credId.parseHex(credIdHex)); @@ -1010,18 +1079,25 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); // Helper for error checks - auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError, int slot = 1) { + auto expectError = [&](std::vector const& locatorVec, + HostFunctionError expectedError, + int slot = 1) { Slice const locator( - reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedArrayLen(locator); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECTS(result.error() == expectedError, std::to_string(static_cast(result.error()))); + BEAST_EXPECTS( + result.error() == expectedError, + std::to_string(static_cast(result.error()))); }; // Locator for sfMemos { std::vector locatorVec = {sfMemos.fieldCode}; - Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const arrLen = hfs.getTxNestedArrayLen(locator); BEAST_EXPECT(arrLen.has_value() && arrLen.value() == 1); } @@ -1053,18 +1129,25 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmHostFunctionsImpl hfs(ac, signerKeylet); // Helper for error checks - auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError, int slot = 1) { + auto expectError = [&](std::vector const& locatorVec, + HostFunctionError expectedError, + int slot = 1) { Slice const locator( - reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getCurrentLedgerObjNestedArrayLen(locator); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECTS(result.error() == expectedError, std::to_string(static_cast(result.error()))); + BEAST_EXPECTS( + result.error() == expectedError, + std::to_string(static_cast(result.error()))); }; // Locator for sfSignerEntries { std::vector locatorVec = {sfSignerEntries.fieldCode}; - Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const arrLen = hfs.getCurrentLedgerObjNestedArrayLen(locator); BEAST_EXPECT(arrLen.has_value() && arrLen.value() == 2); } @@ -1080,7 +1163,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); std::vector locatorVec = {sfAccount.fieldCode}; Slice const locator( - reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const result = dummyHfs.getCurrentLedgerObjNestedArrayLen(locator); if (BEAST_EXPECT(!result.has_value())) BEAST_EXPECTS( @@ -1113,18 +1197,25 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for sfSignerEntries std::vector locatorVec = {sfSignerEntries.fieldCode}; - Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const arrLen = hfs.getLedgerObjNestedArrayLen(1, locator); if (BEAST_EXPECT(arrLen.has_value())) BEAST_EXPECT(arrLen.value() == 2); // Helper for error checks - auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError, int slot = 1) { + auto expectError = [&](std::vector const& locatorVec, + HostFunctionError expectedError, + int slot = 1) { Slice const locator( - reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getLedgerObjNestedArrayLen(slot, locator); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECTS(result.error() == expectedError, std::to_string(static_cast(result.error()))); + BEAST_EXPECTS( + result.error() == expectedError, + std::to_string(static_cast(result.error()))); }; // Error: non-array field @@ -1146,10 +1237,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Error: locator malformed (not multiple of 4) Slice malformedLocator(reinterpret_cast(locator.data()), 3); auto const malformed = hfs.getLedgerObjNestedArrayLen(1, malformedLocator); - BEAST_EXPECT(!malformed.has_value() && malformed.error() == HostFunctionError::LOCATOR_MALFORMED); + BEAST_EXPECT( + !malformed.has_value() && malformed.error() == HostFunctionError::LOCATOR_MALFORMED); // Error: locator for non-STArray field - expectError({sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, HostFunctionError::LOCATOR_MALFORMED); + expectError( + {sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, + HostFunctionError::LOCATOR_MALFORMED); } void @@ -1159,7 +1253,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - env(escrow::create(env.master, env.master, XRP(100)), escrow::finish_time(env.now() + std::chrono::seconds(1))); + env(escrow::create(env.master, env.master, XRP(100)), + escrow::finish_time(env.now() + std::chrono::seconds(1))); env.close(); OpenView ov{*env.current()}; @@ -1203,7 +1298,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should succeed for valid signature { auto const result = hfs.checkSignature( - Slice(message.data(), message.size()), Slice(sig.data(), sig.size()), Slice(pk.data(), pk.size())); + Slice(message.data(), message.size()), + Slice(sig.data(), sig.size()), + Slice(pk.data(), pk.size())); BEAST_EXPECT(result.has_value()); BEAST_EXPECT(result.value() == 1); } @@ -1233,7 +1330,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should fail for empty public key { auto const result = hfs.checkSignature( - Slice(message.data(), message.size()), Slice(sig.data(), sig.size()), Slice(nullptr, 0)); + Slice(message.data(), message.size()), + Slice(sig.data(), sig.size()), + Slice(nullptr, 0)); BEAST_EXPECT(!result.has_value()); BEAST_EXPECT(result.error() == HostFunctionError::INVALID_PARAMS); } @@ -1241,15 +1340,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should fail for empty signature { auto const result = hfs.checkSignature( - Slice(message.data(), message.size()), Slice(nullptr, 0), Slice(pk.data(), pk.size())); + Slice(message.data(), message.size()), + Slice(nullptr, 0), + Slice(pk.data(), pk.size())); BEAST_EXPECT(result.has_value()); BEAST_EXPECT(result.value() == 0); } // Should fail for empty message { - auto const result = - hfs.checkSignature(Slice(nullptr, 0), Slice(sig.data(), sig.size()), Slice(pk.data(), pk.size())); + auto const result = hfs.checkSignature( + Slice(nullptr, 0), Slice(sig.data(), sig.size()), Slice(pk.data(), pk.size())); BEAST_EXPECT(result.has_value()); BEAST_EXPECT(result.value() == 0); } @@ -1303,13 +1404,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(compareKeylet(actual.value(), expected)); \ } \ } -#define COMPARE_KEYLET_FAIL(hfsFunc, expected, ...) \ - { \ - auto actual = hfs.hfsFunc(__VA_ARGS__); \ - if (BEAST_EXPECT(!actual.has_value())) \ - { \ - BEAST_EXPECTS(actual.error() == expected, std::to_string(HfErrorToInt(actual.error()))); \ - } \ +#define COMPARE_KEYLET_FAIL(hfsFunc, expected, ...) \ + { \ + auto actual = hfs.hfsFunc(__VA_ARGS__); \ + if (BEAST_EXPECT(!actual.has_value())) \ + { \ + BEAST_EXPECTS( \ + actual.error() == expected, std::to_string(HfErrorToInt(actual.error()))); \ + } \ } COMPARE_KEYLET(accountKeylet, keylet::account, env.master.id()); @@ -1317,7 +1419,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite COMPARE_KEYLET(ammKeylet, keylet::amm, xrpIssue(), env.master["USD"].issue()); COMPARE_KEYLET_FAIL(ammKeylet, HostFunctionError::INVALID_PARAMS, xrpIssue(), xrpIssue()); - COMPARE_KEYLET_FAIL(ammKeylet, HostFunctionError::INVALID_PARAMS, makeMptID(1, env.master.id()), xrpIssue()); + COMPARE_KEYLET_FAIL( + ammKeylet, + HostFunctionError::INVALID_PARAMS, + makeMptID(1, env.master.id()), + xrpIssue()); COMPARE_KEYLET(checkKeylet, keylet::check, env.master.id(), 1); COMPARE_KEYLET_FAIL(checkKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); @@ -1358,25 +1464,47 @@ struct HostFuncImpl_test : public beast::unit_test::suite COMPARE_KEYLET_FAIL(didKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); COMPARE_KEYLET(delegateKeylet, keylet::delegate, env.master.id(), alice.id()); - COMPARE_KEYLET_FAIL(delegateKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id()); - COMPARE_KEYLET_FAIL(delegateKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount()); - COMPARE_KEYLET_FAIL(delegateKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id()); + COMPARE_KEYLET_FAIL( + delegateKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id()); + COMPARE_KEYLET_FAIL( + delegateKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount()); + COMPARE_KEYLET_FAIL( + delegateKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id()); COMPARE_KEYLET(depositPreauthKeylet, keylet::depositPreauth, env.master.id(), alice.id()); - COMPARE_KEYLET_FAIL(depositPreauthKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id()); - COMPARE_KEYLET_FAIL(depositPreauthKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount()); - COMPARE_KEYLET_FAIL(depositPreauthKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id()); + COMPARE_KEYLET_FAIL( + depositPreauthKeylet, + HostFunctionError::INVALID_PARAMS, + env.master.id(), + env.master.id()); + COMPARE_KEYLET_FAIL( + depositPreauthKeylet, + HostFunctionError::INVALID_ACCOUNT, + env.master.id(), + xrpAccount()); + COMPARE_KEYLET_FAIL( + depositPreauthKeylet, + HostFunctionError::INVALID_ACCOUNT, + xrpAccount(), + env.master.id()); COMPARE_KEYLET(escrowKeylet, keylet::escrow, env.master.id(), 1); COMPARE_KEYLET_FAIL(escrowKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); Currency usd = to_currency("USD"); COMPARE_KEYLET(lineKeylet, keylet::line, env.master.id(), alice.id(), usd); - COMPARE_KEYLET_FAIL(lineKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id(), usd); - COMPARE_KEYLET_FAIL(lineKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount(), usd); - COMPARE_KEYLET_FAIL(lineKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id(), usd); COMPARE_KEYLET_FAIL( - lineKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), alice.id(), to_currency("")); + lineKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id(), usd); + COMPARE_KEYLET_FAIL( + lineKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount(), usd); + COMPARE_KEYLET_FAIL( + lineKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id(), usd); + COMPARE_KEYLET_FAIL( + lineKeylet, + HostFunctionError::INVALID_PARAMS, + env.master.id(), + alice.id(), + to_currency("")); { auto actual = hfs.mptIssuanceKeylet(env.master.id(), 1); @@ -1395,7 +1523,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const sampleMPTID = makeMptID(1, env.master.id()); COMPARE_KEYLET(mptokenKeylet, keylet::mptoken, sampleMPTID, alice.id()); COMPARE_KEYLET_FAIL(mptokenKeylet, HostFunctionError::INVALID_PARAMS, MPTID{}, alice.id()); - COMPARE_KEYLET_FAIL(mptokenKeylet, HostFunctionError::INVALID_ACCOUNT, sampleMPTID, xrpAccount()); + COMPARE_KEYLET_FAIL( + mptokenKeylet, HostFunctionError::INVALID_ACCOUNT, sampleMPTID, xrpAccount()); COMPARE_KEYLET(nftOfferKeylet, keylet::nftoffer, env.master.id(), 1); COMPARE_KEYLET_FAIL(nftOfferKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); @@ -1407,12 +1536,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite COMPARE_KEYLET_FAIL(oracleKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); COMPARE_KEYLET(paychanKeylet, keylet::payChan, env.master.id(), alice.id(), 1); - COMPARE_KEYLET_FAIL(paychanKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id(), 1); - COMPARE_KEYLET_FAIL(paychanKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount(), 1); - COMPARE_KEYLET_FAIL(paychanKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id(), 1); + COMPARE_KEYLET_FAIL( + paychanKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id(), 1); + COMPARE_KEYLET_FAIL( + paychanKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount(), 1); + COMPARE_KEYLET_FAIL( + paychanKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id(), 1); COMPARE_KEYLET(permissionedDomainKeylet, keylet::permissionedDomain, env.master.id(), 1); - COMPARE_KEYLET_FAIL(permissionedDomainKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + COMPARE_KEYLET_FAIL( + permissionedDomainKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); COMPARE_KEYLET(signersKeylet, keylet::signers, env.master.id()); COMPARE_KEYLET_FAIL(signersKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); @@ -1956,12 +2089,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.floatFromInt(std::numeric_limits::min(), -1); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatFromInt(std::numeric_limits::min(), 4); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { @@ -1994,12 +2129,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.floatFromUint(std::numeric_limits::min(), -1); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatFromUint(std::numeric_limits::min(), 4); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { @@ -2028,17 +2165,20 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.floatSet(1, 0, -1); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatSet(1, 0, 4); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatSet(1, wasmMaxExponent + normalExp + 1, 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { @@ -2091,12 +2231,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.floatCompare(Slice(), Slice()); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatCompare(makeSlice(floatInvalidZero), Slice()); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { @@ -2143,22 +2285,26 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.floatAdd(Slice(), Slice(), -1); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatAdd(Slice(), Slice(), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatAdd(makeSlice(float1), makeSlice(invalid), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatAdd(makeSlice(floatMaxIOU), makeSlice(floatMaxExp), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { @@ -2186,26 +2332,32 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.floatSubtract(Slice(), Slice(), -1); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatSubtract(Slice(), Slice(), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatSubtract(makeSlice(float1), makeSlice(invalid), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = hfs.floatSubtract(makeSlice(floatMaxIOU), makeSlice(floatMinusMaxExp), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + auto const result = + hfs.floatSubtract(makeSlice(floatMaxIOU), makeSlice(floatMinusMaxExp), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { - auto const result = hfs.floatSubtract(makeSlice(floatIntMin), makeSlice(floatIntZero), 0); + auto const result = + hfs.floatSubtract(makeSlice(floatIntMin), makeSlice(floatIntZero), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMin); } @@ -2229,22 +2381,26 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.floatMultiply(Slice(), Slice(), -1); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatMultiply(Slice(), Slice(), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatMultiply(makeSlice(float1), makeSlice(invalid), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatMultiply(makeSlice(floatMaxIOU), makeSlice(float1More), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { @@ -2253,7 +2409,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - auto const result = hfs.floatMultiply(makeSlice(floatIntZero), makeSlice(floatMaxIOU), 0); + auto const result = + hfs.floatMultiply(makeSlice(floatIntZero), makeSlice(floatMaxIOU), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); } @@ -2277,22 +2434,26 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.floatDivide(Slice(), Slice(), -1); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatDivide(Slice(), Slice(), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatDivide(makeSlice(float1), makeSlice(invalid), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatDivide(makeSlice(float1), makeSlice(floatIntZero), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { @@ -2300,7 +2461,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite if (BEAST_EXPECT(y)) { auto const result = hfs.floatDivide(makeSlice(floatMaxIOU), makeSlice(*y), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } } @@ -2329,17 +2491,20 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.floatRoot(Slice(), 2, -1); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatRoot(makeSlice(invalid), 3, 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatRoot(makeSlice(float1), -2, 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { @@ -2395,32 +2560,38 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.floatPower(Slice(), 2, -1); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatPower(makeSlice(invalid), 3, 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatPower(makeSlice(float1), -2, 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 2, 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 81, 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 2, 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { @@ -2467,12 +2638,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.floatLog(Slice(), -1); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatLog(makeSlice(invalid), 0); - BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } // perf test logs diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 6de86988cc..94d69b0e25 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -51,7 +51,8 @@ struct TestHostFunctions : public HostFunctions void const* rt_ = nullptr; public: - TestHostFunctions(test::jtx::Env& env, int cd = 0) : HostFunctions(env.journal), env_(env), clock_drift_(cd) + TestHostFunctions(test::jtx::Env& env, int cd = 0) + : HostFunctions(env.journal), env_(env), clock_drift_(cd) { accountID_ = env_.master.id(); std::string t = "10000"; @@ -308,9 +309,11 @@ public: } Expected - credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const override + credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) + const override { - if (!subject || !issuer || credentialType.empty() || credentialType.size() > maxCredentialTypeLength) + if (!subject || !issuer || credentialType.empty() || + credentialType.size() > maxCredentialTypeLength) return Unexpected(HostFunctionError::INVALID_ACCOUNT); auto const keylet = keylet::credential(subject, issuer, credentialType); return Bytes{keylet.key.begin(), keylet.key.end()}; @@ -399,7 +402,9 @@ public: { if (!asHex) { - log(msg, [&data] { return std::string_view(reinterpret_cast(data.data()), data.size()); }); + log(msg, [&data] { + return std::string_view(reinterpret_cast(data.data()), data.size()); + }); } else { diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 1696950113..093698bc1d 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -182,7 +182,8 @@ struct Wasm_test : public beast::unit_test::suite WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs, 33); auto& engine = WasmEngine::instance(); - auto re = engine.run(ledgerSqnWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); + auto re = engine.run( + ledgerSqnWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); checkResult(re, 0, 440); @@ -227,7 +228,8 @@ struct Wasm_test : public beast::unit_test::suite for (auto& i : imp) i.second.gas = 0; - auto re = engine.run(allHostFuncWasm, hfs, ESCROW_FUNCTION_NAME, {}, imp, 1'000'000, env.journal); + auto re = engine.run( + allHostFuncWasm, hfs, ESCROW_FUNCTION_NAME, {}, imp, 1'000'000, env.journal); checkResult(re, 1, 27'080); @@ -248,7 +250,8 @@ struct Wasm_test : public beast::unit_test::suite TestHostFunctions hfs(env, 0); auto const imp = createWasmImport(hfs); - auto re = engine.run(allHostFuncWasm, hfs, ESCROW_FUNCTION_NAME, {}, imp, 1'000'000, env.journal); + auto re = engine.run( + allHostFuncWasm, hfs, ESCROW_FUNCTION_NAME, {}, imp, 1'000'000, env.journal); checkResult(re, 1, 66'340); @@ -264,11 +267,13 @@ struct Wasm_test : public beast::unit_test::suite TestHostFunctions hfs(env, 0); auto const imp = createWasmImport(hfs); - auto re = engine.run(allHostFuncWasm, hfs, ESCROW_FUNCTION_NAME, {}, imp, 200, env.journal); + auto re = + engine.run(allHostFuncWasm, hfs, ESCROW_FUNCTION_NAME, {}, imp, 200, env.journal); if (BEAST_EXPECT(!re)) { - BEAST_EXPECTS(re.error() == tecFAILED_PROCESSING, std::to_string(TERtoInt(re.error()))); + BEAST_EXPECTS( + re.error() == tecFAILED_PROCESSING, std::to_string(TERtoInt(re.error()))); } env.close(); @@ -383,7 +388,8 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); - auto re = engine.run(lgrSqnWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); + auto re = engine.run( + lgrSqnWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); BEAST_EXPECT(!re); } @@ -398,7 +404,8 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); - auto re = engine.run(lgrSqnWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); + auto re = engine.run( + lgrSqnWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); BEAST_EXPECT(!re); } @@ -594,7 +601,8 @@ struct Wasm_test : public beast::unit_test::suite auto checkRes = engine.check(startLoopWasm, hfs, "finish", {}, imports, env.journal); BEAST_EXPECTS(checkRes == tesSUCCESS, std::to_string(TERtoInt(checkRes))); - auto re = engine.run(startLoopWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); + auto re = engine.run( + startLoopWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); BEAST_EXPECTS(re.error() == tecFAILED_PROCESSING, std::to_string(TERtoInt(re.error()))); } @@ -697,7 +705,8 @@ struct Wasm_test : public beast::unit_test::suite // (func $test2 (export "test2") (param i32 i32) (result i32) // i32.const 1001)) auto const wasmHex = - "0061736d01000000010c0260017f017f60027f7f017f03030200010503010001071a03066d656d6f7279020005746573743100" + "0061736d01000000010c0260017f017f60027f7f017f03030200010503010001071a03066d656d6f727902" + "0005746573743100" "0005746573743200010a0d02050041e8070b050041e9070b"; auto const wasm = hexToBytes(wasmHex); @@ -727,7 +736,8 @@ struct Wasm_test : public beast::unit_test::suite // invalid type { - auto const re = runEscrowWasm(wasm, hfs, "test1", wasmParams(std::int64_t(15)), 100'000); + auto const re = + runEscrowWasm(wasm, hfs, "test1", wasmParams(std::int64_t(15)), 100'000); BEAST_EXPECT(!re); } } @@ -821,14 +831,16 @@ struct Wasm_test : public beast::unit_test::suite // function that create 10k local variables auto const locals10k = hexToBytes(locals10kHex); { - auto re = engine.run(locals10k, hfs, "test", wasmParams(0, 1), imports, 1'000'000, env.journal); + auto re = engine.run( + locals10k, hfs, "test", wasmParams(0, 1), imports, 1'000'000, env.journal); BEAST_EXPECT(re && re->result == 890'489'442); } // module has 5k functions auto const functions5k = hexToBytes(functions5kHex); { - auto re = engine.run(functions5k, hfs, "test0001", wasmParams(2, 3), imports, 1'000'000, env.journal); + auto re = engine.run( + functions5k, hfs, "test0001", wasmParams(2, 3), imports, 1'000'000, env.journal); BEAST_EXPECT(re && re->result == 5); } @@ -876,7 +888,8 @@ struct Wasm_test : public beast::unit_test::suite int64_t cost = -1, std::source_location const location = std::source_location::current()) { auto const lineStr = " (" + std::to_string(location.line()) + ")"; - auto re = engine.run(code, hfs, "all_instructions", {}, imports, 1'000'000, env.journal); + auto re = + engine.run(code, hfs, "all_instructions", {}, imports, 1'000'000, env.journal); if (BEAST_EXPECTS(re.has_value() == good, transToken(re.error()) + lineStr) && good) BEAST_EXPECTS(re->cost == cost, std::to_string(re->cost) + lineStr); }; @@ -907,7 +920,8 @@ struct Wasm_test : public beast::unit_test::suite std::uint16_t finish, bool good = false, int64_t cost = -1, - std::source_location const location = std::source_location::current()) { + std::source_location const location = + std::source_location::current()) { auto const lineStr = " (" + std::to_string(location.line()) + ")"; auto code = opcReserved; auto codeRange = std::ranges::search(code, codeMarker); @@ -928,7 +942,8 @@ struct Wasm_test : public beast::unit_test::suite auto testMB = [&](std::vector const& codeSnap, bool good = false, int64_t cost = -1, - std::source_location const location = std::source_location::current()) { + std::source_location const location = + std::source_location::current()) { auto const lineStr = " (" + std::to_string(location.line()) + ")"; auto code = opcReserved; auto codeRange = std::ranges::search(code, codeMarker); diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 08d189a5ba..eeae8ea49b 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -10,16 +10,26 @@ extern std::string const fibWasmHex = "016a0b"; extern std::string const ledgerSqnWasmHex = - "0061736d01000000010e0360027f7f017f6000006000017f02160103656e760e6765745f6c65646765725f73716e0000030302010205030100" - "02063f0a7f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f" - "0041000b7f0041010b07aa010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300010666696e69736800020c5f5f64736f" - "5f68616e646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d5f5f676c6f" - "62616c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f656e6403070d5f5f6d656d6f72795f6261736503080c5f5f74" - "61626c655f6261736503090a3d0202000b3801037f230041106b220024002000410c6a410410002101200028020c2102200041106a24002001" - "41054100200241054f1b20014100481b0b007f0970726f647563657273010c70726f6365737365642d62790105636c616e675f31392e312e35" - "2d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a65637420616234623561326462" - "353832393538616631656533303861373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461" - "626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; + "0061736d01000000010e0360027f7f017f6000006000017f02160103656e760e6765745f6c65646765725f73716e00" + "00030302010205030100" + "02063f0a7f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088" + "040b7f00418080080b7f" + "0041000b7f0041010b07aa010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300010666696e69" + "736800020c5f5f64736f" + "5f68616e646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869" + "676803040d5f5f676c6f" + "62616c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f656e6403070d5f5f6d656d6f72795f" + "6261736503080c5f5f74" + "61626c655f6261736503090a3d0202000b3801037f230041106b220024002000410c6a410410002101200028020c21" + "02200041106a24002001" + "41054100200241054f1b20014100481b0b007f0970726f647563657273010c70726f6365737365642d62790105636c" + "616e675f31392e312e35" + "2d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374" + "20616234623561326462" + "353832393538616631656533303861373930636664623432626432343732302900490f7461726765745f6665617475" + "726573042b0f6d757461" + "626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c74697661" + "6c7565"; extern std::string const allHostFunctionsWasmHex = "0061736d0100000001540c60027f7f017f60037f7f7f017f60047f7f7f7f017f60017f017f" @@ -494,215 +504,424 @@ extern std::string const allKeyletsWasmHex = "617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const codecovTestsWasmHex = - "0061736d0100000001570b60067f7f7f7f7f7f017f60047f7f7f7f017f60027f7f017f60057f7f7f7f7f017f60037f7f7f017f60077f7f7f7f" - "7f7f7f017f60087f7f7f7f7f7f7f7f017f60017f017f60037f7f7e017f60047f7f7f7f006000017f02990d3c08686f73745f6c696205747261" - "6365000308686f73745f6c69620974726163655f6e756d000808686f73745f6c69620e6765745f6c65646765725f73716e000208686f73745f" - "6c6962166765745f706172656e745f6c65646765725f74696d65000208686f73745f6c6962166765745f706172656e745f6c65646765725f68" - "617368000208686f73745f6c69620c6765745f626173655f666565000208686f73745f6c696211616d656e646d656e745f656e61626c656400" - "0208686f73745f6c69620c6765745f74785f6669656c64000408686f73745f6c69620e6163636f756e745f6b65796c6574000108686f73745f" - "6c69621063616368655f6c65646765725f6f626a000408686f73745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f6669" - "656c64000408686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000108686f73745f6c6962136765745f74785f6e6573" - "7465645f6669656c64000108686f73745f6c6962236765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c6400" - "0108686f73745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f6669656c64000308686f73745f6c6962106765745f74785f" - "61727261795f6c656e000708686f73745f6c6962206765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e00070868" - "6f73745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c656e000208686f73745f6c6962176765745f74785f6e6573746564" - "5f61727261795f6c656e000208686f73745f6c6962276765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6172726179" - "5f6c656e000208686f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e000408686f73745f6c69" - "620b7570646174655f64617461000208686f73745f6c696213636f6d707574655f7368613531325f68616c66000108686f73745f6c69620963" - "6865636b5f736967000008686f73745f6c6962076765745f6e6674000008686f73745f6c69620e6765745f6e66745f69737375657200010868" - "6f73745f6c69620d6765745f6e66745f7461786f6e000108686f73745f6c69620d6765745f6e66745f666c616773000208686f73745f6c6962" - "146765745f6e66745f7472616e736665725f666565000208686f73745f6c69620e6765745f6e66745f73657269616c000108686f73745f6c69" - "620d74726163655f6163636f756e74000108686f73745f6c69620c74726163655f616d6f756e74000108686f73745f6c69620c636865636b5f" - "6b65796c6574000008686f73745f6c69620f666c6f61745f66726f6d5f75696e74000308686f73745f6c69620b6c696e655f6b65796c657400" - "0608686f73745f6c69620a616d6d5f6b65796c6574000008686f73745f6c69621163726564656e7469616c5f6b65796c6574000608686f7374" - "5f6c69620e6d70746f6b656e5f6b65796c6574000008686f73745f6c69621274726163655f6f70617175655f666c6f6174000108686f73745f" - "6c69620d666c6f61745f636f6d70617265000108686f73745f6c696209666c6f61745f616464000508686f73745f6c69620e666c6f61745f73" - "75627472616374000508686f73745f6c69620e666c6f61745f6d756c7469706c79000508686f73745f6c69620c666c6f61745f646976696465" - "000508686f73745f6c69620a666c6f61745f726f6f74000008686f73745f6c696209666c6f61745f706f77000008686f73745f6c696209666c" - "6f61745f6c6f67000308686f73745f6c69620d657363726f775f6b65796c6574000008686f73745f6c6962136d70745f69737375616e63655f" - "6b65796c6574000008686f73745f6c6962106e66745f6f666665725f6b65796c6574000008686f73745f6c69620c6f666665725f6b65796c65" - "74000008686f73745f6c69620d6f7261636c655f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b65796c6574000608686f" - "73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73745f6c69620d7469636b65745f6b65796c65" - "74000008686f73745f6c69620c7661756c745f6b65796c6574000008686f73745f6c69620f64656c65676174655f6b65796c6574000008686f" - "73745f6c6962166465706f7369745f707265617574685f6b65796c6574000008686f73745f6c69620a6469645f6b65796c6574000108686f73" - "745f6c69620e7369676e6572735f6b65796c65740001030302090a05030100110619037f01418080c0000b7f0041bba1c0000b7f0041c0a1c0" - "000b072e04066d656d6f727902000666696e697368003d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020abf2c02460002" - "40200020014704402002200341014100410010001a20004100480d01418b80c000410b2000ad1001000b200220032000ac10011a0f0b418b80" - "c000410b2000ac1001000bf52b020a7f017e23004190026b22002400419680c000412341014100410010001a20004100360260200041e0006a" - "220241041002410441bd8cc000410e103c20004100360260200241041003410441cb8cc0004116103c200041f8006a22044200370300200041" - "f0006a22014200370300200041e8006a2205420037030020004200370360200241201004412041e18cc0004116103c20004100360260200241" - "041005410441f78cc000410c103c200041106a2207428182848890a0c08001370300200041186a2206428182848890a0c08001370300200041" - "206a2209428182848890a0c080013703002000428182848890a0c0800137030841b980c000410e1006410141c780c0004111103c200041086a" - "41201006410141c780c0004111103c418180202002411410072203411446044002402000412e6a200041e2006a2d00003a0000200020002900" - "673703e8012000200041ec006a2900003700ed01200020002f00603b012c200020002903e8013703a801200020002900ed013700ad01200020" - "0028006336002f200041386a20002900ad01370000200020002903a80137003320044200370300200142003703002005420037030020004200" - "3703602000412c6a2204411420024120100822034120470d00200041c2006a20002d00623a0000200041f0016a2203200041ef006a29000022" - "0a370300200041cf006a200a370000200041d7006a200041f7006a290000370000200041df006a200041ff006a2d00003a0000200020002f01" - "603b01402000200028006336004320002000290067370047200041406b412041001009410141d880c0004110103c2001410036020020054200" - "370300200042003703604181802020024114100a411441838dc000411c103c2001410036020020054200370300200042003703604101418180" - "2020024114100b4114419f8dc0004114103c200041043602a001200041818020360260200041f8016a22054100360200200342003703002000" - "42003703e80120024104200041e8016a22014114100c411441b38dc0004113103c2005410036020020034200370300200042003703e8012002" - "20002802a00120014114100d411441c68dc0004123103c2005410036020020034200370300200042003703e8014101200220002802a0012001" - "4114100e411441e98dc000411b103c4189803c100f412041e880c0004110103c4189803c1010412041f880c0004120103c41014189803c1011" - "4120419881c0004118103c200220002802a0011012412041b081c0004117103c200220002802a0011013412041c781c0004127103c41012002" - "20002802a0011014412041ee81c000411f103c2004411410154114418d82c000410b103c20004180026a220842003703002005420037030020" - "034200370300200042003703e801200220002802a001200141201016412041848ec0004113103c419882c000410c41a482c000410b41af82c0" - "00410e1017410141bd82c0004109103c200041c0016a2009290300370300200041b8016a2006290300370300200041b0016a20072903003703" - "00200020002903083703a801200541003b010020034200370300200042003703e80120044114200041a8016a22074120200141121018411241" - "978ec0004107103c2005410036020020034200370300200042003703e801200741202001411410194114419e8ec000410e103c200041003602" - "e8012007412020014104101a410441ac8ec000410d103c20074120101b410841c682c000410d103c20074120101c410a41d382c0004114103c" - "200041003602e8012007412020014104101d410441b98ec000410e103c41e782c000410d20044114101e410041f482c000410d103c41e782c0" - "00410d418183c0004108101f4100418983c000410c103c41e782c000410d419583c0004108101f4100419d83c0004111103c417f4104100441" - "7141ae83c000411e103c200041003602e8012001417f1004417141c78ec000411e103c200041ea016a41003a0000200041003b01e801200141" - "031004417d41e58ec0004124103c200041003602e8012001418094ebdc031004417341898fc0004123103c4102100f416f41cc83c000411f10" - "3c417f20002802a0011012417141eb83c000411f103c2002417f10124171418a84c000411f103c20024181201012417441a984c0004120103c" - "200041e094ebdc036a220620002802a0011012417341c984c000411f103c200842003703002005420037030020034200370300200042003703" - "e8012004411420064108200141201020417341ac8fc0004118103c200842003703002005420037030020034200370300200042003703e80120" - "04411420044114200141201020417141c48fc000411a103c200842003703002005420037030020034200370300200042003703e80120064108" - "2001412041001021417341de8fc0004117103c200842003703002005420037030020034200370300200042003703e801200220002802a00120" - "01412041001021417141f58fc0004120103c200620002802a00141011009417341e884c0004118103c200220002802a0014101100941714180" - "85c000411a103c200842003703002005420037030020034200370300200042003703e801200620002802a0012001412010084173419590c000" - "4116103c200842003703002005420037030020034200370300200042003703e801200220002802a001200141201008417141ab90c000411810" - "3c200842003703002005420037030020034200370300200042003703e8012004411420044114200620002802a001200141201022417341c390" - "c000411c103c200842003703002005420037030020034200370300200042003703e8012004411420044114200220002802a001200141201022" - "417141df90c000411e103c200842003703002005420037030020034200370300200042003703e80141a7a1c0004114200620002802a0012001" - "41201023417341fd90c0004119103c200842003703002005420037030020034200370300200042003703e80141a7a1c0004114200220002802" - "a0012001412010234171419691c000411f103c200842003703002005420037030020034200370300200042003703e80141a7a1c0004114419a" - "85c0004114200141201023417141b591c0004129103c200842003703002005420037030020034200370300200042003703e80141ae85c00041" - "2841a7a1c0004114200141201023417141de91c0004125103c200041dc016a2000413c6a280100360200200041d4016a200041346a29010037" - "02002000200029012c3702cc01200041808080083602c801200041003b01e801200041c8016a2209411841a7a1c00041142001410210234171" - "418392c000410e103c200620002802a001422a1001417341d685c0004111103c200041003b01e8014102200141021007416f419192c000411b" - "103c200041003b01e801410220014102100a416f41ac92c000412b103c200041003b01e8014101410220014102100b416f41d792c000412310" - "3c4102100f416f41cc83c000411f103c41021010416f41e785c000412f103c410141021011416f419686c0004127103c41b980c00041812010" - "06417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e801200241812020014102100c417441fa92" - "c0004121103c200041003b01e801200241812020014102100d4174419b93c0004131103c200041003b01e8014101200241812020014102100e" - "417441cc93c0004129103c20024181201012417441f686c0004125103c200241812010134174419b87c0004135103c41012002418120101441" - "7441d087c000412d103c20024181201015417441fd87c0004119103c41e782c00041812041a482c000410b41af82c000410e1017417441bd82" - "c0004109103c41e782c000410d41a482c00041812041af82c000410e1017417441bd82c0004109103c41e782c000410d41a482c000410b41af" - "82c0004181201017417441bd82c0004109103c200041003b01e8012002418120200141021016417441f593c0004121103c200041003b01e801" - "41a7a1c00041812041a7a1c00041142001410210234174419694c0004118103c200041003b01e8012004411420044114200241812020014102" - "1024417441ae94c000411f103c200041003b01e801200941812020044114200141021025417441cd94c0004122103c41e782c000410d200620" - "002802a001410010004173419688c000410f103c200042d487b6f4c7d4b1c0003700e00141e782c000410d200041e095ebdc036a2207410810" - "26417341a588c000411c103c41e782c000410d200620002802a001101f417341c188c0004116103c20074108200041e0016a22064108102741" - "7341d788c0004118103c20064108200741081027417341ef88c0004118103c200041003b01e801200741082006410820014102410010284173" - "41ef94c0004114103c200041003b01e801200641082007410820014102410010284173418395c0004114103c200041003b01e8012007410820" - "06410820014102410010294173419795c0004119103c200041003b01e80120064108200741082001410241001029417341b095c0004119103c" - "200041003b01e8012007410820064108200141024100102a417341c995c0004119103c200041003b01e8012006410820074108200141024100" - "102a417341e295c0004119103c200041003b01e8012007410820064108200141024100102b417341fb95c0004117103c200041003b01e80120" - "06410820074108200141024100102b4173419296c0004117103c200041003b01e801200741084103200141024100102c417341a996c0004114" - "103c200041003b01e801200741084103200141024100102d417341bd96c0004113103c200041003b01e80120074108200141024100102e4173" - "41d096c0004113103c200842003703002005420037030020034200370300200042003703e801200441142004411420014120102f417141e396" - "c000411f103c200842003703002005420037030020034200370300200042003703e80120044114200441142001412010304171418297c00041" - "25103c200842003703002005420037030020034200370300200042003703e8012004411420044114200141201031417141a797c0004122103c" - "200842003703002005420037030020034200370300200042003703e8012004411420044114200141201032417141c997c000411e103c200842" - "003703002005420037030020034200370300200042003703e8012004411420044114200141201033417141e797c000411f103c200842003703" - "002005420037030020034200370300200042003703e8012004411420044114200441142001412010344171418698c0004120103c2008420037" - "03002005420037030020034200370300200042003703e8012004411420044114200141201035417141a698c000412c103c2008420037030020" - "05420037030020034200370300200042003703e8012004411420044114200141201036417141d298c000411f103c2008420037030020054200" - "37030020034200370300200042003703e8012004411420044114200141201037417141f198c000411e103c200220002802a001410010094171" - "418789c0004123103c200041003b01e80120044114200220002802a0012001410210184171418f99c000411a103c200041003b01e801200220" - "002802a001200141021019417141a999c0004121103c200041003b01e801200220002802a00120014102101a417141ca99c0004120103c2002" - "20002802a001101b417141aa89c0004120103c200220002802a001101c417141ca89c0004127103c200041003602e801200220002802a00120" - "014104101d417141ea99c0004121103c200041003b01e801200220002802a0012001410210084171418b9ac0004124103c2000418080800836" - "02e801200041003b018e02200220002802a001200141042000418e026a220341021020417141af9ac0004122103c200041003b018e02200220" - "002802a00122052004411420022005200341021024417141d19ac0004128103c200041003b018e0220044114200220002802a0012205200220" - "05200341021024417141f99ac0004128103c200041003b018e02200220002802a00120044114200341021038417141a19bc0004126103c2000" - "41003b018e0220044114200220002802a001200341021038417141c79bc0004126103c200041003b018e02200220002802a001200441142003" - "41021039417141ed9bc000412d103c200041003b018e0220044114200220002802a0012003410210394171419a9cc000412d103c200041003b" - "018e02200220002802a00120034102103a417141c79cc0004120103c200041003b018e02200220002802a0012001410420034102102f417141" - "e79cc0004123103c200041003b018e02200220002802a00120044114419a85c00041142003410210224171418a9dc0004122103c200041003b" - "018e0220044114200220002802a001419a85c0004114200341021022417141ac9dc0004122103c200041003b018e02200220002802a0012001" - "4104200341021030417141ce9dc0004129103c200041003b018e0220094118200220002802a001200341021025417141f79dc0004124103c20" - "0041003b018e02200220002802a001200141042003410210314171419b9ec0004126103c200041003b018e02200220002802a0012001410420" - "0341021032417141c19ec0004122103c200041003b018e02200220002802a00120014104200341021033417141e39ec0004123103c20004100" - "3b018e02200220002802a0012004411420014104200341021034417141869fc0004125103c200041003b018e0220044114200220002802a001" - "20014104200341021034417141ab9fc0004125103c200041003b018e02200220002802a00120014104200341021035417141d09fc000413010" - "3c200041003b018e02200220002802a00120034102103b41714180a0c0004124103c200041003b018e02200220002802a00120014104200341" - "021036417141a4a0c0004123103c200041003b018e02200220002802a00120014104200341021037417141c7a0c0004122103c200041003b01" - "8e02200220002802a00141f189c0004120200341021018417141e9a0c000411d103c41e782c000410d200220002802a001101e417141918ac0" - "004123103c41e796abdd03410d41f189c000412041001000417341b48ac0004110103c41e796abdd03410d200641081026417341c48ac00041" - "1d103c41e796abdd03410d20044114101e417341e18ac0004118103c41e796abdd03410d419583c0004108101f417341f98ac0004117103c20" - "0220002802a001200241812041001000417441908bc000410e103c2002418120420110014174419e8bc0004112103c41e782c0004181202006" - "41081026417441b08bc000411b103c41e782c00041812020044114101e417441cb8bc0004116103c41e782c000418120419583c0004108101f" - "417441e18bc0004115103c41e782c000410d200220002802a001101f417141f68bc0004119103c200041003b018e02200220002802a0012004" - "411420034102102541714186a1c0004121103c41e782c000410d200220002802a001410210004171418f8cc0004114103c4101410020044114" - "101e410041a38cc000411a103c20004190026a240041010f0b0b418080c000410b417f20032003417f4e1bac1001000b0b92210200418080c0" - "000bae056572726f725f636f64653d54455354204641494c45442424242424205354415254494e47205741534d20455845435554494f4e2024" - "24242424746573745f616d656e646d656e74616d656e646d656e745f656e61626c656463616368655f6c65646765725f6f626a6765745f7478" - "5f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f" - "61727261795f6c656e6765745f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f6e65" - "737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e7570646174655f6461746174" - "657374206d65737361676574657374207075626b657974657374207369676e6174757265636865636b5f7369676765745f6e66745f666c6167" - "736765745f6e66745f7472616e736665725f66656574657374696e6720747261636574726163655f6163636f756e74400000000000005f7472" - "6163655f616d6f756e74400000000000000074726163655f616d6f756e745f7a65726f6765745f706172656e745f6c65646765725f68617368" - "5f6e65675f7074726765745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e65737465645f61727261" - "795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f6e65675f6c656e6765745f74785f6e6573746564" - "5f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f7074725f6f6f6263616368655f6c" - "65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f6f626a5f77726f6e675f6c656e5553443030303030303030303030" - "3030303030300041d685c0000bd11b74726163655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f6f626a5f6172" - "7261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f7366" - "69656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61626c65645f746f6f5f" - "6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f63757272656e745f6c656467" - "65725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465" - "645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174655f646174615f746f6f5f6269675f736c69636574726163655f6f" - "6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f625f736c69636574726163655f616d6f756e745f6f6f625f736c6963" - "65666c6f61745f636f6d706172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f625f736c6963653263616368655f6c65" - "646765725f6f626a5f77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f6e675f73697a655f75696e7432" - "35366765745f6e66745f7472616e736665725f6665655f77726f6e675f73697a655f75696e7432353630303030303030303030303030303030" - "3030303030303030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f6163636f756e745f696474726163655f" - "6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472696e6774726163655f6163636f756e745f6f6f625f" - "737472696e6774726163655f616d6f756e745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f" - "6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774726163655f6163636f756e745f746f6f5f6c6f6e6774726163" - "655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e67746874726163655f696e76616c69645f61" - "735f68657874726163655f6163636f756e745f636865636b5f646573796e636765745f6c65646765725f73716e6765745f706172656e745f6c" - "65646765725f74696d656765745f706172656e745f6c65646765725f686173686765745f626173655f6665656765745f63757272656e745f6c" - "65646765725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669656c64676574" - "5f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f6e65737465645f666965" - "6c64636f6d707574655f7368613531325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f7461786f6e6765" - "745f6e66745f73657269616c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e6765745f706172656e745f6c656467" - "65725f686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f746f6f5f6c6f6e6763" - "6865636b5f6b65796c65745f6f6f625f6c656e5f753332636865636b5f6b65796c65745f77726f6e675f6c656e5f753332666c6f61745f6672" - "6f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e5f75696e7436346163636f756e745f6b65" - "796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c656e5f6f6f625f63" - "757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f61" - "7373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f" - "6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e" - "616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f736669656c646765745f63757272656e745f6c656467" - "65725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c69645f73" - "6669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f" - "6f626a5f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f6669656c64" - "5f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c6574" - "5f746f6f5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b656e5f6b65796c" - "65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f73" - "6c69636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c69636532666c" - "6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f646976" - "6964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f6f6f625f736c696365" - "666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f675f6f6f625f736c696365657363726f775f6b65796c65745f77726f6e67" - "5f73697a655f75696e7433326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a655f75696e7433326e66745f6f666665" - "725f6b65796c65745f77726f6e675f73697a655f75696e7433326f666665725f6b65796c65745f77726f6e675f73697a655f75696e7433326f" - "7261636c655f6b65796c65745f77726f6e675f73697a655f75696e7433327061796368616e5f6b65796c65745f77726f6e675f73697a655f75" - "696e7433327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f75696e7433327469636b65745f6b" - "65796c65745f77726f6e675f73697a655f75696e7433327661756c745f6b65796c65745f77726f6e675f73697a655f75696e7433326765745f" - "6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973737565725f77726f6e675f73697a655f75696e743235366765" - "745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f77726f6e675f73697a655f75" - "696e743235366163636f756e745f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964636865636b5f6b65796c65745f7772" - "6f6e675f73697a655f6163636f756e745f696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69" - "643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69643264656c65676174655f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e745f69643164656c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e74" - "5f6964326465706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964316465706f7369745f" - "707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964326469645f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e745f6964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646c696e655f6b65796c65" - "745f77726f6e675f73697a655f6163636f756e745f6964316c696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964" - "326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646d70746f6b656e5f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e745f69646e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e745f" - "69646f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646f7261636c655f6b65796c65745f77726f6e675f73" - "697a655f6163636f756e745f69647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f696431706179636861" - "6e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964327065726d697373696f6e65645f646f6d61696e5f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e745f69647369676e6572735f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69" - "647469636b65745f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69647661756c745f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e745f69646765745f6e66745f77726f6e675f73697a655f6163636f756e745f69646d70746f6b656e5f6b65796c65745f" - "6d707469645f77726f6e675f6c656e677468004d0970726f64756365727302086c616e6775616765010452757374000c70726f636573736564" - "2d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d303929002c0f7461726765745f66656174757265" + "0061736d0100000001570b60067f7f7f7f7f7f017f60047f7f7f7f017f60027f7f017f60057f7f7f7f7f017f60037f" + "7f7f017f60077f7f7f7f" + "7f7f7f017f60087f7f7f7f7f7f7f7f017f60017f017f60037f7f7e017f60047f7f7f7f006000017f02990d3c08686f" + "73745f6c696205747261" + "6365000308686f73745f6c69620974726163655f6e756d000808686f73745f6c69620e6765745f6c65646765725f73" + "716e000208686f73745f" + "6c6962166765745f706172656e745f6c65646765725f74696d65000208686f73745f6c6962166765745f706172656e" + "745f6c65646765725f68" + "617368000208686f73745f6c69620c6765745f626173655f666565000208686f73745f6c696211616d656e646d656e" + "745f656e61626c656400" + "0208686f73745f6c69620c6765745f74785f6669656c64000408686f73745f6c69620e6163636f756e745f6b65796c" + "6574000108686f73745f" + "6c69621063616368655f6c65646765725f6f626a000408686f73745f6c69621c6765745f63757272656e745f6c6564" + "6765725f6f626a5f6669" + "656c64000408686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000108686f73745f6c696213" + "6765745f74785f6e6573" + "7465645f6669656c64000108686f73745f6c6962236765745f63757272656e745f6c65646765725f6f626a5f6e6573" + "7465645f6669656c6400" + "0108686f73745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f6669656c64000308686f73745f6c" + "6962106765745f74785f" + "61727261795f6c656e000708686f73745f6c6962206765745f63757272656e745f6c65646765725f6f626a5f617272" + "61795f6c656e00070868" + "6f73745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c656e000208686f73745f6c696217676574" + "5f74785f6e6573746564" + "5f61727261795f6c656e000208686f73745f6c6962276765745f63757272656e745f6c65646765725f6f626a5f6e65" + "737465645f6172726179" + "5f6c656e000208686f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e" + "000408686f73745f6c69" + "620b7570646174655f64617461000208686f73745f6c696213636f6d707574655f7368613531325f68616c66000108" + "686f73745f6c69620963" + "6865636b5f736967000008686f73745f6c6962076765745f6e6674000008686f73745f6c69620e6765745f6e66745f" + "69737375657200010868" + "6f73745f6c69620d6765745f6e66745f7461786f6e000108686f73745f6c69620d6765745f6e66745f666c61677300" + "0208686f73745f6c6962" + "146765745f6e66745f7472616e736665725f666565000208686f73745f6c69620e6765745f6e66745f73657269616c" + "000108686f73745f6c69" + "620d74726163655f6163636f756e74000108686f73745f6c69620c74726163655f616d6f756e74000108686f73745f" + "6c69620c636865636b5f" + "6b65796c6574000008686f73745f6c69620f666c6f61745f66726f6d5f75696e74000308686f73745f6c69620b6c69" + "6e655f6b65796c657400" + "0608686f73745f6c69620a616d6d5f6b65796c6574000008686f73745f6c69621163726564656e7469616c5f6b6579" + "6c6574000608686f7374" + "5f6c69620e6d70746f6b656e5f6b65796c6574000008686f73745f6c69621274726163655f6f70617175655f666c6f" + "6174000108686f73745f" + "6c69620d666c6f61745f636f6d70617265000108686f73745f6c696209666c6f61745f616464000508686f73745f6c" + "69620e666c6f61745f73" + "75627472616374000508686f73745f6c69620e666c6f61745f6d756c7469706c79000508686f73745f6c69620c666c" + "6f61745f646976696465" + "000508686f73745f6c69620a666c6f61745f726f6f74000008686f73745f6c696209666c6f61745f706f7700000868" + "6f73745f6c696209666c" + "6f61745f6c6f67000308686f73745f6c69620d657363726f775f6b65796c6574000008686f73745f6c6962136d7074" + "5f69737375616e63655f" + "6b65796c6574000008686f73745f6c6962106e66745f6f666665725f6b65796c6574000008686f73745f6c69620c6f" + "666665725f6b65796c65" + "74000008686f73745f6c69620d6f7261636c655f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b" + "65796c6574000608686f" + "73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73745f6c69620d7469" + "636b65745f6b65796c65" + "74000008686f73745f6c69620c7661756c745f6b65796c6574000008686f73745f6c69620f64656c65676174655f6b" + "65796c6574000008686f" + "73745f6c6962166465706f7369745f707265617574685f6b65796c6574000008686f73745f6c69620a6469645f6b65" + "796c6574000108686f73" + "745f6c69620e7369676e6572735f6b65796c65740001030302090a05030100110619037f01418080c0000b7f0041bb" + "a1c0000b7f0041c0a1c0" + "000b072e04066d656d6f727902000666696e697368003d0a5f5f646174615f656e6403010b5f5f686561705f626173" + "6503020abf2c02460002" + "40200020014704402002200341014100410010001a20004100480d01418b80c000410b2000ad1001000b2002200320" + "00ac10011a0f0b418b80" + "c000410b2000ac1001000bf52b020a7f017e23004190026b22002400419680c000412341014100410010001a200041" + "00360260200041e0006a" + "220241041002410441bd8cc000410e103c20004100360260200241041003410441cb8cc0004116103c200041f8006a" + "22044200370300200041" + "f0006a22014200370300200041e8006a2205420037030020004200370360200241201004412041e18cc0004116103c" + "20004100360260200241" + "041005410441f78cc000410c103c200041106a2207428182848890a0c08001370300200041186a2206428182848890" + "a0c08001370300200041" + "206a2209428182848890a0c080013703002000428182848890a0c0800137030841b980c000410e1006410141c780c0" + "004111103c200041086a" + "41201006410141c780c0004111103c418180202002411410072203411446044002402000412e6a200041e2006a2d00" + "003a0000200020002900" + "673703e8012000200041ec006a2900003700ed01200020002f00603b012c200020002903e8013703a8012000200029" + "00ed013700ad01200020" + "0028006336002f200041386a20002900ad01370000200020002903a801370033200442003703002001420037030020" + "05420037030020004200" + "3703602000412c6a2204411420024120100822034120470d00200041c2006a20002d00623a0000200041f0016a2203" + "200041ef006a29000022" + "0a370300200041cf006a200a370000200041d7006a200041f7006a290000370000200041df006a200041ff006a2d00" + "003a0000200020002f01" + "603b01402000200028006336004320002000290067370047200041406b412041001009410141d880c0004110103c20" + "01410036020020054200" + "370300200042003703604181802020024114100a411441838dc000411c103c20014100360200200542003703002000" + "42003703604101418180" + "2020024114100b4114419f8dc0004114103c200041043602a001200041818020360260200041f8016a220541003602" + "00200342003703002000" + "42003703e80120024104200041e8016a22014114100c411441b38dc0004113103c2005410036020020034200370300" + "200042003703e8012002" + "20002802a00120014114100d411441c68dc0004123103c2005410036020020034200370300200042003703e8014101" + "200220002802a0012001" + "4114100e411441e98dc000411b103c4189803c100f412041e880c0004110103c4189803c1010412041f880c0004120" + "103c41014189803c1011" + "4120419881c0004118103c200220002802a0011012412041b081c0004117103c200220002802a0011013412041c781" + "c0004127103c41012002" + "20002802a0011014412041ee81c000411f103c2004411410154114418d82c000410b103c20004180026a2208420037" + "03002005420037030020" + "034200370300200042003703e801200220002802a001200141201016412041848ec0004113103c419882c000410c41" + "a482c000410b41af82c0" + "00410e1017410141bd82c0004109103c200041c0016a2009290300370300200041b8016a2006290300370300200041" + "b0016a20072903003703" + "00200020002903083703a801200541003b010020034200370300200042003703e80120044114200041a8016a220741" + "20200141121018411241" + "978ec0004107103c2005410036020020034200370300200042003703e801200741202001411410194114419e8ec000" + "410e103c200041003602" + "e8012007412020014104101a410441ac8ec000410d103c20074120101b410841c682c000410d103c20074120101c41" + "0a41d382c0004114103c" + "200041003602e8012007412020014104101d410441b98ec000410e103c41e782c000410d20044114101e410041f482" + "c000410d103c41e782c0" + "00410d418183c0004108101f4100418983c000410c103c41e782c000410d419583c0004108101f4100419d83c00041" + "11103c417f4104100441" + "7141ae83c000411e103c200041003602e8012001417f1004417141c78ec000411e103c200041ea016a41003a000020" + "0041003b01e801200141" + "031004417d41e58ec0004124103c200041003602e8012001418094ebdc031004417341898fc0004123103c4102100f" + "416f41cc83c000411f10" + "3c417f20002802a0011012417141eb83c000411f103c2002417f10124171418a84c000411f103c2002418120101241" + "7441a984c0004120103c" + "200041e094ebdc036a220620002802a0011012417341c984c000411f103c2008420037030020054200370300200342" + "00370300200042003703" + "e8012004411420064108200141201020417341ac8fc0004118103c2008420037030020054200370300200342003703" + "00200042003703e80120" + "04411420044114200141201020417141c48fc000411a103c2008420037030020054200370300200342003703002000" + "42003703e80120064108" + "2001412041001021417341de8fc0004117103c200842003703002005420037030020034200370300200042003703e8" + "01200220002802a00120" + "01412041001021417141f58fc0004120103c200620002802a00141011009417341e884c0004118103c200220002802" + "a0014101100941714180" + "85c000411a103c200842003703002005420037030020034200370300200042003703e801200620002802a001200141" + "2010084173419590c000" + "4116103c200842003703002005420037030020034200370300200042003703e801200220002802a001200141201008" + "417141ab90c000411810" + "3c200842003703002005420037030020034200370300200042003703e8012004411420044114200620002802a00120" + "0141201022417341c390" + "c000411c103c200842003703002005420037030020034200370300200042003703e801200441142004411420022000" + "2802a001200141201022" + "417141df90c000411e103c200842003703002005420037030020034200370300200042003703e80141a7a1c0004114" + "200620002802a0012001" + "41201023417341fd90c0004119103c200842003703002005420037030020034200370300200042003703e80141a7a1" + "c0004114200220002802" + "a0012001412010234171419691c000411f103c200842003703002005420037030020034200370300200042003703e8" + "0141a7a1c0004114419a" + "85c0004114200141201023417141b591c0004129103c20084200370300200542003703002003420037030020004200" + "3703e80141ae85c00041" + "2841a7a1c0004114200141201023417141de91c0004125103c200041dc016a2000413c6a280100360200200041d401" + "6a200041346a29010037" + "02002000200029012c3702cc01200041808080083602c801200041003b01e801200041c8016a2209411841a7a1c000" + "41142001410210234171" + "418392c000410e103c200620002802a001422a1001417341d685c0004111103c200041003b01e80141022001410210" + "07416f419192c000411b" + "103c200041003b01e801410220014102100a416f41ac92c000412b103c200041003b01e8014101410220014102100b" + "416f41d792c000412310" + "3c4102100f416f41cc83c000411f103c41021010416f41e785c000412f103c410141021011416f419686c000412710" + "3c41b980c00041812010" + "06417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e801200241812020" + "014102100c417441fa92" + "c0004121103c200041003b01e801200241812020014102100d4174419b93c0004131103c200041003b01e801410120" + "0241812020014102100e" + "417441cc93c0004129103c20024181201012417441f686c0004125103c200241812010134174419b87c0004135103c" + "41012002418120101441" + "7441d087c000412d103c20024181201015417441fd87c0004119103c41e782c00041812041a482c000410b41af82c0" + "00410e1017417441bd82" + "c0004109103c41e782c000410d41a482c00041812041af82c000410e1017417441bd82c0004109103c41e782c00041" + "0d41a482c000410b41af" + "82c0004181201017417441bd82c0004109103c200041003b01e8012002418120200141021016417441f593c0004121" + "103c200041003b01e801" + "41a7a1c00041812041a7a1c00041142001410210234174419694c0004118103c200041003b01e80120044114200441" + "14200241812020014102" + "1024417441ae94c000411f103c200041003b01e801200941812020044114200141021025417441cd94c0004122103c" + "41e782c000410d200620" + "002802a001410010004173419688c000410f103c200042d487b6f4c7d4b1c0003700e00141e782c000410d200041e0" + "95ebdc036a2207410810" + "26417341a588c000411c103c41e782c000410d200620002802a001101f417341c188c0004116103c20074108200041" + "e0016a22064108102741" + "7341d788c0004118103c20064108200741081027417341ef88c0004118103c200041003b01e8012007410820064108" + "20014102410010284173" + "41ef94c0004114103c200041003b01e801200641082007410820014102410010284173418395c0004114103c200041" + "003b01e8012007410820" + "06410820014102410010294173419795c0004119103c200041003b01e8012006410820074108200141024100102941" + "7341b095c0004119103c" + "200041003b01e8012007410820064108200141024100102a417341c995c0004119103c200041003b01e80120064108" + "20074108200141024100" + "102a417341e295c0004119103c200041003b01e8012007410820064108200141024100102b417341fb95c000411710" + "3c200041003b01e80120" + "06410820074108200141024100102b4173419296c0004117103c200041003b01e80120074108410320014102410010" + "2c417341a996c0004114" + "103c200041003b01e801200741084103200141024100102d417341bd96c0004113103c200041003b01e80120074108" + "200141024100102e4173" + "41d096c0004113103c200842003703002005420037030020034200370300200042003703e801200441142004411420" + "014120102f417141e396" + "c000411f103c200842003703002005420037030020034200370300200042003703e801200441142004411420014120" + "10304171418297c00041" + "25103c200842003703002005420037030020034200370300200042003703e801200441142004411420014120103141" + "7141a797c0004122103c" + "200842003703002005420037030020034200370300200042003703e8012004411420044114200141201032417141c9" + "97c000411e103c200842" + "003703002005420037030020034200370300200042003703e8012004411420044114200141201033417141e797c000" + "411f103c200842003703" + "002005420037030020034200370300200042003703e8012004411420044114200441142001412010344171418698c0" + "004120103c2008420037" + "03002005420037030020034200370300200042003703e8012004411420044114200141201035417141a698c000412c" + "103c2008420037030020" + "05420037030020034200370300200042003703e8012004411420044114200141201036417141d298c000411f103c20" + "08420037030020054200" + "37030020034200370300200042003703e8012004411420044114200141201037417141f198c000411e103c20022000" + "2802a001410010094171" + "418789c0004123103c200041003b01e80120044114200220002802a0012001410210184171418f99c000411a103c20" + "0041003b01e801200220" + "002802a001200141021019417141a999c0004121103c200041003b01e801200220002802a00120014102101a417141" + "ca99c0004120103c2002" + "20002802a001101b417141aa89c0004120103c200220002802a001101c417141ca89c0004127103c200041003602e8" + "01200220002802a00120" + "014104101d417141ea99c0004121103c200041003b01e801200220002802a0012001410210084171418b9ac0004124" + "103c2000418080800836" + "02e801200041003b018e02200220002802a001200141042000418e026a220341021020417141af9ac0004122103c20" + "0041003b018e02200220" + "002802a00122052004411420022005200341021024417141d19ac0004128103c200041003b018e0220044114200220" + "002802a0012205200220" + "05200341021024417141f99ac0004128103c200041003b018e02200220002802a00120044114200341021038417141" + "a19bc0004126103c2000" + "41003b018e0220044114200220002802a001200341021038417141c79bc0004126103c200041003b018e0220022000" + "2802a001200441142003" + "41021039417141ed9bc000412d103c200041003b018e0220044114200220002802a0012003410210394171419a9cc0" + "00412d103c200041003b" + "018e02200220002802a00120034102103a417141c79cc0004120103c200041003b018e02200220002802a001200141" + "0420034102102f417141" + "e79cc0004123103c200041003b018e02200220002802a00120044114419a85c00041142003410210224171418a9dc0" + "004122103c200041003b" + "018e0220044114200220002802a001419a85c0004114200341021022417141ac9dc0004122103c200041003b018e02" + "200220002802a0012001" + "4104200341021030417141ce9dc0004129103c200041003b018e0220094118200220002802a0012003410210254171" + "41f79dc0004124103c20" + "0041003b018e02200220002802a001200141042003410210314171419b9ec0004126103c200041003b018e02200220" + "002802a0012001410420" + "0341021032417141c19ec0004122103c200041003b018e02200220002802a00120014104200341021033417141e39e" + "c0004123103c20004100" + "3b018e02200220002802a0012004411420014104200341021034417141869fc0004125103c200041003b018e022004" + "4114200220002802a001" + "20014104200341021034417141ab9fc0004125103c200041003b018e02200220002802a00120014104200341021035" + "417141d09fc000413010" + "3c200041003b018e02200220002802a00120034102103b41714180a0c0004124103c200041003b018e022002200028" + "02a00120014104200341" + "021036417141a4a0c0004123103c200041003b018e02200220002802a00120014104200341021037417141c7a0c000" + "4122103c200041003b01" + "8e02200220002802a00141f189c0004120200341021018417141e9a0c000411d103c41e782c000410d200220002802" + "a001101e417141918ac0" + "004123103c41e796abdd03410d41f189c000412041001000417341b48ac0004110103c41e796abdd03410d20064108" + "1026417341c48ac00041" + "1d103c41e796abdd03410d20044114101e417341e18ac0004118103c41e796abdd03410d419583c0004108101f4173" + "41f98ac0004117103c20" + "0220002802a001200241812041001000417441908bc000410e103c2002418120420110014174419e8bc0004112103c" + "41e782c0004181202006" + "41081026417441b08bc000411b103c41e782c00041812020044114101e417441cb8bc0004116103c41e782c0004181" + "20419583c0004108101f" + "417441e18bc0004115103c41e782c000410d200220002802a001101f417141f68bc0004119103c200041003b018e02" + "200220002802a0012004" + "411420034102102541714186a1c0004121103c41e782c000410d200220002802a001410210004171418f8cc0004114" + "103c4101410020044114" + "101e410041a38cc000411a103c20004190026a240041010f0b0b418080c000410b417f20032003417f4e1bac100100" + "0b0b92210200418080c0" + "000bae056572726f725f636f64653d54455354204641494c45442424242424205354415254494e47205741534d2045" + "5845435554494f4e2024" + "24242424746573745f616d656e646d656e74616d656e646d656e745f656e61626c656463616368655f6c6564676572" + "5f6f626a6765745f7478" + "5f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e6765745f6c" + "65646765725f6f626a5f" + "61727261795f6c656e6765745f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c6564" + "6765725f6f626a5f6e65" + "737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e7570" + "646174655f6461746174" + "657374206d65737361676574657374207075626b657974657374207369676e6174757265636865636b5f7369676765" + "745f6e66745f666c6167" + "736765745f6e66745f7472616e736665725f66656574657374696e6720747261636574726163655f6163636f756e74" + "400000000000005f7472" + "6163655f616d6f756e74400000000000000074726163655f616d6f756e745f7a65726f6765745f706172656e745f6c" + "65646765725f68617368" + "5f6e65675f7074726765745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e" + "65737465645f61727261" + "795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f6e65675f6c656e676574" + "5f74785f6e6573746564" + "5f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f7074725f" + "6f6f6263616368655f6c" + "65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f6f626a5f77726f6e675f6c656e55534430" + "30303030303030303030" + "3030303030300041d685c0000bd11b74726163655f6e756d5f6f6f625f7374726765745f63757272656e745f6c6564" + "6765725f6f626a5f6172" + "7261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f61727261795f6c656e5f" + "696e76616c69645f7366" + "69656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e" + "61626c65645f746f6f5f" + "6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6375" + "7272656e745f6c656467" + "65725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c6564676572" + "5f6f626a5f6e65737465" + "645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174655f646174615f746f6f5f6269675f736c" + "69636574726163655f6f" + "6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f625f736c69636574726163655f616d6f756e" + "745f6f6f625f736c6963" + "65666c6f61745f636f6d706172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f625f736c6963" + "653263616368655f6c65" + "646765725f6f626a5f77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f6e675f" + "73697a655f75696e7432" + "35366765745f6e66745f7472616e736665725f6665655f77726f6e675f73697a655f75696e74323536303030303030" + "30303030303030303030" + "3030303030303030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f6163636f756e" + "745f696474726163655f" + "6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472696e6774726163655f6163" + "636f756e745f6f6f625f" + "737472696e6774726163655f616d6f756e745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e6774726163" + "655f6e756d5f746f6f5f" + "6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774726163655f6163636f756e745f746f" + "6f5f6c6f6e6774726163" + "655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e6774687472616365" + "5f696e76616c69645f61" + "735f68657874726163655f6163636f756e745f636865636b5f646573796e636765745f6c65646765725f73716e6765" + "745f706172656e745f6c" + "65646765725f74696d656765745f706172656e745f6c65646765725f686173686765745f626173655f666565676574" + "5f63757272656e745f6c" + "65646765725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465" + "645f6669656c64676574" + "5f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f" + "6e65737465645f666965" + "6c64636f6d707574655f7368613531325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e" + "66745f7461786f6e6765" + "745f6e66745f73657269616c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e6765745f70" + "6172656e745f6c656467" + "65725f686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e" + "5f746f6f5f6c6f6e6763" + "6865636b5f6b65796c65745f6f6f625f6c656e5f753332636865636b5f6b65796c65745f77726f6e675f6c656e5f75" + "3332666c6f61745f6672" + "6f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e5f75696e743634" + "6163636f756e745f6b65" + "796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c6574" + "5f6c656e5f6f6f625f63" + "757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c6574" + "5f6c656e5f6f6f625f61" + "7373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c65745f" + "6c656e5f77726f6e675f" + "6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f6375" + "7272656e63795f6c656e" + "616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f736669656c646765745f6375" + "7272656e745f6c656467" + "65725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c64" + "5f696e76616c69645f73" + "6669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6375727265" + "6e745f6c65646765725f" + "6f626a5f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65" + "737465645f6669656c64" + "5f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c665f746f6f5f6269675f736c696365" + "616d6d5f6b65796c6574" + "5f746f6f5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70" + "746f6b656e5f6b65796c" + "65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c69636531666c6f6174" + "5f6164645f6f6f625f73" + "6c69636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f" + "625f736c69636532666c" + "6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d756c7469706c795f6f6f625f736c696365" + "32666c6f61745f646976" + "6964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f74" + "5f6f6f625f736c696365" + "666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f675f6f6f625f736c696365657363726f775f6b65" + "796c65745f77726f6e67" + "5f73697a655f75696e7433326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a655f75696e74" + "33326e66745f6f666665" + "725f6b65796c65745f77726f6e675f73697a655f75696e7433326f666665725f6b65796c65745f77726f6e675f7369" + "7a655f75696e7433326f" + "7261636c655f6b65796c65745f77726f6e675f73697a655f75696e7433327061796368616e5f6b65796c65745f7772" + "6f6e675f73697a655f75" + "696e7433327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f75696e74" + "33327469636b65745f6b" + "65796c65745f77726f6e675f73697a655f75696e7433327661756c745f6b65796c65745f77726f6e675f73697a655f" + "75696e7433326765745f" + "6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973737565725f77726f6e675f73697a65" + "5f75696e743235366765" + "745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f7772" + "6f6e675f73697a655f75" + "696e743235366163636f756e745f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964636865636b" + "5f6b65796c65745f7772" + "6f6e675f73697a655f6163636f756e745f696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e745f69" + "643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69643264656c6567" + "6174655f6b65796c6574" + "5f77726f6e675f73697a655f6163636f756e745f69643164656c65676174655f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e74" + "5f6964326465706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69" + "64316465706f7369745f" + "707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964326469645f6b65796c6574" + "5f77726f6e675f73697a" + "655f6163636f756e745f6964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964" + "6c696e655f6b65796c65" + "745f77726f6e675f73697a655f6163636f756e745f6964316c696e655f6b65796c65745f77726f6e675f73697a655f" + "6163636f756e745f6964" + "326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646d70746f6b" + "656e5f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e745f69646e66745f6f666665725f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e745f" + "69646f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646f7261636c655f6b65796c" + "65745f77726f6e675f73" + "697a655f6163636f756e745f69647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e74" + "5f696431706179636861" + "6e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964327065726d697373696f6e65645f646f6d" + "61696e5f6b65796c6574" + "5f77726f6e675f73697a655f6163636f756e745f69647369676e6572735f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e745f69" + "647469636b65745f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69647661756c745f6b65796c65" + "745f77726f6e675f7369" + "7a655f6163636f756e745f69646765745f6e66745f77726f6e675f73697a655f6163636f756e745f69646d70746f6b" + "656e5f6b65796c65745f" + "6d707469645f77726f6e675f6c656e677468004d0970726f64756365727302086c616e677561676501045275737400" + "0c70726f636573736564" + "2d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d303929002c0f74617267" + "65745f66656174757265" "73022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const floatTestsWasmHex = @@ -1134,7 +1353,8 @@ extern std::string const invalidSectionIdHex = "0061736d01000000ff0100"; // data += b'\xff\xff\xff\xff\x0f\x7f' // # Instruction: end (0x0b) // data += b'\x0b' -extern std::string const localVariableBombHex = "0061736d01000000010401600000030201000a0f010d01ffffffff0f7f0b"; +extern std::string const localVariableBombHex = + "0061736d01000000010401600000030201000a0f010d01ffffffff0f7f0b"; extern std::string const infiniteLoopWasmHex = "0061736d010000000108026000006000017f030302000105030100020638097f004180080b" @@ -1157,3811 +1377,7604 @@ extern std::string const startLoopHex = "6e69736800010801000a0e02070003400c000b0b040041010b"; extern std::string const badAlignWasmHex = - "0061736d01000000011b046000017f60057f7f7f7f7f017f60067f7f7f7f7f7f017f600000022a0203656e760f666c6f61745f66726f6d5f75" - "696e74000103656e760c636865636b5f6b65796c6574000203050403000000050301000306470b7f004180080b7f00418088020b7f00418008" - "0b7f00418088040b7f00418088040b7f00418088080b7f004180080b7f00418088080b7f004180800c0b7f0041000b7f0041010b07cc011006" - "6d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730002057465737431000307655f64617461310300057465737432000407655f" - "64617461320301047465737400050c5f5f64736f5f68616e646c6503020a5f5f646174615f656e6403030b5f5f737461636b5f6c6f7703040c" - "5f5f737461636b5f6869676803050d5f5f676c6f62616c5f6261736503060b5f5f686561705f6261736503070a5f5f686561705f656e640308" - "0d5f5f6d656d6f72795f6261736503090c5f5f7461626c655f62617365030a0a99020402000b2801017f418108427f370000418108410841a3" - "08410c41001000220041a40828020020004100481b0b5f01017f419a88024191a4cca00136010041928802428994ace0d0c1c3871037010041" - "8a88024281848ca0d0c0c1830837010041818802417f360000418a8802411441818802410441a3880241201001220041a48802280200200041" - "00481b0b8a0101037f418108427f370000418108410841a308410c410010002100419a88024191a4cca00136010041928802428994ace0d0c1" - "c38710370100418a88024281848ca0d0c0c1830837010041818802417f36000041a4082802002101418a8802411441818802410441a3880241" - "201001220241a4880228020020024100481b2000200120004100481b6a0b007f0970726f647563657273010c70726f6365737365642d627901" - "05636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a" - "65637420616234623561326462353832393538616631656533303861373930636664623432626432343732302900490f7461726765745f6665" - "617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c74" + "0061736d01000000011b046000017f60057f7f7f7f7f017f60067f7f7f7f7f7f017f600000022a0203656e760f666c" + "6f61745f66726f6d5f75" + "696e74000103656e760c636865636b5f6b65796c6574000203050403000000050301000306470b7f004180080b7f00" + "418088020b7f00418008" + "0b7f00418088040b7f00418088040b7f00418088080b7f004180080b7f00418088080b7f004180800c0b7f0041000b" + "7f0041010b07cc011006" + "6d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730002057465737431000307655f6461746131030005" + "7465737432000407655f" + "64617461320301047465737400050c5f5f64736f5f68616e646c6503020a5f5f646174615f656e6403030b5f5f7374" + "61636b5f6c6f7703040c" + "5f5f737461636b5f6869676803050d5f5f676c6f62616c5f6261736503060b5f5f686561705f6261736503070a5f5f" + "686561705f656e640308" + "0d5f5f6d656d6f72795f6261736503090c5f5f7461626c655f62617365030a0a99020402000b2801017f418108427f" + "370000418108410841a3" + "08410c41001000220041a40828020020004100481b0b5f01017f419a88024191a4cca00136010041928802428994ac" + "e0d0c1c3871037010041" + "8a88024281848ca0d0c0c1830837010041818802417f360000418a8802411441818802410441a38802412010012200" + "41a48802280200200041" + "00481b0b8a0101037f418108427f370000418108410841a308410c410010002100419a88024191a4cca00136010041" + "928802428994ace0d0c1" + "c38710370100418a88024281848ca0d0c0c1830837010041818802417f36000041a4082802002101418a8802411441" + "818802410441a3880241" + "201001220241a4880228020020024100481b2000200120004100481b6a0b007f0970726f647563657273010c70726f" + "6365737365642d627901" + "05636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d" + "2f6c6c766d2d70726f6a" + "6563742061623462356132646235383239353861663165653330386137393063666462343262643234373230290049" + "0f7461726765745f6665" + "617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74" + "797065732b0a6d756c74" "6976616c7565"; extern std::string const thousandParamsHex = - "0061736d0100000001f1070260000060e8077f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f017f030302000105" - "030100020638097f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f0041000b" - "7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730000047465737400010c5f5f64736f5f68616e646c" - "6503000a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f737461636b5f6869676803030d5f5f676c6f62616c5f6261" - "736503040b5f5f686561705f6261736503050a5f5f686561705f656e6403060d5f5f6d656d6f72795f6261736503070c5f5f7461626c655f62" - "61736503080aa71e0202000ba11e00200020016a20026a20036a20046a20056a20066a20076a20086a20096a200a6a200b6a200c6a200d6a20" - "0e6a200f6a20106a20116a20126a20136a20146a20156a20166a20176a20186a20196a201a6a201b6a201c6a201d6a201e6a201f6a20206a20" - "216a20226a20236a20246a20256a20266a20276a20286a20296a202a6a202b6a202c6a202d6a202e6a202f6a20306a20316a20326a20336a20" - "346a20356a20366a20376a20386a20396a203a6a203b6a203c6a203d6a203e6a203f6a20406a20416a20426a20436a20446a20456a20466a20" - "476a20486a20496a204a6a204b6a204c6a204d6a204e6a204f6a20506a20516a20526a20536a20546a20556a20566a20576a20586a20596a20" - "5a6a205b6a205c6a205d6a205e6a205f6a20606a20616a20626a20636a20646a20656a20666a20676a20686a20696a206a6a206b6a206c6a20" - "6d6a206e6a206f6a20706a20716a20726a20736a20746a20756a20766a20776a20786a20796a207a6a207b6a207c6a207d6a207e6a207f6a20" - "80016a2081016a2082016a2083016a2084016a2085016a2086016a2087016a2088016a2089016a208a016a208b016a208c016a208d016a208e" - "016a208f016a2090016a2091016a2092016a2093016a2094016a2095016a2096016a2097016a2098016a2099016a209a016a209b016a209c01" - "6a209d016a209e016a209f016a20a0016a20a1016a20a2016a20a3016a20a4016a20a5016a20a6016a20a7016a20a8016a20a9016a20aa016a" - "20ab016a20ac016a20ad016a20ae016a20af016a20b0016a20b1016a20b2016a20b3016a20b4016a20b5016a20b6016a20b7016a20b8016a20" - "b9016a20ba016a20bb016a20bc016a20bd016a20be016a20bf016a20c0016a20c1016a20c2016a20c3016a20c4016a20c5016a20c6016a20c7" - "016a20c8016a20c9016a20ca016a20cb016a20cc016a20cd016a20ce016a20cf016a20d0016a20d1016a20d2016a20d3016a20d4016a20d501" - "6a20d6016a20d7016a20d8016a20d9016a20da016a20db016a20dc016a20dd016a20de016a20df016a20e0016a20e1016a20e2016a20e3016a" - "20e4016a20e5016a20e6016a20e7016a20e8016a20e9016a20ea016a20eb016a20ec016a20ed016a20ee016a20ef016a20f0016a20f1016a20" - "f2016a20f3016a20f4016a20f5016a20f6016a20f7016a20f8016a20f9016a20fa016a20fb016a20fc016a20fd016a20fe016a20ff016a2080" - "026a2081026a2082026a2083026a2084026a2085026a2086026a2087026a2088026a2089026a208a026a208b026a208c026a208d026a208e02" - "6a208f026a2090026a2091026a2092026a2093026a2094026a2095026a2096026a2097026a2098026a2099026a209a026a209b026a209c026a" - "209d026a209e026a209f026a20a0026a20a1026a20a2026a20a3026a20a4026a20a5026a20a6026a20a7026a20a8026a20a9026a20aa026a20" - "ab026a20ac026a20ad026a20ae026a20af026a20b0026a20b1026a20b2026a20b3026a20b4026a20b5026a20b6026a20b7026a20b8026a20b9" - "026a20ba026a20bb026a20bc026a20bd026a20be026a20bf026a20c0026a20c1026a20c2026a20c3026a20c4026a20c5026a20c6026a20c702" - "6a20c8026a20c9026a20ca026a20cb026a20cc026a20cd026a20ce026a20cf026a20d0026a20d1026a20d2026a20d3026a20d4026a20d5026a" - "20d6026a20d7026a20d8026a20d9026a20da026a20db026a20dc026a20dd026a20de026a20df026a20e0026a20e1026a20e2026a20e3026a20" - "e4026a20e5026a20e6026a20e7026a20e8026a20e9026a20ea026a20eb026a20ec026a20ed026a20ee026a20ef026a20f0026a20f1026a20f2" - "026a20f3026a20f4026a20f5026a20f6026a20f7026a20f8026a20f9026a20fa026a20fb026a20fc026a20fd026a20fe026a20ff026a208003" - "6a2081036a2082036a2083036a2084036a2085036a2086036a2087036a2088036a2089036a208a036a208b036a208c036a208d036a208e036a" - "208f036a2090036a2091036a2092036a2093036a2094036a2095036a2096036a2097036a2098036a2099036a209a036a209b036a209c036a20" - "9d036a209e036a209f036a20a0036a20a1036a20a2036a20a3036a20a4036a20a5036a20a6036a20a7036a20a8036a20a9036a20aa036a20ab" - "036a20ac036a20ad036a20ae036a20af036a20b0036a20b1036a20b2036a20b3036a20b4036a20b5036a20b6036a20b7036a20b8036a20b903" - "6a20ba036a20bb036a20bc036a20bd036a20be036a20bf036a20c0036a20c1036a20c2036a20c3036a20c4036a20c5036a20c6036a20c7036a" - "20c8036a20c9036a20ca036a20cb036a20cc036a20cd036a20ce036a20cf036a20d0036a20d1036a20d2036a20d3036a20d4036a20d5036a20" - "d6036a20d7036a20d8036a20d9036a20da036a20db036a20dc036a20dd036a20de036a20df036a20e0036a20e1036a20e2036a20e3036a20e4" - "036a20e5036a20e6036a20e7036a20e8036a20e9036a20ea036a20eb036a20ec036a20ed036a20ee036a20ef036a20f0036a20f1036a20f203" - "6a20f3036a20f4036a20f5036a20f6036a20f7036a20f8036a20f9036a20fa036a20fb036a20fc036a20fd036a20fe036a20ff036a2080046a" - "2081046a2082046a2083046a2084046a2085046a2086046a2087046a2088046a2089046a208a046a208b046a208c046a208d046a208e046a20" - "8f046a2090046a2091046a2092046a2093046a2094046a2095046a2096046a2097046a2098046a2099046a209a046a209b046a209c046a209d" - "046a209e046a209f046a20a0046a20a1046a20a2046a20a3046a20a4046a20a5046a20a6046a20a7046a20a8046a20a9046a20aa046a20ab04" - "6a20ac046a20ad046a20ae046a20af046a20b0046a20b1046a20b2046a20b3046a20b4046a20b5046a20b6046a20b7046a20b8046a20b9046a" - "20ba046a20bb046a20bc046a20bd046a20be046a20bf046a20c0046a20c1046a20c2046a20c3046a20c4046a20c5046a20c6046a20c7046a20" - "c8046a20c9046a20ca046a20cb046a20cc046a20cd046a20ce046a20cf046a20d0046a20d1046a20d2046a20d3046a20d4046a20d5046a20d6" - "046a20d7046a20d8046a20d9046a20da046a20db046a20dc046a20dd046a20de046a20df046a20e0046a20e1046a20e2046a20e3046a20e404" - "6a20e5046a20e6046a20e7046a20e8046a20e9046a20ea046a20eb046a20ec046a20ed046a20ee046a20ef046a20f0046a20f1046a20f2046a" - "20f3046a20f4046a20f5046a20f6046a20f7046a20f8046a20f9046a20fa046a20fb046a20fc046a20fd046a20fe046a20ff046a2080056a20" - "81056a2082056a2083056a2084056a2085056a2086056a2087056a2088056a2089056a208a056a208b056a208c056a208d056a208e056a208f" - "056a2090056a2091056a2092056a2093056a2094056a2095056a2096056a2097056a2098056a2099056a209a056a209b056a209c056a209d05" - "6a209e056a209f056a20a0056a20a1056a20a2056a20a3056a20a4056a20a5056a20a6056a20a7056a20a8056a20a9056a20aa056a20ab056a" - "20ac056a20ad056a20ae056a20af056a20b0056a20b1056a20b2056a20b3056a20b4056a20b5056a20b6056a20b7056a20b8056a20b9056a20" - "ba056a20bb056a20bc056a20bd056a20be056a20bf056a20c0056a20c1056a20c2056a20c3056a20c4056a20c5056a20c6056a20c7056a20c8" - "056a20c9056a20ca056a20cb056a20cc056a20cd056a20ce056a20cf056a20d0056a20d1056a20d2056a20d3056a20d4056a20d5056a20d605" - "6a20d7056a20d8056a20d9056a20da056a20db056a20dc056a20dd056a20de056a20df056a20e0056a20e1056a20e2056a20e3056a20e4056a" - "20e5056a20e6056a20e7056a20e8056a20e9056a20ea056a20eb056a20ec056a20ed056a20ee056a20ef056a20f0056a20f1056a20f2056a20" - "f3056a20f4056a20f5056a20f6056a20f7056a20f8056a20f9056a20fa056a20fb056a20fc056a20fd056a20fe056a20ff056a2080066a2081" - "066a2082066a2083066a2084066a2085066a2086066a2087066a2088066a2089066a208a066a208b066a208c066a208d066a208e066a208f06" - "6a2090066a2091066a2092066a2093066a2094066a2095066a2096066a2097066a2098066a2099066a209a066a209b066a209c066a209d066a" - "209e066a209f066a20a0066a20a1066a20a2066a20a3066a20a4066a20a5066a20a6066a20a7066a20a8066a20a9066a20aa066a20ab066a20" - "ac066a20ad066a20ae066a20af066a20b0066a20b1066a20b2066a20b3066a20b4066a20b5066a20b6066a20b7066a20b8066a20b9066a20ba" - "066a20bb066a20bc066a20bd066a20be066a20bf066a20c0066a20c1066a20c2066a20c3066a20c4066a20c5066a20c6066a20c7066a20c806" - "6a20c9066a20ca066a20cb066a20cc066a20cd066a20ce066a20cf066a20d0066a20d1066a20d2066a20d3066a20d4066a20d5066a20d6066a" - "20d7066a20d8066a20d9066a20da066a20db066a20dc066a20dd066a20de066a20df066a20e0066a20e1066a20e2066a20e3066a20e4066a20" - "e5066a20e6066a20e7066a20e8066a20e9066a20ea066a20eb066a20ec066a20ed066a20ee066a20ef066a20f0066a20f1066a20f2066a20f3" - "066a20f4066a20f5066a20f6066a20f7066a20f8066a20f9066a20fa066a20fb066a20fc066a20fd066a20fe066a20ff066a2080076a208107" - "6a2082076a2083076a2084076a2085076a2086076a2087076a2088076a2089076a208a076a208b076a208c076a208d076a208e076a208f076a" - "2090076a2091076a2092076a2093076a2094076a2095076a2096076a2097076a2098076a2099076a209a076a209b076a209c076a209d076a20" - "9e076a209f076a20a0076a20a1076a20a2076a20a3076a20a4076a20a5076a20a6076a20a7076a20a8076a20a9076a20aa076a20ab076a20ac" - "076a20ad076a20ae076a20af076a20b0076a20b1076a20b2076a20b3076a20b4076a20b5076a20b6076a20b7076a20b8076a20b9076a20ba07" - "6a20bb076a20bc076a20bd076a20be076a20bf076a20c0076a20c1076a20c2076a20c3076a20c4076a20c5076a20c6076a20c7076a20c8076a" - "20c9076a20ca076a20cb076a20cc076a20cd076a20ce076a20cf076a20d0076a20d1076a20d2076a20d3076a20d4076a20d5076a20d6076a20" - "d7076a20d8076a20d9076a20da076a20db076a20dc076a20dd076a20de076a20df076a20e0076a20e1076a20e2076a20e3076a20e4076a20e5" - "076a20e6076a20e7076a0b007f0970726f647563657273010c70726f6365737365642d62790105636c616e675f31392e312e352d776173692d" - "73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a65637420616234623561326462353832393538" - "616631656533303861373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c" + "0061736d0100000001f1070260000060e8077f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f017f030302000105" + "030100020638097f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00" + "418080080b7f0041000b" + "7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730000047465737400010c5f" + "5f64736f5f68616e646c" + "6503000a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f737461636b5f6869676803030d5f" + "5f676c6f62616c5f6261" + "736503040b5f5f686561705f6261736503050a5f5f686561705f656e6403060d5f5f6d656d6f72795f626173650307" + "0c5f5f7461626c655f62" + "61736503080aa71e0202000ba11e00200020016a20026a20036a20046a20056a20066a20076a20086a20096a200a6a" + "200b6a200c6a200d6a20" + "0e6a200f6a20106a20116a20126a20136a20146a20156a20166a20176a20186a20196a201a6a201b6a201c6a201d6a" + "201e6a201f6a20206a20" + "216a20226a20236a20246a20256a20266a20276a20286a20296a202a6a202b6a202c6a202d6a202e6a202f6a20306a" + "20316a20326a20336a20" + "346a20356a20366a20376a20386a20396a203a6a203b6a203c6a203d6a203e6a203f6a20406a20416a20426a20436a" + "20446a20456a20466a20" + "476a20486a20496a204a6a204b6a204c6a204d6a204e6a204f6a20506a20516a20526a20536a20546a20556a20566a" + "20576a20586a20596a20" + "5a6a205b6a205c6a205d6a205e6a205f6a20606a20616a20626a20636a20646a20656a20666a20676a20686a20696a" + "206a6a206b6a206c6a20" + "6d6a206e6a206f6a20706a20716a20726a20736a20746a20756a20766a20776a20786a20796a207a6a207b6a207c6a" + "207d6a207e6a207f6a20" + "80016a2081016a2082016a2083016a2084016a2085016a2086016a2087016a2088016a2089016a208a016a208b016a" + "208c016a208d016a208e" + "016a208f016a2090016a2091016a2092016a2093016a2094016a2095016a2096016a2097016a2098016a2099016a20" + "9a016a209b016a209c01" + "6a209d016a209e016a209f016a20a0016a20a1016a20a2016a20a3016a20a4016a20a5016a20a6016a20a7016a20a8" + "016a20a9016a20aa016a" + "20ab016a20ac016a20ad016a20ae016a20af016a20b0016a20b1016a20b2016a20b3016a20b4016a20b5016a20b601" + "6a20b7016a20b8016a20" + "b9016a20ba016a20bb016a20bc016a20bd016a20be016a20bf016a20c0016a20c1016a20c2016a20c3016a20c4016a" + "20c5016a20c6016a20c7" + "016a20c8016a20c9016a20ca016a20cb016a20cc016a20cd016a20ce016a20cf016a20d0016a20d1016a20d2016a20" + "d3016a20d4016a20d501" + "6a20d6016a20d7016a20d8016a20d9016a20da016a20db016a20dc016a20dd016a20de016a20df016a20e0016a20e1" + "016a20e2016a20e3016a" + "20e4016a20e5016a20e6016a20e7016a20e8016a20e9016a20ea016a20eb016a20ec016a20ed016a20ee016a20ef01" + "6a20f0016a20f1016a20" + "f2016a20f3016a20f4016a20f5016a20f6016a20f7016a20f8016a20f9016a20fa016a20fb016a20fc016a20fd016a" + "20fe016a20ff016a2080" + "026a2081026a2082026a2083026a2084026a2085026a2086026a2087026a2088026a2089026a208a026a208b026a20" + "8c026a208d026a208e02" + "6a208f026a2090026a2091026a2092026a2093026a2094026a2095026a2096026a2097026a2098026a2099026a209a" + "026a209b026a209c026a" + "209d026a209e026a209f026a20a0026a20a1026a20a2026a20a3026a20a4026a20a5026a20a6026a20a7026a20a802" + "6a20a9026a20aa026a20" + "ab026a20ac026a20ad026a20ae026a20af026a20b0026a20b1026a20b2026a20b3026a20b4026a20b5026a20b6026a" + "20b7026a20b8026a20b9" + "026a20ba026a20bb026a20bc026a20bd026a20be026a20bf026a20c0026a20c1026a20c2026a20c3026a20c4026a20" + "c5026a20c6026a20c702" + "6a20c8026a20c9026a20ca026a20cb026a20cc026a20cd026a20ce026a20cf026a20d0026a20d1026a20d2026a20d3" + "026a20d4026a20d5026a" + "20d6026a20d7026a20d8026a20d9026a20da026a20db026a20dc026a20dd026a20de026a20df026a20e0026a20e102" + "6a20e2026a20e3026a20" + "e4026a20e5026a20e6026a20e7026a20e8026a20e9026a20ea026a20eb026a20ec026a20ed026a20ee026a20ef026a" + "20f0026a20f1026a20f2" + "026a20f3026a20f4026a20f5026a20f6026a20f7026a20f8026a20f9026a20fa026a20fb026a20fc026a20fd026a20" + "fe026a20ff026a208003" + "6a2081036a2082036a2083036a2084036a2085036a2086036a2087036a2088036a2089036a208a036a208b036a208c" + "036a208d036a208e036a" + "208f036a2090036a2091036a2092036a2093036a2094036a2095036a2096036a2097036a2098036a2099036a209a03" + "6a209b036a209c036a20" + "9d036a209e036a209f036a20a0036a20a1036a20a2036a20a3036a20a4036a20a5036a20a6036a20a7036a20a8036a" + "20a9036a20aa036a20ab" + "036a20ac036a20ad036a20ae036a20af036a20b0036a20b1036a20b2036a20b3036a20b4036a20b5036a20b6036a20" + "b7036a20b8036a20b903" + "6a20ba036a20bb036a20bc036a20bd036a20be036a20bf036a20c0036a20c1036a20c2036a20c3036a20c4036a20c5" + "036a20c6036a20c7036a" + "20c8036a20c9036a20ca036a20cb036a20cc036a20cd036a20ce036a20cf036a20d0036a20d1036a20d2036a20d303" + "6a20d4036a20d5036a20" + "d6036a20d7036a20d8036a20d9036a20da036a20db036a20dc036a20dd036a20de036a20df036a20e0036a20e1036a" + "20e2036a20e3036a20e4" + "036a20e5036a20e6036a20e7036a20e8036a20e9036a20ea036a20eb036a20ec036a20ed036a20ee036a20ef036a20" + "f0036a20f1036a20f203" + "6a20f3036a20f4036a20f5036a20f6036a20f7036a20f8036a20f9036a20fa036a20fb036a20fc036a20fd036a20fe" + "036a20ff036a2080046a" + "2081046a2082046a2083046a2084046a2085046a2086046a2087046a2088046a2089046a208a046a208b046a208c04" + "6a208d046a208e046a20" + "8f046a2090046a2091046a2092046a2093046a2094046a2095046a2096046a2097046a2098046a2099046a209a046a" + "209b046a209c046a209d" + "046a209e046a209f046a20a0046a20a1046a20a2046a20a3046a20a4046a20a5046a20a6046a20a7046a20a8046a20" + "a9046a20aa046a20ab04" + "6a20ac046a20ad046a20ae046a20af046a20b0046a20b1046a20b2046a20b3046a20b4046a20b5046a20b6046a20b7" + "046a20b8046a20b9046a" + "20ba046a20bb046a20bc046a20bd046a20be046a20bf046a20c0046a20c1046a20c2046a20c3046a20c4046a20c504" + "6a20c6046a20c7046a20" + "c8046a20c9046a20ca046a20cb046a20cc046a20cd046a20ce046a20cf046a20d0046a20d1046a20d2046a20d3046a" + "20d4046a20d5046a20d6" + "046a20d7046a20d8046a20d9046a20da046a20db046a20dc046a20dd046a20de046a20df046a20e0046a20e1046a20" + "e2046a20e3046a20e404" + "6a20e5046a20e6046a20e7046a20e8046a20e9046a20ea046a20eb046a20ec046a20ed046a20ee046a20ef046a20f0" + "046a20f1046a20f2046a" + "20f3046a20f4046a20f5046a20f6046a20f7046a20f8046a20f9046a20fa046a20fb046a20fc046a20fd046a20fe04" + "6a20ff046a2080056a20" + "81056a2082056a2083056a2084056a2085056a2086056a2087056a2088056a2089056a208a056a208b056a208c056a" + "208d056a208e056a208f" + "056a2090056a2091056a2092056a2093056a2094056a2095056a2096056a2097056a2098056a2099056a209a056a20" + "9b056a209c056a209d05" + "6a209e056a209f056a20a0056a20a1056a20a2056a20a3056a20a4056a20a5056a20a6056a20a7056a20a8056a20a9" + "056a20aa056a20ab056a" + "20ac056a20ad056a20ae056a20af056a20b0056a20b1056a20b2056a20b3056a20b4056a20b5056a20b6056a20b705" + "6a20b8056a20b9056a20" + "ba056a20bb056a20bc056a20bd056a20be056a20bf056a20c0056a20c1056a20c2056a20c3056a20c4056a20c5056a" + "20c6056a20c7056a20c8" + "056a20c9056a20ca056a20cb056a20cc056a20cd056a20ce056a20cf056a20d0056a20d1056a20d2056a20d3056a20" + "d4056a20d5056a20d605" + "6a20d7056a20d8056a20d9056a20da056a20db056a20dc056a20dd056a20de056a20df056a20e0056a20e1056a20e2" + "056a20e3056a20e4056a" + "20e5056a20e6056a20e7056a20e8056a20e9056a20ea056a20eb056a20ec056a20ed056a20ee056a20ef056a20f005" + "6a20f1056a20f2056a20" + "f3056a20f4056a20f5056a20f6056a20f7056a20f8056a20f9056a20fa056a20fb056a20fc056a20fd056a20fe056a" + "20ff056a2080066a2081" + "066a2082066a2083066a2084066a2085066a2086066a2087066a2088066a2089066a208a066a208b066a208c066a20" + "8d066a208e066a208f06" + "6a2090066a2091066a2092066a2093066a2094066a2095066a2096066a2097066a2098066a2099066a209a066a209b" + "066a209c066a209d066a" + "209e066a209f066a20a0066a20a1066a20a2066a20a3066a20a4066a20a5066a20a6066a20a7066a20a8066a20a906" + "6a20aa066a20ab066a20" + "ac066a20ad066a20ae066a20af066a20b0066a20b1066a20b2066a20b3066a20b4066a20b5066a20b6066a20b7066a" + "20b8066a20b9066a20ba" + "066a20bb066a20bc066a20bd066a20be066a20bf066a20c0066a20c1066a20c2066a20c3066a20c4066a20c5066a20" + "c6066a20c7066a20c806" + "6a20c9066a20ca066a20cb066a20cc066a20cd066a20ce066a20cf066a20d0066a20d1066a20d2066a20d3066a20d4" + "066a20d5066a20d6066a" + "20d7066a20d8066a20d9066a20da066a20db066a20dc066a20dd066a20de066a20df066a20e0066a20e1066a20e206" + "6a20e3066a20e4066a20" + "e5066a20e6066a20e7066a20e8066a20e9066a20ea066a20eb066a20ec066a20ed066a20ee066a20ef066a20f0066a" + "20f1066a20f2066a20f3" + "066a20f4066a20f5066a20f6066a20f7066a20f8066a20f9066a20fa066a20fb066a20fc066a20fd066a20fe066a20" + "ff066a2080076a208107" + "6a2082076a2083076a2084076a2085076a2086076a2087076a2088076a2089076a208a076a208b076a208c076a208d" + "076a208e076a208f076a" + "2090076a2091076a2092076a2093076a2094076a2095076a2096076a2097076a2098076a2099076a209a076a209b07" + "6a209c076a209d076a20" + "9e076a209f076a20a0076a20a1076a20a2076a20a3076a20a4076a20a5076a20a6076a20a7076a20a8076a20a9076a" + "20aa076a20ab076a20ac" + "076a20ad076a20ae076a20af076a20b0076a20b1076a20b2076a20b3076a20b4076a20b5076a20b6076a20b7076a20" + "b8076a20b9076a20ba07" + "6a20bb076a20bc076a20bd076a20be076a20bf076a20c0076a20c1076a20c2076a20c3076a20c4076a20c5076a20c6" + "076a20c7076a20c8076a" + "20c9076a20ca076a20cb076a20cc076a20cd076a20ce076a20cf076a20d0076a20d1076a20d2076a20d3076a20d407" + "6a20d5076a20d6076a20" + "d7076a20d8076a20d9076a20da076a20db076a20dc076a20dd076a20de076a20df076a20e0076a20e1076a20e2076a" + "20e3076a20e4076a20e5" + "076a20e6076a20e7076a0b007f0970726f647563657273010c70726f6365737365642d62790105636c616e675f3139" + "2e312e352d776173692d" + "73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374206162346235" + "61326462353832393538" + "616631656533303861373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f" + "6d757461626c652d676c" "6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; extern std::string const thousand1ParamsHex = - "0061736d0100000001f2070260000060e9077f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f017f0303020001" - "05030100020638097f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f004100" - "0b7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730000047465737400010c5f5f64736f5f68616e64" - "6c6503000a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f737461636b5f6869676803030d5f5f676c6f62616c5f62" - "61736503040b5f5f686561705f6261736503050a5f5f686561705f656e6403060d5f5f6d656d6f72795f6261736503070c5f5f7461626c655f" - "6261736503080aab1e0202000ba51e00200020016a20026a20036a20046a20056a20066a20076a20086a20096a200a6a200b6a200c6a200d6a" - "200e6a200f6a20106a20116a20126a20136a20146a20156a20166a20176a20186a20196a201a6a201b6a201c6a201d6a201e6a201f6a20206a" - "20216a20226a20236a20246a20256a20266a20276a20286a20296a202a6a202b6a202c6a202d6a202e6a202f6a20306a20316a20326a20336a" - "20346a20356a20366a20376a20386a20396a203a6a203b6a203c6a203d6a203e6a203f6a20406a20416a20426a20436a20446a20456a20466a" - "20476a20486a20496a204a6a204b6a204c6a204d6a204e6a204f6a20506a20516a20526a20536a20546a20556a20566a20576a20586a20596a" - "205a6a205b6a205c6a205d6a205e6a205f6a20606a20616a20626a20636a20646a20656a20666a20676a20686a20696a206a6a206b6a206c6a" - "206d6a206e6a206f6a20706a20716a20726a20736a20746a20756a20766a20776a20786a20796a207a6a207b6a207c6a207d6a207e6a207f6a" - "2080016a2081016a2082016a2083016a2084016a2085016a2086016a2087016a2088016a2089016a208a016a208b016a208c016a208d016a20" - "8e016a208f016a2090016a2091016a2092016a2093016a2094016a2095016a2096016a2097016a2098016a2099016a209a016a209b016a209c" - "016a209d016a209e016a209f016a20a0016a20a1016a20a2016a20a3016a20a4016a20a5016a20a6016a20a7016a20a8016a20a9016a20aa01" - "6a20ab016a20ac016a20ad016a20ae016a20af016a20b0016a20b1016a20b2016a20b3016a20b4016a20b5016a20b6016a20b7016a20b8016a" - "20b9016a20ba016a20bb016a20bc016a20bd016a20be016a20bf016a20c0016a20c1016a20c2016a20c3016a20c4016a20c5016a20c6016a20" - "c7016a20c8016a20c9016a20ca016a20cb016a20cc016a20cd016a20ce016a20cf016a20d0016a20d1016a20d2016a20d3016a20d4016a20d5" - "016a20d6016a20d7016a20d8016a20d9016a20da016a20db016a20dc016a20dd016a20de016a20df016a20e0016a20e1016a20e2016a20e301" - "6a20e4016a20e5016a20e6016a20e7016a20e8016a20e9016a20ea016a20eb016a20ec016a20ed016a20ee016a20ef016a20f0016a20f1016a" - "20f2016a20f3016a20f4016a20f5016a20f6016a20f7016a20f8016a20f9016a20fa016a20fb016a20fc016a20fd016a20fe016a20ff016a20" - "80026a2081026a2082026a2083026a2084026a2085026a2086026a2087026a2088026a2089026a208a026a208b026a208c026a208d026a208e" - "026a208f026a2090026a2091026a2092026a2093026a2094026a2095026a2096026a2097026a2098026a2099026a209a026a209b026a209c02" - "6a209d026a209e026a209f026a20a0026a20a1026a20a2026a20a3026a20a4026a20a5026a20a6026a20a7026a20a8026a20a9026a20aa026a" - "20ab026a20ac026a20ad026a20ae026a20af026a20b0026a20b1026a20b2026a20b3026a20b4026a20b5026a20b6026a20b7026a20b8026a20" - "b9026a20ba026a20bb026a20bc026a20bd026a20be026a20bf026a20c0026a20c1026a20c2026a20c3026a20c4026a20c5026a20c6026a20c7" - "026a20c8026a20c9026a20ca026a20cb026a20cc026a20cd026a20ce026a20cf026a20d0026a20d1026a20d2026a20d3026a20d4026a20d502" - "6a20d6026a20d7026a20d8026a20d9026a20da026a20db026a20dc026a20dd026a20de026a20df026a20e0026a20e1026a20e2026a20e3026a" - "20e4026a20e5026a20e6026a20e7026a20e8026a20e9026a20ea026a20eb026a20ec026a20ed026a20ee026a20ef026a20f0026a20f1026a20" - "f2026a20f3026a20f4026a20f5026a20f6026a20f7026a20f8026a20f9026a20fa026a20fb026a20fc026a20fd026a20fe026a20ff026a2080" - "036a2081036a2082036a2083036a2084036a2085036a2086036a2087036a2088036a2089036a208a036a208b036a208c036a208d036a208e03" - "6a208f036a2090036a2091036a2092036a2093036a2094036a2095036a2096036a2097036a2098036a2099036a209a036a209b036a209c036a" - "209d036a209e036a209f036a20a0036a20a1036a20a2036a20a3036a20a4036a20a5036a20a6036a20a7036a20a8036a20a9036a20aa036a20" - "ab036a20ac036a20ad036a20ae036a20af036a20b0036a20b1036a20b2036a20b3036a20b4036a20b5036a20b6036a20b7036a20b8036a20b9" - "036a20ba036a20bb036a20bc036a20bd036a20be036a20bf036a20c0036a20c1036a20c2036a20c3036a20c4036a20c5036a20c6036a20c703" - "6a20c8036a20c9036a20ca036a20cb036a20cc036a20cd036a20ce036a20cf036a20d0036a20d1036a20d2036a20d3036a20d4036a20d5036a" - "20d6036a20d7036a20d8036a20d9036a20da036a20db036a20dc036a20dd036a20de036a20df036a20e0036a20e1036a20e2036a20e3036a20" - "e4036a20e5036a20e6036a20e7036a20e8036a20e9036a20ea036a20eb036a20ec036a20ed036a20ee036a20ef036a20f0036a20f1036a20f2" - "036a20f3036a20f4036a20f5036a20f6036a20f7036a20f8036a20f9036a20fa036a20fb036a20fc036a20fd036a20fe036a20ff036a208004" - "6a2081046a2082046a2083046a2084046a2085046a2086046a2087046a2088046a2089046a208a046a208b046a208c046a208d046a208e046a" - "208f046a2090046a2091046a2092046a2093046a2094046a2095046a2096046a2097046a2098046a2099046a209a046a209b046a209c046a20" - "9d046a209e046a209f046a20a0046a20a1046a20a2046a20a3046a20a4046a20a5046a20a6046a20a7046a20a8046a20a9046a20aa046a20ab" - "046a20ac046a20ad046a20ae046a20af046a20b0046a20b1046a20b2046a20b3046a20b4046a20b5046a20b6046a20b7046a20b8046a20b904" - "6a20ba046a20bb046a20bc046a20bd046a20be046a20bf046a20c0046a20c1046a20c2046a20c3046a20c4046a20c5046a20c6046a20c7046a" - "20c8046a20c9046a20ca046a20cb046a20cc046a20cd046a20ce046a20cf046a20d0046a20d1046a20d2046a20d3046a20d4046a20d5046a20" - "d6046a20d7046a20d8046a20d9046a20da046a20db046a20dc046a20dd046a20de046a20df046a20e0046a20e1046a20e2046a20e3046a20e4" - "046a20e5046a20e6046a20e7046a20e8046a20e9046a20ea046a20eb046a20ec046a20ed046a20ee046a20ef046a20f0046a20f1046a20f204" - "6a20f3046a20f4046a20f5046a20f6046a20f7046a20f8046a20f9046a20fa046a20fb046a20fc046a20fd046a20fe046a20ff046a2080056a" - "2081056a2082056a2083056a2084056a2085056a2086056a2087056a2088056a2089056a208a056a208b056a208c056a208d056a208e056a20" - "8f056a2090056a2091056a2092056a2093056a2094056a2095056a2096056a2097056a2098056a2099056a209a056a209b056a209c056a209d" - "056a209e056a209f056a20a0056a20a1056a20a2056a20a3056a20a4056a20a5056a20a6056a20a7056a20a8056a20a9056a20aa056a20ab05" - "6a20ac056a20ad056a20ae056a20af056a20b0056a20b1056a20b2056a20b3056a20b4056a20b5056a20b6056a20b7056a20b8056a20b9056a" - "20ba056a20bb056a20bc056a20bd056a20be056a20bf056a20c0056a20c1056a20c2056a20c3056a20c4056a20c5056a20c6056a20c7056a20" - "c8056a20c9056a20ca056a20cb056a20cc056a20cd056a20ce056a20cf056a20d0056a20d1056a20d2056a20d3056a20d4056a20d5056a20d6" - "056a20d7056a20d8056a20d9056a20da056a20db056a20dc056a20dd056a20de056a20df056a20e0056a20e1056a20e2056a20e3056a20e405" - "6a20e5056a20e6056a20e7056a20e8056a20e9056a20ea056a20eb056a20ec056a20ed056a20ee056a20ef056a20f0056a20f1056a20f2056a" - "20f3056a20f4056a20f5056a20f6056a20f7056a20f8056a20f9056a20fa056a20fb056a20fc056a20fd056a20fe056a20ff056a2080066a20" - "81066a2082066a2083066a2084066a2085066a2086066a2087066a2088066a2089066a208a066a208b066a208c066a208d066a208e066a208f" - "066a2090066a2091066a2092066a2093066a2094066a2095066a2096066a2097066a2098066a2099066a209a066a209b066a209c066a209d06" - "6a209e066a209f066a20a0066a20a1066a20a2066a20a3066a20a4066a20a5066a20a6066a20a7066a20a8066a20a9066a20aa066a20ab066a" - "20ac066a20ad066a20ae066a20af066a20b0066a20b1066a20b2066a20b3066a20b4066a20b5066a20b6066a20b7066a20b8066a20b9066a20" - "ba066a20bb066a20bc066a20bd066a20be066a20bf066a20c0066a20c1066a20c2066a20c3066a20c4066a20c5066a20c6066a20c7066a20c8" - "066a20c9066a20ca066a20cb066a20cc066a20cd066a20ce066a20cf066a20d0066a20d1066a20d2066a20d3066a20d4066a20d5066a20d606" - "6a20d7066a20d8066a20d9066a20da066a20db066a20dc066a20dd066a20de066a20df066a20e0066a20e1066a20e2066a20e3066a20e4066a" - "20e5066a20e6066a20e7066a20e8066a20e9066a20ea066a20eb066a20ec066a20ed066a20ee066a20ef066a20f0066a20f1066a20f2066a20" - "f3066a20f4066a20f5066a20f6066a20f7066a20f8066a20f9066a20fa066a20fb066a20fc066a20fd066a20fe066a20ff066a2080076a2081" - "076a2082076a2083076a2084076a2085076a2086076a2087076a2088076a2089076a208a076a208b076a208c076a208d076a208e076a208f07" - "6a2090076a2091076a2092076a2093076a2094076a2095076a2096076a2097076a2098076a2099076a209a076a209b076a209c076a209d076a" - "209e076a209f076a20a0076a20a1076a20a2076a20a3076a20a4076a20a5076a20a6076a20a7076a20a8076a20a9076a20aa076a20ab076a20" - "ac076a20ad076a20ae076a20af076a20b0076a20b1076a20b2076a20b3076a20b4076a20b5076a20b6076a20b7076a20b8076a20b9076a20ba" - "076a20bb076a20bc076a20bd076a20be076a20bf076a20c0076a20c1076a20c2076a20c3076a20c4076a20c5076a20c6076a20c7076a20c807" - "6a20c9076a20ca076a20cb076a20cc076a20cd076a20ce076a20cf076a20d0076a20d1076a20d2076a20d3076a20d4076a20d5076a20d6076a" - "20d7076a20d8076a20d9076a20da076a20db076a20dc076a20dd076a20de076a20df076a20e0076a20e1076a20e2076a20e3076a20e4076a20" - "e5076a20e6076a20e7076a20e8076a0b007f0970726f647563657273010c70726f6365737365642d62790105636c616e675f31392e312e352d" - "776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742061623462356132646235" - "3832393538616631656533303861373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f6d75746162" - "6c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; + "0061736d0100000001f2070260000060e9077f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f017f0303020001" + "05030100020638097f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f" + "00418080080b7f004100" + "0b7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730000047465737400010c" + "5f5f64736f5f68616e64" + "6c6503000a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f737461636b5f6869676803030d" + "5f5f676c6f62616c5f62" + "61736503040b5f5f686561705f6261736503050a5f5f686561705f656e6403060d5f5f6d656d6f72795f6261736503" + "070c5f5f7461626c655f" + "6261736503080aab1e0202000ba51e00200020016a20026a20036a20046a20056a20066a20076a20086a20096a200a" + "6a200b6a200c6a200d6a" + "200e6a200f6a20106a20116a20126a20136a20146a20156a20166a20176a20186a20196a201a6a201b6a201c6a201d" + "6a201e6a201f6a20206a" + "20216a20226a20236a20246a20256a20266a20276a20286a20296a202a6a202b6a202c6a202d6a202e6a202f6a2030" + "6a20316a20326a20336a" + "20346a20356a20366a20376a20386a20396a203a6a203b6a203c6a203d6a203e6a203f6a20406a20416a20426a2043" + "6a20446a20456a20466a" + "20476a20486a20496a204a6a204b6a204c6a204d6a204e6a204f6a20506a20516a20526a20536a20546a20556a2056" + "6a20576a20586a20596a" + "205a6a205b6a205c6a205d6a205e6a205f6a20606a20616a20626a20636a20646a20656a20666a20676a20686a2069" + "6a206a6a206b6a206c6a" + "206d6a206e6a206f6a20706a20716a20726a20736a20746a20756a20766a20776a20786a20796a207a6a207b6a207c" + "6a207d6a207e6a207f6a" + "2080016a2081016a2082016a2083016a2084016a2085016a2086016a2087016a2088016a2089016a208a016a208b01" + "6a208c016a208d016a20" + "8e016a208f016a2090016a2091016a2092016a2093016a2094016a2095016a2096016a2097016a2098016a2099016a" + "209a016a209b016a209c" + "016a209d016a209e016a209f016a20a0016a20a1016a20a2016a20a3016a20a4016a20a5016a20a6016a20a7016a20" + "a8016a20a9016a20aa01" + "6a20ab016a20ac016a20ad016a20ae016a20af016a20b0016a20b1016a20b2016a20b3016a20b4016a20b5016a20b6" + "016a20b7016a20b8016a" + "20b9016a20ba016a20bb016a20bc016a20bd016a20be016a20bf016a20c0016a20c1016a20c2016a20c3016a20c401" + "6a20c5016a20c6016a20" + "c7016a20c8016a20c9016a20ca016a20cb016a20cc016a20cd016a20ce016a20cf016a20d0016a20d1016a20d2016a" + "20d3016a20d4016a20d5" + "016a20d6016a20d7016a20d8016a20d9016a20da016a20db016a20dc016a20dd016a20de016a20df016a20e0016a20" + "e1016a20e2016a20e301" + "6a20e4016a20e5016a20e6016a20e7016a20e8016a20e9016a20ea016a20eb016a20ec016a20ed016a20ee016a20ef" + "016a20f0016a20f1016a" + "20f2016a20f3016a20f4016a20f5016a20f6016a20f7016a20f8016a20f9016a20fa016a20fb016a20fc016a20fd01" + "6a20fe016a20ff016a20" + "80026a2081026a2082026a2083026a2084026a2085026a2086026a2087026a2088026a2089026a208a026a208b026a" + "208c026a208d026a208e" + "026a208f026a2090026a2091026a2092026a2093026a2094026a2095026a2096026a2097026a2098026a2099026a20" + "9a026a209b026a209c02" + "6a209d026a209e026a209f026a20a0026a20a1026a20a2026a20a3026a20a4026a20a5026a20a6026a20a7026a20a8" + "026a20a9026a20aa026a" + "20ab026a20ac026a20ad026a20ae026a20af026a20b0026a20b1026a20b2026a20b3026a20b4026a20b5026a20b602" + "6a20b7026a20b8026a20" + "b9026a20ba026a20bb026a20bc026a20bd026a20be026a20bf026a20c0026a20c1026a20c2026a20c3026a20c4026a" + "20c5026a20c6026a20c7" + "026a20c8026a20c9026a20ca026a20cb026a20cc026a20cd026a20ce026a20cf026a20d0026a20d1026a20d2026a20" + "d3026a20d4026a20d502" + "6a20d6026a20d7026a20d8026a20d9026a20da026a20db026a20dc026a20dd026a20de026a20df026a20e0026a20e1" + "026a20e2026a20e3026a" + "20e4026a20e5026a20e6026a20e7026a20e8026a20e9026a20ea026a20eb026a20ec026a20ed026a20ee026a20ef02" + "6a20f0026a20f1026a20" + "f2026a20f3026a20f4026a20f5026a20f6026a20f7026a20f8026a20f9026a20fa026a20fb026a20fc026a20fd026a" + "20fe026a20ff026a2080" + "036a2081036a2082036a2083036a2084036a2085036a2086036a2087036a2088036a2089036a208a036a208b036a20" + "8c036a208d036a208e03" + "6a208f036a2090036a2091036a2092036a2093036a2094036a2095036a2096036a2097036a2098036a2099036a209a" + "036a209b036a209c036a" + "209d036a209e036a209f036a20a0036a20a1036a20a2036a20a3036a20a4036a20a5036a20a6036a20a7036a20a803" + "6a20a9036a20aa036a20" + "ab036a20ac036a20ad036a20ae036a20af036a20b0036a20b1036a20b2036a20b3036a20b4036a20b5036a20b6036a" + "20b7036a20b8036a20b9" + "036a20ba036a20bb036a20bc036a20bd036a20be036a20bf036a20c0036a20c1036a20c2036a20c3036a20c4036a20" + "c5036a20c6036a20c703" + "6a20c8036a20c9036a20ca036a20cb036a20cc036a20cd036a20ce036a20cf036a20d0036a20d1036a20d2036a20d3" + "036a20d4036a20d5036a" + "20d6036a20d7036a20d8036a20d9036a20da036a20db036a20dc036a20dd036a20de036a20df036a20e0036a20e103" + "6a20e2036a20e3036a20" + "e4036a20e5036a20e6036a20e7036a20e8036a20e9036a20ea036a20eb036a20ec036a20ed036a20ee036a20ef036a" + "20f0036a20f1036a20f2" + "036a20f3036a20f4036a20f5036a20f6036a20f7036a20f8036a20f9036a20fa036a20fb036a20fc036a20fd036a20" + "fe036a20ff036a208004" + "6a2081046a2082046a2083046a2084046a2085046a2086046a2087046a2088046a2089046a208a046a208b046a208c" + "046a208d046a208e046a" + "208f046a2090046a2091046a2092046a2093046a2094046a2095046a2096046a2097046a2098046a2099046a209a04" + "6a209b046a209c046a20" + "9d046a209e046a209f046a20a0046a20a1046a20a2046a20a3046a20a4046a20a5046a20a6046a20a7046a20a8046a" + "20a9046a20aa046a20ab" + "046a20ac046a20ad046a20ae046a20af046a20b0046a20b1046a20b2046a20b3046a20b4046a20b5046a20b6046a20" + "b7046a20b8046a20b904" + "6a20ba046a20bb046a20bc046a20bd046a20be046a20bf046a20c0046a20c1046a20c2046a20c3046a20c4046a20c5" + "046a20c6046a20c7046a" + "20c8046a20c9046a20ca046a20cb046a20cc046a20cd046a20ce046a20cf046a20d0046a20d1046a20d2046a20d304" + "6a20d4046a20d5046a20" + "d6046a20d7046a20d8046a20d9046a20da046a20db046a20dc046a20dd046a20de046a20df046a20e0046a20e1046a" + "20e2046a20e3046a20e4" + "046a20e5046a20e6046a20e7046a20e8046a20e9046a20ea046a20eb046a20ec046a20ed046a20ee046a20ef046a20" + "f0046a20f1046a20f204" + "6a20f3046a20f4046a20f5046a20f6046a20f7046a20f8046a20f9046a20fa046a20fb046a20fc046a20fd046a20fe" + "046a20ff046a2080056a" + "2081056a2082056a2083056a2084056a2085056a2086056a2087056a2088056a2089056a208a056a208b056a208c05" + "6a208d056a208e056a20" + "8f056a2090056a2091056a2092056a2093056a2094056a2095056a2096056a2097056a2098056a2099056a209a056a" + "209b056a209c056a209d" + "056a209e056a209f056a20a0056a20a1056a20a2056a20a3056a20a4056a20a5056a20a6056a20a7056a20a8056a20" + "a9056a20aa056a20ab05" + "6a20ac056a20ad056a20ae056a20af056a20b0056a20b1056a20b2056a20b3056a20b4056a20b5056a20b6056a20b7" + "056a20b8056a20b9056a" + "20ba056a20bb056a20bc056a20bd056a20be056a20bf056a20c0056a20c1056a20c2056a20c3056a20c4056a20c505" + "6a20c6056a20c7056a20" + "c8056a20c9056a20ca056a20cb056a20cc056a20cd056a20ce056a20cf056a20d0056a20d1056a20d2056a20d3056a" + "20d4056a20d5056a20d6" + "056a20d7056a20d8056a20d9056a20da056a20db056a20dc056a20dd056a20de056a20df056a20e0056a20e1056a20" + "e2056a20e3056a20e405" + "6a20e5056a20e6056a20e7056a20e8056a20e9056a20ea056a20eb056a20ec056a20ed056a20ee056a20ef056a20f0" + "056a20f1056a20f2056a" + "20f3056a20f4056a20f5056a20f6056a20f7056a20f8056a20f9056a20fa056a20fb056a20fc056a20fd056a20fe05" + "6a20ff056a2080066a20" + "81066a2082066a2083066a2084066a2085066a2086066a2087066a2088066a2089066a208a066a208b066a208c066a" + "208d066a208e066a208f" + "066a2090066a2091066a2092066a2093066a2094066a2095066a2096066a2097066a2098066a2099066a209a066a20" + "9b066a209c066a209d06" + "6a209e066a209f066a20a0066a20a1066a20a2066a20a3066a20a4066a20a5066a20a6066a20a7066a20a8066a20a9" + "066a20aa066a20ab066a" + "20ac066a20ad066a20ae066a20af066a20b0066a20b1066a20b2066a20b3066a20b4066a20b5066a20b6066a20b706" + "6a20b8066a20b9066a20" + "ba066a20bb066a20bc066a20bd066a20be066a20bf066a20c0066a20c1066a20c2066a20c3066a20c4066a20c5066a" + "20c6066a20c7066a20c8" + "066a20c9066a20ca066a20cb066a20cc066a20cd066a20ce066a20cf066a20d0066a20d1066a20d2066a20d3066a20" + "d4066a20d5066a20d606" + "6a20d7066a20d8066a20d9066a20da066a20db066a20dc066a20dd066a20de066a20df066a20e0066a20e1066a20e2" + "066a20e3066a20e4066a" + "20e5066a20e6066a20e7066a20e8066a20e9066a20ea066a20eb066a20ec066a20ed066a20ee066a20ef066a20f006" + "6a20f1066a20f2066a20" + "f3066a20f4066a20f5066a20f6066a20f7066a20f8066a20f9066a20fa066a20fb066a20fc066a20fd066a20fe066a" + "20ff066a2080076a2081" + "076a2082076a2083076a2084076a2085076a2086076a2087076a2088076a2089076a208a076a208b076a208c076a20" + "8d076a208e076a208f07" + "6a2090076a2091076a2092076a2093076a2094076a2095076a2096076a2097076a2098076a2099076a209a076a209b" + "076a209c076a209d076a" + "209e076a209f076a20a0076a20a1076a20a2076a20a3076a20a4076a20a5076a20a6076a20a7076a20a8076a20a907" + "6a20aa076a20ab076a20" + "ac076a20ad076a20ae076a20af076a20b0076a20b1076a20b2076a20b3076a20b4076a20b5076a20b6076a20b7076a" + "20b8076a20b9076a20ba" + "076a20bb076a20bc076a20bd076a20be076a20bf076a20c0076a20c1076a20c2076a20c3076a20c4076a20c5076a20" + "c6076a20c7076a20c807" + "6a20c9076a20ca076a20cb076a20cc076a20cd076a20ce076a20cf076a20d0076a20d1076a20d2076a20d3076a20d4" + "076a20d5076a20d6076a" + "20d7076a20d8076a20d9076a20da076a20db076a20dc076a20dd076a20de076a20df076a20e0076a20e1076a20e207" + "6a20e3076a20e4076a20" + "e5076a20e6076a20e7076a20e8076a0b007f0970726f647563657273010c70726f6365737365642d62790105636c61" + "6e675f31392e312e352d" + "776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a65637420" + "61623462356132646235" + "3832393538616631656533303861373930636664623432626432343732302900490f7461726765745f666561747572" + "6573042b0f6d75746162" + "6c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c" + "7565"; extern std::string const locals10kHex = - "0061736d0100000001070160027f7f017f03020100070801047465737400000a9b8a0601978a06018e4e7f200020016a2102200120026a2103" - "200220036a2104200320046a2105200420056a2106200520066a2107200620076a2108200720086a2109200820096a210a2009200a6a210b20" - "0a200b6a210c200b200c6a210d200c200d6a210e200d200e6a210f200e200f6a2110200f20106a2111201020116a2112201120126a21132012" - "20136a2114201320146a2115201420156a2116201520166a2117201620176a2118201720186a2119201820196a211a2019201a6a211b201a20" - "1b6a211c201b201c6a211d201c201d6a211e201d201e6a211f201e201f6a2120201f20206a2121202020216a2122202120226a212320222023" - "6a2124202320246a2125202420256a2126202520266a2127202620276a2128202720286a2129202820296a212a2029202a6a212b202a202b6a" - "212c202b202c6a212d202c202d6a212e202d202e6a212f202e202f6a2130202f20306a2131203020316a2132203120326a2133203220336a21" - "34203320346a2135203420356a2136203520366a2137203620376a2138203720386a2139203820396a213a2039203a6a213b203a203b6a213c" - "203b203c6a213d203c203d6a213e203d203e6a213f203e203f6a2140203f20406a2141204020416a2142204120426a2143204220436a214420" - "4320446a2145204420456a2146204520466a2147204620476a2148204720486a2149204820496a214a2049204a6a214b204a204b6a214c204b" - "204c6a214d204c204d6a214e204d204e6a214f204e204f6a2150204f20506a2151205020516a2152205120526a2153205220536a2154205320" - "546a2155205420556a2156205520566a2157205620576a2158205720586a2159205820596a215a2059205a6a215b205a205b6a215c205b205c" - "6a215d205c205d6a215e205d205e6a215f205e205f6a2160205f20606a2161206020616a2162206120626a2163206220636a2164206320646a" - "2165206420656a2166206520666a2167206620676a2168206720686a2169206820696a216a2069206a6a216b206a206b6a216c206b206c6a21" - "6d206c206d6a216e206d206e6a216f206e206f6a2170206f20706a2171207020716a2172207120726a2173207220736a2174207320746a2175" - "207420756a2176207520766a2177207620776a2178207720786a2179207820796a217a2079207a6a217b207a207b6a217c207b207c6a217d20" - "7c207d6a217e207d207e6a217f207e207f6a218001207f2080016a2181012080012081016a2182012081012082016a2183012082012083016a" - "2184012083012084016a2185012084012085016a2186012085012086016a2187012086012087016a2188012087012088016a21890120880120" - "89016a218a01208901208a016a218b01208a01208b016a218c01208b01208c016a218d01208c01208d016a218e01208d01208e016a218f0120" - "8e01208f016a219001208f012090016a2191012090012091016a2192012091012092016a2193012092012093016a2194012093012094016a21" - "95012094012095016a2196012095012096016a2197012096012097016a2198012097012098016a2199012098012099016a219a01209901209a" - "016a219b01209a01209b016a219c01209b01209c016a219d01209c01209d016a219e01209d01209e016a219f01209e01209f016a21a001209f" - "0120a0016a21a10120a00120a1016a21a20120a10120a2016a21a30120a20120a3016a21a40120a30120a4016a21a50120a40120a5016a21a6" - "0120a50120a6016a21a70120a60120a7016a21a80120a70120a8016a21a90120a80120a9016a21aa0120a90120aa016a21ab0120aa0120ab01" - "6a21ac0120ab0120ac016a21ad0120ac0120ad016a21ae0120ad0120ae016a21af0120ae0120af016a21b00120af0120b0016a21b10120b001" - "20b1016a21b20120b10120b2016a21b30120b20120b3016a21b40120b30120b4016a21b50120b40120b5016a21b60120b50120b6016a21b701" - "20b60120b7016a21b80120b70120b8016a21b90120b80120b9016a21ba0120b90120ba016a21bb0120ba0120bb016a21bc0120bb0120bc016a" - "21bd0120bc0120bd016a21be0120bd0120be016a21bf0120be0120bf016a21c00120bf0120c0016a21c10120c00120c1016a21c20120c10120" - "c2016a21c30120c20120c3016a21c40120c30120c4016a21c50120c40120c5016a21c60120c50120c6016a21c70120c60120c7016a21c80120" - "c70120c8016a21c90120c80120c9016a21ca0120c90120ca016a21cb0120ca0120cb016a21cc0120cb0120cc016a21cd0120cc0120cd016a21" - "ce0120cd0120ce016a21cf0120ce0120cf016a21d00120cf0120d0016a21d10120d00120d1016a21d20120d10120d2016a21d30120d20120d3" - "016a21d40120d30120d4016a21d50120d40120d5016a21d60120d50120d6016a21d70120d60120d7016a21d80120d70120d8016a21d90120d8" - "0120d9016a21da0120d90120da016a21db0120da0120db016a21dc0120db0120dc016a21dd0120dc0120dd016a21de0120dd0120de016a21df" - "0120de0120df016a21e00120df0120e0016a21e10120e00120e1016a21e20120e10120e2016a21e30120e20120e3016a21e40120e30120e401" - "6a21e50120e40120e5016a21e60120e50120e6016a21e70120e60120e7016a21e80120e70120e8016a21e90120e80120e9016a21ea0120e901" - "20ea016a21eb0120ea0120eb016a21ec0120eb0120ec016a21ed0120ec0120ed016a21ee0120ed0120ee016a21ef0120ee0120ef016a21f001" - "20ef0120f0016a21f10120f00120f1016a21f20120f10120f2016a21f30120f20120f3016a21f40120f30120f4016a21f50120f40120f5016a" - "21f60120f50120f6016a21f70120f60120f7016a21f80120f70120f8016a21f90120f80120f9016a21fa0120f90120fa016a21fb0120fa0120" - "fb016a21fc0120fb0120fc016a21fd0120fc0120fd016a21fe0120fd0120fe016a21ff0120fe0120ff016a21800220ff012080026a21810220" - "80022081026a2182022081022082026a2183022082022083026a2184022083022084026a2185022084022085026a2186022085022086026a21" - "87022086022087026a2188022087022088026a2189022088022089026a218a02208902208a026a218b02208a02208b026a218c02208b02208c" - "026a218d02208c02208d026a218e02208d02208e026a218f02208e02208f026a219002208f022090026a2191022090022091026a2192022091" - "022092026a2193022092022093026a2194022093022094026a2195022094022095026a2196022095022096026a2197022096022097026a2198" - "022097022098026a2199022098022099026a219a02209902209a026a219b02209a02209b026a219c02209b02209c026a219d02209c02209d02" - "6a219e02209d02209e026a219f02209e02209f026a21a002209f0220a0026a21a10220a00220a1026a21a20220a10220a2026a21a30220a202" - "20a3026a21a40220a30220a4026a21a50220a40220a5026a21a60220a50220a6026a21a70220a60220a7026a21a80220a70220a8026a21a902" - "20a80220a9026a21aa0220a90220aa026a21ab0220aa0220ab026a21ac0220ab0220ac026a21ad0220ac0220ad026a21ae0220ad0220ae026a" - "21af0220ae0220af026a21b00220af0220b0026a21b10220b00220b1026a21b20220b10220b2026a21b30220b20220b3026a21b40220b30220" - "b4026a21b50220b40220b5026a21b60220b50220b6026a21b70220b60220b7026a21b80220b70220b8026a21b90220b80220b9026a21ba0220" - "b90220ba026a21bb0220ba0220bb026a21bc0220bb0220bc026a21bd0220bc0220bd026a21be0220bd0220be026a21bf0220be0220bf026a21" - "c00220bf0220c0026a21c10220c00220c1026a21c20220c10220c2026a21c30220c20220c3026a21c40220c30220c4026a21c50220c40220c5" - "026a21c60220c50220c6026a21c70220c60220c7026a21c80220c70220c8026a21c90220c80220c9026a21ca0220c90220ca026a21cb0220ca" - "0220cb026a21cc0220cb0220cc026a21cd0220cc0220cd026a21ce0220cd0220ce026a21cf0220ce0220cf026a21d00220cf0220d0026a21d1" - "0220d00220d1026a21d20220d10220d2026a21d30220d20220d3026a21d40220d30220d4026a21d50220d40220d5026a21d60220d50220d602" - "6a21d70220d60220d7026a21d80220d70220d8026a21d90220d80220d9026a21da0220d90220da026a21db0220da0220db026a21dc0220db02" - "20dc026a21dd0220dc0220dd026a21de0220dd0220de026a21df0220de0220df026a21e00220df0220e0026a21e10220e00220e1026a21e202" - "20e10220e2026a21e30220e20220e3026a21e40220e30220e4026a21e50220e40220e5026a21e60220e50220e6026a21e70220e60220e7026a" - "21e80220e70220e8026a21e90220e80220e9026a21ea0220e90220ea026a21eb0220ea0220eb026a21ec0220eb0220ec026a21ed0220ec0220" - "ed026a21ee0220ed0220ee026a21ef0220ee0220ef026a21f00220ef0220f0026a21f10220f00220f1026a21f20220f10220f2026a21f30220" - "f20220f3026a21f40220f30220f4026a21f50220f40220f5026a21f60220f50220f6026a21f70220f60220f7026a21f80220f70220f8026a21" - "f90220f80220f9026a21fa0220f90220fa026a21fb0220fa0220fb026a21fc0220fb0220fc026a21fd0220fc0220fd026a21fe0220fd0220fe" - "026a21ff0220fe0220ff026a21800320ff022080036a2181032080032081036a2182032081032082036a2183032082032083036a2184032083" - "032084036a2185032084032085036a2186032085032086036a2187032086032087036a2188032087032088036a2189032088032089036a218a" - "03208903208a036a218b03208a03208b036a218c03208b03208c036a218d03208c03208d036a218e03208d03208e036a218f03208e03208f03" - "6a219003208f032090036a2191032090032091036a2192032091032092036a2193032092032093036a2194032093032094036a219503209403" - "2095036a2196032095032096036a2197032096032097036a2198032097032098036a2199032098032099036a219a03209903209a036a219b03" - "209a03209b036a219c03209b03209c036a219d03209c03209d036a219e03209d03209e036a219f03209e03209f036a21a003209f0320a0036a" - "21a10320a00320a1036a21a20320a10320a2036a21a30320a20320a3036a21a40320a30320a4036a21a50320a40320a5036a21a60320a50320" - "a6036a21a70320a60320a7036a21a80320a70320a8036a21a90320a80320a9036a21aa0320a90320aa036a21ab0320aa0320ab036a21ac0320" - "ab0320ac036a21ad0320ac0320ad036a21ae0320ad0320ae036a21af0320ae0320af036a21b00320af0320b0036a21b10320b00320b1036a21" - "b20320b10320b2036a21b30320b20320b3036a21b40320b30320b4036a21b50320b40320b5036a21b60320b50320b6036a21b70320b60320b7" - "036a21b80320b70320b8036a21b90320b80320b9036a21ba0320b90320ba036a21bb0320ba0320bb036a21bc0320bb0320bc036a21bd0320bc" - "0320bd036a21be0320bd0320be036a21bf0320be0320bf036a21c00320bf0320c0036a21c10320c00320c1036a21c20320c10320c2036a21c3" - "0320c20320c3036a21c40320c30320c4036a21c50320c40320c5036a21c60320c50320c6036a21c70320c60320c7036a21c80320c70320c803" - "6a21c90320c80320c9036a21ca0320c90320ca036a21cb0320ca0320cb036a21cc0320cb0320cc036a21cd0320cc0320cd036a21ce0320cd03" - "20ce036a21cf0320ce0320cf036a21d00320cf0320d0036a21d10320d00320d1036a21d20320d10320d2036a21d30320d20320d3036a21d403" - "20d30320d4036a21d50320d40320d5036a21d60320d50320d6036a21d70320d60320d7036a21d80320d70320d8036a21d90320d80320d9036a" - "21da0320d90320da036a21db0320da0320db036a21dc0320db0320dc036a21dd0320dc0320dd036a21de0320dd0320de036a21df0320de0320" - "df036a21e00320df0320e0036a21e10320e00320e1036a21e20320e10320e2036a21e30320e20320e3036a21e40320e30320e4036a21e50320" - "e40320e5036a21e60320e50320e6036a21e70320e60320e7036a21e80320e70320e8036a21e90320e80320e9036a21ea0320e90320ea036a21" - "eb0320ea0320eb036a21ec0320eb0320ec036a21ed0320ec0320ed036a21ee0320ed0320ee036a21ef0320ee0320ef036a21f00320ef0320f0" - "036a21f10320f00320f1036a21f20320f10320f2036a21f30320f20320f3036a21f40320f30320f4036a21f50320f40320f5036a21f60320f5" - "0320f6036a21f70320f60320f7036a21f80320f70320f8036a21f90320f80320f9036a21fa0320f90320fa036a21fb0320fa0320fb036a21fc" - "0320fb0320fc036a21fd0320fc0320fd036a21fe0320fd0320fe036a21ff0320fe0320ff036a21800420ff032080046a218104208004208104" - "6a2182042081042082046a2183042082042083046a2184042083042084046a2185042084042085046a2186042085042086046a218704208604" - "2087046a2188042087042088046a2189042088042089046a218a04208904208a046a218b04208a04208b046a218c04208b04208c046a218d04" - "208c04208d046a218e04208d04208e046a218f04208e04208f046a219004208f042090046a2191042090042091046a2192042091042092046a" - "2193042092042093046a2194042093042094046a2195042094042095046a2196042095042096046a2197042096042097046a21980420970420" - "98046a2199042098042099046a219a04209904209a046a219b04209a04209b046a219c04209b04209c046a219d04209c04209d046a219e0420" - "9d04209e046a219f04209e04209f046a21a004209f0420a0046a21a10420a00420a1046a21a20420a10420a2046a21a30420a20420a3046a21" - "a40420a30420a4046a21a50420a40420a5046a21a60420a50420a6046a21a70420a60420a7046a21a80420a70420a8046a21a90420a80420a9" - "046a21aa0420a90420aa046a21ab0420aa0420ab046a21ac0420ab0420ac046a21ad0420ac0420ad046a21ae0420ad0420ae046a21af0420ae" - "0420af046a21b00420af0420b0046a21b10420b00420b1046a21b20420b10420b2046a21b30420b20420b3046a21b40420b30420b4046a21b5" - "0420b40420b5046a21b60420b50420b6046a21b70420b60420b7046a21b80420b70420b8046a21b90420b80420b9046a21ba0420b90420ba04" - "6a21bb0420ba0420bb046a21bc0420bb0420bc046a21bd0420bc0420bd046a21be0420bd0420be046a21bf0420be0420bf046a21c00420bf04" - "20c0046a21c10420c00420c1046a21c20420c10420c2046a21c30420c20420c3046a21c40420c30420c4046a21c50420c40420c5046a21c604" - "20c50420c6046a21c70420c60420c7046a21c80420c70420c8046a21c90420c80420c9046a21ca0420c90420ca046a21cb0420ca0420cb046a" - "21cc0420cb0420cc046a21cd0420cc0420cd046a21ce0420cd0420ce046a21cf0420ce0420cf046a21d00420cf0420d0046a21d10420d00420" - "d1046a21d20420d10420d2046a21d30420d20420d3046a21d40420d30420d4046a21d50420d40420d5046a21d60420d50420d6046a21d70420" - "d60420d7046a21d80420d70420d8046a21d90420d80420d9046a21da0420d90420da046a21db0420da0420db046a21dc0420db0420dc046a21" - "dd0420dc0420dd046a21de0420dd0420de046a21df0420de0420df046a21e00420df0420e0046a21e10420e00420e1046a21e20420e10420e2" - "046a21e30420e20420e3046a21e40420e30420e4046a21e50420e40420e5046a21e60420e50420e6046a21e70420e60420e7046a21e80420e7" - "0420e8046a21e90420e80420e9046a21ea0420e90420ea046a21eb0420ea0420eb046a21ec0420eb0420ec046a21ed0420ec0420ed046a21ee" - "0420ed0420ee046a21ef0420ee0420ef046a21f00420ef0420f0046a21f10420f00420f1046a21f20420f10420f2046a21f30420f20420f304" - "6a21f40420f30420f4046a21f50420f40420f5046a21f60420f50420f6046a21f70420f60420f7046a21f80420f70420f8046a21f90420f804" - "20f9046a21fa0420f90420fa046a21fb0420fa0420fb046a21fc0420fb0420fc046a21fd0420fc0420fd046a21fe0420fd0420fe046a21ff04" - "20fe0420ff046a21800520ff042080056a2181052080052081056a2182052081052082056a2183052082052083056a2184052083052084056a" - "2185052084052085056a2186052085052086056a2187052086052087056a2188052087052088056a2189052088052089056a218a0520890520" - "8a056a218b05208a05208b056a218c05208b05208c056a218d05208c05208d056a218e05208d05208e056a218f05208e05208f056a21900520" - "8f052090056a2191052090052091056a2192052091052092056a2193052092052093056a2194052093052094056a2195052094052095056a21" - "96052095052096056a2197052096052097056a2198052097052098056a2199052098052099056a219a05209905209a056a219b05209a05209b" - "056a219c05209b05209c056a219d05209c05209d056a219e05209d05209e056a219f05209e05209f056a21a005209f0520a0056a21a10520a0" - "0520a1056a21a20520a10520a2056a21a30520a20520a3056a21a40520a30520a4056a21a50520a40520a5056a21a60520a50520a6056a21a7" - "0520a60520a7056a21a80520a70520a8056a21a90520a80520a9056a21aa0520a90520aa056a21ab0520aa0520ab056a21ac0520ab0520ac05" - "6a21ad0520ac0520ad056a21ae0520ad0520ae056a21af0520ae0520af056a21b00520af0520b0056a21b10520b00520b1056a21b20520b105" - "20b2056a21b30520b20520b3056a21b40520b30520b4056a21b50520b40520b5056a21b60520b50520b6056a21b70520b60520b7056a21b805" - "20b70520b8056a21b90520b80520b9056a21ba0520b90520ba056a21bb0520ba0520bb056a21bc0520bb0520bc056a21bd0520bc0520bd056a" - "21be0520bd0520be056a21bf0520be0520bf056a21c00520bf0520c0056a21c10520c00520c1056a21c20520c10520c2056a21c30520c20520" - "c3056a21c40520c30520c4056a21c50520c40520c5056a21c60520c50520c6056a21c70520c60520c7056a21c80520c70520c8056a21c90520" - "c80520c9056a21ca0520c90520ca056a21cb0520ca0520cb056a21cc0520cb0520cc056a21cd0520cc0520cd056a21ce0520cd0520ce056a21" - "cf0520ce0520cf056a21d00520cf0520d0056a21d10520d00520d1056a21d20520d10520d2056a21d30520d20520d3056a21d40520d30520d4" - "056a21d50520d40520d5056a21d60520d50520d6056a21d70520d60520d7056a21d80520d70520d8056a21d90520d80520d9056a21da0520d9" - "0520da056a21db0520da0520db056a21dc0520db0520dc056a21dd0520dc0520dd056a21de0520dd0520de056a21df0520de0520df056a21e0" - "0520df0520e0056a21e10520e00520e1056a21e20520e10520e2056a21e30520e20520e3056a21e40520e30520e4056a21e50520e40520e505" - "6a21e60520e50520e6056a21e70520e60520e7056a21e80520e70520e8056a21e90520e80520e9056a21ea0520e90520ea056a21eb0520ea05" - "20eb056a21ec0520eb0520ec056a21ed0520ec0520ed056a21ee0520ed0520ee056a21ef0520ee0520ef056a21f00520ef0520f0056a21f105" - "20f00520f1056a21f20520f10520f2056a21f30520f20520f3056a21f40520f30520f4056a21f50520f40520f5056a21f60520f50520f6056a" - "21f70520f60520f7056a21f80520f70520f8056a21f90520f80520f9056a21fa0520f90520fa056a21fb0520fa0520fb056a21fc0520fb0520" - "fc056a21fd0520fc0520fd056a21fe0520fd0520fe056a21ff0520fe0520ff056a21800620ff052080066a2181062080062081066a21820620" - "81062082066a2183062082062083066a2184062083062084066a2185062084062085066a2186062085062086066a2187062086062087066a21" - "88062087062088066a2189062088062089066a218a06208906208a066a218b06208a06208b066a218c06208b06208c066a218d06208c06208d" - "066a218e06208d06208e066a218f06208e06208f066a219006208f062090066a2191062090062091066a2192062091062092066a2193062092" - "062093066a2194062093062094066a2195062094062095066a2196062095062096066a2197062096062097066a2198062097062098066a2199" - "062098062099066a219a06209906209a066a219b06209a06209b066a219c06209b06209c066a219d06209c06209d066a219e06209d06209e06" - "6a219f06209e06209f066a21a006209f0620a0066a21a10620a00620a1066a21a20620a10620a2066a21a30620a20620a3066a21a40620a306" - "20a4066a21a50620a40620a5066a21a60620a50620a6066a21a70620a60620a7066a21a80620a70620a8066a21a90620a80620a9066a21aa06" - "20a90620aa066a21ab0620aa0620ab066a21ac0620ab0620ac066a21ad0620ac0620ad066a21ae0620ad0620ae066a21af0620ae0620af066a" - "21b00620af0620b0066a21b10620b00620b1066a21b20620b10620b2066a21b30620b20620b3066a21b40620b30620b4066a21b50620b40620" - "b5066a21b60620b50620b6066a21b70620b60620b7066a21b80620b70620b8066a21b90620b80620b9066a21ba0620b90620ba066a21bb0620" - "ba0620bb066a21bc0620bb0620bc066a21bd0620bc0620bd066a21be0620bd0620be066a21bf0620be0620bf066a21c00620bf0620c0066a21" - "c10620c00620c1066a21c20620c10620c2066a21c30620c20620c3066a21c40620c30620c4066a21c50620c40620c5066a21c60620c50620c6" - "066a21c70620c60620c7066a21c80620c70620c8066a21c90620c80620c9066a21ca0620c90620ca066a21cb0620ca0620cb066a21cc0620cb" - "0620cc066a21cd0620cc0620cd066a21ce0620cd0620ce066a21cf0620ce0620cf066a21d00620cf0620d0066a21d10620d00620d1066a21d2" - "0620d10620d2066a21d30620d20620d3066a21d40620d30620d4066a21d50620d40620d5066a21d60620d50620d6066a21d70620d60620d706" - "6a21d80620d70620d8066a21d90620d80620d9066a21da0620d90620da066a21db0620da0620db066a21dc0620db0620dc066a21dd0620dc06" - "20dd066a21de0620dd0620de066a21df0620de0620df066a21e00620df0620e0066a21e10620e00620e1066a21e20620e10620e2066a21e306" - "20e20620e3066a21e40620e30620e4066a21e50620e40620e5066a21e60620e50620e6066a21e70620e60620e7066a21e80620e70620e8066a" - "21e90620e80620e9066a21ea0620e90620ea066a21eb0620ea0620eb066a21ec0620eb0620ec066a21ed0620ec0620ed066a21ee0620ed0620" - "ee066a21ef0620ee0620ef066a21f00620ef0620f0066a21f10620f00620f1066a21f20620f10620f2066a21f30620f20620f3066a21f40620" - "f30620f4066a21f50620f40620f5066a21f60620f50620f6066a21f70620f60620f7066a21f80620f70620f8066a21f90620f80620f9066a21" - "fa0620f90620fa066a21fb0620fa0620fb066a21fc0620fb0620fc066a21fd0620fc0620fd066a21fe0620fd0620fe066a21ff0620fe0620ff" - "066a21800720ff062080076a2181072080072081076a2182072081072082076a2183072082072083076a2184072083072084076a2185072084" - "072085076a2186072085072086076a2187072086072087076a2188072087072088076a2189072088072089076a218a07208907208a076a218b" - "07208a07208b076a218c07208b07208c076a218d07208c07208d076a218e07208d07208e076a218f07208e07208f076a219007208f07209007" - "6a2191072090072091076a2192072091072092076a2193072092072093076a2194072093072094076a2195072094072095076a219607209507" - "2096076a2197072096072097076a2198072097072098076a2199072098072099076a219a07209907209a076a219b07209a07209b076a219c07" - "209b07209c076a219d07209c07209d076a219e07209d07209e076a219f07209e07209f076a21a007209f0720a0076a21a10720a00720a1076a" - "21a20720a10720a2076a21a30720a20720a3076a21a40720a30720a4076a21a50720a40720a5076a21a60720a50720a6076a21a70720a60720" - "a7076a21a80720a70720a8076a21a90720a80720a9076a21aa0720a90720aa076a21ab0720aa0720ab076a21ac0720ab0720ac076a21ad0720" - "ac0720ad076a21ae0720ad0720ae076a21af0720ae0720af076a21b00720af0720b0076a21b10720b00720b1076a21b20720b10720b2076a21" - "b30720b20720b3076a21b40720b30720b4076a21b50720b40720b5076a21b60720b50720b6076a21b70720b60720b7076a21b80720b70720b8" - "076a21b90720b80720b9076a21ba0720b90720ba076a21bb0720ba0720bb076a21bc0720bb0720bc076a21bd0720bc0720bd076a21be0720bd" - "0720be076a21bf0720be0720bf076a21c00720bf0720c0076a21c10720c00720c1076a21c20720c10720c2076a21c30720c20720c3076a21c4" - "0720c30720c4076a21c50720c40720c5076a21c60720c50720c6076a21c70720c60720c7076a21c80720c70720c8076a21c90720c80720c907" - "6a21ca0720c90720ca076a21cb0720ca0720cb076a21cc0720cb0720cc076a21cd0720cc0720cd076a21ce0720cd0720ce076a21cf0720ce07" - "20cf076a21d00720cf0720d0076a21d10720d00720d1076a21d20720d10720d2076a21d30720d20720d3076a21d40720d30720d4076a21d507" - "20d40720d5076a21d60720d50720d6076a21d70720d60720d7076a21d80720d70720d8076a21d90720d80720d9076a21da0720d90720da076a" - "21db0720da0720db076a21dc0720db0720dc076a21dd0720dc0720dd076a21de0720dd0720de076a21df0720de0720df076a21e00720df0720" - "e0076a21e10720e00720e1076a21e20720e10720e2076a21e30720e20720e3076a21e40720e30720e4076a21e50720e40720e5076a21e60720" - "e50720e6076a21e70720e60720e7076a21e80720e70720e8076a21e90720e80720e9076a21ea0720e90720ea076a21eb0720ea0720eb076a21" - "ec0720eb0720ec076a21ed0720ec0720ed076a21ee0720ed0720ee076a21ef0720ee0720ef076a21f00720ef0720f0076a21f10720f00720f1" - "076a21f20720f10720f2076a21f30720f20720f3076a21f40720f30720f4076a21f50720f40720f5076a21f60720f50720f6076a21f70720f6" - "0720f7076a21f80720f70720f8076a21f90720f80720f9076a21fa0720f90720fa076a21fb0720fa0720fb076a21fc0720fb0720fc076a21fd" - "0720fc0720fd076a21fe0720fd0720fe076a21ff0720fe0720ff076a21800820ff072080086a2181082080082081086a218208208108208208" - "6a2183082082082083086a2184082083082084086a2185082084082085086a2186082085082086086a2187082086082087086a218808208708" - "2088086a2189082088082089086a218a08208908208a086a218b08208a08208b086a218c08208b08208c086a218d08208c08208d086a218e08" - "208d08208e086a218f08208e08208f086a219008208f082090086a2191082090082091086a2192082091082092086a2193082092082093086a" - "2194082093082094086a2195082094082095086a2196082095082096086a2197082096082097086a2198082097082098086a21990820980820" - "99086a219a08209908209a086a219b08209a08209b086a219c08209b08209c086a219d08209c08209d086a219e08209d08209e086a219f0820" - "9e08209f086a21a008209f0820a0086a21a10820a00820a1086a21a20820a10820a2086a21a30820a20820a3086a21a40820a30820a4086a21" - "a50820a40820a5086a21a60820a50820a6086a21a70820a60820a7086a21a80820a70820a8086a21a90820a80820a9086a21aa0820a90820aa" - "086a21ab0820aa0820ab086a21ac0820ab0820ac086a21ad0820ac0820ad086a21ae0820ad0820ae086a21af0820ae0820af086a21b00820af" - "0820b0086a21b10820b00820b1086a21b20820b10820b2086a21b30820b20820b3086a21b40820b30820b4086a21b50820b40820b5086a21b6" - "0820b50820b6086a21b70820b60820b7086a21b80820b70820b8086a21b90820b80820b9086a21ba0820b90820ba086a21bb0820ba0820bb08" - "6a21bc0820bb0820bc086a21bd0820bc0820bd086a21be0820bd0820be086a21bf0820be0820bf086a21c00820bf0820c0086a21c10820c008" - "20c1086a21c20820c10820c2086a21c30820c20820c3086a21c40820c30820c4086a21c50820c40820c5086a21c60820c50820c6086a21c708" - "20c60820c7086a21c80820c70820c8086a21c90820c80820c9086a21ca0820c90820ca086a21cb0820ca0820cb086a21cc0820cb0820cc086a" - "21cd0820cc0820cd086a21ce0820cd0820ce086a21cf0820ce0820cf086a21d00820cf0820d0086a21d10820d00820d1086a21d20820d10820" - "d2086a21d30820d20820d3086a21d40820d30820d4086a21d50820d40820d5086a21d60820d50820d6086a21d70820d60820d7086a21d80820" - "d70820d8086a21d90820d80820d9086a21da0820d90820da086a21db0820da0820db086a21dc0820db0820dc086a21dd0820dc0820dd086a21" - "de0820dd0820de086a21df0820de0820df086a21e00820df0820e0086a21e10820e00820e1086a21e20820e10820e2086a21e30820e20820e3" - "086a21e40820e30820e4086a21e50820e40820e5086a21e60820e50820e6086a21e70820e60820e7086a21e80820e70820e8086a21e90820e8" - "0820e9086a21ea0820e90820ea086a21eb0820ea0820eb086a21ec0820eb0820ec086a21ed0820ec0820ed086a21ee0820ed0820ee086a21ef" - "0820ee0820ef086a21f00820ef0820f0086a21f10820f00820f1086a21f20820f10820f2086a21f30820f20820f3086a21f40820f30820f408" - "6a21f50820f40820f5086a21f60820f50820f6086a21f70820f60820f7086a21f80820f70820f8086a21f90820f80820f9086a21fa0820f908" - "20fa086a21fb0820fa0820fb086a21fc0820fb0820fc086a21fd0820fc0820fd086a21fe0820fd0820fe086a21ff0820fe0820ff086a218009" - "20ff082080096a2181092080092081096a2182092081092082096a2183092082092083096a2184092083092084096a2185092084092085096a" - "2186092085092086096a2187092086092087096a2188092087092088096a2189092088092089096a218a09208909208a096a218b09208a0920" - "8b096a218c09208b09208c096a218d09208c09208d096a218e09208d09208e096a218f09208e09208f096a219009208f092090096a21910920" - "90092091096a2192092091092092096a2193092092092093096a2194092093092094096a2195092094092095096a2196092095092096096a21" - "97092096092097096a2198092097092098096a2199092098092099096a219a09209909209a096a219b09209a09209b096a219c09209b09209c" - "096a219d09209c09209d096a219e09209d09209e096a219f09209e09209f096a21a009209f0920a0096a21a10920a00920a1096a21a20920a1" - "0920a2096a21a30920a20920a3096a21a40920a30920a4096a21a50920a40920a5096a21a60920a50920a6096a21a70920a60920a7096a21a8" - "0920a70920a8096a21a90920a80920a9096a21aa0920a90920aa096a21ab0920aa0920ab096a21ac0920ab0920ac096a21ad0920ac0920ad09" - "6a21ae0920ad0920ae096a21af0920ae0920af096a21b00920af0920b0096a21b10920b00920b1096a21b20920b10920b2096a21b30920b209" - "20b3096a21b40920b30920b4096a21b50920b40920b5096a21b60920b50920b6096a21b70920b60920b7096a21b80920b70920b8096a21b909" - "20b80920b9096a21ba0920b90920ba096a21bb0920ba0920bb096a21bc0920bb0920bc096a21bd0920bc0920bd096a21be0920bd0920be096a" - "21bf0920be0920bf096a21c00920bf0920c0096a21c10920c00920c1096a21c20920c10920c2096a21c30920c20920c3096a21c40920c30920" - "c4096a21c50920c40920c5096a21c60920c50920c6096a21c70920c60920c7096a21c80920c70920c8096a21c90920c80920c9096a21ca0920" - "c90920ca096a21cb0920ca0920cb096a21cc0920cb0920cc096a21cd0920cc0920cd096a21ce0920cd0920ce096a21cf0920ce0920cf096a21" - "d00920cf0920d0096a21d10920d00920d1096a21d20920d10920d2096a21d30920d20920d3096a21d40920d30920d4096a21d50920d40920d5" - "096a21d60920d50920d6096a21d70920d60920d7096a21d80920d70920d8096a21d90920d80920d9096a21da0920d90920da096a21db0920da" - "0920db096a21dc0920db0920dc096a21dd0920dc0920dd096a21de0920dd0920de096a21df0920de0920df096a21e00920df0920e0096a21e1" - "0920e00920e1096a21e20920e10920e2096a21e30920e20920e3096a21e40920e30920e4096a21e50920e40920e5096a21e60920e50920e609" - "6a21e70920e60920e7096a21e80920e70920e8096a21e90920e80920e9096a21ea0920e90920ea096a21eb0920ea0920eb096a21ec0920eb09" - "20ec096a21ed0920ec0920ed096a21ee0920ed0920ee096a21ef0920ee0920ef096a21f00920ef0920f0096a21f10920f00920f1096a21f209" - "20f10920f2096a21f30920f20920f3096a21f40920f30920f4096a21f50920f40920f5096a21f60920f50920f6096a21f70920f60920f7096a" - "21f80920f70920f8096a21f90920f80920f9096a21fa0920f90920fa096a21fb0920fa0920fb096a21fc0920fb0920fc096a21fd0920fc0920" - "fd096a21fe0920fd0920fe096a21ff0920fe0920ff096a21800a20ff0920800a6a21810a20800a20810a6a21820a20810a20820a6a21830a20" - "820a20830a6a21840a20830a20840a6a21850a20840a20850a6a21860a20850a20860a6a21870a20860a20870a6a21880a20870a20880a6a21" - "890a20880a20890a6a218a0a20890a208a0a6a218b0a208a0a208b0a6a218c0a208b0a208c0a6a218d0a208c0a208d0a6a218e0a208d0a208e" - "0a6a218f0a208e0a208f0a6a21900a208f0a20900a6a21910a20900a20910a6a21920a20910a20920a6a21930a20920a20930a6a21940a2093" - "0a20940a6a21950a20940a20950a6a21960a20950a20960a6a21970a20960a20970a6a21980a20970a20980a6a21990a20980a20990a6a219a" - "0a20990a209a0a6a219b0a209a0a209b0a6a219c0a209b0a209c0a6a219d0a209c0a209d0a6a219e0a209d0a209e0a6a219f0a209e0a209f0a" - "6a21a00a209f0a20a00a6a21a10a20a00a20a10a6a21a20a20a10a20a20a6a21a30a20a20a20a30a6a21a40a20a30a20a40a6a21a50a20a40a" - "20a50a6a21a60a20a50a20a60a6a21a70a20a60a20a70a6a21a80a20a70a20a80a6a21a90a20a80a20a90a6a21aa0a20a90a20aa0a6a21ab0a" - "20aa0a20ab0a6a21ac0a20ab0a20ac0a6a21ad0a20ac0a20ad0a6a21ae0a20ad0a20ae0a6a21af0a20ae0a20af0a6a21b00a20af0a20b00a6a" - "21b10a20b00a20b10a6a21b20a20b10a20b20a6a21b30a20b20a20b30a6a21b40a20b30a20b40a6a21b50a20b40a20b50a6a21b60a20b50a20" - "b60a6a21b70a20b60a20b70a6a21b80a20b70a20b80a6a21b90a20b80a20b90a6a21ba0a20b90a20ba0a6a21bb0a20ba0a20bb0a6a21bc0a20" - "bb0a20bc0a6a21bd0a20bc0a20bd0a6a21be0a20bd0a20be0a6a21bf0a20be0a20bf0a6a21c00a20bf0a20c00a6a21c10a20c00a20c10a6a21" - "c20a20c10a20c20a6a21c30a20c20a20c30a6a21c40a20c30a20c40a6a21c50a20c40a20c50a6a21c60a20c50a20c60a6a21c70a20c60a20c7" - "0a6a21c80a20c70a20c80a6a21c90a20c80a20c90a6a21ca0a20c90a20ca0a6a21cb0a20ca0a20cb0a6a21cc0a20cb0a20cc0a6a21cd0a20cc" - "0a20cd0a6a21ce0a20cd0a20ce0a6a21cf0a20ce0a20cf0a6a21d00a20cf0a20d00a6a21d10a20d00a20d10a6a21d20a20d10a20d20a6a21d3" - "0a20d20a20d30a6a21d40a20d30a20d40a6a21d50a20d40a20d50a6a21d60a20d50a20d60a6a21d70a20d60a20d70a6a21d80a20d70a20d80a" - "6a21d90a20d80a20d90a6a21da0a20d90a20da0a6a21db0a20da0a20db0a6a21dc0a20db0a20dc0a6a21dd0a20dc0a20dd0a6a21de0a20dd0a" - "20de0a6a21df0a20de0a20df0a6a21e00a20df0a20e00a6a21e10a20e00a20e10a6a21e20a20e10a20e20a6a21e30a20e20a20e30a6a21e40a" - "20e30a20e40a6a21e50a20e40a20e50a6a21e60a20e50a20e60a6a21e70a20e60a20e70a6a21e80a20e70a20e80a6a21e90a20e80a20e90a6a" - "21ea0a20e90a20ea0a6a21eb0a20ea0a20eb0a6a21ec0a20eb0a20ec0a6a21ed0a20ec0a20ed0a6a21ee0a20ed0a20ee0a6a21ef0a20ee0a20" - "ef0a6a21f00a20ef0a20f00a6a21f10a20f00a20f10a6a21f20a20f10a20f20a6a21f30a20f20a20f30a6a21f40a20f30a20f40a6a21f50a20" - "f40a20f50a6a21f60a20f50a20f60a6a21f70a20f60a20f70a6a21f80a20f70a20f80a6a21f90a20f80a20f90a6a21fa0a20f90a20fa0a6a21" - "fb0a20fa0a20fb0a6a21fc0a20fb0a20fc0a6a21fd0a20fc0a20fd0a6a21fe0a20fd0a20fe0a6a21ff0a20fe0a20ff0a6a21800b20ff0a2080" - "0b6a21810b20800b20810b6a21820b20810b20820b6a21830b20820b20830b6a21840b20830b20840b6a21850b20840b20850b6a21860b2085" - "0b20860b6a21870b20860b20870b6a21880b20870b20880b6a21890b20880b20890b6a218a0b20890b208a0b6a218b0b208a0b208b0b6a218c" - "0b208b0b208c0b6a218d0b208c0b208d0b6a218e0b208d0b208e0b6a218f0b208e0b208f0b6a21900b208f0b20900b6a21910b20900b20910b" - "6a21920b20910b20920b6a21930b20920b20930b6a21940b20930b20940b6a21950b20940b20950b6a21960b20950b20960b6a21970b20960b" - "20970b6a21980b20970b20980b6a21990b20980b20990b6a219a0b20990b209a0b6a219b0b209a0b209b0b6a219c0b209b0b209c0b6a219d0b" - "209c0b209d0b6a219e0b209d0b209e0b6a219f0b209e0b209f0b6a21a00b209f0b20a00b6a21a10b20a00b20a10b6a21a20b20a10b20a20b6a" - "21a30b20a20b20a30b6a21a40b20a30b20a40b6a21a50b20a40b20a50b6a21a60b20a50b20a60b6a21a70b20a60b20a70b6a21a80b20a70b20" - "a80b6a21a90b20a80b20a90b6a21aa0b20a90b20aa0b6a21ab0b20aa0b20ab0b6a21ac0b20ab0b20ac0b6a21ad0b20ac0b20ad0b6a21ae0b20" - "ad0b20ae0b6a21af0b20ae0b20af0b6a21b00b20af0b20b00b6a21b10b20b00b20b10b6a21b20b20b10b20b20b6a21b30b20b20b20b30b6a21" - "b40b20b30b20b40b6a21b50b20b40b20b50b6a21b60b20b50b20b60b6a21b70b20b60b20b70b6a21b80b20b70b20b80b6a21b90b20b80b20b9" - "0b6a21ba0b20b90b20ba0b6a21bb0b20ba0b20bb0b6a21bc0b20bb0b20bc0b6a21bd0b20bc0b20bd0b6a21be0b20bd0b20be0b6a21bf0b20be" - "0b20bf0b6a21c00b20bf0b20c00b6a21c10b20c00b20c10b6a21c20b20c10b20c20b6a21c30b20c20b20c30b6a21c40b20c30b20c40b6a21c5" - "0b20c40b20c50b6a21c60b20c50b20c60b6a21c70b20c60b20c70b6a21c80b20c70b20c80b6a21c90b20c80b20c90b6a21ca0b20c90b20ca0b" - "6a21cb0b20ca0b20cb0b6a21cc0b20cb0b20cc0b6a21cd0b20cc0b20cd0b6a21ce0b20cd0b20ce0b6a21cf0b20ce0b20cf0b6a21d00b20cf0b" - "20d00b6a21d10b20d00b20d10b6a21d20b20d10b20d20b6a21d30b20d20b20d30b6a21d40b20d30b20d40b6a21d50b20d40b20d50b6a21d60b" - "20d50b20d60b6a21d70b20d60b20d70b6a21d80b20d70b20d80b6a21d90b20d80b20d90b6a21da0b20d90b20da0b6a21db0b20da0b20db0b6a" - "21dc0b20db0b20dc0b6a21dd0b20dc0b20dd0b6a21de0b20dd0b20de0b6a21df0b20de0b20df0b6a21e00b20df0b20e00b6a21e10b20e00b20" - "e10b6a21e20b20e10b20e20b6a21e30b20e20b20e30b6a21e40b20e30b20e40b6a21e50b20e40b20e50b6a21e60b20e50b20e60b6a21e70b20" - "e60b20e70b6a21e80b20e70b20e80b6a21e90b20e80b20e90b6a21ea0b20e90b20ea0b6a21eb0b20ea0b20eb0b6a21ec0b20eb0b20ec0b6a21" - "ed0b20ec0b20ed0b6a21ee0b20ed0b20ee0b6a21ef0b20ee0b20ef0b6a21f00b20ef0b20f00b6a21f10b20f00b20f10b6a21f20b20f10b20f2" - "0b6a21f30b20f20b20f30b6a21f40b20f30b20f40b6a21f50b20f40b20f50b6a21f60b20f50b20f60b6a21f70b20f60b20f70b6a21f80b20f7" - "0b20f80b6a21f90b20f80b20f90b6a21fa0b20f90b20fa0b6a21fb0b20fa0b20fb0b6a21fc0b20fb0b20fc0b6a21fd0b20fc0b20fd0b6a21fe" - "0b20fd0b20fe0b6a21ff0b20fe0b20ff0b6a21800c20ff0b20800c6a21810c20800c20810c6a21820c20810c20820c6a21830c20820c20830c" - "6a21840c20830c20840c6a21850c20840c20850c6a21860c20850c20860c6a21870c20860c20870c6a21880c20870c20880c6a21890c20880c" - "20890c6a218a0c20890c208a0c6a218b0c208a0c208b0c6a218c0c208b0c208c0c6a218d0c208c0c208d0c6a218e0c208d0c208e0c6a218f0c" - "208e0c208f0c6a21900c208f0c20900c6a21910c20900c20910c6a21920c20910c20920c6a21930c20920c20930c6a21940c20930c20940c6a" - "21950c20940c20950c6a21960c20950c20960c6a21970c20960c20970c6a21980c20970c20980c6a21990c20980c20990c6a219a0c20990c20" - "9a0c6a219b0c209a0c209b0c6a219c0c209b0c209c0c6a219d0c209c0c209d0c6a219e0c209d0c209e0c6a219f0c209e0c209f0c6a21a00c20" - "9f0c20a00c6a21a10c20a00c20a10c6a21a20c20a10c20a20c6a21a30c20a20c20a30c6a21a40c20a30c20a40c6a21a50c20a40c20a50c6a21" - "a60c20a50c20a60c6a21a70c20a60c20a70c6a21a80c20a70c20a80c6a21a90c20a80c20a90c6a21aa0c20a90c20aa0c6a21ab0c20aa0c20ab" - "0c6a21ac0c20ab0c20ac0c6a21ad0c20ac0c20ad0c6a21ae0c20ad0c20ae0c6a21af0c20ae0c20af0c6a21b00c20af0c20b00c6a21b10c20b0" - "0c20b10c6a21b20c20b10c20b20c6a21b30c20b20c20b30c6a21b40c20b30c20b40c6a21b50c20b40c20b50c6a21b60c20b50c20b60c6a21b7" - "0c20b60c20b70c6a21b80c20b70c20b80c6a21b90c20b80c20b90c6a21ba0c20b90c20ba0c6a21bb0c20ba0c20bb0c6a21bc0c20bb0c20bc0c" - "6a21bd0c20bc0c20bd0c6a21be0c20bd0c20be0c6a21bf0c20be0c20bf0c6a21c00c20bf0c20c00c6a21c10c20c00c20c10c6a21c20c20c10c" - "20c20c6a21c30c20c20c20c30c6a21c40c20c30c20c40c6a21c50c20c40c20c50c6a21c60c20c50c20c60c6a21c70c20c60c20c70c6a21c80c" - "20c70c20c80c6a21c90c20c80c20c90c6a21ca0c20c90c20ca0c6a21cb0c20ca0c20cb0c6a21cc0c20cb0c20cc0c6a21cd0c20cc0c20cd0c6a" - "21ce0c20cd0c20ce0c6a21cf0c20ce0c20cf0c6a21d00c20cf0c20d00c6a21d10c20d00c20d10c6a21d20c20d10c20d20c6a21d30c20d20c20" - "d30c6a21d40c20d30c20d40c6a21d50c20d40c20d50c6a21d60c20d50c20d60c6a21d70c20d60c20d70c6a21d80c20d70c20d80c6a21d90c20" - "d80c20d90c6a21da0c20d90c20da0c6a21db0c20da0c20db0c6a21dc0c20db0c20dc0c6a21dd0c20dc0c20dd0c6a21de0c20dd0c20de0c6a21" - "df0c20de0c20df0c6a21e00c20df0c20e00c6a21e10c20e00c20e10c6a21e20c20e10c20e20c6a21e30c20e20c20e30c6a21e40c20e30c20e4" - "0c6a21e50c20e40c20e50c6a21e60c20e50c20e60c6a21e70c20e60c20e70c6a21e80c20e70c20e80c6a21e90c20e80c20e90c6a21ea0c20e9" - "0c20ea0c6a21eb0c20ea0c20eb0c6a21ec0c20eb0c20ec0c6a21ed0c20ec0c20ed0c6a21ee0c20ed0c20ee0c6a21ef0c20ee0c20ef0c6a21f0" - "0c20ef0c20f00c6a21f10c20f00c20f10c6a21f20c20f10c20f20c6a21f30c20f20c20f30c6a21f40c20f30c20f40c6a21f50c20f40c20f50c" - "6a21f60c20f50c20f60c6a21f70c20f60c20f70c6a21f80c20f70c20f80c6a21f90c20f80c20f90c6a21fa0c20f90c20fa0c6a21fb0c20fa0c" - "20fb0c6a21fc0c20fb0c20fc0c6a21fd0c20fc0c20fd0c6a21fe0c20fd0c20fe0c6a21ff0c20fe0c20ff0c6a21800d20ff0c20800d6a21810d" - "20800d20810d6a21820d20810d20820d6a21830d20820d20830d6a21840d20830d20840d6a21850d20840d20850d6a21860d20850d20860d6a" - "21870d20860d20870d6a21880d20870d20880d6a21890d20880d20890d6a218a0d20890d208a0d6a218b0d208a0d208b0d6a218c0d208b0d20" - "8c0d6a218d0d208c0d208d0d6a218e0d208d0d208e0d6a218f0d208e0d208f0d6a21900d208f0d20900d6a21910d20900d20910d6a21920d20" - "910d20920d6a21930d20920d20930d6a21940d20930d20940d6a21950d20940d20950d6a21960d20950d20960d6a21970d20960d20970d6a21" - "980d20970d20980d6a21990d20980d20990d6a219a0d20990d209a0d6a219b0d209a0d209b0d6a219c0d209b0d209c0d6a219d0d209c0d209d" - "0d6a219e0d209d0d209e0d6a219f0d209e0d209f0d6a21a00d209f0d20a00d6a21a10d20a00d20a10d6a21a20d20a10d20a20d6a21a30d20a2" - "0d20a30d6a21a40d20a30d20a40d6a21a50d20a40d20a50d6a21a60d20a50d20a60d6a21a70d20a60d20a70d6a21a80d20a70d20a80d6a21a9" - "0d20a80d20a90d6a21aa0d20a90d20aa0d6a21ab0d20aa0d20ab0d6a21ac0d20ab0d20ac0d6a21ad0d20ac0d20ad0d6a21ae0d20ad0d20ae0d" - "6a21af0d20ae0d20af0d6a21b00d20af0d20b00d6a21b10d20b00d20b10d6a21b20d20b10d20b20d6a21b30d20b20d20b30d6a21b40d20b30d" - "20b40d6a21b50d20b40d20b50d6a21b60d20b50d20b60d6a21b70d20b60d20b70d6a21b80d20b70d20b80d6a21b90d20b80d20b90d6a21ba0d" - "20b90d20ba0d6a21bb0d20ba0d20bb0d6a21bc0d20bb0d20bc0d6a21bd0d20bc0d20bd0d6a21be0d20bd0d20be0d6a21bf0d20be0d20bf0d6a" - "21c00d20bf0d20c00d6a21c10d20c00d20c10d6a21c20d20c10d20c20d6a21c30d20c20d20c30d6a21c40d20c30d20c40d6a21c50d20c40d20" - "c50d6a21c60d20c50d20c60d6a21c70d20c60d20c70d6a21c80d20c70d20c80d6a21c90d20c80d20c90d6a21ca0d20c90d20ca0d6a21cb0d20" - "ca0d20cb0d6a21cc0d20cb0d20cc0d6a21cd0d20cc0d20cd0d6a21ce0d20cd0d20ce0d6a21cf0d20ce0d20cf0d6a21d00d20cf0d20d00d6a21" - "d10d20d00d20d10d6a21d20d20d10d20d20d6a21d30d20d20d20d30d6a21d40d20d30d20d40d6a21d50d20d40d20d50d6a21d60d20d50d20d6" - "0d6a21d70d20d60d20d70d6a21d80d20d70d20d80d6a21d90d20d80d20d90d6a21da0d20d90d20da0d6a21db0d20da0d20db0d6a21dc0d20db" - "0d20dc0d6a21dd0d20dc0d20dd0d6a21de0d20dd0d20de0d6a21df0d20de0d20df0d6a21e00d20df0d20e00d6a21e10d20e00d20e10d6a21e2" - "0d20e10d20e20d6a21e30d20e20d20e30d6a21e40d20e30d20e40d6a21e50d20e40d20e50d6a21e60d20e50d20e60d6a21e70d20e60d20e70d" - "6a21e80d20e70d20e80d6a21e90d20e80d20e90d6a21ea0d20e90d20ea0d6a21eb0d20ea0d20eb0d6a21ec0d20eb0d20ec0d6a21ed0d20ec0d" - "20ed0d6a21ee0d20ed0d20ee0d6a21ef0d20ee0d20ef0d6a21f00d20ef0d20f00d6a21f10d20f00d20f10d6a21f20d20f10d20f20d6a21f30d" - "20f20d20f30d6a21f40d20f30d20f40d6a21f50d20f40d20f50d6a21f60d20f50d20f60d6a21f70d20f60d20f70d6a21f80d20f70d20f80d6a" - "21f90d20f80d20f90d6a21fa0d20f90d20fa0d6a21fb0d20fa0d20fb0d6a21fc0d20fb0d20fc0d6a21fd0d20fc0d20fd0d6a21fe0d20fd0d20" - "fe0d6a21ff0d20fe0d20ff0d6a21800e20ff0d20800e6a21810e20800e20810e6a21820e20810e20820e6a21830e20820e20830e6a21840e20" - "830e20840e6a21850e20840e20850e6a21860e20850e20860e6a21870e20860e20870e6a21880e20870e20880e6a21890e20880e20890e6a21" - "8a0e20890e208a0e6a218b0e208a0e208b0e6a218c0e208b0e208c0e6a218d0e208c0e208d0e6a218e0e208d0e208e0e6a218f0e208e0e208f" - "0e6a21900e208f0e20900e6a21910e20900e20910e6a21920e20910e20920e6a21930e20920e20930e6a21940e20930e20940e6a21950e2094" - "0e20950e6a21960e20950e20960e6a21970e20960e20970e6a21980e20970e20980e6a21990e20980e20990e6a219a0e20990e209a0e6a219b" - "0e209a0e209b0e6a219c0e209b0e209c0e6a219d0e209c0e209d0e6a219e0e209d0e209e0e6a219f0e209e0e209f0e6a21a00e209f0e20a00e" - "6a21a10e20a00e20a10e6a21a20e20a10e20a20e6a21a30e20a20e20a30e6a21a40e20a30e20a40e6a21a50e20a40e20a50e6a21a60e20a50e" - "20a60e6a21a70e20a60e20a70e6a21a80e20a70e20a80e6a21a90e20a80e20a90e6a21aa0e20a90e20aa0e6a21ab0e20aa0e20ab0e6a21ac0e" - "20ab0e20ac0e6a21ad0e20ac0e20ad0e6a21ae0e20ad0e20ae0e6a21af0e20ae0e20af0e6a21b00e20af0e20b00e6a21b10e20b00e20b10e6a" - "21b20e20b10e20b20e6a21b30e20b20e20b30e6a21b40e20b30e20b40e6a21b50e20b40e20b50e6a21b60e20b50e20b60e6a21b70e20b60e20" - "b70e6a21b80e20b70e20b80e6a21b90e20b80e20b90e6a21ba0e20b90e20ba0e6a21bb0e20ba0e20bb0e6a21bc0e20bb0e20bc0e6a21bd0e20" - "bc0e20bd0e6a21be0e20bd0e20be0e6a21bf0e20be0e20bf0e6a21c00e20bf0e20c00e6a21c10e20c00e20c10e6a21c20e20c10e20c20e6a21" - "c30e20c20e20c30e6a21c40e20c30e20c40e6a21c50e20c40e20c50e6a21c60e20c50e20c60e6a21c70e20c60e20c70e6a21c80e20c70e20c8" - "0e6a21c90e20c80e20c90e6a21ca0e20c90e20ca0e6a21cb0e20ca0e20cb0e6a21cc0e20cb0e20cc0e6a21cd0e20cc0e20cd0e6a21ce0e20cd" - "0e20ce0e6a21cf0e20ce0e20cf0e6a21d00e20cf0e20d00e6a21d10e20d00e20d10e6a21d20e20d10e20d20e6a21d30e20d20e20d30e6a21d4" - "0e20d30e20d40e6a21d50e20d40e20d50e6a21d60e20d50e20d60e6a21d70e20d60e20d70e6a21d80e20d70e20d80e6a21d90e20d80e20d90e" - "6a21da0e20d90e20da0e6a21db0e20da0e20db0e6a21dc0e20db0e20dc0e6a21dd0e20dc0e20dd0e6a21de0e20dd0e20de0e6a21df0e20de0e" - "20df0e6a21e00e20df0e20e00e6a21e10e20e00e20e10e6a21e20e20e10e20e20e6a21e30e20e20e20e30e6a21e40e20e30e20e40e6a21e50e" - "20e40e20e50e6a21e60e20e50e20e60e6a21e70e20e60e20e70e6a21e80e20e70e20e80e6a21e90e20e80e20e90e6a21ea0e20e90e20ea0e6a" - "21eb0e20ea0e20eb0e6a21ec0e20eb0e20ec0e6a21ed0e20ec0e20ed0e6a21ee0e20ed0e20ee0e6a21ef0e20ee0e20ef0e6a21f00e20ef0e20" - "f00e6a21f10e20f00e20f10e6a21f20e20f10e20f20e6a21f30e20f20e20f30e6a21f40e20f30e20f40e6a21f50e20f40e20f50e6a21f60e20" - "f50e20f60e6a21f70e20f60e20f70e6a21f80e20f70e20f80e6a21f90e20f80e20f90e6a21fa0e20f90e20fa0e6a21fb0e20fa0e20fb0e6a21" - "fc0e20fb0e20fc0e6a21fd0e20fc0e20fd0e6a21fe0e20fd0e20fe0e6a21ff0e20fe0e20ff0e6a21800f20ff0e20800f6a21810f20800f2081" - "0f6a21820f20810f20820f6a21830f20820f20830f6a21840f20830f20840f6a21850f20840f20850f6a21860f20850f20860f6a21870f2086" - "0f20870f6a21880f20870f20880f6a21890f20880f20890f6a218a0f20890f208a0f6a218b0f208a0f208b0f6a218c0f208b0f208c0f6a218d" - "0f208c0f208d0f6a218e0f208d0f208e0f6a218f0f208e0f208f0f6a21900f208f0f20900f6a21910f20900f20910f6a21920f20910f20920f" - "6a21930f20920f20930f6a21940f20930f20940f6a21950f20940f20950f6a21960f20950f20960f6a21970f20960f20970f6a21980f20970f" - "20980f6a21990f20980f20990f6a219a0f20990f209a0f6a219b0f209a0f209b0f6a219c0f209b0f209c0f6a219d0f209c0f209d0f6a219e0f" - "209d0f209e0f6a219f0f209e0f209f0f6a21a00f209f0f20a00f6a21a10f20a00f20a10f6a21a20f20a10f20a20f6a21a30f20a20f20a30f6a" - "21a40f20a30f20a40f6a21a50f20a40f20a50f6a21a60f20a50f20a60f6a21a70f20a60f20a70f6a21a80f20a70f20a80f6a21a90f20a80f20" - "a90f6a21aa0f20a90f20aa0f6a21ab0f20aa0f20ab0f6a21ac0f20ab0f20ac0f6a21ad0f20ac0f20ad0f6a21ae0f20ad0f20ae0f6a21af0f20" - "ae0f20af0f6a21b00f20af0f20b00f6a21b10f20b00f20b10f6a21b20f20b10f20b20f6a21b30f20b20f20b30f6a21b40f20b30f20b40f6a21" - "b50f20b40f20b50f6a21b60f20b50f20b60f6a21b70f20b60f20b70f6a21b80f20b70f20b80f6a21b90f20b80f20b90f6a21ba0f20b90f20ba" - "0f6a21bb0f20ba0f20bb0f6a21bc0f20bb0f20bc0f6a21bd0f20bc0f20bd0f6a21be0f20bd0f20be0f6a21bf0f20be0f20bf0f6a21c00f20bf" - "0f20c00f6a21c10f20c00f20c10f6a21c20f20c10f20c20f6a21c30f20c20f20c30f6a21c40f20c30f20c40f6a21c50f20c40f20c50f6a21c6" - "0f20c50f20c60f6a21c70f20c60f20c70f6a21c80f20c70f20c80f6a21c90f20c80f20c90f6a21ca0f20c90f20ca0f6a21cb0f20ca0f20cb0f" - "6a21cc0f20cb0f20cc0f6a21cd0f20cc0f20cd0f6a21ce0f20cd0f20ce0f6a21cf0f20ce0f20cf0f6a21d00f20cf0f20d00f6a21d10f20d00f" - "20d10f6a21d20f20d10f20d20f6a21d30f20d20f20d30f6a21d40f20d30f20d40f6a21d50f20d40f20d50f6a21d60f20d50f20d60f6a21d70f" - "20d60f20d70f6a21d80f20d70f20d80f6a21d90f20d80f20d90f6a21da0f20d90f20da0f6a21db0f20da0f20db0f6a21dc0f20db0f20dc0f6a" - "21dd0f20dc0f20dd0f6a21de0f20dd0f20de0f6a21df0f20de0f20df0f6a21e00f20df0f20e00f6a21e10f20e00f20e10f6a21e20f20e10f20" - "e20f6a21e30f20e20f20e30f6a21e40f20e30f20e40f6a21e50f20e40f20e50f6a21e60f20e50f20e60f6a21e70f20e60f20e70f6a21e80f20" - "e70f20e80f6a21e90f20e80f20e90f6a21ea0f20e90f20ea0f6a21eb0f20ea0f20eb0f6a21ec0f20eb0f20ec0f6a21ed0f20ec0f20ed0f6a21" - "ee0f20ed0f20ee0f6a21ef0f20ee0f20ef0f6a21f00f20ef0f20f00f6a21f10f20f00f20f10f6a21f20f20f10f20f20f6a21f30f20f20f20f3" - "0f6a21f40f20f30f20f40f6a21f50f20f40f20f50f6a21f60f20f50f20f60f6a21f70f20f60f20f70f6a21f80f20f70f20f80f6a21f90f20f8" - "0f20f90f6a21fa0f20f90f20fa0f6a21fb0f20fa0f20fb0f6a21fc0f20fb0f20fc0f6a21fd0f20fc0f20fd0f6a21fe0f20fd0f20fe0f6a21ff" - "0f20fe0f20ff0f6a21801020ff0f2080106a2181102080102081106a2182102081102082106a2183102082102083106a218410208310208410" - "6a2185102084102085106a2186102085102086106a2187102086102087106a2188102087102088106a2189102088102089106a218a10208910" - "208a106a218b10208a10208b106a218c10208b10208c106a218d10208c10208d106a218e10208d10208e106a218f10208e10208f106a219010" - "208f102090106a2191102090102091106a2192102091102092106a2193102092102093106a2194102093102094106a2195102094102095106a" - "2196102095102096106a2197102096102097106a2198102097102098106a2199102098102099106a219a10209910209a106a219b10209a1020" - "9b106a219c10209b10209c106a219d10209c10209d106a219e10209d10209e106a219f10209e10209f106a21a010209f1020a0106a21a11020" - "a01020a1106a21a21020a11020a2106a21a31020a21020a3106a21a41020a31020a4106a21a51020a41020a5106a21a61020a51020a6106a21" - "a71020a61020a7106a21a81020a71020a8106a21a91020a81020a9106a21aa1020a91020aa106a21ab1020aa1020ab106a21ac1020ab1020ac" - "106a21ad1020ac1020ad106a21ae1020ad1020ae106a21af1020ae1020af106a21b01020af1020b0106a21b11020b01020b1106a21b21020b1" - "1020b2106a21b31020b21020b3106a21b41020b31020b4106a21b51020b41020b5106a21b61020b51020b6106a21b71020b61020b7106a21b8" - "1020b71020b8106a21b91020b81020b9106a21ba1020b91020ba106a21bb1020ba1020bb106a21bc1020bb1020bc106a21bd1020bc1020bd10" - "6a21be1020bd1020be106a21bf1020be1020bf106a21c01020bf1020c0106a21c11020c01020c1106a21c21020c11020c2106a21c31020c210" - "20c3106a21c41020c31020c4106a21c51020c41020c5106a21c61020c51020c6106a21c71020c61020c7106a21c81020c71020c8106a21c910" - "20c81020c9106a21ca1020c91020ca106a21cb1020ca1020cb106a21cc1020cb1020cc106a21cd1020cc1020cd106a21ce1020cd1020ce106a" - "21cf1020ce1020cf106a21d01020cf1020d0106a21d11020d01020d1106a21d21020d11020d2106a21d31020d21020d3106a21d41020d31020" - "d4106a21d51020d41020d5106a21d61020d51020d6106a21d71020d61020d7106a21d81020d71020d8106a21d91020d81020d9106a21da1020" - "d91020da106a21db1020da1020db106a21dc1020db1020dc106a21dd1020dc1020dd106a21de1020dd1020de106a21df1020de1020df106a21" - "e01020df1020e0106a21e11020e01020e1106a21e21020e11020e2106a21e31020e21020e3106a21e41020e31020e4106a21e51020e41020e5" - "106a21e61020e51020e6106a21e71020e61020e7106a21e81020e71020e8106a21e91020e81020e9106a21ea1020e91020ea106a21eb1020ea" - "1020eb106a21ec1020eb1020ec106a21ed1020ec1020ed106a21ee1020ed1020ee106a21ef1020ee1020ef106a21f01020ef1020f0106a21f1" - "1020f01020f1106a21f21020f11020f2106a21f31020f21020f3106a21f41020f31020f4106a21f51020f41020f5106a21f61020f51020f610" - "6a21f71020f61020f7106a21f81020f71020f8106a21f91020f81020f9106a21fa1020f91020fa106a21fb1020fa1020fb106a21fc1020fb10" - "20fc106a21fd1020fc1020fd106a21fe1020fd1020fe106a21ff1020fe1020ff106a21801120ff102080116a2181112080112081116a218211" - "2081112082116a2183112082112083116a2184112083112084116a2185112084112085116a2186112085112086116a2187112086112087116a" - "2188112087112088116a2189112088112089116a218a11208911208a116a218b11208a11208b116a218c11208b11208c116a218d11208c1120" - "8d116a218e11208d11208e116a218f11208e11208f116a219011208f112090116a2191112090112091116a2192112091112092116a21931120" - "92112093116a2194112093112094116a2195112094112095116a2196112095112096116a2197112096112097116a2198112097112098116a21" - "99112098112099116a219a11209911209a116a219b11209a11209b116a219c11209b11209c116a219d11209c11209d116a219e11209d11209e" - "116a219f11209e11209f116a21a011209f1120a0116a21a11120a01120a1116a21a21120a11120a2116a21a31120a21120a3116a21a41120a3" - "1120a4116a21a51120a41120a5116a21a61120a51120a6116a21a71120a61120a7116a21a81120a71120a8116a21a91120a81120a9116a21aa" - "1120a91120aa116a21ab1120aa1120ab116a21ac1120ab1120ac116a21ad1120ac1120ad116a21ae1120ad1120ae116a21af1120ae1120af11" - "6a21b01120af1120b0116a21b11120b01120b1116a21b21120b11120b2116a21b31120b21120b3116a21b41120b31120b4116a21b51120b411" - "20b5116a21b61120b51120b6116a21b71120b61120b7116a21b81120b71120b8116a21b91120b81120b9116a21ba1120b91120ba116a21bb11" - "20ba1120bb116a21bc1120bb1120bc116a21bd1120bc1120bd116a21be1120bd1120be116a21bf1120be1120bf116a21c01120bf1120c0116a" - "21c11120c01120c1116a21c21120c11120c2116a21c31120c21120c3116a21c41120c31120c4116a21c51120c41120c5116a21c61120c51120" - "c6116a21c71120c61120c7116a21c81120c71120c8116a21c91120c81120c9116a21ca1120c91120ca116a21cb1120ca1120cb116a21cc1120" - "cb1120cc116a21cd1120cc1120cd116a21ce1120cd1120ce116a21cf1120ce1120cf116a21d01120cf1120d0116a21d11120d01120d1116a21" - "d21120d11120d2116a21d31120d21120d3116a21d41120d31120d4116a21d51120d41120d5116a21d61120d51120d6116a21d71120d61120d7" - "116a21d81120d71120d8116a21d91120d81120d9116a21da1120d91120da116a21db1120da1120db116a21dc1120db1120dc116a21dd1120dc" - "1120dd116a21de1120dd1120de116a21df1120de1120df116a21e01120df1120e0116a21e11120e01120e1116a21e21120e11120e2116a21e3" - "1120e21120e3116a21e41120e31120e4116a21e51120e41120e5116a21e61120e51120e6116a21e71120e61120e7116a21e81120e71120e811" - "6a21e91120e81120e9116a21ea1120e91120ea116a21eb1120ea1120eb116a21ec1120eb1120ec116a21ed1120ec1120ed116a21ee1120ed11" - "20ee116a21ef1120ee1120ef116a21f01120ef1120f0116a21f11120f01120f1116a21f21120f11120f2116a21f31120f21120f3116a21f411" - "20f31120f4116a21f51120f41120f5116a21f61120f51120f6116a21f71120f61120f7116a21f81120f71120f8116a21f91120f81120f9116a" - "21fa1120f91120fa116a21fb1120fa1120fb116a21fc1120fb1120fc116a21fd1120fc1120fd116a21fe1120fd1120fe116a21ff1120fe1120" - "ff116a21801220ff112080126a2181122080122081126a2182122081122082126a2183122082122083126a2184122083122084126a21851220" - "84122085126a2186122085122086126a2187122086122087126a2188122087122088126a2189122088122089126a218a12208912208a126a21" - "8b12208a12208b126a218c12208b12208c126a218d12208c12208d126a218e12208d12208e126a218f12208e12208f126a219012208f122090" - "126a2191122090122091126a2192122091122092126a2193122092122093126a2194122093122094126a2195122094122095126a2196122095" - "122096126a2197122096122097126a2198122097122098126a2199122098122099126a219a12209912209a126a219b12209a12209b126a219c" - "12209b12209c126a219d12209c12209d126a219e12209d12209e126a219f12209e12209f126a21a012209f1220a0126a21a11220a01220a112" - "6a21a21220a11220a2126a21a31220a21220a3126a21a41220a31220a4126a21a51220a41220a5126a21a61220a51220a6126a21a71220a612" - "20a7126a21a81220a71220a8126a21a91220a81220a9126a21aa1220a91220aa126a21ab1220aa1220ab126a21ac1220ab1220ac126a21ad12" - "20ac1220ad126a21ae1220ad1220ae126a21af1220ae1220af126a21b01220af1220b0126a21b11220b01220b1126a21b21220b11220b2126a" - "21b31220b21220b3126a21b41220b31220b4126a21b51220b41220b5126a21b61220b51220b6126a21b71220b61220b7126a21b81220b71220" - "b8126a21b91220b81220b9126a21ba1220b91220ba126a21bb1220ba1220bb126a21bc1220bb1220bc126a21bd1220bc1220bd126a21be1220" - "bd1220be126a21bf1220be1220bf126a21c01220bf1220c0126a21c11220c01220c1126a21c21220c11220c2126a21c31220c21220c3126a21" - "c41220c31220c4126a21c51220c41220c5126a21c61220c51220c6126a21c71220c61220c7126a21c81220c71220c8126a21c91220c81220c9" - "126a21ca1220c91220ca126a21cb1220ca1220cb126a21cc1220cb1220cc126a21cd1220cc1220cd126a21ce1220cd1220ce126a21cf1220ce" - "1220cf126a21d01220cf1220d0126a21d11220d01220d1126a21d21220d11220d2126a21d31220d21220d3126a21d41220d31220d4126a21d5" - "1220d41220d5126a21d61220d51220d6126a21d71220d61220d7126a21d81220d71220d8126a21d91220d81220d9126a21da1220d91220da12" - "6a21db1220da1220db126a21dc1220db1220dc126a21dd1220dc1220dd126a21de1220dd1220de126a21df1220de1220df126a21e01220df12" - "20e0126a21e11220e01220e1126a21e21220e11220e2126a21e31220e21220e3126a21e41220e31220e4126a21e51220e41220e5126a21e612" - "20e51220e6126a21e71220e61220e7126a21e81220e71220e8126a21e91220e81220e9126a21ea1220e91220ea126a21eb1220ea1220eb126a" - "21ec1220eb1220ec126a21ed1220ec1220ed126a21ee1220ed1220ee126a21ef1220ee1220ef126a21f01220ef1220f0126a21f11220f01220" - "f1126a21f21220f11220f2126a21f31220f21220f3126a21f41220f31220f4126a21f51220f41220f5126a21f61220f51220f6126a21f71220" - "f61220f7126a21f81220f71220f8126a21f91220f81220f9126a21fa1220f91220fa126a21fb1220fa1220fb126a21fc1220fb1220fc126a21" - "fd1220fc1220fd126a21fe1220fd1220fe126a21ff1220fe1220ff126a21801320ff122080136a2181132080132081136a2182132081132082" - "136a2183132082132083136a2184132083132084136a2185132084132085136a2186132085132086136a2187132086132087136a2188132087" - "132088136a2189132088132089136a218a13208913208a136a218b13208a13208b136a218c13208b13208c136a218d13208c13208d136a218e" - "13208d13208e136a218f13208e13208f136a219013208f132090136a2191132090132091136a2192132091132092136a219313209213209313" - "6a2194132093132094136a2195132094132095136a2196132095132096136a2197132096132097136a2198132097132098136a219913209813" - "2099136a219a13209913209a136a219b13209a13209b136a219c13209b13209c136a219d13209c13209d136a219e13209d13209e136a219f13" - "209e13209f136a21a013209f1320a0136a21a11320a01320a1136a21a21320a11320a2136a21a31320a21320a3136a21a41320a31320a4136a" - "21a51320a41320a5136a21a61320a51320a6136a21a71320a61320a7136a21a81320a71320a8136a21a91320a81320a9136a21aa1320a91320" - "aa136a21ab1320aa1320ab136a21ac1320ab1320ac136a21ad1320ac1320ad136a21ae1320ad1320ae136a21af1320ae1320af136a21b01320" - "af1320b0136a21b11320b01320b1136a21b21320b11320b2136a21b31320b21320b3136a21b41320b31320b4136a21b51320b41320b5136a21" - "b61320b51320b6136a21b71320b61320b7136a21b81320b71320b8136a21b91320b81320b9136a21ba1320b91320ba136a21bb1320ba1320bb" - "136a21bc1320bb1320bc136a21bd1320bc1320bd136a21be1320bd1320be136a21bf1320be1320bf136a21c01320bf1320c0136a21c11320c0" - "1320c1136a21c21320c11320c2136a21c31320c21320c3136a21c41320c31320c4136a21c51320c41320c5136a21c61320c51320c6136a21c7" - "1320c61320c7136a21c81320c71320c8136a21c91320c81320c9136a21ca1320c91320ca136a21cb1320ca1320cb136a21cc1320cb1320cc13" - "6a21cd1320cc1320cd136a21ce1320cd1320ce136a21cf1320ce1320cf136a21d01320cf1320d0136a21d11320d01320d1136a21d21320d113" - "20d2136a21d31320d21320d3136a21d41320d31320d4136a21d51320d41320d5136a21d61320d51320d6136a21d71320d61320d7136a21d813" - "20d71320d8136a21d91320d81320d9136a21da1320d91320da136a21db1320da1320db136a21dc1320db1320dc136a21dd1320dc1320dd136a" - "21de1320dd1320de136a21df1320de1320df136a21e01320df1320e0136a21e11320e01320e1136a21e21320e11320e2136a21e31320e21320" - "e3136a21e41320e31320e4136a21e51320e41320e5136a21e61320e51320e6136a21e71320e61320e7136a21e81320e71320e8136a21e91320" - "e81320e9136a21ea1320e91320ea136a21eb1320ea1320eb136a21ec1320eb1320ec136a21ed1320ec1320ed136a21ee1320ed1320ee136a21" - "ef1320ee1320ef136a21f01320ef1320f0136a21f11320f01320f1136a21f21320f11320f2136a21f31320f21320f3136a21f41320f31320f4" - "136a21f51320f41320f5136a21f61320f51320f6136a21f71320f61320f7136a21f81320f71320f8136a21f91320f81320f9136a21fa1320f9" - "1320fa136a21fb1320fa1320fb136a21fc1320fb1320fc136a21fd1320fc1320fd136a21fe1320fd1320fe136a21ff1320fe1320ff136a2180" - "1420ff132080146a2181142080142081146a2182142081142082146a2183142082142083146a2184142083142084146a218514208414208514" - "6a2186142085142086146a2187142086142087146a2188142087142088146a2189142088142089146a218a14208914208a146a218b14208a14" - "208b146a218c14208b14208c146a218d14208c14208d146a218e14208d14208e146a218f14208e14208f146a219014208f142090146a219114" - "2090142091146a2192142091142092146a2193142092142093146a2194142093142094146a2195142094142095146a2196142095142096146a" - "2197142096142097146a2198142097142098146a2199142098142099146a219a14209914209a146a219b14209a14209b146a219c14209b1420" - "9c146a219d14209c14209d146a219e14209d14209e146a219f14209e14209f146a21a014209f1420a0146a21a11420a01420a1146a21a21420" - "a11420a2146a21a31420a21420a3146a21a41420a31420a4146a21a51420a41420a5146a21a61420a51420a6146a21a71420a61420a7146a21" - "a81420a71420a8146a21a91420a81420a9146a21aa1420a91420aa146a21ab1420aa1420ab146a21ac1420ab1420ac146a21ad1420ac1420ad" - "146a21ae1420ad1420ae146a21af1420ae1420af146a21b01420af1420b0146a21b11420b01420b1146a21b21420b11420b2146a21b31420b2" - "1420b3146a21b41420b31420b4146a21b51420b41420b5146a21b61420b51420b6146a21b71420b61420b7146a21b81420b71420b8146a21b9" - "1420b81420b9146a21ba1420b91420ba146a21bb1420ba1420bb146a21bc1420bb1420bc146a21bd1420bc1420bd146a21be1420bd1420be14" - "6a21bf1420be1420bf146a21c01420bf1420c0146a21c11420c01420c1146a21c21420c11420c2146a21c31420c21420c3146a21c41420c314" - "20c4146a21c51420c41420c5146a21c61420c51420c6146a21c71420c61420c7146a21c81420c71420c8146a21c91420c81420c9146a21ca14" - "20c91420ca146a21cb1420ca1420cb146a21cc1420cb1420cc146a21cd1420cc1420cd146a21ce1420cd1420ce146a21cf1420ce1420cf146a" - "21d01420cf1420d0146a21d11420d01420d1146a21d21420d11420d2146a21d31420d21420d3146a21d41420d31420d4146a21d51420d41420" - "d5146a21d61420d51420d6146a21d71420d61420d7146a21d81420d71420d8146a21d91420d81420d9146a21da1420d91420da146a21db1420" - "da1420db146a21dc1420db1420dc146a21dd1420dc1420dd146a21de1420dd1420de146a21df1420de1420df146a21e01420df1420e0146a21" - "e11420e01420e1146a21e21420e11420e2146a21e31420e21420e3146a21e41420e31420e4146a21e51420e41420e5146a21e61420e51420e6" - "146a21e71420e61420e7146a21e81420e71420e8146a21e91420e81420e9146a21ea1420e91420ea146a21eb1420ea1420eb146a21ec1420eb" - "1420ec146a21ed1420ec1420ed146a21ee1420ed1420ee146a21ef1420ee1420ef146a21f01420ef1420f0146a21f11420f01420f1146a21f2" - "1420f11420f2146a21f31420f21420f3146a21f41420f31420f4146a21f51420f41420f5146a21f61420f51420f6146a21f71420f61420f714" - "6a21f81420f71420f8146a21f91420f81420f9146a21fa1420f91420fa146a21fb1420fa1420fb146a21fc1420fb1420fc146a21fd1420fc14" - "20fd146a21fe1420fd1420fe146a21ff1420fe1420ff146a21801520ff142080156a2181152080152081156a2182152081152082156a218315" - "2082152083156a2184152083152084156a2185152084152085156a2186152085152086156a2187152086152087156a2188152087152088156a" - "2189152088152089156a218a15208915208a156a218b15208a15208b156a218c15208b15208c156a218d15208c15208d156a218e15208d1520" - "8e156a218f15208e15208f156a219015208f152090156a2191152090152091156a2192152091152092156a2193152092152093156a21941520" - "93152094156a2195152094152095156a2196152095152096156a2197152096152097156a2198152097152098156a2199152098152099156a21" - "9a15209915209a156a219b15209a15209b156a219c15209b15209c156a219d15209c15209d156a219e15209d15209e156a219f15209e15209f" - "156a21a015209f1520a0156a21a11520a01520a1156a21a21520a11520a2156a21a31520a21520a3156a21a41520a31520a4156a21a51520a4" - "1520a5156a21a61520a51520a6156a21a71520a61520a7156a21a81520a71520a8156a21a91520a81520a9156a21aa1520a91520aa156a21ab" - "1520aa1520ab156a21ac1520ab1520ac156a21ad1520ac1520ad156a21ae1520ad1520ae156a21af1520ae1520af156a21b01520af1520b015" - "6a21b11520b01520b1156a21b21520b11520b2156a21b31520b21520b3156a21b41520b31520b4156a21b51520b41520b5156a21b61520b515" - "20b6156a21b71520b61520b7156a21b81520b71520b8156a21b91520b81520b9156a21ba1520b91520ba156a21bb1520ba1520bb156a21bc15" - "20bb1520bc156a21bd1520bc1520bd156a21be1520bd1520be156a21bf1520be1520bf156a21c01520bf1520c0156a21c11520c01520c1156a" - "21c21520c11520c2156a21c31520c21520c3156a21c41520c31520c4156a21c51520c41520c5156a21c61520c51520c6156a21c71520c61520" - "c7156a21c81520c71520c8156a21c91520c81520c9156a21ca1520c91520ca156a21cb1520ca1520cb156a21cc1520cb1520cc156a21cd1520" - "cc1520cd156a21ce1520cd1520ce156a21cf1520ce1520cf156a21d01520cf1520d0156a21d11520d01520d1156a21d21520d11520d2156a21" - "d31520d21520d3156a21d41520d31520d4156a21d51520d41520d5156a21d61520d51520d6156a21d71520d61520d7156a21d81520d71520d8" - "156a21d91520d81520d9156a21da1520d91520da156a21db1520da1520db156a21dc1520db1520dc156a21dd1520dc1520dd156a21de1520dd" - "1520de156a21df1520de1520df156a21e01520df1520e0156a21e11520e01520e1156a21e21520e11520e2156a21e31520e21520e3156a21e4" - "1520e31520e4156a21e51520e41520e5156a21e61520e51520e6156a21e71520e61520e7156a21e81520e71520e8156a21e91520e81520e915" - "6a21ea1520e91520ea156a21eb1520ea1520eb156a21ec1520eb1520ec156a21ed1520ec1520ed156a21ee1520ed1520ee156a21ef1520ee15" - "20ef156a21f01520ef1520f0156a21f11520f01520f1156a21f21520f11520f2156a21f31520f21520f3156a21f41520f31520f4156a21f515" - "20f41520f5156a21f61520f51520f6156a21f71520f61520f7156a21f81520f71520f8156a21f91520f81520f9156a21fa1520f91520fa156a" - "21fb1520fa1520fb156a21fc1520fb1520fc156a21fd1520fc1520fd156a21fe1520fd1520fe156a21ff1520fe1520ff156a21801620ff1520" - "80166a2181162080162081166a2182162081162082166a2183162082162083166a2184162083162084166a2185162084162085166a21861620" - "85162086166a2187162086162087166a2188162087162088166a2189162088162089166a218a16208916208a166a218b16208a16208b166a21" - "8c16208b16208c166a218d16208c16208d166a218e16208d16208e166a218f16208e16208f166a219016208f162090166a2191162090162091" - "166a2192162091162092166a2193162092162093166a2194162093162094166a2195162094162095166a2196162095162096166a2197162096" - "162097166a2198162097162098166a2199162098162099166a219a16209916209a166a219b16209a16209b166a219c16209b16209c166a219d" - "16209c16209d166a219e16209d16209e166a219f16209e16209f166a21a016209f1620a0166a21a11620a01620a1166a21a21620a11620a216" - "6a21a31620a21620a3166a21a41620a31620a4166a21a51620a41620a5166a21a61620a51620a6166a21a71620a61620a7166a21a81620a716" - "20a8166a21a91620a81620a9166a21aa1620a91620aa166a21ab1620aa1620ab166a21ac1620ab1620ac166a21ad1620ac1620ad166a21ae16" - "20ad1620ae166a21af1620ae1620af166a21b01620af1620b0166a21b11620b01620b1166a21b21620b11620b2166a21b31620b21620b3166a" - "21b41620b31620b4166a21b51620b41620b5166a21b61620b51620b6166a21b71620b61620b7166a21b81620b71620b8166a21b91620b81620" - "b9166a21ba1620b91620ba166a21bb1620ba1620bb166a21bc1620bb1620bc166a21bd1620bc1620bd166a21be1620bd1620be166a21bf1620" - "be1620bf166a21c01620bf1620c0166a21c11620c01620c1166a21c21620c11620c2166a21c31620c21620c3166a21c41620c31620c4166a21" - "c51620c41620c5166a21c61620c51620c6166a21c71620c61620c7166a21c81620c71620c8166a21c91620c81620c9166a21ca1620c91620ca" - "166a21cb1620ca1620cb166a21cc1620cb1620cc166a21cd1620cc1620cd166a21ce1620cd1620ce166a21cf1620ce1620cf166a21d01620cf" - "1620d0166a21d11620d01620d1166a21d21620d11620d2166a21d31620d21620d3166a21d41620d31620d4166a21d51620d41620d5166a21d6" - "1620d51620d6166a21d71620d61620d7166a21d81620d71620d8166a21d91620d81620d9166a21da1620d91620da166a21db1620da1620db16" - "6a21dc1620db1620dc166a21dd1620dc1620dd166a21de1620dd1620de166a21df1620de1620df166a21e01620df1620e0166a21e11620e016" - "20e1166a21e21620e11620e2166a21e31620e21620e3166a21e41620e31620e4166a21e51620e41620e5166a21e61620e51620e6166a21e716" - "20e61620e7166a21e81620e71620e8166a21e91620e81620e9166a21ea1620e91620ea166a21eb1620ea1620eb166a21ec1620eb1620ec166a" - "21ed1620ec1620ed166a21ee1620ed1620ee166a21ef1620ee1620ef166a21f01620ef1620f0166a21f11620f01620f1166a21f21620f11620" - "f2166a21f31620f21620f3166a21f41620f31620f4166a21f51620f41620f5166a21f61620f51620f6166a21f71620f61620f7166a21f81620" - "f71620f8166a21f91620f81620f9166a21fa1620f91620fa166a21fb1620fa1620fb166a21fc1620fb1620fc166a21fd1620fc1620fd166a21" - "fe1620fd1620fe166a21ff1620fe1620ff166a21801720ff162080176a2181172080172081176a2182172081172082176a2183172082172083" - "176a2184172083172084176a2185172084172085176a2186172085172086176a2187172086172087176a2188172087172088176a2189172088" - "172089176a218a17208917208a176a218b17208a17208b176a218c17208b17208c176a218d17208c17208d176a218e17208d17208e176a218f" - "17208e17208f176a219017208f172090176a2191172090172091176a2192172091172092176a2193172092172093176a219417209317209417" - "6a2195172094172095176a2196172095172096176a2197172096172097176a2198172097172098176a2199172098172099176a219a17209917" - "209a176a219b17209a17209b176a219c17209b17209c176a219d17209c17209d176a219e17209d17209e176a219f17209e17209f176a21a017" - "209f1720a0176a21a11720a01720a1176a21a21720a11720a2176a21a31720a21720a3176a21a41720a31720a4176a21a51720a41720a5176a" - "21a61720a51720a6176a21a71720a61720a7176a21a81720a71720a8176a21a91720a81720a9176a21aa1720a91720aa176a21ab1720aa1720" - "ab176a21ac1720ab1720ac176a21ad1720ac1720ad176a21ae1720ad1720ae176a21af1720ae1720af176a21b01720af1720b0176a21b11720" - "b01720b1176a21b21720b11720b2176a21b31720b21720b3176a21b41720b31720b4176a21b51720b41720b5176a21b61720b51720b6176a21" - "b71720b61720b7176a21b81720b71720b8176a21b91720b81720b9176a21ba1720b91720ba176a21bb1720ba1720bb176a21bc1720bb1720bc" - "176a21bd1720bc1720bd176a21be1720bd1720be176a21bf1720be1720bf176a21c01720bf1720c0176a21c11720c01720c1176a21c21720c1" - "1720c2176a21c31720c21720c3176a21c41720c31720c4176a21c51720c41720c5176a21c61720c51720c6176a21c71720c61720c7176a21c8" - "1720c71720c8176a21c91720c81720c9176a21ca1720c91720ca176a21cb1720ca1720cb176a21cc1720cb1720cc176a21cd1720cc1720cd17" - "6a21ce1720cd1720ce176a21cf1720ce1720cf176a21d01720cf1720d0176a21d11720d01720d1176a21d21720d11720d2176a21d31720d217" - "20d3176a21d41720d31720d4176a21d51720d41720d5176a21d61720d51720d6176a21d71720d61720d7176a21d81720d71720d8176a21d917" - "20d81720d9176a21da1720d91720da176a21db1720da1720db176a21dc1720db1720dc176a21dd1720dc1720dd176a21de1720dd1720de176a" - "21df1720de1720df176a21e01720df1720e0176a21e11720e01720e1176a21e21720e11720e2176a21e31720e21720e3176a21e41720e31720" - "e4176a21e51720e41720e5176a21e61720e51720e6176a21e71720e61720e7176a21e81720e71720e8176a21e91720e81720e9176a21ea1720" - "e91720ea176a21eb1720ea1720eb176a21ec1720eb1720ec176a21ed1720ec1720ed176a21ee1720ed1720ee176a21ef1720ee1720ef176a21" - "f01720ef1720f0176a21f11720f01720f1176a21f21720f11720f2176a21f31720f21720f3176a21f41720f31720f4176a21f51720f41720f5" - "176a21f61720f51720f6176a21f71720f61720f7176a21f81720f71720f8176a21f91720f81720f9176a21fa1720f91720fa176a21fb1720fa" - "1720fb176a21fc1720fb1720fc176a21fd1720fc1720fd176a21fe1720fd1720fe176a21ff1720fe1720ff176a21801820ff172080186a2181" - "182080182081186a2182182081182082186a2183182082182083186a2184182083182084186a2185182084182085186a218618208518208618" - "6a2187182086182087186a2188182087182088186a2189182088182089186a218a18208918208a186a218b18208a18208b186a218c18208b18" - "208c186a218d18208c18208d186a218e18208d18208e186a218f18208e18208f186a219018208f182090186a2191182090182091186a219218" - "2091182092186a2193182092182093186a2194182093182094186a2195182094182095186a2196182095182096186a2197182096182097186a" - "2198182097182098186a2199182098182099186a219a18209918209a186a219b18209a18209b186a219c18209b18209c186a219d18209c1820" - "9d186a219e18209d18209e186a219f18209e18209f186a21a018209f1820a0186a21a11820a01820a1186a21a21820a11820a2186a21a31820" - "a21820a3186a21a41820a31820a4186a21a51820a41820a5186a21a61820a51820a6186a21a71820a61820a7186a21a81820a71820a8186a21" - "a91820a81820a9186a21aa1820a91820aa186a21ab1820aa1820ab186a21ac1820ab1820ac186a21ad1820ac1820ad186a21ae1820ad1820ae" - "186a21af1820ae1820af186a21b01820af1820b0186a21b11820b01820b1186a21b21820b11820b2186a21b31820b21820b3186a21b41820b3" - "1820b4186a21b51820b41820b5186a21b61820b51820b6186a21b71820b61820b7186a21b81820b71820b8186a21b91820b81820b9186a21ba" - "1820b91820ba186a21bb1820ba1820bb186a21bc1820bb1820bc186a21bd1820bc1820bd186a21be1820bd1820be186a21bf1820be1820bf18" - "6a21c01820bf1820c0186a21c11820c01820c1186a21c21820c11820c2186a21c31820c21820c3186a21c41820c31820c4186a21c51820c418" - "20c5186a21c61820c51820c6186a21c71820c61820c7186a21c81820c71820c8186a21c91820c81820c9186a21ca1820c91820ca186a21cb18" - "20ca1820cb186a21cc1820cb1820cc186a21cd1820cc1820cd186a21ce1820cd1820ce186a21cf1820ce1820cf186a21d01820cf1820d0186a" - "21d11820d01820d1186a21d21820d11820d2186a21d31820d21820d3186a21d41820d31820d4186a21d51820d41820d5186a21d61820d51820" - "d6186a21d71820d61820d7186a21d81820d71820d8186a21d91820d81820d9186a21da1820d91820da186a21db1820da1820db186a21dc1820" - "db1820dc186a21dd1820dc1820dd186a21de1820dd1820de186a21df1820de1820df186a21e01820df1820e0186a21e11820e01820e1186a21" - "e21820e11820e2186a21e31820e21820e3186a21e41820e31820e4186a21e51820e41820e5186a21e61820e51820e6186a21e71820e61820e7" - "186a21e81820e71820e8186a21e91820e81820e9186a21ea1820e91820ea186a21eb1820ea1820eb186a21ec1820eb1820ec186a21ed1820ec" - "1820ed186a21ee1820ed1820ee186a21ef1820ee1820ef186a21f01820ef1820f0186a21f11820f01820f1186a21f21820f11820f2186a21f3" - "1820f21820f3186a21f41820f31820f4186a21f51820f41820f5186a21f61820f51820f6186a21f71820f61820f7186a21f81820f71820f818" - "6a21f91820f81820f9186a21fa1820f91820fa186a21fb1820fa1820fb186a21fc1820fb1820fc186a21fd1820fc1820fd186a21fe1820fd18" - "20fe186a21ff1820fe1820ff186a21801920ff182080196a2181192080192081196a2182192081192082196a2183192082192083196a218419" - "2083192084196a2185192084192085196a2186192085192086196a2187192086192087196a2188192087192088196a2189192088192089196a" - "218a19208919208a196a218b19208a19208b196a218c19208b19208c196a218d19208c19208d196a218e19208d19208e196a218f19208e1920" - "8f196a219019208f192090196a2191192090192091196a2192192091192092196a2193192092192093196a2194192093192094196a21951920" - "94192095196a2196192095192096196a2197192096192097196a2198192097192098196a2199192098192099196a219a19209919209a196a21" - "9b19209a19209b196a219c19209b19209c196a219d19209c19209d196a219e19209d19209e196a219f19209e19209f196a21a019209f1920a0" - "196a21a11920a01920a1196a21a21920a11920a2196a21a31920a21920a3196a21a41920a31920a4196a21a51920a41920a5196a21a61920a5" - "1920a6196a21a71920a61920a7196a21a81920a71920a8196a21a91920a81920a9196a21aa1920a91920aa196a21ab1920aa1920ab196a21ac" - "1920ab1920ac196a21ad1920ac1920ad196a21ae1920ad1920ae196a21af1920ae1920af196a21b01920af1920b0196a21b11920b01920b119" - "6a21b21920b11920b2196a21b31920b21920b3196a21b41920b31920b4196a21b51920b41920b5196a21b61920b51920b6196a21b71920b619" - "20b7196a21b81920b71920b8196a21b91920b81920b9196a21ba1920b91920ba196a21bb1920ba1920bb196a21bc1920bb1920bc196a21bd19" - "20bc1920bd196a21be1920bd1920be196a21bf1920be1920bf196a21c01920bf1920c0196a21c11920c01920c1196a21c21920c11920c2196a" - "21c31920c21920c3196a21c41920c31920c4196a21c51920c41920c5196a21c61920c51920c6196a21c71920c61920c7196a21c81920c71920" - "c8196a21c91920c81920c9196a21ca1920c91920ca196a21cb1920ca1920cb196a21cc1920cb1920cc196a21cd1920cc1920cd196a21ce1920" - "cd1920ce196a21cf1920ce1920cf196a21d01920cf1920d0196a21d11920d01920d1196a21d21920d11920d2196a21d31920d21920d3196a21" - "d41920d31920d4196a21d51920d41920d5196a21d61920d51920d6196a21d71920d61920d7196a21d81920d71920d8196a21d91920d81920d9" - "196a21da1920d91920da196a21db1920da1920db196a21dc1920db1920dc196a21dd1920dc1920dd196a21de1920dd1920de196a21df1920de" - "1920df196a21e01920df1920e0196a21e11920e01920e1196a21e21920e11920e2196a21e31920e21920e3196a21e41920e31920e4196a21e5" - "1920e41920e5196a21e61920e51920e6196a21e71920e61920e7196a21e81920e71920e8196a21e91920e81920e9196a21ea1920e91920ea19" - "6a21eb1920ea1920eb196a21ec1920eb1920ec196a21ed1920ec1920ed196a21ee1920ed1920ee196a21ef1920ee1920ef196a21f01920ef19" - "20f0196a21f11920f01920f1196a21f21920f11920f2196a21f31920f21920f3196a21f41920f31920f4196a21f51920f41920f5196a21f619" - "20f51920f6196a21f71920f61920f7196a21f81920f71920f8196a21f91920f81920f9196a21fa1920f91920fa196a21fb1920fa1920fb196a" - "21fc1920fb1920fc196a21fd1920fc1920fd196a21fe1920fd1920fe196a21ff1920fe1920ff196a21801a20ff1920801a6a21811a20801a20" - "811a6a21821a20811a20821a6a21831a20821a20831a6a21841a20831a20841a6a21851a20841a20851a6a21861a20851a20861a6a21871a20" - "861a20871a6a21881a20871a20881a6a21891a20881a20891a6a218a1a20891a208a1a6a218b1a208a1a208b1a6a218c1a208b1a208c1a6a21" - "8d1a208c1a208d1a6a218e1a208d1a208e1a6a218f1a208e1a208f1a6a21901a208f1a20901a6a21911a20901a20911a6a21921a20911a2092" - "1a6a21931a20921a20931a6a21941a20931a20941a6a21951a20941a20951a6a21961a20951a20961a6a21971a20961a20971a6a21981a2097" - "1a20981a6a21991a20981a20991a6a219a1a20991a209a1a6a219b1a209a1a209b1a6a219c1a209b1a209c1a6a219d1a209c1a209d1a6a219e" - "1a209d1a209e1a6a219f1a209e1a209f1a6a21a01a209f1a20a01a6a21a11a20a01a20a11a6a21a21a20a11a20a21a6a21a31a20a21a20a31a" - "6a21a41a20a31a20a41a6a21a51a20a41a20a51a6a21a61a20a51a20a61a6a21a71a20a61a20a71a6a21a81a20a71a20a81a6a21a91a20a81a" - "20a91a6a21aa1a20a91a20aa1a6a21ab1a20aa1a20ab1a6a21ac1a20ab1a20ac1a6a21ad1a20ac1a20ad1a6a21ae1a20ad1a20ae1a6a21af1a" - "20ae1a20af1a6a21b01a20af1a20b01a6a21b11a20b01a20b11a6a21b21a20b11a20b21a6a21b31a20b21a20b31a6a21b41a20b31a20b41a6a" - "21b51a20b41a20b51a6a21b61a20b51a20b61a6a21b71a20b61a20b71a6a21b81a20b71a20b81a6a21b91a20b81a20b91a6a21ba1a20b91a20" - "ba1a6a21bb1a20ba1a20bb1a6a21bc1a20bb1a20bc1a6a21bd1a20bc1a20bd1a6a21be1a20bd1a20be1a6a21bf1a20be1a20bf1a6a21c01a20" - "bf1a20c01a6a21c11a20c01a20c11a6a21c21a20c11a20c21a6a21c31a20c21a20c31a6a21c41a20c31a20c41a6a21c51a20c41a20c51a6a21" - "c61a20c51a20c61a6a21c71a20c61a20c71a6a21c81a20c71a20c81a6a21c91a20c81a20c91a6a21ca1a20c91a20ca1a6a21cb1a20ca1a20cb" - "1a6a21cc1a20cb1a20cc1a6a21cd1a20cc1a20cd1a6a21ce1a20cd1a20ce1a6a21cf1a20ce1a20cf1a6a21d01a20cf1a20d01a6a21d11a20d0" - "1a20d11a6a21d21a20d11a20d21a6a21d31a20d21a20d31a6a21d41a20d31a20d41a6a21d51a20d41a20d51a6a21d61a20d51a20d61a6a21d7" - "1a20d61a20d71a6a21d81a20d71a20d81a6a21d91a20d81a20d91a6a21da1a20d91a20da1a6a21db1a20da1a20db1a6a21dc1a20db1a20dc1a" - "6a21dd1a20dc1a20dd1a6a21de1a20dd1a20de1a6a21df1a20de1a20df1a6a21e01a20df1a20e01a6a21e11a20e01a20e11a6a21e21a20e11a" - "20e21a6a21e31a20e21a20e31a6a21e41a20e31a20e41a6a21e51a20e41a20e51a6a21e61a20e51a20e61a6a21e71a20e61a20e71a6a21e81a" - "20e71a20e81a6a21e91a20e81a20e91a6a21ea1a20e91a20ea1a6a21eb1a20ea1a20eb1a6a21ec1a20eb1a20ec1a6a21ed1a20ec1a20ed1a6a" - "21ee1a20ed1a20ee1a6a21ef1a20ee1a20ef1a6a21f01a20ef1a20f01a6a21f11a20f01a20f11a6a21f21a20f11a20f21a6a21f31a20f21a20" - "f31a6a21f41a20f31a20f41a6a21f51a20f41a20f51a6a21f61a20f51a20f61a6a21f71a20f61a20f71a6a21f81a20f71a20f81a6a21f91a20" - "f81a20f91a6a21fa1a20f91a20fa1a6a21fb1a20fa1a20fb1a6a21fc1a20fb1a20fc1a6a21fd1a20fc1a20fd1a6a21fe1a20fd1a20fe1a6a21" - "ff1a20fe1a20ff1a6a21801b20ff1a20801b6a21811b20801b20811b6a21821b20811b20821b6a21831b20821b20831b6a21841b20831b2084" - "1b6a21851b20841b20851b6a21861b20851b20861b6a21871b20861b20871b6a21881b20871b20881b6a21891b20881b20891b6a218a1b2089" - "1b208a1b6a218b1b208a1b208b1b6a218c1b208b1b208c1b6a218d1b208c1b208d1b6a218e1b208d1b208e1b6a218f1b208e1b208f1b6a2190" - "1b208f1b20901b6a21911b20901b20911b6a21921b20911b20921b6a21931b20921b20931b6a21941b20931b20941b6a21951b20941b20951b" - "6a21961b20951b20961b6a21971b20961b20971b6a21981b20971b20981b6a21991b20981b20991b6a219a1b20991b209a1b6a219b1b209a1b" - "209b1b6a219c1b209b1b209c1b6a219d1b209c1b209d1b6a219e1b209d1b209e1b6a219f1b209e1b209f1b6a21a01b209f1b20a01b6a21a11b" - "20a01b20a11b6a21a21b20a11b20a21b6a21a31b20a21b20a31b6a21a41b20a31b20a41b6a21a51b20a41b20a51b6a21a61b20a51b20a61b6a" - "21a71b20a61b20a71b6a21a81b20a71b20a81b6a21a91b20a81b20a91b6a21aa1b20a91b20aa1b6a21ab1b20aa1b20ab1b6a21ac1b20ab1b20" - "ac1b6a21ad1b20ac1b20ad1b6a21ae1b20ad1b20ae1b6a21af1b20ae1b20af1b6a21b01b20af1b20b01b6a21b11b20b01b20b11b6a21b21b20" - "b11b20b21b6a21b31b20b21b20b31b6a21b41b20b31b20b41b6a21b51b20b41b20b51b6a21b61b20b51b20b61b6a21b71b20b61b20b71b6a21" - "b81b20b71b20b81b6a21b91b20b81b20b91b6a21ba1b20b91b20ba1b6a21bb1b20ba1b20bb1b6a21bc1b20bb1b20bc1b6a21bd1b20bc1b20bd" - "1b6a21be1b20bd1b20be1b6a21bf1b20be1b20bf1b6a21c01b20bf1b20c01b6a21c11b20c01b20c11b6a21c21b20c11b20c21b6a21c31b20c2" - "1b20c31b6a21c41b20c31b20c41b6a21c51b20c41b20c51b6a21c61b20c51b20c61b6a21c71b20c61b20c71b6a21c81b20c71b20c81b6a21c9" - "1b20c81b20c91b6a21ca1b20c91b20ca1b6a21cb1b20ca1b20cb1b6a21cc1b20cb1b20cc1b6a21cd1b20cc1b20cd1b6a21ce1b20cd1b20ce1b" - "6a21cf1b20ce1b20cf1b6a21d01b20cf1b20d01b6a21d11b20d01b20d11b6a21d21b20d11b20d21b6a21d31b20d21b20d31b6a21d41b20d31b" - "20d41b6a21d51b20d41b20d51b6a21d61b20d51b20d61b6a21d71b20d61b20d71b6a21d81b20d71b20d81b6a21d91b20d81b20d91b6a21da1b" - "20d91b20da1b6a21db1b20da1b20db1b6a21dc1b20db1b20dc1b6a21dd1b20dc1b20dd1b6a21de1b20dd1b20de1b6a21df1b20de1b20df1b6a" - "21e01b20df1b20e01b6a21e11b20e01b20e11b6a21e21b20e11b20e21b6a21e31b20e21b20e31b6a21e41b20e31b20e41b6a21e51b20e41b20" - "e51b6a21e61b20e51b20e61b6a21e71b20e61b20e71b6a21e81b20e71b20e81b6a21e91b20e81b20e91b6a21ea1b20e91b20ea1b6a21eb1b20" - "ea1b20eb1b6a21ec1b20eb1b20ec1b6a21ed1b20ec1b20ed1b6a21ee1b20ed1b20ee1b6a21ef1b20ee1b20ef1b6a21f01b20ef1b20f01b6a21" - "f11b20f01b20f11b6a21f21b20f11b20f21b6a21f31b20f21b20f31b6a21f41b20f31b20f41b6a21f51b20f41b20f51b6a21f61b20f51b20f6" - "1b6a21f71b20f61b20f71b6a21f81b20f71b20f81b6a21f91b20f81b20f91b6a21fa1b20f91b20fa1b6a21fb1b20fa1b20fb1b6a21fc1b20fb" - "1b20fc1b6a21fd1b20fc1b20fd1b6a21fe1b20fd1b20fe1b6a21ff1b20fe1b20ff1b6a21801c20ff1b20801c6a21811c20801c20811c6a2182" - "1c20811c20821c6a21831c20821c20831c6a21841c20831c20841c6a21851c20841c20851c6a21861c20851c20861c6a21871c20861c20871c" - "6a21881c20871c20881c6a21891c20881c20891c6a218a1c20891c208a1c6a218b1c208a1c208b1c6a218c1c208b1c208c1c6a218d1c208c1c" - "208d1c6a218e1c208d1c208e1c6a218f1c208e1c208f1c6a21901c208f1c20901c6a21911c20901c20911c6a21921c20911c20921c6a21931c" - "20921c20931c6a21941c20931c20941c6a21951c20941c20951c6a21961c20951c20961c6a21971c20961c20971c6a21981c20971c20981c6a" - "21991c20981c20991c6a219a1c20991c209a1c6a219b1c209a1c209b1c6a219c1c209b1c209c1c6a219d1c209c1c209d1c6a219e1c209d1c20" - "9e1c6a219f1c209e1c209f1c6a21a01c209f1c20a01c6a21a11c20a01c20a11c6a21a21c20a11c20a21c6a21a31c20a21c20a31c6a21a41c20" - "a31c20a41c6a21a51c20a41c20a51c6a21a61c20a51c20a61c6a21a71c20a61c20a71c6a21a81c20a71c20a81c6a21a91c20a81c20a91c6a21" - "aa1c20a91c20aa1c6a21ab1c20aa1c20ab1c6a21ac1c20ab1c20ac1c6a21ad1c20ac1c20ad1c6a21ae1c20ad1c20ae1c6a21af1c20ae1c20af" - "1c6a21b01c20af1c20b01c6a21b11c20b01c20b11c6a21b21c20b11c20b21c6a21b31c20b21c20b31c6a21b41c20b31c20b41c6a21b51c20b4" - "1c20b51c6a21b61c20b51c20b61c6a21b71c20b61c20b71c6a21b81c20b71c20b81c6a21b91c20b81c20b91c6a21ba1c20b91c20ba1c6a21bb" - "1c20ba1c20bb1c6a21bc1c20bb1c20bc1c6a21bd1c20bc1c20bd1c6a21be1c20bd1c20be1c6a21bf1c20be1c20bf1c6a21c01c20bf1c20c01c" - "6a21c11c20c01c20c11c6a21c21c20c11c20c21c6a21c31c20c21c20c31c6a21c41c20c31c20c41c6a21c51c20c41c20c51c6a21c61c20c51c" - "20c61c6a21c71c20c61c20c71c6a21c81c20c71c20c81c6a21c91c20c81c20c91c6a21ca1c20c91c20ca1c6a21cb1c20ca1c20cb1c6a21cc1c" - "20cb1c20cc1c6a21cd1c20cc1c20cd1c6a21ce1c20cd1c20ce1c6a21cf1c20ce1c20cf1c6a21d01c20cf1c20d01c6a21d11c20d01c20d11c6a" - "21d21c20d11c20d21c6a21d31c20d21c20d31c6a21d41c20d31c20d41c6a21d51c20d41c20d51c6a21d61c20d51c20d61c6a21d71c20d61c20" - "d71c6a21d81c20d71c20d81c6a21d91c20d81c20d91c6a21da1c20d91c20da1c6a21db1c20da1c20db1c6a21dc1c20db1c20dc1c6a21dd1c20" - "dc1c20dd1c6a21de1c20dd1c20de1c6a21df1c20de1c20df1c6a21e01c20df1c20e01c6a21e11c20e01c20e11c6a21e21c20e11c20e21c6a21" - "e31c20e21c20e31c6a21e41c20e31c20e41c6a21e51c20e41c20e51c6a21e61c20e51c20e61c6a21e71c20e61c20e71c6a21e81c20e71c20e8" - "1c6a21e91c20e81c20e91c6a21ea1c20e91c20ea1c6a21eb1c20ea1c20eb1c6a21ec1c20eb1c20ec1c6a21ed1c20ec1c20ed1c6a21ee1c20ed" - "1c20ee1c6a21ef1c20ee1c20ef1c6a21f01c20ef1c20f01c6a21f11c20f01c20f11c6a21f21c20f11c20f21c6a21f31c20f21c20f31c6a21f4" - "1c20f31c20f41c6a21f51c20f41c20f51c6a21f61c20f51c20f61c6a21f71c20f61c20f71c6a21f81c20f71c20f81c6a21f91c20f81c20f91c" - "6a21fa1c20f91c20fa1c6a21fb1c20fa1c20fb1c6a21fc1c20fb1c20fc1c6a21fd1c20fc1c20fd1c6a21fe1c20fd1c20fe1c6a21ff1c20fe1c" - "20ff1c6a21801d20ff1c20801d6a21811d20801d20811d6a21821d20811d20821d6a21831d20821d20831d6a21841d20831d20841d6a21851d" - "20841d20851d6a21861d20851d20861d6a21871d20861d20871d6a21881d20871d20881d6a21891d20881d20891d6a218a1d20891d208a1d6a" - "218b1d208a1d208b1d6a218c1d208b1d208c1d6a218d1d208c1d208d1d6a218e1d208d1d208e1d6a218f1d208e1d208f1d6a21901d208f1d20" - "901d6a21911d20901d20911d6a21921d20911d20921d6a21931d20921d20931d6a21941d20931d20941d6a21951d20941d20951d6a21961d20" - "951d20961d6a21971d20961d20971d6a21981d20971d20981d6a21991d20981d20991d6a219a1d20991d209a1d6a219b1d209a1d209b1d6a21" - "9c1d209b1d209c1d6a219d1d209c1d209d1d6a219e1d209d1d209e1d6a219f1d209e1d209f1d6a21a01d209f1d20a01d6a21a11d20a01d20a1" - "1d6a21a21d20a11d20a21d6a21a31d20a21d20a31d6a21a41d20a31d20a41d6a21a51d20a41d20a51d6a21a61d20a51d20a61d6a21a71d20a6" - "1d20a71d6a21a81d20a71d20a81d6a21a91d20a81d20a91d6a21aa1d20a91d20aa1d6a21ab1d20aa1d20ab1d6a21ac1d20ab1d20ac1d6a21ad" - "1d20ac1d20ad1d6a21ae1d20ad1d20ae1d6a21af1d20ae1d20af1d6a21b01d20af1d20b01d6a21b11d20b01d20b11d6a21b21d20b11d20b21d" - "6a21b31d20b21d20b31d6a21b41d20b31d20b41d6a21b51d20b41d20b51d6a21b61d20b51d20b61d6a21b71d20b61d20b71d6a21b81d20b71d" - "20b81d6a21b91d20b81d20b91d6a21ba1d20b91d20ba1d6a21bb1d20ba1d20bb1d6a21bc1d20bb1d20bc1d6a21bd1d20bc1d20bd1d6a21be1d" - "20bd1d20be1d6a21bf1d20be1d20bf1d6a21c01d20bf1d20c01d6a21c11d20c01d20c11d6a21c21d20c11d20c21d6a21c31d20c21d20c31d6a" - "21c41d20c31d20c41d6a21c51d20c41d20c51d6a21c61d20c51d20c61d6a21c71d20c61d20c71d6a21c81d20c71d20c81d6a21c91d20c81d20" - "c91d6a21ca1d20c91d20ca1d6a21cb1d20ca1d20cb1d6a21cc1d20cb1d20cc1d6a21cd1d20cc1d20cd1d6a21ce1d20cd1d20ce1d6a21cf1d20" - "ce1d20cf1d6a21d01d20cf1d20d01d6a21d11d20d01d20d11d6a21d21d20d11d20d21d6a21d31d20d21d20d31d6a21d41d20d31d20d41d6a21" - "d51d20d41d20d51d6a21d61d20d51d20d61d6a21d71d20d61d20d71d6a21d81d20d71d20d81d6a21d91d20d81d20d91d6a21da1d20d91d20da" - "1d6a21db1d20da1d20db1d6a21dc1d20db1d20dc1d6a21dd1d20dc1d20dd1d6a21de1d20dd1d20de1d6a21df1d20de1d20df1d6a21e01d20df" - "1d20e01d6a21e11d20e01d20e11d6a21e21d20e11d20e21d6a21e31d20e21d20e31d6a21e41d20e31d20e41d6a21e51d20e41d20e51d6a21e6" - "1d20e51d20e61d6a21e71d20e61d20e71d6a21e81d20e71d20e81d6a21e91d20e81d20e91d6a21ea1d20e91d20ea1d6a21eb1d20ea1d20eb1d" - "6a21ec1d20eb1d20ec1d6a21ed1d20ec1d20ed1d6a21ee1d20ed1d20ee1d6a21ef1d20ee1d20ef1d6a21f01d20ef1d20f01d6a21f11d20f01d" - "20f11d6a21f21d20f11d20f21d6a21f31d20f21d20f31d6a21f41d20f31d20f41d6a21f51d20f41d20f51d6a21f61d20f51d20f61d6a21f71d" - "20f61d20f71d6a21f81d20f71d20f81d6a21f91d20f81d20f91d6a21fa1d20f91d20fa1d6a21fb1d20fa1d20fb1d6a21fc1d20fb1d20fc1d6a" - "21fd1d20fc1d20fd1d6a21fe1d20fd1d20fe1d6a21ff1d20fe1d20ff1d6a21801e20ff1d20801e6a21811e20801e20811e6a21821e20811e20" - "821e6a21831e20821e20831e6a21841e20831e20841e6a21851e20841e20851e6a21861e20851e20861e6a21871e20861e20871e6a21881e20" - "871e20881e6a21891e20881e20891e6a218a1e20891e208a1e6a218b1e208a1e208b1e6a218c1e208b1e208c1e6a218d1e208c1e208d1e6a21" - "8e1e208d1e208e1e6a218f1e208e1e208f1e6a21901e208f1e20901e6a21911e20901e20911e6a21921e20911e20921e6a21931e20921e2093" - "1e6a21941e20931e20941e6a21951e20941e20951e6a21961e20951e20961e6a21971e20961e20971e6a21981e20971e20981e6a21991e2098" - "1e20991e6a219a1e20991e209a1e6a219b1e209a1e209b1e6a219c1e209b1e209c1e6a219d1e209c1e209d1e6a219e1e209d1e209e1e6a219f" - "1e209e1e209f1e6a21a01e209f1e20a01e6a21a11e20a01e20a11e6a21a21e20a11e20a21e6a21a31e20a21e20a31e6a21a41e20a31e20a41e" - "6a21a51e20a41e20a51e6a21a61e20a51e20a61e6a21a71e20a61e20a71e6a21a81e20a71e20a81e6a21a91e20a81e20a91e6a21aa1e20a91e" - "20aa1e6a21ab1e20aa1e20ab1e6a21ac1e20ab1e20ac1e6a21ad1e20ac1e20ad1e6a21ae1e20ad1e20ae1e6a21af1e20ae1e20af1e6a21b01e" - "20af1e20b01e6a21b11e20b01e20b11e6a21b21e20b11e20b21e6a21b31e20b21e20b31e6a21b41e20b31e20b41e6a21b51e20b41e20b51e6a" - "21b61e20b51e20b61e6a21b71e20b61e20b71e6a21b81e20b71e20b81e6a21b91e20b81e20b91e6a21ba1e20b91e20ba1e6a21bb1e20ba1e20" - "bb1e6a21bc1e20bb1e20bc1e6a21bd1e20bc1e20bd1e6a21be1e20bd1e20be1e6a21bf1e20be1e20bf1e6a21c01e20bf1e20c01e6a21c11e20" - "c01e20c11e6a21c21e20c11e20c21e6a21c31e20c21e20c31e6a21c41e20c31e20c41e6a21c51e20c41e20c51e6a21c61e20c51e20c61e6a21" - "c71e20c61e20c71e6a21c81e20c71e20c81e6a21c91e20c81e20c91e6a21ca1e20c91e20ca1e6a21cb1e20ca1e20cb1e6a21cc1e20cb1e20cc" - "1e6a21cd1e20cc1e20cd1e6a21ce1e20cd1e20ce1e6a21cf1e20ce1e20cf1e6a21d01e20cf1e20d01e6a21d11e20d01e20d11e6a21d21e20d1" - "1e20d21e6a21d31e20d21e20d31e6a21d41e20d31e20d41e6a21d51e20d41e20d51e6a21d61e20d51e20d61e6a21d71e20d61e20d71e6a21d8" - "1e20d71e20d81e6a21d91e20d81e20d91e6a21da1e20d91e20da1e6a21db1e20da1e20db1e6a21dc1e20db1e20dc1e6a21dd1e20dc1e20dd1e" - "6a21de1e20dd1e20de1e6a21df1e20de1e20df1e6a21e01e20df1e20e01e6a21e11e20e01e20e11e6a21e21e20e11e20e21e6a21e31e20e21e" - "20e31e6a21e41e20e31e20e41e6a21e51e20e41e20e51e6a21e61e20e51e20e61e6a21e71e20e61e20e71e6a21e81e20e71e20e81e6a21e91e" - "20e81e20e91e6a21ea1e20e91e20ea1e6a21eb1e20ea1e20eb1e6a21ec1e20eb1e20ec1e6a21ed1e20ec1e20ed1e6a21ee1e20ed1e20ee1e6a" - "21ef1e20ee1e20ef1e6a21f01e20ef1e20f01e6a21f11e20f01e20f11e6a21f21e20f11e20f21e6a21f31e20f21e20f31e6a21f41e20f31e20" - "f41e6a21f51e20f41e20f51e6a21f61e20f51e20f61e6a21f71e20f61e20f71e6a21f81e20f71e20f81e6a21f91e20f81e20f91e6a21fa1e20" - "f91e20fa1e6a21fb1e20fa1e20fb1e6a21fc1e20fb1e20fc1e6a21fd1e20fc1e20fd1e6a21fe1e20fd1e20fe1e6a21ff1e20fe1e20ff1e6a21" - "801f20ff1e20801f6a21811f20801f20811f6a21821f20811f20821f6a21831f20821f20831f6a21841f20831f20841f6a21851f20841f2085" - "1f6a21861f20851f20861f6a21871f20861f20871f6a21881f20871f20881f6a21891f20881f20891f6a218a1f20891f208a1f6a218b1f208a" - "1f208b1f6a218c1f208b1f208c1f6a218d1f208c1f208d1f6a218e1f208d1f208e1f6a218f1f208e1f208f1f6a21901f208f1f20901f6a2191" - "1f20901f20911f6a21921f20911f20921f6a21931f20921f20931f6a21941f20931f20941f6a21951f20941f20951f6a21961f20951f20961f" - "6a21971f20961f20971f6a21981f20971f20981f6a21991f20981f20991f6a219a1f20991f209a1f6a219b1f209a1f209b1f6a219c1f209b1f" - "209c1f6a219d1f209c1f209d1f6a219e1f209d1f209e1f6a219f1f209e1f209f1f6a21a01f209f1f20a01f6a21a11f20a01f20a11f6a21a21f" - "20a11f20a21f6a21a31f20a21f20a31f6a21a41f20a31f20a41f6a21a51f20a41f20a51f6a21a61f20a51f20a61f6a21a71f20a61f20a71f6a" - "21a81f20a71f20a81f6a21a91f20a81f20a91f6a21aa1f20a91f20aa1f6a21ab1f20aa1f20ab1f6a21ac1f20ab1f20ac1f6a21ad1f20ac1f20" - "ad1f6a21ae1f20ad1f20ae1f6a21af1f20ae1f20af1f6a21b01f20af1f20b01f6a21b11f20b01f20b11f6a21b21f20b11f20b21f6a21b31f20" - "b21f20b31f6a21b41f20b31f20b41f6a21b51f20b41f20b51f6a21b61f20b51f20b61f6a21b71f20b61f20b71f6a21b81f20b71f20b81f6a21" - "b91f20b81f20b91f6a21ba1f20b91f20ba1f6a21bb1f20ba1f20bb1f6a21bc1f20bb1f20bc1f6a21bd1f20bc1f20bd1f6a21be1f20bd1f20be" - "1f6a21bf1f20be1f20bf1f6a21c01f20bf1f20c01f6a21c11f20c01f20c11f6a21c21f20c11f20c21f6a21c31f20c21f20c31f6a21c41f20c3" - "1f20c41f6a21c51f20c41f20c51f6a21c61f20c51f20c61f6a21c71f20c61f20c71f6a21c81f20c71f20c81f6a21c91f20c81f20c91f6a21ca" - "1f20c91f20ca1f6a21cb1f20ca1f20cb1f6a21cc1f20cb1f20cc1f6a21cd1f20cc1f20cd1f6a21ce1f20cd1f20ce1f6a21cf1f20ce1f20cf1f" - "6a21d01f20cf1f20d01f6a21d11f20d01f20d11f6a21d21f20d11f20d21f6a21d31f20d21f20d31f6a21d41f20d31f20d41f6a21d51f20d41f" - "20d51f6a21d61f20d51f20d61f6a21d71f20d61f20d71f6a21d81f20d71f20d81f6a21d91f20d81f20d91f6a21da1f20d91f20da1f6a21db1f" - "20da1f20db1f6a21dc1f20db1f20dc1f6a21dd1f20dc1f20dd1f6a21de1f20dd1f20de1f6a21df1f20de1f20df1f6a21e01f20df1f20e01f6a" - "21e11f20e01f20e11f6a21e21f20e11f20e21f6a21e31f20e21f20e31f6a21e41f20e31f20e41f6a21e51f20e41f20e51f6a21e61f20e51f20" - "e61f6a21e71f20e61f20e71f6a21e81f20e71f20e81f6a21e91f20e81f20e91f6a21ea1f20e91f20ea1f6a21eb1f20ea1f20eb1f6a21ec1f20" - "eb1f20ec1f6a21ed1f20ec1f20ed1f6a21ee1f20ed1f20ee1f6a21ef1f20ee1f20ef1f6a21f01f20ef1f20f01f6a21f11f20f01f20f11f6a21" - "f21f20f11f20f21f6a21f31f20f21f20f31f6a21f41f20f31f20f41f6a21f51f20f41f20f51f6a21f61f20f51f20f61f6a21f71f20f61f20f7" - "1f6a21f81f20f71f20f81f6a21f91f20f81f20f91f6a21fa1f20f91f20fa1f6a21fb1f20fa1f20fb1f6a21fc1f20fb1f20fc1f6a21fd1f20fc" - "1f20fd1f6a21fe1f20fd1f20fe1f6a21ff1f20fe1f20ff1f6a21802020ff1f2080206a2181202080202081206a2182202081202082206a2183" - "202082202083206a2184202083202084206a2185202084202085206a2186202085202086206a2187202086202087206a218820208720208820" - "6a2189202088202089206a218a20208920208a206a218b20208a20208b206a218c20208b20208c206a218d20208c20208d206a218e20208d20" - "208e206a218f20208e20208f206a219020208f202090206a2191202090202091206a2192202091202092206a2193202092202093206a219420" - "2093202094206a2195202094202095206a2196202095202096206a2197202096202097206a2198202097202098206a2199202098202099206a" - "219a20209920209a206a219b20209a20209b206a219c20209b20209c206a219d20209c20209d206a219e20209d20209e206a219f20209e2020" - "9f206a21a020209f2020a0206a21a12020a02020a1206a21a22020a12020a2206a21a32020a22020a3206a21a42020a32020a4206a21a52020" - "a42020a5206a21a62020a52020a6206a21a72020a62020a7206a21a82020a72020a8206a21a92020a82020a9206a21aa2020a92020aa206a21" - "ab2020aa2020ab206a21ac2020ab2020ac206a21ad2020ac2020ad206a21ae2020ad2020ae206a21af2020ae2020af206a21b02020af2020b0" - "206a21b12020b02020b1206a21b22020b12020b2206a21b32020b22020b3206a21b42020b32020b4206a21b52020b42020b5206a21b62020b5" - "2020b6206a21b72020b62020b7206a21b82020b72020b8206a21b92020b82020b9206a21ba2020b92020ba206a21bb2020ba2020bb206a21bc" - "2020bb2020bc206a21bd2020bc2020bd206a21be2020bd2020be206a21bf2020be2020bf206a21c02020bf2020c0206a21c12020c02020c120" - "6a21c22020c12020c2206a21c32020c22020c3206a21c42020c32020c4206a21c52020c42020c5206a21c62020c52020c6206a21c72020c620" - "20c7206a21c82020c72020c8206a21c92020c82020c9206a21ca2020c92020ca206a21cb2020ca2020cb206a21cc2020cb2020cc206a21cd20" - "20cc2020cd206a21ce2020cd2020ce206a21cf2020ce2020cf206a21d02020cf2020d0206a21d12020d02020d1206a21d22020d12020d2206a" - "21d32020d22020d3206a21d42020d32020d4206a21d52020d42020d5206a21d62020d52020d6206a21d72020d62020d7206a21d82020d72020" - "d8206a21d92020d82020d9206a21da2020d92020da206a21db2020da2020db206a21dc2020db2020dc206a21dd2020dc2020dd206a21de2020" - "dd2020de206a21df2020de2020df206a21e02020df2020e0206a21e12020e02020e1206a21e22020e12020e2206a21e32020e22020e3206a21" - "e42020e32020e4206a21e52020e42020e5206a21e62020e52020e6206a21e72020e62020e7206a21e82020e72020e8206a21e92020e82020e9" - "206a21ea2020e92020ea206a21eb2020ea2020eb206a21ec2020eb2020ec206a21ed2020ec2020ed206a21ee2020ed2020ee206a21ef2020ee" - "2020ef206a21f02020ef2020f0206a21f12020f02020f1206a21f22020f12020f2206a21f32020f22020f3206a21f42020f32020f4206a21f5" - "2020f42020f5206a21f62020f52020f6206a21f72020f62020f7206a21f82020f72020f8206a21f92020f82020f9206a21fa2020f92020fa20" - "6a21fb2020fa2020fb206a21fc2020fb2020fc206a21fd2020fc2020fd206a21fe2020fd2020fe206a21ff2020fe2020ff206a21802120ff20" - "2080216a2181212080212081216a2182212081212082216a2183212082212083216a2184212083212084216a2185212084212085216a218621" - "2085212086216a2187212086212087216a2188212087212088216a2189212088212089216a218a21208921208a216a218b21208a21208b216a" - "218c21208b21208c216a218d21208c21208d216a218e21208d21208e216a218f21208e21208f216a219021208f212090216a21912120902120" - "91216a2192212091212092216a2193212092212093216a2194212093212094216a2195212094212095216a2196212095212096216a21972120" - "96212097216a2198212097212098216a2199212098212099216a219a21209921209a216a219b21209a21209b216a219c21209b21209c216a21" - "9d21209c21209d216a219e21209d21209e216a219f21209e21209f216a21a021209f2120a0216a21a12120a02120a1216a21a22120a12120a2" - "216a21a32120a22120a3216a21a42120a32120a4216a21a52120a42120a5216a21a62120a52120a6216a21a72120a62120a7216a21a82120a7" - "2120a8216a21a92120a82120a9216a21aa2120a92120aa216a21ab2120aa2120ab216a21ac2120ab2120ac216a21ad2120ac2120ad216a21ae" - "2120ad2120ae216a21af2120ae2120af216a21b02120af2120b0216a21b12120b02120b1216a21b22120b12120b2216a21b32120b22120b321" - "6a21b42120b32120b4216a21b52120b42120b5216a21b62120b52120b6216a21b72120b62120b7216a21b82120b72120b8216a21b92120b821" - "20b9216a21ba2120b92120ba216a21bb2120ba2120bb216a21bc2120bb2120bc216a21bd2120bc2120bd216a21be2120bd2120be216a21bf21" - "20be2120bf216a21c02120bf2120c0216a21c12120c02120c1216a21c22120c12120c2216a21c32120c22120c3216a21c42120c32120c4216a" - "21c52120c42120c5216a21c62120c52120c6216a21c72120c62120c7216a21c82120c72120c8216a21c92120c82120c9216a21ca2120c92120" - "ca216a21cb2120ca2120cb216a21cc2120cb2120cc216a21cd2120cc2120cd216a21ce2120cd2120ce216a21cf2120ce2120cf216a21d02120" - "cf2120d0216a21d12120d02120d1216a21d22120d12120d2216a21d32120d22120d3216a21d42120d32120d4216a21d52120d42120d5216a21" - "d62120d52120d6216a21d72120d62120d7216a21d82120d72120d8216a21d92120d82120d9216a21da2120d92120da216a21db2120da2120db" - "216a21dc2120db2120dc216a21dd2120dc2120dd216a21de2120dd2120de216a21df2120de2120df216a21e02120df2120e0216a21e12120e0" - "2120e1216a21e22120e12120e2216a21e32120e22120e3216a21e42120e32120e4216a21e52120e42120e5216a21e62120e52120e6216a21e7" - "2120e62120e7216a21e82120e72120e8216a21e92120e82120e9216a21ea2120e92120ea216a21eb2120ea2120eb216a21ec2120eb2120ec21" - "6a21ed2120ec2120ed216a21ee2120ed2120ee216a21ef2120ee2120ef216a21f02120ef2120f0216a21f12120f02120f1216a21f22120f121" - "20f2216a21f32120f22120f3216a21f42120f32120f4216a21f52120f42120f5216a21f62120f52120f6216a21f72120f62120f7216a21f821" - "20f72120f8216a21f92120f82120f9216a21fa2120f92120fa216a21fb2120fa2120fb216a21fc2120fb2120fc216a21fd2120fc2120fd216a" - "21fe2120fd2120fe216a21ff2120fe2120ff216a21802220ff212080226a2181222080222081226a2182222081222082226a21832220822220" - "83226a2184222083222084226a2185222084222085226a2186222085222086226a2187222086222087226a2188222087222088226a21892220" - "88222089226a218a22208922208a226a218b22208a22208b226a218c22208b22208c226a218d22208c22208d226a218e22208d22208e226a21" - "8f22208e22208f226a219022208f222090226a2191222090222091226a2192222091222092226a2193222092222093226a2194222093222094" - "226a2195222094222095226a2196222095222096226a2197222096222097226a2198222097222098226a2199222098222099226a219a222099" - "22209a226a219b22209a22209b226a219c22209b22209c226a219d22209c22209d226a219e22209d22209e226a219f22209e22209f226a21a0" - "22209f2220a0226a21a12220a02220a1226a21a22220a12220a2226a21a32220a22220a3226a21a42220a32220a4226a21a52220a42220a522" - "6a21a62220a52220a6226a21a72220a62220a7226a21a82220a72220a8226a21a92220a82220a9226a21aa2220a92220aa226a21ab2220aa22" - "20ab226a21ac2220ab2220ac226a21ad2220ac2220ad226a21ae2220ad2220ae226a21af2220ae2220af226a21b02220af2220b0226a21b122" - "20b02220b1226a21b22220b12220b2226a21b32220b22220b3226a21b42220b32220b4226a21b52220b42220b5226a21b62220b52220b6226a" - "21b72220b62220b7226a21b82220b72220b8226a21b92220b82220b9226a21ba2220b92220ba226a21bb2220ba2220bb226a21bc2220bb2220" - "bc226a21bd2220bc2220bd226a21be2220bd2220be226a21bf2220be2220bf226a21c02220bf2220c0226a21c12220c02220c1226a21c22220" - "c12220c2226a21c32220c22220c3226a21c42220c32220c4226a21c52220c42220c5226a21c62220c52220c6226a21c72220c62220c7226a21" - "c82220c72220c8226a21c92220c82220c9226a21ca2220c92220ca226a21cb2220ca2220cb226a21cc2220cb2220cc226a21cd2220cc2220cd" - "226a21ce2220cd2220ce226a21cf2220ce2220cf226a21d02220cf2220d0226a21d12220d02220d1226a21d22220d12220d2226a21d32220d2" - "2220d3226a21d42220d32220d4226a21d52220d42220d5226a21d62220d52220d6226a21d72220d62220d7226a21d82220d72220d8226a21d9" - "2220d82220d9226a21da2220d92220da226a21db2220da2220db226a21dc2220db2220dc226a21dd2220dc2220dd226a21de2220dd2220de22" - "6a21df2220de2220df226a21e02220df2220e0226a21e12220e02220e1226a21e22220e12220e2226a21e32220e22220e3226a21e42220e322" - "20e4226a21e52220e42220e5226a21e62220e52220e6226a21e72220e62220e7226a21e82220e72220e8226a21e92220e82220e9226a21ea22" - "20e92220ea226a21eb2220ea2220eb226a21ec2220eb2220ec226a21ed2220ec2220ed226a21ee2220ed2220ee226a21ef2220ee2220ef226a" - "21f02220ef2220f0226a21f12220f02220f1226a21f22220f12220f2226a21f32220f22220f3226a21f42220f32220f4226a21f52220f42220" - "f5226a21f62220f52220f6226a21f72220f62220f7226a21f82220f72220f8226a21f92220f82220f9226a21fa2220f92220fa226a21fb2220" - "fa2220fb226a21fc2220fb2220fc226a21fd2220fc2220fd226a21fe2220fd2220fe226a21ff2220fe2220ff226a21802320ff222080236a21" - "81232080232081236a2182232081232082236a2183232082232083236a2184232083232084236a2185232084232085236a2186232085232086" - "236a2187232086232087236a2188232087232088236a2189232088232089236a218a23208923208a236a218b23208a23208b236a218c23208b" - "23208c236a218d23208c23208d236a218e23208d23208e236a218f23208e23208f236a219023208f232090236a2191232090232091236a2192" - "232091232092236a2193232092232093236a2194232093232094236a2195232094232095236a2196232095232096236a219723209623209723" - "6a2198232097232098236a2199232098232099236a219a23209923209a236a219b23209a23209b236a219c23209b23209c236a219d23209c23" - "209d236a219e23209d23209e236a219f23209e23209f236a21a023209f2320a0236a21a12320a02320a1236a21a22320a12320a2236a21a323" - "20a22320a3236a21a42320a32320a4236a21a52320a42320a5236a21a62320a52320a6236a21a72320a62320a7236a21a82320a72320a8236a" - "21a92320a82320a9236a21aa2320a92320aa236a21ab2320aa2320ab236a21ac2320ab2320ac236a21ad2320ac2320ad236a21ae2320ad2320" - "ae236a21af2320ae2320af236a21b02320af2320b0236a21b12320b02320b1236a21b22320b12320b2236a21b32320b22320b3236a21b42320" - "b32320b4236a21b52320b42320b5236a21b62320b52320b6236a21b72320b62320b7236a21b82320b72320b8236a21b92320b82320b9236a21" - "ba2320b92320ba236a21bb2320ba2320bb236a21bc2320bb2320bc236a21bd2320bc2320bd236a21be2320bd2320be236a21bf2320be2320bf" - "236a21c02320bf2320c0236a21c12320c02320c1236a21c22320c12320c2236a21c32320c22320c3236a21c42320c32320c4236a21c52320c4" - "2320c5236a21c62320c52320c6236a21c72320c62320c7236a21c82320c72320c8236a21c92320c82320c9236a21ca2320c92320ca236a21cb" - "2320ca2320cb236a21cc2320cb2320cc236a21cd2320cc2320cd236a21ce2320cd2320ce236a21cf2320ce2320cf236a21d02320cf2320d023" - "6a21d12320d02320d1236a21d22320d12320d2236a21d32320d22320d3236a21d42320d32320d4236a21d52320d42320d5236a21d62320d523" - "20d6236a21d72320d62320d7236a21d82320d72320d8236a21d92320d82320d9236a21da2320d92320da236a21db2320da2320db236a21dc23" - "20db2320dc236a21dd2320dc2320dd236a21de2320dd2320de236a21df2320de2320df236a21e02320df2320e0236a21e12320e02320e1236a" - "21e22320e12320e2236a21e32320e22320e3236a21e42320e32320e4236a21e52320e42320e5236a21e62320e52320e6236a21e72320e62320" - "e7236a21e82320e72320e8236a21e92320e82320e9236a21ea2320e92320ea236a21eb2320ea2320eb236a21ec2320eb2320ec236a21ed2320" - "ec2320ed236a21ee2320ed2320ee236a21ef2320ee2320ef236a21f02320ef2320f0236a21f12320f02320f1236a21f22320f12320f2236a21" - "f32320f22320f3236a21f42320f32320f4236a21f52320f42320f5236a21f62320f52320f6236a21f72320f62320f7236a21f82320f72320f8" - "236a21f92320f82320f9236a21fa2320f92320fa236a21fb2320fa2320fb236a21fc2320fb2320fc236a21fd2320fc2320fd236a21fe2320fd" - "2320fe236a21ff2320fe2320ff236a21802420ff232080246a2181242080242081246a2182242081242082246a2183242082242083246a2184" - "242083242084246a2185242084242085246a2186242085242086246a2187242086242087246a2188242087242088246a218924208824208924" - "6a218a24208924208a246a218b24208a24208b246a218c24208b24208c246a218d24208c24208d246a218e24208d24208e246a218f24208e24" - "208f246a219024208f242090246a2191242090242091246a2192242091242092246a2193242092242093246a2194242093242094246a219524" - "2094242095246a2196242095242096246a2197242096242097246a2198242097242098246a2199242098242099246a219a24209924209a246a" - "219b24209a24209b246a219c24209b24209c246a219d24209c24209d246a219e24209d24209e246a219f24209e24209f246a21a024209f2420" - "a0246a21a12420a02420a1246a21a22420a12420a2246a21a32420a22420a3246a21a42420a32420a4246a21a52420a42420a5246a21a62420" - "a52420a6246a21a72420a62420a7246a21a82420a72420a8246a21a92420a82420a9246a21aa2420a92420aa246a21ab2420aa2420ab246a21" - "ac2420ab2420ac246a21ad2420ac2420ad246a21ae2420ad2420ae246a21af2420ae2420af246a21b02420af2420b0246a21b12420b02420b1" - "246a21b22420b12420b2246a21b32420b22420b3246a21b42420b32420b4246a21b52420b42420b5246a21b62420b52420b6246a21b72420b6" - "2420b7246a21b82420b72420b8246a21b92420b82420b9246a21ba2420b92420ba246a21bb2420ba2420bb246a21bc2420bb2420bc246a21bd" - "2420bc2420bd246a21be2420bd2420be246a21bf2420be2420bf246a21c02420bf2420c0246a21c12420c02420c1246a21c22420c12420c224" - "6a21c32420c22420c3246a21c42420c32420c4246a21c52420c42420c5246a21c62420c52420c6246a21c72420c62420c7246a21c82420c724" - "20c8246a21c92420c82420c9246a21ca2420c92420ca246a21cb2420ca2420cb246a21cc2420cb2420cc246a21cd2420cc2420cd246a21ce24" - "20cd2420ce246a21cf2420ce2420cf246a21d02420cf2420d0246a21d12420d02420d1246a21d22420d12420d2246a21d32420d22420d3246a" - "21d42420d32420d4246a21d52420d42420d5246a21d62420d52420d6246a21d72420d62420d7246a21d82420d72420d8246a21d92420d82420" - "d9246a21da2420d92420da246a21db2420da2420db246a21dc2420db2420dc246a21dd2420dc2420dd246a21de2420dd2420de246a21df2420" - "de2420df246a21e02420df2420e0246a21e12420e02420e1246a21e22420e12420e2246a21e32420e22420e3246a21e42420e32420e4246a21" - "e52420e42420e5246a21e62420e52420e6246a21e72420e62420e7246a21e82420e72420e8246a21e92420e82420e9246a21ea2420e92420ea" - "246a21eb2420ea2420eb246a21ec2420eb2420ec246a21ed2420ec2420ed246a21ee2420ed2420ee246a21ef2420ee2420ef246a21f02420ef" - "2420f0246a21f12420f02420f1246a21f22420f12420f2246a21f32420f22420f3246a21f42420f32420f4246a21f52420f42420f5246a21f6" - "2420f52420f6246a21f72420f62420f7246a21f82420f72420f8246a21f92420f82420f9246a21fa2420f92420fa246a21fb2420fa2420fb24" - "6a21fc2420fb2420fc246a21fd2420fc2420fd246a21fe2420fd2420fe246a21ff2420fe2420ff246a21802520ff242080256a218125208025" - "2081256a2182252081252082256a2183252082252083256a2184252083252084256a2185252084252085256a2186252085252086256a218725" - "2086252087256a2188252087252088256a2189252088252089256a218a25208925208a256a218b25208a25208b256a218c25208b25208c256a" - "218d25208c25208d256a218e25208d25208e256a218f25208e25208f256a219025208f252090256a2191252090252091256a21922520912520" - "92256a2193252092252093256a2194252093252094256a2195252094252095256a2196252095252096256a2197252096252097256a21982520" - "97252098256a2199252098252099256a219a25209925209a256a219b25209a25209b256a219c25209b25209c256a219d25209c25209d256a21" - "9e25209d25209e256a219f25209e25209f256a21a025209f2520a0256a21a12520a02520a1256a21a22520a12520a2256a21a32520a22520a3" - "256a21a42520a32520a4256a21a52520a42520a5256a21a62520a52520a6256a21a72520a62520a7256a21a82520a72520a8256a21a92520a8" - "2520a9256a21aa2520a92520aa256a21ab2520aa2520ab256a21ac2520ab2520ac256a21ad2520ac2520ad256a21ae2520ad2520ae256a21af" - "2520ae2520af256a21b02520af2520b0256a21b12520b02520b1256a21b22520b12520b2256a21b32520b22520b3256a21b42520b32520b425" - "6a21b52520b42520b5256a21b62520b52520b6256a21b72520b62520b7256a21b82520b72520b8256a21b92520b82520b9256a21ba2520b925" - "20ba256a21bb2520ba2520bb256a21bc2520bb2520bc256a21bd2520bc2520bd256a21be2520bd2520be256a21bf2520be2520bf256a21c025" - "20bf2520c0256a21c12520c02520c1256a21c22520c12520c2256a21c32520c22520c3256a21c42520c32520c4256a21c52520c42520c5256a" - "21c62520c52520c6256a21c72520c62520c7256a21c82520c72520c8256a21c92520c82520c9256a21ca2520c92520ca256a21cb2520ca2520" - "cb256a21cc2520cb2520cc256a21cd2520cc2520cd256a21ce2520cd2520ce256a21cf2520ce2520cf256a21d02520cf2520d0256a21d12520" - "d02520d1256a21d22520d12520d2256a21d32520d22520d3256a21d42520d32520d4256a21d52520d42520d5256a21d62520d52520d6256a21" - "d72520d62520d7256a21d82520d72520d8256a21d92520d82520d9256a21da2520d92520da256a21db2520da2520db256a21dc2520db2520dc" - "256a21dd2520dc2520dd256a21de2520dd2520de256a21df2520de2520df256a21e02520df2520e0256a21e12520e02520e1256a21e22520e1" - "2520e2256a21e32520e22520e3256a21e42520e32520e4256a21e52520e42520e5256a21e62520e52520e6256a21e72520e62520e7256a21e8" - "2520e72520e8256a21e92520e82520e9256a21ea2520e92520ea256a21eb2520ea2520eb256a21ec2520eb2520ec256a21ed2520ec2520ed25" - "6a21ee2520ed2520ee256a21ef2520ee2520ef256a21f02520ef2520f0256a21f12520f02520f1256a21f22520f12520f2256a21f32520f225" - "20f3256a21f42520f32520f4256a21f52520f42520f5256a21f62520f52520f6256a21f72520f62520f7256a21f82520f72520f8256a21f925" - "20f82520f9256a21fa2520f92520fa256a21fb2520fa2520fb256a21fc2520fb2520fc256a21fd2520fc2520fd256a21fe2520fd2520fe256a" - "21ff2520fe2520ff256a21802620ff252080266a2181262080262081266a2182262081262082266a2183262082262083266a21842620832620" - "84266a2185262084262085266a2186262085262086266a2187262086262087266a2188262087262088266a2189262088262089266a218a2620" - "8926208a266a218b26208a26208b266a218c26208b26208c266a218d26208c26208d266a218e26208d26208e266a218f26208e26208f266a21" - "9026208f262090266a2191262090262091266a2192262091262092266a2193262092262093266a2194262093262094266a2195262094262095" - "266a2196262095262096266a2197262096262097266a2198262097262098266a2199262098262099266a219a26209926209a266a219b26209a" - "26209b266a219c26209b26209c266a219d26209c26209d266a219e26209d26209e266a219f26209e26209f266a21a026209f2620a0266a21a1" - "2620a02620a1266a21a22620a12620a2266a21a32620a22620a3266a21a42620a32620a4266a21a52620a42620a5266a21a62620a52620a626" - "6a21a72620a62620a7266a21a82620a72620a8266a21a92620a82620a9266a21aa2620a92620aa266a21ab2620aa2620ab266a21ac2620ab26" - "20ac266a21ad2620ac2620ad266a21ae2620ad2620ae266a21af2620ae2620af266a21b02620af2620b0266a21b12620b02620b1266a21b226" - "20b12620b2266a21b32620b22620b3266a21b42620b32620b4266a21b52620b42620b5266a21b62620b52620b6266a21b72620b62620b7266a" - "21b82620b72620b8266a21b92620b82620b9266a21ba2620b92620ba266a21bb2620ba2620bb266a21bc2620bb2620bc266a21bd2620bc2620" - "bd266a21be2620bd2620be266a21bf2620be2620bf266a21c02620bf2620c0266a21c12620c02620c1266a21c22620c12620c2266a21c32620" - "c22620c3266a21c42620c32620c4266a21c52620c42620c5266a21c62620c52620c6266a21c72620c62620c7266a21c82620c72620c8266a21" - "c92620c82620c9266a21ca2620c92620ca266a21cb2620ca2620cb266a21cc2620cb2620cc266a21cd2620cc2620cd266a21ce2620cd2620ce" - "266a21cf2620ce2620cf266a21d02620cf2620d0266a21d12620d02620d1266a21d22620d12620d2266a21d32620d22620d3266a21d42620d3" - "2620d4266a21d52620d42620d5266a21d62620d52620d6266a21d72620d62620d7266a21d82620d72620d8266a21d92620d82620d9266a21da" - "2620d92620da266a21db2620da2620db266a21dc2620db2620dc266a21dd2620dc2620dd266a21de2620dd2620de266a21df2620de2620df26" - "6a21e02620df2620e0266a21e12620e02620e1266a21e22620e12620e2266a21e32620e22620e3266a21e42620e32620e4266a21e52620e426" - "20e5266a21e62620e52620e6266a21e72620e62620e7266a21e82620e72620e8266a21e92620e82620e9266a21ea2620e92620ea266a21eb26" - "20ea2620eb266a21ec2620eb2620ec266a21ed2620ec2620ed266a21ee2620ed2620ee266a21ef2620ee2620ef266a21f02620ef2620f0266a" - "21f12620f02620f1266a21f22620f12620f2266a21f32620f22620f3266a21f42620f32620f4266a21f52620f42620f5266a21f62620f52620" - "f6266a21f72620f62620f7266a21f82620f72620f8266a21f92620f82620f9266a21fa2620f92620fa266a21fb2620fa2620fb266a21fc2620" - "fb2620fc266a21fd2620fc2620fd266a21fe2620fd2620fe266a21ff2620fe2620ff266a21802720ff262080276a2181272080272081276a21" - "82272081272082276a2183272082272083276a2184272083272084276a2185272084272085276a2186272085272086276a2187272086272087" - "276a2188272087272088276a2189272088272089276a218a27208927208a276a218b27208a27208b276a218c27208b27208c276a218d27208c" - "27208d276a218e27208d27208e276a218f27208e27208f276a219027208f272090276a2191272090272091276a2192272091272092276a2193" - "272092272093276a2194272093272094276a2195272094272095276a2196272095272096276a2197272096272097276a219827209727209827" - "6a2199272098272099276a219a27209927209a276a219b27209a27209b276a219c27209b27209c276a219d27209c27209d276a219e27209d27" - "209e276a219f27209e27209f276a21a027209f2720a0276a21a12720a02720a1276a21a22720a12720a2276a21a32720a22720a3276a21a427" - "20a32720a4276a21a52720a42720a5276a21a62720a52720a6276a21a72720a62720a7276a21a82720a72720a8276a21a92720a82720a9276a" - "21aa2720a92720aa276a21ab2720aa2720ab276a21ac2720ab2720ac276a21ad2720ac2720ad276a21ae2720ad2720ae276a21af2720ae2720" - "af276a21b02720af2720b0276a21b12720b02720b1276a21b22720b12720b2276a21b32720b22720b3276a21b42720b32720b4276a21b52720" - "b42720b5276a21b62720b52720b6276a21b72720b62720b7276a21b82720b72720b8276a21b92720b82720b9276a21ba2720b92720ba276a21" - "bb2720ba2720bb276a21bc2720bb2720bc276a21bd2720bc2720bd276a21be2720bd2720be276a21bf2720be2720bf276a21c02720bf2720c0" - "276a21c12720c02720c1276a21c22720c12720c2276a21c32720c22720c3276a21c42720c32720c4276a21c52720c42720c5276a21c62720c5" - "2720c6276a21c72720c62720c7276a21c82720c72720c8276a21c92720c82720c9276a21ca2720c92720ca276a21cb2720ca2720cb276a21cc" - "2720cb2720cc276a21cd2720cc2720cd276a21ce2720cd2720ce276a21cf2720ce2720cf276a21d02720cf2720d0276a21d12720d02720d127" - "6a21d22720d12720d2276a21d32720d22720d3276a21d42720d32720d4276a21d52720d42720d5276a21d62720d52720d6276a21d72720d627" - "20d7276a21d82720d72720d8276a21d92720d82720d9276a21da2720d92720da276a21db2720da2720db276a21dc2720db2720dc276a21dd27" - "20dc2720dd276a21de2720dd2720de276a21df2720de2720df276a21e02720df2720e0276a21e12720e02720e1276a21e22720e12720e2276a" - "21e32720e22720e3276a21e42720e32720e4276a21e52720e42720e5276a21e62720e52720e6276a21e72720e62720e7276a21e82720e72720" - "e8276a21e92720e82720e9276a21ea2720e92720ea276a21eb2720ea2720eb276a21ec2720eb2720ec276a21ed2720ec2720ed276a21ee2720" - "ed2720ee276a21ef2720ee2720ef276a21f02720ef2720f0276a21f12720f02720f1276a21f22720f12720f2276a21f32720f22720f3276a21" - "f42720f32720f4276a21f52720f42720f5276a21f62720f52720f6276a21f72720f62720f7276a21f82720f72720f8276a21f92720f82720f9" - "276a21fa2720f92720fa276a21fb2720fa2720fb276a21fc2720fb2720fc276a21fd2720fc2720fd276a21fe2720fd2720fe276a21ff2720fe" - "2720ff276a21802820ff272080286a2181282080282081286a2182282081282082286a2183282082282083286a2184282083282084286a2185" - "282084282085286a2186282085282086286a2187282086282087286a2188282087282088286a2189282088282089286a218a28208928208a28" - "6a218b28208a28208b286a218c28208b28208c286a218d28208c28208d286a218e28208d28208e286a218f28208e28208f286a219028208f28" - "2090286a2191282090282091286a2192282091282092286a2193282092282093286a2194282093282094286a2195282094282095286a219628" - "2095282096286a2197282096282097286a2198282097282098286a2199282098282099286a219a28209928209a286a219b28209a28209b286a" - "219c28209b28209c286a219d28209c28209d286a219e28209d28209e286a219f28209e28209f286a21a028209f2820a0286a21a12820a02820" - "a1286a21a22820a12820a2286a21a32820a22820a3286a21a42820a32820a4286a21a52820a42820a5286a21a62820a52820a6286a21a72820" - "a62820a7286a21a82820a72820a8286a21a92820a82820a9286a21aa2820a92820aa286a21ab2820aa2820ab286a21ac2820ab2820ac286a21" - "ad2820ac2820ad286a21ae2820ad2820ae286a21af2820ae2820af286a21b02820af2820b0286a21b12820b02820b1286a21b22820b12820b2" - "286a21b32820b22820b3286a21b42820b32820b4286a21b52820b42820b5286a21b62820b52820b6286a21b72820b62820b7286a21b82820b7" - "2820b8286a21b92820b82820b9286a21ba2820b92820ba286a21bb2820ba2820bb286a21bc2820bb2820bc286a21bd2820bc2820bd286a21be" - "2820bd2820be286a21bf2820be2820bf286a21c02820bf2820c0286a21c12820c02820c1286a21c22820c12820c2286a21c32820c22820c328" - "6a21c42820c32820c4286a21c52820c42820c5286a21c62820c52820c6286a21c72820c62820c7286a21c82820c72820c8286a21c92820c828" - "20c9286a21ca2820c92820ca286a21cb2820ca2820cb286a21cc2820cb2820cc286a21cd2820cc2820cd286a21ce2820cd2820ce286a21cf28" - "20ce2820cf286a21d02820cf2820d0286a21d12820d02820d1286a21d22820d12820d2286a21d32820d22820d3286a21d42820d32820d4286a" - "21d52820d42820d5286a21d62820d52820d6286a21d72820d62820d7286a21d82820d72820d8286a21d92820d82820d9286a21da2820d92820" - "da286a21db2820da2820db286a21dc2820db2820dc286a21dd2820dc2820dd286a21de2820dd2820de286a21df2820de2820df286a21e02820" - "df2820e0286a21e12820e02820e1286a21e22820e12820e2286a21e32820e22820e3286a21e42820e32820e4286a21e52820e42820e5286a21" - "e62820e52820e6286a21e72820e62820e7286a21e82820e72820e8286a21e92820e82820e9286a21ea2820e92820ea286a21eb2820ea2820eb" - "286a21ec2820eb2820ec286a21ed2820ec2820ed286a21ee2820ed2820ee286a21ef2820ee2820ef286a21f02820ef2820f0286a21f12820f0" - "2820f1286a21f22820f12820f2286a21f32820f22820f3286a21f42820f32820f4286a21f52820f42820f5286a21f62820f52820f6286a21f7" - "2820f62820f7286a21f82820f72820f8286a21f92820f82820f9286a21fa2820f92820fa286a21fb2820fa2820fb286a21fc2820fb2820fc28" - "6a21fd2820fc2820fd286a21fe2820fd2820fe286a21ff2820fe2820ff286a21802920ff282080296a2181292080292081296a218229208129" - "2082296a2183292082292083296a2184292083292084296a2185292084292085296a2186292085292086296a2187292086292087296a218829" - "2087292088296a2189292088292089296a218a29208929208a296a218b29208a29208b296a218c29208b29208c296a218d29208c29208d296a" - "218e29208d29208e296a218f29208e29208f296a219029208f292090296a2191292090292091296a2192292091292092296a21932920922920" - "93296a2194292093292094296a2195292094292095296a2196292095292096296a2197292096292097296a2198292097292098296a21992920" - "98292099296a219a29209929209a296a219b29209a29209b296a219c29209b29209c296a219d29209c29209d296a219e29209d29209e296a21" - "9f29209e29209f296a21a029209f2920a0296a21a12920a02920a1296a21a22920a12920a2296a21a32920a22920a3296a21a42920a32920a4" - "296a21a52920a42920a5296a21a62920a52920a6296a21a72920a62920a7296a21a82920a72920a8296a21a92920a82920a9296a21aa2920a9" - "2920aa296a21ab2920aa2920ab296a21ac2920ab2920ac296a21ad2920ac2920ad296a21ae2920ad2920ae296a21af2920ae2920af296a21b0" - "2920af2920b0296a21b12920b02920b1296a21b22920b12920b2296a21b32920b22920b3296a21b42920b32920b4296a21b52920b42920b529" - "6a21b62920b52920b6296a21b72920b62920b7296a21b82920b72920b8296a21b92920b82920b9296a21ba2920b92920ba296a21bb2920ba29" - "20bb296a21bc2920bb2920bc296a21bd2920bc2920bd296a21be2920bd2920be296a21bf2920be2920bf296a21c02920bf2920c0296a21c129" - "20c02920c1296a21c22920c12920c2296a21c32920c22920c3296a21c42920c32920c4296a21c52920c42920c5296a21c62920c52920c6296a" - "21c72920c62920c7296a21c82920c72920c8296a21c92920c82920c9296a21ca2920c92920ca296a21cb2920ca2920cb296a21cc2920cb2920" - "cc296a21cd2920cc2920cd296a21ce2920cd2920ce296a21cf2920ce2920cf296a21d02920cf2920d0296a21d12920d02920d1296a21d22920" - "d12920d2296a21d32920d22920d3296a21d42920d32920d4296a21d52920d42920d5296a21d62920d52920d6296a21d72920d62920d7296a21" - "d82920d72920d8296a21d92920d82920d9296a21da2920d92920da296a21db2920da2920db296a21dc2920db2920dc296a21dd2920dc2920dd" - "296a21de2920dd2920de296a21df2920de2920df296a21e02920df2920e0296a21e12920e02920e1296a21e22920e12920e2296a21e32920e2" - "2920e3296a21e42920e32920e4296a21e52920e42920e5296a21e62920e52920e6296a21e72920e62920e7296a21e82920e72920e8296a21e9" - "2920e82920e9296a21ea2920e92920ea296a21eb2920ea2920eb296a21ec2920eb2920ec296a21ed2920ec2920ed296a21ee2920ed2920ee29" - "6a21ef2920ee2920ef296a21f02920ef2920f0296a21f12920f02920f1296a21f22920f12920f2296a21f32920f22920f3296a21f42920f329" - "20f4296a21f52920f42920f5296a21f62920f52920f6296a21f72920f62920f7296a21f82920f72920f8296a21f92920f82920f9296a21fa29" - "20f92920fa296a21fb2920fa2920fb296a21fc2920fb2920fc296a21fd2920fc2920fd296a21fe2920fd2920fe296a21ff2920fe2920ff296a" - "21802a20ff2920802a6a21812a20802a20812a6a21822a20812a20822a6a21832a20822a20832a6a21842a20832a20842a6a21852a20842a20" - "852a6a21862a20852a20862a6a21872a20862a20872a6a21882a20872a20882a6a21892a20882a20892a6a218a2a20892a208a2a6a218b2a20" - "8a2a208b2a6a218c2a208b2a208c2a6a218d2a208c2a208d2a6a218e2a208d2a208e2a6a218f2a208e2a208f2a6a21902a208f2a20902a6a21" - "912a20902a20912a6a21922a20912a20922a6a21932a20922a20932a6a21942a20932a20942a6a21952a20942a20952a6a21962a20952a2096" - "2a6a21972a20962a20972a6a21982a20972a20982a6a21992a20982a20992a6a219a2a20992a209a2a6a219b2a209a2a209b2a6a219c2a209b" - "2a209c2a6a219d2a209c2a209d2a6a219e2a209d2a209e2a6a219f2a209e2a209f2a6a21a02a209f2a20a02a6a21a12a20a02a20a12a6a21a2" - "2a20a12a20a22a6a21a32a20a22a20a32a6a21a42a20a32a20a42a6a21a52a20a42a20a52a6a21a62a20a52a20a62a6a21a72a20a62a20a72a" - "6a21a82a20a72a20a82a6a21a92a20a82a20a92a6a21aa2a20a92a20aa2a6a21ab2a20aa2a20ab2a6a21ac2a20ab2a20ac2a6a21ad2a20ac2a" - "20ad2a6a21ae2a20ad2a20ae2a6a21af2a20ae2a20af2a6a21b02a20af2a20b02a6a21b12a20b02a20b12a6a21b22a20b12a20b22a6a21b32a" - "20b22a20b32a6a21b42a20b32a20b42a6a21b52a20b42a20b52a6a21b62a20b52a20b62a6a21b72a20b62a20b72a6a21b82a20b72a20b82a6a" - "21b92a20b82a20b92a6a21ba2a20b92a20ba2a6a21bb2a20ba2a20bb2a6a21bc2a20bb2a20bc2a6a21bd2a20bc2a20bd2a6a21be2a20bd2a20" - "be2a6a21bf2a20be2a20bf2a6a21c02a20bf2a20c02a6a21c12a20c02a20c12a6a21c22a20c12a20c22a6a21c32a20c22a20c32a6a21c42a20" - "c32a20c42a6a21c52a20c42a20c52a6a21c62a20c52a20c62a6a21c72a20c62a20c72a6a21c82a20c72a20c82a6a21c92a20c82a20c92a6a21" - "ca2a20c92a20ca2a6a21cb2a20ca2a20cb2a6a21cc2a20cb2a20cc2a6a21cd2a20cc2a20cd2a6a21ce2a20cd2a20ce2a6a21cf2a20ce2a20cf" - "2a6a21d02a20cf2a20d02a6a21d12a20d02a20d12a6a21d22a20d12a20d22a6a21d32a20d22a20d32a6a21d42a20d32a20d42a6a21d52a20d4" - "2a20d52a6a21d62a20d52a20d62a6a21d72a20d62a20d72a6a21d82a20d72a20d82a6a21d92a20d82a20d92a6a21da2a20d92a20da2a6a21db" - "2a20da2a20db2a6a21dc2a20db2a20dc2a6a21dd2a20dc2a20dd2a6a21de2a20dd2a20de2a6a21df2a20de2a20df2a6a21e02a20df2a20e02a" - "6a21e12a20e02a20e12a6a21e22a20e12a20e22a6a21e32a20e22a20e32a6a21e42a20e32a20e42a6a21e52a20e42a20e52a6a21e62a20e52a" - "20e62a6a21e72a20e62a20e72a6a21e82a20e72a20e82a6a21e92a20e82a20e92a6a21ea2a20e92a20ea2a6a21eb2a20ea2a20eb2a6a21ec2a" - "20eb2a20ec2a6a21ed2a20ec2a20ed2a6a21ee2a20ed2a20ee2a6a21ef2a20ee2a20ef2a6a21f02a20ef2a20f02a6a21f12a20f02a20f12a6a" - "21f22a20f12a20f22a6a21f32a20f22a20f32a6a21f42a20f32a20f42a6a21f52a20f42a20f52a6a21f62a20f52a20f62a6a21f72a20f62a20" - "f72a6a21f82a20f72a20f82a6a21f92a20f82a20f92a6a21fa2a20f92a20fa2a6a21fb2a20fa2a20fb2a6a21fc2a20fb2a20fc2a6a21fd2a20" - "fc2a20fd2a6a21fe2a20fd2a20fe2a6a21ff2a20fe2a20ff2a6a21802b20ff2a20802b6a21812b20802b20812b6a21822b20812b20822b6a21" - "832b20822b20832b6a21842b20832b20842b6a21852b20842b20852b6a21862b20852b20862b6a21872b20862b20872b6a21882b20872b2088" - "2b6a21892b20882b20892b6a218a2b20892b208a2b6a218b2b208a2b208b2b6a218c2b208b2b208c2b6a218d2b208c2b208d2b6a218e2b208d" - "2b208e2b6a218f2b208e2b208f2b6a21902b208f2b20902b6a21912b20902b20912b6a21922b20912b20922b6a21932b20922b20932b6a2194" - "2b20932b20942b6a21952b20942b20952b6a21962b20952b20962b6a21972b20962b20972b6a21982b20972b20982b6a21992b20982b20992b" - "6a219a2b20992b209a2b6a219b2b209a2b209b2b6a219c2b209b2b209c2b6a219d2b209c2b209d2b6a219e2b209d2b209e2b6a219f2b209e2b" - "209f2b6a21a02b209f2b20a02b6a21a12b20a02b20a12b6a21a22b20a12b20a22b6a21a32b20a22b20a32b6a21a42b20a32b20a42b6a21a52b" - "20a42b20a52b6a21a62b20a52b20a62b6a21a72b20a62b20a72b6a21a82b20a72b20a82b6a21a92b20a82b20a92b6a21aa2b20a92b20aa2b6a" - "21ab2b20aa2b20ab2b6a21ac2b20ab2b20ac2b6a21ad2b20ac2b20ad2b6a21ae2b20ad2b20ae2b6a21af2b20ae2b20af2b6a21b02b20af2b20" - "b02b6a21b12b20b02b20b12b6a21b22b20b12b20b22b6a21b32b20b22b20b32b6a21b42b20b32b20b42b6a21b52b20b42b20b52b6a21b62b20" - "b52b20b62b6a21b72b20b62b20b72b6a21b82b20b72b20b82b6a21b92b20b82b20b92b6a21ba2b20b92b20ba2b6a21bb2b20ba2b20bb2b6a21" - "bc2b20bb2b20bc2b6a21bd2b20bc2b20bd2b6a21be2b20bd2b20be2b6a21bf2b20be2b20bf2b6a21c02b20bf2b20c02b6a21c12b20c02b20c1" - "2b6a21c22b20c12b20c22b6a21c32b20c22b20c32b6a21c42b20c32b20c42b6a21c52b20c42b20c52b6a21c62b20c52b20c62b6a21c72b20c6" - "2b20c72b6a21c82b20c72b20c82b6a21c92b20c82b20c92b6a21ca2b20c92b20ca2b6a21cb2b20ca2b20cb2b6a21cc2b20cb2b20cc2b6a21cd" - "2b20cc2b20cd2b6a21ce2b20cd2b20ce2b6a21cf2b20ce2b20cf2b6a21d02b20cf2b20d02b6a21d12b20d02b20d12b6a21d22b20d12b20d22b" - "6a21d32b20d22b20d32b6a21d42b20d32b20d42b6a21d52b20d42b20d52b6a21d62b20d52b20d62b6a21d72b20d62b20d72b6a21d82b20d72b" - "20d82b6a21d92b20d82b20d92b6a21da2b20d92b20da2b6a21db2b20da2b20db2b6a21dc2b20db2b20dc2b6a21dd2b20dc2b20dd2b6a21de2b" - "20dd2b20de2b6a21df2b20de2b20df2b6a21e02b20df2b20e02b6a21e12b20e02b20e12b6a21e22b20e12b20e22b6a21e32b20e22b20e32b6a" - "21e42b20e32b20e42b6a21e52b20e42b20e52b6a21e62b20e52b20e62b6a21e72b20e62b20e72b6a21e82b20e72b20e82b6a21e92b20e82b20" - "e92b6a21ea2b20e92b20ea2b6a21eb2b20ea2b20eb2b6a21ec2b20eb2b20ec2b6a21ed2b20ec2b20ed2b6a21ee2b20ed2b20ee2b6a21ef2b20" - "ee2b20ef2b6a21f02b20ef2b20f02b6a21f12b20f02b20f12b6a21f22b20f12b20f22b6a21f32b20f22b20f32b6a21f42b20f32b20f42b6a21" - "f52b20f42b20f52b6a21f62b20f52b20f62b6a21f72b20f62b20f72b6a21f82b20f72b20f82b6a21f92b20f82b20f92b6a21fa2b20f92b20fa" - "2b6a21fb2b20fa2b20fb2b6a21fc2b20fb2b20fc2b6a21fd2b20fc2b20fd2b6a21fe2b20fd2b20fe2b6a21ff2b20fe2b20ff2b6a21802c20ff" - "2b20802c6a21812c20802c20812c6a21822c20812c20822c6a21832c20822c20832c6a21842c20832c20842c6a21852c20842c20852c6a2186" - "2c20852c20862c6a21872c20862c20872c6a21882c20872c20882c6a21892c20882c20892c6a218a2c20892c208a2c6a218b2c208a2c208b2c" - "6a218c2c208b2c208c2c6a218d2c208c2c208d2c6a218e2c208d2c208e2c6a218f2c208e2c208f2c6a21902c208f2c20902c6a21912c20902c" - "20912c6a21922c20912c20922c6a21932c20922c20932c6a21942c20932c20942c6a21952c20942c20952c6a21962c20952c20962c6a21972c" - "20962c20972c6a21982c20972c20982c6a21992c20982c20992c6a219a2c20992c209a2c6a219b2c209a2c209b2c6a219c2c209b2c209c2c6a" - "219d2c209c2c209d2c6a219e2c209d2c209e2c6a219f2c209e2c209f2c6a21a02c209f2c20a02c6a21a12c20a02c20a12c6a21a22c20a12c20" - "a22c6a21a32c20a22c20a32c6a21a42c20a32c20a42c6a21a52c20a42c20a52c6a21a62c20a52c20a62c6a21a72c20a62c20a72c6a21a82c20" - "a72c20a82c6a21a92c20a82c20a92c6a21aa2c20a92c20aa2c6a21ab2c20aa2c20ab2c6a21ac2c20ab2c20ac2c6a21ad2c20ac2c20ad2c6a21" - "ae2c20ad2c20ae2c6a21af2c20ae2c20af2c6a21b02c20af2c20b02c6a21b12c20b02c20b12c6a21b22c20b12c20b22c6a21b32c20b22c20b3" - "2c6a21b42c20b32c20b42c6a21b52c20b42c20b52c6a21b62c20b52c20b62c6a21b72c20b62c20b72c6a21b82c20b72c20b82c6a21b92c20b8" - "2c20b92c6a21ba2c20b92c20ba2c6a21bb2c20ba2c20bb2c6a21bc2c20bb2c20bc2c6a21bd2c20bc2c20bd2c6a21be2c20bd2c20be2c6a21bf" - "2c20be2c20bf2c6a21c02c20bf2c20c02c6a21c12c20c02c20c12c6a21c22c20c12c20c22c6a21c32c20c22c20c32c6a21c42c20c32c20c42c" - "6a21c52c20c42c20c52c6a21c62c20c52c20c62c6a21c72c20c62c20c72c6a21c82c20c72c20c82c6a21c92c20c82c20c92c6a21ca2c20c92c" - "20ca2c6a21cb2c20ca2c20cb2c6a21cc2c20cb2c20cc2c6a21cd2c20cc2c20cd2c6a21ce2c20cd2c20ce2c6a21cf2c20ce2c20cf2c6a21d02c" - "20cf2c20d02c6a21d12c20d02c20d12c6a21d22c20d12c20d22c6a21d32c20d22c20d32c6a21d42c20d32c20d42c6a21d52c20d42c20d52c6a" - "21d62c20d52c20d62c6a21d72c20d62c20d72c6a21d82c20d72c20d82c6a21d92c20d82c20d92c6a21da2c20d92c20da2c6a21db2c20da2c20" - "db2c6a21dc2c20db2c20dc2c6a21dd2c20dc2c20dd2c6a21de2c20dd2c20de2c6a21df2c20de2c20df2c6a21e02c20df2c20e02c6a21e12c20" - "e02c20e12c6a21e22c20e12c20e22c6a21e32c20e22c20e32c6a21e42c20e32c20e42c6a21e52c20e42c20e52c6a21e62c20e52c20e62c6a21" - "e72c20e62c20e72c6a21e82c20e72c20e82c6a21e92c20e82c20e92c6a21ea2c20e92c20ea2c6a21eb2c20ea2c20eb2c6a21ec2c20eb2c20ec" - "2c6a21ed2c20ec2c20ed2c6a21ee2c20ed2c20ee2c6a21ef2c20ee2c20ef2c6a21f02c20ef2c20f02c6a21f12c20f02c20f12c6a21f22c20f1" - "2c20f22c6a21f32c20f22c20f32c6a21f42c20f32c20f42c6a21f52c20f42c20f52c6a21f62c20f52c20f62c6a21f72c20f62c20f72c6a21f8" - "2c20f72c20f82c6a21f92c20f82c20f92c6a21fa2c20f92c20fa2c6a21fb2c20fa2c20fb2c6a21fc2c20fb2c20fc2c6a21fd2c20fc2c20fd2c" - "6a21fe2c20fd2c20fe2c6a21ff2c20fe2c20ff2c6a21802d20ff2c20802d6a21812d20802d20812d6a21822d20812d20822d6a21832d20822d" - "20832d6a21842d20832d20842d6a21852d20842d20852d6a21862d20852d20862d6a21872d20862d20872d6a21882d20872d20882d6a21892d" - "20882d20892d6a218a2d20892d208a2d6a218b2d208a2d208b2d6a218c2d208b2d208c2d6a218d2d208c2d208d2d6a218e2d208d2d208e2d6a" - "218f2d208e2d208f2d6a21902d208f2d20902d6a21912d20902d20912d6a21922d20912d20922d6a21932d20922d20932d6a21942d20932d20" - "942d6a21952d20942d20952d6a21962d20952d20962d6a21972d20962d20972d6a21982d20972d20982d6a21992d20982d20992d6a219a2d20" - "992d209a2d6a219b2d209a2d209b2d6a219c2d209b2d209c2d6a219d2d209c2d209d2d6a219e2d209d2d209e2d6a219f2d209e2d209f2d6a21" - "a02d209f2d20a02d6a21a12d20a02d20a12d6a21a22d20a12d20a22d6a21a32d20a22d20a32d6a21a42d20a32d20a42d6a21a52d20a42d20a5" - "2d6a21a62d20a52d20a62d6a21a72d20a62d20a72d6a21a82d20a72d20a82d6a21a92d20a82d20a92d6a21aa2d20a92d20aa2d6a21ab2d20aa" - "2d20ab2d6a21ac2d20ab2d20ac2d6a21ad2d20ac2d20ad2d6a21ae2d20ad2d20ae2d6a21af2d20ae2d20af2d6a21b02d20af2d20b02d6a21b1" - "2d20b02d20b12d6a21b22d20b12d20b22d6a21b32d20b22d20b32d6a21b42d20b32d20b42d6a21b52d20b42d20b52d6a21b62d20b52d20b62d" - "6a21b72d20b62d20b72d6a21b82d20b72d20b82d6a21b92d20b82d20b92d6a21ba2d20b92d20ba2d6a21bb2d20ba2d20bb2d6a21bc2d20bb2d" - "20bc2d6a21bd2d20bc2d20bd2d6a21be2d20bd2d20be2d6a21bf2d20be2d20bf2d6a21c02d20bf2d20c02d6a21c12d20c02d20c12d6a21c22d" - "20c12d20c22d6a21c32d20c22d20c32d6a21c42d20c32d20c42d6a21c52d20c42d20c52d6a21c62d20c52d20c62d6a21c72d20c62d20c72d6a" - "21c82d20c72d20c82d6a21c92d20c82d20c92d6a21ca2d20c92d20ca2d6a21cb2d20ca2d20cb2d6a21cc2d20cb2d20cc2d6a21cd2d20cc2d20" - "cd2d6a21ce2d20cd2d20ce2d6a21cf2d20ce2d20cf2d6a21d02d20cf2d20d02d6a21d12d20d02d20d12d6a21d22d20d12d20d22d6a21d32d20" - "d22d20d32d6a21d42d20d32d20d42d6a21d52d20d42d20d52d6a21d62d20d52d20d62d6a21d72d20d62d20d72d6a21d82d20d72d20d82d6a21" - "d92d20d82d20d92d6a21da2d20d92d20da2d6a21db2d20da2d20db2d6a21dc2d20db2d20dc2d6a21dd2d20dc2d20dd2d6a21de2d20dd2d20de" - "2d6a21df2d20de2d20df2d6a21e02d20df2d20e02d6a21e12d20e02d20e12d6a21e22d20e12d20e22d6a21e32d20e22d20e32d6a21e42d20e3" - "2d20e42d6a21e52d20e42d20e52d6a21e62d20e52d20e62d6a21e72d20e62d20e72d6a21e82d20e72d20e82d6a21e92d20e82d20e92d6a21ea" - "2d20e92d20ea2d6a21eb2d20ea2d20eb2d6a21ec2d20eb2d20ec2d6a21ed2d20ec2d20ed2d6a21ee2d20ed2d20ee2d6a21ef2d20ee2d20ef2d" - "6a21f02d20ef2d20f02d6a21f12d20f02d20f12d6a21f22d20f12d20f22d6a21f32d20f22d20f32d6a21f42d20f32d20f42d6a21f52d20f42d" - "20f52d6a21f62d20f52d20f62d6a21f72d20f62d20f72d6a21f82d20f72d20f82d6a21f92d20f82d20f92d6a21fa2d20f92d20fa2d6a21fb2d" - "20fa2d20fb2d6a21fc2d20fb2d20fc2d6a21fd2d20fc2d20fd2d6a21fe2d20fd2d20fe2d6a21ff2d20fe2d20ff2d6a21802e20ff2d20802e6a" - "21812e20802e20812e6a21822e20812e20822e6a21832e20822e20832e6a21842e20832e20842e6a21852e20842e20852e6a21862e20852e20" - "862e6a21872e20862e20872e6a21882e20872e20882e6a21892e20882e20892e6a218a2e20892e208a2e6a218b2e208a2e208b2e6a218c2e20" - "8b2e208c2e6a218d2e208c2e208d2e6a218e2e208d2e208e2e6a218f2e208e2e208f2e6a21902e208f2e20902e6a21912e20902e20912e6a21" - "922e20912e20922e6a21932e20922e20932e6a21942e20932e20942e6a21952e20942e20952e6a21962e20952e20962e6a21972e20962e2097" - "2e6a21982e20972e20982e6a21992e20982e20992e6a219a2e20992e209a2e6a219b2e209a2e209b2e6a219c2e209b2e209c2e6a219d2e209c" - "2e209d2e6a219e2e209d2e209e2e6a219f2e209e2e209f2e6a21a02e209f2e20a02e6a21a12e20a02e20a12e6a21a22e20a12e20a22e6a21a3" - "2e20a22e20a32e6a21a42e20a32e20a42e6a21a52e20a42e20a52e6a21a62e20a52e20a62e6a21a72e20a62e20a72e6a21a82e20a72e20a82e" - "6a21a92e20a82e20a92e6a21aa2e20a92e20aa2e6a21ab2e20aa2e20ab2e6a21ac2e20ab2e20ac2e6a21ad2e20ac2e20ad2e6a21ae2e20ad2e" - "20ae2e6a21af2e20ae2e20af2e6a21b02e20af2e20b02e6a21b12e20b02e20b12e6a21b22e20b12e20b22e6a21b32e20b22e20b32e6a21b42e" - "20b32e20b42e6a21b52e20b42e20b52e6a21b62e20b52e20b62e6a21b72e20b62e20b72e6a21b82e20b72e20b82e6a21b92e20b82e20b92e6a" - "21ba2e20b92e20ba2e6a21bb2e20ba2e20bb2e6a21bc2e20bb2e20bc2e6a21bd2e20bc2e20bd2e6a21be2e20bd2e20be2e6a21bf2e20be2e20" - "bf2e6a21c02e20bf2e20c02e6a21c12e20c02e20c12e6a21c22e20c12e20c22e6a21c32e20c22e20c32e6a21c42e20c32e20c42e6a21c52e20" - "c42e20c52e6a21c62e20c52e20c62e6a21c72e20c62e20c72e6a21c82e20c72e20c82e6a21c92e20c82e20c92e6a21ca2e20c92e20ca2e6a21" - "cb2e20ca2e20cb2e6a21cc2e20cb2e20cc2e6a21cd2e20cc2e20cd2e6a21ce2e20cd2e20ce2e6a21cf2e20ce2e20cf2e6a21d02e20cf2e20d0" - "2e6a21d12e20d02e20d12e6a21d22e20d12e20d22e6a21d32e20d22e20d32e6a21d42e20d32e20d42e6a21d52e20d42e20d52e6a21d62e20d5" - "2e20d62e6a21d72e20d62e20d72e6a21d82e20d72e20d82e6a21d92e20d82e20d92e6a21da2e20d92e20da2e6a21db2e20da2e20db2e6a21dc" - "2e20db2e20dc2e6a21dd2e20dc2e20dd2e6a21de2e20dd2e20de2e6a21df2e20de2e20df2e6a21e02e20df2e20e02e6a21e12e20e02e20e12e" - "6a21e22e20e12e20e22e6a21e32e20e22e20e32e6a21e42e20e32e20e42e6a21e52e20e42e20e52e6a21e62e20e52e20e62e6a21e72e20e62e" - "20e72e6a21e82e20e72e20e82e6a21e92e20e82e20e92e6a21ea2e20e92e20ea2e6a21eb2e20ea2e20eb2e6a21ec2e20eb2e20ec2e6a21ed2e" - "20ec2e20ed2e6a21ee2e20ed2e20ee2e6a21ef2e20ee2e20ef2e6a21f02e20ef2e20f02e6a21f12e20f02e20f12e6a21f22e20f12e20f22e6a" - "21f32e20f22e20f32e6a21f42e20f32e20f42e6a21f52e20f42e20f52e6a21f62e20f52e20f62e6a21f72e20f62e20f72e6a21f82e20f72e20" - "f82e6a21f92e20f82e20f92e6a21fa2e20f92e20fa2e6a21fb2e20fa2e20fb2e6a21fc2e20fb2e20fc2e6a21fd2e20fc2e20fd2e6a21fe2e20" - "fd2e20fe2e6a21ff2e20fe2e20ff2e6a21802f20ff2e20802f6a21812f20802f20812f6a21822f20812f20822f6a21832f20822f20832f6a21" - "842f20832f20842f6a21852f20842f20852f6a21862f20852f20862f6a21872f20862f20872f6a21882f20872f20882f6a21892f20882f2089" - "2f6a218a2f20892f208a2f6a218b2f208a2f208b2f6a218c2f208b2f208c2f6a218d2f208c2f208d2f6a218e2f208d2f208e2f6a218f2f208e" - "2f208f2f6a21902f208f2f20902f6a21912f20902f20912f6a21922f20912f20922f6a21932f20922f20932f6a21942f20932f20942f6a2195" - "2f20942f20952f6a21962f20952f20962f6a21972f20962f20972f6a21982f20972f20982f6a21992f20982f20992f6a219a2f20992f209a2f" - "6a219b2f209a2f209b2f6a219c2f209b2f209c2f6a219d2f209c2f209d2f6a219e2f209d2f209e2f6a219f2f209e2f209f2f6a21a02f209f2f" - "20a02f6a21a12f20a02f20a12f6a21a22f20a12f20a22f6a21a32f20a22f20a32f6a21a42f20a32f20a42f6a21a52f20a42f20a52f6a21a62f" - "20a52f20a62f6a21a72f20a62f20a72f6a21a82f20a72f20a82f6a21a92f20a82f20a92f6a21aa2f20a92f20aa2f6a21ab2f20aa2f20ab2f6a" - "21ac2f20ab2f20ac2f6a21ad2f20ac2f20ad2f6a21ae2f20ad2f20ae2f6a21af2f20ae2f20af2f6a21b02f20af2f20b02f6a21b12f20b02f20" - "b12f6a21b22f20b12f20b22f6a21b32f20b22f20b32f6a21b42f20b32f20b42f6a21b52f20b42f20b52f6a21b62f20b52f20b62f6a21b72f20" - "b62f20b72f6a21b82f20b72f20b82f6a21b92f20b82f20b92f6a21ba2f20b92f20ba2f6a21bb2f20ba2f20bb2f6a21bc2f20bb2f20bc2f6a21" - "bd2f20bc2f20bd2f6a21be2f20bd2f20be2f6a21bf2f20be2f20bf2f6a21c02f20bf2f20c02f6a21c12f20c02f20c12f6a21c22f20c12f20c2" - "2f6a21c32f20c22f20c32f6a21c42f20c32f20c42f6a21c52f20c42f20c52f6a21c62f20c52f20c62f6a21c72f20c62f20c72f6a21c82f20c7" - "2f20c82f6a21c92f20c82f20c92f6a21ca2f20c92f20ca2f6a21cb2f20ca2f20cb2f6a21cc2f20cb2f20cc2f6a21cd2f20cc2f20cd2f6a21ce" - "2f20cd2f20ce2f6a21cf2f20ce2f20cf2f6a21d02f20cf2f20d02f6a21d12f20d02f20d12f6a21d22f20d12f20d22f6a21d32f20d22f20d32f" - "6a21d42f20d32f20d42f6a21d52f20d42f20d52f6a21d62f20d52f20d62f6a21d72f20d62f20d72f6a21d82f20d72f20d82f6a21d92f20d82f" - "20d92f6a21da2f20d92f20da2f6a21db2f20da2f20db2f6a21dc2f20db2f20dc2f6a21dd2f20dc2f20dd2f6a21de2f20dd2f20de2f6a21df2f" - "20de2f20df2f6a21e02f20df2f20e02f6a21e12f20e02f20e12f6a21e22f20e12f20e22f6a21e32f20e22f20e32f6a21e42f20e32f20e42f6a" - "21e52f20e42f20e52f6a21e62f20e52f20e62f6a21e72f20e62f20e72f6a21e82f20e72f20e82f6a21e92f20e82f20e92f6a21ea2f20e92f20" - "ea2f6a21eb2f20ea2f20eb2f6a21ec2f20eb2f20ec2f6a21ed2f20ec2f20ed2f6a21ee2f20ed2f20ee2f6a21ef2f20ee2f20ef2f6a21f02f20" - "ef2f20f02f6a21f12f20f02f20f12f6a21f22f20f12f20f22f6a21f32f20f22f20f32f6a21f42f20f32f20f42f6a21f52f20f42f20f52f6a21" - "f62f20f52f20f62f6a21f72f20f62f20f72f6a21f82f20f72f20f82f6a21f92f20f82f20f92f6a21fa2f20f92f20fa2f6a21fb2f20fa2f20fb" - "2f6a21fc2f20fb2f20fc2f6a21fd2f20fc2f20fd2f6a21fe2f20fd2f20fe2f6a21ff2f20fe2f20ff2f6a21803020ff2f2080306a2181302080" - "302081306a2182302081302082306a2183302082302083306a2184302083302084306a2185302084302085306a2186302085302086306a2187" - "302086302087306a2188302087302088306a2189302088302089306a218a30208930208a306a218b30208a30208b306a218c30208b30208c30" - "6a218d30208c30208d306a218e30208d30208e306a218f30208e30208f306a219030208f302090306a2191302090302091306a219230209130" - "2092306a2193302092302093306a2194302093302094306a2195302094302095306a2196302095302096306a2197302096302097306a219830" - "2097302098306a2199302098302099306a219a30209930209a306a219b30209a30209b306a219c30209b30209c306a219d30209c30209d306a" - "219e30209d30209e306a219f30209e30209f306a21a030209f3020a0306a21a13020a03020a1306a21a23020a13020a2306a21a33020a23020" - "a3306a21a43020a33020a4306a21a53020a43020a5306a21a63020a53020a6306a21a73020a63020a7306a21a83020a73020a8306a21a93020" - "a83020a9306a21aa3020a93020aa306a21ab3020aa3020ab306a21ac3020ab3020ac306a21ad3020ac3020ad306a21ae3020ad3020ae306a21" - "af3020ae3020af306a21b03020af3020b0306a21b13020b03020b1306a21b23020b13020b2306a21b33020b23020b3306a21b43020b33020b4" - "306a21b53020b43020b5306a21b63020b53020b6306a21b73020b63020b7306a21b83020b73020b8306a21b93020b83020b9306a21ba3020b9" - "3020ba306a21bb3020ba3020bb306a21bc3020bb3020bc306a21bd3020bc3020bd306a21be3020bd3020be306a21bf3020be3020bf306a21c0" - "3020bf3020c0306a21c13020c03020c1306a21c23020c13020c2306a21c33020c23020c3306a21c43020c33020c4306a21c53020c43020c530" - "6a21c63020c53020c6306a21c73020c63020c7306a21c83020c73020c8306a21c93020c83020c9306a21ca3020c93020ca306a21cb3020ca30" - "20cb306a21cc3020cb3020cc306a21cd3020cc3020cd306a21ce3020cd3020ce306a21cf3020ce3020cf306a21d03020cf3020d0306a21d130" - "20d03020d1306a21d23020d13020d2306a21d33020d23020d3306a21d43020d33020d4306a21d53020d43020d5306a21d63020d53020d6306a" - "21d73020d63020d7306a21d83020d73020d8306a21d93020d83020d9306a21da3020d93020da306a21db3020da3020db306a21dc3020db3020" - "dc306a21dd3020dc3020dd306a21de3020dd3020de306a21df3020de3020df306a21e03020df3020e0306a21e13020e03020e1306a21e23020" - "e13020e2306a21e33020e23020e3306a21e43020e33020e4306a21e53020e43020e5306a21e63020e53020e6306a21e73020e63020e7306a21" - "e83020e73020e8306a21e93020e83020e9306a21ea3020e93020ea306a21eb3020ea3020eb306a21ec3020eb3020ec306a21ed3020ec3020ed" - "306a21ee3020ed3020ee306a21ef3020ee3020ef306a21f03020ef3020f0306a21f13020f03020f1306a21f23020f13020f2306a21f33020f2" - "3020f3306a21f43020f33020f4306a21f53020f43020f5306a21f63020f53020f6306a21f73020f63020f7306a21f83020f73020f8306a21f9" - "3020f83020f9306a21fa3020f93020fa306a21fb3020fa3020fb306a21fc3020fb3020fc306a21fd3020fc3020fd306a21fe3020fd3020fe30" - "6a21ff3020fe3020ff306a21803120ff302080316a2181312080312081316a2182312081312082316a2183312082312083316a218431208331" - "2084316a2185312084312085316a2186312085312086316a2187312086312087316a2188312087312088316a2189312088312089316a218a31" - "208931208a316a218b31208a31208b316a218c31208b31208c316a218d31208c31208d316a218e31208d31208e316a218f31208e31208f316a" - "219031208f312090316a2191312090312091316a2192312091312092316a2193312092312093316a2194312093312094316a21953120943120" - "95316a2196312095312096316a2197312096312097316a2198312097312098316a2199312098312099316a219a31209931209a316a219b3120" - "9a31209b316a219c31209b31209c316a219d31209c31209d316a219e31209d31209e316a219f31209e31209f316a21a031209f3120a0316a21" - "a13120a03120a1316a21a23120a13120a2316a21a33120a23120a3316a21a43120a33120a4316a21a53120a43120a5316a21a63120a53120a6" - "316a21a73120a63120a7316a21a83120a73120a8316a21a93120a83120a9316a21aa3120a93120aa316a21ab3120aa3120ab316a21ac3120ab" - "3120ac316a21ad3120ac3120ad316a21ae3120ad3120ae316a21af3120ae3120af316a21b03120af3120b0316a21b13120b03120b1316a21b2" - "3120b13120b2316a21b33120b23120b3316a21b43120b33120b4316a21b53120b43120b5316a21b63120b53120b6316a21b73120b63120b731" - "6a21b83120b73120b8316a21b93120b83120b9316a21ba3120b93120ba316a21bb3120ba3120bb316a21bc3120bb3120bc316a21bd3120bc31" - "20bd316a21be3120bd3120be316a21bf3120be3120bf316a21c03120bf3120c0316a21c13120c03120c1316a21c23120c13120c2316a21c331" - "20c23120c3316a21c43120c33120c4316a21c53120c43120c5316a21c63120c53120c6316a21c73120c63120c7316a21c83120c73120c8316a" - "21c93120c83120c9316a21ca3120c93120ca316a21cb3120ca3120cb316a21cc3120cb3120cc316a21cd3120cc3120cd316a21ce3120cd3120" - "ce316a21cf3120ce3120cf316a21d03120cf3120d0316a21d13120d03120d1316a21d23120d13120d2316a21d33120d23120d3316a21d43120" - "d33120d4316a21d53120d43120d5316a21d63120d53120d6316a21d73120d63120d7316a21d83120d73120d8316a21d93120d83120d9316a21" - "da3120d93120da316a21db3120da3120db316a21dc3120db3120dc316a21dd3120dc3120dd316a21de3120dd3120de316a21df3120de3120df" - "316a21e03120df3120e0316a21e13120e03120e1316a21e23120e13120e2316a21e33120e23120e3316a21e43120e33120e4316a21e53120e4" - "3120e5316a21e63120e53120e6316a21e73120e63120e7316a21e83120e73120e8316a21e93120e83120e9316a21ea3120e93120ea316a21eb" - "3120ea3120eb316a21ec3120eb3120ec316a21ed3120ec3120ed316a21ee3120ed3120ee316a21ef3120ee3120ef316a21f03120ef3120f031" - "6a21f13120f03120f1316a21f23120f13120f2316a21f33120f23120f3316a21f43120f33120f4316a21f53120f43120f5316a21f63120f531" - "20f6316a21f73120f63120f7316a21f83120f73120f8316a21f93120f83120f9316a21fa3120f93120fa316a21fb3120fa3120fb316a21fc31" - "20fb3120fc316a21fd3120fc3120fd316a21fe3120fd3120fe316a21ff3120fe3120ff316a21803220ff312080326a2181322080322081326a" - "2182322081322082326a2183322082322083326a2184322083322084326a2185322084322085326a2186322085322086326a21873220863220" - "87326a2188322087322088326a2189322088322089326a218a32208932208a326a218b32208a32208b326a218c32208b32208c326a218d3220" - "8c32208d326a218e32208d32208e326a218f32208e32208f326a219032208f322090326a2191322090322091326a2192322091322092326a21" - "93322092322093326a2194322093322094326a2195322094322095326a2196322095322096326a2197322096322097326a2198322097322098" - "326a2199322098322099326a219a32209932209a326a219b32209a32209b326a219c32209b32209c326a219d32209c32209d326a219e32209d" - "32209e326a219f32209e32209f326a21a032209f3220a0326a21a13220a03220a1326a21a23220a13220a2326a21a33220a23220a3326a21a4" - "3220a33220a4326a21a53220a43220a5326a21a63220a53220a6326a21a73220a63220a7326a21a83220a73220a8326a21a93220a83220a932" - "6a21aa3220a93220aa326a21ab3220aa3220ab326a21ac3220ab3220ac326a21ad3220ac3220ad326a21ae3220ad3220ae326a21af3220ae32" - "20af326a21b03220af3220b0326a21b13220b03220b1326a21b23220b13220b2326a21b33220b23220b3326a21b43220b33220b4326a21b532" - "20b43220b5326a21b63220b53220b6326a21b73220b63220b7326a21b83220b73220b8326a21b93220b83220b9326a21ba3220b93220ba326a" - "21bb3220ba3220bb326a21bc3220bb3220bc326a21bd3220bc3220bd326a21be3220bd3220be326a21bf3220be3220bf326a21c03220bf3220" - "c0326a21c13220c03220c1326a21c23220c13220c2326a21c33220c23220c3326a21c43220c33220c4326a21c53220c43220c5326a21c63220" - "c53220c6326a21c73220c63220c7326a21c83220c73220c8326a21c93220c83220c9326a21ca3220c93220ca326a21cb3220ca3220cb326a21" - "cc3220cb3220cc326a21cd3220cc3220cd326a21ce3220cd3220ce326a21cf3220ce3220cf326a21d03220cf3220d0326a21d13220d03220d1" - "326a21d23220d13220d2326a21d33220d23220d3326a21d43220d33220d4326a21d53220d43220d5326a21d63220d53220d6326a21d73220d6" - "3220d7326a21d83220d73220d8326a21d93220d83220d9326a21da3220d93220da326a21db3220da3220db326a21dc3220db3220dc326a21dd" - "3220dc3220dd326a21de3220dd3220de326a21df3220de3220df326a21e03220df3220e0326a21e13220e03220e1326a21e23220e13220e232" - "6a21e33220e23220e3326a21e43220e33220e4326a21e53220e43220e5326a21e63220e53220e6326a21e73220e63220e7326a21e83220e732" - "20e8326a21e93220e83220e9326a21ea3220e93220ea326a21eb3220ea3220eb326a21ec3220eb3220ec326a21ed3220ec3220ed326a21ee32" - "20ed3220ee326a21ef3220ee3220ef326a21f03220ef3220f0326a21f13220f03220f1326a21f23220f13220f2326a21f33220f23220f3326a" - "21f43220f33220f4326a21f53220f43220f5326a21f63220f53220f6326a21f73220f63220f7326a21f83220f73220f8326a21f93220f83220" - "f9326a21fa3220f93220fa326a21fb3220fa3220fb326a21fc3220fb3220fc326a21fd3220fc3220fd326a21fe3220fd3220fe326a21ff3220" - "fe3220ff326a21803320ff322080336a2181332080332081336a2182332081332082336a2183332082332083336a2184332083332084336a21" - "85332084332085336a2186332085332086336a2187332086332087336a2188332087332088336a2189332088332089336a218a33208933208a" - "336a218b33208a33208b336a218c33208b33208c336a218d33208c33208d336a218e33208d33208e336a218f33208e33208f336a219033208f" - "332090336a2191332090332091336a2192332091332092336a2193332092332093336a2194332093332094336a2195332094332095336a2196" - "332095332096336a2197332096332097336a2198332097332098336a2199332098332099336a219a33209933209a336a219b33209a33209b33" - "6a219c33209b33209c336a219d33209c33209d336a219e33209d33209e336a219f33209e33209f336a21a033209f3320a0336a21a13320a033" - "20a1336a21a23320a13320a2336a21a33320a23320a3336a21a43320a33320a4336a21a53320a43320a5336a21a63320a53320a6336a21a733" - "20a63320a7336a21a83320a73320a8336a21a93320a83320a9336a21aa3320a93320aa336a21ab3320aa3320ab336a21ac3320ab3320ac336a" - "21ad3320ac3320ad336a21ae3320ad3320ae336a21af3320ae3320af336a21b03320af3320b0336a21b13320b03320b1336a21b23320b13320" - "b2336a21b33320b23320b3336a21b43320b33320b4336a21b53320b43320b5336a21b63320b53320b6336a21b73320b63320b7336a21b83320" - "b73320b8336a21b93320b83320b9336a21ba3320b93320ba336a21bb3320ba3320bb336a21bc3320bb3320bc336a21bd3320bc3320bd336a21" - "be3320bd3320be336a21bf3320be3320bf336a21c03320bf3320c0336a21c13320c03320c1336a21c23320c13320c2336a21c33320c23320c3" - "336a21c43320c33320c4336a21c53320c43320c5336a21c63320c53320c6336a21c73320c63320c7336a21c83320c73320c8336a21c93320c8" - "3320c9336a21ca3320c93320ca336a21cb3320ca3320cb336a21cc3320cb3320cc336a21cd3320cc3320cd336a21ce3320cd3320ce336a21cf" - "3320ce3320cf336a21d03320cf3320d0336a21d13320d03320d1336a21d23320d13320d2336a21d33320d23320d3336a21d43320d33320d433" - "6a21d53320d43320d5336a21d63320d53320d6336a21d73320d63320d7336a21d83320d73320d8336a21d93320d83320d9336a21da3320d933" - "20da336a21db3320da3320db336a21dc3320db3320dc336a21dd3320dc3320dd336a21de3320dd3320de336a21df3320de3320df336a21e033" - "20df3320e0336a21e13320e03320e1336a21e23320e13320e2336a21e33320e23320e3336a21e43320e33320e4336a21e53320e43320e5336a" - "21e63320e53320e6336a21e73320e63320e7336a21e83320e73320e8336a21e93320e83320e9336a21ea3320e93320ea336a21eb3320ea3320" - "eb336a21ec3320eb3320ec336a21ed3320ec3320ed336a21ee3320ed3320ee336a21ef3320ee3320ef336a21f03320ef3320f0336a21f13320" - "f03320f1336a21f23320f13320f2336a21f33320f23320f3336a21f43320f33320f4336a21f53320f43320f5336a21f63320f53320f6336a21" - "f73320f63320f7336a21f83320f73320f8336a21f93320f83320f9336a21fa3320f93320fa336a21fb3320fa3320fb336a21fc3320fb3320fc" - "336a21fd3320fc3320fd336a21fe3320fd3320fe336a21ff3320fe3320ff336a21803420ff332080346a2181342080342081346a2182342081" - "342082346a2183342082342083346a2184342083342084346a2185342084342085346a2186342085342086346a2187342086342087346a2188" - "342087342088346a2189342088342089346a218a34208934208a346a218b34208a34208b346a218c34208b34208c346a218d34208c34208d34" - "6a218e34208d34208e346a218f34208e34208f346a219034208f342090346a2191342090342091346a2192342091342092346a219334209234" - "2093346a2194342093342094346a2195342094342095346a2196342095342096346a2197342096342097346a2198342097342098346a219934" - "2098342099346a219a34209934209a346a219b34209a34209b346a219c34209b34209c346a219d34209c34209d346a219e34209d34209e346a" - "219f34209e34209f346a21a034209f3420a0346a21a13420a03420a1346a21a23420a13420a2346a21a33420a23420a3346a21a43420a33420" - "a4346a21a53420a43420a5346a21a63420a53420a6346a21a73420a63420a7346a21a83420a73420a8346a21a93420a83420a9346a21aa3420" - "a93420aa346a21ab3420aa3420ab346a21ac3420ab3420ac346a21ad3420ac3420ad346a21ae3420ad3420ae346a21af3420ae3420af346a21" - "b03420af3420b0346a21b13420b03420b1346a21b23420b13420b2346a21b33420b23420b3346a21b43420b33420b4346a21b53420b43420b5" - "346a21b63420b53420b6346a21b73420b63420b7346a21b83420b73420b8346a21b93420b83420b9346a21ba3420b93420ba346a21bb3420ba" - "3420bb346a21bc3420bb3420bc346a21bd3420bc3420bd346a21be3420bd3420be346a21bf3420be3420bf346a21c03420bf3420c0346a21c1" - "3420c03420c1346a21c23420c13420c2346a21c33420c23420c3346a21c43420c33420c4346a21c53420c43420c5346a21c63420c53420c634" - "6a21c73420c63420c7346a21c83420c73420c8346a21c93420c83420c9346a21ca3420c93420ca346a21cb3420ca3420cb346a21cc3420cb34" - "20cc346a21cd3420cc3420cd346a21ce3420cd3420ce346a21cf3420ce3420cf346a21d03420cf3420d0346a21d13420d03420d1346a21d234" - "20d13420d2346a21d33420d23420d3346a21d43420d33420d4346a21d53420d43420d5346a21d63420d53420d6346a21d73420d63420d7346a" - "21d83420d73420d8346a21d93420d83420d9346a21da3420d93420da346a21db3420da3420db346a21dc3420db3420dc346a21dd3420dc3420" - "dd346a21de3420dd3420de346a21df3420de3420df346a21e03420df3420e0346a21e13420e03420e1346a21e23420e13420e2346a21e33420" - "e23420e3346a21e43420e33420e4346a21e53420e43420e5346a21e63420e53420e6346a21e73420e63420e7346a21e83420e73420e8346a21" - "e93420e83420e9346a21ea3420e93420ea346a21eb3420ea3420eb346a21ec3420eb3420ec346a21ed3420ec3420ed346a21ee3420ed3420ee" - "346a21ef3420ee3420ef346a21f03420ef3420f0346a21f13420f03420f1346a21f23420f13420f2346a21f33420f23420f3346a21f43420f3" - "3420f4346a21f53420f43420f5346a21f63420f53420f6346a21f73420f63420f7346a21f83420f73420f8346a21f93420f83420f9346a21fa" - "3420f93420fa346a21fb3420fa3420fb346a21fc3420fb3420fc346a21fd3420fc3420fd346a21fe3420fd3420fe346a21ff3420fe3420ff34" - "6a21803520ff342080356a2181352080352081356a2182352081352082356a2183352082352083356a2184352083352084356a218535208435" - "2085356a2186352085352086356a2187352086352087356a2188352087352088356a2189352088352089356a218a35208935208a356a218b35" - "208a35208b356a218c35208b35208c356a218d35208c35208d356a218e35208d35208e356a218f35208e35208f356a219035208f352090356a" - "2191352090352091356a2192352091352092356a2193352092352093356a2194352093352094356a2195352094352095356a21963520953520" - "96356a2197352096352097356a2198352097352098356a2199352098352099356a219a35209935209a356a219b35209a35209b356a219c3520" - "9b35209c356a219d35209c35209d356a219e35209d35209e356a219f35209e35209f356a21a035209f3520a0356a21a13520a03520a1356a21" - "a23520a13520a2356a21a33520a23520a3356a21a43520a33520a4356a21a53520a43520a5356a21a63520a53520a6356a21a73520a63520a7" - "356a21a83520a73520a8356a21a93520a83520a9356a21aa3520a93520aa356a21ab3520aa3520ab356a21ac3520ab3520ac356a21ad3520ac" - "3520ad356a21ae3520ad3520ae356a21af3520ae3520af356a21b03520af3520b0356a21b13520b03520b1356a21b23520b13520b2356a21b3" - "3520b23520b3356a21b43520b33520b4356a21b53520b43520b5356a21b63520b53520b6356a21b73520b63520b7356a21b83520b73520b835" - "6a21b93520b83520b9356a21ba3520b93520ba356a21bb3520ba3520bb356a21bc3520bb3520bc356a21bd3520bc3520bd356a21be3520bd35" - "20be356a21bf3520be3520bf356a21c03520bf3520c0356a21c13520c03520c1356a21c23520c13520c2356a21c33520c23520c3356a21c435" - "20c33520c4356a21c53520c43520c5356a21c63520c53520c6356a21c73520c63520c7356a21c83520c73520c8356a21c93520c83520c9356a" - "21ca3520c93520ca356a21cb3520ca3520cb356a21cc3520cb3520cc356a21cd3520cc3520cd356a21ce3520cd3520ce356a21cf3520ce3520" - "cf356a21d03520cf3520d0356a21d13520d03520d1356a21d23520d13520d2356a21d33520d23520d3356a21d43520d33520d4356a21d53520" - "d43520d5356a21d63520d53520d6356a21d73520d63520d7356a21d83520d73520d8356a21d93520d83520d9356a21da3520d93520da356a21" - "db3520da3520db356a21dc3520db3520dc356a21dd3520dc3520dd356a21de3520dd3520de356a21df3520de3520df356a21e03520df3520e0" - "356a21e13520e03520e1356a21e23520e13520e2356a21e33520e23520e3356a21e43520e33520e4356a21e53520e43520e5356a21e63520e5" - "3520e6356a21e73520e63520e7356a21e83520e73520e8356a21e93520e83520e9356a21ea3520e93520ea356a21eb3520ea3520eb356a21ec" - "3520eb3520ec356a21ed3520ec3520ed356a21ee3520ed3520ee356a21ef3520ee3520ef356a21f03520ef3520f0356a21f13520f03520f135" - "6a21f23520f13520f2356a21f33520f23520f3356a21f43520f33520f4356a21f53520f43520f5356a21f63520f53520f6356a21f73520f635" - "20f7356a21f83520f73520f8356a21f93520f83520f9356a21fa3520f93520fa356a21fb3520fa3520fb356a21fc3520fb3520fc356a21fd35" - "20fc3520fd356a21fe3520fd3520fe356a21ff3520fe3520ff356a21803620ff352080366a2181362080362081366a2182362081362082366a" - "2183362082362083366a2184362083362084366a2185362084362085366a2186362085362086366a2187362086362087366a21883620873620" - "88366a2189362088362089366a218a36208936208a366a218b36208a36208b366a218c36208b36208c366a218d36208c36208d366a218e3620" - "8d36208e366a218f36208e36208f366a219036208f362090366a2191362090362091366a2192362091362092366a2193362092362093366a21" - "94362093362094366a2195362094362095366a2196362095362096366a2197362096362097366a2198362097362098366a2199362098362099" - "366a219a36209936209a366a219b36209a36209b366a219c36209b36209c366a219d36209c36209d366a219e36209d36209e366a219f36209e" - "36209f366a21a036209f3620a0366a21a13620a03620a1366a21a23620a13620a2366a21a33620a23620a3366a21a43620a33620a4366a21a5" - "3620a43620a5366a21a63620a53620a6366a21a73620a63620a7366a21a83620a73620a8366a21a93620a83620a9366a21aa3620a93620aa36" - "6a21ab3620aa3620ab366a21ac3620ab3620ac366a21ad3620ac3620ad366a21ae3620ad3620ae366a21af3620ae3620af366a21b03620af36" - "20b0366a21b13620b03620b1366a21b23620b13620b2366a21b33620b23620b3366a21b43620b33620b4366a21b53620b43620b5366a21b636" - "20b53620b6366a21b73620b63620b7366a21b83620b73620b8366a21b93620b83620b9366a21ba3620b93620ba366a21bb3620ba3620bb366a" - "21bc3620bb3620bc366a21bd3620bc3620bd366a21be3620bd3620be366a21bf3620be3620bf366a21c03620bf3620c0366a21c13620c03620" - "c1366a21c23620c13620c2366a21c33620c23620c3366a21c43620c33620c4366a21c53620c43620c5366a21c63620c53620c6366a21c73620" - "c63620c7366a21c83620c73620c8366a21c93620c83620c9366a21ca3620c93620ca366a21cb3620ca3620cb366a21cc3620cb3620cc366a21" - "cd3620cc3620cd366a21ce3620cd3620ce366a21cf3620ce3620cf366a21d03620cf3620d0366a21d13620d03620d1366a21d23620d13620d2" - "366a21d33620d23620d3366a21d43620d33620d4366a21d53620d43620d5366a21d63620d53620d6366a21d73620d63620d7366a21d83620d7" - "3620d8366a21d93620d83620d9366a21da3620d93620da366a21db3620da3620db366a21dc3620db3620dc366a21dd3620dc3620dd366a21de" - "3620dd3620de366a21df3620de3620df366a21e03620df3620e0366a21e13620e03620e1366a21e23620e13620e2366a21e33620e23620e336" - "6a21e43620e33620e4366a21e53620e43620e5366a21e63620e53620e6366a21e73620e63620e7366a21e83620e73620e8366a21e93620e836" - "20e9366a21ea3620e93620ea366a21eb3620ea3620eb366a21ec3620eb3620ec366a21ed3620ec3620ed366a21ee3620ed3620ee366a21ef36" - "20ee3620ef366a21f03620ef3620f0366a21f13620f03620f1366a21f23620f13620f2366a21f33620f23620f3366a21f43620f33620f4366a" - "21f53620f43620f5366a21f63620f53620f6366a21f73620f63620f7366a21f83620f73620f8366a21f93620f83620f9366a21fa3620f93620" - "fa366a21fb3620fa3620fb366a21fc3620fb3620fc366a21fd3620fc3620fd366a21fe3620fd3620fe366a21ff3620fe3620ff366a21803720" - "ff362080376a2181372080372081376a2182372081372082376a2183372082372083376a2184372083372084376a2185372084372085376a21" - "86372085372086376a2187372086372087376a2188372087372088376a2189372088372089376a218a37208937208a376a218b37208a37208b" - "376a218c37208b37208c376a218d37208c37208d376a218e37208d37208e376a218f37208e37208f376a219037208f372090376a2191372090" - "372091376a2192372091372092376a2193372092372093376a2194372093372094376a2195372094372095376a2196372095372096376a2197" - "372096372097376a2198372097372098376a2199372098372099376a219a37209937209a376a219b37209a37209b376a219c37209b37209c37" - "6a219d37209c37209d376a219e37209d37209e376a219f37209e37209f376a21a037209f3720a0376a21a13720a03720a1376a21a23720a137" - "20a2376a21a33720a23720a3376a21a43720a33720a4376a21a53720a43720a5376a21a63720a53720a6376a21a73720a63720a7376a21a837" - "20a73720a8376a21a93720a83720a9376a21aa3720a93720aa376a21ab3720aa3720ab376a21ac3720ab3720ac376a21ad3720ac3720ad376a" - "21ae3720ad3720ae376a21af3720ae3720af376a21b03720af3720b0376a21b13720b03720b1376a21b23720b13720b2376a21b33720b23720" - "b3376a21b43720b33720b4376a21b53720b43720b5376a21b63720b53720b6376a21b73720b63720b7376a21b83720b73720b8376a21b93720" - "b83720b9376a21ba3720b93720ba376a21bb3720ba3720bb376a21bc3720bb3720bc376a21bd3720bc3720bd376a21be3720bd3720be376a21" - "bf3720be3720bf376a21c03720bf3720c0376a21c13720c03720c1376a21c23720c13720c2376a21c33720c23720c3376a21c43720c33720c4" - "376a21c53720c43720c5376a21c63720c53720c6376a21c73720c63720c7376a21c83720c73720c8376a21c93720c83720c9376a21ca3720c9" - "3720ca376a21cb3720ca3720cb376a21cc3720cb3720cc376a21cd3720cc3720cd376a21ce3720cd3720ce376a21cf3720ce3720cf376a21d0" - "3720cf3720d0376a21d13720d03720d1376a21d23720d13720d2376a21d33720d23720d3376a21d43720d33720d4376a21d53720d43720d537" - "6a21d63720d53720d6376a21d73720d63720d7376a21d83720d73720d8376a21d93720d83720d9376a21da3720d93720da376a21db3720da37" - "20db376a21dc3720db3720dc376a21dd3720dc3720dd376a21de3720dd3720de376a21df3720de3720df376a21e03720df3720e0376a21e137" - "20e03720e1376a21e23720e13720e2376a21e33720e23720e3376a21e43720e33720e4376a21e53720e43720e5376a21e63720e53720e6376a" - "21e73720e63720e7376a21e83720e73720e8376a21e93720e83720e9376a21ea3720e93720ea376a21eb3720ea3720eb376a21ec3720eb3720" - "ec376a21ed3720ec3720ed376a21ee3720ed3720ee376a21ef3720ee3720ef376a21f03720ef3720f0376a21f13720f03720f1376a21f23720" - "f13720f2376a21f33720f23720f3376a21f43720f33720f4376a21f53720f43720f5376a21f63720f53720f6376a21f73720f63720f7376a21" - "f83720f73720f8376a21f93720f83720f9376a21fa3720f93720fa376a21fb3720fa3720fb376a21fc3720fb3720fc376a21fd3720fc3720fd" - "376a21fe3720fd3720fe376a21ff3720fe3720ff376a21803820ff372080386a2181382080382081386a2182382081382082386a2183382082" - "382083386a2184382083382084386a2185382084382085386a2186382085382086386a2187382086382087386a2188382087382088386a2189" - "382088382089386a218a38208938208a386a218b38208a38208b386a218c38208b38208c386a218d38208c38208d386a218e38208d38208e38" - "6a218f38208e38208f386a219038208f382090386a2191382090382091386a2192382091382092386a2193382092382093386a219438209338" - "2094386a2195382094382095386a2196382095382096386a2197382096382097386a2198382097382098386a2199382098382099386a219a38" - "209938209a386a219b38209a38209b386a219c38209b38209c386a219d38209c38209d386a219e38209d38209e386a219f38209e38209f386a" - "21a038209f3820a0386a21a13820a03820a1386a21a23820a13820a2386a21a33820a23820a3386a21a43820a33820a4386a21a53820a43820" - "a5386a21a63820a53820a6386a21a73820a63820a7386a21a83820a73820a8386a21a93820a83820a9386a21aa3820a93820aa386a21ab3820" - "aa3820ab386a21ac3820ab3820ac386a21ad3820ac3820ad386a21ae3820ad3820ae386a21af3820ae3820af386a21b03820af3820b0386a21" - "b13820b03820b1386a21b23820b13820b2386a21b33820b23820b3386a21b43820b33820b4386a21b53820b43820b5386a21b63820b53820b6" - "386a21b73820b63820b7386a21b83820b73820b8386a21b93820b83820b9386a21ba3820b93820ba386a21bb3820ba3820bb386a21bc3820bb" - "3820bc386a21bd3820bc3820bd386a21be3820bd3820be386a21bf3820be3820bf386a21c03820bf3820c0386a21c13820c03820c1386a21c2" - "3820c13820c2386a21c33820c23820c3386a21c43820c33820c4386a21c53820c43820c5386a21c63820c53820c6386a21c73820c63820c738" - "6a21c83820c73820c8386a21c93820c83820c9386a21ca3820c93820ca386a21cb3820ca3820cb386a21cc3820cb3820cc386a21cd3820cc38" - "20cd386a21ce3820cd3820ce386a21cf3820ce3820cf386a21d03820cf3820d0386a21d13820d03820d1386a21d23820d13820d2386a21d338" - "20d23820d3386a21d43820d33820d4386a21d53820d43820d5386a21d63820d53820d6386a21d73820d63820d7386a21d83820d73820d8386a" - "21d93820d83820d9386a21da3820d93820da386a21db3820da3820db386a21dc3820db3820dc386a21dd3820dc3820dd386a21de3820dd3820" - "de386a21df3820de3820df386a21e03820df3820e0386a21e13820e03820e1386a21e23820e13820e2386a21e33820e23820e3386a21e43820" - "e33820e4386a21e53820e43820e5386a21e63820e53820e6386a21e73820e63820e7386a21e83820e73820e8386a21e93820e83820e9386a21" - "ea3820e93820ea386a21eb3820ea3820eb386a21ec3820eb3820ec386a21ed3820ec3820ed386a21ee3820ed3820ee386a21ef3820ee3820ef" - "386a21f03820ef3820f0386a21f13820f03820f1386a21f23820f13820f2386a21f33820f23820f3386a21f43820f33820f4386a21f53820f4" - "3820f5386a21f63820f53820f6386a21f73820f63820f7386a21f83820f73820f8386a21f93820f83820f9386a21fa3820f93820fa386a21fb" - "3820fa3820fb386a21fc3820fb3820fc386a21fd3820fc3820fd386a21fe3820fd3820fe386a21ff3820fe3820ff386a21803920ff38208039" - "6a2181392080392081396a2182392081392082396a2183392082392083396a2184392083392084396a2185392084392085396a218639208539" - "2086396a2187392086392087396a2188392087392088396a2189392088392089396a218a39208939208a396a218b39208a39208b396a218c39" - "208b39208c396a218d39208c39208d396a218e39208d39208e396a218f39208e39208f396a219039208f392090396a2191392090392091396a" - "2192392091392092396a2193392092392093396a2194392093392094396a2195392094392095396a2196392095392096396a21973920963920" - "97396a2198392097392098396a2199392098392099396a219a39209939209a396a219b39209a39209b396a219c39209b39209c396a219d3920" - "9c39209d396a219e39209d39209e396a219f39209e39209f396a21a039209f3920a0396a21a13920a03920a1396a21a23920a13920a2396a21" - "a33920a23920a3396a21a43920a33920a4396a21a53920a43920a5396a21a63920a53920a6396a21a73920a63920a7396a21a83920a73920a8" - "396a21a93920a83920a9396a21aa3920a93920aa396a21ab3920aa3920ab396a21ac3920ab3920ac396a21ad3920ac3920ad396a21ae3920ad" - "3920ae396a21af3920ae3920af396a21b03920af3920b0396a21b13920b03920b1396a21b23920b13920b2396a21b33920b23920b3396a21b4" - "3920b33920b4396a21b53920b43920b5396a21b63920b53920b6396a21b73920b63920b7396a21b83920b73920b8396a21b93920b83920b939" - "6a21ba3920b93920ba396a21bb3920ba3920bb396a21bc3920bb3920bc396a21bd3920bc3920bd396a21be3920bd3920be396a21bf3920be39" - "20bf396a21c03920bf3920c0396a21c13920c03920c1396a21c23920c13920c2396a21c33920c23920c3396a21c43920c33920c4396a21c539" - "20c43920c5396a21c63920c53920c6396a21c73920c63920c7396a21c83920c73920c8396a21c93920c83920c9396a21ca3920c93920ca396a" - "21cb3920ca3920cb396a21cc3920cb3920cc396a21cd3920cc3920cd396a21ce3920cd3920ce396a21cf3920ce3920cf396a21d03920cf3920" - "d0396a21d13920d03920d1396a21d23920d13920d2396a21d33920d23920d3396a21d43920d33920d4396a21d53920d43920d5396a21d63920" - "d53920d6396a21d73920d63920d7396a21d83920d73920d8396a21d93920d83920d9396a21da3920d93920da396a21db3920da3920db396a21" - "dc3920db3920dc396a21dd3920dc3920dd396a21de3920dd3920de396a21df3920de3920df396a21e03920df3920e0396a21e13920e03920e1" - "396a21e23920e13920e2396a21e33920e23920e3396a21e43920e33920e4396a21e53920e43920e5396a21e63920e53920e6396a21e73920e6" - "3920e7396a21e83920e73920e8396a21e93920e83920e9396a21ea3920e93920ea396a21eb3920ea3920eb396a21ec3920eb3920ec396a21ed" - "3920ec3920ed396a21ee3920ed3920ee396a21ef3920ee3920ef396a21f03920ef3920f0396a21f13920f03920f1396a21f23920f13920f239" - "6a21f33920f23920f3396a21f43920f33920f4396a21f53920f43920f5396a21f63920f53920f6396a21f73920f63920f7396a21f83920f739" - "20f8396a21f93920f83920f9396a21fa3920f93920fa396a21fb3920fa3920fb396a21fc3920fb3920fc396a21fd3920fc3920fd396a21fe39" - "20fd3920fe396a21ff3920fe3920ff396a21803a20ff3920803a6a21813a20803a20813a6a21823a20813a20823a6a21833a20823a20833a6a" - "21843a20833a20843a6a21853a20843a20853a6a21863a20853a20863a6a21873a20863a20873a6a21883a20873a20883a6a21893a20883a20" - "893a6a218a3a20893a208a3a6a218b3a208a3a208b3a6a218c3a208b3a208c3a6a218d3a208c3a208d3a6a218e3a208d3a208e3a6a218f3a20" - "8e3a208f3a6a21903a208f3a20903a6a21913a20903a20913a6a21923a20913a20923a6a21933a20923a20933a6a21943a20933a20943a6a21" - "953a20943a20953a6a21963a20953a20963a6a21973a20963a20973a6a21983a20973a20983a6a21993a20983a20993a6a219a3a20993a209a" - "3a6a219b3a209a3a209b3a6a219c3a209b3a209c3a6a219d3a209c3a209d3a6a219e3a209d3a209e3a6a219f3a209e3a209f3a6a21a03a209f" - "3a20a03a6a21a13a20a03a20a13a6a21a23a20a13a20a23a6a21a33a20a23a20a33a6a21a43a20a33a20a43a6a21a53a20a43a20a53a6a21a6" - "3a20a53a20a63a6a21a73a20a63a20a73a6a21a83a20a73a20a83a6a21a93a20a83a20a93a6a21aa3a20a93a20aa3a6a21ab3a20aa3a20ab3a" - "6a21ac3a20ab3a20ac3a6a21ad3a20ac3a20ad3a6a21ae3a20ad3a20ae3a6a21af3a20ae3a20af3a6a21b03a20af3a20b03a6a21b13a20b03a" - "20b13a6a21b23a20b13a20b23a6a21b33a20b23a20b33a6a21b43a20b33a20b43a6a21b53a20b43a20b53a6a21b63a20b53a20b63a6a21b73a" - "20b63a20b73a6a21b83a20b73a20b83a6a21b93a20b83a20b93a6a21ba3a20b93a20ba3a6a21bb3a20ba3a20bb3a6a21bc3a20bb3a20bc3a6a" - "21bd3a20bc3a20bd3a6a21be3a20bd3a20be3a6a21bf3a20be3a20bf3a6a21c03a20bf3a20c03a6a21c13a20c03a20c13a6a21c23a20c13a20" - "c23a6a21c33a20c23a20c33a6a21c43a20c33a20c43a6a21c53a20c43a20c53a6a21c63a20c53a20c63a6a21c73a20c63a20c73a6a21c83a20" - "c73a20c83a6a21c93a20c83a20c93a6a21ca3a20c93a20ca3a6a21cb3a20ca3a20cb3a6a21cc3a20cb3a20cc3a6a21cd3a20cc3a20cd3a6a21" - "ce3a20cd3a20ce3a6a21cf3a20ce3a20cf3a6a21d03a20cf3a20d03a6a21d13a20d03a20d13a6a21d23a20d13a20d23a6a21d33a20d23a20d3" - "3a6a21d43a20d33a20d43a6a21d53a20d43a20d53a6a21d63a20d53a20d63a6a21d73a20d63a20d73a6a21d83a20d73a20d83a6a21d93a20d8" - "3a20d93a6a21da3a20d93a20da3a6a21db3a20da3a20db3a6a21dc3a20db3a20dc3a6a21dd3a20dc3a20dd3a6a21de3a20dd3a20de3a6a21df" - "3a20de3a20df3a6a21e03a20df3a20e03a6a21e13a20e03a20e13a6a21e23a20e13a20e23a6a21e33a20e23a20e33a6a21e43a20e33a20e43a" - "6a21e53a20e43a20e53a6a21e63a20e53a20e63a6a21e73a20e63a20e73a6a21e83a20e73a20e83a6a21e93a20e83a20e93a6a21ea3a20e93a" - "20ea3a6a21eb3a20ea3a20eb3a6a21ec3a20eb3a20ec3a6a21ed3a20ec3a20ed3a6a21ee3a20ed3a20ee3a6a21ef3a20ee3a20ef3a6a21f03a" - "20ef3a20f03a6a21f13a20f03a20f13a6a21f23a20f13a20f23a6a21f33a20f23a20f33a6a21f43a20f33a20f43a6a21f53a20f43a20f53a6a" - "21f63a20f53a20f63a6a21f73a20f63a20f73a6a21f83a20f73a20f83a6a21f93a20f83a20f93a6a21fa3a20f93a20fa3a6a21fb3a20fa3a20" - "fb3a6a21fc3a20fb3a20fc3a6a21fd3a20fc3a20fd3a6a21fe3a20fd3a20fe3a6a21ff3a20fe3a20ff3a6a21803b20ff3a20803b6a21813b20" - "803b20813b6a21823b20813b20823b6a21833b20823b20833b6a21843b20833b20843b6a21853b20843b20853b6a21863b20853b20863b6a21" - "873b20863b20873b6a21883b20873b20883b6a21893b20883b20893b6a218a3b20893b208a3b6a218b3b208a3b208b3b6a218c3b208b3b208c" - "3b6a218d3b208c3b208d3b6a218e3b208d3b208e3b6a218f3b208e3b208f3b6a21903b208f3b20903b6a21913b20903b20913b6a21923b2091" - "3b20923b6a21933b20923b20933b6a21943b20933b20943b6a21953b20943b20953b6a21963b20953b20963b6a21973b20963b20973b6a2198" - "3b20973b20983b6a21993b20983b20993b6a219a3b20993b209a3b6a219b3b209a3b209b3b6a219c3b209b3b209c3b6a219d3b209c3b209d3b" - "6a219e3b209d3b209e3b6a219f3b209e3b209f3b6a21a03b209f3b20a03b6a21a13b20a03b20a13b6a21a23b20a13b20a23b6a21a33b20a23b" - "20a33b6a21a43b20a33b20a43b6a21a53b20a43b20a53b6a21a63b20a53b20a63b6a21a73b20a63b20a73b6a21a83b20a73b20a83b6a21a93b" - "20a83b20a93b6a21aa3b20a93b20aa3b6a21ab3b20aa3b20ab3b6a21ac3b20ab3b20ac3b6a21ad3b20ac3b20ad3b6a21ae3b20ad3b20ae3b6a" - "21af3b20ae3b20af3b6a21b03b20af3b20b03b6a21b13b20b03b20b13b6a21b23b20b13b20b23b6a21b33b20b23b20b33b6a21b43b20b33b20" - "b43b6a21b53b20b43b20b53b6a21b63b20b53b20b63b6a21b73b20b63b20b73b6a21b83b20b73b20b83b6a21b93b20b83b20b93b6a21ba3b20" - "b93b20ba3b6a21bb3b20ba3b20bb3b6a21bc3b20bb3b20bc3b6a21bd3b20bc3b20bd3b6a21be3b20bd3b20be3b6a21bf3b20be3b20bf3b6a21" - "c03b20bf3b20c03b6a21c13b20c03b20c13b6a21c23b20c13b20c23b6a21c33b20c23b20c33b6a21c43b20c33b20c43b6a21c53b20c43b20c5" - "3b6a21c63b20c53b20c63b6a21c73b20c63b20c73b6a21c83b20c73b20c83b6a21c93b20c83b20c93b6a21ca3b20c93b20ca3b6a21cb3b20ca" - "3b20cb3b6a21cc3b20cb3b20cc3b6a21cd3b20cc3b20cd3b6a21ce3b20cd3b20ce3b6a21cf3b20ce3b20cf3b6a21d03b20cf3b20d03b6a21d1" - "3b20d03b20d13b6a21d23b20d13b20d23b6a21d33b20d23b20d33b6a21d43b20d33b20d43b6a21d53b20d43b20d53b6a21d63b20d53b20d63b" - "6a21d73b20d63b20d73b6a21d83b20d73b20d83b6a21d93b20d83b20d93b6a21da3b20d93b20da3b6a21db3b20da3b20db3b6a21dc3b20db3b" - "20dc3b6a21dd3b20dc3b20dd3b6a21de3b20dd3b20de3b6a21df3b20de3b20df3b6a21e03b20df3b20e03b6a21e13b20e03b20e13b6a21e23b" - "20e13b20e23b6a21e33b20e23b20e33b6a21e43b20e33b20e43b6a21e53b20e43b20e53b6a21e63b20e53b20e63b6a21e73b20e63b20e73b6a" - "21e83b20e73b20e83b6a21e93b20e83b20e93b6a21ea3b20e93b20ea3b6a21eb3b20ea3b20eb3b6a21ec3b20eb3b20ec3b6a21ed3b20ec3b20" - "ed3b6a21ee3b20ed3b20ee3b6a21ef3b20ee3b20ef3b6a21f03b20ef3b20f03b6a21f13b20f03b20f13b6a21f23b20f13b20f23b6a21f33b20" - "f23b20f33b6a21f43b20f33b20f43b6a21f53b20f43b20f53b6a21f63b20f53b20f63b6a21f73b20f63b20f73b6a21f83b20f73b20f83b6a21" - "f93b20f83b20f93b6a21fa3b20f93b20fa3b6a21fb3b20fa3b20fb3b6a21fc3b20fb3b20fc3b6a21fd3b20fc3b20fd3b6a21fe3b20fd3b20fe" - "3b6a21ff3b20fe3b20ff3b6a21803c20ff3b20803c6a21813c20803c20813c6a21823c20813c20823c6a21833c20823c20833c6a21843c2083" - "3c20843c6a21853c20843c20853c6a21863c20853c20863c6a21873c20863c20873c6a21883c20873c20883c6a21893c20883c20893c6a218a" - "3c20893c208a3c6a218b3c208a3c208b3c6a218c3c208b3c208c3c6a218d3c208c3c208d3c6a218e3c208d3c208e3c6a218f3c208e3c208f3c" - "6a21903c208f3c20903c6a21913c20903c20913c6a21923c20913c20923c6a21933c20923c20933c6a21943c20933c20943c6a21953c20943c" - "20953c6a21963c20953c20963c6a21973c20963c20973c6a21983c20973c20983c6a21993c20983c20993c6a219a3c20993c209a3c6a219b3c" - "209a3c209b3c6a219c3c209b3c209c3c6a219d3c209c3c209d3c6a219e3c209d3c209e3c6a219f3c209e3c209f3c6a21a03c209f3c20a03c6a" - "21a13c20a03c20a13c6a21a23c20a13c20a23c6a21a33c20a23c20a33c6a21a43c20a33c20a43c6a21a53c20a43c20a53c6a21a63c20a53c20" - "a63c6a21a73c20a63c20a73c6a21a83c20a73c20a83c6a21a93c20a83c20a93c6a21aa3c20a93c20aa3c6a21ab3c20aa3c20ab3c6a21ac3c20" - "ab3c20ac3c6a21ad3c20ac3c20ad3c6a21ae3c20ad3c20ae3c6a21af3c20ae3c20af3c6a21b03c20af3c20b03c6a21b13c20b03c20b13c6a21" - "b23c20b13c20b23c6a21b33c20b23c20b33c6a21b43c20b33c20b43c6a21b53c20b43c20b53c6a21b63c20b53c20b63c6a21b73c20b63c20b7" - "3c6a21b83c20b73c20b83c6a21b93c20b83c20b93c6a21ba3c20b93c20ba3c6a21bb3c20ba3c20bb3c6a21bc3c20bb3c20bc3c6a21bd3c20bc" - "3c20bd3c6a21be3c20bd3c20be3c6a21bf3c20be3c20bf3c6a21c03c20bf3c20c03c6a21c13c20c03c20c13c6a21c23c20c13c20c23c6a21c3" - "3c20c23c20c33c6a21c43c20c33c20c43c6a21c53c20c43c20c53c6a21c63c20c53c20c63c6a21c73c20c63c20c73c6a21c83c20c73c20c83c" - "6a21c93c20c83c20c93c6a21ca3c20c93c20ca3c6a21cb3c20ca3c20cb3c6a21cc3c20cb3c20cc3c6a21cd3c20cc3c20cd3c6a21ce3c20cd3c" - "20ce3c6a21cf3c20ce3c20cf3c6a21d03c20cf3c20d03c6a21d13c20d03c20d13c6a21d23c20d13c20d23c6a21d33c20d23c20d33c6a21d43c" - "20d33c20d43c6a21d53c20d43c20d53c6a21d63c20d53c20d63c6a21d73c20d63c20d73c6a21d83c20d73c20d83c6a21d93c20d83c20d93c6a" - "21da3c20d93c20da3c6a21db3c20da3c20db3c6a21dc3c20db3c20dc3c6a21dd3c20dc3c20dd3c6a21de3c20dd3c20de3c6a21df3c20de3c20" - "df3c6a21e03c20df3c20e03c6a21e13c20e03c20e13c6a21e23c20e13c20e23c6a21e33c20e23c20e33c6a21e43c20e33c20e43c6a21e53c20" - "e43c20e53c6a21e63c20e53c20e63c6a21e73c20e63c20e73c6a21e83c20e73c20e83c6a21e93c20e83c20e93c6a21ea3c20e93c20ea3c6a21" - "eb3c20ea3c20eb3c6a21ec3c20eb3c20ec3c6a21ed3c20ec3c20ed3c6a21ee3c20ed3c20ee3c6a21ef3c20ee3c20ef3c6a21f03c20ef3c20f0" - "3c6a21f13c20f03c20f13c6a21f23c20f13c20f23c6a21f33c20f23c20f33c6a21f43c20f33c20f43c6a21f53c20f43c20f53c6a21f63c20f5" - "3c20f63c6a21f73c20f63c20f73c6a21f83c20f73c20f83c6a21f93c20f83c20f93c6a21fa3c20f93c20fa3c6a21fb3c20fa3c20fb3c6a21fc" - "3c20fb3c20fc3c6a21fd3c20fc3c20fd3c6a21fe3c20fd3c20fe3c6a21ff3c20fe3c20ff3c6a21803d20ff3c20803d6a21813d20803d20813d" - "6a21823d20813d20823d6a21833d20823d20833d6a21843d20833d20843d6a21853d20843d20853d6a21863d20853d20863d6a21873d20863d" - "20873d6a21883d20873d20883d6a21893d20883d20893d6a218a3d20893d208a3d6a218b3d208a3d208b3d6a218c3d208b3d208c3d6a218d3d" - "208c3d208d3d6a218e3d208d3d208e3d6a218f3d208e3d208f3d6a21903d208f3d20903d6a21913d20903d20913d6a21923d20913d20923d6a" - "21933d20923d20933d6a21943d20933d20943d6a21953d20943d20953d6a21963d20953d20963d6a21973d20963d20973d6a21983d20973d20" - "983d6a21993d20983d20993d6a219a3d20993d209a3d6a219b3d209a3d209b3d6a219c3d209b3d209c3d6a219d3d209c3d209d3d6a219e3d20" - "9d3d209e3d6a219f3d209e3d209f3d6a21a03d209f3d20a03d6a21a13d20a03d20a13d6a21a23d20a13d20a23d6a21a33d20a23d20a33d6a21" - "a43d20a33d20a43d6a21a53d20a43d20a53d6a21a63d20a53d20a63d6a21a73d20a63d20a73d6a21a83d20a73d20a83d6a21a93d20a83d20a9" - "3d6a21aa3d20a93d20aa3d6a21ab3d20aa3d20ab3d6a21ac3d20ab3d20ac3d6a21ad3d20ac3d20ad3d6a21ae3d20ad3d20ae3d6a21af3d20ae" - "3d20af3d6a21b03d20af3d20b03d6a21b13d20b03d20b13d6a21b23d20b13d20b23d6a21b33d20b23d20b33d6a21b43d20b33d20b43d6a21b5" - "3d20b43d20b53d6a21b63d20b53d20b63d6a21b73d20b63d20b73d6a21b83d20b73d20b83d6a21b93d20b83d20b93d6a21ba3d20b93d20ba3d" - "6a21bb3d20ba3d20bb3d6a21bc3d20bb3d20bc3d6a21bd3d20bc3d20bd3d6a21be3d20bd3d20be3d6a21bf3d20be3d20bf3d6a21c03d20bf3d" - "20c03d6a21c13d20c03d20c13d6a21c23d20c13d20c23d6a21c33d20c23d20c33d6a21c43d20c33d20c43d6a21c53d20c43d20c53d6a21c63d" - "20c53d20c63d6a21c73d20c63d20c73d6a21c83d20c73d20c83d6a21c93d20c83d20c93d6a21ca3d20c93d20ca3d6a21cb3d20ca3d20cb3d6a" - "21cc3d20cb3d20cc3d6a21cd3d20cc3d20cd3d6a21ce3d20cd3d20ce3d6a21cf3d20ce3d20cf3d6a21d03d20cf3d20d03d6a21d13d20d03d20" - "d13d6a21d23d20d13d20d23d6a21d33d20d23d20d33d6a21d43d20d33d20d43d6a21d53d20d43d20d53d6a21d63d20d53d20d63d6a21d73d20" - "d63d20d73d6a21d83d20d73d20d83d6a21d93d20d83d20d93d6a21da3d20d93d20da3d6a21db3d20da3d20db3d6a21dc3d20db3d20dc3d6a21" - "dd3d20dc3d20dd3d6a21de3d20dd3d20de3d6a21df3d20de3d20df3d6a21e03d20df3d20e03d6a21e13d20e03d20e13d6a21e23d20e13d20e2" - "3d6a21e33d20e23d20e33d6a21e43d20e33d20e43d6a21e53d20e43d20e53d6a21e63d20e53d20e63d6a21e73d20e63d20e73d6a21e83d20e7" - "3d20e83d6a21e93d20e83d20e93d6a21ea3d20e93d20ea3d6a21eb3d20ea3d20eb3d6a21ec3d20eb3d20ec3d6a21ed3d20ec3d20ed3d6a21ee" - "3d20ed3d20ee3d6a21ef3d20ee3d20ef3d6a21f03d20ef3d20f03d6a21f13d20f03d20f13d6a21f23d20f13d20f23d6a21f33d20f23d20f33d" - "6a21f43d20f33d20f43d6a21f53d20f43d20f53d6a21f63d20f53d20f63d6a21f73d20f63d20f73d6a21f83d20f73d20f83d6a21f93d20f83d" - "20f93d6a21fa3d20f93d20fa3d6a21fb3d20fa3d20fb3d6a21fc3d20fb3d20fc3d6a21fd3d20fc3d20fd3d6a21fe3d20fd3d20fe3d6a21ff3d" - "20fe3d20ff3d6a21803e20ff3d20803e6a21813e20803e20813e6a21823e20813e20823e6a21833e20823e20833e6a21843e20833e20843e6a" - "21853e20843e20853e6a21863e20853e20863e6a21873e20863e20873e6a21883e20873e20883e6a21893e20883e20893e6a218a3e20893e20" - "8a3e6a218b3e208a3e208b3e6a218c3e208b3e208c3e6a218d3e208c3e208d3e6a218e3e208d3e208e3e6a218f3e208e3e208f3e6a21903e20" - "8f3e20903e6a21913e20903e20913e6a21923e20913e20923e6a21933e20923e20933e6a21943e20933e20943e6a21953e20943e20953e6a21" - "963e20953e20963e6a21973e20963e20973e6a21983e20973e20983e6a21993e20983e20993e6a219a3e20993e209a3e6a219b3e209a3e209b" - "3e6a219c3e209b3e209c3e6a219d3e209c3e209d3e6a219e3e209d3e209e3e6a219f3e209e3e209f3e6a21a03e209f3e20a03e6a21a13e20a0" - "3e20a13e6a21a23e20a13e20a23e6a21a33e20a23e20a33e6a21a43e20a33e20a43e6a21a53e20a43e20a53e6a21a63e20a53e20a63e6a21a7" - "3e20a63e20a73e6a21a83e20a73e20a83e6a21a93e20a83e20a93e6a21aa3e20a93e20aa3e6a21ab3e20aa3e20ab3e6a21ac3e20ab3e20ac3e" - "6a21ad3e20ac3e20ad3e6a21ae3e20ad3e20ae3e6a21af3e20ae3e20af3e6a21b03e20af3e20b03e6a21b13e20b03e20b13e6a21b23e20b13e" - "20b23e6a21b33e20b23e20b33e6a21b43e20b33e20b43e6a21b53e20b43e20b53e6a21b63e20b53e20b63e6a21b73e20b63e20b73e6a21b83e" - "20b73e20b83e6a21b93e20b83e20b93e6a21ba3e20b93e20ba3e6a21bb3e20ba3e20bb3e6a21bc3e20bb3e20bc3e6a21bd3e20bc3e20bd3e6a" - "21be3e20bd3e20be3e6a21bf3e20be3e20bf3e6a21c03e20bf3e20c03e6a21c13e20c03e20c13e6a21c23e20c13e20c23e6a21c33e20c23e20" - "c33e6a21c43e20c33e20c43e6a21c53e20c43e20c53e6a21c63e20c53e20c63e6a21c73e20c63e20c73e6a21c83e20c73e20c83e6a21c93e20" - "c83e20c93e6a21ca3e20c93e20ca3e6a21cb3e20ca3e20cb3e6a21cc3e20cb3e20cc3e6a21cd3e20cc3e20cd3e6a21ce3e20cd3e20ce3e6a21" - "cf3e20ce3e20cf3e6a21d03e20cf3e20d03e6a21d13e20d03e20d13e6a21d23e20d13e20d23e6a21d33e20d23e20d33e6a21d43e20d33e20d4" - "3e6a21d53e20d43e20d53e6a21d63e20d53e20d63e6a21d73e20d63e20d73e6a21d83e20d73e20d83e6a21d93e20d83e20d93e6a21da3e20d9" - "3e20da3e6a21db3e20da3e20db3e6a21dc3e20db3e20dc3e6a21dd3e20dc3e20dd3e6a21de3e20dd3e20de3e6a21df3e20de3e20df3e6a21e0" - "3e20df3e20e03e6a21e13e20e03e20e13e6a21e23e20e13e20e23e6a21e33e20e23e20e33e6a21e43e20e33e20e43e6a21e53e20e43e20e53e" - "6a21e63e20e53e20e63e6a21e73e20e63e20e73e6a21e83e20e73e20e83e6a21e93e20e83e20e93e6a21ea3e20e93e20ea3e6a21eb3e20ea3e" - "20eb3e6a21ec3e20eb3e20ec3e6a21ed3e20ec3e20ed3e6a21ee3e20ed3e20ee3e6a21ef3e20ee3e20ef3e6a21f03e20ef3e20f03e6a21f13e" - "20f03e20f13e6a21f23e20f13e20f23e6a21f33e20f23e20f33e6a21f43e20f33e20f43e6a21f53e20f43e20f53e6a21f63e20f53e20f63e6a" - "21f73e20f63e20f73e6a21f83e20f73e20f83e6a21f93e20f83e20f93e6a21fa3e20f93e20fa3e6a21fb3e20fa3e20fb3e6a21fc3e20fb3e20" - "fc3e6a21fd3e20fc3e20fd3e6a21fe3e20fd3e20fe3e6a21ff3e20fe3e20ff3e6a21803f20ff3e20803f6a21813f20803f20813f6a21823f20" - "813f20823f6a21833f20823f20833f6a21843f20833f20843f6a21853f20843f20853f6a21863f20853f20863f6a21873f20863f20873f6a21" - "883f20873f20883f6a21893f20883f20893f6a218a3f20893f208a3f6a218b3f208a3f208b3f6a218c3f208b3f208c3f6a218d3f208c3f208d" - "3f6a218e3f208d3f208e3f6a218f3f208e3f208f3f6a21903f208f3f20903f6a21913f20903f20913f6a21923f20913f20923f6a21933f2092" - "3f20933f6a21943f20933f20943f6a21953f20943f20953f6a21963f20953f20963f6a21973f20963f20973f6a21983f20973f20983f6a2199" - "3f20983f20993f6a219a3f20993f209a3f6a219b3f209a3f209b3f6a219c3f209b3f209c3f6a219d3f209c3f209d3f6a219e3f209d3f209e3f" - "6a219f3f209e3f209f3f6a21a03f209f3f20a03f6a21a13f20a03f20a13f6a21a23f20a13f20a23f6a21a33f20a23f20a33f6a21a43f20a33f" - "20a43f6a21a53f20a43f20a53f6a21a63f20a53f20a63f6a21a73f20a63f20a73f6a21a83f20a73f20a83f6a21a93f20a83f20a93f6a21aa3f" - "20a93f20aa3f6a21ab3f20aa3f20ab3f6a21ac3f20ab3f20ac3f6a21ad3f20ac3f20ad3f6a21ae3f20ad3f20ae3f6a21af3f20ae3f20af3f6a" - "21b03f20af3f20b03f6a21b13f20b03f20b13f6a21b23f20b13f20b23f6a21b33f20b23f20b33f6a21b43f20b33f20b43f6a21b53f20b43f20" - "b53f6a21b63f20b53f20b63f6a21b73f20b63f20b73f6a21b83f20b73f20b83f6a21b93f20b83f20b93f6a21ba3f20b93f20ba3f6a21bb3f20" - "ba3f20bb3f6a21bc3f20bb3f20bc3f6a21bd3f20bc3f20bd3f6a21be3f20bd3f20be3f6a21bf3f20be3f20bf3f6a21c03f20bf3f20c03f6a21" - "c13f20c03f20c13f6a21c23f20c13f20c23f6a21c33f20c23f20c33f6a21c43f20c33f20c43f6a21c53f20c43f20c53f6a21c63f20c53f20c6" - "3f6a21c73f20c63f20c73f6a21c83f20c73f20c83f6a21c93f20c83f20c93f6a21ca3f20c93f20ca3f6a21cb3f20ca3f20cb3f6a21cc3f20cb" - "3f20cc3f6a21cd3f20cc3f20cd3f6a21ce3f20cd3f20ce3f6a21cf3f20ce3f20cf3f6a21d03f20cf3f20d03f6a21d13f20d03f20d13f6a21d2" - "3f20d13f20d23f6a21d33f20d23f20d33f6a21d43f20d33f20d43f6a21d53f20d43f20d53f6a21d63f20d53f20d63f6a21d73f20d63f20d73f" - "6a21d83f20d73f20d83f6a21d93f20d83f20d93f6a21da3f20d93f20da3f6a21db3f20da3f20db3f6a21dc3f20db3f20dc3f6a21dd3f20dc3f" - "20dd3f6a21de3f20dd3f20de3f6a21df3f20de3f20df3f6a21e03f20df3f20e03f6a21e13f20e03f20e13f6a21e23f20e13f20e23f6a21e33f" - "20e23f20e33f6a21e43f20e33f20e43f6a21e53f20e43f20e53f6a21e63f20e53f20e63f6a21e73f20e63f20e73f6a21e83f20e73f20e83f6a" - "21e93f20e83f20e93f6a21ea3f20e93f20ea3f6a21eb3f20ea3f20eb3f6a21ec3f20eb3f20ec3f6a21ed3f20ec3f20ed3f6a21ee3f20ed3f20" - "ee3f6a21ef3f20ee3f20ef3f6a21f03f20ef3f20f03f6a21f13f20f03f20f13f6a21f23f20f13f20f23f6a21f33f20f23f20f33f6a21f43f20" - "f33f20f43f6a21f53f20f43f20f53f6a21f63f20f53f20f63f6a21f73f20f63f20f73f6a21f83f20f73f20f83f6a21f93f20f83f20f93f6a21" - "fa3f20f93f20fa3f6a21fb3f20fa3f20fb3f6a21fc3f20fb3f20fc3f6a21fd3f20fc3f20fd3f6a21fe3f20fd3f20fe3f6a21ff3f20fe3f20ff" - "3f6a21804020ff3f2080406a2181402080402081406a2182402081402082406a2183402082402083406a2184402083402084406a2185402084" - "402085406a2186402085402086406a2187402086402087406a2188402087402088406a2189402088402089406a218a40208940208a406a218b" - "40208a40208b406a218c40208b40208c406a218d40208c40208d406a218e40208d40208e406a218f40208e40208f406a219040208f40209040" - "6a2191402090402091406a2192402091402092406a2193402092402093406a2194402093402094406a2195402094402095406a219640209540" - "2096406a2197402096402097406a2198402097402098406a2199402098402099406a219a40209940209a406a219b40209a40209b406a219c40" - "209b40209c406a219d40209c40209d406a219e40209d40209e406a219f40209e40209f406a21a040209f4020a0406a21a14020a04020a1406a" - "21a24020a14020a2406a21a34020a24020a3406a21a44020a34020a4406a21a54020a44020a5406a21a64020a54020a6406a21a74020a64020" - "a7406a21a84020a74020a8406a21a94020a84020a9406a21aa4020a94020aa406a21ab4020aa4020ab406a21ac4020ab4020ac406a21ad4020" - "ac4020ad406a21ae4020ad4020ae406a21af4020ae4020af406a21b04020af4020b0406a21b14020b04020b1406a21b24020b14020b2406a21" - "b34020b24020b3406a21b44020b34020b4406a21b54020b44020b5406a21b64020b54020b6406a21b74020b64020b7406a21b84020b74020b8" - "406a21b94020b84020b9406a21ba4020b94020ba406a21bb4020ba4020bb406a21bc4020bb4020bc406a21bd4020bc4020bd406a21be4020bd" - "4020be406a21bf4020be4020bf406a21c04020bf4020c0406a21c14020c04020c1406a21c24020c14020c2406a21c34020c24020c3406a21c4" - "4020c34020c4406a21c54020c44020c5406a21c64020c54020c6406a21c74020c64020c7406a21c84020c74020c8406a21c94020c84020c940" - "6a21ca4020c94020ca406a21cb4020ca4020cb406a21cc4020cb4020cc406a21cd4020cc4020cd406a21ce4020cd4020ce406a21cf4020ce40" - "20cf406a21d04020cf4020d0406a21d14020d04020d1406a21d24020d14020d2406a21d34020d24020d3406a21d44020d34020d4406a21d540" - "20d44020d5406a21d64020d54020d6406a21d74020d64020d7406a21d84020d74020d8406a21d94020d84020d9406a21da4020d94020da406a" - "21db4020da4020db406a21dc4020db4020dc406a21dd4020dc4020dd406a21de4020dd4020de406a21df4020de4020df406a21e04020df4020" - "e0406a21e14020e04020e1406a21e24020e14020e2406a21e34020e24020e3406a21e44020e34020e4406a21e54020e44020e5406a21e64020" - "e54020e6406a21e74020e64020e7406a21e84020e74020e8406a21e94020e84020e9406a21ea4020e94020ea406a21eb4020ea4020eb406a21" - "ec4020eb4020ec406a21ed4020ec4020ed406a21ee4020ed4020ee406a21ef4020ee4020ef406a21f04020ef4020f0406a21f14020f04020f1" - "406a21f24020f14020f2406a21f34020f24020f3406a21f44020f34020f4406a21f54020f44020f5406a21f64020f54020f6406a21f74020f6" - "4020f7406a21f84020f74020f8406a21f94020f84020f9406a21fa4020f94020fa406a21fb4020fa4020fb406a21fc4020fb4020fc406a21fd" - "4020fc4020fd406a21fe4020fd4020fe406a21ff4020fe4020ff406a21804120ff402080416a2181412080412081416a218241208141208241" - "6a2183412082412083416a2184412083412084416a2185412084412085416a2186412085412086416a2187412086412087416a218841208741" - "2088416a2189412088412089416a218a41208941208a416a218b41208a41208b416a218c41208b41208c416a218d41208c41208d416a218e41" - "208d41208e416a218f41208e41208f416a219041208f412090416a2191412090412091416a2192412091412092416a2193412092412093416a" - "2194412093412094416a2195412094412095416a2196412095412096416a2197412096412097416a2198412097412098416a21994120984120" - "99416a219a41209941209a416a219b41209a41209b416a219c41209b41209c416a219d41209c41209d416a219e41209d41209e416a219f4120" - "9e41209f416a21a041209f4120a0416a21a14120a04120a1416a21a24120a14120a2416a21a34120a24120a3416a21a44120a34120a4416a21" - "a54120a44120a5416a21a64120a54120a6416a21a74120a64120a7416a21a84120a74120a8416a21a94120a84120a9416a21aa4120a94120aa" - "416a21ab4120aa4120ab416a21ac4120ab4120ac416a21ad4120ac4120ad416a21ae4120ad4120ae416a21af4120ae4120af416a21b04120af" - "4120b0416a21b14120b04120b1416a21b24120b14120b2416a21b34120b24120b3416a21b44120b34120b4416a21b54120b44120b5416a21b6" - "4120b54120b6416a21b74120b64120b7416a21b84120b74120b8416a21b94120b84120b9416a21ba4120b94120ba416a21bb4120ba4120bb41" - "6a21bc4120bb4120bc416a21bd4120bc4120bd416a21be4120bd4120be416a21bf4120be4120bf416a21c04120bf4120c0416a21c14120c041" - "20c1416a21c24120c14120c2416a21c34120c24120c3416a21c44120c34120c4416a21c54120c44120c5416a21c64120c54120c6416a21c741" - "20c64120c7416a21c84120c74120c8416a21c94120c84120c9416a21ca4120c94120ca416a21cb4120ca4120cb416a21cc4120cb4120cc416a" - "21cd4120cc4120cd416a21ce4120cd4120ce416a21cf4120ce4120cf416a21d04120cf4120d0416a21d14120d04120d1416a21d24120d14120" - "d2416a21d34120d24120d3416a21d44120d34120d4416a21d54120d44120d5416a21d64120d54120d6416a21d74120d64120d7416a21d84120" - "d74120d8416a21d94120d84120d9416a21da4120d94120da416a21db4120da4120db416a21dc4120db4120dc416a21dd4120dc4120dd416a21" - "de4120dd4120de416a21df4120de4120df416a21e04120df4120e0416a21e14120e04120e1416a21e24120e14120e2416a21e34120e24120e3" - "416a21e44120e34120e4416a21e54120e44120e5416a21e64120e54120e6416a21e74120e64120e7416a21e84120e74120e8416a21e94120e8" - "4120e9416a21ea4120e94120ea416a21eb4120ea4120eb416a21ec4120eb4120ec416a21ed4120ec4120ed416a21ee4120ed4120ee416a21ef" - "4120ee4120ef416a21f04120ef4120f0416a21f14120f04120f1416a21f24120f14120f2416a21f34120f24120f3416a21f44120f34120f441" - "6a21f54120f44120f5416a21f64120f54120f6416a21f74120f64120f7416a21f84120f74120f8416a21f94120f84120f9416a21fa4120f941" - "20fa416a21fb4120fa4120fb416a21fc4120fb4120fc416a21fd4120fc4120fd416a21fe4120fd4120fe416a21ff4120fe4120ff416a218042" - "20ff412080426a2181422080422081426a2182422081422082426a2183422082422083426a2184422083422084426a2185422084422085426a" - "2186422085422086426a2187422086422087426a2188422087422088426a2189422088422089426a218a42208942208a426a218b42208a4220" - "8b426a218c42208b42208c426a218d42208c42208d426a218e42208d42208e426a218f42208e42208f426a219042208f422090426a21914220" - "90422091426a2192422091422092426a2193422092422093426a2194422093422094426a2195422094422095426a2196422095422096426a21" - "97422096422097426a2198422097422098426a2199422098422099426a219a42209942209a426a219b42209a42209b426a219c42209b42209c" - "426a219d42209c42209d426a219e42209d42209e426a219f42209e42209f426a21a042209f4220a0426a21a14220a04220a1426a21a24220a1" - "4220a2426a21a34220a24220a3426a21a44220a34220a4426a21a54220a44220a5426a21a64220a54220a6426a21a74220a64220a7426a21a8" - "4220a74220a8426a21a94220a84220a9426a21aa4220a94220aa426a21ab4220aa4220ab426a21ac4220ab4220ac426a21ad4220ac4220ad42" - "6a21ae4220ad4220ae426a21af4220ae4220af426a21b04220af4220b0426a21b14220b04220b1426a21b24220b14220b2426a21b34220b242" - "20b3426a21b44220b34220b4426a21b54220b44220b5426a21b64220b54220b6426a21b74220b64220b7426a21b84220b74220b8426a21b942" - "20b84220b9426a21ba4220b94220ba426a21bb4220ba4220bb426a21bc4220bb4220bc426a21bd4220bc4220bd426a21be4220bd4220be426a" - "21bf4220be4220bf426a21c04220bf4220c0426a21c14220c04220c1426a21c24220c14220c2426a21c34220c24220c3426a21c44220c34220" - "c4426a21c54220c44220c5426a21c64220c54220c6426a21c74220c64220c7426a21c84220c74220c8426a21c94220c84220c9426a21ca4220" - "c94220ca426a21cb4220ca4220cb426a21cc4220cb4220cc426a21cd4220cc4220cd426a21ce4220cd4220ce426a21cf4220ce4220cf426a21" - "d04220cf4220d0426a21d14220d04220d1426a21d24220d14220d2426a21d34220d24220d3426a21d44220d34220d4426a21d54220d44220d5" - "426a21d64220d54220d6426a21d74220d64220d7426a21d84220d74220d8426a21d94220d84220d9426a21da4220d94220da426a21db4220da" - "4220db426a21dc4220db4220dc426a21dd4220dc4220dd426a21de4220dd4220de426a21df4220de4220df426a21e04220df4220e0426a21e1" - "4220e04220e1426a21e24220e14220e2426a21e34220e24220e3426a21e44220e34220e4426a21e54220e44220e5426a21e64220e54220e642" - "6a21e74220e64220e7426a21e84220e74220e8426a21e94220e84220e9426a21ea4220e94220ea426a21eb4220ea4220eb426a21ec4220eb42" - "20ec426a21ed4220ec4220ed426a21ee4220ed4220ee426a21ef4220ee4220ef426a21f04220ef4220f0426a21f14220f04220f1426a21f242" - "20f14220f2426a21f34220f24220f3426a21f44220f34220f4426a21f54220f44220f5426a21f64220f54220f6426a21f74220f64220f7426a" - "21f84220f74220f8426a21f94220f84220f9426a21fa4220f94220fa426a21fb4220fa4220fb426a21fc4220fb4220fc426a21fd4220fc4220" - "fd426a21fe4220fd4220fe426a21ff4220fe4220ff426a21804320ff422080436a2181432080432081436a2182432081432082436a21834320" - "82432083436a2184432083432084436a2185432084432085436a2186432085432086436a2187432086432087436a2188432087432088436a21" - "89432088432089436a218a43208943208a436a218b43208a43208b436a218c43208b43208c436a218d43208c43208d436a218e43208d43208e" - "436a218f43208e43208f436a219043208f432090436a2191432090432091436a2192432091432092436a2193432092432093436a2194432093" - "432094436a2195432094432095436a2196432095432096436a2197432096432097436a2198432097432098436a2199432098432099436a219a" - "43209943209a436a219b43209a43209b436a219c43209b43209c436a219d43209c43209d436a219e43209d43209e436a219f43209e43209f43" - "6a21a043209f4320a0436a21a14320a04320a1436a21a24320a14320a2436a21a34320a24320a3436a21a44320a34320a4436a21a54320a443" - "20a5436a21a64320a54320a6436a21a74320a64320a7436a21a84320a74320a8436a21a94320a84320a9436a21aa4320a94320aa436a21ab43" - "20aa4320ab436a21ac4320ab4320ac436a21ad4320ac4320ad436a21ae4320ad4320ae436a21af4320ae4320af436a21b04320af4320b0436a" - "21b14320b04320b1436a21b24320b14320b2436a21b34320b24320b3436a21b44320b34320b4436a21b54320b44320b5436a21b64320b54320" - "b6436a21b74320b64320b7436a21b84320b74320b8436a21b94320b84320b9436a21ba4320b94320ba436a21bb4320ba4320bb436a21bc4320" - "bb4320bc436a21bd4320bc4320bd436a21be4320bd4320be436a21bf4320be4320bf436a21c04320bf4320c0436a21c14320c04320c1436a21" - "c24320c14320c2436a21c34320c24320c3436a21c44320c34320c4436a21c54320c44320c5436a21c64320c54320c6436a21c74320c64320c7" - "436a21c84320c74320c8436a21c94320c84320c9436a21ca4320c94320ca436a21cb4320ca4320cb436a21cc4320cb4320cc436a21cd4320cc" - "4320cd436a21ce4320cd4320ce436a21cf4320ce4320cf436a21d04320cf4320d0436a21d14320d04320d1436a21d24320d14320d2436a21d3" - "4320d24320d3436a21d44320d34320d4436a21d54320d44320d5436a21d64320d54320d6436a21d74320d64320d7436a21d84320d74320d843" - "6a21d94320d84320d9436a21da4320d94320da436a21db4320da4320db436a21dc4320db4320dc436a21dd4320dc4320dd436a21de4320dd43" - "20de436a21df4320de4320df436a21e04320df4320e0436a21e14320e04320e1436a21e24320e14320e2436a21e34320e24320e3436a21e443" - "20e34320e4436a21e54320e44320e5436a21e64320e54320e6436a21e74320e64320e7436a21e84320e74320e8436a21e94320e84320e9436a" - "21ea4320e94320ea436a21eb4320ea4320eb436a21ec4320eb4320ec436a21ed4320ec4320ed436a21ee4320ed4320ee436a21ef4320ee4320" - "ef436a21f04320ef4320f0436a21f14320f04320f1436a21f24320f14320f2436a21f34320f24320f3436a21f44320f34320f4436a21f54320" - "f44320f5436a21f64320f54320f6436a21f74320f64320f7436a21f84320f74320f8436a21f94320f84320f9436a21fa4320f94320fa436a21" - "fb4320fa4320fb436a21fc4320fb4320fc436a21fd4320fc4320fd436a21fe4320fd4320fe436a21ff4320fe4320ff436a21804420ff432080" - "446a2181442080442081446a2182442081442082446a2183442082442083446a2184442083442084446a2185442084442085446a2186442085" - "442086446a2187442086442087446a2188442087442088446a2189442088442089446a218a44208944208a446a218b44208a44208b446a218c" - "44208b44208c446a218d44208c44208d446a218e44208d44208e446a218f44208e44208f446a219044208f442090446a219144209044209144" - "6a2192442091442092446a2193442092442093446a2194442093442094446a2195442094442095446a2196442095442096446a219744209644" - "2097446a2198442097442098446a2199442098442099446a219a44209944209a446a219b44209a44209b446a219c44209b44209c446a219d44" - "209c44209d446a219e44209d44209e446a219f44209e44209f446a21a044209f4420a0446a21a14420a04420a1446a21a24420a14420a2446a" - "21a34420a24420a3446a21a44420a34420a4446a21a54420a44420a5446a21a64420a54420a6446a21a74420a64420a7446a21a84420a74420" - "a8446a21a94420a84420a9446a21aa4420a94420aa446a21ab4420aa4420ab446a21ac4420ab4420ac446a21ad4420ac4420ad446a21ae4420" - "ad4420ae446a21af4420ae4420af446a21b04420af4420b0446a21b14420b04420b1446a21b24420b14420b2446a21b34420b24420b3446a21" - "b44420b34420b4446a21b54420b44420b5446a21b64420b54420b6446a21b74420b64420b7446a21b84420b74420b8446a21b94420b84420b9" - "446a21ba4420b94420ba446a21bb4420ba4420bb446a21bc4420bb4420bc446a21bd4420bc4420bd446a21be4420bd4420be446a21bf4420be" - "4420bf446a21c04420bf4420c0446a21c14420c04420c1446a21c24420c14420c2446a21c34420c24420c3446a21c44420c34420c4446a21c5" - "4420c44420c5446a21c64420c54420c6446a21c74420c64420c7446a21c84420c74420c8446a21c94420c84420c9446a21ca4420c94420ca44" - "6a21cb4420ca4420cb446a21cc4420cb4420cc446a21cd4420cc4420cd446a21ce4420cd4420ce446a21cf4420ce4420cf446a21d04420cf44" - "20d0446a21d14420d04420d1446a21d24420d14420d2446a21d34420d24420d3446a21d44420d34420d4446a21d54420d44420d5446a21d644" - "20d54420d6446a21d74420d64420d7446a21d84420d74420d8446a21d94420d84420d9446a21da4420d94420da446a21db4420da4420db446a" - "21dc4420db4420dc446a21dd4420dc4420dd446a21de4420dd4420de446a21df4420de4420df446a21e04420df4420e0446a21e14420e04420" - "e1446a21e24420e14420e2446a21e34420e24420e3446a21e44420e34420e4446a21e54420e44420e5446a21e64420e54420e6446a21e74420" - "e64420e7446a21e84420e74420e8446a21e94420e84420e9446a21ea4420e94420ea446a21eb4420ea4420eb446a21ec4420eb4420ec446a21" - "ed4420ec4420ed446a21ee4420ed4420ee446a21ef4420ee4420ef446a21f04420ef4420f0446a21f14420f04420f1446a21f24420f14420f2" - "446a21f34420f24420f3446a21f44420f34420f4446a21f54420f44420f5446a21f64420f54420f6446a21f74420f64420f7446a21f84420f7" - "4420f8446a21f94420f84420f9446a21fa4420f94420fa446a21fb4420fa4420fb446a21fc4420fb4420fc446a21fd4420fc4420fd446a21fe" - "4420fd4420fe446a21ff4420fe4420ff446a21804520ff442080456a2181452080452081456a2182452081452082456a218345208245208345" - "6a2184452083452084456a2185452084452085456a2186452085452086456a2187452086452087456a2188452087452088456a218945208845" - "2089456a218a45208945208a456a218b45208a45208b456a218c45208b45208c456a218d45208c45208d456a218e45208d45208e456a218f45" - "208e45208f456a219045208f452090456a2191452090452091456a2192452091452092456a2193452092452093456a2194452093452094456a" - "2195452094452095456a2196452095452096456a2197452096452097456a2198452097452098456a2199452098452099456a219a4520994520" - "9a456a219b45209a45209b456a219c45209b45209c456a219d45209c45209d456a219e45209d45209e456a219f45209e45209f456a21a04520" - "9f4520a0456a21a14520a04520a1456a21a24520a14520a2456a21a34520a24520a3456a21a44520a34520a4456a21a54520a44520a5456a21" - "a64520a54520a6456a21a74520a64520a7456a21a84520a74520a8456a21a94520a84520a9456a21aa4520a94520aa456a21ab4520aa4520ab" - "456a21ac4520ab4520ac456a21ad4520ac4520ad456a21ae4520ad4520ae456a21af4520ae4520af456a21b04520af4520b0456a21b14520b0" - "4520b1456a21b24520b14520b2456a21b34520b24520b3456a21b44520b34520b4456a21b54520b44520b5456a21b64520b54520b6456a21b7" - "4520b64520b7456a21b84520b74520b8456a21b94520b84520b9456a21ba4520b94520ba456a21bb4520ba4520bb456a21bc4520bb4520bc45" - "6a21bd4520bc4520bd456a21be4520bd4520be456a21bf4520be4520bf456a21c04520bf4520c0456a21c14520c04520c1456a21c24520c145" - "20c2456a21c34520c24520c3456a21c44520c34520c4456a21c54520c44520c5456a21c64520c54520c6456a21c74520c64520c7456a21c845" - "20c74520c8456a21c94520c84520c9456a21ca4520c94520ca456a21cb4520ca4520cb456a21cc4520cb4520cc456a21cd4520cc4520cd456a" - "21ce4520cd4520ce456a21cf4520ce4520cf456a21d04520cf4520d0456a21d14520d04520d1456a21d24520d14520d2456a21d34520d24520" - "d3456a21d44520d34520d4456a21d54520d44520d5456a21d64520d54520d6456a21d74520d64520d7456a21d84520d74520d8456a21d94520" - "d84520d9456a21da4520d94520da456a21db4520da4520db456a21dc4520db4520dc456a21dd4520dc4520dd456a21de4520dd4520de456a21" - "df4520de4520df456a21e04520df4520e0456a21e14520e04520e1456a21e24520e14520e2456a21e34520e24520e3456a21e44520e34520e4" - "456a21e54520e44520e5456a21e64520e54520e6456a21e74520e64520e7456a21e84520e74520e8456a21e94520e84520e9456a21ea4520e9" - "4520ea456a21eb4520ea4520eb456a21ec4520eb4520ec456a21ed4520ec4520ed456a21ee4520ed4520ee456a21ef4520ee4520ef456a21f0" - "4520ef4520f0456a21f14520f04520f1456a21f24520f14520f2456a21f34520f24520f3456a21f44520f34520f4456a21f54520f44520f545" - "6a21f64520f54520f6456a21f74520f64520f7456a21f84520f74520f8456a21f94520f84520f9456a21fa4520f94520fa456a21fb4520fa45" - "20fb456a21fc4520fb4520fc456a21fd4520fc4520fd456a21fe4520fd4520fe456a21ff4520fe4520ff456a21804620ff452080466a218146" - "2080462081466a2182462081462082466a2183462082462083466a2184462083462084466a2185462084462085466a2186462085462086466a" - "2187462086462087466a2188462087462088466a2189462088462089466a218a46208946208a466a218b46208a46208b466a218c46208b4620" - "8c466a218d46208c46208d466a218e46208d46208e466a218f46208e46208f466a219046208f462090466a2191462090462091466a21924620" - "91462092466a2193462092462093466a2194462093462094466a2195462094462095466a2196462095462096466a2197462096462097466a21" - "98462097462098466a2199462098462099466a219a46209946209a466a219b46209a46209b466a219c46209b46209c466a219d46209c46209d" - "466a219e46209d46209e466a219f46209e46209f466a21a046209f4620a0466a21a14620a04620a1466a21a24620a14620a2466a21a34620a2" - "4620a3466a21a44620a34620a4466a21a54620a44620a5466a21a64620a54620a6466a21a74620a64620a7466a21a84620a74620a8466a21a9" - "4620a84620a9466a21aa4620a94620aa466a21ab4620aa4620ab466a21ac4620ab4620ac466a21ad4620ac4620ad466a21ae4620ad4620ae46" - "6a21af4620ae4620af466a21b04620af4620b0466a21b14620b04620b1466a21b24620b14620b2466a21b34620b24620b3466a21b44620b346" - "20b4466a21b54620b44620b5466a21b64620b54620b6466a21b74620b64620b7466a21b84620b74620b8466a21b94620b84620b9466a21ba46" - "20b94620ba466a21bb4620ba4620bb466a21bc4620bb4620bc466a21bd4620bc4620bd466a21be4620bd4620be466a21bf4620be4620bf466a" - "21c04620bf4620c0466a21c14620c04620c1466a21c24620c14620c2466a21c34620c24620c3466a21c44620c34620c4466a21c54620c44620" - "c5466a21c64620c54620c6466a21c74620c64620c7466a21c84620c74620c8466a21c94620c84620c9466a21ca4620c94620ca466a21cb4620" - "ca4620cb466a21cc4620cb4620cc466a21cd4620cc4620cd466a21ce4620cd4620ce466a21cf4620ce4620cf466a21d04620cf4620d0466a21" - "d14620d04620d1466a21d24620d14620d2466a21d34620d24620d3466a21d44620d34620d4466a21d54620d44620d5466a21d64620d54620d6" - "466a21d74620d64620d7466a21d84620d74620d8466a21d94620d84620d9466a21da4620d94620da466a21db4620da4620db466a21dc4620db" - "4620dc466a21dd4620dc4620dd466a21de4620dd4620de466a21df4620de4620df466a21e04620df4620e0466a21e14620e04620e1466a21e2" - "4620e14620e2466a21e34620e24620e3466a21e44620e34620e4466a21e54620e44620e5466a21e64620e54620e6466a21e74620e64620e746" - "6a21e84620e74620e8466a21e94620e84620e9466a21ea4620e94620ea466a21eb4620ea4620eb466a21ec4620eb4620ec466a21ed4620ec46" - "20ed466a21ee4620ed4620ee466a21ef4620ee4620ef466a21f04620ef4620f0466a21f14620f04620f1466a21f24620f14620f2466a21f346" - "20f24620f3466a21f44620f34620f4466a21f54620f44620f5466a21f64620f54620f6466a21f74620f64620f7466a21f84620f74620f8466a" - "21f94620f84620f9466a21fa4620f94620fa466a21fb4620fa4620fb466a21fc4620fb4620fc466a21fd4620fc4620fd466a21fe4620fd4620" - "fe466a21ff4620fe4620ff466a21804720ff462080476a2181472080472081476a2182472081472082476a2183472082472083476a21844720" - "83472084476a2185472084472085476a2186472085472086476a2187472086472087476a2188472087472088476a2189472088472089476a21" - "8a47208947208a476a218b47208a47208b476a218c47208b47208c476a218d47208c47208d476a218e47208d47208e476a218f47208e47208f" - "476a219047208f472090476a2191472090472091476a2192472091472092476a2193472092472093476a2194472093472094476a2195472094" - "472095476a2196472095472096476a2197472096472097476a2198472097472098476a2199472098472099476a219a47209947209a476a219b" - "47209a47209b476a219c47209b47209c476a219d47209c47209d476a219e47209d47209e476a219f47209e47209f476a21a047209f4720a047" - "6a21a14720a04720a1476a21a24720a14720a2476a21a34720a24720a3476a21a44720a34720a4476a21a54720a44720a5476a21a64720a547" - "20a6476a21a74720a64720a7476a21a84720a74720a8476a21a94720a84720a9476a21aa4720a94720aa476a21ab4720aa4720ab476a21ac47" - "20ab4720ac476a21ad4720ac4720ad476a21ae4720ad4720ae476a21af4720ae4720af476a21b04720af4720b0476a21b14720b04720b1476a" - "21b24720b14720b2476a21b34720b24720b3476a21b44720b34720b4476a21b54720b44720b5476a21b64720b54720b6476a21b74720b64720" - "b7476a21b84720b74720b8476a21b94720b84720b9476a21ba4720b94720ba476a21bb4720ba4720bb476a21bc4720bb4720bc476a21bd4720" - "bc4720bd476a21be4720bd4720be476a21bf4720be4720bf476a21c04720bf4720c0476a21c14720c04720c1476a21c24720c14720c2476a21" - "c34720c24720c3476a21c44720c34720c4476a21c54720c44720c5476a21c64720c54720c6476a21c74720c64720c7476a21c84720c74720c8" - "476a21c94720c84720c9476a21ca4720c94720ca476a21cb4720ca4720cb476a21cc4720cb4720cc476a21cd4720cc4720cd476a21ce4720cd" - "4720ce476a21cf4720ce4720cf476a21d04720cf4720d0476a21d14720d04720d1476a21d24720d14720d2476a21d34720d24720d3476a21d4" - "4720d34720d4476a21d54720d44720d5476a21d64720d54720d6476a21d74720d64720d7476a21d84720d74720d8476a21d94720d84720d947" - "6a21da4720d94720da476a21db4720da4720db476a21dc4720db4720dc476a21dd4720dc4720dd476a21de4720dd4720de476a21df4720de47" - "20df476a21e04720df4720e0476a21e14720e04720e1476a21e24720e14720e2476a21e34720e24720e3476a21e44720e34720e4476a21e547" - "20e44720e5476a21e64720e54720e6476a21e74720e64720e7476a21e84720e74720e8476a21e94720e84720e9476a21ea4720e94720ea476a" - "21eb4720ea4720eb476a21ec4720eb4720ec476a21ed4720ec4720ed476a21ee4720ed4720ee476a21ef4720ee4720ef476a21f04720ef4720" - "f0476a21f14720f04720f1476a21f24720f14720f2476a21f34720f24720f3476a21f44720f34720f4476a21f54720f44720f5476a21f64720" - "f54720f6476a21f74720f64720f7476a21f84720f74720f8476a21f94720f84720f9476a21fa4720f94720fa476a21fb4720fa4720fb476a21" - "fc4720fb4720fc476a21fd4720fc4720fd476a21fe4720fd4720fe476a21ff4720fe4720ff476a21804820ff472080486a2181482080482081" - "486a2182482081482082486a2183482082482083486a2184482083482084486a2185482084482085486a2186482085482086486a2187482086" - "482087486a2188482087482088486a2189482088482089486a218a48208948208a486a218b48208a48208b486a218c48208b48208c486a218d" - "48208c48208d486a218e48208d48208e486a218f48208e48208f486a219048208f482090486a2191482090482091486a219248209148209248" - "6a2193482092482093486a2194482093482094486a2195482094482095486a2196482095482096486a2197482096482097486a219848209748" - "2098486a2199482098482099486a219a48209948209a486a219b48209a48209b486a219c48209b48209c486a219d48209c48209d486a219e48" - "209d48209e486a219f48209e48209f486a21a048209f4820a0486a21a14820a04820a1486a21a24820a14820a2486a21a34820a24820a3486a" - "21a44820a34820a4486a21a54820a44820a5486a21a64820a54820a6486a21a74820a64820a7486a21a84820a74820a8486a21a94820a84820" - "a9486a21aa4820a94820aa486a21ab4820aa4820ab486a21ac4820ab4820ac486a21ad4820ac4820ad486a21ae4820ad4820ae486a21af4820" - "ae4820af486a21b04820af4820b0486a21b14820b04820b1486a21b24820b14820b2486a21b34820b24820b3486a21b44820b34820b4486a21" - "b54820b44820b5486a21b64820b54820b6486a21b74820b64820b7486a21b84820b74820b8486a21b94820b84820b9486a21ba4820b94820ba" - "486a21bb4820ba4820bb486a21bc4820bb4820bc486a21bd4820bc4820bd486a21be4820bd4820be486a21bf4820be4820bf486a21c04820bf" - "4820c0486a21c14820c04820c1486a21c24820c14820c2486a21c34820c24820c3486a21c44820c34820c4486a21c54820c44820c5486a21c6" - "4820c54820c6486a21c74820c64820c7486a21c84820c74820c8486a21c94820c84820c9486a21ca4820c94820ca486a21cb4820ca4820cb48" - "6a21cc4820cb4820cc486a21cd4820cc4820cd486a21ce4820cd4820ce486a21cf4820ce4820cf486a21d04820cf4820d0486a21d14820d048" - "20d1486a21d24820d14820d2486a21d34820d24820d3486a21d44820d34820d4486a21d54820d44820d5486a21d64820d54820d6486a21d748" - "20d64820d7486a21d84820d74820d8486a21d94820d84820d9486a21da4820d94820da486a21db4820da4820db486a21dc4820db4820dc486a" - "21dd4820dc4820dd486a21de4820dd4820de486a21df4820de4820df486a21e04820df4820e0486a21e14820e04820e1486a21e24820e14820" - "e2486a21e34820e24820e3486a21e44820e34820e4486a21e54820e44820e5486a21e64820e54820e6486a21e74820e64820e7486a21e84820" - "e74820e8486a21e94820e84820e9486a21ea4820e94820ea486a21eb4820ea4820eb486a21ec4820eb4820ec486a21ed4820ec4820ed486a21" - "ee4820ed4820ee486a21ef4820ee4820ef486a21f04820ef4820f0486a21f14820f04820f1486a21f24820f14820f2486a21f34820f24820f3" - "486a21f44820f34820f4486a21f54820f44820f5486a21f64820f54820f6486a21f74820f64820f7486a21f84820f74820f8486a21f94820f8" - "4820f9486a21fa4820f94820fa486a21fb4820fa4820fb486a21fc4820fb4820fc486a21fd4820fc4820fd486a21fe4820fd4820fe486a21ff" - "4820fe4820ff486a21804920ff482080496a2181492080492081496a2182492081492082496a2183492082492083496a218449208349208449" - "6a2185492084492085496a2186492085492086496a2187492086492087496a2188492087492088496a2189492088492089496a218a49208949" - "208a496a218b49208a49208b496a218c49208b49208c496a218d49208c49208d496a218e49208d49208e496a218f49208e49208f496a219049" - "208f492090496a2191492090492091496a2192492091492092496a2193492092492093496a2194492093492094496a2195492094492095496a" - "2196492095492096496a2197492096492097496a2198492097492098496a2199492098492099496a219a49209949209a496a219b49209a4920" - "9b496a219c49209b49209c496a219d49209c49209d496a219e49209d49209e496a219f49209e49209f496a21a049209f4920a0496a21a14920" - "a04920a1496a21a24920a14920a2496a21a34920a24920a3496a21a44920a34920a4496a21a54920a44920a5496a21a64920a54920a6496a21" - "a74920a64920a7496a21a84920a74920a8496a21a94920a84920a9496a21aa4920a94920aa496a21ab4920aa4920ab496a21ac4920ab4920ac" - "496a21ad4920ac4920ad496a21ae4920ad4920ae496a21af4920ae4920af496a21b04920af4920b0496a21b14920b04920b1496a21b24920b1" - "4920b2496a21b34920b24920b3496a21b44920b34920b4496a21b54920b44920b5496a21b64920b54920b6496a21b74920b64920b7496a21b8" - "4920b74920b8496a21b94920b84920b9496a21ba4920b94920ba496a21bb4920ba4920bb496a21bc4920bb4920bc496a21bd4920bc4920bd49" - "6a21be4920bd4920be496a21bf4920be4920bf496a21c04920bf4920c0496a21c14920c04920c1496a21c24920c14920c2496a21c34920c249" - "20c3496a21c44920c34920c4496a21c54920c44920c5496a21c64920c54920c6496a21c74920c64920c7496a21c84920c74920c8496a21c949" - "20c84920c9496a21ca4920c94920ca496a21cb4920ca4920cb496a21cc4920cb4920cc496a21cd4920cc4920cd496a21ce4920cd4920ce496a" - "21cf4920ce4920cf496a21d04920cf4920d0496a21d14920d04920d1496a21d24920d14920d2496a21d34920d24920d3496a21d44920d34920" - "d4496a21d54920d44920d5496a21d64920d54920d6496a21d74920d64920d7496a21d84920d74920d8496a21d94920d84920d9496a21da4920" - "d94920da496a21db4920da4920db496a21dc4920db4920dc496a21dd4920dc4920dd496a21de4920dd4920de496a21df4920de4920df496a21" - "e04920df4920e0496a21e14920e04920e1496a21e24920e14920e2496a21e34920e24920e3496a21e44920e34920e4496a21e54920e44920e5" - "496a21e64920e54920e6496a21e74920e64920e7496a21e84920e74920e8496a21e94920e84920e9496a21ea4920e94920ea496a21eb4920ea" - "4920eb496a21ec4920eb4920ec496a21ed4920ec4920ed496a21ee4920ed4920ee496a21ef4920ee4920ef496a21f04920ef4920f0496a21f1" - "4920f04920f1496a21f24920f14920f2496a21f34920f24920f3496a21f44920f34920f4496a21f54920f44920f5496a21f64920f54920f649" - "6a21f74920f64920f7496a21f84920f74920f8496a21f94920f84920f9496a21fa4920f94920fa496a21fb4920fa4920fb496a21fc4920fb49" - "20fc496a21fd4920fc4920fd496a21fe4920fd4920fe496a21ff4920fe4920ff496a21804a20ff4920804a6a21814a20804a20814a6a21824a" - "20814a20824a6a21834a20824a20834a6a21844a20834a20844a6a21854a20844a20854a6a21864a20854a20864a6a21874a20864a20874a6a" - "21884a20874a20884a6a21894a20884a20894a6a218a4a20894a208a4a6a218b4a208a4a208b4a6a218c4a208b4a208c4a6a218d4a208c4a20" - "8d4a6a218e4a208d4a208e4a6a218f4a208e4a208f4a6a21904a208f4a20904a6a21914a20904a20914a6a21924a20914a20924a6a21934a20" - "924a20934a6a21944a20934a20944a6a21954a20944a20954a6a21964a20954a20964a6a21974a20964a20974a6a21984a20974a20984a6a21" - "994a20984a20994a6a219a4a20994a209a4a6a219b4a209a4a209b4a6a219c4a209b4a209c4a6a219d4a209c4a209d4a6a219e4a209d4a209e" - "4a6a219f4a209e4a209f4a6a21a04a209f4a20a04a6a21a14a20a04a20a14a6a21a24a20a14a20a24a6a21a34a20a24a20a34a6a21a44a20a3" - "4a20a44a6a21a54a20a44a20a54a6a21a64a20a54a20a64a6a21a74a20a64a20a74a6a21a84a20a74a20a84a6a21a94a20a84a20a94a6a21aa" - "4a20a94a20aa4a6a21ab4a20aa4a20ab4a6a21ac4a20ab4a20ac4a6a21ad4a20ac4a20ad4a6a21ae4a20ad4a20ae4a6a21af4a20ae4a20af4a" - "6a21b04a20af4a20b04a6a21b14a20b04a20b14a6a21b24a20b14a20b24a6a21b34a20b24a20b34a6a21b44a20b34a20b44a6a21b54a20b44a" - "20b54a6a21b64a20b54a20b64a6a21b74a20b64a20b74a6a21b84a20b74a20b84a6a21b94a20b84a20b94a6a21ba4a20b94a20ba4a6a21bb4a" - "20ba4a20bb4a6a21bc4a20bb4a20bc4a6a21bd4a20bc4a20bd4a6a21be4a20bd4a20be4a6a21bf4a20be4a20bf4a6a21c04a20bf4a20c04a6a" - "21c14a20c04a20c14a6a21c24a20c14a20c24a6a21c34a20c24a20c34a6a21c44a20c34a20c44a6a21c54a20c44a20c54a6a21c64a20c54a20" - "c64a6a21c74a20c64a20c74a6a21c84a20c74a20c84a6a21c94a20c84a20c94a6a21ca4a20c94a20ca4a6a21cb4a20ca4a20cb4a6a21cc4a20" - "cb4a20cc4a6a21cd4a20cc4a20cd4a6a21ce4a20cd4a20ce4a6a21cf4a20ce4a20cf4a6a21d04a20cf4a20d04a6a21d14a20d04a20d14a6a21" - "d24a20d14a20d24a6a21d34a20d24a20d34a6a21d44a20d34a20d44a6a21d54a20d44a20d54a6a21d64a20d54a20d64a6a21d74a20d64a20d7" - "4a6a21d84a20d74a20d84a6a21d94a20d84a20d94a6a21da4a20d94a20da4a6a21db4a20da4a20db4a6a21dc4a20db4a20dc4a6a21dd4a20dc" - "4a20dd4a6a21de4a20dd4a20de4a6a21df4a20de4a20df4a6a21e04a20df4a20e04a6a21e14a20e04a20e14a6a21e24a20e14a20e24a6a21e3" - "4a20e24a20e34a6a21e44a20e34a20e44a6a21e54a20e44a20e54a6a21e64a20e54a20e64a6a21e74a20e64a20e74a6a21e84a20e74a20e84a" - "6a21e94a20e84a20e94a6a21ea4a20e94a20ea4a6a21eb4a20ea4a20eb4a6a21ec4a20eb4a20ec4a6a21ed4a20ec4a20ed4a6a21ee4a20ed4a" - "20ee4a6a21ef4a20ee4a20ef4a6a21f04a20ef4a20f04a6a21f14a20f04a20f14a6a21f24a20f14a20f24a6a21f34a20f24a20f34a6a21f44a" - "20f34a20f44a6a21f54a20f44a20f54a6a21f64a20f54a20f64a6a21f74a20f64a20f74a6a21f84a20f74a20f84a6a21f94a20f84a20f94a6a" - "21fa4a20f94a20fa4a6a21fb4a20fa4a20fb4a6a21fc4a20fb4a20fc4a6a21fd4a20fc4a20fd4a6a21fe4a20fd4a20fe4a6a21ff4a20fe4a20" - "ff4a6a21804b20ff4a20804b6a21814b20804b20814b6a21824b20814b20824b6a21834b20824b20834b6a21844b20834b20844b6a21854b20" - "844b20854b6a21864b20854b20864b6a21874b20864b20874b6a21884b20874b20884b6a21894b20884b20894b6a218a4b20894b208a4b6a21" - "8b4b208a4b208b4b6a218c4b208b4b208c4b6a218d4b208c4b208d4b6a218e4b208d4b208e4b6a218f4b208e4b208f4b6a21904b208f4b2090" - "4b6a21914b20904b20914b6a21924b20914b20924b6a21934b20924b20934b6a21944b20934b20944b6a21954b20944b20954b6a21964b2095" - "4b20964b6a21974b20964b20974b6a21984b20974b20984b6a21994b20984b20994b6a219a4b20994b209a4b6a219b4b209a4b209b4b6a219c" - "4b209b4b209c4b6a219d4b209c4b209d4b6a219e4b209d4b209e4b6a219f4b209e4b209f4b6a21a04b209f4b20a04b6a21a14b20a04b20a14b" - "6a21a24b20a14b20a24b6a21a34b20a24b20a34b6a21a44b20a34b20a44b6a21a54b20a44b20a54b6a21a64b20a54b20a64b6a21a74b20a64b" - "20a74b6a21a84b20a74b20a84b6a21a94b20a84b20a94b6a21aa4b20a94b20aa4b6a21ab4b20aa4b20ab4b6a21ac4b20ab4b20ac4b6a21ad4b" - "20ac4b20ad4b6a21ae4b20ad4b20ae4b6a21af4b20ae4b20af4b6a21b04b20af4b20b04b6a21b14b20b04b20b14b6a21b24b20b14b20b24b6a" - "21b34b20b24b20b34b6a21b44b20b34b20b44b6a21b54b20b44b20b54b6a21b64b20b54b20b64b6a21b74b20b64b20b74b6a21b84b20b74b20" - "b84b6a21b94b20b84b20b94b6a21ba4b20b94b20ba4b6a21bb4b20ba4b20bb4b6a21bc4b20bb4b20bc4b6a21bd4b20bc4b20bd4b6a21be4b20" - "bd4b20be4b6a21bf4b20be4b20bf4b6a21c04b20bf4b20c04b6a21c14b20c04b20c14b6a21c24b20c14b20c24b6a21c34b20c24b20c34b6a21" - "c44b20c34b20c44b6a21c54b20c44b20c54b6a21c64b20c54b20c64b6a21c74b20c64b20c74b6a21c84b20c74b20c84b6a21c94b20c84b20c9" - "4b6a21ca4b20c94b20ca4b6a21cb4b20ca4b20cb4b6a21cc4b20cb4b20cc4b6a21cd4b20cc4b20cd4b6a21ce4b20cd4b20ce4b6a21cf4b20ce" - "4b20cf4b6a21d04b20cf4b20d04b6a21d14b20d04b20d14b6a21d24b20d14b20d24b6a21d34b20d24b20d34b6a21d44b20d34b20d44b6a21d5" - "4b20d44b20d54b6a21d64b20d54b20d64b6a21d74b20d64b20d74b6a21d84b20d74b20d84b6a21d94b20d84b20d94b6a21da4b20d94b20da4b" - "6a21db4b20da4b20db4b6a21dc4b20db4b20dc4b6a21dd4b20dc4b20dd4b6a21de4b20dd4b20de4b6a21df4b20de4b20df4b6a21e04b20df4b" - "20e04b6a21e14b20e04b20e14b6a21e24b20e14b20e24b6a21e34b20e24b20e34b6a21e44b20e34b20e44b6a21e54b20e44b20e54b6a21e64b" - "20e54b20e64b6a21e74b20e64b20e74b6a21e84b20e74b20e84b6a21e94b20e84b20e94b6a21ea4b20e94b20ea4b6a21eb4b20ea4b20eb4b6a" - "21ec4b20eb4b20ec4b6a21ed4b20ec4b20ed4b6a21ee4b20ed4b20ee4b6a21ef4b20ee4b20ef4b6a21f04b20ef4b20f04b6a21f14b20f04b20" - "f14b6a21f24b20f14b20f24b6a21f34b20f24b20f34b6a21f44b20f34b20f44b6a21f54b20f44b20f54b6a21f64b20f54b20f64b6a21f74b20" - "f64b20f74b6a21f84b20f74b20f84b6a21f94b20f84b20f94b6a21fa4b20f94b20fa4b6a21fb4b20fa4b20fb4b6a21fc4b20fb4b20fc4b6a21" - "fd4b20fc4b20fd4b6a21fe4b20fd4b20fe4b6a21ff4b20fe4b20ff4b6a21804c20ff4b20804c6a21814c20804c20814c6a21824c20814c2082" - "4c6a21834c20824c20834c6a21844c20834c20844c6a21854c20844c20854c6a21864c20854c20864c6a21874c20864c20874c6a21884c2087" - "4c20884c6a21894c20884c20894c6a218a4c20894c208a4c6a218b4c208a4c208b4c6a218c4c208b4c208c4c6a218d4c208c4c208d4c6a218e" - "4c208d4c208e4c6a218f4c208e4c208f4c6a21904c208f4c20904c6a21914c20904c20914c6a21924c20914c20924c6a21934c20924c20934c" - "6a21944c20934c20944c6a21954c20944c20954c6a21964c20954c20964c6a21974c20964c20974c6a21984c20974c20984c6a21994c20984c" - "20994c6a219a4c20994c209a4c6a219b4c209a4c209b4c6a219c4c209b4c209c4c6a219d4c209c4c209d4c6a219e4c209d4c209e4c6a219f4c" - "209e4c209f4c6a21a04c209f4c20a04c6a21a14c20a04c20a14c6a21a24c20a14c20a24c6a21a34c20a24c20a34c6a21a44c20a34c20a44c6a" - "21a54c20a44c20a54c6a21a64c20a54c20a64c6a21a74c20a64c20a74c6a21a84c20a74c20a84c6a21a94c20a84c20a94c6a21aa4c20a94c20" - "aa4c6a21ab4c20aa4c20ab4c6a21ac4c20ab4c20ac4c6a21ad4c20ac4c20ad4c6a21ae4c20ad4c20ae4c6a21af4c20ae4c20af4c6a21b04c20" - "af4c20b04c6a21b14c20b04c20b14c6a21b24c20b14c20b24c6a21b34c20b24c20b34c6a21b44c20b34c20b44c6a21b54c20b44c20b54c6a21" - "b64c20b54c20b64c6a21b74c20b64c20b74c6a21b84c20b74c20b84c6a21b94c20b84c20b94c6a21ba4c20b94c20ba4c6a21bb4c20ba4c20bb" - "4c6a21bc4c20bb4c20bc4c6a21bd4c20bc4c20bd4c6a21be4c20bd4c20be4c6a21bf4c20be4c20bf4c6a21c04c20bf4c20c04c6a21c14c20c0" - "4c20c14c6a21c24c20c14c20c24c6a21c34c20c24c20c34c6a21c44c20c34c20c44c6a21c54c20c44c20c54c6a21c64c20c54c20c64c6a21c7" - "4c20c64c20c74c6a21c84c20c74c20c84c6a21c94c20c84c20c94c6a21ca4c20c94c20ca4c6a21cb4c20ca4c20cb4c6a21cc4c20cb4c20cc4c" - "6a21cd4c20cc4c20cd4c6a21ce4c20cd4c20ce4c6a21cf4c20ce4c20cf4c6a21d04c20cf4c20d04c6a21d14c20d04c20d14c6a21d24c20d14c" - "20d24c6a21d34c20d24c20d34c6a21d44c20d34c20d44c6a21d54c20d44c20d54c6a21d64c20d54c20d64c6a21d74c20d64c20d74c6a21d84c" - "20d74c20d84c6a21d94c20d84c20d94c6a21da4c20d94c20da4c6a21db4c20da4c20db4c6a21dc4c20db4c20dc4c6a21dd4c20dc4c20dd4c6a" - "21de4c20dd4c20de4c6a21df4c20de4c20df4c6a21e04c20df4c20e04c6a21e14c20e04c20e14c6a21e24c20e14c20e24c6a21e34c20e24c20" - "e34c6a21e44c20e34c20e44c6a21e54c20e44c20e54c6a21e64c20e54c20e64c6a21e74c20e64c20e74c6a21e84c20e74c20e84c6a21e94c20" - "e84c20e94c6a21ea4c20e94c20ea4c6a21eb4c20ea4c20eb4c6a21ec4c20eb4c20ec4c6a21ed4c20ec4c20ed4c6a21ee4c20ed4c20ee4c6a21" - "ef4c20ee4c20ef4c6a21f04c20ef4c20f04c6a21f14c20f04c20f14c6a21f24c20f14c20f24c6a21f34c20f24c20f34c6a21f44c20f34c20f4" - "4c6a21f54c20f44c20f54c6a21f64c20f54c20f64c6a21f74c20f64c20f74c6a21f84c20f74c20f84c6a21f94c20f84c20f94c6a21fa4c20f9" - "4c20fa4c6a21fb4c20fa4c20fb4c6a21fc4c20fb4c20fc4c6a21fd4c20fc4c20fd4c6a21fe4c20fd4c20fe4c6a21ff4c20fe4c20ff4c6a2180" - "4d20ff4c20804d6a21814d20804d20814d6a21824d20814d20824d6a21834d20824d20834d6a21844d20834d20844d6a21854d20844d20854d" - "6a21864d20854d20864d6a21874d20864d20874d6a21884d20874d20884d6a21894d20884d20894d6a218a4d20894d208a4d6a218b4d208a4d" - "208b4d6a218c4d208b4d208c4d6a218d4d208c4d208d4d6a218e4d208d4d208e4d6a218f4d208e4d208f4d6a21904d208f4d20904d6a21914d" - "20904d20914d6a21924d20914d20924d6a21934d20924d20934d6a21944d20934d20944d6a21954d20944d20954d6a21964d20954d20964d6a" - "21974d20964d20974d6a21984d20974d20984d6a21994d20984d20994d6a219a4d20994d209a4d6a219b4d209a4d209b4d6a219c4d209b4d20" - "9c4d6a219d4d209c4d209d4d6a219e4d209d4d209e4d6a219f4d209e4d209f4d6a21a04d209f4d20a04d6a21a14d20a04d20a14d6a21a24d20" - "a14d20a24d6a21a34d20a24d20a34d6a21a44d20a34d20a44d6a21a54d20a44d20a54d6a21a64d20a54d20a64d6a21a74d20a64d20a74d6a21" - "a84d20a74d20a84d6a21a94d20a84d20a94d6a21aa4d20a94d20aa4d6a21ab4d20aa4d20ab4d6a21ac4d20ab4d20ac4d6a21ad4d20ac4d20ad" - "4d6a21ae4d20ad4d20ae4d6a21af4d20ae4d20af4d6a21b04d20af4d20b04d6a21b14d20b04d20b14d6a21b24d20b14d20b24d6a21b34d20b2" - "4d20b34d6a21b44d20b34d20b44d6a21b54d20b44d20b54d6a21b64d20b54d20b64d6a21b74d20b64d20b74d6a21b84d20b74d20b84d6a21b9" - "4d20b84d20b94d6a21ba4d20b94d20ba4d6a21bb4d20ba4d20bb4d6a21bc4d20bb4d20bc4d6a21bd4d20bc4d20bd4d6a21be4d20bd4d20be4d" - "6a21bf4d20be4d20bf4d6a21c04d20bf4d20c04d6a21c14d20c04d20c14d6a21c24d20c14d20c24d6a21c34d20c24d20c34d6a21c44d20c34d" - "20c44d6a21c54d20c44d20c54d6a21c64d20c54d20c64d6a21c74d20c64d20c74d6a21c84d20c74d20c84d6a21c94d20c84d20c94d6a21ca4d" - "20c94d20ca4d6a21cb4d20ca4d20cb4d6a21cc4d20cb4d20cc4d6a21cd4d20cc4d20cd4d6a21ce4d20cd4d20ce4d6a21cf4d20ce4d20cf4d6a" - "21d04d20cf4d20d04d6a21d14d20d04d20d14d6a21d24d20d14d20d24d6a21d34d20d24d20d34d6a21d44d20d34d20d44d6a21d54d20d44d20" - "d54d6a21d64d20d54d20d64d6a21d74d20d64d20d74d6a21d84d20d74d20d84d6a21d94d20d84d20d94d6a21da4d20d94d20da4d6a21db4d20" - "da4d20db4d6a21dc4d20db4d20dc4d6a21dd4d20dc4d20dd4d6a21de4d20dd4d20de4d6a21df4d20de4d20df4d6a21e04d20df4d20e04d6a21" - "e14d20e04d20e14d6a21e24d20e14d20e24d6a21e34d20e24d20e34d6a21e44d20e34d20e44d6a21e54d20e44d20e54d6a21e64d20e54d20e6" - "4d6a21e74d20e64d20e74d6a21e84d20e74d20e84d6a21e94d20e84d20e94d6a21ea4d20e94d20ea4d6a21eb4d20ea4d20eb4d6a21ec4d20eb" - "4d20ec4d6a21ed4d20ec4d20ed4d6a21ee4d20ed4d20ee4d6a21ef4d20ee4d20ef4d6a21f04d20ef4d20f04d6a21f14d20f04d20f14d6a21f2" - "4d20f14d20f24d6a21f34d20f24d20f34d6a21f44d20f34d20f44d6a21f54d20f44d20f54d6a21f64d20f54d20f64d6a21f74d20f64d20f74d" - "6a21f84d20f74d20f84d6a21f94d20f84d20f94d6a21fa4d20f94d20fa4d6a21fb4d20fa4d20fb4d6a21fc4d20fb4d20fc4d6a21fd4d20fc4d" - "20fd4d6a21fe4d20fd4d20fe4d6a21ff4d20fe4d20ff4d6a21804e20ff4d20804e6a21814e20804e20814e6a21824e20814e20824e6a21834e" - "20824e20834e6a21844e20834e20844e6a21854e20844e20854e6a21864e20854e20864e6a21874e20864e20874e6a21884e20874e20884e6a" - "21894e20884e20894e6a218a4e20894e208a4e6a218b4e208a4e208b4e6a218c4e208b4e208c4e6a218d4e208c4e208d4e6a218e4e208d4e20" + "0061736d0100000001070160027f7f017f03020100070801047465737400000a9b8a0601978a06018e4e7f20002001" + "6a2102200120026a2103" + "200220036a2104200320046a2105200420056a2106200520066a2107200620076a2108200720086a2109200820096a" + "210a2009200a6a210b20" + "0a200b6a210c200b200c6a210d200c200d6a210e200d200e6a210f200e200f6a2110200f20106a2111201020116a21" + "12201120126a21132012" + "20136a2114201320146a2115201420156a2116201520166a2117201620176a2118201720186a2119201820196a211a" + "2019201a6a211b201a20" + "1b6a211c201b201c6a211d201c201d6a211e201d201e6a211f201e201f6a2120201f20206a2121202020216a212220" + "2120226a212320222023" + "6a2124202320246a2125202420256a2126202520266a2127202620276a2128202720286a2129202820296a212a2029" + "202a6a212b202a202b6a" + "212c202b202c6a212d202c202d6a212e202d202e6a212f202e202f6a2130202f20306a2131203020316a2132203120" + "326a2133203220336a21" + "34203320346a2135203420356a2136203520366a2137203620376a2138203720386a2139203820396a213a2039203a" + "6a213b203a203b6a213c" + "203b203c6a213d203c203d6a213e203d203e6a213f203e203f6a2140203f20406a2141204020416a2142204120426a" + "2143204220436a214420" + "4320446a2145204420456a2146204520466a2147204620476a2148204720486a2149204820496a214a2049204a6a21" + "4b204a204b6a214c204b" + "204c6a214d204c204d6a214e204d204e6a214f204e204f6a2150204f20506a2151205020516a2152205120526a2153" + "205220536a2154205320" + "546a2155205420556a2156205520566a2157205620576a2158205720586a2159205820596a215a2059205a6a215b20" + "5a205b6a215c205b205c" + "6a215d205c205d6a215e205d205e6a215f205e205f6a2160205f20606a2161206020616a2162206120626a21632062" + "20636a2164206320646a" + "2165206420656a2166206520666a2167206620676a2168206720686a2169206820696a216a2069206a6a216b206a20" + "6b6a216c206b206c6a21" + "6d206c206d6a216e206d206e6a216f206e206f6a2170206f20706a2171207020716a2172207120726a217320722073" + "6a2174207320746a2175" + "207420756a2176207520766a2177207620776a2178207720786a2179207820796a217a2079207a6a217b207a207b6a" + "217c207b207c6a217d20" + "7c207d6a217e207d207e6a217f207e207f6a218001207f2080016a2181012080012081016a2182012081012082016a" + "2183012082012083016a" + "2184012083012084016a2185012084012085016a2186012085012086016a2187012086012087016a21880120870120" + "88016a21890120880120" + "89016a218a01208901208a016a218b01208a01208b016a218c01208b01208c016a218d01208c01208d016a218e0120" + "8d01208e016a218f0120" + "8e01208f016a219001208f012090016a2191012090012091016a2192012091012092016a2193012092012093016a21" + "94012093012094016a21" + "95012094012095016a2196012095012096016a2197012096012097016a2198012097012098016a2199012098012099" + "016a219a01209901209a" + "016a219b01209a01209b016a219c01209b01209c016a219d01209c01209d016a219e01209d01209e016a219f01209e" + "01209f016a21a001209f" + "0120a0016a21a10120a00120a1016a21a20120a10120a2016a21a30120a20120a3016a21a40120a30120a4016a21a5" + "0120a40120a5016a21a6" + "0120a50120a6016a21a70120a60120a7016a21a80120a70120a8016a21a90120a80120a9016a21aa0120a90120aa01" + "6a21ab0120aa0120ab01" + "6a21ac0120ab0120ac016a21ad0120ac0120ad016a21ae0120ad0120ae016a21af0120ae0120af016a21b00120af01" + "20b0016a21b10120b001" + "20b1016a21b20120b10120b2016a21b30120b20120b3016a21b40120b30120b4016a21b50120b40120b5016a21b601" + "20b50120b6016a21b701" + "20b60120b7016a21b80120b70120b8016a21b90120b80120b9016a21ba0120b90120ba016a21bb0120ba0120bb016a" + "21bc0120bb0120bc016a" + "21bd0120bc0120bd016a21be0120bd0120be016a21bf0120be0120bf016a21c00120bf0120c0016a21c10120c00120" + "c1016a21c20120c10120" + "c2016a21c30120c20120c3016a21c40120c30120c4016a21c50120c40120c5016a21c60120c50120c6016a21c70120" + "c60120c7016a21c80120" + "c70120c8016a21c90120c80120c9016a21ca0120c90120ca016a21cb0120ca0120cb016a21cc0120cb0120cc016a21" + "cd0120cc0120cd016a21" + "ce0120cd0120ce016a21cf0120ce0120cf016a21d00120cf0120d0016a21d10120d00120d1016a21d20120d10120d2" + "016a21d30120d20120d3" + "016a21d40120d30120d4016a21d50120d40120d5016a21d60120d50120d6016a21d70120d60120d7016a21d80120d7" + "0120d8016a21d90120d8" + "0120d9016a21da0120d90120da016a21db0120da0120db016a21dc0120db0120dc016a21dd0120dc0120dd016a21de" + "0120dd0120de016a21df" + "0120de0120df016a21e00120df0120e0016a21e10120e00120e1016a21e20120e10120e2016a21e30120e20120e301" + "6a21e40120e30120e401" + "6a21e50120e40120e5016a21e60120e50120e6016a21e70120e60120e7016a21e80120e70120e8016a21e90120e801" + "20e9016a21ea0120e901" + "20ea016a21eb0120ea0120eb016a21ec0120eb0120ec016a21ed0120ec0120ed016a21ee0120ed0120ee016a21ef01" + "20ee0120ef016a21f001" + "20ef0120f0016a21f10120f00120f1016a21f20120f10120f2016a21f30120f20120f3016a21f40120f30120f4016a" + "21f50120f40120f5016a" + "21f60120f50120f6016a21f70120f60120f7016a21f80120f70120f8016a21f90120f80120f9016a21fa0120f90120" + "fa016a21fb0120fa0120" + "fb016a21fc0120fb0120fc016a21fd0120fc0120fd016a21fe0120fd0120fe016a21ff0120fe0120ff016a21800220" + "ff012080026a21810220" + "80022081026a2182022081022082026a2183022082022083026a2184022083022084026a2185022084022085026a21" + "86022085022086026a21" + "87022086022087026a2188022087022088026a2189022088022089026a218a02208902208a026a218b02208a02208b" + "026a218c02208b02208c" + "026a218d02208c02208d026a218e02208d02208e026a218f02208e02208f026a219002208f022090026a2191022090" + "022091026a2192022091" + "022092026a2193022092022093026a2194022093022094026a2195022094022095026a2196022095022096026a2197" + "022096022097026a2198" + "022097022098026a2199022098022099026a219a02209902209a026a219b02209a02209b026a219c02209b02209c02" + "6a219d02209c02209d02" + "6a219e02209d02209e026a219f02209e02209f026a21a002209f0220a0026a21a10220a00220a1026a21a20220a102" + "20a2026a21a30220a202" + "20a3026a21a40220a30220a4026a21a50220a40220a5026a21a60220a50220a6026a21a70220a60220a7026a21a802" + "20a70220a8026a21a902" + "20a80220a9026a21aa0220a90220aa026a21ab0220aa0220ab026a21ac0220ab0220ac026a21ad0220ac0220ad026a" + "21ae0220ad0220ae026a" + "21af0220ae0220af026a21b00220af0220b0026a21b10220b00220b1026a21b20220b10220b2026a21b30220b20220" + "b3026a21b40220b30220" + "b4026a21b50220b40220b5026a21b60220b50220b6026a21b70220b60220b7026a21b80220b70220b8026a21b90220" + "b80220b9026a21ba0220" + "b90220ba026a21bb0220ba0220bb026a21bc0220bb0220bc026a21bd0220bc0220bd026a21be0220bd0220be026a21" + "bf0220be0220bf026a21" + "c00220bf0220c0026a21c10220c00220c1026a21c20220c10220c2026a21c30220c20220c3026a21c40220c30220c4" + "026a21c50220c40220c5" + "026a21c60220c50220c6026a21c70220c60220c7026a21c80220c70220c8026a21c90220c80220c9026a21ca0220c9" + "0220ca026a21cb0220ca" + "0220cb026a21cc0220cb0220cc026a21cd0220cc0220cd026a21ce0220cd0220ce026a21cf0220ce0220cf026a21d0" + "0220cf0220d0026a21d1" + "0220d00220d1026a21d20220d10220d2026a21d30220d20220d3026a21d40220d30220d4026a21d50220d40220d502" + "6a21d60220d50220d602" + "6a21d70220d60220d7026a21d80220d70220d8026a21d90220d80220d9026a21da0220d90220da026a21db0220da02" + "20db026a21dc0220db02" + "20dc026a21dd0220dc0220dd026a21de0220dd0220de026a21df0220de0220df026a21e00220df0220e0026a21e102" + "20e00220e1026a21e202" + "20e10220e2026a21e30220e20220e3026a21e40220e30220e4026a21e50220e40220e5026a21e60220e50220e6026a" + "21e70220e60220e7026a" + "21e80220e70220e8026a21e90220e80220e9026a21ea0220e90220ea026a21eb0220ea0220eb026a21ec0220eb0220" + "ec026a21ed0220ec0220" + "ed026a21ee0220ed0220ee026a21ef0220ee0220ef026a21f00220ef0220f0026a21f10220f00220f1026a21f20220" + "f10220f2026a21f30220" + "f20220f3026a21f40220f30220f4026a21f50220f40220f5026a21f60220f50220f6026a21f70220f60220f7026a21" + "f80220f70220f8026a21" + "f90220f80220f9026a21fa0220f90220fa026a21fb0220fa0220fb026a21fc0220fb0220fc026a21fd0220fc0220fd" + "026a21fe0220fd0220fe" + "026a21ff0220fe0220ff026a21800320ff022080036a2181032080032081036a2182032081032082036a2183032082" + "032083036a2184032083" + "032084036a2185032084032085036a2186032085032086036a2187032086032087036a2188032087032088036a2189" + "032088032089036a218a" + "03208903208a036a218b03208a03208b036a218c03208b03208c036a218d03208c03208d036a218e03208d03208e03" + "6a218f03208e03208f03" + "6a219003208f032090036a2191032090032091036a2192032091032092036a2193032092032093036a219403209303" + "2094036a219503209403" + "2095036a2196032095032096036a2197032096032097036a2198032097032098036a2199032098032099036a219a03" + "209903209a036a219b03" + "209a03209b036a219c03209b03209c036a219d03209c03209d036a219e03209d03209e036a219f03209e03209f036a" + "21a003209f0320a0036a" + "21a10320a00320a1036a21a20320a10320a2036a21a30320a20320a3036a21a40320a30320a4036a21a50320a40320" + "a5036a21a60320a50320" + "a6036a21a70320a60320a7036a21a80320a70320a8036a21a90320a80320a9036a21aa0320a90320aa036a21ab0320" + "aa0320ab036a21ac0320" + "ab0320ac036a21ad0320ac0320ad036a21ae0320ad0320ae036a21af0320ae0320af036a21b00320af0320b0036a21" + "b10320b00320b1036a21" + "b20320b10320b2036a21b30320b20320b3036a21b40320b30320b4036a21b50320b40320b5036a21b60320b50320b6" + "036a21b70320b60320b7" + "036a21b80320b70320b8036a21b90320b80320b9036a21ba0320b90320ba036a21bb0320ba0320bb036a21bc0320bb" + "0320bc036a21bd0320bc" + "0320bd036a21be0320bd0320be036a21bf0320be0320bf036a21c00320bf0320c0036a21c10320c00320c1036a21c2" + "0320c10320c2036a21c3" + "0320c20320c3036a21c40320c30320c4036a21c50320c40320c5036a21c60320c50320c6036a21c70320c60320c703" + "6a21c80320c70320c803" + "6a21c90320c80320c9036a21ca0320c90320ca036a21cb0320ca0320cb036a21cc0320cb0320cc036a21cd0320cc03" + "20cd036a21ce0320cd03" + "20ce036a21cf0320ce0320cf036a21d00320cf0320d0036a21d10320d00320d1036a21d20320d10320d2036a21d303" + "20d20320d3036a21d403" + "20d30320d4036a21d50320d40320d5036a21d60320d50320d6036a21d70320d60320d7036a21d80320d70320d8036a" + "21d90320d80320d9036a" + "21da0320d90320da036a21db0320da0320db036a21dc0320db0320dc036a21dd0320dc0320dd036a21de0320dd0320" + "de036a21df0320de0320" + "df036a21e00320df0320e0036a21e10320e00320e1036a21e20320e10320e2036a21e30320e20320e3036a21e40320" + "e30320e4036a21e50320" + "e40320e5036a21e60320e50320e6036a21e70320e60320e7036a21e80320e70320e8036a21e90320e80320e9036a21" + "ea0320e90320ea036a21" + "eb0320ea0320eb036a21ec0320eb0320ec036a21ed0320ec0320ed036a21ee0320ed0320ee036a21ef0320ee0320ef" + "036a21f00320ef0320f0" + "036a21f10320f00320f1036a21f20320f10320f2036a21f30320f20320f3036a21f40320f30320f4036a21f50320f4" + "0320f5036a21f60320f5" + "0320f6036a21f70320f60320f7036a21f80320f70320f8036a21f90320f80320f9036a21fa0320f90320fa036a21fb" + "0320fa0320fb036a21fc" + "0320fb0320fc036a21fd0320fc0320fd036a21fe0320fd0320fe036a21ff0320fe0320ff036a21800420ff03208004" + "6a218104208004208104" + "6a2182042081042082046a2183042082042083046a2184042083042084046a2185042084042085046a218604208504" + "2086046a218704208604" + "2087046a2188042087042088046a2189042088042089046a218a04208904208a046a218b04208a04208b046a218c04" + "208b04208c046a218d04" + "208c04208d046a218e04208d04208e046a218f04208e04208f046a219004208f042090046a2191042090042091046a" + "2192042091042092046a" + "2193042092042093046a2194042093042094046a2195042094042095046a2196042095042096046a21970420960420" + "97046a21980420970420" + "98046a2199042098042099046a219a04209904209a046a219b04209a04209b046a219c04209b04209c046a219d0420" + "9c04209d046a219e0420" + "9d04209e046a219f04209e04209f046a21a004209f0420a0046a21a10420a00420a1046a21a20420a10420a2046a21" + "a30420a20420a3046a21" + "a40420a30420a4046a21a50420a40420a5046a21a60420a50420a6046a21a70420a60420a7046a21a80420a70420a8" + "046a21a90420a80420a9" + "046a21aa0420a90420aa046a21ab0420aa0420ab046a21ac0420ab0420ac046a21ad0420ac0420ad046a21ae0420ad" + "0420ae046a21af0420ae" + "0420af046a21b00420af0420b0046a21b10420b00420b1046a21b20420b10420b2046a21b30420b20420b3046a21b4" + "0420b30420b4046a21b5" + "0420b40420b5046a21b60420b50420b6046a21b70420b60420b7046a21b80420b70420b8046a21b90420b80420b904" + "6a21ba0420b90420ba04" + "6a21bb0420ba0420bb046a21bc0420bb0420bc046a21bd0420bc0420bd046a21be0420bd0420be046a21bf0420be04" + "20bf046a21c00420bf04" + "20c0046a21c10420c00420c1046a21c20420c10420c2046a21c30420c20420c3046a21c40420c30420c4046a21c504" + "20c40420c5046a21c604" + "20c50420c6046a21c70420c60420c7046a21c80420c70420c8046a21c90420c80420c9046a21ca0420c90420ca046a" + "21cb0420ca0420cb046a" + "21cc0420cb0420cc046a21cd0420cc0420cd046a21ce0420cd0420ce046a21cf0420ce0420cf046a21d00420cf0420" + "d0046a21d10420d00420" + "d1046a21d20420d10420d2046a21d30420d20420d3046a21d40420d30420d4046a21d50420d40420d5046a21d60420" + "d50420d6046a21d70420" + "d60420d7046a21d80420d70420d8046a21d90420d80420d9046a21da0420d90420da046a21db0420da0420db046a21" + "dc0420db0420dc046a21" + "dd0420dc0420dd046a21de0420dd0420de046a21df0420de0420df046a21e00420df0420e0046a21e10420e00420e1" + "046a21e20420e10420e2" + "046a21e30420e20420e3046a21e40420e30420e4046a21e50420e40420e5046a21e60420e50420e6046a21e70420e6" + "0420e7046a21e80420e7" + "0420e8046a21e90420e80420e9046a21ea0420e90420ea046a21eb0420ea0420eb046a21ec0420eb0420ec046a21ed" + "0420ec0420ed046a21ee" + "0420ed0420ee046a21ef0420ee0420ef046a21f00420ef0420f0046a21f10420f00420f1046a21f20420f10420f204" + "6a21f30420f20420f304" + "6a21f40420f30420f4046a21f50420f40420f5046a21f60420f50420f6046a21f70420f60420f7046a21f80420f704" + "20f8046a21f90420f804" + "20f9046a21fa0420f90420fa046a21fb0420fa0420fb046a21fc0420fb0420fc046a21fd0420fc0420fd046a21fe04" + "20fd0420fe046a21ff04" + "20fe0420ff046a21800520ff042080056a2181052080052081056a2182052081052082056a2183052082052083056a" + "2184052083052084056a" + "2185052084052085056a2186052085052086056a2187052086052087056a2188052087052088056a21890520880520" + "89056a218a0520890520" + "8a056a218b05208a05208b056a218c05208b05208c056a218d05208c05208d056a218e05208d05208e056a218f0520" + "8e05208f056a21900520" + "8f052090056a2191052090052091056a2192052091052092056a2193052092052093056a2194052093052094056a21" + "95052094052095056a21" + "96052095052096056a2197052096052097056a2198052097052098056a2199052098052099056a219a05209905209a" + "056a219b05209a05209b" + "056a219c05209b05209c056a219d05209c05209d056a219e05209d05209e056a219f05209e05209f056a21a005209f" + "0520a0056a21a10520a0" + "0520a1056a21a20520a10520a2056a21a30520a20520a3056a21a40520a30520a4056a21a50520a40520a5056a21a6" + "0520a50520a6056a21a7" + "0520a60520a7056a21a80520a70520a8056a21a90520a80520a9056a21aa0520a90520aa056a21ab0520aa0520ab05" + "6a21ac0520ab0520ac05" + "6a21ad0520ac0520ad056a21ae0520ad0520ae056a21af0520ae0520af056a21b00520af0520b0056a21b10520b005" + "20b1056a21b20520b105" + "20b2056a21b30520b20520b3056a21b40520b30520b4056a21b50520b40520b5056a21b60520b50520b6056a21b705" + "20b60520b7056a21b805" + "20b70520b8056a21b90520b80520b9056a21ba0520b90520ba056a21bb0520ba0520bb056a21bc0520bb0520bc056a" + "21bd0520bc0520bd056a" + "21be0520bd0520be056a21bf0520be0520bf056a21c00520bf0520c0056a21c10520c00520c1056a21c20520c10520" + "c2056a21c30520c20520" + "c3056a21c40520c30520c4056a21c50520c40520c5056a21c60520c50520c6056a21c70520c60520c7056a21c80520" + "c70520c8056a21c90520" + "c80520c9056a21ca0520c90520ca056a21cb0520ca0520cb056a21cc0520cb0520cc056a21cd0520cc0520cd056a21" + "ce0520cd0520ce056a21" + "cf0520ce0520cf056a21d00520cf0520d0056a21d10520d00520d1056a21d20520d10520d2056a21d30520d20520d3" + "056a21d40520d30520d4" + "056a21d50520d40520d5056a21d60520d50520d6056a21d70520d60520d7056a21d80520d70520d8056a21d90520d8" + "0520d9056a21da0520d9" + "0520da056a21db0520da0520db056a21dc0520db0520dc056a21dd0520dc0520dd056a21de0520dd0520de056a21df" + "0520de0520df056a21e0" + "0520df0520e0056a21e10520e00520e1056a21e20520e10520e2056a21e30520e20520e3056a21e40520e30520e405" + "6a21e50520e40520e505" + "6a21e60520e50520e6056a21e70520e60520e7056a21e80520e70520e8056a21e90520e80520e9056a21ea0520e905" + "20ea056a21eb0520ea05" + "20eb056a21ec0520eb0520ec056a21ed0520ec0520ed056a21ee0520ed0520ee056a21ef0520ee0520ef056a21f005" + "20ef0520f0056a21f105" + "20f00520f1056a21f20520f10520f2056a21f30520f20520f3056a21f40520f30520f4056a21f50520f40520f5056a" + "21f60520f50520f6056a" + "21f70520f60520f7056a21f80520f70520f8056a21f90520f80520f9056a21fa0520f90520fa056a21fb0520fa0520" + "fb056a21fc0520fb0520" + "fc056a21fd0520fc0520fd056a21fe0520fd0520fe056a21ff0520fe0520ff056a21800620ff052080066a21810620" + "80062081066a21820620" + "81062082066a2183062082062083066a2184062083062084066a2185062084062085066a2186062085062086066a21" + "87062086062087066a21" + "88062087062088066a2189062088062089066a218a06208906208a066a218b06208a06208b066a218c06208b06208c" + "066a218d06208c06208d" + "066a218e06208d06208e066a218f06208e06208f066a219006208f062090066a2191062090062091066a2192062091" + "062092066a2193062092" + "062093066a2194062093062094066a2195062094062095066a2196062095062096066a2197062096062097066a2198" + "062097062098066a2199" + "062098062099066a219a06209906209a066a219b06209a06209b066a219c06209b06209c066a219d06209c06209d06" + "6a219e06209d06209e06" + "6a219f06209e06209f066a21a006209f0620a0066a21a10620a00620a1066a21a20620a10620a2066a21a30620a206" + "20a3066a21a40620a306" + "20a4066a21a50620a40620a5066a21a60620a50620a6066a21a70620a60620a7066a21a80620a70620a8066a21a906" + "20a80620a9066a21aa06" + "20a90620aa066a21ab0620aa0620ab066a21ac0620ab0620ac066a21ad0620ac0620ad066a21ae0620ad0620ae066a" + "21af0620ae0620af066a" + "21b00620af0620b0066a21b10620b00620b1066a21b20620b10620b2066a21b30620b20620b3066a21b40620b30620" + "b4066a21b50620b40620" + "b5066a21b60620b50620b6066a21b70620b60620b7066a21b80620b70620b8066a21b90620b80620b9066a21ba0620" + "b90620ba066a21bb0620" + "ba0620bb066a21bc0620bb0620bc066a21bd0620bc0620bd066a21be0620bd0620be066a21bf0620be0620bf066a21" + "c00620bf0620c0066a21" + "c10620c00620c1066a21c20620c10620c2066a21c30620c20620c3066a21c40620c30620c4066a21c50620c40620c5" + "066a21c60620c50620c6" + "066a21c70620c60620c7066a21c80620c70620c8066a21c90620c80620c9066a21ca0620c90620ca066a21cb0620ca" + "0620cb066a21cc0620cb" + "0620cc066a21cd0620cc0620cd066a21ce0620cd0620ce066a21cf0620ce0620cf066a21d00620cf0620d0066a21d1" + "0620d00620d1066a21d2" + "0620d10620d2066a21d30620d20620d3066a21d40620d30620d4066a21d50620d40620d5066a21d60620d50620d606" + "6a21d70620d60620d706" + "6a21d80620d70620d8066a21d90620d80620d9066a21da0620d90620da066a21db0620da0620db066a21dc0620db06" + "20dc066a21dd0620dc06" + "20dd066a21de0620dd0620de066a21df0620de0620df066a21e00620df0620e0066a21e10620e00620e1066a21e206" + "20e10620e2066a21e306" + "20e20620e3066a21e40620e30620e4066a21e50620e40620e5066a21e60620e50620e6066a21e70620e60620e7066a" + "21e80620e70620e8066a" + "21e90620e80620e9066a21ea0620e90620ea066a21eb0620ea0620eb066a21ec0620eb0620ec066a21ed0620ec0620" + "ed066a21ee0620ed0620" + "ee066a21ef0620ee0620ef066a21f00620ef0620f0066a21f10620f00620f1066a21f20620f10620f2066a21f30620" + "f20620f3066a21f40620" + "f30620f4066a21f50620f40620f5066a21f60620f50620f6066a21f70620f60620f7066a21f80620f70620f8066a21" + "f90620f80620f9066a21" + "fa0620f90620fa066a21fb0620fa0620fb066a21fc0620fb0620fc066a21fd0620fc0620fd066a21fe0620fd0620fe" + "066a21ff0620fe0620ff" + "066a21800720ff062080076a2181072080072081076a2182072081072082076a2183072082072083076a2184072083" + "072084076a2185072084" + "072085076a2186072085072086076a2187072086072087076a2188072087072088076a2189072088072089076a218a" + "07208907208a076a218b" + "07208a07208b076a218c07208b07208c076a218d07208c07208d076a218e07208d07208e076a218f07208e07208f07" + "6a219007208f07209007" + "6a2191072090072091076a2192072091072092076a2193072092072093076a2194072093072094076a219507209407" + "2095076a219607209507" + "2096076a2197072096072097076a2198072097072098076a2199072098072099076a219a07209907209a076a219b07" + "209a07209b076a219c07" + "209b07209c076a219d07209c07209d076a219e07209d07209e076a219f07209e07209f076a21a007209f0720a0076a" + "21a10720a00720a1076a" + "21a20720a10720a2076a21a30720a20720a3076a21a40720a30720a4076a21a50720a40720a5076a21a60720a50720" + "a6076a21a70720a60720" + "a7076a21a80720a70720a8076a21a90720a80720a9076a21aa0720a90720aa076a21ab0720aa0720ab076a21ac0720" + "ab0720ac076a21ad0720" + "ac0720ad076a21ae0720ad0720ae076a21af0720ae0720af076a21b00720af0720b0076a21b10720b00720b1076a21" + "b20720b10720b2076a21" + "b30720b20720b3076a21b40720b30720b4076a21b50720b40720b5076a21b60720b50720b6076a21b70720b60720b7" + "076a21b80720b70720b8" + "076a21b90720b80720b9076a21ba0720b90720ba076a21bb0720ba0720bb076a21bc0720bb0720bc076a21bd0720bc" + "0720bd076a21be0720bd" + "0720be076a21bf0720be0720bf076a21c00720bf0720c0076a21c10720c00720c1076a21c20720c10720c2076a21c3" + "0720c20720c3076a21c4" + "0720c30720c4076a21c50720c40720c5076a21c60720c50720c6076a21c70720c60720c7076a21c80720c70720c807" + "6a21c90720c80720c907" + "6a21ca0720c90720ca076a21cb0720ca0720cb076a21cc0720cb0720cc076a21cd0720cc0720cd076a21ce0720cd07" + "20ce076a21cf0720ce07" + "20cf076a21d00720cf0720d0076a21d10720d00720d1076a21d20720d10720d2076a21d30720d20720d3076a21d407" + "20d30720d4076a21d507" + "20d40720d5076a21d60720d50720d6076a21d70720d60720d7076a21d80720d70720d8076a21d90720d80720d9076a" + "21da0720d90720da076a" + "21db0720da0720db076a21dc0720db0720dc076a21dd0720dc0720dd076a21de0720dd0720de076a21df0720de0720" + "df076a21e00720df0720" + "e0076a21e10720e00720e1076a21e20720e10720e2076a21e30720e20720e3076a21e40720e30720e4076a21e50720" + "e40720e5076a21e60720" + "e50720e6076a21e70720e60720e7076a21e80720e70720e8076a21e90720e80720e9076a21ea0720e90720ea076a21" + "eb0720ea0720eb076a21" + "ec0720eb0720ec076a21ed0720ec0720ed076a21ee0720ed0720ee076a21ef0720ee0720ef076a21f00720ef0720f0" + "076a21f10720f00720f1" + "076a21f20720f10720f2076a21f30720f20720f3076a21f40720f30720f4076a21f50720f40720f5076a21f60720f5" + "0720f6076a21f70720f6" + "0720f7076a21f80720f70720f8076a21f90720f80720f9076a21fa0720f90720fa076a21fb0720fa0720fb076a21fc" + "0720fb0720fc076a21fd" + "0720fc0720fd076a21fe0720fd0720fe076a21ff0720fe0720ff076a21800820ff072080086a218108208008208108" + "6a218208208108208208" + "6a2183082082082083086a2184082083082084086a2185082084082085086a2186082085082086086a218708208608" + "2087086a218808208708" + "2088086a2189082088082089086a218a08208908208a086a218b08208a08208b086a218c08208b08208c086a218d08" + "208c08208d086a218e08" + "208d08208e086a218f08208e08208f086a219008208f082090086a2191082090082091086a2192082091082092086a" + "2193082092082093086a" + "2194082093082094086a2195082094082095086a2196082095082096086a2197082096082097086a21980820970820" + "98086a21990820980820" + "99086a219a08209908209a086a219b08209a08209b086a219c08209b08209c086a219d08209c08209d086a219e0820" + "9d08209e086a219f0820" + "9e08209f086a21a008209f0820a0086a21a10820a00820a1086a21a20820a10820a2086a21a30820a20820a3086a21" + "a40820a30820a4086a21" + "a50820a40820a5086a21a60820a50820a6086a21a70820a60820a7086a21a80820a70820a8086a21a90820a80820a9" + "086a21aa0820a90820aa" + "086a21ab0820aa0820ab086a21ac0820ab0820ac086a21ad0820ac0820ad086a21ae0820ad0820ae086a21af0820ae" + "0820af086a21b00820af" + "0820b0086a21b10820b00820b1086a21b20820b10820b2086a21b30820b20820b3086a21b40820b30820b4086a21b5" + "0820b40820b5086a21b6" + "0820b50820b6086a21b70820b60820b7086a21b80820b70820b8086a21b90820b80820b9086a21ba0820b90820ba08" + "6a21bb0820ba0820bb08" + "6a21bc0820bb0820bc086a21bd0820bc0820bd086a21be0820bd0820be086a21bf0820be0820bf086a21c00820bf08" + "20c0086a21c10820c008" + "20c1086a21c20820c10820c2086a21c30820c20820c3086a21c40820c30820c4086a21c50820c40820c5086a21c608" + "20c50820c6086a21c708" + "20c60820c7086a21c80820c70820c8086a21c90820c80820c9086a21ca0820c90820ca086a21cb0820ca0820cb086a" + "21cc0820cb0820cc086a" + "21cd0820cc0820cd086a21ce0820cd0820ce086a21cf0820ce0820cf086a21d00820cf0820d0086a21d10820d00820" + "d1086a21d20820d10820" + "d2086a21d30820d20820d3086a21d40820d30820d4086a21d50820d40820d5086a21d60820d50820d6086a21d70820" + "d60820d7086a21d80820" + "d70820d8086a21d90820d80820d9086a21da0820d90820da086a21db0820da0820db086a21dc0820db0820dc086a21" + "dd0820dc0820dd086a21" + "de0820dd0820de086a21df0820de0820df086a21e00820df0820e0086a21e10820e00820e1086a21e20820e10820e2" + "086a21e30820e20820e3" + "086a21e40820e30820e4086a21e50820e40820e5086a21e60820e50820e6086a21e70820e60820e7086a21e80820e7" + "0820e8086a21e90820e8" + "0820e9086a21ea0820e90820ea086a21eb0820ea0820eb086a21ec0820eb0820ec086a21ed0820ec0820ed086a21ee" + "0820ed0820ee086a21ef" + "0820ee0820ef086a21f00820ef0820f0086a21f10820f00820f1086a21f20820f10820f2086a21f30820f20820f308" + "6a21f40820f30820f408" + "6a21f50820f40820f5086a21f60820f50820f6086a21f70820f60820f7086a21f80820f70820f8086a21f90820f808" + "20f9086a21fa0820f908" + "20fa086a21fb0820fa0820fb086a21fc0820fb0820fc086a21fd0820fc0820fd086a21fe0820fd0820fe086a21ff08" + "20fe0820ff086a218009" + "20ff082080096a2181092080092081096a2182092081092082096a2183092082092083096a2184092083092084096a" + "2185092084092085096a" + "2186092085092086096a2187092086092087096a2188092087092088096a2189092088092089096a218a0920890920" + "8a096a218b09208a0920" + "8b096a218c09208b09208c096a218d09208c09208d096a218e09208d09208e096a218f09208e09208f096a21900920" + "8f092090096a21910920" + "90092091096a2192092091092092096a2193092092092093096a2194092093092094096a2195092094092095096a21" + "96092095092096096a21" + "97092096092097096a2198092097092098096a2199092098092099096a219a09209909209a096a219b09209a09209b" + "096a219c09209b09209c" + "096a219d09209c09209d096a219e09209d09209e096a219f09209e09209f096a21a009209f0920a0096a21a10920a0" + "0920a1096a21a20920a1" + "0920a2096a21a30920a20920a3096a21a40920a30920a4096a21a50920a40920a5096a21a60920a50920a6096a21a7" + "0920a60920a7096a21a8" + "0920a70920a8096a21a90920a80920a9096a21aa0920a90920aa096a21ab0920aa0920ab096a21ac0920ab0920ac09" + "6a21ad0920ac0920ad09" + "6a21ae0920ad0920ae096a21af0920ae0920af096a21b00920af0920b0096a21b10920b00920b1096a21b20920b109" + "20b2096a21b30920b209" + "20b3096a21b40920b30920b4096a21b50920b40920b5096a21b60920b50920b6096a21b70920b60920b7096a21b809" + "20b70920b8096a21b909" + "20b80920b9096a21ba0920b90920ba096a21bb0920ba0920bb096a21bc0920bb0920bc096a21bd0920bc0920bd096a" + "21be0920bd0920be096a" + "21bf0920be0920bf096a21c00920bf0920c0096a21c10920c00920c1096a21c20920c10920c2096a21c30920c20920" + "c3096a21c40920c30920" + "c4096a21c50920c40920c5096a21c60920c50920c6096a21c70920c60920c7096a21c80920c70920c8096a21c90920" + "c80920c9096a21ca0920" + "c90920ca096a21cb0920ca0920cb096a21cc0920cb0920cc096a21cd0920cc0920cd096a21ce0920cd0920ce096a21" + "cf0920ce0920cf096a21" + "d00920cf0920d0096a21d10920d00920d1096a21d20920d10920d2096a21d30920d20920d3096a21d40920d30920d4" + "096a21d50920d40920d5" + "096a21d60920d50920d6096a21d70920d60920d7096a21d80920d70920d8096a21d90920d80920d9096a21da0920d9" + "0920da096a21db0920da" + "0920db096a21dc0920db0920dc096a21dd0920dc0920dd096a21de0920dd0920de096a21df0920de0920df096a21e0" + "0920df0920e0096a21e1" + "0920e00920e1096a21e20920e10920e2096a21e30920e20920e3096a21e40920e30920e4096a21e50920e40920e509" + "6a21e60920e50920e609" + "6a21e70920e60920e7096a21e80920e70920e8096a21e90920e80920e9096a21ea0920e90920ea096a21eb0920ea09" + "20eb096a21ec0920eb09" + "20ec096a21ed0920ec0920ed096a21ee0920ed0920ee096a21ef0920ee0920ef096a21f00920ef0920f0096a21f109" + "20f00920f1096a21f209" + "20f10920f2096a21f30920f20920f3096a21f40920f30920f4096a21f50920f40920f5096a21f60920f50920f6096a" + "21f70920f60920f7096a" + "21f80920f70920f8096a21f90920f80920f9096a21fa0920f90920fa096a21fb0920fa0920fb096a21fc0920fb0920" + "fc096a21fd0920fc0920" + "fd096a21fe0920fd0920fe096a21ff0920fe0920ff096a21800a20ff0920800a6a21810a20800a20810a6a21820a20" + "810a20820a6a21830a20" + "820a20830a6a21840a20830a20840a6a21850a20840a20850a6a21860a20850a20860a6a21870a20860a20870a6a21" + "880a20870a20880a6a21" + "890a20880a20890a6a218a0a20890a208a0a6a218b0a208a0a208b0a6a218c0a208b0a208c0a6a218d0a208c0a208d" + "0a6a218e0a208d0a208e" + "0a6a218f0a208e0a208f0a6a21900a208f0a20900a6a21910a20900a20910a6a21920a20910a20920a6a21930a2092" + "0a20930a6a21940a2093" + "0a20940a6a21950a20940a20950a6a21960a20950a20960a6a21970a20960a20970a6a21980a20970a20980a6a2199" + "0a20980a20990a6a219a" + "0a20990a209a0a6a219b0a209a0a209b0a6a219c0a209b0a209c0a6a219d0a209c0a209d0a6a219e0a209d0a209e0a" + "6a219f0a209e0a209f0a" + "6a21a00a209f0a20a00a6a21a10a20a00a20a10a6a21a20a20a10a20a20a6a21a30a20a20a20a30a6a21a40a20a30a" + "20a40a6a21a50a20a40a" + "20a50a6a21a60a20a50a20a60a6a21a70a20a60a20a70a6a21a80a20a70a20a80a6a21a90a20a80a20a90a6a21aa0a" + "20a90a20aa0a6a21ab0a" + "20aa0a20ab0a6a21ac0a20ab0a20ac0a6a21ad0a20ac0a20ad0a6a21ae0a20ad0a20ae0a6a21af0a20ae0a20af0a6a" + "21b00a20af0a20b00a6a" + "21b10a20b00a20b10a6a21b20a20b10a20b20a6a21b30a20b20a20b30a6a21b40a20b30a20b40a6a21b50a20b40a20" + "b50a6a21b60a20b50a20" + "b60a6a21b70a20b60a20b70a6a21b80a20b70a20b80a6a21b90a20b80a20b90a6a21ba0a20b90a20ba0a6a21bb0a20" + "ba0a20bb0a6a21bc0a20" + "bb0a20bc0a6a21bd0a20bc0a20bd0a6a21be0a20bd0a20be0a6a21bf0a20be0a20bf0a6a21c00a20bf0a20c00a6a21" + "c10a20c00a20c10a6a21" + "c20a20c10a20c20a6a21c30a20c20a20c30a6a21c40a20c30a20c40a6a21c50a20c40a20c50a6a21c60a20c50a20c6" + "0a6a21c70a20c60a20c7" + "0a6a21c80a20c70a20c80a6a21c90a20c80a20c90a6a21ca0a20c90a20ca0a6a21cb0a20ca0a20cb0a6a21cc0a20cb" + "0a20cc0a6a21cd0a20cc" + "0a20cd0a6a21ce0a20cd0a20ce0a6a21cf0a20ce0a20cf0a6a21d00a20cf0a20d00a6a21d10a20d00a20d10a6a21d2" + "0a20d10a20d20a6a21d3" + "0a20d20a20d30a6a21d40a20d30a20d40a6a21d50a20d40a20d50a6a21d60a20d50a20d60a6a21d70a20d60a20d70a" + "6a21d80a20d70a20d80a" + "6a21d90a20d80a20d90a6a21da0a20d90a20da0a6a21db0a20da0a20db0a6a21dc0a20db0a20dc0a6a21dd0a20dc0a" + "20dd0a6a21de0a20dd0a" + "20de0a6a21df0a20de0a20df0a6a21e00a20df0a20e00a6a21e10a20e00a20e10a6a21e20a20e10a20e20a6a21e30a" + "20e20a20e30a6a21e40a" + "20e30a20e40a6a21e50a20e40a20e50a6a21e60a20e50a20e60a6a21e70a20e60a20e70a6a21e80a20e70a20e80a6a" + "21e90a20e80a20e90a6a" + "21ea0a20e90a20ea0a6a21eb0a20ea0a20eb0a6a21ec0a20eb0a20ec0a6a21ed0a20ec0a20ed0a6a21ee0a20ed0a20" + "ee0a6a21ef0a20ee0a20" + "ef0a6a21f00a20ef0a20f00a6a21f10a20f00a20f10a6a21f20a20f10a20f20a6a21f30a20f20a20f30a6a21f40a20" + "f30a20f40a6a21f50a20" + "f40a20f50a6a21f60a20f50a20f60a6a21f70a20f60a20f70a6a21f80a20f70a20f80a6a21f90a20f80a20f90a6a21" + "fa0a20f90a20fa0a6a21" + "fb0a20fa0a20fb0a6a21fc0a20fb0a20fc0a6a21fd0a20fc0a20fd0a6a21fe0a20fd0a20fe0a6a21ff0a20fe0a20ff" + "0a6a21800b20ff0a2080" + "0b6a21810b20800b20810b6a21820b20810b20820b6a21830b20820b20830b6a21840b20830b20840b6a21850b2084" + "0b20850b6a21860b2085" + "0b20860b6a21870b20860b20870b6a21880b20870b20880b6a21890b20880b20890b6a218a0b20890b208a0b6a218b" + "0b208a0b208b0b6a218c" + "0b208b0b208c0b6a218d0b208c0b208d0b6a218e0b208d0b208e0b6a218f0b208e0b208f0b6a21900b208f0b20900b" + "6a21910b20900b20910b" + "6a21920b20910b20920b6a21930b20920b20930b6a21940b20930b20940b6a21950b20940b20950b6a21960b20950b" + "20960b6a21970b20960b" + "20970b6a21980b20970b20980b6a21990b20980b20990b6a219a0b20990b209a0b6a219b0b209a0b209b0b6a219c0b" + "209b0b209c0b6a219d0b" + "209c0b209d0b6a219e0b209d0b209e0b6a219f0b209e0b209f0b6a21a00b209f0b20a00b6a21a10b20a00b20a10b6a" + "21a20b20a10b20a20b6a" + "21a30b20a20b20a30b6a21a40b20a30b20a40b6a21a50b20a40b20a50b6a21a60b20a50b20a60b6a21a70b20a60b20" + "a70b6a21a80b20a70b20" + "a80b6a21a90b20a80b20a90b6a21aa0b20a90b20aa0b6a21ab0b20aa0b20ab0b6a21ac0b20ab0b20ac0b6a21ad0b20" + "ac0b20ad0b6a21ae0b20" + "ad0b20ae0b6a21af0b20ae0b20af0b6a21b00b20af0b20b00b6a21b10b20b00b20b10b6a21b20b20b10b20b20b6a21" + "b30b20b20b20b30b6a21" + "b40b20b30b20b40b6a21b50b20b40b20b50b6a21b60b20b50b20b60b6a21b70b20b60b20b70b6a21b80b20b70b20b8" + "0b6a21b90b20b80b20b9" + "0b6a21ba0b20b90b20ba0b6a21bb0b20ba0b20bb0b6a21bc0b20bb0b20bc0b6a21bd0b20bc0b20bd0b6a21be0b20bd" + "0b20be0b6a21bf0b20be" + "0b20bf0b6a21c00b20bf0b20c00b6a21c10b20c00b20c10b6a21c20b20c10b20c20b6a21c30b20c20b20c30b6a21c4" + "0b20c30b20c40b6a21c5" + "0b20c40b20c50b6a21c60b20c50b20c60b6a21c70b20c60b20c70b6a21c80b20c70b20c80b6a21c90b20c80b20c90b" + "6a21ca0b20c90b20ca0b" + "6a21cb0b20ca0b20cb0b6a21cc0b20cb0b20cc0b6a21cd0b20cc0b20cd0b6a21ce0b20cd0b20ce0b6a21cf0b20ce0b" + "20cf0b6a21d00b20cf0b" + "20d00b6a21d10b20d00b20d10b6a21d20b20d10b20d20b6a21d30b20d20b20d30b6a21d40b20d30b20d40b6a21d50b" + "20d40b20d50b6a21d60b" + "20d50b20d60b6a21d70b20d60b20d70b6a21d80b20d70b20d80b6a21d90b20d80b20d90b6a21da0b20d90b20da0b6a" + "21db0b20da0b20db0b6a" + "21dc0b20db0b20dc0b6a21dd0b20dc0b20dd0b6a21de0b20dd0b20de0b6a21df0b20de0b20df0b6a21e00b20df0b20" + "e00b6a21e10b20e00b20" + "e10b6a21e20b20e10b20e20b6a21e30b20e20b20e30b6a21e40b20e30b20e40b6a21e50b20e40b20e50b6a21e60b20" + "e50b20e60b6a21e70b20" + "e60b20e70b6a21e80b20e70b20e80b6a21e90b20e80b20e90b6a21ea0b20e90b20ea0b6a21eb0b20ea0b20eb0b6a21" + "ec0b20eb0b20ec0b6a21" + "ed0b20ec0b20ed0b6a21ee0b20ed0b20ee0b6a21ef0b20ee0b20ef0b6a21f00b20ef0b20f00b6a21f10b20f00b20f1" + "0b6a21f20b20f10b20f2" + "0b6a21f30b20f20b20f30b6a21f40b20f30b20f40b6a21f50b20f40b20f50b6a21f60b20f50b20f60b6a21f70b20f6" + "0b20f70b6a21f80b20f7" + "0b20f80b6a21f90b20f80b20f90b6a21fa0b20f90b20fa0b6a21fb0b20fa0b20fb0b6a21fc0b20fb0b20fc0b6a21fd" + "0b20fc0b20fd0b6a21fe" + "0b20fd0b20fe0b6a21ff0b20fe0b20ff0b6a21800c20ff0b20800c6a21810c20800c20810c6a21820c20810c20820c" + "6a21830c20820c20830c" + "6a21840c20830c20840c6a21850c20840c20850c6a21860c20850c20860c6a21870c20860c20870c6a21880c20870c" + "20880c6a21890c20880c" + "20890c6a218a0c20890c208a0c6a218b0c208a0c208b0c6a218c0c208b0c208c0c6a218d0c208c0c208d0c6a218e0c" + "208d0c208e0c6a218f0c" + "208e0c208f0c6a21900c208f0c20900c6a21910c20900c20910c6a21920c20910c20920c6a21930c20920c20930c6a" + "21940c20930c20940c6a" + "21950c20940c20950c6a21960c20950c20960c6a21970c20960c20970c6a21980c20970c20980c6a21990c20980c20" + "990c6a219a0c20990c20" + "9a0c6a219b0c209a0c209b0c6a219c0c209b0c209c0c6a219d0c209c0c209d0c6a219e0c209d0c209e0c6a219f0c20" + "9e0c209f0c6a21a00c20" + "9f0c20a00c6a21a10c20a00c20a10c6a21a20c20a10c20a20c6a21a30c20a20c20a30c6a21a40c20a30c20a40c6a21" + "a50c20a40c20a50c6a21" + "a60c20a50c20a60c6a21a70c20a60c20a70c6a21a80c20a70c20a80c6a21a90c20a80c20a90c6a21aa0c20a90c20aa" + "0c6a21ab0c20aa0c20ab" + "0c6a21ac0c20ab0c20ac0c6a21ad0c20ac0c20ad0c6a21ae0c20ad0c20ae0c6a21af0c20ae0c20af0c6a21b00c20af" + "0c20b00c6a21b10c20b0" + "0c20b10c6a21b20c20b10c20b20c6a21b30c20b20c20b30c6a21b40c20b30c20b40c6a21b50c20b40c20b50c6a21b6" + "0c20b50c20b60c6a21b7" + "0c20b60c20b70c6a21b80c20b70c20b80c6a21b90c20b80c20b90c6a21ba0c20b90c20ba0c6a21bb0c20ba0c20bb0c" + "6a21bc0c20bb0c20bc0c" + "6a21bd0c20bc0c20bd0c6a21be0c20bd0c20be0c6a21bf0c20be0c20bf0c6a21c00c20bf0c20c00c6a21c10c20c00c" + "20c10c6a21c20c20c10c" + "20c20c6a21c30c20c20c20c30c6a21c40c20c30c20c40c6a21c50c20c40c20c50c6a21c60c20c50c20c60c6a21c70c" + "20c60c20c70c6a21c80c" + "20c70c20c80c6a21c90c20c80c20c90c6a21ca0c20c90c20ca0c6a21cb0c20ca0c20cb0c6a21cc0c20cb0c20cc0c6a" + "21cd0c20cc0c20cd0c6a" + "21ce0c20cd0c20ce0c6a21cf0c20ce0c20cf0c6a21d00c20cf0c20d00c6a21d10c20d00c20d10c6a21d20c20d10c20" + "d20c6a21d30c20d20c20" + "d30c6a21d40c20d30c20d40c6a21d50c20d40c20d50c6a21d60c20d50c20d60c6a21d70c20d60c20d70c6a21d80c20" + "d70c20d80c6a21d90c20" + "d80c20d90c6a21da0c20d90c20da0c6a21db0c20da0c20db0c6a21dc0c20db0c20dc0c6a21dd0c20dc0c20dd0c6a21" + "de0c20dd0c20de0c6a21" + "df0c20de0c20df0c6a21e00c20df0c20e00c6a21e10c20e00c20e10c6a21e20c20e10c20e20c6a21e30c20e20c20e3" + "0c6a21e40c20e30c20e4" + "0c6a21e50c20e40c20e50c6a21e60c20e50c20e60c6a21e70c20e60c20e70c6a21e80c20e70c20e80c6a21e90c20e8" + "0c20e90c6a21ea0c20e9" + "0c20ea0c6a21eb0c20ea0c20eb0c6a21ec0c20eb0c20ec0c6a21ed0c20ec0c20ed0c6a21ee0c20ed0c20ee0c6a21ef" + "0c20ee0c20ef0c6a21f0" + "0c20ef0c20f00c6a21f10c20f00c20f10c6a21f20c20f10c20f20c6a21f30c20f20c20f30c6a21f40c20f30c20f40c" + "6a21f50c20f40c20f50c" + "6a21f60c20f50c20f60c6a21f70c20f60c20f70c6a21f80c20f70c20f80c6a21f90c20f80c20f90c6a21fa0c20f90c" + "20fa0c6a21fb0c20fa0c" + "20fb0c6a21fc0c20fb0c20fc0c6a21fd0c20fc0c20fd0c6a21fe0c20fd0c20fe0c6a21ff0c20fe0c20ff0c6a21800d" + "20ff0c20800d6a21810d" + "20800d20810d6a21820d20810d20820d6a21830d20820d20830d6a21840d20830d20840d6a21850d20840d20850d6a" + "21860d20850d20860d6a" + "21870d20860d20870d6a21880d20870d20880d6a21890d20880d20890d6a218a0d20890d208a0d6a218b0d208a0d20" + "8b0d6a218c0d208b0d20" + "8c0d6a218d0d208c0d208d0d6a218e0d208d0d208e0d6a218f0d208e0d208f0d6a21900d208f0d20900d6a21910d20" + "900d20910d6a21920d20" + "910d20920d6a21930d20920d20930d6a21940d20930d20940d6a21950d20940d20950d6a21960d20950d20960d6a21" + "970d20960d20970d6a21" + "980d20970d20980d6a21990d20980d20990d6a219a0d20990d209a0d6a219b0d209a0d209b0d6a219c0d209b0d209c" + "0d6a219d0d209c0d209d" + "0d6a219e0d209d0d209e0d6a219f0d209e0d209f0d6a21a00d209f0d20a00d6a21a10d20a00d20a10d6a21a20d20a1" + "0d20a20d6a21a30d20a2" + "0d20a30d6a21a40d20a30d20a40d6a21a50d20a40d20a50d6a21a60d20a50d20a60d6a21a70d20a60d20a70d6a21a8" + "0d20a70d20a80d6a21a9" + "0d20a80d20a90d6a21aa0d20a90d20aa0d6a21ab0d20aa0d20ab0d6a21ac0d20ab0d20ac0d6a21ad0d20ac0d20ad0d" + "6a21ae0d20ad0d20ae0d" + "6a21af0d20ae0d20af0d6a21b00d20af0d20b00d6a21b10d20b00d20b10d6a21b20d20b10d20b20d6a21b30d20b20d" + "20b30d6a21b40d20b30d" + "20b40d6a21b50d20b40d20b50d6a21b60d20b50d20b60d6a21b70d20b60d20b70d6a21b80d20b70d20b80d6a21b90d" + "20b80d20b90d6a21ba0d" + "20b90d20ba0d6a21bb0d20ba0d20bb0d6a21bc0d20bb0d20bc0d6a21bd0d20bc0d20bd0d6a21be0d20bd0d20be0d6a" + "21bf0d20be0d20bf0d6a" + "21c00d20bf0d20c00d6a21c10d20c00d20c10d6a21c20d20c10d20c20d6a21c30d20c20d20c30d6a21c40d20c30d20" + "c40d6a21c50d20c40d20" + "c50d6a21c60d20c50d20c60d6a21c70d20c60d20c70d6a21c80d20c70d20c80d6a21c90d20c80d20c90d6a21ca0d20" + "c90d20ca0d6a21cb0d20" + "ca0d20cb0d6a21cc0d20cb0d20cc0d6a21cd0d20cc0d20cd0d6a21ce0d20cd0d20ce0d6a21cf0d20ce0d20cf0d6a21" + "d00d20cf0d20d00d6a21" + "d10d20d00d20d10d6a21d20d20d10d20d20d6a21d30d20d20d20d30d6a21d40d20d30d20d40d6a21d50d20d40d20d5" + "0d6a21d60d20d50d20d6" + "0d6a21d70d20d60d20d70d6a21d80d20d70d20d80d6a21d90d20d80d20d90d6a21da0d20d90d20da0d6a21db0d20da" + "0d20db0d6a21dc0d20db" + "0d20dc0d6a21dd0d20dc0d20dd0d6a21de0d20dd0d20de0d6a21df0d20de0d20df0d6a21e00d20df0d20e00d6a21e1" + "0d20e00d20e10d6a21e2" + "0d20e10d20e20d6a21e30d20e20d20e30d6a21e40d20e30d20e40d6a21e50d20e40d20e50d6a21e60d20e50d20e60d" + "6a21e70d20e60d20e70d" + "6a21e80d20e70d20e80d6a21e90d20e80d20e90d6a21ea0d20e90d20ea0d6a21eb0d20ea0d20eb0d6a21ec0d20eb0d" + "20ec0d6a21ed0d20ec0d" + "20ed0d6a21ee0d20ed0d20ee0d6a21ef0d20ee0d20ef0d6a21f00d20ef0d20f00d6a21f10d20f00d20f10d6a21f20d" + "20f10d20f20d6a21f30d" + "20f20d20f30d6a21f40d20f30d20f40d6a21f50d20f40d20f50d6a21f60d20f50d20f60d6a21f70d20f60d20f70d6a" + "21f80d20f70d20f80d6a" + "21f90d20f80d20f90d6a21fa0d20f90d20fa0d6a21fb0d20fa0d20fb0d6a21fc0d20fb0d20fc0d6a21fd0d20fc0d20" + "fd0d6a21fe0d20fd0d20" + "fe0d6a21ff0d20fe0d20ff0d6a21800e20ff0d20800e6a21810e20800e20810e6a21820e20810e20820e6a21830e20" + "820e20830e6a21840e20" + "830e20840e6a21850e20840e20850e6a21860e20850e20860e6a21870e20860e20870e6a21880e20870e20880e6a21" + "890e20880e20890e6a21" + "8a0e20890e208a0e6a218b0e208a0e208b0e6a218c0e208b0e208c0e6a218d0e208c0e208d0e6a218e0e208d0e208e" + "0e6a218f0e208e0e208f" + "0e6a21900e208f0e20900e6a21910e20900e20910e6a21920e20910e20920e6a21930e20920e20930e6a21940e2093" + "0e20940e6a21950e2094" + "0e20950e6a21960e20950e20960e6a21970e20960e20970e6a21980e20970e20980e6a21990e20980e20990e6a219a" + "0e20990e209a0e6a219b" + "0e209a0e209b0e6a219c0e209b0e209c0e6a219d0e209c0e209d0e6a219e0e209d0e209e0e6a219f0e209e0e209f0e" + "6a21a00e209f0e20a00e" + "6a21a10e20a00e20a10e6a21a20e20a10e20a20e6a21a30e20a20e20a30e6a21a40e20a30e20a40e6a21a50e20a40e" + "20a50e6a21a60e20a50e" + "20a60e6a21a70e20a60e20a70e6a21a80e20a70e20a80e6a21a90e20a80e20a90e6a21aa0e20a90e20aa0e6a21ab0e" + "20aa0e20ab0e6a21ac0e" + "20ab0e20ac0e6a21ad0e20ac0e20ad0e6a21ae0e20ad0e20ae0e6a21af0e20ae0e20af0e6a21b00e20af0e20b00e6a" + "21b10e20b00e20b10e6a" + "21b20e20b10e20b20e6a21b30e20b20e20b30e6a21b40e20b30e20b40e6a21b50e20b40e20b50e6a21b60e20b50e20" + "b60e6a21b70e20b60e20" + "b70e6a21b80e20b70e20b80e6a21b90e20b80e20b90e6a21ba0e20b90e20ba0e6a21bb0e20ba0e20bb0e6a21bc0e20" + "bb0e20bc0e6a21bd0e20" + "bc0e20bd0e6a21be0e20bd0e20be0e6a21bf0e20be0e20bf0e6a21c00e20bf0e20c00e6a21c10e20c00e20c10e6a21" + "c20e20c10e20c20e6a21" + "c30e20c20e20c30e6a21c40e20c30e20c40e6a21c50e20c40e20c50e6a21c60e20c50e20c60e6a21c70e20c60e20c7" + "0e6a21c80e20c70e20c8" + "0e6a21c90e20c80e20c90e6a21ca0e20c90e20ca0e6a21cb0e20ca0e20cb0e6a21cc0e20cb0e20cc0e6a21cd0e20cc" + "0e20cd0e6a21ce0e20cd" + "0e20ce0e6a21cf0e20ce0e20cf0e6a21d00e20cf0e20d00e6a21d10e20d00e20d10e6a21d20e20d10e20d20e6a21d3" + "0e20d20e20d30e6a21d4" + "0e20d30e20d40e6a21d50e20d40e20d50e6a21d60e20d50e20d60e6a21d70e20d60e20d70e6a21d80e20d70e20d80e" + "6a21d90e20d80e20d90e" + "6a21da0e20d90e20da0e6a21db0e20da0e20db0e6a21dc0e20db0e20dc0e6a21dd0e20dc0e20dd0e6a21de0e20dd0e" + "20de0e6a21df0e20de0e" + "20df0e6a21e00e20df0e20e00e6a21e10e20e00e20e10e6a21e20e20e10e20e20e6a21e30e20e20e20e30e6a21e40e" + "20e30e20e40e6a21e50e" + "20e40e20e50e6a21e60e20e50e20e60e6a21e70e20e60e20e70e6a21e80e20e70e20e80e6a21e90e20e80e20e90e6a" + "21ea0e20e90e20ea0e6a" + "21eb0e20ea0e20eb0e6a21ec0e20eb0e20ec0e6a21ed0e20ec0e20ed0e6a21ee0e20ed0e20ee0e6a21ef0e20ee0e20" + "ef0e6a21f00e20ef0e20" + "f00e6a21f10e20f00e20f10e6a21f20e20f10e20f20e6a21f30e20f20e20f30e6a21f40e20f30e20f40e6a21f50e20" + "f40e20f50e6a21f60e20" + "f50e20f60e6a21f70e20f60e20f70e6a21f80e20f70e20f80e6a21f90e20f80e20f90e6a21fa0e20f90e20fa0e6a21" + "fb0e20fa0e20fb0e6a21" + "fc0e20fb0e20fc0e6a21fd0e20fc0e20fd0e6a21fe0e20fd0e20fe0e6a21ff0e20fe0e20ff0e6a21800f20ff0e2080" + "0f6a21810f20800f2081" + "0f6a21820f20810f20820f6a21830f20820f20830f6a21840f20830f20840f6a21850f20840f20850f6a21860f2085" + "0f20860f6a21870f2086" + "0f20870f6a21880f20870f20880f6a21890f20880f20890f6a218a0f20890f208a0f6a218b0f208a0f208b0f6a218c" + "0f208b0f208c0f6a218d" + "0f208c0f208d0f6a218e0f208d0f208e0f6a218f0f208e0f208f0f6a21900f208f0f20900f6a21910f20900f20910f" + "6a21920f20910f20920f" + "6a21930f20920f20930f6a21940f20930f20940f6a21950f20940f20950f6a21960f20950f20960f6a21970f20960f" + "20970f6a21980f20970f" + "20980f6a21990f20980f20990f6a219a0f20990f209a0f6a219b0f209a0f209b0f6a219c0f209b0f209c0f6a219d0f" + "209c0f209d0f6a219e0f" + "209d0f209e0f6a219f0f209e0f209f0f6a21a00f209f0f20a00f6a21a10f20a00f20a10f6a21a20f20a10f20a20f6a" + "21a30f20a20f20a30f6a" + "21a40f20a30f20a40f6a21a50f20a40f20a50f6a21a60f20a50f20a60f6a21a70f20a60f20a70f6a21a80f20a70f20" + "a80f6a21a90f20a80f20" + "a90f6a21aa0f20a90f20aa0f6a21ab0f20aa0f20ab0f6a21ac0f20ab0f20ac0f6a21ad0f20ac0f20ad0f6a21ae0f20" + "ad0f20ae0f6a21af0f20" + "ae0f20af0f6a21b00f20af0f20b00f6a21b10f20b00f20b10f6a21b20f20b10f20b20f6a21b30f20b20f20b30f6a21" + "b40f20b30f20b40f6a21" + "b50f20b40f20b50f6a21b60f20b50f20b60f6a21b70f20b60f20b70f6a21b80f20b70f20b80f6a21b90f20b80f20b9" + "0f6a21ba0f20b90f20ba" + "0f6a21bb0f20ba0f20bb0f6a21bc0f20bb0f20bc0f6a21bd0f20bc0f20bd0f6a21be0f20bd0f20be0f6a21bf0f20be" + "0f20bf0f6a21c00f20bf" + "0f20c00f6a21c10f20c00f20c10f6a21c20f20c10f20c20f6a21c30f20c20f20c30f6a21c40f20c30f20c40f6a21c5" + "0f20c40f20c50f6a21c6" + "0f20c50f20c60f6a21c70f20c60f20c70f6a21c80f20c70f20c80f6a21c90f20c80f20c90f6a21ca0f20c90f20ca0f" + "6a21cb0f20ca0f20cb0f" + "6a21cc0f20cb0f20cc0f6a21cd0f20cc0f20cd0f6a21ce0f20cd0f20ce0f6a21cf0f20ce0f20cf0f6a21d00f20cf0f" + "20d00f6a21d10f20d00f" + "20d10f6a21d20f20d10f20d20f6a21d30f20d20f20d30f6a21d40f20d30f20d40f6a21d50f20d40f20d50f6a21d60f" + "20d50f20d60f6a21d70f" + "20d60f20d70f6a21d80f20d70f20d80f6a21d90f20d80f20d90f6a21da0f20d90f20da0f6a21db0f20da0f20db0f6a" + "21dc0f20db0f20dc0f6a" + "21dd0f20dc0f20dd0f6a21de0f20dd0f20de0f6a21df0f20de0f20df0f6a21e00f20df0f20e00f6a21e10f20e00f20" + "e10f6a21e20f20e10f20" + "e20f6a21e30f20e20f20e30f6a21e40f20e30f20e40f6a21e50f20e40f20e50f6a21e60f20e50f20e60f6a21e70f20" + "e60f20e70f6a21e80f20" + "e70f20e80f6a21e90f20e80f20e90f6a21ea0f20e90f20ea0f6a21eb0f20ea0f20eb0f6a21ec0f20eb0f20ec0f6a21" + "ed0f20ec0f20ed0f6a21" + "ee0f20ed0f20ee0f6a21ef0f20ee0f20ef0f6a21f00f20ef0f20f00f6a21f10f20f00f20f10f6a21f20f20f10f20f2" + "0f6a21f30f20f20f20f3" + "0f6a21f40f20f30f20f40f6a21f50f20f40f20f50f6a21f60f20f50f20f60f6a21f70f20f60f20f70f6a21f80f20f7" + "0f20f80f6a21f90f20f8" + "0f20f90f6a21fa0f20f90f20fa0f6a21fb0f20fa0f20fb0f6a21fc0f20fb0f20fc0f6a21fd0f20fc0f20fd0f6a21fe" + "0f20fd0f20fe0f6a21ff" + "0f20fe0f20ff0f6a21801020ff0f2080106a2181102080102081106a2182102081102082106a218310208210208310" + "6a218410208310208410" + "6a2185102084102085106a2186102085102086106a2187102086102087106a2188102087102088106a218910208810" + "2089106a218a10208910" + "208a106a218b10208a10208b106a218c10208b10208c106a218d10208c10208d106a218e10208d10208e106a218f10" + "208e10208f106a219010" + "208f102090106a2191102090102091106a2192102091102092106a2193102092102093106a2194102093102094106a" + "2195102094102095106a" + "2196102095102096106a2197102096102097106a2198102097102098106a2199102098102099106a219a1020991020" + "9a106a219b10209a1020" + "9b106a219c10209b10209c106a219d10209c10209d106a219e10209d10209e106a219f10209e10209f106a21a01020" + "9f1020a0106a21a11020" + "a01020a1106a21a21020a11020a2106a21a31020a21020a3106a21a41020a31020a4106a21a51020a41020a5106a21" + "a61020a51020a6106a21" + "a71020a61020a7106a21a81020a71020a8106a21a91020a81020a9106a21aa1020a91020aa106a21ab1020aa1020ab" + "106a21ac1020ab1020ac" + "106a21ad1020ac1020ad106a21ae1020ad1020ae106a21af1020ae1020af106a21b01020af1020b0106a21b11020b0" + "1020b1106a21b21020b1" + "1020b2106a21b31020b21020b3106a21b41020b31020b4106a21b51020b41020b5106a21b61020b51020b6106a21b7" + "1020b61020b7106a21b8" + "1020b71020b8106a21b91020b81020b9106a21ba1020b91020ba106a21bb1020ba1020bb106a21bc1020bb1020bc10" + "6a21bd1020bc1020bd10" + "6a21be1020bd1020be106a21bf1020be1020bf106a21c01020bf1020c0106a21c11020c01020c1106a21c21020c110" + "20c2106a21c31020c210" + "20c3106a21c41020c31020c4106a21c51020c41020c5106a21c61020c51020c6106a21c71020c61020c7106a21c810" + "20c71020c8106a21c910" + "20c81020c9106a21ca1020c91020ca106a21cb1020ca1020cb106a21cc1020cb1020cc106a21cd1020cc1020cd106a" + "21ce1020cd1020ce106a" + "21cf1020ce1020cf106a21d01020cf1020d0106a21d11020d01020d1106a21d21020d11020d2106a21d31020d21020" + "d3106a21d41020d31020" + "d4106a21d51020d41020d5106a21d61020d51020d6106a21d71020d61020d7106a21d81020d71020d8106a21d91020" + "d81020d9106a21da1020" + "d91020da106a21db1020da1020db106a21dc1020db1020dc106a21dd1020dc1020dd106a21de1020dd1020de106a21" + "df1020de1020df106a21" + "e01020df1020e0106a21e11020e01020e1106a21e21020e11020e2106a21e31020e21020e3106a21e41020e31020e4" + "106a21e51020e41020e5" + "106a21e61020e51020e6106a21e71020e61020e7106a21e81020e71020e8106a21e91020e81020e9106a21ea1020e9" + "1020ea106a21eb1020ea" + "1020eb106a21ec1020eb1020ec106a21ed1020ec1020ed106a21ee1020ed1020ee106a21ef1020ee1020ef106a21f0" + "1020ef1020f0106a21f1" + "1020f01020f1106a21f21020f11020f2106a21f31020f21020f3106a21f41020f31020f4106a21f51020f41020f510" + "6a21f61020f51020f610" + "6a21f71020f61020f7106a21f81020f71020f8106a21f91020f81020f9106a21fa1020f91020fa106a21fb1020fa10" + "20fb106a21fc1020fb10" + "20fc106a21fd1020fc1020fd106a21fe1020fd1020fe106a21ff1020fe1020ff106a21801120ff102080116a218111" + "2080112081116a218211" + "2081112082116a2183112082112083116a2184112083112084116a2185112084112085116a2186112085112086116a" + "2187112086112087116a" + "2188112087112088116a2189112088112089116a218a11208911208a116a218b11208a11208b116a218c11208b1120" + "8c116a218d11208c1120" + "8d116a218e11208d11208e116a218f11208e11208f116a219011208f112090116a2191112090112091116a21921120" + "91112092116a21931120" + "92112093116a2194112093112094116a2195112094112095116a2196112095112096116a2197112096112097116a21" + "98112097112098116a21" + "99112098112099116a219a11209911209a116a219b11209a11209b116a219c11209b11209c116a219d11209c11209d" + "116a219e11209d11209e" + "116a219f11209e11209f116a21a011209f1120a0116a21a11120a01120a1116a21a21120a11120a2116a21a31120a2" + "1120a3116a21a41120a3" + "1120a4116a21a51120a41120a5116a21a61120a51120a6116a21a71120a61120a7116a21a81120a71120a8116a21a9" + "1120a81120a9116a21aa" + "1120a91120aa116a21ab1120aa1120ab116a21ac1120ab1120ac116a21ad1120ac1120ad116a21ae1120ad1120ae11" + "6a21af1120ae1120af11" + "6a21b01120af1120b0116a21b11120b01120b1116a21b21120b11120b2116a21b31120b21120b3116a21b41120b311" + "20b4116a21b51120b411" + "20b5116a21b61120b51120b6116a21b71120b61120b7116a21b81120b71120b8116a21b91120b81120b9116a21ba11" + "20b91120ba116a21bb11" + "20ba1120bb116a21bc1120bb1120bc116a21bd1120bc1120bd116a21be1120bd1120be116a21bf1120be1120bf116a" + "21c01120bf1120c0116a" + "21c11120c01120c1116a21c21120c11120c2116a21c31120c21120c3116a21c41120c31120c4116a21c51120c41120" + "c5116a21c61120c51120" + "c6116a21c71120c61120c7116a21c81120c71120c8116a21c91120c81120c9116a21ca1120c91120ca116a21cb1120" + "ca1120cb116a21cc1120" + "cb1120cc116a21cd1120cc1120cd116a21ce1120cd1120ce116a21cf1120ce1120cf116a21d01120cf1120d0116a21" + "d11120d01120d1116a21" + "d21120d11120d2116a21d31120d21120d3116a21d41120d31120d4116a21d51120d41120d5116a21d61120d51120d6" + "116a21d71120d61120d7" + "116a21d81120d71120d8116a21d91120d81120d9116a21da1120d91120da116a21db1120da1120db116a21dc1120db" + "1120dc116a21dd1120dc" + "1120dd116a21de1120dd1120de116a21df1120de1120df116a21e01120df1120e0116a21e11120e01120e1116a21e2" + "1120e11120e2116a21e3" + "1120e21120e3116a21e41120e31120e4116a21e51120e41120e5116a21e61120e51120e6116a21e71120e61120e711" + "6a21e81120e71120e811" + "6a21e91120e81120e9116a21ea1120e91120ea116a21eb1120ea1120eb116a21ec1120eb1120ec116a21ed1120ec11" + "20ed116a21ee1120ed11" + "20ee116a21ef1120ee1120ef116a21f01120ef1120f0116a21f11120f01120f1116a21f21120f11120f2116a21f311" + "20f21120f3116a21f411" + "20f31120f4116a21f51120f41120f5116a21f61120f51120f6116a21f71120f61120f7116a21f81120f71120f8116a" + "21f91120f81120f9116a" + "21fa1120f91120fa116a21fb1120fa1120fb116a21fc1120fb1120fc116a21fd1120fc1120fd116a21fe1120fd1120" + "fe116a21ff1120fe1120" + "ff116a21801220ff112080126a2181122080122081126a2182122081122082126a2183122082122083126a21841220" + "83122084126a21851220" + "84122085126a2186122085122086126a2187122086122087126a2188122087122088126a2189122088122089126a21" + "8a12208912208a126a21" + "8b12208a12208b126a218c12208b12208c126a218d12208c12208d126a218e12208d12208e126a218f12208e12208f" + "126a219012208f122090" + "126a2191122090122091126a2192122091122092126a2193122092122093126a2194122093122094126a2195122094" + "122095126a2196122095" + "122096126a2197122096122097126a2198122097122098126a2199122098122099126a219a12209912209a126a219b" + "12209a12209b126a219c" + "12209b12209c126a219d12209c12209d126a219e12209d12209e126a219f12209e12209f126a21a012209f1220a012" + "6a21a11220a01220a112" + "6a21a21220a11220a2126a21a31220a21220a3126a21a41220a31220a4126a21a51220a41220a5126a21a61220a512" + "20a6126a21a71220a612" + "20a7126a21a81220a71220a8126a21a91220a81220a9126a21aa1220a91220aa126a21ab1220aa1220ab126a21ac12" + "20ab1220ac126a21ad12" + "20ac1220ad126a21ae1220ad1220ae126a21af1220ae1220af126a21b01220af1220b0126a21b11220b01220b1126a" + "21b21220b11220b2126a" + "21b31220b21220b3126a21b41220b31220b4126a21b51220b41220b5126a21b61220b51220b6126a21b71220b61220" + "b7126a21b81220b71220" + "b8126a21b91220b81220b9126a21ba1220b91220ba126a21bb1220ba1220bb126a21bc1220bb1220bc126a21bd1220" + "bc1220bd126a21be1220" + "bd1220be126a21bf1220be1220bf126a21c01220bf1220c0126a21c11220c01220c1126a21c21220c11220c2126a21" + "c31220c21220c3126a21" + "c41220c31220c4126a21c51220c41220c5126a21c61220c51220c6126a21c71220c61220c7126a21c81220c71220c8" + "126a21c91220c81220c9" + "126a21ca1220c91220ca126a21cb1220ca1220cb126a21cc1220cb1220cc126a21cd1220cc1220cd126a21ce1220cd" + "1220ce126a21cf1220ce" + "1220cf126a21d01220cf1220d0126a21d11220d01220d1126a21d21220d11220d2126a21d31220d21220d3126a21d4" + "1220d31220d4126a21d5" + "1220d41220d5126a21d61220d51220d6126a21d71220d61220d7126a21d81220d71220d8126a21d91220d81220d912" + "6a21da1220d91220da12" + "6a21db1220da1220db126a21dc1220db1220dc126a21dd1220dc1220dd126a21de1220dd1220de126a21df1220de12" + "20df126a21e01220df12" + "20e0126a21e11220e01220e1126a21e21220e11220e2126a21e31220e21220e3126a21e41220e31220e4126a21e512" + "20e41220e5126a21e612" + "20e51220e6126a21e71220e61220e7126a21e81220e71220e8126a21e91220e81220e9126a21ea1220e91220ea126a" + "21eb1220ea1220eb126a" + "21ec1220eb1220ec126a21ed1220ec1220ed126a21ee1220ed1220ee126a21ef1220ee1220ef126a21f01220ef1220" + "f0126a21f11220f01220" + "f1126a21f21220f11220f2126a21f31220f21220f3126a21f41220f31220f4126a21f51220f41220f5126a21f61220" + "f51220f6126a21f71220" + "f61220f7126a21f81220f71220f8126a21f91220f81220f9126a21fa1220f91220fa126a21fb1220fa1220fb126a21" + "fc1220fb1220fc126a21" + "fd1220fc1220fd126a21fe1220fd1220fe126a21ff1220fe1220ff126a21801320ff122080136a2181132080132081" + "136a2182132081132082" + "136a2183132082132083136a2184132083132084136a2185132084132085136a2186132085132086136a2187132086" + "132087136a2188132087" + "132088136a2189132088132089136a218a13208913208a136a218b13208a13208b136a218c13208b13208c136a218d" + "13208c13208d136a218e" + "13208d13208e136a218f13208e13208f136a219013208f132090136a2191132090132091136a219213209113209213" + "6a219313209213209313" + "6a2194132093132094136a2195132094132095136a2196132095132096136a2197132096132097136a219813209713" + "2098136a219913209813" + "2099136a219a13209913209a136a219b13209a13209b136a219c13209b13209c136a219d13209c13209d136a219e13" + "209d13209e136a219f13" + "209e13209f136a21a013209f1320a0136a21a11320a01320a1136a21a21320a11320a2136a21a31320a21320a3136a" + "21a41320a31320a4136a" + "21a51320a41320a5136a21a61320a51320a6136a21a71320a61320a7136a21a81320a71320a8136a21a91320a81320" + "a9136a21aa1320a91320" + "aa136a21ab1320aa1320ab136a21ac1320ab1320ac136a21ad1320ac1320ad136a21ae1320ad1320ae136a21af1320" + "ae1320af136a21b01320" + "af1320b0136a21b11320b01320b1136a21b21320b11320b2136a21b31320b21320b3136a21b41320b31320b4136a21" + "b51320b41320b5136a21" + "b61320b51320b6136a21b71320b61320b7136a21b81320b71320b8136a21b91320b81320b9136a21ba1320b91320ba" + "136a21bb1320ba1320bb" + "136a21bc1320bb1320bc136a21bd1320bc1320bd136a21be1320bd1320be136a21bf1320be1320bf136a21c01320bf" + "1320c0136a21c11320c0" + "1320c1136a21c21320c11320c2136a21c31320c21320c3136a21c41320c31320c4136a21c51320c41320c5136a21c6" + "1320c51320c6136a21c7" + "1320c61320c7136a21c81320c71320c8136a21c91320c81320c9136a21ca1320c91320ca136a21cb1320ca1320cb13" + "6a21cc1320cb1320cc13" + "6a21cd1320cc1320cd136a21ce1320cd1320ce136a21cf1320ce1320cf136a21d01320cf1320d0136a21d11320d013" + "20d1136a21d21320d113" + "20d2136a21d31320d21320d3136a21d41320d31320d4136a21d51320d41320d5136a21d61320d51320d6136a21d713" + "20d61320d7136a21d813" + "20d71320d8136a21d91320d81320d9136a21da1320d91320da136a21db1320da1320db136a21dc1320db1320dc136a" + "21dd1320dc1320dd136a" + "21de1320dd1320de136a21df1320de1320df136a21e01320df1320e0136a21e11320e01320e1136a21e21320e11320" + "e2136a21e31320e21320" + "e3136a21e41320e31320e4136a21e51320e41320e5136a21e61320e51320e6136a21e71320e61320e7136a21e81320" + "e71320e8136a21e91320" + "e81320e9136a21ea1320e91320ea136a21eb1320ea1320eb136a21ec1320eb1320ec136a21ed1320ec1320ed136a21" + "ee1320ed1320ee136a21" + "ef1320ee1320ef136a21f01320ef1320f0136a21f11320f01320f1136a21f21320f11320f2136a21f31320f21320f3" + "136a21f41320f31320f4" + "136a21f51320f41320f5136a21f61320f51320f6136a21f71320f61320f7136a21f81320f71320f8136a21f91320f8" + "1320f9136a21fa1320f9" + "1320fa136a21fb1320fa1320fb136a21fc1320fb1320fc136a21fd1320fc1320fd136a21fe1320fd1320fe136a21ff" + "1320fe1320ff136a2180" + "1420ff132080146a2181142080142081146a2182142081142082146a2183142082142083146a218414208314208414" + "6a218514208414208514" + "6a2186142085142086146a2187142086142087146a2188142087142088146a2189142088142089146a218a14208914" + "208a146a218b14208a14" + "208b146a218c14208b14208c146a218d14208c14208d146a218e14208d14208e146a218f14208e14208f146a219014" + "208f142090146a219114" + "2090142091146a2192142091142092146a2193142092142093146a2194142093142094146a2195142094142095146a" + "2196142095142096146a" + "2197142096142097146a2198142097142098146a2199142098142099146a219a14209914209a146a219b14209a1420" + "9b146a219c14209b1420" + "9c146a219d14209c14209d146a219e14209d14209e146a219f14209e14209f146a21a014209f1420a0146a21a11420" + "a01420a1146a21a21420" + "a11420a2146a21a31420a21420a3146a21a41420a31420a4146a21a51420a41420a5146a21a61420a51420a6146a21" + "a71420a61420a7146a21" + "a81420a71420a8146a21a91420a81420a9146a21aa1420a91420aa146a21ab1420aa1420ab146a21ac1420ab1420ac" + "146a21ad1420ac1420ad" + "146a21ae1420ad1420ae146a21af1420ae1420af146a21b01420af1420b0146a21b11420b01420b1146a21b21420b1" + "1420b2146a21b31420b2" + "1420b3146a21b41420b31420b4146a21b51420b41420b5146a21b61420b51420b6146a21b71420b61420b7146a21b8" + "1420b71420b8146a21b9" + "1420b81420b9146a21ba1420b91420ba146a21bb1420ba1420bb146a21bc1420bb1420bc146a21bd1420bc1420bd14" + "6a21be1420bd1420be14" + "6a21bf1420be1420bf146a21c01420bf1420c0146a21c11420c01420c1146a21c21420c11420c2146a21c31420c214" + "20c3146a21c41420c314" + "20c4146a21c51420c41420c5146a21c61420c51420c6146a21c71420c61420c7146a21c81420c71420c8146a21c914" + "20c81420c9146a21ca14" + "20c91420ca146a21cb1420ca1420cb146a21cc1420cb1420cc146a21cd1420cc1420cd146a21ce1420cd1420ce146a" + "21cf1420ce1420cf146a" + "21d01420cf1420d0146a21d11420d01420d1146a21d21420d11420d2146a21d31420d21420d3146a21d41420d31420" + "d4146a21d51420d41420" + "d5146a21d61420d51420d6146a21d71420d61420d7146a21d81420d71420d8146a21d91420d81420d9146a21da1420" + "d91420da146a21db1420" + "da1420db146a21dc1420db1420dc146a21dd1420dc1420dd146a21de1420dd1420de146a21df1420de1420df146a21" + "e01420df1420e0146a21" + "e11420e01420e1146a21e21420e11420e2146a21e31420e21420e3146a21e41420e31420e4146a21e51420e41420e5" + "146a21e61420e51420e6" + "146a21e71420e61420e7146a21e81420e71420e8146a21e91420e81420e9146a21ea1420e91420ea146a21eb1420ea" + "1420eb146a21ec1420eb" + "1420ec146a21ed1420ec1420ed146a21ee1420ed1420ee146a21ef1420ee1420ef146a21f01420ef1420f0146a21f1" + "1420f01420f1146a21f2" + "1420f11420f2146a21f31420f21420f3146a21f41420f31420f4146a21f51420f41420f5146a21f61420f51420f614" + "6a21f71420f61420f714" + "6a21f81420f71420f8146a21f91420f81420f9146a21fa1420f91420fa146a21fb1420fa1420fb146a21fc1420fb14" + "20fc146a21fd1420fc14" + "20fd146a21fe1420fd1420fe146a21ff1420fe1420ff146a21801520ff142080156a2181152080152081156a218215" + "2081152082156a218315" + "2082152083156a2184152083152084156a2185152084152085156a2186152085152086156a2187152086152087156a" + "2188152087152088156a" + "2189152088152089156a218a15208915208a156a218b15208a15208b156a218c15208b15208c156a218d15208c1520" + "8d156a218e15208d1520" + "8e156a218f15208e15208f156a219015208f152090156a2191152090152091156a2192152091152092156a21931520" + "92152093156a21941520" + "93152094156a2195152094152095156a2196152095152096156a2197152096152097156a2198152097152098156a21" + "99152098152099156a21" + "9a15209915209a156a219b15209a15209b156a219c15209b15209c156a219d15209c15209d156a219e15209d15209e" + "156a219f15209e15209f" + "156a21a015209f1520a0156a21a11520a01520a1156a21a21520a11520a2156a21a31520a21520a3156a21a41520a3" + "1520a4156a21a51520a4" + "1520a5156a21a61520a51520a6156a21a71520a61520a7156a21a81520a71520a8156a21a91520a81520a9156a21aa" + "1520a91520aa156a21ab" + "1520aa1520ab156a21ac1520ab1520ac156a21ad1520ac1520ad156a21ae1520ad1520ae156a21af1520ae1520af15" + "6a21b01520af1520b015" + "6a21b11520b01520b1156a21b21520b11520b2156a21b31520b21520b3156a21b41520b31520b4156a21b51520b415" + "20b5156a21b61520b515" + "20b6156a21b71520b61520b7156a21b81520b71520b8156a21b91520b81520b9156a21ba1520b91520ba156a21bb15" + "20ba1520bb156a21bc15" + "20bb1520bc156a21bd1520bc1520bd156a21be1520bd1520be156a21bf1520be1520bf156a21c01520bf1520c0156a" + "21c11520c01520c1156a" + "21c21520c11520c2156a21c31520c21520c3156a21c41520c31520c4156a21c51520c41520c5156a21c61520c51520" + "c6156a21c71520c61520" + "c7156a21c81520c71520c8156a21c91520c81520c9156a21ca1520c91520ca156a21cb1520ca1520cb156a21cc1520" + "cb1520cc156a21cd1520" + "cc1520cd156a21ce1520cd1520ce156a21cf1520ce1520cf156a21d01520cf1520d0156a21d11520d01520d1156a21" + "d21520d11520d2156a21" + "d31520d21520d3156a21d41520d31520d4156a21d51520d41520d5156a21d61520d51520d6156a21d71520d61520d7" + "156a21d81520d71520d8" + "156a21d91520d81520d9156a21da1520d91520da156a21db1520da1520db156a21dc1520db1520dc156a21dd1520dc" + "1520dd156a21de1520dd" + "1520de156a21df1520de1520df156a21e01520df1520e0156a21e11520e01520e1156a21e21520e11520e2156a21e3" + "1520e21520e3156a21e4" + "1520e31520e4156a21e51520e41520e5156a21e61520e51520e6156a21e71520e61520e7156a21e81520e71520e815" + "6a21e91520e81520e915" + "6a21ea1520e91520ea156a21eb1520ea1520eb156a21ec1520eb1520ec156a21ed1520ec1520ed156a21ee1520ed15" + "20ee156a21ef1520ee15" + "20ef156a21f01520ef1520f0156a21f11520f01520f1156a21f21520f11520f2156a21f31520f21520f3156a21f415" + "20f31520f4156a21f515" + "20f41520f5156a21f61520f51520f6156a21f71520f61520f7156a21f81520f71520f8156a21f91520f81520f9156a" + "21fa1520f91520fa156a" + "21fb1520fa1520fb156a21fc1520fb1520fc156a21fd1520fc1520fd156a21fe1520fd1520fe156a21ff1520fe1520" + "ff156a21801620ff1520" + "80166a2181162080162081166a2182162081162082166a2183162082162083166a2184162083162084166a21851620" + "84162085166a21861620" + "85162086166a2187162086162087166a2188162087162088166a2189162088162089166a218a16208916208a166a21" + "8b16208a16208b166a21" + "8c16208b16208c166a218d16208c16208d166a218e16208d16208e166a218f16208e16208f166a219016208f162090" + "166a2191162090162091" + "166a2192162091162092166a2193162092162093166a2194162093162094166a2195162094162095166a2196162095" + "162096166a2197162096" + "162097166a2198162097162098166a2199162098162099166a219a16209916209a166a219b16209a16209b166a219c" + "16209b16209c166a219d" + "16209c16209d166a219e16209d16209e166a219f16209e16209f166a21a016209f1620a0166a21a11620a01620a116" + "6a21a21620a11620a216" + "6a21a31620a21620a3166a21a41620a31620a4166a21a51620a41620a5166a21a61620a51620a6166a21a71620a616" + "20a7166a21a81620a716" + "20a8166a21a91620a81620a9166a21aa1620a91620aa166a21ab1620aa1620ab166a21ac1620ab1620ac166a21ad16" + "20ac1620ad166a21ae16" + "20ad1620ae166a21af1620ae1620af166a21b01620af1620b0166a21b11620b01620b1166a21b21620b11620b2166a" + "21b31620b21620b3166a" + "21b41620b31620b4166a21b51620b41620b5166a21b61620b51620b6166a21b71620b61620b7166a21b81620b71620" + "b8166a21b91620b81620" + "b9166a21ba1620b91620ba166a21bb1620ba1620bb166a21bc1620bb1620bc166a21bd1620bc1620bd166a21be1620" + "bd1620be166a21bf1620" + "be1620bf166a21c01620bf1620c0166a21c11620c01620c1166a21c21620c11620c2166a21c31620c21620c3166a21" + "c41620c31620c4166a21" + "c51620c41620c5166a21c61620c51620c6166a21c71620c61620c7166a21c81620c71620c8166a21c91620c81620c9" + "166a21ca1620c91620ca" + "166a21cb1620ca1620cb166a21cc1620cb1620cc166a21cd1620cc1620cd166a21ce1620cd1620ce166a21cf1620ce" + "1620cf166a21d01620cf" + "1620d0166a21d11620d01620d1166a21d21620d11620d2166a21d31620d21620d3166a21d41620d31620d4166a21d5" + "1620d41620d5166a21d6" + "1620d51620d6166a21d71620d61620d7166a21d81620d71620d8166a21d91620d81620d9166a21da1620d91620da16" + "6a21db1620da1620db16" + "6a21dc1620db1620dc166a21dd1620dc1620dd166a21de1620dd1620de166a21df1620de1620df166a21e01620df16" + "20e0166a21e11620e016" + "20e1166a21e21620e11620e2166a21e31620e21620e3166a21e41620e31620e4166a21e51620e41620e5166a21e616" + "20e51620e6166a21e716" + "20e61620e7166a21e81620e71620e8166a21e91620e81620e9166a21ea1620e91620ea166a21eb1620ea1620eb166a" + "21ec1620eb1620ec166a" + "21ed1620ec1620ed166a21ee1620ed1620ee166a21ef1620ee1620ef166a21f01620ef1620f0166a21f11620f01620" + "f1166a21f21620f11620" + "f2166a21f31620f21620f3166a21f41620f31620f4166a21f51620f41620f5166a21f61620f51620f6166a21f71620" + "f61620f7166a21f81620" + "f71620f8166a21f91620f81620f9166a21fa1620f91620fa166a21fb1620fa1620fb166a21fc1620fb1620fc166a21" + "fd1620fc1620fd166a21" + "fe1620fd1620fe166a21ff1620fe1620ff166a21801720ff162080176a2181172080172081176a2182172081172082" + "176a2183172082172083" + "176a2184172083172084176a2185172084172085176a2186172085172086176a2187172086172087176a2188172087" + "172088176a2189172088" + "172089176a218a17208917208a176a218b17208a17208b176a218c17208b17208c176a218d17208c17208d176a218e" + "17208d17208e176a218f" + "17208e17208f176a219017208f172090176a2191172090172091176a2192172091172092176a219317209217209317" + "6a219417209317209417" + "6a2195172094172095176a2196172095172096176a2197172096172097176a2198172097172098176a219917209817" + "2099176a219a17209917" + "209a176a219b17209a17209b176a219c17209b17209c176a219d17209c17209d176a219e17209d17209e176a219f17" + "209e17209f176a21a017" + "209f1720a0176a21a11720a01720a1176a21a21720a11720a2176a21a31720a21720a3176a21a41720a31720a4176a" + "21a51720a41720a5176a" + "21a61720a51720a6176a21a71720a61720a7176a21a81720a71720a8176a21a91720a81720a9176a21aa1720a91720" + "aa176a21ab1720aa1720" + "ab176a21ac1720ab1720ac176a21ad1720ac1720ad176a21ae1720ad1720ae176a21af1720ae1720af176a21b01720" + "af1720b0176a21b11720" + "b01720b1176a21b21720b11720b2176a21b31720b21720b3176a21b41720b31720b4176a21b51720b41720b5176a21" + "b61720b51720b6176a21" + "b71720b61720b7176a21b81720b71720b8176a21b91720b81720b9176a21ba1720b91720ba176a21bb1720ba1720bb" + "176a21bc1720bb1720bc" + "176a21bd1720bc1720bd176a21be1720bd1720be176a21bf1720be1720bf176a21c01720bf1720c0176a21c11720c0" + "1720c1176a21c21720c1" + "1720c2176a21c31720c21720c3176a21c41720c31720c4176a21c51720c41720c5176a21c61720c51720c6176a21c7" + "1720c61720c7176a21c8" + "1720c71720c8176a21c91720c81720c9176a21ca1720c91720ca176a21cb1720ca1720cb176a21cc1720cb1720cc17" + "6a21cd1720cc1720cd17" + "6a21ce1720cd1720ce176a21cf1720ce1720cf176a21d01720cf1720d0176a21d11720d01720d1176a21d21720d117" + "20d2176a21d31720d217" + "20d3176a21d41720d31720d4176a21d51720d41720d5176a21d61720d51720d6176a21d71720d61720d7176a21d817" + "20d71720d8176a21d917" + "20d81720d9176a21da1720d91720da176a21db1720da1720db176a21dc1720db1720dc176a21dd1720dc1720dd176a" + "21de1720dd1720de176a" + "21df1720de1720df176a21e01720df1720e0176a21e11720e01720e1176a21e21720e11720e2176a21e31720e21720" + "e3176a21e41720e31720" + "e4176a21e51720e41720e5176a21e61720e51720e6176a21e71720e61720e7176a21e81720e71720e8176a21e91720" + "e81720e9176a21ea1720" + "e91720ea176a21eb1720ea1720eb176a21ec1720eb1720ec176a21ed1720ec1720ed176a21ee1720ed1720ee176a21" + "ef1720ee1720ef176a21" + "f01720ef1720f0176a21f11720f01720f1176a21f21720f11720f2176a21f31720f21720f3176a21f41720f31720f4" + "176a21f51720f41720f5" + "176a21f61720f51720f6176a21f71720f61720f7176a21f81720f71720f8176a21f91720f81720f9176a21fa1720f9" + "1720fa176a21fb1720fa" + "1720fb176a21fc1720fb1720fc176a21fd1720fc1720fd176a21fe1720fd1720fe176a21ff1720fe1720ff176a2180" + "1820ff172080186a2181" + "182080182081186a2182182081182082186a2183182082182083186a2184182083182084186a218518208418208518" + "6a218618208518208618" + "6a2187182086182087186a2188182087182088186a2189182088182089186a218a18208918208a186a218b18208a18" + "208b186a218c18208b18" + "208c186a218d18208c18208d186a218e18208d18208e186a218f18208e18208f186a219018208f182090186a219118" + "2090182091186a219218" + "2091182092186a2193182092182093186a2194182093182094186a2195182094182095186a2196182095182096186a" + "2197182096182097186a" + "2198182097182098186a2199182098182099186a219a18209918209a186a219b18209a18209b186a219c18209b1820" + "9c186a219d18209c1820" + "9d186a219e18209d18209e186a219f18209e18209f186a21a018209f1820a0186a21a11820a01820a1186a21a21820" + "a11820a2186a21a31820" + "a21820a3186a21a41820a31820a4186a21a51820a41820a5186a21a61820a51820a6186a21a71820a61820a7186a21" + "a81820a71820a8186a21" + "a91820a81820a9186a21aa1820a91820aa186a21ab1820aa1820ab186a21ac1820ab1820ac186a21ad1820ac1820ad" + "186a21ae1820ad1820ae" + "186a21af1820ae1820af186a21b01820af1820b0186a21b11820b01820b1186a21b21820b11820b2186a21b31820b2" + "1820b3186a21b41820b3" + "1820b4186a21b51820b41820b5186a21b61820b51820b6186a21b71820b61820b7186a21b81820b71820b8186a21b9" + "1820b81820b9186a21ba" + "1820b91820ba186a21bb1820ba1820bb186a21bc1820bb1820bc186a21bd1820bc1820bd186a21be1820bd1820be18" + "6a21bf1820be1820bf18" + "6a21c01820bf1820c0186a21c11820c01820c1186a21c21820c11820c2186a21c31820c21820c3186a21c41820c318" + "20c4186a21c51820c418" + "20c5186a21c61820c51820c6186a21c71820c61820c7186a21c81820c71820c8186a21c91820c81820c9186a21ca18" + "20c91820ca186a21cb18" + "20ca1820cb186a21cc1820cb1820cc186a21cd1820cc1820cd186a21ce1820cd1820ce186a21cf1820ce1820cf186a" + "21d01820cf1820d0186a" + "21d11820d01820d1186a21d21820d11820d2186a21d31820d21820d3186a21d41820d31820d4186a21d51820d41820" + "d5186a21d61820d51820" + "d6186a21d71820d61820d7186a21d81820d71820d8186a21d91820d81820d9186a21da1820d91820da186a21db1820" + "da1820db186a21dc1820" + "db1820dc186a21dd1820dc1820dd186a21de1820dd1820de186a21df1820de1820df186a21e01820df1820e0186a21" + "e11820e01820e1186a21" + "e21820e11820e2186a21e31820e21820e3186a21e41820e31820e4186a21e51820e41820e5186a21e61820e51820e6" + "186a21e71820e61820e7" + "186a21e81820e71820e8186a21e91820e81820e9186a21ea1820e91820ea186a21eb1820ea1820eb186a21ec1820eb" + "1820ec186a21ed1820ec" + "1820ed186a21ee1820ed1820ee186a21ef1820ee1820ef186a21f01820ef1820f0186a21f11820f01820f1186a21f2" + "1820f11820f2186a21f3" + "1820f21820f3186a21f41820f31820f4186a21f51820f41820f5186a21f61820f51820f6186a21f71820f61820f718" + "6a21f81820f71820f818" + "6a21f91820f81820f9186a21fa1820f91820fa186a21fb1820fa1820fb186a21fc1820fb1820fc186a21fd1820fc18" + "20fd186a21fe1820fd18" + "20fe186a21ff1820fe1820ff186a21801920ff182080196a2181192080192081196a2182192081192082196a218319" + "2082192083196a218419" + "2083192084196a2185192084192085196a2186192085192086196a2187192086192087196a2188192087192088196a" + "2189192088192089196a" + "218a19208919208a196a218b19208a19208b196a218c19208b19208c196a218d19208c19208d196a218e19208d1920" + "8e196a218f19208e1920" + "8f196a219019208f192090196a2191192090192091196a2192192091192092196a2193192092192093196a21941920" + "93192094196a21951920" + "94192095196a2196192095192096196a2197192096192097196a2198192097192098196a2199192098192099196a21" + "9a19209919209a196a21" + "9b19209a19209b196a219c19209b19209c196a219d19209c19209d196a219e19209d19209e196a219f19209e19209f" + "196a21a019209f1920a0" + "196a21a11920a01920a1196a21a21920a11920a2196a21a31920a21920a3196a21a41920a31920a4196a21a51920a4" + "1920a5196a21a61920a5" + "1920a6196a21a71920a61920a7196a21a81920a71920a8196a21a91920a81920a9196a21aa1920a91920aa196a21ab" + "1920aa1920ab196a21ac" + "1920ab1920ac196a21ad1920ac1920ad196a21ae1920ad1920ae196a21af1920ae1920af196a21b01920af1920b019" + "6a21b11920b01920b119" + "6a21b21920b11920b2196a21b31920b21920b3196a21b41920b31920b4196a21b51920b41920b5196a21b61920b519" + "20b6196a21b71920b619" + "20b7196a21b81920b71920b8196a21b91920b81920b9196a21ba1920b91920ba196a21bb1920ba1920bb196a21bc19" + "20bb1920bc196a21bd19" + "20bc1920bd196a21be1920bd1920be196a21bf1920be1920bf196a21c01920bf1920c0196a21c11920c01920c1196a" + "21c21920c11920c2196a" + "21c31920c21920c3196a21c41920c31920c4196a21c51920c41920c5196a21c61920c51920c6196a21c71920c61920" + "c7196a21c81920c71920" + "c8196a21c91920c81920c9196a21ca1920c91920ca196a21cb1920ca1920cb196a21cc1920cb1920cc196a21cd1920" + "cc1920cd196a21ce1920" + "cd1920ce196a21cf1920ce1920cf196a21d01920cf1920d0196a21d11920d01920d1196a21d21920d11920d2196a21" + "d31920d21920d3196a21" + "d41920d31920d4196a21d51920d41920d5196a21d61920d51920d6196a21d71920d61920d7196a21d81920d71920d8" + "196a21d91920d81920d9" + "196a21da1920d91920da196a21db1920da1920db196a21dc1920db1920dc196a21dd1920dc1920dd196a21de1920dd" + "1920de196a21df1920de" + "1920df196a21e01920df1920e0196a21e11920e01920e1196a21e21920e11920e2196a21e31920e21920e3196a21e4" + "1920e31920e4196a21e5" + "1920e41920e5196a21e61920e51920e6196a21e71920e61920e7196a21e81920e71920e8196a21e91920e81920e919" + "6a21ea1920e91920ea19" + "6a21eb1920ea1920eb196a21ec1920eb1920ec196a21ed1920ec1920ed196a21ee1920ed1920ee196a21ef1920ee19" + "20ef196a21f01920ef19" + "20f0196a21f11920f01920f1196a21f21920f11920f2196a21f31920f21920f3196a21f41920f31920f4196a21f519" + "20f41920f5196a21f619" + "20f51920f6196a21f71920f61920f7196a21f81920f71920f8196a21f91920f81920f9196a21fa1920f91920fa196a" + "21fb1920fa1920fb196a" + "21fc1920fb1920fc196a21fd1920fc1920fd196a21fe1920fd1920fe196a21ff1920fe1920ff196a21801a20ff1920" + "801a6a21811a20801a20" + "811a6a21821a20811a20821a6a21831a20821a20831a6a21841a20831a20841a6a21851a20841a20851a6a21861a20" + "851a20861a6a21871a20" + "861a20871a6a21881a20871a20881a6a21891a20881a20891a6a218a1a20891a208a1a6a218b1a208a1a208b1a6a21" + "8c1a208b1a208c1a6a21" + "8d1a208c1a208d1a6a218e1a208d1a208e1a6a218f1a208e1a208f1a6a21901a208f1a20901a6a21911a20901a2091" + "1a6a21921a20911a2092" + "1a6a21931a20921a20931a6a21941a20931a20941a6a21951a20941a20951a6a21961a20951a20961a6a21971a2096" + "1a20971a6a21981a2097" + "1a20981a6a21991a20981a20991a6a219a1a20991a209a1a6a219b1a209a1a209b1a6a219c1a209b1a209c1a6a219d" + "1a209c1a209d1a6a219e" + "1a209d1a209e1a6a219f1a209e1a209f1a6a21a01a209f1a20a01a6a21a11a20a01a20a11a6a21a21a20a11a20a21a" + "6a21a31a20a21a20a31a" + "6a21a41a20a31a20a41a6a21a51a20a41a20a51a6a21a61a20a51a20a61a6a21a71a20a61a20a71a6a21a81a20a71a" + "20a81a6a21a91a20a81a" + "20a91a6a21aa1a20a91a20aa1a6a21ab1a20aa1a20ab1a6a21ac1a20ab1a20ac1a6a21ad1a20ac1a20ad1a6a21ae1a" + "20ad1a20ae1a6a21af1a" + "20ae1a20af1a6a21b01a20af1a20b01a6a21b11a20b01a20b11a6a21b21a20b11a20b21a6a21b31a20b21a20b31a6a" + "21b41a20b31a20b41a6a" + "21b51a20b41a20b51a6a21b61a20b51a20b61a6a21b71a20b61a20b71a6a21b81a20b71a20b81a6a21b91a20b81a20" + "b91a6a21ba1a20b91a20" + "ba1a6a21bb1a20ba1a20bb1a6a21bc1a20bb1a20bc1a6a21bd1a20bc1a20bd1a6a21be1a20bd1a20be1a6a21bf1a20" + "be1a20bf1a6a21c01a20" + "bf1a20c01a6a21c11a20c01a20c11a6a21c21a20c11a20c21a6a21c31a20c21a20c31a6a21c41a20c31a20c41a6a21" + "c51a20c41a20c51a6a21" + "c61a20c51a20c61a6a21c71a20c61a20c71a6a21c81a20c71a20c81a6a21c91a20c81a20c91a6a21ca1a20c91a20ca" + "1a6a21cb1a20ca1a20cb" + "1a6a21cc1a20cb1a20cc1a6a21cd1a20cc1a20cd1a6a21ce1a20cd1a20ce1a6a21cf1a20ce1a20cf1a6a21d01a20cf" + "1a20d01a6a21d11a20d0" + "1a20d11a6a21d21a20d11a20d21a6a21d31a20d21a20d31a6a21d41a20d31a20d41a6a21d51a20d41a20d51a6a21d6" + "1a20d51a20d61a6a21d7" + "1a20d61a20d71a6a21d81a20d71a20d81a6a21d91a20d81a20d91a6a21da1a20d91a20da1a6a21db1a20da1a20db1a" + "6a21dc1a20db1a20dc1a" + "6a21dd1a20dc1a20dd1a6a21de1a20dd1a20de1a6a21df1a20de1a20df1a6a21e01a20df1a20e01a6a21e11a20e01a" + "20e11a6a21e21a20e11a" + "20e21a6a21e31a20e21a20e31a6a21e41a20e31a20e41a6a21e51a20e41a20e51a6a21e61a20e51a20e61a6a21e71a" + "20e61a20e71a6a21e81a" + "20e71a20e81a6a21e91a20e81a20e91a6a21ea1a20e91a20ea1a6a21eb1a20ea1a20eb1a6a21ec1a20eb1a20ec1a6a" + "21ed1a20ec1a20ed1a6a" + "21ee1a20ed1a20ee1a6a21ef1a20ee1a20ef1a6a21f01a20ef1a20f01a6a21f11a20f01a20f11a6a21f21a20f11a20" + "f21a6a21f31a20f21a20" + "f31a6a21f41a20f31a20f41a6a21f51a20f41a20f51a6a21f61a20f51a20f61a6a21f71a20f61a20f71a6a21f81a20" + "f71a20f81a6a21f91a20" + "f81a20f91a6a21fa1a20f91a20fa1a6a21fb1a20fa1a20fb1a6a21fc1a20fb1a20fc1a6a21fd1a20fc1a20fd1a6a21" + "fe1a20fd1a20fe1a6a21" + "ff1a20fe1a20ff1a6a21801b20ff1a20801b6a21811b20801b20811b6a21821b20811b20821b6a21831b20821b2083" + "1b6a21841b20831b2084" + "1b6a21851b20841b20851b6a21861b20851b20861b6a21871b20861b20871b6a21881b20871b20881b6a21891b2088" + "1b20891b6a218a1b2089" + "1b208a1b6a218b1b208a1b208b1b6a218c1b208b1b208c1b6a218d1b208c1b208d1b6a218e1b208d1b208e1b6a218f" + "1b208e1b208f1b6a2190" + "1b208f1b20901b6a21911b20901b20911b6a21921b20911b20921b6a21931b20921b20931b6a21941b20931b20941b" + "6a21951b20941b20951b" + "6a21961b20951b20961b6a21971b20961b20971b6a21981b20971b20981b6a21991b20981b20991b6a219a1b20991b" + "209a1b6a219b1b209a1b" + "209b1b6a219c1b209b1b209c1b6a219d1b209c1b209d1b6a219e1b209d1b209e1b6a219f1b209e1b209f1b6a21a01b" + "209f1b20a01b6a21a11b" + "20a01b20a11b6a21a21b20a11b20a21b6a21a31b20a21b20a31b6a21a41b20a31b20a41b6a21a51b20a41b20a51b6a" + "21a61b20a51b20a61b6a" + "21a71b20a61b20a71b6a21a81b20a71b20a81b6a21a91b20a81b20a91b6a21aa1b20a91b20aa1b6a21ab1b20aa1b20" + "ab1b6a21ac1b20ab1b20" + "ac1b6a21ad1b20ac1b20ad1b6a21ae1b20ad1b20ae1b6a21af1b20ae1b20af1b6a21b01b20af1b20b01b6a21b11b20" + "b01b20b11b6a21b21b20" + "b11b20b21b6a21b31b20b21b20b31b6a21b41b20b31b20b41b6a21b51b20b41b20b51b6a21b61b20b51b20b61b6a21" + "b71b20b61b20b71b6a21" + "b81b20b71b20b81b6a21b91b20b81b20b91b6a21ba1b20b91b20ba1b6a21bb1b20ba1b20bb1b6a21bc1b20bb1b20bc" + "1b6a21bd1b20bc1b20bd" + "1b6a21be1b20bd1b20be1b6a21bf1b20be1b20bf1b6a21c01b20bf1b20c01b6a21c11b20c01b20c11b6a21c21b20c1" + "1b20c21b6a21c31b20c2" + "1b20c31b6a21c41b20c31b20c41b6a21c51b20c41b20c51b6a21c61b20c51b20c61b6a21c71b20c61b20c71b6a21c8" + "1b20c71b20c81b6a21c9" + "1b20c81b20c91b6a21ca1b20c91b20ca1b6a21cb1b20ca1b20cb1b6a21cc1b20cb1b20cc1b6a21cd1b20cc1b20cd1b" + "6a21ce1b20cd1b20ce1b" + "6a21cf1b20ce1b20cf1b6a21d01b20cf1b20d01b6a21d11b20d01b20d11b6a21d21b20d11b20d21b6a21d31b20d21b" + "20d31b6a21d41b20d31b" + "20d41b6a21d51b20d41b20d51b6a21d61b20d51b20d61b6a21d71b20d61b20d71b6a21d81b20d71b20d81b6a21d91b" + "20d81b20d91b6a21da1b" + "20d91b20da1b6a21db1b20da1b20db1b6a21dc1b20db1b20dc1b6a21dd1b20dc1b20dd1b6a21de1b20dd1b20de1b6a" + "21df1b20de1b20df1b6a" + "21e01b20df1b20e01b6a21e11b20e01b20e11b6a21e21b20e11b20e21b6a21e31b20e21b20e31b6a21e41b20e31b20" + "e41b6a21e51b20e41b20" + "e51b6a21e61b20e51b20e61b6a21e71b20e61b20e71b6a21e81b20e71b20e81b6a21e91b20e81b20e91b6a21ea1b20" + "e91b20ea1b6a21eb1b20" + "ea1b20eb1b6a21ec1b20eb1b20ec1b6a21ed1b20ec1b20ed1b6a21ee1b20ed1b20ee1b6a21ef1b20ee1b20ef1b6a21" + "f01b20ef1b20f01b6a21" + "f11b20f01b20f11b6a21f21b20f11b20f21b6a21f31b20f21b20f31b6a21f41b20f31b20f41b6a21f51b20f41b20f5" + "1b6a21f61b20f51b20f6" + "1b6a21f71b20f61b20f71b6a21f81b20f71b20f81b6a21f91b20f81b20f91b6a21fa1b20f91b20fa1b6a21fb1b20fa" + "1b20fb1b6a21fc1b20fb" + "1b20fc1b6a21fd1b20fc1b20fd1b6a21fe1b20fd1b20fe1b6a21ff1b20fe1b20ff1b6a21801c20ff1b20801c6a2181" + "1c20801c20811c6a2182" + "1c20811c20821c6a21831c20821c20831c6a21841c20831c20841c6a21851c20841c20851c6a21861c20851c20861c" + "6a21871c20861c20871c" + "6a21881c20871c20881c6a21891c20881c20891c6a218a1c20891c208a1c6a218b1c208a1c208b1c6a218c1c208b1c" + "208c1c6a218d1c208c1c" + "208d1c6a218e1c208d1c208e1c6a218f1c208e1c208f1c6a21901c208f1c20901c6a21911c20901c20911c6a21921c" + "20911c20921c6a21931c" + "20921c20931c6a21941c20931c20941c6a21951c20941c20951c6a21961c20951c20961c6a21971c20961c20971c6a" + "21981c20971c20981c6a" + "21991c20981c20991c6a219a1c20991c209a1c6a219b1c209a1c209b1c6a219c1c209b1c209c1c6a219d1c209c1c20" + "9d1c6a219e1c209d1c20" + "9e1c6a219f1c209e1c209f1c6a21a01c209f1c20a01c6a21a11c20a01c20a11c6a21a21c20a11c20a21c6a21a31c20" + "a21c20a31c6a21a41c20" + "a31c20a41c6a21a51c20a41c20a51c6a21a61c20a51c20a61c6a21a71c20a61c20a71c6a21a81c20a71c20a81c6a21" + "a91c20a81c20a91c6a21" + "aa1c20a91c20aa1c6a21ab1c20aa1c20ab1c6a21ac1c20ab1c20ac1c6a21ad1c20ac1c20ad1c6a21ae1c20ad1c20ae" + "1c6a21af1c20ae1c20af" + "1c6a21b01c20af1c20b01c6a21b11c20b01c20b11c6a21b21c20b11c20b21c6a21b31c20b21c20b31c6a21b41c20b3" + "1c20b41c6a21b51c20b4" + "1c20b51c6a21b61c20b51c20b61c6a21b71c20b61c20b71c6a21b81c20b71c20b81c6a21b91c20b81c20b91c6a21ba" + "1c20b91c20ba1c6a21bb" + "1c20ba1c20bb1c6a21bc1c20bb1c20bc1c6a21bd1c20bc1c20bd1c6a21be1c20bd1c20be1c6a21bf1c20be1c20bf1c" + "6a21c01c20bf1c20c01c" + "6a21c11c20c01c20c11c6a21c21c20c11c20c21c6a21c31c20c21c20c31c6a21c41c20c31c20c41c6a21c51c20c41c" + "20c51c6a21c61c20c51c" + "20c61c6a21c71c20c61c20c71c6a21c81c20c71c20c81c6a21c91c20c81c20c91c6a21ca1c20c91c20ca1c6a21cb1c" + "20ca1c20cb1c6a21cc1c" + "20cb1c20cc1c6a21cd1c20cc1c20cd1c6a21ce1c20cd1c20ce1c6a21cf1c20ce1c20cf1c6a21d01c20cf1c20d01c6a" + "21d11c20d01c20d11c6a" + "21d21c20d11c20d21c6a21d31c20d21c20d31c6a21d41c20d31c20d41c6a21d51c20d41c20d51c6a21d61c20d51c20" + "d61c6a21d71c20d61c20" + "d71c6a21d81c20d71c20d81c6a21d91c20d81c20d91c6a21da1c20d91c20da1c6a21db1c20da1c20db1c6a21dc1c20" + "db1c20dc1c6a21dd1c20" + "dc1c20dd1c6a21de1c20dd1c20de1c6a21df1c20de1c20df1c6a21e01c20df1c20e01c6a21e11c20e01c20e11c6a21" + "e21c20e11c20e21c6a21" + "e31c20e21c20e31c6a21e41c20e31c20e41c6a21e51c20e41c20e51c6a21e61c20e51c20e61c6a21e71c20e61c20e7" + "1c6a21e81c20e71c20e8" + "1c6a21e91c20e81c20e91c6a21ea1c20e91c20ea1c6a21eb1c20ea1c20eb1c6a21ec1c20eb1c20ec1c6a21ed1c20ec" + "1c20ed1c6a21ee1c20ed" + "1c20ee1c6a21ef1c20ee1c20ef1c6a21f01c20ef1c20f01c6a21f11c20f01c20f11c6a21f21c20f11c20f21c6a21f3" + "1c20f21c20f31c6a21f4" + "1c20f31c20f41c6a21f51c20f41c20f51c6a21f61c20f51c20f61c6a21f71c20f61c20f71c6a21f81c20f71c20f81c" + "6a21f91c20f81c20f91c" + "6a21fa1c20f91c20fa1c6a21fb1c20fa1c20fb1c6a21fc1c20fb1c20fc1c6a21fd1c20fc1c20fd1c6a21fe1c20fd1c" + "20fe1c6a21ff1c20fe1c" + "20ff1c6a21801d20ff1c20801d6a21811d20801d20811d6a21821d20811d20821d6a21831d20821d20831d6a21841d" + "20831d20841d6a21851d" + "20841d20851d6a21861d20851d20861d6a21871d20861d20871d6a21881d20871d20881d6a21891d20881d20891d6a" + "218a1d20891d208a1d6a" + "218b1d208a1d208b1d6a218c1d208b1d208c1d6a218d1d208c1d208d1d6a218e1d208d1d208e1d6a218f1d208e1d20" + "8f1d6a21901d208f1d20" + "901d6a21911d20901d20911d6a21921d20911d20921d6a21931d20921d20931d6a21941d20931d20941d6a21951d20" + "941d20951d6a21961d20" + "951d20961d6a21971d20961d20971d6a21981d20971d20981d6a21991d20981d20991d6a219a1d20991d209a1d6a21" + "9b1d209a1d209b1d6a21" + "9c1d209b1d209c1d6a219d1d209c1d209d1d6a219e1d209d1d209e1d6a219f1d209e1d209f1d6a21a01d209f1d20a0" + "1d6a21a11d20a01d20a1" + "1d6a21a21d20a11d20a21d6a21a31d20a21d20a31d6a21a41d20a31d20a41d6a21a51d20a41d20a51d6a21a61d20a5" + "1d20a61d6a21a71d20a6" + "1d20a71d6a21a81d20a71d20a81d6a21a91d20a81d20a91d6a21aa1d20a91d20aa1d6a21ab1d20aa1d20ab1d6a21ac" + "1d20ab1d20ac1d6a21ad" + "1d20ac1d20ad1d6a21ae1d20ad1d20ae1d6a21af1d20ae1d20af1d6a21b01d20af1d20b01d6a21b11d20b01d20b11d" + "6a21b21d20b11d20b21d" + "6a21b31d20b21d20b31d6a21b41d20b31d20b41d6a21b51d20b41d20b51d6a21b61d20b51d20b61d6a21b71d20b61d" + "20b71d6a21b81d20b71d" + "20b81d6a21b91d20b81d20b91d6a21ba1d20b91d20ba1d6a21bb1d20ba1d20bb1d6a21bc1d20bb1d20bc1d6a21bd1d" + "20bc1d20bd1d6a21be1d" + "20bd1d20be1d6a21bf1d20be1d20bf1d6a21c01d20bf1d20c01d6a21c11d20c01d20c11d6a21c21d20c11d20c21d6a" + "21c31d20c21d20c31d6a" + "21c41d20c31d20c41d6a21c51d20c41d20c51d6a21c61d20c51d20c61d6a21c71d20c61d20c71d6a21c81d20c71d20" + "c81d6a21c91d20c81d20" + "c91d6a21ca1d20c91d20ca1d6a21cb1d20ca1d20cb1d6a21cc1d20cb1d20cc1d6a21cd1d20cc1d20cd1d6a21ce1d20" + "cd1d20ce1d6a21cf1d20" + "ce1d20cf1d6a21d01d20cf1d20d01d6a21d11d20d01d20d11d6a21d21d20d11d20d21d6a21d31d20d21d20d31d6a21" + "d41d20d31d20d41d6a21" + "d51d20d41d20d51d6a21d61d20d51d20d61d6a21d71d20d61d20d71d6a21d81d20d71d20d81d6a21d91d20d81d20d9" + "1d6a21da1d20d91d20da" + "1d6a21db1d20da1d20db1d6a21dc1d20db1d20dc1d6a21dd1d20dc1d20dd1d6a21de1d20dd1d20de1d6a21df1d20de" + "1d20df1d6a21e01d20df" + "1d20e01d6a21e11d20e01d20e11d6a21e21d20e11d20e21d6a21e31d20e21d20e31d6a21e41d20e31d20e41d6a21e5" + "1d20e41d20e51d6a21e6" + "1d20e51d20e61d6a21e71d20e61d20e71d6a21e81d20e71d20e81d6a21e91d20e81d20e91d6a21ea1d20e91d20ea1d" + "6a21eb1d20ea1d20eb1d" + "6a21ec1d20eb1d20ec1d6a21ed1d20ec1d20ed1d6a21ee1d20ed1d20ee1d6a21ef1d20ee1d20ef1d6a21f01d20ef1d" + "20f01d6a21f11d20f01d" + "20f11d6a21f21d20f11d20f21d6a21f31d20f21d20f31d6a21f41d20f31d20f41d6a21f51d20f41d20f51d6a21f61d" + "20f51d20f61d6a21f71d" + "20f61d20f71d6a21f81d20f71d20f81d6a21f91d20f81d20f91d6a21fa1d20f91d20fa1d6a21fb1d20fa1d20fb1d6a" + "21fc1d20fb1d20fc1d6a" + "21fd1d20fc1d20fd1d6a21fe1d20fd1d20fe1d6a21ff1d20fe1d20ff1d6a21801e20ff1d20801e6a21811e20801e20" + "811e6a21821e20811e20" + "821e6a21831e20821e20831e6a21841e20831e20841e6a21851e20841e20851e6a21861e20851e20861e6a21871e20" + "861e20871e6a21881e20" + "871e20881e6a21891e20881e20891e6a218a1e20891e208a1e6a218b1e208a1e208b1e6a218c1e208b1e208c1e6a21" + "8d1e208c1e208d1e6a21" + "8e1e208d1e208e1e6a218f1e208e1e208f1e6a21901e208f1e20901e6a21911e20901e20911e6a21921e20911e2092" + "1e6a21931e20921e2093" + "1e6a21941e20931e20941e6a21951e20941e20951e6a21961e20951e20961e6a21971e20961e20971e6a21981e2097" + "1e20981e6a21991e2098" + "1e20991e6a219a1e20991e209a1e6a219b1e209a1e209b1e6a219c1e209b1e209c1e6a219d1e209c1e209d1e6a219e" + "1e209d1e209e1e6a219f" + "1e209e1e209f1e6a21a01e209f1e20a01e6a21a11e20a01e20a11e6a21a21e20a11e20a21e6a21a31e20a21e20a31e" + "6a21a41e20a31e20a41e" + "6a21a51e20a41e20a51e6a21a61e20a51e20a61e6a21a71e20a61e20a71e6a21a81e20a71e20a81e6a21a91e20a81e" + "20a91e6a21aa1e20a91e" + "20aa1e6a21ab1e20aa1e20ab1e6a21ac1e20ab1e20ac1e6a21ad1e20ac1e20ad1e6a21ae1e20ad1e20ae1e6a21af1e" + "20ae1e20af1e6a21b01e" + "20af1e20b01e6a21b11e20b01e20b11e6a21b21e20b11e20b21e6a21b31e20b21e20b31e6a21b41e20b31e20b41e6a" + "21b51e20b41e20b51e6a" + "21b61e20b51e20b61e6a21b71e20b61e20b71e6a21b81e20b71e20b81e6a21b91e20b81e20b91e6a21ba1e20b91e20" + "ba1e6a21bb1e20ba1e20" + "bb1e6a21bc1e20bb1e20bc1e6a21bd1e20bc1e20bd1e6a21be1e20bd1e20be1e6a21bf1e20be1e20bf1e6a21c01e20" + "bf1e20c01e6a21c11e20" + "c01e20c11e6a21c21e20c11e20c21e6a21c31e20c21e20c31e6a21c41e20c31e20c41e6a21c51e20c41e20c51e6a21" + "c61e20c51e20c61e6a21" + "c71e20c61e20c71e6a21c81e20c71e20c81e6a21c91e20c81e20c91e6a21ca1e20c91e20ca1e6a21cb1e20ca1e20cb" + "1e6a21cc1e20cb1e20cc" + "1e6a21cd1e20cc1e20cd1e6a21ce1e20cd1e20ce1e6a21cf1e20ce1e20cf1e6a21d01e20cf1e20d01e6a21d11e20d0" + "1e20d11e6a21d21e20d1" + "1e20d21e6a21d31e20d21e20d31e6a21d41e20d31e20d41e6a21d51e20d41e20d51e6a21d61e20d51e20d61e6a21d7" + "1e20d61e20d71e6a21d8" + "1e20d71e20d81e6a21d91e20d81e20d91e6a21da1e20d91e20da1e6a21db1e20da1e20db1e6a21dc1e20db1e20dc1e" + "6a21dd1e20dc1e20dd1e" + "6a21de1e20dd1e20de1e6a21df1e20de1e20df1e6a21e01e20df1e20e01e6a21e11e20e01e20e11e6a21e21e20e11e" + "20e21e6a21e31e20e21e" + "20e31e6a21e41e20e31e20e41e6a21e51e20e41e20e51e6a21e61e20e51e20e61e6a21e71e20e61e20e71e6a21e81e" + "20e71e20e81e6a21e91e" + "20e81e20e91e6a21ea1e20e91e20ea1e6a21eb1e20ea1e20eb1e6a21ec1e20eb1e20ec1e6a21ed1e20ec1e20ed1e6a" + "21ee1e20ed1e20ee1e6a" + "21ef1e20ee1e20ef1e6a21f01e20ef1e20f01e6a21f11e20f01e20f11e6a21f21e20f11e20f21e6a21f31e20f21e20" + "f31e6a21f41e20f31e20" + "f41e6a21f51e20f41e20f51e6a21f61e20f51e20f61e6a21f71e20f61e20f71e6a21f81e20f71e20f81e6a21f91e20" + "f81e20f91e6a21fa1e20" + "f91e20fa1e6a21fb1e20fa1e20fb1e6a21fc1e20fb1e20fc1e6a21fd1e20fc1e20fd1e6a21fe1e20fd1e20fe1e6a21" + "ff1e20fe1e20ff1e6a21" + "801f20ff1e20801f6a21811f20801f20811f6a21821f20811f20821f6a21831f20821f20831f6a21841f20831f2084" + "1f6a21851f20841f2085" + "1f6a21861f20851f20861f6a21871f20861f20871f6a21881f20871f20881f6a21891f20881f20891f6a218a1f2089" + "1f208a1f6a218b1f208a" + "1f208b1f6a218c1f208b1f208c1f6a218d1f208c1f208d1f6a218e1f208d1f208e1f6a218f1f208e1f208f1f6a2190" + "1f208f1f20901f6a2191" + "1f20901f20911f6a21921f20911f20921f6a21931f20921f20931f6a21941f20931f20941f6a21951f20941f20951f" + "6a21961f20951f20961f" + "6a21971f20961f20971f6a21981f20971f20981f6a21991f20981f20991f6a219a1f20991f209a1f6a219b1f209a1f" + "209b1f6a219c1f209b1f" + "209c1f6a219d1f209c1f209d1f6a219e1f209d1f209e1f6a219f1f209e1f209f1f6a21a01f209f1f20a01f6a21a11f" + "20a01f20a11f6a21a21f" + "20a11f20a21f6a21a31f20a21f20a31f6a21a41f20a31f20a41f6a21a51f20a41f20a51f6a21a61f20a51f20a61f6a" + "21a71f20a61f20a71f6a" + "21a81f20a71f20a81f6a21a91f20a81f20a91f6a21aa1f20a91f20aa1f6a21ab1f20aa1f20ab1f6a21ac1f20ab1f20" + "ac1f6a21ad1f20ac1f20" + "ad1f6a21ae1f20ad1f20ae1f6a21af1f20ae1f20af1f6a21b01f20af1f20b01f6a21b11f20b01f20b11f6a21b21f20" + "b11f20b21f6a21b31f20" + "b21f20b31f6a21b41f20b31f20b41f6a21b51f20b41f20b51f6a21b61f20b51f20b61f6a21b71f20b61f20b71f6a21" + "b81f20b71f20b81f6a21" + "b91f20b81f20b91f6a21ba1f20b91f20ba1f6a21bb1f20ba1f20bb1f6a21bc1f20bb1f20bc1f6a21bd1f20bc1f20bd" + "1f6a21be1f20bd1f20be" + "1f6a21bf1f20be1f20bf1f6a21c01f20bf1f20c01f6a21c11f20c01f20c11f6a21c21f20c11f20c21f6a21c31f20c2" + "1f20c31f6a21c41f20c3" + "1f20c41f6a21c51f20c41f20c51f6a21c61f20c51f20c61f6a21c71f20c61f20c71f6a21c81f20c71f20c81f6a21c9" + "1f20c81f20c91f6a21ca" + "1f20c91f20ca1f6a21cb1f20ca1f20cb1f6a21cc1f20cb1f20cc1f6a21cd1f20cc1f20cd1f6a21ce1f20cd1f20ce1f" + "6a21cf1f20ce1f20cf1f" + "6a21d01f20cf1f20d01f6a21d11f20d01f20d11f6a21d21f20d11f20d21f6a21d31f20d21f20d31f6a21d41f20d31f" + "20d41f6a21d51f20d41f" + "20d51f6a21d61f20d51f20d61f6a21d71f20d61f20d71f6a21d81f20d71f20d81f6a21d91f20d81f20d91f6a21da1f" + "20d91f20da1f6a21db1f" + "20da1f20db1f6a21dc1f20db1f20dc1f6a21dd1f20dc1f20dd1f6a21de1f20dd1f20de1f6a21df1f20de1f20df1f6a" + "21e01f20df1f20e01f6a" + "21e11f20e01f20e11f6a21e21f20e11f20e21f6a21e31f20e21f20e31f6a21e41f20e31f20e41f6a21e51f20e41f20" + "e51f6a21e61f20e51f20" + "e61f6a21e71f20e61f20e71f6a21e81f20e71f20e81f6a21e91f20e81f20e91f6a21ea1f20e91f20ea1f6a21eb1f20" + "ea1f20eb1f6a21ec1f20" + "eb1f20ec1f6a21ed1f20ec1f20ed1f6a21ee1f20ed1f20ee1f6a21ef1f20ee1f20ef1f6a21f01f20ef1f20f01f6a21" + "f11f20f01f20f11f6a21" + "f21f20f11f20f21f6a21f31f20f21f20f31f6a21f41f20f31f20f41f6a21f51f20f41f20f51f6a21f61f20f51f20f6" + "1f6a21f71f20f61f20f7" + "1f6a21f81f20f71f20f81f6a21f91f20f81f20f91f6a21fa1f20f91f20fa1f6a21fb1f20fa1f20fb1f6a21fc1f20fb" + "1f20fc1f6a21fd1f20fc" + "1f20fd1f6a21fe1f20fd1f20fe1f6a21ff1f20fe1f20ff1f6a21802020ff1f2080206a2181202080202081206a2182" + "202081202082206a2183" + "202082202083206a2184202083202084206a2185202084202085206a2186202085202086206a218720208620208720" + "6a218820208720208820" + "6a2189202088202089206a218a20208920208a206a218b20208a20208b206a218c20208b20208c206a218d20208c20" + "208d206a218e20208d20" + "208e206a218f20208e20208f206a219020208f202090206a2191202090202091206a2192202091202092206a219320" + "2092202093206a219420" + "2093202094206a2195202094202095206a2196202095202096206a2197202096202097206a2198202097202098206a" + "2199202098202099206a" + "219a20209920209a206a219b20209a20209b206a219c20209b20209c206a219d20209c20209d206a219e20209d2020" + "9e206a219f20209e2020" + "9f206a21a020209f2020a0206a21a12020a02020a1206a21a22020a12020a2206a21a32020a22020a3206a21a42020" + "a32020a4206a21a52020" + "a42020a5206a21a62020a52020a6206a21a72020a62020a7206a21a82020a72020a8206a21a92020a82020a9206a21" + "aa2020a92020aa206a21" + "ab2020aa2020ab206a21ac2020ab2020ac206a21ad2020ac2020ad206a21ae2020ad2020ae206a21af2020ae2020af" + "206a21b02020af2020b0" + "206a21b12020b02020b1206a21b22020b12020b2206a21b32020b22020b3206a21b42020b32020b4206a21b52020b4" + "2020b5206a21b62020b5" + "2020b6206a21b72020b62020b7206a21b82020b72020b8206a21b92020b82020b9206a21ba2020b92020ba206a21bb" + "2020ba2020bb206a21bc" + "2020bb2020bc206a21bd2020bc2020bd206a21be2020bd2020be206a21bf2020be2020bf206a21c02020bf2020c020" + "6a21c12020c02020c120" + "6a21c22020c12020c2206a21c32020c22020c3206a21c42020c32020c4206a21c52020c42020c5206a21c62020c520" + "20c6206a21c72020c620" + "20c7206a21c82020c72020c8206a21c92020c82020c9206a21ca2020c92020ca206a21cb2020ca2020cb206a21cc20" + "20cb2020cc206a21cd20" + "20cc2020cd206a21ce2020cd2020ce206a21cf2020ce2020cf206a21d02020cf2020d0206a21d12020d02020d1206a" + "21d22020d12020d2206a" + "21d32020d22020d3206a21d42020d32020d4206a21d52020d42020d5206a21d62020d52020d6206a21d72020d62020" + "d7206a21d82020d72020" + "d8206a21d92020d82020d9206a21da2020d92020da206a21db2020da2020db206a21dc2020db2020dc206a21dd2020" + "dc2020dd206a21de2020" + "dd2020de206a21df2020de2020df206a21e02020df2020e0206a21e12020e02020e1206a21e22020e12020e2206a21" + "e32020e22020e3206a21" + "e42020e32020e4206a21e52020e42020e5206a21e62020e52020e6206a21e72020e62020e7206a21e82020e72020e8" + "206a21e92020e82020e9" + "206a21ea2020e92020ea206a21eb2020ea2020eb206a21ec2020eb2020ec206a21ed2020ec2020ed206a21ee2020ed" + "2020ee206a21ef2020ee" + "2020ef206a21f02020ef2020f0206a21f12020f02020f1206a21f22020f12020f2206a21f32020f22020f3206a21f4" + "2020f32020f4206a21f5" + "2020f42020f5206a21f62020f52020f6206a21f72020f62020f7206a21f82020f72020f8206a21f92020f82020f920" + "6a21fa2020f92020fa20" + "6a21fb2020fa2020fb206a21fc2020fb2020fc206a21fd2020fc2020fd206a21fe2020fd2020fe206a21ff2020fe20" + "20ff206a21802120ff20" + "2080216a2181212080212081216a2182212081212082216a2183212082212083216a2184212083212084216a218521" + "2084212085216a218621" + "2085212086216a2187212086212087216a2188212087212088216a2189212088212089216a218a21208921208a216a" + "218b21208a21208b216a" + "218c21208b21208c216a218d21208c21208d216a218e21208d21208e216a218f21208e21208f216a219021208f2120" + "90216a21912120902120" + "91216a2192212091212092216a2193212092212093216a2194212093212094216a2195212094212095216a21962120" + "95212096216a21972120" + "96212097216a2198212097212098216a2199212098212099216a219a21209921209a216a219b21209a21209b216a21" + "9c21209b21209c216a21" + "9d21209c21209d216a219e21209d21209e216a219f21209e21209f216a21a021209f2120a0216a21a12120a02120a1" + "216a21a22120a12120a2" + "216a21a32120a22120a3216a21a42120a32120a4216a21a52120a42120a5216a21a62120a52120a6216a21a72120a6" + "2120a7216a21a82120a7" + "2120a8216a21a92120a82120a9216a21aa2120a92120aa216a21ab2120aa2120ab216a21ac2120ab2120ac216a21ad" + "2120ac2120ad216a21ae" + "2120ad2120ae216a21af2120ae2120af216a21b02120af2120b0216a21b12120b02120b1216a21b22120b12120b221" + "6a21b32120b22120b321" + "6a21b42120b32120b4216a21b52120b42120b5216a21b62120b52120b6216a21b72120b62120b7216a21b82120b721" + "20b8216a21b92120b821" + "20b9216a21ba2120b92120ba216a21bb2120ba2120bb216a21bc2120bb2120bc216a21bd2120bc2120bd216a21be21" + "20bd2120be216a21bf21" + "20be2120bf216a21c02120bf2120c0216a21c12120c02120c1216a21c22120c12120c2216a21c32120c22120c3216a" + "21c42120c32120c4216a" + "21c52120c42120c5216a21c62120c52120c6216a21c72120c62120c7216a21c82120c72120c8216a21c92120c82120" + "c9216a21ca2120c92120" + "ca216a21cb2120ca2120cb216a21cc2120cb2120cc216a21cd2120cc2120cd216a21ce2120cd2120ce216a21cf2120" + "ce2120cf216a21d02120" + "cf2120d0216a21d12120d02120d1216a21d22120d12120d2216a21d32120d22120d3216a21d42120d32120d4216a21" + "d52120d42120d5216a21" + "d62120d52120d6216a21d72120d62120d7216a21d82120d72120d8216a21d92120d82120d9216a21da2120d92120da" + "216a21db2120da2120db" + "216a21dc2120db2120dc216a21dd2120dc2120dd216a21de2120dd2120de216a21df2120de2120df216a21e02120df" + "2120e0216a21e12120e0" + "2120e1216a21e22120e12120e2216a21e32120e22120e3216a21e42120e32120e4216a21e52120e42120e5216a21e6" + "2120e52120e6216a21e7" + "2120e62120e7216a21e82120e72120e8216a21e92120e82120e9216a21ea2120e92120ea216a21eb2120ea2120eb21" + "6a21ec2120eb2120ec21" + "6a21ed2120ec2120ed216a21ee2120ed2120ee216a21ef2120ee2120ef216a21f02120ef2120f0216a21f12120f021" + "20f1216a21f22120f121" + "20f2216a21f32120f22120f3216a21f42120f32120f4216a21f52120f42120f5216a21f62120f52120f6216a21f721" + "20f62120f7216a21f821" + "20f72120f8216a21f92120f82120f9216a21fa2120f92120fa216a21fb2120fa2120fb216a21fc2120fb2120fc216a" + "21fd2120fc2120fd216a" + "21fe2120fd2120fe216a21ff2120fe2120ff216a21802220ff212080226a2181222080222081226a21822220812220" + "82226a21832220822220" + "83226a2184222083222084226a2185222084222085226a2186222085222086226a2187222086222087226a21882220" + "87222088226a21892220" + "88222089226a218a22208922208a226a218b22208a22208b226a218c22208b22208c226a218d22208c22208d226a21" + "8e22208d22208e226a21" + "8f22208e22208f226a219022208f222090226a2191222090222091226a2192222091222092226a2193222092222093" + "226a2194222093222094" + "226a2195222094222095226a2196222095222096226a2197222096222097226a2198222097222098226a2199222098" + "222099226a219a222099" + "22209a226a219b22209a22209b226a219c22209b22209c226a219d22209c22209d226a219e22209d22209e226a219f" + "22209e22209f226a21a0" + "22209f2220a0226a21a12220a02220a1226a21a22220a12220a2226a21a32220a22220a3226a21a42220a32220a422" + "6a21a52220a42220a522" + "6a21a62220a52220a6226a21a72220a62220a7226a21a82220a72220a8226a21a92220a82220a9226a21aa2220a922" + "20aa226a21ab2220aa22" + "20ab226a21ac2220ab2220ac226a21ad2220ac2220ad226a21ae2220ad2220ae226a21af2220ae2220af226a21b022" + "20af2220b0226a21b122" + "20b02220b1226a21b22220b12220b2226a21b32220b22220b3226a21b42220b32220b4226a21b52220b42220b5226a" + "21b62220b52220b6226a" + "21b72220b62220b7226a21b82220b72220b8226a21b92220b82220b9226a21ba2220b92220ba226a21bb2220ba2220" + "bb226a21bc2220bb2220" + "bc226a21bd2220bc2220bd226a21be2220bd2220be226a21bf2220be2220bf226a21c02220bf2220c0226a21c12220" + "c02220c1226a21c22220" + "c12220c2226a21c32220c22220c3226a21c42220c32220c4226a21c52220c42220c5226a21c62220c52220c6226a21" + "c72220c62220c7226a21" + "c82220c72220c8226a21c92220c82220c9226a21ca2220c92220ca226a21cb2220ca2220cb226a21cc2220cb2220cc" + "226a21cd2220cc2220cd" + "226a21ce2220cd2220ce226a21cf2220ce2220cf226a21d02220cf2220d0226a21d12220d02220d1226a21d22220d1" + "2220d2226a21d32220d2" + "2220d3226a21d42220d32220d4226a21d52220d42220d5226a21d62220d52220d6226a21d72220d62220d7226a21d8" + "2220d72220d8226a21d9" + "2220d82220d9226a21da2220d92220da226a21db2220da2220db226a21dc2220db2220dc226a21dd2220dc2220dd22" + "6a21de2220dd2220de22" + "6a21df2220de2220df226a21e02220df2220e0226a21e12220e02220e1226a21e22220e12220e2226a21e32220e222" + "20e3226a21e42220e322" + "20e4226a21e52220e42220e5226a21e62220e52220e6226a21e72220e62220e7226a21e82220e72220e8226a21e922" + "20e82220e9226a21ea22" + "20e92220ea226a21eb2220ea2220eb226a21ec2220eb2220ec226a21ed2220ec2220ed226a21ee2220ed2220ee226a" + "21ef2220ee2220ef226a" + "21f02220ef2220f0226a21f12220f02220f1226a21f22220f12220f2226a21f32220f22220f3226a21f42220f32220" + "f4226a21f52220f42220" + "f5226a21f62220f52220f6226a21f72220f62220f7226a21f82220f72220f8226a21f92220f82220f9226a21fa2220" + "f92220fa226a21fb2220" + "fa2220fb226a21fc2220fb2220fc226a21fd2220fc2220fd226a21fe2220fd2220fe226a21ff2220fe2220ff226a21" + "802320ff222080236a21" + "81232080232081236a2182232081232082236a2183232082232083236a2184232083232084236a2185232084232085" + "236a2186232085232086" + "236a2187232086232087236a2188232087232088236a2189232088232089236a218a23208923208a236a218b23208a" + "23208b236a218c23208b" + "23208c236a218d23208c23208d236a218e23208d23208e236a218f23208e23208f236a219023208f232090236a2191" + "232090232091236a2192" + "232091232092236a2193232092232093236a2194232093232094236a2195232094232095236a219623209523209623" + "6a219723209623209723" + "6a2198232097232098236a2199232098232099236a219a23209923209a236a219b23209a23209b236a219c23209b23" + "209c236a219d23209c23" + "209d236a219e23209d23209e236a219f23209e23209f236a21a023209f2320a0236a21a12320a02320a1236a21a223" + "20a12320a2236a21a323" + "20a22320a3236a21a42320a32320a4236a21a52320a42320a5236a21a62320a52320a6236a21a72320a62320a7236a" + "21a82320a72320a8236a" + "21a92320a82320a9236a21aa2320a92320aa236a21ab2320aa2320ab236a21ac2320ab2320ac236a21ad2320ac2320" + "ad236a21ae2320ad2320" + "ae236a21af2320ae2320af236a21b02320af2320b0236a21b12320b02320b1236a21b22320b12320b2236a21b32320" + "b22320b3236a21b42320" + "b32320b4236a21b52320b42320b5236a21b62320b52320b6236a21b72320b62320b7236a21b82320b72320b8236a21" + "b92320b82320b9236a21" + "ba2320b92320ba236a21bb2320ba2320bb236a21bc2320bb2320bc236a21bd2320bc2320bd236a21be2320bd2320be" + "236a21bf2320be2320bf" + "236a21c02320bf2320c0236a21c12320c02320c1236a21c22320c12320c2236a21c32320c22320c3236a21c42320c3" + "2320c4236a21c52320c4" + "2320c5236a21c62320c52320c6236a21c72320c62320c7236a21c82320c72320c8236a21c92320c82320c9236a21ca" + "2320c92320ca236a21cb" + "2320ca2320cb236a21cc2320cb2320cc236a21cd2320cc2320cd236a21ce2320cd2320ce236a21cf2320ce2320cf23" + "6a21d02320cf2320d023" + "6a21d12320d02320d1236a21d22320d12320d2236a21d32320d22320d3236a21d42320d32320d4236a21d52320d423" + "20d5236a21d62320d523" + "20d6236a21d72320d62320d7236a21d82320d72320d8236a21d92320d82320d9236a21da2320d92320da236a21db23" + "20da2320db236a21dc23" + "20db2320dc236a21dd2320dc2320dd236a21de2320dd2320de236a21df2320de2320df236a21e02320df2320e0236a" + "21e12320e02320e1236a" + "21e22320e12320e2236a21e32320e22320e3236a21e42320e32320e4236a21e52320e42320e5236a21e62320e52320" + "e6236a21e72320e62320" + "e7236a21e82320e72320e8236a21e92320e82320e9236a21ea2320e92320ea236a21eb2320ea2320eb236a21ec2320" + "eb2320ec236a21ed2320" + "ec2320ed236a21ee2320ed2320ee236a21ef2320ee2320ef236a21f02320ef2320f0236a21f12320f02320f1236a21" + "f22320f12320f2236a21" + "f32320f22320f3236a21f42320f32320f4236a21f52320f42320f5236a21f62320f52320f6236a21f72320f62320f7" + "236a21f82320f72320f8" + "236a21f92320f82320f9236a21fa2320f92320fa236a21fb2320fa2320fb236a21fc2320fb2320fc236a21fd2320fc" + "2320fd236a21fe2320fd" + "2320fe236a21ff2320fe2320ff236a21802420ff232080246a2181242080242081246a2182242081242082246a2183" + "242082242083246a2184" + "242083242084246a2185242084242085246a2186242085242086246a2187242086242087246a218824208724208824" + "6a218924208824208924" + "6a218a24208924208a246a218b24208a24208b246a218c24208b24208c246a218d24208c24208d246a218e24208d24" + "208e246a218f24208e24" + "208f246a219024208f242090246a2191242090242091246a2192242091242092246a2193242092242093246a219424" + "2093242094246a219524" + "2094242095246a2196242095242096246a2197242096242097246a2198242097242098246a2199242098242099246a" + "219a24209924209a246a" + "219b24209a24209b246a219c24209b24209c246a219d24209c24209d246a219e24209d24209e246a219f24209e2420" + "9f246a21a024209f2420" + "a0246a21a12420a02420a1246a21a22420a12420a2246a21a32420a22420a3246a21a42420a32420a4246a21a52420" + "a42420a5246a21a62420" + "a52420a6246a21a72420a62420a7246a21a82420a72420a8246a21a92420a82420a9246a21aa2420a92420aa246a21" + "ab2420aa2420ab246a21" + "ac2420ab2420ac246a21ad2420ac2420ad246a21ae2420ad2420ae246a21af2420ae2420af246a21b02420af2420b0" + "246a21b12420b02420b1" + "246a21b22420b12420b2246a21b32420b22420b3246a21b42420b32420b4246a21b52420b42420b5246a21b62420b5" + "2420b6246a21b72420b6" + "2420b7246a21b82420b72420b8246a21b92420b82420b9246a21ba2420b92420ba246a21bb2420ba2420bb246a21bc" + "2420bb2420bc246a21bd" + "2420bc2420bd246a21be2420bd2420be246a21bf2420be2420bf246a21c02420bf2420c0246a21c12420c02420c124" + "6a21c22420c12420c224" + "6a21c32420c22420c3246a21c42420c32420c4246a21c52420c42420c5246a21c62420c52420c6246a21c72420c624" + "20c7246a21c82420c724" + "20c8246a21c92420c82420c9246a21ca2420c92420ca246a21cb2420ca2420cb246a21cc2420cb2420cc246a21cd24" + "20cc2420cd246a21ce24" + "20cd2420ce246a21cf2420ce2420cf246a21d02420cf2420d0246a21d12420d02420d1246a21d22420d12420d2246a" + "21d32420d22420d3246a" + "21d42420d32420d4246a21d52420d42420d5246a21d62420d52420d6246a21d72420d62420d7246a21d82420d72420" + "d8246a21d92420d82420" + "d9246a21da2420d92420da246a21db2420da2420db246a21dc2420db2420dc246a21dd2420dc2420dd246a21de2420" + "dd2420de246a21df2420" + "de2420df246a21e02420df2420e0246a21e12420e02420e1246a21e22420e12420e2246a21e32420e22420e3246a21" + "e42420e32420e4246a21" + "e52420e42420e5246a21e62420e52420e6246a21e72420e62420e7246a21e82420e72420e8246a21e92420e82420e9" + "246a21ea2420e92420ea" + "246a21eb2420ea2420eb246a21ec2420eb2420ec246a21ed2420ec2420ed246a21ee2420ed2420ee246a21ef2420ee" + "2420ef246a21f02420ef" + "2420f0246a21f12420f02420f1246a21f22420f12420f2246a21f32420f22420f3246a21f42420f32420f4246a21f5" + "2420f42420f5246a21f6" + "2420f52420f6246a21f72420f62420f7246a21f82420f72420f8246a21f92420f82420f9246a21fa2420f92420fa24" + "6a21fb2420fa2420fb24" + "6a21fc2420fb2420fc246a21fd2420fc2420fd246a21fe2420fd2420fe246a21ff2420fe2420ff246a21802520ff24" + "2080256a218125208025" + "2081256a2182252081252082256a2183252082252083256a2184252083252084256a2185252084252085256a218625" + "2085252086256a218725" + "2086252087256a2188252087252088256a2189252088252089256a218a25208925208a256a218b25208a25208b256a" + "218c25208b25208c256a" + "218d25208c25208d256a218e25208d25208e256a218f25208e25208f256a219025208f252090256a21912520902520" + "91256a21922520912520" + "92256a2193252092252093256a2194252093252094256a2195252094252095256a2196252095252096256a21972520" + "96252097256a21982520" + "97252098256a2199252098252099256a219a25209925209a256a219b25209a25209b256a219c25209b25209c256a21" + "9d25209c25209d256a21" + "9e25209d25209e256a219f25209e25209f256a21a025209f2520a0256a21a12520a02520a1256a21a22520a12520a2" + "256a21a32520a22520a3" + "256a21a42520a32520a4256a21a52520a42520a5256a21a62520a52520a6256a21a72520a62520a7256a21a82520a7" + "2520a8256a21a92520a8" + "2520a9256a21aa2520a92520aa256a21ab2520aa2520ab256a21ac2520ab2520ac256a21ad2520ac2520ad256a21ae" + "2520ad2520ae256a21af" + "2520ae2520af256a21b02520af2520b0256a21b12520b02520b1256a21b22520b12520b2256a21b32520b22520b325" + "6a21b42520b32520b425" + "6a21b52520b42520b5256a21b62520b52520b6256a21b72520b62520b7256a21b82520b72520b8256a21b92520b825" + "20b9256a21ba2520b925" + "20ba256a21bb2520ba2520bb256a21bc2520bb2520bc256a21bd2520bc2520bd256a21be2520bd2520be256a21bf25" + "20be2520bf256a21c025" + "20bf2520c0256a21c12520c02520c1256a21c22520c12520c2256a21c32520c22520c3256a21c42520c32520c4256a" + "21c52520c42520c5256a" + "21c62520c52520c6256a21c72520c62520c7256a21c82520c72520c8256a21c92520c82520c9256a21ca2520c92520" + "ca256a21cb2520ca2520" + "cb256a21cc2520cb2520cc256a21cd2520cc2520cd256a21ce2520cd2520ce256a21cf2520ce2520cf256a21d02520" + "cf2520d0256a21d12520" + "d02520d1256a21d22520d12520d2256a21d32520d22520d3256a21d42520d32520d4256a21d52520d42520d5256a21" + "d62520d52520d6256a21" + "d72520d62520d7256a21d82520d72520d8256a21d92520d82520d9256a21da2520d92520da256a21db2520da2520db" + "256a21dc2520db2520dc" + "256a21dd2520dc2520dd256a21de2520dd2520de256a21df2520de2520df256a21e02520df2520e0256a21e12520e0" + "2520e1256a21e22520e1" + "2520e2256a21e32520e22520e3256a21e42520e32520e4256a21e52520e42520e5256a21e62520e52520e6256a21e7" + "2520e62520e7256a21e8" + "2520e72520e8256a21e92520e82520e9256a21ea2520e92520ea256a21eb2520ea2520eb256a21ec2520eb2520ec25" + "6a21ed2520ec2520ed25" + "6a21ee2520ed2520ee256a21ef2520ee2520ef256a21f02520ef2520f0256a21f12520f02520f1256a21f22520f125" + "20f2256a21f32520f225" + "20f3256a21f42520f32520f4256a21f52520f42520f5256a21f62520f52520f6256a21f72520f62520f7256a21f825" + "20f72520f8256a21f925" + "20f82520f9256a21fa2520f92520fa256a21fb2520fa2520fb256a21fc2520fb2520fc256a21fd2520fc2520fd256a" + "21fe2520fd2520fe256a" + "21ff2520fe2520ff256a21802620ff252080266a2181262080262081266a2182262081262082266a21832620822620" + "83266a21842620832620" + "84266a2185262084262085266a2186262085262086266a2187262086262087266a2188262087262088266a21892620" + "88262089266a218a2620" + "8926208a266a218b26208a26208b266a218c26208b26208c266a218d26208c26208d266a218e26208d26208e266a21" + "8f26208e26208f266a21" + "9026208f262090266a2191262090262091266a2192262091262092266a2193262092262093266a2194262093262094" + "266a2195262094262095" + "266a2196262095262096266a2197262096262097266a2198262097262098266a2199262098262099266a219a262099" + "26209a266a219b26209a" + "26209b266a219c26209b26209c266a219d26209c26209d266a219e26209d26209e266a219f26209e26209f266a21a0" + "26209f2620a0266a21a1" + "2620a02620a1266a21a22620a12620a2266a21a32620a22620a3266a21a42620a32620a4266a21a52620a42620a526" + "6a21a62620a52620a626" + "6a21a72620a62620a7266a21a82620a72620a8266a21a92620a82620a9266a21aa2620a92620aa266a21ab2620aa26" + "20ab266a21ac2620ab26" + "20ac266a21ad2620ac2620ad266a21ae2620ad2620ae266a21af2620ae2620af266a21b02620af2620b0266a21b126" + "20b02620b1266a21b226" + "20b12620b2266a21b32620b22620b3266a21b42620b32620b4266a21b52620b42620b5266a21b62620b52620b6266a" + "21b72620b62620b7266a" + "21b82620b72620b8266a21b92620b82620b9266a21ba2620b92620ba266a21bb2620ba2620bb266a21bc2620bb2620" + "bc266a21bd2620bc2620" + "bd266a21be2620bd2620be266a21bf2620be2620bf266a21c02620bf2620c0266a21c12620c02620c1266a21c22620" + "c12620c2266a21c32620" + "c22620c3266a21c42620c32620c4266a21c52620c42620c5266a21c62620c52620c6266a21c72620c62620c7266a21" + "c82620c72620c8266a21" + "c92620c82620c9266a21ca2620c92620ca266a21cb2620ca2620cb266a21cc2620cb2620cc266a21cd2620cc2620cd" + "266a21ce2620cd2620ce" + "266a21cf2620ce2620cf266a21d02620cf2620d0266a21d12620d02620d1266a21d22620d12620d2266a21d32620d2" + "2620d3266a21d42620d3" + "2620d4266a21d52620d42620d5266a21d62620d52620d6266a21d72620d62620d7266a21d82620d72620d8266a21d9" + "2620d82620d9266a21da" + "2620d92620da266a21db2620da2620db266a21dc2620db2620dc266a21dd2620dc2620dd266a21de2620dd2620de26" + "6a21df2620de2620df26" + "6a21e02620df2620e0266a21e12620e02620e1266a21e22620e12620e2266a21e32620e22620e3266a21e42620e326" + "20e4266a21e52620e426" + "20e5266a21e62620e52620e6266a21e72620e62620e7266a21e82620e72620e8266a21e92620e82620e9266a21ea26" + "20e92620ea266a21eb26" + "20ea2620eb266a21ec2620eb2620ec266a21ed2620ec2620ed266a21ee2620ed2620ee266a21ef2620ee2620ef266a" + "21f02620ef2620f0266a" + "21f12620f02620f1266a21f22620f12620f2266a21f32620f22620f3266a21f42620f32620f4266a21f52620f42620" + "f5266a21f62620f52620" + "f6266a21f72620f62620f7266a21f82620f72620f8266a21f92620f82620f9266a21fa2620f92620fa266a21fb2620" + "fa2620fb266a21fc2620" + "fb2620fc266a21fd2620fc2620fd266a21fe2620fd2620fe266a21ff2620fe2620ff266a21802720ff262080276a21" + "81272080272081276a21" + "82272081272082276a2183272082272083276a2184272083272084276a2185272084272085276a2186272085272086" + "276a2187272086272087" + "276a2188272087272088276a2189272088272089276a218a27208927208a276a218b27208a27208b276a218c27208b" + "27208c276a218d27208c" + "27208d276a218e27208d27208e276a218f27208e27208f276a219027208f272090276a2191272090272091276a2192" + "272091272092276a2193" + "272092272093276a2194272093272094276a2195272094272095276a2196272095272096276a219727209627209727" + "6a219827209727209827" + "6a2199272098272099276a219a27209927209a276a219b27209a27209b276a219c27209b27209c276a219d27209c27" + "209d276a219e27209d27" + "209e276a219f27209e27209f276a21a027209f2720a0276a21a12720a02720a1276a21a22720a12720a2276a21a327" + "20a22720a3276a21a427" + "20a32720a4276a21a52720a42720a5276a21a62720a52720a6276a21a72720a62720a7276a21a82720a72720a8276a" + "21a92720a82720a9276a" + "21aa2720a92720aa276a21ab2720aa2720ab276a21ac2720ab2720ac276a21ad2720ac2720ad276a21ae2720ad2720" + "ae276a21af2720ae2720" + "af276a21b02720af2720b0276a21b12720b02720b1276a21b22720b12720b2276a21b32720b22720b3276a21b42720" + "b32720b4276a21b52720" + "b42720b5276a21b62720b52720b6276a21b72720b62720b7276a21b82720b72720b8276a21b92720b82720b9276a21" + "ba2720b92720ba276a21" + "bb2720ba2720bb276a21bc2720bb2720bc276a21bd2720bc2720bd276a21be2720bd2720be276a21bf2720be2720bf" + "276a21c02720bf2720c0" + "276a21c12720c02720c1276a21c22720c12720c2276a21c32720c22720c3276a21c42720c32720c4276a21c52720c4" + "2720c5276a21c62720c5" + "2720c6276a21c72720c62720c7276a21c82720c72720c8276a21c92720c82720c9276a21ca2720c92720ca276a21cb" + "2720ca2720cb276a21cc" + "2720cb2720cc276a21cd2720cc2720cd276a21ce2720cd2720ce276a21cf2720ce2720cf276a21d02720cf2720d027" + "6a21d12720d02720d127" + "6a21d22720d12720d2276a21d32720d22720d3276a21d42720d32720d4276a21d52720d42720d5276a21d62720d527" + "20d6276a21d72720d627" + "20d7276a21d82720d72720d8276a21d92720d82720d9276a21da2720d92720da276a21db2720da2720db276a21dc27" + "20db2720dc276a21dd27" + "20dc2720dd276a21de2720dd2720de276a21df2720de2720df276a21e02720df2720e0276a21e12720e02720e1276a" + "21e22720e12720e2276a" + "21e32720e22720e3276a21e42720e32720e4276a21e52720e42720e5276a21e62720e52720e6276a21e72720e62720" + "e7276a21e82720e72720" + "e8276a21e92720e82720e9276a21ea2720e92720ea276a21eb2720ea2720eb276a21ec2720eb2720ec276a21ed2720" + "ec2720ed276a21ee2720" + "ed2720ee276a21ef2720ee2720ef276a21f02720ef2720f0276a21f12720f02720f1276a21f22720f12720f2276a21" + "f32720f22720f3276a21" + "f42720f32720f4276a21f52720f42720f5276a21f62720f52720f6276a21f72720f62720f7276a21f82720f72720f8" + "276a21f92720f82720f9" + "276a21fa2720f92720fa276a21fb2720fa2720fb276a21fc2720fb2720fc276a21fd2720fc2720fd276a21fe2720fd" + "2720fe276a21ff2720fe" + "2720ff276a21802820ff272080286a2181282080282081286a2182282081282082286a2183282082282083286a2184" + "282083282084286a2185" + "282084282085286a2186282085282086286a2187282086282087286a2188282087282088286a218928208828208928" + "6a218a28208928208a28" + "6a218b28208a28208b286a218c28208b28208c286a218d28208c28208d286a218e28208d28208e286a218f28208e28" + "208f286a219028208f28" + "2090286a2191282090282091286a2192282091282092286a2193282092282093286a2194282093282094286a219528" + "2094282095286a219628" + "2095282096286a2197282096282097286a2198282097282098286a2199282098282099286a219a28209928209a286a" + "219b28209a28209b286a" + "219c28209b28209c286a219d28209c28209d286a219e28209d28209e286a219f28209e28209f286a21a028209f2820" + "a0286a21a12820a02820" + "a1286a21a22820a12820a2286a21a32820a22820a3286a21a42820a32820a4286a21a52820a42820a5286a21a62820" + "a52820a6286a21a72820" + "a62820a7286a21a82820a72820a8286a21a92820a82820a9286a21aa2820a92820aa286a21ab2820aa2820ab286a21" + "ac2820ab2820ac286a21" + "ad2820ac2820ad286a21ae2820ad2820ae286a21af2820ae2820af286a21b02820af2820b0286a21b12820b02820b1" + "286a21b22820b12820b2" + "286a21b32820b22820b3286a21b42820b32820b4286a21b52820b42820b5286a21b62820b52820b6286a21b72820b6" + "2820b7286a21b82820b7" + "2820b8286a21b92820b82820b9286a21ba2820b92820ba286a21bb2820ba2820bb286a21bc2820bb2820bc286a21bd" + "2820bc2820bd286a21be" + "2820bd2820be286a21bf2820be2820bf286a21c02820bf2820c0286a21c12820c02820c1286a21c22820c12820c228" + "6a21c32820c22820c328" + "6a21c42820c32820c4286a21c52820c42820c5286a21c62820c52820c6286a21c72820c62820c7286a21c82820c728" + "20c8286a21c92820c828" + "20c9286a21ca2820c92820ca286a21cb2820ca2820cb286a21cc2820cb2820cc286a21cd2820cc2820cd286a21ce28" + "20cd2820ce286a21cf28" + "20ce2820cf286a21d02820cf2820d0286a21d12820d02820d1286a21d22820d12820d2286a21d32820d22820d3286a" + "21d42820d32820d4286a" + "21d52820d42820d5286a21d62820d52820d6286a21d72820d62820d7286a21d82820d72820d8286a21d92820d82820" + "d9286a21da2820d92820" + "da286a21db2820da2820db286a21dc2820db2820dc286a21dd2820dc2820dd286a21de2820dd2820de286a21df2820" + "de2820df286a21e02820" + "df2820e0286a21e12820e02820e1286a21e22820e12820e2286a21e32820e22820e3286a21e42820e32820e4286a21" + "e52820e42820e5286a21" + "e62820e52820e6286a21e72820e62820e7286a21e82820e72820e8286a21e92820e82820e9286a21ea2820e92820ea" + "286a21eb2820ea2820eb" + "286a21ec2820eb2820ec286a21ed2820ec2820ed286a21ee2820ed2820ee286a21ef2820ee2820ef286a21f02820ef" + "2820f0286a21f12820f0" + "2820f1286a21f22820f12820f2286a21f32820f22820f3286a21f42820f32820f4286a21f52820f42820f5286a21f6" + "2820f52820f6286a21f7" + "2820f62820f7286a21f82820f72820f8286a21f92820f82820f9286a21fa2820f92820fa286a21fb2820fa2820fb28" + "6a21fc2820fb2820fc28" + "6a21fd2820fc2820fd286a21fe2820fd2820fe286a21ff2820fe2820ff286a21802920ff282080296a218129208029" + "2081296a218229208129" + "2082296a2183292082292083296a2184292083292084296a2185292084292085296a2186292085292086296a218729" + "2086292087296a218829" + "2087292088296a2189292088292089296a218a29208929208a296a218b29208a29208b296a218c29208b29208c296a" + "218d29208c29208d296a" + "218e29208d29208e296a218f29208e29208f296a219029208f292090296a2191292090292091296a21922920912920" + "92296a21932920922920" + "93296a2194292093292094296a2195292094292095296a2196292095292096296a2197292096292097296a21982920" + "97292098296a21992920" + "98292099296a219a29209929209a296a219b29209a29209b296a219c29209b29209c296a219d29209c29209d296a21" + "9e29209d29209e296a21" + "9f29209e29209f296a21a029209f2920a0296a21a12920a02920a1296a21a22920a12920a2296a21a32920a22920a3" + "296a21a42920a32920a4" + "296a21a52920a42920a5296a21a62920a52920a6296a21a72920a62920a7296a21a82920a72920a8296a21a92920a8" + "2920a9296a21aa2920a9" + "2920aa296a21ab2920aa2920ab296a21ac2920ab2920ac296a21ad2920ac2920ad296a21ae2920ad2920ae296a21af" + "2920ae2920af296a21b0" + "2920af2920b0296a21b12920b02920b1296a21b22920b12920b2296a21b32920b22920b3296a21b42920b32920b429" + "6a21b52920b42920b529" + "6a21b62920b52920b6296a21b72920b62920b7296a21b82920b72920b8296a21b92920b82920b9296a21ba2920b929" + "20ba296a21bb2920ba29" + "20bb296a21bc2920bb2920bc296a21bd2920bc2920bd296a21be2920bd2920be296a21bf2920be2920bf296a21c029" + "20bf2920c0296a21c129" + "20c02920c1296a21c22920c12920c2296a21c32920c22920c3296a21c42920c32920c4296a21c52920c42920c5296a" + "21c62920c52920c6296a" + "21c72920c62920c7296a21c82920c72920c8296a21c92920c82920c9296a21ca2920c92920ca296a21cb2920ca2920" + "cb296a21cc2920cb2920" + "cc296a21cd2920cc2920cd296a21ce2920cd2920ce296a21cf2920ce2920cf296a21d02920cf2920d0296a21d12920" + "d02920d1296a21d22920" + "d12920d2296a21d32920d22920d3296a21d42920d32920d4296a21d52920d42920d5296a21d62920d52920d6296a21" + "d72920d62920d7296a21" + "d82920d72920d8296a21d92920d82920d9296a21da2920d92920da296a21db2920da2920db296a21dc2920db2920dc" + "296a21dd2920dc2920dd" + "296a21de2920dd2920de296a21df2920de2920df296a21e02920df2920e0296a21e12920e02920e1296a21e22920e1" + "2920e2296a21e32920e2" + "2920e3296a21e42920e32920e4296a21e52920e42920e5296a21e62920e52920e6296a21e72920e62920e7296a21e8" + "2920e72920e8296a21e9" + "2920e82920e9296a21ea2920e92920ea296a21eb2920ea2920eb296a21ec2920eb2920ec296a21ed2920ec2920ed29" + "6a21ee2920ed2920ee29" + "6a21ef2920ee2920ef296a21f02920ef2920f0296a21f12920f02920f1296a21f22920f12920f2296a21f32920f229" + "20f3296a21f42920f329" + "20f4296a21f52920f42920f5296a21f62920f52920f6296a21f72920f62920f7296a21f82920f72920f8296a21f929" + "20f82920f9296a21fa29" + "20f92920fa296a21fb2920fa2920fb296a21fc2920fb2920fc296a21fd2920fc2920fd296a21fe2920fd2920fe296a" + "21ff2920fe2920ff296a" + "21802a20ff2920802a6a21812a20802a20812a6a21822a20812a20822a6a21832a20822a20832a6a21842a20832a20" + "842a6a21852a20842a20" + "852a6a21862a20852a20862a6a21872a20862a20872a6a21882a20872a20882a6a21892a20882a20892a6a218a2a20" + "892a208a2a6a218b2a20" + "8a2a208b2a6a218c2a208b2a208c2a6a218d2a208c2a208d2a6a218e2a208d2a208e2a6a218f2a208e2a208f2a6a21" + "902a208f2a20902a6a21" + "912a20902a20912a6a21922a20912a20922a6a21932a20922a20932a6a21942a20932a20942a6a21952a20942a2095" + "2a6a21962a20952a2096" + "2a6a21972a20962a20972a6a21982a20972a20982a6a21992a20982a20992a6a219a2a20992a209a2a6a219b2a209a" + "2a209b2a6a219c2a209b" + "2a209c2a6a219d2a209c2a209d2a6a219e2a209d2a209e2a6a219f2a209e2a209f2a6a21a02a209f2a20a02a6a21a1" + "2a20a02a20a12a6a21a2" + "2a20a12a20a22a6a21a32a20a22a20a32a6a21a42a20a32a20a42a6a21a52a20a42a20a52a6a21a62a20a52a20a62a" + "6a21a72a20a62a20a72a" + "6a21a82a20a72a20a82a6a21a92a20a82a20a92a6a21aa2a20a92a20aa2a6a21ab2a20aa2a20ab2a6a21ac2a20ab2a" + "20ac2a6a21ad2a20ac2a" + "20ad2a6a21ae2a20ad2a20ae2a6a21af2a20ae2a20af2a6a21b02a20af2a20b02a6a21b12a20b02a20b12a6a21b22a" + "20b12a20b22a6a21b32a" + "20b22a20b32a6a21b42a20b32a20b42a6a21b52a20b42a20b52a6a21b62a20b52a20b62a6a21b72a20b62a20b72a6a" + "21b82a20b72a20b82a6a" + "21b92a20b82a20b92a6a21ba2a20b92a20ba2a6a21bb2a20ba2a20bb2a6a21bc2a20bb2a20bc2a6a21bd2a20bc2a20" + "bd2a6a21be2a20bd2a20" + "be2a6a21bf2a20be2a20bf2a6a21c02a20bf2a20c02a6a21c12a20c02a20c12a6a21c22a20c12a20c22a6a21c32a20" + "c22a20c32a6a21c42a20" + "c32a20c42a6a21c52a20c42a20c52a6a21c62a20c52a20c62a6a21c72a20c62a20c72a6a21c82a20c72a20c82a6a21" + "c92a20c82a20c92a6a21" + "ca2a20c92a20ca2a6a21cb2a20ca2a20cb2a6a21cc2a20cb2a20cc2a6a21cd2a20cc2a20cd2a6a21ce2a20cd2a20ce" + "2a6a21cf2a20ce2a20cf" + "2a6a21d02a20cf2a20d02a6a21d12a20d02a20d12a6a21d22a20d12a20d22a6a21d32a20d22a20d32a6a21d42a20d3" + "2a20d42a6a21d52a20d4" + "2a20d52a6a21d62a20d52a20d62a6a21d72a20d62a20d72a6a21d82a20d72a20d82a6a21d92a20d82a20d92a6a21da" + "2a20d92a20da2a6a21db" + "2a20da2a20db2a6a21dc2a20db2a20dc2a6a21dd2a20dc2a20dd2a6a21de2a20dd2a20de2a6a21df2a20de2a20df2a" + "6a21e02a20df2a20e02a" + "6a21e12a20e02a20e12a6a21e22a20e12a20e22a6a21e32a20e22a20e32a6a21e42a20e32a20e42a6a21e52a20e42a" + "20e52a6a21e62a20e52a" + "20e62a6a21e72a20e62a20e72a6a21e82a20e72a20e82a6a21e92a20e82a20e92a6a21ea2a20e92a20ea2a6a21eb2a" + "20ea2a20eb2a6a21ec2a" + "20eb2a20ec2a6a21ed2a20ec2a20ed2a6a21ee2a20ed2a20ee2a6a21ef2a20ee2a20ef2a6a21f02a20ef2a20f02a6a" + "21f12a20f02a20f12a6a" + "21f22a20f12a20f22a6a21f32a20f22a20f32a6a21f42a20f32a20f42a6a21f52a20f42a20f52a6a21f62a20f52a20" + "f62a6a21f72a20f62a20" + "f72a6a21f82a20f72a20f82a6a21f92a20f82a20f92a6a21fa2a20f92a20fa2a6a21fb2a20fa2a20fb2a6a21fc2a20" + "fb2a20fc2a6a21fd2a20" + "fc2a20fd2a6a21fe2a20fd2a20fe2a6a21ff2a20fe2a20ff2a6a21802b20ff2a20802b6a21812b20802b20812b6a21" + "822b20812b20822b6a21" + "832b20822b20832b6a21842b20832b20842b6a21852b20842b20852b6a21862b20852b20862b6a21872b20862b2087" + "2b6a21882b20872b2088" + "2b6a21892b20882b20892b6a218a2b20892b208a2b6a218b2b208a2b208b2b6a218c2b208b2b208c2b6a218d2b208c" + "2b208d2b6a218e2b208d" + "2b208e2b6a218f2b208e2b208f2b6a21902b208f2b20902b6a21912b20902b20912b6a21922b20912b20922b6a2193" + "2b20922b20932b6a2194" + "2b20932b20942b6a21952b20942b20952b6a21962b20952b20962b6a21972b20962b20972b6a21982b20972b20982b" + "6a21992b20982b20992b" + "6a219a2b20992b209a2b6a219b2b209a2b209b2b6a219c2b209b2b209c2b6a219d2b209c2b209d2b6a219e2b209d2b" + "209e2b6a219f2b209e2b" + "209f2b6a21a02b209f2b20a02b6a21a12b20a02b20a12b6a21a22b20a12b20a22b6a21a32b20a22b20a32b6a21a42b" + "20a32b20a42b6a21a52b" + "20a42b20a52b6a21a62b20a52b20a62b6a21a72b20a62b20a72b6a21a82b20a72b20a82b6a21a92b20a82b20a92b6a" + "21aa2b20a92b20aa2b6a" + "21ab2b20aa2b20ab2b6a21ac2b20ab2b20ac2b6a21ad2b20ac2b20ad2b6a21ae2b20ad2b20ae2b6a21af2b20ae2b20" + "af2b6a21b02b20af2b20" + "b02b6a21b12b20b02b20b12b6a21b22b20b12b20b22b6a21b32b20b22b20b32b6a21b42b20b32b20b42b6a21b52b20" + "b42b20b52b6a21b62b20" + "b52b20b62b6a21b72b20b62b20b72b6a21b82b20b72b20b82b6a21b92b20b82b20b92b6a21ba2b20b92b20ba2b6a21" + "bb2b20ba2b20bb2b6a21" + "bc2b20bb2b20bc2b6a21bd2b20bc2b20bd2b6a21be2b20bd2b20be2b6a21bf2b20be2b20bf2b6a21c02b20bf2b20c0" + "2b6a21c12b20c02b20c1" + "2b6a21c22b20c12b20c22b6a21c32b20c22b20c32b6a21c42b20c32b20c42b6a21c52b20c42b20c52b6a21c62b20c5" + "2b20c62b6a21c72b20c6" + "2b20c72b6a21c82b20c72b20c82b6a21c92b20c82b20c92b6a21ca2b20c92b20ca2b6a21cb2b20ca2b20cb2b6a21cc" + "2b20cb2b20cc2b6a21cd" + "2b20cc2b20cd2b6a21ce2b20cd2b20ce2b6a21cf2b20ce2b20cf2b6a21d02b20cf2b20d02b6a21d12b20d02b20d12b" + "6a21d22b20d12b20d22b" + "6a21d32b20d22b20d32b6a21d42b20d32b20d42b6a21d52b20d42b20d52b6a21d62b20d52b20d62b6a21d72b20d62b" + "20d72b6a21d82b20d72b" + "20d82b6a21d92b20d82b20d92b6a21da2b20d92b20da2b6a21db2b20da2b20db2b6a21dc2b20db2b20dc2b6a21dd2b" + "20dc2b20dd2b6a21de2b" + "20dd2b20de2b6a21df2b20de2b20df2b6a21e02b20df2b20e02b6a21e12b20e02b20e12b6a21e22b20e12b20e22b6a" + "21e32b20e22b20e32b6a" + "21e42b20e32b20e42b6a21e52b20e42b20e52b6a21e62b20e52b20e62b6a21e72b20e62b20e72b6a21e82b20e72b20" + "e82b6a21e92b20e82b20" + "e92b6a21ea2b20e92b20ea2b6a21eb2b20ea2b20eb2b6a21ec2b20eb2b20ec2b6a21ed2b20ec2b20ed2b6a21ee2b20" + "ed2b20ee2b6a21ef2b20" + "ee2b20ef2b6a21f02b20ef2b20f02b6a21f12b20f02b20f12b6a21f22b20f12b20f22b6a21f32b20f22b20f32b6a21" + "f42b20f32b20f42b6a21" + "f52b20f42b20f52b6a21f62b20f52b20f62b6a21f72b20f62b20f72b6a21f82b20f72b20f82b6a21f92b20f82b20f9" + "2b6a21fa2b20f92b20fa" + "2b6a21fb2b20fa2b20fb2b6a21fc2b20fb2b20fc2b6a21fd2b20fc2b20fd2b6a21fe2b20fd2b20fe2b6a21ff2b20fe" + "2b20ff2b6a21802c20ff" + "2b20802c6a21812c20802c20812c6a21822c20812c20822c6a21832c20822c20832c6a21842c20832c20842c6a2185" + "2c20842c20852c6a2186" + "2c20852c20862c6a21872c20862c20872c6a21882c20872c20882c6a21892c20882c20892c6a218a2c20892c208a2c" + "6a218b2c208a2c208b2c" + "6a218c2c208b2c208c2c6a218d2c208c2c208d2c6a218e2c208d2c208e2c6a218f2c208e2c208f2c6a21902c208f2c" + "20902c6a21912c20902c" + "20912c6a21922c20912c20922c6a21932c20922c20932c6a21942c20932c20942c6a21952c20942c20952c6a21962c" + "20952c20962c6a21972c" + "20962c20972c6a21982c20972c20982c6a21992c20982c20992c6a219a2c20992c209a2c6a219b2c209a2c209b2c6a" + "219c2c209b2c209c2c6a" + "219d2c209c2c209d2c6a219e2c209d2c209e2c6a219f2c209e2c209f2c6a21a02c209f2c20a02c6a21a12c20a02c20" + "a12c6a21a22c20a12c20" + "a22c6a21a32c20a22c20a32c6a21a42c20a32c20a42c6a21a52c20a42c20a52c6a21a62c20a52c20a62c6a21a72c20" + "a62c20a72c6a21a82c20" + "a72c20a82c6a21a92c20a82c20a92c6a21aa2c20a92c20aa2c6a21ab2c20aa2c20ab2c6a21ac2c20ab2c20ac2c6a21" + "ad2c20ac2c20ad2c6a21" + "ae2c20ad2c20ae2c6a21af2c20ae2c20af2c6a21b02c20af2c20b02c6a21b12c20b02c20b12c6a21b22c20b12c20b2" + "2c6a21b32c20b22c20b3" + "2c6a21b42c20b32c20b42c6a21b52c20b42c20b52c6a21b62c20b52c20b62c6a21b72c20b62c20b72c6a21b82c20b7" + "2c20b82c6a21b92c20b8" + "2c20b92c6a21ba2c20b92c20ba2c6a21bb2c20ba2c20bb2c6a21bc2c20bb2c20bc2c6a21bd2c20bc2c20bd2c6a21be" + "2c20bd2c20be2c6a21bf" + "2c20be2c20bf2c6a21c02c20bf2c20c02c6a21c12c20c02c20c12c6a21c22c20c12c20c22c6a21c32c20c22c20c32c" + "6a21c42c20c32c20c42c" + "6a21c52c20c42c20c52c6a21c62c20c52c20c62c6a21c72c20c62c20c72c6a21c82c20c72c20c82c6a21c92c20c82c" + "20c92c6a21ca2c20c92c" + "20ca2c6a21cb2c20ca2c20cb2c6a21cc2c20cb2c20cc2c6a21cd2c20cc2c20cd2c6a21ce2c20cd2c20ce2c6a21cf2c" + "20ce2c20cf2c6a21d02c" + "20cf2c20d02c6a21d12c20d02c20d12c6a21d22c20d12c20d22c6a21d32c20d22c20d32c6a21d42c20d32c20d42c6a" + "21d52c20d42c20d52c6a" + "21d62c20d52c20d62c6a21d72c20d62c20d72c6a21d82c20d72c20d82c6a21d92c20d82c20d92c6a21da2c20d92c20" + "da2c6a21db2c20da2c20" + "db2c6a21dc2c20db2c20dc2c6a21dd2c20dc2c20dd2c6a21de2c20dd2c20de2c6a21df2c20de2c20df2c6a21e02c20" + "df2c20e02c6a21e12c20" + "e02c20e12c6a21e22c20e12c20e22c6a21e32c20e22c20e32c6a21e42c20e32c20e42c6a21e52c20e42c20e52c6a21" + "e62c20e52c20e62c6a21" + "e72c20e62c20e72c6a21e82c20e72c20e82c6a21e92c20e82c20e92c6a21ea2c20e92c20ea2c6a21eb2c20ea2c20eb" + "2c6a21ec2c20eb2c20ec" + "2c6a21ed2c20ec2c20ed2c6a21ee2c20ed2c20ee2c6a21ef2c20ee2c20ef2c6a21f02c20ef2c20f02c6a21f12c20f0" + "2c20f12c6a21f22c20f1" + "2c20f22c6a21f32c20f22c20f32c6a21f42c20f32c20f42c6a21f52c20f42c20f52c6a21f62c20f52c20f62c6a21f7" + "2c20f62c20f72c6a21f8" + "2c20f72c20f82c6a21f92c20f82c20f92c6a21fa2c20f92c20fa2c6a21fb2c20fa2c20fb2c6a21fc2c20fb2c20fc2c" + "6a21fd2c20fc2c20fd2c" + "6a21fe2c20fd2c20fe2c6a21ff2c20fe2c20ff2c6a21802d20ff2c20802d6a21812d20802d20812d6a21822d20812d" + "20822d6a21832d20822d" + "20832d6a21842d20832d20842d6a21852d20842d20852d6a21862d20852d20862d6a21872d20862d20872d6a21882d" + "20872d20882d6a21892d" + "20882d20892d6a218a2d20892d208a2d6a218b2d208a2d208b2d6a218c2d208b2d208c2d6a218d2d208c2d208d2d6a" + "218e2d208d2d208e2d6a" + "218f2d208e2d208f2d6a21902d208f2d20902d6a21912d20902d20912d6a21922d20912d20922d6a21932d20922d20" + "932d6a21942d20932d20" + "942d6a21952d20942d20952d6a21962d20952d20962d6a21972d20962d20972d6a21982d20972d20982d6a21992d20" + "982d20992d6a219a2d20" + "992d209a2d6a219b2d209a2d209b2d6a219c2d209b2d209c2d6a219d2d209c2d209d2d6a219e2d209d2d209e2d6a21" + "9f2d209e2d209f2d6a21" + "a02d209f2d20a02d6a21a12d20a02d20a12d6a21a22d20a12d20a22d6a21a32d20a22d20a32d6a21a42d20a32d20a4" + "2d6a21a52d20a42d20a5" + "2d6a21a62d20a52d20a62d6a21a72d20a62d20a72d6a21a82d20a72d20a82d6a21a92d20a82d20a92d6a21aa2d20a9" + "2d20aa2d6a21ab2d20aa" + "2d20ab2d6a21ac2d20ab2d20ac2d6a21ad2d20ac2d20ad2d6a21ae2d20ad2d20ae2d6a21af2d20ae2d20af2d6a21b0" + "2d20af2d20b02d6a21b1" + "2d20b02d20b12d6a21b22d20b12d20b22d6a21b32d20b22d20b32d6a21b42d20b32d20b42d6a21b52d20b42d20b52d" + "6a21b62d20b52d20b62d" + "6a21b72d20b62d20b72d6a21b82d20b72d20b82d6a21b92d20b82d20b92d6a21ba2d20b92d20ba2d6a21bb2d20ba2d" + "20bb2d6a21bc2d20bb2d" + "20bc2d6a21bd2d20bc2d20bd2d6a21be2d20bd2d20be2d6a21bf2d20be2d20bf2d6a21c02d20bf2d20c02d6a21c12d" + "20c02d20c12d6a21c22d" + "20c12d20c22d6a21c32d20c22d20c32d6a21c42d20c32d20c42d6a21c52d20c42d20c52d6a21c62d20c52d20c62d6a" + "21c72d20c62d20c72d6a" + "21c82d20c72d20c82d6a21c92d20c82d20c92d6a21ca2d20c92d20ca2d6a21cb2d20ca2d20cb2d6a21cc2d20cb2d20" + "cc2d6a21cd2d20cc2d20" + "cd2d6a21ce2d20cd2d20ce2d6a21cf2d20ce2d20cf2d6a21d02d20cf2d20d02d6a21d12d20d02d20d12d6a21d22d20" + "d12d20d22d6a21d32d20" + "d22d20d32d6a21d42d20d32d20d42d6a21d52d20d42d20d52d6a21d62d20d52d20d62d6a21d72d20d62d20d72d6a21" + "d82d20d72d20d82d6a21" + "d92d20d82d20d92d6a21da2d20d92d20da2d6a21db2d20da2d20db2d6a21dc2d20db2d20dc2d6a21dd2d20dc2d20dd" + "2d6a21de2d20dd2d20de" + "2d6a21df2d20de2d20df2d6a21e02d20df2d20e02d6a21e12d20e02d20e12d6a21e22d20e12d20e22d6a21e32d20e2" + "2d20e32d6a21e42d20e3" + "2d20e42d6a21e52d20e42d20e52d6a21e62d20e52d20e62d6a21e72d20e62d20e72d6a21e82d20e72d20e82d6a21e9" + "2d20e82d20e92d6a21ea" + "2d20e92d20ea2d6a21eb2d20ea2d20eb2d6a21ec2d20eb2d20ec2d6a21ed2d20ec2d20ed2d6a21ee2d20ed2d20ee2d" + "6a21ef2d20ee2d20ef2d" + "6a21f02d20ef2d20f02d6a21f12d20f02d20f12d6a21f22d20f12d20f22d6a21f32d20f22d20f32d6a21f42d20f32d" + "20f42d6a21f52d20f42d" + "20f52d6a21f62d20f52d20f62d6a21f72d20f62d20f72d6a21f82d20f72d20f82d6a21f92d20f82d20f92d6a21fa2d" + "20f92d20fa2d6a21fb2d" + "20fa2d20fb2d6a21fc2d20fb2d20fc2d6a21fd2d20fc2d20fd2d6a21fe2d20fd2d20fe2d6a21ff2d20fe2d20ff2d6a" + "21802e20ff2d20802e6a" + "21812e20802e20812e6a21822e20812e20822e6a21832e20822e20832e6a21842e20832e20842e6a21852e20842e20" + "852e6a21862e20852e20" + "862e6a21872e20862e20872e6a21882e20872e20882e6a21892e20882e20892e6a218a2e20892e208a2e6a218b2e20" + "8a2e208b2e6a218c2e20" + "8b2e208c2e6a218d2e208c2e208d2e6a218e2e208d2e208e2e6a218f2e208e2e208f2e6a21902e208f2e20902e6a21" + "912e20902e20912e6a21" + "922e20912e20922e6a21932e20922e20932e6a21942e20932e20942e6a21952e20942e20952e6a21962e20952e2096" + "2e6a21972e20962e2097" + "2e6a21982e20972e20982e6a21992e20982e20992e6a219a2e20992e209a2e6a219b2e209a2e209b2e6a219c2e209b" + "2e209c2e6a219d2e209c" + "2e209d2e6a219e2e209d2e209e2e6a219f2e209e2e209f2e6a21a02e209f2e20a02e6a21a12e20a02e20a12e6a21a2" + "2e20a12e20a22e6a21a3" + "2e20a22e20a32e6a21a42e20a32e20a42e6a21a52e20a42e20a52e6a21a62e20a52e20a62e6a21a72e20a62e20a72e" + "6a21a82e20a72e20a82e" + "6a21a92e20a82e20a92e6a21aa2e20a92e20aa2e6a21ab2e20aa2e20ab2e6a21ac2e20ab2e20ac2e6a21ad2e20ac2e" + "20ad2e6a21ae2e20ad2e" + "20ae2e6a21af2e20ae2e20af2e6a21b02e20af2e20b02e6a21b12e20b02e20b12e6a21b22e20b12e20b22e6a21b32e" + "20b22e20b32e6a21b42e" + "20b32e20b42e6a21b52e20b42e20b52e6a21b62e20b52e20b62e6a21b72e20b62e20b72e6a21b82e20b72e20b82e6a" + "21b92e20b82e20b92e6a" + "21ba2e20b92e20ba2e6a21bb2e20ba2e20bb2e6a21bc2e20bb2e20bc2e6a21bd2e20bc2e20bd2e6a21be2e20bd2e20" + "be2e6a21bf2e20be2e20" + "bf2e6a21c02e20bf2e20c02e6a21c12e20c02e20c12e6a21c22e20c12e20c22e6a21c32e20c22e20c32e6a21c42e20" + "c32e20c42e6a21c52e20" + "c42e20c52e6a21c62e20c52e20c62e6a21c72e20c62e20c72e6a21c82e20c72e20c82e6a21c92e20c82e20c92e6a21" + "ca2e20c92e20ca2e6a21" + "cb2e20ca2e20cb2e6a21cc2e20cb2e20cc2e6a21cd2e20cc2e20cd2e6a21ce2e20cd2e20ce2e6a21cf2e20ce2e20cf" + "2e6a21d02e20cf2e20d0" + "2e6a21d12e20d02e20d12e6a21d22e20d12e20d22e6a21d32e20d22e20d32e6a21d42e20d32e20d42e6a21d52e20d4" + "2e20d52e6a21d62e20d5" + "2e20d62e6a21d72e20d62e20d72e6a21d82e20d72e20d82e6a21d92e20d82e20d92e6a21da2e20d92e20da2e6a21db" + "2e20da2e20db2e6a21dc" + "2e20db2e20dc2e6a21dd2e20dc2e20dd2e6a21de2e20dd2e20de2e6a21df2e20de2e20df2e6a21e02e20df2e20e02e" + "6a21e12e20e02e20e12e" + "6a21e22e20e12e20e22e6a21e32e20e22e20e32e6a21e42e20e32e20e42e6a21e52e20e42e20e52e6a21e62e20e52e" + "20e62e6a21e72e20e62e" + "20e72e6a21e82e20e72e20e82e6a21e92e20e82e20e92e6a21ea2e20e92e20ea2e6a21eb2e20ea2e20eb2e6a21ec2e" + "20eb2e20ec2e6a21ed2e" + "20ec2e20ed2e6a21ee2e20ed2e20ee2e6a21ef2e20ee2e20ef2e6a21f02e20ef2e20f02e6a21f12e20f02e20f12e6a" + "21f22e20f12e20f22e6a" + "21f32e20f22e20f32e6a21f42e20f32e20f42e6a21f52e20f42e20f52e6a21f62e20f52e20f62e6a21f72e20f62e20" + "f72e6a21f82e20f72e20" + "f82e6a21f92e20f82e20f92e6a21fa2e20f92e20fa2e6a21fb2e20fa2e20fb2e6a21fc2e20fb2e20fc2e6a21fd2e20" + "fc2e20fd2e6a21fe2e20" + "fd2e20fe2e6a21ff2e20fe2e20ff2e6a21802f20ff2e20802f6a21812f20802f20812f6a21822f20812f20822f6a21" + "832f20822f20832f6a21" + "842f20832f20842f6a21852f20842f20852f6a21862f20852f20862f6a21872f20862f20872f6a21882f20872f2088" + "2f6a21892f20882f2089" + "2f6a218a2f20892f208a2f6a218b2f208a2f208b2f6a218c2f208b2f208c2f6a218d2f208c2f208d2f6a218e2f208d" + "2f208e2f6a218f2f208e" + "2f208f2f6a21902f208f2f20902f6a21912f20902f20912f6a21922f20912f20922f6a21932f20922f20932f6a2194" + "2f20932f20942f6a2195" + "2f20942f20952f6a21962f20952f20962f6a21972f20962f20972f6a21982f20972f20982f6a21992f20982f20992f" + "6a219a2f20992f209a2f" + "6a219b2f209a2f209b2f6a219c2f209b2f209c2f6a219d2f209c2f209d2f6a219e2f209d2f209e2f6a219f2f209e2f" + "209f2f6a21a02f209f2f" + "20a02f6a21a12f20a02f20a12f6a21a22f20a12f20a22f6a21a32f20a22f20a32f6a21a42f20a32f20a42f6a21a52f" + "20a42f20a52f6a21a62f" + "20a52f20a62f6a21a72f20a62f20a72f6a21a82f20a72f20a82f6a21a92f20a82f20a92f6a21aa2f20a92f20aa2f6a" + "21ab2f20aa2f20ab2f6a" + "21ac2f20ab2f20ac2f6a21ad2f20ac2f20ad2f6a21ae2f20ad2f20ae2f6a21af2f20ae2f20af2f6a21b02f20af2f20" + "b02f6a21b12f20b02f20" + "b12f6a21b22f20b12f20b22f6a21b32f20b22f20b32f6a21b42f20b32f20b42f6a21b52f20b42f20b52f6a21b62f20" + "b52f20b62f6a21b72f20" + "b62f20b72f6a21b82f20b72f20b82f6a21b92f20b82f20b92f6a21ba2f20b92f20ba2f6a21bb2f20ba2f20bb2f6a21" + "bc2f20bb2f20bc2f6a21" + "bd2f20bc2f20bd2f6a21be2f20bd2f20be2f6a21bf2f20be2f20bf2f6a21c02f20bf2f20c02f6a21c12f20c02f20c1" + "2f6a21c22f20c12f20c2" + "2f6a21c32f20c22f20c32f6a21c42f20c32f20c42f6a21c52f20c42f20c52f6a21c62f20c52f20c62f6a21c72f20c6" + "2f20c72f6a21c82f20c7" + "2f20c82f6a21c92f20c82f20c92f6a21ca2f20c92f20ca2f6a21cb2f20ca2f20cb2f6a21cc2f20cb2f20cc2f6a21cd" + "2f20cc2f20cd2f6a21ce" + "2f20cd2f20ce2f6a21cf2f20ce2f20cf2f6a21d02f20cf2f20d02f6a21d12f20d02f20d12f6a21d22f20d12f20d22f" + "6a21d32f20d22f20d32f" + "6a21d42f20d32f20d42f6a21d52f20d42f20d52f6a21d62f20d52f20d62f6a21d72f20d62f20d72f6a21d82f20d72f" + "20d82f6a21d92f20d82f" + "20d92f6a21da2f20d92f20da2f6a21db2f20da2f20db2f6a21dc2f20db2f20dc2f6a21dd2f20dc2f20dd2f6a21de2f" + "20dd2f20de2f6a21df2f" + "20de2f20df2f6a21e02f20df2f20e02f6a21e12f20e02f20e12f6a21e22f20e12f20e22f6a21e32f20e22f20e32f6a" + "21e42f20e32f20e42f6a" + "21e52f20e42f20e52f6a21e62f20e52f20e62f6a21e72f20e62f20e72f6a21e82f20e72f20e82f6a21e92f20e82f20" + "e92f6a21ea2f20e92f20" + "ea2f6a21eb2f20ea2f20eb2f6a21ec2f20eb2f20ec2f6a21ed2f20ec2f20ed2f6a21ee2f20ed2f20ee2f6a21ef2f20" + "ee2f20ef2f6a21f02f20" + "ef2f20f02f6a21f12f20f02f20f12f6a21f22f20f12f20f22f6a21f32f20f22f20f32f6a21f42f20f32f20f42f6a21" + "f52f20f42f20f52f6a21" + "f62f20f52f20f62f6a21f72f20f62f20f72f6a21f82f20f72f20f82f6a21f92f20f82f20f92f6a21fa2f20f92f20fa" + "2f6a21fb2f20fa2f20fb" + "2f6a21fc2f20fb2f20fc2f6a21fd2f20fc2f20fd2f6a21fe2f20fd2f20fe2f6a21ff2f20fe2f20ff2f6a21803020ff" + "2f2080306a2181302080" + "302081306a2182302081302082306a2183302082302083306a2184302083302084306a2185302084302085306a2186" + "302085302086306a2187" + "302086302087306a2188302087302088306a2189302088302089306a218a30208930208a306a218b30208a30208b30" + "6a218c30208b30208c30" + "6a218d30208c30208d306a218e30208d30208e306a218f30208e30208f306a219030208f302090306a219130209030" + "2091306a219230209130" + "2092306a2193302092302093306a2194302093302094306a2195302094302095306a2196302095302096306a219730" + "2096302097306a219830" + "2097302098306a2199302098302099306a219a30209930209a306a219b30209a30209b306a219c30209b30209c306a" + "219d30209c30209d306a" + "219e30209d30209e306a219f30209e30209f306a21a030209f3020a0306a21a13020a03020a1306a21a23020a13020" + "a2306a21a33020a23020" + "a3306a21a43020a33020a4306a21a53020a43020a5306a21a63020a53020a6306a21a73020a63020a7306a21a83020" + "a73020a8306a21a93020" + "a83020a9306a21aa3020a93020aa306a21ab3020aa3020ab306a21ac3020ab3020ac306a21ad3020ac3020ad306a21" + "ae3020ad3020ae306a21" + "af3020ae3020af306a21b03020af3020b0306a21b13020b03020b1306a21b23020b13020b2306a21b33020b23020b3" + "306a21b43020b33020b4" + "306a21b53020b43020b5306a21b63020b53020b6306a21b73020b63020b7306a21b83020b73020b8306a21b93020b8" + "3020b9306a21ba3020b9" + "3020ba306a21bb3020ba3020bb306a21bc3020bb3020bc306a21bd3020bc3020bd306a21be3020bd3020be306a21bf" + "3020be3020bf306a21c0" + "3020bf3020c0306a21c13020c03020c1306a21c23020c13020c2306a21c33020c23020c3306a21c43020c33020c430" + "6a21c53020c43020c530" + "6a21c63020c53020c6306a21c73020c63020c7306a21c83020c73020c8306a21c93020c83020c9306a21ca3020c930" + "20ca306a21cb3020ca30" + "20cb306a21cc3020cb3020cc306a21cd3020cc3020cd306a21ce3020cd3020ce306a21cf3020ce3020cf306a21d030" + "20cf3020d0306a21d130" + "20d03020d1306a21d23020d13020d2306a21d33020d23020d3306a21d43020d33020d4306a21d53020d43020d5306a" + "21d63020d53020d6306a" + "21d73020d63020d7306a21d83020d73020d8306a21d93020d83020d9306a21da3020d93020da306a21db3020da3020" + "db306a21dc3020db3020" + "dc306a21dd3020dc3020dd306a21de3020dd3020de306a21df3020de3020df306a21e03020df3020e0306a21e13020" + "e03020e1306a21e23020" + "e13020e2306a21e33020e23020e3306a21e43020e33020e4306a21e53020e43020e5306a21e63020e53020e6306a21" + "e73020e63020e7306a21" + "e83020e73020e8306a21e93020e83020e9306a21ea3020e93020ea306a21eb3020ea3020eb306a21ec3020eb3020ec" + "306a21ed3020ec3020ed" + "306a21ee3020ed3020ee306a21ef3020ee3020ef306a21f03020ef3020f0306a21f13020f03020f1306a21f23020f1" + "3020f2306a21f33020f2" + "3020f3306a21f43020f33020f4306a21f53020f43020f5306a21f63020f53020f6306a21f73020f63020f7306a21f8" + "3020f73020f8306a21f9" + "3020f83020f9306a21fa3020f93020fa306a21fb3020fa3020fb306a21fc3020fb3020fc306a21fd3020fc3020fd30" + "6a21fe3020fd3020fe30" + "6a21ff3020fe3020ff306a21803120ff302080316a2181312080312081316a2182312081312082316a218331208231" + "2083316a218431208331" + "2084316a2185312084312085316a2186312085312086316a2187312086312087316a2188312087312088316a218931" + "2088312089316a218a31" + "208931208a316a218b31208a31208b316a218c31208b31208c316a218d31208c31208d316a218e31208d31208e316a" + "218f31208e31208f316a" + "219031208f312090316a2191312090312091316a2192312091312092316a2193312092312093316a21943120933120" + "94316a21953120943120" + "95316a2196312095312096316a2197312096312097316a2198312097312098316a2199312098312099316a219a3120" + "9931209a316a219b3120" + "9a31209b316a219c31209b31209c316a219d31209c31209d316a219e31209d31209e316a219f31209e31209f316a21" + "a031209f3120a0316a21" + "a13120a03120a1316a21a23120a13120a2316a21a33120a23120a3316a21a43120a33120a4316a21a53120a43120a5" + "316a21a63120a53120a6" + "316a21a73120a63120a7316a21a83120a73120a8316a21a93120a83120a9316a21aa3120a93120aa316a21ab3120aa" + "3120ab316a21ac3120ab" + "3120ac316a21ad3120ac3120ad316a21ae3120ad3120ae316a21af3120ae3120af316a21b03120af3120b0316a21b1" + "3120b03120b1316a21b2" + "3120b13120b2316a21b33120b23120b3316a21b43120b33120b4316a21b53120b43120b5316a21b63120b53120b631" + "6a21b73120b63120b731" + "6a21b83120b73120b8316a21b93120b83120b9316a21ba3120b93120ba316a21bb3120ba3120bb316a21bc3120bb31" + "20bc316a21bd3120bc31" + "20bd316a21be3120bd3120be316a21bf3120be3120bf316a21c03120bf3120c0316a21c13120c03120c1316a21c231" + "20c13120c2316a21c331" + "20c23120c3316a21c43120c33120c4316a21c53120c43120c5316a21c63120c53120c6316a21c73120c63120c7316a" + "21c83120c73120c8316a" + "21c93120c83120c9316a21ca3120c93120ca316a21cb3120ca3120cb316a21cc3120cb3120cc316a21cd3120cc3120" + "cd316a21ce3120cd3120" + "ce316a21cf3120ce3120cf316a21d03120cf3120d0316a21d13120d03120d1316a21d23120d13120d2316a21d33120" + "d23120d3316a21d43120" + "d33120d4316a21d53120d43120d5316a21d63120d53120d6316a21d73120d63120d7316a21d83120d73120d8316a21" + "d93120d83120d9316a21" + "da3120d93120da316a21db3120da3120db316a21dc3120db3120dc316a21dd3120dc3120dd316a21de3120dd3120de" + "316a21df3120de3120df" + "316a21e03120df3120e0316a21e13120e03120e1316a21e23120e13120e2316a21e33120e23120e3316a21e43120e3" + "3120e4316a21e53120e4" + "3120e5316a21e63120e53120e6316a21e73120e63120e7316a21e83120e73120e8316a21e93120e83120e9316a21ea" + "3120e93120ea316a21eb" + "3120ea3120eb316a21ec3120eb3120ec316a21ed3120ec3120ed316a21ee3120ed3120ee316a21ef3120ee3120ef31" + "6a21f03120ef3120f031" + "6a21f13120f03120f1316a21f23120f13120f2316a21f33120f23120f3316a21f43120f33120f4316a21f53120f431" + "20f5316a21f63120f531" + "20f6316a21f73120f63120f7316a21f83120f73120f8316a21f93120f83120f9316a21fa3120f93120fa316a21fb31" + "20fa3120fb316a21fc31" + "20fb3120fc316a21fd3120fc3120fd316a21fe3120fd3120fe316a21ff3120fe3120ff316a21803220ff312080326a" + "2181322080322081326a" + "2182322081322082326a2183322082322083326a2184322083322084326a2185322084322085326a21863220853220" + "86326a21873220863220" + "87326a2188322087322088326a2189322088322089326a218a32208932208a326a218b32208a32208b326a218c3220" + "8b32208c326a218d3220" + "8c32208d326a218e32208d32208e326a218f32208e32208f326a219032208f322090326a2191322090322091326a21" + "92322091322092326a21" + "93322092322093326a2194322093322094326a2195322094322095326a2196322095322096326a2197322096322097" + "326a2198322097322098" + "326a2199322098322099326a219a32209932209a326a219b32209a32209b326a219c32209b32209c326a219d32209c" + "32209d326a219e32209d" + "32209e326a219f32209e32209f326a21a032209f3220a0326a21a13220a03220a1326a21a23220a13220a2326a21a3" + "3220a23220a3326a21a4" + "3220a33220a4326a21a53220a43220a5326a21a63220a53220a6326a21a73220a63220a7326a21a83220a73220a832" + "6a21a93220a83220a932" + "6a21aa3220a93220aa326a21ab3220aa3220ab326a21ac3220ab3220ac326a21ad3220ac3220ad326a21ae3220ad32" + "20ae326a21af3220ae32" + "20af326a21b03220af3220b0326a21b13220b03220b1326a21b23220b13220b2326a21b33220b23220b3326a21b432" + "20b33220b4326a21b532" + "20b43220b5326a21b63220b53220b6326a21b73220b63220b7326a21b83220b73220b8326a21b93220b83220b9326a" + "21ba3220b93220ba326a" + "21bb3220ba3220bb326a21bc3220bb3220bc326a21bd3220bc3220bd326a21be3220bd3220be326a21bf3220be3220" + "bf326a21c03220bf3220" + "c0326a21c13220c03220c1326a21c23220c13220c2326a21c33220c23220c3326a21c43220c33220c4326a21c53220" + "c43220c5326a21c63220" + "c53220c6326a21c73220c63220c7326a21c83220c73220c8326a21c93220c83220c9326a21ca3220c93220ca326a21" + "cb3220ca3220cb326a21" + "cc3220cb3220cc326a21cd3220cc3220cd326a21ce3220cd3220ce326a21cf3220ce3220cf326a21d03220cf3220d0" + "326a21d13220d03220d1" + "326a21d23220d13220d2326a21d33220d23220d3326a21d43220d33220d4326a21d53220d43220d5326a21d63220d5" + "3220d6326a21d73220d6" + "3220d7326a21d83220d73220d8326a21d93220d83220d9326a21da3220d93220da326a21db3220da3220db326a21dc" + "3220db3220dc326a21dd" + "3220dc3220dd326a21de3220dd3220de326a21df3220de3220df326a21e03220df3220e0326a21e13220e03220e132" + "6a21e23220e13220e232" + "6a21e33220e23220e3326a21e43220e33220e4326a21e53220e43220e5326a21e63220e53220e6326a21e73220e632" + "20e7326a21e83220e732" + "20e8326a21e93220e83220e9326a21ea3220e93220ea326a21eb3220ea3220eb326a21ec3220eb3220ec326a21ed32" + "20ec3220ed326a21ee32" + "20ed3220ee326a21ef3220ee3220ef326a21f03220ef3220f0326a21f13220f03220f1326a21f23220f13220f2326a" + "21f33220f23220f3326a" + "21f43220f33220f4326a21f53220f43220f5326a21f63220f53220f6326a21f73220f63220f7326a21f83220f73220" + "f8326a21f93220f83220" + "f9326a21fa3220f93220fa326a21fb3220fa3220fb326a21fc3220fb3220fc326a21fd3220fc3220fd326a21fe3220" + "fd3220fe326a21ff3220" + "fe3220ff326a21803320ff322080336a2181332080332081336a2182332081332082336a2183332082332083336a21" + "84332083332084336a21" + "85332084332085336a2186332085332086336a2187332086332087336a2188332087332088336a2189332088332089" + "336a218a33208933208a" + "336a218b33208a33208b336a218c33208b33208c336a218d33208c33208d336a218e33208d33208e336a218f33208e" + "33208f336a219033208f" + "332090336a2191332090332091336a2192332091332092336a2193332092332093336a2194332093332094336a2195" + "332094332095336a2196" + "332095332096336a2197332096332097336a2198332097332098336a2199332098332099336a219a33209933209a33" + "6a219b33209a33209b33" + "6a219c33209b33209c336a219d33209c33209d336a219e33209d33209e336a219f33209e33209f336a21a033209f33" + "20a0336a21a13320a033" + "20a1336a21a23320a13320a2336a21a33320a23320a3336a21a43320a33320a4336a21a53320a43320a5336a21a633" + "20a53320a6336a21a733" + "20a63320a7336a21a83320a73320a8336a21a93320a83320a9336a21aa3320a93320aa336a21ab3320aa3320ab336a" + "21ac3320ab3320ac336a" + "21ad3320ac3320ad336a21ae3320ad3320ae336a21af3320ae3320af336a21b03320af3320b0336a21b13320b03320" + "b1336a21b23320b13320" + "b2336a21b33320b23320b3336a21b43320b33320b4336a21b53320b43320b5336a21b63320b53320b6336a21b73320" + "b63320b7336a21b83320" + "b73320b8336a21b93320b83320b9336a21ba3320b93320ba336a21bb3320ba3320bb336a21bc3320bb3320bc336a21" + "bd3320bc3320bd336a21" + "be3320bd3320be336a21bf3320be3320bf336a21c03320bf3320c0336a21c13320c03320c1336a21c23320c13320c2" + "336a21c33320c23320c3" + "336a21c43320c33320c4336a21c53320c43320c5336a21c63320c53320c6336a21c73320c63320c7336a21c83320c7" + "3320c8336a21c93320c8" + "3320c9336a21ca3320c93320ca336a21cb3320ca3320cb336a21cc3320cb3320cc336a21cd3320cc3320cd336a21ce" + "3320cd3320ce336a21cf" + "3320ce3320cf336a21d03320cf3320d0336a21d13320d03320d1336a21d23320d13320d2336a21d33320d23320d333" + "6a21d43320d33320d433" + "6a21d53320d43320d5336a21d63320d53320d6336a21d73320d63320d7336a21d83320d73320d8336a21d93320d833" + "20d9336a21da3320d933" + "20da336a21db3320da3320db336a21dc3320db3320dc336a21dd3320dc3320dd336a21de3320dd3320de336a21df33" + "20de3320df336a21e033" + "20df3320e0336a21e13320e03320e1336a21e23320e13320e2336a21e33320e23320e3336a21e43320e33320e4336a" + "21e53320e43320e5336a" + "21e63320e53320e6336a21e73320e63320e7336a21e83320e73320e8336a21e93320e83320e9336a21ea3320e93320" + "ea336a21eb3320ea3320" + "eb336a21ec3320eb3320ec336a21ed3320ec3320ed336a21ee3320ed3320ee336a21ef3320ee3320ef336a21f03320" + "ef3320f0336a21f13320" + "f03320f1336a21f23320f13320f2336a21f33320f23320f3336a21f43320f33320f4336a21f53320f43320f5336a21" + "f63320f53320f6336a21" + "f73320f63320f7336a21f83320f73320f8336a21f93320f83320f9336a21fa3320f93320fa336a21fb3320fa3320fb" + "336a21fc3320fb3320fc" + "336a21fd3320fc3320fd336a21fe3320fd3320fe336a21ff3320fe3320ff336a21803420ff332080346a2181342080" + "342081346a2182342081" + "342082346a2183342082342083346a2184342083342084346a2185342084342085346a2186342085342086346a2187" + "342086342087346a2188" + "342087342088346a2189342088342089346a218a34208934208a346a218b34208a34208b346a218c34208b34208c34" + "6a218d34208c34208d34" + "6a218e34208d34208e346a218f34208e34208f346a219034208f342090346a2191342090342091346a219234209134" + "2092346a219334209234" + "2093346a2194342093342094346a2195342094342095346a2196342095342096346a2197342096342097346a219834" + "2097342098346a219934" + "2098342099346a219a34209934209a346a219b34209a34209b346a219c34209b34209c346a219d34209c34209d346a" + "219e34209d34209e346a" + "219f34209e34209f346a21a034209f3420a0346a21a13420a03420a1346a21a23420a13420a2346a21a33420a23420" + "a3346a21a43420a33420" + "a4346a21a53420a43420a5346a21a63420a53420a6346a21a73420a63420a7346a21a83420a73420a8346a21a93420" + "a83420a9346a21aa3420" + "a93420aa346a21ab3420aa3420ab346a21ac3420ab3420ac346a21ad3420ac3420ad346a21ae3420ad3420ae346a21" + "af3420ae3420af346a21" + "b03420af3420b0346a21b13420b03420b1346a21b23420b13420b2346a21b33420b23420b3346a21b43420b33420b4" + "346a21b53420b43420b5" + "346a21b63420b53420b6346a21b73420b63420b7346a21b83420b73420b8346a21b93420b83420b9346a21ba3420b9" + "3420ba346a21bb3420ba" + "3420bb346a21bc3420bb3420bc346a21bd3420bc3420bd346a21be3420bd3420be346a21bf3420be3420bf346a21c0" + "3420bf3420c0346a21c1" + "3420c03420c1346a21c23420c13420c2346a21c33420c23420c3346a21c43420c33420c4346a21c53420c43420c534" + "6a21c63420c53420c634" + "6a21c73420c63420c7346a21c83420c73420c8346a21c93420c83420c9346a21ca3420c93420ca346a21cb3420ca34" + "20cb346a21cc3420cb34" + "20cc346a21cd3420cc3420cd346a21ce3420cd3420ce346a21cf3420ce3420cf346a21d03420cf3420d0346a21d134" + "20d03420d1346a21d234" + "20d13420d2346a21d33420d23420d3346a21d43420d33420d4346a21d53420d43420d5346a21d63420d53420d6346a" + "21d73420d63420d7346a" + "21d83420d73420d8346a21d93420d83420d9346a21da3420d93420da346a21db3420da3420db346a21dc3420db3420" + "dc346a21dd3420dc3420" + "dd346a21de3420dd3420de346a21df3420de3420df346a21e03420df3420e0346a21e13420e03420e1346a21e23420" + "e13420e2346a21e33420" + "e23420e3346a21e43420e33420e4346a21e53420e43420e5346a21e63420e53420e6346a21e73420e63420e7346a21" + "e83420e73420e8346a21" + "e93420e83420e9346a21ea3420e93420ea346a21eb3420ea3420eb346a21ec3420eb3420ec346a21ed3420ec3420ed" + "346a21ee3420ed3420ee" + "346a21ef3420ee3420ef346a21f03420ef3420f0346a21f13420f03420f1346a21f23420f13420f2346a21f33420f2" + "3420f3346a21f43420f3" + "3420f4346a21f53420f43420f5346a21f63420f53420f6346a21f73420f63420f7346a21f83420f73420f8346a21f9" + "3420f83420f9346a21fa" + "3420f93420fa346a21fb3420fa3420fb346a21fc3420fb3420fc346a21fd3420fc3420fd346a21fe3420fd3420fe34" + "6a21ff3420fe3420ff34" + "6a21803520ff342080356a2181352080352081356a2182352081352082356a2183352082352083356a218435208335" + "2084356a218535208435" + "2085356a2186352085352086356a2187352086352087356a2188352087352088356a2189352088352089356a218a35" + "208935208a356a218b35" + "208a35208b356a218c35208b35208c356a218d35208c35208d356a218e35208d35208e356a218f35208e35208f356a" + "219035208f352090356a" + "2191352090352091356a2192352091352092356a2193352092352093356a2194352093352094356a21953520943520" + "95356a21963520953520" + "96356a2197352096352097356a2198352097352098356a2199352098352099356a219a35209935209a356a219b3520" + "9a35209b356a219c3520" + "9b35209c356a219d35209c35209d356a219e35209d35209e356a219f35209e35209f356a21a035209f3520a0356a21" + "a13520a03520a1356a21" + "a23520a13520a2356a21a33520a23520a3356a21a43520a33520a4356a21a53520a43520a5356a21a63520a53520a6" + "356a21a73520a63520a7" + "356a21a83520a73520a8356a21a93520a83520a9356a21aa3520a93520aa356a21ab3520aa3520ab356a21ac3520ab" + "3520ac356a21ad3520ac" + "3520ad356a21ae3520ad3520ae356a21af3520ae3520af356a21b03520af3520b0356a21b13520b03520b1356a21b2" + "3520b13520b2356a21b3" + "3520b23520b3356a21b43520b33520b4356a21b53520b43520b5356a21b63520b53520b6356a21b73520b63520b735" + "6a21b83520b73520b835" + "6a21b93520b83520b9356a21ba3520b93520ba356a21bb3520ba3520bb356a21bc3520bb3520bc356a21bd3520bc35" + "20bd356a21be3520bd35" + "20be356a21bf3520be3520bf356a21c03520bf3520c0356a21c13520c03520c1356a21c23520c13520c2356a21c335" + "20c23520c3356a21c435" + "20c33520c4356a21c53520c43520c5356a21c63520c53520c6356a21c73520c63520c7356a21c83520c73520c8356a" + "21c93520c83520c9356a" + "21ca3520c93520ca356a21cb3520ca3520cb356a21cc3520cb3520cc356a21cd3520cc3520cd356a21ce3520cd3520" + "ce356a21cf3520ce3520" + "cf356a21d03520cf3520d0356a21d13520d03520d1356a21d23520d13520d2356a21d33520d23520d3356a21d43520" + "d33520d4356a21d53520" + "d43520d5356a21d63520d53520d6356a21d73520d63520d7356a21d83520d73520d8356a21d93520d83520d9356a21" + "da3520d93520da356a21" + "db3520da3520db356a21dc3520db3520dc356a21dd3520dc3520dd356a21de3520dd3520de356a21df3520de3520df" + "356a21e03520df3520e0" + "356a21e13520e03520e1356a21e23520e13520e2356a21e33520e23520e3356a21e43520e33520e4356a21e53520e4" + "3520e5356a21e63520e5" + "3520e6356a21e73520e63520e7356a21e83520e73520e8356a21e93520e83520e9356a21ea3520e93520ea356a21eb" + "3520ea3520eb356a21ec" + "3520eb3520ec356a21ed3520ec3520ed356a21ee3520ed3520ee356a21ef3520ee3520ef356a21f03520ef3520f035" + "6a21f13520f03520f135" + "6a21f23520f13520f2356a21f33520f23520f3356a21f43520f33520f4356a21f53520f43520f5356a21f63520f535" + "20f6356a21f73520f635" + "20f7356a21f83520f73520f8356a21f93520f83520f9356a21fa3520f93520fa356a21fb3520fa3520fb356a21fc35" + "20fb3520fc356a21fd35" + "20fc3520fd356a21fe3520fd3520fe356a21ff3520fe3520ff356a21803620ff352080366a2181362080362081366a" + "2182362081362082366a" + "2183362082362083366a2184362083362084366a2185362084362085366a2186362085362086366a21873620863620" + "87366a21883620873620" + "88366a2189362088362089366a218a36208936208a366a218b36208a36208b366a218c36208b36208c366a218d3620" + "8c36208d366a218e3620" + "8d36208e366a218f36208e36208f366a219036208f362090366a2191362090362091366a2192362091362092366a21" + "93362092362093366a21" + "94362093362094366a2195362094362095366a2196362095362096366a2197362096362097366a2198362097362098" + "366a2199362098362099" + "366a219a36209936209a366a219b36209a36209b366a219c36209b36209c366a219d36209c36209d366a219e36209d" + "36209e366a219f36209e" + "36209f366a21a036209f3620a0366a21a13620a03620a1366a21a23620a13620a2366a21a33620a23620a3366a21a4" + "3620a33620a4366a21a5" + "3620a43620a5366a21a63620a53620a6366a21a73620a63620a7366a21a83620a73620a8366a21a93620a83620a936" + "6a21aa3620a93620aa36" + "6a21ab3620aa3620ab366a21ac3620ab3620ac366a21ad3620ac3620ad366a21ae3620ad3620ae366a21af3620ae36" + "20af366a21b03620af36" + "20b0366a21b13620b03620b1366a21b23620b13620b2366a21b33620b23620b3366a21b43620b33620b4366a21b536" + "20b43620b5366a21b636" + "20b53620b6366a21b73620b63620b7366a21b83620b73620b8366a21b93620b83620b9366a21ba3620b93620ba366a" + "21bb3620ba3620bb366a" + "21bc3620bb3620bc366a21bd3620bc3620bd366a21be3620bd3620be366a21bf3620be3620bf366a21c03620bf3620" + "c0366a21c13620c03620" + "c1366a21c23620c13620c2366a21c33620c23620c3366a21c43620c33620c4366a21c53620c43620c5366a21c63620" + "c53620c6366a21c73620" + "c63620c7366a21c83620c73620c8366a21c93620c83620c9366a21ca3620c93620ca366a21cb3620ca3620cb366a21" + "cc3620cb3620cc366a21" + "cd3620cc3620cd366a21ce3620cd3620ce366a21cf3620ce3620cf366a21d03620cf3620d0366a21d13620d03620d1" + "366a21d23620d13620d2" + "366a21d33620d23620d3366a21d43620d33620d4366a21d53620d43620d5366a21d63620d53620d6366a21d73620d6" + "3620d7366a21d83620d7" + "3620d8366a21d93620d83620d9366a21da3620d93620da366a21db3620da3620db366a21dc3620db3620dc366a21dd" + "3620dc3620dd366a21de" + "3620dd3620de366a21df3620de3620df366a21e03620df3620e0366a21e13620e03620e1366a21e23620e13620e236" + "6a21e33620e23620e336" + "6a21e43620e33620e4366a21e53620e43620e5366a21e63620e53620e6366a21e73620e63620e7366a21e83620e736" + "20e8366a21e93620e836" + "20e9366a21ea3620e93620ea366a21eb3620ea3620eb366a21ec3620eb3620ec366a21ed3620ec3620ed366a21ee36" + "20ed3620ee366a21ef36" + "20ee3620ef366a21f03620ef3620f0366a21f13620f03620f1366a21f23620f13620f2366a21f33620f23620f3366a" + "21f43620f33620f4366a" + "21f53620f43620f5366a21f63620f53620f6366a21f73620f63620f7366a21f83620f73620f8366a21f93620f83620" + "f9366a21fa3620f93620" + "fa366a21fb3620fa3620fb366a21fc3620fb3620fc366a21fd3620fc3620fd366a21fe3620fd3620fe366a21ff3620" + "fe3620ff366a21803720" + "ff362080376a2181372080372081376a2182372081372082376a2183372082372083376a2184372083372084376a21" + "85372084372085376a21" + "86372085372086376a2187372086372087376a2188372087372088376a2189372088372089376a218a37208937208a" + "376a218b37208a37208b" + "376a218c37208b37208c376a218d37208c37208d376a218e37208d37208e376a218f37208e37208f376a219037208f" + "372090376a2191372090" + "372091376a2192372091372092376a2193372092372093376a2194372093372094376a2195372094372095376a2196" + "372095372096376a2197" + "372096372097376a2198372097372098376a2199372098372099376a219a37209937209a376a219b37209a37209b37" + "6a219c37209b37209c37" + "6a219d37209c37209d376a219e37209d37209e376a219f37209e37209f376a21a037209f3720a0376a21a13720a037" + "20a1376a21a23720a137" + "20a2376a21a33720a23720a3376a21a43720a33720a4376a21a53720a43720a5376a21a63720a53720a6376a21a737" + "20a63720a7376a21a837" + "20a73720a8376a21a93720a83720a9376a21aa3720a93720aa376a21ab3720aa3720ab376a21ac3720ab3720ac376a" + "21ad3720ac3720ad376a" + "21ae3720ad3720ae376a21af3720ae3720af376a21b03720af3720b0376a21b13720b03720b1376a21b23720b13720" + "b2376a21b33720b23720" + "b3376a21b43720b33720b4376a21b53720b43720b5376a21b63720b53720b6376a21b73720b63720b7376a21b83720" + "b73720b8376a21b93720" + "b83720b9376a21ba3720b93720ba376a21bb3720ba3720bb376a21bc3720bb3720bc376a21bd3720bc3720bd376a21" + "be3720bd3720be376a21" + "bf3720be3720bf376a21c03720bf3720c0376a21c13720c03720c1376a21c23720c13720c2376a21c33720c23720c3" + "376a21c43720c33720c4" + "376a21c53720c43720c5376a21c63720c53720c6376a21c73720c63720c7376a21c83720c73720c8376a21c93720c8" + "3720c9376a21ca3720c9" + "3720ca376a21cb3720ca3720cb376a21cc3720cb3720cc376a21cd3720cc3720cd376a21ce3720cd3720ce376a21cf" + "3720ce3720cf376a21d0" + "3720cf3720d0376a21d13720d03720d1376a21d23720d13720d2376a21d33720d23720d3376a21d43720d33720d437" + "6a21d53720d43720d537" + "6a21d63720d53720d6376a21d73720d63720d7376a21d83720d73720d8376a21d93720d83720d9376a21da3720d937" + "20da376a21db3720da37" + "20db376a21dc3720db3720dc376a21dd3720dc3720dd376a21de3720dd3720de376a21df3720de3720df376a21e037" + "20df3720e0376a21e137" + "20e03720e1376a21e23720e13720e2376a21e33720e23720e3376a21e43720e33720e4376a21e53720e43720e5376a" + "21e63720e53720e6376a" + "21e73720e63720e7376a21e83720e73720e8376a21e93720e83720e9376a21ea3720e93720ea376a21eb3720ea3720" + "eb376a21ec3720eb3720" + "ec376a21ed3720ec3720ed376a21ee3720ed3720ee376a21ef3720ee3720ef376a21f03720ef3720f0376a21f13720" + "f03720f1376a21f23720" + "f13720f2376a21f33720f23720f3376a21f43720f33720f4376a21f53720f43720f5376a21f63720f53720f6376a21" + "f73720f63720f7376a21" + "f83720f73720f8376a21f93720f83720f9376a21fa3720f93720fa376a21fb3720fa3720fb376a21fc3720fb3720fc" + "376a21fd3720fc3720fd" + "376a21fe3720fd3720fe376a21ff3720fe3720ff376a21803820ff372080386a2181382080382081386a2182382081" + "382082386a2183382082" + "382083386a2184382083382084386a2185382084382085386a2186382085382086386a2187382086382087386a2188" + "382087382088386a2189" + "382088382089386a218a38208938208a386a218b38208a38208b386a218c38208b38208c386a218d38208c38208d38" + "6a218e38208d38208e38" + "6a218f38208e38208f386a219038208f382090386a2191382090382091386a2192382091382092386a219338209238" + "2093386a219438209338" + "2094386a2195382094382095386a2196382095382096386a2197382096382097386a2198382097382098386a219938" + "2098382099386a219a38" + "209938209a386a219b38209a38209b386a219c38209b38209c386a219d38209c38209d386a219e38209d38209e386a" + "219f38209e38209f386a" + "21a038209f3820a0386a21a13820a03820a1386a21a23820a13820a2386a21a33820a23820a3386a21a43820a33820" + "a4386a21a53820a43820" + "a5386a21a63820a53820a6386a21a73820a63820a7386a21a83820a73820a8386a21a93820a83820a9386a21aa3820" + "a93820aa386a21ab3820" + "aa3820ab386a21ac3820ab3820ac386a21ad3820ac3820ad386a21ae3820ad3820ae386a21af3820ae3820af386a21" + "b03820af3820b0386a21" + "b13820b03820b1386a21b23820b13820b2386a21b33820b23820b3386a21b43820b33820b4386a21b53820b43820b5" + "386a21b63820b53820b6" + "386a21b73820b63820b7386a21b83820b73820b8386a21b93820b83820b9386a21ba3820b93820ba386a21bb3820ba" + "3820bb386a21bc3820bb" + "3820bc386a21bd3820bc3820bd386a21be3820bd3820be386a21bf3820be3820bf386a21c03820bf3820c0386a21c1" + "3820c03820c1386a21c2" + "3820c13820c2386a21c33820c23820c3386a21c43820c33820c4386a21c53820c43820c5386a21c63820c53820c638" + "6a21c73820c63820c738" + "6a21c83820c73820c8386a21c93820c83820c9386a21ca3820c93820ca386a21cb3820ca3820cb386a21cc3820cb38" + "20cc386a21cd3820cc38" + "20cd386a21ce3820cd3820ce386a21cf3820ce3820cf386a21d03820cf3820d0386a21d13820d03820d1386a21d238" + "20d13820d2386a21d338" + "20d23820d3386a21d43820d33820d4386a21d53820d43820d5386a21d63820d53820d6386a21d73820d63820d7386a" + "21d83820d73820d8386a" + "21d93820d83820d9386a21da3820d93820da386a21db3820da3820db386a21dc3820db3820dc386a21dd3820dc3820" + "dd386a21de3820dd3820" + "de386a21df3820de3820df386a21e03820df3820e0386a21e13820e03820e1386a21e23820e13820e2386a21e33820" + "e23820e3386a21e43820" + "e33820e4386a21e53820e43820e5386a21e63820e53820e6386a21e73820e63820e7386a21e83820e73820e8386a21" + "e93820e83820e9386a21" + "ea3820e93820ea386a21eb3820ea3820eb386a21ec3820eb3820ec386a21ed3820ec3820ed386a21ee3820ed3820ee" + "386a21ef3820ee3820ef" + "386a21f03820ef3820f0386a21f13820f03820f1386a21f23820f13820f2386a21f33820f23820f3386a21f43820f3" + "3820f4386a21f53820f4" + "3820f5386a21f63820f53820f6386a21f73820f63820f7386a21f83820f73820f8386a21f93820f83820f9386a21fa" + "3820f93820fa386a21fb" + "3820fa3820fb386a21fc3820fb3820fc386a21fd3820fc3820fd386a21fe3820fd3820fe386a21ff3820fe3820ff38" + "6a21803920ff38208039" + "6a2181392080392081396a2182392081392082396a2183392082392083396a2184392083392084396a218539208439" + "2085396a218639208539" + "2086396a2187392086392087396a2188392087392088396a2189392088392089396a218a39208939208a396a218b39" + "208a39208b396a218c39" + "208b39208c396a218d39208c39208d396a218e39208d39208e396a218f39208e39208f396a219039208f392090396a" + "2191392090392091396a" + "2192392091392092396a2193392092392093396a2194392093392094396a2195392094392095396a21963920953920" + "96396a21973920963920" + "97396a2198392097392098396a2199392098392099396a219a39209939209a396a219b39209a39209b396a219c3920" + "9b39209c396a219d3920" + "9c39209d396a219e39209d39209e396a219f39209e39209f396a21a039209f3920a0396a21a13920a03920a1396a21" + "a23920a13920a2396a21" + "a33920a23920a3396a21a43920a33920a4396a21a53920a43920a5396a21a63920a53920a6396a21a73920a63920a7" + "396a21a83920a73920a8" + "396a21a93920a83920a9396a21aa3920a93920aa396a21ab3920aa3920ab396a21ac3920ab3920ac396a21ad3920ac" + "3920ad396a21ae3920ad" + "3920ae396a21af3920ae3920af396a21b03920af3920b0396a21b13920b03920b1396a21b23920b13920b2396a21b3" + "3920b23920b3396a21b4" + "3920b33920b4396a21b53920b43920b5396a21b63920b53920b6396a21b73920b63920b7396a21b83920b73920b839" + "6a21b93920b83920b939" + "6a21ba3920b93920ba396a21bb3920ba3920bb396a21bc3920bb3920bc396a21bd3920bc3920bd396a21be3920bd39" + "20be396a21bf3920be39" + "20bf396a21c03920bf3920c0396a21c13920c03920c1396a21c23920c13920c2396a21c33920c23920c3396a21c439" + "20c33920c4396a21c539" + "20c43920c5396a21c63920c53920c6396a21c73920c63920c7396a21c83920c73920c8396a21c93920c83920c9396a" + "21ca3920c93920ca396a" + "21cb3920ca3920cb396a21cc3920cb3920cc396a21cd3920cc3920cd396a21ce3920cd3920ce396a21cf3920ce3920" + "cf396a21d03920cf3920" + "d0396a21d13920d03920d1396a21d23920d13920d2396a21d33920d23920d3396a21d43920d33920d4396a21d53920" + "d43920d5396a21d63920" + "d53920d6396a21d73920d63920d7396a21d83920d73920d8396a21d93920d83920d9396a21da3920d93920da396a21" + "db3920da3920db396a21" + "dc3920db3920dc396a21dd3920dc3920dd396a21de3920dd3920de396a21df3920de3920df396a21e03920df3920e0" + "396a21e13920e03920e1" + "396a21e23920e13920e2396a21e33920e23920e3396a21e43920e33920e4396a21e53920e43920e5396a21e63920e5" + "3920e6396a21e73920e6" + "3920e7396a21e83920e73920e8396a21e93920e83920e9396a21ea3920e93920ea396a21eb3920ea3920eb396a21ec" + "3920eb3920ec396a21ed" + "3920ec3920ed396a21ee3920ed3920ee396a21ef3920ee3920ef396a21f03920ef3920f0396a21f13920f03920f139" + "6a21f23920f13920f239" + "6a21f33920f23920f3396a21f43920f33920f4396a21f53920f43920f5396a21f63920f53920f6396a21f73920f639" + "20f7396a21f83920f739" + "20f8396a21f93920f83920f9396a21fa3920f93920fa396a21fb3920fa3920fb396a21fc3920fb3920fc396a21fd39" + "20fc3920fd396a21fe39" + "20fd3920fe396a21ff3920fe3920ff396a21803a20ff3920803a6a21813a20803a20813a6a21823a20813a20823a6a" + "21833a20823a20833a6a" + "21843a20833a20843a6a21853a20843a20853a6a21863a20853a20863a6a21873a20863a20873a6a21883a20873a20" + "883a6a21893a20883a20" + "893a6a218a3a20893a208a3a6a218b3a208a3a208b3a6a218c3a208b3a208c3a6a218d3a208c3a208d3a6a218e3a20" + "8d3a208e3a6a218f3a20" + "8e3a208f3a6a21903a208f3a20903a6a21913a20903a20913a6a21923a20913a20923a6a21933a20923a20933a6a21" + "943a20933a20943a6a21" + "953a20943a20953a6a21963a20953a20963a6a21973a20963a20973a6a21983a20973a20983a6a21993a20983a2099" + "3a6a219a3a20993a209a" + "3a6a219b3a209a3a209b3a6a219c3a209b3a209c3a6a219d3a209c3a209d3a6a219e3a209d3a209e3a6a219f3a209e" + "3a209f3a6a21a03a209f" + "3a20a03a6a21a13a20a03a20a13a6a21a23a20a13a20a23a6a21a33a20a23a20a33a6a21a43a20a33a20a43a6a21a5" + "3a20a43a20a53a6a21a6" + "3a20a53a20a63a6a21a73a20a63a20a73a6a21a83a20a73a20a83a6a21a93a20a83a20a93a6a21aa3a20a93a20aa3a" + "6a21ab3a20aa3a20ab3a" + "6a21ac3a20ab3a20ac3a6a21ad3a20ac3a20ad3a6a21ae3a20ad3a20ae3a6a21af3a20ae3a20af3a6a21b03a20af3a" + "20b03a6a21b13a20b03a" + "20b13a6a21b23a20b13a20b23a6a21b33a20b23a20b33a6a21b43a20b33a20b43a6a21b53a20b43a20b53a6a21b63a" + "20b53a20b63a6a21b73a" + "20b63a20b73a6a21b83a20b73a20b83a6a21b93a20b83a20b93a6a21ba3a20b93a20ba3a6a21bb3a20ba3a20bb3a6a" + "21bc3a20bb3a20bc3a6a" + "21bd3a20bc3a20bd3a6a21be3a20bd3a20be3a6a21bf3a20be3a20bf3a6a21c03a20bf3a20c03a6a21c13a20c03a20" + "c13a6a21c23a20c13a20" + "c23a6a21c33a20c23a20c33a6a21c43a20c33a20c43a6a21c53a20c43a20c53a6a21c63a20c53a20c63a6a21c73a20" + "c63a20c73a6a21c83a20" + "c73a20c83a6a21c93a20c83a20c93a6a21ca3a20c93a20ca3a6a21cb3a20ca3a20cb3a6a21cc3a20cb3a20cc3a6a21" + "cd3a20cc3a20cd3a6a21" + "ce3a20cd3a20ce3a6a21cf3a20ce3a20cf3a6a21d03a20cf3a20d03a6a21d13a20d03a20d13a6a21d23a20d13a20d2" + "3a6a21d33a20d23a20d3" + "3a6a21d43a20d33a20d43a6a21d53a20d43a20d53a6a21d63a20d53a20d63a6a21d73a20d63a20d73a6a21d83a20d7" + "3a20d83a6a21d93a20d8" + "3a20d93a6a21da3a20d93a20da3a6a21db3a20da3a20db3a6a21dc3a20db3a20dc3a6a21dd3a20dc3a20dd3a6a21de" + "3a20dd3a20de3a6a21df" + "3a20de3a20df3a6a21e03a20df3a20e03a6a21e13a20e03a20e13a6a21e23a20e13a20e23a6a21e33a20e23a20e33a" + "6a21e43a20e33a20e43a" + "6a21e53a20e43a20e53a6a21e63a20e53a20e63a6a21e73a20e63a20e73a6a21e83a20e73a20e83a6a21e93a20e83a" + "20e93a6a21ea3a20e93a" + "20ea3a6a21eb3a20ea3a20eb3a6a21ec3a20eb3a20ec3a6a21ed3a20ec3a20ed3a6a21ee3a20ed3a20ee3a6a21ef3a" + "20ee3a20ef3a6a21f03a" + "20ef3a20f03a6a21f13a20f03a20f13a6a21f23a20f13a20f23a6a21f33a20f23a20f33a6a21f43a20f33a20f43a6a" + "21f53a20f43a20f53a6a" + "21f63a20f53a20f63a6a21f73a20f63a20f73a6a21f83a20f73a20f83a6a21f93a20f83a20f93a6a21fa3a20f93a20" + "fa3a6a21fb3a20fa3a20" + "fb3a6a21fc3a20fb3a20fc3a6a21fd3a20fc3a20fd3a6a21fe3a20fd3a20fe3a6a21ff3a20fe3a20ff3a6a21803b20" + "ff3a20803b6a21813b20" + "803b20813b6a21823b20813b20823b6a21833b20823b20833b6a21843b20833b20843b6a21853b20843b20853b6a21" + "863b20853b20863b6a21" + "873b20863b20873b6a21883b20873b20883b6a21893b20883b20893b6a218a3b20893b208a3b6a218b3b208a3b208b" + "3b6a218c3b208b3b208c" + "3b6a218d3b208c3b208d3b6a218e3b208d3b208e3b6a218f3b208e3b208f3b6a21903b208f3b20903b6a21913b2090" + "3b20913b6a21923b2091" + "3b20923b6a21933b20923b20933b6a21943b20933b20943b6a21953b20943b20953b6a21963b20953b20963b6a2197" + "3b20963b20973b6a2198" + "3b20973b20983b6a21993b20983b20993b6a219a3b20993b209a3b6a219b3b209a3b209b3b6a219c3b209b3b209c3b" + "6a219d3b209c3b209d3b" + "6a219e3b209d3b209e3b6a219f3b209e3b209f3b6a21a03b209f3b20a03b6a21a13b20a03b20a13b6a21a23b20a13b" + "20a23b6a21a33b20a23b" + "20a33b6a21a43b20a33b20a43b6a21a53b20a43b20a53b6a21a63b20a53b20a63b6a21a73b20a63b20a73b6a21a83b" + "20a73b20a83b6a21a93b" + "20a83b20a93b6a21aa3b20a93b20aa3b6a21ab3b20aa3b20ab3b6a21ac3b20ab3b20ac3b6a21ad3b20ac3b20ad3b6a" + "21ae3b20ad3b20ae3b6a" + "21af3b20ae3b20af3b6a21b03b20af3b20b03b6a21b13b20b03b20b13b6a21b23b20b13b20b23b6a21b33b20b23b20" + "b33b6a21b43b20b33b20" + "b43b6a21b53b20b43b20b53b6a21b63b20b53b20b63b6a21b73b20b63b20b73b6a21b83b20b73b20b83b6a21b93b20" + "b83b20b93b6a21ba3b20" + "b93b20ba3b6a21bb3b20ba3b20bb3b6a21bc3b20bb3b20bc3b6a21bd3b20bc3b20bd3b6a21be3b20bd3b20be3b6a21" + "bf3b20be3b20bf3b6a21" + "c03b20bf3b20c03b6a21c13b20c03b20c13b6a21c23b20c13b20c23b6a21c33b20c23b20c33b6a21c43b20c33b20c4" + "3b6a21c53b20c43b20c5" + "3b6a21c63b20c53b20c63b6a21c73b20c63b20c73b6a21c83b20c73b20c83b6a21c93b20c83b20c93b6a21ca3b20c9" + "3b20ca3b6a21cb3b20ca" + "3b20cb3b6a21cc3b20cb3b20cc3b6a21cd3b20cc3b20cd3b6a21ce3b20cd3b20ce3b6a21cf3b20ce3b20cf3b6a21d0" + "3b20cf3b20d03b6a21d1" + "3b20d03b20d13b6a21d23b20d13b20d23b6a21d33b20d23b20d33b6a21d43b20d33b20d43b6a21d53b20d43b20d53b" + "6a21d63b20d53b20d63b" + "6a21d73b20d63b20d73b6a21d83b20d73b20d83b6a21d93b20d83b20d93b6a21da3b20d93b20da3b6a21db3b20da3b" + "20db3b6a21dc3b20db3b" + "20dc3b6a21dd3b20dc3b20dd3b6a21de3b20dd3b20de3b6a21df3b20de3b20df3b6a21e03b20df3b20e03b6a21e13b" + "20e03b20e13b6a21e23b" + "20e13b20e23b6a21e33b20e23b20e33b6a21e43b20e33b20e43b6a21e53b20e43b20e53b6a21e63b20e53b20e63b6a" + "21e73b20e63b20e73b6a" + "21e83b20e73b20e83b6a21e93b20e83b20e93b6a21ea3b20e93b20ea3b6a21eb3b20ea3b20eb3b6a21ec3b20eb3b20" + "ec3b6a21ed3b20ec3b20" + "ed3b6a21ee3b20ed3b20ee3b6a21ef3b20ee3b20ef3b6a21f03b20ef3b20f03b6a21f13b20f03b20f13b6a21f23b20" + "f13b20f23b6a21f33b20" + "f23b20f33b6a21f43b20f33b20f43b6a21f53b20f43b20f53b6a21f63b20f53b20f63b6a21f73b20f63b20f73b6a21" + "f83b20f73b20f83b6a21" + "f93b20f83b20f93b6a21fa3b20f93b20fa3b6a21fb3b20fa3b20fb3b6a21fc3b20fb3b20fc3b6a21fd3b20fc3b20fd" + "3b6a21fe3b20fd3b20fe" + "3b6a21ff3b20fe3b20ff3b6a21803c20ff3b20803c6a21813c20803c20813c6a21823c20813c20823c6a21833c2082" + "3c20833c6a21843c2083" + "3c20843c6a21853c20843c20853c6a21863c20853c20863c6a21873c20863c20873c6a21883c20873c20883c6a2189" + "3c20883c20893c6a218a" + "3c20893c208a3c6a218b3c208a3c208b3c6a218c3c208b3c208c3c6a218d3c208c3c208d3c6a218e3c208d3c208e3c" + "6a218f3c208e3c208f3c" + "6a21903c208f3c20903c6a21913c20903c20913c6a21923c20913c20923c6a21933c20923c20933c6a21943c20933c" + "20943c6a21953c20943c" + "20953c6a21963c20953c20963c6a21973c20963c20973c6a21983c20973c20983c6a21993c20983c20993c6a219a3c" + "20993c209a3c6a219b3c" + "209a3c209b3c6a219c3c209b3c209c3c6a219d3c209c3c209d3c6a219e3c209d3c209e3c6a219f3c209e3c209f3c6a" + "21a03c209f3c20a03c6a" + "21a13c20a03c20a13c6a21a23c20a13c20a23c6a21a33c20a23c20a33c6a21a43c20a33c20a43c6a21a53c20a43c20" + "a53c6a21a63c20a53c20" + "a63c6a21a73c20a63c20a73c6a21a83c20a73c20a83c6a21a93c20a83c20a93c6a21aa3c20a93c20aa3c6a21ab3c20" + "aa3c20ab3c6a21ac3c20" + "ab3c20ac3c6a21ad3c20ac3c20ad3c6a21ae3c20ad3c20ae3c6a21af3c20ae3c20af3c6a21b03c20af3c20b03c6a21" + "b13c20b03c20b13c6a21" + "b23c20b13c20b23c6a21b33c20b23c20b33c6a21b43c20b33c20b43c6a21b53c20b43c20b53c6a21b63c20b53c20b6" + "3c6a21b73c20b63c20b7" + "3c6a21b83c20b73c20b83c6a21b93c20b83c20b93c6a21ba3c20b93c20ba3c6a21bb3c20ba3c20bb3c6a21bc3c20bb" + "3c20bc3c6a21bd3c20bc" + "3c20bd3c6a21be3c20bd3c20be3c6a21bf3c20be3c20bf3c6a21c03c20bf3c20c03c6a21c13c20c03c20c13c6a21c2" + "3c20c13c20c23c6a21c3" + "3c20c23c20c33c6a21c43c20c33c20c43c6a21c53c20c43c20c53c6a21c63c20c53c20c63c6a21c73c20c63c20c73c" + "6a21c83c20c73c20c83c" + "6a21c93c20c83c20c93c6a21ca3c20c93c20ca3c6a21cb3c20ca3c20cb3c6a21cc3c20cb3c20cc3c6a21cd3c20cc3c" + "20cd3c6a21ce3c20cd3c" + "20ce3c6a21cf3c20ce3c20cf3c6a21d03c20cf3c20d03c6a21d13c20d03c20d13c6a21d23c20d13c20d23c6a21d33c" + "20d23c20d33c6a21d43c" + "20d33c20d43c6a21d53c20d43c20d53c6a21d63c20d53c20d63c6a21d73c20d63c20d73c6a21d83c20d73c20d83c6a" + "21d93c20d83c20d93c6a" + "21da3c20d93c20da3c6a21db3c20da3c20db3c6a21dc3c20db3c20dc3c6a21dd3c20dc3c20dd3c6a21de3c20dd3c20" + "de3c6a21df3c20de3c20" + "df3c6a21e03c20df3c20e03c6a21e13c20e03c20e13c6a21e23c20e13c20e23c6a21e33c20e23c20e33c6a21e43c20" + "e33c20e43c6a21e53c20" + "e43c20e53c6a21e63c20e53c20e63c6a21e73c20e63c20e73c6a21e83c20e73c20e83c6a21e93c20e83c20e93c6a21" + "ea3c20e93c20ea3c6a21" + "eb3c20ea3c20eb3c6a21ec3c20eb3c20ec3c6a21ed3c20ec3c20ed3c6a21ee3c20ed3c20ee3c6a21ef3c20ee3c20ef" + "3c6a21f03c20ef3c20f0" + "3c6a21f13c20f03c20f13c6a21f23c20f13c20f23c6a21f33c20f23c20f33c6a21f43c20f33c20f43c6a21f53c20f4" + "3c20f53c6a21f63c20f5" + "3c20f63c6a21f73c20f63c20f73c6a21f83c20f73c20f83c6a21f93c20f83c20f93c6a21fa3c20f93c20fa3c6a21fb" + "3c20fa3c20fb3c6a21fc" + "3c20fb3c20fc3c6a21fd3c20fc3c20fd3c6a21fe3c20fd3c20fe3c6a21ff3c20fe3c20ff3c6a21803d20ff3c20803d" + "6a21813d20803d20813d" + "6a21823d20813d20823d6a21833d20823d20833d6a21843d20833d20843d6a21853d20843d20853d6a21863d20853d" + "20863d6a21873d20863d" + "20873d6a21883d20873d20883d6a21893d20883d20893d6a218a3d20893d208a3d6a218b3d208a3d208b3d6a218c3d" + "208b3d208c3d6a218d3d" + "208c3d208d3d6a218e3d208d3d208e3d6a218f3d208e3d208f3d6a21903d208f3d20903d6a21913d20903d20913d6a" + "21923d20913d20923d6a" + "21933d20923d20933d6a21943d20933d20943d6a21953d20943d20953d6a21963d20953d20963d6a21973d20963d20" + "973d6a21983d20973d20" + "983d6a21993d20983d20993d6a219a3d20993d209a3d6a219b3d209a3d209b3d6a219c3d209b3d209c3d6a219d3d20" + "9c3d209d3d6a219e3d20" + "9d3d209e3d6a219f3d209e3d209f3d6a21a03d209f3d20a03d6a21a13d20a03d20a13d6a21a23d20a13d20a23d6a21" + "a33d20a23d20a33d6a21" + "a43d20a33d20a43d6a21a53d20a43d20a53d6a21a63d20a53d20a63d6a21a73d20a63d20a73d6a21a83d20a73d20a8" + "3d6a21a93d20a83d20a9" + "3d6a21aa3d20a93d20aa3d6a21ab3d20aa3d20ab3d6a21ac3d20ab3d20ac3d6a21ad3d20ac3d20ad3d6a21ae3d20ad" + "3d20ae3d6a21af3d20ae" + "3d20af3d6a21b03d20af3d20b03d6a21b13d20b03d20b13d6a21b23d20b13d20b23d6a21b33d20b23d20b33d6a21b4" + "3d20b33d20b43d6a21b5" + "3d20b43d20b53d6a21b63d20b53d20b63d6a21b73d20b63d20b73d6a21b83d20b73d20b83d6a21b93d20b83d20b93d" + "6a21ba3d20b93d20ba3d" + "6a21bb3d20ba3d20bb3d6a21bc3d20bb3d20bc3d6a21bd3d20bc3d20bd3d6a21be3d20bd3d20be3d6a21bf3d20be3d" + "20bf3d6a21c03d20bf3d" + "20c03d6a21c13d20c03d20c13d6a21c23d20c13d20c23d6a21c33d20c23d20c33d6a21c43d20c33d20c43d6a21c53d" + "20c43d20c53d6a21c63d" + "20c53d20c63d6a21c73d20c63d20c73d6a21c83d20c73d20c83d6a21c93d20c83d20c93d6a21ca3d20c93d20ca3d6a" + "21cb3d20ca3d20cb3d6a" + "21cc3d20cb3d20cc3d6a21cd3d20cc3d20cd3d6a21ce3d20cd3d20ce3d6a21cf3d20ce3d20cf3d6a21d03d20cf3d20" + "d03d6a21d13d20d03d20" + "d13d6a21d23d20d13d20d23d6a21d33d20d23d20d33d6a21d43d20d33d20d43d6a21d53d20d43d20d53d6a21d63d20" + "d53d20d63d6a21d73d20" + "d63d20d73d6a21d83d20d73d20d83d6a21d93d20d83d20d93d6a21da3d20d93d20da3d6a21db3d20da3d20db3d6a21" + "dc3d20db3d20dc3d6a21" + "dd3d20dc3d20dd3d6a21de3d20dd3d20de3d6a21df3d20de3d20df3d6a21e03d20df3d20e03d6a21e13d20e03d20e1" + "3d6a21e23d20e13d20e2" + "3d6a21e33d20e23d20e33d6a21e43d20e33d20e43d6a21e53d20e43d20e53d6a21e63d20e53d20e63d6a21e73d20e6" + "3d20e73d6a21e83d20e7" + "3d20e83d6a21e93d20e83d20e93d6a21ea3d20e93d20ea3d6a21eb3d20ea3d20eb3d6a21ec3d20eb3d20ec3d6a21ed" + "3d20ec3d20ed3d6a21ee" + "3d20ed3d20ee3d6a21ef3d20ee3d20ef3d6a21f03d20ef3d20f03d6a21f13d20f03d20f13d6a21f23d20f13d20f23d" + "6a21f33d20f23d20f33d" + "6a21f43d20f33d20f43d6a21f53d20f43d20f53d6a21f63d20f53d20f63d6a21f73d20f63d20f73d6a21f83d20f73d" + "20f83d6a21f93d20f83d" + "20f93d6a21fa3d20f93d20fa3d6a21fb3d20fa3d20fb3d6a21fc3d20fb3d20fc3d6a21fd3d20fc3d20fd3d6a21fe3d" + "20fd3d20fe3d6a21ff3d" + "20fe3d20ff3d6a21803e20ff3d20803e6a21813e20803e20813e6a21823e20813e20823e6a21833e20823e20833e6a" + "21843e20833e20843e6a" + "21853e20843e20853e6a21863e20853e20863e6a21873e20863e20873e6a21883e20873e20883e6a21893e20883e20" + "893e6a218a3e20893e20" + "8a3e6a218b3e208a3e208b3e6a218c3e208b3e208c3e6a218d3e208c3e208d3e6a218e3e208d3e208e3e6a218f3e20" + "8e3e208f3e6a21903e20" + "8f3e20903e6a21913e20903e20913e6a21923e20913e20923e6a21933e20923e20933e6a21943e20933e20943e6a21" + "953e20943e20953e6a21" + "963e20953e20963e6a21973e20963e20973e6a21983e20973e20983e6a21993e20983e20993e6a219a3e20993e209a" + "3e6a219b3e209a3e209b" + "3e6a219c3e209b3e209c3e6a219d3e209c3e209d3e6a219e3e209d3e209e3e6a219f3e209e3e209f3e6a21a03e209f" + "3e20a03e6a21a13e20a0" + "3e20a13e6a21a23e20a13e20a23e6a21a33e20a23e20a33e6a21a43e20a33e20a43e6a21a53e20a43e20a53e6a21a6" + "3e20a53e20a63e6a21a7" + "3e20a63e20a73e6a21a83e20a73e20a83e6a21a93e20a83e20a93e6a21aa3e20a93e20aa3e6a21ab3e20aa3e20ab3e" + "6a21ac3e20ab3e20ac3e" + "6a21ad3e20ac3e20ad3e6a21ae3e20ad3e20ae3e6a21af3e20ae3e20af3e6a21b03e20af3e20b03e6a21b13e20b03e" + "20b13e6a21b23e20b13e" + "20b23e6a21b33e20b23e20b33e6a21b43e20b33e20b43e6a21b53e20b43e20b53e6a21b63e20b53e20b63e6a21b73e" + "20b63e20b73e6a21b83e" + "20b73e20b83e6a21b93e20b83e20b93e6a21ba3e20b93e20ba3e6a21bb3e20ba3e20bb3e6a21bc3e20bb3e20bc3e6a" + "21bd3e20bc3e20bd3e6a" + "21be3e20bd3e20be3e6a21bf3e20be3e20bf3e6a21c03e20bf3e20c03e6a21c13e20c03e20c13e6a21c23e20c13e20" + "c23e6a21c33e20c23e20" + "c33e6a21c43e20c33e20c43e6a21c53e20c43e20c53e6a21c63e20c53e20c63e6a21c73e20c63e20c73e6a21c83e20" + "c73e20c83e6a21c93e20" + "c83e20c93e6a21ca3e20c93e20ca3e6a21cb3e20ca3e20cb3e6a21cc3e20cb3e20cc3e6a21cd3e20cc3e20cd3e6a21" + "ce3e20cd3e20ce3e6a21" + "cf3e20ce3e20cf3e6a21d03e20cf3e20d03e6a21d13e20d03e20d13e6a21d23e20d13e20d23e6a21d33e20d23e20d3" + "3e6a21d43e20d33e20d4" + "3e6a21d53e20d43e20d53e6a21d63e20d53e20d63e6a21d73e20d63e20d73e6a21d83e20d73e20d83e6a21d93e20d8" + "3e20d93e6a21da3e20d9" + "3e20da3e6a21db3e20da3e20db3e6a21dc3e20db3e20dc3e6a21dd3e20dc3e20dd3e6a21de3e20dd3e20de3e6a21df" + "3e20de3e20df3e6a21e0" + "3e20df3e20e03e6a21e13e20e03e20e13e6a21e23e20e13e20e23e6a21e33e20e23e20e33e6a21e43e20e33e20e43e" + "6a21e53e20e43e20e53e" + "6a21e63e20e53e20e63e6a21e73e20e63e20e73e6a21e83e20e73e20e83e6a21e93e20e83e20e93e6a21ea3e20e93e" + "20ea3e6a21eb3e20ea3e" + "20eb3e6a21ec3e20eb3e20ec3e6a21ed3e20ec3e20ed3e6a21ee3e20ed3e20ee3e6a21ef3e20ee3e20ef3e6a21f03e" + "20ef3e20f03e6a21f13e" + "20f03e20f13e6a21f23e20f13e20f23e6a21f33e20f23e20f33e6a21f43e20f33e20f43e6a21f53e20f43e20f53e6a" + "21f63e20f53e20f63e6a" + "21f73e20f63e20f73e6a21f83e20f73e20f83e6a21f93e20f83e20f93e6a21fa3e20f93e20fa3e6a21fb3e20fa3e20" + "fb3e6a21fc3e20fb3e20" + "fc3e6a21fd3e20fc3e20fd3e6a21fe3e20fd3e20fe3e6a21ff3e20fe3e20ff3e6a21803f20ff3e20803f6a21813f20" + "803f20813f6a21823f20" + "813f20823f6a21833f20823f20833f6a21843f20833f20843f6a21853f20843f20853f6a21863f20853f20863f6a21" + "873f20863f20873f6a21" + "883f20873f20883f6a21893f20883f20893f6a218a3f20893f208a3f6a218b3f208a3f208b3f6a218c3f208b3f208c" + "3f6a218d3f208c3f208d" + "3f6a218e3f208d3f208e3f6a218f3f208e3f208f3f6a21903f208f3f20903f6a21913f20903f20913f6a21923f2091" + "3f20923f6a21933f2092" + "3f20933f6a21943f20933f20943f6a21953f20943f20953f6a21963f20953f20963f6a21973f20963f20973f6a2198" + "3f20973f20983f6a2199" + "3f20983f20993f6a219a3f20993f209a3f6a219b3f209a3f209b3f6a219c3f209b3f209c3f6a219d3f209c3f209d3f" + "6a219e3f209d3f209e3f" + "6a219f3f209e3f209f3f6a21a03f209f3f20a03f6a21a13f20a03f20a13f6a21a23f20a13f20a23f6a21a33f20a23f" + "20a33f6a21a43f20a33f" + "20a43f6a21a53f20a43f20a53f6a21a63f20a53f20a63f6a21a73f20a63f20a73f6a21a83f20a73f20a83f6a21a93f" + "20a83f20a93f6a21aa3f" + "20a93f20aa3f6a21ab3f20aa3f20ab3f6a21ac3f20ab3f20ac3f6a21ad3f20ac3f20ad3f6a21ae3f20ad3f20ae3f6a" + "21af3f20ae3f20af3f6a" + "21b03f20af3f20b03f6a21b13f20b03f20b13f6a21b23f20b13f20b23f6a21b33f20b23f20b33f6a21b43f20b33f20" + "b43f6a21b53f20b43f20" + "b53f6a21b63f20b53f20b63f6a21b73f20b63f20b73f6a21b83f20b73f20b83f6a21b93f20b83f20b93f6a21ba3f20" + "b93f20ba3f6a21bb3f20" + "ba3f20bb3f6a21bc3f20bb3f20bc3f6a21bd3f20bc3f20bd3f6a21be3f20bd3f20be3f6a21bf3f20be3f20bf3f6a21" + "c03f20bf3f20c03f6a21" + "c13f20c03f20c13f6a21c23f20c13f20c23f6a21c33f20c23f20c33f6a21c43f20c33f20c43f6a21c53f20c43f20c5" + "3f6a21c63f20c53f20c6" + "3f6a21c73f20c63f20c73f6a21c83f20c73f20c83f6a21c93f20c83f20c93f6a21ca3f20c93f20ca3f6a21cb3f20ca" + "3f20cb3f6a21cc3f20cb" + "3f20cc3f6a21cd3f20cc3f20cd3f6a21ce3f20cd3f20ce3f6a21cf3f20ce3f20cf3f6a21d03f20cf3f20d03f6a21d1" + "3f20d03f20d13f6a21d2" + "3f20d13f20d23f6a21d33f20d23f20d33f6a21d43f20d33f20d43f6a21d53f20d43f20d53f6a21d63f20d53f20d63f" + "6a21d73f20d63f20d73f" + "6a21d83f20d73f20d83f6a21d93f20d83f20d93f6a21da3f20d93f20da3f6a21db3f20da3f20db3f6a21dc3f20db3f" + "20dc3f6a21dd3f20dc3f" + "20dd3f6a21de3f20dd3f20de3f6a21df3f20de3f20df3f6a21e03f20df3f20e03f6a21e13f20e03f20e13f6a21e23f" + "20e13f20e23f6a21e33f" + "20e23f20e33f6a21e43f20e33f20e43f6a21e53f20e43f20e53f6a21e63f20e53f20e63f6a21e73f20e63f20e73f6a" + "21e83f20e73f20e83f6a" + "21e93f20e83f20e93f6a21ea3f20e93f20ea3f6a21eb3f20ea3f20eb3f6a21ec3f20eb3f20ec3f6a21ed3f20ec3f20" + "ed3f6a21ee3f20ed3f20" + "ee3f6a21ef3f20ee3f20ef3f6a21f03f20ef3f20f03f6a21f13f20f03f20f13f6a21f23f20f13f20f23f6a21f33f20" + "f23f20f33f6a21f43f20" + "f33f20f43f6a21f53f20f43f20f53f6a21f63f20f53f20f63f6a21f73f20f63f20f73f6a21f83f20f73f20f83f6a21" + "f93f20f83f20f93f6a21" + "fa3f20f93f20fa3f6a21fb3f20fa3f20fb3f6a21fc3f20fb3f20fc3f6a21fd3f20fc3f20fd3f6a21fe3f20fd3f20fe" + "3f6a21ff3f20fe3f20ff" + "3f6a21804020ff3f2080406a2181402080402081406a2182402081402082406a2183402082402083406a2184402083" + "402084406a2185402084" + "402085406a2186402085402086406a2187402086402087406a2188402087402088406a2189402088402089406a218a" + "40208940208a406a218b" + "40208a40208b406a218c40208b40208c406a218d40208c40208d406a218e40208d40208e406a218f40208e40208f40" + "6a219040208f40209040" + "6a2191402090402091406a2192402091402092406a2193402092402093406a2194402093402094406a219540209440" + "2095406a219640209540" + "2096406a2197402096402097406a2198402097402098406a2199402098402099406a219a40209940209a406a219b40" + "209a40209b406a219c40" + "209b40209c406a219d40209c40209d406a219e40209d40209e406a219f40209e40209f406a21a040209f4020a0406a" + "21a14020a04020a1406a" + "21a24020a14020a2406a21a34020a24020a3406a21a44020a34020a4406a21a54020a44020a5406a21a64020a54020" + "a6406a21a74020a64020" + "a7406a21a84020a74020a8406a21a94020a84020a9406a21aa4020a94020aa406a21ab4020aa4020ab406a21ac4020" + "ab4020ac406a21ad4020" + "ac4020ad406a21ae4020ad4020ae406a21af4020ae4020af406a21b04020af4020b0406a21b14020b04020b1406a21" + "b24020b14020b2406a21" + "b34020b24020b3406a21b44020b34020b4406a21b54020b44020b5406a21b64020b54020b6406a21b74020b64020b7" + "406a21b84020b74020b8" + "406a21b94020b84020b9406a21ba4020b94020ba406a21bb4020ba4020bb406a21bc4020bb4020bc406a21bd4020bc" + "4020bd406a21be4020bd" + "4020be406a21bf4020be4020bf406a21c04020bf4020c0406a21c14020c04020c1406a21c24020c14020c2406a21c3" + "4020c24020c3406a21c4" + "4020c34020c4406a21c54020c44020c5406a21c64020c54020c6406a21c74020c64020c7406a21c84020c74020c840" + "6a21c94020c84020c940" + "6a21ca4020c94020ca406a21cb4020ca4020cb406a21cc4020cb4020cc406a21cd4020cc4020cd406a21ce4020cd40" + "20ce406a21cf4020ce40" + "20cf406a21d04020cf4020d0406a21d14020d04020d1406a21d24020d14020d2406a21d34020d24020d3406a21d440" + "20d34020d4406a21d540" + "20d44020d5406a21d64020d54020d6406a21d74020d64020d7406a21d84020d74020d8406a21d94020d84020d9406a" + "21da4020d94020da406a" + "21db4020da4020db406a21dc4020db4020dc406a21dd4020dc4020dd406a21de4020dd4020de406a21df4020de4020" + "df406a21e04020df4020" + "e0406a21e14020e04020e1406a21e24020e14020e2406a21e34020e24020e3406a21e44020e34020e4406a21e54020" + "e44020e5406a21e64020" + "e54020e6406a21e74020e64020e7406a21e84020e74020e8406a21e94020e84020e9406a21ea4020e94020ea406a21" + "eb4020ea4020eb406a21" + "ec4020eb4020ec406a21ed4020ec4020ed406a21ee4020ed4020ee406a21ef4020ee4020ef406a21f04020ef4020f0" + "406a21f14020f04020f1" + "406a21f24020f14020f2406a21f34020f24020f3406a21f44020f34020f4406a21f54020f44020f5406a21f64020f5" + "4020f6406a21f74020f6" + "4020f7406a21f84020f74020f8406a21f94020f84020f9406a21fa4020f94020fa406a21fb4020fa4020fb406a21fc" + "4020fb4020fc406a21fd" + "4020fc4020fd406a21fe4020fd4020fe406a21ff4020fe4020ff406a21804120ff402080416a218141208041208141" + "6a218241208141208241" + "6a2183412082412083416a2184412083412084416a2185412084412085416a2186412085412086416a218741208641" + "2087416a218841208741" + "2088416a2189412088412089416a218a41208941208a416a218b41208a41208b416a218c41208b41208c416a218d41" + "208c41208d416a218e41" + "208d41208e416a218f41208e41208f416a219041208f412090416a2191412090412091416a2192412091412092416a" + "2193412092412093416a" + "2194412093412094416a2195412094412095416a2196412095412096416a2197412096412097416a21984120974120" + "98416a21994120984120" + "99416a219a41209941209a416a219b41209a41209b416a219c41209b41209c416a219d41209c41209d416a219e4120" + "9d41209e416a219f4120" + "9e41209f416a21a041209f4120a0416a21a14120a04120a1416a21a24120a14120a2416a21a34120a24120a3416a21" + "a44120a34120a4416a21" + "a54120a44120a5416a21a64120a54120a6416a21a74120a64120a7416a21a84120a74120a8416a21a94120a84120a9" + "416a21aa4120a94120aa" + "416a21ab4120aa4120ab416a21ac4120ab4120ac416a21ad4120ac4120ad416a21ae4120ad4120ae416a21af4120ae" + "4120af416a21b04120af" + "4120b0416a21b14120b04120b1416a21b24120b14120b2416a21b34120b24120b3416a21b44120b34120b4416a21b5" + "4120b44120b5416a21b6" + "4120b54120b6416a21b74120b64120b7416a21b84120b74120b8416a21b94120b84120b9416a21ba4120b94120ba41" + "6a21bb4120ba4120bb41" + "6a21bc4120bb4120bc416a21bd4120bc4120bd416a21be4120bd4120be416a21bf4120be4120bf416a21c04120bf41" + "20c0416a21c14120c041" + "20c1416a21c24120c14120c2416a21c34120c24120c3416a21c44120c34120c4416a21c54120c44120c5416a21c641" + "20c54120c6416a21c741" + "20c64120c7416a21c84120c74120c8416a21c94120c84120c9416a21ca4120c94120ca416a21cb4120ca4120cb416a" + "21cc4120cb4120cc416a" + "21cd4120cc4120cd416a21ce4120cd4120ce416a21cf4120ce4120cf416a21d04120cf4120d0416a21d14120d04120" + "d1416a21d24120d14120" + "d2416a21d34120d24120d3416a21d44120d34120d4416a21d54120d44120d5416a21d64120d54120d6416a21d74120" + "d64120d7416a21d84120" + "d74120d8416a21d94120d84120d9416a21da4120d94120da416a21db4120da4120db416a21dc4120db4120dc416a21" + "dd4120dc4120dd416a21" + "de4120dd4120de416a21df4120de4120df416a21e04120df4120e0416a21e14120e04120e1416a21e24120e14120e2" + "416a21e34120e24120e3" + "416a21e44120e34120e4416a21e54120e44120e5416a21e64120e54120e6416a21e74120e64120e7416a21e84120e7" + "4120e8416a21e94120e8" + "4120e9416a21ea4120e94120ea416a21eb4120ea4120eb416a21ec4120eb4120ec416a21ed4120ec4120ed416a21ee" + "4120ed4120ee416a21ef" + "4120ee4120ef416a21f04120ef4120f0416a21f14120f04120f1416a21f24120f14120f2416a21f34120f24120f341" + "6a21f44120f34120f441" + "6a21f54120f44120f5416a21f64120f54120f6416a21f74120f64120f7416a21f84120f74120f8416a21f94120f841" + "20f9416a21fa4120f941" + "20fa416a21fb4120fa4120fb416a21fc4120fb4120fc416a21fd4120fc4120fd416a21fe4120fd4120fe416a21ff41" + "20fe4120ff416a218042" + "20ff412080426a2181422080422081426a2182422081422082426a2183422082422083426a2184422083422084426a" + "2185422084422085426a" + "2186422085422086426a2187422086422087426a2188422087422088426a2189422088422089426a218a4220894220" + "8a426a218b42208a4220" + "8b426a218c42208b42208c426a218d42208c42208d426a218e42208d42208e426a218f42208e42208f426a21904220" + "8f422090426a21914220" + "90422091426a2192422091422092426a2193422092422093426a2194422093422094426a2195422094422095426a21" + "96422095422096426a21" + "97422096422097426a2198422097422098426a2199422098422099426a219a42209942209a426a219b42209a42209b" + "426a219c42209b42209c" + "426a219d42209c42209d426a219e42209d42209e426a219f42209e42209f426a21a042209f4220a0426a21a14220a0" + "4220a1426a21a24220a1" + "4220a2426a21a34220a24220a3426a21a44220a34220a4426a21a54220a44220a5426a21a64220a54220a6426a21a7" + "4220a64220a7426a21a8" + "4220a74220a8426a21a94220a84220a9426a21aa4220a94220aa426a21ab4220aa4220ab426a21ac4220ab4220ac42" + "6a21ad4220ac4220ad42" + "6a21ae4220ad4220ae426a21af4220ae4220af426a21b04220af4220b0426a21b14220b04220b1426a21b24220b142" + "20b2426a21b34220b242" + "20b3426a21b44220b34220b4426a21b54220b44220b5426a21b64220b54220b6426a21b74220b64220b7426a21b842" + "20b74220b8426a21b942" + "20b84220b9426a21ba4220b94220ba426a21bb4220ba4220bb426a21bc4220bb4220bc426a21bd4220bc4220bd426a" + "21be4220bd4220be426a" + "21bf4220be4220bf426a21c04220bf4220c0426a21c14220c04220c1426a21c24220c14220c2426a21c34220c24220" + "c3426a21c44220c34220" + "c4426a21c54220c44220c5426a21c64220c54220c6426a21c74220c64220c7426a21c84220c74220c8426a21c94220" + "c84220c9426a21ca4220" + "c94220ca426a21cb4220ca4220cb426a21cc4220cb4220cc426a21cd4220cc4220cd426a21ce4220cd4220ce426a21" + "cf4220ce4220cf426a21" + "d04220cf4220d0426a21d14220d04220d1426a21d24220d14220d2426a21d34220d24220d3426a21d44220d34220d4" + "426a21d54220d44220d5" + "426a21d64220d54220d6426a21d74220d64220d7426a21d84220d74220d8426a21d94220d84220d9426a21da4220d9" + "4220da426a21db4220da" + "4220db426a21dc4220db4220dc426a21dd4220dc4220dd426a21de4220dd4220de426a21df4220de4220df426a21e0" + "4220df4220e0426a21e1" + "4220e04220e1426a21e24220e14220e2426a21e34220e24220e3426a21e44220e34220e4426a21e54220e44220e542" + "6a21e64220e54220e642" + "6a21e74220e64220e7426a21e84220e74220e8426a21e94220e84220e9426a21ea4220e94220ea426a21eb4220ea42" + "20eb426a21ec4220eb42" + "20ec426a21ed4220ec4220ed426a21ee4220ed4220ee426a21ef4220ee4220ef426a21f04220ef4220f0426a21f142" + "20f04220f1426a21f242" + "20f14220f2426a21f34220f24220f3426a21f44220f34220f4426a21f54220f44220f5426a21f64220f54220f6426a" + "21f74220f64220f7426a" + "21f84220f74220f8426a21f94220f84220f9426a21fa4220f94220fa426a21fb4220fa4220fb426a21fc4220fb4220" + "fc426a21fd4220fc4220" + "fd426a21fe4220fd4220fe426a21ff4220fe4220ff426a21804320ff422080436a2181432080432081436a21824320" + "81432082436a21834320" + "82432083436a2184432083432084436a2185432084432085436a2186432085432086436a2187432086432087436a21" + "88432087432088436a21" + "89432088432089436a218a43208943208a436a218b43208a43208b436a218c43208b43208c436a218d43208c43208d" + "436a218e43208d43208e" + "436a218f43208e43208f436a219043208f432090436a2191432090432091436a2192432091432092436a2193432092" + "432093436a2194432093" + "432094436a2195432094432095436a2196432095432096436a2197432096432097436a2198432097432098436a2199" + "432098432099436a219a" + "43209943209a436a219b43209a43209b436a219c43209b43209c436a219d43209c43209d436a219e43209d43209e43" + "6a219f43209e43209f43" + "6a21a043209f4320a0436a21a14320a04320a1436a21a24320a14320a2436a21a34320a24320a3436a21a44320a343" + "20a4436a21a54320a443" + "20a5436a21a64320a54320a6436a21a74320a64320a7436a21a84320a74320a8436a21a94320a84320a9436a21aa43" + "20a94320aa436a21ab43" + "20aa4320ab436a21ac4320ab4320ac436a21ad4320ac4320ad436a21ae4320ad4320ae436a21af4320ae4320af436a" + "21b04320af4320b0436a" + "21b14320b04320b1436a21b24320b14320b2436a21b34320b24320b3436a21b44320b34320b4436a21b54320b44320" + "b5436a21b64320b54320" + "b6436a21b74320b64320b7436a21b84320b74320b8436a21b94320b84320b9436a21ba4320b94320ba436a21bb4320" + "ba4320bb436a21bc4320" + "bb4320bc436a21bd4320bc4320bd436a21be4320bd4320be436a21bf4320be4320bf436a21c04320bf4320c0436a21" + "c14320c04320c1436a21" + "c24320c14320c2436a21c34320c24320c3436a21c44320c34320c4436a21c54320c44320c5436a21c64320c54320c6" + "436a21c74320c64320c7" + "436a21c84320c74320c8436a21c94320c84320c9436a21ca4320c94320ca436a21cb4320ca4320cb436a21cc4320cb" + "4320cc436a21cd4320cc" + "4320cd436a21ce4320cd4320ce436a21cf4320ce4320cf436a21d04320cf4320d0436a21d14320d04320d1436a21d2" + "4320d14320d2436a21d3" + "4320d24320d3436a21d44320d34320d4436a21d54320d44320d5436a21d64320d54320d6436a21d74320d64320d743" + "6a21d84320d74320d843" + "6a21d94320d84320d9436a21da4320d94320da436a21db4320da4320db436a21dc4320db4320dc436a21dd4320dc43" + "20dd436a21de4320dd43" + "20de436a21df4320de4320df436a21e04320df4320e0436a21e14320e04320e1436a21e24320e14320e2436a21e343" + "20e24320e3436a21e443" + "20e34320e4436a21e54320e44320e5436a21e64320e54320e6436a21e74320e64320e7436a21e84320e74320e8436a" + "21e94320e84320e9436a" + "21ea4320e94320ea436a21eb4320ea4320eb436a21ec4320eb4320ec436a21ed4320ec4320ed436a21ee4320ed4320" + "ee436a21ef4320ee4320" + "ef436a21f04320ef4320f0436a21f14320f04320f1436a21f24320f14320f2436a21f34320f24320f3436a21f44320" + "f34320f4436a21f54320" + "f44320f5436a21f64320f54320f6436a21f74320f64320f7436a21f84320f74320f8436a21f94320f84320f9436a21" + "fa4320f94320fa436a21" + "fb4320fa4320fb436a21fc4320fb4320fc436a21fd4320fc4320fd436a21fe4320fd4320fe436a21ff4320fe4320ff" + "436a21804420ff432080" + "446a2181442080442081446a2182442081442082446a2183442082442083446a2184442083442084446a2185442084" + "442085446a2186442085" + "442086446a2187442086442087446a2188442087442088446a2189442088442089446a218a44208944208a446a218b" + "44208a44208b446a218c" + "44208b44208c446a218d44208c44208d446a218e44208d44208e446a218f44208e44208f446a219044208f44209044" + "6a219144209044209144" + "6a2192442091442092446a2193442092442093446a2194442093442094446a2195442094442095446a219644209544" + "2096446a219744209644" + "2097446a2198442097442098446a2199442098442099446a219a44209944209a446a219b44209a44209b446a219c44" + "209b44209c446a219d44" + "209c44209d446a219e44209d44209e446a219f44209e44209f446a21a044209f4420a0446a21a14420a04420a1446a" + "21a24420a14420a2446a" + "21a34420a24420a3446a21a44420a34420a4446a21a54420a44420a5446a21a64420a54420a6446a21a74420a64420" + "a7446a21a84420a74420" + "a8446a21a94420a84420a9446a21aa4420a94420aa446a21ab4420aa4420ab446a21ac4420ab4420ac446a21ad4420" + "ac4420ad446a21ae4420" + "ad4420ae446a21af4420ae4420af446a21b04420af4420b0446a21b14420b04420b1446a21b24420b14420b2446a21" + "b34420b24420b3446a21" + "b44420b34420b4446a21b54420b44420b5446a21b64420b54420b6446a21b74420b64420b7446a21b84420b74420b8" + "446a21b94420b84420b9" + "446a21ba4420b94420ba446a21bb4420ba4420bb446a21bc4420bb4420bc446a21bd4420bc4420bd446a21be4420bd" + "4420be446a21bf4420be" + "4420bf446a21c04420bf4420c0446a21c14420c04420c1446a21c24420c14420c2446a21c34420c24420c3446a21c4" + "4420c34420c4446a21c5" + "4420c44420c5446a21c64420c54420c6446a21c74420c64420c7446a21c84420c74420c8446a21c94420c84420c944" + "6a21ca4420c94420ca44" + "6a21cb4420ca4420cb446a21cc4420cb4420cc446a21cd4420cc4420cd446a21ce4420cd4420ce446a21cf4420ce44" + "20cf446a21d04420cf44" + "20d0446a21d14420d04420d1446a21d24420d14420d2446a21d34420d24420d3446a21d44420d34420d4446a21d544" + "20d44420d5446a21d644" + "20d54420d6446a21d74420d64420d7446a21d84420d74420d8446a21d94420d84420d9446a21da4420d94420da446a" + "21db4420da4420db446a" + "21dc4420db4420dc446a21dd4420dc4420dd446a21de4420dd4420de446a21df4420de4420df446a21e04420df4420" + "e0446a21e14420e04420" + "e1446a21e24420e14420e2446a21e34420e24420e3446a21e44420e34420e4446a21e54420e44420e5446a21e64420" + "e54420e6446a21e74420" + "e64420e7446a21e84420e74420e8446a21e94420e84420e9446a21ea4420e94420ea446a21eb4420ea4420eb446a21" + "ec4420eb4420ec446a21" + "ed4420ec4420ed446a21ee4420ed4420ee446a21ef4420ee4420ef446a21f04420ef4420f0446a21f14420f04420f1" + "446a21f24420f14420f2" + "446a21f34420f24420f3446a21f44420f34420f4446a21f54420f44420f5446a21f64420f54420f6446a21f74420f6" + "4420f7446a21f84420f7" + "4420f8446a21f94420f84420f9446a21fa4420f94420fa446a21fb4420fa4420fb446a21fc4420fb4420fc446a21fd" + "4420fc4420fd446a21fe" + "4420fd4420fe446a21ff4420fe4420ff446a21804520ff442080456a2181452080452081456a218245208145208245" + "6a218345208245208345" + "6a2184452083452084456a2185452084452085456a2186452085452086456a2187452086452087456a218845208745" + "2088456a218945208845" + "2089456a218a45208945208a456a218b45208a45208b456a218c45208b45208c456a218d45208c45208d456a218e45" + "208d45208e456a218f45" + "208e45208f456a219045208f452090456a2191452090452091456a2192452091452092456a2193452092452093456a" + "2194452093452094456a" + "2195452094452095456a2196452095452096456a2197452096452097456a2198452097452098456a21994520984520" + "99456a219a4520994520" + "9a456a219b45209a45209b456a219c45209b45209c456a219d45209c45209d456a219e45209d45209e456a219f4520" + "9e45209f456a21a04520" + "9f4520a0456a21a14520a04520a1456a21a24520a14520a2456a21a34520a24520a3456a21a44520a34520a4456a21" + "a54520a44520a5456a21" + "a64520a54520a6456a21a74520a64520a7456a21a84520a74520a8456a21a94520a84520a9456a21aa4520a94520aa" + "456a21ab4520aa4520ab" + "456a21ac4520ab4520ac456a21ad4520ac4520ad456a21ae4520ad4520ae456a21af4520ae4520af456a21b04520af" + "4520b0456a21b14520b0" + "4520b1456a21b24520b14520b2456a21b34520b24520b3456a21b44520b34520b4456a21b54520b44520b5456a21b6" + "4520b54520b6456a21b7" + "4520b64520b7456a21b84520b74520b8456a21b94520b84520b9456a21ba4520b94520ba456a21bb4520ba4520bb45" + "6a21bc4520bb4520bc45" + "6a21bd4520bc4520bd456a21be4520bd4520be456a21bf4520be4520bf456a21c04520bf4520c0456a21c14520c045" + "20c1456a21c24520c145" + "20c2456a21c34520c24520c3456a21c44520c34520c4456a21c54520c44520c5456a21c64520c54520c6456a21c745" + "20c64520c7456a21c845" + "20c74520c8456a21c94520c84520c9456a21ca4520c94520ca456a21cb4520ca4520cb456a21cc4520cb4520cc456a" + "21cd4520cc4520cd456a" + "21ce4520cd4520ce456a21cf4520ce4520cf456a21d04520cf4520d0456a21d14520d04520d1456a21d24520d14520" + "d2456a21d34520d24520" + "d3456a21d44520d34520d4456a21d54520d44520d5456a21d64520d54520d6456a21d74520d64520d7456a21d84520" + "d74520d8456a21d94520" + "d84520d9456a21da4520d94520da456a21db4520da4520db456a21dc4520db4520dc456a21dd4520dc4520dd456a21" + "de4520dd4520de456a21" + "df4520de4520df456a21e04520df4520e0456a21e14520e04520e1456a21e24520e14520e2456a21e34520e24520e3" + "456a21e44520e34520e4" + "456a21e54520e44520e5456a21e64520e54520e6456a21e74520e64520e7456a21e84520e74520e8456a21e94520e8" + "4520e9456a21ea4520e9" + "4520ea456a21eb4520ea4520eb456a21ec4520eb4520ec456a21ed4520ec4520ed456a21ee4520ed4520ee456a21ef" + "4520ee4520ef456a21f0" + "4520ef4520f0456a21f14520f04520f1456a21f24520f14520f2456a21f34520f24520f3456a21f44520f34520f445" + "6a21f54520f44520f545" + "6a21f64520f54520f6456a21f74520f64520f7456a21f84520f74520f8456a21f94520f84520f9456a21fa4520f945" + "20fa456a21fb4520fa45" + "20fb456a21fc4520fb4520fc456a21fd4520fc4520fd456a21fe4520fd4520fe456a21ff4520fe4520ff456a218046" + "20ff452080466a218146" + "2080462081466a2182462081462082466a2183462082462083466a2184462083462084466a2185462084462085466a" + "2186462085462086466a" + "2187462086462087466a2188462087462088466a2189462088462089466a218a46208946208a466a218b46208a4620" + "8b466a218c46208b4620" + "8c466a218d46208c46208d466a218e46208d46208e466a218f46208e46208f466a219046208f462090466a21914620" + "90462091466a21924620" + "91462092466a2193462092462093466a2194462093462094466a2195462094462095466a2196462095462096466a21" + "97462096462097466a21" + "98462097462098466a2199462098462099466a219a46209946209a466a219b46209a46209b466a219c46209b46209c" + "466a219d46209c46209d" + "466a219e46209d46209e466a219f46209e46209f466a21a046209f4620a0466a21a14620a04620a1466a21a24620a1" + "4620a2466a21a34620a2" + "4620a3466a21a44620a34620a4466a21a54620a44620a5466a21a64620a54620a6466a21a74620a64620a7466a21a8" + "4620a74620a8466a21a9" + "4620a84620a9466a21aa4620a94620aa466a21ab4620aa4620ab466a21ac4620ab4620ac466a21ad4620ac4620ad46" + "6a21ae4620ad4620ae46" + "6a21af4620ae4620af466a21b04620af4620b0466a21b14620b04620b1466a21b24620b14620b2466a21b34620b246" + "20b3466a21b44620b346" + "20b4466a21b54620b44620b5466a21b64620b54620b6466a21b74620b64620b7466a21b84620b74620b8466a21b946" + "20b84620b9466a21ba46" + "20b94620ba466a21bb4620ba4620bb466a21bc4620bb4620bc466a21bd4620bc4620bd466a21be4620bd4620be466a" + "21bf4620be4620bf466a" + "21c04620bf4620c0466a21c14620c04620c1466a21c24620c14620c2466a21c34620c24620c3466a21c44620c34620" + "c4466a21c54620c44620" + "c5466a21c64620c54620c6466a21c74620c64620c7466a21c84620c74620c8466a21c94620c84620c9466a21ca4620" + "c94620ca466a21cb4620" + "ca4620cb466a21cc4620cb4620cc466a21cd4620cc4620cd466a21ce4620cd4620ce466a21cf4620ce4620cf466a21" + "d04620cf4620d0466a21" + "d14620d04620d1466a21d24620d14620d2466a21d34620d24620d3466a21d44620d34620d4466a21d54620d44620d5" + "466a21d64620d54620d6" + "466a21d74620d64620d7466a21d84620d74620d8466a21d94620d84620d9466a21da4620d94620da466a21db4620da" + "4620db466a21dc4620db" + "4620dc466a21dd4620dc4620dd466a21de4620dd4620de466a21df4620de4620df466a21e04620df4620e0466a21e1" + "4620e04620e1466a21e2" + "4620e14620e2466a21e34620e24620e3466a21e44620e34620e4466a21e54620e44620e5466a21e64620e54620e646" + "6a21e74620e64620e746" + "6a21e84620e74620e8466a21e94620e84620e9466a21ea4620e94620ea466a21eb4620ea4620eb466a21ec4620eb46" + "20ec466a21ed4620ec46" + "20ed466a21ee4620ed4620ee466a21ef4620ee4620ef466a21f04620ef4620f0466a21f14620f04620f1466a21f246" + "20f14620f2466a21f346" + "20f24620f3466a21f44620f34620f4466a21f54620f44620f5466a21f64620f54620f6466a21f74620f64620f7466a" + "21f84620f74620f8466a" + "21f94620f84620f9466a21fa4620f94620fa466a21fb4620fa4620fb466a21fc4620fb4620fc466a21fd4620fc4620" + "fd466a21fe4620fd4620" + "fe466a21ff4620fe4620ff466a21804720ff462080476a2181472080472081476a2182472081472082476a21834720" + "82472083476a21844720" + "83472084476a2185472084472085476a2186472085472086476a2187472086472087476a2188472087472088476a21" + "89472088472089476a21" + "8a47208947208a476a218b47208a47208b476a218c47208b47208c476a218d47208c47208d476a218e47208d47208e" + "476a218f47208e47208f" + "476a219047208f472090476a2191472090472091476a2192472091472092476a2193472092472093476a2194472093" + "472094476a2195472094" + "472095476a2196472095472096476a2197472096472097476a2198472097472098476a2199472098472099476a219a" + "47209947209a476a219b" + "47209a47209b476a219c47209b47209c476a219d47209c47209d476a219e47209d47209e476a219f47209e47209f47" + "6a21a047209f4720a047" + "6a21a14720a04720a1476a21a24720a14720a2476a21a34720a24720a3476a21a44720a34720a4476a21a54720a447" + "20a5476a21a64720a547" + "20a6476a21a74720a64720a7476a21a84720a74720a8476a21a94720a84720a9476a21aa4720a94720aa476a21ab47" + "20aa4720ab476a21ac47" + "20ab4720ac476a21ad4720ac4720ad476a21ae4720ad4720ae476a21af4720ae4720af476a21b04720af4720b0476a" + "21b14720b04720b1476a" + "21b24720b14720b2476a21b34720b24720b3476a21b44720b34720b4476a21b54720b44720b5476a21b64720b54720" + "b6476a21b74720b64720" + "b7476a21b84720b74720b8476a21b94720b84720b9476a21ba4720b94720ba476a21bb4720ba4720bb476a21bc4720" + "bb4720bc476a21bd4720" + "bc4720bd476a21be4720bd4720be476a21bf4720be4720bf476a21c04720bf4720c0476a21c14720c04720c1476a21" + "c24720c14720c2476a21" + "c34720c24720c3476a21c44720c34720c4476a21c54720c44720c5476a21c64720c54720c6476a21c74720c64720c7" + "476a21c84720c74720c8" + "476a21c94720c84720c9476a21ca4720c94720ca476a21cb4720ca4720cb476a21cc4720cb4720cc476a21cd4720cc" + "4720cd476a21ce4720cd" + "4720ce476a21cf4720ce4720cf476a21d04720cf4720d0476a21d14720d04720d1476a21d24720d14720d2476a21d3" + "4720d24720d3476a21d4" + "4720d34720d4476a21d54720d44720d5476a21d64720d54720d6476a21d74720d64720d7476a21d84720d74720d847" + "6a21d94720d84720d947" + "6a21da4720d94720da476a21db4720da4720db476a21dc4720db4720dc476a21dd4720dc4720dd476a21de4720dd47" + "20de476a21df4720de47" + "20df476a21e04720df4720e0476a21e14720e04720e1476a21e24720e14720e2476a21e34720e24720e3476a21e447" + "20e34720e4476a21e547" + "20e44720e5476a21e64720e54720e6476a21e74720e64720e7476a21e84720e74720e8476a21e94720e84720e9476a" + "21ea4720e94720ea476a" + "21eb4720ea4720eb476a21ec4720eb4720ec476a21ed4720ec4720ed476a21ee4720ed4720ee476a21ef4720ee4720" + "ef476a21f04720ef4720" + "f0476a21f14720f04720f1476a21f24720f14720f2476a21f34720f24720f3476a21f44720f34720f4476a21f54720" + "f44720f5476a21f64720" + "f54720f6476a21f74720f64720f7476a21f84720f74720f8476a21f94720f84720f9476a21fa4720f94720fa476a21" + "fb4720fa4720fb476a21" + "fc4720fb4720fc476a21fd4720fc4720fd476a21fe4720fd4720fe476a21ff4720fe4720ff476a21804820ff472080" + "486a2181482080482081" + "486a2182482081482082486a2183482082482083486a2184482083482084486a2185482084482085486a2186482085" + "482086486a2187482086" + "482087486a2188482087482088486a2189482088482089486a218a48208948208a486a218b48208a48208b486a218c" + "48208b48208c486a218d" + "48208c48208d486a218e48208d48208e486a218f48208e48208f486a219048208f482090486a219148209048209148" + "6a219248209148209248" + "6a2193482092482093486a2194482093482094486a2195482094482095486a2196482095482096486a219748209648" + "2097486a219848209748" + "2098486a2199482098482099486a219a48209948209a486a219b48209a48209b486a219c48209b48209c486a219d48" + "209c48209d486a219e48" + "209d48209e486a219f48209e48209f486a21a048209f4820a0486a21a14820a04820a1486a21a24820a14820a2486a" + "21a34820a24820a3486a" + "21a44820a34820a4486a21a54820a44820a5486a21a64820a54820a6486a21a74820a64820a7486a21a84820a74820" + "a8486a21a94820a84820" + "a9486a21aa4820a94820aa486a21ab4820aa4820ab486a21ac4820ab4820ac486a21ad4820ac4820ad486a21ae4820" + "ad4820ae486a21af4820" + "ae4820af486a21b04820af4820b0486a21b14820b04820b1486a21b24820b14820b2486a21b34820b24820b3486a21" + "b44820b34820b4486a21" + "b54820b44820b5486a21b64820b54820b6486a21b74820b64820b7486a21b84820b74820b8486a21b94820b84820b9" + "486a21ba4820b94820ba" + "486a21bb4820ba4820bb486a21bc4820bb4820bc486a21bd4820bc4820bd486a21be4820bd4820be486a21bf4820be" + "4820bf486a21c04820bf" + "4820c0486a21c14820c04820c1486a21c24820c14820c2486a21c34820c24820c3486a21c44820c34820c4486a21c5" + "4820c44820c5486a21c6" + "4820c54820c6486a21c74820c64820c7486a21c84820c74820c8486a21c94820c84820c9486a21ca4820c94820ca48" + "6a21cb4820ca4820cb48" + "6a21cc4820cb4820cc486a21cd4820cc4820cd486a21ce4820cd4820ce486a21cf4820ce4820cf486a21d04820cf48" + "20d0486a21d14820d048" + "20d1486a21d24820d14820d2486a21d34820d24820d3486a21d44820d34820d4486a21d54820d44820d5486a21d648" + "20d54820d6486a21d748" + "20d64820d7486a21d84820d74820d8486a21d94820d84820d9486a21da4820d94820da486a21db4820da4820db486a" + "21dc4820db4820dc486a" + "21dd4820dc4820dd486a21de4820dd4820de486a21df4820de4820df486a21e04820df4820e0486a21e14820e04820" + "e1486a21e24820e14820" + "e2486a21e34820e24820e3486a21e44820e34820e4486a21e54820e44820e5486a21e64820e54820e6486a21e74820" + "e64820e7486a21e84820" + "e74820e8486a21e94820e84820e9486a21ea4820e94820ea486a21eb4820ea4820eb486a21ec4820eb4820ec486a21" + "ed4820ec4820ed486a21" + "ee4820ed4820ee486a21ef4820ee4820ef486a21f04820ef4820f0486a21f14820f04820f1486a21f24820f14820f2" + "486a21f34820f24820f3" + "486a21f44820f34820f4486a21f54820f44820f5486a21f64820f54820f6486a21f74820f64820f7486a21f84820f7" + "4820f8486a21f94820f8" + "4820f9486a21fa4820f94820fa486a21fb4820fa4820fb486a21fc4820fb4820fc486a21fd4820fc4820fd486a21fe" + "4820fd4820fe486a21ff" + "4820fe4820ff486a21804920ff482080496a2181492080492081496a2182492081492082496a218349208249208349" + "6a218449208349208449" + "6a2185492084492085496a2186492085492086496a2187492086492087496a2188492087492088496a218949208849" + "2089496a218a49208949" + "208a496a218b49208a49208b496a218c49208b49208c496a218d49208c49208d496a218e49208d49208e496a218f49" + "208e49208f496a219049" + "208f492090496a2191492090492091496a2192492091492092496a2193492092492093496a2194492093492094496a" + "2195492094492095496a" + "2196492095492096496a2197492096492097496a2198492097492098496a2199492098492099496a219a4920994920" + "9a496a219b49209a4920" + "9b496a219c49209b49209c496a219d49209c49209d496a219e49209d49209e496a219f49209e49209f496a21a04920" + "9f4920a0496a21a14920" + "a04920a1496a21a24920a14920a2496a21a34920a24920a3496a21a44920a34920a4496a21a54920a44920a5496a21" + "a64920a54920a6496a21" + "a74920a64920a7496a21a84920a74920a8496a21a94920a84920a9496a21aa4920a94920aa496a21ab4920aa4920ab" + "496a21ac4920ab4920ac" + "496a21ad4920ac4920ad496a21ae4920ad4920ae496a21af4920ae4920af496a21b04920af4920b0496a21b14920b0" + "4920b1496a21b24920b1" + "4920b2496a21b34920b24920b3496a21b44920b34920b4496a21b54920b44920b5496a21b64920b54920b6496a21b7" + "4920b64920b7496a21b8" + "4920b74920b8496a21b94920b84920b9496a21ba4920b94920ba496a21bb4920ba4920bb496a21bc4920bb4920bc49" + "6a21bd4920bc4920bd49" + "6a21be4920bd4920be496a21bf4920be4920bf496a21c04920bf4920c0496a21c14920c04920c1496a21c24920c149" + "20c2496a21c34920c249" + "20c3496a21c44920c34920c4496a21c54920c44920c5496a21c64920c54920c6496a21c74920c64920c7496a21c849" + "20c74920c8496a21c949" + "20c84920c9496a21ca4920c94920ca496a21cb4920ca4920cb496a21cc4920cb4920cc496a21cd4920cc4920cd496a" + "21ce4920cd4920ce496a" + "21cf4920ce4920cf496a21d04920cf4920d0496a21d14920d04920d1496a21d24920d14920d2496a21d34920d24920" + "d3496a21d44920d34920" + "d4496a21d54920d44920d5496a21d64920d54920d6496a21d74920d64920d7496a21d84920d74920d8496a21d94920" + "d84920d9496a21da4920" + "d94920da496a21db4920da4920db496a21dc4920db4920dc496a21dd4920dc4920dd496a21de4920dd4920de496a21" + "df4920de4920df496a21" + "e04920df4920e0496a21e14920e04920e1496a21e24920e14920e2496a21e34920e24920e3496a21e44920e34920e4" + "496a21e54920e44920e5" + "496a21e64920e54920e6496a21e74920e64920e7496a21e84920e74920e8496a21e94920e84920e9496a21ea4920e9" + "4920ea496a21eb4920ea" + "4920eb496a21ec4920eb4920ec496a21ed4920ec4920ed496a21ee4920ed4920ee496a21ef4920ee4920ef496a21f0" + "4920ef4920f0496a21f1" + "4920f04920f1496a21f24920f14920f2496a21f34920f24920f3496a21f44920f34920f4496a21f54920f44920f549" + "6a21f64920f54920f649" + "6a21f74920f64920f7496a21f84920f74920f8496a21f94920f84920f9496a21fa4920f94920fa496a21fb4920fa49" + "20fb496a21fc4920fb49" + "20fc496a21fd4920fc4920fd496a21fe4920fd4920fe496a21ff4920fe4920ff496a21804a20ff4920804a6a21814a" + "20804a20814a6a21824a" + "20814a20824a6a21834a20824a20834a6a21844a20834a20844a6a21854a20844a20854a6a21864a20854a20864a6a" + "21874a20864a20874a6a" + "21884a20874a20884a6a21894a20884a20894a6a218a4a20894a208a4a6a218b4a208a4a208b4a6a218c4a208b4a20" + "8c4a6a218d4a208c4a20" + "8d4a6a218e4a208d4a208e4a6a218f4a208e4a208f4a6a21904a208f4a20904a6a21914a20904a20914a6a21924a20" + "914a20924a6a21934a20" + "924a20934a6a21944a20934a20944a6a21954a20944a20954a6a21964a20954a20964a6a21974a20964a20974a6a21" + "984a20974a20984a6a21" + "994a20984a20994a6a219a4a20994a209a4a6a219b4a209a4a209b4a6a219c4a209b4a209c4a6a219d4a209c4a209d" + "4a6a219e4a209d4a209e" + "4a6a219f4a209e4a209f4a6a21a04a209f4a20a04a6a21a14a20a04a20a14a6a21a24a20a14a20a24a6a21a34a20a2" + "4a20a34a6a21a44a20a3" + "4a20a44a6a21a54a20a44a20a54a6a21a64a20a54a20a64a6a21a74a20a64a20a74a6a21a84a20a74a20a84a6a21a9" + "4a20a84a20a94a6a21aa" + "4a20a94a20aa4a6a21ab4a20aa4a20ab4a6a21ac4a20ab4a20ac4a6a21ad4a20ac4a20ad4a6a21ae4a20ad4a20ae4a" + "6a21af4a20ae4a20af4a" + "6a21b04a20af4a20b04a6a21b14a20b04a20b14a6a21b24a20b14a20b24a6a21b34a20b24a20b34a6a21b44a20b34a" + "20b44a6a21b54a20b44a" + "20b54a6a21b64a20b54a20b64a6a21b74a20b64a20b74a6a21b84a20b74a20b84a6a21b94a20b84a20b94a6a21ba4a" + "20b94a20ba4a6a21bb4a" + "20ba4a20bb4a6a21bc4a20bb4a20bc4a6a21bd4a20bc4a20bd4a6a21be4a20bd4a20be4a6a21bf4a20be4a20bf4a6a" + "21c04a20bf4a20c04a6a" + "21c14a20c04a20c14a6a21c24a20c14a20c24a6a21c34a20c24a20c34a6a21c44a20c34a20c44a6a21c54a20c44a20" + "c54a6a21c64a20c54a20" + "c64a6a21c74a20c64a20c74a6a21c84a20c74a20c84a6a21c94a20c84a20c94a6a21ca4a20c94a20ca4a6a21cb4a20" + "ca4a20cb4a6a21cc4a20" + "cb4a20cc4a6a21cd4a20cc4a20cd4a6a21ce4a20cd4a20ce4a6a21cf4a20ce4a20cf4a6a21d04a20cf4a20d04a6a21" + "d14a20d04a20d14a6a21" + "d24a20d14a20d24a6a21d34a20d24a20d34a6a21d44a20d34a20d44a6a21d54a20d44a20d54a6a21d64a20d54a20d6" + "4a6a21d74a20d64a20d7" + "4a6a21d84a20d74a20d84a6a21d94a20d84a20d94a6a21da4a20d94a20da4a6a21db4a20da4a20db4a6a21dc4a20db" + "4a20dc4a6a21dd4a20dc" + "4a20dd4a6a21de4a20dd4a20de4a6a21df4a20de4a20df4a6a21e04a20df4a20e04a6a21e14a20e04a20e14a6a21e2" + "4a20e14a20e24a6a21e3" + "4a20e24a20e34a6a21e44a20e34a20e44a6a21e54a20e44a20e54a6a21e64a20e54a20e64a6a21e74a20e64a20e74a" + "6a21e84a20e74a20e84a" + "6a21e94a20e84a20e94a6a21ea4a20e94a20ea4a6a21eb4a20ea4a20eb4a6a21ec4a20eb4a20ec4a6a21ed4a20ec4a" + "20ed4a6a21ee4a20ed4a" + "20ee4a6a21ef4a20ee4a20ef4a6a21f04a20ef4a20f04a6a21f14a20f04a20f14a6a21f24a20f14a20f24a6a21f34a" + "20f24a20f34a6a21f44a" + "20f34a20f44a6a21f54a20f44a20f54a6a21f64a20f54a20f64a6a21f74a20f64a20f74a6a21f84a20f74a20f84a6a" + "21f94a20f84a20f94a6a" + "21fa4a20f94a20fa4a6a21fb4a20fa4a20fb4a6a21fc4a20fb4a20fc4a6a21fd4a20fc4a20fd4a6a21fe4a20fd4a20" + "fe4a6a21ff4a20fe4a20" + "ff4a6a21804b20ff4a20804b6a21814b20804b20814b6a21824b20814b20824b6a21834b20824b20834b6a21844b20" + "834b20844b6a21854b20" + "844b20854b6a21864b20854b20864b6a21874b20864b20874b6a21884b20874b20884b6a21894b20884b20894b6a21" + "8a4b20894b208a4b6a21" + "8b4b208a4b208b4b6a218c4b208b4b208c4b6a218d4b208c4b208d4b6a218e4b208d4b208e4b6a218f4b208e4b208f" + "4b6a21904b208f4b2090" + "4b6a21914b20904b20914b6a21924b20914b20924b6a21934b20924b20934b6a21944b20934b20944b6a21954b2094" + "4b20954b6a21964b2095" + "4b20964b6a21974b20964b20974b6a21984b20974b20984b6a21994b20984b20994b6a219a4b20994b209a4b6a219b" + "4b209a4b209b4b6a219c" + "4b209b4b209c4b6a219d4b209c4b209d4b6a219e4b209d4b209e4b6a219f4b209e4b209f4b6a21a04b209f4b20a04b" + "6a21a14b20a04b20a14b" + "6a21a24b20a14b20a24b6a21a34b20a24b20a34b6a21a44b20a34b20a44b6a21a54b20a44b20a54b6a21a64b20a54b" + "20a64b6a21a74b20a64b" + "20a74b6a21a84b20a74b20a84b6a21a94b20a84b20a94b6a21aa4b20a94b20aa4b6a21ab4b20aa4b20ab4b6a21ac4b" + "20ab4b20ac4b6a21ad4b" + "20ac4b20ad4b6a21ae4b20ad4b20ae4b6a21af4b20ae4b20af4b6a21b04b20af4b20b04b6a21b14b20b04b20b14b6a" + "21b24b20b14b20b24b6a" + "21b34b20b24b20b34b6a21b44b20b34b20b44b6a21b54b20b44b20b54b6a21b64b20b54b20b64b6a21b74b20b64b20" + "b74b6a21b84b20b74b20" + "b84b6a21b94b20b84b20b94b6a21ba4b20b94b20ba4b6a21bb4b20ba4b20bb4b6a21bc4b20bb4b20bc4b6a21bd4b20" + "bc4b20bd4b6a21be4b20" + "bd4b20be4b6a21bf4b20be4b20bf4b6a21c04b20bf4b20c04b6a21c14b20c04b20c14b6a21c24b20c14b20c24b6a21" + "c34b20c24b20c34b6a21" + "c44b20c34b20c44b6a21c54b20c44b20c54b6a21c64b20c54b20c64b6a21c74b20c64b20c74b6a21c84b20c74b20c8" + "4b6a21c94b20c84b20c9" + "4b6a21ca4b20c94b20ca4b6a21cb4b20ca4b20cb4b6a21cc4b20cb4b20cc4b6a21cd4b20cc4b20cd4b6a21ce4b20cd" + "4b20ce4b6a21cf4b20ce" + "4b20cf4b6a21d04b20cf4b20d04b6a21d14b20d04b20d14b6a21d24b20d14b20d24b6a21d34b20d24b20d34b6a21d4" + "4b20d34b20d44b6a21d5" + "4b20d44b20d54b6a21d64b20d54b20d64b6a21d74b20d64b20d74b6a21d84b20d74b20d84b6a21d94b20d84b20d94b" + "6a21da4b20d94b20da4b" + "6a21db4b20da4b20db4b6a21dc4b20db4b20dc4b6a21dd4b20dc4b20dd4b6a21de4b20dd4b20de4b6a21df4b20de4b" + "20df4b6a21e04b20df4b" + "20e04b6a21e14b20e04b20e14b6a21e24b20e14b20e24b6a21e34b20e24b20e34b6a21e44b20e34b20e44b6a21e54b" + "20e44b20e54b6a21e64b" + "20e54b20e64b6a21e74b20e64b20e74b6a21e84b20e74b20e84b6a21e94b20e84b20e94b6a21ea4b20e94b20ea4b6a" + "21eb4b20ea4b20eb4b6a" + "21ec4b20eb4b20ec4b6a21ed4b20ec4b20ed4b6a21ee4b20ed4b20ee4b6a21ef4b20ee4b20ef4b6a21f04b20ef4b20" + "f04b6a21f14b20f04b20" + "f14b6a21f24b20f14b20f24b6a21f34b20f24b20f34b6a21f44b20f34b20f44b6a21f54b20f44b20f54b6a21f64b20" + "f54b20f64b6a21f74b20" + "f64b20f74b6a21f84b20f74b20f84b6a21f94b20f84b20f94b6a21fa4b20f94b20fa4b6a21fb4b20fa4b20fb4b6a21" + "fc4b20fb4b20fc4b6a21" + "fd4b20fc4b20fd4b6a21fe4b20fd4b20fe4b6a21ff4b20fe4b20ff4b6a21804c20ff4b20804c6a21814c20804c2081" + "4c6a21824c20814c2082" + "4c6a21834c20824c20834c6a21844c20834c20844c6a21854c20844c20854c6a21864c20854c20864c6a21874c2086" + "4c20874c6a21884c2087" + "4c20884c6a21894c20884c20894c6a218a4c20894c208a4c6a218b4c208a4c208b4c6a218c4c208b4c208c4c6a218d" + "4c208c4c208d4c6a218e" + "4c208d4c208e4c6a218f4c208e4c208f4c6a21904c208f4c20904c6a21914c20904c20914c6a21924c20914c20924c" + "6a21934c20924c20934c" + "6a21944c20934c20944c6a21954c20944c20954c6a21964c20954c20964c6a21974c20964c20974c6a21984c20974c" + "20984c6a21994c20984c" + "20994c6a219a4c20994c209a4c6a219b4c209a4c209b4c6a219c4c209b4c209c4c6a219d4c209c4c209d4c6a219e4c" + "209d4c209e4c6a219f4c" + "209e4c209f4c6a21a04c209f4c20a04c6a21a14c20a04c20a14c6a21a24c20a14c20a24c6a21a34c20a24c20a34c6a" + "21a44c20a34c20a44c6a" + "21a54c20a44c20a54c6a21a64c20a54c20a64c6a21a74c20a64c20a74c6a21a84c20a74c20a84c6a21a94c20a84c20" + "a94c6a21aa4c20a94c20" + "aa4c6a21ab4c20aa4c20ab4c6a21ac4c20ab4c20ac4c6a21ad4c20ac4c20ad4c6a21ae4c20ad4c20ae4c6a21af4c20" + "ae4c20af4c6a21b04c20" + "af4c20b04c6a21b14c20b04c20b14c6a21b24c20b14c20b24c6a21b34c20b24c20b34c6a21b44c20b34c20b44c6a21" + "b54c20b44c20b54c6a21" + "b64c20b54c20b64c6a21b74c20b64c20b74c6a21b84c20b74c20b84c6a21b94c20b84c20b94c6a21ba4c20b94c20ba" + "4c6a21bb4c20ba4c20bb" + "4c6a21bc4c20bb4c20bc4c6a21bd4c20bc4c20bd4c6a21be4c20bd4c20be4c6a21bf4c20be4c20bf4c6a21c04c20bf" + "4c20c04c6a21c14c20c0" + "4c20c14c6a21c24c20c14c20c24c6a21c34c20c24c20c34c6a21c44c20c34c20c44c6a21c54c20c44c20c54c6a21c6" + "4c20c54c20c64c6a21c7" + "4c20c64c20c74c6a21c84c20c74c20c84c6a21c94c20c84c20c94c6a21ca4c20c94c20ca4c6a21cb4c20ca4c20cb4c" + "6a21cc4c20cb4c20cc4c" + "6a21cd4c20cc4c20cd4c6a21ce4c20cd4c20ce4c6a21cf4c20ce4c20cf4c6a21d04c20cf4c20d04c6a21d14c20d04c" + "20d14c6a21d24c20d14c" + "20d24c6a21d34c20d24c20d34c6a21d44c20d34c20d44c6a21d54c20d44c20d54c6a21d64c20d54c20d64c6a21d74c" + "20d64c20d74c6a21d84c" + "20d74c20d84c6a21d94c20d84c20d94c6a21da4c20d94c20da4c6a21db4c20da4c20db4c6a21dc4c20db4c20dc4c6a" + "21dd4c20dc4c20dd4c6a" + "21de4c20dd4c20de4c6a21df4c20de4c20df4c6a21e04c20df4c20e04c6a21e14c20e04c20e14c6a21e24c20e14c20" + "e24c6a21e34c20e24c20" + "e34c6a21e44c20e34c20e44c6a21e54c20e44c20e54c6a21e64c20e54c20e64c6a21e74c20e64c20e74c6a21e84c20" + "e74c20e84c6a21e94c20" + "e84c20e94c6a21ea4c20e94c20ea4c6a21eb4c20ea4c20eb4c6a21ec4c20eb4c20ec4c6a21ed4c20ec4c20ed4c6a21" + "ee4c20ed4c20ee4c6a21" + "ef4c20ee4c20ef4c6a21f04c20ef4c20f04c6a21f14c20f04c20f14c6a21f24c20f14c20f24c6a21f34c20f24c20f3" + "4c6a21f44c20f34c20f4" + "4c6a21f54c20f44c20f54c6a21f64c20f54c20f64c6a21f74c20f64c20f74c6a21f84c20f74c20f84c6a21f94c20f8" + "4c20f94c6a21fa4c20f9" + "4c20fa4c6a21fb4c20fa4c20fb4c6a21fc4c20fb4c20fc4c6a21fd4c20fc4c20fd4c6a21fe4c20fd4c20fe4c6a21ff" + "4c20fe4c20ff4c6a2180" + "4d20ff4c20804d6a21814d20804d20814d6a21824d20814d20824d6a21834d20824d20834d6a21844d20834d20844d" + "6a21854d20844d20854d" + "6a21864d20854d20864d6a21874d20864d20874d6a21884d20874d20884d6a21894d20884d20894d6a218a4d20894d" + "208a4d6a218b4d208a4d" + "208b4d6a218c4d208b4d208c4d6a218d4d208c4d208d4d6a218e4d208d4d208e4d6a218f4d208e4d208f4d6a21904d" + "208f4d20904d6a21914d" + "20904d20914d6a21924d20914d20924d6a21934d20924d20934d6a21944d20934d20944d6a21954d20944d20954d6a" + "21964d20954d20964d6a" + "21974d20964d20974d6a21984d20974d20984d6a21994d20984d20994d6a219a4d20994d209a4d6a219b4d209a4d20" + "9b4d6a219c4d209b4d20" + "9c4d6a219d4d209c4d209d4d6a219e4d209d4d209e4d6a219f4d209e4d209f4d6a21a04d209f4d20a04d6a21a14d20" + "a04d20a14d6a21a24d20" + "a14d20a24d6a21a34d20a24d20a34d6a21a44d20a34d20a44d6a21a54d20a44d20a54d6a21a64d20a54d20a64d6a21" + "a74d20a64d20a74d6a21" + "a84d20a74d20a84d6a21a94d20a84d20a94d6a21aa4d20a94d20aa4d6a21ab4d20aa4d20ab4d6a21ac4d20ab4d20ac" + "4d6a21ad4d20ac4d20ad" + "4d6a21ae4d20ad4d20ae4d6a21af4d20ae4d20af4d6a21b04d20af4d20b04d6a21b14d20b04d20b14d6a21b24d20b1" + "4d20b24d6a21b34d20b2" + "4d20b34d6a21b44d20b34d20b44d6a21b54d20b44d20b54d6a21b64d20b54d20b64d6a21b74d20b64d20b74d6a21b8" + "4d20b74d20b84d6a21b9" + "4d20b84d20b94d6a21ba4d20b94d20ba4d6a21bb4d20ba4d20bb4d6a21bc4d20bb4d20bc4d6a21bd4d20bc4d20bd4d" + "6a21be4d20bd4d20be4d" + "6a21bf4d20be4d20bf4d6a21c04d20bf4d20c04d6a21c14d20c04d20c14d6a21c24d20c14d20c24d6a21c34d20c24d" + "20c34d6a21c44d20c34d" + "20c44d6a21c54d20c44d20c54d6a21c64d20c54d20c64d6a21c74d20c64d20c74d6a21c84d20c74d20c84d6a21c94d" + "20c84d20c94d6a21ca4d" + "20c94d20ca4d6a21cb4d20ca4d20cb4d6a21cc4d20cb4d20cc4d6a21cd4d20cc4d20cd4d6a21ce4d20cd4d20ce4d6a" + "21cf4d20ce4d20cf4d6a" + "21d04d20cf4d20d04d6a21d14d20d04d20d14d6a21d24d20d14d20d24d6a21d34d20d24d20d34d6a21d44d20d34d20" + "d44d6a21d54d20d44d20" + "d54d6a21d64d20d54d20d64d6a21d74d20d64d20d74d6a21d84d20d74d20d84d6a21d94d20d84d20d94d6a21da4d20" + "d94d20da4d6a21db4d20" + "da4d20db4d6a21dc4d20db4d20dc4d6a21dd4d20dc4d20dd4d6a21de4d20dd4d20de4d6a21df4d20de4d20df4d6a21" + "e04d20df4d20e04d6a21" + "e14d20e04d20e14d6a21e24d20e14d20e24d6a21e34d20e24d20e34d6a21e44d20e34d20e44d6a21e54d20e44d20e5" + "4d6a21e64d20e54d20e6" + "4d6a21e74d20e64d20e74d6a21e84d20e74d20e84d6a21e94d20e84d20e94d6a21ea4d20e94d20ea4d6a21eb4d20ea" + "4d20eb4d6a21ec4d20eb" + "4d20ec4d6a21ed4d20ec4d20ed4d6a21ee4d20ed4d20ee4d6a21ef4d20ee4d20ef4d6a21f04d20ef4d20f04d6a21f1" + "4d20f04d20f14d6a21f2" + "4d20f14d20f24d6a21f34d20f24d20f34d6a21f44d20f34d20f44d6a21f54d20f44d20f54d6a21f64d20f54d20f64d" + "6a21f74d20f64d20f74d" + "6a21f84d20f74d20f84d6a21f94d20f84d20f94d6a21fa4d20f94d20fa4d6a21fb4d20fa4d20fb4d6a21fc4d20fb4d" + "20fc4d6a21fd4d20fc4d" + "20fd4d6a21fe4d20fd4d20fe4d6a21ff4d20fe4d20ff4d6a21804e20ff4d20804e6a21814e20804e20814e6a21824e" + "20814e20824e6a21834e" + "20824e20834e6a21844e20834e20844e6a21854e20844e20854e6a21864e20854e20864e6a21874e20864e20874e6a" + "21884e20874e20884e6a" + "21894e20884e20894e6a218a4e20894e208a4e6a218b4e208a4e208b4e6a218c4e208b4e208c4e6a218d4e208c4e20" + "8d4e6a218e4e208d4e20" "8e4e6a218f4e208f4e0b"; extern std::string const functions5kHex = - "0061736d0100000001070160027f7f017f038a2788270000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000007e2d3038827087465737430303030000008746573743030303100010874657374303030320002087465737430303033000308" - "746573743030303400040874657374303030350005087465737430303036000608746573743030303700070874657374303030380008087465" - "7374303030390009087465737430303130000a087465737430303131000b087465737430303132000c087465737430303133000d0874657374" - "30303134000e087465737430303135000f08746573743030313600100874657374303031370011087465737430303138001208746573743030" - "313900130874657374303032300014087465737430303231001508746573743030323200160874657374303032330017087465737430303234" - "00180874657374303032350019087465737430303236001a087465737430303237001b087465737430303238001c087465737430303239001d" - "087465737430303330001e087465737430303331001f0874657374303033320020087465737430303333002108746573743030333400220874" - "657374303033350023087465737430303336002408746573743030333700250874657374303033380026087465737430303339002708746573" - "743030343000280874657374303034310029087465737430303432002a087465737430303433002b087465737430303434002c087465737430" - "303435002d087465737430303436002e087465737430303437002f087465737430303438003008746573743030343900310874657374303035" - "300032087465737430303531003308746573743030353200340874657374303035330035087465737430303534003608746573743030353500" - "3708746573743030353600380874657374303035370039087465737430303538003a087465737430303539003b087465737430303630003c08" - "7465737430303631003d087465737430303632003e087465737430303633003f08746573743030363400400874657374303036350041087465" - "737430303636004208746573743030363700430874657374303036380044087465737430303639004508746573743030373000460874657374" - "30303731004708746573743030373200480874657374303037330049087465737430303734004a087465737430303735004b08746573743030" - "3736004c087465737430303737004d087465737430303738004e087465737430303739004f0874657374303038300050087465737430303831" - "005108746573743030383200520874657374303038330053087465737430303834005408746573743030383500550874657374303038360056" - "087465737430303837005708746573743030383800580874657374303038390059087465737430303930005a087465737430303931005b0874" - "65737430303932005c087465737430303933005d087465737430303934005e087465737430303935005f087465737430303936006008746573" - "743030393700610874657374303039380062087465737430303939006308746573743031303000640874657374303130310065087465737430" - "3130320066087465737430313033006708746573743031303400680874657374303130350069087465737430313036006a0874657374303130" - "37006b087465737430313038006c087465737430313039006d087465737430313130006e087465737430313131006f08746573743031313200" - "700874657374303131330071087465737430313134007208746573743031313500730874657374303131360074087465737430313137007508" - "74657374303131380076087465737430313139007708746573743031323000780874657374303132310079087465737430313232007a087465" - "737430313233007b087465737430313234007c087465737430313235007d087465737430313236007e087465737430313237007f0874657374" - "303132380080010874657374303132390081010874657374303133300082010874657374303133310083010874657374303133320084010874" - "657374303133330085010874657374303133340086010874657374303133350087010874657374303133360088010874657374303133370089" - "01087465737430313338008a01087465737430313339008b01087465737430313430008c01087465737430313431008d010874657374303134" - "32008e01087465737430313433008f010874657374303134340090010874657374303134350091010874657374303134360092010874657374" - "303134370093010874657374303134380094010874657374303134390095010874657374303135300096010874657374303135310097010874" - "65737430313532009801087465737430313533009901087465737430313534009a01087465737430313535009b01087465737430313536009c" - "01087465737430313537009d01087465737430313538009e01087465737430313539009f0108746573743031363000a0010874657374303136" - "3100a10108746573743031363200a20108746573743031363300a30108746573743031363400a40108746573743031363500a5010874657374" - "3031363600a60108746573743031363700a70108746573743031363800a80108746573743031363900a90108746573743031373000aa010874" - "6573743031373100ab0108746573743031373200ac0108746573743031373300ad0108746573743031373400ae0108746573743031373500af" - "0108746573743031373600b00108746573743031373700b10108746573743031373800b20108746573743031373900b3010874657374303138" - "3000b40108746573743031383100b50108746573743031383200b60108746573743031383300b70108746573743031383400b8010874657374" - "3031383500b90108746573743031383600ba0108746573743031383700bb0108746573743031383800bc0108746573743031383900bd010874" - "6573743031393000be0108746573743031393100bf0108746573743031393200c00108746573743031393300c10108746573743031393400c2" - "0108746573743031393500c30108746573743031393600c40108746573743031393700c50108746573743031393800c6010874657374303139" - "3900c70108746573743032303000c80108746573743032303100c90108746573743032303200ca0108746573743032303300cb010874657374" - "3032303400cc0108746573743032303500cd0108746573743032303600ce0108746573743032303700cf0108746573743032303800d0010874" - "6573743032303900d10108746573743032313000d20108746573743032313100d30108746573743032313200d40108746573743032313300d5" - "0108746573743032313400d60108746573743032313500d70108746573743032313600d80108746573743032313700d9010874657374303231" - "3800da0108746573743032313900db0108746573743032323000dc0108746573743032323100dd0108746573743032323200de010874657374" - "3032323300df0108746573743032323400e00108746573743032323500e10108746573743032323600e20108746573743032323700e3010874" - "6573743032323800e40108746573743032323900e50108746573743032333000e60108746573743032333100e70108746573743032333200e8" - "0108746573743032333300e90108746573743032333400ea0108746573743032333500eb0108746573743032333600ec010874657374303233" - "3700ed0108746573743032333800ee0108746573743032333900ef0108746573743032343000f00108746573743032343100f1010874657374" - "3032343200f20108746573743032343300f30108746573743032343400f40108746573743032343500f50108746573743032343600f6010874" - "6573743032343700f70108746573743032343800f80108746573743032343900f90108746573743032353000fa0108746573743032353100fb" - "0108746573743032353200fc0108746573743032353300fd0108746573743032353400fe0108746573743032353500ff010874657374303235" - "360080020874657374303235370081020874657374303235380082020874657374303235390083020874657374303236300084020874657374" - "303236310085020874657374303236320086020874657374303236330087020874657374303236340088020874657374303236350089020874" - "65737430323636008a02087465737430323637008b02087465737430323638008c02087465737430323639008d02087465737430323730008e" - "02087465737430323731008f020874657374303237320090020874657374303237330091020874657374303237340092020874657374303237" - "350093020874657374303237360094020874657374303237370095020874657374303237380096020874657374303237390097020874657374" - "30323830009802087465737430323831009902087465737430323832009a02087465737430323833009b02087465737430323834009c020874" - "65737430323835009d02087465737430323836009e02087465737430323837009f0208746573743032383800a00208746573743032383900a1" - "0208746573743032393000a20208746573743032393100a30208746573743032393200a40208746573743032393300a5020874657374303239" - "3400a60208746573743032393500a70208746573743032393600a80208746573743032393700a90208746573743032393800aa020874657374" - "3032393900ab0208746573743033303000ac0208746573743033303100ad0208746573743033303200ae0208746573743033303300af020874" - "6573743033303400b00208746573743033303500b10208746573743033303600b20208746573743033303700b30208746573743033303800b4" - "0208746573743033303900b50208746573743033313000b60208746573743033313100b70208746573743033313200b8020874657374303331" - "3300b90208746573743033313400ba0208746573743033313500bb0208746573743033313600bc0208746573743033313700bd020874657374" - "3033313800be0208746573743033313900bf0208746573743033323000c00208746573743033323100c10208746573743033323200c2020874" - "6573743033323300c30208746573743033323400c40208746573743033323500c50208746573743033323600c60208746573743033323700c7" - "0208746573743033323800c80208746573743033323900c90208746573743033333000ca0208746573743033333100cb020874657374303333" - "3200cc0208746573743033333300cd0208746573743033333400ce0208746573743033333500cf0208746573743033333600d0020874657374" - "3033333700d10208746573743033333800d20208746573743033333900d30208746573743033343000d40208746573743033343100d5020874" - "6573743033343200d60208746573743033343300d70208746573743033343400d80208746573743033343500d90208746573743033343600da" - "0208746573743033343700db0208746573743033343800dc0208746573743033343900dd0208746573743033353000de020874657374303335" - "3100df0208746573743033353200e00208746573743033353300e10208746573743033353400e20208746573743033353500e3020874657374" - "3033353600e40208746573743033353700e50208746573743033353800e60208746573743033353900e70208746573743033363000e8020874" - "6573743033363100e90208746573743033363200ea0208746573743033363300eb0208746573743033363400ec0208746573743033363500ed" - "0208746573743033363600ee0208746573743033363700ef0208746573743033363800f00208746573743033363900f1020874657374303337" - "3000f20208746573743033373100f30208746573743033373200f40208746573743033373300f50208746573743033373400f6020874657374" - "3033373500f70208746573743033373600f80208746573743033373700f90208746573743033373800fa0208746573743033373900fb020874" - "6573743033383000fc0208746573743033383100fd0208746573743033383200fe0208746573743033383300ff020874657374303338340080" - "030874657374303338350081030874657374303338360082030874657374303338370083030874657374303338380084030874657374303338" - "390085030874657374303339300086030874657374303339310087030874657374303339320088030874657374303339330089030874657374" - "30333934008a03087465737430333935008b03087465737430333936008c03087465737430333937008d03087465737430333938008e030874" - "65737430333939008f030874657374303430300090030874657374303430310091030874657374303430320092030874657374303430330093" - "030874657374303430340094030874657374303430350095030874657374303430360096030874657374303430370097030874657374303430" - "38009803087465737430343039009903087465737430343130009a03087465737430343131009b03087465737430343132009c030874657374" - "30343133009d03087465737430343134009e03087465737430343135009f0308746573743034313600a00308746573743034313700a1030874" - "6573743034313800a20308746573743034313900a30308746573743034323000a40308746573743034323100a50308746573743034323200a6" - "0308746573743034323300a70308746573743034323400a80308746573743034323500a90308746573743034323600aa030874657374303432" - "3700ab0308746573743034323800ac0308746573743034323900ad0308746573743034333000ae0308746573743034333100af030874657374" - "3034333200b00308746573743034333300b10308746573743034333400b20308746573743034333500b30308746573743034333600b4030874" - "6573743034333700b50308746573743034333800b60308746573743034333900b70308746573743034343000b80308746573743034343100b9" - "0308746573743034343200ba0308746573743034343300bb0308746573743034343400bc0308746573743034343500bd030874657374303434" - "3600be0308746573743034343700bf0308746573743034343800c00308746573743034343900c10308746573743034353000c2030874657374" - "3034353100c30308746573743034353200c40308746573743034353300c50308746573743034353400c60308746573743034353500c7030874" - "6573743034353600c80308746573743034353700c90308746573743034353800ca0308746573743034353900cb0308746573743034363000cc" - "0308746573743034363100cd0308746573743034363200ce0308746573743034363300cf0308746573743034363400d0030874657374303436" - "3500d10308746573743034363600d20308746573743034363700d30308746573743034363800d40308746573743034363900d5030874657374" - "3034373000d60308746573743034373100d70308746573743034373200d80308746573743034373300d90308746573743034373400da030874" - "6573743034373500db0308746573743034373600dc0308746573743034373700dd0308746573743034373800de0308746573743034373900df" - "0308746573743034383000e00308746573743034383100e10308746573743034383200e20308746573743034383300e3030874657374303438" - "3400e40308746573743034383500e50308746573743034383600e60308746573743034383700e70308746573743034383800e8030874657374" - "3034383900e90308746573743034393000ea0308746573743034393100eb0308746573743034393200ec0308746573743034393300ed030874" - "6573743034393400ee0308746573743034393500ef0308746573743034393600f00308746573743034393700f10308746573743034393800f2" - "0308746573743034393900f30308746573743035303000f40308746573743035303100f50308746573743035303200f6030874657374303530" - "3300f70308746573743035303400f80308746573743035303500f90308746573743035303600fa0308746573743035303700fb030874657374" - "3035303800fc0308746573743035303900fd0308746573743035313000fe0308746573743035313100ff030874657374303531320080040874" - "657374303531330081040874657374303531340082040874657374303531350083040874657374303531360084040874657374303531370085" - "040874657374303531380086040874657374303531390087040874657374303532300088040874657374303532310089040874657374303532" - "32008a04087465737430353233008b04087465737430353234008c04087465737430353235008d04087465737430353236008e040874657374" - "30353237008f040874657374303532380090040874657374303532390091040874657374303533300092040874657374303533310093040874" - "657374303533320094040874657374303533330095040874657374303533340096040874657374303533350097040874657374303533360098" - "04087465737430353337009904087465737430353338009a04087465737430353339009b04087465737430353430009c040874657374303534" - "31009d04087465737430353432009e04087465737430353433009f0408746573743035343400a00408746573743035343500a1040874657374" - "3035343600a20408746573743035343700a30408746573743035343800a40408746573743035343900a50408746573743035353000a6040874" - "6573743035353100a70408746573743035353200a80408746573743035353300a90408746573743035353400aa0408746573743035353500ab" - "0408746573743035353600ac0408746573743035353700ad0408746573743035353800ae0408746573743035353900af040874657374303536" - "3000b00408746573743035363100b10408746573743035363200b20408746573743035363300b30408746573743035363400b4040874657374" - "3035363500b50408746573743035363600b60408746573743035363700b70408746573743035363800b80408746573743035363900b9040874" - "6573743035373000ba0408746573743035373100bb0408746573743035373200bc0408746573743035373300bd0408746573743035373400be" - "0408746573743035373500bf0408746573743035373600c00408746573743035373700c10408746573743035373800c2040874657374303537" - "3900c30408746573743035383000c40408746573743035383100c50408746573743035383200c60408746573743035383300c7040874657374" - "3035383400c80408746573743035383500c90408746573743035383600ca0408746573743035383700cb0408746573743035383800cc040874" - "6573743035383900cd0408746573743035393000ce0408746573743035393100cf0408746573743035393200d00408746573743035393300d1" - "0408746573743035393400d20408746573743035393500d30408746573743035393600d40408746573743035393700d5040874657374303539" - "3800d60408746573743035393900d70408746573743036303000d80408746573743036303100d90408746573743036303200da040874657374" - "3036303300db0408746573743036303400dc0408746573743036303500dd0408746573743036303600de0408746573743036303700df040874" - "6573743036303800e00408746573743036303900e10408746573743036313000e20408746573743036313100e30408746573743036313200e4" - "0408746573743036313300e50408746573743036313400e60408746573743036313500e70408746573743036313600e8040874657374303631" - "3700e90408746573743036313800ea0408746573743036313900eb0408746573743036323000ec0408746573743036323100ed040874657374" - "3036323200ee0408746573743036323300ef0408746573743036323400f00408746573743036323500f10408746573743036323600f2040874" - "6573743036323700f30408746573743036323800f40408746573743036323900f50408746573743036333000f60408746573743036333100f7" - "0408746573743036333200f80408746573743036333300f90408746573743036333400fa0408746573743036333500fb040874657374303633" - "3600fc0408746573743036333700fd0408746573743036333800fe0408746573743036333900ff040874657374303634300080050874657374" - "303634310081050874657374303634320082050874657374303634330083050874657374303634340084050874657374303634350085050874" - "65737430363436008605087465737430363437008705087465737430363438008805087465737430363439008905087465737430363530008a" - "05087465737430363531008b05087465737430363532008c05087465737430363533008d05087465737430363534008e050874657374303635" - "35008f050874657374303635360090050874657374303635370091050874657374303635380092050874657374303635390093050874657374" - "303636300094050874657374303636310095050874657374303636320096050874657374303636330097050874657374303636340098050874" - "65737430363635009905087465737430363636009a05087465737430363637009b05087465737430363638009c05087465737430363639009d" - "05087465737430363730009e05087465737430363731009f0508746573743036373200a00508746573743036373300a1050874657374303637" - "3400a20508746573743036373500a30508746573743036373600a40508746573743036373700a50508746573743036373800a6050874657374" - "3036373900a70508746573743036383000a80508746573743036383100a90508746573743036383200aa0508746573743036383300ab050874" - "6573743036383400ac0508746573743036383500ad0508746573743036383600ae0508746573743036383700af0508746573743036383800b0" - "0508746573743036383900b10508746573743036393000b20508746573743036393100b30508746573743036393200b4050874657374303639" - "3300b50508746573743036393400b60508746573743036393500b70508746573743036393600b80508746573743036393700b9050874657374" - "3036393800ba0508746573743036393900bb0508746573743037303000bc0508746573743037303100bd0508746573743037303200be050874" - "6573743037303300bf0508746573743037303400c00508746573743037303500c10508746573743037303600c20508746573743037303700c3" - "0508746573743037303800c40508746573743037303900c50508746573743037313000c60508746573743037313100c7050874657374303731" - "3200c80508746573743037313300c90508746573743037313400ca0508746573743037313500cb0508746573743037313600cc050874657374" - "3037313700cd0508746573743037313800ce0508746573743037313900cf0508746573743037323000d00508746573743037323100d1050874" - "6573743037323200d20508746573743037323300d30508746573743037323400d40508746573743037323500d50508746573743037323600d6" - "0508746573743037323700d70508746573743037323800d80508746573743037323900d90508746573743037333000da050874657374303733" - "3100db0508746573743037333200dc0508746573743037333300dd0508746573743037333400de0508746573743037333500df050874657374" - "3037333600e00508746573743037333700e10508746573743037333800e20508746573743037333900e30508746573743037343000e4050874" - "6573743037343100e50508746573743037343200e60508746573743037343300e70508746573743037343400e80508746573743037343500e9" - "0508746573743037343600ea0508746573743037343700eb0508746573743037343800ec0508746573743037343900ed050874657374303735" - "3000ee0508746573743037353100ef0508746573743037353200f00508746573743037353300f10508746573743037353400f2050874657374" - "3037353500f30508746573743037353600f40508746573743037353700f50508746573743037353800f60508746573743037353900f7050874" - "6573743037363000f80508746573743037363100f90508746573743037363200fa0508746573743037363300fb0508746573743037363400fc" - "0508746573743037363500fd0508746573743037363600fe0508746573743037363700ff050874657374303736380080060874657374303736" - "390081060874657374303737300082060874657374303737310083060874657374303737320084060874657374303737330085060874657374" - "30373734008606087465737430373735008706087465737430373736008806087465737430373737008906087465737430373738008a060874" - "65737430373739008b06087465737430373830008c06087465737430373831008d06087465737430373832008e06087465737430373833008f" - "060874657374303738340090060874657374303738350091060874657374303738360092060874657374303738370093060874657374303738" - "380094060874657374303738390095060874657374303739300096060874657374303739310097060874657374303739320098060874657374" - "30373933009906087465737430373934009a06087465737430373935009b06087465737430373936009c06087465737430373937009d060874" - "65737430373938009e06087465737430373939009f0608746573743038303000a00608746573743038303100a10608746573743038303200a2" - "0608746573743038303300a30608746573743038303400a40608746573743038303500a50608746573743038303600a6060874657374303830" - "3700a70608746573743038303800a80608746573743038303900a90608746573743038313000aa0608746573743038313100ab060874657374" - "3038313200ac0608746573743038313300ad0608746573743038313400ae0608746573743038313500af0608746573743038313600b0060874" - "6573743038313700b10608746573743038313800b20608746573743038313900b30608746573743038323000b40608746573743038323100b5" - "0608746573743038323200b60608746573743038323300b70608746573743038323400b80608746573743038323500b9060874657374303832" - "3600ba0608746573743038323700bb0608746573743038323800bc0608746573743038323900bd0608746573743038333000be060874657374" - "3038333100bf0608746573743038333200c00608746573743038333300c10608746573743038333400c20608746573743038333500c3060874" - "6573743038333600c40608746573743038333700c50608746573743038333800c60608746573743038333900c70608746573743038343000c8" - "0608746573743038343100c90608746573743038343200ca0608746573743038343300cb0608746573743038343400cc060874657374303834" - "3500cd0608746573743038343600ce0608746573743038343700cf0608746573743038343800d00608746573743038343900d1060874657374" - "3038353000d20608746573743038353100d30608746573743038353200d40608746573743038353300d50608746573743038353400d6060874" - "6573743038353500d70608746573743038353600d80608746573743038353700d90608746573743038353800da0608746573743038353900db" - "0608746573743038363000dc0608746573743038363100dd0608746573743038363200de0608746573743038363300df060874657374303836" - "3400e00608746573743038363500e10608746573743038363600e20608746573743038363700e30608746573743038363800e4060874657374" - "3038363900e50608746573743038373000e60608746573743038373100e70608746573743038373200e80608746573743038373300e9060874" - "6573743038373400ea0608746573743038373500eb0608746573743038373600ec0608746573743038373700ed0608746573743038373800ee" - "0608746573743038373900ef0608746573743038383000f00608746573743038383100f10608746573743038383200f2060874657374303838" - "3300f30608746573743038383400f40608746573743038383500f50608746573743038383600f60608746573743038383700f7060874657374" - "3038383800f80608746573743038383900f90608746573743038393000fa0608746573743038393100fb0608746573743038393200fc060874" - "6573743038393300fd0608746573743038393400fe0608746573743038393500ff060874657374303839360080070874657374303839370081" - "070874657374303839380082070874657374303839390083070874657374303930300084070874657374303930310085070874657374303930" - "32008607087465737430393033008707087465737430393034008807087465737430393035008907087465737430393036008a070874657374" - "30393037008b07087465737430393038008c07087465737430393039008d07087465737430393130008e07087465737430393131008f070874" - "657374303931320090070874657374303931330091070874657374303931340092070874657374303931350093070874657374303931360094" - "070874657374303931370095070874657374303931380096070874657374303931390097070874657374303932300098070874657374303932" - "31009907087465737430393232009a07087465737430393233009b07087465737430393234009c07087465737430393235009d070874657374" - "30393236009e07087465737430393237009f0708746573743039323800a00708746573743039323900a10708746573743039333000a2070874" - "6573743039333100a30708746573743039333200a40708746573743039333300a50708746573743039333400a60708746573743039333500a7" - "0708746573743039333600a80708746573743039333700a90708746573743039333800aa0708746573743039333900ab070874657374303934" - "3000ac0708746573743039343100ad0708746573743039343200ae0708746573743039343300af0708746573743039343400b0070874657374" - "3039343500b10708746573743039343600b20708746573743039343700b30708746573743039343800b40708746573743039343900b5070874" - "6573743039353000b60708746573743039353100b70708746573743039353200b80708746573743039353300b90708746573743039353400ba" - "0708746573743039353500bb0708746573743039353600bc0708746573743039353700bd0708746573743039353800be070874657374303935" - "3900bf0708746573743039363000c00708746573743039363100c10708746573743039363200c20708746573743039363300c3070874657374" - "3039363400c40708746573743039363500c50708746573743039363600c60708746573743039363700c70708746573743039363800c8070874" - "6573743039363900c90708746573743039373000ca0708746573743039373100cb0708746573743039373200cc0708746573743039373300cd" - "0708746573743039373400ce0708746573743039373500cf0708746573743039373600d00708746573743039373700d1070874657374303937" - "3800d20708746573743039373900d30708746573743039383000d40708746573743039383100d50708746573743039383200d6070874657374" - "3039383300d70708746573743039383400d80708746573743039383500d90708746573743039383600da0708746573743039383700db070874" - "6573743039383800dc0708746573743039383900dd0708746573743039393000de0708746573743039393100df0708746573743039393200e0" - "0708746573743039393300e10708746573743039393400e20708746573743039393500e30708746573743039393600e4070874657374303939" - "3700e50708746573743039393800e60708746573743039393900e70708746573743130303000e80708746573743130303100e9070874657374" - "3130303200ea0708746573743130303300eb0708746573743130303400ec0708746573743130303500ed0708746573743130303600ee070874" - "6573743130303700ef0708746573743130303800f00708746573743130303900f10708746573743130313000f20708746573743130313100f3" - "0708746573743130313200f40708746573743130313300f50708746573743130313400f60708746573743130313500f7070874657374313031" - "3600f80708746573743130313700f90708746573743130313800fa0708746573743130313900fb0708746573743130323000fc070874657374" - "3130323100fd0708746573743130323200fe0708746573743130323300ff070874657374313032340080080874657374313032350081080874" - "657374313032360082080874657374313032370083080874657374313032380084080874657374313032390085080874657374313033300086" - "08087465737431303331008708087465737431303332008808087465737431303333008908087465737431303334008a080874657374313033" - "35008b08087465737431303336008c08087465737431303337008d08087465737431303338008e08087465737431303339008f080874657374" - "313034300090080874657374313034310091080874657374313034320092080874657374313034330093080874657374313034340094080874" - "657374313034350095080874657374313034360096080874657374313034370097080874657374313034380098080874657374313034390099" - "08087465737431303530009a08087465737431303531009b08087465737431303532009c08087465737431303533009d080874657374313035" - "34009e08087465737431303535009f0808746573743130353600a00808746573743130353700a10808746573743130353800a2080874657374" - "3130353900a30808746573743130363000a40808746573743130363100a50808746573743130363200a60808746573743130363300a7080874" - "6573743130363400a80808746573743130363500a90808746573743130363600aa0808746573743130363700ab0808746573743130363800ac" - "0808746573743130363900ad0808746573743130373000ae0808746573743130373100af0808746573743130373200b0080874657374313037" - "3300b10808746573743130373400b20808746573743130373500b30808746573743130373600b40808746573743130373700b5080874657374" - "3130373800b60808746573743130373900b70808746573743130383000b80808746573743130383100b90808746573743130383200ba080874" - "6573743130383300bb0808746573743130383400bc0808746573743130383500bd0808746573743130383600be0808746573743130383700bf" - "0808746573743130383800c00808746573743130383900c10808746573743130393000c20808746573743130393100c3080874657374313039" - "3200c40808746573743130393300c50808746573743130393400c60808746573743130393500c70808746573743130393600c8080874657374" - "3130393700c90808746573743130393800ca0808746573743130393900cb0808746573743131303000cc0808746573743131303100cd080874" - "6573743131303200ce0808746573743131303300cf0808746573743131303400d00808746573743131303500d10808746573743131303600d2" - "0808746573743131303700d30808746573743131303800d40808746573743131303900d50808746573743131313000d6080874657374313131" - "3100d70808746573743131313200d80808746573743131313300d90808746573743131313400da0808746573743131313500db080874657374" - "3131313600dc0808746573743131313700dd0808746573743131313800de0808746573743131313900df0808746573743131323000e0080874" - "6573743131323100e10808746573743131323200e20808746573743131323300e30808746573743131323400e40808746573743131323500e5" - "0808746573743131323600e60808746573743131323700e70808746573743131323800e80808746573743131323900e9080874657374313133" - "3000ea0808746573743131333100eb0808746573743131333200ec0808746573743131333300ed0808746573743131333400ee080874657374" - "3131333500ef0808746573743131333600f00808746573743131333700f10808746573743131333800f20808746573743131333900f3080874" - "6573743131343000f40808746573743131343100f50808746573743131343200f60808746573743131343300f70808746573743131343400f8" - "0808746573743131343500f90808746573743131343600fa0808746573743131343700fb0808746573743131343800fc080874657374313134" - "3900fd0808746573743131353000fe0808746573743131353100ff080874657374313135320080090874657374313135330081090874657374" - "313135340082090874657374313135350083090874657374313135360084090874657374313135370085090874657374313135380086090874" - "65737431313539008709087465737431313630008809087465737431313631008909087465737431313632008a09087465737431313633008b" - "09087465737431313634008c09087465737431313635008d09087465737431313636008e09087465737431313637008f090874657374313136" - "380090090874657374313136390091090874657374313137300092090874657374313137310093090874657374313137320094090874657374" - "313137330095090874657374313137340096090874657374313137350097090874657374313137360098090874657374313137370099090874" - "65737431313738009a09087465737431313739009b09087465737431313830009c09087465737431313831009d09087465737431313832009e" - "09087465737431313833009f0908746573743131383400a00908746573743131383500a10908746573743131383600a2090874657374313138" - "3700a30908746573743131383800a40908746573743131383900a50908746573743131393000a60908746573743131393100a7090874657374" - "3131393200a80908746573743131393300a90908746573743131393400aa0908746573743131393500ab0908746573743131393600ac090874" - "6573743131393700ad0908746573743131393800ae0908746573743131393900af0908746573743132303000b00908746573743132303100b1" - "0908746573743132303200b20908746573743132303300b30908746573743132303400b40908746573743132303500b5090874657374313230" - "3600b60908746573743132303700b70908746573743132303800b80908746573743132303900b90908746573743132313000ba090874657374" - "3132313100bb0908746573743132313200bc0908746573743132313300bd0908746573743132313400be0908746573743132313500bf090874" - "6573743132313600c00908746573743132313700c10908746573743132313800c20908746573743132313900c30908746573743132323000c4" - "0908746573743132323100c50908746573743132323200c60908746573743132323300c70908746573743132323400c8090874657374313232" - "3500c90908746573743132323600ca0908746573743132323700cb0908746573743132323800cc0908746573743132323900cd090874657374" - "3132333000ce0908746573743132333100cf0908746573743132333200d00908746573743132333300d10908746573743132333400d2090874" - "6573743132333500d30908746573743132333600d40908746573743132333700d50908746573743132333800d60908746573743132333900d7" - "0908746573743132343000d80908746573743132343100d90908746573743132343200da0908746573743132343300db090874657374313234" - "3400dc0908746573743132343500dd0908746573743132343600de0908746573743132343700df0908746573743132343800e0090874657374" - "3132343900e10908746573743132353000e20908746573743132353100e30908746573743132353200e40908746573743132353300e5090874" - "6573743132353400e60908746573743132353500e70908746573743132353600e80908746573743132353700e90908746573743132353800ea" - "0908746573743132353900eb0908746573743132363000ec0908746573743132363100ed0908746573743132363200ee090874657374313236" - "3300ef0908746573743132363400f00908746573743132363500f10908746573743132363600f20908746573743132363700f3090874657374" - "3132363800f40908746573743132363900f50908746573743132373000f60908746573743132373100f70908746573743132373200f8090874" - "6573743132373300f90908746573743132373400fa0908746573743132373500fb0908746573743132373600fc0908746573743132373700fd" - "0908746573743132373800fe0908746573743132373900ff0908746573743132383000800a08746573743132383100810a0874657374313238" - "3200820a08746573743132383300830a08746573743132383400840a08746573743132383500850a08746573743132383600860a0874657374" - "3132383700870a08746573743132383800880a08746573743132383900890a087465737431323930008a0a087465737431323931008b0a0874" - "65737431323932008c0a087465737431323933008d0a087465737431323934008e0a087465737431323935008f0a0874657374313239360090" - "0a08746573743132393700910a08746573743132393800920a08746573743132393900930a08746573743133303000940a0874657374313330" - "3100950a08746573743133303200960a08746573743133303300970a08746573743133303400980a08746573743133303500990a0874657374" - "31333036009a0a087465737431333037009b0a087465737431333038009c0a087465737431333039009d0a087465737431333130009e0a0874" - "65737431333131009f0a08746573743133313200a00a08746573743133313300a10a08746573743133313400a20a08746573743133313500a3" - "0a08746573743133313600a40a08746573743133313700a50a08746573743133313800a60a08746573743133313900a70a0874657374313332" - "3000a80a08746573743133323100a90a08746573743133323200aa0a08746573743133323300ab0a08746573743133323400ac0a0874657374" - "3133323500ad0a08746573743133323600ae0a08746573743133323700af0a08746573743133323800b00a08746573743133323900b10a0874" - "6573743133333000b20a08746573743133333100b30a08746573743133333200b40a08746573743133333300b50a08746573743133333400b6" - "0a08746573743133333500b70a08746573743133333600b80a08746573743133333700b90a08746573743133333800ba0a0874657374313333" - "3900bb0a08746573743133343000bc0a08746573743133343100bd0a08746573743133343200be0a08746573743133343300bf0a0874657374" - "3133343400c00a08746573743133343500c10a08746573743133343600c20a08746573743133343700c30a08746573743133343800c40a0874" - "6573743133343900c50a08746573743133353000c60a08746573743133353100c70a08746573743133353200c80a08746573743133353300c9" - "0a08746573743133353400ca0a08746573743133353500cb0a08746573743133353600cc0a08746573743133353700cd0a0874657374313335" - "3800ce0a08746573743133353900cf0a08746573743133363000d00a08746573743133363100d10a08746573743133363200d20a0874657374" - "3133363300d30a08746573743133363400d40a08746573743133363500d50a08746573743133363600d60a08746573743133363700d70a0874" - "6573743133363800d80a08746573743133363900d90a08746573743133373000da0a08746573743133373100db0a08746573743133373200dc" - "0a08746573743133373300dd0a08746573743133373400de0a08746573743133373500df0a08746573743133373600e00a0874657374313337" - "3700e10a08746573743133373800e20a08746573743133373900e30a08746573743133383000e40a08746573743133383100e50a0874657374" - "3133383200e60a08746573743133383300e70a08746573743133383400e80a08746573743133383500e90a08746573743133383600ea0a0874" - "6573743133383700eb0a08746573743133383800ec0a08746573743133383900ed0a08746573743133393000ee0a08746573743133393100ef" - "0a08746573743133393200f00a08746573743133393300f10a08746573743133393400f20a08746573743133393500f30a0874657374313339" - "3600f40a08746573743133393700f50a08746573743133393800f60a08746573743133393900f70a08746573743134303000f80a0874657374" - "3134303100f90a08746573743134303200fa0a08746573743134303300fb0a08746573743134303400fc0a08746573743134303500fd0a0874" - "6573743134303600fe0a08746573743134303700ff0a08746573743134303800800b08746573743134303900810b0874657374313431300082" - "0b08746573743134313100830b08746573743134313200840b08746573743134313300850b08746573743134313400860b0874657374313431" - "3500870b08746573743134313600880b08746573743134313700890b087465737431343138008a0b087465737431343139008b0b0874657374" - "31343230008c0b087465737431343231008d0b087465737431343232008e0b087465737431343233008f0b08746573743134323400900b0874" - "6573743134323500910b08746573743134323600920b08746573743134323700930b08746573743134323800940b0874657374313432390095" - "0b08746573743134333000960b08746573743134333100970b08746573743134333200980b08746573743134333300990b0874657374313433" - "34009a0b087465737431343335009b0b087465737431343336009c0b087465737431343337009d0b087465737431343338009e0b0874657374" - "31343339009f0b08746573743134343000a00b08746573743134343100a10b08746573743134343200a20b08746573743134343300a30b0874" - "6573743134343400a40b08746573743134343500a50b08746573743134343600a60b08746573743134343700a70b08746573743134343800a8" - "0b08746573743134343900a90b08746573743134353000aa0b08746573743134353100ab0b08746573743134353200ac0b0874657374313435" - "3300ad0b08746573743134353400ae0b08746573743134353500af0b08746573743134353600b00b08746573743134353700b10b0874657374" - "3134353800b20b08746573743134353900b30b08746573743134363000b40b08746573743134363100b50b08746573743134363200b60b0874" - "6573743134363300b70b08746573743134363400b80b08746573743134363500b90b08746573743134363600ba0b08746573743134363700bb" - "0b08746573743134363800bc0b08746573743134363900bd0b08746573743134373000be0b08746573743134373100bf0b0874657374313437" - "3200c00b08746573743134373300c10b08746573743134373400c20b08746573743134373500c30b08746573743134373600c40b0874657374" - "3134373700c50b08746573743134373800c60b08746573743134373900c70b08746573743134383000c80b08746573743134383100c90b0874" - "6573743134383200ca0b08746573743134383300cb0b08746573743134383400cc0b08746573743134383500cd0b08746573743134383600ce" - "0b08746573743134383700cf0b08746573743134383800d00b08746573743134383900d10b08746573743134393000d20b0874657374313439" - "3100d30b08746573743134393200d40b08746573743134393300d50b08746573743134393400d60b08746573743134393500d70b0874657374" - "3134393600d80b08746573743134393700d90b08746573743134393800da0b08746573743134393900db0b08746573743135303000dc0b0874" - "6573743135303100dd0b08746573743135303200de0b08746573743135303300df0b08746573743135303400e00b08746573743135303500e1" - "0b08746573743135303600e20b08746573743135303700e30b08746573743135303800e40b08746573743135303900e50b0874657374313531" - "3000e60b08746573743135313100e70b08746573743135313200e80b08746573743135313300e90b08746573743135313400ea0b0874657374" - "3135313500eb0b08746573743135313600ec0b08746573743135313700ed0b08746573743135313800ee0b08746573743135313900ef0b0874" - "6573743135323000f00b08746573743135323100f10b08746573743135323200f20b08746573743135323300f30b08746573743135323400f4" - "0b08746573743135323500f50b08746573743135323600f60b08746573743135323700f70b08746573743135323800f80b0874657374313532" - "3900f90b08746573743135333000fa0b08746573743135333100fb0b08746573743135333200fc0b08746573743135333300fd0b0874657374" - "3135333400fe0b08746573743135333500ff0b08746573743135333600800c08746573743135333700810c08746573743135333800820c0874" - "6573743135333900830c08746573743135343000840c08746573743135343100850c08746573743135343200860c0874657374313534330087" - "0c08746573743135343400880c08746573743135343500890c087465737431353436008a0c087465737431353437008b0c0874657374313534" - "38008c0c087465737431353439008d0c087465737431353530008e0c087465737431353531008f0c08746573743135353200900c0874657374" - "3135353300910c08746573743135353400920c08746573743135353500930c08746573743135353600940c08746573743135353700950c0874" - "6573743135353800960c08746573743135353900970c08746573743135363000980c08746573743135363100990c087465737431353632009a" - "0c087465737431353633009b0c087465737431353634009c0c087465737431353635009d0c087465737431353636009e0c0874657374313536" - "37009f0c08746573743135363800a00c08746573743135363900a10c08746573743135373000a20c08746573743135373100a30c0874657374" - "3135373200a40c08746573743135373300a50c08746573743135373400a60c08746573743135373500a70c08746573743135373600a80c0874" - "6573743135373700a90c08746573743135373800aa0c08746573743135373900ab0c08746573743135383000ac0c08746573743135383100ad" - "0c08746573743135383200ae0c08746573743135383300af0c08746573743135383400b00c08746573743135383500b10c0874657374313538" - "3600b20c08746573743135383700b30c08746573743135383800b40c08746573743135383900b50c08746573743135393000b60c0874657374" - "3135393100b70c08746573743135393200b80c08746573743135393300b90c08746573743135393400ba0c08746573743135393500bb0c0874" - "6573743135393600bc0c08746573743135393700bd0c08746573743135393800be0c08746573743135393900bf0c08746573743136303000c0" - "0c08746573743136303100c10c08746573743136303200c20c08746573743136303300c30c08746573743136303400c40c0874657374313630" - "3500c50c08746573743136303600c60c08746573743136303700c70c08746573743136303800c80c08746573743136303900c90c0874657374" - "3136313000ca0c08746573743136313100cb0c08746573743136313200cc0c08746573743136313300cd0c08746573743136313400ce0c0874" - "6573743136313500cf0c08746573743136313600d00c08746573743136313700d10c08746573743136313800d20c08746573743136313900d3" - "0c08746573743136323000d40c08746573743136323100d50c08746573743136323200d60c08746573743136323300d70c0874657374313632" - "3400d80c08746573743136323500d90c08746573743136323600da0c08746573743136323700db0c08746573743136323800dc0c0874657374" - "3136323900dd0c08746573743136333000de0c08746573743136333100df0c08746573743136333200e00c08746573743136333300e10c0874" - "6573743136333400e20c08746573743136333500e30c08746573743136333600e40c08746573743136333700e50c08746573743136333800e6" - "0c08746573743136333900e70c08746573743136343000e80c08746573743136343100e90c08746573743136343200ea0c0874657374313634" - "3300eb0c08746573743136343400ec0c08746573743136343500ed0c08746573743136343600ee0c08746573743136343700ef0c0874657374" - "3136343800f00c08746573743136343900f10c08746573743136353000f20c08746573743136353100f30c08746573743136353200f40c0874" - "6573743136353300f50c08746573743136353400f60c08746573743136353500f70c08746573743136353600f80c08746573743136353700f9" - "0c08746573743136353800fa0c08746573743136353900fb0c08746573743136363000fc0c08746573743136363100fd0c0874657374313636" - "3200fe0c08746573743136363300ff0c08746573743136363400800d08746573743136363500810d08746573743136363600820d0874657374" - "3136363700830d08746573743136363800840d08746573743136363900850d08746573743136373000860d08746573743136373100870d0874" - "6573743136373200880d08746573743136373300890d087465737431363734008a0d087465737431363735008b0d087465737431363736008c" - "0d087465737431363737008d0d087465737431363738008e0d087465737431363739008f0d08746573743136383000900d0874657374313638" - "3100910d08746573743136383200920d08746573743136383300930d08746573743136383400940d08746573743136383500950d0874657374" - "3136383600960d08746573743136383700970d08746573743136383800980d08746573743136383900990d087465737431363930009a0d0874" - "65737431363931009b0d087465737431363932009c0d087465737431363933009d0d087465737431363934009e0d087465737431363935009f" - "0d08746573743136393600a00d08746573743136393700a10d08746573743136393800a20d08746573743136393900a30d0874657374313730" - "3000a40d08746573743137303100a50d08746573743137303200a60d08746573743137303300a70d08746573743137303400a80d0874657374" - "3137303500a90d08746573743137303600aa0d08746573743137303700ab0d08746573743137303800ac0d08746573743137303900ad0d0874" - "6573743137313000ae0d08746573743137313100af0d08746573743137313200b00d08746573743137313300b10d08746573743137313400b2" - "0d08746573743137313500b30d08746573743137313600b40d08746573743137313700b50d08746573743137313800b60d0874657374313731" - "3900b70d08746573743137323000b80d08746573743137323100b90d08746573743137323200ba0d08746573743137323300bb0d0874657374" - "3137323400bc0d08746573743137323500bd0d08746573743137323600be0d08746573743137323700bf0d08746573743137323800c00d0874" - "6573743137323900c10d08746573743137333000c20d08746573743137333100c30d08746573743137333200c40d08746573743137333300c5" - "0d08746573743137333400c60d08746573743137333500c70d08746573743137333600c80d08746573743137333700c90d0874657374313733" - "3800ca0d08746573743137333900cb0d08746573743137343000cc0d08746573743137343100cd0d08746573743137343200ce0d0874657374" - "3137343300cf0d08746573743137343400d00d08746573743137343500d10d08746573743137343600d20d08746573743137343700d30d0874" - "6573743137343800d40d08746573743137343900d50d08746573743137353000d60d08746573743137353100d70d08746573743137353200d8" - "0d08746573743137353300d90d08746573743137353400da0d08746573743137353500db0d08746573743137353600dc0d0874657374313735" - "3700dd0d08746573743137353800de0d08746573743137353900df0d08746573743137363000e00d08746573743137363100e10d0874657374" - "3137363200e20d08746573743137363300e30d08746573743137363400e40d08746573743137363500e50d08746573743137363600e60d0874" - "6573743137363700e70d08746573743137363800e80d08746573743137363900e90d08746573743137373000ea0d08746573743137373100eb" - "0d08746573743137373200ec0d08746573743137373300ed0d08746573743137373400ee0d08746573743137373500ef0d0874657374313737" - "3600f00d08746573743137373700f10d08746573743137373800f20d08746573743137373900f30d08746573743137383000f40d0874657374" - "3137383100f50d08746573743137383200f60d08746573743137383300f70d08746573743137383400f80d08746573743137383500f90d0874" - "6573743137383600fa0d08746573743137383700fb0d08746573743137383800fc0d08746573743137383900fd0d08746573743137393000fe" - "0d08746573743137393100ff0d08746573743137393200800e08746573743137393300810e08746573743137393400820e0874657374313739" - "3500830e08746573743137393600840e08746573743137393700850e08746573743137393800860e08746573743137393900870e0874657374" - "3138303000880e08746573743138303100890e087465737431383032008a0e087465737431383033008b0e087465737431383034008c0e0874" - "65737431383035008d0e087465737431383036008e0e087465737431383037008f0e08746573743138303800900e0874657374313830390091" - "0e08746573743138313000920e08746573743138313100930e08746573743138313200940e08746573743138313300950e0874657374313831" - "3400960e08746573743138313500970e08746573743138313600980e08746573743138313700990e087465737431383138009a0e0874657374" - "31383139009b0e087465737431383230009c0e087465737431383231009d0e087465737431383232009e0e087465737431383233009f0e0874" - "6573743138323400a00e08746573743138323500a10e08746573743138323600a20e08746573743138323700a30e08746573743138323800a4" - "0e08746573743138323900a50e08746573743138333000a60e08746573743138333100a70e08746573743138333200a80e0874657374313833" - "3300a90e08746573743138333400aa0e08746573743138333500ab0e08746573743138333600ac0e08746573743138333700ad0e0874657374" - "3138333800ae0e08746573743138333900af0e08746573743138343000b00e08746573743138343100b10e08746573743138343200b20e0874" - "6573743138343300b30e08746573743138343400b40e08746573743138343500b50e08746573743138343600b60e08746573743138343700b7" - "0e08746573743138343800b80e08746573743138343900b90e08746573743138353000ba0e08746573743138353100bb0e0874657374313835" - "3200bc0e08746573743138353300bd0e08746573743138353400be0e08746573743138353500bf0e08746573743138353600c00e0874657374" - "3138353700c10e08746573743138353800c20e08746573743138353900c30e08746573743138363000c40e08746573743138363100c50e0874" - "6573743138363200c60e08746573743138363300c70e08746573743138363400c80e08746573743138363500c90e08746573743138363600ca" - "0e08746573743138363700cb0e08746573743138363800cc0e08746573743138363900cd0e08746573743138373000ce0e0874657374313837" - "3100cf0e08746573743138373200d00e08746573743138373300d10e08746573743138373400d20e08746573743138373500d30e0874657374" - "3138373600d40e08746573743138373700d50e08746573743138373800d60e08746573743138373900d70e08746573743138383000d80e0874" - "6573743138383100d90e08746573743138383200da0e08746573743138383300db0e08746573743138383400dc0e08746573743138383500dd" - "0e08746573743138383600de0e08746573743138383700df0e08746573743138383800e00e08746573743138383900e10e0874657374313839" - "3000e20e08746573743138393100e30e08746573743138393200e40e08746573743138393300e50e08746573743138393400e60e0874657374" - "3138393500e70e08746573743138393600e80e08746573743138393700e90e08746573743138393800ea0e08746573743138393900eb0e0874" - "6573743139303000ec0e08746573743139303100ed0e08746573743139303200ee0e08746573743139303300ef0e08746573743139303400f0" - "0e08746573743139303500f10e08746573743139303600f20e08746573743139303700f30e08746573743139303800f40e0874657374313930" - "3900f50e08746573743139313000f60e08746573743139313100f70e08746573743139313200f80e08746573743139313300f90e0874657374" - "3139313400fa0e08746573743139313500fb0e08746573743139313600fc0e08746573743139313700fd0e08746573743139313800fe0e0874" - "6573743139313900ff0e08746573743139323000800f08746573743139323100810f08746573743139323200820f0874657374313932330083" - "0f08746573743139323400840f08746573743139323500850f08746573743139323600860f08746573743139323700870f0874657374313932" - "3800880f08746573743139323900890f087465737431393330008a0f087465737431393331008b0f087465737431393332008c0f0874657374" - "31393333008d0f087465737431393334008e0f087465737431393335008f0f08746573743139333600900f08746573743139333700910f0874" - "6573743139333800920f08746573743139333900930f08746573743139343000940f08746573743139343100950f0874657374313934320096" - "0f08746573743139343300970f08746573743139343400980f08746573743139343500990f087465737431393436009a0f0874657374313934" - "37009b0f087465737431393438009c0f087465737431393439009d0f087465737431393530009e0f087465737431393531009f0f0874657374" - "3139353200a00f08746573743139353300a10f08746573743139353400a20f08746573743139353500a30f08746573743139353600a40f0874" - "6573743139353700a50f08746573743139353800a60f08746573743139353900a70f08746573743139363000a80f08746573743139363100a9" - "0f08746573743139363200aa0f08746573743139363300ab0f08746573743139363400ac0f08746573743139363500ad0f0874657374313936" - "3600ae0f08746573743139363700af0f08746573743139363800b00f08746573743139363900b10f08746573743139373000b20f0874657374" - "3139373100b30f08746573743139373200b40f08746573743139373300b50f08746573743139373400b60f08746573743139373500b70f0874" - "6573743139373600b80f08746573743139373700b90f08746573743139373800ba0f08746573743139373900bb0f08746573743139383000bc" - "0f08746573743139383100bd0f08746573743139383200be0f08746573743139383300bf0f08746573743139383400c00f0874657374313938" - "3500c10f08746573743139383600c20f08746573743139383700c30f08746573743139383800c40f08746573743139383900c50f0874657374" - "3139393000c60f08746573743139393100c70f08746573743139393200c80f08746573743139393300c90f08746573743139393400ca0f0874" - "6573743139393500cb0f08746573743139393600cc0f08746573743139393700cd0f08746573743139393800ce0f08746573743139393900cf" - "0f08746573743230303000d00f08746573743230303100d10f08746573743230303200d20f08746573743230303300d30f0874657374323030" - "3400d40f08746573743230303500d50f08746573743230303600d60f08746573743230303700d70f08746573743230303800d80f0874657374" - "3230303900d90f08746573743230313000da0f08746573743230313100db0f08746573743230313200dc0f08746573743230313300dd0f0874" - "6573743230313400de0f08746573743230313500df0f08746573743230313600e00f08746573743230313700e10f08746573743230313800e2" - "0f08746573743230313900e30f08746573743230323000e40f08746573743230323100e50f08746573743230323200e60f0874657374323032" - "3300e70f08746573743230323400e80f08746573743230323500e90f08746573743230323600ea0f08746573743230323700eb0f0874657374" - "3230323800ec0f08746573743230323900ed0f08746573743230333000ee0f08746573743230333100ef0f08746573743230333200f00f0874" - "6573743230333300f10f08746573743230333400f20f08746573743230333500f30f08746573743230333600f40f08746573743230333700f5" - "0f08746573743230333800f60f08746573743230333900f70f08746573743230343000f80f08746573743230343100f90f0874657374323034" - "3200fa0f08746573743230343300fb0f08746573743230343400fc0f08746573743230343500fd0f08746573743230343600fe0f0874657374" - "3230343700ff0f0874657374323034380080100874657374323034390081100874657374323035300082100874657374323035310083100874" - "657374323035320084100874657374323035330085100874657374323035340086100874657374323035350087100874657374323035360088" - "10087465737432303537008910087465737432303538008a10087465737432303539008b10087465737432303630008c100874657374323036" - "31008d10087465737432303632008e10087465737432303633008f100874657374323036340090100874657374323036350091100874657374" - "323036360092100874657374323036370093100874657374323036380094100874657374323036390095100874657374323037300096100874" - "65737432303731009710087465737432303732009810087465737432303733009910087465737432303734009a10087465737432303735009b" - "10087465737432303736009c10087465737432303737009d10087465737432303738009e10087465737432303739009f100874657374323038" - "3000a01008746573743230383100a11008746573743230383200a21008746573743230383300a31008746573743230383400a4100874657374" - "3230383500a51008746573743230383600a61008746573743230383700a71008746573743230383800a81008746573743230383900a9100874" - "6573743230393000aa1008746573743230393100ab1008746573743230393200ac1008746573743230393300ad1008746573743230393400ae" - "1008746573743230393500af1008746573743230393600b01008746573743230393700b11008746573743230393800b2100874657374323039" - "3900b31008746573743231303000b41008746573743231303100b51008746573743231303200b61008746573743231303300b7100874657374" - "3231303400b81008746573743231303500b91008746573743231303600ba1008746573743231303700bb1008746573743231303800bc100874" - "6573743231303900bd1008746573743231313000be1008746573743231313100bf1008746573743231313200c01008746573743231313300c1" - "1008746573743231313400c21008746573743231313500c31008746573743231313600c41008746573743231313700c5100874657374323131" - "3800c61008746573743231313900c71008746573743231323000c81008746573743231323100c91008746573743231323200ca100874657374" - "3231323300cb1008746573743231323400cc1008746573743231323500cd1008746573743231323600ce1008746573743231323700cf100874" - "6573743231323800d01008746573743231323900d11008746573743231333000d21008746573743231333100d31008746573743231333200d4" - "1008746573743231333300d51008746573743231333400d61008746573743231333500d71008746573743231333600d8100874657374323133" - "3700d91008746573743231333800da1008746573743231333900db1008746573743231343000dc1008746573743231343100dd100874657374" - "3231343200de1008746573743231343300df1008746573743231343400e01008746573743231343500e11008746573743231343600e2100874" - "6573743231343700e31008746573743231343800e41008746573743231343900e51008746573743231353000e61008746573743231353100e7" - "1008746573743231353200e81008746573743231353300e91008746573743231353400ea1008746573743231353500eb100874657374323135" - "3600ec1008746573743231353700ed1008746573743231353800ee1008746573743231353900ef1008746573743231363000f0100874657374" - "3231363100f11008746573743231363200f21008746573743231363300f31008746573743231363400f41008746573743231363500f5100874" - "6573743231363600f61008746573743231363700f71008746573743231363800f81008746573743231363900f91008746573743231373000fa" - "1008746573743231373100fb1008746573743231373200fc1008746573743231373300fd1008746573743231373400fe100874657374323137" - "3500ff100874657374323137360080110874657374323137370081110874657374323137380082110874657374323137390083110874657374" - "323138300084110874657374323138310085110874657374323138320086110874657374323138330087110874657374323138340088110874" - "65737432313835008911087465737432313836008a11087465737432313837008b11087465737432313838008c11087465737432313839008d" - "11087465737432313930008e11087465737432313931008f110874657374323139320090110874657374323139330091110874657374323139" - "340092110874657374323139350093110874657374323139360094110874657374323139370095110874657374323139380096110874657374" - "32313939009711087465737432323030009811087465737432323031009911087465737432323032009a11087465737432323033009b110874" - "65737432323034009c11087465737432323035009d11087465737432323036009e11087465737432323037009f1108746573743232303800a0" - "1108746573743232303900a11108746573743232313000a21108746573743232313100a31108746573743232313200a4110874657374323231" - "3300a51108746573743232313400a61108746573743232313500a71108746573743232313600a81108746573743232313700a9110874657374" - "3232313800aa1108746573743232313900ab1108746573743232323000ac1108746573743232323100ad1108746573743232323200ae110874" - "6573743232323300af1108746573743232323400b01108746573743232323500b11108746573743232323600b21108746573743232323700b3" - "1108746573743232323800b41108746573743232323900b51108746573743232333000b61108746573743232333100b7110874657374323233" - "3200b81108746573743232333300b91108746573743232333400ba1108746573743232333500bb1108746573743232333600bc110874657374" - "3232333700bd1108746573743232333800be1108746573743232333900bf1108746573743232343000c01108746573743232343100c1110874" - "6573743232343200c21108746573743232343300c31108746573743232343400c41108746573743232343500c51108746573743232343600c6" - "1108746573743232343700c71108746573743232343800c81108746573743232343900c91108746573743232353000ca110874657374323235" - "3100cb1108746573743232353200cc1108746573743232353300cd1108746573743232353400ce1108746573743232353500cf110874657374" - "3232353600d01108746573743232353700d11108746573743232353800d21108746573743232353900d31108746573743232363000d4110874" - "6573743232363100d51108746573743232363200d61108746573743232363300d71108746573743232363400d81108746573743232363500d9" - "1108746573743232363600da1108746573743232363700db1108746573743232363800dc1108746573743232363900dd110874657374323237" - "3000de1108746573743232373100df1108746573743232373200e01108746573743232373300e11108746573743232373400e2110874657374" - "3232373500e31108746573743232373600e41108746573743232373700e51108746573743232373800e61108746573743232373900e7110874" - "6573743232383000e81108746573743232383100e91108746573743232383200ea1108746573743232383300eb1108746573743232383400ec" - "1108746573743232383500ed1108746573743232383600ee1108746573743232383700ef1108746573743232383800f0110874657374323238" - "3900f11108746573743232393000f21108746573743232393100f31108746573743232393200f41108746573743232393300f5110874657374" - "3232393400f61108746573743232393500f71108746573743232393600f81108746573743232393700f91108746573743232393800fa110874" - "6573743232393900fb1108746573743233303000fc1108746573743233303100fd1108746573743233303200fe1108746573743233303300ff" - "110874657374323330340080120874657374323330350081120874657374323330360082120874657374323330370083120874657374323330" - "380084120874657374323330390085120874657374323331300086120874657374323331310087120874657374323331320088120874657374" - "32333133008912087465737432333134008a12087465737432333135008b12087465737432333136008c12087465737432333137008d120874" - "65737432333138008e12087465737432333139008f120874657374323332300090120874657374323332310091120874657374323332320092" - "120874657374323332330093120874657374323332340094120874657374323332350095120874657374323332360096120874657374323332" - "37009712087465737432333238009812087465737432333239009912087465737432333330009a12087465737432333331009b120874657374" - "32333332009c12087465737432333333009d12087465737432333334009e12087465737432333335009f1208746573743233333600a0120874" - "6573743233333700a11208746573743233333800a21208746573743233333900a31208746573743233343000a41208746573743233343100a5" - "1208746573743233343200a61208746573743233343300a71208746573743233343400a81208746573743233343500a9120874657374323334" - "3600aa1208746573743233343700ab1208746573743233343800ac1208746573743233343900ad1208746573743233353000ae120874657374" - "3233353100af1208746573743233353200b01208746573743233353300b11208746573743233353400b21208746573743233353500b3120874" - "6573743233353600b41208746573743233353700b51208746573743233353800b61208746573743233353900b71208746573743233363000b8" - "1208746573743233363100b91208746573743233363200ba1208746573743233363300bb1208746573743233363400bc120874657374323336" - "3500bd1208746573743233363600be1208746573743233363700bf1208746573743233363800c01208746573743233363900c1120874657374" - "3233373000c21208746573743233373100c31208746573743233373200c41208746573743233373300c51208746573743233373400c6120874" - "6573743233373500c71208746573743233373600c81208746573743233373700c91208746573743233373800ca1208746573743233373900cb" - "1208746573743233383000cc1208746573743233383100cd1208746573743233383200ce1208746573743233383300cf120874657374323338" - "3400d01208746573743233383500d11208746573743233383600d21208746573743233383700d31208746573743233383800d4120874657374" - "3233383900d51208746573743233393000d61208746573743233393100d71208746573743233393200d81208746573743233393300d9120874" - "6573743233393400da1208746573743233393500db1208746573743233393600dc1208746573743233393700dd1208746573743233393800de" - "1208746573743233393900df1208746573743234303000e01208746573743234303100e11208746573743234303200e2120874657374323430" - "3300e31208746573743234303400e41208746573743234303500e51208746573743234303600e61208746573743234303700e7120874657374" - "3234303800e81208746573743234303900e91208746573743234313000ea1208746573743234313100eb1208746573743234313200ec120874" - "6573743234313300ed1208746573743234313400ee1208746573743234313500ef1208746573743234313600f01208746573743234313700f1" - "1208746573743234313800f21208746573743234313900f31208746573743234323000f41208746573743234323100f5120874657374323432" - "3200f61208746573743234323300f71208746573743234323400f81208746573743234323500f91208746573743234323600fa120874657374" - "3234323700fb1208746573743234323800fc1208746573743234323900fd1208746573743234333000fe1208746573743234333100ff120874" - "657374323433320080130874657374323433330081130874657374323433340082130874657374323433350083130874657374323433360084" - "130874657374323433370085130874657374323433380086130874657374323433390087130874657374323434300088130874657374323434" - "31008913087465737432343432008a13087465737432343433008b13087465737432343434008c13087465737432343435008d130874657374" - "32343436008e13087465737432343437008f130874657374323434380090130874657374323434390091130874657374323435300092130874" - "657374323435310093130874657374323435320094130874657374323435330095130874657374323435340096130874657374323435350097" - "13087465737432343536009813087465737432343537009913087465737432343538009a13087465737432343539009b130874657374323436" - "30009c13087465737432343631009d13087465737432343632009e13087465737432343633009f1308746573743234363400a0130874657374" - "3234363500a11308746573743234363600a21308746573743234363700a31308746573743234363800a41308746573743234363900a5130874" - "6573743234373000a61308746573743234373100a71308746573743234373200a81308746573743234373300a91308746573743234373400aa" - "1308746573743234373500ab1308746573743234373600ac1308746573743234373700ad1308746573743234373800ae130874657374323437" - "3900af1308746573743234383000b01308746573743234383100b11308746573743234383200b21308746573743234383300b3130874657374" - "3234383400b41308746573743234383500b51308746573743234383600b61308746573743234383700b71308746573743234383800b8130874" - "6573743234383900b91308746573743234393000ba1308746573743234393100bb1308746573743234393200bc1308746573743234393300bd" - "1308746573743234393400be1308746573743234393500bf1308746573743234393600c01308746573743234393700c1130874657374323439" - "3800c21308746573743234393900c31308746573743235303000c41308746573743235303100c51308746573743235303200c6130874657374" - "3235303300c71308746573743235303400c81308746573743235303500c91308746573743235303600ca1308746573743235303700cb130874" - "6573743235303800cc1308746573743235303900cd1308746573743235313000ce1308746573743235313100cf1308746573743235313200d0" - "1308746573743235313300d11308746573743235313400d21308746573743235313500d31308746573743235313600d4130874657374323531" - "3700d51308746573743235313800d61308746573743235313900d71308746573743235323000d81308746573743235323100d9130874657374" - "3235323200da1308746573743235323300db1308746573743235323400dc1308746573743235323500dd1308746573743235323600de130874" - "6573743235323700df1308746573743235323800e01308746573743235323900e11308746573743235333000e21308746573743235333100e3" - "1308746573743235333200e41308746573743235333300e51308746573743235333400e61308746573743235333500e7130874657374323533" - "3600e81308746573743235333700e91308746573743235333800ea1308746573743235333900eb1308746573743235343000ec130874657374" - "3235343100ed1308746573743235343200ee1308746573743235343300ef1308746573743235343400f01308746573743235343500f1130874" - "6573743235343600f21308746573743235343700f31308746573743235343800f41308746573743235343900f51308746573743235353000f6" - "1308746573743235353100f71308746573743235353200f81308746573743235353300f91308746573743235353400fa130874657374323535" - "3500fb1308746573743235353600fc1308746573743235353700fd1308746573743235353800fe1308746573743235353900ff130874657374" - "323536300080140874657374323536310081140874657374323536320082140874657374323536330083140874657374323536340084140874" - "657374323536350085140874657374323536360086140874657374323536370087140874657374323536380088140874657374323536390089" - "14087465737432353730008a14087465737432353731008b14087465737432353732008c14087465737432353733008d140874657374323537" - "34008e14087465737432353735008f140874657374323537360090140874657374323537370091140874657374323537380092140874657374" - "323537390093140874657374323538300094140874657374323538310095140874657374323538320096140874657374323538330097140874" - "65737432353834009814087465737432353835009914087465737432353836009a14087465737432353837009b14087465737432353838009c" - "14087465737432353839009d14087465737432353930009e14087465737432353931009f1408746573743235393200a0140874657374323539" - "3300a11408746573743235393400a21408746573743235393500a31408746573743235393600a41408746573743235393700a5140874657374" - "3235393800a61408746573743235393900a71408746573743236303000a81408746573743236303100a91408746573743236303200aa140874" - "6573743236303300ab1408746573743236303400ac1408746573743236303500ad1408746573743236303600ae1408746573743236303700af" - "1408746573743236303800b01408746573743236303900b11408746573743236313000b21408746573743236313100b3140874657374323631" - "3200b41408746573743236313300b51408746573743236313400b61408746573743236313500b71408746573743236313600b8140874657374" - "3236313700b91408746573743236313800ba1408746573743236313900bb1408746573743236323000bc1408746573743236323100bd140874" - "6573743236323200be1408746573743236323300bf1408746573743236323400c01408746573743236323500c11408746573743236323600c2" - "1408746573743236323700c31408746573743236323800c41408746573743236323900c51408746573743236333000c6140874657374323633" - "3100c71408746573743236333200c81408746573743236333300c91408746573743236333400ca1408746573743236333500cb140874657374" - "3236333600cc1408746573743236333700cd1408746573743236333800ce1408746573743236333900cf1408746573743236343000d0140874" - "6573743236343100d11408746573743236343200d21408746573743236343300d31408746573743236343400d41408746573743236343500d5" - "1408746573743236343600d61408746573743236343700d71408746573743236343800d81408746573743236343900d9140874657374323635" - "3000da1408746573743236353100db1408746573743236353200dc1408746573743236353300dd1408746573743236353400de140874657374" - "3236353500df1408746573743236353600e01408746573743236353700e11408746573743236353800e21408746573743236353900e3140874" - "6573743236363000e41408746573743236363100e51408746573743236363200e61408746573743236363300e71408746573743236363400e8" - "1408746573743236363500e91408746573743236363600ea1408746573743236363700eb1408746573743236363800ec140874657374323636" - "3900ed1408746573743236373000ee1408746573743236373100ef1408746573743236373200f01408746573743236373300f1140874657374" - "3236373400f21408746573743236373500f31408746573743236373600f41408746573743236373700f51408746573743236373800f6140874" - "6573743236373900f71408746573743236383000f81408746573743236383100f91408746573743236383200fa1408746573743236383300fb" - "1408746573743236383400fc1408746573743236383500fd1408746573743236383600fe1408746573743236383700ff140874657374323638" - "380080150874657374323638390081150874657374323639300082150874657374323639310083150874657374323639320084150874657374" - "323639330085150874657374323639340086150874657374323639350087150874657374323639360088150874657374323639370089150874" - "65737432363938008a15087465737432363939008b15087465737432373030008c15087465737432373031008d15087465737432373032008e" - "15087465737432373033008f150874657374323730340090150874657374323730350091150874657374323730360092150874657374323730" - "370093150874657374323730380094150874657374323730390095150874657374323731300096150874657374323731310097150874657374" - "32373132009815087465737432373133009915087465737432373134009a15087465737432373135009b15087465737432373136009c150874" - "65737432373137009d15087465737432373138009e15087465737432373139009f1508746573743237323000a01508746573743237323100a1" - "1508746573743237323200a21508746573743237323300a31508746573743237323400a41508746573743237323500a5150874657374323732" - "3600a61508746573743237323700a71508746573743237323800a81508746573743237323900a91508746573743237333000aa150874657374" - "3237333100ab1508746573743237333200ac1508746573743237333300ad1508746573743237333400ae1508746573743237333500af150874" - "6573743237333600b01508746573743237333700b11508746573743237333800b21508746573743237333900b31508746573743237343000b4" - "1508746573743237343100b51508746573743237343200b61508746573743237343300b71508746573743237343400b8150874657374323734" - "3500b91508746573743237343600ba1508746573743237343700bb1508746573743237343800bc1508746573743237343900bd150874657374" - "3237353000be1508746573743237353100bf1508746573743237353200c01508746573743237353300c11508746573743237353400c2150874" - "6573743237353500c31508746573743237353600c41508746573743237353700c51508746573743237353800c61508746573743237353900c7" - "1508746573743237363000c81508746573743237363100c91508746573743237363200ca1508746573743237363300cb150874657374323736" - "3400cc1508746573743237363500cd1508746573743237363600ce1508746573743237363700cf1508746573743237363800d0150874657374" - "3237363900d11508746573743237373000d21508746573743237373100d31508746573743237373200d41508746573743237373300d5150874" - "6573743237373400d61508746573743237373500d71508746573743237373600d81508746573743237373700d91508746573743237373800da" - "1508746573743237373900db1508746573743237383000dc1508746573743237383100dd1508746573743237383200de150874657374323738" - "3300df1508746573743237383400e01508746573743237383500e11508746573743237383600e21508746573743237383700e3150874657374" - "3237383800e41508746573743237383900e51508746573743237393000e61508746573743237393100e71508746573743237393200e8150874" - "6573743237393300e91508746573743237393400ea1508746573743237393500eb1508746573743237393600ec1508746573743237393700ed" - "1508746573743237393800ee1508746573743237393900ef1508746573743238303000f01508746573743238303100f1150874657374323830" - "3200f21508746573743238303300f31508746573743238303400f41508746573743238303500f51508746573743238303600f6150874657374" - "3238303700f71508746573743238303800f81508746573743238303900f91508746573743238313000fa1508746573743238313100fb150874" - "6573743238313200fc1508746573743238313300fd1508746573743238313400fe1508746573743238313500ff150874657374323831360080" - "160874657374323831370081160874657374323831380082160874657374323831390083160874657374323832300084160874657374323832" - "310085160874657374323832320086160874657374323832330087160874657374323832340088160874657374323832350089160874657374" - "32383236008a16087465737432383237008b16087465737432383238008c16087465737432383239008d16087465737432383330008e160874" - "65737432383331008f160874657374323833320090160874657374323833330091160874657374323833340092160874657374323833350093" - "160874657374323833360094160874657374323833370095160874657374323833380096160874657374323833390097160874657374323834" - "30009816087465737432383431009916087465737432383432009a16087465737432383433009b16087465737432383434009c160874657374" - "32383435009d16087465737432383436009e16087465737432383437009f1608746573743238343800a01608746573743238343900a1160874" - "6573743238353000a21608746573743238353100a31608746573743238353200a41608746573743238353300a51608746573743238353400a6" - "1608746573743238353500a71608746573743238353600a81608746573743238353700a91608746573743238353800aa160874657374323835" - "3900ab1608746573743238363000ac1608746573743238363100ad1608746573743238363200ae1608746573743238363300af160874657374" - "3238363400b01608746573743238363500b11608746573743238363600b21608746573743238363700b31608746573743238363800b4160874" - "6573743238363900b51608746573743238373000b61608746573743238373100b71608746573743238373200b81608746573743238373300b9" - "1608746573743238373400ba1608746573743238373500bb1608746573743238373600bc1608746573743238373700bd160874657374323837" - "3800be1608746573743238373900bf1608746573743238383000c01608746573743238383100c11608746573743238383200c2160874657374" - "3238383300c31608746573743238383400c41608746573743238383500c51608746573743238383600c61608746573743238383700c7160874" - "6573743238383800c81608746573743238383900c91608746573743238393000ca1608746573743238393100cb1608746573743238393200cc" - "1608746573743238393300cd1608746573743238393400ce1608746573743238393500cf1608746573743238393600d0160874657374323839" - "3700d11608746573743238393800d21608746573743238393900d31608746573743239303000d41608746573743239303100d5160874657374" - "3239303200d61608746573743239303300d71608746573743239303400d81608746573743239303500d91608746573743239303600da160874" - "6573743239303700db1608746573743239303800dc1608746573743239303900dd1608746573743239313000de1608746573743239313100df" - "1608746573743239313200e01608746573743239313300e11608746573743239313400e21608746573743239313500e3160874657374323931" - "3600e41608746573743239313700e51608746573743239313800e61608746573743239313900e71608746573743239323000e8160874657374" - "3239323100e91608746573743239323200ea1608746573743239323300eb1608746573743239323400ec1608746573743239323500ed160874" - "6573743239323600ee1608746573743239323700ef1608746573743239323800f01608746573743239323900f11608746573743239333000f2" - "1608746573743239333100f31608746573743239333200f41608746573743239333300f51608746573743239333400f6160874657374323933" - "3500f71608746573743239333600f81608746573743239333700f91608746573743239333800fa1608746573743239333900fb160874657374" - "3239343000fc1608746573743239343100fd1608746573743239343200fe1608746573743239343300ff160874657374323934340080170874" - "657374323934350081170874657374323934360082170874657374323934370083170874657374323934380084170874657374323934390085" - "170874657374323935300086170874657374323935310087170874657374323935320088170874657374323935330089170874657374323935" - "34008a17087465737432393535008b17087465737432393536008c17087465737432393537008d17087465737432393538008e170874657374" - "32393539008f170874657374323936300090170874657374323936310091170874657374323936320092170874657374323936330093170874" - "657374323936340094170874657374323936350095170874657374323936360096170874657374323936370097170874657374323936380098" - "17087465737432393639009917087465737432393730009a17087465737432393731009b17087465737432393732009c170874657374323937" - "33009d17087465737432393734009e17087465737432393735009f1708746573743239373600a01708746573743239373700a1170874657374" - "3239373800a21708746573743239373900a31708746573743239383000a41708746573743239383100a51708746573743239383200a6170874" - "6573743239383300a71708746573743239383400a81708746573743239383500a91708746573743239383600aa1708746573743239383700ab" - "1708746573743239383800ac1708746573743239383900ad1708746573743239393000ae1708746573743239393100af170874657374323939" - "3200b01708746573743239393300b11708746573743239393400b21708746573743239393500b31708746573743239393600b4170874657374" - "3239393700b51708746573743239393800b61708746573743239393900b71708746573743330303000b81708746573743330303100b9170874" - "6573743330303200ba1708746573743330303300bb1708746573743330303400bc1708746573743330303500bd1708746573743330303600be" - "1708746573743330303700bf1708746573743330303800c01708746573743330303900c11708746573743330313000c2170874657374333031" - "3100c31708746573743330313200c41708746573743330313300c51708746573743330313400c61708746573743330313500c7170874657374" - "3330313600c81708746573743330313700c91708746573743330313800ca1708746573743330313900cb1708746573743330323000cc170874" - "6573743330323100cd1708746573743330323200ce1708746573743330323300cf1708746573743330323400d01708746573743330323500d1" - "1708746573743330323600d21708746573743330323700d31708746573743330323800d41708746573743330323900d5170874657374333033" - "3000d61708746573743330333100d71708746573743330333200d81708746573743330333300d91708746573743330333400da170874657374" - "3330333500db1708746573743330333600dc1708746573743330333700dd1708746573743330333800de1708746573743330333900df170874" - "6573743330343000e01708746573743330343100e11708746573743330343200e21708746573743330343300e31708746573743330343400e4" - "1708746573743330343500e51708746573743330343600e61708746573743330343700e71708746573743330343800e8170874657374333034" - "3900e91708746573743330353000ea1708746573743330353100eb1708746573743330353200ec1708746573743330353300ed170874657374" - "3330353400ee1708746573743330353500ef1708746573743330353600f01708746573743330353700f11708746573743330353800f2170874" - "6573743330353900f31708746573743330363000f41708746573743330363100f51708746573743330363200f61708746573743330363300f7" - "1708746573743330363400f81708746573743330363500f91708746573743330363600fa1708746573743330363700fb170874657374333036" - "3800fc1708746573743330363900fd1708746573743330373000fe1708746573743330373100ff170874657374333037320080180874657374" - "333037330081180874657374333037340082180874657374333037350083180874657374333037360084180874657374333037370085180874" - "65737433303738008618087465737433303739008718087465737433303830008818087465737433303831008918087465737433303832008a" - "18087465737433303833008b18087465737433303834008c18087465737433303835008d18087465737433303836008e180874657374333038" - "37008f180874657374333038380090180874657374333038390091180874657374333039300092180874657374333039310093180874657374" - "333039320094180874657374333039330095180874657374333039340096180874657374333039350097180874657374333039360098180874" - "65737433303937009918087465737433303938009a18087465737433303939009b18087465737433313030009c18087465737433313031009d" - "18087465737433313032009e18087465737433313033009f1808746573743331303400a01808746573743331303500a1180874657374333130" - "3600a21808746573743331303700a31808746573743331303800a41808746573743331303900a51808746573743331313000a6180874657374" - "3331313100a71808746573743331313200a81808746573743331313300a91808746573743331313400aa1808746573743331313500ab180874" - "6573743331313600ac1808746573743331313700ad1808746573743331313800ae1808746573743331313900af1808746573743331323000b0" - "1808746573743331323100b11808746573743331323200b21808746573743331323300b31808746573743331323400b4180874657374333132" - "3500b51808746573743331323600b61808746573743331323700b71808746573743331323800b81808746573743331323900b9180874657374" - "3331333000ba1808746573743331333100bb1808746573743331333200bc1808746573743331333300bd1808746573743331333400be180874" - "6573743331333500bf1808746573743331333600c01808746573743331333700c11808746573743331333800c21808746573743331333900c3" - "1808746573743331343000c41808746573743331343100c51808746573743331343200c61808746573743331343300c7180874657374333134" - "3400c81808746573743331343500c91808746573743331343600ca1808746573743331343700cb1808746573743331343800cc180874657374" - "3331343900cd1808746573743331353000ce1808746573743331353100cf1808746573743331353200d01808746573743331353300d1180874" - "6573743331353400d21808746573743331353500d31808746573743331353600d41808746573743331353700d51808746573743331353800d6" - "1808746573743331353900d71808746573743331363000d81808746573743331363100d91808746573743331363200da180874657374333136" - "3300db1808746573743331363400dc1808746573743331363500dd1808746573743331363600de1808746573743331363700df180874657374" - "3331363800e01808746573743331363900e11808746573743331373000e21808746573743331373100e31808746573743331373200e4180874" - "6573743331373300e51808746573743331373400e61808746573743331373500e71808746573743331373600e81808746573743331373700e9" - "1808746573743331373800ea1808746573743331373900eb1808746573743331383000ec1808746573743331383100ed180874657374333138" - "3200ee1808746573743331383300ef1808746573743331383400f01808746573743331383500f11808746573743331383600f2180874657374" - "3331383700f31808746573743331383800f41808746573743331383900f51808746573743331393000f61808746573743331393100f7180874" - "6573743331393200f81808746573743331393300f91808746573743331393400fa1808746573743331393500fb1808746573743331393600fc" - "1808746573743331393700fd1808746573743331393800fe1808746573743331393900ff180874657374333230300080190874657374333230" - "310081190874657374333230320082190874657374333230330083190874657374333230340084190874657374333230350085190874657374" - "33323036008619087465737433323037008719087465737433323038008819087465737433323039008919087465737433323130008a190874" - "65737433323131008b19087465737433323132008c19087465737433323133008d19087465737433323134008e19087465737433323135008f" - "190874657374333231360090190874657374333231370091190874657374333231380092190874657374333231390093190874657374333232" - "300094190874657374333232310095190874657374333232320096190874657374333232330097190874657374333232340098190874657374" - "33323235009919087465737433323236009a19087465737433323237009b19087465737433323238009c19087465737433323239009d190874" - "65737433323330009e19087465737433323331009f1908746573743332333200a01908746573743332333300a11908746573743332333400a2" - "1908746573743332333500a31908746573743332333600a41908746573743332333700a51908746573743332333800a6190874657374333233" - "3900a71908746573743332343000a81908746573743332343100a91908746573743332343200aa1908746573743332343300ab190874657374" - "3332343400ac1908746573743332343500ad1908746573743332343600ae1908746573743332343700af1908746573743332343800b0190874" - "6573743332343900b11908746573743332353000b21908746573743332353100b31908746573743332353200b41908746573743332353300b5" - "1908746573743332353400b61908746573743332353500b71908746573743332353600b81908746573743332353700b9190874657374333235" - "3800ba1908746573743332353900bb1908746573743332363000bc1908746573743332363100bd1908746573743332363200be190874657374" - "3332363300bf1908746573743332363400c01908746573743332363500c11908746573743332363600c21908746573743332363700c3190874" - "6573743332363800c41908746573743332363900c51908746573743332373000c61908746573743332373100c71908746573743332373200c8" - "1908746573743332373300c91908746573743332373400ca1908746573743332373500cb1908746573743332373600cc190874657374333237" - "3700cd1908746573743332373800ce1908746573743332373900cf1908746573743332383000d01908746573743332383100d1190874657374" - "3332383200d21908746573743332383300d31908746573743332383400d41908746573743332383500d51908746573743332383600d6190874" - "6573743332383700d71908746573743332383800d81908746573743332383900d91908746573743332393000da1908746573743332393100db" - "1908746573743332393200dc1908746573743332393300dd1908746573743332393400de1908746573743332393500df190874657374333239" - "3600e01908746573743332393700e11908746573743332393800e21908746573743332393900e31908746573743333303000e4190874657374" - "3333303100e51908746573743333303200e61908746573743333303300e71908746573743333303400e81908746573743333303500e9190874" - "6573743333303600ea1908746573743333303700eb1908746573743333303800ec1908746573743333303900ed1908746573743333313000ee" - "1908746573743333313100ef1908746573743333313200f01908746573743333313300f11908746573743333313400f2190874657374333331" - "3500f31908746573743333313600f41908746573743333313700f51908746573743333313800f61908746573743333313900f7190874657374" - "3333323000f81908746573743333323100f91908746573743333323200fa1908746573743333323300fb1908746573743333323400fc190874" - "6573743333323500fd1908746573743333323600fe1908746573743333323700ff1908746573743333323800801a0874657374333332390081" - "1a08746573743333333000821a08746573743333333100831a08746573743333333200841a08746573743333333300851a0874657374333333" - "3400861a08746573743333333500871a08746573743333333600881a08746573743333333700891a087465737433333338008a1a0874657374" - "33333339008b1a087465737433333430008c1a087465737433333431008d1a087465737433333432008e1a087465737433333433008f1a0874" - "6573743333343400901a08746573743333343500911a08746573743333343600921a08746573743333343700931a0874657374333334380094" - "1a08746573743333343900951a08746573743333353000961a08746573743333353100971a08746573743333353200981a0874657374333335" - "3300991a087465737433333534009a1a087465737433333535009b1a087465737433333536009c1a087465737433333537009d1a0874657374" - "33333538009e1a087465737433333539009f1a08746573743333363000a01a08746573743333363100a11a08746573743333363200a21a0874" - "6573743333363300a31a08746573743333363400a41a08746573743333363500a51a08746573743333363600a61a08746573743333363700a7" - "1a08746573743333363800a81a08746573743333363900a91a08746573743333373000aa1a08746573743333373100ab1a0874657374333337" - "3200ac1a08746573743333373300ad1a08746573743333373400ae1a08746573743333373500af1a08746573743333373600b01a0874657374" - "3333373700b11a08746573743333373800b21a08746573743333373900b31a08746573743333383000b41a08746573743333383100b51a0874" - "6573743333383200b61a08746573743333383300b71a08746573743333383400b81a08746573743333383500b91a08746573743333383600ba" - "1a08746573743333383700bb1a08746573743333383800bc1a08746573743333383900bd1a08746573743333393000be1a0874657374333339" - "3100bf1a08746573743333393200c01a08746573743333393300c11a08746573743333393400c21a08746573743333393500c31a0874657374" - "3333393600c41a08746573743333393700c51a08746573743333393800c61a08746573743333393900c71a08746573743334303000c81a0874" - "6573743334303100c91a08746573743334303200ca1a08746573743334303300cb1a08746573743334303400cc1a08746573743334303500cd" - "1a08746573743334303600ce1a08746573743334303700cf1a08746573743334303800d01a08746573743334303900d11a0874657374333431" - "3000d21a08746573743334313100d31a08746573743334313200d41a08746573743334313300d51a08746573743334313400d61a0874657374" - "3334313500d71a08746573743334313600d81a08746573743334313700d91a08746573743334313800da1a08746573743334313900db1a0874" - "6573743334323000dc1a08746573743334323100dd1a08746573743334323200de1a08746573743334323300df1a08746573743334323400e0" - "1a08746573743334323500e11a08746573743334323600e21a08746573743334323700e31a08746573743334323800e41a0874657374333432" - "3900e51a08746573743334333000e61a08746573743334333100e71a08746573743334333200e81a08746573743334333300e91a0874657374" - "3334333400ea1a08746573743334333500eb1a08746573743334333600ec1a08746573743334333700ed1a08746573743334333800ee1a0874" - "6573743334333900ef1a08746573743334343000f01a08746573743334343100f11a08746573743334343200f21a08746573743334343300f3" - "1a08746573743334343400f41a08746573743334343500f51a08746573743334343600f61a08746573743334343700f71a0874657374333434" - "3800f81a08746573743334343900f91a08746573743334353000fa1a08746573743334353100fb1a08746573743334353200fc1a0874657374" - "3334353300fd1a08746573743334353400fe1a08746573743334353500ff1a08746573743334353600801b08746573743334353700811b0874" - "6573743334353800821b08746573743334353900831b08746573743334363000841b08746573743334363100851b0874657374333436320086" - "1b08746573743334363300871b08746573743334363400881b08746573743334363500891b087465737433343636008a1b0874657374333436" - "37008b1b087465737433343638008c1b087465737433343639008d1b087465737433343730008e1b087465737433343731008f1b0874657374" - "3334373200901b08746573743334373300911b08746573743334373400921b08746573743334373500931b08746573743334373600941b0874" - "6573743334373700951b08746573743334373800961b08746573743334373900971b08746573743334383000981b0874657374333438310099" - "1b087465737433343832009a1b087465737433343833009b1b087465737433343834009c1b087465737433343835009d1b0874657374333438" - "36009e1b087465737433343837009f1b08746573743334383800a01b08746573743334383900a11b08746573743334393000a21b0874657374" - "3334393100a31b08746573743334393200a41b08746573743334393300a51b08746573743334393400a61b08746573743334393500a71b0874" - "6573743334393600a81b08746573743334393700a91b08746573743334393800aa1b08746573743334393900ab1b08746573743335303000ac" - "1b08746573743335303100ad1b08746573743335303200ae1b08746573743335303300af1b08746573743335303400b01b0874657374333530" - "3500b11b08746573743335303600b21b08746573743335303700b31b08746573743335303800b41b08746573743335303900b51b0874657374" - "3335313000b61b08746573743335313100b71b08746573743335313200b81b08746573743335313300b91b08746573743335313400ba1b0874" - "6573743335313500bb1b08746573743335313600bc1b08746573743335313700bd1b08746573743335313800be1b08746573743335313900bf" - "1b08746573743335323000c01b08746573743335323100c11b08746573743335323200c21b08746573743335323300c31b0874657374333532" - "3400c41b08746573743335323500c51b08746573743335323600c61b08746573743335323700c71b08746573743335323800c81b0874657374" - "3335323900c91b08746573743335333000ca1b08746573743335333100cb1b08746573743335333200cc1b08746573743335333300cd1b0874" - "6573743335333400ce1b08746573743335333500cf1b08746573743335333600d01b08746573743335333700d11b08746573743335333800d2" - "1b08746573743335333900d31b08746573743335343000d41b08746573743335343100d51b08746573743335343200d61b0874657374333534" - "3300d71b08746573743335343400d81b08746573743335343500d91b08746573743335343600da1b08746573743335343700db1b0874657374" - "3335343800dc1b08746573743335343900dd1b08746573743335353000de1b08746573743335353100df1b08746573743335353200e01b0874" - "6573743335353300e11b08746573743335353400e21b08746573743335353500e31b08746573743335353600e41b08746573743335353700e5" - "1b08746573743335353800e61b08746573743335353900e71b08746573743335363000e81b08746573743335363100e91b0874657374333536" - "3200ea1b08746573743335363300eb1b08746573743335363400ec1b08746573743335363500ed1b08746573743335363600ee1b0874657374" - "3335363700ef1b08746573743335363800f01b08746573743335363900f11b08746573743335373000f21b08746573743335373100f31b0874" - "6573743335373200f41b08746573743335373300f51b08746573743335373400f61b08746573743335373500f71b08746573743335373600f8" - "1b08746573743335373700f91b08746573743335373800fa1b08746573743335373900fb1b08746573743335383000fc1b0874657374333538" - "3100fd1b08746573743335383200fe1b08746573743335383300ff1b08746573743335383400801c08746573743335383500811c0874657374" - "3335383600821c08746573743335383700831c08746573743335383800841c08746573743335383900851c08746573743335393000861c0874" - "6573743335393100871c08746573743335393200881c08746573743335393300891c087465737433353934008a1c087465737433353935008b" - "1c087465737433353936008c1c087465737433353937008d1c087465737433353938008e1c087465737433353939008f1c0874657374333630" - "3000901c08746573743336303100911c08746573743336303200921c08746573743336303300931c08746573743336303400941c0874657374" - "3336303500951c08746573743336303600961c08746573743336303700971c08746573743336303800981c08746573743336303900991c0874" - "65737433363130009a1c087465737433363131009b1c087465737433363132009c1c087465737433363133009d1c087465737433363134009e" - "1c087465737433363135009f1c08746573743336313600a01c08746573743336313700a11c08746573743336313800a21c0874657374333631" - "3900a31c08746573743336323000a41c08746573743336323100a51c08746573743336323200a61c08746573743336323300a71c0874657374" - "3336323400a81c08746573743336323500a91c08746573743336323600aa1c08746573743336323700ab1c08746573743336323800ac1c0874" - "6573743336323900ad1c08746573743336333000ae1c08746573743336333100af1c08746573743336333200b01c08746573743336333300b1" - "1c08746573743336333400b21c08746573743336333500b31c08746573743336333600b41c08746573743336333700b51c0874657374333633" - "3800b61c08746573743336333900b71c08746573743336343000b81c08746573743336343100b91c08746573743336343200ba1c0874657374" - "3336343300bb1c08746573743336343400bc1c08746573743336343500bd1c08746573743336343600be1c08746573743336343700bf1c0874" - "6573743336343800c01c08746573743336343900c11c08746573743336353000c21c08746573743336353100c31c08746573743336353200c4" - "1c08746573743336353300c51c08746573743336353400c61c08746573743336353500c71c08746573743336353600c81c0874657374333635" - "3700c91c08746573743336353800ca1c08746573743336353900cb1c08746573743336363000cc1c08746573743336363100cd1c0874657374" - "3336363200ce1c08746573743336363300cf1c08746573743336363400d01c08746573743336363500d11c08746573743336363600d21c0874" - "6573743336363700d31c08746573743336363800d41c08746573743336363900d51c08746573743336373000d61c08746573743336373100d7" - "1c08746573743336373200d81c08746573743336373300d91c08746573743336373400da1c08746573743336373500db1c0874657374333637" - "3600dc1c08746573743336373700dd1c08746573743336373800de1c08746573743336373900df1c08746573743336383000e01c0874657374" - "3336383100e11c08746573743336383200e21c08746573743336383300e31c08746573743336383400e41c08746573743336383500e51c0874" - "6573743336383600e61c08746573743336383700e71c08746573743336383800e81c08746573743336383900e91c08746573743336393000ea" - "1c08746573743336393100eb1c08746573743336393200ec1c08746573743336393300ed1c08746573743336393400ee1c0874657374333639" - "3500ef1c08746573743336393600f01c08746573743336393700f11c08746573743336393800f21c08746573743336393900f31c0874657374" - "3337303000f41c08746573743337303100f51c08746573743337303200f61c08746573743337303300f71c08746573743337303400f81c0874" - "6573743337303500f91c08746573743337303600fa1c08746573743337303700fb1c08746573743337303800fc1c08746573743337303900fd" - "1c08746573743337313000fe1c08746573743337313100ff1c08746573743337313200801d08746573743337313300811d0874657374333731" - "3400821d08746573743337313500831d08746573743337313600841d08746573743337313700851d08746573743337313800861d0874657374" - "3337313900871d08746573743337323000881d08746573743337323100891d087465737433373232008a1d087465737433373233008b1d0874" - "65737433373234008c1d087465737433373235008d1d087465737433373236008e1d087465737433373237008f1d0874657374333732380090" - "1d08746573743337323900911d08746573743337333000921d08746573743337333100931d08746573743337333200941d0874657374333733" - "3300951d08746573743337333400961d08746573743337333500971d08746573743337333600981d08746573743337333700991d0874657374" - "33373338009a1d087465737433373339009b1d087465737433373430009c1d087465737433373431009d1d087465737433373432009e1d0874" - "65737433373433009f1d08746573743337343400a01d08746573743337343500a11d08746573743337343600a21d08746573743337343700a3" - "1d08746573743337343800a41d08746573743337343900a51d08746573743337353000a61d08746573743337353100a71d0874657374333735" - "3200a81d08746573743337353300a91d08746573743337353400aa1d08746573743337353500ab1d08746573743337353600ac1d0874657374" - "3337353700ad1d08746573743337353800ae1d08746573743337353900af1d08746573743337363000b01d08746573743337363100b11d0874" - "6573743337363200b21d08746573743337363300b31d08746573743337363400b41d08746573743337363500b51d08746573743337363600b6" - "1d08746573743337363700b71d08746573743337363800b81d08746573743337363900b91d08746573743337373000ba1d0874657374333737" - "3100bb1d08746573743337373200bc1d08746573743337373300bd1d08746573743337373400be1d08746573743337373500bf1d0874657374" - "3337373600c01d08746573743337373700c11d08746573743337373800c21d08746573743337373900c31d08746573743337383000c41d0874" - "6573743337383100c51d08746573743337383200c61d08746573743337383300c71d08746573743337383400c81d08746573743337383500c9" - "1d08746573743337383600ca1d08746573743337383700cb1d08746573743337383800cc1d08746573743337383900cd1d0874657374333739" - "3000ce1d08746573743337393100cf1d08746573743337393200d01d08746573743337393300d11d08746573743337393400d21d0874657374" - "3337393500d31d08746573743337393600d41d08746573743337393700d51d08746573743337393800d61d08746573743337393900d71d0874" - "6573743338303000d81d08746573743338303100d91d08746573743338303200da1d08746573743338303300db1d08746573743338303400dc" - "1d08746573743338303500dd1d08746573743338303600de1d08746573743338303700df1d08746573743338303800e01d0874657374333830" - "3900e11d08746573743338313000e21d08746573743338313100e31d08746573743338313200e41d08746573743338313300e51d0874657374" - "3338313400e61d08746573743338313500e71d08746573743338313600e81d08746573743338313700e91d08746573743338313800ea1d0874" - "6573743338313900eb1d08746573743338323000ec1d08746573743338323100ed1d08746573743338323200ee1d08746573743338323300ef" - "1d08746573743338323400f01d08746573743338323500f11d08746573743338323600f21d08746573743338323700f31d0874657374333832" - "3800f41d08746573743338323900f51d08746573743338333000f61d08746573743338333100f71d08746573743338333200f81d0874657374" - "3338333300f91d08746573743338333400fa1d08746573743338333500fb1d08746573743338333600fc1d08746573743338333700fd1d0874" - "6573743338333800fe1d08746573743338333900ff1d08746573743338343000801e08746573743338343100811e0874657374333834320082" - "1e08746573743338343300831e08746573743338343400841e08746573743338343500851e08746573743338343600861e0874657374333834" - "3700871e08746573743338343800881e08746573743338343900891e087465737433383530008a1e087465737433383531008b1e0874657374" - "33383532008c1e087465737433383533008d1e087465737433383534008e1e087465737433383535008f1e08746573743338353600901e0874" - "6573743338353700911e08746573743338353800921e08746573743338353900931e08746573743338363000941e0874657374333836310095" - "1e08746573743338363200961e08746573743338363300971e08746573743338363400981e08746573743338363500991e0874657374333836" - "36009a1e087465737433383637009b1e087465737433383638009c1e087465737433383639009d1e087465737433383730009e1e0874657374" - "33383731009f1e08746573743338373200a01e08746573743338373300a11e08746573743338373400a21e08746573743338373500a31e0874" - "6573743338373600a41e08746573743338373700a51e08746573743338373800a61e08746573743338373900a71e08746573743338383000a8" - "1e08746573743338383100a91e08746573743338383200aa1e08746573743338383300ab1e08746573743338383400ac1e0874657374333838" - "3500ad1e08746573743338383600ae1e08746573743338383700af1e08746573743338383800b01e08746573743338383900b11e0874657374" - "3338393000b21e08746573743338393100b31e08746573743338393200b41e08746573743338393300b51e08746573743338393400b61e0874" - "6573743338393500b71e08746573743338393600b81e08746573743338393700b91e08746573743338393800ba1e08746573743338393900bb" - "1e08746573743339303000bc1e08746573743339303100bd1e08746573743339303200be1e08746573743339303300bf1e0874657374333930" - "3400c01e08746573743339303500c11e08746573743339303600c21e08746573743339303700c31e08746573743339303800c41e0874657374" - "3339303900c51e08746573743339313000c61e08746573743339313100c71e08746573743339313200c81e08746573743339313300c91e0874" - "6573743339313400ca1e08746573743339313500cb1e08746573743339313600cc1e08746573743339313700cd1e08746573743339313800ce" - "1e08746573743339313900cf1e08746573743339323000d01e08746573743339323100d11e08746573743339323200d21e0874657374333932" - "3300d31e08746573743339323400d41e08746573743339323500d51e08746573743339323600d61e08746573743339323700d71e0874657374" - "3339323800d81e08746573743339323900d91e08746573743339333000da1e08746573743339333100db1e08746573743339333200dc1e0874" - "6573743339333300dd1e08746573743339333400de1e08746573743339333500df1e08746573743339333600e01e08746573743339333700e1" - "1e08746573743339333800e21e08746573743339333900e31e08746573743339343000e41e08746573743339343100e51e0874657374333934" - "3200e61e08746573743339343300e71e08746573743339343400e81e08746573743339343500e91e08746573743339343600ea1e0874657374" - "3339343700eb1e08746573743339343800ec1e08746573743339343900ed1e08746573743339353000ee1e08746573743339353100ef1e0874" - "6573743339353200f01e08746573743339353300f11e08746573743339353400f21e08746573743339353500f31e08746573743339353600f4" - "1e08746573743339353700f51e08746573743339353800f61e08746573743339353900f71e08746573743339363000f81e0874657374333936" - "3100f91e08746573743339363200fa1e08746573743339363300fb1e08746573743339363400fc1e08746573743339363500fd1e0874657374" - "3339363600fe1e08746573743339363700ff1e08746573743339363800801f08746573743339363900811f08746573743339373000821f0874" - "6573743339373100831f08746573743339373200841f08746573743339373300851f08746573743339373400861f0874657374333937350087" - "1f08746573743339373600881f08746573743339373700891f087465737433393738008a1f087465737433393739008b1f0874657374333938" - "30008c1f087465737433393831008d1f087465737433393832008e1f087465737433393833008f1f08746573743339383400901f0874657374" - "3339383500911f08746573743339383600921f08746573743339383700931f08746573743339383800941f08746573743339383900951f0874" - "6573743339393000961f08746573743339393100971f08746573743339393200981f08746573743339393300991f087465737433393934009a" - "1f087465737433393935009b1f087465737433393936009c1f087465737433393937009d1f087465737433393938009e1f0874657374333939" - "39009f1f08746573743430303000a01f08746573743430303100a11f08746573743430303200a21f08746573743430303300a31f0874657374" - "3430303400a41f08746573743430303500a51f08746573743430303600a61f08746573743430303700a71f08746573743430303800a81f0874" - "6573743430303900a91f08746573743430313000aa1f08746573743430313100ab1f08746573743430313200ac1f08746573743430313300ad" - "1f08746573743430313400ae1f08746573743430313500af1f08746573743430313600b01f08746573743430313700b11f0874657374343031" - "3800b21f08746573743430313900b31f08746573743430323000b41f08746573743430323100b51f08746573743430323200b61f0874657374" - "3430323300b71f08746573743430323400b81f08746573743430323500b91f08746573743430323600ba1f08746573743430323700bb1f0874" - "6573743430323800bc1f08746573743430323900bd1f08746573743430333000be1f08746573743430333100bf1f08746573743430333200c0" - "1f08746573743430333300c11f08746573743430333400c21f08746573743430333500c31f08746573743430333600c41f0874657374343033" - "3700c51f08746573743430333800c61f08746573743430333900c71f08746573743430343000c81f08746573743430343100c91f0874657374" - "3430343200ca1f08746573743430343300cb1f08746573743430343400cc1f08746573743430343500cd1f08746573743430343600ce1f0874" - "6573743430343700cf1f08746573743430343800d01f08746573743430343900d11f08746573743430353000d21f08746573743430353100d3" - "1f08746573743430353200d41f08746573743430353300d51f08746573743430353400d61f08746573743430353500d71f0874657374343035" - "3600d81f08746573743430353700d91f08746573743430353800da1f08746573743430353900db1f08746573743430363000dc1f0874657374" - "3430363100dd1f08746573743430363200de1f08746573743430363300df1f08746573743430363400e01f08746573743430363500e11f0874" - "6573743430363600e21f08746573743430363700e31f08746573743430363800e41f08746573743430363900e51f08746573743430373000e6" - "1f08746573743430373100e71f08746573743430373200e81f08746573743430373300e91f08746573743430373400ea1f0874657374343037" - "3500eb1f08746573743430373600ec1f08746573743430373700ed1f08746573743430373800ee1f08746573743430373900ef1f0874657374" - "3430383000f01f08746573743430383100f11f08746573743430383200f21f08746573743430383300f31f08746573743430383400f41f0874" - "6573743430383500f51f08746573743430383600f61f08746573743430383700f71f08746573743430383800f81f08746573743430383900f9" - "1f08746573743430393000fa1f08746573743430393100fb1f08746573743430393200fc1f08746573743430393300fd1f0874657374343039" - "3400fe1f08746573743430393500ff1f0874657374343039360080200874657374343039370081200874657374343039380082200874657374" - "343039390083200874657374343130300084200874657374343130310085200874657374343130320086200874657374343130330087200874" - "65737434313034008820087465737434313035008920087465737434313036008a20087465737434313037008b20087465737434313038008c" - "20087465737434313039008d20087465737434313130008e20087465737434313131008f200874657374343131320090200874657374343131" - "330091200874657374343131340092200874657374343131350093200874657374343131360094200874657374343131370095200874657374" - "34313138009620087465737434313139009720087465737434313230009820087465737434313231009920087465737434313232009a200874" - "65737434313233009b20087465737434313234009c20087465737434313235009d20087465737434313236009e20087465737434313237009f" - "2008746573743431323800a02008746573743431323900a12008746573743431333000a22008746573743431333100a3200874657374343133" - "3200a42008746573743431333300a52008746573743431333400a62008746573743431333500a72008746573743431333600a8200874657374" - "3431333700a92008746573743431333800aa2008746573743431333900ab2008746573743431343000ac2008746573743431343100ad200874" - "6573743431343200ae2008746573743431343300af2008746573743431343400b02008746573743431343500b12008746573743431343600b2" - "2008746573743431343700b32008746573743431343800b42008746573743431343900b52008746573743431353000b6200874657374343135" - "3100b72008746573743431353200b82008746573743431353300b92008746573743431353400ba2008746573743431353500bb200874657374" - "3431353600bc2008746573743431353700bd2008746573743431353800be2008746573743431353900bf2008746573743431363000c0200874" - "6573743431363100c12008746573743431363200c22008746573743431363300c32008746573743431363400c42008746573743431363500c5" - "2008746573743431363600c62008746573743431363700c72008746573743431363800c82008746573743431363900c9200874657374343137" - "3000ca2008746573743431373100cb2008746573743431373200cc2008746573743431373300cd2008746573743431373400ce200874657374" - "3431373500cf2008746573743431373600d02008746573743431373700d12008746573743431373800d22008746573743431373900d3200874" - "6573743431383000d42008746573743431383100d52008746573743431383200d62008746573743431383300d72008746573743431383400d8" - "2008746573743431383500d92008746573743431383600da2008746573743431383700db2008746573743431383800dc200874657374343138" - "3900dd2008746573743431393000de2008746573743431393100df2008746573743431393200e02008746573743431393300e1200874657374" - "3431393400e22008746573743431393500e32008746573743431393600e42008746573743431393700e52008746573743431393800e6200874" - "6573743431393900e72008746573743432303000e82008746573743432303100e92008746573743432303200ea2008746573743432303300eb" - "2008746573743432303400ec2008746573743432303500ed2008746573743432303600ee2008746573743432303700ef200874657374343230" - "3800f02008746573743432303900f12008746573743432313000f22008746573743432313100f32008746573743432313200f4200874657374" - "3432313300f52008746573743432313400f62008746573743432313500f72008746573743432313600f82008746573743432313700f9200874" - "6573743432313800fa2008746573743432313900fb2008746573743432323000fc2008746573743432323100fd2008746573743432323200fe" - "2008746573743432323300ff200874657374343232340080210874657374343232350081210874657374343232360082210874657374343232" - "370083210874657374343232380084210874657374343232390085210874657374343233300086210874657374343233310087210874657374" - "34323332008821087465737434323333008921087465737434323334008a21087465737434323335008b21087465737434323336008c210874" - "65737434323337008d21087465737434323338008e21087465737434323339008f210874657374343234300090210874657374343234310091" - "210874657374343234320092210874657374343234330093210874657374343234340094210874657374343234350095210874657374343234" - "36009621087465737434323437009721087465737434323438009821087465737434323439009921087465737434323530009a210874657374" - "34323531009b21087465737434323532009c21087465737434323533009d21087465737434323534009e21087465737434323535009f210874" - "6573743432353600a02108746573743432353700a12108746573743432353800a22108746573743432353900a32108746573743432363000a4" - "2108746573743432363100a52108746573743432363200a62108746573743432363300a72108746573743432363400a8210874657374343236" - "3500a92108746573743432363600aa2108746573743432363700ab2108746573743432363800ac2108746573743432363900ad210874657374" - "3432373000ae2108746573743432373100af2108746573743432373200b02108746573743432373300b12108746573743432373400b2210874" - "6573743432373500b32108746573743432373600b42108746573743432373700b52108746573743432373800b62108746573743432373900b7" - "2108746573743432383000b82108746573743432383100b92108746573743432383200ba2108746573743432383300bb210874657374343238" - "3400bc2108746573743432383500bd2108746573743432383600be2108746573743432383700bf2108746573743432383800c0210874657374" - "3432383900c12108746573743432393000c22108746573743432393100c32108746573743432393200c42108746573743432393300c5210874" - "6573743432393400c62108746573743432393500c72108746573743432393600c82108746573743432393700c92108746573743432393800ca" - "2108746573743432393900cb2108746573743433303000cc2108746573743433303100cd2108746573743433303200ce210874657374343330" - "3300cf2108746573743433303400d02108746573743433303500d12108746573743433303600d22108746573743433303700d3210874657374" - "3433303800d42108746573743433303900d52108746573743433313000d62108746573743433313100d72108746573743433313200d8210874" - "6573743433313300d92108746573743433313400da2108746573743433313500db2108746573743433313600dc2108746573743433313700dd" - "2108746573743433313800de2108746573743433313900df2108746573743433323000e02108746573743433323100e1210874657374343332" - "3200e22108746573743433323300e32108746573743433323400e42108746573743433323500e52108746573743433323600e6210874657374" - "3433323700e72108746573743433323800e82108746573743433323900e92108746573743433333000ea2108746573743433333100eb210874" - "6573743433333200ec2108746573743433333300ed2108746573743433333400ee2108746573743433333500ef2108746573743433333600f0" - "2108746573743433333700f12108746573743433333800f22108746573743433333900f32108746573743433343000f4210874657374343334" - "3100f52108746573743433343200f62108746573743433343300f72108746573743433343400f82108746573743433343500f9210874657374" - "3433343600fa2108746573743433343700fb2108746573743433343800fc2108746573743433343900fd2108746573743433353000fe210874" - "6573743433353100ff210874657374343335320080220874657374343335330081220874657374343335340082220874657374343335350083" - "220874657374343335360084220874657374343335370085220874657374343335380086220874657374343335390087220874657374343336" - "30008822087465737434333631008922087465737434333632008a22087465737434333633008b22087465737434333634008c220874657374" - "34333635008d22087465737434333636008e22087465737434333637008f220874657374343336380090220874657374343336390091220874" - "657374343337300092220874657374343337310093220874657374343337320094220874657374343337330095220874657374343337340096" - "22087465737434333735009722087465737434333736009822087465737434333737009922087465737434333738009a220874657374343337" - "39009b22087465737434333830009c22087465737434333831009d22087465737434333832009e22087465737434333833009f220874657374" - "3433383400a02208746573743433383500a12208746573743433383600a22208746573743433383700a32208746573743433383800a4220874" - "6573743433383900a52208746573743433393000a62208746573743433393100a72208746573743433393200a82208746573743433393300a9" - "2208746573743433393400aa2208746573743433393500ab2208746573743433393600ac2208746573743433393700ad220874657374343339" - "3800ae2208746573743433393900af2208746573743434303000b02208746573743434303100b12208746573743434303200b2220874657374" - "3434303300b32208746573743434303400b42208746573743434303500b52208746573743434303600b62208746573743434303700b7220874" - "6573743434303800b82208746573743434303900b92208746573743434313000ba2208746573743434313100bb2208746573743434313200bc" - "2208746573743434313300bd2208746573743434313400be2208746573743434313500bf2208746573743434313600c0220874657374343431" - "3700c12208746573743434313800c22208746573743434313900c32208746573743434323000c42208746573743434323100c5220874657374" - "3434323200c62208746573743434323300c72208746573743434323400c82208746573743434323500c92208746573743434323600ca220874" - "6573743434323700cb2208746573743434323800cc2208746573743434323900cd2208746573743434333000ce2208746573743434333100cf" - "2208746573743434333200d02208746573743434333300d12208746573743434333400d22208746573743434333500d3220874657374343433" - "3600d42208746573743434333700d52208746573743434333800d62208746573743434333900d72208746573743434343000d8220874657374" - "3434343100d92208746573743434343200da2208746573743434343300db2208746573743434343400dc2208746573743434343500dd220874" - "6573743434343600de2208746573743434343700df2208746573743434343800e02208746573743434343900e12208746573743434353000e2" - "2208746573743434353100e32208746573743434353200e42208746573743434353300e52208746573743434353400e6220874657374343435" - "3500e72208746573743434353600e82208746573743434353700e92208746573743434353800ea2208746573743434353900eb220874657374" - "3434363000ec2208746573743434363100ed2208746573743434363200ee2208746573743434363300ef2208746573743434363400f0220874" - "6573743434363500f12208746573743434363600f22208746573743434363700f32208746573743434363800f42208746573743434363900f5" - "2208746573743434373000f62208746573743434373100f72208746573743434373200f82208746573743434373300f9220874657374343437" - "3400fa2208746573743434373500fb2208746573743434373600fc2208746573743434373700fd2208746573743434373800fe220874657374" - "3434373900ff220874657374343438300080230874657374343438310081230874657374343438320082230874657374343438330083230874" - "657374343438340084230874657374343438350085230874657374343438360086230874657374343438370087230874657374343438380088" - "23087465737434343839008923087465737434343930008a23087465737434343931008b23087465737434343932008c230874657374343439" - "33008d23087465737434343934008e23087465737434343935008f230874657374343439360090230874657374343439370091230874657374" - "343439380092230874657374343439390093230874657374343530300094230874657374343530310095230874657374343530320096230874" - "65737434353033009723087465737434353034009823087465737434353035009923087465737434353036009a23087465737434353037009b" - "23087465737434353038009c23087465737434353039009d23087465737434353130009e23087465737434353131009f230874657374343531" - "3200a02308746573743435313300a12308746573743435313400a22308746573743435313500a32308746573743435313600a4230874657374" - "3435313700a52308746573743435313800a62308746573743435313900a72308746573743435323000a82308746573743435323100a9230874" - "6573743435323200aa2308746573743435323300ab2308746573743435323400ac2308746573743435323500ad2308746573743435323600ae" - "2308746573743435323700af2308746573743435323800b02308746573743435323900b12308746573743435333000b2230874657374343533" - "3100b32308746573743435333200b42308746573743435333300b52308746573743435333400b62308746573743435333500b7230874657374" - "3435333600b82308746573743435333700b92308746573743435333800ba2308746573743435333900bb2308746573743435343000bc230874" - "6573743435343100bd2308746573743435343200be2308746573743435343300bf2308746573743435343400c02308746573743435343500c1" - "2308746573743435343600c22308746573743435343700c32308746573743435343800c42308746573743435343900c5230874657374343535" - "3000c62308746573743435353100c72308746573743435353200c82308746573743435353300c92308746573743435353400ca230874657374" - "3435353500cb2308746573743435353600cc2308746573743435353700cd2308746573743435353800ce2308746573743435353900cf230874" - "6573743435363000d02308746573743435363100d12308746573743435363200d22308746573743435363300d32308746573743435363400d4" - "2308746573743435363500d52308746573743435363600d62308746573743435363700d72308746573743435363800d8230874657374343536" - "3900d92308746573743435373000da2308746573743435373100db2308746573743435373200dc2308746573743435373300dd230874657374" - "3435373400de2308746573743435373500df2308746573743435373600e02308746573743435373700e12308746573743435373800e2230874" - "6573743435373900e32308746573743435383000e42308746573743435383100e52308746573743435383200e62308746573743435383300e7" - "2308746573743435383400e82308746573743435383500e92308746573743435383600ea2308746573743435383700eb230874657374343538" - "3800ec2308746573743435383900ed2308746573743435393000ee2308746573743435393100ef2308746573743435393200f0230874657374" - "3435393300f12308746573743435393400f22308746573743435393500f32308746573743435393600f42308746573743435393700f5230874" - "6573743435393800f62308746573743435393900f72308746573743436303000f82308746573743436303100f92308746573743436303200fa" - "2308746573743436303300fb2308746573743436303400fc2308746573743436303500fd2308746573743436303600fe230874657374343630" - "3700ff230874657374343630380080240874657374343630390081240874657374343631300082240874657374343631310083240874657374" - "343631320084240874657374343631330085240874657374343631340086240874657374343631350087240874657374343631360088240874" - "65737434363137008924087465737434363138008a24087465737434363139008b24087465737434363230008c24087465737434363231008d" - "24087465737434363232008e24087465737434363233008f240874657374343632340090240874657374343632350091240874657374343632" - "360092240874657374343632370093240874657374343632380094240874657374343632390095240874657374343633300096240874657374" - "34363331009724087465737434363332009824087465737434363333009924087465737434363334009a24087465737434363335009b240874" - "65737434363336009c24087465737434363337009d24087465737434363338009e24087465737434363339009f2408746573743436343000a0" - "2408746573743436343100a12408746573743436343200a22408746573743436343300a32408746573743436343400a4240874657374343634" - "3500a52408746573743436343600a62408746573743436343700a72408746573743436343800a82408746573743436343900a9240874657374" - "3436353000aa2408746573743436353100ab2408746573743436353200ac2408746573743436353300ad2408746573743436353400ae240874" - "6573743436353500af2408746573743436353600b02408746573743436353700b12408746573743436353800b22408746573743436353900b3" - "2408746573743436363000b42408746573743436363100b52408746573743436363200b62408746573743436363300b7240874657374343636" - "3400b82408746573743436363500b92408746573743436363600ba2408746573743436363700bb2408746573743436363800bc240874657374" - "3436363900bd2408746573743436373000be2408746573743436373100bf2408746573743436373200c02408746573743436373300c1240874" - "6573743436373400c22408746573743436373500c32408746573743436373600c42408746573743436373700c52408746573743436373800c6" - "2408746573743436373900c72408746573743436383000c82408746573743436383100c92408746573743436383200ca240874657374343638" - "3300cb2408746573743436383400cc2408746573743436383500cd2408746573743436383600ce2408746573743436383700cf240874657374" - "3436383800d02408746573743436383900d12408746573743436393000d22408746573743436393100d32408746573743436393200d4240874" - "6573743436393300d52408746573743436393400d62408746573743436393500d72408746573743436393600d82408746573743436393700d9" - "2408746573743436393800da2408746573743436393900db2408746573743437303000dc2408746573743437303100dd240874657374343730" - "3200de2408746573743437303300df2408746573743437303400e02408746573743437303500e12408746573743437303600e2240874657374" - "3437303700e32408746573743437303800e42408746573743437303900e52408746573743437313000e62408746573743437313100e7240874" - "6573743437313200e82408746573743437313300e92408746573743437313400ea2408746573743437313500eb2408746573743437313600ec" - "2408746573743437313700ed2408746573743437313800ee2408746573743437313900ef2408746573743437323000f0240874657374343732" - "3100f12408746573743437323200f22408746573743437323300f32408746573743437323400f42408746573743437323500f5240874657374" - "3437323600f62408746573743437323700f72408746573743437323800f82408746573743437323900f92408746573743437333000fa240874" - "6573743437333100fb2408746573743437333200fc2408746573743437333300fd2408746573743437333400fe2408746573743437333500ff" - "240874657374343733360080250874657374343733370081250874657374343733380082250874657374343733390083250874657374343734" - "300084250874657374343734310085250874657374343734320086250874657374343734330087250874657374343734340088250874657374" - "34373435008925087465737434373436008a25087465737434373437008b25087465737434373438008c25087465737434373439008d250874" - "65737434373530008e25087465737434373531008f250874657374343735320090250874657374343735330091250874657374343735340092" - "250874657374343735350093250874657374343735360094250874657374343735370095250874657374343735380096250874657374343735" - "39009725087465737434373630009825087465737434373631009925087465737434373632009a25087465737434373633009b250874657374" - "34373634009c25087465737434373635009d25087465737434373636009e25087465737434373637009f2508746573743437363800a0250874" - "6573743437363900a12508746573743437373000a22508746573743437373100a32508746573743437373200a42508746573743437373300a5" - "2508746573743437373400a62508746573743437373500a72508746573743437373600a82508746573743437373700a9250874657374343737" - "3800aa2508746573743437373900ab2508746573743437383000ac2508746573743437383100ad2508746573743437383200ae250874657374" - "3437383300af2508746573743437383400b02508746573743437383500b12508746573743437383600b22508746573743437383700b3250874" - "6573743437383800b42508746573743437383900b52508746573743437393000b62508746573743437393100b72508746573743437393200b8" - "2508746573743437393300b92508746573743437393400ba2508746573743437393500bb2508746573743437393600bc250874657374343739" - "3700bd2508746573743437393800be2508746573743437393900bf2508746573743438303000c02508746573743438303100c1250874657374" - "3438303200c22508746573743438303300c32508746573743438303400c42508746573743438303500c52508746573743438303600c6250874" - "6573743438303700c72508746573743438303800c82508746573743438303900c92508746573743438313000ca2508746573743438313100cb" - "2508746573743438313200cc2508746573743438313300cd2508746573743438313400ce2508746573743438313500cf250874657374343831" - "3600d02508746573743438313700d12508746573743438313800d22508746573743438313900d32508746573743438323000d4250874657374" - "3438323100d52508746573743438323200d62508746573743438323300d72508746573743438323400d82508746573743438323500d9250874" - "6573743438323600da2508746573743438323700db2508746573743438323800dc2508746573743438323900dd2508746573743438333000de" - "2508746573743438333100df2508746573743438333200e02508746573743438333300e12508746573743438333400e2250874657374343833" - "3500e32508746573743438333600e42508746573743438333700e52508746573743438333800e62508746573743438333900e7250874657374" - "3438343000e82508746573743438343100e92508746573743438343200ea2508746573743438343300eb2508746573743438343400ec250874" - "6573743438343500ed2508746573743438343600ee2508746573743438343700ef2508746573743438343800f02508746573743438343900f1" - "2508746573743438353000f22508746573743438353100f32508746573743438353200f42508746573743438353300f5250874657374343835" - "3400f62508746573743438353500f72508746573743438353600f82508746573743438353700f92508746573743438353800fa250874657374" - "3438353900fb2508746573743438363000fc2508746573743438363100fd2508746573743438363200fe2508746573743438363300ff250874" - "657374343836340080260874657374343836350081260874657374343836360082260874657374343836370083260874657374343836380084" - "260874657374343836390085260874657374343837300086260874657374343837310087260874657374343837320088260874657374343837" - "33008926087465737434383734008a26087465737434383735008b26087465737434383736008c26087465737434383737008d260874657374" - "34383738008e26087465737434383739008f260874657374343838300090260874657374343838310091260874657374343838320092260874" - "657374343838330093260874657374343838340094260874657374343838350095260874657374343838360096260874657374343838370097" - "26087465737434383838009826087465737434383839009926087465737434383930009a26087465737434383931009b260874657374343839" - "32009c26087465737434383933009d26087465737434383934009e26087465737434383935009f2608746573743438393600a0260874657374" - "3438393700a12608746573743438393800a22608746573743438393900a32608746573743439303000a42608746573743439303100a5260874" - "6573743439303200a62608746573743439303300a72608746573743439303400a82608746573743439303500a92608746573743439303600aa" - "2608746573743439303700ab2608746573743439303800ac2608746573743439303900ad2608746573743439313000ae260874657374343931" - "3100af2608746573743439313200b02608746573743439313300b12608746573743439313400b22608746573743439313500b3260874657374" - "3439313600b42608746573743439313700b52608746573743439313800b62608746573743439313900b72608746573743439323000b8260874" - "6573743439323100b92608746573743439323200ba2608746573743439323300bb2608746573743439323400bc2608746573743439323500bd" - "2608746573743439323600be2608746573743439323700bf2608746573743439323800c02608746573743439323900c1260874657374343933" - "3000c22608746573743439333100c32608746573743439333200c42608746573743439333300c52608746573743439333400c6260874657374" - "3439333500c72608746573743439333600c82608746573743439333700c92608746573743439333800ca2608746573743439333900cb260874" - "6573743439343000cc2608746573743439343100cd2608746573743439343200ce2608746573743439343300cf2608746573743439343400d0" - "2608746573743439343500d12608746573743439343600d22608746573743439343700d32608746573743439343800d4260874657374343934" - "3900d52608746573743439353000d62608746573743439353100d72608746573743439353200d82608746573743439353300d9260874657374" - "3439353400da2608746573743439353500db2608746573743439353600dc2608746573743439353700dd2608746573743439353800de260874" - "6573743439353900df2608746573743439363000e02608746573743439363100e12608746573743439363200e22608746573743439363300e3" - "2608746573743439363400e42608746573743439363500e52608746573743439363600e62608746573743439363700e7260874657374343936" - "3800e82608746573743439363900e92608746573743439373000ea2608746573743439373100eb2608746573743439373200ec260874657374" - "3439373300ed2608746573743439373400ee2608746573743439373500ef2608746573743439373600f02608746573743439373700f1260874" - "6573743439373800f22608746573743439373900f32608746573743439383000f42608746573743439383100f52608746573743439383200f6" - "2608746573743439383300f72608746573743439383400f82608746573743439383500f92608746573743439383600fa260874657374343938" - "3700fb2608746573743439383800fc2608746573743439383900fd2608746573743439393000fe2608746573743439393100ff260874657374" - "343939320080270874657374343939330081270874657374343939340082270874657374343939350083270874657374343939360084270874" - "657374343939370085270874657374343939380086270874657374343939390087270ac2b80288270700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "0061736d0100000001070160027f7f017f038a27882700000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "00000000000007e2d30388270874657374303030300000087465737430303031000108746573743030303200020874" + "65737430303033000308" + "7465737430303034000408746573743030303500050874657374303030360006087465737430303037000708746573" + "74303030380008087465" + "7374303030390009087465737430303130000a087465737430303131000b087465737430303132000c087465737430" + "303133000d0874657374" + "30303134000e087465737430303135000f087465737430303136001008746573743030313700110874657374303031" + "38001208746573743030" + "3139001308746573743030323000140874657374303032310015087465737430303232001608746573743030323300" + "17087465737430303234" + "00180874657374303032350019087465737430303236001a087465737430303237001b087465737430303238001c08" + "7465737430303239001d" + "087465737430303330001e087465737430303331001f08746573743030333200200874657374303033330021087465" + "73743030333400220874" + "6573743030333500230874657374303033360024087465737430303337002508746573743030333800260874657374" + "30303339002708746573" + "743030343000280874657374303034310029087465737430303432002a087465737430303433002b08746573743030" + "3434002c087465737430" + "303435002d087465737430303436002e087465737430303437002f0874657374303034380030087465737430303439" + "00310874657374303035" + "3000320874657374303035310033087465737430303532003408746573743030353300350874657374303035340036" + "08746573743030353500" + "3708746573743030353600380874657374303035370039087465737430303538003a087465737430303539003b0874" + "65737430303630003c08" + "7465737430303631003d087465737430303632003e087465737430303633003f087465737430303634004008746573" + "74303036350041087465" + "7374303036360042087465737430303637004308746573743030363800440874657374303036390045087465737430" + "30373000460874657374" + "30303731004708746573743030373200480874657374303037330049087465737430303734004a0874657374303037" + "35004b08746573743030" + "3736004c087465737430303737004d087465737430303738004e087465737430303739004f08746573743030383000" + "50087465737430303831" + "0051087465737430303832005208746573743030383300530874657374303038340054087465737430303835005508" + "74657374303038360056" + "087465737430303837005708746573743030383800580874657374303038390059087465737430303930005a087465" + "737430303931005b0874" + "65737430303932005c087465737430303933005d087465737430303934005e087465737430303935005f0874657374" + "30303936006008746573" + "7430303937006108746573743030393800620874657374303039390063087465737430313030006408746573743031" + "30310065087465737430" + "3130320066087465737430313033006708746573743031303400680874657374303130350069087465737430313036" + "006a0874657374303130" + "37006b087465737430313038006c087465737430313039006d087465737430313130006e087465737430313131006f" + "08746573743031313200" + "7008746573743031313300710874657374303131340072087465737430313135007308746573743031313600740874" + "65737430313137007508" + "7465737430313138007608746573743031313900770874657374303132300078087465737430313231007908746573" + "7430313232007a087465" + "737430313233007b087465737430313234007c087465737430313235007d087465737430313236007e087465737430" + "313237007f0874657374" + "3031323800800108746573743031323900810108746573743031333000820108746573743031333100830108746573" + "74303133320084010874" + "6573743031333300850108746573743031333400860108746573743031333500870108746573743031333600880108" + "74657374303133370089" + "01087465737430313338008a01087465737430313339008b01087465737430313430008c0108746573743031343100" + "8d010874657374303134" + "32008e01087465737430313433008f0108746573743031343400900108746573743031343500910108746573743031" + "34360092010874657374" + "3031343700930108746573743031343800940108746573743031343900950108746573743031353000960108746573" + "74303135310097010874" + "65737430313532009801087465737430313533009901087465737430313534009a01087465737430313535009b0108" + "7465737430313536009c" + "01087465737430313537009d01087465737430313538009e01087465737430313539009f0108746573743031363000" + "a0010874657374303136" + "3100a10108746573743031363200a20108746573743031363300a30108746573743031363400a40108746573743031" + "363500a5010874657374" + "3031363600a60108746573743031363700a70108746573743031363800a80108746573743031363900a90108746573" + "743031373000aa010874" + "6573743031373100ab0108746573743031373200ac0108746573743031373300ad0108746573743031373400ae0108" + "746573743031373500af" + "0108746573743031373600b00108746573743031373700b10108746573743031373800b20108746573743031373900" + "b3010874657374303138" + "3000b40108746573743031383100b50108746573743031383200b60108746573743031383300b70108746573743031" + "383400b8010874657374" + "3031383500b90108746573743031383600ba0108746573743031383700bb0108746573743031383800bc0108746573" + "743031383900bd010874" + "6573743031393000be0108746573743031393100bf0108746573743031393200c00108746573743031393300c10108" + "746573743031393400c2" + "0108746573743031393500c30108746573743031393600c40108746573743031393700c50108746573743031393800" + "c6010874657374303139" + "3900c70108746573743032303000c80108746573743032303100c90108746573743032303200ca0108746573743032" + "303300cb010874657374" + "3032303400cc0108746573743032303500cd0108746573743032303600ce0108746573743032303700cf0108746573" + "743032303800d0010874" + "6573743032303900d10108746573743032313000d20108746573743032313100d30108746573743032313200d40108" + "746573743032313300d5" + "0108746573743032313400d60108746573743032313500d70108746573743032313600d80108746573743032313700" + "d9010874657374303231" + "3800da0108746573743032313900db0108746573743032323000dc0108746573743032323100dd0108746573743032" + "323200de010874657374" + "3032323300df0108746573743032323400e00108746573743032323500e10108746573743032323600e20108746573" + "743032323700e3010874" + "6573743032323800e40108746573743032323900e50108746573743032333000e60108746573743032333100e70108" + "746573743032333200e8" + "0108746573743032333300e90108746573743032333400ea0108746573743032333500eb0108746573743032333600" + "ec010874657374303233" + "3700ed0108746573743032333800ee0108746573743032333900ef0108746573743032343000f00108746573743032" + "343100f1010874657374" + "3032343200f20108746573743032343300f30108746573743032343400f40108746573743032343500f50108746573" + "743032343600f6010874" + "6573743032343700f70108746573743032343800f80108746573743032343900f90108746573743032353000fa0108" + "746573743032353100fb" + "0108746573743032353200fc0108746573743032353300fd0108746573743032353400fe0108746573743032353500" + "ff010874657374303235" + "3600800208746573743032353700810208746573743032353800820208746573743032353900830208746573743032" + "36300084020874657374" + "3032363100850208746573743032363200860208746573743032363300870208746573743032363400880208746573" + "74303236350089020874" + "65737430323636008a02087465737430323637008b02087465737430323638008c02087465737430323639008d0208" + "7465737430323730008e" + "02087465737430323731008f0208746573743032373200900208746573743032373300910208746573743032373400" + "92020874657374303237" + "3500930208746573743032373600940208746573743032373700950208746573743032373800960208746573743032" + "37390097020874657374" + "30323830009802087465737430323831009902087465737430323832009a02087465737430323833009b0208746573" + "7430323834009c020874" + "65737430323835009d02087465737430323836009e02087465737430323837009f0208746573743032383800a00208" + "746573743032383900a1" + "0208746573743032393000a20208746573743032393100a30208746573743032393200a40208746573743032393300" + "a5020874657374303239" + "3400a60208746573743032393500a70208746573743032393600a80208746573743032393700a90208746573743032" + "393800aa020874657374" + "3032393900ab0208746573743033303000ac0208746573743033303100ad0208746573743033303200ae0208746573" + "743033303300af020874" + "6573743033303400b00208746573743033303500b10208746573743033303600b20208746573743033303700b30208" + "746573743033303800b4" + "0208746573743033303900b50208746573743033313000b60208746573743033313100b70208746573743033313200" + "b8020874657374303331" + "3300b90208746573743033313400ba0208746573743033313500bb0208746573743033313600bc0208746573743033" + "313700bd020874657374" + "3033313800be0208746573743033313900bf0208746573743033323000c00208746573743033323100c10208746573" + "743033323200c2020874" + "6573743033323300c30208746573743033323400c40208746573743033323500c50208746573743033323600c60208" + "746573743033323700c7" + "0208746573743033323800c80208746573743033323900c90208746573743033333000ca0208746573743033333100" + "cb020874657374303333" + "3200cc0208746573743033333300cd0208746573743033333400ce0208746573743033333500cf0208746573743033" + "333600d0020874657374" + "3033333700d10208746573743033333800d20208746573743033333900d30208746573743033343000d40208746573" + "743033343100d5020874" + "6573743033343200d60208746573743033343300d70208746573743033343400d80208746573743033343500d90208" + "746573743033343600da" + "0208746573743033343700db0208746573743033343800dc0208746573743033343900dd0208746573743033353000" + "de020874657374303335" + "3100df0208746573743033353200e00208746573743033353300e10208746573743033353400e20208746573743033" + "353500e3020874657374" + "3033353600e40208746573743033353700e50208746573743033353800e60208746573743033353900e70208746573" + "743033363000e8020874" + "6573743033363100e90208746573743033363200ea0208746573743033363300eb0208746573743033363400ec0208" + "746573743033363500ed" + "0208746573743033363600ee0208746573743033363700ef0208746573743033363800f00208746573743033363900" + "f1020874657374303337" + "3000f20208746573743033373100f30208746573743033373200f40208746573743033373300f50208746573743033" + "373400f6020874657374" + "3033373500f70208746573743033373600f80208746573743033373700f90208746573743033373800fa0208746573" + "743033373900fb020874" + "6573743033383000fc0208746573743033383100fd0208746573743033383200fe0208746573743033383300ff0208" + "74657374303338340080" + "0308746573743033383500810308746573743033383600820308746573743033383700830308746573743033383800" + "84030874657374303338" + "3900850308746573743033393000860308746573743033393100870308746573743033393200880308746573743033" + "39330089030874657374" + "30333934008a03087465737430333935008b03087465737430333936008c03087465737430333937008d0308746573" + "7430333938008e030874" + "65737430333939008f0308746573743034303000900308746573743034303100910308746573743034303200920308" + "74657374303430330093" + "0308746573743034303400940308746573743034303500950308746573743034303600960308746573743034303700" + "97030874657374303430" + "38009803087465737430343039009903087465737430343130009a03087465737430343131009b0308746573743034" + "3132009c030874657374" + "30343133009d03087465737430343134009e03087465737430343135009f0308746573743034313600a00308746573" + "743034313700a1030874" + "6573743034313800a20308746573743034313900a30308746573743034323000a40308746573743034323100a50308" + "746573743034323200a6" + "0308746573743034323300a70308746573743034323400a80308746573743034323500a90308746573743034323600" + "aa030874657374303432" + "3700ab0308746573743034323800ac0308746573743034323900ad0308746573743034333000ae0308746573743034" + "333100af030874657374" + "3034333200b00308746573743034333300b10308746573743034333400b20308746573743034333500b30308746573" + "743034333600b4030874" + "6573743034333700b50308746573743034333800b60308746573743034333900b70308746573743034343000b80308" + "746573743034343100b9" + "0308746573743034343200ba0308746573743034343300bb0308746573743034343400bc0308746573743034343500" + "bd030874657374303434" + "3600be0308746573743034343700bf0308746573743034343800c00308746573743034343900c10308746573743034" + "353000c2030874657374" + "3034353100c30308746573743034353200c40308746573743034353300c50308746573743034353400c60308746573" + "743034353500c7030874" + "6573743034353600c80308746573743034353700c90308746573743034353800ca0308746573743034353900cb0308" + "746573743034363000cc" + "0308746573743034363100cd0308746573743034363200ce0308746573743034363300cf0308746573743034363400" + "d0030874657374303436" + "3500d10308746573743034363600d20308746573743034363700d30308746573743034363800d40308746573743034" + "363900d5030874657374" + "3034373000d60308746573743034373100d70308746573743034373200d80308746573743034373300d90308746573" + "743034373400da030874" + "6573743034373500db0308746573743034373600dc0308746573743034373700dd0308746573743034373800de0308" + "746573743034373900df" + "0308746573743034383000e00308746573743034383100e10308746573743034383200e20308746573743034383300" + "e3030874657374303438" + "3400e40308746573743034383500e50308746573743034383600e60308746573743034383700e70308746573743034" + "383800e8030874657374" + "3034383900e90308746573743034393000ea0308746573743034393100eb0308746573743034393200ec0308746573" + "743034393300ed030874" + "6573743034393400ee0308746573743034393500ef0308746573743034393600f00308746573743034393700f10308" + "746573743034393800f2" + "0308746573743034393900f30308746573743035303000f40308746573743035303100f50308746573743035303200" + "f6030874657374303530" + "3300f70308746573743035303400f80308746573743035303500f90308746573743035303600fa0308746573743035" + "303700fb030874657374" + "3035303800fc0308746573743035303900fd0308746573743035313000fe0308746573743035313100ff0308746573" + "74303531320080040874" + "6573743035313300810408746573743035313400820408746573743035313500830408746573743035313600840408" + "74657374303531370085" + "0408746573743035313800860408746573743035313900870408746573743035323000880408746573743035323100" + "89040874657374303532" + "32008a04087465737430353233008b04087465737430353234008c04087465737430353235008d0408746573743035" + "3236008e040874657374" + "30353237008f0408746573743035323800900408746573743035323900910408746573743035333000920408746573" + "74303533310093040874" + "6573743035333200940408746573743035333300950408746573743035333400960408746573743035333500970408" + "74657374303533360098" + "04087465737430353337009904087465737430353338009a04087465737430353339009b0408746573743035343000" + "9c040874657374303534" + "31009d04087465737430353432009e04087465737430353433009f0408746573743035343400a00408746573743035" + "343500a1040874657374" + "3035343600a20408746573743035343700a30408746573743035343800a40408746573743035343900a50408746573" + "743035353000a6040874" + "6573743035353100a70408746573743035353200a80408746573743035353300a90408746573743035353400aa0408" + "746573743035353500ab" + "0408746573743035353600ac0408746573743035353700ad0408746573743035353800ae0408746573743035353900" + "af040874657374303536" + "3000b00408746573743035363100b10408746573743035363200b20408746573743035363300b30408746573743035" + "363400b4040874657374" + "3035363500b50408746573743035363600b60408746573743035363700b70408746573743035363800b80408746573" + "743035363900b9040874" + "6573743035373000ba0408746573743035373100bb0408746573743035373200bc0408746573743035373300bd0408" + "746573743035373400be" + "0408746573743035373500bf0408746573743035373600c00408746573743035373700c10408746573743035373800" + "c2040874657374303537" + "3900c30408746573743035383000c40408746573743035383100c50408746573743035383200c60408746573743035" + "383300c7040874657374" + "3035383400c80408746573743035383500c90408746573743035383600ca0408746573743035383700cb0408746573" + "743035383800cc040874" + "6573743035383900cd0408746573743035393000ce0408746573743035393100cf0408746573743035393200d00408" + "746573743035393300d1" + "0408746573743035393400d20408746573743035393500d30408746573743035393600d40408746573743035393700" + "d5040874657374303539" + "3800d60408746573743035393900d70408746573743036303000d80408746573743036303100d90408746573743036" + "303200da040874657374" + "3036303300db0408746573743036303400dc0408746573743036303500dd0408746573743036303600de0408746573" + "743036303700df040874" + "6573743036303800e00408746573743036303900e10408746573743036313000e20408746573743036313100e30408" + "746573743036313200e4" + "0408746573743036313300e50408746573743036313400e60408746573743036313500e70408746573743036313600" + "e8040874657374303631" + "3700e90408746573743036313800ea0408746573743036313900eb0408746573743036323000ec0408746573743036" + "323100ed040874657374" + "3036323200ee0408746573743036323300ef0408746573743036323400f00408746573743036323500f10408746573" + "743036323600f2040874" + "6573743036323700f30408746573743036323800f40408746573743036323900f50408746573743036333000f60408" + "746573743036333100f7" + "0408746573743036333200f80408746573743036333300f90408746573743036333400fa0408746573743036333500" + "fb040874657374303633" + "3600fc0408746573743036333700fd0408746573743036333800fe0408746573743036333900ff0408746573743036" + "34300080050874657374" + "3036343100810508746573743036343200820508746573743036343300830508746573743036343400840508746573" + "74303634350085050874" + "6573743036343600860508746573743036343700870508746573743036343800880508746573743036343900890508" + "7465737430363530008a" + "05087465737430363531008b05087465737430363532008c05087465737430363533008d0508746573743036353400" + "8e050874657374303635" + "35008f0508746573743036353600900508746573743036353700910508746573743036353800920508746573743036" + "35390093050874657374" + "3036363000940508746573743036363100950508746573743036363200960508746573743036363300970508746573" + "74303636340098050874" + "65737430363635009905087465737430363636009a05087465737430363637009b05087465737430363638009c0508" + "7465737430363639009d" + "05087465737430363730009e05087465737430363731009f0508746573743036373200a00508746573743036373300" + "a1050874657374303637" + "3400a20508746573743036373500a30508746573743036373600a40508746573743036373700a50508746573743036" + "373800a6050874657374" + "3036373900a70508746573743036383000a80508746573743036383100a90508746573743036383200aa0508746573" + "743036383300ab050874" + "6573743036383400ac0508746573743036383500ad0508746573743036383600ae0508746573743036383700af0508" + "746573743036383800b0" + "0508746573743036383900b10508746573743036393000b20508746573743036393100b30508746573743036393200" + "b4050874657374303639" + "3300b50508746573743036393400b60508746573743036393500b70508746573743036393600b80508746573743036" + "393700b9050874657374" + "3036393800ba0508746573743036393900bb0508746573743037303000bc0508746573743037303100bd0508746573" + "743037303200be050874" + "6573743037303300bf0508746573743037303400c00508746573743037303500c10508746573743037303600c20508" + "746573743037303700c3" + "0508746573743037303800c40508746573743037303900c50508746573743037313000c60508746573743037313100" + "c7050874657374303731" + "3200c80508746573743037313300c90508746573743037313400ca0508746573743037313500cb0508746573743037" + "313600cc050874657374" + "3037313700cd0508746573743037313800ce0508746573743037313900cf0508746573743037323000d00508746573" + "743037323100d1050874" + "6573743037323200d20508746573743037323300d30508746573743037323400d40508746573743037323500d50508" + "746573743037323600d6" + "0508746573743037323700d70508746573743037323800d80508746573743037323900d90508746573743037333000" + "da050874657374303733" + "3100db0508746573743037333200dc0508746573743037333300dd0508746573743037333400de0508746573743037" + "333500df050874657374" + "3037333600e00508746573743037333700e10508746573743037333800e20508746573743037333900e30508746573" + "743037343000e4050874" + "6573743037343100e50508746573743037343200e60508746573743037343300e70508746573743037343400e80508" + "746573743037343500e9" + "0508746573743037343600ea0508746573743037343700eb0508746573743037343800ec0508746573743037343900" + "ed050874657374303735" + "3000ee0508746573743037353100ef0508746573743037353200f00508746573743037353300f10508746573743037" + "353400f2050874657374" + "3037353500f30508746573743037353600f40508746573743037353700f50508746573743037353800f60508746573" + "743037353900f7050874" + "6573743037363000f80508746573743037363100f90508746573743037363200fa0508746573743037363300fb0508" + "746573743037363400fc" + "0508746573743037363500fd0508746573743037363600fe0508746573743037363700ff0508746573743037363800" + "80060874657374303736" + "3900810608746573743037373000820608746573743037373100830608746573743037373200840608746573743037" + "37330085060874657374" + "3037373400860608746573743037373500870608746573743037373600880608746573743037373700890608746573" + "7430373738008a060874" + "65737430373739008b06087465737430373830008c06087465737430373831008d06087465737430373832008e0608" + "7465737430373833008f" + "0608746573743037383400900608746573743037383500910608746573743037383600920608746573743037383700" + "93060874657374303738" + "3800940608746573743037383900950608746573743037393000960608746573743037393100970608746573743037" + "39320098060874657374" + "30373933009906087465737430373934009a06087465737430373935009b06087465737430373936009c0608746573" + "7430373937009d060874" + "65737430373938009e06087465737430373939009f0608746573743038303000a00608746573743038303100a10608" + "746573743038303200a2" + "0608746573743038303300a30608746573743038303400a40608746573743038303500a50608746573743038303600" + "a6060874657374303830" + "3700a70608746573743038303800a80608746573743038303900a90608746573743038313000aa0608746573743038" + "313100ab060874657374" + "3038313200ac0608746573743038313300ad0608746573743038313400ae0608746573743038313500af0608746573" + "743038313600b0060874" + "6573743038313700b10608746573743038313800b20608746573743038313900b30608746573743038323000b40608" + "746573743038323100b5" + "0608746573743038323200b60608746573743038323300b70608746573743038323400b80608746573743038323500" + "b9060874657374303832" + "3600ba0608746573743038323700bb0608746573743038323800bc0608746573743038323900bd0608746573743038" + "333000be060874657374" + "3038333100bf0608746573743038333200c00608746573743038333300c10608746573743038333400c20608746573" + "743038333500c3060874" + "6573743038333600c40608746573743038333700c50608746573743038333800c60608746573743038333900c70608" + "746573743038343000c8" + "0608746573743038343100c90608746573743038343200ca0608746573743038343300cb0608746573743038343400" + "cc060874657374303834" + "3500cd0608746573743038343600ce0608746573743038343700cf0608746573743038343800d00608746573743038" + "343900d1060874657374" + "3038353000d20608746573743038353100d30608746573743038353200d40608746573743038353300d50608746573" + "743038353400d6060874" + "6573743038353500d70608746573743038353600d80608746573743038353700d90608746573743038353800da0608" + "746573743038353900db" + "0608746573743038363000dc0608746573743038363100dd0608746573743038363200de0608746573743038363300" + "df060874657374303836" + "3400e00608746573743038363500e10608746573743038363600e20608746573743038363700e30608746573743038" + "363800e4060874657374" + "3038363900e50608746573743038373000e60608746573743038373100e70608746573743038373200e80608746573" + "743038373300e9060874" + "6573743038373400ea0608746573743038373500eb0608746573743038373600ec0608746573743038373700ed0608" + "746573743038373800ee" + "0608746573743038373900ef0608746573743038383000f00608746573743038383100f10608746573743038383200" + "f2060874657374303838" + "3300f30608746573743038383400f40608746573743038383500f50608746573743038383600f60608746573743038" + "383700f7060874657374" + "3038383800f80608746573743038383900f90608746573743038393000fa0608746573743038393100fb0608746573" + "743038393200fc060874" + "6573743038393300fd0608746573743038393400fe0608746573743038393500ff0608746573743038393600800708" + "74657374303839370081" + "0708746573743038393800820708746573743038393900830708746573743039303000840708746573743039303100" + "85070874657374303930" + "3200860708746573743039303300870708746573743039303400880708746573743039303500890708746573743039" + "3036008a070874657374" + "30393037008b07087465737430393038008c07087465737430393039008d07087465737430393130008e0708746573" + "7430393131008f070874" + "6573743039313200900708746573743039313300910708746573743039313400920708746573743039313500930708" + "74657374303931360094" + "0708746573743039313700950708746573743039313800960708746573743039313900970708746573743039323000" + "98070874657374303932" + "31009907087465737430393232009a07087465737430393233009b07087465737430393234009c0708746573743039" + "3235009d070874657374" + "30393236009e07087465737430393237009f0708746573743039323800a00708746573743039323900a10708746573" + "743039333000a2070874" + "6573743039333100a30708746573743039333200a40708746573743039333300a50708746573743039333400a60708" + "746573743039333500a7" + "0708746573743039333600a80708746573743039333700a90708746573743039333800aa0708746573743039333900" + "ab070874657374303934" + "3000ac0708746573743039343100ad0708746573743039343200ae0708746573743039343300af0708746573743039" + "343400b0070874657374" + "3039343500b10708746573743039343600b20708746573743039343700b30708746573743039343800b40708746573" + "743039343900b5070874" + "6573743039353000b60708746573743039353100b70708746573743039353200b80708746573743039353300b90708" + "746573743039353400ba" + "0708746573743039353500bb0708746573743039353600bc0708746573743039353700bd0708746573743039353800" + "be070874657374303935" + "3900bf0708746573743039363000c00708746573743039363100c10708746573743039363200c20708746573743039" + "363300c3070874657374" + "3039363400c40708746573743039363500c50708746573743039363600c60708746573743039363700c70708746573" + "743039363800c8070874" + "6573743039363900c90708746573743039373000ca0708746573743039373100cb0708746573743039373200cc0708" + "746573743039373300cd" + "0708746573743039373400ce0708746573743039373500cf0708746573743039373600d00708746573743039373700" + "d1070874657374303937" + "3800d20708746573743039373900d30708746573743039383000d40708746573743039383100d50708746573743039" + "383200d6070874657374" + "3039383300d70708746573743039383400d80708746573743039383500d90708746573743039383600da0708746573" + "743039383700db070874" + "6573743039383800dc0708746573743039383900dd0708746573743039393000de0708746573743039393100df0708" + "746573743039393200e0" + "0708746573743039393300e10708746573743039393400e20708746573743039393500e30708746573743039393600" + "e4070874657374303939" + "3700e50708746573743039393800e60708746573743039393900e70708746573743130303000e80708746573743130" + "303100e9070874657374" + "3130303200ea0708746573743130303300eb0708746573743130303400ec0708746573743130303500ed0708746573" + "743130303600ee070874" + "6573743130303700ef0708746573743130303800f00708746573743130303900f10708746573743130313000f20708" + "746573743130313100f3" + "0708746573743130313200f40708746573743130313300f50708746573743130313400f60708746573743130313500" + "f7070874657374313031" + "3600f80708746573743130313700f90708746573743130313800fa0708746573743130313900fb0708746573743130" + "323000fc070874657374" + "3130323100fd0708746573743130323200fe0708746573743130323300ff0708746573743130323400800808746573" + "74313032350081080874" + "6573743130323600820808746573743130323700830808746573743130323800840808746573743130323900850808" + "74657374313033300086" + "0808746573743130333100870808746573743130333200880808746573743130333300890808746573743130333400" + "8a080874657374313033" + "35008b08087465737431303336008c08087465737431303337008d08087465737431303338008e0808746573743130" + "3339008f080874657374" + "3130343000900808746573743130343100910808746573743130343200920808746573743130343300930808746573" + "74313034340094080874" + "6573743130343500950808746573743130343600960808746573743130343700970808746573743130343800980808" + "74657374313034390099" + "08087465737431303530009a08087465737431303531009b08087465737431303532009c0808746573743130353300" + "9d080874657374313035" + "34009e08087465737431303535009f0808746573743130353600a00808746573743130353700a10808746573743130" + "353800a2080874657374" + "3130353900a30808746573743130363000a40808746573743130363100a50808746573743130363200a60808746573" + "743130363300a7080874" + "6573743130363400a80808746573743130363500a90808746573743130363600aa0808746573743130363700ab0808" + "746573743130363800ac" + "0808746573743130363900ad0808746573743130373000ae0808746573743130373100af0808746573743130373200" + "b0080874657374313037" + "3300b10808746573743130373400b20808746573743130373500b30808746573743130373600b40808746573743130" + "373700b5080874657374" + "3130373800b60808746573743130373900b70808746573743130383000b80808746573743130383100b90808746573" + "743130383200ba080874" + "6573743130383300bb0808746573743130383400bc0808746573743130383500bd0808746573743130383600be0808" + "746573743130383700bf" + "0808746573743130383800c00808746573743130383900c10808746573743130393000c20808746573743130393100" + "c3080874657374313039" + "3200c40808746573743130393300c50808746573743130393400c60808746573743130393500c70808746573743130" + "393600c8080874657374" + "3130393700c90808746573743130393800ca0808746573743130393900cb0808746573743131303000cc0808746573" + "743131303100cd080874" + "6573743131303200ce0808746573743131303300cf0808746573743131303400d00808746573743131303500d10808" + "746573743131303600d2" + "0808746573743131303700d30808746573743131303800d40808746573743131303900d50808746573743131313000" + "d6080874657374313131" + "3100d70808746573743131313200d80808746573743131313300d90808746573743131313400da0808746573743131" + "313500db080874657374" + "3131313600dc0808746573743131313700dd0808746573743131313800de0808746573743131313900df0808746573" + "743131323000e0080874" + "6573743131323100e10808746573743131323200e20808746573743131323300e30808746573743131323400e40808" + "746573743131323500e5" + "0808746573743131323600e60808746573743131323700e70808746573743131323800e80808746573743131323900" + "e9080874657374313133" + "3000ea0808746573743131333100eb0808746573743131333200ec0808746573743131333300ed0808746573743131" + "333400ee080874657374" + "3131333500ef0808746573743131333600f00808746573743131333700f10808746573743131333800f20808746573" + "743131333900f3080874" + "6573743131343000f40808746573743131343100f50808746573743131343200f60808746573743131343300f70808" + "746573743131343400f8" + "0808746573743131343500f90808746573743131343600fa0808746573743131343700fb0808746573743131343800" + "fc080874657374313134" + "3900fd0808746573743131353000fe0808746573743131353100ff0808746573743131353200800908746573743131" + "35330081090874657374" + "3131353400820908746573743131353500830908746573743131353600840908746573743131353700850908746573" + "74313135380086090874" + "65737431313539008709087465737431313630008809087465737431313631008909087465737431313632008a0908" + "7465737431313633008b" + "09087465737431313634008c09087465737431313635008d09087465737431313636008e0908746573743131363700" + "8f090874657374313136" + "3800900908746573743131363900910908746573743131373000920908746573743131373100930908746573743131" + "37320094090874657374" + "3131373300950908746573743131373400960908746573743131373500970908746573743131373600980908746573" + "74313137370099090874" + "65737431313738009a09087465737431313739009b09087465737431313830009c09087465737431313831009d0908" + "7465737431313832009e" + "09087465737431313833009f0908746573743131383400a00908746573743131383500a10908746573743131383600" + "a2090874657374313138" + "3700a30908746573743131383800a40908746573743131383900a50908746573743131393000a60908746573743131" + "393100a7090874657374" + "3131393200a80908746573743131393300a90908746573743131393400aa0908746573743131393500ab0908746573" + "743131393600ac090874" + "6573743131393700ad0908746573743131393800ae0908746573743131393900af0908746573743132303000b00908" + "746573743132303100b1" + "0908746573743132303200b20908746573743132303300b30908746573743132303400b40908746573743132303500" + "b5090874657374313230" + "3600b60908746573743132303700b70908746573743132303800b80908746573743132303900b90908746573743132" + "313000ba090874657374" + "3132313100bb0908746573743132313200bc0908746573743132313300bd0908746573743132313400be0908746573" + "743132313500bf090874" + "6573743132313600c00908746573743132313700c10908746573743132313800c20908746573743132313900c30908" + "746573743132323000c4" + "0908746573743132323100c50908746573743132323200c60908746573743132323300c70908746573743132323400" + "c8090874657374313232" + "3500c90908746573743132323600ca0908746573743132323700cb0908746573743132323800cc0908746573743132" + "323900cd090874657374" + "3132333000ce0908746573743132333100cf0908746573743132333200d00908746573743132333300d10908746573" + "743132333400d2090874" + "6573743132333500d30908746573743132333600d40908746573743132333700d50908746573743132333800d60908" + "746573743132333900d7" + "0908746573743132343000d80908746573743132343100d90908746573743132343200da0908746573743132343300" + "db090874657374313234" + "3400dc0908746573743132343500dd0908746573743132343600de0908746573743132343700df0908746573743132" + "343800e0090874657374" + "3132343900e10908746573743132353000e20908746573743132353100e30908746573743132353200e40908746573" + "743132353300e5090874" + "6573743132353400e60908746573743132353500e70908746573743132353600e80908746573743132353700e90908" + "746573743132353800ea" + "0908746573743132353900eb0908746573743132363000ec0908746573743132363100ed0908746573743132363200" + "ee090874657374313236" + "3300ef0908746573743132363400f00908746573743132363500f10908746573743132363600f20908746573743132" + "363700f3090874657374" + "3132363800f40908746573743132363900f50908746573743132373000f60908746573743132373100f70908746573" + "743132373200f8090874" + "6573743132373300f90908746573743132373400fa0908746573743132373500fb0908746573743132373600fc0908" + "746573743132373700fd" + "0908746573743132373800fe0908746573743132373900ff0908746573743132383000800a08746573743132383100" + "810a0874657374313238" + "3200820a08746573743132383300830a08746573743132383400840a08746573743132383500850a08746573743132" + "383600860a0874657374" + "3132383700870a08746573743132383800880a08746573743132383900890a087465737431323930008a0a08746573" + "7431323931008b0a0874" + "65737431323932008c0a087465737431323933008d0a087465737431323934008e0a087465737431323935008f0a08" + "74657374313239360090" + "0a08746573743132393700910a08746573743132393800920a08746573743132393900930a08746573743133303000" + "940a0874657374313330" + "3100950a08746573743133303200960a08746573743133303300970a08746573743133303400980a08746573743133" + "303500990a0874657374" + "31333036009a0a087465737431333037009b0a087465737431333038009c0a087465737431333039009d0a08746573" + "7431333130009e0a0874" + "65737431333131009f0a08746573743133313200a00a08746573743133313300a10a08746573743133313400a20a08" + "746573743133313500a3" + "0a08746573743133313600a40a08746573743133313700a50a08746573743133313800a60a08746573743133313900" + "a70a0874657374313332" + "3000a80a08746573743133323100a90a08746573743133323200aa0a08746573743133323300ab0a08746573743133" + "323400ac0a0874657374" + "3133323500ad0a08746573743133323600ae0a08746573743133323700af0a08746573743133323800b00a08746573" + "743133323900b10a0874" + "6573743133333000b20a08746573743133333100b30a08746573743133333200b40a08746573743133333300b50a08" + "746573743133333400b6" + "0a08746573743133333500b70a08746573743133333600b80a08746573743133333700b90a08746573743133333800" + "ba0a0874657374313333" + "3900bb0a08746573743133343000bc0a08746573743133343100bd0a08746573743133343200be0a08746573743133" + "343300bf0a0874657374" + "3133343400c00a08746573743133343500c10a08746573743133343600c20a08746573743133343700c30a08746573" + "743133343800c40a0874" + "6573743133343900c50a08746573743133353000c60a08746573743133353100c70a08746573743133353200c80a08" + "746573743133353300c9" + "0a08746573743133353400ca0a08746573743133353500cb0a08746573743133353600cc0a08746573743133353700" + "cd0a0874657374313335" + "3800ce0a08746573743133353900cf0a08746573743133363000d00a08746573743133363100d10a08746573743133" + "363200d20a0874657374" + "3133363300d30a08746573743133363400d40a08746573743133363500d50a08746573743133363600d60a08746573" + "743133363700d70a0874" + "6573743133363800d80a08746573743133363900d90a08746573743133373000da0a08746573743133373100db0a08" + "746573743133373200dc" + "0a08746573743133373300dd0a08746573743133373400de0a08746573743133373500df0a08746573743133373600" + "e00a0874657374313337" + "3700e10a08746573743133373800e20a08746573743133373900e30a08746573743133383000e40a08746573743133" + "383100e50a0874657374" + "3133383200e60a08746573743133383300e70a08746573743133383400e80a08746573743133383500e90a08746573" + "743133383600ea0a0874" + "6573743133383700eb0a08746573743133383800ec0a08746573743133383900ed0a08746573743133393000ee0a08" + "746573743133393100ef" + "0a08746573743133393200f00a08746573743133393300f10a08746573743133393400f20a08746573743133393500" + "f30a0874657374313339" + "3600f40a08746573743133393700f50a08746573743133393800f60a08746573743133393900f70a08746573743134" + "303000f80a0874657374" + "3134303100f90a08746573743134303200fa0a08746573743134303300fb0a08746573743134303400fc0a08746573" + "743134303500fd0a0874" + "6573743134303600fe0a08746573743134303700ff0a08746573743134303800800b08746573743134303900810b08" + "74657374313431300082" + "0b08746573743134313100830b08746573743134313200840b08746573743134313300850b08746573743134313400" + "860b0874657374313431" + "3500870b08746573743134313600880b08746573743134313700890b087465737431343138008a0b08746573743134" + "3139008b0b0874657374" + "31343230008c0b087465737431343231008d0b087465737431343232008e0b087465737431343233008f0b08746573" + "743134323400900b0874" + "6573743134323500910b08746573743134323600920b08746573743134323700930b08746573743134323800940b08" + "74657374313432390095" + "0b08746573743134333000960b08746573743134333100970b08746573743134333200980b08746573743134333300" + "990b0874657374313433" + "34009a0b087465737431343335009b0b087465737431343336009c0b087465737431343337009d0b08746573743134" + "3338009e0b0874657374" + "31343339009f0b08746573743134343000a00b08746573743134343100a10b08746573743134343200a20b08746573" + "743134343300a30b0874" + "6573743134343400a40b08746573743134343500a50b08746573743134343600a60b08746573743134343700a70b08" + "746573743134343800a8" + "0b08746573743134343900a90b08746573743134353000aa0b08746573743134353100ab0b08746573743134353200" + "ac0b0874657374313435" + "3300ad0b08746573743134353400ae0b08746573743134353500af0b08746573743134353600b00b08746573743134" + "353700b10b0874657374" + "3134353800b20b08746573743134353900b30b08746573743134363000b40b08746573743134363100b50b08746573" + "743134363200b60b0874" + "6573743134363300b70b08746573743134363400b80b08746573743134363500b90b08746573743134363600ba0b08" + "746573743134363700bb" + "0b08746573743134363800bc0b08746573743134363900bd0b08746573743134373000be0b08746573743134373100" + "bf0b0874657374313437" + "3200c00b08746573743134373300c10b08746573743134373400c20b08746573743134373500c30b08746573743134" + "373600c40b0874657374" + "3134373700c50b08746573743134373800c60b08746573743134373900c70b08746573743134383000c80b08746573" + "743134383100c90b0874" + "6573743134383200ca0b08746573743134383300cb0b08746573743134383400cc0b08746573743134383500cd0b08" + "746573743134383600ce" + "0b08746573743134383700cf0b08746573743134383800d00b08746573743134383900d10b08746573743134393000" + "d20b0874657374313439" + "3100d30b08746573743134393200d40b08746573743134393300d50b08746573743134393400d60b08746573743134" + "393500d70b0874657374" + "3134393600d80b08746573743134393700d90b08746573743134393800da0b08746573743134393900db0b08746573" + "743135303000dc0b0874" + "6573743135303100dd0b08746573743135303200de0b08746573743135303300df0b08746573743135303400e00b08" + "746573743135303500e1" + "0b08746573743135303600e20b08746573743135303700e30b08746573743135303800e40b08746573743135303900" + "e50b0874657374313531" + "3000e60b08746573743135313100e70b08746573743135313200e80b08746573743135313300e90b08746573743135" + "313400ea0b0874657374" + "3135313500eb0b08746573743135313600ec0b08746573743135313700ed0b08746573743135313800ee0b08746573" + "743135313900ef0b0874" + "6573743135323000f00b08746573743135323100f10b08746573743135323200f20b08746573743135323300f30b08" + "746573743135323400f4" + "0b08746573743135323500f50b08746573743135323600f60b08746573743135323700f70b08746573743135323800" + "f80b0874657374313532" + "3900f90b08746573743135333000fa0b08746573743135333100fb0b08746573743135333200fc0b08746573743135" + "333300fd0b0874657374" + "3135333400fe0b08746573743135333500ff0b08746573743135333600800c08746573743135333700810c08746573" + "743135333800820c0874" + "6573743135333900830c08746573743135343000840c08746573743135343100850c08746573743135343200860c08" + "74657374313534330087" + "0c08746573743135343400880c08746573743135343500890c087465737431353436008a0c08746573743135343700" + "8b0c0874657374313534" + "38008c0c087465737431353439008d0c087465737431353530008e0c087465737431353531008f0c08746573743135" + "353200900c0874657374" + "3135353300910c08746573743135353400920c08746573743135353500930c08746573743135353600940c08746573" + "743135353700950c0874" + "6573743135353800960c08746573743135353900970c08746573743135363000980c08746573743135363100990c08" + "7465737431353632009a" + "0c087465737431353633009b0c087465737431353634009c0c087465737431353635009d0c08746573743135363600" + "9e0c0874657374313536" + "37009f0c08746573743135363800a00c08746573743135363900a10c08746573743135373000a20c08746573743135" + "373100a30c0874657374" + "3135373200a40c08746573743135373300a50c08746573743135373400a60c08746573743135373500a70c08746573" + "743135373600a80c0874" + "6573743135373700a90c08746573743135373800aa0c08746573743135373900ab0c08746573743135383000ac0c08" + "746573743135383100ad" + "0c08746573743135383200ae0c08746573743135383300af0c08746573743135383400b00c08746573743135383500" + "b10c0874657374313538" + "3600b20c08746573743135383700b30c08746573743135383800b40c08746573743135383900b50c08746573743135" + "393000b60c0874657374" + "3135393100b70c08746573743135393200b80c08746573743135393300b90c08746573743135393400ba0c08746573" + "743135393500bb0c0874" + "6573743135393600bc0c08746573743135393700bd0c08746573743135393800be0c08746573743135393900bf0c08" + "746573743136303000c0" + "0c08746573743136303100c10c08746573743136303200c20c08746573743136303300c30c08746573743136303400" + "c40c0874657374313630" + "3500c50c08746573743136303600c60c08746573743136303700c70c08746573743136303800c80c08746573743136" + "303900c90c0874657374" + "3136313000ca0c08746573743136313100cb0c08746573743136313200cc0c08746573743136313300cd0c08746573" + "743136313400ce0c0874" + "6573743136313500cf0c08746573743136313600d00c08746573743136313700d10c08746573743136313800d20c08" + "746573743136313900d3" + "0c08746573743136323000d40c08746573743136323100d50c08746573743136323200d60c08746573743136323300" + "d70c0874657374313632" + "3400d80c08746573743136323500d90c08746573743136323600da0c08746573743136323700db0c08746573743136" + "323800dc0c0874657374" + "3136323900dd0c08746573743136333000de0c08746573743136333100df0c08746573743136333200e00c08746573" + "743136333300e10c0874" + "6573743136333400e20c08746573743136333500e30c08746573743136333600e40c08746573743136333700e50c08" + "746573743136333800e6" + "0c08746573743136333900e70c08746573743136343000e80c08746573743136343100e90c08746573743136343200" + "ea0c0874657374313634" + "3300eb0c08746573743136343400ec0c08746573743136343500ed0c08746573743136343600ee0c08746573743136" + "343700ef0c0874657374" + "3136343800f00c08746573743136343900f10c08746573743136353000f20c08746573743136353100f30c08746573" + "743136353200f40c0874" + "6573743136353300f50c08746573743136353400f60c08746573743136353500f70c08746573743136353600f80c08" + "746573743136353700f9" + "0c08746573743136353800fa0c08746573743136353900fb0c08746573743136363000fc0c08746573743136363100" + "fd0c0874657374313636" + "3200fe0c08746573743136363300ff0c08746573743136363400800d08746573743136363500810d08746573743136" + "363600820d0874657374" + "3136363700830d08746573743136363800840d08746573743136363900850d08746573743136373000860d08746573" + "743136373100870d0874" + "6573743136373200880d08746573743136373300890d087465737431363734008a0d087465737431363735008b0d08" + "7465737431363736008c" + "0d087465737431363737008d0d087465737431363738008e0d087465737431363739008f0d08746573743136383000" + "900d0874657374313638" + "3100910d08746573743136383200920d08746573743136383300930d08746573743136383400940d08746573743136" + "383500950d0874657374" + "3136383600960d08746573743136383700970d08746573743136383800980d08746573743136383900990d08746573" + "7431363930009a0d0874" + "65737431363931009b0d087465737431363932009c0d087465737431363933009d0d087465737431363934009e0d08" + "7465737431363935009f" + "0d08746573743136393600a00d08746573743136393700a10d08746573743136393800a20d08746573743136393900" + "a30d0874657374313730" + "3000a40d08746573743137303100a50d08746573743137303200a60d08746573743137303300a70d08746573743137" + "303400a80d0874657374" + "3137303500a90d08746573743137303600aa0d08746573743137303700ab0d08746573743137303800ac0d08746573" + "743137303900ad0d0874" + "6573743137313000ae0d08746573743137313100af0d08746573743137313200b00d08746573743137313300b10d08" + "746573743137313400b2" + "0d08746573743137313500b30d08746573743137313600b40d08746573743137313700b50d08746573743137313800" + "b60d0874657374313731" + "3900b70d08746573743137323000b80d08746573743137323100b90d08746573743137323200ba0d08746573743137" + "323300bb0d0874657374" + "3137323400bc0d08746573743137323500bd0d08746573743137323600be0d08746573743137323700bf0d08746573" + "743137323800c00d0874" + "6573743137323900c10d08746573743137333000c20d08746573743137333100c30d08746573743137333200c40d08" + "746573743137333300c5" + "0d08746573743137333400c60d08746573743137333500c70d08746573743137333600c80d08746573743137333700" + "c90d0874657374313733" + "3800ca0d08746573743137333900cb0d08746573743137343000cc0d08746573743137343100cd0d08746573743137" + "343200ce0d0874657374" + "3137343300cf0d08746573743137343400d00d08746573743137343500d10d08746573743137343600d20d08746573" + "743137343700d30d0874" + "6573743137343800d40d08746573743137343900d50d08746573743137353000d60d08746573743137353100d70d08" + "746573743137353200d8" + "0d08746573743137353300d90d08746573743137353400da0d08746573743137353500db0d08746573743137353600" + "dc0d0874657374313735" + "3700dd0d08746573743137353800de0d08746573743137353900df0d08746573743137363000e00d08746573743137" + "363100e10d0874657374" + "3137363200e20d08746573743137363300e30d08746573743137363400e40d08746573743137363500e50d08746573" + "743137363600e60d0874" + "6573743137363700e70d08746573743137363800e80d08746573743137363900e90d08746573743137373000ea0d08" + "746573743137373100eb" + "0d08746573743137373200ec0d08746573743137373300ed0d08746573743137373400ee0d08746573743137373500" + "ef0d0874657374313737" + "3600f00d08746573743137373700f10d08746573743137373800f20d08746573743137373900f30d08746573743137" + "383000f40d0874657374" + "3137383100f50d08746573743137383200f60d08746573743137383300f70d08746573743137383400f80d08746573" + "743137383500f90d0874" + "6573743137383600fa0d08746573743137383700fb0d08746573743137383800fc0d08746573743137383900fd0d08" + "746573743137393000fe" + "0d08746573743137393100ff0d08746573743137393200800e08746573743137393300810e08746573743137393400" + "820e0874657374313739" + "3500830e08746573743137393600840e08746573743137393700850e08746573743137393800860e08746573743137" + "393900870e0874657374" + "3138303000880e08746573743138303100890e087465737431383032008a0e087465737431383033008b0e08746573" + "7431383034008c0e0874" + "65737431383035008d0e087465737431383036008e0e087465737431383037008f0e08746573743138303800900e08" + "74657374313830390091" + "0e08746573743138313000920e08746573743138313100930e08746573743138313200940e08746573743138313300" + "950e0874657374313831" + "3400960e08746573743138313500970e08746573743138313600980e08746573743138313700990e08746573743138" + "3138009a0e0874657374" + "31383139009b0e087465737431383230009c0e087465737431383231009d0e087465737431383232009e0e08746573" + "7431383233009f0e0874" + "6573743138323400a00e08746573743138323500a10e08746573743138323600a20e08746573743138323700a30e08" + "746573743138323800a4" + "0e08746573743138323900a50e08746573743138333000a60e08746573743138333100a70e08746573743138333200" + "a80e0874657374313833" + "3300a90e08746573743138333400aa0e08746573743138333500ab0e08746573743138333600ac0e08746573743138" + "333700ad0e0874657374" + "3138333800ae0e08746573743138333900af0e08746573743138343000b00e08746573743138343100b10e08746573" + "743138343200b20e0874" + "6573743138343300b30e08746573743138343400b40e08746573743138343500b50e08746573743138343600b60e08" + "746573743138343700b7" + "0e08746573743138343800b80e08746573743138343900b90e08746573743138353000ba0e08746573743138353100" + "bb0e0874657374313835" + "3200bc0e08746573743138353300bd0e08746573743138353400be0e08746573743138353500bf0e08746573743138" + "353600c00e0874657374" + "3138353700c10e08746573743138353800c20e08746573743138353900c30e08746573743138363000c40e08746573" + "743138363100c50e0874" + "6573743138363200c60e08746573743138363300c70e08746573743138363400c80e08746573743138363500c90e08" + "746573743138363600ca" + "0e08746573743138363700cb0e08746573743138363800cc0e08746573743138363900cd0e08746573743138373000" + "ce0e0874657374313837" + "3100cf0e08746573743138373200d00e08746573743138373300d10e08746573743138373400d20e08746573743138" + "373500d30e0874657374" + "3138373600d40e08746573743138373700d50e08746573743138373800d60e08746573743138373900d70e08746573" + "743138383000d80e0874" + "6573743138383100d90e08746573743138383200da0e08746573743138383300db0e08746573743138383400dc0e08" + "746573743138383500dd" + "0e08746573743138383600de0e08746573743138383700df0e08746573743138383800e00e08746573743138383900" + "e10e0874657374313839" + "3000e20e08746573743138393100e30e08746573743138393200e40e08746573743138393300e50e08746573743138" + "393400e60e0874657374" + "3138393500e70e08746573743138393600e80e08746573743138393700e90e08746573743138393800ea0e08746573" + "743138393900eb0e0874" + "6573743139303000ec0e08746573743139303100ed0e08746573743139303200ee0e08746573743139303300ef0e08" + "746573743139303400f0" + "0e08746573743139303500f10e08746573743139303600f20e08746573743139303700f30e08746573743139303800" + "f40e0874657374313930" + "3900f50e08746573743139313000f60e08746573743139313100f70e08746573743139313200f80e08746573743139" + "313300f90e0874657374" + "3139313400fa0e08746573743139313500fb0e08746573743139313600fc0e08746573743139313700fd0e08746573" + "743139313800fe0e0874" + "6573743139313900ff0e08746573743139323000800f08746573743139323100810f08746573743139323200820f08" + "74657374313932330083" + "0f08746573743139323400840f08746573743139323500850f08746573743139323600860f08746573743139323700" + "870f0874657374313932" + "3800880f08746573743139323900890f087465737431393330008a0f087465737431393331008b0f08746573743139" + "3332008c0f0874657374" + "31393333008d0f087465737431393334008e0f087465737431393335008f0f08746573743139333600900f08746573" + "743139333700910f0874" + "6573743139333800920f08746573743139333900930f08746573743139343000940f08746573743139343100950f08" + "74657374313934320096" + "0f08746573743139343300970f08746573743139343400980f08746573743139343500990f08746573743139343600" + "9a0f0874657374313934" + "37009b0f087465737431393438009c0f087465737431393439009d0f087465737431393530009e0f08746573743139" + "3531009f0f0874657374" + "3139353200a00f08746573743139353300a10f08746573743139353400a20f08746573743139353500a30f08746573" + "743139353600a40f0874" + "6573743139353700a50f08746573743139353800a60f08746573743139353900a70f08746573743139363000a80f08" + "746573743139363100a9" + "0f08746573743139363200aa0f08746573743139363300ab0f08746573743139363400ac0f08746573743139363500" + "ad0f0874657374313936" + "3600ae0f08746573743139363700af0f08746573743139363800b00f08746573743139363900b10f08746573743139" + "373000b20f0874657374" + "3139373100b30f08746573743139373200b40f08746573743139373300b50f08746573743139373400b60f08746573" + "743139373500b70f0874" + "6573743139373600b80f08746573743139373700b90f08746573743139373800ba0f08746573743139373900bb0f08" + "746573743139383000bc" + "0f08746573743139383100bd0f08746573743139383200be0f08746573743139383300bf0f08746573743139383400" + "c00f0874657374313938" + "3500c10f08746573743139383600c20f08746573743139383700c30f08746573743139383800c40f08746573743139" + "383900c50f0874657374" + "3139393000c60f08746573743139393100c70f08746573743139393200c80f08746573743139393300c90f08746573" + "743139393400ca0f0874" + "6573743139393500cb0f08746573743139393600cc0f08746573743139393700cd0f08746573743139393800ce0f08" + "746573743139393900cf" + "0f08746573743230303000d00f08746573743230303100d10f08746573743230303200d20f08746573743230303300" + "d30f0874657374323030" + "3400d40f08746573743230303500d50f08746573743230303600d60f08746573743230303700d70f08746573743230" + "303800d80f0874657374" + "3230303900d90f08746573743230313000da0f08746573743230313100db0f08746573743230313200dc0f08746573" + "743230313300dd0f0874" + "6573743230313400de0f08746573743230313500df0f08746573743230313600e00f08746573743230313700e10f08" + "746573743230313800e2" + "0f08746573743230313900e30f08746573743230323000e40f08746573743230323100e50f08746573743230323200" + "e60f0874657374323032" + "3300e70f08746573743230323400e80f08746573743230323500e90f08746573743230323600ea0f08746573743230" + "323700eb0f0874657374" + "3230323800ec0f08746573743230323900ed0f08746573743230333000ee0f08746573743230333100ef0f08746573" + "743230333200f00f0874" + "6573743230333300f10f08746573743230333400f20f08746573743230333500f30f08746573743230333600f40f08" + "746573743230333700f5" + "0f08746573743230333800f60f08746573743230333900f70f08746573743230343000f80f08746573743230343100" + "f90f0874657374323034" + "3200fa0f08746573743230343300fb0f08746573743230343400fc0f08746573743230343500fd0f08746573743230" + "343600fe0f0874657374" + "3230343700ff0f08746573743230343800801008746573743230343900811008746573743230353000821008746573" + "74323035310083100874" + "6573743230353200841008746573743230353300851008746573743230353400861008746573743230353500871008" + "74657374323035360088" + "10087465737432303537008910087465737432303538008a10087465737432303539008b1008746573743230363000" + "8c100874657374323036" + "31008d10087465737432303632008e10087465737432303633008f1008746573743230363400901008746573743230" + "36350091100874657374" + "3230363600921008746573743230363700931008746573743230363800941008746573743230363900951008746573" + "74323037300096100874" + "65737432303731009710087465737432303732009810087465737432303733009910087465737432303734009a1008" + "7465737432303735009b" + "10087465737432303736009c10087465737432303737009d10087465737432303738009e1008746573743230373900" + "9f100874657374323038" + "3000a01008746573743230383100a11008746573743230383200a21008746573743230383300a31008746573743230" + "383400a4100874657374" + "3230383500a51008746573743230383600a61008746573743230383700a71008746573743230383800a81008746573" + "743230383900a9100874" + "6573743230393000aa1008746573743230393100ab1008746573743230393200ac1008746573743230393300ad1008" + "746573743230393400ae" + "1008746573743230393500af1008746573743230393600b01008746573743230393700b11008746573743230393800" + "b2100874657374323039" + "3900b31008746573743231303000b41008746573743231303100b51008746573743231303200b61008746573743231" + "303300b7100874657374" + "3231303400b81008746573743231303500b91008746573743231303600ba1008746573743231303700bb1008746573" + "743231303800bc100874" + "6573743231303900bd1008746573743231313000be1008746573743231313100bf1008746573743231313200c01008" + "746573743231313300c1" + "1008746573743231313400c21008746573743231313500c31008746573743231313600c41008746573743231313700" + "c5100874657374323131" + "3800c61008746573743231313900c71008746573743231323000c81008746573743231323100c91008746573743231" + "323200ca100874657374" + "3231323300cb1008746573743231323400cc1008746573743231323500cd1008746573743231323600ce1008746573" + "743231323700cf100874" + "6573743231323800d01008746573743231323900d11008746573743231333000d21008746573743231333100d31008" + "746573743231333200d4" + "1008746573743231333300d51008746573743231333400d61008746573743231333500d71008746573743231333600" + "d8100874657374323133" + "3700d91008746573743231333800da1008746573743231333900db1008746573743231343000dc1008746573743231" + "343100dd100874657374" + "3231343200de1008746573743231343300df1008746573743231343400e01008746573743231343500e11008746573" + "743231343600e2100874" + "6573743231343700e31008746573743231343800e41008746573743231343900e51008746573743231353000e61008" + "746573743231353100e7" + "1008746573743231353200e81008746573743231353300e91008746573743231353400ea1008746573743231353500" + "eb100874657374323135" + "3600ec1008746573743231353700ed1008746573743231353800ee1008746573743231353900ef1008746573743231" + "363000f0100874657374" + "3231363100f11008746573743231363200f21008746573743231363300f31008746573743231363400f41008746573" + "743231363500f5100874" + "6573743231363600f61008746573743231363700f71008746573743231363800f81008746573743231363900f91008" + "746573743231373000fa" + "1008746573743231373100fb1008746573743231373200fc1008746573743231373300fd1008746573743231373400" + "fe100874657374323137" + "3500ff1008746573743231373600801108746573743231373700811108746573743231373800821108746573743231" + "37390083110874657374" + "3231383000841108746573743231383100851108746573743231383200861108746573743231383300871108746573" + "74323138340088110874" + "65737432313835008911087465737432313836008a11087465737432313837008b11087465737432313838008c1108" + "7465737432313839008d" + "11087465737432313930008e11087465737432313931008f1108746573743231393200901108746573743231393300" + "91110874657374323139" + "3400921108746573743231393500931108746573743231393600941108746573743231393700951108746573743231" + "39380096110874657374" + "32313939009711087465737432323030009811087465737432323031009911087465737432323032009a1108746573" + "7432323033009b110874" + "65737432323034009c11087465737432323035009d11087465737432323036009e11087465737432323037009f1108" + "746573743232303800a0" + "1108746573743232303900a11108746573743232313000a21108746573743232313100a31108746573743232313200" + "a4110874657374323231" + "3300a51108746573743232313400a61108746573743232313500a71108746573743232313600a81108746573743232" + "313700a9110874657374" + "3232313800aa1108746573743232313900ab1108746573743232323000ac1108746573743232323100ad1108746573" + "743232323200ae110874" + "6573743232323300af1108746573743232323400b01108746573743232323500b11108746573743232323600b21108" + "746573743232323700b3" + "1108746573743232323800b41108746573743232323900b51108746573743232333000b61108746573743232333100" + "b7110874657374323233" + "3200b81108746573743232333300b91108746573743232333400ba1108746573743232333500bb1108746573743232" + "333600bc110874657374" + "3232333700bd1108746573743232333800be1108746573743232333900bf1108746573743232343000c01108746573" + "743232343100c1110874" + "6573743232343200c21108746573743232343300c31108746573743232343400c41108746573743232343500c51108" + "746573743232343600c6" + "1108746573743232343700c71108746573743232343800c81108746573743232343900c91108746573743232353000" + "ca110874657374323235" + "3100cb1108746573743232353200cc1108746573743232353300cd1108746573743232353400ce1108746573743232" + "353500cf110874657374" + "3232353600d01108746573743232353700d11108746573743232353800d21108746573743232353900d31108746573" + "743232363000d4110874" + "6573743232363100d51108746573743232363200d61108746573743232363300d71108746573743232363400d81108" + "746573743232363500d9" + "1108746573743232363600da1108746573743232363700db1108746573743232363800dc1108746573743232363900" + "dd110874657374323237" + "3000de1108746573743232373100df1108746573743232373200e01108746573743232373300e11108746573743232" + "373400e2110874657374" + "3232373500e31108746573743232373600e41108746573743232373700e51108746573743232373800e61108746573" + "743232373900e7110874" + "6573743232383000e81108746573743232383100e91108746573743232383200ea1108746573743232383300eb1108" + "746573743232383400ec" + "1108746573743232383500ed1108746573743232383600ee1108746573743232383700ef1108746573743232383800" + "f0110874657374323238" + "3900f11108746573743232393000f21108746573743232393100f31108746573743232393200f41108746573743232" + "393300f5110874657374" + "3232393400f61108746573743232393500f71108746573743232393600f81108746573743232393700f91108746573" + "743232393800fa110874" + "6573743232393900fb1108746573743233303000fc1108746573743233303100fd1108746573743233303200fe1108" + "746573743233303300ff" + "1108746573743233303400801208746573743233303500811208746573743233303600821208746573743233303700" + "83120874657374323330" + "3800841208746573743233303900851208746573743233313000861208746573743233313100871208746573743233" + "31320088120874657374" + "32333133008912087465737432333134008a12087465737432333135008b12087465737432333136008c1208746573" + "7432333137008d120874" + "65737432333138008e12087465737432333139008f1208746573743233323000901208746573743233323100911208" + "74657374323332320092" + "1208746573743233323300931208746573743233323400941208746573743233323500951208746573743233323600" + "96120874657374323332" + "37009712087465737432333238009812087465737432333239009912087465737432333330009a1208746573743233" + "3331009b120874657374" + "32333332009c12087465737432333333009d12087465737432333334009e12087465737432333335009f1208746573" + "743233333600a0120874" + "6573743233333700a11208746573743233333800a21208746573743233333900a31208746573743233343000a41208" + "746573743233343100a5" + "1208746573743233343200a61208746573743233343300a71208746573743233343400a81208746573743233343500" + "a9120874657374323334" + "3600aa1208746573743233343700ab1208746573743233343800ac1208746573743233343900ad1208746573743233" + "353000ae120874657374" + "3233353100af1208746573743233353200b01208746573743233353300b11208746573743233353400b21208746573" + "743233353500b3120874" + "6573743233353600b41208746573743233353700b51208746573743233353800b61208746573743233353900b71208" + "746573743233363000b8" + "1208746573743233363100b91208746573743233363200ba1208746573743233363300bb1208746573743233363400" + "bc120874657374323336" + "3500bd1208746573743233363600be1208746573743233363700bf1208746573743233363800c01208746573743233" + "363900c1120874657374" + "3233373000c21208746573743233373100c31208746573743233373200c41208746573743233373300c51208746573" + "743233373400c6120874" + "6573743233373500c71208746573743233373600c81208746573743233373700c91208746573743233373800ca1208" + "746573743233373900cb" + "1208746573743233383000cc1208746573743233383100cd1208746573743233383200ce1208746573743233383300" + "cf120874657374323338" + "3400d01208746573743233383500d11208746573743233383600d21208746573743233383700d31208746573743233" + "383800d4120874657374" + "3233383900d51208746573743233393000d61208746573743233393100d71208746573743233393200d81208746573" + "743233393300d9120874" + "6573743233393400da1208746573743233393500db1208746573743233393600dc1208746573743233393700dd1208" + "746573743233393800de" + "1208746573743233393900df1208746573743234303000e01208746573743234303100e11208746573743234303200" + "e2120874657374323430" + "3300e31208746573743234303400e41208746573743234303500e51208746573743234303600e61208746573743234" + "303700e7120874657374" + "3234303800e81208746573743234303900e91208746573743234313000ea1208746573743234313100eb1208746573" + "743234313200ec120874" + "6573743234313300ed1208746573743234313400ee1208746573743234313500ef1208746573743234313600f01208" + "746573743234313700f1" + "1208746573743234313800f21208746573743234313900f31208746573743234323000f41208746573743234323100" + "f5120874657374323432" + "3200f61208746573743234323300f71208746573743234323400f81208746573743234323500f91208746573743234" + "323600fa120874657374" + "3234323700fb1208746573743234323800fc1208746573743234323900fd1208746573743234333000fe1208746573" + "743234333100ff120874" + "6573743234333200801308746573743234333300811308746573743234333400821308746573743234333500831308" + "74657374323433360084" + "1308746573743234333700851308746573743234333800861308746573743234333900871308746573743234343000" + "88130874657374323434" + "31008913087465737432343432008a13087465737432343433008b13087465737432343434008c1308746573743234" + "3435008d130874657374" + "32343436008e13087465737432343437008f1308746573743234343800901308746573743234343900911308746573" + "74323435300092130874" + "6573743234353100931308746573743234353200941308746573743234353300951308746573743234353400961308" + "74657374323435350097" + "13087465737432343536009813087465737432343537009913087465737432343538009a1308746573743234353900" + "9b130874657374323436" + "30009c13087465737432343631009d13087465737432343632009e13087465737432343633009f1308746573743234" + "363400a0130874657374" + "3234363500a11308746573743234363600a21308746573743234363700a31308746573743234363800a41308746573" + "743234363900a5130874" + "6573743234373000a61308746573743234373100a71308746573743234373200a81308746573743234373300a91308" + "746573743234373400aa" + "1308746573743234373500ab1308746573743234373600ac1308746573743234373700ad1308746573743234373800" + "ae130874657374323437" + "3900af1308746573743234383000b01308746573743234383100b11308746573743234383200b21308746573743234" + "383300b3130874657374" + "3234383400b41308746573743234383500b51308746573743234383600b61308746573743234383700b71308746573" + "743234383800b8130874" + "6573743234383900b91308746573743234393000ba1308746573743234393100bb1308746573743234393200bc1308" + "746573743234393300bd" + "1308746573743234393400be1308746573743234393500bf1308746573743234393600c01308746573743234393700" + "c1130874657374323439" + "3800c21308746573743234393900c31308746573743235303000c41308746573743235303100c51308746573743235" + "303200c6130874657374" + "3235303300c71308746573743235303400c81308746573743235303500c91308746573743235303600ca1308746573" + "743235303700cb130874" + "6573743235303800cc1308746573743235303900cd1308746573743235313000ce1308746573743235313100cf1308" + "746573743235313200d0" + "1308746573743235313300d11308746573743235313400d21308746573743235313500d31308746573743235313600" + "d4130874657374323531" + "3700d51308746573743235313800d61308746573743235313900d71308746573743235323000d81308746573743235" + "323100d9130874657374" + "3235323200da1308746573743235323300db1308746573743235323400dc1308746573743235323500dd1308746573" + "743235323600de130874" + "6573743235323700df1308746573743235323800e01308746573743235323900e11308746573743235333000e21308" + "746573743235333100e3" + "1308746573743235333200e41308746573743235333300e51308746573743235333400e61308746573743235333500" + "e7130874657374323533" + "3600e81308746573743235333700e91308746573743235333800ea1308746573743235333900eb1308746573743235" + "343000ec130874657374" + "3235343100ed1308746573743235343200ee1308746573743235343300ef1308746573743235343400f01308746573" + "743235343500f1130874" + "6573743235343600f21308746573743235343700f31308746573743235343800f41308746573743235343900f51308" + "746573743235353000f6" + "1308746573743235353100f71308746573743235353200f81308746573743235353300f91308746573743235353400" + "fa130874657374323535" + "3500fb1308746573743235353600fc1308746573743235353700fd1308746573743235353800fe1308746573743235" + "353900ff130874657374" + "3235363000801408746573743235363100811408746573743235363200821408746573743235363300831408746573" + "74323536340084140874" + "6573743235363500851408746573743235363600861408746573743235363700871408746573743235363800881408" + "74657374323536390089" + "14087465737432353730008a14087465737432353731008b14087465737432353732008c1408746573743235373300" + "8d140874657374323537" + "34008e14087465737432353735008f1408746573743235373600901408746573743235373700911408746573743235" + "37380092140874657374" + "3235373900931408746573743235383000941408746573743235383100951408746573743235383200961408746573" + "74323538330097140874" + "65737432353834009814087465737432353835009914087465737432353836009a14087465737432353837009b1408" + "7465737432353838009c" + "14087465737432353839009d14087465737432353930009e14087465737432353931009f1408746573743235393200" + "a0140874657374323539" + "3300a11408746573743235393400a21408746573743235393500a31408746573743235393600a41408746573743235" + "393700a5140874657374" + "3235393800a61408746573743235393900a71408746573743236303000a81408746573743236303100a91408746573" + "743236303200aa140874" + "6573743236303300ab1408746573743236303400ac1408746573743236303500ad1408746573743236303600ae1408" + "746573743236303700af" + "1408746573743236303800b01408746573743236303900b11408746573743236313000b21408746573743236313100" + "b3140874657374323631" + "3200b41408746573743236313300b51408746573743236313400b61408746573743236313500b71408746573743236" + "313600b8140874657374" + "3236313700b91408746573743236313800ba1408746573743236313900bb1408746573743236323000bc1408746573" + "743236323100bd140874" + "6573743236323200be1408746573743236323300bf1408746573743236323400c01408746573743236323500c11408" + "746573743236323600c2" + "1408746573743236323700c31408746573743236323800c41408746573743236323900c51408746573743236333000" + "c6140874657374323633" + "3100c71408746573743236333200c81408746573743236333300c91408746573743236333400ca1408746573743236" + "333500cb140874657374" + "3236333600cc1408746573743236333700cd1408746573743236333800ce1408746573743236333900cf1408746573" + "743236343000d0140874" + "6573743236343100d11408746573743236343200d21408746573743236343300d31408746573743236343400d41408" + "746573743236343500d5" + "1408746573743236343600d61408746573743236343700d71408746573743236343800d81408746573743236343900" + "d9140874657374323635" + "3000da1408746573743236353100db1408746573743236353200dc1408746573743236353300dd1408746573743236" + "353400de140874657374" + "3236353500df1408746573743236353600e01408746573743236353700e11408746573743236353800e21408746573" + "743236353900e3140874" + "6573743236363000e41408746573743236363100e51408746573743236363200e61408746573743236363300e71408" + "746573743236363400e8" + "1408746573743236363500e91408746573743236363600ea1408746573743236363700eb1408746573743236363800" + "ec140874657374323636" + "3900ed1408746573743236373000ee1408746573743236373100ef1408746573743236373200f01408746573743236" + "373300f1140874657374" + "3236373400f21408746573743236373500f31408746573743236373600f41408746573743236373700f51408746573" + "743236373800f6140874" + "6573743236373900f71408746573743236383000f81408746573743236383100f91408746573743236383200fa1408" + "746573743236383300fb" + "1408746573743236383400fc1408746573743236383500fd1408746573743236383600fe1408746573743236383700" + "ff140874657374323638" + "3800801508746573743236383900811508746573743236393000821508746573743236393100831508746573743236" + "39320084150874657374" + "3236393300851508746573743236393400861508746573743236393500871508746573743236393600881508746573" + "74323639370089150874" + "65737432363938008a15087465737432363939008b15087465737432373030008c15087465737432373031008d1508" + "7465737432373032008e" + "15087465737432373033008f1508746573743237303400901508746573743237303500911508746573743237303600" + "92150874657374323730" + "3700931508746573743237303800941508746573743237303900951508746573743237313000961508746573743237" + "31310097150874657374" + "32373132009815087465737432373133009915087465737432373134009a15087465737432373135009b1508746573" + "7432373136009c150874" + "65737432373137009d15087465737432373138009e15087465737432373139009f1508746573743237323000a01508" + "746573743237323100a1" + "1508746573743237323200a21508746573743237323300a31508746573743237323400a41508746573743237323500" + "a5150874657374323732" + "3600a61508746573743237323700a71508746573743237323800a81508746573743237323900a91508746573743237" + "333000aa150874657374" + "3237333100ab1508746573743237333200ac1508746573743237333300ad1508746573743237333400ae1508746573" + "743237333500af150874" + "6573743237333600b01508746573743237333700b11508746573743237333800b21508746573743237333900b31508" + "746573743237343000b4" + "1508746573743237343100b51508746573743237343200b61508746573743237343300b71508746573743237343400" + "b8150874657374323734" + "3500b91508746573743237343600ba1508746573743237343700bb1508746573743237343800bc1508746573743237" + "343900bd150874657374" + "3237353000be1508746573743237353100bf1508746573743237353200c01508746573743237353300c11508746573" + "743237353400c2150874" + "6573743237353500c31508746573743237353600c41508746573743237353700c51508746573743237353800c61508" + "746573743237353900c7" + "1508746573743237363000c81508746573743237363100c91508746573743237363200ca1508746573743237363300" + "cb150874657374323736" + "3400cc1508746573743237363500cd1508746573743237363600ce1508746573743237363700cf1508746573743237" + "363800d0150874657374" + "3237363900d11508746573743237373000d21508746573743237373100d31508746573743237373200d41508746573" + "743237373300d5150874" + "6573743237373400d61508746573743237373500d71508746573743237373600d81508746573743237373700d91508" + "746573743237373800da" + "1508746573743237373900db1508746573743237383000dc1508746573743237383100dd1508746573743237383200" + "de150874657374323738" + "3300df1508746573743237383400e01508746573743237383500e11508746573743237383600e21508746573743237" + "383700e3150874657374" + "3237383800e41508746573743237383900e51508746573743237393000e61508746573743237393100e71508746573" + "743237393200e8150874" + "6573743237393300e91508746573743237393400ea1508746573743237393500eb1508746573743237393600ec1508" + "746573743237393700ed" + "1508746573743237393800ee1508746573743237393900ef1508746573743238303000f01508746573743238303100" + "f1150874657374323830" + "3200f21508746573743238303300f31508746573743238303400f41508746573743238303500f51508746573743238" + "303600f6150874657374" + "3238303700f71508746573743238303800f81508746573743238303900f91508746573743238313000fa1508746573" + "743238313100fb150874" + "6573743238313200fc1508746573743238313300fd1508746573743238313400fe1508746573743238313500ff1508" + "74657374323831360080" + "1608746573743238313700811608746573743238313800821608746573743238313900831608746573743238323000" + "84160874657374323832" + "3100851608746573743238323200861608746573743238323300871608746573743238323400881608746573743238" + "32350089160874657374" + "32383236008a16087465737432383237008b16087465737432383238008c16087465737432383239008d1608746573" + "7432383330008e160874" + "65737432383331008f1608746573743238333200901608746573743238333300911608746573743238333400921608" + "74657374323833350093" + "1608746573743238333600941608746573743238333700951608746573743238333800961608746573743238333900" + "97160874657374323834" + "30009816087465737432383431009916087465737432383432009a16087465737432383433009b1608746573743238" + "3434009c160874657374" + "32383435009d16087465737432383436009e16087465737432383437009f1608746573743238343800a01608746573" + "743238343900a1160874" + "6573743238353000a21608746573743238353100a31608746573743238353200a41608746573743238353300a51608" + "746573743238353400a6" + "1608746573743238353500a71608746573743238353600a81608746573743238353700a91608746573743238353800" + "aa160874657374323835" + "3900ab1608746573743238363000ac1608746573743238363100ad1608746573743238363200ae1608746573743238" + "363300af160874657374" + "3238363400b01608746573743238363500b11608746573743238363600b21608746573743238363700b31608746573" + "743238363800b4160874" + "6573743238363900b51608746573743238373000b61608746573743238373100b71608746573743238373200b81608" + "746573743238373300b9" + "1608746573743238373400ba1608746573743238373500bb1608746573743238373600bc1608746573743238373700" + "bd160874657374323837" + "3800be1608746573743238373900bf1608746573743238383000c01608746573743238383100c11608746573743238" + "383200c2160874657374" + "3238383300c31608746573743238383400c41608746573743238383500c51608746573743238383600c61608746573" + "743238383700c7160874" + "6573743238383800c81608746573743238383900c91608746573743238393000ca1608746573743238393100cb1608" + "746573743238393200cc" + "1608746573743238393300cd1608746573743238393400ce1608746573743238393500cf1608746573743238393600" + "d0160874657374323839" + "3700d11608746573743238393800d21608746573743238393900d31608746573743239303000d41608746573743239" + "303100d5160874657374" + "3239303200d61608746573743239303300d71608746573743239303400d81608746573743239303500d91608746573" + "743239303600da160874" + "6573743239303700db1608746573743239303800dc1608746573743239303900dd1608746573743239313000de1608" + "746573743239313100df" + "1608746573743239313200e01608746573743239313300e11608746573743239313400e21608746573743239313500" + "e3160874657374323931" + "3600e41608746573743239313700e51608746573743239313800e61608746573743239313900e71608746573743239" + "323000e8160874657374" + "3239323100e91608746573743239323200ea1608746573743239323300eb1608746573743239323400ec1608746573" + "743239323500ed160874" + "6573743239323600ee1608746573743239323700ef1608746573743239323800f01608746573743239323900f11608" + "746573743239333000f2" + "1608746573743239333100f31608746573743239333200f41608746573743239333300f51608746573743239333400" + "f6160874657374323933" + "3500f71608746573743239333600f81608746573743239333700f91608746573743239333800fa1608746573743239" + "333900fb160874657374" + "3239343000fc1608746573743239343100fd1608746573743239343200fe1608746573743239343300ff1608746573" + "74323934340080170874" + "6573743239343500811708746573743239343600821708746573743239343700831708746573743239343800841708" + "74657374323934390085" + "1708746573743239353000861708746573743239353100871708746573743239353200881708746573743239353300" + "89170874657374323935" + "34008a17087465737432393535008b17087465737432393536008c17087465737432393537008d1708746573743239" + "3538008e170874657374" + "32393539008f1708746573743239363000901708746573743239363100911708746573743239363200921708746573" + "74323936330093170874" + "6573743239363400941708746573743239363500951708746573743239363600961708746573743239363700971708" + "74657374323936380098" + "17087465737432393639009917087465737432393730009a17087465737432393731009b1708746573743239373200" + "9c170874657374323937" + "33009d17087465737432393734009e17087465737432393735009f1708746573743239373600a01708746573743239" + "373700a1170874657374" + "3239373800a21708746573743239373900a31708746573743239383000a41708746573743239383100a51708746573" + "743239383200a6170874" + "6573743239383300a71708746573743239383400a81708746573743239383500a91708746573743239383600aa1708" + "746573743239383700ab" + "1708746573743239383800ac1708746573743239383900ad1708746573743239393000ae1708746573743239393100" + "af170874657374323939" + "3200b01708746573743239393300b11708746573743239393400b21708746573743239393500b31708746573743239" + "393600b4170874657374" + "3239393700b51708746573743239393800b61708746573743239393900b71708746573743330303000b81708746573" + "743330303100b9170874" + "6573743330303200ba1708746573743330303300bb1708746573743330303400bc1708746573743330303500bd1708" + "746573743330303600be" + "1708746573743330303700bf1708746573743330303800c01708746573743330303900c11708746573743330313000" + "c2170874657374333031" + "3100c31708746573743330313200c41708746573743330313300c51708746573743330313400c61708746573743330" + "313500c7170874657374" + "3330313600c81708746573743330313700c91708746573743330313800ca1708746573743330313900cb1708746573" + "743330323000cc170874" + "6573743330323100cd1708746573743330323200ce1708746573743330323300cf1708746573743330323400d01708" + "746573743330323500d1" + "1708746573743330323600d21708746573743330323700d31708746573743330323800d41708746573743330323900" + "d5170874657374333033" + "3000d61708746573743330333100d71708746573743330333200d81708746573743330333300d91708746573743330" + "333400da170874657374" + "3330333500db1708746573743330333600dc1708746573743330333700dd1708746573743330333800de1708746573" + "743330333900df170874" + "6573743330343000e01708746573743330343100e11708746573743330343200e21708746573743330343300e31708" + "746573743330343400e4" + "1708746573743330343500e51708746573743330343600e61708746573743330343700e71708746573743330343800" + "e8170874657374333034" + "3900e91708746573743330353000ea1708746573743330353100eb1708746573743330353200ec1708746573743330" + "353300ed170874657374" + "3330353400ee1708746573743330353500ef1708746573743330353600f01708746573743330353700f11708746573" + "743330353800f2170874" + "6573743330353900f31708746573743330363000f41708746573743330363100f51708746573743330363200f61708" + "746573743330363300f7" + "1708746573743330363400f81708746573743330363500f91708746573743330363600fa1708746573743330363700" + "fb170874657374333036" + "3800fc1708746573743330363900fd1708746573743330373000fe1708746573743330373100ff1708746573743330" + "37320080180874657374" + "3330373300811808746573743330373400821808746573743330373500831808746573743330373600841808746573" + "74333037370085180874" + "6573743330373800861808746573743330373900871808746573743330383000881808746573743330383100891808" + "7465737433303832008a" + "18087465737433303833008b18087465737433303834008c18087465737433303835008d1808746573743330383600" + "8e180874657374333038" + "37008f1808746573743330383800901808746573743330383900911808746573743330393000921808746573743330" + "39310093180874657374" + "3330393200941808746573743330393300951808746573743330393400961808746573743330393500971808746573" + "74333039360098180874" + "65737433303937009918087465737433303938009a18087465737433303939009b18087465737433313030009c1808" + "7465737433313031009d" + "18087465737433313032009e18087465737433313033009f1808746573743331303400a01808746573743331303500" + "a1180874657374333130" + "3600a21808746573743331303700a31808746573743331303800a41808746573743331303900a51808746573743331" + "313000a6180874657374" + "3331313100a71808746573743331313200a81808746573743331313300a91808746573743331313400aa1808746573" + "743331313500ab180874" + "6573743331313600ac1808746573743331313700ad1808746573743331313800ae1808746573743331313900af1808" + "746573743331323000b0" + "1808746573743331323100b11808746573743331323200b21808746573743331323300b31808746573743331323400" + "b4180874657374333132" + "3500b51808746573743331323600b61808746573743331323700b71808746573743331323800b81808746573743331" + "323900b9180874657374" + "3331333000ba1808746573743331333100bb1808746573743331333200bc1808746573743331333300bd1808746573" + "743331333400be180874" + "6573743331333500bf1808746573743331333600c01808746573743331333700c11808746573743331333800c21808" + "746573743331333900c3" + "1808746573743331343000c41808746573743331343100c51808746573743331343200c61808746573743331343300" + "c7180874657374333134" + "3400c81808746573743331343500c91808746573743331343600ca1808746573743331343700cb1808746573743331" + "343800cc180874657374" + "3331343900cd1808746573743331353000ce1808746573743331353100cf1808746573743331353200d01808746573" + "743331353300d1180874" + "6573743331353400d21808746573743331353500d31808746573743331353600d41808746573743331353700d51808" + "746573743331353800d6" + "1808746573743331353900d71808746573743331363000d81808746573743331363100d91808746573743331363200" + "da180874657374333136" + "3300db1808746573743331363400dc1808746573743331363500dd1808746573743331363600de1808746573743331" + "363700df180874657374" + "3331363800e01808746573743331363900e11808746573743331373000e21808746573743331373100e31808746573" + "743331373200e4180874" + "6573743331373300e51808746573743331373400e61808746573743331373500e71808746573743331373600e81808" + "746573743331373700e9" + "1808746573743331373800ea1808746573743331373900eb1808746573743331383000ec1808746573743331383100" + "ed180874657374333138" + "3200ee1808746573743331383300ef1808746573743331383400f01808746573743331383500f11808746573743331" + "383600f2180874657374" + "3331383700f31808746573743331383800f41808746573743331383900f51808746573743331393000f61808746573" + "743331393100f7180874" + "6573743331393200f81808746573743331393300f91808746573743331393400fa1808746573743331393500fb1808" + "746573743331393600fc" + "1808746573743331393700fd1808746573743331393800fe1808746573743331393900ff1808746573743332303000" + "80190874657374333230" + "3100811908746573743332303200821908746573743332303300831908746573743332303400841908746573743332" + "30350085190874657374" + "3332303600861908746573743332303700871908746573743332303800881908746573743332303900891908746573" + "7433323130008a190874" + "65737433323131008b19087465737433323132008c19087465737433323133008d19087465737433323134008e1908" + "7465737433323135008f" + "1908746573743332313600901908746573743332313700911908746573743332313800921908746573743332313900" + "93190874657374333232" + "3000941908746573743332323100951908746573743332323200961908746573743332323300971908746573743332" + "32340098190874657374" + "33323235009919087465737433323236009a19087465737433323237009b19087465737433323238009c1908746573" + "7433323239009d190874" + "65737433323330009e19087465737433323331009f1908746573743332333200a01908746573743332333300a11908" + "746573743332333400a2" + "1908746573743332333500a31908746573743332333600a41908746573743332333700a51908746573743332333800" + "a6190874657374333233" + "3900a71908746573743332343000a81908746573743332343100a91908746573743332343200aa1908746573743332" + "343300ab190874657374" + "3332343400ac1908746573743332343500ad1908746573743332343600ae1908746573743332343700af1908746573" + "743332343800b0190874" + "6573743332343900b11908746573743332353000b21908746573743332353100b31908746573743332353200b41908" + "746573743332353300b5" + "1908746573743332353400b61908746573743332353500b71908746573743332353600b81908746573743332353700" + "b9190874657374333235" + "3800ba1908746573743332353900bb1908746573743332363000bc1908746573743332363100bd1908746573743332" + "363200be190874657374" + "3332363300bf1908746573743332363400c01908746573743332363500c11908746573743332363600c21908746573" + "743332363700c3190874" + "6573743332363800c41908746573743332363900c51908746573743332373000c61908746573743332373100c71908" + "746573743332373200c8" + "1908746573743332373300c91908746573743332373400ca1908746573743332373500cb1908746573743332373600" + "cc190874657374333237" + "3700cd1908746573743332373800ce1908746573743332373900cf1908746573743332383000d01908746573743332" + "383100d1190874657374" + "3332383200d21908746573743332383300d31908746573743332383400d41908746573743332383500d51908746573" + "743332383600d6190874" + "6573743332383700d71908746573743332383800d81908746573743332383900d91908746573743332393000da1908" + "746573743332393100db" + "1908746573743332393200dc1908746573743332393300dd1908746573743332393400de1908746573743332393500" + "df190874657374333239" + "3600e01908746573743332393700e11908746573743332393800e21908746573743332393900e31908746573743333" + "303000e4190874657374" + "3333303100e51908746573743333303200e61908746573743333303300e71908746573743333303400e81908746573" + "743333303500e9190874" + "6573743333303600ea1908746573743333303700eb1908746573743333303800ec1908746573743333303900ed1908" + "746573743333313000ee" + "1908746573743333313100ef1908746573743333313200f01908746573743333313300f11908746573743333313400" + "f2190874657374333331" + "3500f31908746573743333313600f41908746573743333313700f51908746573743333313800f61908746573743333" + "313900f7190874657374" + "3333323000f81908746573743333323100f91908746573743333323200fa1908746573743333323300fb1908746573" + "743333323400fc190874" + "6573743333323500fd1908746573743333323600fe1908746573743333323700ff1908746573743333323800801a08" + "74657374333332390081" + "1a08746573743333333000821a08746573743333333100831a08746573743333333200841a08746573743333333300" + "851a0874657374333333" + "3400861a08746573743333333500871a08746573743333333600881a08746573743333333700891a08746573743333" + "3338008a1a0874657374" + "33333339008b1a087465737433333430008c1a087465737433333431008d1a087465737433333432008e1a08746573" + "7433333433008f1a0874" + "6573743333343400901a08746573743333343500911a08746573743333343600921a08746573743333343700931a08" + "74657374333334380094" + "1a08746573743333343900951a08746573743333353000961a08746573743333353100971a08746573743333353200" + "981a0874657374333335" + "3300991a087465737433333534009a1a087465737433333535009b1a087465737433333536009c1a08746573743333" + "3537009d1a0874657374" + "33333538009e1a087465737433333539009f1a08746573743333363000a01a08746573743333363100a11a08746573" + "743333363200a21a0874" + "6573743333363300a31a08746573743333363400a41a08746573743333363500a51a08746573743333363600a61a08" + "746573743333363700a7" + "1a08746573743333363800a81a08746573743333363900a91a08746573743333373000aa1a08746573743333373100" + "ab1a0874657374333337" + "3200ac1a08746573743333373300ad1a08746573743333373400ae1a08746573743333373500af1a08746573743333" + "373600b01a0874657374" + "3333373700b11a08746573743333373800b21a08746573743333373900b31a08746573743333383000b41a08746573" + "743333383100b51a0874" + "6573743333383200b61a08746573743333383300b71a08746573743333383400b81a08746573743333383500b91a08" + "746573743333383600ba" + "1a08746573743333383700bb1a08746573743333383800bc1a08746573743333383900bd1a08746573743333393000" + "be1a0874657374333339" + "3100bf1a08746573743333393200c01a08746573743333393300c11a08746573743333393400c21a08746573743333" + "393500c31a0874657374" + "3333393600c41a08746573743333393700c51a08746573743333393800c61a08746573743333393900c71a08746573" + "743334303000c81a0874" + "6573743334303100c91a08746573743334303200ca1a08746573743334303300cb1a08746573743334303400cc1a08" + "746573743334303500cd" + "1a08746573743334303600ce1a08746573743334303700cf1a08746573743334303800d01a08746573743334303900" + "d11a0874657374333431" + "3000d21a08746573743334313100d31a08746573743334313200d41a08746573743334313300d51a08746573743334" + "313400d61a0874657374" + "3334313500d71a08746573743334313600d81a08746573743334313700d91a08746573743334313800da1a08746573" + "743334313900db1a0874" + "6573743334323000dc1a08746573743334323100dd1a08746573743334323200de1a08746573743334323300df1a08" + "746573743334323400e0" + "1a08746573743334323500e11a08746573743334323600e21a08746573743334323700e31a08746573743334323800" + "e41a0874657374333432" + "3900e51a08746573743334333000e61a08746573743334333100e71a08746573743334333200e81a08746573743334" + "333300e91a0874657374" + "3334333400ea1a08746573743334333500eb1a08746573743334333600ec1a08746573743334333700ed1a08746573" + "743334333800ee1a0874" + "6573743334333900ef1a08746573743334343000f01a08746573743334343100f11a08746573743334343200f21a08" + "746573743334343300f3" + "1a08746573743334343400f41a08746573743334343500f51a08746573743334343600f61a08746573743334343700" + "f71a0874657374333434" + "3800f81a08746573743334343900f91a08746573743334353000fa1a08746573743334353100fb1a08746573743334" + "353200fc1a0874657374" + "3334353300fd1a08746573743334353400fe1a08746573743334353500ff1a08746573743334353600801b08746573" + "743334353700811b0874" + "6573743334353800821b08746573743334353900831b08746573743334363000841b08746573743334363100851b08" + "74657374333436320086" + "1b08746573743334363300871b08746573743334363400881b08746573743334363500891b08746573743334363600" + "8a1b0874657374333436" + "37008b1b087465737433343638008c1b087465737433343639008d1b087465737433343730008e1b08746573743334" + "3731008f1b0874657374" + "3334373200901b08746573743334373300911b08746573743334373400921b08746573743334373500931b08746573" + "743334373600941b0874" + "6573743334373700951b08746573743334373800961b08746573743334373900971b08746573743334383000981b08" + "74657374333438310099" + "1b087465737433343832009a1b087465737433343833009b1b087465737433343834009c1b08746573743334383500" + "9d1b0874657374333438" + "36009e1b087465737433343837009f1b08746573743334383800a01b08746573743334383900a11b08746573743334" + "393000a21b0874657374" + "3334393100a31b08746573743334393200a41b08746573743334393300a51b08746573743334393400a61b08746573" + "743334393500a71b0874" + "6573743334393600a81b08746573743334393700a91b08746573743334393800aa1b08746573743334393900ab1b08" + "746573743335303000ac" + "1b08746573743335303100ad1b08746573743335303200ae1b08746573743335303300af1b08746573743335303400" + "b01b0874657374333530" + "3500b11b08746573743335303600b21b08746573743335303700b31b08746573743335303800b41b08746573743335" + "303900b51b0874657374" + "3335313000b61b08746573743335313100b71b08746573743335313200b81b08746573743335313300b91b08746573" + "743335313400ba1b0874" + "6573743335313500bb1b08746573743335313600bc1b08746573743335313700bd1b08746573743335313800be1b08" + "746573743335313900bf" + "1b08746573743335323000c01b08746573743335323100c11b08746573743335323200c21b08746573743335323300" + "c31b0874657374333532" + "3400c41b08746573743335323500c51b08746573743335323600c61b08746573743335323700c71b08746573743335" + "323800c81b0874657374" + "3335323900c91b08746573743335333000ca1b08746573743335333100cb1b08746573743335333200cc1b08746573" + "743335333300cd1b0874" + "6573743335333400ce1b08746573743335333500cf1b08746573743335333600d01b08746573743335333700d11b08" + "746573743335333800d2" + "1b08746573743335333900d31b08746573743335343000d41b08746573743335343100d51b08746573743335343200" + "d61b0874657374333534" + "3300d71b08746573743335343400d81b08746573743335343500d91b08746573743335343600da1b08746573743335" + "343700db1b0874657374" + "3335343800dc1b08746573743335343900dd1b08746573743335353000de1b08746573743335353100df1b08746573" + "743335353200e01b0874" + "6573743335353300e11b08746573743335353400e21b08746573743335353500e31b08746573743335353600e41b08" + "746573743335353700e5" + "1b08746573743335353800e61b08746573743335353900e71b08746573743335363000e81b08746573743335363100" + "e91b0874657374333536" + "3200ea1b08746573743335363300eb1b08746573743335363400ec1b08746573743335363500ed1b08746573743335" + "363600ee1b0874657374" + "3335363700ef1b08746573743335363800f01b08746573743335363900f11b08746573743335373000f21b08746573" + "743335373100f31b0874" + "6573743335373200f41b08746573743335373300f51b08746573743335373400f61b08746573743335373500f71b08" + "746573743335373600f8" + "1b08746573743335373700f91b08746573743335373800fa1b08746573743335373900fb1b08746573743335383000" + "fc1b0874657374333538" + "3100fd1b08746573743335383200fe1b08746573743335383300ff1b08746573743335383400801c08746573743335" + "383500811c0874657374" + "3335383600821c08746573743335383700831c08746573743335383800841c08746573743335383900851c08746573" + "743335393000861c0874" + "6573743335393100871c08746573743335393200881c08746573743335393300891c087465737433353934008a1c08" + "7465737433353935008b" + "1c087465737433353936008c1c087465737433353937008d1c087465737433353938008e1c08746573743335393900" + "8f1c0874657374333630" + "3000901c08746573743336303100911c08746573743336303200921c08746573743336303300931c08746573743336" + "303400941c0874657374" + "3336303500951c08746573743336303600961c08746573743336303700971c08746573743336303800981c08746573" + "743336303900991c0874" + "65737433363130009a1c087465737433363131009b1c087465737433363132009c1c087465737433363133009d1c08" + "7465737433363134009e" + "1c087465737433363135009f1c08746573743336313600a01c08746573743336313700a11c08746573743336313800" + "a21c0874657374333631" + "3900a31c08746573743336323000a41c08746573743336323100a51c08746573743336323200a61c08746573743336" + "323300a71c0874657374" + "3336323400a81c08746573743336323500a91c08746573743336323600aa1c08746573743336323700ab1c08746573" + "743336323800ac1c0874" + "6573743336323900ad1c08746573743336333000ae1c08746573743336333100af1c08746573743336333200b01c08" + "746573743336333300b1" + "1c08746573743336333400b21c08746573743336333500b31c08746573743336333600b41c08746573743336333700" + "b51c0874657374333633" + "3800b61c08746573743336333900b71c08746573743336343000b81c08746573743336343100b91c08746573743336" + "343200ba1c0874657374" + "3336343300bb1c08746573743336343400bc1c08746573743336343500bd1c08746573743336343600be1c08746573" + "743336343700bf1c0874" + "6573743336343800c01c08746573743336343900c11c08746573743336353000c21c08746573743336353100c31c08" + "746573743336353200c4" + "1c08746573743336353300c51c08746573743336353400c61c08746573743336353500c71c08746573743336353600" + "c81c0874657374333635" + "3700c91c08746573743336353800ca1c08746573743336353900cb1c08746573743336363000cc1c08746573743336" + "363100cd1c0874657374" + "3336363200ce1c08746573743336363300cf1c08746573743336363400d01c08746573743336363500d11c08746573" + "743336363600d21c0874" + "6573743336363700d31c08746573743336363800d41c08746573743336363900d51c08746573743336373000d61c08" + "746573743336373100d7" + "1c08746573743336373200d81c08746573743336373300d91c08746573743336373400da1c08746573743336373500" + "db1c0874657374333637" + "3600dc1c08746573743336373700dd1c08746573743336373800de1c08746573743336373900df1c08746573743336" + "383000e01c0874657374" + "3336383100e11c08746573743336383200e21c08746573743336383300e31c08746573743336383400e41c08746573" + "743336383500e51c0874" + "6573743336383600e61c08746573743336383700e71c08746573743336383800e81c08746573743336383900e91c08" + "746573743336393000ea" + "1c08746573743336393100eb1c08746573743336393200ec1c08746573743336393300ed1c08746573743336393400" + "ee1c0874657374333639" + "3500ef1c08746573743336393600f01c08746573743336393700f11c08746573743336393800f21c08746573743336" + "393900f31c0874657374" + "3337303000f41c08746573743337303100f51c08746573743337303200f61c08746573743337303300f71c08746573" + "743337303400f81c0874" + "6573743337303500f91c08746573743337303600fa1c08746573743337303700fb1c08746573743337303800fc1c08" + "746573743337303900fd" + "1c08746573743337313000fe1c08746573743337313100ff1c08746573743337313200801d08746573743337313300" + "811d0874657374333731" + "3400821d08746573743337313500831d08746573743337313600841d08746573743337313700851d08746573743337" + "313800861d0874657374" + "3337313900871d08746573743337323000881d08746573743337323100891d087465737433373232008a1d08746573" + "7433373233008b1d0874" + "65737433373234008c1d087465737433373235008d1d087465737433373236008e1d087465737433373237008f1d08" + "74657374333732380090" + "1d08746573743337323900911d08746573743337333000921d08746573743337333100931d08746573743337333200" + "941d0874657374333733" + "3300951d08746573743337333400961d08746573743337333500971d08746573743337333600981d08746573743337" + "333700991d0874657374" + "33373338009a1d087465737433373339009b1d087465737433373430009c1d087465737433373431009d1d08746573" + "7433373432009e1d0874" + "65737433373433009f1d08746573743337343400a01d08746573743337343500a11d08746573743337343600a21d08" + "746573743337343700a3" + "1d08746573743337343800a41d08746573743337343900a51d08746573743337353000a61d08746573743337353100" + "a71d0874657374333735" + "3200a81d08746573743337353300a91d08746573743337353400aa1d08746573743337353500ab1d08746573743337" + "353600ac1d0874657374" + "3337353700ad1d08746573743337353800ae1d08746573743337353900af1d08746573743337363000b01d08746573" + "743337363100b11d0874" + "6573743337363200b21d08746573743337363300b31d08746573743337363400b41d08746573743337363500b51d08" + "746573743337363600b6" + "1d08746573743337363700b71d08746573743337363800b81d08746573743337363900b91d08746573743337373000" + "ba1d0874657374333737" + "3100bb1d08746573743337373200bc1d08746573743337373300bd1d08746573743337373400be1d08746573743337" + "373500bf1d0874657374" + "3337373600c01d08746573743337373700c11d08746573743337373800c21d08746573743337373900c31d08746573" + "743337383000c41d0874" + "6573743337383100c51d08746573743337383200c61d08746573743337383300c71d08746573743337383400c81d08" + "746573743337383500c9" + "1d08746573743337383600ca1d08746573743337383700cb1d08746573743337383800cc1d08746573743337383900" + "cd1d0874657374333739" + "3000ce1d08746573743337393100cf1d08746573743337393200d01d08746573743337393300d11d08746573743337" + "393400d21d0874657374" + "3337393500d31d08746573743337393600d41d08746573743337393700d51d08746573743337393800d61d08746573" + "743337393900d71d0874" + "6573743338303000d81d08746573743338303100d91d08746573743338303200da1d08746573743338303300db1d08" + "746573743338303400dc" + "1d08746573743338303500dd1d08746573743338303600de1d08746573743338303700df1d08746573743338303800" + "e01d0874657374333830" + "3900e11d08746573743338313000e21d08746573743338313100e31d08746573743338313200e41d08746573743338" + "313300e51d0874657374" + "3338313400e61d08746573743338313500e71d08746573743338313600e81d08746573743338313700e91d08746573" + "743338313800ea1d0874" + "6573743338313900eb1d08746573743338323000ec1d08746573743338323100ed1d08746573743338323200ee1d08" + "746573743338323300ef" + "1d08746573743338323400f01d08746573743338323500f11d08746573743338323600f21d08746573743338323700" + "f31d0874657374333832" + "3800f41d08746573743338323900f51d08746573743338333000f61d08746573743338333100f71d08746573743338" + "333200f81d0874657374" + "3338333300f91d08746573743338333400fa1d08746573743338333500fb1d08746573743338333600fc1d08746573" + "743338333700fd1d0874" + "6573743338333800fe1d08746573743338333900ff1d08746573743338343000801e08746573743338343100811e08" + "74657374333834320082" + "1e08746573743338343300831e08746573743338343400841e08746573743338343500851e08746573743338343600" + "861e0874657374333834" + "3700871e08746573743338343800881e08746573743338343900891e087465737433383530008a1e08746573743338" + "3531008b1e0874657374" + "33383532008c1e087465737433383533008d1e087465737433383534008e1e087465737433383535008f1e08746573" + "743338353600901e0874" + "6573743338353700911e08746573743338353800921e08746573743338353900931e08746573743338363000941e08" + "74657374333836310095" + "1e08746573743338363200961e08746573743338363300971e08746573743338363400981e08746573743338363500" + "991e0874657374333836" + "36009a1e087465737433383637009b1e087465737433383638009c1e087465737433383639009d1e08746573743338" + "3730009e1e0874657374" + "33383731009f1e08746573743338373200a01e08746573743338373300a11e08746573743338373400a21e08746573" + "743338373500a31e0874" + "6573743338373600a41e08746573743338373700a51e08746573743338373800a61e08746573743338373900a71e08" + "746573743338383000a8" + "1e08746573743338383100a91e08746573743338383200aa1e08746573743338383300ab1e08746573743338383400" + "ac1e0874657374333838" + "3500ad1e08746573743338383600ae1e08746573743338383700af1e08746573743338383800b01e08746573743338" + "383900b11e0874657374" + "3338393000b21e08746573743338393100b31e08746573743338393200b41e08746573743338393300b51e08746573" + "743338393400b61e0874" + "6573743338393500b71e08746573743338393600b81e08746573743338393700b91e08746573743338393800ba1e08" + "746573743338393900bb" + "1e08746573743339303000bc1e08746573743339303100bd1e08746573743339303200be1e08746573743339303300" + "bf1e0874657374333930" + "3400c01e08746573743339303500c11e08746573743339303600c21e08746573743339303700c31e08746573743339" + "303800c41e0874657374" + "3339303900c51e08746573743339313000c61e08746573743339313100c71e08746573743339313200c81e08746573" + "743339313300c91e0874" + "6573743339313400ca1e08746573743339313500cb1e08746573743339313600cc1e08746573743339313700cd1e08" + "746573743339313800ce" + "1e08746573743339313900cf1e08746573743339323000d01e08746573743339323100d11e08746573743339323200" + "d21e0874657374333932" + "3300d31e08746573743339323400d41e08746573743339323500d51e08746573743339323600d61e08746573743339" + "323700d71e0874657374" + "3339323800d81e08746573743339323900d91e08746573743339333000da1e08746573743339333100db1e08746573" + "743339333200dc1e0874" + "6573743339333300dd1e08746573743339333400de1e08746573743339333500df1e08746573743339333600e01e08" + "746573743339333700e1" + "1e08746573743339333800e21e08746573743339333900e31e08746573743339343000e41e08746573743339343100" + "e51e0874657374333934" + "3200e61e08746573743339343300e71e08746573743339343400e81e08746573743339343500e91e08746573743339" + "343600ea1e0874657374" + "3339343700eb1e08746573743339343800ec1e08746573743339343900ed1e08746573743339353000ee1e08746573" + "743339353100ef1e0874" + "6573743339353200f01e08746573743339353300f11e08746573743339353400f21e08746573743339353500f31e08" + "746573743339353600f4" + "1e08746573743339353700f51e08746573743339353800f61e08746573743339353900f71e08746573743339363000" + "f81e0874657374333936" + "3100f91e08746573743339363200fa1e08746573743339363300fb1e08746573743339363400fc1e08746573743339" + "363500fd1e0874657374" + "3339363600fe1e08746573743339363700ff1e08746573743339363800801f08746573743339363900811f08746573" + "743339373000821f0874" + "6573743339373100831f08746573743339373200841f08746573743339373300851f08746573743339373400861f08" + "74657374333937350087" + "1f08746573743339373600881f08746573743339373700891f087465737433393738008a1f08746573743339373900" + "8b1f0874657374333938" + "30008c1f087465737433393831008d1f087465737433393832008e1f087465737433393833008f1f08746573743339" + "383400901f0874657374" + "3339383500911f08746573743339383600921f08746573743339383700931f08746573743339383800941f08746573" + "743339383900951f0874" + "6573743339393000961f08746573743339393100971f08746573743339393200981f08746573743339393300991f08" + "7465737433393934009a" + "1f087465737433393935009b1f087465737433393936009c1f087465737433393937009d1f08746573743339393800" + "9e1f0874657374333939" + "39009f1f08746573743430303000a01f08746573743430303100a11f08746573743430303200a21f08746573743430" + "303300a31f0874657374" + "3430303400a41f08746573743430303500a51f08746573743430303600a61f08746573743430303700a71f08746573" + "743430303800a81f0874" + "6573743430303900a91f08746573743430313000aa1f08746573743430313100ab1f08746573743430313200ac1f08" + "746573743430313300ad" + "1f08746573743430313400ae1f08746573743430313500af1f08746573743430313600b01f08746573743430313700" + "b11f0874657374343031" + "3800b21f08746573743430313900b31f08746573743430323000b41f08746573743430323100b51f08746573743430" + "323200b61f0874657374" + "3430323300b71f08746573743430323400b81f08746573743430323500b91f08746573743430323600ba1f08746573" + "743430323700bb1f0874" + "6573743430323800bc1f08746573743430323900bd1f08746573743430333000be1f08746573743430333100bf1f08" + "746573743430333200c0" + "1f08746573743430333300c11f08746573743430333400c21f08746573743430333500c31f08746573743430333600" + "c41f0874657374343033" + "3700c51f08746573743430333800c61f08746573743430333900c71f08746573743430343000c81f08746573743430" + "343100c91f0874657374" + "3430343200ca1f08746573743430343300cb1f08746573743430343400cc1f08746573743430343500cd1f08746573" + "743430343600ce1f0874" + "6573743430343700cf1f08746573743430343800d01f08746573743430343900d11f08746573743430353000d21f08" + "746573743430353100d3" + "1f08746573743430353200d41f08746573743430353300d51f08746573743430353400d61f08746573743430353500" + "d71f0874657374343035" + "3600d81f08746573743430353700d91f08746573743430353800da1f08746573743430353900db1f08746573743430" + "363000dc1f0874657374" + "3430363100dd1f08746573743430363200de1f08746573743430363300df1f08746573743430363400e01f08746573" + "743430363500e11f0874" + "6573743430363600e21f08746573743430363700e31f08746573743430363800e41f08746573743430363900e51f08" + "746573743430373000e6" + "1f08746573743430373100e71f08746573743430373200e81f08746573743430373300e91f08746573743430373400" + "ea1f0874657374343037" + "3500eb1f08746573743430373600ec1f08746573743430373700ed1f08746573743430373800ee1f08746573743430" + "373900ef1f0874657374" + "3430383000f01f08746573743430383100f11f08746573743430383200f21f08746573743430383300f31f08746573" + "743430383400f41f0874" + "6573743430383500f51f08746573743430383600f61f08746573743430383700f71f08746573743430383800f81f08" + "746573743430383900f9" + "1f08746573743430393000fa1f08746573743430393100fb1f08746573743430393200fc1f08746573743430393300" + "fd1f0874657374343039" + "3400fe1f08746573743430393500ff1f08746573743430393600802008746573743430393700812008746573743430" + "39380082200874657374" + "3430393900832008746573743431303000842008746573743431303100852008746573743431303200862008746573" + "74343130330087200874" + "65737434313034008820087465737434313035008920087465737434313036008a20087465737434313037008b2008" + "7465737434313038008c" + "20087465737434313039008d20087465737434313130008e20087465737434313131008f2008746573743431313200" + "90200874657374343131" + "3300912008746573743431313400922008746573743431313500932008746573743431313600942008746573743431" + "31370095200874657374" + "3431313800962008746573743431313900972008746573743431323000982008746573743431323100992008746573" + "7434313232009a200874" + "65737434313233009b20087465737434313234009c20087465737434313235009d20087465737434313236009e2008" + "7465737434313237009f" + "2008746573743431323800a02008746573743431323900a12008746573743431333000a22008746573743431333100" + "a3200874657374343133" + "3200a42008746573743431333300a52008746573743431333400a62008746573743431333500a72008746573743431" + "333600a8200874657374" + "3431333700a92008746573743431333800aa2008746573743431333900ab2008746573743431343000ac2008746573" + "743431343100ad200874" + "6573743431343200ae2008746573743431343300af2008746573743431343400b02008746573743431343500b12008" + "746573743431343600b2" + "2008746573743431343700b32008746573743431343800b42008746573743431343900b52008746573743431353000" + "b6200874657374343135" + "3100b72008746573743431353200b82008746573743431353300b92008746573743431353400ba2008746573743431" + "353500bb200874657374" + "3431353600bc2008746573743431353700bd2008746573743431353800be2008746573743431353900bf2008746573" + "743431363000c0200874" + "6573743431363100c12008746573743431363200c22008746573743431363300c32008746573743431363400c42008" + "746573743431363500c5" + "2008746573743431363600c62008746573743431363700c72008746573743431363800c82008746573743431363900" + "c9200874657374343137" + "3000ca2008746573743431373100cb2008746573743431373200cc2008746573743431373300cd2008746573743431" + "373400ce200874657374" + "3431373500cf2008746573743431373600d02008746573743431373700d12008746573743431373800d22008746573" + "743431373900d3200874" + "6573743431383000d42008746573743431383100d52008746573743431383200d62008746573743431383300d72008" + "746573743431383400d8" + "2008746573743431383500d92008746573743431383600da2008746573743431383700db2008746573743431383800" + "dc200874657374343138" + "3900dd2008746573743431393000de2008746573743431393100df2008746573743431393200e02008746573743431" + "393300e1200874657374" + "3431393400e22008746573743431393500e32008746573743431393600e42008746573743431393700e52008746573" + "743431393800e6200874" + "6573743431393900e72008746573743432303000e82008746573743432303100e92008746573743432303200ea2008" + "746573743432303300eb" + "2008746573743432303400ec2008746573743432303500ed2008746573743432303600ee2008746573743432303700" + "ef200874657374343230" + "3800f02008746573743432303900f12008746573743432313000f22008746573743432313100f32008746573743432" + "313200f4200874657374" + "3432313300f52008746573743432313400f62008746573743432313500f72008746573743432313600f82008746573" + "743432313700f9200874" + "6573743432313800fa2008746573743432313900fb2008746573743432323000fc2008746573743432323100fd2008" + "746573743432323200fe" + "2008746573743432323300ff2008746573743432323400802108746573743432323500812108746573743432323600" + "82210874657374343232" + "3700832108746573743432323800842108746573743432323900852108746573743432333000862108746573743432" + "33310087210874657374" + "34323332008821087465737434323333008921087465737434323334008a21087465737434323335008b2108746573" + "7434323336008c210874" + "65737434323337008d21087465737434323338008e21087465737434323339008f2108746573743432343000902108" + "74657374343234310091" + "2108746573743432343200922108746573743432343300932108746573743432343400942108746573743432343500" + "95210874657374343234" + "3600962108746573743432343700972108746573743432343800982108746573743432343900992108746573743432" + "3530009a210874657374" + "34323531009b21087465737434323532009c21087465737434323533009d21087465737434323534009e2108746573" + "7434323535009f210874" + "6573743432353600a02108746573743432353700a12108746573743432353800a22108746573743432353900a32108" + "746573743432363000a4" + "2108746573743432363100a52108746573743432363200a62108746573743432363300a72108746573743432363400" + "a8210874657374343236" + "3500a92108746573743432363600aa2108746573743432363700ab2108746573743432363800ac2108746573743432" + "363900ad210874657374" + "3432373000ae2108746573743432373100af2108746573743432373200b02108746573743432373300b12108746573" + "743432373400b2210874" + "6573743432373500b32108746573743432373600b42108746573743432373700b52108746573743432373800b62108" + "746573743432373900b7" + "2108746573743432383000b82108746573743432383100b92108746573743432383200ba2108746573743432383300" + "bb210874657374343238" + "3400bc2108746573743432383500bd2108746573743432383600be2108746573743432383700bf2108746573743432" + "383800c0210874657374" + "3432383900c12108746573743432393000c22108746573743432393100c32108746573743432393200c42108746573" + "743432393300c5210874" + "6573743432393400c62108746573743432393500c72108746573743432393600c82108746573743432393700c92108" + "746573743432393800ca" + "2108746573743432393900cb2108746573743433303000cc2108746573743433303100cd2108746573743433303200" + "ce210874657374343330" + "3300cf2108746573743433303400d02108746573743433303500d12108746573743433303600d22108746573743433" + "303700d3210874657374" + "3433303800d42108746573743433303900d52108746573743433313000d62108746573743433313100d72108746573" + "743433313200d8210874" + "6573743433313300d92108746573743433313400da2108746573743433313500db2108746573743433313600dc2108" + "746573743433313700dd" + "2108746573743433313800de2108746573743433313900df2108746573743433323000e02108746573743433323100" + "e1210874657374343332" + "3200e22108746573743433323300e32108746573743433323400e42108746573743433323500e52108746573743433" + "323600e6210874657374" + "3433323700e72108746573743433323800e82108746573743433323900e92108746573743433333000ea2108746573" + "743433333100eb210874" + "6573743433333200ec2108746573743433333300ed2108746573743433333400ee2108746573743433333500ef2108" + "746573743433333600f0" + "2108746573743433333700f12108746573743433333800f22108746573743433333900f32108746573743433343000" + "f4210874657374343334" + "3100f52108746573743433343200f62108746573743433343300f72108746573743433343400f82108746573743433" + "343500f9210874657374" + "3433343600fa2108746573743433343700fb2108746573743433343800fc2108746573743433343900fd2108746573" + "743433353000fe210874" + "6573743433353100ff2108746573743433353200802208746573743433353300812208746573743433353400822208" + "74657374343335350083" + "2208746573743433353600842208746573743433353700852208746573743433353800862208746573743433353900" + "87220874657374343336" + "30008822087465737434333631008922087465737434333632008a22087465737434333633008b2208746573743433" + "3634008c220874657374" + "34333635008d22087465737434333636008e22087465737434333637008f2208746573743433363800902208746573" + "74343336390091220874" + "6573743433373000922208746573743433373100932208746573743433373200942208746573743433373300952208" + "74657374343337340096" + "2208746573743433373500972208746573743433373600982208746573743433373700992208746573743433373800" + "9a220874657374343337" + "39009b22087465737434333830009c22087465737434333831009d22087465737434333832009e2208746573743433" + "3833009f220874657374" + "3433383400a02208746573743433383500a12208746573743433383600a22208746573743433383700a32208746573" + "743433383800a4220874" + "6573743433383900a52208746573743433393000a62208746573743433393100a72208746573743433393200a82208" + "746573743433393300a9" + "2208746573743433393400aa2208746573743433393500ab2208746573743433393600ac2208746573743433393700" + "ad220874657374343339" + "3800ae2208746573743433393900af2208746573743434303000b02208746573743434303100b12208746573743434" + "303200b2220874657374" + "3434303300b32208746573743434303400b42208746573743434303500b52208746573743434303600b62208746573" + "743434303700b7220874" + "6573743434303800b82208746573743434303900b92208746573743434313000ba2208746573743434313100bb2208" + "746573743434313200bc" + "2208746573743434313300bd2208746573743434313400be2208746573743434313500bf2208746573743434313600" + "c0220874657374343431" + "3700c12208746573743434313800c22208746573743434313900c32208746573743434323000c42208746573743434" + "323100c5220874657374" + "3434323200c62208746573743434323300c72208746573743434323400c82208746573743434323500c92208746573" + "743434323600ca220874" + "6573743434323700cb2208746573743434323800cc2208746573743434323900cd2208746573743434333000ce2208" + "746573743434333100cf" + "2208746573743434333200d02208746573743434333300d12208746573743434333400d22208746573743434333500" + "d3220874657374343433" + "3600d42208746573743434333700d52208746573743434333800d62208746573743434333900d72208746573743434" + "343000d8220874657374" + "3434343100d92208746573743434343200da2208746573743434343300db2208746573743434343400dc2208746573" + "743434343500dd220874" + "6573743434343600de2208746573743434343700df2208746573743434343800e02208746573743434343900e12208" + "746573743434353000e2" + "2208746573743434353100e32208746573743434353200e42208746573743434353300e52208746573743434353400" + "e6220874657374343435" + "3500e72208746573743434353600e82208746573743434353700e92208746573743434353800ea2208746573743434" + "353900eb220874657374" + "3434363000ec2208746573743434363100ed2208746573743434363200ee2208746573743434363300ef2208746573" + "743434363400f0220874" + "6573743434363500f12208746573743434363600f22208746573743434363700f32208746573743434363800f42208" + "746573743434363900f5" + "2208746573743434373000f62208746573743434373100f72208746573743434373200f82208746573743434373300" + "f9220874657374343437" + "3400fa2208746573743434373500fb2208746573743434373600fc2208746573743434373700fd2208746573743434" + "373800fe220874657374" + "3434373900ff2208746573743434383000802308746573743434383100812308746573743434383200822308746573" + "74343438330083230874" + "6573743434383400842308746573743434383500852308746573743434383600862308746573743434383700872308" + "74657374343438380088" + "23087465737434343839008923087465737434343930008a23087465737434343931008b2308746573743434393200" + "8c230874657374343439" + "33008d23087465737434343934008e23087465737434343935008f2308746573743434393600902308746573743434" + "39370091230874657374" + "3434393800922308746573743434393900932308746573743435303000942308746573743435303100952308746573" + "74343530320096230874" + "65737434353033009723087465737434353034009823087465737434353035009923087465737434353036009a2308" + "7465737434353037009b" + "23087465737434353038009c23087465737434353039009d23087465737434353130009e2308746573743435313100" + "9f230874657374343531" + "3200a02308746573743435313300a12308746573743435313400a22308746573743435313500a32308746573743435" + "313600a4230874657374" + "3435313700a52308746573743435313800a62308746573743435313900a72308746573743435323000a82308746573" + "743435323100a9230874" + "6573743435323200aa2308746573743435323300ab2308746573743435323400ac2308746573743435323500ad2308" + "746573743435323600ae" + "2308746573743435323700af2308746573743435323800b02308746573743435323900b12308746573743435333000" + "b2230874657374343533" + "3100b32308746573743435333200b42308746573743435333300b52308746573743435333400b62308746573743435" + "333500b7230874657374" + "3435333600b82308746573743435333700b92308746573743435333800ba2308746573743435333900bb2308746573" + "743435343000bc230874" + "6573743435343100bd2308746573743435343200be2308746573743435343300bf2308746573743435343400c02308" + "746573743435343500c1" + "2308746573743435343600c22308746573743435343700c32308746573743435343800c42308746573743435343900" + "c5230874657374343535" + "3000c62308746573743435353100c72308746573743435353200c82308746573743435353300c92308746573743435" + "353400ca230874657374" + "3435353500cb2308746573743435353600cc2308746573743435353700cd2308746573743435353800ce2308746573" + "743435353900cf230874" + "6573743435363000d02308746573743435363100d12308746573743435363200d22308746573743435363300d32308" + "746573743435363400d4" + "2308746573743435363500d52308746573743435363600d62308746573743435363700d72308746573743435363800" + "d8230874657374343536" + "3900d92308746573743435373000da2308746573743435373100db2308746573743435373200dc2308746573743435" + "373300dd230874657374" + "3435373400de2308746573743435373500df2308746573743435373600e02308746573743435373700e12308746573" + "743435373800e2230874" + "6573743435373900e32308746573743435383000e42308746573743435383100e52308746573743435383200e62308" + "746573743435383300e7" + "2308746573743435383400e82308746573743435383500e92308746573743435383600ea2308746573743435383700" + "eb230874657374343538" + "3800ec2308746573743435383900ed2308746573743435393000ee2308746573743435393100ef2308746573743435" + "393200f0230874657374" + "3435393300f12308746573743435393400f22308746573743435393500f32308746573743435393600f42308746573" + "743435393700f5230874" + "6573743435393800f62308746573743435393900f72308746573743436303000f82308746573743436303100f92308" + "746573743436303200fa" + "2308746573743436303300fb2308746573743436303400fc2308746573743436303500fd2308746573743436303600" + "fe230874657374343630" + "3700ff2308746573743436303800802408746573743436303900812408746573743436313000822408746573743436" + "31310083240874657374" + "3436313200842408746573743436313300852408746573743436313400862408746573743436313500872408746573" + "74343631360088240874" + "65737434363137008924087465737434363138008a24087465737434363139008b24087465737434363230008c2408" + "7465737434363231008d" + "24087465737434363232008e24087465737434363233008f2408746573743436323400902408746573743436323500" + "91240874657374343632" + "3600922408746573743436323700932408746573743436323800942408746573743436323900952408746573743436" + "33300096240874657374" + "34363331009724087465737434363332009824087465737434363333009924087465737434363334009a2408746573" + "7434363335009b240874" + "65737434363336009c24087465737434363337009d24087465737434363338009e24087465737434363339009f2408" + "746573743436343000a0" + "2408746573743436343100a12408746573743436343200a22408746573743436343300a32408746573743436343400" + "a4240874657374343634" + "3500a52408746573743436343600a62408746573743436343700a72408746573743436343800a82408746573743436" + "343900a9240874657374" + "3436353000aa2408746573743436353100ab2408746573743436353200ac2408746573743436353300ad2408746573" + "743436353400ae240874" + "6573743436353500af2408746573743436353600b02408746573743436353700b12408746573743436353800b22408" + "746573743436353900b3" + "2408746573743436363000b42408746573743436363100b52408746573743436363200b62408746573743436363300" + "b7240874657374343636" + "3400b82408746573743436363500b92408746573743436363600ba2408746573743436363700bb2408746573743436" + "363800bc240874657374" + "3436363900bd2408746573743436373000be2408746573743436373100bf2408746573743436373200c02408746573" + "743436373300c1240874" + "6573743436373400c22408746573743436373500c32408746573743436373600c42408746573743436373700c52408" + "746573743436373800c6" + "2408746573743436373900c72408746573743436383000c82408746573743436383100c92408746573743436383200" + "ca240874657374343638" + "3300cb2408746573743436383400cc2408746573743436383500cd2408746573743436383600ce2408746573743436" + "383700cf240874657374" + "3436383800d02408746573743436383900d12408746573743436393000d22408746573743436393100d32408746573" + "743436393200d4240874" + "6573743436393300d52408746573743436393400d62408746573743436393500d72408746573743436393600d82408" + "746573743436393700d9" + "2408746573743436393800da2408746573743436393900db2408746573743437303000dc2408746573743437303100" + "dd240874657374343730" + "3200de2408746573743437303300df2408746573743437303400e02408746573743437303500e12408746573743437" + "303600e2240874657374" + "3437303700e32408746573743437303800e42408746573743437303900e52408746573743437313000e62408746573" + "743437313100e7240874" + "6573743437313200e82408746573743437313300e92408746573743437313400ea2408746573743437313500eb2408" + "746573743437313600ec" + "2408746573743437313700ed2408746573743437313800ee2408746573743437313900ef2408746573743437323000" + "f0240874657374343732" + "3100f12408746573743437323200f22408746573743437323300f32408746573743437323400f42408746573743437" + "323500f5240874657374" + "3437323600f62408746573743437323700f72408746573743437323800f82408746573743437323900f92408746573" + "743437333000fa240874" + "6573743437333100fb2408746573743437333200fc2408746573743437333300fd2408746573743437333400fe2408" + "746573743437333500ff" + "2408746573743437333600802508746573743437333700812508746573743437333800822508746573743437333900" + "83250874657374343734" + "3000842508746573743437343100852508746573743437343200862508746573743437343300872508746573743437" + "34340088250874657374" + "34373435008925087465737434373436008a25087465737434373437008b25087465737434373438008c2508746573" + "7434373439008d250874" + "65737434373530008e25087465737434373531008f2508746573743437353200902508746573743437353300912508" + "74657374343735340092" + "2508746573743437353500932508746573743437353600942508746573743437353700952508746573743437353800" + "96250874657374343735" + "39009725087465737434373630009825087465737434373631009925087465737434373632009a2508746573743437" + "3633009b250874657374" + "34373634009c25087465737434373635009d25087465737434373636009e25087465737434373637009f2508746573" + "743437363800a0250874" + "6573743437363900a12508746573743437373000a22508746573743437373100a32508746573743437373200a42508" + "746573743437373300a5" + "2508746573743437373400a62508746573743437373500a72508746573743437373600a82508746573743437373700" + "a9250874657374343737" + "3800aa2508746573743437373900ab2508746573743437383000ac2508746573743437383100ad2508746573743437" + "383200ae250874657374" + "3437383300af2508746573743437383400b02508746573743437383500b12508746573743437383600b22508746573" + "743437383700b3250874" + "6573743437383800b42508746573743437383900b52508746573743437393000b62508746573743437393100b72508" + "746573743437393200b8" + "2508746573743437393300b92508746573743437393400ba2508746573743437393500bb2508746573743437393600" + "bc250874657374343739" + "3700bd2508746573743437393800be2508746573743437393900bf2508746573743438303000c02508746573743438" + "303100c1250874657374" + "3438303200c22508746573743438303300c32508746573743438303400c42508746573743438303500c52508746573" + "743438303600c6250874" + "6573743438303700c72508746573743438303800c82508746573743438303900c92508746573743438313000ca2508" + "746573743438313100cb" + "2508746573743438313200cc2508746573743438313300cd2508746573743438313400ce2508746573743438313500" + "cf250874657374343831" + "3600d02508746573743438313700d12508746573743438313800d22508746573743438313900d32508746573743438" + "323000d4250874657374" + "3438323100d52508746573743438323200d62508746573743438323300d72508746573743438323400d82508746573" + "743438323500d9250874" + "6573743438323600da2508746573743438323700db2508746573743438323800dc2508746573743438323900dd2508" + "746573743438333000de" + "2508746573743438333100df2508746573743438333200e02508746573743438333300e12508746573743438333400" + "e2250874657374343833" + "3500e32508746573743438333600e42508746573743438333700e52508746573743438333800e62508746573743438" + "333900e7250874657374" + "3438343000e82508746573743438343100e92508746573743438343200ea2508746573743438343300eb2508746573" + "743438343400ec250874" + "6573743438343500ed2508746573743438343600ee2508746573743438343700ef2508746573743438343800f02508" + "746573743438343900f1" + "2508746573743438353000f22508746573743438353100f32508746573743438353200f42508746573743438353300" + "f5250874657374343835" + "3400f62508746573743438353500f72508746573743438353600f82508746573743438353700f92508746573743438" + "353800fa250874657374" + "3438353900fb2508746573743438363000fc2508746573743438363100fd2508746573743438363200fe2508746573" + "743438363300ff250874" + "6573743438363400802608746573743438363500812608746573743438363600822608746573743438363700832608" + "74657374343836380084" + "2608746573743438363900852608746573743438373000862608746573743438373100872608746573743438373200" + "88260874657374343837" + "33008926087465737434383734008a26087465737434383735008b26087465737434383736008c2608746573743438" + "3737008d260874657374" + "34383738008e26087465737434383739008f2608746573743438383000902608746573743438383100912608746573" + "74343838320092260874" + "6573743438383300932608746573743438383400942608746573743438383500952608746573743438383600962608" + "74657374343838370097" + "26087465737434383838009826087465737434383839009926087465737434383930009a2608746573743438393100" + "9b260874657374343839" + "32009c26087465737434383933009d26087465737434383934009e26087465737434383935009f2608746573743438" + "393600a0260874657374" + "3438393700a12608746573743438393800a22608746573743438393900a32608746573743439303000a42608746573" + "743439303100a5260874" + "6573743439303200a62608746573743439303300a72608746573743439303400a82608746573743439303500a92608" + "746573743439303600aa" + "2608746573743439303700ab2608746573743439303800ac2608746573743439303900ad2608746573743439313000" + "ae260874657374343931" + "3100af2608746573743439313200b02608746573743439313300b12608746573743439313400b22608746573743439" + "313500b3260874657374" + "3439313600b42608746573743439313700b52608746573743439313800b62608746573743439313900b72608746573" + "743439323000b8260874" + "6573743439323100b92608746573743439323200ba2608746573743439323300bb2608746573743439323400bc2608" + "746573743439323500bd" + "2608746573743439323600be2608746573743439323700bf2608746573743439323800c02608746573743439323900" + "c1260874657374343933" + "3000c22608746573743439333100c32608746573743439333200c42608746573743439333300c52608746573743439" + "333400c6260874657374" + "3439333500c72608746573743439333600c82608746573743439333700c92608746573743439333800ca2608746573" + "743439333900cb260874" + "6573743439343000cc2608746573743439343100cd2608746573743439343200ce2608746573743439343300cf2608" + "746573743439343400d0" + "2608746573743439343500d12608746573743439343600d22608746573743439343700d32608746573743439343800" + "d4260874657374343934" + "3900d52608746573743439353000d62608746573743439353100d72608746573743439353200d82608746573743439" + "353300d9260874657374" + "3439353400da2608746573743439353500db2608746573743439353600dc2608746573743439353700dd2608746573" + "743439353800de260874" + "6573743439353900df2608746573743439363000e02608746573743439363100e12608746573743439363200e22608" + "746573743439363300e3" + "2608746573743439363400e42608746573743439363500e52608746573743439363600e62608746573743439363700" + "e7260874657374343936" + "3800e82608746573743439363900e92608746573743439373000ea2608746573743439373100eb2608746573743439" + "373200ec260874657374" + "3439373300ed2608746573743439373400ee2608746573743439373500ef2608746573743439373600f02608746573" + "743439373700f1260874" + "6573743439373800f22608746573743439373900f32608746573743439383000f42608746573743439383100f52608" + "746573743439383200f6" + "2608746573743439383300f72608746573743439383400f82608746573743439383500f92608746573743439383600" + "fa260874657374343938" + "3700fb2608746573743439383800fc2608746573743439383900fd2608746573743439393000fe2608746573743439" + "393100ff260874657374" + "3439393200802708746573743439393300812708746573743439393400822708746573743439393500832708746573" + "74343939360084270874" + "657374343939370085270874657374343939380086270874657374343939390087270ac2b80288270700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b"; extern std::string const opcReservedHex = - "0061736d010000000105016000017f03030200000404017000010503010001060b027f0141000b7e0142000b07140110616c6c5f696e737472" - "756374696f6e7300010907010041000b01000a53020400412a0b4c02017f017e01010101010101010101010101010101010101010101010101" - "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101410b0b0b0a010041000b04746573" + "0061736d010000000105016000017f03030200000404017000010503010001060b027f0141000b7e0142000b071401" + "10616c6c5f696e737472" + "756374696f6e7300010907010041000b01000a53020400412a0b4c02017f017e010101010101010101010101010101" + "01010101010101010101" + "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101410b0b0b" + "0a010041000b04746573" "74"; diff --git a/src/test/basics/Number_test.cpp b/src/test/basics/Number_test.cpp index 247e8a1d38..8d879a4d2b 100644 --- a/src/test/basics/Number_test.cpp +++ b/src/test/basics/Number_test.cpp @@ -1556,7 +1556,8 @@ public: Number{false, 1'746'901'684'478'673'451ll, -17, Number::normalized{}}}, {Number{false, Number::maxMantissa() - 9, 0, Number::normalized{}}, Number{false, 1'846'901'684'478'673'451ll, -17, Number::normalized{}}}, - {Number{Number::maxRep}, Number{false, 1'861'728'612'932'620'011ll, -17, Number::normalized{}}}}); + {Number{Number::maxRep}, + Number{false, 1'861'728'612'932'620'011ll, -17, Number::normalized{}}}}); if (Number::getMantissaScale() == MantissaRange::small) { diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h index ea1e171332..63269bc98b 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/src/xrpld/app/wasm/HostFunc.h @@ -267,7 +267,8 @@ struct HostFunctions } virtual Expected - credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const + credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) + const { return Unexpected(HostFunctionError::INTERNAL); } diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index 048f9338d7..da5e0e0708 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -59,7 +59,8 @@ class WasmHostFunctionsImpl : public HostFunctions } public: - WasmHostFunctionsImpl(ApplyContext& ct, Keylet const& leKey) : HostFunctions(ct.journal), ctx_(ct), leKey_(leKey) + WasmHostFunctionsImpl(ApplyContext& ct, Keylet const& leKey) + : HostFunctions(ct.journal), ctx_(ct), leKey_(leKey) { } @@ -149,7 +150,8 @@ public: updateData(Slice const& data) override; Expected - checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const override; + checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) + const override; Expected computeSha512HalfHash(Slice const& data) const override; @@ -164,7 +166,8 @@ public: checkKeylet(AccountID const& account, std::uint32_t seq) const override; Expected - credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const override; + credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) + const override; Expected didKeylet(AccountID const& account) const override; @@ -179,7 +182,8 @@ public: escrowKeylet(AccountID const& account, std::uint32_t seq) const override; Expected - lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) const override; + lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) + const override; Expected mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const override; @@ -197,7 +201,8 @@ public: oracleKeylet(AccountID const& account, std::uint32_t docId) const override; Expected - paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) const override; + paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) + const override; Expected permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) const override; diff --git a/src/xrpld/app/wasm/HostFuncWrapper.h b/src/xrpld/app/wasm/HostFuncWrapper.h index 601e9372dd..7dfba17f38 100644 --- a/src/xrpld/app/wasm/HostFuncWrapper.h +++ b/src/xrpld/app/wasm/HostFuncWrapper.h @@ -46,7 +46,10 @@ getTxNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* r using getCurrentLedgerObjNestedField_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -getCurrentLedgerObjNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +getCurrentLedgerObjNestedField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); using getLedgerObjNestedField_proto = int32_t(int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* @@ -70,7 +73,10 @@ getTxNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t using getCurrentLedgerObjNestedArrayLen_proto = int32_t(uint8_t const*, int32_t); wasm_trap_t* -getCurrentLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +getCurrentLedgerObjNestedArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); using getLedgerObjNestedArrayLen_proto = int32_t(int32_t, uint8_t const*, int32_t); wasm_trap_t* @@ -80,7 +86,8 @@ using updateData_proto = int32_t(uint8_t const*, int32_t); wasm_trap_t* updateData_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using checkSignature_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t const*, int32_t); +using checkSignature_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t const*, int32_t); wasm_trap_t* checkSignature_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -92,24 +99,35 @@ using accountKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* accountKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using ammKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using ammKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using checkKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using checkKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* checkKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using credentialKeylet_proto = - int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using credentialKeylet_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t); wasm_trap_t* credentialKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using delegateKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using delegateKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* delegateKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using depositPreauthKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using depositPreauthKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* depositPreauthKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -117,41 +135,62 @@ using didKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* didKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using escrowKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using escrowKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* escrowKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using lineKeylet_proto = - int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using lineKeylet_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t); wasm_trap_t* lineKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using mptIssuanceKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using mptIssuanceKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using mptokenKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using mptokenKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* mptokenKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using nftOfferKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using nftOfferKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using offerKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using offerKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* offerKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using oracleKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using oracleKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* oracleKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using paychanKeylet_proto = - int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using paychanKeylet_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t); wasm_trap_t* paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using permissionedDomainKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using permissionedDomainKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -159,11 +198,13 @@ using signersKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* signersKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using ticketKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using ticketKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using vaultKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using vaultKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* vaultKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -227,19 +268,23 @@ using floatCompare_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int3 wasm_trap_t* floatCompare_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatAdd_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); +using floatAdd_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatSubtract_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); +using floatSubtract_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* floatSubtract_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatMultiply_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); +using floatMultiply_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* floatMultiply_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatDivide_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); +using floatDivide_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* floatDivide_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); diff --git a/src/xrpld/app/wasm/ParamsHelper.h b/src/xrpld/app/wasm/ParamsHelper.h index 40b9405dcc..5490411226 100644 --- a/src/xrpld/app/wasm/ParamsHelper.h +++ b/src/xrpld/app/wasm/ParamsHelper.h @@ -50,9 +50,11 @@ struct WasmImportFunc typedef std::pair WasmUserData; typedef std::vector ImportVec; -#define WASM_IMPORT_FUNC(v, f, ...) WasmImpFunc(v, #f, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) +#define WASM_IMPORT_FUNC(v, f, ...) \ + WasmImpFunc(v, #f, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) -#define WASM_IMPORT_FUNC2(v, f, n, ...) WasmImpFunc(v, n, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) +#define WASM_IMPORT_FUNC2(v, f, n, ...) \ + WasmImpFunc(v, n, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) template void @@ -87,7 +89,8 @@ WasmImpRet(WasmImportFunc& e) e.result = WT_I64; else if constexpr (std::is_void_v) e.result.reset(); -#if (defined(__GNUC__) && (__GNUC__ >= 14)) || ((defined(__clang_major__)) && (__clang_major__ >= 18)) +#if (defined(__GNUC__) && (__GNUC__ >= 14)) || \ + ((defined(__clang_major__)) && (__clang_major__ >= 18)) else static_assert(false, "Unsupported return type"); #endif @@ -108,7 +111,12 @@ WasmImpFuncHelper(WasmImportFunc& e) template void -WasmImpFunc(ImportVec& v, std::string_view imp_name, void* f_wrap, void* data = nullptr, uint32_t gas = 0) +WasmImpFunc( + ImportVec& v, + std::string_view imp_name, + void* f_wrap, + void* data = nullptr, + uint32_t gas = 0) { WasmImportFunc e; e.name = imp_name; diff --git a/src/xrpld/app/wasm/WasmiVM.h b/src/xrpld/app/wasm/WasmiVM.h index 10381b3cc5..b49517633c 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -60,13 +60,19 @@ struct WasmVec } }; -using WasmValtypeVec = WasmVec; +using WasmValtypeVec = + WasmVec; using WasmValVec = WasmVec; -using WasmExternVec = WasmVec; -using WasmExporttypeVec = - WasmVec; -using WasmImporttypeVec = - WasmVec; +using WasmExternVec = + WasmVec; +using WasmExporttypeVec = WasmVec< + wasm_exporttype_vec_t, + &wasm_exporttype_vec_new_uninitialized, + &wasm_exporttype_vec_delete>; +using WasmImporttypeVec = WasmVec< + wasm_importtype_vec_t, + &wasm_importtype_vec_new_uninitialized, + &wasm_importtype_vec_delete>; struct WasmiResult { @@ -100,7 +106,12 @@ struct InstanceWrapper private: static InstancePtr - init(StorePtr& s, ModulePtr& m, WasmExternVec& expt, WasmExternVec const& imports, beast::Journal j); + init( + StorePtr& s, + ModulePtr& m, + WasmExternVec& expt, + WasmExternVec const& imports, + beast::Journal j); public: InstanceWrapper(); @@ -145,7 +156,12 @@ public: ModuleWrapper(ModuleWrapper&& o); ModuleWrapper& operator=(ModuleWrapper&& o); - ModuleWrapper(StorePtr& s, Bytes const& wasmBin, bool instantiate, ImportVec const& imports, beast::Journal j); + ModuleWrapper( + StorePtr& s, + Bytes const& wasmBin, + bool instantiate, + ImportVec const& imports, + beast::Journal j); ~ModuleWrapper() = default; operator bool() const; @@ -290,7 +306,12 @@ private: template inline WasmiResult - call(FuncInfo const& f, std::vector& in, uint8_t const* d, int32_t sz, Types&&... args); + call( + FuncInfo const& f, + std::vector& in, + uint8_t const* d, + int32_t sz, + Types&&... args); template inline WasmiResult diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index 58420e5855..77a9d1e353 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -25,7 +25,10 @@ WasmHostFunctionsImpl::updateData(Slice const& data) // ========================================================= Expected -WasmHostFunctionsImpl::checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const +WasmHostFunctionsImpl::checkSignature( + Slice const& message, + Slice const& signature, + Slice const& pubkey) const { if (!publicKeyType(pubkey)) return Unexpected(HostFunctionError::INVALID_PARAMS); diff --git a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp index fca532407a..f66e01d115 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp @@ -143,7 +143,8 @@ public: auto const data = msg.getData(); #ifdef DEBUG_OUTPUT - std::cout << "m: " << std::setw(20) << mantissa() << ", e: " << std::setw(12) << exponent() << ", hex: "; + std::cout << "m: " << std::setw(20) << mantissa() << ", e: " << std::setw(12) << exponent() + << ", hex: "; std::cout << std::hex << std::uppercase << std::setfill('0'); for (auto const& c : data) std::cout << std::setw(2) << (unsigned)c << " "; @@ -162,7 +163,8 @@ struct FloatState MantissaRange::mantissa_scale oldScale_; bool good_; - FloatState(int32_t mode) : oldMode_(Number::getround()), oldScale_(Number::getMantissaScale()), good_(false) + FloatState(int32_t mode) + : oldMode_(Number::getround()), oldScale_(Number::getMantissaScale()), good_(false) { if (mode < Number::rounding_mode::to_nearest || mode > Number::rounding_mode::upward) return; diff --git a/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp b/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp index 64afce9d21..559267b3f0 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp @@ -38,8 +38,10 @@ WasmHostFunctionsImpl::checkKeylet(AccountID const& account, std::uint32_t seq) } Expected -WasmHostFunctionsImpl::credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) - const +WasmHostFunctionsImpl::credentialKeylet( + AccountID const& subject, + AccountID const& issuer, + Slice const& credentialType) const { if (!subject || !issuer) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -73,7 +75,8 @@ WasmHostFunctionsImpl::delegateKeylet(AccountID const& account, AccountID const& } Expected -WasmHostFunctionsImpl::depositPreauthKeylet(AccountID const& account, AccountID const& authorize) const +WasmHostFunctionsImpl::depositPreauthKeylet(AccountID const& account, AccountID const& authorize) + const { if (!account || !authorize) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -93,7 +96,10 @@ WasmHostFunctionsImpl::escrowKeylet(AccountID const& account, std::uint32_t seq) } Expected -WasmHostFunctionsImpl::lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) const +WasmHostFunctionsImpl::lineKeylet( + AccountID const& account1, + AccountID const& account2, + Currency const& currency) const { if (!account1 || !account2) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -156,7 +162,10 @@ WasmHostFunctionsImpl::oracleKeylet(AccountID const& account, std::uint32_t docu } Expected -WasmHostFunctionsImpl::paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) const +WasmHostFunctionsImpl::paychanKeylet( + AccountID const& account, + AccountID const& destination, + std::uint32_t seq) const { if (!account || !destination) return Unexpected(HostFunctionError::INVALID_ACCOUNT); diff --git a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp b/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp index 14a13a12c8..e7516b3567 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp @@ -14,7 +14,9 @@ WasmHostFunctionsImpl::trace(std::string_view const& msg, Slice const& data, boo { if (!asHex) { - log(msg, [&data] { return std::string_view(reinterpret_cast(data.data()), data.size()); }); + log(msg, [&data] { + return std::string_view(reinterpret_cast(data.data()), data.size()); + }); } else { diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index bbe6003d63..2e22dca4bd 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -15,7 +15,12 @@ namespace xrpl { using SFieldCRef = std::reference_wrapper; static int32_t -setData(InstanceWrapper const* runtime, int32_t dst, int32_t dstSize, uint8_t const* src, int32_t srcSize) +setData( + InstanceWrapper const* runtime, + int32_t dst, + int32_t dstSize, + uint8_t const* src, + int32_t srcSize) { if (!srcSize) return 0; // LCOV_EXCL_LINE @@ -219,8 +224,9 @@ getDataAsset(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) if (slice->size() == (AccountID::bytes + Currency::bytes)) { - auto const issue = - Issue(Currency::fromVoid(slice->data()), AccountID::fromVoid(slice->data() + Currency::bytes)); + auto const issue = Issue( + Currency::fromVoid(slice->data()), + AccountID::fromVoid(slice->data() + Currency::bytes)); if (issue.native()) return Unexpected(HostFunctionError::INVALID_PARAMS); @@ -275,13 +281,23 @@ returnResult( { return hfResult( results, - setData(runtime, params->data[index].of.i32, params->data[index + 1].of.i32, res->data(), res->size())); + setData( + runtime, + params->data[index].of.i32, + params->data[index + 1].of.i32, + res->data(), + res->size())); } else if constexpr (std::is_same_v) { return hfResult( results, - setData(runtime, params->data[index].of.i32, params->data[index + 1].of.i32, res->data(), res->size())); + setData( + runtime, + params->data[index].of.i32, + params->data[index + 1].of.i32, + res->data(), + res->size())); } else if constexpr (std::is_same_v) { @@ -322,9 +338,9 @@ checkGas(void* env) auto const* runtime = reinterpret_cast(hf->getRT()); if (!runtime) { - wasm_trap_t* trap = - reinterpret_cast(WasmEngine::instance().newTrap("hf no runtime")); // LCOV_EXCL_LINE - return Unexpected(trap); // LCOV_EXCL_LINE + wasm_trap_t* trap = reinterpret_cast( + WasmEngine::instance().newTrap("hf no runtime")); // LCOV_EXCL_LINE + return Unexpected(trap); // LCOV_EXCL_LINE } int64_t const gas = runtime->getGas(); @@ -333,14 +349,15 @@ checkGas(void* env) if (runtime->setGas(x) < 0) { - wasm_trap_t* trap = - reinterpret_cast(WasmEngine::instance().newTrap("can't set gas")); // LCOV_EXCL_LINE - return Unexpected(trap); // LCOV_EXCL_LINE + wasm_trap_t* trap = reinterpret_cast( + WasmEngine::instance().newTrap("can't set gas")); // LCOV_EXCL_LINE + return Unexpected(trap); // LCOV_EXCL_LINE } if (gas < impFunc.gas) { - wasm_trap_t* trap = reinterpret_cast(WasmEngine::instance().newTrap("hf out of gas")); + wasm_trap_t* trap = + reinterpret_cast(WasmEngine::instance().newTrap("hf out of gas")); return Unexpected(trap); } @@ -530,7 +547,10 @@ getTxNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* r } wasm_trap_t* -getCurrentLedgerObjNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getCurrentLedgerObjNestedField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -543,7 +563,8 @@ getCurrentLedgerObjNestedField_wrap(void* env, wasm_val_vec_t const* params, was { return hfResult(results, bytes.error()); } - return returnResult(runtime, params, results, hf->getCurrentLedgerObjNestedField(*bytes), index); + return returnResult( + runtime, params, results, hf->getCurrentLedgerObjNestedField(*bytes), index); } wasm_trap_t* @@ -567,7 +588,8 @@ getLedgerObjNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_v return hfResult(results, bytes.error()); } - return returnResult(runtime, params, results, hf->getLedgerObjNestedField(*cache, *bytes), index); + return returnResult( + runtime, params, results, hf->getLedgerObjNestedField(*cache, *bytes), index); } wasm_trap_t* @@ -649,7 +671,10 @@ getTxNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t } wasm_trap_t* -getCurrentLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getCurrentLedgerObjNestedArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -663,7 +688,8 @@ getCurrentLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, return hfResult(results, bytes.error()); } - return returnResult(runtime, params, results, hf->getCurrentLedgerObjNestedArrayLen(*bytes), index); + return returnResult( + runtime, params, results, hf->getCurrentLedgerObjNestedArrayLen(*bytes), index); } wasm_trap_t* getLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) @@ -685,7 +711,8 @@ getLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_va { return hfResult(results, bytes.error()); } - return returnResult(runtime, params, results, hf->getLedgerObjNestedArrayLen(*cache, *bytes), index); + return returnResult( + runtime, params, results, hf->getLedgerObjNestedArrayLen(*cache, *bytes), index); } wasm_trap_t* @@ -733,7 +760,8 @@ checkSignature_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res return hfResult(results, pubkey.error()); } - return returnResult(runtime, params, results, hf->checkSignature(*message, *signature, *pubkey), index); + return returnResult( + runtime, params, results, hf->checkSignature(*message, *signature, *pubkey), index); } wasm_trap_t* @@ -792,7 +820,8 @@ ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, issue2.error()); } - return returnResult(runtime, params, results, hf->ammKeylet(issue1.value(), issue2.value()), index); + return returnResult( + runtime, params, results, hf->ammKeylet(issue1.value(), issue2.value()), index); } wasm_trap_t* @@ -846,7 +875,8 @@ credentialKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* r return hfResult(results, credType.error()); } - return returnResult(runtime, params, results, hf->credentialKeylet(*subj, *iss, *credType), index); + return returnResult( + runtime, params, results, hf->credentialKeylet(*subj, *iss, *credType), index); } wasm_trap_t* @@ -870,7 +900,8 @@ delegateKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res return hfResult(results, authorize.error()); } - return returnResult(runtime, params, results, hf->delegateKeylet(acc.value(), authorize.value()), index); + return returnResult( + runtime, params, results, hf->delegateKeylet(acc.value(), authorize.value()), index); } wasm_trap_t* @@ -894,7 +925,8 @@ depositPreauthKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_ return hfResult(results, authorize.error()); } - return returnResult(runtime, params, results, hf->depositPreauthKeylet(acc.value(), authorize.value()), index); + return returnResult( + runtime, params, results, hf->depositPreauthKeylet(acc.value(), authorize.value()), index); } wasm_trap_t* @@ -966,7 +998,12 @@ lineKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results return hfResult(results, currency.error()); } - return returnResult(runtime, params, results, hf->lineKeylet(acc1.value(), acc2.value(), currency.value()), index); + return returnResult( + runtime, + params, + results, + hf->lineKeylet(acc1.value(), acc2.value(), currency.value()), + index); } wasm_trap_t* @@ -990,7 +1027,8 @@ mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* return hfResult(results, seq.error()); } - return returnResult(runtime, params, results, hf->mptIssuanceKeylet(acc.value(), seq.value()), index); + return returnResult( + runtime, params, results, hf->mptIssuanceKeylet(acc.value(), seq.value()), index); } wasm_trap_t* @@ -1044,7 +1082,8 @@ nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res return hfResult(results, seq.error()); } - return returnResult(runtime, params, results, hf->nftOfferKeylet(acc.value(), seq.value()), index); + return returnResult( + runtime, params, results, hf->nftOfferKeylet(acc.value(), seq.value()), index); } wasm_trap_t* @@ -1121,7 +1160,8 @@ paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu return hfResult(results, seq.error()); } - return returnResult(runtime, params, results, hf->paychanKeylet(acc.value(), dest.value(), seq.value()), index); + return returnResult( + runtime, params, results, hf->paychanKeylet(acc.value(), dest.value(), seq.value()), index); } wasm_trap_t* @@ -1145,7 +1185,8 @@ permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_ return hfResult(results, seq.error()); } - return returnResult(runtime, params, results, hf->permissionedDomainKeylet(acc.value(), seq.value()), index); + return returnResult( + runtime, params, results, hf->permissionedDomainKeylet(acc.value(), seq.value()), index); } wasm_trap_t* @@ -1187,7 +1228,8 @@ ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul return hfResult(results, seq.error()); } - return returnResult(runtime, params, results, hf->ticketKeylet(acc.value(), seq.value()), index); + return returnResult( + runtime, params, results, hf->ticketKeylet(acc.value(), seq.value()), index); } wasm_trap_t* @@ -1833,14 +1875,16 @@ testGetDataIncrement() int index = 0; auto const result = getDataString(&runtime, ¶ms, index); - if (!result || result.value() != std::string_view(reinterpret_cast(buffer.data()), 5) || + if (!result || + result.value() != std::string_view(reinterpret_cast(buffer.data()), 5) || index != 2) return false; } { // test account - AccountID const id(calcAccountID(generateKeyPair(KeyType::secp256k1, generateSeed("alice")).first)); + AccountID const id( + calcAccountID(generateKeyPair(KeyType::secp256k1, generateSeed("alice")).first)); wasm_val_vec_t params = {2, &values[0]}; diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index 99fe4f74d6..a23a2f8972 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -112,7 +112,8 @@ runEscrowWasm( auto& vm = WasmEngine::instance(); // vm.initMaxPages(MAX_PAGES); - auto const ret = vm.run(wasmCode, hfs, funcName, params, createWasmImport(hfs), gasLimit, hfs.getJournal()); + auto const ret = + vm.run(wasmCode, hfs, funcName, params, createWasmImport(hfs), gasLimit, hfs.getJournal()); // std::cout << "runEscrowWasm, mod size: " << wasmCode.size() // << ", gasLimit: " << gasLimit << ", funcName: " << funcName; @@ -142,7 +143,8 @@ preflightEscrowWasm( auto& vm = WasmEngine::instance(); // vm.initMaxPages(MAX_PAGES); - auto const ret = vm.check(wasmCode, hfs, funcName, params, createWasmImport(hfs), hfs.getJournal()); + auto const ret = + vm.check(wasmCode, hfs, funcName, params, createWasmImport(hfs), hfs.getJournal()); return ret; } diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 7472d554c7..50d53b743a 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -30,7 +30,8 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) if (error_message.size) { - j << "WASMI Error: " << msg << ", " << std::string_view(error_message.data, error_message.size - 1); + j << "WASMI Error: " << msg << ", " + << std::string_view(error_message.data, error_message.size - 1); } else j << "WASMI Error: " << msg; @@ -51,10 +52,16 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) } // namespace InstancePtr -InstanceWrapper::init(StorePtr& s, ModulePtr& m, WasmExternVec& expt, WasmExternVec const& imports, beast::Journal j) +InstanceWrapper::init( + StorePtr& s, + ModulePtr& m, + WasmExternVec& expt, + WasmExternVec const& imports, + beast::Journal j) { wasm_trap_t* trap = nullptr; - InstancePtr mi = InstancePtr(wasm_instance_new(s.get(), m.get(), &imports.vec_, &trap), &wasm_instance_delete); + InstancePtr mi = InstancePtr( + wasm_instance_new(s.get(), m.get(), &imports.vec_, &trap), &wasm_instance_delete); if (!mi || trap) { @@ -76,7 +83,11 @@ InstanceWrapper::InstanceWrapper(InstanceWrapper&& o) : instance_(nullptr, &wasm } // LCOV_EXCL_STOP -InstanceWrapper::InstanceWrapper(StorePtr& s, ModulePtr& m, WasmExternVec const& imports, beast::Journal j) +InstanceWrapper::InstanceWrapper( + StorePtr& s, + ModulePtr& m, + WasmExternVec const& imports, + beast::Journal j) : store_(s.get()), instance_(init(s, m, exports_, imports, j)), j_(j) { } @@ -345,7 +356,8 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) wasm_externkind_t const itype = wasm_externtype_kind(wasm_importtype_type(importType)); if ((itype) != WASM_EXTERN_FUNC) - throw std::runtime_error("Invalid import type " + std::to_string(itype)); // LCOV_EXCL_LINE + throw std::runtime_error( + "Invalid import type " + std::to_string(itype)); // LCOV_EXCL_LINE // for multi-module support // if ((W_ENV != modName) && (W_HOST_LIB != modName)) @@ -368,7 +380,11 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) results.release(); wasm_func_t* func = wasm_func_new_with_env( - s.get(), ftype.get(), reinterpret_cast(imp.wrap), (void*)&obj, nullptr); + s.get(), + ftype.get(), + reinterpret_cast(imp.wrap), + (void*)&obj, + nullptr); if (!func) { // LCOV_EXCL_START @@ -416,7 +432,8 @@ ModuleWrapper::getFuncType(std::string_view funcName) const auto const* exp_type(exportTypes_.vec_.data[i]); wasm_name_t const* name = wasm_exporttype_name(exp_type); wasm_externtype_t const* exn_type = wasm_exporttype_type(exp_type); - if (wasm_externtype_kind(exn_type) == WASM_EXTERN_FUNC && funcName == std::string_view(name->data, name->size)) + if (wasm_externtype_kind(exn_type) == WASM_EXTERN_FUNC && + funcName == std::string_view(name->data, name->size)) { return wasm_externtype_as_functype(const_cast(exn_type)); } @@ -502,7 +519,11 @@ WasmiEngine::WasmiEngine() : engine_(init()), store_(nullptr, &wasm_store_delete } int -WasmiEngine::addModule(Bytes const& wasmCode, bool instantiate, ImportVec const& imports, int64_t gas) +WasmiEngine::addModule( + Bytes const& wasmCode, + bool instantiate, + ImportVec const& imports, + int64_t gas) { moduleWrap_.reset(); store_.reset(); // to free the memory before creating new store @@ -640,7 +661,8 @@ WasmiEngine::call(FuncInfo const& f, std::vector& in) // if (NR) { wasm_val_vec_new_uninitialized(&ret, NR); // // wasm_val_vec_new(&ret, NR, &rs[0]); // ret = WASM_ARRAY_VEC(rs); } - wasm_val_vec_t const inv = in.empty() ? wasm_val_vec_t WASM_EMPTY_VEC : wasm_val_vec_t{in.size(), in.data()}; + wasm_val_vec_t const inv = + in.empty() ? wasm_val_vec_t WASM_EMPTY_VEC : wasm_val_vec_t{in.size(), in.data()}; #ifdef SHOW_CALL_TIME auto const start = usecs(); @@ -770,11 +792,12 @@ WasmiEngine::runHlp( if (res.f) throw std::runtime_error("<" + std::string(funcName) + "> failure"); else if (!res.r.vec_.size) - throw std::runtime_error("<" + std::string(funcName) + "> return nothing"); // LCOV_EXCL_LINE + throw std::runtime_error( + "<" + std::string(funcName) + "> return nothing"); // LCOV_EXCL_LINE else if (res.r.vec_.data[0].kind != WASM_I32) throw std::runtime_error( - "<" + std::string(funcName) + - "> return type mismatch, ret: " + std::to_string(static_cast(res.r.vec_.data[0].kind))); + "<" + std::string(funcName) + "> return type mismatch, ret: " + + std::to_string(static_cast(res.r.vec_.data[0].kind))); if (gas == -1) gas = std::numeric_limits::max();