diff --git a/api-augment/dist/interfaces/lookup.js b/api-augment/dist/interfaces/lookup.js index 5f507ad97..8c2c78171 100644 --- a/api-augment/dist/interfaces/lookup.js +++ b/api-augment/dist/interfaces/lookup.js @@ -1564,6 +1564,9 @@ export default { provider: "H256", mutations: "Vec<(H256,ShpTraitsTrieRemoveMutation)>", newRoot: "H256" + }, + ChallengesTickerSet: { + paused: "bool" } } }, @@ -3189,7 +3192,7 @@ export default { }, set_global_parameters: { replicationTarget: "Option", - blockRangeToMaximumThreshold: "Option" + tickRangeToMaximumThreshold: "Option" } } }, @@ -3213,6 +3216,9 @@ export default { }, force_initialise_challenge_cycle: { provider: "H256" + }, + set_paused: { + paused: "bool" } } }, @@ -3980,7 +3986,6 @@ export default { "FailedToEncodeFingerprint", "FailedToDecodeThreshold", "AboveThreshold", - "FailedToConvertBlockNumber", "ThresholdArithmeticError", "FailedTypeConversion", "DividedByZero", @@ -4001,7 +4006,7 @@ export default { "FileSizeCannotBeZero", "NoGlobalReputationWeightSet", "MaximumThresholdCannotBeZero", - "BlockRangeToMaximumThresholdCannotBeZero", + "TickRangeToMaximumThresholdCannotBeZero", "PendingStopStoringRequestNotFound", "MinWaitForStopStoringNotReached", "PendingStopStoringRequestAlreadyExists", @@ -4018,7 +4023,7 @@ export default { ] }, /** - * Lookup420: pallet_proofs_dealer::pallet::Error + * Lookup421: pallet_proofs_dealer::pallet::Error **/ PalletProofsDealerError: { _enum: [ @@ -4047,7 +4052,7 @@ export default { ] }, /** - * Lookup423: pallet_payment_streams::types::FixedRatePaymentStream + * Lookup424: pallet_payment_streams::types::FixedRatePaymentStream **/ PalletPaymentStreamsFixedRatePaymentStream: { rate: "u128", @@ -4056,7 +4061,7 @@ export default { outOfFundsTick: "Option" }, /** - * Lookup424: pallet_payment_streams::types::DynamicRatePaymentStream + * Lookup425: pallet_payment_streams::types::DynamicRatePaymentStream **/ PalletPaymentStreamsDynamicRatePaymentStream: { amountProvided: "u64", @@ -4065,14 +4070,14 @@ export default { outOfFundsTick: "Option" }, /** - * Lookup425: pallet_payment_streams::types::ProviderLastChargeableInfo + * Lookup426: pallet_payment_streams::types::ProviderLastChargeableInfo **/ PalletPaymentStreamsProviderLastChargeableInfo: { lastChargeableTick: "u32", priceIndex: "u128" }, /** - * Lookup426: pallet_payment_streams::pallet::Error + * Lookup427: pallet_payment_streams::pallet::Error **/ PalletPaymentStreamsError: { _enum: [ @@ -4095,7 +4100,7 @@ export default { ] }, /** - * Lookup427: pallet_bucket_nfts::pallet::Error + * Lookup428: pallet_bucket_nfts::pallet::Error **/ PalletBucketNftsError: { _enum: [ @@ -4106,7 +4111,7 @@ export default { ] }, /** - * Lookup428: pallet_nfts::types::CollectionDetails + * Lookup429: pallet_nfts::types::CollectionDetails **/ PalletNftsCollectionDetails: { owner: "AccountId32", @@ -4117,13 +4122,13 @@ export default { attributes: "u32" }, /** - * Lookup433: pallet_nfts::types::CollectionRole + * Lookup434: pallet_nfts::types::CollectionRole **/ PalletNftsCollectionRole: { _enum: ["__Unused0", "Issuer", "Freezer", "__Unused3", "Admin"] }, /** - * Lookup434: pallet_nfts::types::ItemDetails, bounded_collections::bounded_btree_map::BoundedBTreeMap, S>> + * Lookup435: pallet_nfts::types::ItemDetails, bounded_collections::bounded_btree_map::BoundedBTreeMap, S>> **/ PalletNftsItemDetails: { owner: "AccountId32", @@ -4131,42 +4136,42 @@ export default { deposit: "PalletNftsItemDeposit" }, /** - * Lookup435: pallet_nfts::types::ItemDeposit + * Lookup436: pallet_nfts::types::ItemDeposit **/ PalletNftsItemDeposit: { account: "AccountId32", amount: "u128" }, /** - * Lookup440: pallet_nfts::types::CollectionMetadata + * Lookup441: pallet_nfts::types::CollectionMetadata **/ PalletNftsCollectionMetadata: { deposit: "u128", data: "Bytes" }, /** - * Lookup441: pallet_nfts::types::ItemMetadata, StringLimit> + * Lookup442: pallet_nfts::types::ItemMetadata, StringLimit> **/ PalletNftsItemMetadata: { deposit: "PalletNftsItemMetadataDeposit", data: "Bytes" }, /** - * Lookup442: pallet_nfts::types::ItemMetadataDeposit + * Lookup443: pallet_nfts::types::ItemMetadataDeposit **/ PalletNftsItemMetadataDeposit: { account: "Option", amount: "u128" }, /** - * Lookup445: pallet_nfts::types::AttributeDeposit + * Lookup446: pallet_nfts::types::AttributeDeposit **/ PalletNftsAttributeDeposit: { account: "Option", amount: "u128" }, /** - * Lookup449: pallet_nfts::types::PendingSwap, Deadline> + * Lookup450: pallet_nfts::types::PendingSwap, Deadline> **/ PalletNftsPendingSwap: { desiredCollection: "u32", @@ -4175,7 +4180,7 @@ export default { deadline: "u32" }, /** - * Lookup451: pallet_nfts::types::PalletFeature + * Lookup452: pallet_nfts::types::PalletFeature **/ PalletNftsPalletFeature: { _enum: [ @@ -4191,7 +4196,7 @@ export default { ] }, /** - * Lookup452: pallet_nfts::pallet::Error + * Lookup453: pallet_nfts::pallet::Error **/ PalletNftsError: { _enum: [ @@ -4243,39 +4248,39 @@ export default { ] }, /** - * Lookup455: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender + * Lookup456: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender **/ FrameSystemExtensionsCheckNonZeroSender: "Null", /** - * Lookup456: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup457: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: "Null", /** - * Lookup457: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup458: frame_system::extensions::check_tx_version::CheckTxVersion **/ FrameSystemExtensionsCheckTxVersion: "Null", /** - * Lookup458: frame_system::extensions::check_genesis::CheckGenesis + * Lookup459: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: "Null", /** - * Lookup461: frame_system::extensions::check_nonce::CheckNonce + * Lookup462: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: "Compact", /** - * Lookup462: frame_system::extensions::check_weight::CheckWeight + * Lookup463: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: "Null", /** - * Lookup463: pallet_transaction_payment::ChargeTransactionPayment + * Lookup464: pallet_transaction_payment::ChargeTransactionPayment **/ PalletTransactionPaymentChargeTransactionPayment: "Compact", /** - * Lookup464: cumulus_primitives_storage_weight_reclaim::StorageWeightReclaim + * Lookup465: cumulus_primitives_storage_weight_reclaim::StorageWeightReclaim **/ CumulusPrimitivesStorageWeightReclaimStorageWeightReclaim: "Null", /** - * Lookup465: storage_hub_runtime::Runtime + * Lookup466: storage_hub_runtime::Runtime **/ StorageHubRuntimeRuntime: "Null" }; diff --git a/api-augment/dist/interfaces/lookup.js.map b/api-augment/dist/interfaces/lookup.js.map index e6f2e721c..0f8bd2b0f 100644 --- a/api-augment/dist/interfaces/lookup.js.map +++ b/api-augment/dist/interfaces/lookup.js.map @@ -1 +1 @@ -{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/interfaces/lookup.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/interfaces/lookup.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/api-augment/dist/types/interfaces/augment-api-consts.d.ts b/api-augment/dist/types/interfaces/augment-api-consts.d.ts index e5047d391..be570a10a 100644 --- a/api-augment/dist/types/interfaces/augment-api-consts.d.ts +++ b/api-augment/dist/types/interfaces/augment-api-consts.d.ts @@ -2,7 +2,7 @@ import "@polkadot/api-base/types/consts"; import type { ApiTypes, AugmentedConst } from "@polkadot/api-base/types"; import type { Option, u128, u16, u32, u64, u8 } from "@polkadot/types-codec"; import type { Codec } from "@polkadot/types-codec/types"; -import type { AccountId32, H256 } from "@polkadot/types/interfaces/runtime"; +import type { AccountId32, H256, Perbill } from "@polkadot/types/interfaces/runtime"; import type { FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, @@ -225,9 +225,29 @@ declare module "@polkadot/api-base/types/consts" { [key: string]: Codec; }; proofsDealer: { + /** + * The minimum unused weight that a block must have to be considered _not_ full. + * + * This is used as part of the criteria for checking if the network is presumably under a spam attack. + * For example, this can be set to the benchmarked weight of a `submit_proof` extrinsic, which would + * mean that a block is not considered full if a `submit_proof` extrinsic could have still fit in it. + **/ + blockFullnessHeadroom: SpWeightsWeightV2Weight & AugmentedConst; + /** + * The period of blocks for which the block fullness is checked. + * + * This is the amount of blocks from the past, for which the block fullness has been checked + * and is stored. Blocks older than `current_block` - [`Config::BlockFullnessPeriod`] are + * cleared from storage. + * + * This constant should be equal or smaller than the [`Config::ChallengeTicksTolerance`] constant, + * if the goal is to prevent spamming attacks that would prevent honest Providers from submitting + * their proofs in time. + **/ + blockFullnessPeriod: u32 & AugmentedConst; /** * The number of ticks that challenges history is kept for. - * After this many ticks, challenges are removed from `TickToChallengesSeed` StorageMap. + * After this many ticks, challenges are removed from [`TickToChallengesSeed`] StorageMap. * A "tick" is usually one block, but some blocks may be skipped due to migrations. **/ challengeHistoryLength: u32 & AugmentedConst; @@ -280,6 +300,18 @@ declare module "@polkadot/api-base/types/consts" { * The minimum period in which a Provider can be challenged, regardless of their stake. **/ minChallengePeriod: u32 & AugmentedConst; + /** + * The minimum ratio (or percentage if you will) of blocks that must be considered _not_ full, + * from the total number of [`Config::BlockFullnessPeriod`] blocks taken into account. + * + * If less than this percentage of blocks are not full, the networks is considered to be presumably + * under a spam attack. + * This can also be thought of as the maximum ratio of misbehaving collators tolerated. For example, + * if this is set to `Perbill::from_percent(50)`, then if more than half of the last `BlockFullnessPeriod` + * blocks are not full, then one of those blocks surely was produced by an honest collator, meaning + * that there was at least one truly _not_ full block in the last `BlockFullnessPeriod` blocks. + **/ + minNotFullBlocksRatio: Perbill & AugmentedConst; /** * The number of random challenges that are generated per block, using the random seed * generated for that block. diff --git a/api-augment/dist/types/interfaces/augment-api-errors.d.ts b/api-augment/dist/types/interfaces/augment-api-errors.d.ts index fc32736df..ddf34845c 100644 --- a/api-augment/dist/types/interfaces/augment-api-errors.d.ts +++ b/api-augment/dist/types/interfaces/augment-api-errors.d.ts @@ -158,10 +158,6 @@ declare module "@polkadot/api-base/types/errors" { * BSP did not succeed threshold check. **/ AboveThreshold: AugmentedError; - /** - * Block range to maximum threshold cannot be zero. - **/ - BlockRangeToMaximumThresholdCannotBeZero: AugmentedError; /** * BSP has already confirmed storing the given file. **/ @@ -214,10 +210,6 @@ declare module "@polkadot/api-base/types/errors" { * Failed to verify proof: required to provide a proof of non-inclusion. **/ ExpectedNonInclusionProof: AugmentedError; - /** - * Failed to convert block number to threshold. - **/ - FailedToConvertBlockNumber: AugmentedError; /** * Failed to decode threshold. **/ @@ -379,6 +371,10 @@ declare module "@polkadot/api-base/types/errors" { * BSPs assignment threshold cannot be below asymptote. **/ ThresholdBelowAsymptote: AugmentedError; + /** + * Tick range to maximum threshold cannot be zero. + **/ + TickRangeToMaximumThresholdCannotBeZero: AugmentedError; /** * Number of removed BSPs volunteered from storage request prefix did not match the expected number. **/ diff --git a/api-augment/dist/types/interfaces/augment-api-events.d.ts b/api-augment/dist/types/interfaces/augment-api-events.d.ts index f0e3df427..19f84fc9c 100644 --- a/api-augment/dist/types/interfaces/augment-api-events.d.ts +++ b/api-augment/dist/types/interfaces/augment-api-events.d.ts @@ -1904,6 +1904,16 @@ declare module "@polkadot/api-base/types/events" { [key: string]: AugmentedEvent; }; proofsDealer: { + /** + * The [`ChallengesTicker`] has been paused or unpaused. + **/ + ChallengesTickerSet: AugmentedEvent< + ApiType, + [paused: bool], + { + paused: bool; + } + >; /** * A set of mutations has been applied to the Forest. **/ diff --git a/api-augment/dist/types/interfaces/augment-api-query.d.ts b/api-augment/dist/types/interfaces/augment-api-query.d.ts index 9f8e66c23..1603734e4 100644 --- a/api-augment/dist/types/interfaces/augment-api-query.d.ts +++ b/api-augment/dist/types/interfaces/augment-api-query.d.ts @@ -280,11 +280,6 @@ declare module "@polkadot/api-base/types/storage" { [key: string]: QueryableStorageEntry; }; fileSystem: { - /** - * Number of blocks until all BSPs would reach the [`Config::MaximumThreshold`] to ensure that all BSPs are able to volunteer. - **/ - blockRangeToMaximumThreshold: AugmentedQuery Observable, []> & - QueryableStorageEntry; /** * Bookkeeping of the buckets containing open storage requests. **/ @@ -462,6 +457,11 @@ declare module "@polkadot/api-base/types/storage" { [H256] > & QueryableStorageEntry; + /** + * Number of ticks until all BSPs would reach the [`Config::MaximumThreshold`] to ensure that all BSPs are able to volunteer. + **/ + tickRangeToMaximumThreshold: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Generic query **/ @@ -1273,50 +1273,43 @@ declare module "@polkadot/api-base/types/storage" { * This counter is not necessarily the same as the block number, as challenges are * distributed in the `on_poll` hook, which happens at the beginning of every block, * so long as the block is not part of a [Multi-Block-Migration](https://github.com/paritytech/polkadot-sdk/pull/1781) (MBM). - * During MBMsm, the block number increases, but `ChallengesTicker` does not. + * During MBMsm, the block number increases, but [`ChallengesTicker`] does not. **/ challengesTicker: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * A mapping from challenge tick to a vector of challenged Providers for that tick. + * A boolean that represents whether the [`ChallengesTicker`] is paused. * - * This is used to keep track of the Providers that have been challenged, and should - * submit a proof by the time of the [`ChallengesTicker`] reaches the number used as - * key in the mapping. Providers who do submit a proof are removed from their respective - * entry and pushed forward to the next tick in which they should submit a proof. - * Those who are still in the entry by the time the tick is reached are considered to - * have failed to submit a proof and subject to slashing. + * By default, this is `false`, meaning that the [`ChallengesTicker`] is incremented every time `on_poll` is called. + * This can be set to `true` which would pause the [`ChallengesTicker`], preventing `do_new_challenges_round` from + * being executed. Therefore: + * - No new random challenges would be emitted and added to [`TickToChallengesSeed`]. + * - No new checkpoint challenges would be emitted and added to [`TickToCheckpointChallenges`]. + * - Deadlines for proof submissions are indefinitely postponed. **/ - challengeTickToChallengedProviders: AugmentedQuery< - ApiType, - ( - arg1: u32 | AnyNumber | Uint8Array, - arg2: H256 | string | Uint8Array - ) => Observable>, - [u32, H256] - > & - QueryableStorageEntry; + challengesTickerPaused: AugmentedQuery Observable>, []> & + QueryableStorageEntry; /** * The challenge tick of the last checkpoint challenge round. * - * This is used to determine when to include the challenges from the `ChallengesQueue` and - * `PriorityChallengesQueue` in the `TickToCheckpointChallenges` StorageMap. These checkpoint + * This is used to determine when to include the challenges from the [`ChallengesQueue`] and + * [`PriorityChallengesQueue`] in the [`TickToCheckpointChallenges`] StorageMap. These checkpoint * challenge rounds have to be answered by ALL Providers, and this is enforced by the * `submit_proof` extrinsic. **/ lastCheckpointTick: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * A value that represents the last tick that was deleted from the `ValidProofSubmittersLastTicks` StorageMap. + * A value that represents the last tick that was deleted from the [`ValidProofSubmittersLastTicks`] StorageMap. * - * This is used to know which tick to delete from the `ValidProofSubmittersLastTicks` StorageMap when the + * This is used to know which tick to delete from the [`ValidProofSubmittersLastTicks`] StorageMap when the * `on_idle` hook is called. **/ lastDeletedTick: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * A mapping from a Provider to the last tick for which they SHOULD have submitted a proof. - * If for a Provider `p`, `LastTickProviderSubmittedProofFor[p]` is `n`, then the + * If for a Provider `p`, `LastTickProviderSubmittedAProofFor[p]` is `n`, then the * Provider should submit a proof for tick `n + stake_to_challenge_period(p)`. * * This gets updated when a Provider submits a proof successfully and is used to determine the @@ -1331,6 +1324,25 @@ declare module "@polkadot/api-base/types/storage" { [H256] > & QueryableStorageEntry; + /** + * The number of blocks that have been considered _not_ full in the last [`Config::BlockFullnessPeriod`]. + * + * This is used to check if the network is presumably under a spam attack. + **/ + notFullBlocksCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * A mapping from block number to the weight used in that block. + * + * This is used to check if the network is presumably under a spam attack. + * It is cleared for blocks older than `current_block` - ([`Config::BlockFullnessPeriod`] + 1). + **/ + pastBlocksWeight: AugmentedQuery< + ApiType, + (arg: u32 | AnyNumber | Uint8Array) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * A priority queue of keys that have been challenged manually. * @@ -1359,7 +1371,7 @@ declare module "@polkadot/api-base/types/storage" { * A mapping from challenges tick to a random seed used for generating the challenges in that tick. * * This is used to keep track of the challenges' seed in the past. - * This mapping goes back only `ChallengeHistoryLength` blocks. Previous challenges are removed. + * This mapping goes back only [`ChallengeHistoryLengthFor`] blocks. Previous challenges are removed. **/ tickToChallengesSeed: AugmentedQuery< ApiType, @@ -1372,8 +1384,8 @@ declare module "@polkadot/api-base/types/storage" { * * This is used to keep track of the challenges that have been made in the past, specifically * in the checkpoint challenge rounds. - * The vector is bounded by `MaxCustomChallengesPerBlockFor`. - * This mapping goes back only `ChallengeHistoryLength` ticks. Previous challenges are removed. + * The vector is bounded by [`MaxCustomChallengesPerBlockFor`]. + * This mapping goes back only [`ChallengeHistoryLengthFor`] ticks. Previous challenges are removed. **/ tickToCheckpointChallenges: AugmentedQuery< ApiType, @@ -1383,12 +1395,31 @@ declare module "@polkadot/api-base/types/storage" { [u32] > & QueryableStorageEntry; + /** + * A mapping from challenge tick to a vector of challenged Providers for that tick. + * + * This is used to keep track of the Providers that have been challenged, and should + * submit a proof by the time of the [`ChallengesTicker`] reaches the number used as + * key in the mapping. Providers who do submit a proof are removed from their respective + * entry and pushed forward to the next tick in which they should submit a proof. + * Those who are still in the entry by the time the tick is reached are considered to + * have failed to submit a proof and subject to slashing. + **/ + tickToProvidersDeadlines: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: H256 | string | Uint8Array + ) => Observable>, + [u32, H256] + > & + QueryableStorageEntry; /** * A mapping from tick to Providers, which is set if the Provider submitted a valid proof in that tick. * * This is used to keep track of the Providers that have submitted proofs in the last few - * ticks, where availability only up to the last `TargetTicksStorageOfSubmitters` ticks is guaranteed. - * This storage is then made available for other pallets to use through the `ReadProofSubmittersInterface`. + * ticks, where availability only up to the last [`Config::TargetTicksStorageOfSubmitters`] ticks is guaranteed. + * This storage is then made available for other pallets to use through the `ProofSubmittersInterface`. **/ validProofSubmittersLastTicks: AugmentedQuery< ApiType, diff --git a/api-augment/dist/types/interfaces/augment-api-runtime.d.ts b/api-augment/dist/types/interfaces/augment-api-runtime.d.ts index a9b0e510b..18947968b 100644 --- a/api-augment/dist/types/interfaces/augment-api-runtime.d.ts +++ b/api-augment/dist/types/interfaces/augment-api-runtime.d.ts @@ -244,9 +244,9 @@ declare module "@polkadot/api-base/types/calls" { ) => Observable, QueryBspConfirmChunksToProveForFileError>> >; /** - * Query the earliest block number that a BSP can volunteer for a file. + * Query the earliest tick number that a BSP can volunteer for a file. **/ - queryEarliestFileVolunteerBlock: AugmentedCall< + queryEarliestFileVolunteerTick: AugmentedCall< ApiType, ( bspId: BackupStorageProviderId | string | Uint8Array, diff --git a/api-augment/dist/types/interfaces/augment-api-tx.d.ts b/api-augment/dist/types/interfaces/augment-api-tx.d.ts index 3883e9603..11f3531d2 100644 --- a/api-augment/dist/types/interfaces/augment-api-tx.d.ts +++ b/api-augment/dist/types/interfaces/augment-api-tx.d.ts @@ -690,7 +690,7 @@ declare module "@polkadot/api-base/types/submittable" { setGlobalParameters: AugmentedSubmittable< ( replicationTarget: Option | null | Uint8Array | u32 | AnyNumber, - blockRangeToMaximumThreshold: Option | null | Uint8Array | u32 | AnyNumber + tickRangeToMaximumThreshold: Option | null | Uint8Array | u32 | AnyNumber ) => SubmittableExtrinsic, [Option, Option] >; @@ -3098,6 +3098,15 @@ declare module "@polkadot/api-base/types/submittable" { (provider: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256] >; + /** + * Set the [`ChallengesTickerPaused`] to `true` or `false`. + * + * Only callable by sudo. + **/ + setPaused: AugmentedSubmittable< + (paused: bool | boolean | Uint8Array) => SubmittableExtrinsic, + [bool] + >; /** * For a Provider to submit a proof. * @@ -3107,7 +3116,7 @@ declare module "@polkadot/api-base/types/submittable" { * Validates that the proof corresponds to a challenge that was made in the past, * by checking the `TickToChallengesSeed` StorageMap. The challenge tick that the * Provider should have submitted a proof is calculated based on the last tick they - * submitted a proof for (`LastTickProviderSubmittedProofFor`), and the proving period for + * submitted a proof for ([`LastTickProviderSubmittedAProofFor`]), and the proving period for * that Provider, which is a function of their stake. * This extrinsic also checks that there hasn't been a checkpoint challenge round * in between the last time the Provider submitted a proof for and the tick @@ -3115,7 +3124,7 @@ declare module "@polkadot/api-base/types/submittable" { * subject to slashing. * * If valid: - * - Pushes forward the Provider in the `ChallengeTickToChallengedProviders` StorageMap a number + * - Pushes forward the Provider in the [`TickToProvidersDeadlines`] StorageMap a number * of ticks corresponding to the stake of the Provider. * - Registers this tick as the last tick in which the Provider submitted a proof. * diff --git a/api-augment/dist/types/interfaces/lookup.d.ts b/api-augment/dist/types/interfaces/lookup.d.ts index 351c7a255..9d0190e24 100644 --- a/api-augment/dist/types/interfaces/lookup.d.ts +++ b/api-augment/dist/types/interfaces/lookup.d.ts @@ -1551,6 +1551,9 @@ declare const _default: { mutations: string; newRoot: string; }; + ChallengesTickerSet: { + paused: string; + }; }; }; /** @@ -3142,7 +3145,7 @@ declare const _default: { }; set_global_parameters: { replicationTarget: string; - blockRangeToMaximumThreshold: string; + tickRangeToMaximumThreshold: string; }; }; }; @@ -3167,6 +3170,9 @@ declare const _default: { force_initialise_challenge_cycle: { provider: string; }; + set_paused: { + paused: string; + }; }; }; /** @@ -3812,13 +3818,13 @@ declare const _default: { _enum: string[]; }; /** - * Lookup420: pallet_proofs_dealer::pallet::Error + * Lookup421: pallet_proofs_dealer::pallet::Error **/ PalletProofsDealerError: { _enum: string[]; }; /** - * Lookup423: pallet_payment_streams::types::FixedRatePaymentStream + * Lookup424: pallet_payment_streams::types::FixedRatePaymentStream **/ PalletPaymentStreamsFixedRatePaymentStream: { rate: string; @@ -3827,7 +3833,7 @@ declare const _default: { outOfFundsTick: string; }; /** - * Lookup424: pallet_payment_streams::types::DynamicRatePaymentStream + * Lookup425: pallet_payment_streams::types::DynamicRatePaymentStream **/ PalletPaymentStreamsDynamicRatePaymentStream: { amountProvided: string; @@ -3836,26 +3842,26 @@ declare const _default: { outOfFundsTick: string; }; /** - * Lookup425: pallet_payment_streams::types::ProviderLastChargeableInfo + * Lookup426: pallet_payment_streams::types::ProviderLastChargeableInfo **/ PalletPaymentStreamsProviderLastChargeableInfo: { lastChargeableTick: string; priceIndex: string; }; /** - * Lookup426: pallet_payment_streams::pallet::Error + * Lookup427: pallet_payment_streams::pallet::Error **/ PalletPaymentStreamsError: { _enum: string[]; }; /** - * Lookup427: pallet_bucket_nfts::pallet::Error + * Lookup428: pallet_bucket_nfts::pallet::Error **/ PalletBucketNftsError: { _enum: string[]; }; /** - * Lookup428: pallet_nfts::types::CollectionDetails + * Lookup429: pallet_nfts::types::CollectionDetails **/ PalletNftsCollectionDetails: { owner: string; @@ -3866,13 +3872,13 @@ declare const _default: { attributes: string; }; /** - * Lookup433: pallet_nfts::types::CollectionRole + * Lookup434: pallet_nfts::types::CollectionRole **/ PalletNftsCollectionRole: { _enum: string[]; }; /** - * Lookup434: pallet_nfts::types::ItemDetails, bounded_collections::bounded_btree_map::BoundedBTreeMap, S>> + * Lookup435: pallet_nfts::types::ItemDetails, bounded_collections::bounded_btree_map::BoundedBTreeMap, S>> **/ PalletNftsItemDetails: { owner: string; @@ -3880,42 +3886,42 @@ declare const _default: { deposit: string; }; /** - * Lookup435: pallet_nfts::types::ItemDeposit + * Lookup436: pallet_nfts::types::ItemDeposit **/ PalletNftsItemDeposit: { account: string; amount: string; }; /** - * Lookup440: pallet_nfts::types::CollectionMetadata + * Lookup441: pallet_nfts::types::CollectionMetadata **/ PalletNftsCollectionMetadata: { deposit: string; data: string; }; /** - * Lookup441: pallet_nfts::types::ItemMetadata, StringLimit> + * Lookup442: pallet_nfts::types::ItemMetadata, StringLimit> **/ PalletNftsItemMetadata: { deposit: string; data: string; }; /** - * Lookup442: pallet_nfts::types::ItemMetadataDeposit + * Lookup443: pallet_nfts::types::ItemMetadataDeposit **/ PalletNftsItemMetadataDeposit: { account: string; amount: string; }; /** - * Lookup445: pallet_nfts::types::AttributeDeposit + * Lookup446: pallet_nfts::types::AttributeDeposit **/ PalletNftsAttributeDeposit: { account: string; amount: string; }; /** - * Lookup449: pallet_nfts::types::PendingSwap, Deadline> + * Lookup450: pallet_nfts::types::PendingSwap, Deadline> **/ PalletNftsPendingSwap: { desiredCollection: string; @@ -3924,51 +3930,51 @@ declare const _default: { deadline: string; }; /** - * Lookup451: pallet_nfts::types::PalletFeature + * Lookup452: pallet_nfts::types::PalletFeature **/ PalletNftsPalletFeature: { _enum: string[]; }; /** - * Lookup452: pallet_nfts::pallet::Error + * Lookup453: pallet_nfts::pallet::Error **/ PalletNftsError: { _enum: string[]; }; /** - * Lookup455: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender + * Lookup456: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender **/ FrameSystemExtensionsCheckNonZeroSender: string; /** - * Lookup456: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup457: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: string; /** - * Lookup457: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup458: frame_system::extensions::check_tx_version::CheckTxVersion **/ FrameSystemExtensionsCheckTxVersion: string; /** - * Lookup458: frame_system::extensions::check_genesis::CheckGenesis + * Lookup459: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: string; /** - * Lookup461: frame_system::extensions::check_nonce::CheckNonce + * Lookup462: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: string; /** - * Lookup462: frame_system::extensions::check_weight::CheckWeight + * Lookup463: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: string; /** - * Lookup463: pallet_transaction_payment::ChargeTransactionPayment + * Lookup464: pallet_transaction_payment::ChargeTransactionPayment **/ PalletTransactionPaymentChargeTransactionPayment: string; /** - * Lookup464: cumulus_primitives_storage_weight_reclaim::StorageWeightReclaim + * Lookup465: cumulus_primitives_storage_weight_reclaim::StorageWeightReclaim **/ CumulusPrimitivesStorageWeightReclaimStorageWeightReclaim: string; /** - * Lookup465: storage_hub_runtime::Runtime + * Lookup466: storage_hub_runtime::Runtime **/ StorageHubRuntimeRuntime: string; }; diff --git a/api-augment/dist/types/interfaces/types-lookup.d.ts b/api-augment/dist/types/interfaces/types-lookup.d.ts index b40770d56..34cf3a69b 100644 --- a/api-augment/dist/types/interfaces/types-lookup.d.ts +++ b/api-augment/dist/types/interfaces/types-lookup.d.ts @@ -1992,6 +1992,10 @@ declare module "@polkadot/types/lookup" { readonly mutations: Vec>; readonly newRoot: H256; } & Struct; + readonly isChallengesTickerSet: boolean; + readonly asChallengesTickerSet: { + readonly paused: bool; + } & Struct; readonly type: | "NewChallenge" | "ProofAccepted" @@ -2000,7 +2004,8 @@ declare module "@polkadot/types/lookup" { | "SlashableProvider" | "NoRecordOfLastSubmittedProof" | "NewChallengeCycleInitialised" - | "MutationsApplied"; + | "MutationsApplied" + | "ChallengesTickerSet"; } /** @name PalletProofsDealerProof (136) */ interface PalletProofsDealerProof extends Struct { @@ -3826,7 +3831,7 @@ declare module "@polkadot/types/lookup" { readonly isSetGlobalParameters: boolean; readonly asSetGlobalParameters: { readonly replicationTarget: Option; - readonly blockRangeToMaximumThreshold: Option; + readonly tickRangeToMaximumThreshold: Option; } & Struct; readonly type: | "CreateBucket" @@ -3868,7 +3873,11 @@ declare module "@polkadot/types/lookup" { readonly asForceInitialiseChallengeCycle: { readonly provider: H256; } & Struct; - readonly type: "Challenge" | "SubmitProof" | "ForceInitialiseChallengeCycle"; + readonly isSetPaused: boolean; + readonly asSetPaused: { + readonly paused: bool; + } & Struct; + readonly type: "Challenge" | "SubmitProof" | "ForceInitialiseChallengeCycle" | "SetPaused"; } /** @name PalletRandomnessCall (307) */ interface PalletRandomnessCall extends Enum { @@ -4714,7 +4723,6 @@ declare module "@polkadot/types/lookup" { readonly isFailedToEncodeFingerprint: boolean; readonly isFailedToDecodeThreshold: boolean; readonly isAboveThreshold: boolean; - readonly isFailedToConvertBlockNumber: boolean; readonly isThresholdArithmeticError: boolean; readonly isFailedTypeConversion: boolean; readonly isDividedByZero: boolean; @@ -4735,7 +4743,7 @@ declare module "@polkadot/types/lookup" { readonly isFileSizeCannotBeZero: boolean; readonly isNoGlobalReputationWeightSet: boolean; readonly isMaximumThresholdCannotBeZero: boolean; - readonly isBlockRangeToMaximumThresholdCannotBeZero: boolean; + readonly isTickRangeToMaximumThresholdCannotBeZero: boolean; readonly isPendingStopStoringRequestNotFound: boolean; readonly isMinWaitForStopStoringNotReached: boolean; readonly isPendingStopStoringRequestAlreadyExists: boolean; @@ -4773,7 +4781,6 @@ declare module "@polkadot/types/lookup" { | "FailedToEncodeFingerprint" | "FailedToDecodeThreshold" | "AboveThreshold" - | "FailedToConvertBlockNumber" | "ThresholdArithmeticError" | "FailedTypeConversion" | "DividedByZero" @@ -4794,7 +4801,7 @@ declare module "@polkadot/types/lookup" { | "FileSizeCannotBeZero" | "NoGlobalReputationWeightSet" | "MaximumThresholdCannotBeZero" - | "BlockRangeToMaximumThresholdCannotBeZero" + | "TickRangeToMaximumThresholdCannotBeZero" | "PendingStopStoringRequestNotFound" | "MinWaitForStopStoringNotReached" | "PendingStopStoringRequestAlreadyExists" @@ -4809,7 +4816,7 @@ declare module "@polkadot/types/lookup" { | "BspDataServersExceeded" | "FileMetadataProcessingQueueFull"; } - /** @name PalletProofsDealerError (420) */ + /** @name PalletProofsDealerError (421) */ interface PalletProofsDealerError extends Enum { readonly isNotProvider: boolean; readonly isChallengesQueueOverflow: boolean; @@ -4857,26 +4864,26 @@ declare module "@polkadot/types/lookup" { | "FailedToUpdateProviderAfterKeyRemoval" | "TooManyValidProofSubmitters"; } - /** @name PalletPaymentStreamsFixedRatePaymentStream (423) */ + /** @name PalletPaymentStreamsFixedRatePaymentStream (424) */ interface PalletPaymentStreamsFixedRatePaymentStream extends Struct { readonly rate: u128; readonly lastChargedTick: u32; readonly userDeposit: u128; readonly outOfFundsTick: Option; } - /** @name PalletPaymentStreamsDynamicRatePaymentStream (424) */ + /** @name PalletPaymentStreamsDynamicRatePaymentStream (425) */ interface PalletPaymentStreamsDynamicRatePaymentStream extends Struct { readonly amountProvided: u64; readonly priceIndexWhenLastCharged: u128; readonly userDeposit: u128; readonly outOfFundsTick: Option; } - /** @name PalletPaymentStreamsProviderLastChargeableInfo (425) */ + /** @name PalletPaymentStreamsProviderLastChargeableInfo (426) */ interface PalletPaymentStreamsProviderLastChargeableInfo extends Struct { readonly lastChargeableTick: u32; readonly priceIndex: u128; } - /** @name PalletPaymentStreamsError (426) */ + /** @name PalletPaymentStreamsError (427) */ interface PalletPaymentStreamsError extends Enum { readonly isPaymentStreamAlreadyExists: boolean; readonly isPaymentStreamNotFound: boolean; @@ -4912,7 +4919,7 @@ declare module "@polkadot/types/lookup" { | "UserNotFlaggedAsWithoutFunds" | "CooldownPeriodNotPassed"; } - /** @name PalletBucketNftsError (427) */ + /** @name PalletBucketNftsError (428) */ interface PalletBucketNftsError extends Enum { readonly isBucketIsNotPrivate: boolean; readonly isNotBucketOwner: boolean; @@ -4924,7 +4931,7 @@ declare module "@polkadot/types/lookup" { | "NoCorrespondingCollection" | "ConvertBytesToBoundedVec"; } - /** @name PalletNftsCollectionDetails (428) */ + /** @name PalletNftsCollectionDetails (429) */ interface PalletNftsCollectionDetails extends Struct { readonly owner: AccountId32; readonly ownerDeposit: u128; @@ -4933,52 +4940,52 @@ declare module "@polkadot/types/lookup" { readonly itemConfigs: u32; readonly attributes: u32; } - /** @name PalletNftsCollectionRole (433) */ + /** @name PalletNftsCollectionRole (434) */ interface PalletNftsCollectionRole extends Enum { readonly isIssuer: boolean; readonly isFreezer: boolean; readonly isAdmin: boolean; readonly type: "Issuer" | "Freezer" | "Admin"; } - /** @name PalletNftsItemDetails (434) */ + /** @name PalletNftsItemDetails (435) */ interface PalletNftsItemDetails extends Struct { readonly owner: AccountId32; readonly approvals: BTreeMap>; readonly deposit: PalletNftsItemDeposit; } - /** @name PalletNftsItemDeposit (435) */ + /** @name PalletNftsItemDeposit (436) */ interface PalletNftsItemDeposit extends Struct { readonly account: AccountId32; readonly amount: u128; } - /** @name PalletNftsCollectionMetadata (440) */ + /** @name PalletNftsCollectionMetadata (441) */ interface PalletNftsCollectionMetadata extends Struct { readonly deposit: u128; readonly data: Bytes; } - /** @name PalletNftsItemMetadata (441) */ + /** @name PalletNftsItemMetadata (442) */ interface PalletNftsItemMetadata extends Struct { readonly deposit: PalletNftsItemMetadataDeposit; readonly data: Bytes; } - /** @name PalletNftsItemMetadataDeposit (442) */ + /** @name PalletNftsItemMetadataDeposit (443) */ interface PalletNftsItemMetadataDeposit extends Struct { readonly account: Option; readonly amount: u128; } - /** @name PalletNftsAttributeDeposit (445) */ + /** @name PalletNftsAttributeDeposit (446) */ interface PalletNftsAttributeDeposit extends Struct { readonly account: Option; readonly amount: u128; } - /** @name PalletNftsPendingSwap (449) */ + /** @name PalletNftsPendingSwap (450) */ interface PalletNftsPendingSwap extends Struct { readonly desiredCollection: u32; readonly desiredItem: Option; readonly price: Option; readonly deadline: u32; } - /** @name PalletNftsPalletFeature (451) */ + /** @name PalletNftsPalletFeature (452) */ interface PalletNftsPalletFeature extends Enum { readonly isTrading: boolean; readonly isAttributes: boolean; @@ -4986,7 +4993,7 @@ declare module "@polkadot/types/lookup" { readonly isSwaps: boolean; readonly type: "Trading" | "Attributes" | "Approvals" | "Swaps"; } - /** @name PalletNftsError (452) */ + /** @name PalletNftsError (453) */ interface PalletNftsError extends Enum { readonly isNoPermission: boolean; readonly isUnknownCollection: boolean; @@ -5080,22 +5087,22 @@ declare module "@polkadot/types/lookup" { | "CollectionNotEmpty" | "WitnessRequired"; } - /** @name FrameSystemExtensionsCheckNonZeroSender (455) */ + /** @name FrameSystemExtensionsCheckNonZeroSender (456) */ type FrameSystemExtensionsCheckNonZeroSender = Null; - /** @name FrameSystemExtensionsCheckSpecVersion (456) */ + /** @name FrameSystemExtensionsCheckSpecVersion (457) */ type FrameSystemExtensionsCheckSpecVersion = Null; - /** @name FrameSystemExtensionsCheckTxVersion (457) */ + /** @name FrameSystemExtensionsCheckTxVersion (458) */ type FrameSystemExtensionsCheckTxVersion = Null; - /** @name FrameSystemExtensionsCheckGenesis (458) */ + /** @name FrameSystemExtensionsCheckGenesis (459) */ type FrameSystemExtensionsCheckGenesis = Null; - /** @name FrameSystemExtensionsCheckNonce (461) */ + /** @name FrameSystemExtensionsCheckNonce (462) */ interface FrameSystemExtensionsCheckNonce extends Compact {} - /** @name FrameSystemExtensionsCheckWeight (462) */ + /** @name FrameSystemExtensionsCheckWeight (463) */ type FrameSystemExtensionsCheckWeight = Null; - /** @name PalletTransactionPaymentChargeTransactionPayment (463) */ + /** @name PalletTransactionPaymentChargeTransactionPayment (464) */ interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} - /** @name CumulusPrimitivesStorageWeightReclaimStorageWeightReclaim (464) */ + /** @name CumulusPrimitivesStorageWeightReclaimStorageWeightReclaim (465) */ type CumulusPrimitivesStorageWeightReclaimStorageWeightReclaim = Null; - /** @name StorageHubRuntimeRuntime (465) */ + /** @name StorageHubRuntimeRuntime (466) */ type StorageHubRuntimeRuntime = Null; } diff --git a/api-augment/src/interfaces/augment-api-consts.ts b/api-augment/src/interfaces/augment-api-consts.ts index 419864676..d568c3f43 100644 --- a/api-augment/src/interfaces/augment-api-consts.ts +++ b/api-augment/src/interfaces/augment-api-consts.ts @@ -8,7 +8,7 @@ import "@polkadot/api-base/types/consts"; import type { ApiTypes, AugmentedConst } from "@polkadot/api-base/types"; import type { Option, u128, u16, u32, u64, u8 } from "@polkadot/types-codec"; import type { Codec } from "@polkadot/types-codec/types"; -import type { AccountId32, H256 } from "@polkadot/types/interfaces/runtime"; +import type { AccountId32, H256, Perbill } from "@polkadot/types/interfaces/runtime"; import type { FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, @@ -233,9 +233,29 @@ declare module "@polkadot/api-base/types/consts" { [key: string]: Codec; }; proofsDealer: { + /** + * The minimum unused weight that a block must have to be considered _not_ full. + * + * This is used as part of the criteria for checking if the network is presumably under a spam attack. + * For example, this can be set to the benchmarked weight of a `submit_proof` extrinsic, which would + * mean that a block is not considered full if a `submit_proof` extrinsic could have still fit in it. + **/ + blockFullnessHeadroom: SpWeightsWeightV2Weight & AugmentedConst; + /** + * The period of blocks for which the block fullness is checked. + * + * This is the amount of blocks from the past, for which the block fullness has been checked + * and is stored. Blocks older than `current_block` - [`Config::BlockFullnessPeriod`] are + * cleared from storage. + * + * This constant should be equal or smaller than the [`Config::ChallengeTicksTolerance`] constant, + * if the goal is to prevent spamming attacks that would prevent honest Providers from submitting + * their proofs in time. + **/ + blockFullnessPeriod: u32 & AugmentedConst; /** * The number of ticks that challenges history is kept for. - * After this many ticks, challenges are removed from `TickToChallengesSeed` StorageMap. + * After this many ticks, challenges are removed from [`TickToChallengesSeed`] StorageMap. * A "tick" is usually one block, but some blocks may be skipped due to migrations. **/ challengeHistoryLength: u32 & AugmentedConst; @@ -288,6 +308,18 @@ declare module "@polkadot/api-base/types/consts" { * The minimum period in which a Provider can be challenged, regardless of their stake. **/ minChallengePeriod: u32 & AugmentedConst; + /** + * The minimum ratio (or percentage if you will) of blocks that must be considered _not_ full, + * from the total number of [`Config::BlockFullnessPeriod`] blocks taken into account. + * + * If less than this percentage of blocks are not full, the networks is considered to be presumably + * under a spam attack. + * This can also be thought of as the maximum ratio of misbehaving collators tolerated. For example, + * if this is set to `Perbill::from_percent(50)`, then if more than half of the last `BlockFullnessPeriod` + * blocks are not full, then one of those blocks surely was produced by an honest collator, meaning + * that there was at least one truly _not_ full block in the last `BlockFullnessPeriod` blocks. + **/ + minNotFullBlocksRatio: Perbill & AugmentedConst; /** * The number of random challenges that are generated per block, using the random seed * generated for that block. diff --git a/api-augment/src/interfaces/augment-api-errors.ts b/api-augment/src/interfaces/augment-api-errors.ts index 671b563c8..82ce9b74a 100644 --- a/api-augment/src/interfaces/augment-api-errors.ts +++ b/api-augment/src/interfaces/augment-api-errors.ts @@ -166,10 +166,6 @@ declare module "@polkadot/api-base/types/errors" { * BSP did not succeed threshold check. **/ AboveThreshold: AugmentedError; - /** - * Block range to maximum threshold cannot be zero. - **/ - BlockRangeToMaximumThresholdCannotBeZero: AugmentedError; /** * BSP has already confirmed storing the given file. **/ @@ -222,10 +218,6 @@ declare module "@polkadot/api-base/types/errors" { * Failed to verify proof: required to provide a proof of non-inclusion. **/ ExpectedNonInclusionProof: AugmentedError; - /** - * Failed to convert block number to threshold. - **/ - FailedToConvertBlockNumber: AugmentedError; /** * Failed to decode threshold. **/ @@ -387,6 +379,10 @@ declare module "@polkadot/api-base/types/errors" { * BSPs assignment threshold cannot be below asymptote. **/ ThresholdBelowAsymptote: AugmentedError; + /** + * Tick range to maximum threshold cannot be zero. + **/ + TickRangeToMaximumThresholdCannotBeZero: AugmentedError; /** * Number of removed BSPs volunteered from storage request prefix did not match the expected number. **/ diff --git a/api-augment/src/interfaces/augment-api-events.ts b/api-augment/src/interfaces/augment-api-events.ts index cf75ec193..a49e851dc 100644 --- a/api-augment/src/interfaces/augment-api-events.ts +++ b/api-augment/src/interfaces/augment-api-events.ts @@ -1448,6 +1448,10 @@ declare module "@polkadot/api-base/types/events" { [key: string]: AugmentedEvent; }; proofsDealer: { + /** + * The [`ChallengesTicker`] has been paused or unpaused. + **/ + ChallengesTickerSet: AugmentedEvent; /** * A set of mutations has been applied to the Forest. **/ diff --git a/api-augment/src/interfaces/augment-api-query.ts b/api-augment/src/interfaces/augment-api-query.ts index 12379981c..262bdd82b 100644 --- a/api-augment/src/interfaces/augment-api-query.ts +++ b/api-augment/src/interfaces/augment-api-query.ts @@ -288,11 +288,6 @@ declare module "@polkadot/api-base/types/storage" { [key: string]: QueryableStorageEntry; }; fileSystem: { - /** - * Number of blocks until all BSPs would reach the [`Config::MaximumThreshold`] to ensure that all BSPs are able to volunteer. - **/ - blockRangeToMaximumThreshold: AugmentedQuery Observable, []> & - QueryableStorageEntry; /** * Bookkeeping of the buckets containing open storage requests. **/ @@ -470,6 +465,11 @@ declare module "@polkadot/api-base/types/storage" { [H256] > & QueryableStorageEntry; + /** + * Number of ticks until all BSPs would reach the [`Config::MaximumThreshold`] to ensure that all BSPs are able to volunteer. + **/ + tickRangeToMaximumThreshold: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Generic query **/ @@ -1216,50 +1216,43 @@ declare module "@polkadot/api-base/types/storage" { * This counter is not necessarily the same as the block number, as challenges are * distributed in the `on_poll` hook, which happens at the beginning of every block, * so long as the block is not part of a [Multi-Block-Migration](https://github.com/paritytech/polkadot-sdk/pull/1781) (MBM). - * During MBMsm, the block number increases, but `ChallengesTicker` does not. + * During MBMsm, the block number increases, but [`ChallengesTicker`] does not. **/ challengesTicker: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * A mapping from challenge tick to a vector of challenged Providers for that tick. + * A boolean that represents whether the [`ChallengesTicker`] is paused. * - * This is used to keep track of the Providers that have been challenged, and should - * submit a proof by the time of the [`ChallengesTicker`] reaches the number used as - * key in the mapping. Providers who do submit a proof are removed from their respective - * entry and pushed forward to the next tick in which they should submit a proof. - * Those who are still in the entry by the time the tick is reached are considered to - * have failed to submit a proof and subject to slashing. + * By default, this is `false`, meaning that the [`ChallengesTicker`] is incremented every time `on_poll` is called. + * This can be set to `true` which would pause the [`ChallengesTicker`], preventing `do_new_challenges_round` from + * being executed. Therefore: + * - No new random challenges would be emitted and added to [`TickToChallengesSeed`]. + * - No new checkpoint challenges would be emitted and added to [`TickToCheckpointChallenges`]. + * - Deadlines for proof submissions are indefinitely postponed. **/ - challengeTickToChallengedProviders: AugmentedQuery< - ApiType, - ( - arg1: u32 | AnyNumber | Uint8Array, - arg2: H256 | string | Uint8Array - ) => Observable>, - [u32, H256] - > & - QueryableStorageEntry; + challengesTickerPaused: AugmentedQuery Observable>, []> & + QueryableStorageEntry; /** * The challenge tick of the last checkpoint challenge round. * - * This is used to determine when to include the challenges from the `ChallengesQueue` and - * `PriorityChallengesQueue` in the `TickToCheckpointChallenges` StorageMap. These checkpoint + * This is used to determine when to include the challenges from the [`ChallengesQueue`] and + * [`PriorityChallengesQueue`] in the [`TickToCheckpointChallenges`] StorageMap. These checkpoint * challenge rounds have to be answered by ALL Providers, and this is enforced by the * `submit_proof` extrinsic. **/ lastCheckpointTick: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * A value that represents the last tick that was deleted from the `ValidProofSubmittersLastTicks` StorageMap. + * A value that represents the last tick that was deleted from the [`ValidProofSubmittersLastTicks`] StorageMap. * - * This is used to know which tick to delete from the `ValidProofSubmittersLastTicks` StorageMap when the + * This is used to know which tick to delete from the [`ValidProofSubmittersLastTicks`] StorageMap when the * `on_idle` hook is called. **/ lastDeletedTick: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * A mapping from a Provider to the last tick for which they SHOULD have submitted a proof. - * If for a Provider `p`, `LastTickProviderSubmittedProofFor[p]` is `n`, then the + * If for a Provider `p`, `LastTickProviderSubmittedAProofFor[p]` is `n`, then the * Provider should submit a proof for tick `n + stake_to_challenge_period(p)`. * * This gets updated when a Provider submits a proof successfully and is used to determine the @@ -1274,6 +1267,25 @@ declare module "@polkadot/api-base/types/storage" { [H256] > & QueryableStorageEntry; + /** + * The number of blocks that have been considered _not_ full in the last [`Config::BlockFullnessPeriod`]. + * + * This is used to check if the network is presumably under a spam attack. + **/ + notFullBlocksCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * A mapping from block number to the weight used in that block. + * + * This is used to check if the network is presumably under a spam attack. + * It is cleared for blocks older than `current_block` - ([`Config::BlockFullnessPeriod`] + 1). + **/ + pastBlocksWeight: AugmentedQuery< + ApiType, + (arg: u32 | AnyNumber | Uint8Array) => Observable>, + [u32] + > & + QueryableStorageEntry; /** * A priority queue of keys that have been challenged manually. * @@ -1302,7 +1314,7 @@ declare module "@polkadot/api-base/types/storage" { * A mapping from challenges tick to a random seed used for generating the challenges in that tick. * * This is used to keep track of the challenges' seed in the past. - * This mapping goes back only `ChallengeHistoryLength` blocks. Previous challenges are removed. + * This mapping goes back only [`ChallengeHistoryLengthFor`] blocks. Previous challenges are removed. **/ tickToChallengesSeed: AugmentedQuery< ApiType, @@ -1315,8 +1327,8 @@ declare module "@polkadot/api-base/types/storage" { * * This is used to keep track of the challenges that have been made in the past, specifically * in the checkpoint challenge rounds. - * The vector is bounded by `MaxCustomChallengesPerBlockFor`. - * This mapping goes back only `ChallengeHistoryLength` ticks. Previous challenges are removed. + * The vector is bounded by [`MaxCustomChallengesPerBlockFor`]. + * This mapping goes back only [`ChallengeHistoryLengthFor`] ticks. Previous challenges are removed. **/ tickToCheckpointChallenges: AugmentedQuery< ApiType, @@ -1326,12 +1338,31 @@ declare module "@polkadot/api-base/types/storage" { [u32] > & QueryableStorageEntry; + /** + * A mapping from challenge tick to a vector of challenged Providers for that tick. + * + * This is used to keep track of the Providers that have been challenged, and should + * submit a proof by the time of the [`ChallengesTicker`] reaches the number used as + * key in the mapping. Providers who do submit a proof are removed from their respective + * entry and pushed forward to the next tick in which they should submit a proof. + * Those who are still in the entry by the time the tick is reached are considered to + * have failed to submit a proof and subject to slashing. + **/ + tickToProvidersDeadlines: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: H256 | string | Uint8Array + ) => Observable>, + [u32, H256] + > & + QueryableStorageEntry; /** * A mapping from tick to Providers, which is set if the Provider submitted a valid proof in that tick. * * This is used to keep track of the Providers that have submitted proofs in the last few - * ticks, where availability only up to the last `TargetTicksStorageOfSubmitters` ticks is guaranteed. - * This storage is then made available for other pallets to use through the `ReadProofSubmittersInterface`. + * ticks, where availability only up to the last [`Config::TargetTicksStorageOfSubmitters`] ticks is guaranteed. + * This storage is then made available for other pallets to use through the `ProofSubmittersInterface`. **/ validProofSubmittersLastTicks: AugmentedQuery< ApiType, diff --git a/api-augment/src/interfaces/augment-api-runtime.ts b/api-augment/src/interfaces/augment-api-runtime.ts index 38e926246..6c56a3d20 100644 --- a/api-augment/src/interfaces/augment-api-runtime.ts +++ b/api-augment/src/interfaces/augment-api-runtime.ts @@ -226,9 +226,9 @@ declare module "@polkadot/api-base/types/calls" { ) => Observable, QueryBspConfirmChunksToProveForFileError>> >; /** - * Query the earliest block number that a BSP can volunteer for a file. + * Query the earliest tick number that a BSP can volunteer for a file. **/ - queryEarliestFileVolunteerBlock: AugmentedCall< + queryEarliestFileVolunteerTick: AugmentedCall< ApiType, ( bspId: BackupStorageProviderId | string | Uint8Array, diff --git a/api-augment/src/interfaces/augment-api-tx.ts b/api-augment/src/interfaces/augment-api-tx.ts index c964105a0..5e251a82a 100644 --- a/api-augment/src/interfaces/augment-api-tx.ts +++ b/api-augment/src/interfaces/augment-api-tx.ts @@ -596,7 +596,7 @@ declare module "@polkadot/api-base/types/submittable" { setGlobalParameters: AugmentedSubmittable< ( replicationTarget: Option | null | Uint8Array | u32 | AnyNumber, - blockRangeToMaximumThreshold: Option | null | Uint8Array | u32 | AnyNumber + tickRangeToMaximumThreshold: Option | null | Uint8Array | u32 | AnyNumber ) => SubmittableExtrinsic, [Option, Option] >; @@ -2591,6 +2591,15 @@ declare module "@polkadot/api-base/types/submittable" { (provider: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256] >; + /** + * Set the [`ChallengesTickerPaused`] to `true` or `false`. + * + * Only callable by sudo. + **/ + setPaused: AugmentedSubmittable< + (paused: bool | boolean | Uint8Array) => SubmittableExtrinsic, + [bool] + >; /** * For a Provider to submit a proof. * @@ -2600,7 +2609,7 @@ declare module "@polkadot/api-base/types/submittable" { * Validates that the proof corresponds to a challenge that was made in the past, * by checking the `TickToChallengesSeed` StorageMap. The challenge tick that the * Provider should have submitted a proof is calculated based on the last tick they - * submitted a proof for (`LastTickProviderSubmittedProofFor`), and the proving period for + * submitted a proof for ([`LastTickProviderSubmittedAProofFor`]), and the proving period for * that Provider, which is a function of their stake. * This extrinsic also checks that there hasn't been a checkpoint challenge round * in between the last time the Provider submitted a proof for and the tick @@ -2608,7 +2617,7 @@ declare module "@polkadot/api-base/types/submittable" { * subject to slashing. * * If valid: - * - Pushes forward the Provider in the `ChallengeTickToChallengedProviders` StorageMap a number + * - Pushes forward the Provider in the [`TickToProvidersDeadlines`] StorageMap a number * of ticks corresponding to the stake of the Provider. * - Registers this tick as the last tick in which the Provider submitted a proof. * diff --git a/api-augment/src/interfaces/lookup.ts b/api-augment/src/interfaces/lookup.ts index 58d09b5f2..45d59e780 100644 --- a/api-augment/src/interfaces/lookup.ts +++ b/api-augment/src/interfaces/lookup.ts @@ -1566,6 +1566,9 @@ export default { provider: "H256", mutations: "Vec<(H256,ShpTraitsTrieRemoveMutation)>", newRoot: "H256" + }, + ChallengesTickerSet: { + paused: "bool" } } }, @@ -3191,7 +3194,7 @@ export default { }, set_global_parameters: { replicationTarget: "Option", - blockRangeToMaximumThreshold: "Option" + tickRangeToMaximumThreshold: "Option" } } }, @@ -3215,6 +3218,9 @@ export default { }, force_initialise_challenge_cycle: { provider: "H256" + }, + set_paused: { + paused: "bool" } } }, @@ -3982,7 +3988,6 @@ export default { "FailedToEncodeFingerprint", "FailedToDecodeThreshold", "AboveThreshold", - "FailedToConvertBlockNumber", "ThresholdArithmeticError", "FailedTypeConversion", "DividedByZero", @@ -4003,7 +4008,7 @@ export default { "FileSizeCannotBeZero", "NoGlobalReputationWeightSet", "MaximumThresholdCannotBeZero", - "BlockRangeToMaximumThresholdCannotBeZero", + "TickRangeToMaximumThresholdCannotBeZero", "PendingStopStoringRequestNotFound", "MinWaitForStopStoringNotReached", "PendingStopStoringRequestAlreadyExists", @@ -4020,7 +4025,7 @@ export default { ] }, /** - * Lookup420: pallet_proofs_dealer::pallet::Error + * Lookup421: pallet_proofs_dealer::pallet::Error **/ PalletProofsDealerError: { _enum: [ @@ -4049,7 +4054,7 @@ export default { ] }, /** - * Lookup423: pallet_payment_streams::types::FixedRatePaymentStream + * Lookup424: pallet_payment_streams::types::FixedRatePaymentStream **/ PalletPaymentStreamsFixedRatePaymentStream: { rate: "u128", @@ -4058,7 +4063,7 @@ export default { outOfFundsTick: "Option" }, /** - * Lookup424: pallet_payment_streams::types::DynamicRatePaymentStream + * Lookup425: pallet_payment_streams::types::DynamicRatePaymentStream **/ PalletPaymentStreamsDynamicRatePaymentStream: { amountProvided: "u64", @@ -4067,14 +4072,14 @@ export default { outOfFundsTick: "Option" }, /** - * Lookup425: pallet_payment_streams::types::ProviderLastChargeableInfo + * Lookup426: pallet_payment_streams::types::ProviderLastChargeableInfo **/ PalletPaymentStreamsProviderLastChargeableInfo: { lastChargeableTick: "u32", priceIndex: "u128" }, /** - * Lookup426: pallet_payment_streams::pallet::Error + * Lookup427: pallet_payment_streams::pallet::Error **/ PalletPaymentStreamsError: { _enum: [ @@ -4097,7 +4102,7 @@ export default { ] }, /** - * Lookup427: pallet_bucket_nfts::pallet::Error + * Lookup428: pallet_bucket_nfts::pallet::Error **/ PalletBucketNftsError: { _enum: [ @@ -4108,7 +4113,7 @@ export default { ] }, /** - * Lookup428: pallet_nfts::types::CollectionDetails + * Lookup429: pallet_nfts::types::CollectionDetails **/ PalletNftsCollectionDetails: { owner: "AccountId32", @@ -4119,13 +4124,13 @@ export default { attributes: "u32" }, /** - * Lookup433: pallet_nfts::types::CollectionRole + * Lookup434: pallet_nfts::types::CollectionRole **/ PalletNftsCollectionRole: { _enum: ["__Unused0", "Issuer", "Freezer", "__Unused3", "Admin"] }, /** - * Lookup434: pallet_nfts::types::ItemDetails, bounded_collections::bounded_btree_map::BoundedBTreeMap, S>> + * Lookup435: pallet_nfts::types::ItemDetails, bounded_collections::bounded_btree_map::BoundedBTreeMap, S>> **/ PalletNftsItemDetails: { owner: "AccountId32", @@ -4133,42 +4138,42 @@ export default { deposit: "PalletNftsItemDeposit" }, /** - * Lookup435: pallet_nfts::types::ItemDeposit + * Lookup436: pallet_nfts::types::ItemDeposit **/ PalletNftsItemDeposit: { account: "AccountId32", amount: "u128" }, /** - * Lookup440: pallet_nfts::types::CollectionMetadata + * Lookup441: pallet_nfts::types::CollectionMetadata **/ PalletNftsCollectionMetadata: { deposit: "u128", data: "Bytes" }, /** - * Lookup441: pallet_nfts::types::ItemMetadata, StringLimit> + * Lookup442: pallet_nfts::types::ItemMetadata, StringLimit> **/ PalletNftsItemMetadata: { deposit: "PalletNftsItemMetadataDeposit", data: "Bytes" }, /** - * Lookup442: pallet_nfts::types::ItemMetadataDeposit + * Lookup443: pallet_nfts::types::ItemMetadataDeposit **/ PalletNftsItemMetadataDeposit: { account: "Option", amount: "u128" }, /** - * Lookup445: pallet_nfts::types::AttributeDeposit + * Lookup446: pallet_nfts::types::AttributeDeposit **/ PalletNftsAttributeDeposit: { account: "Option", amount: "u128" }, /** - * Lookup449: pallet_nfts::types::PendingSwap, Deadline> + * Lookup450: pallet_nfts::types::PendingSwap, Deadline> **/ PalletNftsPendingSwap: { desiredCollection: "u32", @@ -4177,7 +4182,7 @@ export default { deadline: "u32" }, /** - * Lookup451: pallet_nfts::types::PalletFeature + * Lookup452: pallet_nfts::types::PalletFeature **/ PalletNftsPalletFeature: { _enum: [ @@ -4193,7 +4198,7 @@ export default { ] }, /** - * Lookup452: pallet_nfts::pallet::Error + * Lookup453: pallet_nfts::pallet::Error **/ PalletNftsError: { _enum: [ @@ -4245,39 +4250,39 @@ export default { ] }, /** - * Lookup455: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender + * Lookup456: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender **/ FrameSystemExtensionsCheckNonZeroSender: "Null", /** - * Lookup456: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup457: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: "Null", /** - * Lookup457: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup458: frame_system::extensions::check_tx_version::CheckTxVersion **/ FrameSystemExtensionsCheckTxVersion: "Null", /** - * Lookup458: frame_system::extensions::check_genesis::CheckGenesis + * Lookup459: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: "Null", /** - * Lookup461: frame_system::extensions::check_nonce::CheckNonce + * Lookup462: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: "Compact", /** - * Lookup462: frame_system::extensions::check_weight::CheckWeight + * Lookup463: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: "Null", /** - * Lookup463: pallet_transaction_payment::ChargeTransactionPayment + * Lookup464: pallet_transaction_payment::ChargeTransactionPayment **/ PalletTransactionPaymentChargeTransactionPayment: "Compact", /** - * Lookup464: cumulus_primitives_storage_weight_reclaim::StorageWeightReclaim + * Lookup465: cumulus_primitives_storage_weight_reclaim::StorageWeightReclaim **/ CumulusPrimitivesStorageWeightReclaimStorageWeightReclaim: "Null", /** - * Lookup465: storage_hub_runtime::Runtime + * Lookup466: storage_hub_runtime::Runtime **/ StorageHubRuntimeRuntime: "Null" }; diff --git a/api-augment/src/interfaces/types-lookup.ts b/api-augment/src/interfaces/types-lookup.ts index 74621b181..e57685ca2 100644 --- a/api-augment/src/interfaces/types-lookup.ts +++ b/api-augment/src/interfaces/types-lookup.ts @@ -2078,6 +2078,10 @@ declare module "@polkadot/types/lookup" { readonly mutations: Vec>; readonly newRoot: H256; } & Struct; + readonly isChallengesTickerSet: boolean; + readonly asChallengesTickerSet: { + readonly paused: bool; + } & Struct; readonly type: | "NewChallenge" | "ProofAccepted" @@ -2086,7 +2090,8 @@ declare module "@polkadot/types/lookup" { | "SlashableProvider" | "NoRecordOfLastSubmittedProof" | "NewChallengeCycleInitialised" - | "MutationsApplied"; + | "MutationsApplied" + | "ChallengesTickerSet"; } /** @name PalletProofsDealerProof (136) */ @@ -4000,7 +4005,7 @@ declare module "@polkadot/types/lookup" { readonly isSetGlobalParameters: boolean; readonly asSetGlobalParameters: { readonly replicationTarget: Option; - readonly blockRangeToMaximumThreshold: Option; + readonly tickRangeToMaximumThreshold: Option; } & Struct; readonly type: | "CreateBucket" @@ -4044,7 +4049,11 @@ declare module "@polkadot/types/lookup" { readonly asForceInitialiseChallengeCycle: { readonly provider: H256; } & Struct; - readonly type: "Challenge" | "SubmitProof" | "ForceInitialiseChallengeCycle"; + readonly isSetPaused: boolean; + readonly asSetPaused: { + readonly paused: bool; + } & Struct; + readonly type: "Challenge" | "SubmitProof" | "ForceInitialiseChallengeCycle" | "SetPaused"; } /** @name PalletRandomnessCall (307) */ @@ -4938,7 +4947,6 @@ declare module "@polkadot/types/lookup" { readonly isFailedToEncodeFingerprint: boolean; readonly isFailedToDecodeThreshold: boolean; readonly isAboveThreshold: boolean; - readonly isFailedToConvertBlockNumber: boolean; readonly isThresholdArithmeticError: boolean; readonly isFailedTypeConversion: boolean; readonly isDividedByZero: boolean; @@ -4959,7 +4967,7 @@ declare module "@polkadot/types/lookup" { readonly isFileSizeCannotBeZero: boolean; readonly isNoGlobalReputationWeightSet: boolean; readonly isMaximumThresholdCannotBeZero: boolean; - readonly isBlockRangeToMaximumThresholdCannotBeZero: boolean; + readonly isTickRangeToMaximumThresholdCannotBeZero: boolean; readonly isPendingStopStoringRequestNotFound: boolean; readonly isMinWaitForStopStoringNotReached: boolean; readonly isPendingStopStoringRequestAlreadyExists: boolean; @@ -4997,7 +5005,6 @@ declare module "@polkadot/types/lookup" { | "FailedToEncodeFingerprint" | "FailedToDecodeThreshold" | "AboveThreshold" - | "FailedToConvertBlockNumber" | "ThresholdArithmeticError" | "FailedTypeConversion" | "DividedByZero" @@ -5018,7 +5025,7 @@ declare module "@polkadot/types/lookup" { | "FileSizeCannotBeZero" | "NoGlobalReputationWeightSet" | "MaximumThresholdCannotBeZero" - | "BlockRangeToMaximumThresholdCannotBeZero" + | "TickRangeToMaximumThresholdCannotBeZero" | "PendingStopStoringRequestNotFound" | "MinWaitForStopStoringNotReached" | "PendingStopStoringRequestAlreadyExists" @@ -5034,7 +5041,7 @@ declare module "@polkadot/types/lookup" { | "FileMetadataProcessingQueueFull"; } - /** @name PalletProofsDealerError (420) */ + /** @name PalletProofsDealerError (421) */ interface PalletProofsDealerError extends Enum { readonly isNotProvider: boolean; readonly isChallengesQueueOverflow: boolean; @@ -5083,7 +5090,7 @@ declare module "@polkadot/types/lookup" { | "TooManyValidProofSubmitters"; } - /** @name PalletPaymentStreamsFixedRatePaymentStream (423) */ + /** @name PalletPaymentStreamsFixedRatePaymentStream (424) */ interface PalletPaymentStreamsFixedRatePaymentStream extends Struct { readonly rate: u128; readonly lastChargedTick: u32; @@ -5091,7 +5098,7 @@ declare module "@polkadot/types/lookup" { readonly outOfFundsTick: Option; } - /** @name PalletPaymentStreamsDynamicRatePaymentStream (424) */ + /** @name PalletPaymentStreamsDynamicRatePaymentStream (425) */ interface PalletPaymentStreamsDynamicRatePaymentStream extends Struct { readonly amountProvided: u64; readonly priceIndexWhenLastCharged: u128; @@ -5099,13 +5106,13 @@ declare module "@polkadot/types/lookup" { readonly outOfFundsTick: Option; } - /** @name PalletPaymentStreamsProviderLastChargeableInfo (425) */ + /** @name PalletPaymentStreamsProviderLastChargeableInfo (426) */ interface PalletPaymentStreamsProviderLastChargeableInfo extends Struct { readonly lastChargeableTick: u32; readonly priceIndex: u128; } - /** @name PalletPaymentStreamsError (426) */ + /** @name PalletPaymentStreamsError (427) */ interface PalletPaymentStreamsError extends Enum { readonly isPaymentStreamAlreadyExists: boolean; readonly isPaymentStreamNotFound: boolean; @@ -5142,7 +5149,7 @@ declare module "@polkadot/types/lookup" { | "CooldownPeriodNotPassed"; } - /** @name PalletBucketNftsError (427) */ + /** @name PalletBucketNftsError (428) */ interface PalletBucketNftsError extends Enum { readonly isBucketIsNotPrivate: boolean; readonly isNotBucketOwner: boolean; @@ -5155,7 +5162,7 @@ declare module "@polkadot/types/lookup" { | "ConvertBytesToBoundedVec"; } - /** @name PalletNftsCollectionDetails (428) */ + /** @name PalletNftsCollectionDetails (429) */ interface PalletNftsCollectionDetails extends Struct { readonly owner: AccountId32; readonly ownerDeposit: u128; @@ -5165,7 +5172,7 @@ declare module "@polkadot/types/lookup" { readonly attributes: u32; } - /** @name PalletNftsCollectionRole (433) */ + /** @name PalletNftsCollectionRole (434) */ interface PalletNftsCollectionRole extends Enum { readonly isIssuer: boolean; readonly isFreezer: boolean; @@ -5173,44 +5180,44 @@ declare module "@polkadot/types/lookup" { readonly type: "Issuer" | "Freezer" | "Admin"; } - /** @name PalletNftsItemDetails (434) */ + /** @name PalletNftsItemDetails (435) */ interface PalletNftsItemDetails extends Struct { readonly owner: AccountId32; readonly approvals: BTreeMap>; readonly deposit: PalletNftsItemDeposit; } - /** @name PalletNftsItemDeposit (435) */ + /** @name PalletNftsItemDeposit (436) */ interface PalletNftsItemDeposit extends Struct { readonly account: AccountId32; readonly amount: u128; } - /** @name PalletNftsCollectionMetadata (440) */ + /** @name PalletNftsCollectionMetadata (441) */ interface PalletNftsCollectionMetadata extends Struct { readonly deposit: u128; readonly data: Bytes; } - /** @name PalletNftsItemMetadata (441) */ + /** @name PalletNftsItemMetadata (442) */ interface PalletNftsItemMetadata extends Struct { readonly deposit: PalletNftsItemMetadataDeposit; readonly data: Bytes; } - /** @name PalletNftsItemMetadataDeposit (442) */ + /** @name PalletNftsItemMetadataDeposit (443) */ interface PalletNftsItemMetadataDeposit extends Struct { readonly account: Option; readonly amount: u128; } - /** @name PalletNftsAttributeDeposit (445) */ + /** @name PalletNftsAttributeDeposit (446) */ interface PalletNftsAttributeDeposit extends Struct { readonly account: Option; readonly amount: u128; } - /** @name PalletNftsPendingSwap (449) */ + /** @name PalletNftsPendingSwap (450) */ interface PalletNftsPendingSwap extends Struct { readonly desiredCollection: u32; readonly desiredItem: Option; @@ -5218,7 +5225,7 @@ declare module "@polkadot/types/lookup" { readonly deadline: u32; } - /** @name PalletNftsPalletFeature (451) */ + /** @name PalletNftsPalletFeature (452) */ interface PalletNftsPalletFeature extends Enum { readonly isTrading: boolean; readonly isAttributes: boolean; @@ -5227,7 +5234,7 @@ declare module "@polkadot/types/lookup" { readonly type: "Trading" | "Attributes" | "Approvals" | "Swaps"; } - /** @name PalletNftsError (452) */ + /** @name PalletNftsError (453) */ interface PalletNftsError extends Enum { readonly isNoPermission: boolean; readonly isUnknownCollection: boolean; @@ -5322,30 +5329,30 @@ declare module "@polkadot/types/lookup" { | "WitnessRequired"; } - /** @name FrameSystemExtensionsCheckNonZeroSender (455) */ + /** @name FrameSystemExtensionsCheckNonZeroSender (456) */ type FrameSystemExtensionsCheckNonZeroSender = Null; - /** @name FrameSystemExtensionsCheckSpecVersion (456) */ + /** @name FrameSystemExtensionsCheckSpecVersion (457) */ type FrameSystemExtensionsCheckSpecVersion = Null; - /** @name FrameSystemExtensionsCheckTxVersion (457) */ + /** @name FrameSystemExtensionsCheckTxVersion (458) */ type FrameSystemExtensionsCheckTxVersion = Null; - /** @name FrameSystemExtensionsCheckGenesis (458) */ + /** @name FrameSystemExtensionsCheckGenesis (459) */ type FrameSystemExtensionsCheckGenesis = Null; - /** @name FrameSystemExtensionsCheckNonce (461) */ + /** @name FrameSystemExtensionsCheckNonce (462) */ interface FrameSystemExtensionsCheckNonce extends Compact {} - /** @name FrameSystemExtensionsCheckWeight (462) */ + /** @name FrameSystemExtensionsCheckWeight (463) */ type FrameSystemExtensionsCheckWeight = Null; - /** @name PalletTransactionPaymentChargeTransactionPayment (463) */ + /** @name PalletTransactionPaymentChargeTransactionPayment (464) */ interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} - /** @name CumulusPrimitivesStorageWeightReclaimStorageWeightReclaim (464) */ + /** @name CumulusPrimitivesStorageWeightReclaimStorageWeightReclaim (465) */ type CumulusPrimitivesStorageWeightReclaimStorageWeightReclaim = Null; - /** @name StorageHubRuntimeRuntime (465) */ + /** @name StorageHubRuntimeRuntime (466) */ type StorageHubRuntimeRuntime = Null; } // declare module diff --git a/api-augment/storagehub.json b/api-augment/storagehub.json index 2121ae14a..3b6fd7ee0 100644 --- a/api-augment/storagehub.json +++ b/api-augment/storagehub.json @@ -1 +1 @@ -{"jsonrpc":"2.0","result":"0x6d6574610e4907000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050000240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006300030000005060034083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d00003800000208003c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677340013c5665633c4469676573744974656d3e000040000002440044102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e00060024436f6e73656e7375730800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000400105365616c0800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000500144f74686572040038011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000480000030400000008004c00000250005008306672616d655f73797374656d2c4576656e745265636f7264080445015404540134000c011470686173659502011450686173650001146576656e7454010445000118746f70696373190201185665633c543e000054084c73746f726167655f6875625f72756e74696d653052756e74696d654576656e740001481853797374656d04005801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000003c50617261636861696e53797374656d04007c01bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0001002042616c616e636573040084017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000a00485472616e73616374696f6e5061796d656e7404008c01a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e000b00105375646f040090016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e000f0044436f6c6c61746f7253656c656374696f6e0400a001a470616c6c65745f636f6c6c61746f725f73656c656374696f6e3a3a4576656e743c52756e74696d653e0015001c53657373696f6e0400a8015470616c6c65745f73657373696f6e3a3a4576656e740016002458636d7051756575650400ac01a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e001e002c506f6c6b61646f7458636d0400b0016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e001f002843756d756c757358636d0400dd01018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e002000304d65737361676551756575650400e101019070616c6c65745f6d6573736167655f71756575653a3a4576656e743c52756e74696d653e0021002450726f7669646572730400f10101a070616c6c65745f73746f726167655f70726f7669646572733a3a4576656e743c52756e74696d653e0028002846696c6553797374656d04000902018870616c6c65745f66696c655f73797374656d3a3a4576656e743c52756e74696d653e0029003050726f6f66734465616c657204001d02019070616c6c65745f70726f6f66735f6465616c65723a3a4576656e743c52756e74696d653e002a002852616e646f6d6e65737304006502018470616c6c65745f72616e646f6d6e6573733a3a4576656e743c52756e74696d653e002b00385061796d656e7453747265616d7304006902019870616c6c65745f7061796d656e745f73747265616d733a3a4576656e743c52756e74696d653e002c00284275636b65744e66747304006d02018870616c6c65745f6275636b65745f6e6674733a3a4576656e743c52756e74696d653e002d00104e66747304007102016c70616c6c65745f6e6674733a3a4576656e743c52756e74696d653e00320000580c306672616d655f73797374656d1870616c6c6574144576656e7404045400011c4045787472696e7369635375636365737304013464697370617463685f696e666f5c01304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7268013444697370617463684572726f7200013464697370617463685f696e666f5c01304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736834011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e5c0c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874280118576569676874000114636c6173736001344469737061746368436c617373000120706179735f666565640110506179730000600c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000640c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000068082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504006c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400700128546f6b656e4572726f720007002841726974686d65746963040074013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007801485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d00006c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7248018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000070082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000074083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000078082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007c0c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e740404540001186056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d10015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e60446f776e776172644d657373616765735265636569766564040114636f756e7410010c7533320003040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564280118576569676874000120646d715f6865616434014472656c61795f636861696e3a3a48617368000404e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f6861736880013c4f7074696f6e3c58636d486173683e000504b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748004184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000840c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001581c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738801185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001504ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748814346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e63655374617475730001081046726565000000205265736572766564000100008c0c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574900c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400011014537564696404012c7375646f5f726573756c749401384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e00047041207375646f2063616c6c206a75737420746f6f6b20706c6163652e284b65794368616e67656408010c6f6c649c01504f7074696f6e3c543a3a4163636f756e7449643e04b4546865206f6c64207375646f206b657920286966206f6e65207761732070726576696f75736c7920736574292e010c6e6577000130543a3a4163636f756e7449640488546865206e6577207375646f206b657920286966206f6e652077617320736574292e010478546865207375646f206b657920686173206265656e20757064617465642e284b657952656d6f76656400020480546865206b657920776173207065726d616e656e746c792072656d6f7665642e285375646f4173446f6e6504012c7375646f5f726573756c749401384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e0304c841205b7375646f5f61735d2850616c6c65743a3a7375646f5f6173292063616c6c206a75737420746f6f6b20706c6163652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574940418526573756c740804540198044501680108084f6b040098000000000c45727204006800000100009800000400009c04184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000a00c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144576656e74040454000128404e6577496e76756c6e657261626c6573040134696e76756c6e657261626c6573a401445665633c543a3a4163636f756e7449643e0000046c4e657720496e76756c6e657261626c65732077657265207365742e44496e76756c6e657261626c6541646465640401286163636f756e745f6964000130543a3a4163636f756e7449640001047441206e657720496e76756c6e657261626c65207761732061646465642e4c496e76756c6e657261626c6552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e74496400020470416e20496e76756c6e657261626c65207761732072656d6f7665642e504e65774465736972656443616e64696461746573040148646573697265645f63616e6469646174657310010c753332000304a4546865206e756d626572206f6620646573697265642063616e6469646174657320776173207365742e404e657743616e646964616379426f6e6404012c626f6e645f616d6f756e7418013042616c616e63654f663c543e0004046c5468652063616e64696461637920626f6e6420776173207365742e3843616e64696461746541646465640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e0005045c41206e65772063616e646964617465206a6f696e65642e5043616e646964617465426f6e64557064617465640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e00060470426f6e64206f6620612063616e64696461746520757064617465642e4043616e64696461746552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e74496400070460412063616e646964617465207761732072656d6f7665642e4443616e6469646174655265706c616365640c010c6f6c64000130543a3a4163636f756e74496400010c6e6577000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804f4416e206163636f756e7420776173207265706c6163656420696e207468652063616e646964617465206c69737420627920616e6f74686572206f6e652e68496e76616c6964496e76756c6e657261626c65536b69707065640401286163636f756e745f6964000130543a3a4163636f756e7449640009085501416e206163636f756e742077617320756e61626c6520746f20626520616464656420746f2074686520496e76756c6e657261626c65732062656361757365207468657920646964206e6f742068617665206b657973c8726567697374657265642e204f7468657220496e76756c6e657261626c6573206d61792068617665206265656e207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a40000020000a80c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ac0c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e740404540001043c58636d704d65737361676553656e740401306d6573736167655f6861736804011c58636d48617368000004c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b00c2870616c6c65745f78636d1870616c6c6574144576656e7404045400016024417474656d7074656404011c6f7574636f6d65b4015078636d3a3a6c61746573743a3a4f7574636f6d65000004a8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e1053656e741001186f726967696ebc01204c6f636174696f6e00012c64657374696e6174696f6ebc01204c6f636174696f6e00011c6d6573736167650501011c58636d3c28293e0001286d6573736167655f696404011c58636d486173680001045c412058434d206d657373616765207761732073656e742e48556e6578706563746564526573706f6e73650801186f726967696ebc01204c6f636174696f6e00012071756572795f696430011c5175657279496400020c5901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e34526573706f6e7365526561647908012071756572795f696430011c51756572794964000120726573706f6e736531010120526573706f6e73650003085d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e204e6f7469666965640c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380004085901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e404e6f746966794f76657277656967687414012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800013461637475616c5f77656967687428011857656967687400014c6d61785f62756467657465645f77656967687428011857656967687400050c4901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e5901636f756c64206e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e4c4e6f7469667944697370617463684572726f720c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380006085501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e484e6f746966794465636f64654661696c65640c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800070c5101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e40496e76616c6964526573706f6e6465720c01186f726967696ebc01204c6f636174696f6e00012071756572795f696430011c5175657279496400014465787065637465645f6c6f636174696f6e550101404f7074696f6e3c4c6f636174696f6e3e00080c5901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5c496e76616c6964526573706f6e64657256657273696f6e0801186f726967696ebc01204c6f636174696f6e00012071756572795f696430011c5175657279496400091c5101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e34526573706f6e736554616b656e04012071756572795f696430011c51756572794964000a04c8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e34417373657473547261707065640c011068617368340110483235360001186f726967696ebc01204c6f636174696f6e0001186173736574737501013c56657273696f6e6564417373657473000b04b8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e5456657273696f6e4368616e67654e6f74696669656410012c64657374696e6174696f6ebc01204c6f636174696f6e000118726573756c7410012858636d56657273696f6e000110636f7374110101184173736574730001286d6573736167655f696404011c58636d48617368000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e5c537570706f7274656456657273696f6e4368616e6765640801206c6f636174696f6ebc01204c6f636174696f6e00011c76657273696f6e10012858636d56657273696f6e000d08390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e504e6f7469667954617267657453656e644661696c0c01206c6f636174696f6ebc01204c6f636174696f6e00012071756572795f696430011c517565727949640001146572726f72b8012058636d4572726f72000e0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e644e6f746966795461726765744d6967726174696f6e4661696c0801206c6f636174696f6ed901014456657273696f6e65644c6f636174696f6e00012071756572795f696430011c51756572794964000f0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e54496e76616c69645175657269657256657273696f6e0801186f726967696ebc01204c6f636174696f6e00012071756572795f696430011c5175657279496400101c5501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e38496e76616c6964517565726965721001186f726967696ebc01204c6f636174696f6e00012071756572795f696430011c5175657279496400014065787065637465645f71756572696572bc01204c6f636174696f6e0001506d617962655f61637475616c5f71756572696572550101404f7074696f6e3c4c6f636174696f6e3e00110c5d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5056657273696f6e4e6f74696679537461727465640c012c64657374696e6174696f6ebc01204c6f636174696f6e000110636f7374110101184173736574730001286d6573736167655f696404011c58636d486173680012085901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e5856657273696f6e4e6f746966795265717565737465640c012c64657374696e6174696f6ebc01204c6f636174696f6e000110636f7374110101184173736574730001286d6573736167655f696404011c58636d486173680013043d015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e642075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e6056657273696f6e4e6f74696679556e7265717565737465640c012c64657374696e6174696f6ebc01204c6f636174696f6e000110636f7374110101184173736574730001286d6573736167655f696404011c58636d4861736800140825015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765386e6f74696669636174696f6e732e204665657350616964080118706179696e67bc01204c6f636174696f6e0001106665657311010118417373657473001504310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e34417373657473436c61696d65640c011068617368340110483235360001186f726967696ebc01204c6f636174696f6e0001186173736574737501013c56657273696f6e6564417373657473001604c0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e20617373657420747261706056657273696f6e4d6967726174696f6e46696e697368656404011c76657273696f6e10012858636d56657273696f6e00170484412058434d2076657273696f6e206d6967726174696f6e2066696e69736865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b4102c73746167696e675f78636d087634187472616974731c4f7574636f6d6500010c20436f6d706c6574650401107573656428011857656967687400000028496e636f6d706c657465080110757365642801185765696768740001146572726f72b801144572726f72000100144572726f720401146572726f72b801144572726f7200020000b8100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040030010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002801185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d697400270000bc102c73746167696e675f78636d087634206c6f636174696f6e204c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72c001244a756e6374696f6e730000c0102c73746167696e675f78636d087634246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400c401484172633c5b4a756e6374696f6e3b20315d3e0001000858320400e801484172633c5b4a756e6374696f6e3b20325d3e0002000858330400ec01484172633c5b4a756e6374696f6e3b20335d3e0003000858340400f001484172633c5b4a756e6374696f6e3b20345d3e0004000858350400f401484172633c5b4a756e6374696f6e3b20355d3e0005000858360400f801484172633c5b4a756e6374696f6e3b20365d3e0006000858370400fc01484172633c5b4a756e6374696f6e3b20375d3e0007000858380400010101484172633c5b4a756e6374696f6e3b20385d3e00080000c400000301000000c800c8102c73746167696e675f78636d087634206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400cc010c7533320000002c4163636f756e744964333208011c6e6574776f726bd001444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bd001444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726bd001444f7074696f6e3c4e6574776f726b49643e00010c6b6579d801205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400dc0110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964e00118426f6479496400011070617274e40120426f6479506172740008003c476c6f62616c436f6e73656e7375730400d401244e6574776f726b496400090000cc0000061000d004184f7074696f6e04045401d40108104e6f6e6500000010536f6d650400d40000010000d4102c73746167696e675f78636d087634206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657230010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a0000d8000003140000000800dc0000061800e0100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040048011c5b75383b20345d00010014496e6465780400cc010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000e4100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74cc010c753332000100204672616374696f6e08010c6e6f6dcc010c75333200011464656e6f6dcc010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dcc010c75333200011464656e6f6dcc010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dcc010c75333200011464656e6f6dcc010c75333200040000e800000302000000c800ec00000303000000c800f000000304000000c800f400000305000000c800f800000306000000c800fc00000307000000c800010100000308000000c80005010c2c73746167696e675f78636d0876340c58636d041043616c6c00000400090101585665633c496e737472756374696f6e3c43616c6c3e3e000009010000020d01000d010c2c73746167696e675f78636d0876342c496e737472756374696f6e041043616c6c0001c03457697468647261774173736574040011010118417373657473000000545265736572766541737365744465706f7369746564040011010118417373657473000100585265636569766554656c65706f727465644173736574040011010118417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736531010120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572550101404f7074696f6e3c4c6f636174696f6e3e000300345472616e7366657241737365740801186173736574731101011841737365747300012c62656e6566696369617279bc01204c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574731101011841737365747300011064657374bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64590101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c5d01014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572cc010c7533320001406d61785f6d6573736167655f73697a65cc010c7533320001306d61785f6361706163697479cc010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74cc010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72cc010c75333200011873656e646572cc010c753332000124726563697069656e74cc010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400c00140496e746572696f724c6f636174696f6e000b002c5265706f72744572726f720400610101445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574736501012c417373657446696c74657200012c62656e6566696369617279bc01204c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574736501012c417373657446696c74657200011064657374bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e000e003445786368616e676541737365740c0110676976656501012c417373657446696c74657200011077616e741101011841737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574736501012c417373657446696c74657200011c72657365727665bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574736501012c417373657446696c74657200011064657374bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f610101445175657279526573706f6e7365496e666f0001186173736574736501012c417373657446696c74657200120030427579457865637574696f6e080110666565731901011441737365740001307765696768745f6c696d69747101012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000501012458636d3c43616c6c3e0015002c536574417070656e64697804000501012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473110101184173736574730001187469636b6574bc01204c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e4173736574040011010118417373657473001c002c4578706563744173736574040011010118417373657473001d00304578706563744f726967696e0400550101404f7074696f6e3c4c6f636174696f6e3e001e002c4578706563744572726f720400350101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304004d0101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f610101445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578cc010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72cc010c75333200013c6d696e5f63726174655f6d696e6f72cc010c753332002200505265706f72745472616e736163745374617475730400610101445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400c801204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bd401244e6574776f726b496400012c64657374696e6174696f6ec00140496e746572696f724c6f636174696f6e00010c78636d0501011c58636d3c28293e002600244c6f636b41737365740801146173736574190101144173736574000120756e6c6f636b6572bc01204c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574190101144173736574000118746172676574bc01204c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365741901011441737365740001146f776e6572bc01204c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365741901011441737365740001186c6f636b6572bc01204c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400bc01204c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747101012c5765696768744c696d6974000130636865636b5f6f726967696e550101404f7074696f6e3c4c6f636174696f6e3e002f00001101102c73746167696e675f78636d0876341461737365741841737365747300000400150101285665633c41737365743e000015010000021901001901102c73746167696e675f78636d087634146173736574144173736574000008010869641d01011c4173736574496400010c66756e2101012c46756e676962696c69747900001d01102c73746167696e675f78636d0876341461737365741c4173736574496400000400bc01204c6f636174696f6e00002101102c73746167696e675f78636d0876341461737365742c46756e676962696c6974790001082046756e6769626c650400dc0110753132380000002c4e6f6e46756e6769626c650400250101344173736574496e7374616e6365000100002501102c73746167696e675f78636d087634146173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400dc01107531323800010018417272617934040048011c5b75383b20345d0002001841727261793804002901011c5b75383b20385d0003001c4172726179313604002d0101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d0005000029010000030800000008002d0100000310000000080031010c2c73746167696e675f78636d08763420526573706f6e7365000118104e756c6c000000184173736574730400110101184173736574730001003c457865637574696f6e526573756c740400350101504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f04003d010198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c7404004d0101384d617962654572726f72436f646500050000350104184f7074696f6e0404540139010108104e6f6e6500000010536f6d6504003901000001000039010000040810b8003d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014101045300000400490101185665633c543e000041010c2c73746167696e675f78636d0876342850616c6c6574496e666f0000180114696e646578cc010c7533320001106e616d6545010180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d6545010180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72cc010c7533320001146d696e6f72cc010c7533320001147061746368cc010c753332000045010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000049010000024101004d010c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f7204005101018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f7204005101018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e0002000051010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000550104184f7074696f6e04045401bc0108104e6f6e6500000010536f6d650400bc000001000059010c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d000300005d010c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656438011c5665633c75383e000061010c2c73746167696e675f78636d087634445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ebc01204c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400006501102c73746167696e675f78636d0876341461737365742c417373657446696c74657200010820446566696e6974650400110101184173736574730000001057696c6404006901012457696c644173736574000100006901102c73746167696e675f78636d0876341461737365742457696c6441737365740001100c416c6c00000014416c6c4f6608010869641d01011c4173736574496400010c66756e6d01013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400cc010c75333200020030416c6c4f66436f756e7465640c010869641d01011c4173736574496400010c66756e6d01013c57696c6446756e676962696c697479000114636f756e74cc010c753332000300006d01102c73746167696e675f78636d0876341461737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000071010c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400280118576569676874000100007501080c78636d3c56657273696f6e656441737365747300010c08563204007901013c76323a3a4d756c74694173736574730001000856330400ad01013c76333a3a4d756c746941737365747300030008563404001101012876343a3a417373657473000400007901100c78636d087632286d756c746961737365742c4d756c7469417373657473000004007d01013c5665633c4d756c746941737365743e00007d010000028101008101100c78636d087632286d756c74696173736574284d756c74694173736574000008010869648501011c4173736574496400010c66756ea501012c46756e676962696c69747900008501100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400890101344d756c74694c6f636174696f6e000000204162737472616374040038011c5665633c75383e000100008901100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f728d0101244a756e6374696f6e7300008d01100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400910101204a756e6374696f6e0001000858320800910101204a756e6374696f6e0000910101204a756e6374696f6e0002000858330c00910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0003000858341000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0004000858351400910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0005000858361800910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0006000858371c00910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0007000858382000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e000800009101100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400cc010c7533320000002c4163636f756e744964333208011c6e6574776f726b950101244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b950101244e6574776f726b4964000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b950101244e6574776f726b496400010c6b6579d801205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400dc0110753132380005002847656e6572616c4b65790400990101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c69747908010869649d010118426f6479496400011070617274a1010120426f6479506172740008000095010c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400990101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d610003000099010c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003801185665633c543e00009d010c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400990101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400cc010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000a1010c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74cc010c753332000100204672616374696f6e08010c6e6f6dcc010c75333200011464656e6f6dcc010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dcc010c75333200011464656e6f6dcc010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dcc010c75333200011464656e6f6dcc010c75333200040000a501100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400dc0110753132380000002c4e6f6e46756e6769626c650400a90101344173736574496e7374616e636500010000a901100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400dc01107531323800010018417272617934040048011c5b75383b20345d0002001841727261793804002901011c5b75383b20385d0003001c4172726179313604002d0101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040038011c5665633c75383e00060000ad01100c78636d087633286d756c746961737365742c4d756c746941737365747300000400b101013c5665633c4d756c746941737365743e0000b101000002b50100b501100c78636d087633286d756c74696173736574284d756c7469417373657400000801086964b901011c4173736574496400010c66756ed101012c46756e676962696c6974790000b901100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400bd0101344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d00010000bd01102c73746167696e675f78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72c10101244a756e6374696f6e730000c101100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400c50101204a756e6374696f6e0001000858320800c50101204a756e6374696f6e0000c50101204a756e6374696f6e0002000858330c00c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0003000858341000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0004000858351400c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0005000858361800c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0006000858371c00c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0007000858382000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e00080000c501100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400cc010c7533320000002c4163636f756e744964333208011c6e6574776f726bc90101444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bc90101444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726bc90101444f7074696f6e3c4e6574776f726b49643e00010c6b6579d801205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400dc0110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964e00118426f6479496400011070617274e40120426f6479506172740008003c476c6f62616c436f6e73656e7375730400cd0101244e6574776f726b496400090000c90104184f7074696f6e04045401cd010108104e6f6e6500000010536f6d650400cd010000010000cd01100c78636d087633206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657230010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a0000d101100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400dc0110753132380000002c4e6f6e46756e6769626c650400d50101344173736574496e7374616e636500010000d501100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400dc01107531323800010018417272617934040048011c5b75383b20345d0002001841727261793804002901011c5b75383b20385d0003001c4172726179313604002d0101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000d901080c78636d4456657273696f6e65644c6f636174696f6e00010c08563204008901014476323a3a4d756c74694c6f636174696f6e0001000856330400bd01014476333a3a4d756c74694c6f636174696f6e0003000856340400bc013076343a3a4c6f636174696f6e00040000dd010c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000b4011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e1010c5070616c6c65745f6d6573736167655f71756575651870616c6c6574144576656e740404540001104050726f63657373696e674661696c65640c010869643401104832353604945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696ee50101484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e01146572726f72ed01014c50726f636573734d6573736167654572726f721060546865206572726f722074686174206f636375727265642e00490154686973206572726f7220697320707265747479206f70617175652e204d6f72652066696e652d677261696e6564206572726f7273206e65656420746f20626520656d6974746564206173206576656e74736862792074686520604d65737361676550726f636573736f72602e000455014d657373616765206469736361726465642064756520746f20616e206572726f7220696e2074686520604d65737361676550726f636573736f72602028757375616c6c79206120666f726d6174206572726f72292e2450726f63657373656410010869643401104832353604945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696ee50101484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e012c7765696768745f7573656428011857656967687404c0486f77206d7563682077656967687420776173207573656420746f2070726f6365737320746865206d6573736167652e011c73756363657373200110626f6f6c18885768657468657220746865206d657373616765207761732070726f6365737365642e0049014e6f74652074686174207468697320646f6573206e6f74206d65616e20746861742074686520756e6465726c79696e6720604d65737361676550726f636573736f72602077617320696e7465726e616c6c7935017375636365737366756c2e204974202a736f6c656c792a206d65616e73207468617420746865204d512070616c6c65742077696c6c2074726561742074686973206173206120737563636573734d01636f6e646974696f6e20616e64206469736361726420746865206d6573736167652e20416e7920696e7465726e616c206572726f72206e6565647320746f20626520656d6974746564206173206576656e74736862792074686520604d65737361676550726f636573736f72602e0104544d6573736167652069732070726f6365737365642e484f766572776569676874456e71756575656410010869640401205b75383b2033325d04945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696ee50101484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e0128706167655f696e64657810012450616765496e64657804605468652070616765206f6620746865206d6573736167652e01346d6573736167655f696e64657810011c543a3a53697a6504a454686520696e646578206f6620746865206d6573736167652077697468696e2074686520706167652e02048c4d65737361676520706c6163656420696e206f7665727765696768742071756575652e28506167655265617065640801186f726967696ee50101484d6573736167654f726967696e4f663c543e0458546865207175657565206f662074686520706167652e0114696e64657810012450616765496e646578045854686520696e646578206f662074686520706167652e03045454686973207061676520776173207265617065642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e501085c63756d756c75735f7072696d6974697665735f636f7265584167677265676174654d6573736167654f726967696e00010c104865726500000018506172656e740001001c5369626c696e670400e901011850617261496400020000e9010c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665730849640000040010010c7533320000ed0110346672616d655f737570706f727418747261697473206d657373616765734c50726f636573734d6573736167654572726f7200011424426164466f726d61740000001c436f72727570740001002c556e737570706f72746564000200284f7665727765696768740400280118576569676874000300145969656c6400040000f1010c6070616c6c65745f73746f726167655f70726f7669646572731870616c6c6574144576656e740404540001245c4d7370526571756573745369676e55705375636365737310010c77686f000130543a3a4163636f756e7449640001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e000120636170616369747930014853746f7261676544617461556e69743c543e00012876616c75655f70726f700102014c56616c756550726f706f736974696f6e3c543e000008b1014576656e7420656d6974746564207768656e2061204d61696e2053746f726167652050726f7669646572206861732072657175657374656420746f207369676e207570207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f7574e50174686174204d53502773206163636f756e742069642c20697473206d756c74696164647265737365732c2074686520746f74616c20646174612069742063616e2073746f7265206163636f7264696e6720746f20697473207374616b652c20616e64206974732076616c75652070726f706f736974696f6e2e404d73705369676e55705375636365737310010c77686f000130543a3a4163636f756e7449640001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e000120636170616369747930014853746f7261676544617461556e69743c543e00012876616c75655f70726f700102014c56616c756550726f706f736974696f6e3c543e000108b5014576656e7420656d6974746564207768656e2061204d61696e2053746f726167652050726f76696465722068617320636f6e6669726d656420697473207369676e207570207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f7574dd0174686174204d53502773206163636f756e742069642c2074686520746f74616c20646174612069742063616e2073746f7265206163636f7264696e6720746f20697473207374616b652c20697473206d756c7469616464726573732c20616e64206974732076616c75652070726f706f736974696f6e2e5c427370526571756573745369676e5570537563636573730c010c77686f000130543a3a4163636f756e7449640001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e000120636170616369747930014853746f7261676544617461556e69743c543e000208b9014576656e7420656d6974746564207768656e2061204261636b75702053746f726167652050726f7669646572206861732072657175657374656420746f207369676e207570207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f7574890174686174204253502773206163636f756e742069642c20697473206d756c74696164647265737365732c20616e642074686520746f74616c20646174612069742063616e2073746f7265206163636f7264696e6720746f20697473207374616b652e404273705369676e5570537563636573730c010c77686f000130543a3a4163636f756e7449640001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e000120636170616369747930014853746f7261676544617461556e69743c543e000308bd014576656e7420656d6974746564207768656e2061204261636b75702053746f726167652050726f76696465722068617320636f6e6669726d656420697473207369676e207570207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f7574810174686174204253502773206163636f756e742069642c2074686520746f74616c20646174612069742063616e2073746f7265206163636f7264696e6720746f20697473207374616b652c20616e6420697473206d756c7469616464726573732e545369676e55705265717565737443616e63656c656404010c77686f000130543a3a4163636f756e7449640004087d014576656e7420656d6974746564207768656e2061207369676e207570207265717565737420686173206265656e2063616e63656c6564207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f7574d4746865206163636f756e74206964206f6620746865207573657220746861742063616e63656c65642074686520726571756573742e444d73705369676e4f66665375636365737304010c77686f000130543a3a4163636f756e74496400050889014576656e7420656d6974746564207768656e2061204d61696e2053746f726167652050726f766964657220686173207369676e6564206f6666207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f75745874686174204d53502773206163636f756e742069642e444273705369676e4f66665375636365737304010c77686f000130543a3a4163636f756e74496400060891014576656e7420656d6974746564207768656e2061204261636b75702053746f726167652050726f766964657220686173207369676e6564206f6666207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f75745874686174204253502773206163636f756e742069642e3c43617061636974794368616e67656410010c77686f000130543a3a4163636f756e7449640001306f6c645f636170616369747930014853746f7261676544617461556e69743c543e0001306e65775f636170616369747930014853746f7261676544617461556e69743c543e0001786e6578745f626c6f636b5f7768656e5f6368616e67655f616c6c6f776564100144426c6f636b4e756d626572466f723c543e00070865014576656e7420656d6974746564207768656e206120535020686173206368616e67656420697473206361706163697479207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f75744901746861742053502773206163636f756e742069642c20697473206f6c6420746f74616c2064617461207468617420636f756c642073746f72652c20616e6420746865206e657720746f74616c20646174612e1c536c617368656408012c70726f76696465725f69643401244861736849643c543e000138616d6f756e745f736c617368656418013042616c616e63654f663c543e000804a84576656e7420656d6974746564207768656e20616e20535020686173206265656e20736c61736865642e04b4546865206576656e747320746861742063616e20626520656d697474656420627920746869732070616c6c6574f5010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f901045300000400fd0101185665633c543e0000f9010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000fd01000002f9010001020c6070616c6c65745f73746f726167655f70726f7669646572731474797065734056616c756550726f706f736974696f6e04045400000c01286964656e74696669657234013856616c756550726f7049643c543e000128646174615f6c696d697430014853746f7261676544617461556e69743c543e00012470726f746f636f6c73050201a4426f756e6465645665633c50726f746f636f6c733c543e2c204d617850726f746f636f6c733c543e3e000005020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f901045300000400fd0101185665633c543e000009020c4870616c6c65745f66696c655f73797374656d1870616c6c6574144576656e7404045400015c244e65774275636b657418010c77686f000130543a3a4163636f756e7449640001186d73705f696434014050726f76696465724964466f723c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001106e616d65f90101404275636b65744e616d65466f723c543e000134636f6c6c656374696f6e5f69640d0201684f7074696f6e3c436f6c6c656374696f6e4964466f723c543e3e00011c70726976617465200110626f6f6c000004b04e6f74696669657320746861742061206e6577206275636b657420686173206265656e20637265617465642e4c4d6f76654275636b65745265717565737465640c010c77686f000130543a3a4163636f756e7449640001246275636b65745f69643401384275636b65744964466f723c543e0001286e65775f6d73705f696434014050726f76696465724964466f723c543e000104cc4e6f74696669657320746861742061206275636b6574206973206265696e67206d6f76656420746f2061206e6577204d53502e504275636b6574507269766163795570646174656410010c77686f000130543a3a4163636f756e7449640001246275636b65745f69643401384275636b65744964466f723c543e000134636f6c6c656374696f6e5f69640d0201684f7074696f6e3c436f6c6c656374696f6e4964466f723c543e3e00011c70726976617465200110626f6f6c000204c84e6f74696669657320746861742061206275636b65742773207072697661637920686173206265656e20757064617465642e6c4e6577436f6c6c656374696f6e416e644173736f63696174696f6e0c010c77686f000130543a3a4163636f756e7449640001246275636b65745f69643401384275636b65744964466f723c543e000134636f6c6c656374696f6e5f6964100148436f6c6c656374696f6e4964466f723c543e00030435014e6f74696669657320746861742061206e657720636f6c6c656374696f6e20686173206265656e206372656174656420616e64206173736f63696174656420776974682061206275636b65742e444e657753746f72616765526571756573741c010c77686f000130543a3a4163636f756e74496400012066696c655f6b65793401344d65726b6c65486173683c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e00012c66696e6765727072696e7434013846696e6765727072696e743c543e00011073697a6530013853746f72616765446174613c543e000120706565725f696473f5010128506565724964733c543e000404e44e6f74696669657320746861742061206e65772066696c6520686173206265656e2072657175657374656420746f2062652073746f7265642e484d7370416363657074656453746f72696e6714012066696c655f6b65793401344d65726b6c65486173683c543e0001186d73705f696434014050726f76696465724964466f723c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001146f776e6572000130543a3a4163636f756e74496400013c6e65775f6275636b65745f726f6f743401344d65726b6c65486173683c543e000504c44e6f74696669657320746861742061204d53502068617320616363657074656420746f2073746f726520612066696c652e504163636570746564427370566f6c756e746565721c01186273705f696434014050726f76696465724964466f723c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e00012c66696e6765727072696e7434013846696e6765727072696e743c543e0001386d756c7469616464726573736573f50101444d756c74694164647265737365733c543e0001146f776e6572000130543a3a4163636f756e74496400011073697a6530013853746f72616765446174613c543e000604f04e6f746966696573207468617420612042535020686173206265656e20616363657074656420746f2073746f7265206120676976656e2066696c652e4c427370436f6e6669726d656453746f72696e6710010c77686f000130543a3a4163636f756e7449640001186273705f696434014050726f76696465724964466f723c543e00012466696c655f6b657973150201f0426f756e6465645665633c4d65726b6c65486173683c543e2c20543a3a4d61784261746368436f6e6669726d53746f7261676552657175657374733e0001206e65775f726f6f743401344d65726b6c65486173683c543e000704c04e6f746966696573207468617420612042535020636f6e6669726d65642073746f72696e6720612066696c652873292e5c53746f726167655265717565737446756c66696c6c656404012066696c655f6b65793401344d65726b6c65486173683c543e00080409014e6f746966696573207468617420612073746f72616765207265717565737420666f7220612066696c65206b657920686173206265656e2066756c66696c6c65642e5453746f72616765526571756573744578706972656404012066696c655f6b65793401344d65726b6c65486173683c543e000904b44e6f746966696573207468652065787069726174696f6e206f6620612073746f7261676520726571756573742e5453746f72616765526571756573745265766f6b656404012066696c655f6b65793401344d65726b6c65486173683c543e000a0439014e6f746966696573207468617420612073746f72616765207265717565737420686173206265656e207265766f6b65642062792074686520757365722077686f20696e697469617465642069742e64427370526571756573746564546f53746f7053746f72696e671001186273705f696434014050726f76696465724964466f723c543e00012066696c655f6b65793401344d65726b6c65486173683c543e0001146f776e6572000130543a3a4163636f756e7449640001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e000b0401014e6f746966696573207468617420612042535020686173206f70656e65642061207265717565737420746f2073746f702073746f72696e6720612066696c652e60427370436f6e6669726d53746f7070656453746f72696e670c01186273705f696434014050726f76696465724964466f723c543e00012066696c655f6b65793401344d65726b6c65486173683c543e0001206e65775f726f6f743401344d65726b6c65486173683c543e000c04bc4e6f7469666965732074686174206120425350206861732073746f707065642073746f72696e6720612066696c652e985072696f726974794368616c6c656e6765466f7246696c6544656c6574696f6e51756575656408011075736572000130543a3a4163636f756e74496400012066696c655f6b65793401344d65726b6c65486173683c543e000d0451014e6f746966696573207468617420612066696c65206b657920686173206265656e2071756575656420666f722061207072696f72697479206368616c6c656e676520666f722066696c652064656c6574696f6e2e68537053746f7053746f72696e67496e736f6c76656e745573657214011473705f696434014050726f76696465724964466f723c543e00012066696c655f6b65793401344d65726b6c65486173683c543e0001146f776e6572000130543a3a4163636f756e7449640001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e0001206e65775f726f6f743401344d65726b6c65486173683c543e000e0455014e6f74696669657320746861742061205350206861732073746f707065642073746f72696e6720612066696c65206265636175736520697473206f776e657220686173206265636f6d6520696e736f6c76656e742e784661696c6564546f51756575655072696f726974794368616c6c656e676508011075736572000130543a3a4163636f756e74496400012066696c655f6b65793401344d65726b6c65486173683c543e000f0445014e6f74696669657320746861742061207072696f72697479206368616c6c656e6765206661696c656420746f2062652071756575656420666f722070656e64696e672066696c652064656c6574696f6e2e4c46696c6544656c6574696f6e5265717565737414011075736572000130543a3a4163636f756e74496400012066696c655f6b65793401344d65726b6c65486173683c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001186d73705f696434014050726f76696465724964466f723c543e00014870726f6f665f6f665f696e636c7573696f6e200110626f6f6c001004944e6f746966696573207468617420612066696c652077696c6c2062652064656c657465642eac50726f6f665375626d6974746564466f7250656e64696e6746696c6544656c6574696f6e526571756573741401186d73705f696434014050726f76696465724964466f723c543e00011075736572000130543a3a4163636f756e74496400012066696c655f6b65793401344d65726b6c65486173683c543e0001246275636b65745f69643401384275636b65744964466f723c543e00014870726f6f665f6f665f696e636c7573696f6e200110626f6f6c00110435014e6f746966696573207468617420612070726f6f6620686173206265656e207375626d697474656420666f7220612070656e64696e672066696c652064656c6574696f6e20726571756573742e704273704368616c6c656e67654379636c65496e697469616c6973656408010c77686f000130543a3a4163636f756e7449640001186273705f696434014050726f76696465724964466f723c543e00120845014e6f74696669657320746861742061204253502773206368616c6c656e6765206379636c6520686173206265656e20696e697469616c697365642c20616464696e67207468652066697273742066696c65ac6b657928732920746f20746865204253502773204d65726b6c6520506174726963696120466f726573742e604d6f76654275636b657452657175657374457870697265640801186d73705f696434014050726f76696465724964466f723c543e0001246275636b65745f69643401384275636b65744964466f723c543e001304c04e6f74696669657320746861742061206d6f7665206275636b657420726571756573742068617320657870697265642e484d6f76654275636b657441636365707465640801246275636b65745f69643401384275636b65744964466f723c543e0001186d73705f696434014050726f76696465724964466f723c543e001404cc4e6f74696669657320746861742061206275636b657420686173206265656e206d6f76656420746f2061206e6577204d53502e484d6f76654275636b657452656a65637465640801246275636b65745f69643401384275636b65744964466f723c543e0001186d73705f696434014050726f76696465724964466f723c543e00150405014e6f74696669657320746861742061206275636b6574206d6f7665207265717565737420686173206265656e2072656a656374656420627920746865204d53502e844461746153657276657252656769737465726564466f724d6f76654275636b65740801186273705f696434014050726f76696465724964466f723c543e0001246275636b65745f69643401384275636b65744964466f723c543e00160429014e6f7469666965732074686174206120646174612073657276657220686173206265656e207265676973746572656420666f722061206d6f7665206275636b657420726571756573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d0204184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000011020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000015020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400190201185665633c543e0000190200000234001d020c5070616c6c65745f70726f6f66735f6465616c65721870616c6c6574144576656e74040454000120304e65774368616c6c656e676508010c77686f00013c4163636f756e744964466f723c543e0001386b65795f6368616c6c656e6765643401244b6579466f723c543e0000048441206d616e75616c206368616c6c656e676520776173207375626d69747465642e3450726f6f66416363657074656408012070726f766964657234014050726f76696465724964466f723c543e00011470726f6f662102012050726f6f663c543e00010454412070726f6f66207761732061636365707465642e404e65774368616c6c656e6765536565640801446368616c6c656e6765735f7469636b6572100144426c6f636b4e756d626572466f723c543e0001107365656434015852616e646f6d6e6573734f7574707574466f723c543e0002048c41206e6577206368616c6c656e67652073656564207761732067656e6572617465642e584e6577436865636b706f696e744368616c6c656e67650801446368616c6c656e6765735f7469636b6572100144426c6f636b4e756d626572466f723c543e0001286368616c6c656e6765734902015d01426f756e6465645665633c284b6579466f723c543e2c204f7074696f6e3c5472696552656d6f76654d75746174696f6e3e292c0a4d6178437573746f6d4368616c6c656e676573506572426c6f636b466f723c543e2c3e000304a441206e657720636865636b706f696e74206368616c6c656e6765207761732067656e6572617465642e44536c61736861626c6550726f766964657208012070726f766964657234014050726f76696465724964466f723c543e00015c6e6578745f6368616c6c656e67655f646561646c696e65100144426c6f636b4e756d626572466f723c543e0004045901412070726f766964657220776173206d61726b656420617320736c61736861626c6520616e64207468656972206368616c6c656e676520646561646c696e652077617320666f72636566756c6c79207075736865642e704e6f5265636f72644f664c6173745375626d697474656450726f6f6604012070726f766964657234014050726f76696465724964466f723c543e000504f84e6f207265636f7264206f6620746865206c617374207469636b207468652050726f7669646572207375626d697474656420612070726f6f6620666f722e704e65774368616c6c656e67654379636c65496e697469616c6973656410013063757272656e745f7469636b100144426c6f636b4e756d626572466f723c543e00015c6e6578745f6368616c6c656e67655f646561646c696e65100144426c6f636b4e756d626572466f723c543e00012070726f766964657234014050726f76696465724964466f723c543e0001586d617962655f70726f76696465725f6163636f756e749c01504f7074696f6e3c543a3a4163636f756e7449643e000604b4412070726f76696465722773206368616c6c656e6765206379636c652077617320696e697469616c697365642e404d75746174696f6e734170706c6965640c012070726f766964657234014050726f76696465724964466f723c543e0001246d75746174696f6e735d0201905665633c284b6579466f723c543e2c205472696552656d6f76654d75746174696f6e293e0001206e65775f726f6f743401244b6579466f723c543e000704c84120736574206f66206d75746174696f6e7320686173206265656e206170706c69656420746f2074686520466f726573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c657421020c5070616c6c65745f70726f6f66735f6465616c65721474797065731450726f6f660404540000080130666f726573745f70726f6f6625020164466f72657374566572696669657250726f6f66466f723c543e0001286b65795f70726f6f66732d02018042547265654d61703c4b6579466f723c543e2c204b657950726f6f663c543e3e000025020c1c73705f747269653473746f726167655f70726f6f6630436f6d7061637450726f6f660000040134656e636f6465645f6e6f646573290201305665633c5665633c75383e3e0000290200000238002d02042042547265654d617008044b01340456013102000400410200000031020c5070616c6c65745f70726f6f66735f6465616c6572147479706573204b657950726f6f66040454000008011470726f6f66350201584b6579566572696669657250726f6f66466f723c543e00013c6368616c6c656e67655f636f756e7410010c753332000035020c547368705f66696c655f6b65795f76657269666965721474797065733046696c654b657950726f6f66000008013466696c655f6d65746164617461390201d846696c654d657461646174613c485f4c454e4754482c204348554e4b5f53495a452c2053495a455f544f5f4348414c4c454e4745533e00011470726f6f6625020130436f6d7061637450726f6f660000390208447368705f66696c655f6d657461646174613046696c654d6574616461746100001401146f776e657238011c5665633c75383e0001246275636b65745f696438011c5665633c75383e0001206c6f636174696f6e38011c5665633c75383e00012466696c655f73697a652c010c75363400012c66696e6765727072696e743d02015446696e6765727072696e743c485f4c454e4754483e00003d0208447368705f66696c655f6d657461646174612c46696e6765727072696e7400000400040138486173683c485f4c454e4754483e000041020000024502004502000004083431020049020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d02045300000400590201185665633c543e00004d020000040834510200510204184f7074696f6e0404540155020108104e6f6e6500000010536f6d65040055020000010000550208287368705f747261697473485472696552656d6f76654d75746174696f6e0000000059020000024d02005d020000026102006102000004083455020065020c4470616c6c65745f72616e646f6d6e6573731870616c6c6574144576656e74040454000104844e65774f6e6545706f636841676f52616e646f6d6e657373417661696c61626c650c013c72616e646f6d6e6573735f7365656434011c543a3a4861736800012866726f6d5f65706f636830010c75363400014476616c69645f756e74696c5f626c6f636b100144426c6f636b4e756d626572466f723c543e00000419014576656e7420656d6974746564207768656e2061206e65772072616e646f6d207365656420697320617661696c61626c652066726f6d207468652072656c617920636861696e047c54686520604576656e746020656e756d206f6620746869732070616c6c657469020c5870616c6c65745f7061796d656e745f73747265616d731870616c6c6574144576656e7404045400012c744669786564526174655061796d656e7453747265616d437265617465640c0130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e0001107261746518013042616c616e63654f663c543e000008e5014576656e7420656d6974746564207768656e20612066697865642d72617465207061796d656e742073747265616d20697320637265617465642e2050726f766964657320696e666f726d6174696f6e2061626f7574207468652050726f766964657220616e642055736572206f66207468652073747265616d54616e642069747320696e697469616c20726174652e744669786564526174655061796d656e7453747265616d557064617465640c0130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e0001206e65775f7261746518013042616c616e63654f663c543e000108e5014576656e7420656d6974746564207768656e20612066697865642d72617465207061796d656e742073747265616d20697320757064617465642e2050726f766964657320696e666f726d6174696f6e2061626f757420746865205573657220616e642050726f7669646572206f66207468652073747265616d7c616e6420746865206e65772072617465206f66207468652073747265616d2e744669786564526174655061796d656e7453747265616d44656c65746564080130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e000204e9014576656e7420656d6974746564207768656e20612066697865642d72617465207061796d656e742073747265616d2069732072656d6f7665642e2050726f766964657320696e666f726d6174696f6e2061626f757420746865205573657220616e642050726f7669646572206f66207468652073747265616d2e7c44796e616d6963526174655061796d656e7453747265616d437265617465640c0130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e00013c616d6f756e745f70726f766964656430014c556e69747350726f7669646564466f723c543e000308ed014576656e7420656d6974746564207768656e20612064796e616d69632d72617465207061796d656e742073747265616d20697320637265617465642e2050726f766964657320696e666f726d6174696f6e2061626f757420746865205573657220616e642050726f7669646572206f66207468652073747265616d80616e642074686520696e697469616c20616d6f756e742070726f76696465642e7c44796e616d6963526174655061796d656e7453747265616d557064617465640c0130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e00014c6e65775f616d6f756e745f70726f766964656430014c556e69747350726f7669646564466f723c543e000408ed014576656e7420656d6974746564207768656e20612064796e616d69632d72617465207061796d656e742073747265616d20697320757064617465642e2050726f766964657320696e666f726d6174696f6e2061626f757420746865205573657220616e642050726f7669646572206f66207468652073747265616d70616e6420746865206e657720616d6f756e742070726f76696465642e7c44796e616d6963526174655061796d656e7453747265616d44656c65746564080130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e000504f1014576656e7420656d6974746564207768656e20612064796e616d69632d72617465207061796d656e742073747265616d2069732072656d6f7665642e2050726f766964657320696e666f726d6174696f6e2061626f757420746865205573657220616e642050726f7669646572206f66207468652073747265616d2e505061796d656e7453747265616d436861726765640c0130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e000118616d6f756e7418013042616c616e63654f663c543e00060879014576656e7420656d6974746564207768656e2061207061796d656e7420697320636861726765642e2050726f766964657320696e666f726d6174696f6e2061626f757420746865207573657220746861742077617320636861726765642c19017468652050726f76696465722074686174207265636569766564207468652066756e64732c20616e642074686520616d6f756e7420746861742077617320636861726765642e644c61737443686172676561626c65496e666f557064617465640c012c70726f76696465725f696434014050726f76696465724964466f723c543e0001506c6173745f63686172676561626c655f7469636b100144426c6f636b4e756d626572466f723c543e00016c6c6173745f63686172676561626c655f70726963655f696e64657818013042616c616e63654f663c543e00070821024576656e7420656d6974746564207768656e20612050726f76696465722773206c6173742063686172676561626c65207469636b20616e6420707269636520696e6465782061726520757064617465642e2050726f766964657320696e666f726d6174696f6e2061626f7574207468652050726f7669646572206f66207468652073747265616d2c3501746865207469636b206e756d626572206f6620746865206c6173742063686172676561626c65207469636b20616e642074686520707269636520696e6465782061742074686174207469636b2e4055736572576974686f757446756e647304010c77686f000130543a3a4163636f756e74496400080c19024576656e7420656d6974746564207768656e20612050726f766964657220697320636f72726563746c7920747279696e6720746f206368617267652061205573657220616e642074686174205573657220646f6573206e6f74206861766520656e6f7567682066756e647320746f2070617920666f722074686569722073657276696365732e390254686973206576656e7420697320656d697474656420746f20666c616720746865207573657220616e64206c657420746865206e6574776f726b206b6e6f772074686174207468652075736572206973206e6f7420706179696e6720666f7220746865207265717565737465642073657276696365732c20736f206f746865722050726f7669646572732063616e9473746f702070726f766964696e6720736572766963657320746f207468617420757365722e345573657250616964446562747304010c77686f000130543a3a4163636f756e74496400090449024576656e7420656d6974746564207768656e20612055736572207468617420686173206265656e20666c6167676564206173206e6f7420686176696e6720656e6f7567682066756e647320746f2070617920666f7220746865697220636f6e7472616374656420736572766963657320686173207061696420616c6c20697473206f75747374616e64696e6720646562742e2c55736572536f6c76656e7404010c77686f000130543a3a4163636f756e744964000a083d024576656e7420656d6974746564207768656e20612055736572207468617420686173206265656e20666c6167676564206173206e6f7420686176696e6720656e6f7567682066756e647320746f2070617920666f7220746865697220636f6e7472616374656420736572766963657320686173207761697465642074686520636f6f6c646f776e20706572696f642c4901636f72726563746c79207061696420616c6c207468656972206f75747374616e64696e67206465627420616e642063616e206e6f7720636f6e7472616374206e657720736572766963657320616761696e2e04b4546865206576656e747320746861742063616e20626520656d697474656420627920746869732070616c6c65746d020c4870616c6c65745f6275636b65745f6e6674731870616c6c6574144576656e7404045400010c30416363657373536861726564080118697373756572000130543a3a4163636f756e744964000124726563697069656e740001684163636f756e7449644c6f6f6b75705461726765744f663c543e00000419014e6f74696669657320746861742061636365737320746f2061206275636b657420686173206265656e20736861726564207769746820616e6f74686572206163636f756e742e544974656d52656164416363657373557064617465640c011461646d696e000130543a3a4163636f756e7449640001186275636b65743401384275636b65744964466f723c543e00011c6974656d5f6964100124543a3a4974656d4964000104ec4e6f74696669657320746861742074686520726561642061636365737320666f7220616e206974656d20686173206265656e20757064617465642e284974656d4275726e65640c011c6163636f756e74000130543a3a4163636f756e7449640001186275636b65743401384275636b65744964466f723c543e00011c6974656d5f6964100124543a3a4974656d4964000204984e6f746966696573207468617420616e206974656d20686173206265656e206275726e65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657471020c2c70616c6c65745f6e6674731870616c6c6574144576656e740804540004490001981c437265617465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e484974656d5472616e736665724c6f636b6564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400060488416e20606974656d6020626563616d65206e6f6e2d7472616e7366657261626c652e504974656d5472616e73666572556e6c6f636b6564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400070478416e20606974656d6020626563616d65207472616e7366657261626c652e504974656d50726f706572746965734c6f636b6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001346c6f636b5f6d65746164617461200110626f6f6c00013c6c6f636b5f61747472696275746573200110626f6f6c000804a8606974656d60206d65746164617461206f7220617474726962757465732077657265206c6f636b65642e40436f6c6c656374696f6e4c6f636b6564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173206c6f636b65642e304f776e65724368616e676564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001186973737565729c01504f7074696f6e3c543a3a4163636f756e7449643e00011461646d696e9c01504f7074696f6e3c543a3a4163636f756e7449643e00011c667265657a65729c01504f7074696f6e3c543a3a4163636f756e7449643e000b0470546865206d616e6167656d656e74207465616d206368616e6765642e405472616e73666572417070726f766564140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000120646561646c696e650d0201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e54416c6c417070726f76616c7343616e63656c6c65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e744964000e049c416c6c20617070726f76616c73206f6620616e206974656d20676f742063616e63656c6c65642e5c436f6c6c656374696f6e436f6e6669674368616e676564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000f040101412060636f6c6c656374696f6e6020686173206861642069747320636f6e666967206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d65746164617461536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106461746175020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001004b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001104b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e3c4974656d4d657461646174615365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001106461746175020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001204984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e4c4974656d4d65746164617461436c6561726564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73790201385665633c543a3a4974656d49643e0014042101546865206465706f73697420666f72206120736574206f6620606974656d60732077697468696e20612060636f6c6c656374696f6e6020686173206265656e20757064617465642e30417474726962757465536574140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e00010c6b65797d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c756575020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e0001246e616d657370616365810201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00150405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c6561726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e00010c6b65797d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0001246e616d657370616365810201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e0016040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e6c4974656d41747472696275746573417070726f76616c41646465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465000130543a3a4163636f756e744964001704cc41206e657720617070726f76616c20746f206d6f64696679206974656d2061747472696275746573207761732061646465642e744974656d41747472696275746573417070726f76616c52656d6f7665640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465000130543a3a4163636f756e744964001804d441206e657720617070726f76616c20746f206d6f64696679206974656d2061747472696275746573207761732072656d6f7665642e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6e0d02015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001904c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001a04a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e74436f6c6c656374696f6e4d696e7453657474696e677355706461746564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001b04ac4d696e742073657474696e677320666f72206120636f6c6c656374696f6e20686164206368616e6765642e6c4e657874436f6c6c656374696f6e4964496e6372656d656e74656404011c6e6578745f69640d02015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001c0401014576656e74206765747320656d6974746564207768656e2074686520604e657874436f6c6c656374696f6e496460206765747320696e6372656d656e7465642e304974656d5072696365536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00014477686974656c69737465645f62757965729c01504f7074696f6e3c543a3a4163636f756e7449643e001d047c546865207072696365207761732073657420666f7220746865206974656d2e404974656d507269636552656d6f766564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001e048c54686520707269636520666f7220746865206974656d207761732072656d6f7665642e284974656d426f75676874140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00011873656c6c6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964001f044c416e206974656d2077617320626f756768742e1c54697053656e74140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011873656e646572000130543a3a4163636f756e7449640001207265636569766572000130543a3a4163636f756e744964000118616d6f756e741801584465706f73697442616c616e63654f663c542c20493e0020043c4120746970207761732073656e742e2c53776170437265617465641801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130646573697265645f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e0001147072696365850201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e65100144426c6f636b4e756d626572466f723c543e00210488416e20606974656d60207377617020696e74656e742077617320637265617465642e345377617043616e63656c6c65641801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130646573697265645f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e0001147072696365850201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e65100144426c6f636b4e756d626572466f723c543e0022045c5468652073776170207761732063616e63656c6c65642e2c53776170436c61696d656420013c73656e745f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400012473656e745f6974656d100124543a3a4974656d496400013c73656e745f6974656d5f6f776e6572000130543a3a4163636f756e74496400014c72656365697665645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400013472656365697665645f6974656d100124543a3a4974656d496400014c72656365697665645f6974656d5f6f776e6572000130543a3a4163636f756e7449640001147072696365850201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e65100144426c6f636b4e756d626572466f723c543e00230468546865207377617020686173206265656e20636c61696d65642e585072655369676e6564417474726962757465735365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001246e616d657370616365810201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e002404fc4e657720617474726962757465732068617665206265656e2073657420666f7220616e20606974656d60206f66207468652060636f6c6c656374696f6e602e4850616c6c6574417474726962757465536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d0d0201444f7074696f6e3c543a3a4974656d49643e0001246174747269627574659102018450616c6c6574417474726962757465733c543a3a436f6c6c656374696f6e49643e00011476616c756575020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e0025084d0141206e65772061747472696275746520696e20746865206050616c6c657460206e616d657370616365207761732073657420666f72207468652060636f6c6c656374696f6e60206f7220616e20606974656d606477697468696e20746861742060636f6c6c656374696f6e602e047c54686520604576656e746020656e756d206f6620746869732070616c6c657475020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000790200000210007d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000081020c2c70616c6c65745f6e667473147479706573484174747269627574654e616d65737061636504244163636f756e744964010001101850616c6c65740000003c436f6c6c656374696f6e4f776e6572000100244974656d4f776e65720002001c4163636f756e7404000001244163636f756e74496400030000850204184f7074696f6e0404540189020108104e6f6e6500000010536f6d6504008902000001000089020c2c70616c6c65745f6e66747314747970657348507269636557697468446972656374696f6e0418416d6f756e74011800080118616d6f756e74180118416d6f756e74000124646972656374696f6e8d0201385072696365446972656374696f6e00008d020c2c70616c6c65745f6e667473147479706573385072696365446972656374696f6e0001081053656e640000001c526563656976650001000091020c2c70616c6c65745f6e6674731474797065734050616c6c6574417474726962757465730430436f6c6c656374696f6e4964011001082c55736564546f436c61696d0400100130436f6c6c656374696f6e4964000000405472616e7366657244697361626c656400010000950208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e0002000099020000029d02009d0200000408101000a10208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ecc014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65a502016473705f72756e74696d653a3a52756e74696d65537472696e670000a5020000050200a90208306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c0000ad020c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b38011c5665633c75383e00000c684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e008843616e20626520657865637574656420627920657665727920606f726967696e602e387365745f686561705f7061676573040114706167657330010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646538011c5665633c75383e0002046453657420746865206e65772072756e74696d6520636f64652e5c7365745f636f64655f776974686f75745f636865636b73040110636f646538011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0051014e6f746520746861742072756e74696d652075706772616465732077696c6c206e6f742072756e20696620746869732069732063616c6c656420776974682061206e6f742d696e6372656173696e6720737065632076657273696f6e212c7365745f73746f726167650401146974656d73b10201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973290201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697838010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b38011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e44617574686f72697a655f75706772616465040124636f64655f6861736834011c543a3a486173680009106101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736834011c543a3a48617368000a206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015741524e494e473a205468697320617574686f72697a657320616e207570677261646520746861742077696c6c2074616b6520706c61636520776974686f757420616e792073616665747920636865636b732c20666f7259016578616d706c652074686174207468652073706563206e616d652072656d61696e73207468652073616d6520616e642074686174207468652076657273696f6e206e756d62657220696e637265617365732e204e6f74f07265636f6d6d656e64656420666f72206e6f726d616c207573652e205573652060617574686f72697a655f757067726164656020696e73746561642e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e606170706c795f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000b24550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005901446570656e64696e67206f6e207468652072756e74696d65277320604f6e536574436f64656020636f6e66696775726174696f6e2c20746869732066756e6374696f6e206d6179206469726563746c79206170706c791101746865206e65772060636f64656020696e207468652073616d6520626c6f636b206f7220617474656d707420746f207363686564756c652074686520757067726164652e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb102000002b50200b50200000408383800b9020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c617373bd0201845065724469737061746368436c6173733c57656967687473506572436c6173733e0000bd020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401c102000c01186e6f726d616cc10201045400012c6f7065726174696f6e616cc1020104540001246d616e6461746f7279c1020104540000c1020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e736963c50201384f7074696f6e3c5765696768743e0001246d61785f746f74616cc50201384f7074696f6e3c5765696768743e0001207265736572766564c50201384f7074696f6e3c5765696768743e0000c50204184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000c9020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178cd0201545065724469737061746368436c6173733c7533323e0000cd020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f7279100104540000d102082873705f776569676874733c52756e74696d65446257656967687400000801107265616430010c753634000114777269746530010c7536340000d502082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65a502013452756e74696d65537472696e67000124696d706c5f6e616d65a502013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c75333200011061706973d902011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e08010875380000d902040c436f7704045401dd02000400dd02000000dd02000002e10200e1020000040829011000e5020000050400e9020c306672616d655f73797374656d1870616c6c6574144572726f720404540001243c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e6c4d756c7469426c6f636b4d6967726174696f6e734f6e676f696e67000604550141206d756c74692d626c6f636b206d6967726174696f6e206973206f6e676f696e6720616e642070726576656e7473207468652063757272656e7420636f64652066726f6d206265696e67207265706c616365642e444e6f7468696e67417574686f72697a6564000704584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400080494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c6574ed02000002f10200f1020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e7420416e636573746f720404480134000c0138757365645f62616e647769647468f50201345573656442616e647769647468000138706172615f686561645f68617368090301244f7074696f6e3c483e000160636f6e73756d65645f676f5f61686561645f7369676e616c0d03018c4f7074696f6e3c72656c61795f636861696e3a3a55706772616465476f41686561643e0000f5020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e74345573656442616e64776964746800000c0134756d705f6d73675f636f756e7410010c75333200013c756d705f746f74616c5f627974657310010c75333200013468726d705f6f7574676f696e67f902018c42547265654d61703c5061726149642c2048726d704368616e6e656c5570646174653e0000f902042042547265654d617008044b01e901045601fd020004000103000000fd020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e744448726d704368616e6e656c55706461746500000801246d73675f636f756e7410010c75333200012c746f74616c5f627974657310010c75333200000103000002050300050300000408e901fd0200090304184f7074696f6e04045401340108104e6f6e6500000010536f6d6504003400000100000d0304184f7074696f6e0404540111030108104e6f6e6500000010536f6d6504001103000001000011030c4c706f6c6b61646f745f7072696d6974697665730876363855706772616465476f41686561640001081441626f72740000001c476f41686561640001000015030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e74385365676d656e74547261636b65720404480134000c0138757365645f62616e647769647468f50201345573656442616e64776964746800013868726d705f77617465726d61726b0d0201804f7074696f6e3c72656c61795f636861696e3a3a426c6f636b4e756d6265723e000160636f6e73756d65645f676f5f61686561645f7369676e616c0d03018c4f7074696f6e3c72656c61795f636861696e3a3a55706772616465476f41686561643e000019030c4c706f6c6b61646f745f7072696d6974697665730876365c50657273697374656456616c69646174696f6e446174610804480134044e01100010012c706172656e745f686561641d030120486561644461746100014c72656c61795f706172656e745f6e756d6265721001044e00016472656c61795f706172656e745f73746f726167655f726f6f74340104480001306d61785f706f765f73697a6510010c75333200001d030c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665732048656164446174610000040038011c5665633c75383e0000210304184f7074696f6e0404540125030108104e6f6e6500000010536f6d6504002503000001000025030c4c706f6c6b61646f745f7072696d69746976657308763648557067726164655265737472696374696f6e0001041c50726573656e740000000029030c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f6465732d03014442547265655365743c5665633c75383e3e00002d03042042547265655365740404540138000400290200000031030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f6865616434014472656c61795f636861696e3a3a4861736800019c72656c61795f64697370617463685f71756575655f72656d61696e696e675f63617061636974793503018c52656c61794469737061746368517565756552656d61696e696e674361706163697479000140696e67726573735f6368616e6e656c73390301885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73390301885665633c285061726149642c20416272696467656448726d704368616e6e656c293e000035030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f748c52656c61794469737061746368517565756552656d61696e696e674361706163697479000008013c72656d61696e696e675f636f756e7410010c75333200013872656d61696e696e675f73697a6510010c753332000039030000023d03003d0300000408e90141030041030c4c706f6c6b61646f745f7072696d6974697665730876364c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747910010c7533320001386d61785f746f74616c5f73697a6510010c7533320001406d61785f6d6573736167655f73697a6510010c7533320001246d73675f636f756e7410010c753332000128746f74616c5f73697a6510010c7533320001206d71635f68656164090301304f7074696f6e3c486173683e000045030c4c706f6c6b61646f745f7072696d697469766573087636644162726964676564486f7374436f6e66696775726174696f6e00002801346d61785f636f64655f73697a6510010c7533320001486d61785f686561645f646174615f73697a6510010c7533320001586d61785f7570776172645f71756575655f636f756e7410010c7533320001546d61785f7570776172645f71756575655f73697a6510010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6510010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e10012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617910012c426c6f636b4e756d6265720001506173796e635f6261636b696e675f706172616d73490301484173796e634261636b696e67506172616d7300004903104c706f6c6b61646f745f7072696d697469766573087636346173796e635f6261636b696e67484173796e634261636b696e67506172616d73000008014c6d61785f63616e6469646174655f646570746810010c753332000150616c6c6f7765645f616e6365737472795f6c656e10010c75333200004d03089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e0000040034012452656c61794861736800005103042042547265654d617008044b01e9010456014d0300040055030000005503000002590300590300000408e9014d03005d0300000261030061030860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401e90100080124726563697069656e74e901010849640001106461746138015073705f7374643a3a7665633a3a5665633c75383e000065030c3473705f61726974686d657469632c66697865645f706f696e74244669786564553132380000040018011075313238000069030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174616d03015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653801345570776172644d65737361676500010044617574686f72697a655f75706772616465080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c0002206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015468652060636865636b5f76657273696f6e6020706172616d657465722073657473206120626f6f6c65616e20666c616720666f722077686574686572206f72206e6f74207468652072756e74696d6527732073706563610176657273696f6e20616e64206e616d652073686f756c64206265207665726966696564206f6e20757067726164652e2053696e63652074686520617574686f72697a6174696f6e206f6e6c7920686173206120686173682cb069742063616e6e6f742061637475616c6c7920706572666f726d2074686520766572696669636174696f6e2e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e60656e6163745f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000324550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005d014e6f7465207468617420746869732066756e6374696f6e2077696c6c206e6f74206170706c7920746865206e65772060636f6465602c20627574206f6e6c7920617474656d707420746f207363686564756c652074686574757067726164652077697468207468652052656c617920436861696e2e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d03089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f646174611903015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f73746174652903015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d657373616765737103016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573790301a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e0000710300000275030075030860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d62657200010c6d736738013c446f776e776172644d65737361676500007903042042547265654d617008044b01e9010456017d0300040085030000007d0300000281030081030860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d6265720001106461746138015073705f7374643a3a7665633a3a5665633c75383e00008503000002890300890300000408e9017d03008d030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e91030c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400004c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e7420737065636966696564206279685b60436f6e6669673a3a4d696e696d756d506572696f64605d2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e0051015468697320646973706174636820636c617373206973205f4d616e6461746f72795f20746f20656e73757265206974206765747320657865637574656420696e2074686520626c6f636b2e204265206177617265510174686174206368616e67696e672074686520636f6d706c6578697479206f6620746869732063616c6c20636f756c6420726573756c742065786861757374696e6720746865207265736f757263657320696e206184626c6f636b20746f206578656375746520616e79206f746865722063616c6c732e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602955012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f283129602062656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e95030c5873746167696e675f70617261636861696e5f696e666f1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e99030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454019d03045300000400a50301185665633c543e00009d030c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964290101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73a103011c526561736f6e730000a1030c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000a5030000029d0300a9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ad03045300000400b10301185665633c543e0000ad030c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720129011c42616c616e6365011800080108696429010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000b103000002ad0300b5030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b903045300000400c90301185665633c543e0000b9030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e740808496401bd031c42616c616e63650118000801086964bd0301084964000118616d6f756e7418011c42616c616e63650000bd03084c73746f726167655f6875625f72756e74696d654452756e74696d65486f6c64526561736f6e0001082450726f7669646572730400c103019070616c6c65745f73746f726167655f70726f7669646572733a3a486f6c64526561736f6e002800385061796d656e7453747265616d730400c503018870616c6c65745f7061796d656e745f73747265616d733a3a486f6c64526561736f6e002c0000c1030c6070616c6c65745f73746f726167655f70726f7669646572731870616c6c657428486f6c64526561736f6e0001085853746f7261676550726f76696465724465706f736974000000344275636b65744465706f73697400010000c5030c5870616c6c65745f7061796d656e745f73747265616d731870616c6c657428486f6c64526561736f6e000104505061796d656e7453747265616d4465706f73697400000000c903000002b90300cd030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d103045300000400d50301185665633c543e0000d1030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e740808496401981c42616c616e636501180008010869649801084964000118616d6f756e7418011c42616c616e63650000d503000002d10300d9030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000120507472616e736665725f616c6c6f775f646561746808011064657374dd0301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565dc0128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e38666f7263655f7472616e736665720c0118736f75726365dd0301504163636f756e7449644c6f6f6b75704f663c543e00011064657374dd0301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565dc0128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374dd0301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565dc0128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374dd0301504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665200110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686fdd0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686fa401445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f72207468655c706f73736962696c696c7479206f6620636875726e292e44666f7263655f7365745f62616c616e636508010c77686fdd0301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565dc0128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6ee503014c41646a7573746d656e74446972656374696f6e00011464656c7461dc0128543a3a42616c616e6365000914b841646a7573742074686520746f74616c2069737375616e636520696e20612073617475726174696e67207761792e00fc43616e206f6e6c792062652063616c6c656420627920726f6f7420616e6420616c77617973206e65656473206120706f736974697665206064656c7461602e002423204578616d706c65040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732edd030c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780198011408496404000001244163636f756e74496400000014496e6465780400e10301304163636f756e74496e6465780001000c526177040038011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400d801205b75383b2032305d00040000e1030000069800e5030c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e63726561736500000020446563726561736500010000e9030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eed03086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000f1030c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000114107375646f04011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000004350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e547375646f5f756e636865636b65645f77656967687408011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000114350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e1c7365745f6b657904010c6e6577dd0301504163636f756e7449644c6f6f6b75704f663c543e0002085d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e1c7375646f5f617308010c77686fdd0301504163636f756e7449644c6f6f6b75704f663c543e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0003104d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2872656d6f76655f6b657900040c845065726d616e656e746c792072656d6f76657320746865207375646f206b65792e006c2a2a546869732063616e6e6f7420626520756e2d646f6e652e2a2a040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef503084c73746f726167655f6875625f72756e74696d652c52756e74696d6543616c6c00014c1853797374656d0400ad0201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000003c50617261636861696e53797374656d0400690301d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0001002454696d657374616d700400910301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002003450617261636861696e496e666f0400950301c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e496e666f2c2052756e74696d653e0003002042616c616e6365730400d90301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e000a00105375646f0400f10301a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e000f0044436f6c6c61746f7253656c656374696f6e0400f90301d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6c6c61746f7253656c656374696f6e2c2052756e74696d653e0015001c53657373696f6e0400fd0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016002458636d70517565756504000d0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e001e002c506f6c6b61646f7458636d0400110401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e001f002843756d756c757358636d0400a50401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43756d756c757358636d2c2052756e74696d653e002000304d65737361676551756575650400a90401c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d65737361676551756575652c2052756e74696d653e0021002450726f7669646572730400ad0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f7669646572732c2052756e74696d653e0028002846696c6553797374656d0400b10401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c46696c6553797374656d2c2052756e74696d653e0029003050726f6f66734465616c65720400c90401c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f6f66734465616c65722c2052756e74696d653e002a002852616e646f6d6e6573730400cd0401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c52616e646f6d6e6573732c2052756e74696d653e002b00385061796d656e7453747265616d730400d10401cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5061796d656e7453747265616d732c2052756e74696d653e002c00284275636b65744e6674730400d50401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4275636b65744e6674732c2052756e74696d653e002d00104e6674730400dd0401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6674732c2052756e74696d653e00320000f9030c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65741043616c6c040454000124447365745f696e76756c6e657261626c657304010c6e6577a401445665633c543a3a4163636f756e7449643e000034310153657420746865206c697374206f6620696e76756c6e657261626c65202866697865642920636f6c6c61746f72732e20546865736520636f6c6c61746f7273206d75737420646f20736f6d65d07072657061726174696f6e2c206e616d656c7920746f206861766520726567697374657265642073657373696f6e206b6579732e0059015468652063616c6c2077696c6c2072656d6f766520616e79206163636f756e747320746861742068617665206e6f742072656769737465726564206b6579732066726f6d20746865207365742e20546861742069732c5d016974206973206e6f6e2d61746f6d69633b207468652063616c6c6572206163636570747320616c6c20604163636f756e74496460732070617373656420696e20606e657760205f696e646976696475616c6c795f206173310161636365707461626c6520496e76756c6e657261626c65732c20616e64206973206e6f742070726f706f73696e672061205f7365745f206f66206e657720496e76756c6e657261626c65732e005901546869732063616c6c20646f6573206e6f74206d61696e7461696e206d757475616c206578636c75736976697479206f662060496e76756c6e657261626c65736020616e64206043616e64696461746573602e20497461016973207265636f6d6d656e64656420746f207573652061206261746368206f6620606164645f696e76756c6e657261626c656020616e64206072656d6f76655f696e76756c6e657261626c656020696e73746561642e204151016062617463685f616c6c602063616e20616c736f206265207573656420746f20656e666f7263652061746f6d69636974792e20496620616e792063616e646964617465732061726520696e636c7564656420696e4d01606e6577602c20746865792073686f756c642062652072656d6f7665642077697468206072656d6f76655f696e76756c6e657261626c655f63616e6469646174656020616674657220657865637574696f6e2e00944d7573742062652063616c6c65642062792074686520605570646174654f726967696e602e587365745f646573697265645f63616e6469646174657304010c6d617810010c75333200011455015365742074686520696465616c206e756d626572206f66206e6f6e2d696e76756c6e657261626c6520636f6c6c61746f72732e204966206c6f776572696e672074686973206e756d6265722c207468656e2074686561016e756d626572206f662072756e6e696e6720636f6c6c61746f727320636f756c6420626520686967686572207468616e2074686973206669677572652e2041736964652066726f6d2074686174206564676520636173652c350174686572652073686f756c64206265206e6f206f746865722077617920746f2068617665206d6f72652063616e64696461746573207468616e207468652064657369726564206e756d6265722e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e487365745f63616e6469646163795f626f6e64040110626f6e6418013042616c616e63654f663c543e00021c78536574207468652063616e64696461637920626f6e6420616d6f756e742e0051014966207468652063616e64696461637920626f6e6420697320696e6372656173656420627920746869732063616c6c2c20616c6c2063757272656e742063616e64696461746573207768696368206861766520614d016465706f736974206c6f776572207468616e20746865206e657720626f6e642077696c6c206265206b69636b65642066726f6d20746865206c69737420616e6420676574207468656972206465706f73697473146261636b2e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e5472656769737465725f61735f63616e646964617465000310410152656769737465722074686973206163636f756e74206173206120636f6c6c61746f722063616e6469646174652e20546865206163636f756e74206d7573742028612920616c726561647920686176651d01726567697374657265642073657373696f6e206b65797320616e64202862292062652061626c6520746f207265736572766520746865206043616e646964616379426f6e64602e00dc546869732063616c6c206973206e6f7420617661696c61626c6520746f2060496e76756c6e657261626c656020636f6c6c61746f72732e306c656176655f696e74656e7400041455014465726567697374657220606f726967696e60206173206120636f6c6c61746f722063616e6469646174652e204e6f746520746861742074686520636f6c6c61746f722063616e206f6e6c79206c65617665206f6e0d0173657373696f6e206368616e67652e20546865206043616e646964616379426f6e64602077696c6c20626520756e726573657276656420696d6d6564696174656c792e001901546869732063616c6c2077696c6c206661696c2069662074686520746f74616c206e756d626572206f662063616e6469646174657320776f756c642064726f702062656c6f775c604d696e456c696769626c65436f6c6c61746f7273602e406164645f696e76756c6e657261626c6504010c77686f000130543a3a4163636f756e74496400051045014164642061206e6577206163636f756e74206077686f6020746f20746865206c697374206f662060496e76756c6e657261626c65736020636f6c6c61746f72732e206077686f60206d75737420686176651d01726567697374657265642073657373696f6e206b6579732e204966206077686f6020697320612063616e6469646174652c20746865792077696c6c2062652072656d6f7665642e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e4c72656d6f76655f696e76756c6e657261626c6504010c77686f000130543a3a4163636f756e744964000610610152656d6f766520616e206163636f756e74206077686f602066726f6d20746865206c697374206f662060496e76756c6e657261626c65736020636f6c6c61746f72732e2060496e76756c6e657261626c657360206d75737428626520736f727465642e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e2c7570646174655f626f6e6404012c6e65775f6465706f73697418013042616c616e63654f663c543e00071c5d01557064617465207468652063616e64696461637920626f6e64206f6620636f6c6c61746f722063616e64696461746520606f726967696e6020746f2061206e657720616d6f756e7420606e65775f6465706f736974602e00410153657474696e67206120606e65775f6465706f736974602074686174206973206c6f776572207468616e207468652063757272656e74206465706f736974207768696c6520606f726967696e60206973e06f6363757079696e67206120746f702d604465736972656443616e646964617465736020736c6f74206973206e6f7420616c6c6f7765642e005901546869732063616c6c2077696c6c206661696c20696620606f726967696e60206973206e6f74206120636f6c6c61746f722063616e6469646174652c20746865207570646174656420626f6e64206973206c6f77657219017468616e20746865206d696e696d756d2063616e64696461637920626f6e642c20616e642f6f722074686520616d6f756e742063616e6e6f742062652072657365727665642e4c74616b655f63616e6469646174655f736c6f7408011c6465706f73697418013042616c616e63654f663c543e000118746172676574000130543a3a4163636f756e74496400081c4d015468652063616c6c657220606f726967696e60207265706c6163657320612063616e64696461746520607461726765746020696e2074686520636f6c6c61746f722063616e646964617465206c6973742062795501726573657276696e6720606465706f736974602e2054686520616d6f756e7420606465706f73697460207265736572766564206279207468652063616c6c6572206d7573742062652067726561746572207468616ee0746865206578697374696e6720626f6e64206f66207468652074617267657420697420697320747279696e6720746f207265706c6163652e005901546869732063616c6c2077696c6c206661696c206966207468652063616c6c657220697320616c7265616479206120636f6c6c61746f722063616e646964617465206f7220696e76756c6e657261626c652c20746865550163616c6c657220646f6573206e6f74206861766520726567697374657265642073657373696f6e206b6579732c2074686520746172676574206973206e6f74206120636f6c6c61746f722063616e6469646174652cbc616e642f6f722074686520606465706f7369746020616d6f756e742063616e6e6f742062652072657365727665642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732efd030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579730104011c543a3a4b65797300011470726f6f6638011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e0104084c73746f726167655f6875625f72756e74696d652c53657373696f6e4b657973000004011061757261050401c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300000504104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004000904013c737232353531393a3a5075626c6963000009040c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d00000d040c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c0404540001145473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e657710010c75333200031449014f76657277726974657320746865206e756d626572206f66207061676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626578746f6c6420746f2073757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e657710010c75333200041445014f76657277726974657320746865206e756d626572206f66207061676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e798866757274686572206d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e657710010c7533320005144d014f76657277726974657320746865206e756d626572206f6620706167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c73010174686174206d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c6460040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e11040c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001341073656e6408011064657374d9010158426f783c56657273696f6e65644c6f636174696f6e3e00011c6d65737361676515040154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f61737365747310011064657374d9010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279d9010158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747375010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c753332000148110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e001d012a2a546869732066756e6374696f6e20697320646570726563617465643a2055736520606c696d697465645f74656c65706f72745f6173736574736020696e73746561642e2a2a005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865682020666565206f6e207468652060646573746020636861696e2e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f61737365747310011064657374d9010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279d9010158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747375010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320002785d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2c7864657374696e6174696f6e206f722072656d6f746520726573657276652e003d016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e20616e64206d6179206e6f742062652074656c65706f727461626c6520746f206064657374602e4d01202d2060617373657473602068617665206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5501202d20606173736574736020686176652064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e6101202d20606173736574736020686176652072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f7665610120202072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f20606465737460f4202020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e003d012a2a546869732066756e6374696f6e20697320646570726563617465643a2055736520606c696d697465645f726573657276655f7472616e736665725f6173736574736020696e73746561642e2a2a005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d657373616765790401b4426f783c56657273696f6e656458636d3c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f776569676874280118576569676874000320d04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e005d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e4101746865206d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f7c657865637574696f6e20617474656d70742077696c6c206265206d6164652e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ebc0134426f783c4c6f636174696f6e3e00011c76657273696f6e10012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e0d0201484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6ed9010158426f783c56657273696f6e65644c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6ed9010158426f783c56657273696f6e65644c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f61737365747314011064657374d9010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279d9010158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747375010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69747101012c5765696768744c696d69740008785d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2c7864657374696e6174696f6e206f722072656d6f746520726573657276652e003d016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e20616e64206d6179206e6f742062652074656c65706f727461626c6520746f206064657374602e4d01202d2060617373657473602068617665206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5501202d20606173736574736020686176652064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e6101202d20606173736574736020686176652072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f7665610120202072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f20606465737460f4202020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f61737365747314011064657374d9010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279d9010158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747375010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69747101012c5765696768744c696d6974000948110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865682020666565206f6e207468652060646573746020636861696e2e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e40666f7263655f73757370656e73696f6e04012473757370656e646564200110626f6f6c000a10f4536574206f7220756e7365742074686520676c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed02d206073757370656e646564603a2060747275656020746f2073757370656e642c206066616c73656020746f20726573756d652e3c7472616e736665725f61737365747314011064657374d9010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279d9010158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747375010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69747101012c5765696768744c696d6974000b845d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2cd064657374696e6174696f6e206f722072656d6f746520726573657276652c206f72207468726f7567682074656c65706f7274732e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f663501696e64657820606665655f61737365745f6974656d60202868656e636520726566657272656420746f20617320606665657360292c20757020746f20656e6f75676820746f2070617920666f724101607765696768745f6c696d697460206f66207765696768742e204966206d6f726520776569676874206973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865dc6f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e74206d6179206265206174207269736b2e006101606173736574736020286578636c7564696e672060666565736029206d75737420686176652073616d652072657365727665206c6f636174696f6e206f72206f74686572776973652062652074656c65706f727461626c65b0746f206064657374602c206e6f206c696d69746174696f6e7320696d706f736564206f6e206066656573602e4d01202d20666f72206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e20636861696e20616e644d01202020666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f442020206062656e6566696369617279602e6101202d20666f722064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f2060646573746020636861696e5901202020746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64206465706f736974207468656d50202020746f206062656e6566696369617279602e5d01202d20666f722072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f76652072657365727665735d0120202066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f2060646573746020746f206d696e74d4202020616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e5101202d20666f722074656c65706f7274733a206275726e206c6f63616c2061737365747320616e6420666f72776172642058434d20746f2060646573746020636861696e20746f206d696e742f74656c65706f7274b020202061737365747320616e64206465706f736974207468656d20746f206062656e6566696369617279602e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e2d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c5501202050617261636861696e282e2e29296020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e6468202066726f6d2072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e30636c61696d5f61737365747308011861737365747375010150426f783c56657273696f6e65644173736574733e00012c62656e6566696369617279d9010158426f783c56657273696f6e65644c6f636174696f6e3e000c185501436c61696d73206173736574732074726170706564206f6e20746869732070616c6c65742062656361757365206f66206c6566746f7665722061737365747320647572696e672058434d20657865637574696f6e2e00ac2d20606f726967696e603a20416e796f6e652063616e2063616c6c20746869732065787472696e7369632e5d012d2060617373657473603a20546865206578616374206173736574732074686174207765726520747261707065642e20557365207468652076657273696f6e20746f207370656369667920776861742076657273696f6e9877617320746865206c6174657374207768656e2074686579207765726520747261707065642e45012d206062656e6566696369617279603a20546865206c6f636174696f6e2f6163636f756e742077686572652074686520636c61696d6564206173736574732077696c6c206265206465706f73697465642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e1504080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c08563204001904015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304004504015076333a3a58636d3c52756e74696d6543616c6c3e00030008563404000501015076343a3a58636d3c52756e74696d6543616c6c3e0004000019040c0c78636d0876320c58636d042c52756e74696d6543616c6c000004001d0401745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e00001d0400000221040021040c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404007901012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404007901012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404007901012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e736525040120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574737901012c4d756c746941737365747300012c62656e6566696369617279890101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574737901012c4d756c746941737365747300011064657374890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065590101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c5d010168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572cc010c7533320001406d61785f6d6573736167655f73697a65cc010c7533320001306d61785f6361706163697479cc010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74cc010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72cc010c75333200011873656e646572cc010c753332000124726563697069656e74cc010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e04008d010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374890101344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473350401404d756c7469417373657446696c7465720001286d61785f617373657473cc010c75333200012c62656e6566696369617279890101344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473350401404d756c7469417373657446696c7465720001286d61785f617373657473cc010c75333200011064657374890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e000e003445786368616e6765417373657408011067697665350401404d756c7469417373657446696c74657200011c726563656976657901012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473350401404d756c7469417373657446696c74657200011c72657365727665890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473350401404d756c7469417373657446696c74657200011064657374890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374890101344d756c74694c6f636174696f6e000118617373657473350401404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573810101284d756c746941737365740001307765696768745f6c696d69744104012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204001904014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804001904014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574737901012c4d756c74694173736574730001187469636b6574890101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b000025040c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304007901012c4d756c74694173736574730001003c457865637574696f6e526573756c740400290401504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e00030000290404184f7074696f6e040454012d040108104e6f6e6500000010536f6d6504002d0400000100002d0400000408103104003104100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040030010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404003001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c65001900003504100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504007901012c4d756c74694173736574730000001057696c6404003904013857696c644d756c74694173736574000100003904100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869648501011c4173736574496400010c66756e3d04013c57696c6446756e676962696c697479000100003d04100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000041040c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d6974656404002c010c7536340001000045040c0c78636d0876330c58636d041043616c6c00000400490401585665633c496e737472756374696f6e3c43616c6c3e3e000049040000024d04004d040c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400ad01012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400ad01012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400ad01012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736551040120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572650401544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473ad01012c4d756c746941737365747300012c62656e6566696369617279bd0101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473ad01012c4d756c746941737365747300011064657374bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64590101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c5d01014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572cc010c7533320001406d61785f6d6573736167655f73697a65cc010c7533320001306d61785f6361706163697479cc010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74cc010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72cc010c75333200011873656e646572cc010c753332000124726563697069656e74cc010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400c1010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400690401445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574736d0401404d756c7469417373657446696c74657200012c62656e6566696369617279bd0101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574736d0401404d756c7469417373657446696c74657200011064657374bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e000e003445786368616e676541737365740c0110676976656d0401404d756c7469417373657446696c74657200011077616e74ad01012c4d756c746941737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574736d0401404d756c7469417373657446696c74657200011c72657365727665bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574736d0401404d756c7469417373657446696c74657200011064657374bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f690401445175657279526573706f6e7365496e666f0001186173736574736d0401404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573b50101284d756c746941737365740001307765696768745f6c696d69747101012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204004504012458636d3c43616c6c3e0015002c536574417070656e64697804004504012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473ad01012c4d756c74694173736574730001187469636b6574bd0101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400ad01012c4d756c7469417373657473001c002c45787065637441737365740400ad01012c4d756c7469417373657473001d00304578706563744f726967696e0400650401544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400350101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304004d0101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f690401445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578cc010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72cc010c75333200013c6d696e5f63726174655f6d696e6f72cc010c753332002200505265706f72745472616e736163745374617475730400690401445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400c50101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bcd0101244e6574776f726b496400012c64657374696e6174696f6ec1010154496e746572696f724d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e002600244c6f636b41737365740801146173736574b50101284d756c74694173736574000120756e6c6f636b6572bd0101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574b50101284d756c74694173736574000118746172676574bd0101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574b50101284d756c746941737365740001146f776e6572bd0101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574b50101284d756c746941737365740001186c6f636b6572bd0101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400bd0101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747101012c5765696768744c696d6974000130636865636b5f6f726967696e650401544f7074696f6e3c4d756c74694c6f636174696f6e3e002f000051040c0c78636d08763320526573706f6e7365000118104e756c6c000000184173736574730400ad01012c4d756c74694173736574730001003c457865637574696f6e526573756c740400350101504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f040055040198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c7404004d0101384d617962654572726f72436f64650005000055040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015904045300000400610401185665633c543e000059040c0c78636d0876332850616c6c6574496e666f0000180114696e646578cc010c7533320001106e616d655d040180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d655d040180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72cc010c7533320001146d696e6f72cc010c7533320001147061746368cc010c75333200005d040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00006104000002590400650404184f7074696f6e04045401bd010108104e6f6e6500000010536f6d650400bd01000001000069040c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ebd0101344d756c74694c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400006d04100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400ad01012c4d756c74694173736574730000001057696c6404007104013857696c644d756c74694173736574000100007104100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f660801086964b901011c4173736574496400010c66756e7504013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400cc010c75333200020030416c6c4f66436f756e7465640c01086964b901011c4173736574496400010c66756e7504013c57696c6446756e676962696c697479000114636f756e74cc010c753332000300007504100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c65000100007904080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c08563204007d04015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304008d04015076333a3a58636d3c52756e74696d6543616c6c3e00030008563404009904015076343a3a58636d3c52756e74696d6543616c6c3e000400007d040c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400810401745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000810400000285040085040c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404007901012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404007901012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404007901012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e736525040120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574737901012c4d756c746941737365747300012c62656e6566696369617279890101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574737901012c4d756c746941737365747300011064657374890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065590101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c89040168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572cc010c7533320001406d61785f6d6573736167655f73697a65cc010c7533320001306d61785f6361706163697479cc010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74cc010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72cc010c75333200011873656e646572cc010c753332000124726563697069656e74cc010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e04008d010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374890101344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473350401404d756c7469417373657446696c7465720001286d61785f617373657473cc010c75333200012c62656e6566696369617279890101344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473350401404d756c7469417373657446696c7465720001286d61785f617373657473cc010c75333200011064657374890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e000e003445786368616e6765417373657408011067697665350401404d756c7469417373657446696c74657200011c726563656976657901012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473350401404d756c7469417373657446696c74657200011c72657365727665890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473350401404d756c7469417373657446696c74657200011064657374890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374890101344d756c74694c6f636174696f6e000118617373657473350401404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573810101284d756c746941737365740001307765696768745f6c696d69744104012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204007d04014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804007d04014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574737901012c4d756c74694173736574730001187469636b6574890101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b000089040c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656438011c5665633c75383e00008d040c0c78636d0876330c58636d041043616c6c00000400910401585665633c496e737472756374696f6e3c43616c6c3e3e0000910400000295040095040c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400ad01012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400ad01012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400ad01012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736551040120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572650401544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473ad01012c4d756c746941737365747300012c62656e6566696369617279bd0101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473ad01012c4d756c746941737365747300011064657374bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64590101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c8904014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572cc010c7533320001406d61785f6d6573736167655f73697a65cc010c7533320001306d61785f6361706163697479cc010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74cc010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72cc010c75333200011873656e646572cc010c753332000124726563697069656e74cc010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400c1010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400690401445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574736d0401404d756c7469417373657446696c74657200012c62656e6566696369617279bd0101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574736d0401404d756c7469417373657446696c74657200011064657374bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e000e003445786368616e676541737365740c0110676976656d0401404d756c7469417373657446696c74657200011077616e74ad01012c4d756c746941737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574736d0401404d756c7469417373657446696c74657200011c72657365727665bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574736d0401404d756c7469417373657446696c74657200011064657374bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f690401445175657279526573706f6e7365496e666f0001186173736574736d0401404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573b50101284d756c746941737365740001307765696768745f6c696d69747101012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204008d04012458636d3c43616c6c3e0015002c536574417070656e64697804008d04012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473ad01012c4d756c74694173736574730001187469636b6574bd0101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400ad01012c4d756c7469417373657473001c002c45787065637441737365740400ad01012c4d756c7469417373657473001d00304578706563744f726967696e0400650401544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400350101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304004d0101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f690401445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578cc010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72cc010c75333200013c6d696e5f63726174655f6d696e6f72cc010c753332002200505265706f72745472616e736163745374617475730400690401445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400c50101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bcd0101244e6574776f726b496400012c64657374696e6174696f6ec1010154496e746572696f724d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e002600244c6f636b41737365740801146173736574b50101284d756c74694173736574000120756e6c6f636b6572bd0101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574b50101284d756c74694173736574000118746172676574bd0101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574b50101284d756c746941737365740001146f776e6572bd0101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574b50101284d756c746941737365740001186c6f636b6572bd0101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400bd0101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747101012c5765696768744c696d6974000130636865636b5f6f726967696e650401544f7074696f6e3c4d756c74694c6f636174696f6e3e002f000099040c2c73746167696e675f78636d0876340c58636d041043616c6c000004009d0401585665633c496e737472756374696f6e3c43616c6c3e3e00009d04000002a10400a1040c2c73746167696e675f78636d0876342c496e737472756374696f6e041043616c6c0001c03457697468647261774173736574040011010118417373657473000000545265736572766541737365744465706f7369746564040011010118417373657473000100585265636569766554656c65706f727465644173736574040011010118417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736531010120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572550101404f7074696f6e3c4c6f636174696f6e3e000300345472616e7366657241737365740801186173736574731101011841737365747300012c62656e6566696369617279bc01204c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574731101011841737365747300011064657374bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64590101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c8904014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572cc010c7533320001406d61785f6d6573736167655f73697a65cc010c7533320001306d61785f6361706163697479cc010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74cc010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72cc010c75333200011873656e646572cc010c753332000124726563697069656e74cc010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400c00140496e746572696f724c6f636174696f6e000b002c5265706f72744572726f720400610101445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574736501012c417373657446696c74657200012c62656e6566696369617279bc01204c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574736501012c417373657446696c74657200011064657374bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e000e003445786368616e676541737365740c0110676976656501012c417373657446696c74657200011077616e741101011841737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574736501012c417373657446696c74657200011c72657365727665bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574736501012c417373657446696c74657200011064657374bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f610101445175657279526573706f6e7365496e666f0001186173736574736501012c417373657446696c74657200120030427579457865637574696f6e080110666565731901011441737365740001307765696768745f6c696d69747101012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204009904012458636d3c43616c6c3e0015002c536574417070656e64697804009904012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473110101184173736574730001187469636b6574bc01204c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e4173736574040011010118417373657473001c002c4578706563744173736574040011010118417373657473001d00304578706563744f726967696e0400550101404f7074696f6e3c4c6f636174696f6e3e001e002c4578706563744572726f720400350101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304004d0101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f610101445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578cc010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72cc010c75333200013c6d696e5f63726174655f6d696e6f72cc010c753332002200505265706f72745472616e736163745374617475730400610101445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400c801204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bd401244e6574776f726b496400012c64657374696e6174696f6ec00140496e746572696f724c6f636174696f6e00010c78636d0501011c58636d3c28293e002600244c6f636b41737365740801146173736574190101144173736574000120756e6c6f636b6572bc01204c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574190101144173736574000118746172676574bc01204c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365741901011441737365740001146f776e6572bc01204c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365741901011441737365740001186c6f636b6572bc01204c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400bc01204c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747101012c5765696768744c696d6974000130636865636b5f6f726967696e550101404f7074696f6e3c4c6f636174696f6e3e002f0000a5040c4863756d756c75735f70616c6c65745f78636d1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea9040c5070616c6c65745f6d6573736167655f71756575651870616c6c65741043616c6c04045400010824726561705f706167650801386d6573736167655f6f726967696ee50101484d6573736167654f726967696e4f663c543e000128706167655f696e64657810012450616765496e6465780000043d0152656d6f76652061207061676520776869636820686173206e6f206d6f7265206d657373616765732072656d61696e696e6720746f2062652070726f636573736564206f72206973207374616c652e48657865637574655f6f7665727765696768741001386d6573736167655f6f726967696ee50101484d6573736167654f726967696e4f663c543e0001107061676510012450616765496e646578000114696e64657810011c543a3a53697a650001307765696768745f6c696d6974280118576569676874000134784578656375746520616e206f766572776569676874206d6573736167652e004d0154656d706f726172792070726f63657373696e67206572726f72732077696c6c2062652070726f706167617465642077686572656173207065726d616e656e74206572726f7273206172652074726561746564546173207375636365737320636f6e646974696f6e2e00742d20606f726967696e603a204d75737420626520605369676e6564602e35012d20606d6573736167655f6f726967696e603a20546865206f726967696e2066726f6d20776869636820746865206d65737361676520746f20626520657865637574656420617272697665642e3d012d206070616765603a20546865207061676520696e2074686520717565756520696e20776869636820746865206d65737361676520746f2062652065786563757465642069732073697474696e672e09012d2060696e646578603a2054686520696e64657820696e746f20746865207175657565206f6620746865206d65737361676520746f2062652065786563757465642e59012d20607765696768745f6c696d6974603a20546865206d6178696d756d20616d6f756e74206f662077656967687420616c6c6f77656420746f20626520636f6e73756d656420696e2074686520657865637574696f6e4420206f6620746865206d6573736167652e00f442656e63686d61726b20636f6d706c657869747920636f6e73696465726174696f6e733a204f28696e646578202b207765696768745f6c696d6974292e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ead040c6070616c6c65745f73746f726167655f70726f7669646572731870616c6c65741043616c6c04045400012c4c726571756573745f6d73705f7369676e5f7570100120636170616369747930014853746f7261676544617461556e69743c543e0001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e00012876616c75655f70726f700102014c56616c756550726f706f736974696f6e3c543e00013c7061796d656e745f6163636f756e74000130543a3a4163636f756e7449640000686901446973706174636861626c652065787472696e736963207468617420616c6c6f777320757365727320746f207265717565737420746f207369676e2075702061732061204d61696e2053746f726167652050726f76696465722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e4101546865206f726967696e206d75737420626520746865206163636f756e7420746861742077616e747320746f207369676e2075702061732061204d61696e2053746f726167652050726f76696465722e00490146756e64732070726f706f7274696f6e616c20746f207468652063617061636974792072657175657374656420617265207265736572766564202868656c64292066726f6d20746865206163636f756e742e002c506172616d65746572733a71012d20606361706163697479603a2054686520746f74616c20616d6f756e74206f662064617461207468617420746865204d61696e2053746f726167652050726f76696465722077696c6c2062652061626c6520746f2073746f72652e91012d20606d756c7469616464726573736573603a2054686520766563746f72206f66206d756c7469616464726573736573207468617420746865207369676e65722077616e747320746f20726567697374657220286163636f7264696e6720746f20746865f05b4d756c74696164647220737065635d2868747470733a2f2f6769746875622e636f6d2f6d756c7469666f726d6174732f6d756c746961646472292981012d206076616c75655f70726f70603a205468652076616c75652070726f706f736974696f6e207468617420746865207369676e65722077696c6c2070726f766964652061732061204d61696e2053746f726167652050726f766964657220746fad01757365727320616e642077616e747320746f207265676973746572206f6e2d636861696e2e20497420636f756c642062652064617461206c696d6974732c20636f6d6d756e69636174696f6e2070726f746f636f6c7320746f2061636365737320746865207573657227733c646174612c20616e64206d6f72652e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722e2501322e20436865636b207468617420746865207369676e6572206973206e6f7420616c72656164792072656769737465726564206173206569746865722061204d5350206f72204253509c332e20436865636b207468617420746865206d756c7469616464726573732069732076616c69646101342e20436865636b207468617420746865206461746120746f2062652073746f7265642069732067726561746572207468616e20746865206d696e696d756d207265717569726564206279207468652072756e74696d652e9101352e2043616c63756c61746520686f77206d756368206465706f7369742077696c6c20746865207369676e6572206861766520746f20706179207573696e672074686520616d6f756e74206f6620646174612069742077616e747320746f2073746f7265f0362e20436865636b207468617420746865207369676e65722068617320656e6f7567682066756e647320746f2070617920746865206465706f7369748c372e20486f6c6420746865206465706f7369742066726f6d20746865207369676e65726901382e2055706461746520746865205369676e2055702052657175657374732073746f7261676520746f2061646420746865207369676e65722061732072657175657374696e6720746f207369676e2075702061732061204d535000d8456d69747320604d7370526571756573745369676e55705375636365737360206576656e74207768656e207375636365737366756c2e4c726571756573745f6273705f7369676e5f75700c0120636170616369747930014853746f7261676544617461556e69743c543e0001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e00013c7061796d656e745f6163636f756e74000130543a3a4163636f756e74496400015c4501446973706174636861626c652065787472696e736963207468617420616c6c6f777320757365727320746f207369676e2075702061732061204261636b75702053746f726167652050726f76696465722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e4901546865206f726967696e206d75737420626520746865206163636f756e7420746861742077616e747320746f207369676e2075702061732061204261636b75702053746f726167652050726f76696465722e00490146756e64732070726f706f7274696f6e616c20746f207468652063617061636974792072657175657374656420617265207265736572766564202868656c64292066726f6d20746865206163636f756e742e002c506172616d65746572733a79012d20606361706163697479603a2054686520746f74616c20616d6f756e74206f662064617461207468617420746865204261636b75702053746f726167652050726f76696465722077696c6c2062652061626c6520746f2073746f72652e91012d20606d756c7469616464726573736573603a2054686520766563746f72206f66206d756c7469616464726573736573207468617420746865207369676e65722077616e747320746f20726567697374657220286163636f7264696e6720746f20746865f05b4d756c74696164647220737065635d2868747470733a2f2f6769746875622e636f6d2f6d756c7469666f726d6174732f6d756c746961646472292900ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722e2501322e20436865636b207468617420746865207369676e6572206973206e6f7420616c72656164792072656769737465726564206173206569746865722061204d5350206f72204253509c332e20436865636b207468617420746865206d756c7469616464726573732069732076616c69645d01342e20436865636b207468617420746865206461746120746f2062652073746f7265642069732067726561746572207468616e20746865206d696e696d756d207265717569726564206279207468652072756e74696d659101352e2043616c63756c61746520686f77206d756368206465706f7369742077696c6c20746865207369676e6572206861766520746f20706179207573696e672074686520616d6f756e74206f6620646174612069742077616e747320746f2073746f7265f0362e20436865636b207468617420746865207369676e65722068617320656e6f7567682066756e647320746f2070617920746865206465706f7369748c372e20486f6c6420746865206465706f7369742066726f6d20746865207369676e65726901382e2055706461746520746865205369676e2055702052657175657374732073746f7261676520746f2061646420746865207369676e65722061732072657175657374696e6720746f207369676e20757020617320612042535000d8456d6974732060427370526571756573745369676e55705375636365737360206576656e74207768656e207375636365737366756c2e3c636f6e6669726d5f7369676e5f757004014070726f76696465725f6163636f756e749c01504f7074696f6e3c543a3a4163636f756e7449643e00025cad01446973706174636861626c652065787472696e736963207468617420616c6c6f777320757365727320746f20636f6e6669726d207468656972207369676e20757020617320612053746f726167652050726f76696465722c20656974686572204d5350206f72204253502e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e9d01546865206f726967696e206d75737420626520746865206163636f756e7420746861742072657175657374656420746f207369676e20757020617320612053746f726167652050726f76696465722c20657863657074207768656e2070726f766964696e67206129016070726f76696465725f6163636f756e746020706172616d657465722c20696e207768696368206361736520746865206f726967696e2063616e20626520616e79206163636f756e742e002c506172616d65746572733ab9012d206070726f76696465725f6163636f756e74603a20546865206163636f756e7420746861742072657175657374656420746f207369676e20757020617320612053746f726167652050726f76696465722e204966206e6f742070726f76696465642c20746865207369676e6572e477696c6c20626520636f6e7369646572656420746865206163636f756e7420746861742072657175657374656420746f207369676e2075702e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633a98312e20436865636b2074686174207468652065787472696e73696320776173207369676e65641101322e20436865636b207468617420746865206163636f756e74207265636569766564206861732072657175657374656420746f20726567697374657220617320612053508101332e20436865636b2074686174207468652063757272656e742072616e646f6d6e6573732069732073756666696369656e746c7920667265736820746f206265207573656420617320612073616c7420666f7220746861742072657175657374a4342e20436865636b207468617420746865207265717565737420686173206e6f7420657870697265643101352e20526567697374657220746865207369676e65722061732061204d5350206f722042535020776974682074686520646174612070726f766964656420696e207468652072657175657374009d01456d69747320604d73705369676e55705375636365737360206f7220604273705369676e55705375636365737360206576656e74207768656e207375636365737366756c2c20646570656e64696e67206f6e207468652074797065206f66207369676e2075702e00184e6f7465733a1d012d20546869732065787472696e73696320636f756c642062652063616c6c656420627920746865207573657220697473656c66206f722062792061207468697264207061727479b5012d20546865206465706f73697420746861742074686520757365722068617320746f2070617920746f20726567697374657220617320612053502069732068656c64207768656e20746865207573657220726571756573747320746f207265676973746572206173206120535081012d20496620746869732065787472696e736963206973207375636365737366756c2c2069742077696c6c206265206672656520666f72207468652063616c6c65722c20746f20696e63656e74697665207374617465206465626c6f6174696e673863616e63656c5f7369676e5f7570000330c101446973706174636861626c652065787472696e736963207468617420616c6c6f777320612075736572207769746820612070656e64696e67205369676e205570205265717565737420746f2063616e63656c2069742c2067657474696e6720746865206465706f736974206261636b2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e3d01546865206f726967696e206d75737420626520746865206163636f756e7420746861742072657175657374656420746f207369676e20757020617320612053746f726167652050726f76696465722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722ee4322e20436865636b207468617420746865207369676e6572206861732072657175657374656420746f207369676e2075702061732061205350dc332e2044656c6574652074686520726571756573742066726f6d20746865205369676e2055702052657175657374732073746f726167658c342e2052657475726e20746865206465706f73697420746f20746865207369676e657200d0456d69747320605369676e55705265717565737443616e63656c656460206576656e74207768656e207375636365737366756c2e306d73705f7369676e5f6f66660004384101446973706174636861626c652065787472696e736963207468617420616c6c6f777320757365727320746f207369676e206f66662061732061204d61696e2053746f726167652050726f76696465722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e4501546865206f726967696e206d75737420626520746865206163636f756e7420746861742077616e747320746f207369676e206f66662061732061204d61696e2053746f726167652050726f76696465722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722ebc322e20436865636b207468617420746865207369676e657220697320726567697374657265642061732061204d53504d01332e20436865636b207468617420746865204d535020686173206e6f2073746f726167652061737369676e656420746f20697420286e6f206275636b657473206f722064617461207573656420627920697429e4342e2055706461746520746865204d5350732073746f726167652c2072656d6f76696e6720746865207369676e657220617320616e204d53508c352e2052657475726e20746865206465706f73697420746f20746865207369676e65724101362e2044656372656d656e74207468652073746f72616765207468617420686f6c647320746f74616c20616d6f756e74206f66204d5350732063757272656e746c7920696e207468652073797374656d00c0456d69747320604d73705369676e4f66665375636365737360206576656e74207768656e207375636365737366756c2e306273705f7369676e5f6f666600053c4901446973706174636861626c652065787472696e736963207468617420616c6c6f777320757365727320746f207369676e206f66662061732061204261636b75702053746f726167652050726f76696465722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e4d01546865206f726967696e206d75737420626520746865206163636f756e7420746861742077616e747320746f207369676e206f66662061732061204261636b75702053746f726167652050726f76696465722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722ebc322e20436865636b207468617420746865207369676e65722069732072656769737465726564206173206120425350cc332e20436865636b2074686174207468652042535020686173206e6f2073746f726167652061737369676e656420746f206974e4342e205570646174652074686520425350732073746f726167652c2072656d6f76696e6720746865207369676e657220617320616e204253503501352e205570646174652074686520746f74616c206361706163697479206f6620616c6c20425350732c2072656d6f76696e6720746865206361706163697479206f6620746865207369676e65728c362e2052657475726e20746865206465706f73697420746f20746865207369676e65724101372e2044656372656d656e74207468652073746f72616765207468617420686f6c647320746f74616c20616d6f756e74206f6620425350732063757272656e746c7920696e207468652073797374656d00c0456d69747320604273705369676e4f66665375636365737360206576656e74207768656e207375636365737366756c2e3c6368616e67655f63617061636974790401306e65775f636170616369747930014853746f7261676544617461556e69743c543e0006603901446973706174636861626c652065787472696e736963207468617420616c6c6f777320757365727320746f206368616e676520746865697220616d6f756e74206f662073746f726564206461746100c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e0501546865206f726967696e206d75737420626520746865206163636f756e7420746861742077616e747320746f206368616e6765206974732063617061636974792e002c506172616d65746572733a8d012d20606e65775f6361706163697479603a20546865206e657720746f74616c20616d6f756e74206f6620646174612074686174207468652053746f726167652050726f76696465722077616e747320746f2062652061626c6520746f2073746f72652e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722eb8322e20436865636b207468617420746865207369676e6572206973207265676973746572656420617320612053505101332e20436865636b207468617420656e6f7567682074696d6520686173207061737365642073696e636520746865206c6173742074696d6520746865205350206368616e676564206974732063617061636974794901342e20436865636b207468617420746865206e65772063617061636974792069732067726561746572207468616e20746865206d696e696d756d207265717569726564206279207468652072756e74696d651d01352e20436865636b207468617420746865206e65772063617061636974792069732067726561746572207468616e20746865206461746120757365642062792074686973205350e4362e2043616c63756c61746520746865206e6577206465706f736974206e656564656420666f722074686973206e65772063617061636974795501372e20436865636b20746f2073656520696620746865206e6577206465706f736974206e65656465642069732067726561746572206f72206c657373207468616e207468652063757272656e74206465706f736974ec09612e20496620746865206e6577206465706f7369742069732067726561746572207468616e207468652063757272656e74206465706f7369743a15010909692e20436865636b207468617420746865207369676e65722068617320656e6f7567682066756e647320746f207061792074686973206578747261206465706f736974b0090969692e20486f6c6420746865206578747261206465706f7369742066726f6d20746865207369676e6572850109622e20496620746865206e6577206465706f736974206973206c657373207468616e207468652063757272656e74206465706f7369742c2072657475726e207468652068656c6420646966666572656e636520746f20746865207369676e6572c8372e2055706461746520746865205350732073746f7261676520746f206368616e67652074686520746f74616c20646174617501382e20496620757365722069732061204253502c207570646174652074686520746f74616c206361706163697479206f6620746865206e6574776f726b202873756d206f6620616c6c2063617061636974696573206f6620425350732900b8456d697473206043617061636974794368616e67656460206576656e74207768656e207375636365737366756c2e386164645f76616c75655f70726f700401386e65775f76616c75655f70726f700102014c56616c756550726f706f736974696f6e3c543e0007409d01446973706174636861626c652065787472696e736963206f6e6c792063616c6c61626c6520627920616e204d5350207468617420616c6c6f777320697420746f2061646420612076616c75652070726f706f736974696f6e20746f20697473207365727669636500c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e1501546865206f726967696e206d75737420626520746865206163636f756e7420746861742077616e747320746f2061646420612076616c75652070726f706f736974696f6e2e002c506172616d65746572733a4d012d20606e65775f76616c75655f70726f70603a205468652076616c75652070726f706f736974696f6e207468617420746865204d53502077616e747320746f2061646420746f2069747320736572766963652e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722ebc322e20436865636b207468617420746865207369676e657220697320726567697374657265642061732061204d53503901332e20436865636b207468617420746865204d535020686173206e6f74207265616368656420746865206d6178696d756d20616d6f756e74206f662076616c75652070726f706f736974696f6e734501342e20436865636b2074686174207468652076616c75652070726f706f736974696f6e2069732076616c6964202873697a6520616e6420616e79206f746865722072656c6576616e7420636865636b73293501352e2055706461746520746865204d5350732073746f7261676520746f20616464207468652076616c75652070726f706f736974696f6e20287769746820697473206964656e7469666965722900b4456d697473206056616c756550726f70416464656460206576656e74207768656e207375636365737366756c2e44666f7263655f6d73705f7369676e5f757018010c77686f000130543a3a4163636f756e7449640001186d73705f69643401604d61696e53746f7261676550726f766964657249643c543e000120636170616369747930014853746f7261676544617461556e69743c543e0001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e00012876616c75655f70726f700102014c56616c756550726f706f736974696f6e3c543e00013c7061796d656e745f6163636f756e74000130543a3a4163636f756e7449640008588d01446973706174636861626c652065787472696e736963207468617420616c6c6f777320746f20666f72636566756c6c7920616e64206175746f6d61746963616c6c792073696e672075702061204d61696e2053746f726167652050726f76696465722e00bc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f742e5101546865206077686f6020706172616d6574657220697320746865206163636f756e7420746861742077616e747320746f207369676e2075702061732061204d61696e2053746f726167652050726f76696465722e00c10146756e64732070726f706f7274696f6e616c20746f207468652063617061636974792072657175657374656420617265207265736572766564202868656c64292066726f6d20746865206163636f756e742070617373656420617320746865206077686f6020706172616d657465722e002c506172616d65746572733a19012d206077686f603a20546865206163636f756e7420746861742077616e747320746f207369676e2075702061732061204d61696e2053746f726167652050726f76696465722ed1012d20606d73705f6964603a20546865204d61696e2053746f726167652050726f7669646572204944207468617420746865206163636f756e742070617373656420617320746865206077686f6020706172616d657465722069732072657175657374696e6720746f207369676e2075702061732e71012d20606361706163697479603a2054686520746f74616c20616d6f756e74206f662064617461207468617420746865204d61696e2053746f726167652050726f76696465722077696c6c2062652061626c6520746f2073746f72652e91012d20606d756c7469616464726573736573603a2054686520766563746f72206f66206d756c7469616464726573736573207468617420746865207369676e65722077616e747320746f20726567697374657220286163636f7264696e6720746f20746865f05b4d756c74696164647220737065635d2868747470733a2f2f6769746875622e636f6d2f6d756c7469666f726d6174732f6d756c746961646472292981012d206076616c75655f70726f70603a205468652076616c75652070726f706f736974696f6e207468617420746865207369676e65722077696c6c2070726f766964652061732061204d61696e2053746f726167652050726f766964657220746fad01757365727320616e642077616e747320746f207265676973746572206f6e2d636861696e2e20497420636f756c642062652064617461206c696d6974732c20636f6d6d756e69636174696f6e2070726f746f636f6c7320746f2061636365737320746865207573657227733c646174612c20616e64206d6f72652e00a4546869732065787472696e7369632077696c6c20706572666f726d20746865207374657073206f663a0d01312e205b726571756573745f6d73705f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a726571756573745f6d73705f7369676e5f757029ec322e205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f757029003901456d69747320604d7370526571756573745369676e5570537563636573736020616e6420604d73705369676e55705375636365737360206576656e7473207768656e207375636365737366756c2e44666f7263655f6273705f7369676e5f757018010c77686f000130543a3a4163636f756e7449640001186273705f69643401684261636b757053746f7261676550726f766964657249643c543e000120636170616369747930014853746f7261676544617461556e69743c543e0001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e00013c7061796d656e745f6163636f756e74000130543a3a4163636f756e7449640001187765696768740d02017c4f7074696f6e3c52657075746174696f6e576569676874547970653c543e3e00094c9501446973706174636861626c652065787472696e736963207468617420616c6c6f777320746f20666f72636566756c6c7920616e64206175746f6d61746963616c6c792073696e672075702061204261636b75702053746f726167652050726f76696465722e00bc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f742e5901546865206077686f6020706172616d6574657220697320746865206163636f756e7420746861742077616e747320746f207369676e2075702061732061204261636b75702053746f726167652050726f76696465722e00c10146756e64732070726f706f7274696f6e616c20746f207468652063617061636974792072657175657374656420617265207265736572766564202868656c64292066726f6d20746865206163636f756e742070617373656420617320746865206077686f6020706172616d657465722e002c506172616d65746572733a21012d206077686f603a20546865206163636f756e7420746861742077616e747320746f207369676e2075702061732061204261636b75702053746f726167652050726f76696465722ed9012d20606273705f6964603a20546865204261636b75702053746f726167652050726f7669646572204944207468617420746865206163636f756e742070617373656420617320746865206077686f6020706172616d657465722069732072657175657374696e6720746f207369676e2075702061732e79012d20606361706163697479603a2054686520746f74616c20616d6f756e74206f662064617461207468617420746865204261636b75702053746f726167652050726f76696465722077696c6c2062652061626c6520746f2073746f72652e91012d20606d756c7469616464726573736573603a2054686520766563746f72206f66206d756c7469616464726573736573207468617420746865207369676e65722077616e747320746f20726567697374657220286163636f7264696e6720746f20746865f05b4d756c74696164647220737065635d2868747470733a2f2f6769746875622e636f6d2f6d756c7469666f726d6174732f6d756c746961646472292900a4546869732065787472696e7369632077696c6c20706572666f726d20746865207374657073206f663a0d01312e205b726571756573745f6273705f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a726571756573745f6273705f7369676e5f757029ec322e205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f757029003901456d6974732060427370526571756573745369676e5570537563636573736020616e6420604273705369676e55705375636365737360206576656e7473207768656e207375636365737366756c2e14736c61736804012c70726f76696465725f69643401244861736849643c543e000a10fc446973706174636861626c652065787472696e73696320746f20736c6173682061205f736c61736861626c655f2053746f726167652050726f76696465722e00b501412053746f726167652050726f7669646572206973205f736c61736861626c655f2069666620697420686173206661696c656420746f20726573706f6e6420746f206368616c6c656e67657320666f722070726f766964696e672070726f6f6673206f662073746f726167652e4d02496e2074686520636f6e74657874206f66207468652053746f726167654875622070726f746f636f6c2c207468652070726f6f66732d6465616c65722070616c6c6574206d61726b7320612053746f726167652050726f7669646572206173205f736c61736861626c655f207768656e206974206661696c7320746f20726573706f6e6420746f206368616c6c656e6765732e04c4446973706174636861626c6573202865787472696e7369637329206578706f73656420627920746869732070616c6c6574b1040c4870616c6c65745f66696c655f73797374656d1870616c6c65741043616c6c040454000144346372656174655f6275636b65740c01186d73705f696434014050726f76696465724964466f723c543e0001106e616d65f90101404275636b65744e616d65466f723c543e00011c70726976617465200110626f6f6c0000004c726571756573745f6d6f76655f6275636b65740801246275636b65745f69643401384275636b65744964466f723c543e0001286e65775f6d73705f696434014050726f76696465724964466f723c543e0001007c6d73705f726573706f6e645f6d6f76655f6275636b65745f726571756573740801246275636b65745f69643401384275636b65744964466f723c543e000120726573706f6e7365b50401644275636b65744d6f766552657175657374526573706f6e7365000200547570646174655f6275636b65745f707269766163790801246275636b65745f69643401384275636b65744964466f723c543e00011c70726976617465200110626f6f6c000300ac6372656174655f616e645f6173736f63696174655f636f6c6c656374696f6e5f776974685f6275636b65740401246275636b65745f69643401384275636b65744964466f723c543e000404c043726561746520616e64206173736f6369617465206120636f6c6c656374696f6e20776974682061206275636b65742e5469737375655f73746f726167655f726571756573741801246275636b65745f69643401384275636b65744964466f723c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e00012c66696e6765727072696e7434013846696e6765727072696e743c543e00011073697a6530013853746f72616765446174613c543e0001186d73705f696434014050726f76696465724964466f723c543e000120706565725f696473f5010128506565724964733c543e0005049849737375652061206e65772073746f72616765207265717565737420666f7220612066696c65587265766f6b655f73746f726167655f7265717565737404012066696c655f6b65793401344d65726b6c65486173683c543e000604585265766f6b652073746f726167652072657175657374ac6273705f6164645f646174615f7365727665725f666f725f6d6f76655f6275636b65745f726571756573740401246275636b65745f69643401384275636b65744964466f723c543e000704690141646420796f757273656c66206173206120646174612073657276657220666f722070726f766964696e67207468652066696c6573206f6620746865206275636b65742072657175657374656420746f206265206d6f7665642e686d73705f6163636570745f73746f726167655f726571756573740c012066696c655f6b65793401344d65726b6c65486173683c543e00012866696c655f70726f6f663502012c4b657950726f6f663c543e0001686e6f6e5f696e636c7573696f6e5f666f726573745f70726f6f6625020138466f7265737450726f6f663c543e0008180101557365642062792061204d535020746f20636f6e6669726d2073746f72696e6720612066696c652074686174207761732061737369676e656420746f2069742e007501546865204d53502068617320746f2070726f7669646520612070726f6f66206f66207468652066696c652773206b657920616e642061206e6f6e2d696e636c7573696f6e2070726f6f6620666f72207468652066696c652773206b65797d01696e20746865206275636b65742773204d65726b6c6520506174726963696120466f726573742e205468652070726f6f66206f66207468652066696c652773206b6579206973206e656365737361727920746f2076657269667920746861748101746865204d53502061637475616c6c7920686173207468652066696c652c207768696c6520746865206e6f6e2d696e636c7573696f6e2070726f6f66206973206e656365737361727920746f20766572696679207468617420746865204d5350647761736e27742073746f72696e67206974206265666f72652e346273705f766f6c756e7465657204012066696c655f6b65793401344d65726b6c65486173683c543e000918b85573656420627920612042535020746f20766f6c756e7465657220666f722073746f72696e6720612066696c652e008d01546865207472616e73616374696f6e2077696c6c206661696c2069662074686520584f52206265747765656e207468652066696c6520494420616e642074686520425350204944206973206e6f742062656c6f7720746865207468726573686f6c642c3d01736f206120425350206973207374726f6e676c79206164766973656420746f20636865636b206265666f726568616e642e20416e6f7468657220726561736f6e20666f72206661696c7572652069735101696620746865206d6178696d756d206e756d626572206f66204253507320686173206265656e20726561636865642e2041207375636365737366756c2061737369676e6d656e7420617320425350206d65616e73e87468617420736f6d65206f662074686520636f6c6c61746572616c20746f6b656e73206f662074686174204d5350206172652066726f7a656e2e4c6273705f636f6e6669726d5f73746f72696e670801686e6f6e5f696e636c7573696f6e5f666f726573745f70726f6f6625020138466f7265737450726f6f663c543e00015066696c655f6b6579735f616e645f70726f6f6673b904013501426f756e6465645665633c284d65726b6c65486173683c543e2c204b657950726f6f663c543e292c20543a3a0a4d61784261746368436f6e6669726d53746f7261676552657175657374732c3e000a0411015573656420627920612042535020746f20636f6e6669726d2074686579206172652073746f72696e672064617461206f6620612073746f7261676520726571756573742e606273705f726571756573745f73746f705f73746f72696e6720012066696c655f6b65793401344d65726b6c65486173683c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e0001146f776e6572000130543a3a4163636f756e74496400012c66696e6765727072696e7434013846696e6765727072696e743c543e00011073697a6530013853746f72616765446174613c543e00012463616e5f7365727665200110626f6f6c000158696e636c7573696f6e5f666f726573745f70726f6f6625020138466f7265737450726f6f663c543e000b20d0457865637574656420627920612042535020746f207265717565737420746f2073746f702073746f72696e6720612066696c652e006d01496e20746865206576656e74207768656e20612073746f726167652072657175657374206e6f206c6f6e6765722065786973747320666f722074686520646174612074686520425350206e6f206c6f6e6765722073746f7265732c7101697420697320726571756972656420746861742074686520425350207374696c6c206861732061636365737320746f20746865206d65746164617461206f662074686520696e697469616c2073746f7261676520726571756573742e89014966207468657920646f206e6f742c20746865792077696c6c206174206c65617374206e6565642074686174206d6574616461746120746f207265636f6e737472756374207468652046696c6520494420616e642066726f6d2077686572657665723d017468652042535020676574732074686174206461746120697320757020746f2069742e204f6e65206578616d706c6520636f756c642062652066726f6d207468652061737369676e6564204d53502e750154686973206d65746164617461206973206e65636573736172792073696e6365206974206973206e656564656420746f207265636f6e73747275637420746865206c656166206e6f6465206b657920696e207468652073746f726167656470726f76696465722773204d65726b6c6520466f726573742e606273705f636f6e6669726d5f73746f705f73746f72696e6708012066696c655f6b65793401344d65726b6c65486173683c543e000158696e636c7573696f6e5f666f726573745f70726f6f6625020138466f7265737450726f6f663c543e000c14d0457865637574656420627920612042535020746f20636f6e6669726d20746f2073746f702073746f72696e6720612066696c652e00bd0149742068617320746f20686176652070726576696f75736c79206f70656e656420612070656e64696e672073746f702073746f72696e672072657175657374207573696e672074686520606273705f726571756573745f73746f705f73746f72696e67602065787472696e7369632eb901546865206d696e696d756d20616d6f756e74206f6620626c6f636b73206265747765656e20746865207265717565737420616e642074686520636f6e6669726d6174696f6e20697320646566696e6564206279207468652072756e74696d652c20737563682074686174207468658d014253502063616e277420696d6d6564696174656c792073746f702073746f72696e6720612066696c65206974206861732070726576696f75736c79206c6f7374207768656e20726563656976696e672061206368616c6c656e676520666f722069742e7c73746f705f73746f72696e675f666f725f696e736f6c76656e745f757365721c012066696c655f6b65793401344d65726b6c65486173683c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e0001146f776e6572000130543a3a4163636f756e74496400012c66696e6765727072696e7434013846696e6765727072696e743c543e00011073697a6530013853746f72616765446174613c543e000158696e636c7573696f6e5f666f726573745f70726f6f6625020138466f7265737450726f6f663c543e000d18fc4578656375746564206279206120535020746f2073746f702073746f72696e6720612066696c652066726f6d20616e20696e736f6c76656e7420757365722e00b101546869732069732075736564207768656e2061207573657220686173206265636f6d6520696e736f6c76656e7420616e6420746865205350206e6565647320746f2073746f702073746f72696e67207468652066696c6573206f66207468617420757365722c2073696e6365a0697420776f6e27742062652067657474696e67207061696420666f7220697420616e796d6f72652e3d025468652076616c69646174696f6e73206172652073696d696c617220746f20746865206f6e657320696e2074686520606273705f726571756573745f73746f705f73746f72696e676020616e6420606273705f636f6e6669726d5f73746f705f73746f72696e67602065787472696e736963732c206275742074686520535020646f65736e2774206e65656420746f7d017761697420666f722061206d696e696d756d20616d6f756e74206f6620626c6f636b7320746f20636f6e6669726d20746f2073746f702073746f72696e67207468652066696c65206e6f722069742068617320746f2062652061204253502e2c64656c6574655f66696c651801246275636b65745f69643401384275636b65744964466f723c543e00012066696c655f6b65793401344d65726b6c65486173683c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e00011073697a6530013853746f72616765446174613c543e00012c66696e6765727072696e7434013846696e6765727072696e743c543e0001706d617962655f696e636c7573696f6e5f666f726573745f70726f6f66c50401584f7074696f6e3c466f7265737450726f6f663c543e3e000e00a870656e64696e675f66696c655f64656c6574696f6e5f726571756573745f7375626d69745f70726f6f6610011075736572000130543a3a4163636f756e74496400012066696c655f6b65793401344d65726b6c65486173683c543e0001246275636b65745f69643401384275636b65744964466f723c543e000130666f726573745f70726f6f6625020138466f7265737450726f6f663c543e000f00547365745f676c6f62616c5f706172616d65746572730801487265706c69636174696f6e5f7461726765740d0201804f7074696f6e3c543a3a5265706c69636174696f6e546172676574547970653e000180626c6f636b5f72616e67655f746f5f6d6178696d756d5f7468726573686f6c640d0201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e001000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb5040c4870616c6c65745f66696c655f73797374656d147479706573644275636b65744d6f766552657175657374526573706f6e73650001082041636365707465640000002052656a656374656400010000b9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401bd04045300000400c10401185665633c543e0000bd040000040834350200c104000002bd0400c50404184f7074696f6e0404540125020108104e6f6e6500000010536f6d65040025020000010000c9040c5070616c6c65745f70726f6f66735f6465616c65721870616c6c65741043616c6c04045400010c246368616c6c656e676504010c6b65793401244b6579466f723c543e00001868496e74726f647563652061206e6577206368616c6c656e67652e003101546869732066756e6374696f6e20616c6c6f777320616e796f6e6520746f206164642061206e6577206368616c6c656e676520746f2074686520604368616c6c656e6765735175657565602ed8546865206368616c6c656e67652077696c6c206265206469737061746368656420696e2074686520636f6d696e6720626c6f636b732efc5573657273206172652063686172676564206120736d616c6c2066656520666f72207375626d697474696e672061206368616c6c656e67652c20776869636854676f657320746f207468652054726561737572792e307375626d69745f70726f6f6608011470726f6f662102012050726f6f663c543e00012070726f7669646572090301604f7074696f6e3c50726f76696465724964466f723c543e3e00015484466f7220612050726f766964657220746f207375626d697420612070726f6f662e00e0436865636b732074686174206070726f766964657260206973206120726567697374657265642050726f76696465722e204966206e6f6e65090169732070726f76696465642c207468652070726f6f66207375626d697474657220697320636f6e7369646572656420746f206265207468652050726f76696465722ef852656c696573206f6e20612050726f7669646572732070616c6c657420746f206765742074686520726f6f7420666f72207468652050726f76696465722e390156616c6964617465732074686174207468652070726f6f6620636f72726573706f6e647320746f2061206368616c6c656e6765207468617420776173206d61646520696e2074686520706173742c3901627920636865636b696e672074686520605469636b546f4368616c6c656e67657353656564602053746f726167654d61702e20546865206368616c6c656e6765207469636b207468617420746865410150726f76696465722073686f756c642068617665207375626d697474656420612070726f6f662069732063616c63756c61746564206261736564206f6e20746865206c617374207469636b20746865795d017375626d697474656420612070726f6f6620666f722028604c6173745469636b50726f76696465725375626d697474656450726f6f66466f7260292c20616e64207468652070726f76696e6720706572696f6420666f72c8746861742050726f76696465722c20776869636820697320612066756e6374696f6e206f66207468656972207374616b652e3901546869732065787472696e73696320616c736f20636865636b732074686174207468657265206861736e2774206265656e206120636865636b706f696e74206368616c6c656e676520726f756e642101696e206265747765656e20746865206c6173742074696d65207468652050726f7669646572207375626d697474656420612070726f6f6620666f7220616e6420746865207469636b2901666f72207768696368207468652070726f6f66206973206265696e67207375626d69747465642e20496620746865726520686173206265656e2c207468652050726f7669646572206973507375626a65637420746f20736c617368696e672e002449662076616c69643a75012d2050757368657320666f7277617264207468652050726f766964657220696e2074686520604368616c6c656e67655469636b546f4368616c6c656e67656450726f766964657273602053746f726167654d61702061206e756d626572d06f66207469636b7320636f72726573706f6e64696e6720746f20746865207374616b65206f66207468652050726f76696465722e3d012d205265676973746572732074686973207469636b20617320746865206c617374207469636b20696e207768696368207468652050726f7669646572207375626d697474656420612070726f6f662e001501457865637574696f6e206f6620746869732065787472696e7369632073686f756c6420626520726566756e646564206966207468652070726f6f662069732076616c69642e80666f7263655f696e697469616c6973655f6368616c6c656e67655f6379636c6504012070726f766964657234014050726f76696465724964466f723c543e000218a0496e697469616c69736520612050726f76696465722773206368616c6c656e6765206379636c652e00584f6e6c792063616c6c61626c65206279207375646f2e005d015365747320746865206c617374207469636b207468652050726f7669646572207375626d697474656420612070726f6f6620666f7220746f207468652063757272656e74207469636b2c20616e642073657473207468657101646561646c696e6520666f72207375626d697474696e6720612070726f6f6620746f207468652063757272656e74207469636b202b207468652050726f7669646572277320706572696f64202b2074686520746f6c6572616e63652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd040c4470616c6c65745f72616e646f6d6e6573731870616c6c65741043616c6c0404540001044c7365745f626162655f72616e646f6d6e65737300000ced015468697320696e686572656e742074686174206d75737420626520696e636c7564656420284469737061746368436c6173733a3a4d616e6461746f727929206174206561636820626c6f636b20736176657320746865206c61746573742072616e646f6d6e65737320617661696c61626c652066726f6d20746865810172656c617920636861696e20696e746f2061207661726961626c6520746861742063616e207468656e20626520757365642061732061207365656420666f7220636f6d6d69746d656e747320746861742068617070656e656420647572696e67787468652070726576696f75732072656c617920636861696e2065706f6368040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed1040c5870616c6c65745f7061796d656e745f73747265616d731870616c6c65741043616c6c040454000124806372656174655f66697865645f726174655f7061796d656e745f73747265616d0c012c70726f76696465725f696434014050726f76696465724964466f723c543e000130757365725f6163636f756e74000130543a3a4163636f756e7449640001107261746518013042616c616e63654f663c543e0000489501446973706174636861626c652065787472696e736963207468617420616c6c6f777320726f6f7420746f2061646420612066697865642d72617465207061796d656e742073747265616d2066726f6d2061205573657220746f20612050726f76696465722e00c101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f7420285061796d656e742073747265616d732073686f756c64206f6e6c792062652061646465642062792074726169747320696e206f746865722070616c6c6574732c98746869732065787472696e73696320697320666f72206d616e75616c2074657374696e67292e002c506172616d65746572733a01012d206070726f76696465725f6964603a205468652050726f7669646572204944207468617420746865207061796d656e742073747265616d20697320666f722e15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722ec42d206072617465603a2054686520696e697469616c2072617465206f6620746865207061796d656e742073747265616d2e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633aec312e20436865636b2074686174207468652065787472696e736963207761732065786563757465642062792074686520726f6f74206f726967696edc322e20436865636b207468617420746865207061796d656e742073747265616d20646f6573206e6f7420616c7265616479206578697374e8332e20436865636b20746861742074686520557365722068617320656e6f7567682066756e647320746f2070617920746865206465706f73697484342e20486f6c6420746865206465706f7369742066726f6d2074686520557365720d01352e2055706461746520746865205061796d656e742053747265616d732073746f7261676520746f2061646420746865206e6577207061796d656e742073747265616d00f0456d69747320604669786564526174655061796d656e7453747265616d4372656174656460206576656e74207768656e207375636365737366756c2e807570646174655f66697865645f726174655f7061796d656e745f73747265616d0c012c70726f76696465725f696434014050726f76696465724964466f723c543e000130757365725f6163636f756e74000130543a3a4163636f756e7449640001206e65775f7261746518013042616c616e63654f663c543e000140d901446973706174636861626c652065787472696e736963207468617420616c6c6f777320726f6f7420746f2075706461746520616e206578697374696e672066697865642d72617465207061796d656e742073747265616d206265747765656e2061205573657220616e6420612050726f76696465722e00c101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f7420285061796d656e742073747265616d732073686f756c64206f6e6c792062652061646465642062792074726169747320696e206f746865722070616c6c6574732c98746869732065787472696e73696320697320666f72206d616e75616c2074657374696e67292e002c506172616d65746572733a01012d206070726f76696465725f6964603a205468652050726f7669646572204944207468617420746865207061796d656e742073747265616d20697320666f722e15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722ec42d20606e65775f72617465603a20546865206e65772072617465206f6620746865207061796d656e742073747265616d2e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633aec312e20436865636b2074686174207468652065787472696e736963207761732065786563757465642062792074686520726f6f74206f726967696e9c322e20436865636b207468617420746865207061796d656e742073747265616d206578697374730901332e2055706461746520746865205061796d656e742053747265616d732073746f7261676520746f2075706461746520746865207061796d656e742073747265616d00f0456d69747320604669786564526174655061796d656e7453747265616d5570646174656460206576656e74207768656e207375636365737366756c2e8064656c6574655f66697865645f726174655f7061796d656e745f73747265616d08012c70726f76696465725f696434014050726f76696465724964466f723c543e000130757365725f6163636f756e74000130543a3a4163636f756e74496400023cd901446973706174636861626c652065787472696e736963207468617420616c6c6f777320726f6f7420746f2064656c65746520616e206578697374696e672066697865642d72617465207061796d656e742073747265616d206265747765656e2061205573657220616e6420612050726f76696465722e00c101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f7420285061796d656e742073747265616d732073686f756c64206f6e6c792062652061646465642062792074726169747320696e206f746865722070616c6c6574732c98746869732065787472696e73696320697320666f72206d616e75616c2074657374696e67292e002c506172616d65746572733a01012d206070726f76696465725f6964603a205468652050726f7669646572204944207468617420746865207061796d656e742073747265616d20697320666f722e15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633aec312e20436865636b2074686174207468652065787472696e736963207761732065786563757465642062792074686520726f6f74206f726967696e9c322e20436865636b207468617420746865207061796d656e742073747265616d206578697374730901332e2055706461746520746865205061796d656e742053747265616d732073746f7261676520746f2072656d6f766520746865207061796d656e742073747265616d00f0456d69747320604669786564526174655061796d656e7453747265616d44656c6574656460206576656e74207768656e207375636365737366756c2e886372656174655f64796e616d69635f726174655f7061796d656e745f73747265616d0c012c70726f76696465725f696434014050726f76696465724964466f723c543e000130757365725f6163636f756e74000130543a3a4163636f756e74496400013c616d6f756e745f70726f766964656430014c556e69747350726f7669646564466f723c543e0003489d01446973706174636861626c652065787472696e736963207468617420616c6c6f777320726f6f7420746f2061646420612064796e616d69632d72617465207061796d656e742073747265616d2066726f6d2061205573657220746f20612050726f76696465722e00c101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f7420285061796d656e742073747265616d732073686f756c64206f6e6c792062652061646465642062792074726169747320696e206f746865722070616c6c6574732c98746869732065787472696e73696320697320666f72206d616e75616c2074657374696e67292e002c506172616d65746572733a01012d206070726f76696465725f6964603a205468652050726f7669646572204944207468617420746865207061796d656e742073747265616d20697320666f722e15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722e05012d2060616d6f756e745f70726f7669646564603a2054686520696e697469616c20616d6f756e742070726f7669646564206279207468652050726f76696465722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633aec312e20436865636b2074686174207468652065787472696e736963207761732065786563757465642062792074686520726f6f74206f726967696edc322e20436865636b207468617420746865207061796d656e742073747265616d20646f6573206e6f7420616c7265616479206578697374e8332e20436865636b20746861742074686520557365722068617320656e6f7567682066756e647320746f2070617920746865206465706f73697484342e20486f6c6420746865206465706f7369742066726f6d2074686520557365720d01352e2055706461746520746865205061796d656e742053747265616d732073746f7261676520746f2061646420746865206e6577207061796d656e742073747265616d00f8456d697473206044796e616d6963526174655061796d656e7453747265616d4372656174656460206576656e74207768656e207375636365737366756c2e887570646174655f64796e616d69635f726174655f7061796d656e745f73747265616d0c012c70726f76696465725f696434014050726f76696465724964466f723c543e000130757365725f6163636f756e74000130543a3a4163636f756e74496400014c6e65775f616d6f756e745f70726f766964656430014c556e69747350726f7669646564466f723c543e000440e101446973706174636861626c652065787472696e736963207468617420616c6c6f777320726f6f7420746f2075706461746520616e206578697374696e672064796e616d69632d72617465207061796d656e742073747265616d206265747765656e2061205573657220616e6420612050726f76696465722e00c101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f7420285061796d656e742073747265616d732073686f756c64206f6e6c792062652061646465642062792074726169747320696e206f746865722070616c6c6574732c98746869732065787472696e73696320697320666f72206d616e75616c2074657374696e67292e002c506172616d65746572733a01012d206070726f76696465725f6964603a205468652050726f7669646572204944207468617420746865207061796d656e742073747265616d20697320666f722e15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722e05012d20606e65775f616d6f756e745f70726f7669646564603a20546865206e657720616d6f756e742070726f7669646564206279207468652050726f76696465722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633aec312e20436865636b2074686174207468652065787472696e736963207761732065786563757465642062792074686520726f6f74206f726967696e9c322e20436865636b207468617420746865207061796d656e742073747265616d206578697374730901332e2055706461746520746865205061796d656e742053747265616d732073746f7261676520746f2075706461746520746865207061796d656e742073747265616d00f8456d697473206044796e616d6963526174655061796d656e7453747265616d5570646174656460206576656e74207768656e207375636365737366756c2e8864656c6574655f64796e616d69635f726174655f7061796d656e745f73747265616d08012c70726f76696465725f696434014050726f76696465724964466f723c543e000130757365725f6163636f756e74000130543a3a4163636f756e74496400053ce101446973706174636861626c652065787472696e736963207468617420616c6c6f777320726f6f7420746f2064656c65746520616e206578697374696e672064796e616d69632d72617465207061796d656e742073747265616d206265747765656e2061205573657220616e6420612050726f76696465722e00c101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f7420285061796d656e742073747265616d732073686f756c64206f6e6c792062652061646465642062792074726169747320696e206f746865722070616c6c6574732c98746869732065787472696e73696320697320666f72206d616e75616c2074657374696e67292e002c506172616d65746572733a01012d206070726f76696465725f6964603a205468652050726f7669646572204944207468617420746865207061796d656e742073747265616d20697320666f722e15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633aec312e20436865636b2074686174207468652065787472696e736963207761732065786563757465642062792074686520726f6f74206f726967696e9c322e20436865636b207468617420746865207061796d656e742073747265616d206578697374730901332e2055706461746520746865205061796d656e742053747265616d732073746f7261676520746f2072656d6f766520746865207061796d656e742073747265616d00f8456d697473206044796e616d6963526174655061796d656e7453747265616d44656c6574656460206576656e74207768656e207375636365737366756c2e586368617267655f7061796d656e745f73747265616d73040130757365725f6163636f756e74000130543a3a4163636f756e7449640006705101446973706174636861626c652065787472696e736963207468617420616c6c6f77732050726f76696465727320746f206368617267652061207061796d656e742073747265616d2066726f6d206120557365722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e6d01546865206f726967696e206d757374206265207468652050726f7669646572207468617420686173206174206c65617374206f6e652074797065206f66207061796d656e742073747265616d20776974682074686520557365722e002c506172616d65746572733a15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722e4101322e20436865636b20746861742061207061796d656e742073747265616d206265747765656e20746865207369676e6572202850726f76696465722920616e6420746865205573657220657869737473ac332e20496620746865726520697320612066697865642d72617465207061796d656e742073747265616d3aa0202020312e20476574207468652072617465206f6620746865207061796d656e742073747265616dbd01202020322e204765742074686520646966666572656e6365206265747765656e20746865206c6173742063686172676564207469636b206e756d62657220616e6420746865206c6173742063686172676561626c65207469636b206e756d626572206f66207468652073747265616df8202020332e2043616c63756c6174652074686520616d6f756e7420746f2063686172676520646f696e67206072617465202a20646966666572656e636560e501202020342e204368617267652074686520757365722028696620746865207573657220646f6573206e6f74206861766520656e6f7567682066756e64732c206974206765747320666c616767656420616e642061206055736572576974686f757446756e647360206576656e7420697320656d697474656429fc202020352e2055706461746520746865206c6173742063686172676564207469636b206e756d626572206f6620746865207061796d656e742073747265616db4342e20496620746865726520697320612064796e616d69632d72617465207061796d656e742073747265616d3ab4202020312e204765742074686520616d6f756e742070726f7669646564206279207468652050726f7669646572f501202020322e204765742074686520646966666572656e6365206265747765656e20707269636520696e646578207768656e207468652073747265616d20776173206c617374206368617267656420616e642074686520707269636520696e64657820617420746865206c6173742063686172676561626c65207469636b2501202020332e2043616c63756c6174652074686520616d6f756e7420746f2063686172676520646f696e672060616d6f756e745f70726f7669646564202a20646966666572656e636560e501202020342e204368617267652074686520757365722028696620746865207573657220646f6573206e6f74206861766520656e6f7567682066756e64732c206974206765747320666c616767656420616e642061206055736572576974686f757446756e647360206576656e7420697320656d6974746564294d01202020352e205570646174652074686520707269636520696e646578207768656e207468652073747265616d20776173206c6173742063686172676564206f6620746865207061796d656e742073747265616d00d4456d697473206120605061796d656e7453747265616d4368617267656460206576656e74207768656e207375636365737366756c2e0001024e6f7465733a20612050726f766964657220636f756c64206861766520626f746820612066697865642d7261746520616e6420612064796e616d69632d72617465207061796d656e742073747265616d2077697468206120557365722e204966207468617427732074686520636173652c20746869732065787472696e736963b90177696c6c2074727920746f2063686172676520626f746820616e642074686520616d6f756e7420636861726765642077696c6c206265207468652073756d206f662074686520616d6f756e7473206368617267656420666f722065616368207061796d656e742073747265616d2e507061795f6f75747374616e64696e675f64656274000748f501446973706174636861626c652065787472696e736963207468617420616c6c6f77732061207573657220666c616767656420617320776974686f75742066756e647320746f2070617920616c6c2072656d61696e696e67207061796d656e742073747265616d7320746f2062652061626c6520746f207265636f76657234697473206465706f736974732e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e0d01546865206f726967696e206d757374206265207468652055736572207468617420686173206265656e20666c616767656420617320776974686f75742066756e64732e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722ee4322e20436865636b207468617420746865207573657220686173206265656e20666c616767656420617320776974686f75742066756e64732e4101332e2052656c6561736520746865207573657227732066756e6473207468617420776572652068656c642061732061206465706f73697420666f722065616368207061796d656e742073747265616d2e7901342e2047657420616c6c207061796d656e742073747265616d73206f6620746865207573657220616e6420636861726765207468656d2c20706179696e67207468652050726f76696465727320666f72207468652073657276696365732ea8352e2044656c65746520616c6c207061796d656e742073747265616d73206f662074686520757365722e00b8456d697473206120275573657250616964446562747327206576656e74207768656e207375636365737366756c2e0001024e6f7465733a20746869732065787472696e736963206974657261746573206f76657220616c6c207061796d656e742073747265616d73206f6620746865207573657220616e642063686172676573207468656d2c20736f2069742063616e20626520657870656e7369766520696e207465726d73206f66207765696768742efd015468652066656520746f20657865637574652069742073686f756c64206265206869676820656e6f75676820746f20636f6d70656e7361746520666f722074686520776569676874206f66207468652065787472696e7369632c20776974686f7574206265696e6720746f6f206869676820746861742074686520757365724d0166696e6473206d6f726520636f6e76656e69656e7420746f207761697420666f722050726f76696465727320746f2067657420697473206465706f73697473206f6e65206279206f6e6520696e73746561642e50636c6561725f696e736f6c76656e745f666c6167000858dd01446973706174636861626c652065787472696e736963207468617420616c6c6f77732061207573657220666c616767656420617320776974686f75742066756e6473206c6f6e672061676f20656e6f75676820746f20636c656172207468697320666c61672066726f6d20697473206163636f756e742c0102616c6c6f77696e6720697420746f20626567696e20636f6e7472616374696e6720616e6420706179696e6720666f7220736572766963657320616761696e2e204966207468657265277320616e79206f75747374616e64696e6720646562742c2069742077696c6c206265206368617267656420616e6420636c65617265642e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e0d01546865206f726967696e206d757374206265207468652055736572207468617420686173206265656e20666c616767656420617320776974686f75742066756e64732e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722ee4322e20436865636b207468617420746865207573657220686173206265656e20666c616767656420617320776974686f75742066756e64732e6501332e20436865636b20746861742074686520636f6f6c646f776e20706572696f6420686173207061737365642073696e63652074686520757365722077617320666c616767656420617320776974686f75742066756e64732e2101342e20436865636b206966207468657265277320616e79206f75747374616e64696e67206465627420616e64206368617267652069742e205468697320697320646f6e652062793a35012020612e2052656c656173696e6720616e792072656d61696e696e672066756e64732068656c642061732061206465706f73697420666f722065616368207061796d656e742073747265616d2e99012020622e2047657474696e6720616c6c207061796d656e742073747265616d73206f6620746865207573657220616e64206368617267696e67207468656d2c20706179696e67207468652050726f76696465727320666f72207468652073657276696365732eb02020632e2052657475726e696e6720746865205573657220616e792072656d61696e696e672066756e64732eb82020642e2044656c6574696e6720616c6c207061796d656e742073747265616d73206f662074686520757365722e90352e20556e666c616720746865207573657220617320776974686f75742066756e64732e00b0456d6974732061202755736572536f6c76656e7427206576656e74207768656e207375636365737366756c2e0029024e6f7465733a20746869732065787472696e736963206974657261746573206f76657220616c6c2072656d61696e696e67207061796d656e742073747265616d73206f6620746865207573657220616e642063686172676573207468656d2c20736f2069742063616e20626520657870656e7369766520696e207465726d73206f66207765696768742efd015468652066656520746f20657865637574652069742073686f756c64206265206869676820656e6f75676820746f20636f6d70656e7361746520666f722074686520776569676874206f66207468652065787472696e7369632c20776974686f7574206265696e6720746f6f206869676820746861742074686520757365724d0166696e6473206d6f726520636f6e76656e69656e7420746f207761697420666f722050726f76696465727320746f2067657420697473206465706f73697473206f6e65206279206f6e6520696e73746561642e04c4446973706174636861626c6573202865787472696e7369637329206578706f73656420627920746869732070616c6c6574d5040c4870616c6c65745f6275636b65745f6e6674731870616c6c65741043616c6c0404540001083073686172655f616363657373100124726563697069656e74dd0301684163636f756e7449644c6f6f6b7570536f757263654f663c543e0001186275636b65743401384275636b65744964466f723c543e00011c6974656d5f6964100124543a3a4974656d4964000144726561645f6163636573735f7265676578d90401684f7074696f6e3c5265616441636365737352656765783c543e3e00000cec53686172652061636365737320746f2066696c65732077697468696e2061206275636b6574207769746820616e6f74686572206163636f756e742e0079025468652060726561645f6163636573735f72656765786020706172616d65746572206973206f7074696f6e616c20616e64207768656e2073657420746f20604e6f6e6560206974206d65616e7320746861742074686520726563697069656e742077696c6c2062652064656e6965642061636365737320666f7220616e79207265616420726571756573742077697468696e20746865206275636b65742e487570646174655f726561645f6163636573730c01186275636b65743401384275636b65744964466f723c543e00011c6974656d5f6964100124543a3a4974656d4964000144726561645f6163636573735f7265676578d90401684f7074696f6e3c5265616441636365737352656765783c543e3e0001047c55706461746520726561642061636365737320666f7220616e206974656d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed90404184f7074696f6e0404540175020108104e6f6e6500000010536f6d65040075020000010000dd040c2c70616c6c65745f6e6674731870616c6c65741043616c6c08045400044900019c1863726561746508011461646d696edd0301504163636f756e7449644c6f6f6b75704f663c543e000118636f6e666967e1040164436f6c6c656374696f6e436f6e666967466f723c542c20493e00003c090149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d2061207075626c6963206f726967696e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e002501546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420686176652073756666696369656e742066756e647320667265652e00c460436f6c6c656374696f6e4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174650801146f776e6572dd0301504163636f756e7449644c6f6f6b75704f663c543e000118636f6e666967e1040164436f6c6c656374696f6e436f6e666967466f723c542c20493e00013c190149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d20612070726976696c65676564206f726967696e2e00ac54686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0039012d20606f776e6572603a20546865206f776e6572206f66207468697320636f6c6c656374696f6e206f66206974656d732e20546865206f776e6572206861732066756c6c20737570657275736572590120207065726d697373696f6e73206f7665722074686973206974656d2c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e67982020607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129601c64657374726f79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c7769746e6573730105013844657374726f795769746e6573730002449c44657374726f79206120636f6c6c656374696f6e206f662066756e6769626c65206974656d732e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d75737420626520746865686f776e6572206f66207468652060636f6c6c656374696f6e602e00dc4e4f54453a2054686520636f6c6c656374696f6e206d75737420686176652030206974656d7320746f2062652064657374726f7965642e0005012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f2062652064657374726f7965642e31012d20607769746e657373603a20496e666f726d6174696f6e206f6e20746865206974656d73206d696e74656420696e2074686520636f6c6c656374696f6e2e2054686973206d75737420626520636f72726563742e00a0456d697473206044657374726f79656460206576656e74207768656e207375636365737366756c2e00745765696768743a20604f286d202b2063202b206129602077686572653a782d20606d203d207769746e6573732e6974656d5f6d657461646174617360702d206063203d207769746e6573732e6974656d5f636f6e6669677360682d206061203d207769746e6573732e6174747269627574657360106d696e74100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011c6d696e745f746fdd0301504163636f756e7449644c6f6f6b75704f663c543e0001307769746e6573735f64617461050501d84f7074696f6e3c4d696e745769746e6573733c543a3a4974656d49642c204465706f73697442616c616e63654f663c542c20493e3e3e000340a04d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2e005101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420636f6d706c7920776974682074686520606d696e745f73657474696e6773602072756c65732e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ea02d20606974656d603a20416e206964656e746966696572206f6620746865206e6577206974656d2ee02d20606d696e745f746f603a204163636f756e7420696e746f20776869636820746865206974656d2077696c6c206265206d696e7465642e45012d20607769746e6573735f64617461603a205768656e20746865206d696e7420747970652069732060486f6c6465724f6628636f6c6c656374696f6e5f696429602c207468656e20746865206f776e6564590120206974656d5f69642066726f6d207468617420636f6c6c656374696f6e206e6565647320746f2062652070726f76696465642077697468696e20746865207769746e6573732064617461206f626a6563742e20496661012020746865206d696e74207072696365206973207365742c207468656e2069742073686f756c64206265206164646974696f6e616c6c7920636f6e6669726d656420696e2074686520607769746e6573735f64617461602e0051014e6f74653a20746865206465706f7369742077696c6c2062652074616b656e2066726f6d2074686520606f726967696e6020616e64206e6f742074686520606f776e657260206f662074686520606974656d602e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296028666f7263655f6d696e74100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011c6d696e745f746fdd0301504163636f756e7449644c6f6f6b75704f663c543e00012c6974656d5f636f6e6669670d0501284974656d436f6e66696700043405014d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2066726f6d20612070726976696c65676564206f726967696e2e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d757374206265207468656c497373756572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ea02d20606974656d603a20416e206964656e746966696572206f6620746865206e6577206974656d2ee02d20606d696e745f746f603a204163636f756e7420696e746f20776869636820746865206974656d2077696c6c206265206d696e7465642ea82d20606974656d5f636f6e666967603a204120636f6e666967206f6620746865206e6577206974656d2e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400052c5844657374726f7920612073696e676c65206974656d2e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d7573746c626520746865206f776e6572206f662074686520606974656d602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642e802d20606974656d603a20546865206974656d20746f206265206275726e65642e003c456d69747320604275726e6564602e00385765696768743a20604f28312960207472616e736665720c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064657374dd0301504163636f756e7449644c6f6f6b75704f663c543e000638c04d6f766520616e206974656d2066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a682d20746865204f776e6572206f662074686520606974656d603b35012d2074686520617070726f7665642064656c656761746520666f722074686520606974656d602028696e207468697320636173652c2074686520617070726f76616c206973207265736574292e0028417267756d656e74733af42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207472616e736665727265642e942d20606974656d603a20546865206974656d20746f206265207472616e736665727265642edc2d206064657374603a20546865206163636f756e7420746f2072656365697665206f776e657273686970206f6620746865206974656d2e0050456d69747320605472616e73666572726564602e00385765696768743a20604f283129602472656465706f736974080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146974656d73790201385665633c543a3a4974656d49643e0007449c52652d6576616c7561746520746865206465706f73697473206f6e20736f6d65206974656d732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f82d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d7320746f2062652072656576616c75617465642e29012d20606974656d73603a20546865206974656d73206f662074686520636f6c6c656374696f6e2077686f7365206465706f736974732077696c6c2062652072656576616c75617465642e002d014e4f54453a205468697320657869737473206173206120626573742d6566666f72742066756e6374696f6e2e20416e79206974656d732077686963682061726520756e6b6e6f776e206f723901696e207468652063617365207468617420746865206f776e6572206163636f756e7420646f6573206e6f7420686176652072657365727661626c652066756e647320746f2070617920666f7220614d016465706f73697420696e637265617365206172652069676e6f7265642e2047656e6572616c6c7920746865206f776e65722069736e277420676f696e6720746f2063616c6c2074686973206f6e206974656d73550177686f7365206578697374696e67206465706f736974206973206c657373207468616e2074686520726566726573686564206465706f73697420617320697420776f756c64206f6e6c7920636f7374207468656d2c78736f2069742773206f66206c6974746c6520636f6e73657175656e63652e00590149742077696c6c207374696c6c2072657475726e20616e206572726f7220696e20746865206361736520746861742074686520636f6c6c656374696f6e20697320756e6b6e6f776e206f7220746865207369676e6572706973206e6f74207065726d697474656420746f2063616c6c2069742e00605765696768743a20604f286974656d732e6c656e28292960486c6f636b5f6974656d5f7472616e73666572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000828c8446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206368616e6765642eb82d20606974656d603a20546865206974656d20746f206265636f6d65206e6f6e2d7472616e7366657261626c652e006c456d69747320604974656d5472616e736665724c6f636b6564602e00385765696768743a20604f2831296050756e6c6f636b5f6974656d5f7472616e73666572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000928a852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206368616e6765642ea82d20606974656d603a20546865206974656d20746f206265636f6d65207472616e7366657261626c652e0074456d69747320604974656d5472616e73666572556e6c6f636b6564602e00385765696768743a20604f283129603c6c6f636b5f636f6c6c656374696f6e080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001346c6f636b5f73657474696e6773e5040148436f6c6c656374696f6e53657474696e6773000a30d8446973616c6c6f7773207370656369666965642073657474696e677320666f72207468652077686f6c6520636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f206265206c6f636b65642eb42d20606c6f636b5f73657474696e6773603a205468652073657474696e677320746f206265206c6f636b65642e001d014e6f74653a206974277320706f737369626c6520746f206f6e6c79206c6f636b2873657429207468652073657474696e672c20627574206e6f7420746f20756e7365742069742e0064456d6974732060436f6c6c656374696f6e4c6f636b6564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572dd0301504163636f756e7449644c6f6f6b75704f663c543e000b2c844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365206f776e65722073686f756c64206265206368616e6765642e09012d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e2054686579206d75737420686176652063616c6c656449012020607365745f6163636570745f6f776e6572736869706020776974682060636f6c6c656374696f6e6020696e206f7264657220666f722074686973206f7065726174696f6e20746f20737563636565642e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572110501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011461646d696e110501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011c667265657a6572110501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e000c40d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e0051014e6f74653a2062792073657474696e672074686520726f6c6520746f20604e6f6e6560206f6e6c79207468652060466f7263654f726967696e602077696c6c2062652061626c6520746f206368616e676520697464616674657220746f2060536f6d65286163636f756e7429602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f2831296058666f7263655f636f6c6c656374696f6e5f6f776e6572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572dd0301504163636f756e7449644c6f6f6b75704f663c543e000d28844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00c42d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2eb02d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f283129605c666f7263655f636f6c6c656374696f6e5f636f6e666967080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118636f6e666967e1040164436f6c6c656374696f6e436f6e666967466f723c542c20493e000e28884368616e67652074686520636f6e666967206f66206120636f6c6c656374696f6e2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00c42d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2eb82d2060636f6e666967603a20546865206e657720636f6e666967206f66207468697320636f6c6c656374696f6e2e0080456d6974732060436f6c6c656374696f6e436f6e6669674368616e676564602e00385765696768743a20604f2831296040617070726f76655f7472616e73666572100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465dd0301504163636f756e7449644c6f6f6b75704f663c543e0001386d617962655f646561646c696e650d0201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000f381501417070726f766520616e206974656d20746f206265207472616e7366657272656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468651c606974656d602e0045012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722ee42d20606974656d603a20546865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e19012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e7366657220746865206974656d2e49012d20606d617962655f646561646c696e65603a204f7074696f6e616c20646561646c696e6520666f722074686520617070726f76616c2e205370656369666965642062792070726f766964696e6720746865d8096e756d626572206f6620626c6f636b732061667465722077686963682074686520617070726f76616c2077696c6c206578706972650090456d69747320605472616e73666572417070726f76656460206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465dd0301504163636f756e7449644c6f6f6b75704f663c543e001038e443616e63656c206f6e65206f6620746865207472616e7366657220617070726f76616c7320666f722061207370656369666963206974656d2e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a3d012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e25012d20606974656d603a20546865206974656d206f662074686520636f6c6c656374696f6e206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e01012d206064656c6567617465603a20546865206163636f756e74207468617420697320676f696e6720746f206c6f6f736520746865697220617070726f76616c2e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296070636c6561725f616c6c5f7472616e736665725f617070726f76616c73080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001134b043616e63656c20616c6c2074686520617070726f76616c73206f662061207370656369666963206974656d2e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a39012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c732077696c6c20626520636c65617265642e21012d20606974656d603a20546865206974656d206f662074686520636f6c6c656374696f6e206f662077686f736520617070726f76616c732077696c6c20626520636c65617265642e00a4456d6974732060416c6c417070726f76616c7343616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f28312960506c6f636b5f6974656d5f70726f70657274696573100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001346c6f636b5f6d65746164617461200110626f6f6c00013c6c6f636b5f61747472696275746573200110626f6f6c001244e8446973616c6c6f7773206368616e67696e6720746865206d65746164617461206f722061747472696275746573206f6620746865206974656d2e0041014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e506f66207468652060636f6c6c656374696f6e602e00b42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2069662074686520606974656d602e7c2d20606974656d603a20416e206974656d20746f206265206c6f636b65642e0d012d20606c6f636b5f6d65746164617461603a20537065636966696573207768657468657220746865206d657461646174612073686f756c64206265206c6f636b65642e61012d20606c6f636b5f61747472696275746573603a20537065636966696573207768657468657220746865206174747269627574657320696e207468652060436f6c6c656374696f6e4f776e657260206e616d6573706163654c202073686f756c64206265206c6f636b65642e005d014e6f74653a20606c6f636b5f6174747269627574657360206166666563747320746865206174747269627574657320696e207468652060436f6c6c656374696f6e4f776e657260206e616d657370616365206f6e6c792e45015768656e20746865206d65746164617461206f72206174747269627574657320617265206c6f636b65642c20697420776f6e277420626520706f737369626c652074686520756e6c6f636b207468656d2e0074456d69747320604974656d50726f706572746965734c6f636b6564602e00385765696768743a20604f28312960347365745f617474726962757465140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e0001246e616d657370616365810201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b65797d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c756575020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001358a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e0001014f726967696e206d757374206265205369676e656420616e64206d75737420636f6e666f726d20746f20746865206e616d6573706163652072756c657365743a3d012d2060436f6c6c656374696f6e4f776e657260206e616d65737061636520636f756c64206265206d6f646966696564206279207468652060636f6c6c656374696f6e602041646d696e206f6e6c793b59012d20604974656d4f776e657260206e616d65737061636520636f756c64206265206d6f6469666965642062792074686520606d617962655f6974656d60206f776e6572206f6e6c792e20606d617962655f6974656d6074202073686f756c642062652073657420696e207468617420636173653b55012d20604163636f756e74284163636f756e7449642960206e616d65737061636520636f756c64206265206d6f646966696564206f6e6c79207768656e2074686520606f726967696e602077617320676976656e20615820207065726d697373696f6e20746f20646f20736f3b00f05468652066756e6473206f6620606f726967696e6020617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2d01604174747269627574654465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129604c666f7263655f7365745f6174747269627574651801187365745f61739c01504f7074696f6e3c543a3a4163636f756e7449643e000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e0001246e616d657370616365810201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b65797d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c756575020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001444c0466f7263652d73657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e00744f726967696e206d7573742062652060466f7263654f726967696e602e0039014966207468652061747472696275746520616c72656164792065786973747320616e64206974207761732073657420627920616e6f74686572206163636f756e742c20746865206465706f7369749c77696c6c2062652072657475726e656420746f207468652070726576696f7573206f776e65722e00bc2d20607365745f6173603a20416e206f7074696f6e616c206f776e6572206f6620746865206174747269627574652e39012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f617474726962757465100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e0001246e616d657370616365810201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b65797d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00153cb0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f6620746865286174747269627574652e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f283129605c617070726f76655f6974656d5f617474726962757465730c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465dd0301504163636f756e7449644c6f6f6b75704f663c543e0016242d01417070726f7665206974656d2773206174747269627574657320746f206265206368616e67656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00a42d2060636f6c6c656374696f6e603a204120636f6c6c656374696f6e206f6620746865206974656d2ea42d20606974656d603a20546865206974656d207468617420686f6c647320617474726962757465732e49012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f206368616e67652061747472696275746573206f6620746865206974656d2e00bc456d69747320604974656d41747472696275746573417070726f76616c416464656460206f6e20737563636573732e7c63616e63656c5f6974656d5f617474726962757465735f617070726f76616c100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465dd0301504163636f756e7449644c6f6f6b75704f663c543e00011c7769746e6573731505017c43616e63656c41747472696275746573417070726f76616c5769746e657373001728110143616e63656c207468652070726576696f75736c792070726f766964656420617070726f76616c20746f206368616e6765206974656d277320617474726962757465732e1101416c6c207468652070726576696f75736c7920736574206174747269627574657320627920746865206064656c6567617465602077696c6c2062652072656d6f7665642e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00f42d2060636f6c6c656374696f6e603a20436f6c6c656374696f6e207468617420746865206974656d20697320636f6e7461696e65642077697468696e2ea42d20606974656d603a20546865206974656d207468617420686f6c647320617474726962757465732ee02d206064656c6567617465603a205468652070726576696f75736c7920617070726f766564206163636f756e7420746f2072656d6f76652e00c4456d69747320604974656d41747472696275746573417070726f76616c52656d6f76656460206f6e20737563636573732e307365745f6d657461646174610c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001106461746175020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0018407453657420746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e0060456d69747320604974656d4d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640019347c436c65617220746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0070456d69747320604974656d4d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106461746175020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001a3c8853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001b3090436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960507365745f6163636570745f6f776e6572736869700401406d617962655f636f6c6c656374696f6e0d02015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001c28110153657420286f72207265736574292074686520616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e0061014f726967696e206d75737420626520605369676e65646020616e6420696620606d617962655f636f6c6c656374696f6e602069732060536f6d65602c207468656e20746865207369676e6572206d757374206861766520614c70726f7669646572207265666572656e63652e0051012d20606d617962655f636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206f776e65727368697020746865207369676e65722069736101202077696c6c696e6720746f206163636570742c206f7220696620604e6f6e65602c20616e20696e6469636174696f6e207468617420746865207369676e65722069732077696c6c696e6720746f20616363657074206e6f5c20206f776e657273686970207472616e73666572616c2e008c456d69747320604f776e657273686970416363657074616e63654368616e676564602e647365745f636f6c6c656374696f6e5f6d61785f737570706c79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001d24e053657420746865206d6178696d756d206e756d626572206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652e11012d20606d61785f737570706c79603a20546865206d6178696d756d206e756d626572206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e00d4456d6974732060436f6c6c656374696f6e4d6178537570706c7953657460206576656e74207768656e207375636365737366756c2e507570646174655f6d696e745f73657474696e6773080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001346d696e745f73657474696e6773ed040105014d696e7453657474696e67733c42616c616e63654f663c542c20493e2c20426c6f636b4e756d626572466f723c543e2c20543a3a436f6c6c656374696f6e49643e001e2454557064617465206d696e742073657474696e67732e004d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c642062652074686520497373756572506f66207468652060636f6c6c656374696f6e602e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652ea42d20606d696e745f73657474696e6773603a20546865206e6577206d696e742073657474696e67732e00f0456d6974732060436f6c6c656374696f6e4d696e7453657474696e67735570646174656460206576656e74207768656e207375636365737366756c2e247365745f7072696365100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001147072696365f504015c4f7074696f6e3c4974656d50726963653c542c20493e3e00014477686974656c69737465645f6275796572110501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e001f2c9453657420286f72207265736574292074686520707269636520666f7220616e206974656d2e00e84f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea02d20606974656d603a20546865206974656d20746f207365742074686520707269636520666f722e0d012d20607072696365603a2054686520707269636520666f7220746865206974656d2e205061737320604e6f6e65602c20746f207265736574207468652070726963652ef42d20606275796572603a205265737472696374732074686520627579206f7065726174696f6e20746f2061207370656369666963206163636f756e742e00ec456d69747320604974656d507269636553657460206f6e207375636365737320696620746865207072696365206973206e6f7420604e6f6e65602eec456d69747320604974656d507269636552656d6f76656460206f6e20737563636573732069662074686520707269636520697320604e6f6e65602e206275795f6974656d0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001246269645f707269636518013c4974656d50726963653c542c20493e002024a8416c6c6f777320746f2062757920616e206974656d206966206974277320757020666f722073616c652e00f84f726967696e206d757374206265205369676e656420616e64206d757374206e6f7420626520746865206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2eac2d20606974656d603a20546865206974656d207468652073656e6465722077616e747320746f206275792ed82d20606269645f7072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f207061792e0078456d69747320604974656d426f7567687460206f6e20737563636573732e207061795f74697073040110746970731905019c426f756e6465645665633c4974656d5469704f663c542c20493e2c20543a3a4d6178546970733e00211c5c416c6c6f777320746f207061792074686520746970732e00584f726967696e206d757374206265205369676e65642e00542d206074697073603a20546970732061727261792e0098456d697473206054697053656e7460206f6e20657665727920746970207472616e736665722e2c6372656174655f737761701801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001486d617962655f646573697265645f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e00012c6d617962655f7072696365850201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e0001206475726174696f6e100144426c6f636b4e756d626572466f723c543e002240510152656769737465722061206e65772061746f6d696320737761702c206465636c6172696e6720616e20696e74656e74696f6e20746f2073656e6420616e20606974656d6020696e2065786368616e676520666f72fc60646573697265645f6974656d602066726f6d206f726967696e20746f20746172676574206f6e207468652063757272656e7420626c6f636b636861696e2e4d01546865207461726765742063616e206578656375746520746865207377617020647572696e67207468652073706563696669656420606475726174696f6e60206f6620626c6f636b732028696620736574292ef04164646974696f6e616c6c792c2074686520707269636520636f756c642062652073657420666f7220746865206465736972656420606974656d602e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea82d20606974656d603a20546865206974656d20616e206f776e65722077616e747320746f20676976652eec2d2060646573697265645f636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f66207468652064657369726564206974656d2ef42d2060646573697265645f6974656d603a205468652064657369726564206974656d20616e206f776e65722077616e747320746f20726563656976652e61012d20606d617962655f7072696365603a2054686520707269636520616e206f776e65722069732077696c6c696e6720746f20706179206f72207265636569766520666f7220746865206465736972656420606974656d602e49012d20606475726174696f6e603a204120646561646c696e6520666f722074686520737761702e205370656369666965642062792070726f766964696e6720746865206e756d626572206f6620626c6f636b73880961667465722077686963682074686520737761702077696c6c206578706972652e007c456d6974732060537761704372656174656460206f6e20737563636573732e2c63616e63656c5f737761700801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d49640023245843616e63656c20616e2061746f6d696320737761702e00584f726967696e206d757374206265205369676e65642e15014f726967696e206d75737420626520616e206f776e6572206f662074686520606974656d602069662074686520646561646c696e65206861736e277420657870697265642e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea82d20606974656d603a20546865206974656d20616e206f776e65722077616e747320746f20676976652e0084456d69747320605377617043616e63656c6c656460206f6e20737563636573732e28636c61696d5f7377617014013c73656e645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400012473656e645f6974656d100124543a3a4974656d4964000148726563656976655f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130726563656976655f6974656d100124543a3a4974656d49640001347769746e6573735f7072696365850201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e00243054436c61696d20616e2061746f6d696320737761702e390154686973206d6574686f6420657865637574657320612070656e64696e6720737761702c2074686174207761732063726561746564206279206120636f756e74657270617274206265666f72652e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00ec2d206073656e645f636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652073656e742e8c2d206073656e645f6974656d603a20546865206974656d20746f2062652073656e742e09012d2060726563656976655f636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652072656365697665642ea82d2060726563656976655f6974656d603a20546865206974656d20746f2062652072656365697665642ee42d20607769746e6573735f7072696365603a20412070726963652074686174207761732070726576696f75736c7920616772656564206f6e2e007c456d697473206053776170436c61696d656460206f6e20737563636573732e3c6d696e745f7072655f7369676e65640c01246d696e745f6461746125050168426f783c5072655369676e65644d696e744f663c542c20493e3e0001247369676e617475726529050150543a3a4f6666636861696e5369676e61747572650001187369676e6572000130543a3a4163636f756e744964002534c84d696e7420616e206974656d2062792070726f766964696e6720746865207072652d7369676e656420617070726f76616c2e00584f726967696e206d757374206265205369676e65642e005d012d20606d696e745f64617461603a20546865207072652d7369676e656420617070726f76616c207468617420636f6e7369737473206f662074686520696e666f726d6174696f6e2061626f757420746865206974656d2c51012020697473206d657461646174612c20617474726962757465732c2077686f2063616e206d696e742069742028604e6f6e656020666f7220616e796f6e652920616e6420756e74696c207768617420626c6f636b2420206e756d6265722ec82d20607369676e6174757265603a20546865207369676e6174757265206f662074686520606461746160206f626a6563742e39012d20607369676e6572603a2054686520606461746160206f626a6563742773207369676e65722e2053686f756c6420626520616e20497373756572206f662074686520636f6c6c656374696f6e2e0068456d697473206049737375656460206f6e20737563636573732ed4456d69747320604174747269627574655365746020696620746865206174747269627574657320776572652070726f76696465642ed8456d69747320604974656d4d657461646174615365746020696620746865206d6574616461746120776173206e6f7420656d7074792e647365745f617474726962757465735f7072655f7369676e65640c0110646174614105016c5072655369676e6564417474726962757465734f663c542c20493e0001247369676e617475726529050150543a3a4f6666636861696e5369676e61747572650001187369676e6572000130543a3a4163636f756e7449640026340101536574206174747269627574657320666f7220616e206974656d2062792070726f766964696e6720746865207072652d7369676e656420617070726f76616c2e00f84f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f66207468652060646174612e6974656d602e0049012d206064617461603a20546865207072652d7369676e656420617070726f76616c207468617420636f6e7369737473206f662074686520696e666f726d6174696f6e2061626f757420746865206974656d2ccc20206174747269627574657320746f2075706461746520616e6420756e74696c207768617420626c6f636b206e756d6265722ec82d20607369676e6174757265603a20546865207369676e6174757265206f662074686520606461746160206f626a6563742e51012d20607369676e6572603a2054686520606461746160206f626a6563742773207369676e65722e2053686f756c6420626520616e2041646d696e206f662074686520636f6c6c656374696f6e20666f722074686578202060436f6c6c656374696f6e4f776e657260206e616d6573706163652e00c4456d69747320604174747269627574655365746020666f7220656163682070726f7669646564206174747269627574652e1901456d69747320604974656d41747472696275746573417070726f76616c4164646564602069662074686520617070726f76616c207761736e277420736574206265666f72652ea8456d69747320605072655369676e65644174747269627574657353657460206f6e20737563636573732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee1040c2c70616c6c65745f6e66747314747970657340436f6c6c656374696f6e436f6e6669670c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110000c012073657474696e6773e5040148436f6c6c656374696f6e53657474696e67730001286d61785f737570706c790d02012c4f7074696f6e3c7533323e0001346d696e745f73657474696e6773ed0401b84d696e7453657474696e67733c50726963652c20426c6f636b4e756d6265722c20436f6c6c656374696f6e49643e0000e5040c2c70616c6c65745f6e66747314747970657320426974466c61677304045401e904000400300144436f6c6c656374696f6e53657474696e670000e9040c2c70616c6c65745f6e66747314747970657344436f6c6c656374696f6e53657474696e67000114445472616e7366657261626c654974656d7300010040556e6c6f636b65644d6574616461746100020048556e6c6f636b65644174747269627574657300040044556e6c6f636b65644d6178537570706c790008003c4465706f736974526571756972656400100000ed040c2c70616c6c65745f6e667473147479706573304d696e7453657474696e67730c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110001401246d696e745f74797065f10401584d696e74547970653c436f6c6c656374696f6e49643e0001147072696365f50401344f7074696f6e3c50726963653e00012c73746172745f626c6f636b0d02014c4f7074696f6e3c426c6f636b4e756d6265723e000124656e645f626c6f636b0d02014c4f7074696f6e3c426c6f636b4e756d6265723e00015464656661756c745f6974656d5f73657474696e6773f90401304974656d53657474696e67730000f1040c2c70616c6c65745f6e667473147479706573204d696e74547970650430436f6c6c656374696f6e49640110010c18497373756572000000185075626c696300010020486f6c6465724f660400100130436f6c6c656374696f6e496400020000f50404184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000f9040c2c70616c6c65745f6e66747314747970657320426974466c61677304045401fd0400040030012c4974656d53657474696e670000fd040c2c70616c6c65745f6e6674731474797065732c4974656d53657474696e6700010c305472616e7366657261626c6500010040556e6c6f636b65644d6574616461746100020048556e6c6f636b6564417474726962757465730004000001050c2c70616c6c65745f6e6674731474797065733844657374726f795769746e65737300000c01386974656d5f6d6574616461746173cc010c7533320001306974656d5f636f6e66696773cc010c75333200012861747472696275746573cc010c7533320000050504184f7074696f6e0404540109050108104e6f6e6500000010536f6d6504000905000001000009050c2c70616c6c65745f6e6674731474797065732c4d696e745769746e65737308184974656d496401101c42616c616e63650118000801286f776e65645f6974656d0d0201384f7074696f6e3c4974656d49643e0001286d696e745f7072696365f504013c4f7074696f6e3c42616c616e63653e00000d050c2c70616c6c65745f6e667473147479706573284974656d436f6e666967000004012073657474696e6773f90401304974656d53657474696e67730000110504184f7074696f6e04045401dd030108104e6f6e6500000010536f6d650400dd03000001000015050c2c70616c6c65745f6e6674731474797065737c43616e63656c41747472696275746573417070726f76616c5769746e65737300000401486163636f756e745f6174747269627574657310010c753332000019050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011d05045300000400210501185665633c543e00001d050c2c70616c6c65745f6e6674731474797065731c4974656d5469701030436f6c6c656374696f6e49640110184974656d49640110244163636f756e744964010018416d6f756e74011800100128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d496400012072656365697665720001244163636f756e744964000118616d6f756e74180118416d6f756e74000021050000021d050025050c2c70616c6c65745f6e667473147479706573345072655369676e65644d696e741430436f6c6c656374696f6e49640110184974656d49640110244163636f756e744964010020446561646c696e6501101c42616c616e63650118001c0128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d496400012861747472696275746573b102015c5665633c285665633c75383e2c205665633c75383e293e0001206d6574616461746138011c5665633c75383e0001306f6e6c795f6163636f756e749c01444f7074696f6e3c4163636f756e7449643e000120646561646c696e65100120446561646c696e650001286d696e745f7072696365f504013c4f7074696f6e3c42616c616e63653e00002905082873705f72756e74696d65384d756c74695369676e617475726500010c1c4564323535313904002d050148656432353531393a3a5369676e61747572650000001c53723235353139040035050148737232353531393a3a5369676e617475726500010014456364736104003905014065636473613a3a5369676e6174757265000200002d050c1c73705f636f72651c65643235353139245369676e617475726500000400310501205b75383b2036345d0000310500000340000000080035050c1c73705f636f72651c73723235353139245369676e617475726500000400310501205b75383b2036345d000039050c1c73705f636f7265146563647361245369676e6174757265000004003d05017c5b75383b205349474e41545552455f53455249414c495a45445f53495a455d00003d0500000341000000080041050c2c70616c6c65745f6e6674731474797065734c5072655369676e6564417474726962757465731030436f6c6c656374696f6e49640110184974656d49640110244163636f756e744964010020446561646c696e65011000140128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d496400012861747472696275746573b102015c5665633c285665633c75383e2c205665633c75383e293e0001246e616d657370616365810201744174747269627574654e616d6573706163653c4163636f756e7449643e000120646561646c696e65100120446561646c696e65000045050c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000048053656e646572206d75737420626520746865205375646f206163636f756e742e04684572726f7220666f7220746865205375646f2070616c6c65742e49050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400a401185665633c543e00004d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015105045300000400550501185665633c543e000051050c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65743443616e646964617465496e666f08244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650000550500000251050059050c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144572726f7204045400014444546f6f4d616e7943616e646964617465730000048c5468652070616c6c65742068617320746f6f206d616e792063616e646964617465732e5c546f6f466577456c696769626c65436f6c6c61746f7273000104ac4c656176696e6720776f756c6420726573756c7420696e20746f6f206665772063616e646964617465732e40416c726561647943616e6469646174650002047c4163636f756e7420697320616c726561647920612063616e6469646174652e304e6f7443616e6469646174650003046c4163636f756e74206973206e6f7420612063616e6469646174652e50546f6f4d616e79496e76756c6e657261626c65730004048454686572652061726520746f6f206d616e7920496e76756c6e657261626c65732e4c416c7265616479496e76756c6e657261626c650005048c4163636f756e7420697320616c726561647920616e20496e76756c6e657261626c652e3c4e6f74496e76756c6e657261626c650006047c4163636f756e74206973206e6f7420616e20496e76756c6e657261626c652e5c4e6f4173736f63696174656456616c696461746f7249640007049c4163636f756e7420686173206e6f206173736f6369617465642076616c696461746f722049442e5856616c696461746f724e6f74526567697374657265640008048c56616c696461746f72204944206973206e6f742079657420726567697374657265642e6c496e73657274546f43616e6469646174654c6973744661696c65640009049c436f756c64206e6f7420696e7365727420696e207468652063616e646964617465206c6973742e7452656d6f766546726f6d43616e6469646174654c6973744661696c6564000a04a4436f756c64206e6f742072656d6f76652066726f6d207468652063616e646964617465206c6973742e344465706f736974546f6f4c6f77000b04f44e6577206465706f73697420616d6f756e7420776f756c642062652062656c6f7720746865206d696e696d756d2063616e64696461637920626f6e642e6455706461746543616e6469646174654c6973744661696c6564000c0490436f756c64206e6f7420757064617465207468652063616e646964617465206c6973742e40496e73756666696369656e74426f6e64000d0429014465706f73697420616d6f756e7420697320746f6f206c6f7720746f2074616b652074686520746172676574277320736c6f7420696e207468652063616e646964617465206c6973742e5054617267657449734e6f7443616e646964617465000e042d0154686520746172676574206163636f756e7420746f206265207265706c6163656420696e207468652063616e646964617465206c697374206973206e6f7420612063616e6469646174652e404964656e746963616c4465706f736974000f040d015468652075706461746564206465706f73697420616d6f756e7420697320657175616c20746f2074686520616d6f756e7420616c72656164792072657365727665642e40496e76616c6964556e726573657276650010043d0143616e6e6f74206c6f7765722063616e64696461637920626f6e64207768696c65206f6363757079696e6720612066757475726520636f6c6c61746f7220736c6f7420696e20746865206c6973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e5d05000002610500610500000408000104006505000004086905380069050c1c73705f636f72651863727970746f244b65795479706549640000040048011c5b75383b20345d00006d050c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e71050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010504045300000400750501185665633c543e000075050000020504007905084873705f636f6e73656e7375735f736c6f747310536c6f740000040030010c75363400007d05000004087905100081050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401e9010453000004008505012c42547265655365743c543e000085050420425472656553657404045401e90100040089050000008905000002e901008d050000029105009105086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74e90101185061726149640001147374617465950501344f7574626f756e6453746174650001347369676e616c735f6578697374200110626f6f6c00012c66697273745f696e646578e502010c7531360001286c6173745f696e646578e502010c75313600009505086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000990500000408e901e502009d05086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e6669674461746100000c014473757370656e645f7468726573686f6c6410010c75333200013864726f705f7468726573686f6c6410010c753332000140726573756d655f7468726573686f6c6410010c7533320000a1050c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f7204045400010c384261645175657565436f6e666967000004110153657474696e672074686520717565756520636f6e666967206661696c65642073696e6365206f6e65206f66206974732076616c7565732077617320696e76616c69642e40416c726561647953757370656e6465640001048c54686520657865637574696f6e20697320616c72656164792073757370656e6465642e38416c7265616479526573756d65640002048454686520657865637574696f6e20697320616c726561647920726573756d65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea5050c2870616c6c65745f78636d1870616c6c65742c5175657279537461747573042c426c6f636b4e756d6265720110010c1c50656e64696e67100124726573706f6e646572d901014456657273696f6e65644c6f636174696f6e00014c6d617962655f6d617463685f71756572696572a90501644f7074696f6e3c56657273696f6e65644c6f636174696f6e3e0001306d617962655f6e6f74696679ad0501404f7074696f6e3c2875382c207538293e00011c74696d656f757410012c426c6f636b4e756d6265720000003c56657273696f6e4e6f7469666965720801186f726967696ed901014456657273696f6e65644c6f636174696f6e00012469735f616374697665200110626f6f6c000100145265616479080120726573706f6e7365b505014456657273696f6e6564526573706f6e7365000108617410012c426c6f636b4e756d62657200020000a90504184f7074696f6e04045401d9010108104e6f6e6500000010536f6d650400d9010000010000ad0504184f7074696f6e04045401b1050108104e6f6e6500000010536f6d650400b1050000010000b10500000408080800b505080c78636d4456657273696f6e6564526573706f6e736500010c08563204002504013076323a3a526573706f6e736500020008563304005104013076333a3a526573706f6e736500030008563404003101013076343a3a526573706f6e736500040000b9050000040810d90100bd050000040c30281000c1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c505045300000400c90501185665633c543e0000c50500000408d9011000c905000002c50500cd050c2870616c6c65745f78636d1870616c6c65745456657273696f6e4d6967726174696f6e53746167650001105c4d696772617465537570706f7274656456657273696f6e0000005c4d69677261746556657273696f6e4e6f74696669657273000100504e6f7469667943757272656e74546172676574730400d105013c4f7074696f6e3c5665633c75383e3e000200684d696772617465416e644e6f746966794f6c645461726765747300030000d10504184f7074696f6e04045401380108104e6f6e6500000010536f6d650400380000010000d5050000040c1000d90500d905080c78636d4056657273696f6e6564417373657449640001080856330400b901012c76333a3a4173736574496400030008563404001d01012c76343a3a4173736574496400040000dd050c2870616c6c65745f78636d1870616c6c65746852656d6f74654c6f636b656446756e6769626c655265636f72640848436f6e73756d65724964656e7469666965720198304d6178436f6e73756d6572730000100118616d6f756e74180110753132380001146f776e6572d901014456657273696f6e65644c6f636174696f6e0001186c6f636b6572d901014456657273696f6e65644c6f636174696f6e000124636f6e73756d657273e10501d0426f756e6465645665633c28436f6e73756d65724964656e7469666965722c2075313238292c204d6178436f6e73756d6572733e0000e1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e505045300000400e90501185665633c543e0000e50500000408981800e905000002e50500ed050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f105045300000400f50501185665633c543e0000f1050000040818d90100f505000002f10500f9050c2870616c6c65745f78636d1870616c6c6574144572726f720404540001642c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108410154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652ec8506572686170732061206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404dc5468652064657374696e6174696f6e20604c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e5843616e6e6f74436865636b4f757454656c65706f7274000d042901436f756c64206e6f7420636865636b2d6f7574207468652061737365747320666f722074656c65706f72746174696f6e20746f207468652064657374696e6174696f6e20636861696e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304490154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c20636f6e73756d657273206f6620746865206c6f636b2e5c496e76616c696441737365744e6f74436f6e63726574650014046c496e76616c6964206e6f6e2d636f6e63726574652061737365742e68496e76616c69644173736574556e6b6e6f776e52657365727665001504f0496e76616c69642061737365742c207265736572766520636861696e20636f756c64206e6f742062652064657465726d696e656420666f722069742e78496e76616c69644173736574556e737570706f72746564526573657276650016044501496e76616c69642061737365742c20646f206e6f7420737570706f72742072656d6f7465206173736574207265736572766573207769746820646966666572656e7420666565732072657365727665732e3c546f6f4d616e7952657365727665730017044901546f6f206d616e7920617373657473207769746820646966666572656e742072657365727665206c6f636174696f6e732068617665206265656e20617474656d7074656420666f72207472616e736665722e604c6f63616c457865637574696f6e496e636f6d706c6574650018047c4c6f63616c2058434d20657865637574696f6e20696e636f6d706c6574652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd05085070616c6c65745f6d6573736167655f717565756524426f6f6b537461746504344d6573736167654f726967696e01e50100180114626567696e10012450616765496e64657800010c656e6410012450616765496e646578000114636f756e7410012450616765496e64657800014072656164795f6e65696768626f757273010601844f7074696f6e3c4e65696768626f7572733c4d6573736167654f726967696e3e3e0001346d6573736167655f636f756e7430010c75363400011073697a6530010c7536340000010604184f7074696f6e0404540105060108104e6f6e6500000010536f6d650400050600000100000506085070616c6c65745f6d6573736167655f7175657565284e65696768626f75727304344d6573736167654f726967696e01e5010008011070726576e50101344d6573736167654f726967696e0001106e657874e50101344d6573736167654f726967696e0000090600000408e50110000d06085070616c6c65745f6d6573736167655f71756575651050616765081053697a650110204865617053697a65000018012472656d61696e696e6710011053697a6500013872656d61696e696e675f73697a6510011053697a6500012c66697273745f696e64657810011053697a65000114666972737410011053697a650001106c61737410011053697a65000110686561701106019c426f756e6465645665633c75382c20496e746f5533323c4865617053697a652c2053697a653e3e000011060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000015060c5070616c6c65745f6d6573736167655f71756575651870616c6c6574144572726f720404540001242c4e6f745265617061626c65000008490150616765206973206e6f74207265617061626c65206265636175736520697420686173206974656d732072656d61696e696e6720746f2062652070726f63657373656420616e64206973206e6f74206f6c641c656e6f7567682e184e6f50616765000104845061676520746f2062652072656170656420646f6573206e6f742065786973742e244e6f4d657373616765000204a8546865207265666572656e636564206d65737361676520636f756c64206e6f7420626520666f756e642e40416c726561647950726f6365737365640003040101546865206d6573736167652077617320616c72656164792070726f63657373656420616e642063616e6e6f742062652070726f63657373656420616761696e2e18517565756564000404ac546865206d6573736167652069732071756575656420666f722066757475726520657865637574696f6e2e48496e73756666696369656e74576569676874000504190154686572652069732074656d706f726172696c79206e6f7420656e6f7567682077656967687420746f20636f6e74696e756520736572766963696e67206d657373616765732e6054656d706f726172696c79556e70726f6365737361626c65000610a854686973206d6573736167652069732074656d706f726172696c7920756e70726f6365737361626c652e00590153756368206572726f7273206172652065787065637465642c20627574206e6f742067756172616e746565642c20746f207265736f6c7665207468656d73656c766573206576656e7475616c6c79207468726f756768247265747279696e672e2c517565756550617573656400070cec5468652071756575652069732070617573656420616e64206e6f206d6573736167652063616e2062652065786563757465642066726f6d2069742e001d01546869732063616e206368616e676520617420616e792074696d6520616e64206d6179207265736f6c766520696e20746865206675747572652062792072652d747279696e672e4c526563757273697665446973616c6c6f7765640008043101416e6f746865722063616c6c20697320696e2070726f677265737320616e64206e6565647320746f2066696e697368206265666f726520746869732063616c6c2063616e2068617070656e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1906000004081d0610001d060c6070616c6c65745f73746f726167655f70726f7669646572731474797065733c53746f7261676550726f7669646572040454000108544261636b757053746f7261676550726f76696465720400210601604261636b757053746f7261676550726f76696465723c543e0000004c4d61696e53746f7261676550726f76696465720400250601584d61696e53746f7261676550726f76696465723c543e0001000021060c6070616c6c65745f73746f726167655f70726f766964657273147479706573544261636b757053746f7261676550726f76696465720404540000200120636170616369747930014853746f7261676544617461556e69743c543e00013463617061636974795f7573656430014853746f7261676544617461556e69743c543e0001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e000110726f6f743401544d65726b6c655061747269636961526f6f743c543e0001506c6173745f63617061636974795f6368616e6765100144426c6f636b4e756d626572466f723c543e0001346f776e65725f6163636f756e74000130543a3a4163636f756e74496400013c7061796d656e745f6163636f756e74000130543a3a4163636f756e74496400014472657075746174696f6e5f77656967687410015c52657075746174696f6e576569676874547970653c543e000025060c6070616c6c65745f73746f726167655f70726f7669646572731474797065734c4d61696e53746f7261676550726f7669646572040454000020011c6275636b657473290601284275636b6574733c543e000120636170616369747930014853746f7261676544617461556e69743c543e00013463617061636974795f7573656430014853746f7261676544617461556e69743c543e0001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e00012876616c75655f70726f700102014c56616c756550726f706f736974696f6e3c543e0001506c6173745f63617061636974795f6368616e6765100144426c6f636b4e756d626572466f723c543e0001346f776e65725f6163636f756e74000130543a3a4163636f756e74496400013c7061796d656e745f6163636f756e74000130543a3a4163636f756e744964000029060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012d06045300000400310601185665633c543e00002d060c6070616c6c65745f73746f726167655f70726f766964657273147479706573184275636b65740404540000180110726f6f743401544d65726b6c655061747269636961526f6f743c543e00011c757365725f6964000130543a3a4163636f756e7449640001186d73705f69643401604d61696e53746f7261676550726f766964657249643c543e00011c70726976617465200110626f6f6c000150726561645f6163636573735f67726f75705f69640d0201704f7074696f6e3c543a3a5265616441636365737347726f757049643e00011073697a6530014853746f7261676544617461556e69743c543e000031060000022d060035060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400190201185665633c543e000039060c6070616c6c65745f73746f726167655f70726f7669646572731870616c6c6574144572726f7204045400016c44416c72656164795265676973746572656400000471014572726f72207468726f776e207768656e2061207573657220747269657320746f207369676e20757020617320612053502062757420697320616c726561647920726567697374657265642061732061204d5350206f72204253502e485369676e55704e6f7452657175657374656400010459014572726f72207468726f776e207768656e2061207573657220747269657320746f20636f6e6669726d2061207369676e207570207468617420776173206e6f74207265717565737465642070726576696f75736c792e505369676e55705265717565737450656e64696e670002048d014572726f72207468726f776e207768656e2061207573657220747269657320746f207265717565737420746f207369676e207570207768656e20697420616c7265616479206861732061207369676e20757020726571756573742070656e64696e672e384e6f4d756c7469416464726573730003040d014572726f72207468726f776e207768656e2061207573657220747269657320746f207369676e20757020776974686f757420616e79206d756c7469616464726573732e4c496e76616c69644d756c74694164647265737300040491014572726f72207468726f776e207768656e2061207573657220747269657320746f207369676e20757020617320612053502062757420616e79206f66207468652070726f7669646564206d756c746961646472657373657320697320696e76616c69642e3453746f72616765546f6f4c6f7700050401024572726f72207468726f776e207768656e2061207573657220747269657320746f207369676e207570206f72206368616e67652069747320636170616369747920746f2073746f7265206c6573732073746f72616765207468616e20746865206d696e696d756d207265717569726564206279207468652072756e74696d652e404e6f74456e6f75676842616c616e636500060431024572726f72207468726f776e207768656e2061207573657220646f6573206e6f74206861766520656e6f7567682062616c616e636520746f2070617920746865206465706f736974207468617420697420776f756c6420696e637572206279207369676e696e672075702061732061205350206f72206368616e67696e67206974732063617061636974792e4443616e6e6f74486f6c644465706f736974000704f9014572726f72207468726f776e207768656e207468652072756e74696d652063616e6e6f7420686f6c6420746865207265717569726564206465706f7369742066726f6d20746865206163636f756e7420746f2072656769737465722069742061732061205350206f72206368616e6765206974732063617061636974792e4453746f726167655374696c6c496e55736500080439014572726f72207468726f776e207768656e2061207573657220747269657320746f207369676e206f6666206173206120535020627574207374696c6c2068617320757365642073746f726167652e5452616e646f6d6e6573734e6f7456616c69645965740009048d014572726f72207468726f776e207768656e2061207573657220747269657320746f20636f6e6669726d2061207369676e20757020627574207468652072616e646f6d6e65737320697320746f6f20667265736820746f2062652075736564207965742e505369676e55705265717565737445787069726564000a048d014572726f72207468726f776e207768656e2061207573657220747269657320746f20636f6e6669726d2061207369676e2075702062757420746f6f206d7563682074696d6520686173207061737365642073696e63652074686520726571756573742e784e657743617061636974794c6573735468616e5573656453746f72616765000b0451014572726f72207468726f776e207768656e2061207573657220747269657320746f206368616e67652069747320636170616369747920746f206c657373207468616e2069747320757365642073746f726167652e804e65774361706163697479457175616c7343757272656e744361706163697479000c045d014572726f72207468726f776e207768656e2061207573657220747269657320746f206368616e67652069747320636170616369747920746f207468652073616d652076616c756520697420616c7265616479206861732e544e6577436170616369747943616e7442655a65726f000d04c9014572726f72207468726f776e207768656e2061207573657220747269657320746f206368616e67652069747320636170616369747920746f207a65726f20287468657265206172652073706563696669632065787472696e7369637320746f207369676e206f66662061732061205350292e4c4e6f74456e6f75676854696d65506173736564000e04d9014572726f72207468726f776e207768656e206120535020747269657320746f206368616e6765206974732063617061636974792062757420697420686173206e6f74206265656e20656e6f7567682074696d652073696e636520746865206c6173742074696d65206974206368616e6765642069742e944e65775573656443617061636974794578636565647353746f726167654361706163697479000f04c5014572726f72207468726f776e207768656e206120535020747269657320746f206368616e6765206974732063617061636974792062757420746865206e6577206361706163697479206973206e6f7420656e6f75676820746f2073746f72652074686520757365642073746f726167652e344e6f745265676973746572656400100465014572726f72207468726f776e207768656e2061207573657220747269657320746f20696e746572616374206173206120535020627574206973206e6f7420726567697374657265642061732061204d5350206f72204253502e204e6f55736572496400110431014572726f72207468726f776e207768656e20747279696e6720746f20676574206120726f6f742066726f6d2061204d535020776974686f75742070617373696e67206120557365722049442e284e6f4275636b6574496400120439014572726f72207468726f776e207768656e20747279696e6720746f20676574206120726f6f742066726f6d2061204d535020776974686f75742070617373696e672061204275636b65742049442e6c537052656769737465726564427574446174614e6f74466f756e64001304d1014572726f72207468726f776e207768656e206120757365722068617320612053502049442061737369676e656420746f2069742062757420746865205350206461746120646f6573206e6f7420657869737420696e2073746f726167652028496e636f6e73697374656e6379206572726f72292e384275636b65744e6f74466f756e64001404d84572726f72207468726f776e207768656e2061206275636b6574204944206973206e6f7420666f756e6420696e2073746f726167652e4c4275636b6574416c7265616479457869737473001504e04572726f72207468726f776e207768656e2061206275636b657420494420616c72656164792065786973747320696e2073746f726167652e5c417070656e644275636b6574546f4d73704661696c656400160445014572726f72207468726f776e207768656e2061206275636b657420494420636f756c64206e6f7420626520616464656420746f20746865206c697374206f66206275636b657473206f662061204d53502e5050726f76696465724e6f74536c61736861626c650017043d014572726f72207468726f776e207768656e20616e20617474656d707420776173206d61646520746f20736c61736820616e20756e736c61736861626c652053746f726167652050726f76696465722e68496e76616c6964456e636f64656446696c654d6574616461746100180475014572726f72207468726f776e207768656e206661696c696e6720746f206465636f646520746865206d657461646174612066726f6d206120726563656976656420747269652076616c75652074686174207761732072656d6f7665642e5c496e76616c6964456e636f6465644163636f756e74496400190451014572726f72207468726f776e207768656e206661696c696e6720746f206465636f646520746865206f776e6572204163636f756e742049442066726f6d20746865207265636569766564206d657461646174612e545061796d656e7453747265616d4e6f74466f756e64001a0421014572726f72207468726f776e207768656e20747279696e6720746f207570646174652061207061796d656e742073747265616d207468617420646f6573206e6f742065786973742e044901546865206572726f727320746861742063616e206265207468726f776e20627920746869732070616c6c657420746f20696e666f726d2075736572732061626f757420776861742077656e742077726f6e673d060c4870616c6c65745f66696c655f73797374656d1474797065735853746f72616765526571756573744d6574616461746104045400003001307265717565737465645f6174100144426c6f636b4e756d626572466f723c543e0001146f776e6572000130543a3a4163636f756e7449640001246275636b65745f69643401384275636b65744964466f723c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e00012c66696e6765727072696e7434013846696e6765727072696e743c543e00011073697a6530013853746f72616765446174613c543e00010c6d7370410601804f7074696f6e3c2850726f76696465724964466f723c543e2c20626f6f6c293e000134757365725f706565725f696473f5010128506565724964733c543e00013c646174615f7365727665725f737073490601e4426f756e6465645665633c50726f76696465724964466f723c543e2c204d61784273707350657253746f72616765526571756573743c543e3e000134627370735f72657175697265641001605265706c69636174696f6e546172676574547970653c543e000138627370735f636f6e6669726d65641001605265706c69636174696f6e546172676574547970653c543e000140627370735f766f6c756e7465657265641001605265706c69636174696f6e546172676574547970653c543e0000410604184f7074696f6e0404540145060108104e6f6e6500000010536f6d6504004506000001000045060000040834200049060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400190201185665633c543e00004d060000040834340051060c4870616c6c65745f66696c655f73797374656d1474797065736853746f7261676552657175657374427370734d657461646174610404540000040124636f6e6669726d6564200110626f6f6c000055060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400190201185665633c543e000059060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015d06045300000400610601185665633c543e00005d060000040800340061060000025d060065060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d06045300000400690601185665633c543e000069060000024d06006d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d06045300000400690601185665633c543e000071060000040810300075060c4870616c6c65745f66696c655f73797374656d147479706573644d6f76654275636b6574526571756573744d657461646174610404540000040124726571756573746572000130543a3a4163636f756e744964000079060c4870616c6c65745f66696c655f73797374656d1870616c6c6574144572726f720404540001e87c53746f7261676552657175657374416c726561647952656769737465726564000004d853746f72616765207265717565737420616c7265616479207265676973746572656420666f722074686520676976656e2066696c652e5853746f72616765526571756573744e6f74466f756e64000104c853746f726167652072657175657374206e6f74207265676973746572656420666f722074686520676976656e2066696c652e6053746f72616765526571756573744e6f745265766f6b656400020415014f7065726174696f6e206e6f7420616c6c6f776564207768696c65207468652073746f726167652072657175657374206973206e6f74206265696e67207265766f6b65642e5053746f7261676552657175657374457869737473000304dc4f7065726174696f6e206e6f7420616c6c6f776564207768696c65207468652073746f726167652072657175657374206578697374732e745265706c69636174696f6e54617267657443616e6e6f7442655a65726f000404885265706c69636174696f6e207461726765742063616e6e6f74206265207a65726f2e644273707352657175697265644578636565647354617267657400050411014253507320726571756972656420666f722073746f7261676520726571756573742063616e6e6f742065786365656420746865206d6178696d756d20616c6c6f7765642e1c4e6f7441427370000604544163636f756e74206973206e6f742061204253502e1c4e6f74414d7370000704544163636f756e74206973206e6f742061204d53502e184e6f74415370000804504163636f756e74206973206e6f7420612053502e444273704e6f74566f6c756e746565726564000904c042535020686173206e6f7420766f6c756e74656572656420746f2073746f72652074686520676976656e2066696c652e3c4273704e6f74436f6e6669726d6564000a04b442535020686173206e6f7420636f6e6669726d65642073746f72696e672074686520676976656e2066696c652e4c427370416c7265616479436f6e6669726d6564000b04c44253502068617320616c726561647920636f6e6669726d65642073746f72696e672074686520676976656e2066696c652e8c53746f726167655265717565737442737073526571756972656446756c66696c6c6564000c04f44e756d626572206f66204253507320726571756972656420666f722073746f72616765207265717565737420686173206265656e20726561636865642e54427370416c7265616479566f6c756e746565726564000d04c042535020616c726561647920766f6c756e74656572656420746f2073746f72652074686520676976656e2066696c652e74496e73756666696369656e74417661696c61626c654361706163697479000e04ec535020646f6573206e6f74206861766520656e6f7567682073746f7261676520636170616369747920746f2073746f7265207468652066696c652ea0556e65787065637465644e756d6265724f6652656d6f766564566f6c756e74656572656442737073000f0485014e756d626572206f662072656d6f766564204253507320766f6c756e7465657265642066726f6d2073746f7261676520726571756573742070726566697820646964206e6f74206d6174636820746865206578706563746564206e756d6265722e9053746f7261676552657175657374457870697265644e6f536c6f74417661696c61626c6500100431014e6f20736c6f7420617661696c61626c6520666f756e6420696e20626c6f636b7320746f20696e736572742073746f7261676520726571756573742065787069726174696f6e2074696d652e6c53746f72616765526571756573744e6f74417574686f72697a6564001104b44e6f7420617574686f72697a656420746f2064656c657465207468652073746f7261676520726571756573742e544d6178426c6f636b4e756d6265725265616368656400120859014572726f72206372656174656420696e20323032342e20496620796f752073656520746869732c20796f75206172652077656c6c206265796f6e64207468652073696e67756c617269747920616e642073686f756c648070726f6261626c792073746f70207573696e6720746869732070616c6c65742e444661696c6564546f456e636f6465427370001304844661696c656420746f20656e636f64652042535020696420617320736c6963652e644661696c6564546f456e636f646546696e6765727072696e74001404984661696c656420746f20656e636f64652066696e6765727072696e7420617320736c6963652e5c4661696c6564546f4465636f64655468726573686f6c640015046c4661696c656420746f206465636f6465207468726573686f6c642e3841626f76655468726573686f6c640016049042535020646964206e6f742073756363656564207468726573686f6c6420636865636b2e684661696c6564546f436f6e76657274426c6f636b4e756d626572001704b04661696c656420746f20636f6e7665727420626c6f636b206e756d62657220746f207468726573686f6c642e605468726573686f6c6441726974686d657469634572726f72001804a841726974686d65746963206572726f7220696e207468726573686f6c642063616c63756c6174696f6e2e504661696c656454797065436f6e76657273696f6e001904904661696c656420746f20636f6e7665727420746f207072696d697469766520747970652e344469766964656442795a65726f001a043044697669646564206279203068496d706f737369626c654661696c6564546f47657456616c7565001b04c44661696c656420746f206765742076616c7565207768656e206a75737420636865636b656420697420657869737465642e484275636b657449734e6f7450726976617465001c041d014275636b6574206973206e6f7420707269766174652e2043616c6c20607570646174655f6275636b65745f707269766163796020746f206d616b6520697420707269766174652e384275636b65744e6f74466f756e64001d04544275636b657420646f6573206e6f74206578697374384e6f744275636b65744f776e6572001e0411014f7065726174696f6e206661696c6564206265636175736520746865206163636f756e74206973206e6f7420746865206f776e6572206f6620746865206275636b65742e5050726f7669646572526f6f744e6f74466f756e64001f047c526f6f74206f66207468652070726f7669646572206e6f7420666f756e642e6445787065637465644e6f6e496e636c7573696f6e50726f6f6600200415014661696c656420746f207665726966792070726f6f663a20726571756972656420746f2070726f7669646520612070726f6f66206f66206e6f6e2d696e636c7573696f6e2e584578706563746564496e636c7573696f6e50726f6f6600210405014661696c656420746f207665726966792070726f6f663a20726571756972656420746f2070726f7669646520612070726f6f66206f6620696e636c7573696f6e2e58496e76616c696446696c654b65794d65746164617461002204c84d6574616461746120646f6573206e6f7420636f72726573706f6e6420746f2065787065637465642066696c65206b65792e5c5468726573686f6c6442656c6f774173796d70746f7465002304d0425350732061737369676e6d656e74207468726573686f6c642063616e6e6f742062652062656c6f77206173796d70746f74652e304e6f7446696c654f776e6572002404d4556e617574686f72697a6564206f7065726174696f6e2c207369676e657220646f6573206e6f74206f776e207468652066696c652e7446696c654b6579416c726561647950656e64696e6744656c6574696f6e0025048846696c65206b657920616c72656164792070656e64696e672064656c6574696f6e2e944d61785573657250656e64696e6744656c6574696f6e526571756573747352656163686564002604d44d6178206e756d626572206f6620757365722070656e64696e672064656c6574696f6e20726571756573747320726561636865642e4c4d73704e6f7453746f72696e674275636b6574002704f8556e617574686f72697a6564206f7065726174696f6e2c207369676e6572206973206e6f7420616e204d5350206f6620746865206275636b65742069642e6446696c654b65794e6f7450656e64696e6744656c6574696f6e002804c046696c65206b6579206e6f7420666f756e6420696e2070656e64696e672064656c6574696f6e2072657175657374732e5046696c6553697a6543616e6e6f7442655a65726f0029046446696c652073697a652063616e6e6f74206265207a65726f2e6c4e6f476c6f62616c52657075746174696f6e576569676874536574002a04804e6f20676c6f62616c2072657075746174696f6e20776569676874207365742e704d6178696d756d5468726573686f6c6443616e6e6f7442655a65726f002b04844d6178696d756d207468726573686f6c642063616e6e6f74206265207a65726f2ea0426c6f636b52616e6765546f4d6178696d756d5468726573686f6c6443616e6e6f7442655a65726f002c04c0426c6f636b2072616e676520746f206d6178696d756d207468726573686f6c642063616e6e6f74206265207a65726f2e8450656e64696e6753746f7053746f72696e67526571756573744e6f74466f756e64002d049c50656e64696e672073746f702073746f72696e672072657175657374206e6f7420666f756e642e7c4d696e57616974466f7253746f7053746f72696e674e6f7452656163686564002e0479014d696e696d756d20616d6f756e74206f6620626c6f636b73206265747765656e207468652072657175657374206f70656e696e6720616e64206265696e672061626c6520746f20636f6e6669726d206974206e6f7420726561636865642e9850656e64696e6753746f7053746f72696e6752657175657374416c7265616479457869737473002f04b050656e64696e672073746f702073746f72696e67207265717565737420616c7265616479206578697374732e40557365724e6f74496e736f6c76656e74003004a9014120535020747269656420746f2073746f702073746f72696e672066696c65732066726f6d2061207573657220746861742077617320737570706f7365646c7920696e736f6c76656e742c20627574207468652075736572206973206e6f7420696e736f6c76656e742e384e6f7453656c65637465644d7370003104a101546865204d535020697320747279696e6720746f20636f6e6669726d20746f2073746f726520612066696c652066726f6d20612073746f726167652072657175657374206973206e6f7420746865206f6e652073656c656374656420746f2073746f72652069742e4c4d7370416c7265616479436f6e6669726d6564003204ad01546865204d535020697320747279696e6720746f20636f6e6669726d20746f2073746f726520612066696c652066726f6d20612073746f72616765207265717565737420746861742069742068617320616c726561647920636f6e6669726d656420746f2073746f72652e4452657175657374576974686f75744d73700033049901546865204d535020697320747279696e6720746f20636f6e6669726d20746f2073746f726520612066696c652066726f6d20612073746f726167652072657175657374207468617420646f6573206e6f7420686176652061204d53502061737369676e65642e5c4d7370416c726561647953746f72696e674275636b657400340498546865204d535020697320616c72656164792073746f72696e6720746865206275636b65742e644d6f76654275636b6574526571756573744e6f74466f756e64003504a44d6f7665206275636b65742072657175657374206e6f7420666f756e6420696e2073746f726167652e484275636b657449734265696e674d6f766564003604cc416374696f6e206e6f7420616c6c6f776564207768696c6520746865206275636b6574206973206265696e67206d6f7665642e50427370416c726561647944617461536572766572003704e442535020697320616c7265616479206120646174612073657276657220666f7220746865206d6f7665206275636b657420726571756573742e5842737044617461536572766572734578636565646564003804f4546f6f206d616e7920726567697374657265642064617461207365727665727320666f7220746865206d6f7665206275636b657420726571756573742e7c46696c654d6574616461746150726f63657373696e67517565756546756c6c003904910154686520626f756e64656420766563746f72207468617420686f6c64732066696c65206d6574616461746120746f2070726f636573732069742069732066756c6c206275742074686572652773207374696c6c206d6f726520746f2070726f636573732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d060000040810340081060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400190201185665633c543e000085060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d02045300000400590201185665633c543e000089060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401340453000004008d06012c42547265655365743c543e00008d06042042547265655365740404540134000400190200000091060c5070616c6c65745f70726f6f66735f6465616c65721870616c6c6574144572726f720404540001582c4e6f7450726f76696465720000083847656e6572616c206572726f7273c45468652070726f6f66207375626d6974746572206973206e6f74206120726567697374657265642050726f76696465722e5c4368616c6c656e67657351756575654f766572666c6f7700010c70606368616c6c656e6765602065787472696e736963206572726f72730901546865204368616c6c656e67657351756575652069732066756c6c2e204e6f206d6f7265206d616e75616c206368616c6c656e6765732063616e206265206d616465e4756e74696c20736f6d65206f6620746865206368616c6c656e67657320696e207468652071756575652061726520646973706174636865642e7c5072696f726974794368616c6c656e67657351756575654f766572666c6f770002083101546865205072696f726974794368616c6c656e67657351756575652069732066756c6c2e204e6f206d6f7265207072696f72697479206368616c6c656e6765732063616e206265206d616465e4756e74696c20736f6d65206f6620746865206368616c6c656e67657320696e207468652071756575652061726520646973706174636865642e3c4665654368617267654661696c6564000304e05468652066656520666f72207375626d697474696e672061206368616c6c656e676520636f756c64206e6f7420626520636861726765642e38456d7074794b657950726f6f66730004087c607375626d69745f70726f6f66602065787472696e736963206572726f727388546865726520617265206e6f206b65792070726f6f6673207375626d69747465642e5050726f7669646572526f6f744e6f74466f756e64000504b454686520726f6f7420666f72207468652050726f766964657220636f756c64206e6f7420626520666f756e642e205a65726f526f6f7400060ce850726f7669646572206973207375626d697474696e6720612070726f6f66207768656e207468657920686176652061207a65726f20726f6f742e390150726f7669646572732077697468207a65726f20726f6f747320617265206e6f742070726f766964696e6720616e7920736572766963652c20736f20746865792073686f756c64206e6f74206265487375626d697474696e672070726f6f66732e704e6f5265636f72644f664c6173745375626d697474656450726f6f660007142d0150726f7669646572206973207375626d697474696e6720612070726f6f6620627574207468657265206973206e6f207265636f7264206f6620746865206c617374207469636b2074686579587375626d697474656420612070726f6f6620666f722e390150726f7669646572732077686f2061726520726571756972656420746f207375626d69742070726f6f66732073686f756c6420616c7761797320686176652061207265636f7264206f662074686535016c617374207469636b2074686579207375626d697474656420612070726f6f6620666f722c206f7468657277697365206974206d65616e73207468657920686176656e277420737461727465648c70726f766964696e67207365727669636520666f7220616e792075736572207965742e5450726f76696465725374616b654e6f74466f756e64000804985468652070726f7669646572207374616b6520636f756c64206e6f7420626520666f756e642e245a65726f5374616b65000904dc50726f7669646572206973207375626d697474696e6720612070726f6f6620627574207468656972207374616b65206973207a65726f2e605374616b65436f756c644e6f744265436f6e766572746564000a081101546865207374616b65642062616c616e6365206f66207468652050726f766964657220636f756c64206e6f7420626520636f6e76657274656420746f206075313238602e5901546869732073686f756c64206e6f7420626520706f737369626c652c20617320746865206042616c616e63656020747970652073686f756c6420626520616e20756e7369676e656420696e746567657220747970652e604368616c6c656e6765735469636b4e6f7452656163686564000b04e050726f7669646572206973207375626d697474696e6720612070726f6f6620666f722061207469636b20696e20746865206675747572652e504368616c6c656e6765735469636b546f6f4f6c64000c08510150726f7669646572206973207375626d697474696e6720612070726f6f6620666f722061207469636b206265666f726520746865206c617374207469636b20746869732070616c6c6574207265676973746572733c6368616c6c656e67657320666f722e544368616c6c656e6765735469636b546f6f4c617465000d08450150726f7669646572206973207375626d697474696e6720612070726f6f6620666f722061207469636b20746f6f206c6174652c20692e652e207468617420746865206368616c6c656e676573207469636b450169732067726561746572206f7220657175616c207468616e20606368616c6c656e6765735f7469636b60202b2060543a3a4368616c6c656e67655469636b73546f6c6572616e63653a3a6765742829602e30536565644e6f74466f756e64000e0ca4546865207365656420666f7220746865207469636b20636f756c64206e6f7420626520666f756e642e5101546869732073686f756c64206e6f7420626520706f737369626c6520666f722061207469636b2077697468696e2074686520604368616c6c656e6765486973746f72794c656e677468602072616e67652c20617301017365656473206172652067656e65726174656420666f7220616c6c207469636b732c20616e642073746f7265642077697468696e20746869732072616e67652e70436865636b706f696e744368616c6c656e6765734e6f74466f756e64000f0ca4436865636b706f696e74206368616c6c656e676573206e6f7420666f756e6420696e20626c6f636b2e5d01546869732073686f756c64206f6e6c7920626520706f737369626c6520696620605469636b546f436865636b706f696e744368616c6c656e676573602069732064657265666572656e63656420666f722061207469636b7874686174206973206e6f74206120636865636b706f696e74207469636b2e74466f7265737450726f6f66566572696669636174696f6e4661696c656400100cd854686520666f726573742070726f6f66207375626d6974746564206279207468652050726f766964657220697320696e76616c69642e49015468697320636f756c642062652062656361757365207468652070726f6f66206973206e6f742076616c696420666f722074686520726f6f742c206f722062656361757365207468652070726f6f662069739c6e6f742073756666696369656e7420666f7220746865206368616c6c656e676573206d6164652e404b657950726f6f664e6f74466f756e6400110861015468657265206973206174206c65617374206f6e65206b65792070726f76656e20696e2074686520666f726573742070726f6f662c207468617420646f6573206e6f742068617665206120636f72726573706f6e64696e67286b65792070726f6f662e684b657950726f6f66566572696669636174696f6e4661696c656400120cc441206b65792070726f6f66207375626d6974746564206279207468652050726f766964657220697320696e76616c69642e6d015468697320636f756c642062652062656361757365207468652070726f6f66206973206e6f742076616c696420666f722074686520726f6f74206f662074686174206b65792c206f722062656361757365207468652070726f6f66a86973206e6f742073756666696369656e7420666f7220746865206368616c6c656e676573206d6164652e484661696c6564546f4170706c7944656c7461001304dc4661696c656420746f206170706c792064656c746120746f2074686520666f726573742070726f6f66207061727469616c20747269652e944661696c6564546f55706461746550726f766964657241667465724b657952656d6f76616c001404ec4661696c656420746f20757064617465207468652070726f76696465722061667465722061206b65792072656d6f76616c206d75746174696f6e2e6c546f6f4d616e7956616c696450726f6f665375626d6974746572730015044501546865206c696d6974206f662050726f76696465727320746861742063616e207375626d697420612070726f6f6620696e20612073696e676c65207469636b20686173206265656e20726561636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e9506000004083410009906000004083400009d060c5870616c6c65745f7061796d656e745f73747265616d73147479706573584669786564526174655061796d656e7453747265616d04045400001001107261746518013042616c616e63654f663c543e0001446c6173745f636861726765645f7469636b100144426c6f636b4e756d626572466f723c543e000130757365725f6465706f73697418013042616c616e63654f663c543e0001446f75745f6f665f66756e64735f7469636b0d0201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e0000a1060c5870616c6c65745f7061796d656e745f73747265616d731474797065736044796e616d6963526174655061796d656e7453747265616d040454000010013c616d6f756e745f70726f766964656430014c556e69747350726f7669646564466f723c543e00017470726963655f696e6465785f7768656e5f6c6173745f6368617267656418013042616c616e63654f663c543e000130757365725f6465706f73697418013042616c616e63654f663c543e0001446f75745f6f665f66756e64735f7469636b0d0201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e0000a5060c5870616c6c65745f7061796d656e745f73747265616d731474797065736850726f76696465724c61737443686172676561626c65496e666f04045400000801506c6173745f63686172676561626c655f7469636b100144426c6f636b4e756d626572466f723c543e00012c70726963655f696e64657818013042616c616e63654f663c543e0000a9060c5870616c6c65745f7061796d656e745f73747265616d731870616c6c6574144572726f72040454000140685061796d656e7453747265616d416c726561647945786973747300000469014572726f72207468726f776e207768656e20612075736572206f6620746869732070616c6c657420747269657320746f206164642061207061796d656e742073747265616d207468617420616c7265616479206578697374732e545061796d656e7453747265616d4e6f74466f756e64000104bd014572726f72207468726f776e207768656e20612075736572206f6620746869732070616c6c657420747269657320746f207570646174652c2072656d6f7665206f72206368617267652061207061796d656e742073747265616d207468617420646f6573206e6f742065786973742e304e6f744150726f766964657200020471014572726f72207468726f776e207768656e2061207573657220747269657320746f206368617267652061207061796d656e742073747265616d20616e642069742773206e6f74206120726567697374657265642050726f76696465726850726f7669646572496e636f6e73697374656e63794572726f7200030435014572726f72207468726f776e207768656e206661696c696e6720746f2067657420746865207061796d656e74206163636f756e74206f66206120726567697374657265642050726f76696465724443616e6e6f74486f6c644465706f736974000404a9014572726f72207468726f776e207768656e207468652073797374656d2063616e277420686f6c642066756e64732066726f6d2074686520557365722061732061206465706f73697420666f72206372656174696e672061206e6577207061796d656e742073747265616d5055706461746552617465546f53616d655261746500050495014572726f72207468726f776e207768656e20747279696e6720746f20757064617465207468652072617465206f6620612066697865642d72617465207061796d656e742073747265616d20746f207468652073616d652072617465206173206265666f726560557064617465416d6f756e74546f53616d65416d6f756e74000604d1014572726f72207468726f776e207768656e20747279696e6720746f207570646174652074686520616d6f756e742070726f7669646564206f6620612064796e616d69632d72617465207061796d656e742073747265616d20746f207468652073616d6520616d6f756e74206173206265666f7265385261746543616e7442655a65726f000704bd024572726f72207468726f776e207768656e20747279696e6720746f206372656174652061206e65772066697865642d72617465207061796d656e742073747265616d207769746820726174652030206f7220757064617465207468652072617465206f6620616e206578697374696e67206f6e6520746f2030202873686f756c64207573652072656d6f76655f66697865645f726174655f7061796d656e745f73747265616d20696e73746561642960416d6f756e7450726f766964656443616e7442655a65726f00080425034572726f72207468726f776e207768656e20747279696e6720746f206372656174652061206e65772064796e616d69632d72617465207061796d656e742073747265616d207769746820616d6f756e742070726f76696465642030206f72207570646174652074686520616d6f756e742070726f7669646564206f6620616e206578697374696e67206f6e6520746f2030202873686f756c64207573652072656d6f76655f64796e616d69635f726174655f7061796d656e745f73747265616d20696e737465616429904c61737443686172676564477265617465725468616e4c61737443686172676561626c6500090425024572726f72207468726f776e207768656e20746865207469636b206e756d626572206f66207768656e20746865207061796d656e742073747265616d20776173206c61737420636861726765642069732067726561746572207468616e20746865207469636b206e756d626572206f6620746865206c6173742063686172676561626c65207469636b80496e76616c69644c61737443686172676561626c65426c6f636b4e756d626572000a04bd024572726f72207468726f776e207768656e20746865206e6577206c6173742063686172676561626c65207469636b206e756d626572207468617420697320747279696e6720746f206265207365742069732067726561746572207468616e207468652063757272656e74207469636b206e756d626572206f7220736d616c6c6572207468616e207468652070726576696f7573206c6173742063686172676561626c65207469636b206e756d6265727c496e76616c69644c61737443686172676561626c655072696365496e646578000b04bd024572726f72207468726f776e207768656e20746865206e6577206c6173742063686172676561626c6520707269636520696e646578207468617420697320747279696e6720746f206265207365742069732067726561746572207468616e207468652063757272656e7420707269636520696e646578206f7220736d616c6c6572207468616e207468652070726576696f7573206c6173742063686172676561626c6520707269636520696e646578384368617267654f766572666c6f77000c046d014572726f72207468726f776e207768656e206368617267696e672061207061796d656e742073747265616d20776f756c6420726573756c7420696e20616e206f766572666c6f77206f66207468652062616c616e636520747970654055736572576974686f757446756e6473000d047d014572726f72207468726f776e207768656e20747279696e6720746f206f706572617465207768656e20746865205573657220686173206265656e20666c616767656420666f72206e6f7420686176696e6720656e6f7567682066756e64732e70557365724e6f74466c61676765644173576974686f757446756e6473000e04e9014572726f72207468726f776e207768656e20612075736572207468617420686173206e6f74206265656e20666c616767656420617320776974686f75742066756e647320747269657320746f20757365207468652065787472696e73696320746f2070617920697473206f75747374616e64696e6720646562745c436f6f6c646f776e506572696f644e6f74506173736564000f04b5014572726f72207468726f776e207768656e2061207573657220747269657320746f20636c6561722074686520666c6167206f66206265696e6720776974686f75742066756e6473206265666f72652074686520636f6f6c646f776e20706572696f642068617320706173736564044901546865206572726f727320746861742063616e206265207468726f776e20627920746869732070616c6c657420746f20696e666f726d2075736572732061626f757420776861742077656e742077726f6e67ad060c4870616c6c65745f6275636b65745f6e6674731870616c6c6574144572726f72040454000110484275636b657449734e6f74507269766174650000048d014275636b6574206973206e6f7420707269766174652e2043616c6c20607570646174655f6275636b65745f70726976616379602066726f6d207468652066696c652073797374656d2070616c6c657420746f206d616b6520697420707269766174652e384e6f744275636b65744f776e65720001049c4163636f756e74206973206e6f7420746865206f776e6572206f6620746865206275636b65742e644e6f436f72726573706f6e64696e67436f6c6c656374696f6e000204dd014e6f20636f6c6c656374696f6e20636f72726573706f6e64696e6720746f20746865206275636b65742e2043616c6c20607570646174655f6275636b65745f70726976616379602066726f6d207468652066696c652073797374656d2070616c6c657420746f206d616b6520697420707269766174652e60436f6e766572744279746573546f426f756e6465645665630003049c4661696c656420746f20636f6e7665727420627974657320746f2060426f756e64656456656360048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb1060c2c70616c6c65745f6e66747314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001801146f776e65720001244163636f756e7449640001346f776e65725f6465706f7369741801384465706f73697442616c616e63650001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001306974656d5f636f6e6669677310010c7533320001286174747269627574657310010c7533320000b5060000040c00101000b90600000408001000bd0600000408100000c1060c2c70616c6c65745f6e66747314747970657320426974466c61677304045401c506000400080138436f6c6c656374696f6e526f6c650000c5060c2c70616c6c65745f6e66747314747970657338436f6c6c656374696f6e526f6c6500010c184973737565720001001c467265657a65720002001441646d696e00040000c9060c2c70616c6c65745f6e6674731474797065732c4974656d44657461696c730c244163636f756e74496401001c4465706f73697401cd0624417070726f76616c7301d106000c01146f776e65720001244163636f756e744964000124617070726f76616c73d1060124417070726f76616c7300011c6465706f736974cd06011c4465706f7369740000cd060c2c70616c6c65745f6e6674731474797065732c4974656d4465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e740001244163636f756e744964000118616d6f756e741801384465706f73697442616c616e63650000d1060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01000456010d02045300000400d506013842547265654d61703c4b2c20563e0000d506042042547265654d617008044b01000456010d02000400d906000000d906000002dd0600dd0600000408000d0200e1060c2c70616c6c65745f6e66747314747970657348436f6c6c656374696f6e4d65746164617461081c4465706f73697401182c537472696e674c696d6974000008011c6465706f73697418011c4465706f736974000110646174617502016c426f756e6465645665633c75382c20537472696e674c696d69743e0000e5060c2c70616c6c65745f6e667473147479706573304974656d4d65746164617461081c4465706f73697401e9062c537472696e674c696d6974000008011c6465706f736974e906011c4465706f736974000110646174617502016c426f756e6465645665633c75382c20537472696e674c696d69743e0000e9060c2c70616c6c65745f6e6674731474797065734c4974656d4d657461646174614465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e749c01444f7074696f6e3c4163636f756e7449643e000118616d6f756e741801384465706f73697442616c616e63650000ed0600000410100d0281027d0200f106000004087502f50600f5060c2c70616c6c65745f6e667473147479706573404174747269627574654465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e749c01444f7074696f6e3c4163636f756e7449643e000118616d6f756e741801384465706f73697442616c616e63650000f90600000408189c00fd060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401000453000004000107012c42547265655365743c543e00000107042042547265655365740404540100000400a400000005070c2c70616c6c65745f6e6674731474797065732c50656e64696e67537761701030436f6c6c656374696f6e49640110184974656d49640110584974656d507269636557697468446972656374696f6e01890220446561646c696e65011000100148646573697265645f636f6c6c656374696f6e100130436f6c6c656374696f6e4964000130646573697265645f6974656d0d0201384f7074696f6e3c4974656d49643e0001147072696365850201784f7074696f6e3c4974656d507269636557697468446972656374696f6e3e000120646561646c696e65100120446561646c696e65000009070c2c70616c6c65745f6e66747314747970657320426974466c616773040454010d0700040030013450616c6c65744665617475726500000d070c2c70616c6c65745f6e6674731474797065733450616c6c6574466561747572650001101c54726164696e67000100284174747269627574657300020024417070726f76616c730004001453776170730008000011070c2c70616c6c65745f6e6674731870616c6c6574144572726f720804540004490001b4304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e3c417070726f76616c45787069726564000304390154686520617070726f76616c20686164206120646561646c696e65207468617420657870697265642c20736f2074686520617070726f76616c2069736e27742076616c696420616e796d6f72652e2857726f6e674f776e6572000404e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730005041501546865207769746e657373206461746120676976656e20646f6573206e6f74206d61746368207468652063757272656e74207374617465206f662074686520636861696e2e44436f6c6c656374696f6e4964496e5573650006047c436f6c6c656374696f6e20494420697320616c72656164792074616b656e2e504974656d734e6f6e5472616e7366657261626c65000704c84974656d732077697468696e207468617420636f6c6c656374696f6e20617265206e6f6e2d7472616e7366657261626c652e2c4e6f7444656c65676174650008049c5468652070726f7669646564206163636f756e74206973206e6f7420612064656c65676174652e3457726f6e6744656c6567617465000904f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000b041901546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e65727368697020616363657074616e6365206f662074686520636f6c6c656374696f6e2e284974656d4c6f636b6564000c0498546865206974656d206973206c6f636b656420286e6f6e2d7472616e7366657261626c65292e504c6f636b65644974656d41747472696275746573000d04744974656d2773206174747269627574657320617265206c6f636b65642e684c6f636b6564436f6c6c656374696f6e41747472696275746573000e048c436f6c6c656374696f6e2773206174747269627574657320617265206c6f636b65642e484c6f636b65644974656d4d65746164617461000f04684974656d2773206d65746164617461206973206c6f636b65642e604c6f636b6564436f6c6c656374696f6e4d6574616461746100100480436f6c6c656374696f6e2773206d65746164617461206973206c6f636b65642e404d6178537570706c79526561636865640011046c416c6c206974656d732068617665206265656e206d696e7465642e3c4d6178537570706c794c6f636b6564001204b8546865206d617820737570706c79206973206c6f636b656420616e642063616e2774206265206368616e6765642e444d6178537570706c79546f6f536d616c6c00130449015468652070726f7669646564206d617820737570706c79206973206c657373207468616e20746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e2c556e6b6e6f776e4974656d0014047454686520676976656e206974656d20494420697320756e6b6e6f776e2e2c556e6b6e6f776e537761700015044c5377617020646f65736e27742065786973742e404d657461646174614e6f74466f756e640016048c54686520676976656e206974656d20686173206e6f206d65746164617461207365742e444174747269627574654e6f74466f756e64001704985468652070726f7669646564206174747269627574652063616e277420626520666f756e642e284e6f74466f7253616c65001804544974656d206973206e6f7420666f722073616c652e24426964546f6f4c6f77001904705468652070726f76696465642062696420697320746f6f206c6f772e5052656163686564417070726f76616c4c696d6974001a04a0546865206974656d2068617320726561636865642069747320617070726f76616c206c696d69742e3c446561646c696e6545787069726564001b048454686520646561646c696e652068617320616c726561647920657870697265642e3457726f6e674475726174696f6e001c043101546865206475726174696f6e2070726f76696465642073686f756c64206265206c657373207468616e206f7220657175616c20746f20604d6178446561646c696e654475726174696f6e602e384d6574686f6444697361626c6564001d04a8546865206d6574686f642069732064697361626c65642062792073797374656d2073657474696e67732e3057726f6e6753657474696e67001e04885468652070726f76696465642073657474696e672063616e2774206265207365742e58496e636f6e73697374656e744974656d436f6e666967001f0415014974656d277320636f6e66696720616c72656164792065786973747320616e642073686f756c6420626520657175616c20746f207468652070726f7669646564206f6e652e204e6f436f6e666967002004c8436f6e66696720666f72206120636f6c6c656374696f6e206f7220616e206974656d2063616e277420626520666f756e642e3c526f6c65734e6f74436c656172656400210470536f6d6520726f6c65732077657265206e6f7420636c65617265642e384d696e744e6f7453746172746564002204644d696e7420686173206e6f742073746172746564207965742e244d696e74456e6465640023045c4d696e742068617320616c726561647920656e6465642e38416c7265616479436c61696d6564002404c05468652070726f7669646564204974656d2077617320616c7265616479207573656420666f7220636c61696d696e672e34496e636f7272656374446174610025047c5468652070726f7669646564206461746120697320696e636f72726563742e2c57726f6e674f726967696e002604ac5468652065787472696e736963207761732073656e74206279207468652077726f6e67206f726967696e2e3857726f6e675369676e6174757265002704905468652070726f7669646564207369676e617475726520697320696e636f72726563742e44496e636f72726563744d65746164617461002804a05468652070726f7669646564206d65746164617461206d6967687420626520746f6f206c6f6e672e644d6178417474726962757465734c696d6974526561636865640029049c43616e277420736574206d6f7265206174747269627574657320706572206f6e652063616c6c2e3857726f6e674e616d657370616365002a04d05468652070726f7669646564206e616d6573706163652069736e277420737570706f7274656420696e20746869732063616c6c2e48436f6c6c656374696f6e4e6f74456d707479002b048c43616e27742064656c657465206e6f6e2d656d70747920636f6c6c656374696f6e732e3c5769746e6573735265717569726564002c0490546865207769746e65737320646174612073686f756c642062652070726f76696465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1507102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301dd031043616c6c01f503245369676e6174757265012905144578747261011907000400380000001907000004241d072107250729072d07350739073d074107001d0710306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000210710306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000250710306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000290710306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e65736973040454000000002d0710306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004003107010c45726100003107102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000350710306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400cc0120543a3a4e6f6e63650000390710306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000003d07086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400dc013042616c616e63654f663c543e0000410708a463756d756c75735f7072696d6974697665735f73746f726167655f7765696768745f7265636c61696d5053746f726167655765696768745265636c61696d040454000000004507084c73746f726167655f6875625f72756e74696d651c52756e74696d65000000005c1853797374656d011853797374656d481c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e40496e686572656e74734170706c696564010020040004a4205768657468657220616c6c20696e686572656e74732068617665206265656e206170706c6965642e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510348000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510380400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401003c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023499020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000a10204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100200400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100200400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500009502040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a6564557067726164650000a902040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e01ad0201581830426c6f636b57656967687473b90289010700f2052a01000b00204aa9d101020040010265cd1d00010bc0560def45010200e000010b0098f73e5d010200f0000100000265cd1d00010bc0de5f59ba0102003001010b00204aa9d1010200400101070088526a74020050000265cd1d0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468c9023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101000100000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874d1024040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ed50219044c73746f726167652d6875622d72756e74696d654c73746f726167652d6875622d72756e74696d6501000000010000000000000044d7bdd8a272ca0d6501000000dd718d5cc53262d401000000df6acb689907609b0500000037e397fc7c91f5e40200000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000f3ff14d5ab52705903000000ea93e3f16f3d696202000000fbc577b9d747efd601000000b9e7717ace5b45cd010000001078d7ac24a07b0e010000000be7208954c7c6c901000000966604ffe78eb0920100000001000000010484204765742074686520636861696e277320696e2d636f64652076657273696f6e2e2853533538507265666978e502082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01e902003c50617261636861696e53797374656d013c50617261636861696e53797374656d6044556e696e636c756465645365676d656e740100ed020400184901204c617465737420696e636c7564656420626c6f636b2064657363656e64616e7473207468652072756e74696d652061636365707465642e20496e206f7468657220776f7264732c20746865736520617265610120616e636573746f7273206f66207468652063757272656e746c7920657865637574696e6720626c6f636b2077686963682068617665206e6f74206265656e20696e636c7564656420696e20746865206f627365727665644c2072656c61792d636861696e2073746174652e00750120546865207365676d656e74206c656e677468206973206c696d69746564206279207468652063617061636974792072657475726e65642066726f6d20746865205b60436f6e73656e737573486f6f6b605d20636f6e666967757265643c20696e207468652070616c6c65742e6c41676772656761746564556e696e636c756465645365676d656e740000150304000c69012053746f72616765206669656c642074686174206b6565707320747261636b206f662062616e64776964746820757365642062792074686520756e696e636c75646564207365676d656e7420616c6f6e672077697468207468652d01206c61746573742048524d502077617465726d61726b2e205573656420666f72206c696d6974696e672074686520616363657074616e6365206f66206e657720626c6f636b73207769746890207265737065637420746f2072656c617920636861696e20636f6e73747261696e74732e5450656e64696e6756616c69646174696f6e436f6465010038040018590120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f20626524206170706c6965642e003d0120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f7665727772697465207468657101205b603a636f6465605d5b73705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d2077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f636573730901207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e444e657756616c69646174696f6e436f64650000380400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000190304000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f6465010020040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d62657201001010000000000c1d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e00882054686973206973207570646174656420696e20606f6e5f66696e616c697a65602e60557067726164655265737472696374696f6e5369676e616c0100210304001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3855706772616465476f416865616401000d03040014dc204f7074696f6e616c207570677261646520676f2d6168656164207369676e616c2066726f6d207468652072656c61792d636861696e2e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f6600002903040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000310304001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e000045030400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d71634865616401004d0380000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301005103040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d6573736167657301005d0304000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100290204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d6573736167657301002902040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e5c55707761726444656c6976657279466565466163746f720100650340000064a7b3b6e00d000000000000000004e42054686520666163746f7220746f206d756c7469706c792074686520626173652064656c69766572792066656520627920666f7220554d502e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010010100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000280400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000280400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e60437573746f6d56616c69646174696f6e486561644461746100003804000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00110120536565206050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f646174616020666f72206d6f726520696e666f726d6174696f6e2e016903017c042853656c66506172614964e90110e803000004b82052657475726e73207468652070617261636861696e204944207765206172652072756e6e696e6720776974682e018d03012454696d657374616d70012454696d657374616d70080c4e6f7701003020000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010020040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e0191030004344d696e696d756d506572696f643020b80b000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e00023450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100e901106400000000019503000000032042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402009903040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200a903040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c64730101040200b5030400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a65730101040200cd030400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e01d903018410484578697374656e7469616c4465706f736974184000ca9a3b00000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e284d6178467265657a657310100000000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01e9030a485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100650340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100ed0304000000018c04604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000b105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01f1030190000145050f28417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e000000001444436f6c6c61746f7253656c656374696f6e0144436f6c6c61746f7253656c656374696f6e1434496e76756c6e657261626c65730100490504000411012054686520696e76756c6e657261626c652c207065726d697373696f6e656420636f6c6c61746f72732e2054686973206c697374206d75737420626520736f727465642e3443616e6469646174654c69737401004d050400146901205468652028636f6d6d756e6974792c206c696d697465642920636f6c6c6174696f6e2063616e646964617465732e206043616e646964617465736020616e642060496e76756c6e657261626c6573602073686f756c6420626550206d757475616c6c79206578636c75736976652e0075012054686973206c69737420697320736f7274656420696e20617363656e64696e67206f72646572206279206465706f73697420616e64207768656e20746865206465706f736974732061726520657175616c2c20746865206c65617374a020726563656e746c79207570646174656420697320636f6e7369646572656420677265617465722e444c617374417574686f726564426c6f636b01010405001010000000000484204c61737420626c6f636b20617574686f72656420627920636f6c6c61746f722e444465736972656443616e6469646174657301001010000000000c782044657369726564206e756d626572206f662063616e646964617465732e00750120546869732073686f756c6420696465616c6c7920616c77617973206265206c657373207468616e205b60436f6e6669673a3a4d617843616e64696461746573605d20666f72207765696768747320746f20626520636f72726563742e3443616e646964616379426f6e6401001840000000000000000000000000000000000cb820466978656420616d6f756e7420746f206465706f73697420746f206265636f6d65206120636f6c6c61746f722e004101205768656e206120636f6c6c61746f722063616c6c7320606c656176655f696e74656e7460207468657920696d6d6564696174656c79207265636569766520746865206465706f736974206261636b2e01f90301a000015905151c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100a40400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010020040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b65797301005d050400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010079020400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050001040400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405650500040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e01fd0301a800016d05161041757261011041757261082c417574686f726974696573010071050400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010079052000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000171c41757261457874011c41757261457874082c417574686f72697469657301007105040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c5d0120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c0d0120616c77617973206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e20536c6f74496e666f00007d0504000cd82043757272656e7420736c6f742070616972656420776974682061206e756d626572206f6620617574686f72656420626c6f636b732e00982055706461746564206f6e206561636820626c6f636b20696e697469616c697a6174696f6e2e00000000182458636d705175657565012458636d7051756575651c50496e626f756e6458636d7053757370656e646564010081050400200d01205468652073757370656e64656420696e626f756e642058434d50206368616e6e656c732e20416c6c206f746865727320617265206e6f742073757370656e6465642e00710120546869732069732061206053746f7261676556616c75656020696e7374656164206f662061206053746f726167654d6170602073696e636520776520657870656374206d756c7469706c652072656164732070657220626c6f636b690120746f20646966666572656e74206b65797320776974682061206f6e652062797465207061796c6f61642e205468652061636365737320746f2060426f756e6465644254726565536574602077696c6c2062652063616368656415012077697468696e2074686520626c6f636b20616e64207468657265666f7265206f6e6c7920696e636c75646564206f6e636520696e207468652070726f6f662073697a652e006501204e4f54453a2054686520506f562062656e63686d61726b696e672063616e6e6f74206b6e6f77207468697320616e642077696c6c206f7665722d657374696d6174652c20627574207468652061637475616c2070726f6f66442077696c6c20626520736d616c6c65722e484f7574626f756e6458636d7053746174757301008d050400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205990538040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402e90138040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e66696701009d05302000000030000000080000000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e38517565756553757370656e64656401002004000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e4444656c6976657279466565466163746f7201010405e901650340000064a7b3b6e00d000000000000000004c42054686520666163746f7220746f206d756c7469706c792074686520626173652064656c6976657279206665652062792e010d0401ac044c4d6178496e626f756e6453757370656e6465641010e803000014490120546865206d6178696d756d206e756d626572206f6620696e626f756e642058434d50206368616e6e656c7320746861742063616e2062652073757370656e6465642073696d756c74616e656f75736c792e005d0120416e792066757274686572206368616e6e656c2073757370656e73696f6e732077696c6c206661696c20616e64206d65737361676573206d6179206765742064726f7070656420776974686f757420667572746865724501206e6f746963652e2043686f6f73696e67206120686967682076616c756520283130303029206973206f6b61793b207468652074726164652d6f666620746861742069732064657363726962656420696ed8205b60496e626f756e6458636d7053757370656e646564605d207374696c6c206170706c6965732061742074686174207363616c652e01a1051e2c506f6c6b61646f7458636d012c506f6c6b61646f7458636d30305175657279436f756e746572010030200000000000000000048820546865206c617465737420617661696c61626c6520717565727920696e6465782e1c517565726965730001040230a5050400045420546865206f6e676f696e6720717565726965732e28417373657454726170730101040634101000000000106820546865206578697374696e672061737365742074726170732e006101204b65792069732074686520626c616b6532203235362068617368206f6620286f726967696e2c2076657273696f6e65642060417373657473602920706169722e2056616c756520697320746865206e756d626572206f661d012074696d65732074686973207061697220686173206265656e20747261707065642028757375616c6c79206a75737420312069662069742065786973747320617420616c6c292e385361666558636d56657273696f6e00001004000861012044656661756c742076657273696f6e20746f20656e636f64652058434d207768656e206c61746573742076657273696f6e206f662064657374696e6174696f6e20697320756e6b6e6f776e2e20496620604e6f6e65602c3d01207468656e207468652064657374696e6174696f6e732077686f73652058434d2076657273696f6e20697320756e6b6e6f776e2061726520636f6e7369646572656420756e726561636861626c652e40537570706f7274656456657273696f6e0001080502b90510040004f020546865204c61746573742076657273696f6e732074686174207765206b6e6f7720766172696f7573206c6f636174696f6e7320737570706f72742e4056657273696f6e4e6f746966696572730001080502b90530040004050120416c6c206c6f636174696f6e7320746861742077652068617665207265717565737465642076657273696f6e206e6f74696669636174696f6e732066726f6d2e5056657273696f6e4e6f74696679546172676574730001080502b905bd0504000871012054686520746172676574206c6f636174696f6e73207468617420617265207375627363726962656420746f206f75722076657273696f6e206368616e6765732c2061732077656c6c20617320746865206d6f737420726563656e7494206f66206f75722076657273696f6e7320776520696e666f726d6564207468656d206f662e5456657273696f6e446973636f7665727951756575650100c10504000c65012044657374696e6174696f6e732077686f7365206c61746573742058434d2076657273696f6e20776520776f756c64206c696b6520746f206b6e6f772e204475706c696361746573206e6f7420616c6c6f7765642c20616e6471012074686520607533326020636f756e74657220697320746865206e756d626572206f662074696d6573207468617420612073656e6420746f207468652064657374696e6174696f6e20686173206265656e20617474656d707465642c8c20776869636820697320757365642061732061207072696f726974697a6174696f6e2e4043757272656e744d6967726174696f6e0000cd050400049c205468652063757272656e74206d6967726174696f6e27732073746167652c20696620616e792e5452656d6f74654c6f636b656446756e6769626c657300010c050202d505dd05040004f02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e20612072656d6f746520636861696e2e3c4c6f636b656446756e6769626c65730001040200ed05040004e02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e207468697320636861696e2e5458636d457865637574696f6e53757370656e646564010020040004b420476c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e01110401b00001f9051f2843756d756c757358636d0001a50401dd01000020304d657373616765517565756501304d65737361676551756575650c30426f6f6b5374617465466f7201010405e501fd0574000000000000000000000000000000000000000000000000000000000004cc2054686520696e646578206f662074686520666972737420616e64206c61737420286e6f6e2d656d707479292070616765732e2c53657276696365486561640000e501040004bc20546865206f726967696e2061742077686963682077652073686f756c6420626567696e20736572766963696e672e145061676573000108050509060d060400048820546865206d6170206f66207061676520696e646963657320746f2070616765732e01a90401e1010c204865617053697a65101000000100143d01205468652073697a65206f662074686520706167653b207468697320696d706c69657320746865206d6178696d756d206d6573736167652073697a652077686963682063616e2062652073656e742e005901204120676f6f642076616c756520646570656e6473206f6e20746865206578706563746564206d6573736167652073697a65732c20746865697220776569676874732c207468652077656967687420746861742069735d0120617661696c61626c6520666f722070726f63657373696e67207468656d20616e6420746865206d6178696d616c206e6565646564206d6573736167652073697a652e20546865206d6178696d616c206d65737361676511012073697a6520697320736c696768746c79206c6f776572207468616e207468697320617320646566696e6564206279205b604d61784d6573736167654c656e4f66605d2e204d61785374616c651010080000000c5d0120546865206d6178696d756d206e756d626572206f66207374616c652070616765732028692e652e206f66206f766572776569676874206d657373616765732920616c6c6f776564206265666f72652063756c6c696e6751012063616e2068617070656e2e204f6e636520746865726520617265206d6f7265207374616c65207061676573207468616e20746869732c207468656e20686973746f726963616c207061676573206d6179206265fc2064726f707065642c206576656e206966207468657920636f6e7461696e20756e70726f636573736564206f766572776569676874206d657373616765732e3453657276696365576569676874c5022c0107005840fba2020070001441012054686520616d6f756e74206f66207765696768742028696620616e79292077686963682073686f756c642062652070726f766964656420746f20746865206d65737361676520717565756520666f726820736572766963696e6720656e717565756564206974656d732e00fc2054686973206d6179206265206c65676974696d6174656c7920604e6f6e656020696e207468652063617365207468617420796f752077696c6c2063616c6ca82060536572766963655175657565733a3a736572766963655f71756575657360206d616e75616c6c792e011506212450726f766964657273012450726f76696465727330385369676e5570526571756573747300010402001906040028ed0120546865206d617070696e672066726f6d20616e204163636f756e74496420746861742072657175657374656420746f207369676e20757020746f2061207475706c65206f6620746865206d6574616461746120776974682074797065206f662074686520726571756573742c20616e642074686520626c6f636b88206e756d626572207768656e20746865207265717565737420776173206d6164652e00d1012054686973206973207573656420666f72207468652074776f2d737465702070726f63657373206f66207265676973746572696e673a207768656e2061207573657220726571756573747320746f20726567697374657220617320612053502028656974686572204d5350206f7220425350292cb10120746861742072657175657374207769746820746865206d6574616461746120616e6420746865206465706f7369742068656c642069732073746f72656420686572652e205768656e20746865207573657220636f6e6669726d7320746865207369676e2075702c20746865250120726571756573742069732072656d6f7665642066726f6d20746869732073746f7261676520616e64207468652075736572206973207265676973746572656420617320612053502e007020546869732073746f72616765206973207570646174656420696e3aad02202d205b726571756573745f6d73705f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a726571756573745f6d73705f7369676e5f75702920616e64205b726571756573745f6273705f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a726571756573745f6273705f7369676e5f7570292c207768696368206164642061206e657720656e74727920746f20746865206d61702e9102202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f75702920616e64205b63616e63656c5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a63616e63656c5f7369676e5f7570292c2077686963682072656d6f766520616e206578697374696e6720656e7472792066726f6d20746865206d61702e804163636f756e744964546f4d61696e53746f7261676550726f7669646572496400010402003404001ce820546865206d617070696e672066726f6d20616e204163636f756e74496420746f2061204d61696e53746f7261676550726f766964657249642e007d012054686973206973207573656420746f206765742061204d61696e2053746f726167652050726f7669646572277320756e69717565206964656e746966696572206e656564656420746f2061636365737320697473206d657461646174612e007020546869732073746f72616765206973207570646174656420696e3a5102202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c20776869636820616464732061206e657720656e74727920746f20746865206d617020696620746865206163636f756e7420746f20636f6e6669726d2069732061204d61696e2053746f726167652050726f76696465722ea901202d205b6d73705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6d73705f7369676e5f6f6666292c2077686963682072656d6f7665732074686520636f72726573706f6e64696e6720656e7472792066726f6d20746865206d61702e504d61696e53746f7261676550726f766964657273000104023425060400280d0120546865206d617070696e672066726f6d2061204d61696e53746f7261676550726f7669646572496420746f2061204d61696e53746f7261676550726f76696465722e00e02054686973206973207573656420746f206765742061204d61696e2053746f726167652050726f76696465722773206d657461646174612ebd012049742072657475726e7320604e6f6e656020696620746865204d61696e2053746f726167652050726f766964657220494420646f6573206e6f7420636f72726573706f6e6420746f20616e792072656769737465726564204d61696e2053746f726167652050726f76696465722e007020546869732073746f72616765206973207570646174656420696e3a5102202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c20776869636820616464732061206e657720656e74727920746f20746865206d617020696620746865206163636f756e7420746f20636f6e6669726d2069732061204d61696e2053746f726167652050726f76696465722ea901202d205b6d73705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6d73705f7369676e5f6f6666292c2077686963682072656d6f7665732074686520636f72726573706f6e64696e6720656e7472792066726f6d20746865206d61702e8901202d205b6368616e67655f63617061636974795d2863726174653a3a646973706174636861626c65733a3a6368616e67655f6361706163697479292c207768696368206368616e6765732074686520656e747279277320606361706163697479602e5502202d205b6164645f76616c75655f70726f705d2863726174653a3a646973706174636861626c65733a3a6164645f76616c75655f70726f70292c20776869636820617070656e64732061206e65772076616c75652070726f706f736974696f6e20746f2074686520656e7472792773206578697374696e67206076616c75655f70726f706020626f756e64656420766563746f722e1c4275636b65747300010402342d06040024dc20546865206d617070696e672066726f6d2061204275636b6574496420746f2074686174206275636b65742773206d657461646174612e0031012054686973206973207573656420746f206765742061206275636b65742773206d657461646174612c207375636820617320726f6f742c20757365722049442c20616e64204d53502049442e45012049742072657475726e7320604e6f6e656020696620746865204275636b657420494420646f6573206e6f7420636f72726573706f6e6420746f20616e792072656769737465726564206275636b65742e007020546869732073746f72616765206973207570646174656420696e3a9501202d205b6164645f6275636b65745d287368705f7472616974733a3a4d757461746550726f766964657273496e746572666163653a3a6164645f6275636b6574292c20776869636820616464732061206e657720656e74727920746f20746865206d61702e0502202d205b6368616e67655f726f6f745f6275636b65745d287368705f7472616974733a3a4d757461746550726f766964657273496e746572666163653a3a6368616e67655f726f6f745f6275636b6574292c207768696368206368616e6765732074686520636f72726573706f6e64696e67206275636b6574277320726f6f742e1d02202d205b72656d6f76655f726f6f745f6275636b65745d287368705f7472616974733a3a4d757461746550726f766964657273496e746572666163653a3a72656d6f76655f726f6f745f6275636b6574292c2077686963682072656d6f7665732074686520656e747279206f662074686520636f72726573706f6e64696e67206275636b65742e7c4d61696e53746f7261676550726f7669646572496473546f4275636b6574730001040234350604001c0d0120546865206d617070696e672066726f6d2061204d61696e53746f7261676550726f7669646572496420746f206120766563746f72206f66204275636b65744964732e00b1012054686973206973207573656420746f20656666696369656e746c7920726574726965766520746865206c697374206f66206275636b65747320746861742061204d61696e2053746f726167652050726f76696465722069732063757272656e746c792073746f72696e672e007020546869732073746f72616765206973207570646174656420696e3a0501202d205b6164645f6275636b65745d287368705f7472616974733a3a4d757461746550726f766964657273496e746572666163653a3a6164645f6275636b6574294501202d205b72656d6f76655f726f6f745f6275636b65745d287368705f7472616974733a3a4d757461746550726f766964657273496e746572666163653a3a72656d6f76655f726f6f745f6275636b657429884163636f756e744964546f4261636b757053746f7261676550726f76696465724964000104020034040020f020546865206d617070696e672066726f6d20616e204163636f756e74496420746f2061204261636b757053746f7261676550726f766964657249642e0085012054686973206973207573656420746f206765742061204261636b75702053746f726167652050726f7669646572277320756e69717565206964656e746966696572206e656564656420746f2061636365737320697473206d657461646174612e007020546869732073746f72616765206973207570646174656420696e3a005902202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c20776869636820616464732061206e657720656e74727920746f20746865206d617020696620746865206163636f756e7420746f20636f6e6669726d2069732061204261636b75702053746f726167652050726f76696465722ea901202d205b6273705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6273705f7369676e5f6f6666292c2077686963682072656d6f7665732074686520636f72726573706f6e64696e6720656e7472792066726f6d20746865206d61702e584261636b757053746f7261676550726f766964657273000104023421060400241d0120546865206d617070696e672066726f6d2061204261636b757053746f7261676550726f7669646572496420746f2061204261636b757053746f7261676550726f76696465722e00e82054686973206973207573656420746f206765742061204261636b75702053746f726167652050726f76696465722773206d657461646174612ecd012049742072657475726e7320604e6f6e656020696620746865204261636b75702053746f726167652050726f766964657220494420646f6573206e6f7420636f72726573706f6e6420746f20616e792072656769737465726564204261636b75702053746f726167652050726f76696465722e007020546869732073746f72616765206973207570646174656420696e3a5902202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c20776869636820616464732061206e657720656e74727920746f20746865206d617020696620746865206163636f756e7420746f20636f6e6669726d2069732061204261636b75702053746f726167652050726f76696465722ea901202d205b6273705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6273705f7369676e5f6f6666292c2077686963682072656d6f7665732074686520636f72726573706f6e64696e6720656e7472792066726f6d20746865206d61702e8901202d205b6368616e67655f63617061636974795d2863726174653a3a646973706174636861626c65733a3a6368616e67655f6361706163697479292c207768696368206368616e6765732074686520656e747279277320606361706163697479602e204d7370436f756e7401001010000000001c4d012054686520616d6f756e74206f66204d61696e2053746f726167652050726f7669646572732074686174206172652063757272656e746c79207265676973746572656420696e207468652072756e74696d652e0019012054686973206973207573656420746f206b65657020747261636b206f662074686520746f74616c20616d6f756e74206f66204d53507320696e207468652073797374656d2e007020546869732073746f72616765206973207570646174656420696e3a4502202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c2077686963682061646473206f6e6520746f20746869732073746f7261676520696620746865206163636f756e7420746f20636f6e6669726d2069732061204d61696e2053746f726167652050726f76696465722e7501202d205b6d73705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6d73705f7369676e5f6f6666292c20776869636820737562747261637473206f6e652066726f6d20746869732073746f726167652e20427370436f756e7401001010000000001c55012054686520616d6f756e74206f66204261636b75702053746f726167652050726f7669646572732074686174206172652063757272656e746c79207265676973746572656420696e207468652072756e74696d652e0019012054686973206973207573656420746f206b65657020747261636b206f662074686520746f74616c20616d6f756e74206f66204253507320696e207468652073797374656d2e007020546869732073746f72616765206973207570646174656420696e3a4d02202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c2077686963682061646473206f6e6520746f20746869732073746f7261676520696620746865206163636f756e7420746f20636f6e6669726d2069732061204261636b75702053746f726167652050726f76696465722e7501202d205b6273705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6273705f7369676e5f6f6666292c20776869636820737562747261637473206f6e652066726f6d20746869732073746f726167652e44546f74616c42737073436170616369747901003020000000000000000020d02054686520746f74616c20616d6f756e74206f662073746f7261676520636170616369747920616c6c204253507320686176652e00c9012054686973206973207573656420746f206b65657020747261636b206f662074686520746f74616c20616d6f756e74206f662073746f7261676520636170616369747920616c6c2042535073206861766520696e207468652073797374656d2c20776869636820697320616c736f207468658d0120746f74616c20616d6f756e74206f662073746f7261676520636170616369747920746861742063616e206265207573656420627920757365727320696620776520666163746f7220696e20746865207265706c69636174696f6e20666163746f722e007020546869732073746f72616765206973207570646174656420696e3afd02202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c207768696368206164647320746865206361706163697479206f662074686520726567697374657265642053746f726167652050726f766964657220746f20746869732073746f7261676520696620746865206163636f756e7420746f20636f6e6669726d2069732061204261636b75702053746f726167652050726f76696465722e4502202d205b6273705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6273705f7369676e5f6f6666292c2077686963682073756274726163747320746865206361706163697479206f6620746865204261636b75702053746f726167652050726f766964657220746f207369676e206f66662066726f6d20746869732073746f726167652e4055736564427370734361706163697479010030200000000000000000101d012054686520746f74616c20616d6f756e74206f662073746f72616765206361706163697479206f66204253507320746861742069732063757272656e746c7920696e207573652e00e9012054686973206973207573656420746f206b65657020747261636b206f662074686520746f74616c20616d6f756e74206f662073746f7261676520636170616369747920746861742069732063757272656e746c7920696e207573652062792075736572732c2077686963682069732075736566756c20666f720d012073797374656d206d65747269637320616e6420616c736f20746f2063616c63756c617465207468652063757272656e74207072696365206f662073746f726167652e68476c6f62616c4273707352657075746174696f6e576569676874010010100000000004c02054686520746f74616c20676c6f62616c2072657075746174696f6e20776569676874206f6620616c6c20425350732e01ad0401f1014020547265617375727900800000000000000000000000000000000000000000000000000000000000000000106020546865205472656173757279204163636f756e7449642e5820546865206163636f756e7420746f2077686963683adc202d20546865206665657320666f72207375626d697474696e672061206368616c6c656e676520617265207472616e736665727265642e94202d2054686520736c61736865642066756e647320617265207472616e736665727265642e3053704d696e4465706f73697418400040e59c30120000000000000000000004410120546865206d696e696d756d20616d6f756e74207468617420616e206163636f756e742068617320746f206465706f73697420746f206265636f6d6520612073746f726167652070726f76696465722e3453704d696e4361706163697479302002000000000000000481012054686520616d6f756e74207468617420612042535020726563656976657320617320616c6c6f636174696f6e206f662073746f72616765206361706163697479207768656e206974206465706f736974732053704d696e4465706f7369742e384465706f736974506572446174611840020000000000000000000000000000000411032054686520736c6f7065206f662074686520636f6c6c61746572616c2076732073746f726167652063617061636974792063757276652e20496e206f74686572207465726d732c20686f77206d616e7920746f6b656e7320612053746f726167652050726f76696465722073686f756c642061646420617320636f6c6c61746572616c20746f20696e637265617365206974732073746f7261676520636170616369747920696e206f6e6520756e6974206f662053746f7261676544617461556e69742e2c4d617846696c6553697a653020ffffffffffffffff0cbc2054686520657374696d61746564206d6178696d756d2073697a65206f6620616e20756e6b6e6f776e2066696c652e00b9012055736564207072696d6172696c7920746f20736c61736820612053746f726167652050726f7669646572207768656e206974206661696c7320746f2070726f766964652061206368756e6b206f66206461746120666f7220616e20756e6b6e6f776e2066696c652073697a652e4c4d61784d756c74694164647265737353697a65101064000000049020546865206d6178696d756d2073697a65206f662061206d756c7469616464726573732e544d61784d756c746941646472657373416d6f756e74101005000000041d0120546865206d6178696d756d20616d6f756e74206f66206d756c7469616464726573736573207468617420612053746f726167652050726f76696465722063616e20686176652e304d617850726f746f636f6c73101064000000044d0120546865206d6178696d756d206e756d626572206f662070726f746f636f6c7320746865204d53502063616e20737570706f727420286174206c656173742077697468696e207468652072756e74696d65292e284d61784275636b65747310101027000004cc20546865206d6178696d756d20616d6f756e74206f66204275636b65747320746861742061204d53502063616e20686176652e344275636b65744465706f73697418400040e59c30120000000000000000000004f82054686520616d6f756e74207468617420616e206163636f756e742068617320746f206465706f73697420746f206372656174652061206275636b65742e3c4275636b65744e616d654c696d697410106400000004d82054797065207468617420726570726573656e7473207468652062797465206c696d6974206f662061206275636b6574206e616d652e584d6178426c6f636b73466f7252616e646f6d6e6573731010b004000004990120546865206d6178696d756d20616d6f756e74206f6620626c6f636b732061667465722077686963682061207369676e2075702072657175657374206578706972657320736f207468652072616e646f6d6e6573732063616e6e6f742062652063686f73656e7c4d696e426c6f636b734265747765656e43617061636974794368616e67657310100a00000004fc20546865206d696e696d756d20616d6f756e74206f6620626c6f636b73206265747765656e206361706163697479206368616e67657320666f7220612053504444656661756c744d65726b6c65526f6f74348003170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314042501205468652064656661756c742076616c7565206f662074686520726f6f74206f6620746865204d65726b6c652050617472696369612054726965206f66207468652072756e74696d6564536c617368416d6f756e745065724d617846696c6553697a65184000c817a804000000000000000000000004c5012054686520736c61736820666163746f722064656475637465642066726f6d20612053746f726167652050726f76696465722773206465706f73697420666f722065766572792073696e676c652073746f726167652070726f6f662074686579206661696c20746f2070726f766964652e605374617274696e6752657075746174696f6e57656967687410100100000004dc205374617274696e672072657075746174696f6e2077656967687420666f722061206e65776c792072656769737465726564204253502e013906282846696c6553797374656d012846696c6553797374656d443c53746f72616765526571756573747300010402343d060400004853746f72616765526571756573744273707300010802024d0651060400186901204120646f75626c65206d61702066726f6d2073746f72616765207265717565737420746f2042535020604163636f756e7449646073207468617420766f6c756e74656572656420746f2073746f7265207468652066696c652e009d0120416e792042535020756e64657220612073746f7261676520726571756573742070726566697820697320636f6e7369646572656420746f206265206120766f6c756e7465657220616e642063616e2062652072656d6f76656420617420616e792074696d652e8102204f6e6365206120425350207375626d69747320612076616c69642070726f6f6620746f20746865207669612074686520606273705f636f6e6669726d5f73746f72696e67602065787472696e7369632c207468652060636f6e6669726d656460206669656c6420696e205b6053746f7261676552657175657374427370734d65746164617461605d2077696c6c2062652073657420746f206074727565602e00bd01205768656e20612073746f7261676520726571756573742069732065787069726564206f722072656d6f7665642c2074686520636f72726573706f6e64696e672073746f7261676520726571756573742070726566697820696e2074686973206d61702069732072656d6f7665642e684275636b6574735769746853746f72616765526571756573747300010802024d0698040004f420426f6f6b6b656570696e67206f6620746865206275636b65747320636f6e7461696e696e67206f70656e2073746f726167652072657175657374732e6453746f726167655265717565737445787069726174696f6e7301010402105506040004b42041206d6170206f6620626c6f636b7320746f20657870697265642073746f726167652072657175657374732e7846696c6544656c6574696f6e5265717565737445787069726174696f6e7301010402105906040004cc2041206d6170206f6620626c6f636b7320746f20657870697265642066696c652064656c6574696f6e2072657175657374732e704d6f76654275636b65745265717565737445787069726174696f6e7301010402106506040004c42041206d6170206f6620626c6f636b7320746f2065787069726564206d6f7665206275636b65742072657175657374732ea84e657874417661696c61626c6553746f726167655265717565737445787069726174696f6e426c6f636b01001010000000000c5901204120706f696e74657220746f20746865206561726c6965737420617661696c61626c6520626c6f636b20746f20696e736572742061206e65772073746f7261676520726571756573742065787069726174696f6e2e006d0120546869732073686f756c6420616c776179732062652067726561746572206f7220657175616c207468616e2063757272656e7420626c6f636b202b205b60436f6e6669673a3a53746f726167655265717565737454746c605d2ebc4e657874417661696c61626c6546696c6544656c6574696f6e5265717565737445787069726174696f6e426c6f636b01001010000000000c7101204120706f696e74657220746f20746865206561726c6965737420617661696c61626c6520626c6f636b20746f20696e736572742061206e65772066696c652064656c6574696f6e20726571756573742065787069726174696f6e2e009d0120546869732073686f756c6420616c776179732062652067726561746572206f7220657175616c207468616e2063757272656e7420626c6f636b202b205b60436f6e6669673a3a50656e64696e6746696c6544656c6574696f6e5265717565737454746c605d2eb44e657874417661696c61626c654d6f76654275636b65745265717565737445787069726174696f6e426c6f636b01001010000000000c6901204120706f696e74657220746f20746865206561726c6965737420617661696c61626c6520626c6f636b20746f20696e736572742061206e6577206d6f7665206275636b657420726571756573742065787069726174696f6e2e00790120546869732073686f756c6420616c776179732062652067726561746572206f7220657175616c207468616e2063757272656e7420626c6f636b202b205b60436f6e6669673a3a4d6f76654275636b65745265717565737454746c605d2e684e6578745374617274696e67426c6f636b546f436c65616e55700100101000000000141901204120706f696e74657220746f20746865207374617274696e6720626c6f636b20746f20636c65616e20757020657870697265642073746f726167652072657175657374732e006901204966207468697320626c6f636b20697320626568696e64207468652063757272656e7420626c6f636b206e756d6265722c2074686520636c65616e757020616c676f726974686d20696e20606f6e5f69646c65602077696c6c750120617474656d707420746f20616363656c6572617465207468697320626c6f636b20706f696e74657220617320636c6f736520746f206f7220757020746f207468652063757272656e7420626c6f636b206e756d6265722e205468697319012077696c6c20657865637574652070726f7669646564207468617420746865726520697320656e6f7567682072656d61696e696e672077656967687420746f20646f20736f2e6c50656e64696e6746696c6544656c6574696f6e526571756573747301010402006d0604000c802050656e64696e672066696c652064656c6574696f6e2072657175657374732e00f5012041206d617070696e672066726f6d20612075736572206163636f756e7420696420746f2061206c697374206f662070656e64696e672066696c652064656c6574696f6e2072657175657374732c20686f6c64696e672061207475706c65206f66207468652066696c65206b657920616e64206275636b65742069642e6850656e64696e6753746f7053746f72696e67526571756573747300010802024d067106040018902050656e64696e672066696c652073746f702073746f72696e672072657175657374732e001102204120646f75626c65206d617070696e672066726f6d204253502049447320746f2061206c697374206f662066696c65206b6579732070656e64696e672073746f702073746f72696e6720726571756573747320746f2074686520626c6f636b20696e2077686963682074686f73652072657175657374732077657265206f70656e65648420616e64207468652070726f76656e2073697a65206f66207468652066696c652efd012054686520626c6f636b206e756d626572206973207573656420746f2061766f69642042535073206265696e672061626c6520746f2073746f702073746f72696e672066696c657320696d6d6564696174656c7920776869636820776f756c6420616c6c6f77207468656d20746f2061766f6964206368616c6c656e676573d501206f66206d697373696e672066696c65732e205468652073697a6520697320746f2062652061626c6520746f2064656372656173652074686569722075736564206361706163697479207768656e207468657920636f6e6669726d20746f2073746f702073746f72696e67207468652066696c652e6450656e64696e674d6f76654275636b6574526571756573747300010802024d067506040010782050656e64696e67206d6f7665206275636b65742072657175657374732e009501204120646f75626c65206d617070696e672066726f6d204d53502049447320746f2061206c697374206f66206275636b65742049447320776869636820746865792063616e20616363657074206f72206465636c696e6520746f2074616b65206f7665722eb8205468652076616c75652069732074686520757365722077686f2072657175657374656420746865206d6f76652e604461746153657276657273466f724d6f76654275636b657400010802024d0698040004ac204253502064617461207365727665727320666f72206d6f7665206275636b65742072657175657374732e5050656e64696e674275636b657473546f4d6f76650101040234980004090120426f6f6b6b656570696e67206f66206275636b6574732074686174206172652070656e64696e6720746f206265206d6f76656420746f2061206e6577204d53502e445265706c69636174696f6e54617267657401001010000000000cd4204e756d626572206f66204253507320726571756972656420746f2066756c66696c6c20612073746f72616765207265717565737400b501205468697320697320616c736f207573656420617320612064656661756c742076616c756520696620746865204253507320726571756972656420617265206e6f7420737065636966696564207768656e206372656174696e6720612073746f7261676520726571756573742e70426c6f636b52616e6765546f4d6178696d756d5468726573686f6c64010010100000000004f101204e756d626572206f6620626c6f636b7320756e74696c20616c6c204253507320776f756c6420726561636820746865205b60436f6e6669673a3a4d6178696d756d5468726573686f6c64605d20746f20656e73757265207468617420616c6c2042535073206172652061626c6520746f20766f6c756e746565722e01b10401090234604d61784273707350657253746f726167655265717565737410100500000010e8204d6178696d756d206e756d626572206f662053507320284d5350202b20425350732920746861742063616e2073746f726520612066696c652e0055012054686973206973207573656420746f206c696d697420746865206e756d626572206f6620425350732073746f72696e6720612066696c6520616e6420636c61696d696e67207265776172647320666f722069742ead012049662074686973206e756d62657220697320746f6f20686967682c207468656e207468652072657761726420666f722073746f72696e6720612066696c65206d6967687420626520746f2064696c7574656420616e6420706f696e746c65737320746f2073746f72652e784d61784261746368436f6e6669726d53746f72616765526571756573747310100a000000049101204d6178696d756d206261746368206f662073746f7261676520726571756573747320746861742063616e20626520636f6e6669726d6564206174206f6e6365207768656e2063616c6c696e6720606273705f636f6e6669726d5f73746f72696e67602e3c4d617846696c655061746853697a651010000200000488204d6178696d756d20627974652073697a65206f6620612066696c6520706174682e344d617850656572496453697a651010640000000480204d6178696d756d20627974652073697a65206f66206120706565722069642e484d61784e756d6265724f665065657249647310100500000004c8204d6178696d756d206e756d626572206f6620706565722069647320666f7220612073746f7261676520726571756573742e6c4d6178446174615365727665724d756c746941646472657373657310100a00000004e0204d6178696d756d206e756d626572206f66206d756c746961646472657373657320666f7220612073746f7261676520726571756573742e584d6178457870697265644974656d73496e426c6f636b101064000000042901204d6178696d756d206e756d626572206f662065787069726564206974656d73202870657220747970652920746f20636c65616e20757020696e20612073696e676c6520626c6f636b2e4453746f726167655265717565737454746c10102800000004902054696d652d746f2d6c69766520666f7220612073746f7261676520726571756573742e7450656e64696e6746696c6544656c6574696f6e5265717565737454746c10102800000004e1012054696d652d746f2d6c69766520666f7220612070656e64696e672066696c652064656c6574696f6e20726571756573742c2061667465722077686963682061207072696f72697479206368616c6c656e67652069732073656e74206f757420746f20656e666f726365207468652064656c6574696f6e2e504d6f76654275636b65745265717565737454746c101028000000045d012054696d652d746f2d6c69766520666f722061206d6f7665206275636b657420726571756573742c20616674657220776869636820746865207265717565737420697320636f6e7369646572656420657870697265642e784d61785573657250656e64696e6744656c6574696f6e526571756573747310100a000000040901204d6178696d756d206e756d626572206f662066696c652064656c6574696f6e207265717565737473206120757365722063616e20686176652070656e64696e672e804d61785573657250656e64696e674d6f76654275636b6574526571756573747310100a000000040101204d6178696d756d206e756d626572206f66206d6f7665206275636b6574207265717565737473206120757365722063616e20686176652070656e64696e672e544d696e57616974466f7253746f7053746f72696e6710100a000000040d02204e756d626572206f6620626c6f636b7320726571756972656420746f2070617373206265747765656e2061204253502072657175657374696e6720746f2073746f702073746f72696e6720612066696c6520616e64206974206265696e672061626c6520746f20636f6e6669726d20746f2073746f702073746f72696e672069742e017906293050726f6f66734465616c6572013050726f6f66734465616c65722c505469636b546f4368616c6c656e6765735365656400010402103404001085012041206d617070696e672066726f6d206368616c6c656e676573207469636b20746f20612072616e646f6d2073656564207573656420666f722067656e65726174696e6720746865206368616c6c656e67657320696e2074686174207469636b2e0001012054686973206973207573656420746f206b65657020747261636b206f6620746865206368616c6c656e67657327207365656420696e2074686520706173742e79012054686973206d617070696e6720676f6573206261636b206f6e6c7920604368616c6c656e6765486973746f72794c656e6774686020626c6f636b732e2050726576696f7573206368616c6c656e676573206172652072656d6f7665642e685469636b546f436865636b706f696e744368616c6c656e6765730001040210490204001851012041206d617070696e672066726f6d206368616c6c656e676573207469636b20746f206120766563746f72206f6620637573746f6d206368616c6c656e676564206b65797320666f722074686174207469636b2e006d012054686973206973207573656420746f206b65657020747261636b206f6620746865206368616c6c656e67657320746861742068617665206265656e206d61646520696e2074686520706173742c207370656369666963616c6c799020696e2074686520636865636b706f696e74206368616c6c656e676520726f756e64732eec2054686520766563746f7220697320626f756e64656420627920604d6178437573746f6d4368616c6c656e676573506572426c6f636b466f72602e75012054686973206d617070696e6720676f6573206261636b206f6e6c7920604368616c6c656e6765486973746f72794c656e67746860207469636b732e2050726576696f7573206368616c6c656e676573206172652072656d6f7665642e484c617374436865636b706f696e745469636b010010100000000018ec20546865206368616c6c656e6765207469636b206f6620746865206c61737420636865636b706f696e74206368616c6c656e676520726f756e642e0061012054686973206973207573656420746f2064657465726d696e65207768656e20746f20696e636c75646520746865206368616c6c656e6765732066726f6d2074686520604368616c6c656e67657351756575656020616e646d0120605072696f726974794368616c6c656e67657351756575656020696e2074686520605469636b546f436865636b706f696e744368616c6c656e676573602053746f726167654d61702e20546865736520636865636b706f696e744d01206368616c6c656e676520726f756e6473206861766520746f20626520616e73776572656420627920414c4c2050726f7669646572732c20616e64207468697320697320656e666f72636564206279207468656820607375626d69745f70726f6f66602065787472696e7369632e884368616c6c656e67655469636b546f4368616c6c656e67656450726f76696465727300010802027d069804002045012041206d617070696e672066726f6d206368616c6c656e6765207469636b20746f206120766563746f72206f66206368616c6c656e6765642050726f76696465727320666f722074686174207469636b2e0049012054686973206973207573656420746f206b65657020747261636b206f66207468652050726f76696465727320746861742068617665206265656e206368616c6c656e6765642c20616e642073686f756c644901207375626d697420612070726f6f66206279207468652074696d65206f6620746865205b604368616c6c656e6765735469636b6572605d207265616368657320746865206e756d62657220757365642061735901206b657920696e20746865206d617070696e672e2050726f7669646572732077686f20646f207375626d697420612070726f6f66206172652072656d6f7665642066726f6d20746865697220726573706563746976653d0120656e74727920616e642070757368656420666f727761726420746f20746865206e657874207469636b20696e20776869636820746865792073686f756c64207375626d697420612070726f6f662e4d012054686f73652077686f20617265207374696c6c20696e2074686520656e747279206279207468652074696d6520746865207469636b20697320726561636865642061726520636f6e7369646572656420746fdc2068617665206661696c656420746f207375626d697420612070726f6f6620616e64207375626a65637420746f20736c617368696e672e884c6173745469636b50726f76696465725375626d69747465644150726f6f66466f7200010402341004002465012041206d617070696e672066726f6d20612050726f766964657220746f20746865206c617374207469636b20666f7220776869636820746865792053484f554c442068617665207375626d697474656420612070726f6f662e3d0120496620666f7220612050726f7669646572206070602c20604c6173745469636b50726f76696465725375626d697474656450726f6f66466f725b705d6020697320606e602c207468656e2074686531012050726f76696465722073686f756c64207375626d697420612070726f6f6620666f72207469636b20606e202b207374616b655f746f5f6368616c6c656e67655f706572696f64287029602e007101205468697320676574732075706461746564207768656e20612050726f7669646572207375626d69747320612070726f6f66207375636365737366756c6c7920616e64206973207573656420746f2064657465726d696e65207468652d01206e657874207469636b20666f72207768696368207468652050726f76696465722073686f756c64207375626d697420612070726f6f662c20616e64206974277320646561646c696e652e007101204966207468652050726f7669646572206661696c7320746f207375626d697420612070726f6f6620696e2074696d6520616e6420697320736c61736865642c20746869732077696c6c207374696c6c206765742075706461746564c820746f20746865207469636b2069742073686f756c642068617665207375626d697474656420612070726f6f6620666f722e3c4368616c6c656e676573517565756501008106040018d02041207175657565206f66206b65797320746861742068617665206265656e206368616c6c656e676564206d616e75616c6c792e0011012054686520656c656d656e747320696e20746869732071756575652077696c6c206265206368616c6c656e67656420696e2074686520636f6d696e6720626c6f636b732c450120616c7761797320656e737572696e67207468617420746865206d6178696d756d206e756d626572206f66206368616c6c656e6765732070657220626c6f636b206973206e6f742065786365656465642e350120412060426f756e64656456656360206973207573656420626563617573652074686520607061726974795f7363616c655f636f6465633a3a4d6178456e636f6465644c656e6020747261697455012069732072657175697265642c20627574207573696e672061206056656344657175656020776f756c64206265206d6f726520656666696369656e7420617320746869732069732061204649464f2071756575652e5c5072696f726974794368616c6c656e676573517565756501008506040028f42041207072696f72697479207175657565206f66206b65797320746861742068617665206265656e206368616c6c656e676564206d616e75616c6c792e0025012054686520646966666572656e6365206265747765656e207468697320616e6420604368616c6c656e676573517565756560206973207468617420746865206368616c6c656e676573290120696e20746869732071756575652061726520676976656e207072696f72697479206f76657220746865206f74686572732e20536f20746869732071756575652073686f756c64206265390120656d7074696564206265666f726520616e79206f6620746865206368616c6c656e67657320696e2074686520604368616c6c656e6765735175657565602061726520646973706174636865642ecc20546869732071756575652073686f756c64206e6f742062652061636365737369626c6520746f20746865207075626c69632e11012054686520656c656d656e747320696e20746869732071756575652077696c6c206265206368616c6c656e67656420696e2074686520636f6d696e6720626c6f636b732c450120616c7761797320656e737572696e67207468617420746865206d6178696d756d206e756d626572206f66206368616c6c656e6765732070657220626c6f636b206973206e6f742065786365656465642e350120412060426f756e64656456656360206973207573656420626563617573652074686520607061726974795f7363616c655f636f6465633a3a4d6178456e636f6465644c656e6020747261697455012069732072657175697265642c20627574207573696e672061206056656344657175656020776f756c64206265206d6f726520656666696369656e7420617320746869732069732061204649464f2071756575652e404368616c6c656e6765735469636b6572010010100000000018e8204120636f756e746572206f6620626c6f636b7320696e207768696368206368616c6c656e67657320776572652064697374726962757465642e004101205468697320636f756e746572206973206e6f74206e65636573736172696c79207468652073616d652061732074686520626c6f636b206e756d6265722c206173206368616c6c656e67657320617265490120646973747269627574656420696e2074686520606f6e5f706f6c6c6020686f6f6b2c2077686963682068617070656e732061742074686520626567696e6e696e67206f6620657665727920626c6f636b2ced0120736f206c6f6e672061732074686520626c6f636b206973206e6f742070617274206f662061205b4d756c74692d426c6f636b2d4d6967726174696f6e5d2868747470733a2f2f6769746875622e636f6d2f706172697479746563682f706f6c6b61646f742d73646b2f70756c6c2f313738312920284d424d292e2d0120447572696e67204d424d736d2c2074686520626c6f636b206e756d62657220696e637265617365732c2062757420604368616c6c656e6765735469636b65726020646f6573206e6f742e48536c61736861626c6550726f7669646572730001040234100400007456616c696450726f6f665375626d6974746572734c6173745469636b730001040210890604001495012041206d617070696e672066726f6d207469636b20746f2050726f7669646572732c20776869636820697320736574206966207468652050726f7669646572207375626d697474656420612076616c69642070726f6f6620696e2074686174207469636b2e005d012054686973206973207573656420746f206b65657020747261636b206f66207468652050726f76696465727320746861742068617665207375626d69747465642070726f6f667320696e20746865206c617374206665779101207469636b732c20776865726520617661696c6162696c697479206f6e6c7920757020746f20746865206c61737420605461726765745469636b7353746f726167654f665375626d69747465727360207469636b732069732067756172616e746565642ea50120546869732073746f72616765206973207468656e206d61646520617661696c61626c6520666f72206f746865722070616c6c65747320746f20757365207468726f7567682074686520605265616450726f6f665375626d697474657273496e74657266616365602e3c4c61737444656c657465645469636b010010100000000010b10120412076616c7565207468617420726570726573656e747320746865206c617374207469636b2074686174207761732064656c657465642066726f6d20746865206056616c696450726f6f665375626d6974746572734c6173745469636b73602053746f726167654d61702e009d012054686973206973207573656420746f206b6e6f77207768696368207469636b20746f2064656c6574652066726f6d20746865206056616c696450726f6f665375626d6974746572734c6173745469636b73602053746f726167654d6170207768656e207468656820606f6e5f69646c656020686f6f6b2069732063616c6c65642e01c904011d02306052616e646f6d4368616c6c656e676573506572426c6f636b10100a00000008510120546865206e756d626572206f662072616e646f6d206368616c6c656e6765732074686174206172652067656e6572617465642070657220626c6f636b2c207573696e67207468652072616e646f6d2073656564682067656e65726174656420666f72207468617420626c6f636b2e6c4d6178437573746f6d4368616c6c656e676573506572426c6f636b10100a000000045d0120546865206d6178696d756d206e756d626572206f6620637573746f6d206368616c6c656e67657320746861742063616e206265206d61646520696e20612073696e676c6520636865636b706f696e7420626c6f636b2e584368616c6c656e6765486973746f72794c656e6774681010640000000ce420546865206e756d626572206f66207469636b732074686174206368616c6c656e67657320686973746f7279206973206b65707420666f722e59012041667465722074686973206d616e79207469636b732c206368616c6c656e676573206172652072656d6f7665642066726f6d20605469636b546f4368616c6c656e67657353656564602053746f726167654d61702e4501204120227469636b2220697320757375616c6c79206f6e6520626c6f636b2c2062757420736f6d6520626c6f636b73206d617920626520736b69707065642064756520746f206d6967726174696f6e732e544368616c6c656e67657351756575654c656e6774681010640000000cc820546865206c656e677468206f662074686520604368616c6c656e6765735175657565602053746f7261676556616c75652e1101205468697320697320746f206c696d6974207468652073697a65206f66207468652071756575652c20616e64207468657265666f726520746865206e756d626572206f6690206d616e75616c206368616c6c656e67657320746861742063616e206265206d6164652e64436865636b706f696e744368616c6c656e6765506572696f6410100a00000024750120546865206e756d626572206f6620626c6f636b7320696e206265747765656e206120636865636b706f696e74206368616c6c656e67657320726f756e642028692e652e207769746820637573746f6d206368616c6c656e676573292e61012054686973206973207573656420746f2064657465726d696e65207768656e20746f20696e636c75646520746865206368616c6c656e6765732066726f6d2074686520604368616c6c656e67657351756575656020616e64710120605072696f726974794368616c6c656e67657351756575656020696e207468652060426c6f636b546f4368616c6c656e676573602053746f726167654d61702e20546865736520636865636b706f696e74206368616c6c656e6765610120726f756e6473206861766520746f20626520616e73776572656420627920414c4c2050726f7669646572732c20616e64207468697320697320656e666f726365642062792074686520607375626d69745f70726f6f66602c2065787472696e7369632e006d01205741524e494e473a205468697320706572696f64206e6565647320746f20626520657175616c206f72206c6172676572207468616e20746865206368616c6c656e676520706572696f64206f662074686520736d616c6c6573747d012050726f766964657220696e20746865206e6574776f726b2e2049662074686520736d616c6c6573742050726f7669646572206861732061206368616c6c656e676520706572696f64206f66203130207469636b732028626c6f636b73292c1101207468656e2074686520636865636b706f696e74206368616c6c656e676520706572696f64206e6565647320746f206265206174206c65617374203130207469636b732e585374616b65546f4368616c6c656e6765506572696f6418400080f420e6b5000000000000000000000cd42054686520726174696f20746f20636f6e76657274207374616b65642062616c616e636520746f20626c6f636b20706572696f642e65012054686973206973207573656420746f2064657465726d696e652074686520706572696f6420696e20776869636820612050726f76696465722073686f756c64207375626d697420612070726f6f662c206261736564206f6ee501207468656972207374616b652e2054686520706572696f642069732063616c63756c6174656420617320605374616b65546f4368616c6c656e6765506572696f64202f207374616b65602c2073617475726174696e67206174205b60436f6e6669673a3a4d696e4368616c6c656e6765506572696f64605d2e484d696e4368616c6c656e6765506572696f6410101e00000004550120546865206d696e696d756d20706572696f6420696e20776869636820612050726f76696465722063616e206265206368616c6c656e6765642c207265676172646c657373206f66207468656972207374616b652e5c4368616c6c656e67655469636b73546f6c6572616e63651010320000001c59012054686520746f6c6572616e636520696e206e756d626572206f66207469636b732028616c6d6f7374206571756976616c656e7420746f20626c6f636b732c2062757420736b697070696e67204d424d292074686174590120612050726f76696465722068617320746f207375626d697420612070726f6f662c20636f756e74696e672066726f6d20746865207469636b20746865206368616c6c656e676520697320656d697474656420666f723c20746861742050726f76696465722e00650120466f72206578616d706c652c20696620612050726f766964657220697320737570706f73656420746f207375626d697420612070726f6f6620666f72207469636b20606e602c20616e642074686520746f6c6572616e636569012069732073657420746f206074602c207468656e207468652050726f76696465722068617320746f207375626d697420612070726f6f6620666f72206368616c6c656e67657320696e207469636b20606e602c206265666f72652420606e202b2074602e344368616c6c656e67657346656518400010a5d4e800000000000000000000000cb02054686520666565206368617267656420666f72207375626d697474696e672061206368616c6c656e67652e550120546869732066656520676f657320746f207468652054726561737572792c20616e64206973207573656420746f2070726576656e74207370616d2e20526567697374657265642050726f7669646572732061726558206578656d70742066726f6d2074686973206665652e785461726765745469636b7353746f726167654f665375626d6974746572731010030000000c89012054686520746172676574206e756d626572206f66207469636b7320666f7220776869636820746f2073746f726520746865207375626d6974746572732074686174207375626d69747465642076616c69642070726f6f667320696e207468656d2cad012073746f72656420696e20746865206056616c696450726f6f665375626d6974746572734c6173745469636b73602053746f726167654d61702e20546861742073746f726167652077696c6c206265207472696d6d656420646f776e20746f2074686973206e756d6265723101206f66207469636b7320696e2074686520606f6e5f69646c656020686f6f6b206f6620746869732070616c6c65742c20746f2061766f696420626c6f6174696e67207468652073746174652e504d61785375626d6974746572735065725469636b1010e8030000102d0120546865206d6178696d756d20616d6f756e74206f662050726f76696465727320746861742063616e207375626d697420612070726f6f6620696e20612073696e676c6520626c6f636b2e410120416c74686f75676820746869732063616e206265207365656e20617320616e20617262697472617279206c696d69742c2069662073657420746f2074686520616c7265616479206578697374696e67410120696d706c69636974206c696d697420746861742069732022686f77206d616e7920607375626d69745f70726f6f66602065787472696e736963732066697420696e2074686520776569676874206f66f0206120626c6f636b2c207468697320776f756c646e27742061646420616e79206164646974696f6e616c206172746966696369616c206c696d69742e20547265617375727900800000000000000000000000000000000000000000000000000000000000000000106020546865205472656173757279204163636f756e7449642e5820546865206163636f756e7420746f2077686963683adc202d20546865206665657320666f72207375626d697474696e672061206368616c6c656e676520617265207472616e736665727265642e94202d2054686520736c61736865642066756e647320617265207472616e736665727265642e0191062a2852616e646f6d6e657373012852616e646f6d6e657373106c4c61746573744f6e6545706f636841676f52616e646f6d6e657373000095060400042d02204c61746573742072616e646f6d2073656564206f627461696e65642066726f6d20746865206f6e652065706f63682061676f2072616e646f6d6e6573732066726f6d20424142452c20616e6420746865206c617465737420626c6f636b20746861742069742063616e2070726f636573732072616e646f6d6e6573732072657175657374732066726f6d6c4c6174657374506172656e74426c6f636b52616e646f6d6e657373000095060400042902204c61746573742072616e646f6d2073656564206f627461696e65642066726f6d2074686520706172656e7420626c6f636b2072616e646f6d6e6573732066726f6d20424142452c20616e6420746865206c617465737420626c6f636b20746861742069742063616e2070726f636573732072616e646f6d6e6573732072657175657374732066726f6d2852656c617945706f636801003020000000000000000004502043757272656e742072656c61792065706f636840496e686572656e74496e636c75646564000098040004e420456e737572657320746865206d616e6461746f727920696e686572656e742077617320696e636c7564656420696e2074686520626c6f636b01cd0401650200002b385061796d656e7453747265616d7301385061796d656e7453747265616d7320304f6e506f6c6c5469636b65720100101000000000180901204120636f756e746572206f6620626c6f636b7320666f722077686963682050726f7669646572732063616e206368617267652074686569722073747265616d732e009d01205468697320636f756e746572206973206e6f74206e65636573736172696c79207468652073616d652061732074686520626c6f636b206e756d6265722c20617320746865206c6173742063686172676561626c6520696e666f206f662050726f766964657273bd012028616e642074686520676c6f62616c20707269636520696e6465782920617265207570646174656420696e2074686520606f6e5f706f6c6c6020686f6f6b2c2077686963682068617070656e732061742074686520626567696e6e696e67206f6620657665727920626c6f636b2ced0120736f206c6f6e672061732074686520626c6f636b206973206e6f742070617274206f662061205b4d756c74692d426c6f636b2d4d6967726174696f6e5d2868747470733a2f2f6769746875622e636f6d2f706172697479746563682f706f6c6b61646f742d73646b2f70756c6c2f313738312920284d424d292e190120447572696e67204d424d732c2074686520626c6f636b206e756d62657220696e637265617365732c2062757420604f6e506f6c6c5469636b65726020646f6573206e6f742e5c4669786564526174655061796d656e7453747265616d73000108020299069d0604002481012054686520646f75626c65206d617070696e672066726f6d20612050726f76696465722c20746f206974732070726f76696465642055736572732c20746f2074686569722066697865642d72617465207061796d656e742073747265616d732e0065012054686973206973207573656420746f2073746f726520616e64206d616e6167652066697865642d72617465207061796d656e742073747265616d73206265747765656e20557365727320616e642050726f7669646572732e007020546869732073746f72616765206973207570646174656420696e3aed01202d205b6164645f66697865645f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a6164645f66697865645f726174655f7061796d656e745f73747265616d292c20776869636820616464732061206e657720656e74727920746f20746865206d61702e4902202d205b64656c6574655f66697865645f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a64656c6574655f66697865645f726174655f7061796d656e745f73747265616d292c2077686963682072656d6f7665732074686520636f72726573706f6e64696e6720656e7472792066726f6d20746865206d61702e0102202d205b7570646174655f66697865645f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a7570646174655f66697865645f726174655f7061796d656e745f73747265616d292c20776869636820757064617465732074686520656e7472792773206072617465602ee501202d205b6368617267655f7061796d656e745f73747265616d735d2863726174653a3a646973706174636861626c65733a3a6368617267655f7061796d656e745f73747265616d73292c20776869636820757064617465732074686520656e747279277320606c6173745f636861726765645f7469636b602e6444796e616d6963526174655061796d656e7453747265616d7300010802029906a10604002489012054686520646f75626c65206d617070696e672066726f6d20612050726f76696465722c20746f206974732070726f76696465642055736572732c20746f2074686569722064796e616d69632d72617465207061796d656e742073747265616d732e006d012054686973206973207573656420746f2073746f726520616e64206d616e6167652064796e616d69632d72617465207061796d656e742073747265616d73206265747765656e20557365727320616e642050726f7669646572732e007020546869732073746f72616765206973207570646174656420696e3afd01202d205b6164645f64796e616d69635f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a6164645f64796e616d69635f726174655f7061796d656e745f73747265616d292c20776869636820616464732061206e657720656e74727920746f20746865206d61702e5902202d205b64656c6574655f64796e616d69635f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a64656c6574655f64796e616d69635f726174655f7061796d656e745f73747265616d292c2077686963682072656d6f7665732074686520636f72726573706f6e64696e6720656e7472792066726f6d20746865206d61702e3d02202d205b7570646174655f64796e616d69635f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a7570646174655f64796e616d69635f726174655f7061796d656e745f73747265616d292c20776869636820757064617465732074686520656e74727927732060616d6f756e745f70726f7669646564602e1502202d205b6368617267655f7061796d656e745f73747265616d735d2863726174653a3a646973706174636861626c65733a3a6368617267655f7061796d656e745f73747265616d73292c20776869636820757064617465732074686520656e7472792773206070726963655f696e6465785f7768656e5f6c6173745f63686172676564602e484c61737443686172676561626c65496e666f0101040234a50650000000000000000000000000000000000000000018750220546865206d617070696e672066726f6d20612050726f766964657220746f20697473206c6173742063686172676561626c6520707269636520696e6465782028666f722064796e616d69632d72617465207061796d656e742073747265616d732920616e64206c6173742063686172676561626c65207469636b2028666f722066697865642d72617465207061796d656e742073747265616d73292e0069022054686973206973207573656420746f206b65657020747261636b206f6620746865206c6173742063686172676561626c6520707269636520696e64657820616e64207469636b206e756d62657220666f7220656163682050726f76696465722c20736f20746869732070616c6c65742063616e2063686172676520746865207061796d656e742073747265616d7320636f72726563746c792e007020546869732073746f72616765206973207570646174656420696e3a6502202d205b7570646174655f6c6173745f63686172676561626c655f696e666f5d2863726174653a3a5061796d656e744d616e616765723a3a7570646174655f6c6173745f63686172676561626c655f696e666f292c20776869636820757064617465732074686520656e747279277320606c6173745f63686172676561626c655f7469636b6020616e64206070726963655f696e646578602e445573657273576974686f757446756e6473000104020010040020c50120546865206d617070696e672066726f6d2061207573657220746f20696620697420686173206265656e20666c616767656420666f72206e6f7420686176696e6720656e6f7567682066756e647320746f2070617920666f7220697473207265717565737465642073657276696365732e00c5012054686973206973207573656420746f20666c6167207573657273207468617420646f206e6f74206861766520656e6f7567682066756e647320746f2070617920666f72207468656972207265717565737465642073657276696365732c20736f206f746865722050726f766964657273942063616e2073746f702070726f766964696e6720736572766963657320746f207468656d2e007020546869732073746f72616765206973207570646174656420696e3a9902202d205b6368617267655f7061796d656e745f73747265616d735d2863726174653a3a646973706174636861626c65733a3a6368617267655f7061796d656e745f73747265616d73292c20776869636820656d6974732061206055736572576974686f757446756e647360206576656e7420616e642073657473207468652075736572277320656e74727920696e2074686973206d617020696620697420646f6573206e6f745501206861766520656e6f7567682066756e64732c20616e6420636c656172732074686520656e747279206966206974207761732073657420616e642074686520757365722068617320656e6f7567682066756e64732e3c526567697374657265645573657273010104020010100000000028b90120546865206d617070696e672066726f6d2061207573657220746f20696620697420686173206265656e207265676973746572656420746f20746865206e6574776f726b20616e642074686520616d6f756e74206f66207061796d656e742073747265616d73206974206861732e0029022053696e6365207573657273206861766520746f2070726f766964652061206465706f73697420746f2062652061626c6520746f206f70656e2065616368207061796d656e742073747265616d2c2074686973206973207573656420746f206b65657020747261636b206f662074686520616d6f756e74206f66207061796d656e742073747265616d7361012074686174206120757365722068617320616e6420697420697320616c736f2075736566756c20746f20636865636b2069662061207573657220686173207265676973746572656420746f20746865206e6574776f726b2e007020546869732073746f72616765206973207570646174656420696e3a6902202d205b6164645f66697865645f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a6164645f66697865645f726174655f7061796d656e745f73747265616d292c20776869636820686f6c647320746865206465706f736974206f6620746865207573657220616e642061646473206f6e6520746f20746869732073746f726167652e7902202d205b6164645f64796e616d69635f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a6164645f64796e616d69635f726174655f7061796d656e745f73747265616d292c20776869636820686f6c647320746865206465706f736974206f6620746865207573657220616e642061646473206f6e6520746f20746869732073746f726167652e7102202d205b72656d6f76655f66697865645f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a72656d6f76655f66697865645f726174655f7061796d656e745f73747265616d292c2077686963682072656d6f766573206f6e652066726f6d20746869732073746f7261676520616e642072656c656173657320746865206465706f7369742e8102202d205b72656d6f76655f64796e616d69635f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a72656d6f76655f64796e616d69635f726174655f7061796d656e745f73747265616d292c2077686963682072656d6f766573206f6e652066726f6d20746869732073746f7261676520616e642072656c656173657320746865206465706f7369742e6843757272656e745072696365506572556e69745065725469636b0100184000000000000000000000000000000000181902205468652063757272656e742070726963652070657220756e697420706572207469636b206f66207468652070726f766964656420736572766963652c207573656420746f2063616c63756c6174652074686520616d6f756e7420746f2063686172676520666f722064796e616d69632d72617465207061796d656e742073747265616d732e009102205468697320697320757064617465642065616368207469636b207573696e672074686520666f726d756c61207468617420636f6e7369646572732063757272656e742073797374656d2063617061636974792028746f74616c2073746f72616765206f66207468652073797374656d2920616e642073797374656d20617661696c6162696c6974792028746f74616c2073746f7261676520617661696c61626c65292e007020546869732073746f72616765206973207570646174656420696e3a6d02202d205b646f5f7570646174655f63757272656e745f70726963655f7065725f756e69745f7065725f7469636b5d2863726174653a3a7574696c733a3a646f5f7570646174655f63757272656e745f70726963655f7065725f756e69745f7065725f7469636b292c2077686963682075706461746573207468652063757272656e742070726963652070657220756e697420706572207469636b2e54416363756d756c617465645072696365496e646578010018400000000000000000000000000000000020d1012054686520616363756d756c6174656420707269636520696e6465782073696e63652067656e657369732c207573656420746f2063616c63756c6174652074686520616d6f756e7420746f2063686172676520666f722064796e616d69632d72617465207061796d656e742073747265616d732e00f1012054686973206973206571756976616c656e7420746f207768617420697420776f756c64206861766520636f737420746f2073746f7265206f6e6520756e6974206f66207468652070726f766964656420736572766963652073696e63652074686520626567696e6e696e67206f6620746865206e6574776f726b2e050220576520757365207468697320746f2063616c63756c6174652074686520616d6f756e7420746f2063686172676520666f722064796e616d69632d72617465207061796d656e742073747265616d732c20627920636865636b696e67206f75742074686520646966666572656e6365206265747765656e2074686520696e6465785501207768656e20746865207061796d656e742073747265616d20776173206c61737420636861726765642c20616e642074686520696e64657820617420746865206c6173742063686172676561626c65207469636b2e007020546869732073746f72616765206973207570646174656420696e3a2d02202d205b646f5f7570646174655f70726963655f696e6465785d2863726174653a3a7574696c733a3a646f5f7570646174655f70726963655f696e646578292c20776869636820757064617465732074686520616363756d756c6174656420707269636520696e6465782c20616464696e6720746f206974207468652063757272656e742070726963652e01d10401690208404e657753747265616d4465706f73697410100a00000014910120546865206e756d626572206f66207469636b73207468617420636f72726573706f6e6420746f20746865206465706f7369742074686174206120557365722068617320746f2070617920746f206f70656e2061207061796d656e742073747265616d2ea1012054686973206d65616e7320746861742c2066726f6d207468652062616c616e6365206f6620746865205573657220666f7220776869636820746865207061796d656e742073747265616d206973206265696e6720637265617465642c2074686520616d6f756e74d420604e657753747265616d4465706f736974202a2072617465602077696c6c2062652068656c642061732061206465706f7369742e250220496e207468652063617365206f662064796e616d69632d72617465207061796d656e742073747265616d732c206072617465602077696c6c2062652060616d6f756e745f70726f7669646564202a2063757272656e745f736572766963655f7072696365602c207768657265206063757272656e745f736572766963655f70726963656020686173310120746f2062652070726f7669646564206279207468652070616c6c6574207573696e672074686520605061796d656e7453747265616d73496e746572666163656020696e746572666163652e6055736572576974686f757446756e6473436f6f6c646f776e10106400000008ed0120546865206e756d626572206f66207469636b732074686174206120757365722077696c6c206861766520746f207761697420616674657220697420686173206265656e20666c616767656420617320776974686f75742066756e647320746f2062652061626c6520746f20636c656172207468617420666c6167c90120616e642062652061626c6520746f2070617920666f7220736572766963657320616761696e2e204966207468657265277320616e79206f75747374616e64696e672064656274207768656e2074686520666c616720697320636c65617265642c2069742077696c6c20626520706169642e01a9062c284275636b65744e6674730001d504016d020001ad062d104e66747301104e6674733c28436f6c6c656374696f6e0001040210b106040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402001004000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c020202b50698040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e44436f6c6c656374696f6e4163636f756e740001080202b9069804000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e40436f6c6c656374696f6e526f6c654f660001080202bd06c106040008d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732ea02053746f72657320636f6c6c656374696f6e20726f6c657320617320706572206163636f756e742e104974656d00010802029d02c906040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e50436f6c6c656374696f6e4d657461646174614f660001040210e10604000468204d65746164617461206f66206120636f6c6c656374696f6e2e384974656d4d657461646174614f6600010802029d02e50604000454204d65746164617461206f6620616e206974656d2e2441747472696275746500011002020202ed06f106040004702041747472696275746573206f66206120636f6c6c656374696f6e2e2c4974656d50726963654f6600010802029d02f906040004502041207072696365206f6620616e206974656d2e644974656d41747472696275746573417070726f76616c734f6601010802029d02fd0604000468204974656d2061747472696275746520617070726f76616c732e404e657874436f6c6c656374696f6e496400001004000831012053746f726573207468652060436f6c6c656374696f6e496460207468617420697320676f696e6720746f206265207573656420666f7220746865206e65787420636f6c6c656374696f6e2ef02054686973206765747320696e6372656d656e746564207768656e657665722061206e657720636f6c6c656374696f6e20697320637265617465642e3450656e64696e67537761704f6600010802029d0205070400047c2048616e646c657320616c6c207468652070656e64696e672073776170732e48436f6c6c656374696f6e436f6e6669674f660001040210e1040400046020436f6e666967206f66206120636f6c6c656374696f6e2e304974656d436f6e6669674f6600010802029d020d050400044c20436f6e666967206f6620616e206974656d2e01dd040171023844436f6c6c656374696f6e4465706f736974184000407a10f35a000000000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f73697418400010a5d4e8000000000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f73697442617365184000a0724e180900000000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f73697442617365184000a0724e1809000000000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f7369745065724279746518400010a5d4e8000000000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410100001000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410104000000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410100001000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e38417070726f76616c734c696d697410101400000004a820546865206d6178696d756d20617070726f76616c7320616e206974656d20636f756c6420686176652e704974656d41747472696275746573417070726f76616c734c696d697410101400000004d420546865206d6178696d756d206174747269627574657320617070726f76616c7320616e206974656d20636f756c6420686176652e1c4d61785469707310100a00000004a820546865206d6178206e756d626572206f6620746970732061207573657220636f756c642073656e642e4c4d6178446561646c696e654475726174696f6e1010001a4f0004a820546865206d6178206475726174696f6e20696e20626c6f636b7320666f7220646561646c696e65732e504d61784174747269627574657350657243616c6c10100a00000004e020546865206d6178206e756d626572206f6620617474726962757465732061207573657220636f756c6420736574207065722063616c6c2e204665617475726573090720000000000000000004902044697361626c657320736f6d65206f662070616c6c657427732066656174757265732e011107321507042448436865636b4e6f6e5a65726f53656e6465721d079840436865636b5370656356657273696f6e21071038436865636b547856657273696f6e25071030436865636b47656e6573697329073438436865636b4d6f7274616c6974792d073428436865636b4e6f6e63653507982c436865636b576569676874390798604368617267655472616e73616374696f6e5061796d656e743d07985053746f726167655765696768745265636c61696d4107984507","id":"1"} \ No newline at end of file +{"jsonrpc":"2.0","result":"0x6d6574610e4d07000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050000240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006300030000005060034083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d00003800000208003c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677340013c5665633c4469676573744974656d3e000040000002440044102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e00060024436f6e73656e7375730800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000400105365616c0800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000500144f74686572040038011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000480000030400000008004c00000250005008306672616d655f73797374656d2c4576656e745265636f7264080445015404540134000c011470686173659502011450686173650001146576656e7454010445000118746f70696373190201185665633c543e000054084c73746f726167655f6875625f72756e74696d653052756e74696d654576656e740001481853797374656d04005801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000003c50617261636861696e53797374656d04007c01bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0001002042616c616e636573040084017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000a00485472616e73616374696f6e5061796d656e7404008c01a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e000b00105375646f040090016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e000f0044436f6c6c61746f7253656c656374696f6e0400a001a470616c6c65745f636f6c6c61746f725f73656c656374696f6e3a3a4576656e743c52756e74696d653e0015001c53657373696f6e0400a8015470616c6c65745f73657373696f6e3a3a4576656e740016002458636d7051756575650400ac01a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e001e002c506f6c6b61646f7458636d0400b0016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e001f002843756d756c757358636d0400dd01018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e002000304d65737361676551756575650400e101019070616c6c65745f6d6573736167655f71756575653a3a4576656e743c52756e74696d653e0021002450726f7669646572730400f10101a070616c6c65745f73746f726167655f70726f7669646572733a3a4576656e743c52756e74696d653e0028002846696c6553797374656d04000902018870616c6c65745f66696c655f73797374656d3a3a4576656e743c52756e74696d653e0029003050726f6f66734465616c657204001d02019070616c6c65745f70726f6f66735f6465616c65723a3a4576656e743c52756e74696d653e002a002852616e646f6d6e65737304006502018470616c6c65745f72616e646f6d6e6573733a3a4576656e743c52756e74696d653e002b00385061796d656e7453747265616d7304006902019870616c6c65745f7061796d656e745f73747265616d733a3a4576656e743c52756e74696d653e002c00284275636b65744e66747304006d02018870616c6c65745f6275636b65745f6e6674733a3a4576656e743c52756e74696d653e002d00104e66747304007102016c70616c6c65745f6e6674733a3a4576656e743c52756e74696d653e00320000580c306672616d655f73797374656d1870616c6c6574144576656e7404045400011c4045787472696e7369635375636365737304013464697370617463685f696e666f5c01304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7268013444697370617463684572726f7200013464697370617463685f696e666f5c01304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736834011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e5c0c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874280118576569676874000114636c6173736001344469737061746368436c617373000120706179735f666565640110506179730000600c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000640c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000068082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504006c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400700128546f6b656e4572726f720007002841726974686d65746963040074013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007801485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d00006c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7248018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000070082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000074083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000078082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007c0c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e740404540001186056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d10015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e60446f776e776172644d657373616765735265636569766564040114636f756e7410010c7533320003040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564280118576569676874000120646d715f6865616434014472656c61795f636861696e3a3a48617368000404e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f6861736880013c4f7074696f6e3c58636d486173683e000504b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748004184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000840c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001581c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738801185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001504ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748814346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e63655374617475730001081046726565000000205265736572766564000100008c0c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574900c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400011014537564696404012c7375646f5f726573756c749401384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e00047041207375646f2063616c6c206a75737420746f6f6b20706c6163652e284b65794368616e67656408010c6f6c649c01504f7074696f6e3c543a3a4163636f756e7449643e04b4546865206f6c64207375646f206b657920286966206f6e65207761732070726576696f75736c7920736574292e010c6e6577000130543a3a4163636f756e7449640488546865206e6577207375646f206b657920286966206f6e652077617320736574292e010478546865207375646f206b657920686173206265656e20757064617465642e284b657952656d6f76656400020480546865206b657920776173207065726d616e656e746c792072656d6f7665642e285375646f4173446f6e6504012c7375646f5f726573756c749401384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e0304c841205b7375646f5f61735d2850616c6c65743a3a7375646f5f6173292063616c6c206a75737420746f6f6b20706c6163652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574940418526573756c740804540198044501680108084f6b040098000000000c45727204006800000100009800000400009c04184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000a00c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144576656e74040454000128404e6577496e76756c6e657261626c6573040134696e76756c6e657261626c6573a401445665633c543a3a4163636f756e7449643e0000046c4e657720496e76756c6e657261626c65732077657265207365742e44496e76756c6e657261626c6541646465640401286163636f756e745f6964000130543a3a4163636f756e7449640001047441206e657720496e76756c6e657261626c65207761732061646465642e4c496e76756c6e657261626c6552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e74496400020470416e20496e76756c6e657261626c65207761732072656d6f7665642e504e65774465736972656443616e64696461746573040148646573697265645f63616e6469646174657310010c753332000304a4546865206e756d626572206f6620646573697265642063616e6469646174657320776173207365742e404e657743616e646964616379426f6e6404012c626f6e645f616d6f756e7418013042616c616e63654f663c543e0004046c5468652063616e64696461637920626f6e6420776173207365742e3843616e64696461746541646465640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e0005045c41206e65772063616e646964617465206a6f696e65642e5043616e646964617465426f6e64557064617465640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e00060470426f6e64206f6620612063616e64696461746520757064617465642e4043616e64696461746552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e74496400070460412063616e646964617465207761732072656d6f7665642e4443616e6469646174655265706c616365640c010c6f6c64000130543a3a4163636f756e74496400010c6e6577000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804f4416e206163636f756e7420776173207265706c6163656420696e207468652063616e646964617465206c69737420627920616e6f74686572206f6e652e68496e76616c6964496e76756c6e657261626c65536b69707065640401286163636f756e745f6964000130543a3a4163636f756e7449640009085501416e206163636f756e742077617320756e61626c6520746f20626520616464656420746f2074686520496e76756c6e657261626c65732062656361757365207468657920646964206e6f742068617665206b657973c8726567697374657265642e204f7468657220496e76756c6e657261626c6573206d61792068617665206265656e207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a40000020000a80c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ac0c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e740404540001043c58636d704d65737361676553656e740401306d6573736167655f6861736804011c58636d48617368000004c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b00c2870616c6c65745f78636d1870616c6c6574144576656e7404045400016024417474656d7074656404011c6f7574636f6d65b4015078636d3a3a6c61746573743a3a4f7574636f6d65000004a8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e1053656e741001186f726967696ebc01204c6f636174696f6e00012c64657374696e6174696f6ebc01204c6f636174696f6e00011c6d6573736167650501011c58636d3c28293e0001286d6573736167655f696404011c58636d486173680001045c412058434d206d657373616765207761732073656e742e48556e6578706563746564526573706f6e73650801186f726967696ebc01204c6f636174696f6e00012071756572795f696430011c5175657279496400020c5901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e34526573706f6e7365526561647908012071756572795f696430011c51756572794964000120726573706f6e736531010120526573706f6e73650003085d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e204e6f7469666965640c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380004085901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e404e6f746966794f76657277656967687414012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800013461637475616c5f77656967687428011857656967687400014c6d61785f62756467657465645f77656967687428011857656967687400050c4901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e5901636f756c64206e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e4c4e6f7469667944697370617463684572726f720c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380006085501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e484e6f746966794465636f64654661696c65640c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800070c5101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e40496e76616c6964526573706f6e6465720c01186f726967696ebc01204c6f636174696f6e00012071756572795f696430011c5175657279496400014465787065637465645f6c6f636174696f6e550101404f7074696f6e3c4c6f636174696f6e3e00080c5901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5c496e76616c6964526573706f6e64657256657273696f6e0801186f726967696ebc01204c6f636174696f6e00012071756572795f696430011c5175657279496400091c5101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e34526573706f6e736554616b656e04012071756572795f696430011c51756572794964000a04c8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e34417373657473547261707065640c011068617368340110483235360001186f726967696ebc01204c6f636174696f6e0001186173736574737501013c56657273696f6e6564417373657473000b04b8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e5456657273696f6e4368616e67654e6f74696669656410012c64657374696e6174696f6ebc01204c6f636174696f6e000118726573756c7410012858636d56657273696f6e000110636f7374110101184173736574730001286d6573736167655f696404011c58636d48617368000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e5c537570706f7274656456657273696f6e4368616e6765640801206c6f636174696f6ebc01204c6f636174696f6e00011c76657273696f6e10012858636d56657273696f6e000d08390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e504e6f7469667954617267657453656e644661696c0c01206c6f636174696f6ebc01204c6f636174696f6e00012071756572795f696430011c517565727949640001146572726f72b8012058636d4572726f72000e0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e644e6f746966795461726765744d6967726174696f6e4661696c0801206c6f636174696f6ed901014456657273696f6e65644c6f636174696f6e00012071756572795f696430011c51756572794964000f0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e54496e76616c69645175657269657256657273696f6e0801186f726967696ebc01204c6f636174696f6e00012071756572795f696430011c5175657279496400101c5501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e38496e76616c6964517565726965721001186f726967696ebc01204c6f636174696f6e00012071756572795f696430011c5175657279496400014065787065637465645f71756572696572bc01204c6f636174696f6e0001506d617962655f61637475616c5f71756572696572550101404f7074696f6e3c4c6f636174696f6e3e00110c5d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5056657273696f6e4e6f74696679537461727465640c012c64657374696e6174696f6ebc01204c6f636174696f6e000110636f7374110101184173736574730001286d6573736167655f696404011c58636d486173680012085901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e5856657273696f6e4e6f746966795265717565737465640c012c64657374696e6174696f6ebc01204c6f636174696f6e000110636f7374110101184173736574730001286d6573736167655f696404011c58636d486173680013043d015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e642075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e6056657273696f6e4e6f74696679556e7265717565737465640c012c64657374696e6174696f6ebc01204c6f636174696f6e000110636f7374110101184173736574730001286d6573736167655f696404011c58636d4861736800140825015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765386e6f74696669636174696f6e732e204665657350616964080118706179696e67bc01204c6f636174696f6e0001106665657311010118417373657473001504310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e34417373657473436c61696d65640c011068617368340110483235360001186f726967696ebc01204c6f636174696f6e0001186173736574737501013c56657273696f6e6564417373657473001604c0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e20617373657420747261706056657273696f6e4d6967726174696f6e46696e697368656404011c76657273696f6e10012858636d56657273696f6e00170484412058434d2076657273696f6e206d6967726174696f6e2066696e69736865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b4102c73746167696e675f78636d087634187472616974731c4f7574636f6d6500010c20436f6d706c6574650401107573656428011857656967687400000028496e636f6d706c657465080110757365642801185765696768740001146572726f72b801144572726f72000100144572726f720401146572726f72b801144572726f7200020000b8100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040030010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002801185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d697400270000bc102c73746167696e675f78636d087634206c6f636174696f6e204c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72c001244a756e6374696f6e730000c0102c73746167696e675f78636d087634246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400c401484172633c5b4a756e6374696f6e3b20315d3e0001000858320400e801484172633c5b4a756e6374696f6e3b20325d3e0002000858330400ec01484172633c5b4a756e6374696f6e3b20335d3e0003000858340400f001484172633c5b4a756e6374696f6e3b20345d3e0004000858350400f401484172633c5b4a756e6374696f6e3b20355d3e0005000858360400f801484172633c5b4a756e6374696f6e3b20365d3e0006000858370400fc01484172633c5b4a756e6374696f6e3b20375d3e0007000858380400010101484172633c5b4a756e6374696f6e3b20385d3e00080000c400000301000000c800c8102c73746167696e675f78636d087634206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400cc010c7533320000002c4163636f756e744964333208011c6e6574776f726bd001444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bd001444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726bd001444f7074696f6e3c4e6574776f726b49643e00010c6b6579d801205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400dc0110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964e00118426f6479496400011070617274e40120426f6479506172740008003c476c6f62616c436f6e73656e7375730400d401244e6574776f726b496400090000cc0000061000d004184f7074696f6e04045401d40108104e6f6e6500000010536f6d650400d40000010000d4102c73746167696e675f78636d087634206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657230010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a0000d8000003140000000800dc0000061800e0100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040048011c5b75383b20345d00010014496e6465780400cc010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000e4100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74cc010c753332000100204672616374696f6e08010c6e6f6dcc010c75333200011464656e6f6dcc010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dcc010c75333200011464656e6f6dcc010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dcc010c75333200011464656e6f6dcc010c75333200040000e800000302000000c800ec00000303000000c800f000000304000000c800f400000305000000c800f800000306000000c800fc00000307000000c800010100000308000000c80005010c2c73746167696e675f78636d0876340c58636d041043616c6c00000400090101585665633c496e737472756374696f6e3c43616c6c3e3e000009010000020d01000d010c2c73746167696e675f78636d0876342c496e737472756374696f6e041043616c6c0001c03457697468647261774173736574040011010118417373657473000000545265736572766541737365744465706f7369746564040011010118417373657473000100585265636569766554656c65706f727465644173736574040011010118417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736531010120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572550101404f7074696f6e3c4c6f636174696f6e3e000300345472616e7366657241737365740801186173736574731101011841737365747300012c62656e6566696369617279bc01204c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574731101011841737365747300011064657374bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64590101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c5d01014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572cc010c7533320001406d61785f6d6573736167655f73697a65cc010c7533320001306d61785f6361706163697479cc010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74cc010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72cc010c75333200011873656e646572cc010c753332000124726563697069656e74cc010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400c00140496e746572696f724c6f636174696f6e000b002c5265706f72744572726f720400610101445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574736501012c417373657446696c74657200012c62656e6566696369617279bc01204c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574736501012c417373657446696c74657200011064657374bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e000e003445786368616e676541737365740c0110676976656501012c417373657446696c74657200011077616e741101011841737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574736501012c417373657446696c74657200011c72657365727665bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574736501012c417373657446696c74657200011064657374bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f610101445175657279526573706f6e7365496e666f0001186173736574736501012c417373657446696c74657200120030427579457865637574696f6e080110666565731901011441737365740001307765696768745f6c696d69747101012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000501012458636d3c43616c6c3e0015002c536574417070656e64697804000501012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473110101184173736574730001187469636b6574bc01204c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e4173736574040011010118417373657473001c002c4578706563744173736574040011010118417373657473001d00304578706563744f726967696e0400550101404f7074696f6e3c4c6f636174696f6e3e001e002c4578706563744572726f720400350101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304004d0101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f610101445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578cc010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72cc010c75333200013c6d696e5f63726174655f6d696e6f72cc010c753332002200505265706f72745472616e736163745374617475730400610101445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400c801204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bd401244e6574776f726b496400012c64657374696e6174696f6ec00140496e746572696f724c6f636174696f6e00010c78636d0501011c58636d3c28293e002600244c6f636b41737365740801146173736574190101144173736574000120756e6c6f636b6572bc01204c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574190101144173736574000118746172676574bc01204c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365741901011441737365740001146f776e6572bc01204c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365741901011441737365740001186c6f636b6572bc01204c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400bc01204c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747101012c5765696768744c696d6974000130636865636b5f6f726967696e550101404f7074696f6e3c4c6f636174696f6e3e002f00001101102c73746167696e675f78636d0876341461737365741841737365747300000400150101285665633c41737365743e000015010000021901001901102c73746167696e675f78636d087634146173736574144173736574000008010869641d01011c4173736574496400010c66756e2101012c46756e676962696c69747900001d01102c73746167696e675f78636d0876341461737365741c4173736574496400000400bc01204c6f636174696f6e00002101102c73746167696e675f78636d0876341461737365742c46756e676962696c6974790001082046756e6769626c650400dc0110753132380000002c4e6f6e46756e6769626c650400250101344173736574496e7374616e6365000100002501102c73746167696e675f78636d087634146173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400dc01107531323800010018417272617934040048011c5b75383b20345d0002001841727261793804002901011c5b75383b20385d0003001c4172726179313604002d0101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d0005000029010000030800000008002d0100000310000000080031010c2c73746167696e675f78636d08763420526573706f6e7365000118104e756c6c000000184173736574730400110101184173736574730001003c457865637574696f6e526573756c740400350101504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f04003d010198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c7404004d0101384d617962654572726f72436f646500050000350104184f7074696f6e0404540139010108104e6f6e6500000010536f6d6504003901000001000039010000040810b8003d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014101045300000400490101185665633c543e000041010c2c73746167696e675f78636d0876342850616c6c6574496e666f0000180114696e646578cc010c7533320001106e616d6545010180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d6545010180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72cc010c7533320001146d696e6f72cc010c7533320001147061746368cc010c753332000045010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000049010000024101004d010c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f7204005101018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f7204005101018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e0002000051010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000550104184f7074696f6e04045401bc0108104e6f6e6500000010536f6d650400bc000001000059010c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d000300005d010c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656438011c5665633c75383e000061010c2c73746167696e675f78636d087634445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ebc01204c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400006501102c73746167696e675f78636d0876341461737365742c417373657446696c74657200010820446566696e6974650400110101184173736574730000001057696c6404006901012457696c644173736574000100006901102c73746167696e675f78636d0876341461737365742457696c6441737365740001100c416c6c00000014416c6c4f6608010869641d01011c4173736574496400010c66756e6d01013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400cc010c75333200020030416c6c4f66436f756e7465640c010869641d01011c4173736574496400010c66756e6d01013c57696c6446756e676962696c697479000114636f756e74cc010c753332000300006d01102c73746167696e675f78636d0876341461737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000071010c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400280118576569676874000100007501080c78636d3c56657273696f6e656441737365747300010c08563204007901013c76323a3a4d756c74694173736574730001000856330400ad01013c76333a3a4d756c746941737365747300030008563404001101012876343a3a417373657473000400007901100c78636d087632286d756c746961737365742c4d756c7469417373657473000004007d01013c5665633c4d756c746941737365743e00007d010000028101008101100c78636d087632286d756c74696173736574284d756c74694173736574000008010869648501011c4173736574496400010c66756ea501012c46756e676962696c69747900008501100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400890101344d756c74694c6f636174696f6e000000204162737472616374040038011c5665633c75383e000100008901100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f728d0101244a756e6374696f6e7300008d01100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400910101204a756e6374696f6e0001000858320800910101204a756e6374696f6e0000910101204a756e6374696f6e0002000858330c00910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0003000858341000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0004000858351400910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0005000858361800910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0006000858371c00910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0007000858382000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e0000910101204a756e6374696f6e000800009101100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400cc010c7533320000002c4163636f756e744964333208011c6e6574776f726b950101244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b950101244e6574776f726b4964000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b950101244e6574776f726b496400010c6b6579d801205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400dc0110753132380005002847656e6572616c4b65790400990101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c69747908010869649d010118426f6479496400011070617274a1010120426f6479506172740008000095010c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400990101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d610003000099010c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003801185665633c543e00009d010c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400990101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400cc010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000a1010c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74cc010c753332000100204672616374696f6e08010c6e6f6dcc010c75333200011464656e6f6dcc010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dcc010c75333200011464656e6f6dcc010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dcc010c75333200011464656e6f6dcc010c75333200040000a501100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400dc0110753132380000002c4e6f6e46756e6769626c650400a90101344173736574496e7374616e636500010000a901100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400dc01107531323800010018417272617934040048011c5b75383b20345d0002001841727261793804002901011c5b75383b20385d0003001c4172726179313604002d0101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040038011c5665633c75383e00060000ad01100c78636d087633286d756c746961737365742c4d756c746941737365747300000400b101013c5665633c4d756c746941737365743e0000b101000002b50100b501100c78636d087633286d756c74696173736574284d756c7469417373657400000801086964b901011c4173736574496400010c66756ed101012c46756e676962696c6974790000b901100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400bd0101344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d00010000bd01102c73746167696e675f78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72c10101244a756e6374696f6e730000c101100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400c50101204a756e6374696f6e0001000858320800c50101204a756e6374696f6e0000c50101204a756e6374696f6e0002000858330c00c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0003000858341000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0004000858351400c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0005000858361800c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0006000858371c00c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0007000858382000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e0000c50101204a756e6374696f6e00080000c501100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400cc010c7533320000002c4163636f756e744964333208011c6e6574776f726bc90101444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bc90101444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726bc90101444f7074696f6e3c4e6574776f726b49643e00010c6b6579d801205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400dc0110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964e00118426f6479496400011070617274e40120426f6479506172740008003c476c6f62616c436f6e73656e7375730400cd0101244e6574776f726b496400090000c90104184f7074696f6e04045401cd010108104e6f6e6500000010536f6d650400cd010000010000cd01100c78636d087633206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657230010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a0000d101100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400dc0110753132380000002c4e6f6e46756e6769626c650400d50101344173736574496e7374616e636500010000d501100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400dc01107531323800010018417272617934040048011c5b75383b20345d0002001841727261793804002901011c5b75383b20385d0003001c4172726179313604002d0101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000d901080c78636d4456657273696f6e65644c6f636174696f6e00010c08563204008901014476323a3a4d756c74694c6f636174696f6e0001000856330400bd01014476333a3a4d756c74694c6f636174696f6e0003000856340400bc013076343a3a4c6f636174696f6e00040000dd010c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000b4011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e1010c5070616c6c65745f6d6573736167655f71756575651870616c6c6574144576656e740404540001104050726f63657373696e674661696c65640c010869643401104832353604945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696ee50101484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e01146572726f72ed01014c50726f636573734d6573736167654572726f721060546865206572726f722074686174206f636375727265642e00490154686973206572726f7220697320707265747479206f70617175652e204d6f72652066696e652d677261696e6564206572726f7273206e65656420746f20626520656d6974746564206173206576656e74736862792074686520604d65737361676550726f636573736f72602e000455014d657373616765206469736361726465642064756520746f20616e206572726f7220696e2074686520604d65737361676550726f636573736f72602028757375616c6c79206120666f726d6174206572726f72292e2450726f63657373656410010869643401104832353604945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696ee50101484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e012c7765696768745f7573656428011857656967687404c0486f77206d7563682077656967687420776173207573656420746f2070726f6365737320746865206d6573736167652e011c73756363657373200110626f6f6c18885768657468657220746865206d657373616765207761732070726f6365737365642e0049014e6f74652074686174207468697320646f6573206e6f74206d65616e20746861742074686520756e6465726c79696e6720604d65737361676550726f636573736f72602077617320696e7465726e616c6c7935017375636365737366756c2e204974202a736f6c656c792a206d65616e73207468617420746865204d512070616c6c65742077696c6c2074726561742074686973206173206120737563636573734d01636f6e646974696f6e20616e64206469736361726420746865206d6573736167652e20416e7920696e7465726e616c206572726f72206e6565647320746f20626520656d6974746564206173206576656e74736862792074686520604d65737361676550726f636573736f72602e0104544d6573736167652069732070726f6365737365642e484f766572776569676874456e71756575656410010869640401205b75383b2033325d04945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696ee50101484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e0128706167655f696e64657810012450616765496e64657804605468652070616765206f6620746865206d6573736167652e01346d6573736167655f696e64657810011c543a3a53697a6504a454686520696e646578206f6620746865206d6573736167652077697468696e2074686520706167652e02048c4d65737361676520706c6163656420696e206f7665727765696768742071756575652e28506167655265617065640801186f726967696ee50101484d6573736167654f726967696e4f663c543e0458546865207175657565206f662074686520706167652e0114696e64657810012450616765496e646578045854686520696e646578206f662074686520706167652e03045454686973207061676520776173207265617065642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e501085c63756d756c75735f7072696d6974697665735f636f7265584167677265676174654d6573736167654f726967696e00010c104865726500000018506172656e740001001c5369626c696e670400e901011850617261496400020000e9010c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665730849640000040010010c7533320000ed0110346672616d655f737570706f727418747261697473206d657373616765734c50726f636573734d6573736167654572726f7200011424426164466f726d61740000001c436f72727570740001002c556e737570706f72746564000200284f7665727765696768740400280118576569676874000300145969656c6400040000f1010c6070616c6c65745f73746f726167655f70726f7669646572731870616c6c6574144576656e740404540001245c4d7370526571756573745369676e55705375636365737310010c77686f000130543a3a4163636f756e7449640001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e000120636170616369747930014853746f7261676544617461556e69743c543e00012876616c75655f70726f700102014c56616c756550726f706f736974696f6e3c543e000008b1014576656e7420656d6974746564207768656e2061204d61696e2053746f726167652050726f7669646572206861732072657175657374656420746f207369676e207570207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f7574e50174686174204d53502773206163636f756e742069642c20697473206d756c74696164647265737365732c2074686520746f74616c20646174612069742063616e2073746f7265206163636f7264696e6720746f20697473207374616b652c20616e64206974732076616c75652070726f706f736974696f6e2e404d73705369676e55705375636365737310010c77686f000130543a3a4163636f756e7449640001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e000120636170616369747930014853746f7261676544617461556e69743c543e00012876616c75655f70726f700102014c56616c756550726f706f736974696f6e3c543e000108b5014576656e7420656d6974746564207768656e2061204d61696e2053746f726167652050726f76696465722068617320636f6e6669726d656420697473207369676e207570207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f7574dd0174686174204d53502773206163636f756e742069642c2074686520746f74616c20646174612069742063616e2073746f7265206163636f7264696e6720746f20697473207374616b652c20697473206d756c7469616464726573732c20616e64206974732076616c75652070726f706f736974696f6e2e5c427370526571756573745369676e5570537563636573730c010c77686f000130543a3a4163636f756e7449640001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e000120636170616369747930014853746f7261676544617461556e69743c543e000208b9014576656e7420656d6974746564207768656e2061204261636b75702053746f726167652050726f7669646572206861732072657175657374656420746f207369676e207570207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f7574890174686174204253502773206163636f756e742069642c20697473206d756c74696164647265737365732c20616e642074686520746f74616c20646174612069742063616e2073746f7265206163636f7264696e6720746f20697473207374616b652e404273705369676e5570537563636573730c010c77686f000130543a3a4163636f756e7449640001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e000120636170616369747930014853746f7261676544617461556e69743c543e000308bd014576656e7420656d6974746564207768656e2061204261636b75702053746f726167652050726f76696465722068617320636f6e6669726d656420697473207369676e207570207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f7574810174686174204253502773206163636f756e742069642c2074686520746f74616c20646174612069742063616e2073746f7265206163636f7264696e6720746f20697473207374616b652c20616e6420697473206d756c7469616464726573732e545369676e55705265717565737443616e63656c656404010c77686f000130543a3a4163636f756e7449640004087d014576656e7420656d6974746564207768656e2061207369676e207570207265717565737420686173206265656e2063616e63656c6564207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f7574d4746865206163636f756e74206964206f6620746865207573657220746861742063616e63656c65642074686520726571756573742e444d73705369676e4f66665375636365737304010c77686f000130543a3a4163636f756e74496400050889014576656e7420656d6974746564207768656e2061204d61696e2053746f726167652050726f766964657220686173207369676e6564206f6666207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f75745874686174204d53502773206163636f756e742069642e444273705369676e4f66665375636365737304010c77686f000130543a3a4163636f756e74496400060891014576656e7420656d6974746564207768656e2061204261636b75702053746f726167652050726f766964657220686173207369676e6564206f6666207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f75745874686174204253502773206163636f756e742069642e3c43617061636974794368616e67656410010c77686f000130543a3a4163636f756e7449640001306f6c645f636170616369747930014853746f7261676544617461556e69743c543e0001306e65775f636170616369747930014853746f7261676544617461556e69743c543e0001786e6578745f626c6f636b5f7768656e5f6368616e67655f616c6c6f776564100144426c6f636b4e756d626572466f723c543e00070865014576656e7420656d6974746564207768656e206120535020686173206368616e67656420697473206361706163697479207375636365737366756c6c792e2050726f766964657320696e666f726d6174696f6e2061626f75744901746861742053502773206163636f756e742069642c20697473206f6c6420746f74616c2064617461207468617420636f756c642073746f72652c20616e6420746865206e657720746f74616c20646174612e1c536c617368656408012c70726f76696465725f69643401244861736849643c543e000138616d6f756e745f736c617368656418013042616c616e63654f663c543e000804a84576656e7420656d6974746564207768656e20616e20535020686173206265656e20736c61736865642e04b4546865206576656e747320746861742063616e20626520656d697474656420627920746869732070616c6c6574f5010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f901045300000400fd0101185665633c543e0000f9010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000fd01000002f9010001020c6070616c6c65745f73746f726167655f70726f7669646572731474797065734056616c756550726f706f736974696f6e04045400000c01286964656e74696669657234013856616c756550726f7049643c543e000128646174615f6c696d697430014853746f7261676544617461556e69743c543e00012470726f746f636f6c73050201a4426f756e6465645665633c50726f746f636f6c733c543e2c204d617850726f746f636f6c733c543e3e000005020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f901045300000400fd0101185665633c543e000009020c4870616c6c65745f66696c655f73797374656d1870616c6c6574144576656e7404045400015c244e65774275636b657418010c77686f000130543a3a4163636f756e7449640001186d73705f696434014050726f76696465724964466f723c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001106e616d65f90101404275636b65744e616d65466f723c543e000134636f6c6c656374696f6e5f69640d0201684f7074696f6e3c436f6c6c656374696f6e4964466f723c543e3e00011c70726976617465200110626f6f6c000004b04e6f74696669657320746861742061206e6577206275636b657420686173206265656e20637265617465642e4c4d6f76654275636b65745265717565737465640c010c77686f000130543a3a4163636f756e7449640001246275636b65745f69643401384275636b65744964466f723c543e0001286e65775f6d73705f696434014050726f76696465724964466f723c543e000104cc4e6f74696669657320746861742061206275636b6574206973206265696e67206d6f76656420746f2061206e6577204d53502e504275636b6574507269766163795570646174656410010c77686f000130543a3a4163636f756e7449640001246275636b65745f69643401384275636b65744964466f723c543e000134636f6c6c656374696f6e5f69640d0201684f7074696f6e3c436f6c6c656374696f6e4964466f723c543e3e00011c70726976617465200110626f6f6c000204c84e6f74696669657320746861742061206275636b65742773207072697661637920686173206265656e20757064617465642e6c4e6577436f6c6c656374696f6e416e644173736f63696174696f6e0c010c77686f000130543a3a4163636f756e7449640001246275636b65745f69643401384275636b65744964466f723c543e000134636f6c6c656374696f6e5f6964100148436f6c6c656374696f6e4964466f723c543e00030435014e6f74696669657320746861742061206e657720636f6c6c656374696f6e20686173206265656e206372656174656420616e64206173736f63696174656420776974682061206275636b65742e444e657753746f72616765526571756573741c010c77686f000130543a3a4163636f756e74496400012066696c655f6b65793401344d65726b6c65486173683c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e00012c66696e6765727072696e7434013846696e6765727072696e743c543e00011073697a6530013853746f72616765446174613c543e000120706565725f696473f5010128506565724964733c543e000404e44e6f74696669657320746861742061206e65772066696c6520686173206265656e2072657175657374656420746f2062652073746f7265642e484d7370416363657074656453746f72696e6714012066696c655f6b65793401344d65726b6c65486173683c543e0001186d73705f696434014050726f76696465724964466f723c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001146f776e6572000130543a3a4163636f756e74496400013c6e65775f6275636b65745f726f6f743401344d65726b6c65486173683c543e000504c44e6f74696669657320746861742061204d53502068617320616363657074656420746f2073746f726520612066696c652e504163636570746564427370566f6c756e746565721c01186273705f696434014050726f76696465724964466f723c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e00012c66696e6765727072696e7434013846696e6765727072696e743c543e0001386d756c7469616464726573736573f50101444d756c74694164647265737365733c543e0001146f776e6572000130543a3a4163636f756e74496400011073697a6530013853746f72616765446174613c543e000604f04e6f746966696573207468617420612042535020686173206265656e20616363657074656420746f2073746f7265206120676976656e2066696c652e4c427370436f6e6669726d656453746f72696e6710010c77686f000130543a3a4163636f756e7449640001186273705f696434014050726f76696465724964466f723c543e00012466696c655f6b657973150201f0426f756e6465645665633c4d65726b6c65486173683c543e2c20543a3a4d61784261746368436f6e6669726d53746f7261676552657175657374733e0001206e65775f726f6f743401344d65726b6c65486173683c543e000704c04e6f746966696573207468617420612042535020636f6e6669726d65642073746f72696e6720612066696c652873292e5c53746f726167655265717565737446756c66696c6c656404012066696c655f6b65793401344d65726b6c65486173683c543e00080409014e6f746966696573207468617420612073746f72616765207265717565737420666f7220612066696c65206b657920686173206265656e2066756c66696c6c65642e5453746f72616765526571756573744578706972656404012066696c655f6b65793401344d65726b6c65486173683c543e000904b44e6f746966696573207468652065787069726174696f6e206f6620612073746f7261676520726571756573742e5453746f72616765526571756573745265766f6b656404012066696c655f6b65793401344d65726b6c65486173683c543e000a0439014e6f746966696573207468617420612073746f72616765207265717565737420686173206265656e207265766f6b65642062792074686520757365722077686f20696e697469617465642069742e64427370526571756573746564546f53746f7053746f72696e671001186273705f696434014050726f76696465724964466f723c543e00012066696c655f6b65793401344d65726b6c65486173683c543e0001146f776e6572000130543a3a4163636f756e7449640001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e000b0401014e6f746966696573207468617420612042535020686173206f70656e65642061207265717565737420746f2073746f702073746f72696e6720612066696c652e60427370436f6e6669726d53746f7070656453746f72696e670c01186273705f696434014050726f76696465724964466f723c543e00012066696c655f6b65793401344d65726b6c65486173683c543e0001206e65775f726f6f743401344d65726b6c65486173683c543e000c04bc4e6f7469666965732074686174206120425350206861732073746f707065642073746f72696e6720612066696c652e985072696f726974794368616c6c656e6765466f7246696c6544656c6574696f6e51756575656408011075736572000130543a3a4163636f756e74496400012066696c655f6b65793401344d65726b6c65486173683c543e000d0451014e6f746966696573207468617420612066696c65206b657920686173206265656e2071756575656420666f722061207072696f72697479206368616c6c656e676520666f722066696c652064656c6574696f6e2e68537053746f7053746f72696e67496e736f6c76656e745573657214011473705f696434014050726f76696465724964466f723c543e00012066696c655f6b65793401344d65726b6c65486173683c543e0001146f776e6572000130543a3a4163636f756e7449640001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e0001206e65775f726f6f743401344d65726b6c65486173683c543e000e0455014e6f74696669657320746861742061205350206861732073746f707065642073746f72696e6720612066696c65206265636175736520697473206f776e657220686173206265636f6d6520696e736f6c76656e742e784661696c6564546f51756575655072696f726974794368616c6c656e676508011075736572000130543a3a4163636f756e74496400012066696c655f6b65793401344d65726b6c65486173683c543e000f0445014e6f74696669657320746861742061207072696f72697479206368616c6c656e6765206661696c656420746f2062652071756575656420666f722070656e64696e672066696c652064656c6574696f6e2e4c46696c6544656c6574696f6e5265717565737414011075736572000130543a3a4163636f756e74496400012066696c655f6b65793401344d65726b6c65486173683c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001186d73705f696434014050726f76696465724964466f723c543e00014870726f6f665f6f665f696e636c7573696f6e200110626f6f6c001004944e6f746966696573207468617420612066696c652077696c6c2062652064656c657465642eac50726f6f665375626d6974746564466f7250656e64696e6746696c6544656c6574696f6e526571756573741401186d73705f696434014050726f76696465724964466f723c543e00011075736572000130543a3a4163636f756e74496400012066696c655f6b65793401344d65726b6c65486173683c543e0001246275636b65745f69643401384275636b65744964466f723c543e00014870726f6f665f6f665f696e636c7573696f6e200110626f6f6c00110435014e6f746966696573207468617420612070726f6f6620686173206265656e207375626d697474656420666f7220612070656e64696e672066696c652064656c6574696f6e20726571756573742e704273704368616c6c656e67654379636c65496e697469616c6973656408010c77686f000130543a3a4163636f756e7449640001186273705f696434014050726f76696465724964466f723c543e00120845014e6f74696669657320746861742061204253502773206368616c6c656e6765206379636c6520686173206265656e20696e697469616c697365642c20616464696e67207468652066697273742066696c65ac6b657928732920746f20746865204253502773204d65726b6c6520506174726963696120466f726573742e604d6f76654275636b657452657175657374457870697265640801186d73705f696434014050726f76696465724964466f723c543e0001246275636b65745f69643401384275636b65744964466f723c543e001304c04e6f74696669657320746861742061206d6f7665206275636b657420726571756573742068617320657870697265642e484d6f76654275636b657441636365707465640801246275636b65745f69643401384275636b65744964466f723c543e0001186d73705f696434014050726f76696465724964466f723c543e001404cc4e6f74696669657320746861742061206275636b657420686173206265656e206d6f76656420746f2061206e6577204d53502e484d6f76654275636b657452656a65637465640801246275636b65745f69643401384275636b65744964466f723c543e0001186d73705f696434014050726f76696465724964466f723c543e00150405014e6f74696669657320746861742061206275636b6574206d6f7665207265717565737420686173206265656e2072656a656374656420627920746865204d53502e844461746153657276657252656769737465726564466f724d6f76654275636b65740801186273705f696434014050726f76696465724964466f723c543e0001246275636b65745f69643401384275636b65744964466f723c543e00160429014e6f7469666965732074686174206120646174612073657276657220686173206265656e207265676973746572656420666f722061206d6f7665206275636b657420726571756573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d0204184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000011020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000015020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400190201185665633c543e0000190200000234001d020c5070616c6c65745f70726f6f66735f6465616c65721870616c6c6574144576656e74040454000124304e65774368616c6c656e676508010c77686f00013c4163636f756e744964466f723c543e0001386b65795f6368616c6c656e6765643401244b6579466f723c543e0000048441206d616e75616c206368616c6c656e676520776173207375626d69747465642e3450726f6f66416363657074656408012070726f766964657234014050726f76696465724964466f723c543e00011470726f6f662102012050726f6f663c543e00010454412070726f6f66207761732061636365707465642e404e65774368616c6c656e6765536565640801446368616c6c656e6765735f7469636b6572100144426c6f636b4e756d626572466f723c543e0001107365656434015852616e646f6d6e6573734f7574707574466f723c543e0002048c41206e6577206368616c6c656e67652073656564207761732067656e6572617465642e584e6577436865636b706f696e744368616c6c656e67650801446368616c6c656e6765735f7469636b6572100144426c6f636b4e756d626572466f723c543e0001286368616c6c656e6765734902015d01426f756e6465645665633c284b6579466f723c543e2c204f7074696f6e3c5472696552656d6f76654d75746174696f6e3e292c0a4d6178437573746f6d4368616c6c656e676573506572426c6f636b466f723c543e2c3e000304a441206e657720636865636b706f696e74206368616c6c656e6765207761732067656e6572617465642e44536c61736861626c6550726f766964657208012070726f766964657234014050726f76696465724964466f723c543e00015c6e6578745f6368616c6c656e67655f646561646c696e65100144426c6f636b4e756d626572466f723c543e0004045901412070726f766964657220776173206d61726b656420617320736c61736861626c6520616e64207468656972206368616c6c656e676520646561646c696e652077617320666f72636566756c6c79207075736865642e704e6f5265636f72644f664c6173745375626d697474656450726f6f6604012070726f766964657234014050726f76696465724964466f723c543e000504f84e6f207265636f7264206f6620746865206c617374207469636b207468652050726f7669646572207375626d697474656420612070726f6f6620666f722e704e65774368616c6c656e67654379636c65496e697469616c6973656410013063757272656e745f7469636b100144426c6f636b4e756d626572466f723c543e00015c6e6578745f6368616c6c656e67655f646561646c696e65100144426c6f636b4e756d626572466f723c543e00012070726f766964657234014050726f76696465724964466f723c543e0001586d617962655f70726f76696465725f6163636f756e749c01504f7074696f6e3c543a3a4163636f756e7449643e000604b4412070726f76696465722773206368616c6c656e6765206379636c652077617320696e697469616c697365642e404d75746174696f6e734170706c6965640c012070726f766964657234014050726f76696465724964466f723c543e0001246d75746174696f6e735d0201905665633c284b6579466f723c543e2c205472696552656d6f76654d75746174696f6e293e0001206e65775f726f6f743401244b6579466f723c543e000704c84120736574206f66206d75746174696f6e7320686173206265656e206170706c69656420746f2074686520466f726573742e4c4368616c6c656e6765735469636b6572536574040118706175736564200110626f6f6c000804d4546865205b604368616c6c656e6765735469636b6572605d20686173206265656e20706175736564206f7220756e7061757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657421020c5070616c6c65745f70726f6f66735f6465616c65721474797065731450726f6f660404540000080130666f726573745f70726f6f6625020164466f72657374566572696669657250726f6f66466f723c543e0001286b65795f70726f6f66732d02018042547265654d61703c4b6579466f723c543e2c204b657950726f6f663c543e3e000025020c1c73705f747269653473746f726167655f70726f6f6630436f6d7061637450726f6f660000040134656e636f6465645f6e6f646573290201305665633c5665633c75383e3e0000290200000238002d02042042547265654d617008044b01340456013102000400410200000031020c5070616c6c65745f70726f6f66735f6465616c6572147479706573204b657950726f6f66040454000008011470726f6f66350201584b6579566572696669657250726f6f66466f723c543e00013c6368616c6c656e67655f636f756e7410010c753332000035020c547368705f66696c655f6b65795f76657269666965721474797065733046696c654b657950726f6f66000008013466696c655f6d65746164617461390201d846696c654d657461646174613c485f4c454e4754482c204348554e4b5f53495a452c2053495a455f544f5f4348414c4c454e4745533e00011470726f6f6625020130436f6d7061637450726f6f660000390208447368705f66696c655f6d657461646174613046696c654d6574616461746100001401146f776e657238011c5665633c75383e0001246275636b65745f696438011c5665633c75383e0001206c6f636174696f6e38011c5665633c75383e00012466696c655f73697a652c010c75363400012c66696e6765727072696e743d02015446696e6765727072696e743c485f4c454e4754483e00003d0208447368705f66696c655f6d657461646174612c46696e6765727072696e7400000400040138486173683c485f4c454e4754483e000041020000024502004502000004083431020049020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d02045300000400590201185665633c543e00004d020000040834510200510204184f7074696f6e0404540155020108104e6f6e6500000010536f6d65040055020000010000550208287368705f747261697473485472696552656d6f76654d75746174696f6e0000000059020000024d02005d020000026102006102000004083455020065020c4470616c6c65745f72616e646f6d6e6573731870616c6c6574144576656e74040454000104844e65774f6e6545706f636841676f52616e646f6d6e657373417661696c61626c650c013c72616e646f6d6e6573735f7365656434011c543a3a4861736800012866726f6d5f65706f636830010c75363400014476616c69645f756e74696c5f626c6f636b100144426c6f636b4e756d626572466f723c543e00000419014576656e7420656d6974746564207768656e2061206e65772072616e646f6d207365656420697320617661696c61626c652066726f6d207468652072656c617920636861696e047c54686520604576656e746020656e756d206f6620746869732070616c6c657469020c5870616c6c65745f7061796d656e745f73747265616d731870616c6c6574144576656e7404045400012c744669786564526174655061796d656e7453747265616d437265617465640c0130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e0001107261746518013042616c616e63654f663c543e000008e5014576656e7420656d6974746564207768656e20612066697865642d72617465207061796d656e742073747265616d20697320637265617465642e2050726f766964657320696e666f726d6174696f6e2061626f7574207468652050726f766964657220616e642055736572206f66207468652073747265616d54616e642069747320696e697469616c20726174652e744669786564526174655061796d656e7453747265616d557064617465640c0130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e0001206e65775f7261746518013042616c616e63654f663c543e000108e5014576656e7420656d6974746564207768656e20612066697865642d72617465207061796d656e742073747265616d20697320757064617465642e2050726f766964657320696e666f726d6174696f6e2061626f757420746865205573657220616e642050726f7669646572206f66207468652073747265616d7c616e6420746865206e65772072617465206f66207468652073747265616d2e744669786564526174655061796d656e7453747265616d44656c65746564080130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e000204e9014576656e7420656d6974746564207768656e20612066697865642d72617465207061796d656e742073747265616d2069732072656d6f7665642e2050726f766964657320696e666f726d6174696f6e2061626f757420746865205573657220616e642050726f7669646572206f66207468652073747265616d2e7c44796e616d6963526174655061796d656e7453747265616d437265617465640c0130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e00013c616d6f756e745f70726f766964656430014c556e69747350726f7669646564466f723c543e000308ed014576656e7420656d6974746564207768656e20612064796e616d69632d72617465207061796d656e742073747265616d20697320637265617465642e2050726f766964657320696e666f726d6174696f6e2061626f757420746865205573657220616e642050726f7669646572206f66207468652073747265616d80616e642074686520696e697469616c20616d6f756e742070726f76696465642e7c44796e616d6963526174655061796d656e7453747265616d557064617465640c0130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e00014c6e65775f616d6f756e745f70726f766964656430014c556e69747350726f7669646564466f723c543e000408ed014576656e7420656d6974746564207768656e20612064796e616d69632d72617465207061796d656e742073747265616d20697320757064617465642e2050726f766964657320696e666f726d6174696f6e2061626f757420746865205573657220616e642050726f7669646572206f66207468652073747265616d70616e6420746865206e657720616d6f756e742070726f76696465642e7c44796e616d6963526174655061796d656e7453747265616d44656c65746564080130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e000504f1014576656e7420656d6974746564207768656e20612064796e616d69632d72617465207061796d656e742073747265616d2069732072656d6f7665642e2050726f766964657320696e666f726d6174696f6e2061626f757420746865205573657220616e642050726f7669646572206f66207468652073747265616d2e505061796d656e7453747265616d436861726765640c0130757365725f6163636f756e74000130543a3a4163636f756e74496400012c70726f76696465725f696434014050726f76696465724964466f723c543e000118616d6f756e7418013042616c616e63654f663c543e00060879014576656e7420656d6974746564207768656e2061207061796d656e7420697320636861726765642e2050726f766964657320696e666f726d6174696f6e2061626f757420746865207573657220746861742077617320636861726765642c19017468652050726f76696465722074686174207265636569766564207468652066756e64732c20616e642074686520616d6f756e7420746861742077617320636861726765642e644c61737443686172676561626c65496e666f557064617465640c012c70726f76696465725f696434014050726f76696465724964466f723c543e0001506c6173745f63686172676561626c655f7469636b100144426c6f636b4e756d626572466f723c543e00016c6c6173745f63686172676561626c655f70726963655f696e64657818013042616c616e63654f663c543e00070821024576656e7420656d6974746564207768656e20612050726f76696465722773206c6173742063686172676561626c65207469636b20616e6420707269636520696e6465782061726520757064617465642e2050726f766964657320696e666f726d6174696f6e2061626f7574207468652050726f7669646572206f66207468652073747265616d2c3501746865207469636b206e756d626572206f6620746865206c6173742063686172676561626c65207469636b20616e642074686520707269636520696e6465782061742074686174207469636b2e4055736572576974686f757446756e647304010c77686f000130543a3a4163636f756e74496400080c19024576656e7420656d6974746564207768656e20612050726f766964657220697320636f72726563746c7920747279696e6720746f206368617267652061205573657220616e642074686174205573657220646f6573206e6f74206861766520656e6f7567682066756e647320746f2070617920666f722074686569722073657276696365732e390254686973206576656e7420697320656d697474656420746f20666c616720746865207573657220616e64206c657420746865206e6574776f726b206b6e6f772074686174207468652075736572206973206e6f7420706179696e6720666f7220746865207265717565737465642073657276696365732c20736f206f746865722050726f7669646572732063616e9473746f702070726f766964696e6720736572766963657320746f207468617420757365722e345573657250616964446562747304010c77686f000130543a3a4163636f756e74496400090449024576656e7420656d6974746564207768656e20612055736572207468617420686173206265656e20666c6167676564206173206e6f7420686176696e6720656e6f7567682066756e647320746f2070617920666f7220746865697220636f6e7472616374656420736572766963657320686173207061696420616c6c20697473206f75747374616e64696e6720646562742e2c55736572536f6c76656e7404010c77686f000130543a3a4163636f756e744964000a083d024576656e7420656d6974746564207768656e20612055736572207468617420686173206265656e20666c6167676564206173206e6f7420686176696e6720656e6f7567682066756e647320746f2070617920666f7220746865697220636f6e7472616374656420736572766963657320686173207761697465642074686520636f6f6c646f776e20706572696f642c4901636f72726563746c79207061696420616c6c207468656972206f75747374616e64696e67206465627420616e642063616e206e6f7720636f6e7472616374206e657720736572766963657320616761696e2e04b4546865206576656e747320746861742063616e20626520656d697474656420627920746869732070616c6c65746d020c4870616c6c65745f6275636b65745f6e6674731870616c6c6574144576656e7404045400010c30416363657373536861726564080118697373756572000130543a3a4163636f756e744964000124726563697069656e740001684163636f756e7449644c6f6f6b75705461726765744f663c543e00000419014e6f74696669657320746861742061636365737320746f2061206275636b657420686173206265656e20736861726564207769746820616e6f74686572206163636f756e742e544974656d52656164416363657373557064617465640c011461646d696e000130543a3a4163636f756e7449640001186275636b65743401384275636b65744964466f723c543e00011c6974656d5f6964100124543a3a4974656d4964000104ec4e6f74696669657320746861742074686520726561642061636365737320666f7220616e206974656d20686173206265656e20757064617465642e284974656d4275726e65640c011c6163636f756e74000130543a3a4163636f756e7449640001186275636b65743401384275636b65744964466f723c543e00011c6974656d5f6964100124543a3a4974656d4964000204984e6f746966696573207468617420616e206974656d20686173206265656e206275726e65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657471020c2c70616c6c65745f6e6674731870616c6c6574144576656e740804540004490001981c437265617465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e484974656d5472616e736665724c6f636b6564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400060488416e20606974656d6020626563616d65206e6f6e2d7472616e7366657261626c652e504974656d5472616e73666572556e6c6f636b6564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400070478416e20606974656d6020626563616d65207472616e7366657261626c652e504974656d50726f706572746965734c6f636b6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001346c6f636b5f6d65746164617461200110626f6f6c00013c6c6f636b5f61747472696275746573200110626f6f6c000804a8606974656d60206d65746164617461206f7220617474726962757465732077657265206c6f636b65642e40436f6c6c656374696f6e4c6f636b6564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173206c6f636b65642e304f776e65724368616e676564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001186973737565729c01504f7074696f6e3c543a3a4163636f756e7449643e00011461646d696e9c01504f7074696f6e3c543a3a4163636f756e7449643e00011c667265657a65729c01504f7074696f6e3c543a3a4163636f756e7449643e000b0470546865206d616e6167656d656e74207465616d206368616e6765642e405472616e73666572417070726f766564140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000120646561646c696e650d0201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e54416c6c417070726f76616c7343616e63656c6c65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e744964000e049c416c6c20617070726f76616c73206f6620616e206974656d20676f742063616e63656c6c65642e5c436f6c6c656374696f6e436f6e6669674368616e676564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000f040101412060636f6c6c656374696f6e6020686173206861642069747320636f6e666967206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d65746164617461536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106461746175020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001004b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001104b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e3c4974656d4d657461646174615365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001106461746175020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001204984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e4c4974656d4d65746164617461436c6561726564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73790201385665633c543a3a4974656d49643e0014042101546865206465706f73697420666f72206120736574206f6620606974656d60732077697468696e20612060636f6c6c656374696f6e6020686173206265656e20757064617465642e30417474726962757465536574140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e00010c6b65797d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c756575020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e0001246e616d657370616365810201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00150405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c6561726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e00010c6b65797d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0001246e616d657370616365810201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e0016040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e6c4974656d41747472696275746573417070726f76616c41646465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465000130543a3a4163636f756e744964001704cc41206e657720617070726f76616c20746f206d6f64696679206974656d2061747472696275746573207761732061646465642e744974656d41747472696275746573417070726f76616c52656d6f7665640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465000130543a3a4163636f756e744964001804d441206e657720617070726f76616c20746f206d6f64696679206974656d2061747472696275746573207761732072656d6f7665642e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6e0d02015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001904c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001a04a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e74436f6c6c656374696f6e4d696e7453657474696e677355706461746564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001b04ac4d696e742073657474696e677320666f72206120636f6c6c656374696f6e20686164206368616e6765642e6c4e657874436f6c6c656374696f6e4964496e6372656d656e74656404011c6e6578745f69640d02015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001c0401014576656e74206765747320656d6974746564207768656e2074686520604e657874436f6c6c656374696f6e496460206765747320696e6372656d656e7465642e304974656d5072696365536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00014477686974656c69737465645f62757965729c01504f7074696f6e3c543a3a4163636f756e7449643e001d047c546865207072696365207761732073657420666f7220746865206974656d2e404974656d507269636552656d6f766564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001e048c54686520707269636520666f7220746865206974656d207761732072656d6f7665642e284974656d426f75676874140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00011873656c6c6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964001f044c416e206974656d2077617320626f756768742e1c54697053656e74140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011873656e646572000130543a3a4163636f756e7449640001207265636569766572000130543a3a4163636f756e744964000118616d6f756e741801584465706f73697442616c616e63654f663c542c20493e0020043c4120746970207761732073656e742e2c53776170437265617465641801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130646573697265645f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e0001147072696365850201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e65100144426c6f636b4e756d626572466f723c543e00210488416e20606974656d60207377617020696e74656e742077617320637265617465642e345377617043616e63656c6c65641801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130646573697265645f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e0001147072696365850201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e65100144426c6f636b4e756d626572466f723c543e0022045c5468652073776170207761732063616e63656c6c65642e2c53776170436c61696d656420013c73656e745f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400012473656e745f6974656d100124543a3a4974656d496400013c73656e745f6974656d5f6f776e6572000130543a3a4163636f756e74496400014c72656365697665645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400013472656365697665645f6974656d100124543a3a4974656d496400014c72656365697665645f6974656d5f6f776e6572000130543a3a4163636f756e7449640001147072696365850201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e65100144426c6f636b4e756d626572466f723c543e00230468546865207377617020686173206265656e20636c61696d65642e585072655369676e6564417474726962757465735365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001246e616d657370616365810201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e002404fc4e657720617474726962757465732068617665206265656e2073657420666f7220616e20606974656d60206f66207468652060636f6c6c656374696f6e602e4850616c6c6574417474726962757465536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d0d0201444f7074696f6e3c543a3a4974656d49643e0001246174747269627574659102018450616c6c6574417474726962757465733c543a3a436f6c6c656374696f6e49643e00011476616c756575020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e0025084d0141206e65772061747472696275746520696e20746865206050616c6c657460206e616d657370616365207761732073657420666f72207468652060636f6c6c656374696f6e60206f7220616e20606974656d606477697468696e20746861742060636f6c6c656374696f6e602e047c54686520604576656e746020656e756d206f6620746869732070616c6c657475020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000790200000210007d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000081020c2c70616c6c65745f6e667473147479706573484174747269627574654e616d65737061636504244163636f756e744964010001101850616c6c65740000003c436f6c6c656374696f6e4f776e6572000100244974656d4f776e65720002001c4163636f756e7404000001244163636f756e74496400030000850204184f7074696f6e0404540189020108104e6f6e6500000010536f6d6504008902000001000089020c2c70616c6c65745f6e66747314747970657348507269636557697468446972656374696f6e0418416d6f756e74011800080118616d6f756e74180118416d6f756e74000124646972656374696f6e8d0201385072696365446972656374696f6e00008d020c2c70616c6c65745f6e667473147479706573385072696365446972656374696f6e0001081053656e640000001c526563656976650001000091020c2c70616c6c65745f6e6674731474797065734050616c6c6574417474726962757465730430436f6c6c656374696f6e4964011001082c55736564546f436c61696d0400100130436f6c6c656374696f6e4964000000405472616e7366657244697361626c656400010000950208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e0002000099020000029d02009d0200000408101000a10208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ecc014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65a502016473705f72756e74696d653a3a52756e74696d65537472696e670000a5020000050200a90208306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c0000ad020c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b38011c5665633c75383e00000c684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e008843616e20626520657865637574656420627920657665727920606f726967696e602e387365745f686561705f7061676573040114706167657330010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646538011c5665633c75383e0002046453657420746865206e65772072756e74696d6520636f64652e5c7365745f636f64655f776974686f75745f636865636b73040110636f646538011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0051014e6f746520746861742072756e74696d652075706772616465732077696c6c206e6f742072756e20696620746869732069732063616c6c656420776974682061206e6f742d696e6372656173696e6720737065632076657273696f6e212c7365745f73746f726167650401146974656d73b10201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973290201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697838010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b38011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e44617574686f72697a655f75706772616465040124636f64655f6861736834011c543a3a486173680009106101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736834011c543a3a48617368000a206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015741524e494e473a205468697320617574686f72697a657320616e207570677261646520746861742077696c6c2074616b6520706c61636520776974686f757420616e792073616665747920636865636b732c20666f7259016578616d706c652074686174207468652073706563206e616d652072656d61696e73207468652073616d6520616e642074686174207468652076657273696f6e206e756d62657220696e637265617365732e204e6f74f07265636f6d6d656e64656420666f72206e6f726d616c207573652e205573652060617574686f72697a655f757067726164656020696e73746561642e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e606170706c795f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000b24550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005901446570656e64696e67206f6e207468652072756e74696d65277320604f6e536574436f64656020636f6e66696775726174696f6e2c20746869732066756e6374696f6e206d6179206469726563746c79206170706c791101746865206e65772060636f64656020696e207468652073616d6520626c6f636b206f7220617474656d707420746f207363686564756c652074686520757067726164652e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb102000002b50200b50200000408383800b9020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c617373bd0201845065724469737061746368436c6173733c57656967687473506572436c6173733e0000bd020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401c102000c01186e6f726d616cc10201045400012c6f7065726174696f6e616cc1020104540001246d616e6461746f7279c1020104540000c1020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e736963c50201384f7074696f6e3c5765696768743e0001246d61785f746f74616cc50201384f7074696f6e3c5765696768743e0001207265736572766564c50201384f7074696f6e3c5765696768743e0000c50204184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000c9020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178cd0201545065724469737061746368436c6173733c7533323e0000cd020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f7279100104540000d102082873705f776569676874733c52756e74696d65446257656967687400000801107265616430010c753634000114777269746530010c7536340000d502082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65a502013452756e74696d65537472696e67000124696d706c5f6e616d65a502013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c75333200011061706973d902011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e08010875380000d902040c436f7704045401dd02000400dd02000000dd02000002e10200e1020000040829011000e5020000050400e9020c306672616d655f73797374656d1870616c6c6574144572726f720404540001243c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e6c4d756c7469426c6f636b4d6967726174696f6e734f6e676f696e67000604550141206d756c74692d626c6f636b206d6967726174696f6e206973206f6e676f696e6720616e642070726576656e7473207468652063757272656e7420636f64652066726f6d206265696e67207265706c616365642e444e6f7468696e67417574686f72697a6564000704584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400080494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c6574ed02000002f10200f1020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e7420416e636573746f720404480134000c0138757365645f62616e647769647468f50201345573656442616e647769647468000138706172615f686561645f68617368090301244f7074696f6e3c483e000160636f6e73756d65645f676f5f61686561645f7369676e616c0d03018c4f7074696f6e3c72656c61795f636861696e3a3a55706772616465476f41686561643e0000f5020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e74345573656442616e64776964746800000c0134756d705f6d73675f636f756e7410010c75333200013c756d705f746f74616c5f627974657310010c75333200013468726d705f6f7574676f696e67f902018c42547265654d61703c5061726149642c2048726d704368616e6e656c5570646174653e0000f902042042547265654d617008044b01e901045601fd020004000103000000fd020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e744448726d704368616e6e656c55706461746500000801246d73675f636f756e7410010c75333200012c746f74616c5f627974657310010c75333200000103000002050300050300000408e901fd0200090304184f7074696f6e04045401340108104e6f6e6500000010536f6d6504003400000100000d0304184f7074696f6e0404540111030108104e6f6e6500000010536f6d6504001103000001000011030c4c706f6c6b61646f745f7072696d6974697665730876363855706772616465476f41686561640001081441626f72740000001c476f41686561640001000015030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e74385365676d656e74547261636b65720404480134000c0138757365645f62616e647769647468f50201345573656442616e64776964746800013868726d705f77617465726d61726b0d0201804f7074696f6e3c72656c61795f636861696e3a3a426c6f636b4e756d6265723e000160636f6e73756d65645f676f5f61686561645f7369676e616c0d03018c4f7074696f6e3c72656c61795f636861696e3a3a55706772616465476f41686561643e000019030c4c706f6c6b61646f745f7072696d6974697665730876365c50657273697374656456616c69646174696f6e446174610804480134044e01100010012c706172656e745f686561641d030120486561644461746100014c72656c61795f706172656e745f6e756d6265721001044e00016472656c61795f706172656e745f73746f726167655f726f6f74340104480001306d61785f706f765f73697a6510010c75333200001d030c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665732048656164446174610000040038011c5665633c75383e0000210304184f7074696f6e0404540125030108104e6f6e6500000010536f6d6504002503000001000025030c4c706f6c6b61646f745f7072696d69746976657308763648557067726164655265737472696374696f6e0001041c50726573656e740000000029030c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f6465732d03014442547265655365743c5665633c75383e3e00002d03042042547265655365740404540138000400290200000031030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f6865616434014472656c61795f636861696e3a3a4861736800019c72656c61795f64697370617463685f71756575655f72656d61696e696e675f63617061636974793503018c52656c61794469737061746368517565756552656d61696e696e674361706163697479000140696e67726573735f6368616e6e656c73390301885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73390301885665633c285061726149642c20416272696467656448726d704368616e6e656c293e000035030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f748c52656c61794469737061746368517565756552656d61696e696e674361706163697479000008013c72656d61696e696e675f636f756e7410010c75333200013872656d61696e696e675f73697a6510010c753332000039030000023d03003d0300000408e90141030041030c4c706f6c6b61646f745f7072696d6974697665730876364c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747910010c7533320001386d61785f746f74616c5f73697a6510010c7533320001406d61785f6d6573736167655f73697a6510010c7533320001246d73675f636f756e7410010c753332000128746f74616c5f73697a6510010c7533320001206d71635f68656164090301304f7074696f6e3c486173683e000045030c4c706f6c6b61646f745f7072696d697469766573087636644162726964676564486f7374436f6e66696775726174696f6e00002801346d61785f636f64655f73697a6510010c7533320001486d61785f686561645f646174615f73697a6510010c7533320001586d61785f7570776172645f71756575655f636f756e7410010c7533320001546d61785f7570776172645f71756575655f73697a6510010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6510010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e10012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617910012c426c6f636b4e756d6265720001506173796e635f6261636b696e675f706172616d73490301484173796e634261636b696e67506172616d7300004903104c706f6c6b61646f745f7072696d697469766573087636346173796e635f6261636b696e67484173796e634261636b696e67506172616d73000008014c6d61785f63616e6469646174655f646570746810010c753332000150616c6c6f7765645f616e6365737472795f6c656e10010c75333200004d03089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e0000040034012452656c61794861736800005103042042547265654d617008044b01e9010456014d0300040055030000005503000002590300590300000408e9014d03005d0300000261030061030860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401e90100080124726563697069656e74e901010849640001106461746138015073705f7374643a3a7665633a3a5665633c75383e000065030c3473705f61726974686d657469632c66697865645f706f696e74244669786564553132380000040018011075313238000069030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174616d03015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653801345570776172644d65737361676500010044617574686f72697a655f75706772616465080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c0002206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015468652060636865636b5f76657273696f6e6020706172616d657465722073657473206120626f6f6c65616e20666c616720666f722077686574686572206f72206e6f74207468652072756e74696d6527732073706563610176657273696f6e20616e64206e616d652073686f756c64206265207665726966696564206f6e20757067726164652e2053696e63652074686520617574686f72697a6174696f6e206f6e6c7920686173206120686173682cb069742063616e6e6f742061637475616c6c7920706572666f726d2074686520766572696669636174696f6e2e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e60656e6163745f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000324550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005d014e6f7465207468617420746869732066756e6374696f6e2077696c6c206e6f74206170706c7920746865206e65772060636f6465602c20627574206f6e6c7920617474656d707420746f207363686564756c652074686574757067726164652077697468207468652052656c617920436861696e2e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d03089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f646174611903015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f73746174652903015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d657373616765737103016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573790301a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e0000710300000275030075030860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d62657200010c6d736738013c446f776e776172644d65737361676500007903042042547265654d617008044b01e9010456017d0300040085030000007d0300000281030081030860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d6265720001106461746138015073705f7374643a3a7665633a3a5665633c75383e00008503000002890300890300000408e9017d03008d030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e91030c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400004c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e7420737065636966696564206279685b60436f6e6669673a3a4d696e696d756d506572696f64605d2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e0051015468697320646973706174636820636c617373206973205f4d616e6461746f72795f20746f20656e73757265206974206765747320657865637574656420696e2074686520626c6f636b2e204265206177617265510174686174206368616e67696e672074686520636f6d706c6578697479206f6620746869732063616c6c20636f756c6420726573756c742065786861757374696e6720746865207265736f757263657320696e206184626c6f636b20746f206578656375746520616e79206f746865722063616c6c732e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602955012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f283129602062656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e95030c5873746167696e675f70617261636861696e5f696e666f1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e99030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454019d03045300000400a50301185665633c543e00009d030c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964290101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73a103011c526561736f6e730000a1030c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000a5030000029d0300a9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ad03045300000400b10301185665633c543e0000ad030c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720129011c42616c616e6365011800080108696429010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000b103000002ad0300b5030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b903045300000400c90301185665633c543e0000b9030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e740808496401bd031c42616c616e63650118000801086964bd0301084964000118616d6f756e7418011c42616c616e63650000bd03084c73746f726167655f6875625f72756e74696d654452756e74696d65486f6c64526561736f6e0001082450726f7669646572730400c103019070616c6c65745f73746f726167655f70726f7669646572733a3a486f6c64526561736f6e002800385061796d656e7453747265616d730400c503018870616c6c65745f7061796d656e745f73747265616d733a3a486f6c64526561736f6e002c0000c1030c6070616c6c65745f73746f726167655f70726f7669646572731870616c6c657428486f6c64526561736f6e0001085853746f7261676550726f76696465724465706f736974000000344275636b65744465706f73697400010000c5030c5870616c6c65745f7061796d656e745f73747265616d731870616c6c657428486f6c64526561736f6e000104505061796d656e7453747265616d4465706f73697400000000c903000002b90300cd030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d103045300000400d50301185665633c543e0000d1030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e740808496401981c42616c616e636501180008010869649801084964000118616d6f756e7418011c42616c616e63650000d503000002d10300d9030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000120507472616e736665725f616c6c6f775f646561746808011064657374dd0301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565dc0128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e38666f7263655f7472616e736665720c0118736f75726365dd0301504163636f756e7449644c6f6f6b75704f663c543e00011064657374dd0301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565dc0128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374dd0301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565dc0128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374dd0301504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665200110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686fdd0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686fa401445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f72207468655c706f73736962696c696c7479206f6620636875726e292e44666f7263655f7365745f62616c616e636508010c77686fdd0301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565dc0128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6ee503014c41646a7573746d656e74446972656374696f6e00011464656c7461dc0128543a3a42616c616e6365000914b841646a7573742074686520746f74616c2069737375616e636520696e20612073617475726174696e67207761792e00fc43616e206f6e6c792062652063616c6c656420627920726f6f7420616e6420616c77617973206e65656473206120706f736974697665206064656c7461602e002423204578616d706c65040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732edd030c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780198011408496404000001244163636f756e74496400000014496e6465780400e10301304163636f756e74496e6465780001000c526177040038011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400d801205b75383b2032305d00040000e1030000069800e5030c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e63726561736500000020446563726561736500010000e9030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eed03086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000f1030c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000114107375646f04011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000004350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e547375646f5f756e636865636b65645f77656967687408011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000114350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e1c7365745f6b657904010c6e6577dd0301504163636f756e7449644c6f6f6b75704f663c543e0002085d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e1c7375646f5f617308010c77686fdd0301504163636f756e7449644c6f6f6b75704f663c543e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0003104d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2872656d6f76655f6b657900040c845065726d616e656e746c792072656d6f76657320746865207375646f206b65792e006c2a2a546869732063616e6e6f7420626520756e2d646f6e652e2a2a040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef503084c73746f726167655f6875625f72756e74696d652c52756e74696d6543616c6c00014c1853797374656d0400ad0201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000003c50617261636861696e53797374656d0400690301d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0001002454696d657374616d700400910301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002003450617261636861696e496e666f0400950301c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e496e666f2c2052756e74696d653e0003002042616c616e6365730400d90301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e000a00105375646f0400f10301a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e000f0044436f6c6c61746f7253656c656374696f6e0400f90301d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6c6c61746f7253656c656374696f6e2c2052756e74696d653e0015001c53657373696f6e0400fd0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016002458636d70517565756504000d0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e001e002c506f6c6b61646f7458636d0400110401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e001f002843756d756c757358636d0400a50401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43756d756c757358636d2c2052756e74696d653e002000304d65737361676551756575650400a90401c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d65737361676551756575652c2052756e74696d653e0021002450726f7669646572730400ad0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f7669646572732c2052756e74696d653e0028002846696c6553797374656d0400b10401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c46696c6553797374656d2c2052756e74696d653e0029003050726f6f66734465616c65720400c90401c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f6f66734465616c65722c2052756e74696d653e002a002852616e646f6d6e6573730400cd0401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c52616e646f6d6e6573732c2052756e74696d653e002b00385061796d656e7453747265616d730400d10401cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5061796d656e7453747265616d732c2052756e74696d653e002c00284275636b65744e6674730400d50401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4275636b65744e6674732c2052756e74696d653e002d00104e6674730400dd0401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6674732c2052756e74696d653e00320000f9030c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65741043616c6c040454000124447365745f696e76756c6e657261626c657304010c6e6577a401445665633c543a3a4163636f756e7449643e000034310153657420746865206c697374206f6620696e76756c6e657261626c65202866697865642920636f6c6c61746f72732e20546865736520636f6c6c61746f7273206d75737420646f20736f6d65d07072657061726174696f6e2c206e616d656c7920746f206861766520726567697374657265642073657373696f6e206b6579732e0059015468652063616c6c2077696c6c2072656d6f766520616e79206163636f756e747320746861742068617665206e6f742072656769737465726564206b6579732066726f6d20746865207365742e20546861742069732c5d016974206973206e6f6e2d61746f6d69633b207468652063616c6c6572206163636570747320616c6c20604163636f756e74496460732070617373656420696e20606e657760205f696e646976696475616c6c795f206173310161636365707461626c6520496e76756c6e657261626c65732c20616e64206973206e6f742070726f706f73696e672061205f7365745f206f66206e657720496e76756c6e657261626c65732e005901546869732063616c6c20646f6573206e6f74206d61696e7461696e206d757475616c206578636c75736976697479206f662060496e76756c6e657261626c65736020616e64206043616e64696461746573602e20497461016973207265636f6d6d656e64656420746f207573652061206261746368206f6620606164645f696e76756c6e657261626c656020616e64206072656d6f76655f696e76756c6e657261626c656020696e73746561642e204151016062617463685f616c6c602063616e20616c736f206265207573656420746f20656e666f7263652061746f6d69636974792e20496620616e792063616e646964617465732061726520696e636c7564656420696e4d01606e6577602c20746865792073686f756c642062652072656d6f7665642077697468206072656d6f76655f696e76756c6e657261626c655f63616e6469646174656020616674657220657865637574696f6e2e00944d7573742062652063616c6c65642062792074686520605570646174654f726967696e602e587365745f646573697265645f63616e6469646174657304010c6d617810010c75333200011455015365742074686520696465616c206e756d626572206f66206e6f6e2d696e76756c6e657261626c6520636f6c6c61746f72732e204966206c6f776572696e672074686973206e756d6265722c207468656e2074686561016e756d626572206f662072756e6e696e6720636f6c6c61746f727320636f756c6420626520686967686572207468616e2074686973206669677572652e2041736964652066726f6d2074686174206564676520636173652c350174686572652073686f756c64206265206e6f206f746865722077617920746f2068617665206d6f72652063616e64696461746573207468616e207468652064657369726564206e756d6265722e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e487365745f63616e6469646163795f626f6e64040110626f6e6418013042616c616e63654f663c543e00021c78536574207468652063616e64696461637920626f6e6420616d6f756e742e0051014966207468652063616e64696461637920626f6e6420697320696e6372656173656420627920746869732063616c6c2c20616c6c2063757272656e742063616e64696461746573207768696368206861766520614d016465706f736974206c6f776572207468616e20746865206e657720626f6e642077696c6c206265206b69636b65642066726f6d20746865206c69737420616e6420676574207468656972206465706f73697473146261636b2e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e5472656769737465725f61735f63616e646964617465000310410152656769737465722074686973206163636f756e74206173206120636f6c6c61746f722063616e6469646174652e20546865206163636f756e74206d7573742028612920616c726561647920686176651d01726567697374657265642073657373696f6e206b65797320616e64202862292062652061626c6520746f207265736572766520746865206043616e646964616379426f6e64602e00dc546869732063616c6c206973206e6f7420617661696c61626c6520746f2060496e76756c6e657261626c656020636f6c6c61746f72732e306c656176655f696e74656e7400041455014465726567697374657220606f726967696e60206173206120636f6c6c61746f722063616e6469646174652e204e6f746520746861742074686520636f6c6c61746f722063616e206f6e6c79206c65617665206f6e0d0173657373696f6e206368616e67652e20546865206043616e646964616379426f6e64602077696c6c20626520756e726573657276656420696d6d6564696174656c792e001901546869732063616c6c2077696c6c206661696c2069662074686520746f74616c206e756d626572206f662063616e6469646174657320776f756c642064726f702062656c6f775c604d696e456c696769626c65436f6c6c61746f7273602e406164645f696e76756c6e657261626c6504010c77686f000130543a3a4163636f756e74496400051045014164642061206e6577206163636f756e74206077686f6020746f20746865206c697374206f662060496e76756c6e657261626c65736020636f6c6c61746f72732e206077686f60206d75737420686176651d01726567697374657265642073657373696f6e206b6579732e204966206077686f6020697320612063616e6469646174652c20746865792077696c6c2062652072656d6f7665642e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e4c72656d6f76655f696e76756c6e657261626c6504010c77686f000130543a3a4163636f756e744964000610610152656d6f766520616e206163636f756e74206077686f602066726f6d20746865206c697374206f662060496e76756c6e657261626c65736020636f6c6c61746f72732e2060496e76756c6e657261626c657360206d75737428626520736f727465642e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e2c7570646174655f626f6e6404012c6e65775f6465706f73697418013042616c616e63654f663c543e00071c5d01557064617465207468652063616e64696461637920626f6e64206f6620636f6c6c61746f722063616e64696461746520606f726967696e6020746f2061206e657720616d6f756e7420606e65775f6465706f736974602e00410153657474696e67206120606e65775f6465706f736974602074686174206973206c6f776572207468616e207468652063757272656e74206465706f736974207768696c6520606f726967696e60206973e06f6363757079696e67206120746f702d604465736972656443616e646964617465736020736c6f74206973206e6f7420616c6c6f7765642e005901546869732063616c6c2077696c6c206661696c20696620606f726967696e60206973206e6f74206120636f6c6c61746f722063616e6469646174652c20746865207570646174656420626f6e64206973206c6f77657219017468616e20746865206d696e696d756d2063616e64696461637920626f6e642c20616e642f6f722074686520616d6f756e742063616e6e6f742062652072657365727665642e4c74616b655f63616e6469646174655f736c6f7408011c6465706f73697418013042616c616e63654f663c543e000118746172676574000130543a3a4163636f756e74496400081c4d015468652063616c6c657220606f726967696e60207265706c6163657320612063616e64696461746520607461726765746020696e2074686520636f6c6c61746f722063616e646964617465206c6973742062795501726573657276696e6720606465706f736974602e2054686520616d6f756e7420606465706f73697460207265736572766564206279207468652063616c6c6572206d7573742062652067726561746572207468616ee0746865206578697374696e6720626f6e64206f66207468652074617267657420697420697320747279696e6720746f207265706c6163652e005901546869732063616c6c2077696c6c206661696c206966207468652063616c6c657220697320616c7265616479206120636f6c6c61746f722063616e646964617465206f7220696e76756c6e657261626c652c20746865550163616c6c657220646f6573206e6f74206861766520726567697374657265642073657373696f6e206b6579732c2074686520746172676574206973206e6f74206120636f6c6c61746f722063616e6469646174652cbc616e642f6f722074686520606465706f7369746020616d6f756e742063616e6e6f742062652072657365727665642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732efd030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579730104011c543a3a4b65797300011470726f6f6638011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e0104084c73746f726167655f6875625f72756e74696d652c53657373696f6e4b657973000004011061757261050401c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300000504104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004000904013c737232353531393a3a5075626c6963000009040c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d00000d040c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c0404540001145473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e657710010c75333200031449014f76657277726974657320746865206e756d626572206f66207061676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626578746f6c6420746f2073757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e657710010c75333200041445014f76657277726974657320746865206e756d626572206f66207061676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e798866757274686572206d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e657710010c7533320005144d014f76657277726974657320746865206e756d626572206f6620706167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c73010174686174206d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c6460040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e11040c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001341073656e6408011064657374d9010158426f783c56657273696f6e65644c6f636174696f6e3e00011c6d65737361676515040154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f61737365747310011064657374d9010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279d9010158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747375010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c753332000148110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e001d012a2a546869732066756e6374696f6e20697320646570726563617465643a2055736520606c696d697465645f74656c65706f72745f6173736574736020696e73746561642e2a2a005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865682020666565206f6e207468652060646573746020636861696e2e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f61737365747310011064657374d9010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279d9010158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747375010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320002785d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2c7864657374696e6174696f6e206f722072656d6f746520726573657276652e003d016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e20616e64206d6179206e6f742062652074656c65706f727461626c6520746f206064657374602e4d01202d2060617373657473602068617665206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5501202d20606173736574736020686176652064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e6101202d20606173736574736020686176652072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f7665610120202072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f20606465737460f4202020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e003d012a2a546869732066756e6374696f6e20697320646570726563617465643a2055736520606c696d697465645f726573657276655f7472616e736665725f6173736574736020696e73746561642e2a2a005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d657373616765790401b4426f783c56657273696f6e656458636d3c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f776569676874280118576569676874000320d04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e005d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e4101746865206d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f7c657865637574696f6e20617474656d70742077696c6c206265206d6164652e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ebc0134426f783c4c6f636174696f6e3e00011c76657273696f6e10012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e0d0201484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6ed9010158426f783c56657273696f6e65644c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6ed9010158426f783c56657273696f6e65644c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f61737365747314011064657374d9010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279d9010158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747375010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69747101012c5765696768744c696d69740008785d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2c7864657374696e6174696f6e206f722072656d6f746520726573657276652e003d016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e20616e64206d6179206e6f742062652074656c65706f727461626c6520746f206064657374602e4d01202d2060617373657473602068617665206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5501202d20606173736574736020686176652064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e6101202d20606173736574736020686176652072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f7665610120202072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f20606465737460f4202020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f61737365747314011064657374d9010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279d9010158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747375010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69747101012c5765696768744c696d6974000948110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865682020666565206f6e207468652060646573746020636861696e2e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e40666f7263655f73757370656e73696f6e04012473757370656e646564200110626f6f6c000a10f4536574206f7220756e7365742074686520676c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed02d206073757370656e646564603a2060747275656020746f2073757370656e642c206066616c73656020746f20726573756d652e3c7472616e736665725f61737365747314011064657374d9010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279d9010158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747375010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69747101012c5765696768744c696d6974000b845d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2cd064657374696e6174696f6e206f722072656d6f746520726573657276652c206f72207468726f7567682074656c65706f7274732e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f663501696e64657820606665655f61737365745f6974656d60202868656e636520726566657272656420746f20617320606665657360292c20757020746f20656e6f75676820746f2070617920666f724101607765696768745f6c696d697460206f66207765696768742e204966206d6f726520776569676874206973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865dc6f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e74206d6179206265206174207269736b2e006101606173736574736020286578636c7564696e672060666565736029206d75737420686176652073616d652072657365727665206c6f636174696f6e206f72206f74686572776973652062652074656c65706f727461626c65b0746f206064657374602c206e6f206c696d69746174696f6e7320696d706f736564206f6e206066656573602e4d01202d20666f72206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e20636861696e20616e644d01202020666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f442020206062656e6566696369617279602e6101202d20666f722064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f2060646573746020636861696e5901202020746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64206465706f736974207468656d50202020746f206062656e6566696369617279602e5d01202d20666f722072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f76652072657365727665735d0120202066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f2060646573746020746f206d696e74d4202020616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e5101202d20666f722074656c65706f7274733a206275726e206c6f63616c2061737365747320616e6420666f72776172642058434d20746f2060646573746020636861696e20746f206d696e742f74656c65706f7274b020202061737365747320616e64206465706f736974207468656d20746f206062656e6566696369617279602e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e2d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c5501202050617261636861696e282e2e29296020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e6468202066726f6d2072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e30636c61696d5f61737365747308011861737365747375010150426f783c56657273696f6e65644173736574733e00012c62656e6566696369617279d9010158426f783c56657273696f6e65644c6f636174696f6e3e000c185501436c61696d73206173736574732074726170706564206f6e20746869732070616c6c65742062656361757365206f66206c6566746f7665722061737365747320647572696e672058434d20657865637574696f6e2e00ac2d20606f726967696e603a20416e796f6e652063616e2063616c6c20746869732065787472696e7369632e5d012d2060617373657473603a20546865206578616374206173736574732074686174207765726520747261707065642e20557365207468652076657273696f6e20746f207370656369667920776861742076657273696f6e9877617320746865206c6174657374207768656e2074686579207765726520747261707065642e45012d206062656e6566696369617279603a20546865206c6f636174696f6e2f6163636f756e742077686572652074686520636c61696d6564206173736574732077696c6c206265206465706f73697465642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e1504080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c08563204001904015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304004504015076333a3a58636d3c52756e74696d6543616c6c3e00030008563404000501015076343a3a58636d3c52756e74696d6543616c6c3e0004000019040c0c78636d0876320c58636d042c52756e74696d6543616c6c000004001d0401745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e00001d0400000221040021040c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404007901012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404007901012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404007901012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e736525040120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574737901012c4d756c746941737365747300012c62656e6566696369617279890101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574737901012c4d756c746941737365747300011064657374890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065590101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c5d010168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572cc010c7533320001406d61785f6d6573736167655f73697a65cc010c7533320001306d61785f6361706163697479cc010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74cc010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72cc010c75333200011873656e646572cc010c753332000124726563697069656e74cc010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e04008d010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374890101344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473350401404d756c7469417373657446696c7465720001286d61785f617373657473cc010c75333200012c62656e6566696369617279890101344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473350401404d756c7469417373657446696c7465720001286d61785f617373657473cc010c75333200011064657374890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e000e003445786368616e6765417373657408011067697665350401404d756c7469417373657446696c74657200011c726563656976657901012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473350401404d756c7469417373657446696c74657200011c72657365727665890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473350401404d756c7469417373657446696c74657200011064657374890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374890101344d756c74694c6f636174696f6e000118617373657473350401404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573810101284d756c746941737365740001307765696768745f6c696d69744104012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204001904014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804001904014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574737901012c4d756c74694173736574730001187469636b6574890101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b000025040c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304007901012c4d756c74694173736574730001003c457865637574696f6e526573756c740400290401504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e00030000290404184f7074696f6e040454012d040108104e6f6e6500000010536f6d6504002d0400000100002d0400000408103104003104100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040030010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404003001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c65001900003504100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504007901012c4d756c74694173736574730000001057696c6404003904013857696c644d756c74694173736574000100003904100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869648501011c4173736574496400010c66756e3d04013c57696c6446756e676962696c697479000100003d04100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000041040c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d6974656404002c010c7536340001000045040c0c78636d0876330c58636d041043616c6c00000400490401585665633c496e737472756374696f6e3c43616c6c3e3e000049040000024d04004d040c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400ad01012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400ad01012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400ad01012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736551040120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572650401544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473ad01012c4d756c746941737365747300012c62656e6566696369617279bd0101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473ad01012c4d756c746941737365747300011064657374bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64590101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c5d01014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572cc010c7533320001406d61785f6d6573736167655f73697a65cc010c7533320001306d61785f6361706163697479cc010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74cc010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72cc010c75333200011873656e646572cc010c753332000124726563697069656e74cc010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400c1010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400690401445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574736d0401404d756c7469417373657446696c74657200012c62656e6566696369617279bd0101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574736d0401404d756c7469417373657446696c74657200011064657374bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e000e003445786368616e676541737365740c0110676976656d0401404d756c7469417373657446696c74657200011077616e74ad01012c4d756c746941737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574736d0401404d756c7469417373657446696c74657200011c72657365727665bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574736d0401404d756c7469417373657446696c74657200011064657374bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f690401445175657279526573706f6e7365496e666f0001186173736574736d0401404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573b50101284d756c746941737365740001307765696768745f6c696d69747101012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204004504012458636d3c43616c6c3e0015002c536574417070656e64697804004504012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473ad01012c4d756c74694173736574730001187469636b6574bd0101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400ad01012c4d756c7469417373657473001c002c45787065637441737365740400ad01012c4d756c7469417373657473001d00304578706563744f726967696e0400650401544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400350101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304004d0101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f690401445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578cc010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72cc010c75333200013c6d696e5f63726174655f6d696e6f72cc010c753332002200505265706f72745472616e736163745374617475730400690401445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400c50101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bcd0101244e6574776f726b496400012c64657374696e6174696f6ec1010154496e746572696f724d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e002600244c6f636b41737365740801146173736574b50101284d756c74694173736574000120756e6c6f636b6572bd0101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574b50101284d756c74694173736574000118746172676574bd0101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574b50101284d756c746941737365740001146f776e6572bd0101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574b50101284d756c746941737365740001186c6f636b6572bd0101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400bd0101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747101012c5765696768744c696d6974000130636865636b5f6f726967696e650401544f7074696f6e3c4d756c74694c6f636174696f6e3e002f000051040c0c78636d08763320526573706f6e7365000118104e756c6c000000184173736574730400ad01012c4d756c74694173736574730001003c457865637574696f6e526573756c740400350101504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f040055040198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c7404004d0101384d617962654572726f72436f64650005000055040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015904045300000400610401185665633c543e000059040c0c78636d0876332850616c6c6574496e666f0000180114696e646578cc010c7533320001106e616d655d040180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d655d040180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72cc010c7533320001146d696e6f72cc010c7533320001147061746368cc010c75333200005d040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00006104000002590400650404184f7074696f6e04045401bd010108104e6f6e6500000010536f6d650400bd01000001000069040c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ebd0101344d756c74694c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400006d04100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400ad01012c4d756c74694173736574730000001057696c6404007104013857696c644d756c74694173736574000100007104100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f660801086964b901011c4173736574496400010c66756e7504013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400cc010c75333200020030416c6c4f66436f756e7465640c01086964b901011c4173736574496400010c66756e7504013c57696c6446756e676962696c697479000114636f756e74cc010c753332000300007504100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c65000100007904080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c08563204007d04015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304008d04015076333a3a58636d3c52756e74696d6543616c6c3e00030008563404009904015076343a3a58636d3c52756e74696d6543616c6c3e000400007d040c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400810401745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000810400000285040085040c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404007901012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404007901012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404007901012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e736525040120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574737901012c4d756c746941737365747300012c62656e6566696369617279890101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574737901012c4d756c746941737365747300011064657374890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065590101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c89040168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572cc010c7533320001406d61785f6d6573736167655f73697a65cc010c7533320001306d61785f6361706163697479cc010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74cc010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72cc010c75333200011873656e646572cc010c753332000124726563697069656e74cc010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e04008d010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374890101344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473350401404d756c7469417373657446696c7465720001286d61785f617373657473cc010c75333200012c62656e6566696369617279890101344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473350401404d756c7469417373657446696c7465720001286d61785f617373657473cc010c75333200011064657374890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e000e003445786368616e6765417373657408011067697665350401404d756c7469417373657446696c74657200011c726563656976657901012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473350401404d756c7469417373657446696c74657200011c72657365727665890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473350401404d756c7469417373657446696c74657200011064657374890101344d756c74694c6f636174696f6e00010c78636d1904011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374890101344d756c74694c6f636174696f6e000118617373657473350401404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573810101284d756c746941737365740001307765696768745f6c696d69744104012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204007d04014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804007d04014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574737901012c4d756c74694173736574730001187469636b6574890101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b000089040c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656438011c5665633c75383e00008d040c0c78636d0876330c58636d041043616c6c00000400910401585665633c496e737472756374696f6e3c43616c6c3e3e0000910400000295040095040c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400ad01012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400ad01012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400ad01012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736551040120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572650401544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473ad01012c4d756c746941737365747300012c62656e6566696369617279bd0101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473ad01012c4d756c746941737365747300011064657374bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64590101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c8904014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572cc010c7533320001406d61785f6d6573736167655f73697a65cc010c7533320001306d61785f6361706163697479cc010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74cc010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72cc010c75333200011873656e646572cc010c753332000124726563697069656e74cc010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400c1010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400690401445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574736d0401404d756c7469417373657446696c74657200012c62656e6566696369617279bd0101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574736d0401404d756c7469417373657446696c74657200011064657374bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e000e003445786368616e676541737365740c0110676976656d0401404d756c7469417373657446696c74657200011077616e74ad01012c4d756c746941737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574736d0401404d756c7469417373657446696c74657200011c72657365727665bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574736d0401404d756c7469417373657446696c74657200011064657374bd0101344d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f690401445175657279526573706f6e7365496e666f0001186173736574736d0401404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573b50101284d756c746941737365740001307765696768745f6c696d69747101012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204008d04012458636d3c43616c6c3e0015002c536574417070656e64697804008d04012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473ad01012c4d756c74694173736574730001187469636b6574bd0101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400ad01012c4d756c7469417373657473001c002c45787065637441737365740400ad01012c4d756c7469417373657473001d00304578706563744f726967696e0400650401544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400350101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304004d0101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f690401445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578cc010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72cc010c75333200013c6d696e5f63726174655f6d696e6f72cc010c753332002200505265706f72745472616e736163745374617475730400690401445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400c50101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bcd0101244e6574776f726b496400012c64657374696e6174696f6ec1010154496e746572696f724d756c74694c6f636174696f6e00010c78636d4504011c58636d3c28293e002600244c6f636b41737365740801146173736574b50101284d756c74694173736574000120756e6c6f636b6572bd0101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574b50101284d756c74694173736574000118746172676574bd0101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574b50101284d756c746941737365740001146f776e6572bd0101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574b50101284d756c746941737365740001186c6f636b6572bd0101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400bd0101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747101012c5765696768744c696d6974000130636865636b5f6f726967696e650401544f7074696f6e3c4d756c74694c6f636174696f6e3e002f000099040c2c73746167696e675f78636d0876340c58636d041043616c6c000004009d0401585665633c496e737472756374696f6e3c43616c6c3e3e00009d04000002a10400a1040c2c73746167696e675f78636d0876342c496e737472756374696f6e041043616c6c0001c03457697468647261774173736574040011010118417373657473000000545265736572766541737365744465706f7369746564040011010118417373657473000100585265636569766554656c65706f727465644173736574040011010118417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736531010120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572550101404f7074696f6e3c4c6f636174696f6e3e000300345472616e7366657241737365740801186173736574731101011841737365747300012c62656e6566696369617279bc01204c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574731101011841737365747300011064657374bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64590101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c8904014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572cc010c7533320001406d61785f6d6573736167655f73697a65cc010c7533320001306d61785f6361706163697479cc010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74cc010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72cc010c75333200011873656e646572cc010c753332000124726563697069656e74cc010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400c00140496e746572696f724c6f636174696f6e000b002c5265706f72744572726f720400610101445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574736501012c417373657446696c74657200012c62656e6566696369617279bc01204c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574736501012c417373657446696c74657200011064657374bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e000e003445786368616e676541737365740c0110676976656501012c417373657446696c74657200011077616e741101011841737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574736501012c417373657446696c74657200011c72657365727665bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574736501012c417373657446696c74657200011064657374bc01204c6f636174696f6e00010c78636d0501011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f610101445175657279526573706f6e7365496e666f0001186173736574736501012c417373657446696c74657200120030427579457865637574696f6e080110666565731901011441737365740001307765696768745f6c696d69747101012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204009904012458636d3c43616c6c3e0015002c536574417070656e64697804009904012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473110101184173736574730001187469636b6574bc01204c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e4173736574040011010118417373657473001c002c4578706563744173736574040011010118417373657473001d00304578706563744f726967696e0400550101404f7074696f6e3c4c6f636174696f6e3e001e002c4578706563744572726f720400350101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304004d0101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f610101445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578cc010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72cc010c75333200013c6d696e5f63726174655f6d696e6f72cc010c753332002200505265706f72745472616e736163745374617475730400610101445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400c801204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bd401244e6574776f726b496400012c64657374696e6174696f6ec00140496e746572696f724c6f636174696f6e00010c78636d0501011c58636d3c28293e002600244c6f636b41737365740801146173736574190101144173736574000120756e6c6f636b6572bc01204c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574190101144173736574000118746172676574bc01204c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365741901011441737365740001146f776e6572bc01204c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365741901011441737365740001186c6f636b6572bc01204c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400bc01204c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747101012c5765696768744c696d6974000130636865636b5f6f726967696e550101404f7074696f6e3c4c6f636174696f6e3e002f0000a5040c4863756d756c75735f70616c6c65745f78636d1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea9040c5070616c6c65745f6d6573736167655f71756575651870616c6c65741043616c6c04045400010824726561705f706167650801386d6573736167655f6f726967696ee50101484d6573736167654f726967696e4f663c543e000128706167655f696e64657810012450616765496e6465780000043d0152656d6f76652061207061676520776869636820686173206e6f206d6f7265206d657373616765732072656d61696e696e6720746f2062652070726f636573736564206f72206973207374616c652e48657865637574655f6f7665727765696768741001386d6573736167655f6f726967696ee50101484d6573736167654f726967696e4f663c543e0001107061676510012450616765496e646578000114696e64657810011c543a3a53697a650001307765696768745f6c696d6974280118576569676874000134784578656375746520616e206f766572776569676874206d6573736167652e004d0154656d706f726172792070726f63657373696e67206572726f72732077696c6c2062652070726f706167617465642077686572656173207065726d616e656e74206572726f7273206172652074726561746564546173207375636365737320636f6e646974696f6e2e00742d20606f726967696e603a204d75737420626520605369676e6564602e35012d20606d6573736167655f6f726967696e603a20546865206f726967696e2066726f6d20776869636820746865206d65737361676520746f20626520657865637574656420617272697665642e3d012d206070616765603a20546865207061676520696e2074686520717565756520696e20776869636820746865206d65737361676520746f2062652065786563757465642069732073697474696e672e09012d2060696e646578603a2054686520696e64657820696e746f20746865207175657565206f6620746865206d65737361676520746f2062652065786563757465642e59012d20607765696768745f6c696d6974603a20546865206d6178696d756d20616d6f756e74206f662077656967687420616c6c6f77656420746f20626520636f6e73756d656420696e2074686520657865637574696f6e4420206f6620746865206d6573736167652e00f442656e63686d61726b20636f6d706c657869747920636f6e73696465726174696f6e733a204f28696e646578202b207765696768745f6c696d6974292e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ead040c6070616c6c65745f73746f726167655f70726f7669646572731870616c6c65741043616c6c04045400012c4c726571756573745f6d73705f7369676e5f7570100120636170616369747930014853746f7261676544617461556e69743c543e0001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e00012876616c75655f70726f700102014c56616c756550726f706f736974696f6e3c543e00013c7061796d656e745f6163636f756e74000130543a3a4163636f756e7449640000686901446973706174636861626c652065787472696e736963207468617420616c6c6f777320757365727320746f207265717565737420746f207369676e2075702061732061204d61696e2053746f726167652050726f76696465722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e4101546865206f726967696e206d75737420626520746865206163636f756e7420746861742077616e747320746f207369676e2075702061732061204d61696e2053746f726167652050726f76696465722e00490146756e64732070726f706f7274696f6e616c20746f207468652063617061636974792072657175657374656420617265207265736572766564202868656c64292066726f6d20746865206163636f756e742e002c506172616d65746572733a71012d20606361706163697479603a2054686520746f74616c20616d6f756e74206f662064617461207468617420746865204d61696e2053746f726167652050726f76696465722077696c6c2062652061626c6520746f2073746f72652e91012d20606d756c7469616464726573736573603a2054686520766563746f72206f66206d756c7469616464726573736573207468617420746865207369676e65722077616e747320746f20726567697374657220286163636f7264696e6720746f20746865f05b4d756c74696164647220737065635d2868747470733a2f2f6769746875622e636f6d2f6d756c7469666f726d6174732f6d756c746961646472292981012d206076616c75655f70726f70603a205468652076616c75652070726f706f736974696f6e207468617420746865207369676e65722077696c6c2070726f766964652061732061204d61696e2053746f726167652050726f766964657220746fad01757365727320616e642077616e747320746f207265676973746572206f6e2d636861696e2e20497420636f756c642062652064617461206c696d6974732c20636f6d6d756e69636174696f6e2070726f746f636f6c7320746f2061636365737320746865207573657227733c646174612c20616e64206d6f72652e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722e2501322e20436865636b207468617420746865207369676e6572206973206e6f7420616c72656164792072656769737465726564206173206569746865722061204d5350206f72204253509c332e20436865636b207468617420746865206d756c7469616464726573732069732076616c69646101342e20436865636b207468617420746865206461746120746f2062652073746f7265642069732067726561746572207468616e20746865206d696e696d756d207265717569726564206279207468652072756e74696d652e9101352e2043616c63756c61746520686f77206d756368206465706f7369742077696c6c20746865207369676e6572206861766520746f20706179207573696e672074686520616d6f756e74206f6620646174612069742077616e747320746f2073746f7265f0362e20436865636b207468617420746865207369676e65722068617320656e6f7567682066756e647320746f2070617920746865206465706f7369748c372e20486f6c6420746865206465706f7369742066726f6d20746865207369676e65726901382e2055706461746520746865205369676e2055702052657175657374732073746f7261676520746f2061646420746865207369676e65722061732072657175657374696e6720746f207369676e2075702061732061204d535000d8456d69747320604d7370526571756573745369676e55705375636365737360206576656e74207768656e207375636365737366756c2e4c726571756573745f6273705f7369676e5f75700c0120636170616369747930014853746f7261676544617461556e69743c543e0001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e00013c7061796d656e745f6163636f756e74000130543a3a4163636f756e74496400015c4501446973706174636861626c652065787472696e736963207468617420616c6c6f777320757365727320746f207369676e2075702061732061204261636b75702053746f726167652050726f76696465722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e4901546865206f726967696e206d75737420626520746865206163636f756e7420746861742077616e747320746f207369676e2075702061732061204261636b75702053746f726167652050726f76696465722e00490146756e64732070726f706f7274696f6e616c20746f207468652063617061636974792072657175657374656420617265207265736572766564202868656c64292066726f6d20746865206163636f756e742e002c506172616d65746572733a79012d20606361706163697479603a2054686520746f74616c20616d6f756e74206f662064617461207468617420746865204261636b75702053746f726167652050726f76696465722077696c6c2062652061626c6520746f2073746f72652e91012d20606d756c7469616464726573736573603a2054686520766563746f72206f66206d756c7469616464726573736573207468617420746865207369676e65722077616e747320746f20726567697374657220286163636f7264696e6720746f20746865f05b4d756c74696164647220737065635d2868747470733a2f2f6769746875622e636f6d2f6d756c7469666f726d6174732f6d756c746961646472292900ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722e2501322e20436865636b207468617420746865207369676e6572206973206e6f7420616c72656164792072656769737465726564206173206569746865722061204d5350206f72204253509c332e20436865636b207468617420746865206d756c7469616464726573732069732076616c69645d01342e20436865636b207468617420746865206461746120746f2062652073746f7265642069732067726561746572207468616e20746865206d696e696d756d207265717569726564206279207468652072756e74696d659101352e2043616c63756c61746520686f77206d756368206465706f7369742077696c6c20746865207369676e6572206861766520746f20706179207573696e672074686520616d6f756e74206f6620646174612069742077616e747320746f2073746f7265f0362e20436865636b207468617420746865207369676e65722068617320656e6f7567682066756e647320746f2070617920746865206465706f7369748c372e20486f6c6420746865206465706f7369742066726f6d20746865207369676e65726901382e2055706461746520746865205369676e2055702052657175657374732073746f7261676520746f2061646420746865207369676e65722061732072657175657374696e6720746f207369676e20757020617320612042535000d8456d6974732060427370526571756573745369676e55705375636365737360206576656e74207768656e207375636365737366756c2e3c636f6e6669726d5f7369676e5f757004014070726f76696465725f6163636f756e749c01504f7074696f6e3c543a3a4163636f756e7449643e00025cad01446973706174636861626c652065787472696e736963207468617420616c6c6f777320757365727320746f20636f6e6669726d207468656972207369676e20757020617320612053746f726167652050726f76696465722c20656974686572204d5350206f72204253502e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e9d01546865206f726967696e206d75737420626520746865206163636f756e7420746861742072657175657374656420746f207369676e20757020617320612053746f726167652050726f76696465722c20657863657074207768656e2070726f766964696e67206129016070726f76696465725f6163636f756e746020706172616d657465722c20696e207768696368206361736520746865206f726967696e2063616e20626520616e79206163636f756e742e002c506172616d65746572733ab9012d206070726f76696465725f6163636f756e74603a20546865206163636f756e7420746861742072657175657374656420746f207369676e20757020617320612053746f726167652050726f76696465722e204966206e6f742070726f76696465642c20746865207369676e6572e477696c6c20626520636f6e7369646572656420746865206163636f756e7420746861742072657175657374656420746f207369676e2075702e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633a98312e20436865636b2074686174207468652065787472696e73696320776173207369676e65641101322e20436865636b207468617420746865206163636f756e74207265636569766564206861732072657175657374656420746f20726567697374657220617320612053508101332e20436865636b2074686174207468652063757272656e742072616e646f6d6e6573732069732073756666696369656e746c7920667265736820746f206265207573656420617320612073616c7420666f7220746861742072657175657374a4342e20436865636b207468617420746865207265717565737420686173206e6f7420657870697265643101352e20526567697374657220746865207369676e65722061732061204d5350206f722042535020776974682074686520646174612070726f766964656420696e207468652072657175657374009d01456d69747320604d73705369676e55705375636365737360206f7220604273705369676e55705375636365737360206576656e74207768656e207375636365737366756c2c20646570656e64696e67206f6e207468652074797065206f66207369676e2075702e00184e6f7465733a1d012d20546869732065787472696e73696320636f756c642062652063616c6c656420627920746865207573657220697473656c66206f722062792061207468697264207061727479b5012d20546865206465706f73697420746861742074686520757365722068617320746f2070617920746f20726567697374657220617320612053502069732068656c64207768656e20746865207573657220726571756573747320746f207265676973746572206173206120535081012d20496620746869732065787472696e736963206973207375636365737366756c2c2069742077696c6c206265206672656520666f72207468652063616c6c65722c20746f20696e63656e74697665207374617465206465626c6f6174696e673863616e63656c5f7369676e5f7570000330c101446973706174636861626c652065787472696e736963207468617420616c6c6f777320612075736572207769746820612070656e64696e67205369676e205570205265717565737420746f2063616e63656c2069742c2067657474696e6720746865206465706f736974206261636b2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e3d01546865206f726967696e206d75737420626520746865206163636f756e7420746861742072657175657374656420746f207369676e20757020617320612053746f726167652050726f76696465722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722ee4322e20436865636b207468617420746865207369676e6572206861732072657175657374656420746f207369676e2075702061732061205350dc332e2044656c6574652074686520726571756573742066726f6d20746865205369676e2055702052657175657374732073746f726167658c342e2052657475726e20746865206465706f73697420746f20746865207369676e657200d0456d69747320605369676e55705265717565737443616e63656c656460206576656e74207768656e207375636365737366756c2e306d73705f7369676e5f6f66660004384101446973706174636861626c652065787472696e736963207468617420616c6c6f777320757365727320746f207369676e206f66662061732061204d61696e2053746f726167652050726f76696465722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e4501546865206f726967696e206d75737420626520746865206163636f756e7420746861742077616e747320746f207369676e206f66662061732061204d61696e2053746f726167652050726f76696465722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722ebc322e20436865636b207468617420746865207369676e657220697320726567697374657265642061732061204d53504d01332e20436865636b207468617420746865204d535020686173206e6f2073746f726167652061737369676e656420746f20697420286e6f206275636b657473206f722064617461207573656420627920697429e4342e2055706461746520746865204d5350732073746f726167652c2072656d6f76696e6720746865207369676e657220617320616e204d53508c352e2052657475726e20746865206465706f73697420746f20746865207369676e65724101362e2044656372656d656e74207468652073746f72616765207468617420686f6c647320746f74616c20616d6f756e74206f66204d5350732063757272656e746c7920696e207468652073797374656d00c0456d69747320604d73705369676e4f66665375636365737360206576656e74207768656e207375636365737366756c2e306273705f7369676e5f6f666600053c4901446973706174636861626c652065787472696e736963207468617420616c6c6f777320757365727320746f207369676e206f66662061732061204261636b75702053746f726167652050726f76696465722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e4d01546865206f726967696e206d75737420626520746865206163636f756e7420746861742077616e747320746f207369676e206f66662061732061204261636b75702053746f726167652050726f76696465722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722ebc322e20436865636b207468617420746865207369676e65722069732072656769737465726564206173206120425350cc332e20436865636b2074686174207468652042535020686173206e6f2073746f726167652061737369676e656420746f206974e4342e205570646174652074686520425350732073746f726167652c2072656d6f76696e6720746865207369676e657220617320616e204253503501352e205570646174652074686520746f74616c206361706163697479206f6620616c6c20425350732c2072656d6f76696e6720746865206361706163697479206f6620746865207369676e65728c362e2052657475726e20746865206465706f73697420746f20746865207369676e65724101372e2044656372656d656e74207468652073746f72616765207468617420686f6c647320746f74616c20616d6f756e74206f6620425350732063757272656e746c7920696e207468652073797374656d00c0456d69747320604273705369676e4f66665375636365737360206576656e74207768656e207375636365737366756c2e3c6368616e67655f63617061636974790401306e65775f636170616369747930014853746f7261676544617461556e69743c543e0006603901446973706174636861626c652065787472696e736963207468617420616c6c6f777320757365727320746f206368616e676520746865697220616d6f756e74206f662073746f726564206461746100c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e0501546865206f726967696e206d75737420626520746865206163636f756e7420746861742077616e747320746f206368616e6765206974732063617061636974792e002c506172616d65746572733a8d012d20606e65775f6361706163697479603a20546865206e657720746f74616c20616d6f756e74206f6620646174612074686174207468652053746f726167652050726f76696465722077616e747320746f2062652061626c6520746f2073746f72652e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722eb8322e20436865636b207468617420746865207369676e6572206973207265676973746572656420617320612053505101332e20436865636b207468617420656e6f7567682074696d6520686173207061737365642073696e636520746865206c6173742074696d6520746865205350206368616e676564206974732063617061636974794901342e20436865636b207468617420746865206e65772063617061636974792069732067726561746572207468616e20746865206d696e696d756d207265717569726564206279207468652072756e74696d651d01352e20436865636b207468617420746865206e65772063617061636974792069732067726561746572207468616e20746865206461746120757365642062792074686973205350e4362e2043616c63756c61746520746865206e6577206465706f736974206e656564656420666f722074686973206e65772063617061636974795501372e20436865636b20746f2073656520696620746865206e6577206465706f736974206e65656465642069732067726561746572206f72206c657373207468616e207468652063757272656e74206465706f736974ec09612e20496620746865206e6577206465706f7369742069732067726561746572207468616e207468652063757272656e74206465706f7369743a15010909692e20436865636b207468617420746865207369676e65722068617320656e6f7567682066756e647320746f207061792074686973206578747261206465706f736974b0090969692e20486f6c6420746865206578747261206465706f7369742066726f6d20746865207369676e6572850109622e20496620746865206e6577206465706f736974206973206c657373207468616e207468652063757272656e74206465706f7369742c2072657475726e207468652068656c6420646966666572656e636520746f20746865207369676e6572c8372e2055706461746520746865205350732073746f7261676520746f206368616e67652074686520746f74616c20646174617501382e20496620757365722069732061204253502c207570646174652074686520746f74616c206361706163697479206f6620746865206e6574776f726b202873756d206f6620616c6c2063617061636974696573206f6620425350732900b8456d697473206043617061636974794368616e67656460206576656e74207768656e207375636365737366756c2e386164645f76616c75655f70726f700401386e65775f76616c75655f70726f700102014c56616c756550726f706f736974696f6e3c543e0007409d01446973706174636861626c652065787472696e736963206f6e6c792063616c6c61626c6520627920616e204d5350207468617420616c6c6f777320697420746f2061646420612076616c75652070726f706f736974696f6e20746f20697473207365727669636500c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e1501546865206f726967696e206d75737420626520746865206163636f756e7420746861742077616e747320746f2061646420612076616c75652070726f706f736974696f6e2e002c506172616d65746572733a4d012d20606e65775f76616c75655f70726f70603a205468652076616c75652070726f706f736974696f6e207468617420746865204d53502077616e747320746f2061646420746f2069747320736572766963652e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722ebc322e20436865636b207468617420746865207369676e657220697320726567697374657265642061732061204d53503901332e20436865636b207468617420746865204d535020686173206e6f74207265616368656420746865206d6178696d756d20616d6f756e74206f662076616c75652070726f706f736974696f6e734501342e20436865636b2074686174207468652076616c75652070726f706f736974696f6e2069732076616c6964202873697a6520616e6420616e79206f746865722072656c6576616e7420636865636b73293501352e2055706461746520746865204d5350732073746f7261676520746f20616464207468652076616c75652070726f706f736974696f6e20287769746820697473206964656e7469666965722900b4456d697473206056616c756550726f70416464656460206576656e74207768656e207375636365737366756c2e44666f7263655f6d73705f7369676e5f757018010c77686f000130543a3a4163636f756e7449640001186d73705f69643401604d61696e53746f7261676550726f766964657249643c543e000120636170616369747930014853746f7261676544617461556e69743c543e0001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e00012876616c75655f70726f700102014c56616c756550726f706f736974696f6e3c543e00013c7061796d656e745f6163636f756e74000130543a3a4163636f756e7449640008588d01446973706174636861626c652065787472696e736963207468617420616c6c6f777320746f20666f72636566756c6c7920616e64206175746f6d61746963616c6c792073696e672075702061204d61696e2053746f726167652050726f76696465722e00bc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f742e5101546865206077686f6020706172616d6574657220697320746865206163636f756e7420746861742077616e747320746f207369676e2075702061732061204d61696e2053746f726167652050726f76696465722e00c10146756e64732070726f706f7274696f6e616c20746f207468652063617061636974792072657175657374656420617265207265736572766564202868656c64292066726f6d20746865206163636f756e742070617373656420617320746865206077686f6020706172616d657465722e002c506172616d65746572733a19012d206077686f603a20546865206163636f756e7420746861742077616e747320746f207369676e2075702061732061204d61696e2053746f726167652050726f76696465722ed1012d20606d73705f6964603a20546865204d61696e2053746f726167652050726f7669646572204944207468617420746865206163636f756e742070617373656420617320746865206077686f6020706172616d657465722069732072657175657374696e6720746f207369676e2075702061732e71012d20606361706163697479603a2054686520746f74616c20616d6f756e74206f662064617461207468617420746865204d61696e2053746f726167652050726f76696465722077696c6c2062652061626c6520746f2073746f72652e91012d20606d756c7469616464726573736573603a2054686520766563746f72206f66206d756c7469616464726573736573207468617420746865207369676e65722077616e747320746f20726567697374657220286163636f7264696e6720746f20746865f05b4d756c74696164647220737065635d2868747470733a2f2f6769746875622e636f6d2f6d756c7469666f726d6174732f6d756c746961646472292981012d206076616c75655f70726f70603a205468652076616c75652070726f706f736974696f6e207468617420746865207369676e65722077696c6c2070726f766964652061732061204d61696e2053746f726167652050726f766964657220746fad01757365727320616e642077616e747320746f207265676973746572206f6e2d636861696e2e20497420636f756c642062652064617461206c696d6974732c20636f6d6d756e69636174696f6e2070726f746f636f6c7320746f2061636365737320746865207573657227733c646174612c20616e64206d6f72652e00a4546869732065787472696e7369632077696c6c20706572666f726d20746865207374657073206f663a0d01312e205b726571756573745f6d73705f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a726571756573745f6d73705f7369676e5f757029ec322e205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f757029003901456d69747320604d7370526571756573745369676e5570537563636573736020616e6420604d73705369676e55705375636365737360206576656e7473207768656e207375636365737366756c2e44666f7263655f6273705f7369676e5f757018010c77686f000130543a3a4163636f756e7449640001186273705f69643401684261636b757053746f7261676550726f766964657249643c543e000120636170616369747930014853746f7261676544617461556e69743c543e0001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e00013c7061796d656e745f6163636f756e74000130543a3a4163636f756e7449640001187765696768740d02017c4f7074696f6e3c52657075746174696f6e576569676874547970653c543e3e00094c9501446973706174636861626c652065787472696e736963207468617420616c6c6f777320746f20666f72636566756c6c7920616e64206175746f6d61746963616c6c792073696e672075702061204261636b75702053746f726167652050726f76696465722e00bc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f742e5901546865206077686f6020706172616d6574657220697320746865206163636f756e7420746861742077616e747320746f207369676e2075702061732061204261636b75702053746f726167652050726f76696465722e00c10146756e64732070726f706f7274696f6e616c20746f207468652063617061636974792072657175657374656420617265207265736572766564202868656c64292066726f6d20746865206163636f756e742070617373656420617320746865206077686f6020706172616d657465722e002c506172616d65746572733a21012d206077686f603a20546865206163636f756e7420746861742077616e747320746f207369676e2075702061732061204261636b75702053746f726167652050726f76696465722ed9012d20606273705f6964603a20546865204261636b75702053746f726167652050726f7669646572204944207468617420746865206163636f756e742070617373656420617320746865206077686f6020706172616d657465722069732072657175657374696e6720746f207369676e2075702061732e79012d20606361706163697479603a2054686520746f74616c20616d6f756e74206f662064617461207468617420746865204261636b75702053746f726167652050726f76696465722077696c6c2062652061626c6520746f2073746f72652e91012d20606d756c7469616464726573736573603a2054686520766563746f72206f66206d756c7469616464726573736573207468617420746865207369676e65722077616e747320746f20726567697374657220286163636f7264696e6720746f20746865f05b4d756c74696164647220737065635d2868747470733a2f2f6769746875622e636f6d2f6d756c7469666f726d6174732f6d756c746961646472292900a4546869732065787472696e7369632077696c6c20706572666f726d20746865207374657073206f663a0d01312e205b726571756573745f6273705f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a726571756573745f6273705f7369676e5f757029ec322e205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f757029003901456d6974732060427370526571756573745369676e5570537563636573736020616e6420604273705369676e55705375636365737360206576656e7473207768656e207375636365737366756c2e14736c61736804012c70726f76696465725f69643401244861736849643c543e000a10fc446973706174636861626c652065787472696e73696320746f20736c6173682061205f736c61736861626c655f2053746f726167652050726f76696465722e00b501412053746f726167652050726f7669646572206973205f736c61736861626c655f2069666620697420686173206661696c656420746f20726573706f6e6420746f206368616c6c656e67657320666f722070726f766964696e672070726f6f6673206f662073746f726167652e4d02496e2074686520636f6e74657874206f66207468652053746f726167654875622070726f746f636f6c2c207468652070726f6f66732d6465616c65722070616c6c6574206d61726b7320612053746f726167652050726f7669646572206173205f736c61736861626c655f207768656e206974206661696c7320746f20726573706f6e6420746f206368616c6c656e6765732e04c4446973706174636861626c6573202865787472696e7369637329206578706f73656420627920746869732070616c6c6574b1040c4870616c6c65745f66696c655f73797374656d1870616c6c65741043616c6c040454000144346372656174655f6275636b65740c01186d73705f696434014050726f76696465724964466f723c543e0001106e616d65f90101404275636b65744e616d65466f723c543e00011c70726976617465200110626f6f6c0000004c726571756573745f6d6f76655f6275636b65740801246275636b65745f69643401384275636b65744964466f723c543e0001286e65775f6d73705f696434014050726f76696465724964466f723c543e0001007c6d73705f726573706f6e645f6d6f76655f6275636b65745f726571756573740801246275636b65745f69643401384275636b65744964466f723c543e000120726573706f6e7365b50401644275636b65744d6f766552657175657374526573706f6e7365000200547570646174655f6275636b65745f707269766163790801246275636b65745f69643401384275636b65744964466f723c543e00011c70726976617465200110626f6f6c000300ac6372656174655f616e645f6173736f63696174655f636f6c6c656374696f6e5f776974685f6275636b65740401246275636b65745f69643401384275636b65744964466f723c543e000404c043726561746520616e64206173736f6369617465206120636f6c6c656374696f6e20776974682061206275636b65742e5469737375655f73746f726167655f726571756573741801246275636b65745f69643401384275636b65744964466f723c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e00012c66696e6765727072696e7434013846696e6765727072696e743c543e00011073697a6530013853746f72616765446174613c543e0001186d73705f696434014050726f76696465724964466f723c543e000120706565725f696473f5010128506565724964733c543e0005049849737375652061206e65772073746f72616765207265717565737420666f7220612066696c65587265766f6b655f73746f726167655f7265717565737404012066696c655f6b65793401344d65726b6c65486173683c543e000604585265766f6b652073746f726167652072657175657374ac6273705f6164645f646174615f7365727665725f666f725f6d6f76655f6275636b65745f726571756573740401246275636b65745f69643401384275636b65744964466f723c543e000704690141646420796f757273656c66206173206120646174612073657276657220666f722070726f766964696e67207468652066696c6573206f6620746865206275636b65742072657175657374656420746f206265206d6f7665642e686d73705f6163636570745f73746f726167655f726571756573740c012066696c655f6b65793401344d65726b6c65486173683c543e00012866696c655f70726f6f663502012c4b657950726f6f663c543e0001686e6f6e5f696e636c7573696f6e5f666f726573745f70726f6f6625020138466f7265737450726f6f663c543e0008180101557365642062792061204d535020746f20636f6e6669726d2073746f72696e6720612066696c652074686174207761732061737369676e656420746f2069742e007501546865204d53502068617320746f2070726f7669646520612070726f6f66206f66207468652066696c652773206b657920616e642061206e6f6e2d696e636c7573696f6e2070726f6f6620666f72207468652066696c652773206b65797d01696e20746865206275636b65742773204d65726b6c6520506174726963696120466f726573742e205468652070726f6f66206f66207468652066696c652773206b6579206973206e656365737361727920746f2076657269667920746861748101746865204d53502061637475616c6c7920686173207468652066696c652c207768696c6520746865206e6f6e2d696e636c7573696f6e2070726f6f66206973206e656365737361727920746f20766572696679207468617420746865204d5350647761736e27742073746f72696e67206974206265666f72652e346273705f766f6c756e7465657204012066696c655f6b65793401344d65726b6c65486173683c543e000918b85573656420627920612042535020746f20766f6c756e7465657220666f722073746f72696e6720612066696c652e008d01546865207472616e73616374696f6e2077696c6c206661696c2069662074686520584f52206265747765656e207468652066696c6520494420616e642074686520425350204944206973206e6f742062656c6f7720746865207468726573686f6c642c3d01736f206120425350206973207374726f6e676c79206164766973656420746f20636865636b206265666f726568616e642e20416e6f7468657220726561736f6e20666f72206661696c7572652069735101696620746865206d6178696d756d206e756d626572206f66204253507320686173206265656e20726561636865642e2041207375636365737366756c2061737369676e6d656e7420617320425350206d65616e73e87468617420736f6d65206f662074686520636f6c6c61746572616c20746f6b656e73206f662074686174204d5350206172652066726f7a656e2e4c6273705f636f6e6669726d5f73746f72696e670801686e6f6e5f696e636c7573696f6e5f666f726573745f70726f6f6625020138466f7265737450726f6f663c543e00015066696c655f6b6579735f616e645f70726f6f6673b904013501426f756e6465645665633c284d65726b6c65486173683c543e2c204b657950726f6f663c543e292c20543a3a0a4d61784261746368436f6e6669726d53746f7261676552657175657374732c3e000a0411015573656420627920612042535020746f20636f6e6669726d2074686579206172652073746f72696e672064617461206f6620612073746f7261676520726571756573742e606273705f726571756573745f73746f705f73746f72696e6720012066696c655f6b65793401344d65726b6c65486173683c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e0001146f776e6572000130543a3a4163636f756e74496400012c66696e6765727072696e7434013846696e6765727072696e743c543e00011073697a6530013853746f72616765446174613c543e00012463616e5f7365727665200110626f6f6c000158696e636c7573696f6e5f666f726573745f70726f6f6625020138466f7265737450726f6f663c543e000b20d0457865637574656420627920612042535020746f207265717565737420746f2073746f702073746f72696e6720612066696c652e006d01496e20746865206576656e74207768656e20612073746f726167652072657175657374206e6f206c6f6e6765722065786973747320666f722074686520646174612074686520425350206e6f206c6f6e6765722073746f7265732c7101697420697320726571756972656420746861742074686520425350207374696c6c206861732061636365737320746f20746865206d65746164617461206f662074686520696e697469616c2073746f7261676520726571756573742e89014966207468657920646f206e6f742c20746865792077696c6c206174206c65617374206e6565642074686174206d6574616461746120746f207265636f6e737472756374207468652046696c6520494420616e642066726f6d2077686572657665723d017468652042535020676574732074686174206461746120697320757020746f2069742e204f6e65206578616d706c6520636f756c642062652066726f6d207468652061737369676e6564204d53502e750154686973206d65746164617461206973206e65636573736172792073696e6365206974206973206e656564656420746f207265636f6e73747275637420746865206c656166206e6f6465206b657920696e207468652073746f726167656470726f76696465722773204d65726b6c6520466f726573742e606273705f636f6e6669726d5f73746f705f73746f72696e6708012066696c655f6b65793401344d65726b6c65486173683c543e000158696e636c7573696f6e5f666f726573745f70726f6f6625020138466f7265737450726f6f663c543e000c14d0457865637574656420627920612042535020746f20636f6e6669726d20746f2073746f702073746f72696e6720612066696c652e00bd0149742068617320746f20686176652070726576696f75736c79206f70656e656420612070656e64696e672073746f702073746f72696e672072657175657374207573696e672074686520606273705f726571756573745f73746f705f73746f72696e67602065787472696e7369632eb901546865206d696e696d756d20616d6f756e74206f6620626c6f636b73206265747765656e20746865207265717565737420616e642074686520636f6e6669726d6174696f6e20697320646566696e6564206279207468652072756e74696d652c20737563682074686174207468658d014253502063616e277420696d6d6564696174656c792073746f702073746f72696e6720612066696c65206974206861732070726576696f75736c79206c6f7374207768656e20726563656976696e672061206368616c6c656e676520666f722069742e7c73746f705f73746f72696e675f666f725f696e736f6c76656e745f757365721c012066696c655f6b65793401344d65726b6c65486173683c543e0001246275636b65745f69643401384275636b65744964466f723c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e0001146f776e6572000130543a3a4163636f756e74496400012c66696e6765727072696e7434013846696e6765727072696e743c543e00011073697a6530013853746f72616765446174613c543e000158696e636c7573696f6e5f666f726573745f70726f6f6625020138466f7265737450726f6f663c543e000d18fc4578656375746564206279206120535020746f2073746f702073746f72696e6720612066696c652066726f6d20616e20696e736f6c76656e7420757365722e00b101546869732069732075736564207768656e2061207573657220686173206265636f6d6520696e736f6c76656e7420616e6420746865205350206e6565647320746f2073746f702073746f72696e67207468652066696c6573206f66207468617420757365722c2073696e6365a0697420776f6e27742062652067657474696e67207061696420666f7220697420616e796d6f72652e3d025468652076616c69646174696f6e73206172652073696d696c617220746f20746865206f6e657320696e2074686520606273705f726571756573745f73746f705f73746f72696e676020616e6420606273705f636f6e6669726d5f73746f705f73746f72696e67602065787472696e736963732c206275742074686520535020646f65736e2774206e65656420746f7d017761697420666f722061206d696e696d756d20616d6f756e74206f6620626c6f636b7320746f20636f6e6669726d20746f2073746f702073746f72696e67207468652066696c65206e6f722069742068617320746f2062652061204253502e2c64656c6574655f66696c651801246275636b65745f69643401384275636b65744964466f723c543e00012066696c655f6b65793401344d65726b6c65486173683c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e00011073697a6530013853746f72616765446174613c543e00012c66696e6765727072696e7434013846696e6765727072696e743c543e0001706d617962655f696e636c7573696f6e5f666f726573745f70726f6f66c50401584f7074696f6e3c466f7265737450726f6f663c543e3e000e00a870656e64696e675f66696c655f64656c6574696f6e5f726571756573745f7375626d69745f70726f6f6610011075736572000130543a3a4163636f756e74496400012066696c655f6b65793401344d65726b6c65486173683c543e0001246275636b65745f69643401384275636b65744964466f723c543e000130666f726573745f70726f6f6625020138466f7265737450726f6f663c543e000f00547365745f676c6f62616c5f706172616d65746572730801487265706c69636174696f6e5f7461726765740d0201804f7074696f6e3c543a3a5265706c69636174696f6e546172676574547970653e00017c7469636b5f72616e67655f746f5f6d6178696d756d5f7468726573686f6c640d0201544f7074696f6e3c5469636b4e756d6265723c543e3e001000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb5040c4870616c6c65745f66696c655f73797374656d147479706573644275636b65744d6f766552657175657374526573706f6e73650001082041636365707465640000002052656a656374656400010000b9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401bd04045300000400c10401185665633c543e0000bd040000040834350200c104000002bd0400c50404184f7074696f6e0404540125020108104e6f6e6500000010536f6d65040025020000010000c9040c5070616c6c65745f70726f6f66735f6465616c65721870616c6c65741043616c6c040454000110246368616c6c656e676504010c6b65793401244b6579466f723c543e00001868496e74726f647563652061206e6577206368616c6c656e67652e003101546869732066756e6374696f6e20616c6c6f777320616e796f6e6520746f206164642061206e6577206368616c6c656e676520746f2074686520604368616c6c656e6765735175657565602ed8546865206368616c6c656e67652077696c6c206265206469737061746368656420696e2074686520636f6d696e6720626c6f636b732efc5573657273206172652063686172676564206120736d616c6c2066656520666f72207375626d697474696e672061206368616c6c656e67652c20776869636854676f657320746f207468652054726561737572792e307375626d69745f70726f6f6608011470726f6f662102012050726f6f663c543e00012070726f7669646572090301604f7074696f6e3c50726f76696465724964466f723c543e3e00015484466f7220612050726f766964657220746f207375626d697420612070726f6f662e00e0436865636b732074686174206070726f766964657260206973206120726567697374657265642050726f76696465722e204966206e6f6e65090169732070726f76696465642c207468652070726f6f66207375626d697474657220697320636f6e7369646572656420746f206265207468652050726f76696465722ef852656c696573206f6e20612050726f7669646572732070616c6c657420746f206765742074686520726f6f7420666f72207468652050726f76696465722e390156616c6964617465732074686174207468652070726f6f6620636f72726573706f6e647320746f2061206368616c6c656e6765207468617420776173206d61646520696e2074686520706173742c3901627920636865636b696e672074686520605469636b546f4368616c6c656e67657353656564602053746f726167654d61702e20546865206368616c6c656e6765207469636b207468617420746865410150726f76696465722073686f756c642068617665207375626d697474656420612070726f6f662069732063616c63756c61746564206261736564206f6e20746865206c617374207469636b207468657969017375626d697474656420612070726f6f6620666f7220285b604c6173745469636b50726f76696465725375626d69747465644150726f6f66466f72605d292c20616e64207468652070726f76696e6720706572696f6420666f72c8746861742050726f76696465722c20776869636820697320612066756e6374696f6e206f66207468656972207374616b652e3901546869732065787472696e73696320616c736f20636865636b732074686174207468657265206861736e2774206265656e206120636865636b706f696e74206368616c6c656e676520726f756e642101696e206265747765656e20746865206c6173742074696d65207468652050726f7669646572207375626d697474656420612070726f6f6620666f7220616e6420746865207469636b2901666f72207768696368207468652070726f6f66206973206265696e67207375626d69747465642e20496620746865726520686173206265656e2c207468652050726f7669646572206973507375626a65637420746f20736c617368696e672e002449662076616c69643a55012d2050757368657320666f7277617264207468652050726f766964657220696e20746865205b605469636b546f50726f766964657273446561646c696e6573605d2053746f726167654d61702061206e756d626572d06f66207469636b7320636f72726573706f6e64696e6720746f20746865207374616b65206f66207468652050726f76696465722e3d012d205265676973746572732074686973207469636b20617320746865206c617374207469636b20696e207768696368207468652050726f7669646572207375626d697474656420612070726f6f662e001501457865637574696f6e206f6620746869732065787472696e7369632073686f756c6420626520726566756e646564206966207468652070726f6f662069732076616c69642e80666f7263655f696e697469616c6973655f6368616c6c656e67655f6379636c6504012070726f766964657234014050726f76696465724964466f723c543e000218a0496e697469616c69736520612050726f76696465722773206368616c6c656e6765206379636c652e00584f6e6c792063616c6c61626c65206279207375646f2e005d015365747320746865206c617374207469636b207468652050726f7669646572207375626d697474656420612070726f6f6620666f7220746f207468652063757272656e74207469636b2c20616e642073657473207468657101646561646c696e6520666f72207375626d697474696e6720612070726f6f6620746f207468652063757272656e74207469636b202b207468652050726f7669646572277320706572696f64202b2074686520746f6c6572616e63652e287365745f706175736564040118706175736564200110626f6f6c00030ce053657420746865205b604368616c6c656e6765735469636b6572506175736564605d20746f20607472756560206f72206066616c7365602e00584f6e6c792063616c6c61626c65206279207375646f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd040c4470616c6c65745f72616e646f6d6e6573731870616c6c65741043616c6c0404540001044c7365745f626162655f72616e646f6d6e65737300000ced015468697320696e686572656e742074686174206d75737420626520696e636c7564656420284469737061746368436c6173733a3a4d616e6461746f727929206174206561636820626c6f636b20736176657320746865206c61746573742072616e646f6d6e65737320617661696c61626c652066726f6d20746865810172656c617920636861696e20696e746f2061207661726961626c6520746861742063616e207468656e20626520757365642061732061207365656420666f7220636f6d6d69746d656e747320746861742068617070656e656420647572696e67787468652070726576696f75732072656c617920636861696e2065706f6368040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed1040c5870616c6c65745f7061796d656e745f73747265616d731870616c6c65741043616c6c040454000124806372656174655f66697865645f726174655f7061796d656e745f73747265616d0c012c70726f76696465725f696434014050726f76696465724964466f723c543e000130757365725f6163636f756e74000130543a3a4163636f756e7449640001107261746518013042616c616e63654f663c543e0000489501446973706174636861626c652065787472696e736963207468617420616c6c6f777320726f6f7420746f2061646420612066697865642d72617465207061796d656e742073747265616d2066726f6d2061205573657220746f20612050726f76696465722e00c101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f7420285061796d656e742073747265616d732073686f756c64206f6e6c792062652061646465642062792074726169747320696e206f746865722070616c6c6574732c98746869732065787472696e73696320697320666f72206d616e75616c2074657374696e67292e002c506172616d65746572733a01012d206070726f76696465725f6964603a205468652050726f7669646572204944207468617420746865207061796d656e742073747265616d20697320666f722e15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722ec42d206072617465603a2054686520696e697469616c2072617465206f6620746865207061796d656e742073747265616d2e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633aec312e20436865636b2074686174207468652065787472696e736963207761732065786563757465642062792074686520726f6f74206f726967696edc322e20436865636b207468617420746865207061796d656e742073747265616d20646f6573206e6f7420616c7265616479206578697374e8332e20436865636b20746861742074686520557365722068617320656e6f7567682066756e647320746f2070617920746865206465706f73697484342e20486f6c6420746865206465706f7369742066726f6d2074686520557365720d01352e2055706461746520746865205061796d656e742053747265616d732073746f7261676520746f2061646420746865206e6577207061796d656e742073747265616d00f0456d69747320604669786564526174655061796d656e7453747265616d4372656174656460206576656e74207768656e207375636365737366756c2e807570646174655f66697865645f726174655f7061796d656e745f73747265616d0c012c70726f76696465725f696434014050726f76696465724964466f723c543e000130757365725f6163636f756e74000130543a3a4163636f756e7449640001206e65775f7261746518013042616c616e63654f663c543e000140d901446973706174636861626c652065787472696e736963207468617420616c6c6f777320726f6f7420746f2075706461746520616e206578697374696e672066697865642d72617465207061796d656e742073747265616d206265747765656e2061205573657220616e6420612050726f76696465722e00c101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f7420285061796d656e742073747265616d732073686f756c64206f6e6c792062652061646465642062792074726169747320696e206f746865722070616c6c6574732c98746869732065787472696e73696320697320666f72206d616e75616c2074657374696e67292e002c506172616d65746572733a01012d206070726f76696465725f6964603a205468652050726f7669646572204944207468617420746865207061796d656e742073747265616d20697320666f722e15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722ec42d20606e65775f72617465603a20546865206e65772072617465206f6620746865207061796d656e742073747265616d2e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633aec312e20436865636b2074686174207468652065787472696e736963207761732065786563757465642062792074686520726f6f74206f726967696e9c322e20436865636b207468617420746865207061796d656e742073747265616d206578697374730901332e2055706461746520746865205061796d656e742053747265616d732073746f7261676520746f2075706461746520746865207061796d656e742073747265616d00f0456d69747320604669786564526174655061796d656e7453747265616d5570646174656460206576656e74207768656e207375636365737366756c2e8064656c6574655f66697865645f726174655f7061796d656e745f73747265616d08012c70726f76696465725f696434014050726f76696465724964466f723c543e000130757365725f6163636f756e74000130543a3a4163636f756e74496400023cd901446973706174636861626c652065787472696e736963207468617420616c6c6f777320726f6f7420746f2064656c65746520616e206578697374696e672066697865642d72617465207061796d656e742073747265616d206265747765656e2061205573657220616e6420612050726f76696465722e00c101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f7420285061796d656e742073747265616d732073686f756c64206f6e6c792062652061646465642062792074726169747320696e206f746865722070616c6c6574732c98746869732065787472696e73696320697320666f72206d616e75616c2074657374696e67292e002c506172616d65746572733a01012d206070726f76696465725f6964603a205468652050726f7669646572204944207468617420746865207061796d656e742073747265616d20697320666f722e15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633aec312e20436865636b2074686174207468652065787472696e736963207761732065786563757465642062792074686520726f6f74206f726967696e9c322e20436865636b207468617420746865207061796d656e742073747265616d206578697374730901332e2055706461746520746865205061796d656e742053747265616d732073746f7261676520746f2072656d6f766520746865207061796d656e742073747265616d00f0456d69747320604669786564526174655061796d656e7453747265616d44656c6574656460206576656e74207768656e207375636365737366756c2e886372656174655f64796e616d69635f726174655f7061796d656e745f73747265616d0c012c70726f76696465725f696434014050726f76696465724964466f723c543e000130757365725f6163636f756e74000130543a3a4163636f756e74496400013c616d6f756e745f70726f766964656430014c556e69747350726f7669646564466f723c543e0003489d01446973706174636861626c652065787472696e736963207468617420616c6c6f777320726f6f7420746f2061646420612064796e616d69632d72617465207061796d656e742073747265616d2066726f6d2061205573657220746f20612050726f76696465722e00c101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f7420285061796d656e742073747265616d732073686f756c64206f6e6c792062652061646465642062792074726169747320696e206f746865722070616c6c6574732c98746869732065787472696e73696320697320666f72206d616e75616c2074657374696e67292e002c506172616d65746572733a01012d206070726f76696465725f6964603a205468652050726f7669646572204944207468617420746865207061796d656e742073747265616d20697320666f722e15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722e05012d2060616d6f756e745f70726f7669646564603a2054686520696e697469616c20616d6f756e742070726f7669646564206279207468652050726f76696465722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633aec312e20436865636b2074686174207468652065787472696e736963207761732065786563757465642062792074686520726f6f74206f726967696edc322e20436865636b207468617420746865207061796d656e742073747265616d20646f6573206e6f7420616c7265616479206578697374e8332e20436865636b20746861742074686520557365722068617320656e6f7567682066756e647320746f2070617920746865206465706f73697484342e20486f6c6420746865206465706f7369742066726f6d2074686520557365720d01352e2055706461746520746865205061796d656e742053747265616d732073746f7261676520746f2061646420746865206e6577207061796d656e742073747265616d00f8456d697473206044796e616d6963526174655061796d656e7453747265616d4372656174656460206576656e74207768656e207375636365737366756c2e887570646174655f64796e616d69635f726174655f7061796d656e745f73747265616d0c012c70726f76696465725f696434014050726f76696465724964466f723c543e000130757365725f6163636f756e74000130543a3a4163636f756e74496400014c6e65775f616d6f756e745f70726f766964656430014c556e69747350726f7669646564466f723c543e000440e101446973706174636861626c652065787472696e736963207468617420616c6c6f777320726f6f7420746f2075706461746520616e206578697374696e672064796e616d69632d72617465207061796d656e742073747265616d206265747765656e2061205573657220616e6420612050726f76696465722e00c101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f7420285061796d656e742073747265616d732073686f756c64206f6e6c792062652061646465642062792074726169747320696e206f746865722070616c6c6574732c98746869732065787472696e73696320697320666f72206d616e75616c2074657374696e67292e002c506172616d65746572733a01012d206070726f76696465725f6964603a205468652050726f7669646572204944207468617420746865207061796d656e742073747265616d20697320666f722e15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722e05012d20606e65775f616d6f756e745f70726f7669646564603a20546865206e657720616d6f756e742070726f7669646564206279207468652050726f76696465722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633aec312e20436865636b2074686174207468652065787472696e736963207761732065786563757465642062792074686520726f6f74206f726967696e9c322e20436865636b207468617420746865207061796d656e742073747265616d206578697374730901332e2055706461746520746865205061796d656e742053747265616d732073746f7261676520746f2075706461746520746865207061796d656e742073747265616d00f8456d697473206044796e616d6963526174655061796d656e7453747265616d5570646174656460206576656e74207768656e207375636365737366756c2e8864656c6574655f64796e616d69635f726174655f7061796d656e745f73747265616d08012c70726f76696465725f696434014050726f76696465724964466f723c543e000130757365725f6163636f756e74000130543a3a4163636f756e74496400053ce101446973706174636861626c652065787472696e736963207468617420616c6c6f777320726f6f7420746f2064656c65746520616e206578697374696e672064796e616d69632d72617465207061796d656e742073747265616d206265747765656e2061205573657220616e6420612050726f76696465722e00c101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520526f6f7420285061796d656e742073747265616d732073686f756c64206f6e6c792062652061646465642062792074726169747320696e206f746865722070616c6c6574732c98746869732065787472696e73696320697320666f72206d616e75616c2074657374696e67292e002c506172616d65746572733a01012d206070726f76696465725f6964603a205468652050726f7669646572204944207468617420746865207061796d656e742073747265616d20697320666f722e15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633aec312e20436865636b2074686174207468652065787472696e736963207761732065786563757465642062792074686520726f6f74206f726967696e9c322e20436865636b207468617420746865207061796d656e742073747265616d206578697374730901332e2055706461746520746865205061796d656e742053747265616d732073746f7261676520746f2072656d6f766520746865207061796d656e742073747265616d00f8456d697473206044796e616d6963526174655061796d656e7453747265616d44656c6574656460206576656e74207768656e207375636365737366756c2e586368617267655f7061796d656e745f73747265616d73040130757365725f6163636f756e74000130543a3a4163636f756e7449640006705101446973706174636861626c652065787472696e736963207468617420616c6c6f77732050726f76696465727320746f206368617267652061207061796d656e742073747265616d2066726f6d206120557365722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e6d01546865206f726967696e206d757374206265207468652050726f7669646572207468617420686173206174206c65617374206f6e652074797065206f66207061796d656e742073747265616d20776974682074686520557365722e002c506172616d65746572733a15012d2060757365725f6163636f756e74603a205468652055736572204163636f756e74204944207468617420746865207061796d656e742073747265616d20697320666f722e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722e4101322e20436865636b20746861742061207061796d656e742073747265616d206265747765656e20746865207369676e6572202850726f76696465722920616e6420746865205573657220657869737473ac332e20496620746865726520697320612066697865642d72617465207061796d656e742073747265616d3aa0202020312e20476574207468652072617465206f6620746865207061796d656e742073747265616dbd01202020322e204765742074686520646966666572656e6365206265747765656e20746865206c6173742063686172676564207469636b206e756d62657220616e6420746865206c6173742063686172676561626c65207469636b206e756d626572206f66207468652073747265616df8202020332e2043616c63756c6174652074686520616d6f756e7420746f2063686172676520646f696e67206072617465202a20646966666572656e636560e501202020342e204368617267652074686520757365722028696620746865207573657220646f6573206e6f74206861766520656e6f7567682066756e64732c206974206765747320666c616767656420616e642061206055736572576974686f757446756e647360206576656e7420697320656d697474656429fc202020352e2055706461746520746865206c6173742063686172676564207469636b206e756d626572206f6620746865207061796d656e742073747265616db4342e20496620746865726520697320612064796e616d69632d72617465207061796d656e742073747265616d3ab4202020312e204765742074686520616d6f756e742070726f7669646564206279207468652050726f7669646572f501202020322e204765742074686520646966666572656e6365206265747765656e20707269636520696e646578207768656e207468652073747265616d20776173206c617374206368617267656420616e642074686520707269636520696e64657820617420746865206c6173742063686172676561626c65207469636b2501202020332e2043616c63756c6174652074686520616d6f756e7420746f2063686172676520646f696e672060616d6f756e745f70726f7669646564202a20646966666572656e636560e501202020342e204368617267652074686520757365722028696620746865207573657220646f6573206e6f74206861766520656e6f7567682066756e64732c206974206765747320666c616767656420616e642061206055736572576974686f757446756e647360206576656e7420697320656d6974746564294d01202020352e205570646174652074686520707269636520696e646578207768656e207468652073747265616d20776173206c6173742063686172676564206f6620746865207061796d656e742073747265616d00d4456d697473206120605061796d656e7453747265616d4368617267656460206576656e74207768656e207375636365737366756c2e0001024e6f7465733a20612050726f766964657220636f756c64206861766520626f746820612066697865642d7261746520616e6420612064796e616d69632d72617465207061796d656e742073747265616d2077697468206120557365722e204966207468617427732074686520636173652c20746869732065787472696e736963b90177696c6c2074727920746f2063686172676520626f746820616e642074686520616d6f756e7420636861726765642077696c6c206265207468652073756d206f662074686520616d6f756e7473206368617267656420666f722065616368207061796d656e742073747265616d2e507061795f6f75747374616e64696e675f64656274000748f501446973706174636861626c652065787472696e736963207468617420616c6c6f77732061207573657220666c616767656420617320776974686f75742066756e647320746f2070617920616c6c2072656d61696e696e67207061796d656e742073747265616d7320746f2062652061626c6520746f207265636f76657234697473206465706f736974732e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e0d01546865206f726967696e206d757374206265207468652055736572207468617420686173206265656e20666c616767656420617320776974686f75742066756e64732e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722ee4322e20436865636b207468617420746865207573657220686173206265656e20666c616767656420617320776974686f75742066756e64732e4101332e2052656c6561736520746865207573657227732066756e6473207468617420776572652068656c642061732061206465706f73697420666f722065616368207061796d656e742073747265616d2e7901342e2047657420616c6c207061796d656e742073747265616d73206f6620746865207573657220616e6420636861726765207468656d2c20706179696e67207468652050726f76696465727320666f72207468652073657276696365732ea8352e2044656c65746520616c6c207061796d656e742073747265616d73206f662074686520757365722e00b8456d697473206120275573657250616964446562747327206576656e74207768656e207375636365737366756c2e0001024e6f7465733a20746869732065787472696e736963206974657261746573206f76657220616c6c207061796d656e742073747265616d73206f6620746865207573657220616e642063686172676573207468656d2c20736f2069742063616e20626520657870656e7369766520696e207465726d73206f66207765696768742efd015468652066656520746f20657865637574652069742073686f756c64206265206869676820656e6f75676820746f20636f6d70656e7361746520666f722074686520776569676874206f66207468652065787472696e7369632c20776974686f7574206265696e6720746f6f206869676820746861742074686520757365724d0166696e6473206d6f726520636f6e76656e69656e7420746f207761697420666f722050726f76696465727320746f2067657420697473206465706f73697473206f6e65206279206f6e6520696e73746561642e50636c6561725f696e736f6c76656e745f666c6167000858dd01446973706174636861626c652065787472696e736963207468617420616c6c6f77732061207573657220666c616767656420617320776974686f75742066756e6473206c6f6e672061676f20656e6f75676820746f20636c656172207468697320666c61672066726f6d20697473206163636f756e742c0102616c6c6f77696e6720697420746f20626567696e20636f6e7472616374696e6720616e6420706179696e6720666f7220736572766963657320616761696e2e204966207468657265277320616e79206f75747374616e64696e6720646562742c2069742077696c6c206265206368617267656420616e6420636c65617265642e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e0d01546865206f726967696e206d757374206265207468652055736572207468617420686173206265656e20666c616767656420617320776974686f75742066756e64732e00ec546869732065787472696e7369632077696c6c20706572666f726d2074686520666f6c6c6f77696e6720636865636b7320616e64206c6f6769633ae8312e20436865636b2074686174207468652065787472696e73696320776173207369676e656420616e642067657420746865207369676e65722ee4322e20436865636b207468617420746865207573657220686173206265656e20666c616767656420617320776974686f75742066756e64732e6501332e20436865636b20746861742074686520636f6f6c646f776e20706572696f6420686173207061737365642073696e63652074686520757365722077617320666c616767656420617320776974686f75742066756e64732e2101342e20436865636b206966207468657265277320616e79206f75747374616e64696e67206465627420616e64206368617267652069742e205468697320697320646f6e652062793a35012020612e2052656c656173696e6720616e792072656d61696e696e672066756e64732068656c642061732061206465706f73697420666f722065616368207061796d656e742073747265616d2e99012020622e2047657474696e6720616c6c207061796d656e742073747265616d73206f6620746865207573657220616e64206368617267696e67207468656d2c20706179696e67207468652050726f76696465727320666f72207468652073657276696365732eb02020632e2052657475726e696e6720746865205573657220616e792072656d61696e696e672066756e64732eb82020642e2044656c6574696e6720616c6c207061796d656e742073747265616d73206f662074686520757365722e90352e20556e666c616720746865207573657220617320776974686f75742066756e64732e00b0456d6974732061202755736572536f6c76656e7427206576656e74207768656e207375636365737366756c2e0029024e6f7465733a20746869732065787472696e736963206974657261746573206f76657220616c6c2072656d61696e696e67207061796d656e742073747265616d73206f6620746865207573657220616e642063686172676573207468656d2c20736f2069742063616e20626520657870656e7369766520696e207465726d73206f66207765696768742efd015468652066656520746f20657865637574652069742073686f756c64206265206869676820656e6f75676820746f20636f6d70656e7361746520666f722074686520776569676874206f66207468652065787472696e7369632c20776974686f7574206265696e6720746f6f206869676820746861742074686520757365724d0166696e6473206d6f726520636f6e76656e69656e7420746f207761697420666f722050726f76696465727320746f2067657420697473206465706f73697473206f6e65206279206f6e6520696e73746561642e04c4446973706174636861626c6573202865787472696e7369637329206578706f73656420627920746869732070616c6c6574d5040c4870616c6c65745f6275636b65745f6e6674731870616c6c65741043616c6c0404540001083073686172655f616363657373100124726563697069656e74dd0301684163636f756e7449644c6f6f6b7570536f757263654f663c543e0001186275636b65743401384275636b65744964466f723c543e00011c6974656d5f6964100124543a3a4974656d4964000144726561645f6163636573735f7265676578d90401684f7074696f6e3c5265616441636365737352656765783c543e3e00000cec53686172652061636365737320746f2066696c65732077697468696e2061206275636b6574207769746820616e6f74686572206163636f756e742e0079025468652060726561645f6163636573735f72656765786020706172616d65746572206973206f7074696f6e616c20616e64207768656e2073657420746f20604e6f6e6560206974206d65616e7320746861742074686520726563697069656e742077696c6c2062652064656e6965642061636365737320666f7220616e79207265616420726571756573742077697468696e20746865206275636b65742e487570646174655f726561645f6163636573730c01186275636b65743401384275636b65744964466f723c543e00011c6974656d5f6964100124543a3a4974656d4964000144726561645f6163636573735f7265676578d90401684f7074696f6e3c5265616441636365737352656765783c543e3e0001047c55706461746520726561642061636365737320666f7220616e206974656d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed90404184f7074696f6e0404540175020108104e6f6e6500000010536f6d65040075020000010000dd040c2c70616c6c65745f6e6674731870616c6c65741043616c6c08045400044900019c1863726561746508011461646d696edd0301504163636f756e7449644c6f6f6b75704f663c543e000118636f6e666967e1040164436f6c6c656374696f6e436f6e666967466f723c542c20493e00003c090149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d2061207075626c6963206f726967696e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e002501546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420686176652073756666696369656e742066756e647320667265652e00c460436f6c6c656374696f6e4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174650801146f776e6572dd0301504163636f756e7449644c6f6f6b75704f663c543e000118636f6e666967e1040164436f6c6c656374696f6e436f6e666967466f723c542c20493e00013c190149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d20612070726976696c65676564206f726967696e2e00ac54686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0039012d20606f776e6572603a20546865206f776e6572206f66207468697320636f6c6c656374696f6e206f66206974656d732e20546865206f776e6572206861732066756c6c20737570657275736572590120207065726d697373696f6e73206f7665722074686973206974656d2c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e67982020607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129601c64657374726f79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c7769746e6573730105013844657374726f795769746e6573730002449c44657374726f79206120636f6c6c656374696f6e206f662066756e6769626c65206974656d732e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d75737420626520746865686f776e6572206f66207468652060636f6c6c656374696f6e602e00dc4e4f54453a2054686520636f6c6c656374696f6e206d75737420686176652030206974656d7320746f2062652064657374726f7965642e0005012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f2062652064657374726f7965642e31012d20607769746e657373603a20496e666f726d6174696f6e206f6e20746865206974656d73206d696e74656420696e2074686520636f6c6c656374696f6e2e2054686973206d75737420626520636f72726563742e00a0456d697473206044657374726f79656460206576656e74207768656e207375636365737366756c2e00745765696768743a20604f286d202b2063202b206129602077686572653a782d20606d203d207769746e6573732e6974656d5f6d657461646174617360702d206063203d207769746e6573732e6974656d5f636f6e6669677360682d206061203d207769746e6573732e6174747269627574657360106d696e74100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011c6d696e745f746fdd0301504163636f756e7449644c6f6f6b75704f663c543e0001307769746e6573735f64617461050501d84f7074696f6e3c4d696e745769746e6573733c543a3a4974656d49642c204465706f73697442616c616e63654f663c542c20493e3e3e000340a04d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2e005101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420636f6d706c7920776974682074686520606d696e745f73657474696e6773602072756c65732e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ea02d20606974656d603a20416e206964656e746966696572206f6620746865206e6577206974656d2ee02d20606d696e745f746f603a204163636f756e7420696e746f20776869636820746865206974656d2077696c6c206265206d696e7465642e45012d20607769746e6573735f64617461603a205768656e20746865206d696e7420747970652069732060486f6c6465724f6628636f6c6c656374696f6e5f696429602c207468656e20746865206f776e6564590120206974656d5f69642066726f6d207468617420636f6c6c656374696f6e206e6565647320746f2062652070726f76696465642077697468696e20746865207769746e6573732064617461206f626a6563742e20496661012020746865206d696e74207072696365206973207365742c207468656e2069742073686f756c64206265206164646974696f6e616c6c7920636f6e6669726d656420696e2074686520607769746e6573735f64617461602e0051014e6f74653a20746865206465706f7369742077696c6c2062652074616b656e2066726f6d2074686520606f726967696e6020616e64206e6f742074686520606f776e657260206f662074686520606974656d602e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296028666f7263655f6d696e74100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011c6d696e745f746fdd0301504163636f756e7449644c6f6f6b75704f663c543e00012c6974656d5f636f6e6669670d0501284974656d436f6e66696700043405014d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2066726f6d20612070726976696c65676564206f726967696e2e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d757374206265207468656c497373756572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ea02d20606974656d603a20416e206964656e746966696572206f6620746865206e6577206974656d2ee02d20606d696e745f746f603a204163636f756e7420696e746f20776869636820746865206974656d2077696c6c206265206d696e7465642ea82d20606974656d5f636f6e666967603a204120636f6e666967206f6620746865206e6577206974656d2e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400052c5844657374726f7920612073696e676c65206974656d2e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d7573746c626520746865206f776e6572206f662074686520606974656d602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642e802d20606974656d603a20546865206974656d20746f206265206275726e65642e003c456d69747320604275726e6564602e00385765696768743a20604f28312960207472616e736665720c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064657374dd0301504163636f756e7449644c6f6f6b75704f663c543e000638c04d6f766520616e206974656d2066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a682d20746865204f776e6572206f662074686520606974656d603b35012d2074686520617070726f7665642064656c656761746520666f722074686520606974656d602028696e207468697320636173652c2074686520617070726f76616c206973207265736574292e0028417267756d656e74733af42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207472616e736665727265642e942d20606974656d603a20546865206974656d20746f206265207472616e736665727265642edc2d206064657374603a20546865206163636f756e7420746f2072656365697665206f776e657273686970206f6620746865206974656d2e0050456d69747320605472616e73666572726564602e00385765696768743a20604f283129602472656465706f736974080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146974656d73790201385665633c543a3a4974656d49643e0007449c52652d6576616c7561746520746865206465706f73697473206f6e20736f6d65206974656d732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f82d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d7320746f2062652072656576616c75617465642e29012d20606974656d73603a20546865206974656d73206f662074686520636f6c6c656374696f6e2077686f7365206465706f736974732077696c6c2062652072656576616c75617465642e002d014e4f54453a205468697320657869737473206173206120626573742d6566666f72742066756e6374696f6e2e20416e79206974656d732077686963682061726520756e6b6e6f776e206f723901696e207468652063617365207468617420746865206f776e6572206163636f756e7420646f6573206e6f7420686176652072657365727661626c652066756e647320746f2070617920666f7220614d016465706f73697420696e637265617365206172652069676e6f7265642e2047656e6572616c6c7920746865206f776e65722069736e277420676f696e6720746f2063616c6c2074686973206f6e206974656d73550177686f7365206578697374696e67206465706f736974206973206c657373207468616e2074686520726566726573686564206465706f73697420617320697420776f756c64206f6e6c7920636f7374207468656d2c78736f2069742773206f66206c6974746c6520636f6e73657175656e63652e00590149742077696c6c207374696c6c2072657475726e20616e206572726f7220696e20746865206361736520746861742074686520636f6c6c656374696f6e20697320756e6b6e6f776e206f7220746865207369676e6572706973206e6f74207065726d697474656420746f2063616c6c2069742e00605765696768743a20604f286974656d732e6c656e28292960486c6f636b5f6974656d5f7472616e73666572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000828c8446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206368616e6765642eb82d20606974656d603a20546865206974656d20746f206265636f6d65206e6f6e2d7472616e7366657261626c652e006c456d69747320604974656d5472616e736665724c6f636b6564602e00385765696768743a20604f2831296050756e6c6f636b5f6974656d5f7472616e73666572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000928a852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206368616e6765642ea82d20606974656d603a20546865206974656d20746f206265636f6d65207472616e7366657261626c652e0074456d69747320604974656d5472616e73666572556e6c6f636b6564602e00385765696768743a20604f283129603c6c6f636b5f636f6c6c656374696f6e080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001346c6f636b5f73657474696e6773e5040148436f6c6c656374696f6e53657474696e6773000a30d8446973616c6c6f7773207370656369666965642073657474696e677320666f72207468652077686f6c6520636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f206265206c6f636b65642eb42d20606c6f636b5f73657474696e6773603a205468652073657474696e677320746f206265206c6f636b65642e001d014e6f74653a206974277320706f737369626c6520746f206f6e6c79206c6f636b2873657429207468652073657474696e672c20627574206e6f7420746f20756e7365742069742e0064456d6974732060436f6c6c656374696f6e4c6f636b6564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572dd0301504163636f756e7449644c6f6f6b75704f663c543e000b2c844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365206f776e65722073686f756c64206265206368616e6765642e09012d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e2054686579206d75737420686176652063616c6c656449012020607365745f6163636570745f6f776e6572736869706020776974682060636f6c6c656374696f6e6020696e206f7264657220666f722074686973206f7065726174696f6e20746f20737563636565642e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572110501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011461646d696e110501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011c667265657a6572110501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e000c40d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e0051014e6f74653a2062792073657474696e672074686520726f6c6520746f20604e6f6e6560206f6e6c79207468652060466f7263654f726967696e602077696c6c2062652061626c6520746f206368616e676520697464616674657220746f2060536f6d65286163636f756e7429602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f2831296058666f7263655f636f6c6c656374696f6e5f6f776e6572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572dd0301504163636f756e7449644c6f6f6b75704f663c543e000d28844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00c42d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2eb02d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f283129605c666f7263655f636f6c6c656374696f6e5f636f6e666967080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118636f6e666967e1040164436f6c6c656374696f6e436f6e666967466f723c542c20493e000e28884368616e67652074686520636f6e666967206f66206120636f6c6c656374696f6e2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00c42d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2eb82d2060636f6e666967603a20546865206e657720636f6e666967206f66207468697320636f6c6c656374696f6e2e0080456d6974732060436f6c6c656374696f6e436f6e6669674368616e676564602e00385765696768743a20604f2831296040617070726f76655f7472616e73666572100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465dd0301504163636f756e7449644c6f6f6b75704f663c543e0001386d617962655f646561646c696e650d0201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000f381501417070726f766520616e206974656d20746f206265207472616e7366657272656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468651c606974656d602e0045012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722ee42d20606974656d603a20546865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e19012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e7366657220746865206974656d2e49012d20606d617962655f646561646c696e65603a204f7074696f6e616c20646561646c696e6520666f722074686520617070726f76616c2e205370656369666965642062792070726f766964696e6720746865d8096e756d626572206f6620626c6f636b732061667465722077686963682074686520617070726f76616c2077696c6c206578706972650090456d69747320605472616e73666572417070726f76656460206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465dd0301504163636f756e7449644c6f6f6b75704f663c543e001038e443616e63656c206f6e65206f6620746865207472616e7366657220617070726f76616c7320666f722061207370656369666963206974656d2e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a3d012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e25012d20606974656d603a20546865206974656d206f662074686520636f6c6c656374696f6e206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e01012d206064656c6567617465603a20546865206163636f756e74207468617420697320676f696e6720746f206c6f6f736520746865697220617070726f76616c2e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296070636c6561725f616c6c5f7472616e736665725f617070726f76616c73080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001134b043616e63656c20616c6c2074686520617070726f76616c73206f662061207370656369666963206974656d2e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a39012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c732077696c6c20626520636c65617265642e21012d20606974656d603a20546865206974656d206f662074686520636f6c6c656374696f6e206f662077686f736520617070726f76616c732077696c6c20626520636c65617265642e00a4456d6974732060416c6c417070726f76616c7343616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f28312960506c6f636b5f6974656d5f70726f70657274696573100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001346c6f636b5f6d65746164617461200110626f6f6c00013c6c6f636b5f61747472696275746573200110626f6f6c001244e8446973616c6c6f7773206368616e67696e6720746865206d65746164617461206f722061747472696275746573206f6620746865206974656d2e0041014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e506f66207468652060636f6c6c656374696f6e602e00b42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2069662074686520606974656d602e7c2d20606974656d603a20416e206974656d20746f206265206c6f636b65642e0d012d20606c6f636b5f6d65746164617461603a20537065636966696573207768657468657220746865206d657461646174612073686f756c64206265206c6f636b65642e61012d20606c6f636b5f61747472696275746573603a20537065636966696573207768657468657220746865206174747269627574657320696e207468652060436f6c6c656374696f6e4f776e657260206e616d6573706163654c202073686f756c64206265206c6f636b65642e005d014e6f74653a20606c6f636b5f6174747269627574657360206166666563747320746865206174747269627574657320696e207468652060436f6c6c656374696f6e4f776e657260206e616d657370616365206f6e6c792e45015768656e20746865206d65746164617461206f72206174747269627574657320617265206c6f636b65642c20697420776f6e277420626520706f737369626c652074686520756e6c6f636b207468656d2e0074456d69747320604974656d50726f706572746965734c6f636b6564602e00385765696768743a20604f28312960347365745f617474726962757465140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e0001246e616d657370616365810201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b65797d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c756575020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001358a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e0001014f726967696e206d757374206265205369676e656420616e64206d75737420636f6e666f726d20746f20746865206e616d6573706163652072756c657365743a3d012d2060436f6c6c656374696f6e4f776e657260206e616d65737061636520636f756c64206265206d6f646966696564206279207468652060636f6c6c656374696f6e602041646d696e206f6e6c793b59012d20604974656d4f776e657260206e616d65737061636520636f756c64206265206d6f6469666965642062792074686520606d617962655f6974656d60206f776e6572206f6e6c792e20606d617962655f6974656d6074202073686f756c642062652073657420696e207468617420636173653b55012d20604163636f756e74284163636f756e7449642960206e616d65737061636520636f756c64206265206d6f646966696564206f6e6c79207768656e2074686520606f726967696e602077617320676976656e20615820207065726d697373696f6e20746f20646f20736f3b00f05468652066756e6473206f6620606f726967696e6020617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2d01604174747269627574654465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129604c666f7263655f7365745f6174747269627574651801187365745f61739c01504f7074696f6e3c543a3a4163636f756e7449643e000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e0001246e616d657370616365810201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b65797d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c756575020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001444c0466f7263652d73657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e00744f726967696e206d7573742062652060466f7263654f726967696e602e0039014966207468652061747472696275746520616c72656164792065786973747320616e64206974207761732073657420627920616e6f74686572206163636f756e742c20746865206465706f7369749c77696c6c2062652072657475726e656420746f207468652070726576696f7573206f776e65722e00bc2d20607365745f6173603a20416e206f7074696f6e616c206f776e6572206f6620746865206174747269627574652e39012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f617474726962757465100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e0001246e616d657370616365810201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b65797d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00153cb0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f6620746865286174747269627574652e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f283129605c617070726f76655f6974656d5f617474726962757465730c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465dd0301504163636f756e7449644c6f6f6b75704f663c543e0016242d01417070726f7665206974656d2773206174747269627574657320746f206265206368616e67656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00a42d2060636f6c6c656374696f6e603a204120636f6c6c656374696f6e206f6620746865206974656d2ea42d20606974656d603a20546865206974656d207468617420686f6c647320617474726962757465732e49012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f206368616e67652061747472696275746573206f6620746865206974656d2e00bc456d69747320604974656d41747472696275746573417070726f76616c416464656460206f6e20737563636573732e7c63616e63656c5f6974656d5f617474726962757465735f617070726f76616c100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465dd0301504163636f756e7449644c6f6f6b75704f663c543e00011c7769746e6573731505017c43616e63656c41747472696275746573417070726f76616c5769746e657373001728110143616e63656c207468652070726576696f75736c792070726f766964656420617070726f76616c20746f206368616e6765206974656d277320617474726962757465732e1101416c6c207468652070726576696f75736c7920736574206174747269627574657320627920746865206064656c6567617465602077696c6c2062652072656d6f7665642e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00f42d2060636f6c6c656374696f6e603a20436f6c6c656374696f6e207468617420746865206974656d20697320636f6e7461696e65642077697468696e2ea42d20606974656d603a20546865206974656d207468617420686f6c647320617474726962757465732ee02d206064656c6567617465603a205468652070726576696f75736c7920617070726f766564206163636f756e7420746f2072656d6f76652e00c4456d69747320604974656d41747472696275746573417070726f76616c52656d6f76656460206f6e20737563636573732e307365745f6d657461646174610c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001106461746175020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0018407453657420746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e0060456d69747320604974656d4d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640019347c436c65617220746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0070456d69747320604974656d4d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106461746175020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001a3c8853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001b3090436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960507365745f6163636570745f6f776e6572736869700401406d617962655f636f6c6c656374696f6e0d02015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001c28110153657420286f72207265736574292074686520616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e0061014f726967696e206d75737420626520605369676e65646020616e6420696620606d617962655f636f6c6c656374696f6e602069732060536f6d65602c207468656e20746865207369676e6572206d757374206861766520614c70726f7669646572207265666572656e63652e0051012d20606d617962655f636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206f776e65727368697020746865207369676e65722069736101202077696c6c696e6720746f206163636570742c206f7220696620604e6f6e65602c20616e20696e6469636174696f6e207468617420746865207369676e65722069732077696c6c696e6720746f20616363657074206e6f5c20206f776e657273686970207472616e73666572616c2e008c456d69747320604f776e657273686970416363657074616e63654368616e676564602e647365745f636f6c6c656374696f6e5f6d61785f737570706c79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001d24e053657420746865206d6178696d756d206e756d626572206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652e11012d20606d61785f737570706c79603a20546865206d6178696d756d206e756d626572206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e00d4456d6974732060436f6c6c656374696f6e4d6178537570706c7953657460206576656e74207768656e207375636365737366756c2e507570646174655f6d696e745f73657474696e6773080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001346d696e745f73657474696e6773ed040105014d696e7453657474696e67733c42616c616e63654f663c542c20493e2c20426c6f636b4e756d626572466f723c543e2c20543a3a436f6c6c656374696f6e49643e001e2454557064617465206d696e742073657474696e67732e004d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c642062652074686520497373756572506f66207468652060636f6c6c656374696f6e602e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652ea42d20606d696e745f73657474696e6773603a20546865206e6577206d696e742073657474696e67732e00f0456d6974732060436f6c6c656374696f6e4d696e7453657474696e67735570646174656460206576656e74207768656e207375636365737366756c2e247365745f7072696365100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001147072696365f504015c4f7074696f6e3c4974656d50726963653c542c20493e3e00014477686974656c69737465645f6275796572110501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e001f2c9453657420286f72207265736574292074686520707269636520666f7220616e206974656d2e00e84f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea02d20606974656d603a20546865206974656d20746f207365742074686520707269636520666f722e0d012d20607072696365603a2054686520707269636520666f7220746865206974656d2e205061737320604e6f6e65602c20746f207265736574207468652070726963652ef42d20606275796572603a205265737472696374732074686520627579206f7065726174696f6e20746f2061207370656369666963206163636f756e742e00ec456d69747320604974656d507269636553657460206f6e207375636365737320696620746865207072696365206973206e6f7420604e6f6e65602eec456d69747320604974656d507269636552656d6f76656460206f6e20737563636573732069662074686520707269636520697320604e6f6e65602e206275795f6974656d0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001246269645f707269636518013c4974656d50726963653c542c20493e002024a8416c6c6f777320746f2062757920616e206974656d206966206974277320757020666f722073616c652e00f84f726967696e206d757374206265205369676e656420616e64206d757374206e6f7420626520746865206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2eac2d20606974656d603a20546865206974656d207468652073656e6465722077616e747320746f206275792ed82d20606269645f7072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f207061792e0078456d69747320604974656d426f7567687460206f6e20737563636573732e207061795f74697073040110746970731905019c426f756e6465645665633c4974656d5469704f663c542c20493e2c20543a3a4d6178546970733e00211c5c416c6c6f777320746f207061792074686520746970732e00584f726967696e206d757374206265205369676e65642e00542d206074697073603a20546970732061727261792e0098456d697473206054697053656e7460206f6e20657665727920746970207472616e736665722e2c6372656174655f737761701801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001486d617962655f646573697265645f6974656d0d0201444f7074696f6e3c543a3a4974656d49643e00012c6d617962655f7072696365850201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e0001206475726174696f6e100144426c6f636b4e756d626572466f723c543e002240510152656769737465722061206e65772061746f6d696320737761702c206465636c6172696e6720616e20696e74656e74696f6e20746f2073656e6420616e20606974656d6020696e2065786368616e676520666f72fc60646573697265645f6974656d602066726f6d206f726967696e20746f20746172676574206f6e207468652063757272656e7420626c6f636b636861696e2e4d01546865207461726765742063616e206578656375746520746865207377617020647572696e67207468652073706563696669656420606475726174696f6e60206f6620626c6f636b732028696620736574292ef04164646974696f6e616c6c792c2074686520707269636520636f756c642062652073657420666f7220746865206465736972656420606974656d602e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea82d20606974656d603a20546865206974656d20616e206f776e65722077616e747320746f20676976652eec2d2060646573697265645f636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f66207468652064657369726564206974656d2ef42d2060646573697265645f6974656d603a205468652064657369726564206974656d20616e206f776e65722077616e747320746f20726563656976652e61012d20606d617962655f7072696365603a2054686520707269636520616e206f776e65722069732077696c6c696e6720746f20706179206f72207265636569766520666f7220746865206465736972656420606974656d602e49012d20606475726174696f6e603a204120646561646c696e6520666f722074686520737761702e205370656369666965642062792070726f766964696e6720746865206e756d626572206f6620626c6f636b73880961667465722077686963682074686520737761702077696c6c206578706972652e007c456d6974732060537761704372656174656460206f6e20737563636573732e2c63616e63656c5f737761700801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d49640023245843616e63656c20616e2061746f6d696320737761702e00584f726967696e206d757374206265205369676e65642e15014f726967696e206d75737420626520616e206f776e6572206f662074686520606974656d602069662074686520646561646c696e65206861736e277420657870697265642e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea82d20606974656d603a20546865206974656d20616e206f776e65722077616e747320746f20676976652e0084456d69747320605377617043616e63656c6c656460206f6e20737563636573732e28636c61696d5f7377617014013c73656e645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400012473656e645f6974656d100124543a3a4974656d4964000148726563656976655f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130726563656976655f6974656d100124543a3a4974656d49640001347769746e6573735f7072696365850201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e00243054436c61696d20616e2061746f6d696320737761702e390154686973206d6574686f6420657865637574657320612070656e64696e6720737761702c2074686174207761732063726561746564206279206120636f756e74657270617274206265666f72652e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00ec2d206073656e645f636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652073656e742e8c2d206073656e645f6974656d603a20546865206974656d20746f2062652073656e742e09012d2060726563656976655f636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652072656365697665642ea82d2060726563656976655f6974656d603a20546865206974656d20746f2062652072656365697665642ee42d20607769746e6573735f7072696365603a20412070726963652074686174207761732070726576696f75736c7920616772656564206f6e2e007c456d697473206053776170436c61696d656460206f6e20737563636573732e3c6d696e745f7072655f7369676e65640c01246d696e745f6461746125050168426f783c5072655369676e65644d696e744f663c542c20493e3e0001247369676e617475726529050150543a3a4f6666636861696e5369676e61747572650001187369676e6572000130543a3a4163636f756e744964002534c84d696e7420616e206974656d2062792070726f766964696e6720746865207072652d7369676e656420617070726f76616c2e00584f726967696e206d757374206265205369676e65642e005d012d20606d696e745f64617461603a20546865207072652d7369676e656420617070726f76616c207468617420636f6e7369737473206f662074686520696e666f726d6174696f6e2061626f757420746865206974656d2c51012020697473206d657461646174612c20617474726962757465732c2077686f2063616e206d696e742069742028604e6f6e656020666f7220616e796f6e652920616e6420756e74696c207768617420626c6f636b2420206e756d6265722ec82d20607369676e6174757265603a20546865207369676e6174757265206f662074686520606461746160206f626a6563742e39012d20607369676e6572603a2054686520606461746160206f626a6563742773207369676e65722e2053686f756c6420626520616e20497373756572206f662074686520636f6c6c656374696f6e2e0068456d697473206049737375656460206f6e20737563636573732ed4456d69747320604174747269627574655365746020696620746865206174747269627574657320776572652070726f76696465642ed8456d69747320604974656d4d657461646174615365746020696620746865206d6574616461746120776173206e6f7420656d7074792e647365745f617474726962757465735f7072655f7369676e65640c0110646174614105016c5072655369676e6564417474726962757465734f663c542c20493e0001247369676e617475726529050150543a3a4f6666636861696e5369676e61747572650001187369676e6572000130543a3a4163636f756e7449640026340101536574206174747269627574657320666f7220616e206974656d2062792070726f766964696e6720746865207072652d7369676e656420617070726f76616c2e00f84f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f66207468652060646174612e6974656d602e0049012d206064617461603a20546865207072652d7369676e656420617070726f76616c207468617420636f6e7369737473206f662074686520696e666f726d6174696f6e2061626f757420746865206974656d2ccc20206174747269627574657320746f2075706461746520616e6420756e74696c207768617420626c6f636b206e756d6265722ec82d20607369676e6174757265603a20546865207369676e6174757265206f662074686520606461746160206f626a6563742e51012d20607369676e6572603a2054686520606461746160206f626a6563742773207369676e65722e2053686f756c6420626520616e2041646d696e206f662074686520636f6c6c656374696f6e20666f722074686578202060436f6c6c656374696f6e4f776e657260206e616d6573706163652e00c4456d69747320604174747269627574655365746020666f7220656163682070726f7669646564206174747269627574652e1901456d69747320604974656d41747472696275746573417070726f76616c4164646564602069662074686520617070726f76616c207761736e277420736574206265666f72652ea8456d69747320605072655369676e65644174747269627574657353657460206f6e20737563636573732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee1040c2c70616c6c65745f6e66747314747970657340436f6c6c656374696f6e436f6e6669670c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110000c012073657474696e6773e5040148436f6c6c656374696f6e53657474696e67730001286d61785f737570706c790d02012c4f7074696f6e3c7533323e0001346d696e745f73657474696e6773ed0401b84d696e7453657474696e67733c50726963652c20426c6f636b4e756d6265722c20436f6c6c656374696f6e49643e0000e5040c2c70616c6c65745f6e66747314747970657320426974466c61677304045401e904000400300144436f6c6c656374696f6e53657474696e670000e9040c2c70616c6c65745f6e66747314747970657344436f6c6c656374696f6e53657474696e67000114445472616e7366657261626c654974656d7300010040556e6c6f636b65644d6574616461746100020048556e6c6f636b65644174747269627574657300040044556e6c6f636b65644d6178537570706c790008003c4465706f736974526571756972656400100000ed040c2c70616c6c65745f6e667473147479706573304d696e7453657474696e67730c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110001401246d696e745f74797065f10401584d696e74547970653c436f6c6c656374696f6e49643e0001147072696365f50401344f7074696f6e3c50726963653e00012c73746172745f626c6f636b0d02014c4f7074696f6e3c426c6f636b4e756d6265723e000124656e645f626c6f636b0d02014c4f7074696f6e3c426c6f636b4e756d6265723e00015464656661756c745f6974656d5f73657474696e6773f90401304974656d53657474696e67730000f1040c2c70616c6c65745f6e667473147479706573204d696e74547970650430436f6c6c656374696f6e49640110010c18497373756572000000185075626c696300010020486f6c6465724f660400100130436f6c6c656374696f6e496400020000f50404184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000f9040c2c70616c6c65745f6e66747314747970657320426974466c61677304045401fd0400040030012c4974656d53657474696e670000fd040c2c70616c6c65745f6e6674731474797065732c4974656d53657474696e6700010c305472616e7366657261626c6500010040556e6c6f636b65644d6574616461746100020048556e6c6f636b6564417474726962757465730004000001050c2c70616c6c65745f6e6674731474797065733844657374726f795769746e65737300000c01386974656d5f6d6574616461746173cc010c7533320001306974656d5f636f6e66696773cc010c75333200012861747472696275746573cc010c7533320000050504184f7074696f6e0404540109050108104e6f6e6500000010536f6d6504000905000001000009050c2c70616c6c65745f6e6674731474797065732c4d696e745769746e65737308184974656d496401101c42616c616e63650118000801286f776e65645f6974656d0d0201384f7074696f6e3c4974656d49643e0001286d696e745f7072696365f504013c4f7074696f6e3c42616c616e63653e00000d050c2c70616c6c65745f6e667473147479706573284974656d436f6e666967000004012073657474696e6773f90401304974656d53657474696e67730000110504184f7074696f6e04045401dd030108104e6f6e6500000010536f6d650400dd03000001000015050c2c70616c6c65745f6e6674731474797065737c43616e63656c41747472696275746573417070726f76616c5769746e65737300000401486163636f756e745f6174747269627574657310010c753332000019050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011d05045300000400210501185665633c543e00001d050c2c70616c6c65745f6e6674731474797065731c4974656d5469701030436f6c6c656374696f6e49640110184974656d49640110244163636f756e744964010018416d6f756e74011800100128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d496400012072656365697665720001244163636f756e744964000118616d6f756e74180118416d6f756e74000021050000021d050025050c2c70616c6c65745f6e667473147479706573345072655369676e65644d696e741430436f6c6c656374696f6e49640110184974656d49640110244163636f756e744964010020446561646c696e6501101c42616c616e63650118001c0128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d496400012861747472696275746573b102015c5665633c285665633c75383e2c205665633c75383e293e0001206d6574616461746138011c5665633c75383e0001306f6e6c795f6163636f756e749c01444f7074696f6e3c4163636f756e7449643e000120646561646c696e65100120446561646c696e650001286d696e745f7072696365f504013c4f7074696f6e3c42616c616e63653e00002905082873705f72756e74696d65384d756c74695369676e617475726500010c1c4564323535313904002d050148656432353531393a3a5369676e61747572650000001c53723235353139040035050148737232353531393a3a5369676e617475726500010014456364736104003905014065636473613a3a5369676e6174757265000200002d050c1c73705f636f72651c65643235353139245369676e617475726500000400310501205b75383b2036345d0000310500000340000000080035050c1c73705f636f72651c73723235353139245369676e617475726500000400310501205b75383b2036345d000039050c1c73705f636f7265146563647361245369676e6174757265000004003d05017c5b75383b205349474e41545552455f53455249414c495a45445f53495a455d00003d0500000341000000080041050c2c70616c6c65745f6e6674731474797065734c5072655369676e6564417474726962757465731030436f6c6c656374696f6e49640110184974656d49640110244163636f756e744964010020446561646c696e65011000140128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d496400012861747472696275746573b102015c5665633c285665633c75383e2c205665633c75383e293e0001246e616d657370616365810201744174747269627574654e616d6573706163653c4163636f756e7449643e000120646561646c696e65100120446561646c696e65000045050c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000048053656e646572206d75737420626520746865205375646f206163636f756e742e04684572726f7220666f7220746865205375646f2070616c6c65742e49050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400a401185665633c543e00004d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015105045300000400550501185665633c543e000051050c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65743443616e646964617465496e666f08244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650000550500000251050059050c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144572726f7204045400014444546f6f4d616e7943616e646964617465730000048c5468652070616c6c65742068617320746f6f206d616e792063616e646964617465732e5c546f6f466577456c696769626c65436f6c6c61746f7273000104ac4c656176696e6720776f756c6420726573756c7420696e20746f6f206665772063616e646964617465732e40416c726561647943616e6469646174650002047c4163636f756e7420697320616c726561647920612063616e6469646174652e304e6f7443616e6469646174650003046c4163636f756e74206973206e6f7420612063616e6469646174652e50546f6f4d616e79496e76756c6e657261626c65730004048454686572652061726520746f6f206d616e7920496e76756c6e657261626c65732e4c416c7265616479496e76756c6e657261626c650005048c4163636f756e7420697320616c726561647920616e20496e76756c6e657261626c652e3c4e6f74496e76756c6e657261626c650006047c4163636f756e74206973206e6f7420616e20496e76756c6e657261626c652e5c4e6f4173736f63696174656456616c696461746f7249640007049c4163636f756e7420686173206e6f206173736f6369617465642076616c696461746f722049442e5856616c696461746f724e6f74526567697374657265640008048c56616c696461746f72204944206973206e6f742079657420726567697374657265642e6c496e73657274546f43616e6469646174654c6973744661696c65640009049c436f756c64206e6f7420696e7365727420696e207468652063616e646964617465206c6973742e7452656d6f766546726f6d43616e6469646174654c6973744661696c6564000a04a4436f756c64206e6f742072656d6f76652066726f6d207468652063616e646964617465206c6973742e344465706f736974546f6f4c6f77000b04f44e6577206465706f73697420616d6f756e7420776f756c642062652062656c6f7720746865206d696e696d756d2063616e64696461637920626f6e642e6455706461746543616e6469646174654c6973744661696c6564000c0490436f756c64206e6f7420757064617465207468652063616e646964617465206c6973742e40496e73756666696369656e74426f6e64000d0429014465706f73697420616d6f756e7420697320746f6f206c6f7720746f2074616b652074686520746172676574277320736c6f7420696e207468652063616e646964617465206c6973742e5054617267657449734e6f7443616e646964617465000e042d0154686520746172676574206163636f756e7420746f206265207265706c6163656420696e207468652063616e646964617465206c697374206973206e6f7420612063616e6469646174652e404964656e746963616c4465706f736974000f040d015468652075706461746564206465706f73697420616d6f756e7420697320657175616c20746f2074686520616d6f756e7420616c72656164792072657365727665642e40496e76616c6964556e726573657276650010043d0143616e6e6f74206c6f7765722063616e64696461637920626f6e64207768696c65206f6363757079696e6720612066757475726520636f6c6c61746f7220736c6f7420696e20746865206c6973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e5d05000002610500610500000408000104006505000004086905380069050c1c73705f636f72651863727970746f244b65795479706549640000040048011c5b75383b20345d00006d050c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e71050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010504045300000400750501185665633c543e000075050000020504007905084873705f636f6e73656e7375735f736c6f747310536c6f740000040030010c75363400007d05000004087905100081050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401e9010453000004008505012c42547265655365743c543e000085050420425472656553657404045401e90100040089050000008905000002e901008d050000029105009105086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74e90101185061726149640001147374617465950501344f7574626f756e6453746174650001347369676e616c735f6578697374200110626f6f6c00012c66697273745f696e646578e502010c7531360001286c6173745f696e646578e502010c75313600009505086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000990500000408e901e502009d05086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e6669674461746100000c014473757370656e645f7468726573686f6c6410010c75333200013864726f705f7468726573686f6c6410010c753332000140726573756d655f7468726573686f6c6410010c7533320000a1050c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f7204045400010c384261645175657565436f6e666967000004110153657474696e672074686520717565756520636f6e666967206661696c65642073696e6365206f6e65206f66206974732076616c7565732077617320696e76616c69642e40416c726561647953757370656e6465640001048c54686520657865637574696f6e20697320616c72656164792073757370656e6465642e38416c7265616479526573756d65640002048454686520657865637574696f6e20697320616c726561647920726573756d65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea5050c2870616c6c65745f78636d1870616c6c65742c5175657279537461747573042c426c6f636b4e756d6265720110010c1c50656e64696e67100124726573706f6e646572d901014456657273696f6e65644c6f636174696f6e00014c6d617962655f6d617463685f71756572696572a90501644f7074696f6e3c56657273696f6e65644c6f636174696f6e3e0001306d617962655f6e6f74696679ad0501404f7074696f6e3c2875382c207538293e00011c74696d656f757410012c426c6f636b4e756d6265720000003c56657273696f6e4e6f7469666965720801186f726967696ed901014456657273696f6e65644c6f636174696f6e00012469735f616374697665200110626f6f6c000100145265616479080120726573706f6e7365b505014456657273696f6e6564526573706f6e7365000108617410012c426c6f636b4e756d62657200020000a90504184f7074696f6e04045401d9010108104e6f6e6500000010536f6d650400d9010000010000ad0504184f7074696f6e04045401b1050108104e6f6e6500000010536f6d650400b1050000010000b10500000408080800b505080c78636d4456657273696f6e6564526573706f6e736500010c08563204002504013076323a3a526573706f6e736500020008563304005104013076333a3a526573706f6e736500030008563404003101013076343a3a526573706f6e736500040000b9050000040810d90100bd050000040c30281000c1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c505045300000400c90501185665633c543e0000c50500000408d9011000c905000002c50500cd050c2870616c6c65745f78636d1870616c6c65745456657273696f6e4d6967726174696f6e53746167650001105c4d696772617465537570706f7274656456657273696f6e0000005c4d69677261746556657273696f6e4e6f74696669657273000100504e6f7469667943757272656e74546172676574730400d105013c4f7074696f6e3c5665633c75383e3e000200684d696772617465416e644e6f746966794f6c645461726765747300030000d10504184f7074696f6e04045401380108104e6f6e6500000010536f6d650400380000010000d5050000040c1000d90500d905080c78636d4056657273696f6e6564417373657449640001080856330400b901012c76333a3a4173736574496400030008563404001d01012c76343a3a4173736574496400040000dd050c2870616c6c65745f78636d1870616c6c65746852656d6f74654c6f636b656446756e6769626c655265636f72640848436f6e73756d65724964656e7469666965720198304d6178436f6e73756d6572730000100118616d6f756e74180110753132380001146f776e6572d901014456657273696f6e65644c6f636174696f6e0001186c6f636b6572d901014456657273696f6e65644c6f636174696f6e000124636f6e73756d657273e10501d0426f756e6465645665633c28436f6e73756d65724964656e7469666965722c2075313238292c204d6178436f6e73756d6572733e0000e1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e505045300000400e90501185665633c543e0000e50500000408981800e905000002e50500ed050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f105045300000400f50501185665633c543e0000f1050000040818d90100f505000002f10500f9050c2870616c6c65745f78636d1870616c6c6574144572726f720404540001642c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108410154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652ec8506572686170732061206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404dc5468652064657374696e6174696f6e20604c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e5843616e6e6f74436865636b4f757454656c65706f7274000d042901436f756c64206e6f7420636865636b2d6f7574207468652061737365747320666f722074656c65706f72746174696f6e20746f207468652064657374696e6174696f6e20636861696e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304490154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c20636f6e73756d657273206f6620746865206c6f636b2e5c496e76616c696441737365744e6f74436f6e63726574650014046c496e76616c6964206e6f6e2d636f6e63726574652061737365742e68496e76616c69644173736574556e6b6e6f776e52657365727665001504f0496e76616c69642061737365742c207265736572766520636861696e20636f756c64206e6f742062652064657465726d696e656420666f722069742e78496e76616c69644173736574556e737570706f72746564526573657276650016044501496e76616c69642061737365742c20646f206e6f7420737570706f72742072656d6f7465206173736574207265736572766573207769746820646966666572656e7420666565732072657365727665732e3c546f6f4d616e7952657365727665730017044901546f6f206d616e7920617373657473207769746820646966666572656e742072657365727665206c6f636174696f6e732068617665206265656e20617474656d7074656420666f72207472616e736665722e604c6f63616c457865637574696f6e496e636f6d706c6574650018047c4c6f63616c2058434d20657865637574696f6e20696e636f6d706c6574652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd05085070616c6c65745f6d6573736167655f717565756524426f6f6b537461746504344d6573736167654f726967696e01e50100180114626567696e10012450616765496e64657800010c656e6410012450616765496e646578000114636f756e7410012450616765496e64657800014072656164795f6e65696768626f757273010601844f7074696f6e3c4e65696768626f7572733c4d6573736167654f726967696e3e3e0001346d6573736167655f636f756e7430010c75363400011073697a6530010c7536340000010604184f7074696f6e0404540105060108104e6f6e6500000010536f6d650400050600000100000506085070616c6c65745f6d6573736167655f7175657565284e65696768626f75727304344d6573736167654f726967696e01e5010008011070726576e50101344d6573736167654f726967696e0001106e657874e50101344d6573736167654f726967696e0000090600000408e50110000d06085070616c6c65745f6d6573736167655f71756575651050616765081053697a650110204865617053697a65000018012472656d61696e696e6710011053697a6500013872656d61696e696e675f73697a6510011053697a6500012c66697273745f696e64657810011053697a65000114666972737410011053697a650001106c61737410011053697a65000110686561701106019c426f756e6465645665633c75382c20496e746f5533323c4865617053697a652c2053697a653e3e000011060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000015060c5070616c6c65745f6d6573736167655f71756575651870616c6c6574144572726f720404540001242c4e6f745265617061626c65000008490150616765206973206e6f74207265617061626c65206265636175736520697420686173206974656d732072656d61696e696e6720746f2062652070726f63657373656420616e64206973206e6f74206f6c641c656e6f7567682e184e6f50616765000104845061676520746f2062652072656170656420646f6573206e6f742065786973742e244e6f4d657373616765000204a8546865207265666572656e636564206d65737361676520636f756c64206e6f7420626520666f756e642e40416c726561647950726f6365737365640003040101546865206d6573736167652077617320616c72656164792070726f63657373656420616e642063616e6e6f742062652070726f63657373656420616761696e2e18517565756564000404ac546865206d6573736167652069732071756575656420666f722066757475726520657865637574696f6e2e48496e73756666696369656e74576569676874000504190154686572652069732074656d706f726172696c79206e6f7420656e6f7567682077656967687420746f20636f6e74696e756520736572766963696e67206d657373616765732e6054656d706f726172696c79556e70726f6365737361626c65000610a854686973206d6573736167652069732074656d706f726172696c7920756e70726f6365737361626c652e00590153756368206572726f7273206172652065787065637465642c20627574206e6f742067756172616e746565642c20746f207265736f6c7665207468656d73656c766573206576656e7475616c6c79207468726f756768247265747279696e672e2c517565756550617573656400070cec5468652071756575652069732070617573656420616e64206e6f206d6573736167652063616e2062652065786563757465642066726f6d2069742e001d01546869732063616e206368616e676520617420616e792074696d6520616e64206d6179207265736f6c766520696e20746865206675747572652062792072652d747279696e672e4c526563757273697665446973616c6c6f7765640008043101416e6f746865722063616c6c20697320696e2070726f677265737320616e64206e6565647320746f2066696e697368206265666f726520746869732063616c6c2063616e2068617070656e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1906000004081d0610001d060c6070616c6c65745f73746f726167655f70726f7669646572731474797065733c53746f7261676550726f7669646572040454000108544261636b757053746f7261676550726f76696465720400210601604261636b757053746f7261676550726f76696465723c543e0000004c4d61696e53746f7261676550726f76696465720400250601584d61696e53746f7261676550726f76696465723c543e0001000021060c6070616c6c65745f73746f726167655f70726f766964657273147479706573544261636b757053746f7261676550726f76696465720404540000200120636170616369747930014853746f7261676544617461556e69743c543e00013463617061636974795f7573656430014853746f7261676544617461556e69743c543e0001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e000110726f6f743401544d65726b6c655061747269636961526f6f743c543e0001506c6173745f63617061636974795f6368616e6765100144426c6f636b4e756d626572466f723c543e0001346f776e65725f6163636f756e74000130543a3a4163636f756e74496400013c7061796d656e745f6163636f756e74000130543a3a4163636f756e74496400014472657075746174696f6e5f77656967687410015c52657075746174696f6e576569676874547970653c543e000025060c6070616c6c65745f73746f726167655f70726f7669646572731474797065734c4d61696e53746f7261676550726f7669646572040454000020011c6275636b657473290601284275636b6574733c543e000120636170616369747930014853746f7261676544617461556e69743c543e00013463617061636974795f7573656430014853746f7261676544617461556e69743c543e0001386d756c7469616464726573736573f50101d4426f756e6465645665633c4d756c7469416464726573733c543e2c204d61784d756c746941646472657373416d6f756e743c543e3e00012876616c75655f70726f700102014c56616c756550726f706f736974696f6e3c543e0001506c6173745f63617061636974795f6368616e6765100144426c6f636b4e756d626572466f723c543e0001346f776e65725f6163636f756e74000130543a3a4163636f756e74496400013c7061796d656e745f6163636f756e74000130543a3a4163636f756e744964000029060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012d06045300000400310601185665633c543e00002d060c6070616c6c65745f73746f726167655f70726f766964657273147479706573184275636b65740404540000180110726f6f743401544d65726b6c655061747269636961526f6f743c543e00011c757365725f6964000130543a3a4163636f756e7449640001186d73705f69643401604d61696e53746f7261676550726f766964657249643c543e00011c70726976617465200110626f6f6c000150726561645f6163636573735f67726f75705f69640d0201704f7074696f6e3c543a3a5265616441636365737347726f757049643e00011073697a6530014853746f7261676544617461556e69743c543e000031060000022d060035060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400190201185665633c543e000039060c6070616c6c65745f73746f726167655f70726f7669646572731870616c6c6574144572726f7204045400016c44416c72656164795265676973746572656400000471014572726f72207468726f776e207768656e2061207573657220747269657320746f207369676e20757020617320612053502062757420697320616c726561647920726567697374657265642061732061204d5350206f72204253502e485369676e55704e6f7452657175657374656400010459014572726f72207468726f776e207768656e2061207573657220747269657320746f20636f6e6669726d2061207369676e207570207468617420776173206e6f74207265717565737465642070726576696f75736c792e505369676e55705265717565737450656e64696e670002048d014572726f72207468726f776e207768656e2061207573657220747269657320746f207265717565737420746f207369676e207570207768656e20697420616c7265616479206861732061207369676e20757020726571756573742070656e64696e672e384e6f4d756c7469416464726573730003040d014572726f72207468726f776e207768656e2061207573657220747269657320746f207369676e20757020776974686f757420616e79206d756c7469616464726573732e4c496e76616c69644d756c74694164647265737300040491014572726f72207468726f776e207768656e2061207573657220747269657320746f207369676e20757020617320612053502062757420616e79206f66207468652070726f7669646564206d756c746961646472657373657320697320696e76616c69642e3453746f72616765546f6f4c6f7700050401024572726f72207468726f776e207768656e2061207573657220747269657320746f207369676e207570206f72206368616e67652069747320636170616369747920746f2073746f7265206c6573732073746f72616765207468616e20746865206d696e696d756d207265717569726564206279207468652072756e74696d652e404e6f74456e6f75676842616c616e636500060431024572726f72207468726f776e207768656e2061207573657220646f6573206e6f74206861766520656e6f7567682062616c616e636520746f2070617920746865206465706f736974207468617420697420776f756c6420696e637572206279207369676e696e672075702061732061205350206f72206368616e67696e67206974732063617061636974792e4443616e6e6f74486f6c644465706f736974000704f9014572726f72207468726f776e207768656e207468652072756e74696d652063616e6e6f7420686f6c6420746865207265717569726564206465706f7369742066726f6d20746865206163636f756e7420746f2072656769737465722069742061732061205350206f72206368616e6765206974732063617061636974792e4453746f726167655374696c6c496e55736500080439014572726f72207468726f776e207768656e2061207573657220747269657320746f207369676e206f6666206173206120535020627574207374696c6c2068617320757365642073746f726167652e5452616e646f6d6e6573734e6f7456616c69645965740009048d014572726f72207468726f776e207768656e2061207573657220747269657320746f20636f6e6669726d2061207369676e20757020627574207468652072616e646f6d6e65737320697320746f6f20667265736820746f2062652075736564207965742e505369676e55705265717565737445787069726564000a048d014572726f72207468726f776e207768656e2061207573657220747269657320746f20636f6e6669726d2061207369676e2075702062757420746f6f206d7563682074696d6520686173207061737365642073696e63652074686520726571756573742e784e657743617061636974794c6573735468616e5573656453746f72616765000b0451014572726f72207468726f776e207768656e2061207573657220747269657320746f206368616e67652069747320636170616369747920746f206c657373207468616e2069747320757365642073746f726167652e804e65774361706163697479457175616c7343757272656e744361706163697479000c045d014572726f72207468726f776e207768656e2061207573657220747269657320746f206368616e67652069747320636170616369747920746f207468652073616d652076616c756520697420616c7265616479206861732e544e6577436170616369747943616e7442655a65726f000d04c9014572726f72207468726f776e207768656e2061207573657220747269657320746f206368616e67652069747320636170616369747920746f207a65726f20287468657265206172652073706563696669632065787472696e7369637320746f207369676e206f66662061732061205350292e4c4e6f74456e6f75676854696d65506173736564000e04d9014572726f72207468726f776e207768656e206120535020747269657320746f206368616e6765206974732063617061636974792062757420697420686173206e6f74206265656e20656e6f7567682074696d652073696e636520746865206c6173742074696d65206974206368616e6765642069742e944e65775573656443617061636974794578636565647353746f726167654361706163697479000f04c5014572726f72207468726f776e207768656e206120535020747269657320746f206368616e6765206974732063617061636974792062757420746865206e6577206361706163697479206973206e6f7420656e6f75676820746f2073746f72652074686520757365642073746f726167652e344e6f745265676973746572656400100465014572726f72207468726f776e207768656e2061207573657220747269657320746f20696e746572616374206173206120535020627574206973206e6f7420726567697374657265642061732061204d5350206f72204253502e204e6f55736572496400110431014572726f72207468726f776e207768656e20747279696e6720746f20676574206120726f6f742066726f6d2061204d535020776974686f75742070617373696e67206120557365722049442e284e6f4275636b6574496400120439014572726f72207468726f776e207768656e20747279696e6720746f20676574206120726f6f742066726f6d2061204d535020776974686f75742070617373696e672061204275636b65742049442e6c537052656769737465726564427574446174614e6f74466f756e64001304d1014572726f72207468726f776e207768656e206120757365722068617320612053502049442061737369676e656420746f2069742062757420746865205350206461746120646f6573206e6f7420657869737420696e2073746f726167652028496e636f6e73697374656e6379206572726f72292e384275636b65744e6f74466f756e64001404d84572726f72207468726f776e207768656e2061206275636b6574204944206973206e6f7420666f756e6420696e2073746f726167652e4c4275636b6574416c7265616479457869737473001504e04572726f72207468726f776e207768656e2061206275636b657420494420616c72656164792065786973747320696e2073746f726167652e5c417070656e644275636b6574546f4d73704661696c656400160445014572726f72207468726f776e207768656e2061206275636b657420494420636f756c64206e6f7420626520616464656420746f20746865206c697374206f66206275636b657473206f662061204d53502e5050726f76696465724e6f74536c61736861626c650017043d014572726f72207468726f776e207768656e20616e20617474656d707420776173206d61646520746f20736c61736820616e20756e736c61736861626c652053746f726167652050726f76696465722e68496e76616c6964456e636f64656446696c654d6574616461746100180475014572726f72207468726f776e207768656e206661696c696e6720746f206465636f646520746865206d657461646174612066726f6d206120726563656976656420747269652076616c75652074686174207761732072656d6f7665642e5c496e76616c6964456e636f6465644163636f756e74496400190451014572726f72207468726f776e207768656e206661696c696e6720746f206465636f646520746865206f776e6572204163636f756e742049442066726f6d20746865207265636569766564206d657461646174612e545061796d656e7453747265616d4e6f74466f756e64001a0421014572726f72207468726f776e207768656e20747279696e6720746f207570646174652061207061796d656e742073747265616d207468617420646f6573206e6f742065786973742e044901546865206572726f727320746861742063616e206265207468726f776e20627920746869732070616c6c657420746f20696e666f726d2075736572732061626f757420776861742077656e742077726f6e673d060c4870616c6c65745f66696c655f73797374656d1474797065735853746f72616765526571756573744d6574616461746104045400003001307265717565737465645f61741001345469636b4e756d6265723c543e0001146f776e6572000130543a3a4163636f756e7449640001246275636b65745f69643401384275636b65744964466f723c543e0001206c6f636174696f6e1102013c46696c654c6f636174696f6e3c543e00012c66696e6765727072696e7434013846696e6765727072696e743c543e00011073697a6530013853746f72616765446174613c543e00010c6d7370410601804f7074696f6e3c2850726f76696465724964466f723c543e2c20626f6f6c293e000134757365725f706565725f696473f5010128506565724964733c543e00013c646174615f7365727665725f737073490601e4426f756e6465645665633c50726f76696465724964466f723c543e2c204d61784273707350657253746f72616765526571756573743c543e3e000134627370735f72657175697265641001605265706c69636174696f6e546172676574547970653c543e000138627370735f636f6e6669726d65641001605265706c69636174696f6e546172676574547970653c543e000140627370735f766f6c756e7465657265641001605265706c69636174696f6e546172676574547970653c543e0000410604184f7074696f6e0404540145060108104e6f6e6500000010536f6d6504004506000001000045060000040834200049060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400190201185665633c543e00004d060000040834340051060c4870616c6c65745f66696c655f73797374656d1474797065736853746f7261676552657175657374427370734d657461646174610404540000040124636f6e6669726d6564200110626f6f6c000055060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400190201185665633c543e000059060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015d06045300000400610601185665633c543e00005d060000040800340061060000025d060065060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d06045300000400690601185665633c543e000069060000024d06006d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d06045300000400690601185665633c543e000071060000040810300075060c4870616c6c65745f66696c655f73797374656d147479706573644d6f76654275636b6574526571756573744d657461646174610404540000040124726571756573746572000130543a3a4163636f756e744964000079060c4870616c6c65745f66696c655f73797374656d1870616c6c6574144572726f720404540001e47c53746f7261676552657175657374416c726561647952656769737465726564000004d853746f72616765207265717565737420616c7265616479207265676973746572656420666f722074686520676976656e2066696c652e5853746f72616765526571756573744e6f74466f756e64000104c853746f726167652072657175657374206e6f74207265676973746572656420666f722074686520676976656e2066696c652e6053746f72616765526571756573744e6f745265766f6b656400020415014f7065726174696f6e206e6f7420616c6c6f776564207768696c65207468652073746f726167652072657175657374206973206e6f74206265696e67207265766f6b65642e5053746f7261676552657175657374457869737473000304dc4f7065726174696f6e206e6f7420616c6c6f776564207768696c65207468652073746f726167652072657175657374206578697374732e745265706c69636174696f6e54617267657443616e6e6f7442655a65726f000404885265706c69636174696f6e207461726765742063616e6e6f74206265207a65726f2e644273707352657175697265644578636565647354617267657400050411014253507320726571756972656420666f722073746f7261676520726571756573742063616e6e6f742065786365656420746865206d6178696d756d20616c6c6f7765642e1c4e6f7441427370000604544163636f756e74206973206e6f742061204253502e1c4e6f74414d7370000704544163636f756e74206973206e6f742061204d53502e184e6f74415370000804504163636f756e74206973206e6f7420612053502e444273704e6f74566f6c756e746565726564000904c042535020686173206e6f7420766f6c756e74656572656420746f2073746f72652074686520676976656e2066696c652e3c4273704e6f74436f6e6669726d6564000a04b442535020686173206e6f7420636f6e6669726d65642073746f72696e672074686520676976656e2066696c652e4c427370416c7265616479436f6e6669726d6564000b04c44253502068617320616c726561647920636f6e6669726d65642073746f72696e672074686520676976656e2066696c652e8c53746f726167655265717565737442737073526571756972656446756c66696c6c6564000c04f44e756d626572206f66204253507320726571756972656420666f722073746f72616765207265717565737420686173206265656e20726561636865642e54427370416c7265616479566f6c756e746565726564000d04c042535020616c726561647920766f6c756e74656572656420746f2073746f72652074686520676976656e2066696c652e74496e73756666696369656e74417661696c61626c654361706163697479000e04ec535020646f6573206e6f74206861766520656e6f7567682073746f7261676520636170616369747920746f2073746f7265207468652066696c652ea0556e65787065637465644e756d6265724f6652656d6f766564566f6c756e74656572656442737073000f0485014e756d626572206f662072656d6f766564204253507320766f6c756e7465657265642066726f6d2073746f7261676520726571756573742070726566697820646964206e6f74206d6174636820746865206578706563746564206e756d6265722e9053746f7261676552657175657374457870697265644e6f536c6f74417661696c61626c6500100431014e6f20736c6f7420617661696c61626c6520666f756e6420696e20626c6f636b7320746f20696e736572742073746f7261676520726571756573742065787069726174696f6e2074696d652e6c53746f72616765526571756573744e6f74417574686f72697a6564001104b44e6f7420617574686f72697a656420746f2064656c657465207468652073746f7261676520726571756573742e544d6178426c6f636b4e756d6265725265616368656400120859014572726f72206372656174656420696e20323032342e20496620796f752073656520746869732c20796f75206172652077656c6c206265796f6e64207468652073696e67756c617269747920616e642073686f756c648070726f6261626c792073746f70207573696e6720746869732070616c6c65742e444661696c6564546f456e636f6465427370001304844661696c656420746f20656e636f64652042535020696420617320736c6963652e644661696c6564546f456e636f646546696e6765727072696e74001404984661696c656420746f20656e636f64652066696e6765727072696e7420617320736c6963652e5c4661696c6564546f4465636f64655468726573686f6c640015046c4661696c656420746f206465636f6465207468726573686f6c642e3841626f76655468726573686f6c640016049042535020646964206e6f742073756363656564207468726573686f6c6420636865636b2e605468726573686f6c6441726974686d657469634572726f72001704a841726974686d65746963206572726f7220696e207468726573686f6c642063616c63756c6174696f6e2e504661696c656454797065436f6e76657273696f6e001804904661696c656420746f20636f6e7665727420746f207072696d697469766520747970652e344469766964656442795a65726f0019043044697669646564206279203068496d706f737369626c654661696c6564546f47657456616c7565001a04c44661696c656420746f206765742076616c7565207768656e206a75737420636865636b656420697420657869737465642e484275636b657449734e6f7450726976617465001b041d014275636b6574206973206e6f7420707269766174652e2043616c6c20607570646174655f6275636b65745f707269766163796020746f206d616b6520697420707269766174652e384275636b65744e6f74466f756e64001c04544275636b657420646f6573206e6f74206578697374384e6f744275636b65744f776e6572001d0411014f7065726174696f6e206661696c6564206265636175736520746865206163636f756e74206973206e6f7420746865206f776e6572206f6620746865206275636b65742e5050726f7669646572526f6f744e6f74466f756e64001e047c526f6f74206f66207468652070726f7669646572206e6f7420666f756e642e6445787065637465644e6f6e496e636c7573696f6e50726f6f66001f0415014661696c656420746f207665726966792070726f6f663a20726571756972656420746f2070726f7669646520612070726f6f66206f66206e6f6e2d696e636c7573696f6e2e584578706563746564496e636c7573696f6e50726f6f6600200405014661696c656420746f207665726966792070726f6f663a20726571756972656420746f2070726f7669646520612070726f6f66206f6620696e636c7573696f6e2e58496e76616c696446696c654b65794d65746164617461002104c84d6574616461746120646f6573206e6f7420636f72726573706f6e6420746f2065787065637465642066696c65206b65792e5c5468726573686f6c6442656c6f774173796d70746f7465002204d0425350732061737369676e6d656e74207468726573686f6c642063616e6e6f742062652062656c6f77206173796d70746f74652e304e6f7446696c654f776e6572002304d4556e617574686f72697a6564206f7065726174696f6e2c207369676e657220646f6573206e6f74206f776e207468652066696c652e7446696c654b6579416c726561647950656e64696e6744656c6574696f6e0024048846696c65206b657920616c72656164792070656e64696e672064656c6574696f6e2e944d61785573657250656e64696e6744656c6574696f6e526571756573747352656163686564002504d44d6178206e756d626572206f6620757365722070656e64696e672064656c6574696f6e20726571756573747320726561636865642e4c4d73704e6f7453746f72696e674275636b6574002604f8556e617574686f72697a6564206f7065726174696f6e2c207369676e6572206973206e6f7420616e204d5350206f6620746865206275636b65742069642e6446696c654b65794e6f7450656e64696e6744656c6574696f6e002704c046696c65206b6579206e6f7420666f756e6420696e2070656e64696e672064656c6574696f6e2072657175657374732e5046696c6553697a6543616e6e6f7442655a65726f0028046446696c652073697a652063616e6e6f74206265207a65726f2e6c4e6f476c6f62616c52657075746174696f6e576569676874536574002904804e6f20676c6f62616c2072657075746174696f6e20776569676874207365742e704d6178696d756d5468726573686f6c6443616e6e6f7442655a65726f002a04844d6178696d756d207468726573686f6c642063616e6e6f74206265207a65726f2e9c5469636b52616e6765546f4d6178696d756d5468726573686f6c6443616e6e6f7442655a65726f002b04bc5469636b2072616e676520746f206d6178696d756d207468726573686f6c642063616e6e6f74206265207a65726f2e8450656e64696e6753746f7053746f72696e67526571756573744e6f74466f756e64002c049c50656e64696e672073746f702073746f72696e672072657175657374206e6f7420666f756e642e7c4d696e57616974466f7253746f7053746f72696e674e6f7452656163686564002d0479014d696e696d756d20616d6f756e74206f6620626c6f636b73206265747765656e207468652072657175657374206f70656e696e6720616e64206265696e672061626c6520746f20636f6e6669726d206974206e6f7420726561636865642e9850656e64696e6753746f7053746f72696e6752657175657374416c7265616479457869737473002e04b050656e64696e672073746f702073746f72696e67207265717565737420616c7265616479206578697374732e40557365724e6f74496e736f6c76656e74002f04a9014120535020747269656420746f2073746f702073746f72696e672066696c65732066726f6d2061207573657220746861742077617320737570706f7365646c7920696e736f6c76656e742c20627574207468652075736572206973206e6f7420696e736f6c76656e742e384e6f7453656c65637465644d7370003004a101546865204d535020697320747279696e6720746f20636f6e6669726d20746f2073746f726520612066696c652066726f6d20612073746f726167652072657175657374206973206e6f7420746865206f6e652073656c656374656420746f2073746f72652069742e4c4d7370416c7265616479436f6e6669726d6564003104ad01546865204d535020697320747279696e6720746f20636f6e6669726d20746f2073746f726520612066696c652066726f6d20612073746f72616765207265717565737420746861742069742068617320616c726561647920636f6e6669726d656420746f2073746f72652e4452657175657374576974686f75744d73700032049901546865204d535020697320747279696e6720746f20636f6e6669726d20746f2073746f726520612066696c652066726f6d20612073746f726167652072657175657374207468617420646f6573206e6f7420686176652061204d53502061737369676e65642e5c4d7370416c726561647953746f72696e674275636b657400330498546865204d535020697320616c72656164792073746f72696e6720746865206275636b65742e644d6f76654275636b6574526571756573744e6f74466f756e64003404a44d6f7665206275636b65742072657175657374206e6f7420666f756e6420696e2073746f726167652e484275636b657449734265696e674d6f766564003504cc416374696f6e206e6f7420616c6c6f776564207768696c6520746865206275636b6574206973206265696e67206d6f7665642e50427370416c726561647944617461536572766572003604e442535020697320616c7265616479206120646174612073657276657220666f7220746865206d6f7665206275636b657420726571756573742e5842737044617461536572766572734578636565646564003704f4546f6f206d616e7920726567697374657265642064617461207365727665727320666f7220746865206d6f7665206275636b657420726571756573742e7c46696c654d6574616461746150726f63657373696e67517565756546756c6c003804910154686520626f756e64656420766563746f72207468617420686f6c64732066696c65206d6574616461746120746f2070726f636573732069742069732066756c6c206275742074686572652773207374696c6c206d6f726520746f2070726f636573732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d060000040810340081060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400190201185665633c543e000085060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d02045300000400590201185665633c543e000089060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401340453000004008d06012c42547265655365743c543e00008d06042042547265655365740404540134000400190200000091060c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c753332000095060c5070616c6c65745f70726f6f66735f6465616c65721870616c6c6574144572726f720404540001582c4e6f7450726f76696465720000083847656e6572616c206572726f7273c45468652070726f6f66207375626d6974746572206973206e6f74206120726567697374657265642050726f76696465722e5c4368616c6c656e67657351756575654f766572666c6f7700010c70606368616c6c656e6765602065787472696e736963206572726f72730901546865204368616c6c656e67657351756575652069732066756c6c2e204e6f206d6f7265206d616e75616c206368616c6c656e6765732063616e206265206d616465e4756e74696c20736f6d65206f6620746865206368616c6c656e67657320696e207468652071756575652061726520646973706174636865642e7c5072696f726974794368616c6c656e67657351756575654f766572666c6f770002083101546865205072696f726974794368616c6c656e67657351756575652069732066756c6c2e204e6f206d6f7265207072696f72697479206368616c6c656e6765732063616e206265206d616465e4756e74696c20736f6d65206f6620746865206368616c6c656e67657320696e207468652071756575652061726520646973706174636865642e3c4665654368617267654661696c6564000304e05468652066656520666f72207375626d697474696e672061206368616c6c656e676520636f756c64206e6f7420626520636861726765642e38456d7074794b657950726f6f66730004087c607375626d69745f70726f6f66602065787472696e736963206572726f727388546865726520617265206e6f206b65792070726f6f6673207375626d69747465642e5050726f7669646572526f6f744e6f74466f756e64000504b454686520726f6f7420666f72207468652050726f766964657220636f756c64206e6f7420626520666f756e642e205a65726f526f6f7400060ce850726f7669646572206973207375626d697474696e6720612070726f6f66207768656e207468657920686176652061207a65726f20726f6f742e390150726f7669646572732077697468207a65726f20726f6f747320617265206e6f742070726f766964696e6720616e7920736572766963652c20736f20746865792073686f756c64206e6f74206265487375626d697474696e672070726f6f66732e704e6f5265636f72644f664c6173745375626d697474656450726f6f660007142d0150726f7669646572206973207375626d697474696e6720612070726f6f6620627574207468657265206973206e6f207265636f7264206f6620746865206c617374207469636b2074686579587375626d697474656420612070726f6f6620666f722e390150726f7669646572732077686f2061726520726571756972656420746f207375626d69742070726f6f66732073686f756c6420616c7761797320686176652061207265636f7264206f662074686535016c617374207469636b2074686579207375626d697474656420612070726f6f6620666f722c206f7468657277697365206974206d65616e73207468657920686176656e277420737461727465648c70726f766964696e67207365727669636520666f7220616e792075736572207965742e5450726f76696465725374616b654e6f74466f756e64000804985468652070726f7669646572207374616b6520636f756c64206e6f7420626520666f756e642e245a65726f5374616b65000904dc50726f7669646572206973207375626d697474696e6720612070726f6f6620627574207468656972207374616b65206973207a65726f2e605374616b65436f756c644e6f744265436f6e766572746564000a081101546865207374616b65642062616c616e6365206f66207468652050726f766964657220636f756c64206e6f7420626520636f6e76657274656420746f206075313238602e5901546869732073686f756c64206e6f7420626520706f737369626c652c20617320746865206042616c616e63656020747970652073686f756c6420626520616e20756e7369676e656420696e746567657220747970652e604368616c6c656e6765735469636b4e6f7452656163686564000b04e050726f7669646572206973207375626d697474696e6720612070726f6f6620666f722061207469636b20696e20746865206675747572652e504368616c6c656e6765735469636b546f6f4f6c64000c08510150726f7669646572206973207375626d697474696e6720612070726f6f6620666f722061207469636b206265666f726520746865206c617374207469636b20746869732070616c6c6574207265676973746572733c6368616c6c656e67657320666f722e544368616c6c656e6765735469636b546f6f4c617465000d08450150726f7669646572206973207375626d697474696e6720612070726f6f6620666f722061207469636b20746f6f206c6174652c20692e652e207468617420746865206368616c6c656e676573207469636b450169732067726561746572206f7220657175616c207468616e20606368616c6c656e6765735f7469636b60202b2060543a3a4368616c6c656e67655469636b73546f6c6572616e63653a3a6765742829602e30536565644e6f74466f756e64000e0ca4546865207365656420666f7220746865207469636b20636f756c64206e6f7420626520666f756e642e5101546869732073686f756c64206e6f7420626520706f737369626c6520666f722061207469636b2077697468696e2074686520604368616c6c656e6765486973746f72794c656e677468602072616e67652c20617301017365656473206172652067656e65726174656420666f7220616c6c207469636b732c20616e642073746f7265642077697468696e20746869732072616e67652e70436865636b706f696e744368616c6c656e6765734e6f74466f756e64000f0ca4436865636b706f696e74206368616c6c656e676573206e6f7420666f756e6420696e20626c6f636b2e5d01546869732073686f756c64206f6e6c7920626520706f737369626c6520696620605469636b546f436865636b706f696e744368616c6c656e676573602069732064657265666572656e63656420666f722061207469636b7874686174206973206e6f74206120636865636b706f696e74207469636b2e74466f7265737450726f6f66566572696669636174696f6e4661696c656400100cd854686520666f726573742070726f6f66207375626d6974746564206279207468652050726f766964657220697320696e76616c69642e49015468697320636f756c642062652062656361757365207468652070726f6f66206973206e6f742076616c696420666f722074686520726f6f742c206f722062656361757365207468652070726f6f662069739c6e6f742073756666696369656e7420666f7220746865206368616c6c656e676573206d6164652e404b657950726f6f664e6f74466f756e6400110861015468657265206973206174206c65617374206f6e65206b65792070726f76656e20696e2074686520666f726573742070726f6f662c207468617420646f6573206e6f742068617665206120636f72726573706f6e64696e67286b65792070726f6f662e684b657950726f6f66566572696669636174696f6e4661696c656400120cc441206b65792070726f6f66207375626d6974746564206279207468652050726f766964657220697320696e76616c69642e6d015468697320636f756c642062652062656361757365207468652070726f6f66206973206e6f742076616c696420666f722074686520726f6f74206f662074686174206b65792c206f722062656361757365207468652070726f6f66a86973206e6f742073756666696369656e7420666f7220746865206368616c6c656e676573206d6164652e484661696c6564546f4170706c7944656c7461001304dc4661696c656420746f206170706c792064656c746120746f2074686520666f726573742070726f6f66207061727469616c20747269652e944661696c6564546f55706461746550726f766964657241667465724b657952656d6f76616c001404ec4661696c656420746f20757064617465207468652070726f76696465722061667465722061206b65792072656d6f76616c206d75746174696f6e2e6c546f6f4d616e7956616c696450726f6f665375626d6974746572730015044501546865206c696d6974206f662050726f76696465727320746861742063616e207375626d697420612070726f6f6620696e20612073696e676c65207469636b20686173206265656e20726561636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e9906000004083410009d0600000408340000a1060c5870616c6c65745f7061796d656e745f73747265616d73147479706573584669786564526174655061796d656e7453747265616d04045400001001107261746518013042616c616e63654f663c543e0001446c6173745f636861726765645f7469636b100144426c6f636b4e756d626572466f723c543e000130757365725f6465706f73697418013042616c616e63654f663c543e0001446f75745f6f665f66756e64735f7469636b0d0201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e0000a5060c5870616c6c65745f7061796d656e745f73747265616d731474797065736044796e616d6963526174655061796d656e7453747265616d040454000010013c616d6f756e745f70726f766964656430014c556e69747350726f7669646564466f723c543e00017470726963655f696e6465785f7768656e5f6c6173745f6368617267656418013042616c616e63654f663c543e000130757365725f6465706f73697418013042616c616e63654f663c543e0001446f75745f6f665f66756e64735f7469636b0d0201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e0000a9060c5870616c6c65745f7061796d656e745f73747265616d731474797065736850726f76696465724c61737443686172676561626c65496e666f04045400000801506c6173745f63686172676561626c655f7469636b100144426c6f636b4e756d626572466f723c543e00012c70726963655f696e64657818013042616c616e63654f663c543e0000ad060c5870616c6c65745f7061796d656e745f73747265616d731870616c6c6574144572726f72040454000140685061796d656e7453747265616d416c726561647945786973747300000469014572726f72207468726f776e207768656e20612075736572206f6620746869732070616c6c657420747269657320746f206164642061207061796d656e742073747265616d207468617420616c7265616479206578697374732e545061796d656e7453747265616d4e6f74466f756e64000104bd014572726f72207468726f776e207768656e20612075736572206f6620746869732070616c6c657420747269657320746f207570646174652c2072656d6f7665206f72206368617267652061207061796d656e742073747265616d207468617420646f6573206e6f742065786973742e304e6f744150726f766964657200020471014572726f72207468726f776e207768656e2061207573657220747269657320746f206368617267652061207061796d656e742073747265616d20616e642069742773206e6f74206120726567697374657265642050726f76696465726850726f7669646572496e636f6e73697374656e63794572726f7200030435014572726f72207468726f776e207768656e206661696c696e6720746f2067657420746865207061796d656e74206163636f756e74206f66206120726567697374657265642050726f76696465724443616e6e6f74486f6c644465706f736974000404a9014572726f72207468726f776e207768656e207468652073797374656d2063616e277420686f6c642066756e64732066726f6d2074686520557365722061732061206465706f73697420666f72206372656174696e672061206e6577207061796d656e742073747265616d5055706461746552617465546f53616d655261746500050495014572726f72207468726f776e207768656e20747279696e6720746f20757064617465207468652072617465206f6620612066697865642d72617465207061796d656e742073747265616d20746f207468652073616d652072617465206173206265666f726560557064617465416d6f756e74546f53616d65416d6f756e74000604d1014572726f72207468726f776e207768656e20747279696e6720746f207570646174652074686520616d6f756e742070726f7669646564206f6620612064796e616d69632d72617465207061796d656e742073747265616d20746f207468652073616d6520616d6f756e74206173206265666f7265385261746543616e7442655a65726f000704bd024572726f72207468726f776e207768656e20747279696e6720746f206372656174652061206e65772066697865642d72617465207061796d656e742073747265616d207769746820726174652030206f7220757064617465207468652072617465206f6620616e206578697374696e67206f6e6520746f2030202873686f756c64207573652072656d6f76655f66697865645f726174655f7061796d656e745f73747265616d20696e73746561642960416d6f756e7450726f766964656443616e7442655a65726f00080425034572726f72207468726f776e207768656e20747279696e6720746f206372656174652061206e65772064796e616d69632d72617465207061796d656e742073747265616d207769746820616d6f756e742070726f76696465642030206f72207570646174652074686520616d6f756e742070726f7669646564206f6620616e206578697374696e67206f6e6520746f2030202873686f756c64207573652072656d6f76655f64796e616d69635f726174655f7061796d656e745f73747265616d20696e737465616429904c61737443686172676564477265617465725468616e4c61737443686172676561626c6500090425024572726f72207468726f776e207768656e20746865207469636b206e756d626572206f66207768656e20746865207061796d656e742073747265616d20776173206c61737420636861726765642069732067726561746572207468616e20746865207469636b206e756d626572206f6620746865206c6173742063686172676561626c65207469636b80496e76616c69644c61737443686172676561626c65426c6f636b4e756d626572000a04bd024572726f72207468726f776e207768656e20746865206e6577206c6173742063686172676561626c65207469636b206e756d626572207468617420697320747279696e6720746f206265207365742069732067726561746572207468616e207468652063757272656e74207469636b206e756d626572206f7220736d616c6c6572207468616e207468652070726576696f7573206c6173742063686172676561626c65207469636b206e756d6265727c496e76616c69644c61737443686172676561626c655072696365496e646578000b04bd024572726f72207468726f776e207768656e20746865206e6577206c6173742063686172676561626c6520707269636520696e646578207468617420697320747279696e6720746f206265207365742069732067726561746572207468616e207468652063757272656e7420707269636520696e646578206f7220736d616c6c6572207468616e207468652070726576696f7573206c6173742063686172676561626c6520707269636520696e646578384368617267654f766572666c6f77000c046d014572726f72207468726f776e207768656e206368617267696e672061207061796d656e742073747265616d20776f756c6420726573756c7420696e20616e206f766572666c6f77206f66207468652062616c616e636520747970654055736572576974686f757446756e6473000d047d014572726f72207468726f776e207768656e20747279696e6720746f206f706572617465207768656e20746865205573657220686173206265656e20666c616767656420666f72206e6f7420686176696e6720656e6f7567682066756e64732e70557365724e6f74466c61676765644173576974686f757446756e6473000e04e9014572726f72207468726f776e207768656e20612075736572207468617420686173206e6f74206265656e20666c616767656420617320776974686f75742066756e647320747269657320746f20757365207468652065787472696e73696320746f2070617920697473206f75747374616e64696e6720646562745c436f6f6c646f776e506572696f644e6f74506173736564000f04b5014572726f72207468726f776e207768656e2061207573657220747269657320746f20636c6561722074686520666c6167206f66206265696e6720776974686f75742066756e6473206265666f72652074686520636f6f6c646f776e20706572696f642068617320706173736564044901546865206572726f727320746861742063616e206265207468726f776e20627920746869732070616c6c657420746f20696e666f726d2075736572732061626f757420776861742077656e742077726f6e67b1060c4870616c6c65745f6275636b65745f6e6674731870616c6c6574144572726f72040454000110484275636b657449734e6f74507269766174650000048d014275636b6574206973206e6f7420707269766174652e2043616c6c20607570646174655f6275636b65745f70726976616379602066726f6d207468652066696c652073797374656d2070616c6c657420746f206d616b6520697420707269766174652e384e6f744275636b65744f776e65720001049c4163636f756e74206973206e6f7420746865206f776e6572206f6620746865206275636b65742e644e6f436f72726573706f6e64696e67436f6c6c656374696f6e000204dd014e6f20636f6c6c656374696f6e20636f72726573706f6e64696e6720746f20746865206275636b65742e2043616c6c20607570646174655f6275636b65745f70726976616379602066726f6d207468652066696c652073797374656d2070616c6c657420746f206d616b6520697420707269766174652e60436f6e766572744279746573546f426f756e6465645665630003049c4661696c656420746f20636f6e7665727420627974657320746f2060426f756e64656456656360048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb5060c2c70616c6c65745f6e66747314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001801146f776e65720001244163636f756e7449640001346f776e65725f6465706f7369741801384465706f73697442616c616e63650001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001306974656d5f636f6e6669677310010c7533320001286174747269627574657310010c7533320000b9060000040c00101000bd0600000408001000c10600000408100000c5060c2c70616c6c65745f6e66747314747970657320426974466c61677304045401c906000400080138436f6c6c656374696f6e526f6c650000c9060c2c70616c6c65745f6e66747314747970657338436f6c6c656374696f6e526f6c6500010c184973737565720001001c467265657a65720002001441646d696e00040000cd060c2c70616c6c65745f6e6674731474797065732c4974656d44657461696c730c244163636f756e74496401001c4465706f73697401d10624417070726f76616c7301d506000c01146f776e65720001244163636f756e744964000124617070726f76616c73d5060124417070726f76616c7300011c6465706f736974d106011c4465706f7369740000d1060c2c70616c6c65745f6e6674731474797065732c4974656d4465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e740001244163636f756e744964000118616d6f756e741801384465706f73697442616c616e63650000d5060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01000456010d02045300000400d906013842547265654d61703c4b2c20563e0000d906042042547265654d617008044b01000456010d02000400dd06000000dd06000002e10600e10600000408000d0200e5060c2c70616c6c65745f6e66747314747970657348436f6c6c656374696f6e4d65746164617461081c4465706f73697401182c537472696e674c696d6974000008011c6465706f73697418011c4465706f736974000110646174617502016c426f756e6465645665633c75382c20537472696e674c696d69743e0000e9060c2c70616c6c65745f6e667473147479706573304974656d4d65746164617461081c4465706f73697401ed062c537472696e674c696d6974000008011c6465706f736974ed06011c4465706f736974000110646174617502016c426f756e6465645665633c75382c20537472696e674c696d69743e0000ed060c2c70616c6c65745f6e6674731474797065734c4974656d4d657461646174614465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e749c01444f7074696f6e3c4163636f756e7449643e000118616d6f756e741801384465706f73697442616c616e63650000f10600000410100d0281027d0200f506000004087502f90600f9060c2c70616c6c65745f6e667473147479706573404174747269627574654465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e749c01444f7074696f6e3c4163636f756e7449643e000118616d6f756e741801384465706f73697442616c616e63650000fd0600000408189c0001070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401000453000004000507012c42547265655365743c543e00000507042042547265655365740404540100000400a400000009070c2c70616c6c65745f6e6674731474797065732c50656e64696e67537761701030436f6c6c656374696f6e49640110184974656d49640110584974656d507269636557697468446972656374696f6e01890220446561646c696e65011000100148646573697265645f636f6c6c656374696f6e100130436f6c6c656374696f6e4964000130646573697265645f6974656d0d0201384f7074696f6e3c4974656d49643e0001147072696365850201784f7074696f6e3c4974656d507269636557697468446972656374696f6e3e000120646561646c696e65100120446561646c696e6500000d070c2c70616c6c65745f6e66747314747970657320426974466c61677304045401110700040030013450616c6c657446656174757265000011070c2c70616c6c65745f6e6674731474797065733450616c6c6574466561747572650001101c54726164696e67000100284174747269627574657300020024417070726f76616c730004001453776170730008000015070c2c70616c6c65745f6e6674731870616c6c6574144572726f720804540004490001b4304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e3c417070726f76616c45787069726564000304390154686520617070726f76616c20686164206120646561646c696e65207468617420657870697265642c20736f2074686520617070726f76616c2069736e27742076616c696420616e796d6f72652e2857726f6e674f776e6572000404e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730005041501546865207769746e657373206461746120676976656e20646f6573206e6f74206d61746368207468652063757272656e74207374617465206f662074686520636861696e2e44436f6c6c656374696f6e4964496e5573650006047c436f6c6c656374696f6e20494420697320616c72656164792074616b656e2e504974656d734e6f6e5472616e7366657261626c65000704c84974656d732077697468696e207468617420636f6c6c656374696f6e20617265206e6f6e2d7472616e7366657261626c652e2c4e6f7444656c65676174650008049c5468652070726f7669646564206163636f756e74206973206e6f7420612064656c65676174652e3457726f6e6744656c6567617465000904f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000b041901546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e65727368697020616363657074616e6365206f662074686520636f6c6c656374696f6e2e284974656d4c6f636b6564000c0498546865206974656d206973206c6f636b656420286e6f6e2d7472616e7366657261626c65292e504c6f636b65644974656d41747472696275746573000d04744974656d2773206174747269627574657320617265206c6f636b65642e684c6f636b6564436f6c6c656374696f6e41747472696275746573000e048c436f6c6c656374696f6e2773206174747269627574657320617265206c6f636b65642e484c6f636b65644974656d4d65746164617461000f04684974656d2773206d65746164617461206973206c6f636b65642e604c6f636b6564436f6c6c656374696f6e4d6574616461746100100480436f6c6c656374696f6e2773206d65746164617461206973206c6f636b65642e404d6178537570706c79526561636865640011046c416c6c206974656d732068617665206265656e206d696e7465642e3c4d6178537570706c794c6f636b6564001204b8546865206d617820737570706c79206973206c6f636b656420616e642063616e2774206265206368616e6765642e444d6178537570706c79546f6f536d616c6c00130449015468652070726f7669646564206d617820737570706c79206973206c657373207468616e20746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e2c556e6b6e6f776e4974656d0014047454686520676976656e206974656d20494420697320756e6b6e6f776e2e2c556e6b6e6f776e537761700015044c5377617020646f65736e27742065786973742e404d657461646174614e6f74466f756e640016048c54686520676976656e206974656d20686173206e6f206d65746164617461207365742e444174747269627574654e6f74466f756e64001704985468652070726f7669646564206174747269627574652063616e277420626520666f756e642e284e6f74466f7253616c65001804544974656d206973206e6f7420666f722073616c652e24426964546f6f4c6f77001904705468652070726f76696465642062696420697320746f6f206c6f772e5052656163686564417070726f76616c4c696d6974001a04a0546865206974656d2068617320726561636865642069747320617070726f76616c206c696d69742e3c446561646c696e6545787069726564001b048454686520646561646c696e652068617320616c726561647920657870697265642e3457726f6e674475726174696f6e001c043101546865206475726174696f6e2070726f76696465642073686f756c64206265206c657373207468616e206f7220657175616c20746f20604d6178446561646c696e654475726174696f6e602e384d6574686f6444697361626c6564001d04a8546865206d6574686f642069732064697361626c65642062792073797374656d2073657474696e67732e3057726f6e6753657474696e67001e04885468652070726f76696465642073657474696e672063616e2774206265207365742e58496e636f6e73697374656e744974656d436f6e666967001f0415014974656d277320636f6e66696720616c72656164792065786973747320616e642073686f756c6420626520657175616c20746f207468652070726f7669646564206f6e652e204e6f436f6e666967002004c8436f6e66696720666f72206120636f6c6c656374696f6e206f7220616e206974656d2063616e277420626520666f756e642e3c526f6c65734e6f74436c656172656400210470536f6d6520726f6c65732077657265206e6f7420636c65617265642e384d696e744e6f7453746172746564002204644d696e7420686173206e6f742073746172746564207965742e244d696e74456e6465640023045c4d696e742068617320616c726561647920656e6465642e38416c7265616479436c61696d6564002404c05468652070726f7669646564204974656d2077617320616c7265616479207573656420666f7220636c61696d696e672e34496e636f7272656374446174610025047c5468652070726f7669646564206461746120697320696e636f72726563742e2c57726f6e674f726967696e002604ac5468652065787472696e736963207761732073656e74206279207468652077726f6e67206f726967696e2e3857726f6e675369676e6174757265002704905468652070726f7669646564207369676e617475726520697320696e636f72726563742e44496e636f72726563744d65746164617461002804a05468652070726f7669646564206d65746164617461206d6967687420626520746f6f206c6f6e672e644d6178417474726962757465734c696d6974526561636865640029049c43616e277420736574206d6f7265206174747269627574657320706572206f6e652063616c6c2e3857726f6e674e616d657370616365002a04d05468652070726f7669646564206e616d6573706163652069736e277420737570706f7274656420696e20746869732063616c6c2e48436f6c6c656374696f6e4e6f74456d707479002b048c43616e27742064656c657465206e6f6e2d656d70747920636f6c6c656374696f6e732e3c5769746e6573735265717569726564002c0490546865207769746e65737320646174612073686f756c642062652070726f76696465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1907102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301dd031043616c6c01f503245369676e6174757265012905144578747261011d07000400380000001d07000004242107250729072d07310739073d074107450700210710306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000250710306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000290710306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e040454000000002d0710306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000310710306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004003507010c45726100003507102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000390710306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400cc0120543a3a4e6f6e636500003d0710306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000004107086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400dc013042616c616e63654f663c543e0000450708a463756d756c75735f7072696d6974697665735f73746f726167655f7765696768745f7265636c61696d5053746f726167655765696768745265636c61696d040454000000004907084c73746f726167655f6875625f72756e74696d651c52756e74696d65000000005c1853797374656d011853797374656d481c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e40496e686572656e74734170706c696564010020040004a4205768657468657220616c6c20696e686572656e74732068617665206265656e206170706c6965642e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510348000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510380400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401003c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023499020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000a10204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100200400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100200400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500009502040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a6564557067726164650000a902040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e01ad0201581830426c6f636b57656967687473b90289010700f2052a01000b00204aa9d101020040010265cd1d00010bc0560def45010200e000010b0098f73e5d010200f0000100000265cd1d00010bc0de5f59ba0102003001010b00204aa9d1010200400101070088526a74020050000265cd1d0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468c9023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101000100000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874d1024040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ed50219044c73746f726167652d6875622d72756e74696d654c73746f726167652d6875622d72756e74696d6501000000010000000000000044d7bdd8a272ca0d6501000000dd718d5cc53262d401000000df6acb689907609b0500000037e397fc7c91f5e40200000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000f3ff14d5ab52705903000000ea93e3f16f3d696202000000fbc577b9d747efd601000000b9e7717ace5b45cd010000001078d7ac24a07b0e010000000be7208954c7c6c901000000966604ffe78eb0920100000001000000010484204765742074686520636861696e277320696e2d636f64652076657273696f6e2e2853533538507265666978e502082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01e902003c50617261636861696e53797374656d013c50617261636861696e53797374656d6044556e696e636c756465645365676d656e740100ed020400184901204c617465737420696e636c7564656420626c6f636b2064657363656e64616e7473207468652072756e74696d652061636365707465642e20496e206f7468657220776f7264732c20746865736520617265610120616e636573746f7273206f66207468652063757272656e746c7920657865637574696e6720626c6f636b2077686963682068617665206e6f74206265656e20696e636c7564656420696e20746865206f627365727665644c2072656c61792d636861696e2073746174652e00750120546865207365676d656e74206c656e677468206973206c696d69746564206279207468652063617061636974792072657475726e65642066726f6d20746865205b60436f6e73656e737573486f6f6b605d20636f6e666967757265643c20696e207468652070616c6c65742e6c41676772656761746564556e696e636c756465645365676d656e740000150304000c69012053746f72616765206669656c642074686174206b6565707320747261636b206f662062616e64776964746820757365642062792074686520756e696e636c75646564207365676d656e7420616c6f6e672077697468207468652d01206c61746573742048524d502077617465726d61726b2e205573656420666f72206c696d6974696e672074686520616363657074616e6365206f66206e657720626c6f636b73207769746890207265737065637420746f2072656c617920636861696e20636f6e73747261696e74732e5450656e64696e6756616c69646174696f6e436f6465010038040018590120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f20626524206170706c6965642e003d0120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f7665727772697465207468657101205b603a636f6465605d5b73705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d2077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f636573730901207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e444e657756616c69646174696f6e436f64650000380400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000190304000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f6465010020040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d62657201001010000000000c1d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e00882054686973206973207570646174656420696e20606f6e5f66696e616c697a65602e60557067726164655265737472696374696f6e5369676e616c0100210304001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3855706772616465476f416865616401000d03040014dc204f7074696f6e616c207570677261646520676f2d6168656164207369676e616c2066726f6d207468652072656c61792d636861696e2e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f6600002903040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000310304001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e000045030400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d71634865616401004d0380000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301005103040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d6573736167657301005d0304000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100290204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d6573736167657301002902040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e5c55707761726444656c6976657279466565466163746f720100650340000064a7b3b6e00d000000000000000004e42054686520666163746f7220746f206d756c7469706c792074686520626173652064656c69766572792066656520627920666f7220554d502e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010010100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000280400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000280400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e60437573746f6d56616c69646174696f6e486561644461746100003804000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00110120536565206050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f646174616020666f72206d6f726520696e666f726d6174696f6e2e016903017c042853656c66506172614964e90110e803000004b82052657475726e73207468652070617261636861696e204944207765206172652072756e6e696e6720776974682e018d03012454696d657374616d70012454696d657374616d70080c4e6f7701003020000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010020040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e0191030004344d696e696d756d506572696f643020b80b000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e00023450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100e901106400000000019503000000032042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402009903040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200a903040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c64730101040200b5030400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a65730101040200cd030400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e01d903018410484578697374656e7469616c4465706f736974184000ca9a3b00000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e284d6178467265657a657310100000000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01e9030a485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100650340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100ed0304000000018c04604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000b105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01f1030190000145050f28417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e000000001444436f6c6c61746f7253656c656374696f6e0144436f6c6c61746f7253656c656374696f6e1434496e76756c6e657261626c65730100490504000411012054686520696e76756c6e657261626c652c207065726d697373696f6e656420636f6c6c61746f72732e2054686973206c697374206d75737420626520736f727465642e3443616e6469646174654c69737401004d050400146901205468652028636f6d6d756e6974792c206c696d697465642920636f6c6c6174696f6e2063616e646964617465732e206043616e646964617465736020616e642060496e76756c6e657261626c6573602073686f756c6420626550206d757475616c6c79206578636c75736976652e0075012054686973206c69737420697320736f7274656420696e20617363656e64696e67206f72646572206279206465706f73697420616e64207768656e20746865206465706f736974732061726520657175616c2c20746865206c65617374a020726563656e746c79207570646174656420697320636f6e7369646572656420677265617465722e444c617374417574686f726564426c6f636b01010405001010000000000484204c61737420626c6f636b20617574686f72656420627920636f6c6c61746f722e444465736972656443616e6469646174657301001010000000000c782044657369726564206e756d626572206f662063616e646964617465732e00750120546869732073686f756c6420696465616c6c7920616c77617973206265206c657373207468616e205b60436f6e6669673a3a4d617843616e64696461746573605d20666f72207765696768747320746f20626520636f72726563742e3443616e646964616379426f6e6401001840000000000000000000000000000000000cb820466978656420616d6f756e7420746f206465706f73697420746f206265636f6d65206120636f6c6c61746f722e004101205768656e206120636f6c6c61746f722063616c6c7320606c656176655f696e74656e7460207468657920696d6d6564696174656c79207265636569766520746865206465706f736974206261636b2e01f90301a000015905151c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100a40400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010020040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b65797301005d050400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010079020400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050001040400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405650500040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e01fd0301a800016d05161041757261011041757261082c417574686f726974696573010071050400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010079052000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000171c41757261457874011c41757261457874082c417574686f72697469657301007105040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c5d0120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c0d0120616c77617973206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e20536c6f74496e666f00007d0504000cd82043757272656e7420736c6f742070616972656420776974682061206e756d626572206f6620617574686f72656420626c6f636b732e00982055706461746564206f6e206561636820626c6f636b20696e697469616c697a6174696f6e2e00000000182458636d705175657565012458636d7051756575651c50496e626f756e6458636d7053757370656e646564010081050400200d01205468652073757370656e64656420696e626f756e642058434d50206368616e6e656c732e20416c6c206f746865727320617265206e6f742073757370656e6465642e00710120546869732069732061206053746f7261676556616c75656020696e7374656164206f662061206053746f726167654d6170602073696e636520776520657870656374206d756c7469706c652072656164732070657220626c6f636b690120746f20646966666572656e74206b65797320776974682061206f6e652062797465207061796c6f61642e205468652061636365737320746f2060426f756e6465644254726565536574602077696c6c2062652063616368656415012077697468696e2074686520626c6f636b20616e64207468657265666f7265206f6e6c7920696e636c75646564206f6e636520696e207468652070726f6f662073697a652e006501204e4f54453a2054686520506f562062656e63686d61726b696e672063616e6e6f74206b6e6f77207468697320616e642077696c6c206f7665722d657374696d6174652c20627574207468652061637475616c2070726f6f66442077696c6c20626520736d616c6c65722e484f7574626f756e6458636d7053746174757301008d050400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205990538040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402e90138040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e66696701009d05302000000030000000080000000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e38517565756553757370656e64656401002004000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e4444656c6976657279466565466163746f7201010405e901650340000064a7b3b6e00d000000000000000004c42054686520666163746f7220746f206d756c7469706c792074686520626173652064656c6976657279206665652062792e010d0401ac044c4d6178496e626f756e6453757370656e6465641010e803000014490120546865206d6178696d756d206e756d626572206f6620696e626f756e642058434d50206368616e6e656c7320746861742063616e2062652073757370656e6465642073696d756c74616e656f75736c792e005d0120416e792066757274686572206368616e6e656c2073757370656e73696f6e732077696c6c206661696c20616e64206d65737361676573206d6179206765742064726f7070656420776974686f757420667572746865724501206e6f746963652e2043686f6f73696e67206120686967682076616c756520283130303029206973206f6b61793b207468652074726164652d6f666620746861742069732064657363726962656420696ed8205b60496e626f756e6458636d7053757370656e646564605d207374696c6c206170706c6965732061742074686174207363616c652e01a1051e2c506f6c6b61646f7458636d012c506f6c6b61646f7458636d30305175657279436f756e746572010030200000000000000000048820546865206c617465737420617661696c61626c6520717565727920696e6465782e1c517565726965730001040230a5050400045420546865206f6e676f696e6720717565726965732e28417373657454726170730101040634101000000000106820546865206578697374696e672061737365742074726170732e006101204b65792069732074686520626c616b6532203235362068617368206f6620286f726967696e2c2076657273696f6e65642060417373657473602920706169722e2056616c756520697320746865206e756d626572206f661d012074696d65732074686973207061697220686173206265656e20747261707065642028757375616c6c79206a75737420312069662069742065786973747320617420616c6c292e385361666558636d56657273696f6e00001004000861012044656661756c742076657273696f6e20746f20656e636f64652058434d207768656e206c61746573742076657273696f6e206f662064657374696e6174696f6e20697320756e6b6e6f776e2e20496620604e6f6e65602c3d01207468656e207468652064657374696e6174696f6e732077686f73652058434d2076657273696f6e20697320756e6b6e6f776e2061726520636f6e7369646572656420756e726561636861626c652e40537570706f7274656456657273696f6e0001080502b90510040004f020546865204c61746573742076657273696f6e732074686174207765206b6e6f7720766172696f7573206c6f636174696f6e7320737570706f72742e4056657273696f6e4e6f746966696572730001080502b90530040004050120416c6c206c6f636174696f6e7320746861742077652068617665207265717565737465642076657273696f6e206e6f74696669636174696f6e732066726f6d2e5056657273696f6e4e6f74696679546172676574730001080502b905bd0504000871012054686520746172676574206c6f636174696f6e73207468617420617265207375627363726962656420746f206f75722076657273696f6e206368616e6765732c2061732077656c6c20617320746865206d6f737420726563656e7494206f66206f75722076657273696f6e7320776520696e666f726d6564207468656d206f662e5456657273696f6e446973636f7665727951756575650100c10504000c65012044657374696e6174696f6e732077686f7365206c61746573742058434d2076657273696f6e20776520776f756c64206c696b6520746f206b6e6f772e204475706c696361746573206e6f7420616c6c6f7765642c20616e6471012074686520607533326020636f756e74657220697320746865206e756d626572206f662074696d6573207468617420612073656e6420746f207468652064657374696e6174696f6e20686173206265656e20617474656d707465642c8c20776869636820697320757365642061732061207072696f726974697a6174696f6e2e4043757272656e744d6967726174696f6e0000cd050400049c205468652063757272656e74206d6967726174696f6e27732073746167652c20696620616e792e5452656d6f74654c6f636b656446756e6769626c657300010c050202d505dd05040004f02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e20612072656d6f746520636861696e2e3c4c6f636b656446756e6769626c65730001040200ed05040004e02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e207468697320636861696e2e5458636d457865637574696f6e53757370656e646564010020040004b420476c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e01110401b00001f9051f2843756d756c757358636d0001a50401dd01000020304d657373616765517565756501304d65737361676551756575650c30426f6f6b5374617465466f7201010405e501fd0574000000000000000000000000000000000000000000000000000000000004cc2054686520696e646578206f662074686520666972737420616e64206c61737420286e6f6e2d656d707479292070616765732e2c53657276696365486561640000e501040004bc20546865206f726967696e2061742077686963682077652073686f756c6420626567696e20736572766963696e672e145061676573000108050509060d060400048820546865206d6170206f66207061676520696e646963657320746f2070616765732e01a90401e1010c204865617053697a65101000000100143d01205468652073697a65206f662074686520706167653b207468697320696d706c69657320746865206d6178696d756d206d6573736167652073697a652077686963682063616e2062652073656e742e005901204120676f6f642076616c756520646570656e6473206f6e20746865206578706563746564206d6573736167652073697a65732c20746865697220776569676874732c207468652077656967687420746861742069735d0120617661696c61626c6520666f722070726f63657373696e67207468656d20616e6420746865206d6178696d616c206e6565646564206d6573736167652073697a652e20546865206d6178696d616c206d65737361676511012073697a6520697320736c696768746c79206c6f776572207468616e207468697320617320646566696e6564206279205b604d61784d6573736167654c656e4f66605d2e204d61785374616c651010080000000c5d0120546865206d6178696d756d206e756d626572206f66207374616c652070616765732028692e652e206f66206f766572776569676874206d657373616765732920616c6c6f776564206265666f72652063756c6c696e6751012063616e2068617070656e2e204f6e636520746865726520617265206d6f7265207374616c65207061676573207468616e20746869732c207468656e20686973746f726963616c207061676573206d6179206265fc2064726f707065642c206576656e206966207468657920636f6e7461696e20756e70726f636573736564206f766572776569676874206d657373616765732e3453657276696365576569676874c5022c0107005840fba2020070001441012054686520616d6f756e74206f66207765696768742028696620616e79292077686963682073686f756c642062652070726f766964656420746f20746865206d65737361676520717565756520666f726820736572766963696e6720656e717565756564206974656d732e00fc2054686973206d6179206265206c65676974696d6174656c7920604e6f6e656020696e207468652063617365207468617420796f752077696c6c2063616c6ca82060536572766963655175657565733a3a736572766963655f71756575657360206d616e75616c6c792e011506212450726f766964657273012450726f76696465727330385369676e5570526571756573747300010402001906040028ed0120546865206d617070696e672066726f6d20616e204163636f756e74496420746861742072657175657374656420746f207369676e20757020746f2061207475706c65206f6620746865206d6574616461746120776974682074797065206f662074686520726571756573742c20616e642074686520626c6f636b88206e756d626572207768656e20746865207265717565737420776173206d6164652e00d1012054686973206973207573656420666f72207468652074776f2d737465702070726f63657373206f66207265676973746572696e673a207768656e2061207573657220726571756573747320746f20726567697374657220617320612053502028656974686572204d5350206f7220425350292cb10120746861742072657175657374207769746820746865206d6574616461746120616e6420746865206465706f7369742068656c642069732073746f72656420686572652e205768656e20746865207573657220636f6e6669726d7320746865207369676e2075702c20746865250120726571756573742069732072656d6f7665642066726f6d20746869732073746f7261676520616e64207468652075736572206973207265676973746572656420617320612053502e007020546869732073746f72616765206973207570646174656420696e3aad02202d205b726571756573745f6d73705f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a726571756573745f6d73705f7369676e5f75702920616e64205b726571756573745f6273705f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a726571756573745f6273705f7369676e5f7570292c207768696368206164642061206e657720656e74727920746f20746865206d61702e9102202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f75702920616e64205b63616e63656c5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a63616e63656c5f7369676e5f7570292c2077686963682072656d6f766520616e206578697374696e6720656e7472792066726f6d20746865206d61702e804163636f756e744964546f4d61696e53746f7261676550726f7669646572496400010402003404001ce820546865206d617070696e672066726f6d20616e204163636f756e74496420746f2061204d61696e53746f7261676550726f766964657249642e007d012054686973206973207573656420746f206765742061204d61696e2053746f726167652050726f7669646572277320756e69717565206964656e746966696572206e656564656420746f2061636365737320697473206d657461646174612e007020546869732073746f72616765206973207570646174656420696e3a5102202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c20776869636820616464732061206e657720656e74727920746f20746865206d617020696620746865206163636f756e7420746f20636f6e6669726d2069732061204d61696e2053746f726167652050726f76696465722ea901202d205b6d73705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6d73705f7369676e5f6f6666292c2077686963682072656d6f7665732074686520636f72726573706f6e64696e6720656e7472792066726f6d20746865206d61702e504d61696e53746f7261676550726f766964657273000104023425060400280d0120546865206d617070696e672066726f6d2061204d61696e53746f7261676550726f7669646572496420746f2061204d61696e53746f7261676550726f76696465722e00e02054686973206973207573656420746f206765742061204d61696e2053746f726167652050726f76696465722773206d657461646174612ebd012049742072657475726e7320604e6f6e656020696620746865204d61696e2053746f726167652050726f766964657220494420646f6573206e6f7420636f72726573706f6e6420746f20616e792072656769737465726564204d61696e2053746f726167652050726f76696465722e007020546869732073746f72616765206973207570646174656420696e3a5102202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c20776869636820616464732061206e657720656e74727920746f20746865206d617020696620746865206163636f756e7420746f20636f6e6669726d2069732061204d61696e2053746f726167652050726f76696465722ea901202d205b6d73705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6d73705f7369676e5f6f6666292c2077686963682072656d6f7665732074686520636f72726573706f6e64696e6720656e7472792066726f6d20746865206d61702e8901202d205b6368616e67655f63617061636974795d2863726174653a3a646973706174636861626c65733a3a6368616e67655f6361706163697479292c207768696368206368616e6765732074686520656e747279277320606361706163697479602e5502202d205b6164645f76616c75655f70726f705d2863726174653a3a646973706174636861626c65733a3a6164645f76616c75655f70726f70292c20776869636820617070656e64732061206e65772076616c75652070726f706f736974696f6e20746f2074686520656e7472792773206578697374696e67206076616c75655f70726f706020626f756e64656420766563746f722e1c4275636b65747300010402342d06040024dc20546865206d617070696e672066726f6d2061204275636b6574496420746f2074686174206275636b65742773206d657461646174612e0031012054686973206973207573656420746f206765742061206275636b65742773206d657461646174612c207375636820617320726f6f742c20757365722049442c20616e64204d53502049442e45012049742072657475726e7320604e6f6e656020696620746865204275636b657420494420646f6573206e6f7420636f72726573706f6e6420746f20616e792072656769737465726564206275636b65742e007020546869732073746f72616765206973207570646174656420696e3a9501202d205b6164645f6275636b65745d287368705f7472616974733a3a4d757461746550726f766964657273496e746572666163653a3a6164645f6275636b6574292c20776869636820616464732061206e657720656e74727920746f20746865206d61702e0502202d205b6368616e67655f726f6f745f6275636b65745d287368705f7472616974733a3a4d757461746550726f766964657273496e746572666163653a3a6368616e67655f726f6f745f6275636b6574292c207768696368206368616e6765732074686520636f72726573706f6e64696e67206275636b6574277320726f6f742e1d02202d205b72656d6f76655f726f6f745f6275636b65745d287368705f7472616974733a3a4d757461746550726f766964657273496e746572666163653a3a72656d6f76655f726f6f745f6275636b6574292c2077686963682072656d6f7665732074686520656e747279206f662074686520636f72726573706f6e64696e67206275636b65742e7c4d61696e53746f7261676550726f7669646572496473546f4275636b6574730001040234350604001c0d0120546865206d617070696e672066726f6d2061204d61696e53746f7261676550726f7669646572496420746f206120766563746f72206f66204275636b65744964732e00b1012054686973206973207573656420746f20656666696369656e746c7920726574726965766520746865206c697374206f66206275636b65747320746861742061204d61696e2053746f726167652050726f76696465722069732063757272656e746c792073746f72696e672e007020546869732073746f72616765206973207570646174656420696e3a0501202d205b6164645f6275636b65745d287368705f7472616974733a3a4d757461746550726f766964657273496e746572666163653a3a6164645f6275636b6574294501202d205b72656d6f76655f726f6f745f6275636b65745d287368705f7472616974733a3a4d757461746550726f766964657273496e746572666163653a3a72656d6f76655f726f6f745f6275636b657429884163636f756e744964546f4261636b757053746f7261676550726f76696465724964000104020034040020f020546865206d617070696e672066726f6d20616e204163636f756e74496420746f2061204261636b757053746f7261676550726f766964657249642e0085012054686973206973207573656420746f206765742061204261636b75702053746f726167652050726f7669646572277320756e69717565206964656e746966696572206e656564656420746f2061636365737320697473206d657461646174612e007020546869732073746f72616765206973207570646174656420696e3a005902202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c20776869636820616464732061206e657720656e74727920746f20746865206d617020696620746865206163636f756e7420746f20636f6e6669726d2069732061204261636b75702053746f726167652050726f76696465722ea901202d205b6273705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6273705f7369676e5f6f6666292c2077686963682072656d6f7665732074686520636f72726573706f6e64696e6720656e7472792066726f6d20746865206d61702e584261636b757053746f7261676550726f766964657273000104023421060400241d0120546865206d617070696e672066726f6d2061204261636b757053746f7261676550726f7669646572496420746f2061204261636b757053746f7261676550726f76696465722e00e82054686973206973207573656420746f206765742061204261636b75702053746f726167652050726f76696465722773206d657461646174612ecd012049742072657475726e7320604e6f6e656020696620746865204261636b75702053746f726167652050726f766964657220494420646f6573206e6f7420636f72726573706f6e6420746f20616e792072656769737465726564204261636b75702053746f726167652050726f76696465722e007020546869732073746f72616765206973207570646174656420696e3a5902202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c20776869636820616464732061206e657720656e74727920746f20746865206d617020696620746865206163636f756e7420746f20636f6e6669726d2069732061204261636b75702053746f726167652050726f76696465722ea901202d205b6273705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6273705f7369676e5f6f6666292c2077686963682072656d6f7665732074686520636f72726573706f6e64696e6720656e7472792066726f6d20746865206d61702e8901202d205b6368616e67655f63617061636974795d2863726174653a3a646973706174636861626c65733a3a6368616e67655f6361706163697479292c207768696368206368616e6765732074686520656e747279277320606361706163697479602e204d7370436f756e7401001010000000001c4d012054686520616d6f756e74206f66204d61696e2053746f726167652050726f7669646572732074686174206172652063757272656e746c79207265676973746572656420696e207468652072756e74696d652e0019012054686973206973207573656420746f206b65657020747261636b206f662074686520746f74616c20616d6f756e74206f66204d53507320696e207468652073797374656d2e007020546869732073746f72616765206973207570646174656420696e3a4502202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c2077686963682061646473206f6e6520746f20746869732073746f7261676520696620746865206163636f756e7420746f20636f6e6669726d2069732061204d61696e2053746f726167652050726f76696465722e7501202d205b6d73705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6d73705f7369676e5f6f6666292c20776869636820737562747261637473206f6e652066726f6d20746869732073746f726167652e20427370436f756e7401001010000000001c55012054686520616d6f756e74206f66204261636b75702053746f726167652050726f7669646572732074686174206172652063757272656e746c79207265676973746572656420696e207468652072756e74696d652e0019012054686973206973207573656420746f206b65657020747261636b206f662074686520746f74616c20616d6f756e74206f66204253507320696e207468652073797374656d2e007020546869732073746f72616765206973207570646174656420696e3a4d02202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c2077686963682061646473206f6e6520746f20746869732073746f7261676520696620746865206163636f756e7420746f20636f6e6669726d2069732061204261636b75702053746f726167652050726f76696465722e7501202d205b6273705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6273705f7369676e5f6f6666292c20776869636820737562747261637473206f6e652066726f6d20746869732073746f726167652e44546f74616c42737073436170616369747901003020000000000000000020d02054686520746f74616c20616d6f756e74206f662073746f7261676520636170616369747920616c6c204253507320686176652e00c9012054686973206973207573656420746f206b65657020747261636b206f662074686520746f74616c20616d6f756e74206f662073746f7261676520636170616369747920616c6c2042535073206861766520696e207468652073797374656d2c20776869636820697320616c736f207468658d0120746f74616c20616d6f756e74206f662073746f7261676520636170616369747920746861742063616e206265207573656420627920757365727320696620776520666163746f7220696e20746865207265706c69636174696f6e20666163746f722e007020546869732073746f72616765206973207570646174656420696e3afd02202d205b636f6e6669726d5f7369676e5f75705d2863726174653a3a646973706174636861626c65733a3a636f6e6669726d5f7369676e5f7570292c207768696368206164647320746865206361706163697479206f662074686520726567697374657265642053746f726167652050726f766964657220746f20746869732073746f7261676520696620746865206163636f756e7420746f20636f6e6669726d2069732061204261636b75702053746f726167652050726f76696465722e4502202d205b6273705f7369676e5f6f66665d2863726174653a3a646973706174636861626c65733a3a6273705f7369676e5f6f6666292c2077686963682073756274726163747320746865206361706163697479206f6620746865204261636b75702053746f726167652050726f766964657220746f207369676e206f66662066726f6d20746869732073746f726167652e4055736564427370734361706163697479010030200000000000000000101d012054686520746f74616c20616d6f756e74206f662073746f72616765206361706163697479206f66204253507320746861742069732063757272656e746c7920696e207573652e00e9012054686973206973207573656420746f206b65657020747261636b206f662074686520746f74616c20616d6f756e74206f662073746f7261676520636170616369747920746861742069732063757272656e746c7920696e207573652062792075736572732c2077686963682069732075736566756c20666f720d012073797374656d206d65747269637320616e6420616c736f20746f2063616c63756c617465207468652063757272656e74207072696365206f662073746f726167652e68476c6f62616c4273707352657075746174696f6e576569676874010010100000000004c02054686520746f74616c20676c6f62616c2072657075746174696f6e20776569676874206f6620616c6c20425350732e01ad0401f1014020547265617375727900800000000000000000000000000000000000000000000000000000000000000000106020546865205472656173757279204163636f756e7449642e5820546865206163636f756e7420746f2077686963683adc202d20546865206665657320666f72207375626d697474696e672061206368616c6c656e676520617265207472616e736665727265642e94202d2054686520736c61736865642066756e647320617265207472616e736665727265642e3053704d696e4465706f73697418400040e59c30120000000000000000000004410120546865206d696e696d756d20616d6f756e74207468617420616e206163636f756e742068617320746f206465706f73697420746f206265636f6d6520612073746f726167652070726f76696465722e3453704d696e4361706163697479302002000000000000000481012054686520616d6f756e74207468617420612042535020726563656976657320617320616c6c6f636174696f6e206f662073746f72616765206361706163697479207768656e206974206465706f736974732053704d696e4465706f7369742e384465706f736974506572446174611840020000000000000000000000000000000411032054686520736c6f7065206f662074686520636f6c6c61746572616c2076732073746f726167652063617061636974792063757276652e20496e206f74686572207465726d732c20686f77206d616e7920746f6b656e7320612053746f726167652050726f76696465722073686f756c642061646420617320636f6c6c61746572616c20746f20696e637265617365206974732073746f7261676520636170616369747920696e206f6e6520756e6974206f662053746f7261676544617461556e69742e2c4d617846696c6553697a653020ffffffffffffffff0cbc2054686520657374696d61746564206d6178696d756d2073697a65206f6620616e20756e6b6e6f776e2066696c652e00b9012055736564207072696d6172696c7920746f20736c61736820612053746f726167652050726f7669646572207768656e206974206661696c7320746f2070726f766964652061206368756e6b206f66206461746120666f7220616e20756e6b6e6f776e2066696c652073697a652e4c4d61784d756c74694164647265737353697a65101064000000049020546865206d6178696d756d2073697a65206f662061206d756c7469616464726573732e544d61784d756c746941646472657373416d6f756e74101005000000041d0120546865206d6178696d756d20616d6f756e74206f66206d756c7469616464726573736573207468617420612053746f726167652050726f76696465722063616e20686176652e304d617850726f746f636f6c73101064000000044d0120546865206d6178696d756d206e756d626572206f662070726f746f636f6c7320746865204d53502063616e20737570706f727420286174206c656173742077697468696e207468652072756e74696d65292e284d61784275636b65747310101027000004cc20546865206d6178696d756d20616d6f756e74206f66204275636b65747320746861742061204d53502063616e20686176652e344275636b65744465706f73697418400040e59c30120000000000000000000004f82054686520616d6f756e74207468617420616e206163636f756e742068617320746f206465706f73697420746f206372656174652061206275636b65742e3c4275636b65744e616d654c696d697410106400000004d82054797065207468617420726570726573656e7473207468652062797465206c696d6974206f662061206275636b6574206e616d652e584d6178426c6f636b73466f7252616e646f6d6e6573731010b004000004990120546865206d6178696d756d20616d6f756e74206f6620626c6f636b732061667465722077686963682061207369676e2075702072657175657374206578706972657320736f207468652072616e646f6d6e6573732063616e6e6f742062652063686f73656e7c4d696e426c6f636b734265747765656e43617061636974794368616e67657310100a00000004fc20546865206d696e696d756d20616d6f756e74206f6620626c6f636b73206265747765656e206361706163697479206368616e67657320666f7220612053504444656661756c744d65726b6c65526f6f74348003170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314042501205468652064656661756c742076616c7565206f662074686520726f6f74206f6620746865204d65726b6c652050617472696369612054726965206f66207468652072756e74696d6564536c617368416d6f756e745065724d617846696c6553697a65184000c817a804000000000000000000000004c5012054686520736c61736820666163746f722064656475637465642066726f6d20612053746f726167652050726f76696465722773206465706f73697420666f722065766572792073696e676c652073746f726167652070726f6f662074686579206661696c20746f2070726f766964652e605374617274696e6752657075746174696f6e57656967687410100100000004dc205374617274696e672072657075746174696f6e2077656967687420666f722061206e65776c792072656769737465726564204253502e013906282846696c6553797374656d012846696c6553797374656d443c53746f72616765526571756573747300010402343d060400004853746f72616765526571756573744273707300010802024d0651060400186901204120646f75626c65206d61702066726f6d2073746f72616765207265717565737420746f2042535020604163636f756e7449646073207468617420766f6c756e74656572656420746f2073746f7265207468652066696c652e009d0120416e792042535020756e64657220612073746f7261676520726571756573742070726566697820697320636f6e7369646572656420746f206265206120766f6c756e7465657220616e642063616e2062652072656d6f76656420617420616e792074696d652e8102204f6e6365206120425350207375626d69747320612076616c69642070726f6f6620746f20746865207669612074686520606273705f636f6e6669726d5f73746f72696e67602065787472696e7369632c207468652060636f6e6669726d656460206669656c6420696e205b6053746f7261676552657175657374427370734d65746164617461605d2077696c6c2062652073657420746f206074727565602e00bd01205768656e20612073746f7261676520726571756573742069732065787069726564206f722072656d6f7665642c2074686520636f72726573706f6e64696e672073746f7261676520726571756573742070726566697820696e2074686973206d61702069732072656d6f7665642e684275636b6574735769746853746f72616765526571756573747300010802024d0698040004f420426f6f6b6b656570696e67206f6620746865206275636b65747320636f6e7461696e696e67206f70656e2073746f726167652072657175657374732e6453746f726167655265717565737445787069726174696f6e7301010402105506040004b42041206d6170206f6620626c6f636b7320746f20657870697265642073746f726167652072657175657374732e7846696c6544656c6574696f6e5265717565737445787069726174696f6e7301010402105906040004cc2041206d6170206f6620626c6f636b7320746f20657870697265642066696c652064656c6574696f6e2072657175657374732e704d6f76654275636b65745265717565737445787069726174696f6e7301010402106506040004c42041206d6170206f6620626c6f636b7320746f2065787069726564206d6f7665206275636b65742072657175657374732ea84e657874417661696c61626c6553746f726167655265717565737445787069726174696f6e426c6f636b01001010000000000c5901204120706f696e74657220746f20746865206561726c6965737420617661696c61626c6520626c6f636b20746f20696e736572742061206e65772073746f7261676520726571756573742065787069726174696f6e2e006d0120546869732073686f756c6420616c776179732062652067726561746572206f7220657175616c207468616e2063757272656e7420626c6f636b202b205b60436f6e6669673a3a53746f726167655265717565737454746c605d2ebc4e657874417661696c61626c6546696c6544656c6574696f6e5265717565737445787069726174696f6e426c6f636b01001010000000000c7101204120706f696e74657220746f20746865206561726c6965737420617661696c61626c6520626c6f636b20746f20696e736572742061206e65772066696c652064656c6574696f6e20726571756573742065787069726174696f6e2e009d0120546869732073686f756c6420616c776179732062652067726561746572206f7220657175616c207468616e2063757272656e7420626c6f636b202b205b60436f6e6669673a3a50656e64696e6746696c6544656c6574696f6e5265717565737454746c605d2eb44e657874417661696c61626c654d6f76654275636b65745265717565737445787069726174696f6e426c6f636b01001010000000000c6901204120706f696e74657220746f20746865206561726c6965737420617661696c61626c6520626c6f636b20746f20696e736572742061206e6577206d6f7665206275636b657420726571756573742065787069726174696f6e2e00790120546869732073686f756c6420616c776179732062652067726561746572206f7220657175616c207468616e2063757272656e7420626c6f636b202b205b60436f6e6669673a3a4d6f76654275636b65745265717565737454746c605d2e684e6578745374617274696e67426c6f636b546f436c65616e55700100101000000000141901204120706f696e74657220746f20746865207374617274696e6720626c6f636b20746f20636c65616e20757020657870697265642073746f726167652072657175657374732e006901204966207468697320626c6f636b20697320626568696e64207468652063757272656e7420626c6f636b206e756d6265722c2074686520636c65616e757020616c676f726974686d20696e20606f6e5f69646c65602077696c6c750120617474656d707420746f20616363656c6572617465207468697320626c6f636b20706f696e74657220617320636c6f736520746f206f7220757020746f207468652063757272656e7420626c6f636b206e756d6265722e205468697319012077696c6c20657865637574652070726f7669646564207468617420746865726520697320656e6f7567682072656d61696e696e672077656967687420746f20646f20736f2e6c50656e64696e6746696c6544656c6574696f6e526571756573747301010402006d0604000c802050656e64696e672066696c652064656c6574696f6e2072657175657374732e00f5012041206d617070696e672066726f6d20612075736572206163636f756e7420696420746f2061206c697374206f662070656e64696e672066696c652064656c6574696f6e2072657175657374732c20686f6c64696e672061207475706c65206f66207468652066696c65206b657920616e64206275636b65742069642e6850656e64696e6753746f7053746f72696e67526571756573747300010802024d067106040018902050656e64696e672066696c652073746f702073746f72696e672072657175657374732e001102204120646f75626c65206d617070696e672066726f6d204253502049447320746f2061206c697374206f662066696c65206b6579732070656e64696e672073746f702073746f72696e6720726571756573747320746f2074686520626c6f636b20696e2077686963682074686f73652072657175657374732077657265206f70656e65648420616e64207468652070726f76656e2073697a65206f66207468652066696c652efd012054686520626c6f636b206e756d626572206973207573656420746f2061766f69642042535073206265696e672061626c6520746f2073746f702073746f72696e672066696c657320696d6d6564696174656c7920776869636820776f756c6420616c6c6f77207468656d20746f2061766f6964206368616c6c656e676573d501206f66206d697373696e672066696c65732e205468652073697a6520697320746f2062652061626c6520746f2064656372656173652074686569722075736564206361706163697479207768656e207468657920636f6e6669726d20746f2073746f702073746f72696e67207468652066696c652e6450656e64696e674d6f76654275636b6574526571756573747300010802024d067506040010782050656e64696e67206d6f7665206275636b65742072657175657374732e009501204120646f75626c65206d617070696e672066726f6d204d53502049447320746f2061206c697374206f66206275636b65742049447320776869636820746865792063616e20616363657074206f72206465636c696e6520746f2074616b65206f7665722eb8205468652076616c75652069732074686520757365722077686f2072657175657374656420746865206d6f76652e604461746153657276657273466f724d6f76654275636b657400010802024d0698040004ac204253502064617461207365727665727320666f72206d6f7665206275636b65742072657175657374732e5050656e64696e674275636b657473546f4d6f76650101040234980004090120426f6f6b6b656570696e67206f66206275636b6574732074686174206172652070656e64696e6720746f206265206d6f76656420746f2061206e6577204d53502e445265706c69636174696f6e54617267657401001010000000000cd4204e756d626572206f66204253507320726571756972656420746f2066756c66696c6c20612073746f72616765207265717565737400b501205468697320697320616c736f207573656420617320612064656661756c742076616c756520696620746865204253507320726571756972656420617265206e6f7420737065636966696564207768656e206372656174696e6720612073746f7261676520726571756573742e6c5469636b52616e6765546f4d6178696d756d5468726573686f6c64010010100000000004ed01204e756d626572206f66207469636b7320756e74696c20616c6c204253507320776f756c6420726561636820746865205b60436f6e6669673a3a4d6178696d756d5468726573686f6c64605d20746f20656e73757265207468617420616c6c2042535073206172652061626c6520746f20766f6c756e746565722e01b10401090234604d61784273707350657253746f726167655265717565737410100500000010e8204d6178696d756d206e756d626572206f662053507320284d5350202b20425350732920746861742063616e2073746f726520612066696c652e0055012054686973206973207573656420746f206c696d697420746865206e756d626572206f6620425350732073746f72696e6720612066696c6520616e6420636c61696d696e67207265776172647320666f722069742ead012049662074686973206e756d62657220697320746f6f20686967682c207468656e207468652072657761726420666f722073746f72696e6720612066696c65206d6967687420626520746f2064696c7574656420616e6420706f696e746c65737320746f2073746f72652e784d61784261746368436f6e6669726d53746f72616765526571756573747310100a000000049101204d6178696d756d206261746368206f662073746f7261676520726571756573747320746861742063616e20626520636f6e6669726d6564206174206f6e6365207768656e2063616c6c696e6720606273705f636f6e6669726d5f73746f72696e67602e3c4d617846696c655061746853697a651010000200000488204d6178696d756d20627974652073697a65206f6620612066696c6520706174682e344d617850656572496453697a651010640000000480204d6178696d756d20627974652073697a65206f66206120706565722069642e484d61784e756d6265724f665065657249647310100500000004c8204d6178696d756d206e756d626572206f6620706565722069647320666f7220612073746f7261676520726571756573742e6c4d6178446174615365727665724d756c746941646472657373657310100a00000004e0204d6178696d756d206e756d626572206f66206d756c746961646472657373657320666f7220612073746f7261676520726571756573742e584d6178457870697265644974656d73496e426c6f636b101064000000042901204d6178696d756d206e756d626572206f662065787069726564206974656d73202870657220747970652920746f20636c65616e20757020696e20612073696e676c6520626c6f636b2e4453746f726167655265717565737454746c10102800000004902054696d652d746f2d6c69766520666f7220612073746f7261676520726571756573742e7450656e64696e6746696c6544656c6574696f6e5265717565737454746c10102800000004e1012054696d652d746f2d6c69766520666f7220612070656e64696e672066696c652064656c6574696f6e20726571756573742c2061667465722077686963682061207072696f72697479206368616c6c656e67652069732073656e74206f757420746f20656e666f726365207468652064656c6574696f6e2e504d6f76654275636b65745265717565737454746c101028000000045d012054696d652d746f2d6c69766520666f722061206d6f7665206275636b657420726571756573742c20616674657220776869636820746865207265717565737420697320636f6e7369646572656420657870697265642e784d61785573657250656e64696e6744656c6574696f6e526571756573747310100a000000040901204d6178696d756d206e756d626572206f662066696c652064656c6574696f6e207265717565737473206120757365722063616e20686176652070656e64696e672e804d61785573657250656e64696e674d6f76654275636b6574526571756573747310100a000000040101204d6178696d756d206e756d626572206f66206d6f7665206275636b6574207265717565737473206120757365722063616e20686176652070656e64696e672e544d696e57616974466f7253746f7053746f72696e6710100a000000040d02204e756d626572206f6620626c6f636b7320726571756972656420746f2070617373206265747765656e2061204253502072657175657374696e6720746f2073746f702073746f72696e6720612066696c6520616e64206974206265696e672061626c6520746f20636f6e6669726d20746f2073746f702073746f72696e672069742e017906293050726f6f66734465616c6572013050726f6f66734465616c657238505469636b546f4368616c6c656e6765735365656400010402103404001085012041206d617070696e672066726f6d206368616c6c656e676573207469636b20746f20612072616e646f6d2073656564207573656420666f722067656e65726174696e6720746865206368616c6c656e67657320696e2074686174207469636b2e0001012054686973206973207573656420746f206b65657020747261636b206f6620746865206368616c6c656e67657327207365656420696e2074686520706173742e8d012054686973206d617070696e6720676f6573206261636b206f6e6c79205b604368616c6c656e6765486973746f72794c656e677468466f72605d20626c6f636b732e2050726576696f7573206368616c6c656e676573206172652072656d6f7665642e685469636b546f436865636b706f696e744368616c6c656e6765730001040210490204001851012041206d617070696e672066726f6d206368616c6c656e676573207469636b20746f206120766563746f72206f6620637573746f6d206368616c6c656e676564206b65797320666f722074686174207469636b2e006d012054686973206973207573656420746f206b65657020747261636b206f6620746865206368616c6c656e67657320746861742068617665206265656e206d61646520696e2074686520706173742c207370656369666963616c6c799020696e2074686520636865636b706f696e74206368616c6c656e676520726f756e64732ef42054686520766563746f7220697320626f756e646564206279205b604d6178437573746f6d4368616c6c656e676573506572426c6f636b466f72605d2e89012054686973206d617070696e6720676f6573206261636b206f6e6c79205b604368616c6c656e6765486973746f72794c656e677468466f72605d207469636b732e2050726576696f7573206368616c6c656e676573206172652072656d6f7665642e484c617374436865636b706f696e745469636b010010100000000018ec20546865206368616c6c656e6765207469636b206f6620746865206c61737420636865636b706f696e74206368616c6c656e676520726f756e642e0069012054686973206973207573656420746f2064657465726d696e65207768656e20746f20696e636c75646520746865206368616c6c656e6765732066726f6d20746865205b604368616c6c656e6765735175657565605d20616e647d01205b605072696f726974794368616c6c656e6765735175657565605d20696e20746865205b605469636b546f436865636b706f696e744368616c6c656e676573605d2053746f726167654d61702e20546865736520636865636b706f696e744d01206368616c6c656e676520726f756e6473206861766520746f20626520616e73776572656420627920414c4c2050726f7669646572732c20616e64207468697320697320656e666f72636564206279207468656820607375626d69745f70726f6f66602065787472696e7369632e605469636b546f50726f766964657273446561646c696e657300010802027d069804002045012041206d617070696e672066726f6d206368616c6c656e6765207469636b20746f206120766563746f72206f66206368616c6c656e6765642050726f76696465727320666f722074686174207469636b2e0049012054686973206973207573656420746f206b65657020747261636b206f66207468652050726f76696465727320746861742068617665206265656e206368616c6c656e6765642c20616e642073686f756c644901207375626d697420612070726f6f66206279207468652074696d65206f6620746865205b604368616c6c656e6765735469636b6572605d207265616368657320746865206e756d62657220757365642061735901206b657920696e20746865206d617070696e672e2050726f7669646572732077686f20646f207375626d697420612070726f6f66206172652072656d6f7665642066726f6d20746865697220726573706563746976653d0120656e74727920616e642070757368656420666f727761726420746f20746865206e657874207469636b20696e20776869636820746865792073686f756c64207375626d697420612070726f6f662e4d012054686f73652077686f20617265207374696c6c20696e2074686520656e747279206279207468652074696d6520746865207469636b20697320726561636865642061726520636f6e7369646572656420746fdc2068617665206661696c656420746f207375626d697420612070726f6f6620616e64207375626a65637420746f20736c617368696e672e884c6173745469636b50726f76696465725375626d69747465644150726f6f66466f7200010402341004002465012041206d617070696e672066726f6d20612050726f766964657220746f20746865206c617374207469636b20666f7220776869636820746865792053484f554c442068617665207375626d697474656420612070726f6f662e410120496620666f7220612050726f7669646572206070602c20604c6173745469636b50726f76696465725375626d69747465644150726f6f66466f725b705d6020697320606e602c207468656e2074686531012050726f76696465722073686f756c64207375626d697420612070726f6f6620666f72207469636b20606e202b207374616b655f746f5f6368616c6c656e67655f706572696f64287029602e007101205468697320676574732075706461746564207768656e20612050726f7669646572207375626d69747320612070726f6f66207375636365737366756c6c7920616e64206973207573656420746f2064657465726d696e65207468652d01206e657874207469636b20666f72207768696368207468652050726f76696465722073686f756c64207375626d697420612070726f6f662c20616e64206974277320646561646c696e652e007101204966207468652050726f7669646572206661696c7320746f207375626d697420612070726f6f6620696e2074696d6520616e6420697320736c61736865642c20746869732077696c6c207374696c6c206765742075706461746564c820746f20746865207469636b2069742073686f756c642068617665207375626d697474656420612070726f6f6620666f722e3c4368616c6c656e676573517565756501008106040018d02041207175657565206f66206b65797320746861742068617665206265656e206368616c6c656e676564206d616e75616c6c792e0011012054686520656c656d656e747320696e20746869732071756575652077696c6c206265206368616c6c656e67656420696e2074686520636f6d696e6720626c6f636b732c450120616c7761797320656e737572696e67207468617420746865206d6178696d756d206e756d626572206f66206368616c6c656e6765732070657220626c6f636b206973206e6f742065786365656465642e350120412060426f756e64656456656360206973207573656420626563617573652074686520607061726974795f7363616c655f636f6465633a3a4d6178456e636f6465644c656e6020747261697455012069732072657175697265642c20627574207573696e672061206056656344657175656020776f756c64206265206d6f726520656666696369656e7420617320746869732069732061204649464f2071756575652e5c5072696f726974794368616c6c656e676573517565756501008506040028f42041207072696f72697479207175657565206f66206b65797320746861742068617665206265656e206368616c6c656e676564206d616e75616c6c792e0025012054686520646966666572656e6365206265747765656e207468697320616e6420604368616c6c656e676573517565756560206973207468617420746865206368616c6c656e676573290120696e20746869732071756575652061726520676976656e207072696f72697479206f76657220746865206f74686572732e20536f20746869732071756575652073686f756c64206265390120656d7074696564206265666f726520616e79206f6620746865206368616c6c656e67657320696e2074686520604368616c6c656e6765735175657565602061726520646973706174636865642ecc20546869732071756575652073686f756c64206e6f742062652061636365737369626c6520746f20746865207075626c69632e11012054686520656c656d656e747320696e20746869732071756575652077696c6c206265206368616c6c656e67656420696e2074686520636f6d696e6720626c6f636b732c450120616c7761797320656e737572696e67207468617420746865206d6178696d756d206e756d626572206f66206368616c6c656e6765732070657220626c6f636b206973206e6f742065786365656465642e350120412060426f756e64656456656360206973207573656420626563617573652074686520607061726974795f7363616c655f636f6465633a3a4d6178456e636f6465644c656e6020747261697455012069732072657175697265642c20627574207573696e672061206056656344657175656020776f756c64206265206d6f726520656666696369656e7420617320746869732069732061204649464f2071756575652e404368616c6c656e6765735469636b6572010010100000000018e8204120636f756e746572206f6620626c6f636b7320696e207768696368206368616c6c656e67657320776572652064697374726962757465642e004101205468697320636f756e746572206973206e6f74206e65636573736172696c79207468652073616d652061732074686520626c6f636b206e756d6265722c206173206368616c6c656e67657320617265490120646973747269627574656420696e2074686520606f6e5f706f6c6c6020686f6f6b2c2077686963682068617070656e732061742074686520626567696e6e696e67206f6620657665727920626c6f636b2ced0120736f206c6f6e672061732074686520626c6f636b206973206e6f742070617274206f662061205b4d756c74692d426c6f636b2d4d6967726174696f6e5d2868747470733a2f2f6769746875622e636f6d2f706172697479746563682f706f6c6b61646f742d73646b2f70756c6c2f313738312920284d424d292e350120447572696e67204d424d736d2c2074686520626c6f636b206e756d62657220696e637265617365732c20627574205b604368616c6c656e6765735469636b6572605d20646f6573206e6f742e48536c61736861626c6550726f7669646572730001040234100400007456616c696450726f6f665375626d6974746572734c6173745469636b730001040210890604001495012041206d617070696e672066726f6d207469636b20746f2050726f7669646572732c20776869636820697320736574206966207468652050726f7669646572207375626d697474656420612076616c69642070726f6f6620696e2074686174207469636b2e005d012054686973206973207573656420746f206b65657020747261636b206f66207468652050726f76696465727320746861742068617665207375626d69747465642070726f6f667320696e20746865206c61737420666577b901207469636b732c20776865726520617661696c6162696c697479206f6e6c7920757020746f20746865206c617374205b60436f6e6669673a3a5461726765745469636b7353746f726167654f665375626d697474657273605d207469636b732069732067756172616e746565642e950120546869732073746f72616765206973207468656e206d61646520617661696c61626c6520666f72206f746865722070616c6c65747320746f20757365207468726f75676820746865206050726f6f665375626d697474657273496e74657266616365602e3c4c61737444656c657465645469636b010010100000000010b90120412076616c7565207468617420726570726573656e747320746865206c617374207469636b2074686174207761732064656c657465642066726f6d20746865205b6056616c696450726f6f665375626d6974746572734c6173745469636b73605d2053746f726167654d61702e00a5012054686973206973207573656420746f206b6e6f77207768696368207469636b20746f2064656c6574652066726f6d20746865205b6056616c696450726f6f665375626d6974746572734c6173745469636b73605d2053746f726167654d6170207768656e207468656820606f6e5f69646c656020686f6f6b2069732063616c6c65642e584368616c6c656e6765735469636b65725061757365640000980400201901204120626f6f6c65616e207468617420726570726573656e7473207768657468657220746865205b604368616c6c656e6765735469636b6572605d206973207061757365642e00c9012042792064656661756c742c2074686973206973206066616c7365602c206d65616e696e67207468617420746865205b604368616c6c656e6765735469636b6572605d20697320696e6372656d656e7465642065766572792074696d6520606f6e5f706f6c6c602069732063616c6c65642ec10120546869732063616e2062652073657420746f2060747275656020776869636820776f756c6420706175736520746865205b604368616c6c656e6765735469636b6572605d2c2070726576656e74696e672060646f5f6e65775f6368616c6c656e6765735f726f756e64602066726f6d6c206265696e672065786563757465642e205468657265666f72653a4d01202d204e6f206e65772072616e646f6d206368616c6c656e67657320776f756c6420626520656d697474656420616e6420616464656420746f205b605469636b546f4368616c6c656e67657353656564605d2e7501202d204e6f206e657720636865636b706f696e74206368616c6c656e67657320776f756c6420626520656d697474656420616e6420616464656420746f205b605469636b546f436865636b706f696e744368616c6c656e676573605d2ef8202d20446561646c696e657320666f722070726f6f66207375626d697373696f6e732061726520696e646566696e6974656c7920706f7374706f6e65642e4050617374426c6f636b73576569676874000104021028040010f82041206d617070696e672066726f6d20626c6f636b206e756d62657220746f2074686520776569676874207573656420696e207468617420626c6f636b2e0021012054686973206973207573656420746f20636865636b20696620746865206e6574776f726b2069732070726573756d61626c7920756e6465722061207370616d2061747461636b2e750120497420697320636c656172656420666f7220626c6f636b73206f6c646572207468616e206063757272656e745f626c6f636b60202d20285b60436f6e6669673a3a426c6f636b46756c6c6e657373506572696f64605d202b2031292e484e6f7446756c6c426c6f636b73436f756e7401001010000000000c9d0120546865206e756d626572206f6620626c6f636b7320746861742068617665206265656e20636f6e73696465726564205f6e6f745f2066756c6c20696e20746865206c617374205b60436f6e6669673a3a426c6f636b46756c6c6e657373506572696f64605d2e0021012054686973206973207573656420746f20636865636b20696620746865206e6574776f726b2069732070726573756d61626c7920756e6465722061207370616d2061747461636b2e01c904011d023c6052616e646f6d4368616c6c656e676573506572426c6f636b10100a00000008510120546865206e756d626572206f662072616e646f6d206368616c6c656e6765732074686174206172652067656e6572617465642070657220626c6f636b2c207573696e67207468652072616e646f6d2073656564682067656e65726174656420666f72207468617420626c6f636b2e6c4d6178437573746f6d4368616c6c656e676573506572426c6f636b10100a000000045d0120546865206d6178696d756d206e756d626572206f6620637573746f6d206368616c6c656e67657320746861742063616e206265206d61646520696e20612073696e676c6520636865636b706f696e7420626c6f636b2e584368616c6c656e6765486973746f72794c656e6774681010640000000ce420546865206e756d626572206f66207469636b732074686174206368616c6c656e67657320686973746f7279206973206b65707420666f722e61012041667465722074686973206d616e79207469636b732c206368616c6c656e676573206172652072656d6f7665642066726f6d205b605469636b546f4368616c6c656e67657353656564605d2053746f726167654d61702e4501204120227469636b2220697320757375616c6c79206f6e6520626c6f636b2c2062757420736f6d6520626c6f636b73206d617920626520736b69707065642064756520746f206d6967726174696f6e732e544368616c6c656e67657351756575654c656e6774681010640000000cc820546865206c656e677468206f662074686520604368616c6c656e6765735175657565602053746f7261676556616c75652e1101205468697320697320746f206c696d6974207468652073697a65206f66207468652071756575652c20616e64207468657265666f726520746865206e756d626572206f6690206d616e75616c206368616c6c656e67657320746861742063616e206265206d6164652e64436865636b706f696e744368616c6c656e6765506572696f6410100a00000024750120546865206e756d626572206f6620626c6f636b7320696e206265747765656e206120636865636b706f696e74206368616c6c656e67657320726f756e642028692e652e207769746820637573746f6d206368616c6c656e676573292e61012054686973206973207573656420746f2064657465726d696e65207768656e20746f20696e636c75646520746865206368616c6c656e6765732066726f6d2074686520604368616c6c656e67657351756575656020616e64710120605072696f726974794368616c6c656e67657351756575656020696e207468652060426c6f636b546f4368616c6c656e676573602053746f726167654d61702e20546865736520636865636b706f696e74206368616c6c656e6765610120726f756e6473206861766520746f20626520616e73776572656420627920414c4c2050726f7669646572732c20616e64207468697320697320656e666f726365642062792074686520607375626d69745f70726f6f66602c2065787472696e7369632e006d01205741524e494e473a205468697320706572696f64206e6565647320746f20626520657175616c206f72206c6172676572207468616e20746865206368616c6c656e676520706572696f64206f662074686520736d616c6c6573747d012050726f766964657220696e20746865206e6574776f726b2e2049662074686520736d616c6c6573742050726f7669646572206861732061206368616c6c656e676520706572696f64206f66203130207469636b732028626c6f636b73292c1101207468656e2074686520636865636b706f696e74206368616c6c656e676520706572696f64206e6565647320746f206265206174206c65617374203130207469636b732e585374616b65546f4368616c6c656e6765506572696f6418400080f420e6b5000000000000000000000cd42054686520726174696f20746f20636f6e76657274207374616b65642062616c616e636520746f20626c6f636b20706572696f642e65012054686973206973207573656420746f2064657465726d696e652074686520706572696f6420696e20776869636820612050726f76696465722073686f756c64207375626d697420612070726f6f662c206261736564206f6ee501207468656972207374616b652e2054686520706572696f642069732063616c63756c6174656420617320605374616b65546f4368616c6c656e6765506572696f64202f207374616b65602c2073617475726174696e67206174205b60436f6e6669673a3a4d696e4368616c6c656e6765506572696f64605d2e484d696e4368616c6c656e6765506572696f6410101e00000004550120546865206d696e696d756d20706572696f6420696e20776869636820612050726f76696465722063616e206265206368616c6c656e6765642c207265676172646c657373206f66207468656972207374616b652e5c4368616c6c656e67655469636b73546f6c6572616e63651010320000001c59012054686520746f6c6572616e636520696e206e756d626572206f66207469636b732028616c6d6f7374206571756976616c656e7420746f20626c6f636b732c2062757420736b697070696e67204d424d292074686174590120612050726f76696465722068617320746f207375626d697420612070726f6f662c20636f756e74696e672066726f6d20746865207469636b20746865206368616c6c656e676520697320656d697474656420666f723c20746861742050726f76696465722e00650120466f72206578616d706c652c20696620612050726f766964657220697320737570706f73656420746f207375626d697420612070726f6f6620666f72207469636b20606e602c20616e642074686520746f6c6572616e636569012069732073657420746f206074602c207468656e207468652050726f76696465722068617320746f207375626d697420612070726f6f6620666f72206368616c6c656e67657320696e207469636b20606e602c206265666f72652420606e202b2074602e344368616c6c656e67657346656518400010a5d4e800000000000000000000000cb02054686520666565206368617267656420666f72207375626d697474696e672061206368616c6c656e67652e550120546869732066656520676f657320746f207468652054726561737572792c20616e64206973207573656420746f2070726576656e74207370616d2e20526567697374657265642050726f7669646572732061726558206578656d70742066726f6d2074686973206665652e785461726765745469636b7353746f726167654f665375626d6974746572731010030000000c89012054686520746172676574206e756d626572206f66207469636b7320666f7220776869636820746f2073746f726520746865207375626d6974746572732074686174207375626d69747465642076616c69642070726f6f667320696e207468656d2cad012073746f72656420696e20746865206056616c696450726f6f665375626d6974746572734c6173745469636b73602053746f726167654d61702e20546861742073746f726167652077696c6c206265207472696d6d656420646f776e20746f2074686973206e756d6265723101206f66207469636b7320696e2074686520606f6e5f69646c656020686f6f6b206f6620746869732070616c6c65742c20746f2061766f696420626c6f6174696e67207468652073746174652e504d61785375626d6974746572735065725469636b1010e8030000102d0120546865206d6178696d756d20616d6f756e74206f662050726f76696465727320746861742063616e207375626d697420612070726f6f6620696e20612073696e676c6520626c6f636b2e410120416c74686f75676820746869732063616e206265207365656e20617320616e20617262697472617279206c696d69742c2069662073657420746f2074686520616c7265616479206578697374696e67410120696d706c69636974206c696d697420746861742069732022686f77206d616e7920607375626d69745f70726f6f66602065787472696e736963732066697420696e2074686520776569676874206f66f0206120626c6f636b2c207468697320776f756c646e27742061646420616e79206164646974696f6e616c206172746966696369616c206c696d69742e20547265617375727900800000000000000000000000000000000000000000000000000000000000000000106020546865205472656173757279204163636f756e7449642e5820546865206163636f756e7420746f2077686963683adc202d20546865206665657320666f72207375626d697474696e672061206368616c6c656e676520617265207472616e736665727265642e94202d2054686520736c61736865642066756e647320617265207472616e736665727265642e4c426c6f636b46756c6c6e657373506572696f6410103200000024f82054686520706572696f64206f6620626c6f636b7320666f722077686963682074686520626c6f636b2066756c6c6e65737320697320636865636b65642e00690120546869732069732074686520616d6f756e74206f6620626c6f636b732066726f6d2074686520706173742c20666f722077686963682074686520626c6f636b2066756c6c6e65737320686173206265656e20636865636b65645d0120616e642069732073746f7265642e20426c6f636b73206f6c646572207468616e206063757272656e745f626c6f636b60202d205b60436f6e6669673a3a426c6f636b46756c6c6e657373506572696f64605d206172655820636c65617265642066726f6d2073746f726167652e008101205468697320636f6e7374616e742073686f756c6420626520657175616c206f7220736d616c6c6572207468616e20746865205b60436f6e6669673a3a4368616c6c656e67655469636b73546f6c6572616e6365605d20636f6e7374616e742c7d012069662074686520676f616c20697320746f2070726576656e74207370616d6d696e672061747461636b73207468617420776f756c642070726576656e7420686f6e6573742050726f7669646572732066726f6d207375626d697474696e67582074686569722070726f6f667320696e2074696d652e54426c6f636b46756c6c6e65737348656164726f6f6d2818a291e146d10414390120546865206d696e696d756d20756e75736564207765696768742074686174206120626c6f636b206d757374206861766520746f20626520636f6e73696465726564205f6e6f745f2066756c6c2e009101205468697320697320757365642061732070617274206f662074686520637269746572696120666f7220636865636b696e6720696620746865206e6574776f726b2069732070726573756d61626c7920756e6465722061207370616d2061747461636b2e890120466f72206578616d706c652c20746869732063616e2062652073657420746f207468652062656e63686d61726b656420776569676874206f66206120607375626d69745f70726f6f66602065787472696e7369632c20776869636820776f756c648d01206d65616e2074686174206120626c6f636b206973206e6f7420636f6e736964657265642066756c6c206966206120607375626d69745f70726f6f66602065787472696e73696320636f756c642068617665207374696c6c2066697420696e2069742e544d696e4e6f7446756c6c426c6f636b73526174696f9106100065cd1d24710120546865206d696e696d756d20726174696f20286f722070657263656e7461676520696620796f752077696c6c29206f6620626c6f636b732074686174206d75737420626520636f6e73696465726564205f6e6f745f2066756c6c2c51012066726f6d2074686520746f74616c206e756d626572206f66205b60436f6e6669673a3a426c6f636b46756c6c6e657373506572696f64605d20626c6f636b732074616b656e20696e746f206163636f756e742e008501204966206c657373207468616e20746869732070657263656e74616765206f6620626c6f636b7320617265206e6f742066756c6c2c20746865206e6574776f726b7320697320636f6e7369646572656420746f2062652070726573756d61626c795420756e6465722061207370616d2061747461636b2e890120546869732063616e20616c736f2062652074686f75676874206f6620617320746865206d6178696d756d20726174696f206f66206d69736265686176696e6720636f6c6c61746f727320746f6c6572617465642e20466f72206578616d706c652ca10120696620746869732069732073657420746f206050657262696c6c3a3a66726f6d5f70657263656e7428353029602c207468656e206966206d6f7265207468616e2068616c66206f6620746865206c6173742060426c6f636b46756c6c6e657373506572696f6460850120626c6f636b7320617265206e6f742066756c6c2c207468656e206f6e65206f662074686f736520626c6f636b7320737572656c79207761732070726f647563656420627920616e20686f6e65737420636f6c6c61746f722c206d65616e696e677501207468617420746865726520776173206174206c65617374206f6e65207472756c79205f6e6f745f2066756c6c20626c6f636b20696e20746865206c6173742060426c6f636b46756c6c6e657373506572696f646020626c6f636b732e0195062a2852616e646f6d6e657373012852616e646f6d6e657373106c4c61746573744f6e6545706f636841676f52616e646f6d6e657373000099060400042d02204c61746573742072616e646f6d2073656564206f627461696e65642066726f6d20746865206f6e652065706f63682061676f2072616e646f6d6e6573732066726f6d20424142452c20616e6420746865206c617465737420626c6f636b20746861742069742063616e2070726f636573732072616e646f6d6e6573732072657175657374732066726f6d6c4c6174657374506172656e74426c6f636b52616e646f6d6e657373000099060400042902204c61746573742072616e646f6d2073656564206f627461696e65642066726f6d2074686520706172656e7420626c6f636b2072616e646f6d6e6573732066726f6d20424142452c20616e6420746865206c617465737420626c6f636b20746861742069742063616e2070726f636573732072616e646f6d6e6573732072657175657374732066726f6d2852656c617945706f636801003020000000000000000004502043757272656e742072656c61792065706f636840496e686572656e74496e636c75646564000098040004e420456e737572657320746865206d616e6461746f727920696e686572656e742077617320696e636c7564656420696e2074686520626c6f636b01cd0401650200002b385061796d656e7453747265616d7301385061796d656e7453747265616d7320304f6e506f6c6c5469636b65720100101000000000180901204120636f756e746572206f6620626c6f636b7320666f722077686963682050726f7669646572732063616e206368617267652074686569722073747265616d732e009d01205468697320636f756e746572206973206e6f74206e65636573736172696c79207468652073616d652061732074686520626c6f636b206e756d6265722c20617320746865206c6173742063686172676561626c6520696e666f206f662050726f766964657273bd012028616e642074686520676c6f62616c20707269636520696e6465782920617265207570646174656420696e2074686520606f6e5f706f6c6c6020686f6f6b2c2077686963682068617070656e732061742074686520626567696e6e696e67206f6620657665727920626c6f636b2ced0120736f206c6f6e672061732074686520626c6f636b206973206e6f742070617274206f662061205b4d756c74692d426c6f636b2d4d6967726174696f6e5d2868747470733a2f2f6769746875622e636f6d2f706172697479746563682f706f6c6b61646f742d73646b2f70756c6c2f313738312920284d424d292e190120447572696e67204d424d732c2074686520626c6f636b206e756d62657220696e637265617365732c2062757420604f6e506f6c6c5469636b65726020646f6573206e6f742e5c4669786564526174655061796d656e7453747265616d7300010802029d06a10604002481012054686520646f75626c65206d617070696e672066726f6d20612050726f76696465722c20746f206974732070726f76696465642055736572732c20746f2074686569722066697865642d72617465207061796d656e742073747265616d732e0065012054686973206973207573656420746f2073746f726520616e64206d616e6167652066697865642d72617465207061796d656e742073747265616d73206265747765656e20557365727320616e642050726f7669646572732e007020546869732073746f72616765206973207570646174656420696e3aed01202d205b6164645f66697865645f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a6164645f66697865645f726174655f7061796d656e745f73747265616d292c20776869636820616464732061206e657720656e74727920746f20746865206d61702e4902202d205b64656c6574655f66697865645f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a64656c6574655f66697865645f726174655f7061796d656e745f73747265616d292c2077686963682072656d6f7665732074686520636f72726573706f6e64696e6720656e7472792066726f6d20746865206d61702e0102202d205b7570646174655f66697865645f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a7570646174655f66697865645f726174655f7061796d656e745f73747265616d292c20776869636820757064617465732074686520656e7472792773206072617465602ee501202d205b6368617267655f7061796d656e745f73747265616d735d2863726174653a3a646973706174636861626c65733a3a6368617267655f7061796d656e745f73747265616d73292c20776869636820757064617465732074686520656e747279277320606c6173745f636861726765645f7469636b602e6444796e616d6963526174655061796d656e7453747265616d7300010802029d06a50604002489012054686520646f75626c65206d617070696e672066726f6d20612050726f76696465722c20746f206974732070726f76696465642055736572732c20746f2074686569722064796e616d69632d72617465207061796d656e742073747265616d732e006d012054686973206973207573656420746f2073746f726520616e64206d616e6167652064796e616d69632d72617465207061796d656e742073747265616d73206265747765656e20557365727320616e642050726f7669646572732e007020546869732073746f72616765206973207570646174656420696e3afd01202d205b6164645f64796e616d69635f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a6164645f64796e616d69635f726174655f7061796d656e745f73747265616d292c20776869636820616464732061206e657720656e74727920746f20746865206d61702e5902202d205b64656c6574655f64796e616d69635f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a64656c6574655f64796e616d69635f726174655f7061796d656e745f73747265616d292c2077686963682072656d6f7665732074686520636f72726573706f6e64696e6720656e7472792066726f6d20746865206d61702e3d02202d205b7570646174655f64796e616d69635f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a7570646174655f64796e616d69635f726174655f7061796d656e745f73747265616d292c20776869636820757064617465732074686520656e74727927732060616d6f756e745f70726f7669646564602e1502202d205b6368617267655f7061796d656e745f73747265616d735d2863726174653a3a646973706174636861626c65733a3a6368617267655f7061796d656e745f73747265616d73292c20776869636820757064617465732074686520656e7472792773206070726963655f696e6465785f7768656e5f6c6173745f63686172676564602e484c61737443686172676561626c65496e666f0101040234a90650000000000000000000000000000000000000000018750220546865206d617070696e672066726f6d20612050726f766964657220746f20697473206c6173742063686172676561626c6520707269636520696e6465782028666f722064796e616d69632d72617465207061796d656e742073747265616d732920616e64206c6173742063686172676561626c65207469636b2028666f722066697865642d72617465207061796d656e742073747265616d73292e0069022054686973206973207573656420746f206b65657020747261636b206f6620746865206c6173742063686172676561626c6520707269636520696e64657820616e64207469636b206e756d62657220666f7220656163682050726f76696465722c20736f20746869732070616c6c65742063616e2063686172676520746865207061796d656e742073747265616d7320636f72726563746c792e007020546869732073746f72616765206973207570646174656420696e3a6502202d205b7570646174655f6c6173745f63686172676561626c655f696e666f5d2863726174653a3a5061796d656e744d616e616765723a3a7570646174655f6c6173745f63686172676561626c655f696e666f292c20776869636820757064617465732074686520656e747279277320606c6173745f63686172676561626c655f7469636b6020616e64206070726963655f696e646578602e445573657273576974686f757446756e6473000104020010040020c50120546865206d617070696e672066726f6d2061207573657220746f20696620697420686173206265656e20666c616767656420666f72206e6f7420686176696e6720656e6f7567682066756e647320746f2070617920666f7220697473207265717565737465642073657276696365732e00c5012054686973206973207573656420746f20666c6167207573657273207468617420646f206e6f74206861766520656e6f7567682066756e647320746f2070617920666f72207468656972207265717565737465642073657276696365732c20736f206f746865722050726f766964657273942063616e2073746f702070726f766964696e6720736572766963657320746f207468656d2e007020546869732073746f72616765206973207570646174656420696e3a9902202d205b6368617267655f7061796d656e745f73747265616d735d2863726174653a3a646973706174636861626c65733a3a6368617267655f7061796d656e745f73747265616d73292c20776869636820656d6974732061206055736572576974686f757446756e647360206576656e7420616e642073657473207468652075736572277320656e74727920696e2074686973206d617020696620697420646f6573206e6f745501206861766520656e6f7567682066756e64732c20616e6420636c656172732074686520656e747279206966206974207761732073657420616e642074686520757365722068617320656e6f7567682066756e64732e3c526567697374657265645573657273010104020010100000000028b90120546865206d617070696e672066726f6d2061207573657220746f20696620697420686173206265656e207265676973746572656420746f20746865206e6574776f726b20616e642074686520616d6f756e74206f66207061796d656e742073747265616d73206974206861732e0029022053696e6365207573657273206861766520746f2070726f766964652061206465706f73697420746f2062652061626c6520746f206f70656e2065616368207061796d656e742073747265616d2c2074686973206973207573656420746f206b65657020747261636b206f662074686520616d6f756e74206f66207061796d656e742073747265616d7361012074686174206120757365722068617320616e6420697420697320616c736f2075736566756c20746f20636865636b2069662061207573657220686173207265676973746572656420746f20746865206e6574776f726b2e007020546869732073746f72616765206973207570646174656420696e3a6902202d205b6164645f66697865645f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a6164645f66697865645f726174655f7061796d656e745f73747265616d292c20776869636820686f6c647320746865206465706f736974206f6620746865207573657220616e642061646473206f6e6520746f20746869732073746f726167652e7902202d205b6164645f64796e616d69635f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a6164645f64796e616d69635f726174655f7061796d656e745f73747265616d292c20776869636820686f6c647320746865206465706f736974206f6620746865207573657220616e642061646473206f6e6520746f20746869732073746f726167652e7102202d205b72656d6f76655f66697865645f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a72656d6f76655f66697865645f726174655f7061796d656e745f73747265616d292c2077686963682072656d6f766573206f6e652066726f6d20746869732073746f7261676520616e642072656c656173657320746865206465706f7369742e8102202d205b72656d6f76655f64796e616d69635f726174655f7061796d656e745f73747265616d5d2863726174653a3a646973706174636861626c65733a3a72656d6f76655f64796e616d69635f726174655f7061796d656e745f73747265616d292c2077686963682072656d6f766573206f6e652066726f6d20746869732073746f7261676520616e642072656c656173657320746865206465706f7369742e6843757272656e745072696365506572556e69745065725469636b0100184000000000000000000000000000000000181902205468652063757272656e742070726963652070657220756e697420706572207469636b206f66207468652070726f766964656420736572766963652c207573656420746f2063616c63756c6174652074686520616d6f756e7420746f2063686172676520666f722064796e616d69632d72617465207061796d656e742073747265616d732e009102205468697320697320757064617465642065616368207469636b207573696e672074686520666f726d756c61207468617420636f6e7369646572732063757272656e742073797374656d2063617061636974792028746f74616c2073746f72616765206f66207468652073797374656d2920616e642073797374656d20617661696c6162696c6974792028746f74616c2073746f7261676520617661696c61626c65292e007020546869732073746f72616765206973207570646174656420696e3a6d02202d205b646f5f7570646174655f63757272656e745f70726963655f7065725f756e69745f7065725f7469636b5d2863726174653a3a7574696c733a3a646f5f7570646174655f63757272656e745f70726963655f7065725f756e69745f7065725f7469636b292c2077686963682075706461746573207468652063757272656e742070726963652070657220756e697420706572207469636b2e54416363756d756c617465645072696365496e646578010018400000000000000000000000000000000020d1012054686520616363756d756c6174656420707269636520696e6465782073696e63652067656e657369732c207573656420746f2063616c63756c6174652074686520616d6f756e7420746f2063686172676520666f722064796e616d69632d72617465207061796d656e742073747265616d732e00f1012054686973206973206571756976616c656e7420746f207768617420697420776f756c64206861766520636f737420746f2073746f7265206f6e6520756e6974206f66207468652070726f766964656420736572766963652073696e63652074686520626567696e6e696e67206f6620746865206e6574776f726b2e050220576520757365207468697320746f2063616c63756c6174652074686520616d6f756e7420746f2063686172676520666f722064796e616d69632d72617465207061796d656e742073747265616d732c20627920636865636b696e67206f75742074686520646966666572656e6365206265747765656e2074686520696e6465785501207768656e20746865207061796d656e742073747265616d20776173206c61737420636861726765642c20616e642074686520696e64657820617420746865206c6173742063686172676561626c65207469636b2e007020546869732073746f72616765206973207570646174656420696e3a2d02202d205b646f5f7570646174655f70726963655f696e6465785d2863726174653a3a7574696c733a3a646f5f7570646174655f70726963655f696e646578292c20776869636820757064617465732074686520616363756d756c6174656420707269636520696e6465782c20616464696e6720746f206974207468652063757272656e742070726963652e01d10401690208404e657753747265616d4465706f73697410100a00000014910120546865206e756d626572206f66207469636b73207468617420636f72726573706f6e6420746f20746865206465706f7369742074686174206120557365722068617320746f2070617920746f206f70656e2061207061796d656e742073747265616d2ea1012054686973206d65616e7320746861742c2066726f6d207468652062616c616e6365206f6620746865205573657220666f7220776869636820746865207061796d656e742073747265616d206973206265696e6720637265617465642c2074686520616d6f756e74d420604e657753747265616d4465706f736974202a2072617465602077696c6c2062652068656c642061732061206465706f7369742e250220496e207468652063617365206f662064796e616d69632d72617465207061796d656e742073747265616d732c206072617465602077696c6c2062652060616d6f756e745f70726f7669646564202a2063757272656e745f736572766963655f7072696365602c207768657265206063757272656e745f736572766963655f70726963656020686173310120746f2062652070726f7669646564206279207468652070616c6c6574207573696e672074686520605061796d656e7453747265616d73496e746572666163656020696e746572666163652e6055736572576974686f757446756e6473436f6f6c646f776e10106400000008ed0120546865206e756d626572206f66207469636b732074686174206120757365722077696c6c206861766520746f207761697420616674657220697420686173206265656e20666c616767656420617320776974686f75742066756e647320746f2062652061626c6520746f20636c656172207468617420666c6167c90120616e642062652061626c6520746f2070617920666f7220736572766963657320616761696e2e204966207468657265277320616e79206f75747374616e64696e672064656274207768656e2074686520666c616720697320636c65617265642c2069742077696c6c20626520706169642e01ad062c284275636b65744e6674730001d504016d020001b1062d104e66747301104e6674733c28436f6c6c656374696f6e0001040210b506040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402001004000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c020202b90698040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e44436f6c6c656374696f6e4163636f756e740001080202bd069804000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e40436f6c6c656374696f6e526f6c654f660001080202c106c506040008d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732ea02053746f72657320636f6c6c656374696f6e20726f6c657320617320706572206163636f756e742e104974656d00010802029d02cd06040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e50436f6c6c656374696f6e4d657461646174614f660001040210e50604000468204d65746164617461206f66206120636f6c6c656374696f6e2e384974656d4d657461646174614f6600010802029d02e90604000454204d65746164617461206f6620616e206974656d2e2441747472696275746500011002020202f106f506040004702041747472696275746573206f66206120636f6c6c656374696f6e2e2c4974656d50726963654f6600010802029d02fd06040004502041207072696365206f6620616e206974656d2e644974656d41747472696275746573417070726f76616c734f6601010802029d02010704000468204974656d2061747472696275746520617070726f76616c732e404e657874436f6c6c656374696f6e496400001004000831012053746f726573207468652060436f6c6c656374696f6e496460207468617420697320676f696e6720746f206265207573656420666f7220746865206e65787420636f6c6c656374696f6e2ef02054686973206765747320696e6372656d656e746564207768656e657665722061206e657720636f6c6c656374696f6e20697320637265617465642e3450656e64696e67537761704f6600010802029d0209070400047c2048616e646c657320616c6c207468652070656e64696e672073776170732e48436f6c6c656374696f6e436f6e6669674f660001040210e1040400046020436f6e666967206f66206120636f6c6c656374696f6e2e304974656d436f6e6669674f6600010802029d020d050400044c20436f6e666967206f6620616e206974656d2e01dd040171023844436f6c6c656374696f6e4465706f736974184000407a10f35a000000000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f73697418400010a5d4e8000000000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f73697442617365184000a0724e180900000000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f73697442617365184000a0724e1809000000000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f7369745065724279746518400010a5d4e8000000000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410100001000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410104000000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410100001000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e38417070726f76616c734c696d697410101400000004a820546865206d6178696d756d20617070726f76616c7320616e206974656d20636f756c6420686176652e704974656d41747472696275746573417070726f76616c734c696d697410101400000004d420546865206d6178696d756d206174747269627574657320617070726f76616c7320616e206974656d20636f756c6420686176652e1c4d61785469707310100a00000004a820546865206d6178206e756d626572206f6620746970732061207573657220636f756c642073656e642e4c4d6178446561646c696e654475726174696f6e1010001a4f0004a820546865206d6178206475726174696f6e20696e20626c6f636b7320666f7220646561646c696e65732e504d61784174747269627574657350657243616c6c10100a00000004e020546865206d6178206e756d626572206f6620617474726962757465732061207573657220636f756c6420736574207065722063616c6c2e2046656174757265730d0720000000000000000004902044697361626c657320736f6d65206f662070616c6c657427732066656174757265732e011507321907042448436865636b4e6f6e5a65726f53656e64657221079840436865636b5370656356657273696f6e25071038436865636b547856657273696f6e29071030436865636b47656e657369732d073438436865636b4d6f7274616c69747931073428436865636b4e6f6e63653907982c436865636b5765696768743d0798604368617267655472616e73616374696f6e5061796d656e744107985053746f726167655765696768745265636c61696d4507984907","id":"1"} \ No newline at end of file diff --git a/client/blockchain-service/src/commands.rs b/client/blockchain-service/src/commands.rs index 2faa46875..8c522070b 100644 --- a/client/blockchain-service/src/commands.rs +++ b/client/blockchain-service/src/commands.rs @@ -4,7 +4,7 @@ use log::warn; use serde_json::Number; use pallet_file_system_runtime_api::{ - QueryBspConfirmChunksToProveForFileError, QueryFileEarliestVolunteerBlockError, + QueryBspConfirmChunksToProveForFileError, QueryFileEarliestVolunteerTickError, }; use pallet_payment_streams_runtime_api::GetUsersWithDebtOverThresholdError; use pallet_proofs_dealer_runtime_api::{ @@ -14,14 +14,13 @@ use pallet_storage_providers_runtime_api::{ GetBspInfoError, QueryAvailableStorageCapacityError, QueryEarliestChangeCapacityBlockError, QueryStorageProviderCapacityError, }; -use sp_api::ApiError; -use sp_core::H256; - use shc_actors_framework::actor::ActorHandle; use shc_common::types::{ - BlockNumber, ChunkId, ForestLeaf, ProviderId, RandomnessOutput, StorageProviderId, + BlockNumber, ChunkId, ForestLeaf, ProviderId, RandomnessOutput, StorageProviderId, TickNumber, TrieRemoveMutation, }; +use sp_api::ApiError; +use sp_core::H256; use storage_hub_runtime::{AccountId, Balance, StorageDataUnit}; use super::{ @@ -55,11 +54,16 @@ pub enum BlockchainServiceCommand { block_number: BlockNumber, callback: tokio::sync::oneshot::Sender>, }, - QueryFileEarliestVolunteerBlock { + WaitForTick { + tick_number: TickNumber, + callback: + tokio::sync::oneshot::Sender>>, + }, + QueryFileEarliestVolunteerTick { bsp_id: ProviderId, file_key: H256, callback: - tokio::sync::oneshot::Sender>, + tokio::sync::oneshot::Sender>, }, QueryEarliestChangeCapacityBlock { bsp_id: ProviderId, @@ -179,12 +183,15 @@ pub trait BlockchainServiceInterface { /// Wait for a block number. async fn wait_for_block(&self, block_number: BlockNumber) -> Result<()>; - /// Query the earliest block number that a file was volunteered for storage. - async fn query_file_earliest_volunteer_block( + /// Wait for a tick number. + async fn wait_for_tick(&self, tick_number: TickNumber) -> Result<(), ApiError>; + + /// Query the earliest tick number that a file was volunteered for storage. + async fn query_file_earliest_volunteer_tick( &self, bsp_id: ProviderId, file_key: H256, - ) -> Result; + ) -> Result; async fn query_earliest_change_capacity_block( &self, @@ -365,14 +372,26 @@ impl BlockchainServiceInterface for ActorHandle { Ok(()) } - async fn query_file_earliest_volunteer_block( + async fn wait_for_tick(&self, tick_number: TickNumber) -> Result<(), ApiError> { + let (callback, rx) = tokio::sync::oneshot::channel(); + // Build command to send to blockchain service. + let message = BlockchainServiceCommand::WaitForTick { + tick_number, + callback, + }; + self.send(message).await; + let rx = rx.await.expect("Failed to receive response from BlockchainService. Probably means BlockchainService has crashed."); + rx.await.expect("Failed to wait for tick") + } + + async fn query_file_earliest_volunteer_tick( &self, bsp_id: ProviderId, file_key: H256, - ) -> Result { + ) -> Result { let (callback, rx) = tokio::sync::oneshot::channel(); // Build command to send to blockchain service. - let message = BlockchainServiceCommand::QueryFileEarliestVolunteerBlock { + let message = BlockchainServiceCommand::QueryFileEarliestVolunteerTick { bsp_id, file_key, callback, diff --git a/client/blockchain-service/src/handler.rs b/client/blockchain-service/src/handler.rs index 638a46ce4..0c53e0fda 100644 --- a/client/blockchain-service/src/handler.rs +++ b/client/blockchain-service/src/handler.rs @@ -19,9 +19,9 @@ use sc_network::Multiaddr; use sc_service::RpcHandlers; use sc_tracing::tracing::{error, info}; use shc_actors_framework::actor::{Actor, ActorEventLoop}; -use shc_common::types::{Fingerprint, BCSV_KEY_TYPE}; +use shc_common::types::{Fingerprint, TickNumber, BCSV_KEY_TYPE}; use shp_file_metadata::FileKey; -use sp_api::ProvideRuntimeApi; +use sp_api::{ApiError, ProvideRuntimeApi}; use sp_core::H256; use sp_keystore::{Keystore, KeystorePtr}; use sp_runtime::{ @@ -31,7 +31,7 @@ use sp_runtime::{ use storage_hub_runtime::RuntimeEvent; use pallet_file_system_runtime_api::{ - FileSystemApi, QueryBspConfirmChunksToProveForFileError, QueryFileEarliestVolunteerBlockError, + FileSystemApi, QueryBspConfirmChunksToProveForFileError, QueryFileEarliestVolunteerTickError, }; use pallet_payment_streams_runtime_api::{GetUsersWithDebtOverThresholdError, PaymentStreamsApi}; use pallet_proofs_dealer_runtime_api::{ @@ -78,6 +78,9 @@ pub struct BlockchainService { /// A registry of waiters for a block number. pub(crate) wait_for_block_request_by_number: BTreeMap>>, + /// A registry of waiters for a tick number. + pub(crate) wait_for_tick_request_by_number: + BTreeMap>>>, /// A list of Provider IDs that this node has to pay attention to submit proofs for. /// This could be a BSP or a list of buckets that an MSP has. pub(crate) provider_ids: BTreeSet, @@ -281,7 +284,7 @@ impl Actor for BlockchainService { match tx.send(()) { Ok(_) => {} Err(_) => { - error!(target: LOG_TARGET, "Failed to notify task about waiting block number."); + error!(target: LOG_TARGET, "Failed to notify task about waiting block number. \nThis should never happen, in this same code we have both the sender and receiver of the oneshot channel, so it should always be possible to send the message."); } } } else { @@ -293,10 +296,64 @@ impl Actor for BlockchainService { match callback.send(rx) { Ok(_) => { - trace!(target: LOG_TARGET, "Receiver sent successfully"); + trace!(target: LOG_TARGET, "Block message receiver sent successfully"); } Err(e) => { - error!(target: LOG_TARGET, "Failed to send receiver: {:?}", e); + error!(target: LOG_TARGET, "Failed to send block message receiver: {:?}", e); + } + } + } + BlockchainServiceCommand::WaitForTick { + tick_number, + callback, + } => { + let current_block_hash = self.client.info().best_hash; + + // Current Tick should always return a value, unless there's an internal API error. + let current_tick_result = self + .client + .runtime_api() + .get_current_tick(current_block_hash); + + let (tx, rx) = tokio::sync::oneshot::channel(); + + match current_tick_result { + Ok(current_tick) => { + // If there is no API error, and the current tick is greater than or equal to the tick number + // we are waiting for, we notify the task that the tick has been reached. + if current_tick >= tick_number { + match tx.send(Ok(())) { + Ok(_) => {} + Err(e) => { + error!(target: LOG_TARGET, "Failed to notify task about tick reached: {:?}. \nThis should never happen, in this same code we have both the sender and receiver of the oneshot channel, so it should always be possible to send the message.", e); + } + } + } else { + // If the current tick is less than the tick number we are waiting for, we insert it in + // the waiting queue. + self.wait_for_tick_request_by_number + .entry(tick_number) + .or_insert_with(Vec::new) + .push(tx); + } + } + Err(e) => { + // If there is an API error, we notify the task about it immediately. + match tx.send(Err(e)) { + Ok(_) => {} + Err(e) => { + error!(target: LOG_TARGET, "Failed to notify API error to task querying current tick: {:?}. \nThis should never happen, in this same code we have both the sender and receiver of the oneshot channel, so it should always be possible to send the message.", e); + } + } + } + } + + match callback.send(rx) { + Ok(_) => { + trace!(target: LOG_TARGET, "Tick message receiver sent successfully"); + } + Err(e) => { + error!(target: LOG_TARGET, "Failed to send tick message receiver: {:?}", e); } } } @@ -321,7 +378,7 @@ impl Actor for BlockchainService { } } } - BlockchainServiceCommand::QueryFileEarliestVolunteerBlock { + BlockchainServiceCommand::QueryFileEarliestVolunteerTick { bsp_id, file_key, callback, @@ -331,13 +388,13 @@ impl Actor for BlockchainService { let earliest_block_to_volunteer = self .client .runtime_api() - .query_earliest_file_volunteer_block( + .query_earliest_file_volunteer_tick( current_block_hash, bsp_id.into(), file_key, ) .unwrap_or_else(|_| { - Err(QueryFileEarliestVolunteerBlockError::InternalError) + Err(QueryFileEarliestVolunteerTickError::InternalError) }); match callback.send(earliest_block_to_volunteer) { @@ -741,6 +798,7 @@ impl BlockchainService { event_bus_provider: BlockchainServiceEventBusProvider::new(), nonce_counter: 0, wait_for_block_request_by_number: BTreeMap::new(), + wait_for_tick_request_by_number: BTreeMap::new(), provider_ids: BTreeSet::new(), forest_root_write_lock: None, last_block_processed: Zero::zero(), @@ -838,6 +896,10 @@ impl BlockchainService { // Notify all tasks waiting for this block number (or lower). self.notify_import_block_number(&block_number); + // Notify all tasks waiting for this tick number (or lower). + // It is not guaranteed that the tick number will increase at every block import. + self.notify_tick_number(&block_hash); + // Process pending requests that update the forest root. self.check_pending_forest_root_writes(); diff --git a/client/blockchain-service/src/utils.rs b/client/blockchain-service/src/utils.rs index 9c62941c3..08052007b 100644 --- a/client/blockchain-service/src/utils.rs +++ b/client/blockchain-service/src/utils.rs @@ -84,6 +84,39 @@ impl BlockchainService { } } + /// Notify tasks waiting for a tick number. + pub(crate) fn notify_tick_number(&mut self, block_hash: &H256) { + // Get the current tick number. + let tick_number = match self.client.runtime_api().get_current_tick(*block_hash) { + Ok(current_tick) => current_tick, + Err(_) => { + error!(target: LOG_TARGET, "CRITICAL❗️❗️ Failed to query current tick from runtime in block hash {:?} and block number {:?}. This should not happen.", block_hash, self.client.info().best_number); + return; + } + }; + + let mut keys_to_remove = Vec::new(); + + for (tick_number, waiters) in self + .wait_for_tick_request_by_number + .range_mut(..=tick_number) + { + keys_to_remove.push(*tick_number); + for waiter in waiters.drain(..) { + match waiter.send(Ok(())) { + Ok(_) => {} + Err(_) => { + error!(target: LOG_TARGET, "Failed to notify task about tick number."); + } + } + } + } + + for key in keys_to_remove { + self.wait_for_tick_request_by_number.remove(&key); + } + } + /// Checks if the account nonce on-chain is higher than the nonce in the [`BlockchainService`]. /// /// If the nonce is higher, the account nonce is updated in the [`BlockchainService`]. diff --git a/client/common/src/types.rs b/client/common/src/types.rs index 0a33112a8..1a75b0fec 100644 --- a/client/common/src/types.rs +++ b/client/common/src/types.rs @@ -29,6 +29,7 @@ pub type FileMetadata = shp_file_metadata::FileMetadata; pub type FileKey = shp_file_metadata::FileKey; pub type BlockNumber = frame_system::pallet_prelude::BlockNumberFor; +pub type TickNumber = pallet_file_system::types::TickNumber; pub type StorageData = pallet_file_system::types::StorageData; pub type FileLocation = pallet_file_system::types::FileLocation; pub type PeerIds = pallet_file_system::types::PeerIds; diff --git a/node/src/tasks/bsp_upload_file.rs b/node/src/tasks/bsp_upload_file.rs index c2c1e22c7..4b8d842d9 100644 --- a/node/src/tasks/bsp_upload_file.rs +++ b/node/src/tasks/bsp_upload_file.rs @@ -579,25 +579,25 @@ where self.file_key_cleanup = Some(file_key.into()); // Query runtime for the earliest block where the BSP can volunteer for the file. - let earliest_volunteer_block = self + let earliest_volunteer_tick = self .storage_hub_handler .blockchain - .query_file_earliest_volunteer_block(own_bsp_id, file_key.into()) + .query_file_earliest_volunteer_tick(own_bsp_id, file_key.into()) .await .map_err(|e| anyhow!("Failed to query file earliest volunteer block: {:?}", e))?; info!( target: LOG_TARGET, - "Waiting for block {:?} to volunteer for file {:?}", - earliest_volunteer_block, + "Waiting for tick {:?} to volunteer for file {:?}", + earliest_volunteer_tick, file_key ); - // TODO: if the earliest block is too far away, we should drop the task. + // TODO: if the earliest tick is too far away, we should drop the task. // TODO: based on the limit above, also add a timeout for the task. self.storage_hub_handler .blockchain - .wait_for_block(earliest_volunteer_block) + .wait_for_tick(earliest_volunteer_tick) .await?; // Optimistically register the file for upload in the file transfer service. diff --git a/pallets/bucket-nfts/src/mock.rs b/pallets/bucket-nfts/src/mock.rs index f4b81c128..96b2bdb06 100644 --- a/pallets/bucket-nfts/src/mock.rs +++ b/pallets/bucket-nfts/src/mock.rs @@ -133,6 +133,7 @@ impl ProofsDealerInterface for MockProofsDealer { type MerkleHash = H256; type RandomnessOutput = H256; type MerkleHashing = BlakeTwo256; + type TickNumber = BlockNumber; fn challenge(_key_challenged: &Self::MerkleHash) -> frame_support::dispatch::DispatchResult { Ok(()) @@ -198,6 +199,10 @@ impl ProofsDealerInterface for MockProofsDealer { ) -> frame_support::dispatch::DispatchResult { Ok(()) } + + fn get_current_tick() -> Self::TickNumber { + System::block_number() + } } impl pallet_file_system::Config for Test { @@ -209,7 +214,7 @@ impl pallet_file_system::Config for Test { type Fingerprint = H256; type ReplicationTargetType = u32; type ThresholdType = ThresholdType; - type ThresholdTypeToBlockNumber = ThresholdTypeToBlockNumberConverter; + type ThresholdTypeToTickNumber = ThresholdTypeToBlockNumberConverter; type HashToThresholdType = HashToThresholdTypeConverter; type MerkleHashToRandomnessOutput = MerkleHashToRandomnessOutputConverter; type ChunkIdToMerkleHash = ChunkIdToMerkleHashConverter; diff --git a/pallets/file-system/README.md b/pallets/file-system/README.md index eb3b7f81b..2bc4be926 100644 --- a/pallets/file-system/README.md +++ b/pallets/file-system/README.md @@ -40,7 +40,7 @@ The goal here is to have half of the replication target $R_{t}$ be probabilistic $$T_{gsp} = \frac{1}{2} \cdot \frac{R_{t}}{W_{g}} \cdot M$$ $T_{gsp}$: _Threshold global starting point_ -$R_{t}$: _Replication target_ (number of BSPs required to fulfill a storage request, otherwise known as `ReplicationTarget`) +$R_{t}$: _Replication target_ (number of BSPs required to fulfill a storage request, otherwise known as `MaxBspsPerStorageRequest`) $W_{g}$: _Global weight_ (cumulative weight of all BSPs) $M$: _Maximum threshold_ (all BSPs would be eligible to volunteer, for example `u32::MAX`) @@ -52,20 +52,36 @@ $$T_{wsp} = w \cdot T_{gsp}$$ $w$: _BSP weight_ (current weight of the BSP) -#### Threshold Slope +#### Global Threshold Slope -The rate of increase of the threshold from the weighted starting point to the maximum threshold over a period of blocks $B_{t}$ required to reach the maximum threshold $M$. +The rate of increase of the threshold from the global starting point to the maximum threshold over a period of blocks $B_{t}$ required to reach the maximum threshold $M$. +This global threshold slope is calculated taking into account the global starting point, so that it is the same for all BSPs. -$$T_{s} = \frac{M - T_{wsp}}{B_{t}}$$ +$$S_{g} = \frac{M - T_{gsp}}{B_{t}}$$ $B_{t}$: _Block time_ (number of blocks to pass to reach $M$) +#### Weighted Threshold Slope + +The actual rate of increase of the threshold from the weighted starting point to the maximum threshold. +This weighted threshold slope is calculated taking into account the BSP's weight, so that it is different for each BSP, and BSPs with higher weights will have a higher threshold slope. + +$$S_{w} = w \cdot S_{g}$$ + +$w$: _BSP weight_ (current weight of the BSP) + #### Threshold The threshold to succeed will be different for each BSP. By calculating their own starting point $T_{wsp}$ and increasing at a rate based on the global weight of all BSPs over a period of blocks $B_{t}$ required to reach the maximum threshold $M$. -$$T = T_{wsp} + T_{s} \cdot b$$ +$$T = T_{wsp} + S_{w} \cdot b$$ $T_{wsp}$: _Threshold weighted starting point_ (taking into account the BSP's weight) $T_{s}$: _Threshold slope_ (rate of increase reaching constant within target block time) $b$: _Blocks passed_ (number of blocks passed since initiated storage request) + +> Note ℹ️ +> +> Actually, the threshold calculation is not done using _**blocks**_, but _**ticks**_. The reason for this is to prevent a potential spamming attack, where a malicious BSP would spam the network with tipped transactions, preventing honest BSPs from volunteering first, and thus letting blocks pass until they themselves can volunteer first. +> +> For mor information on ticks, check out the [Proofs Dealer Pallet](./../proofs-dealer/README.md). diff --git a/pallets/file-system/runtime-api/src/lib.rs b/pallets/file-system/runtime-api/src/lib.rs index 1f8a026f3..59ad58b59 100644 --- a/pallets/file-system/runtime-api/src/lib.rs +++ b/pallets/file-system/runtime-api/src/lib.rs @@ -5,9 +5,9 @@ use scale_info::prelude::vec::Vec; use scale_info::TypeInfo; use sp_runtime::RuntimeDebug; -/// Error type for the `query_earliest_file_volunteer_block` runtime API call. +/// Error type for the `query_earliest_file_volunteer_tick` runtime API call. #[derive(Eq, PartialEq, Encode, Decode, RuntimeDebug, TypeInfo)] -pub enum QueryFileEarliestVolunteerBlockError { +pub enum QueryFileEarliestVolunteerTickError { FailedToEncodeFingerprint, FailedToEncodeBsp, ThresholdArithmeticError, @@ -24,14 +24,14 @@ pub enum QueryBspConfirmChunksToProveForFileError { sp_api::decl_runtime_apis! { #[api_version(1)] - pub trait FileSystemApi + pub trait FileSystemApi where ProviderId: Codec, FileKey: Codec, - BlockNumber: Codec, + TickNumber: Codec, ChunkId: Codec, { - fn query_earliest_file_volunteer_block(bsp_id: ProviderId, file_key: FileKey) -> Result; + fn query_earliest_file_volunteer_tick(bsp_id: ProviderId, file_key: FileKey) -> Result; fn query_bsp_confirm_chunks_to_prove_for_file(bsp_id: ProviderId, file_key: FileKey) -> Result, QueryBspConfirmChunksToProveForFileError>; } } diff --git a/pallets/file-system/src/lib.rs b/pallets/file-system/src/lib.rs index 2a08ba0f1..56e06bd72 100644 --- a/pallets/file-system/src/lib.rs +++ b/pallets/file-system/src/lib.rs @@ -171,8 +171,13 @@ pub mod pallet { + One + Zero; - /// The type to convert a threshold to a block number. - type ThresholdTypeToBlockNumber: ConvertBack>; + /// The type to convert a threshold to a tick number. + /// + /// For more information on what "ticks" are, see the [Proofs Dealer pallet](https://github.com/Moonsong-Labs/storage-hub/blob/main/pallets/proofs-dealer/README.md). + type ThresholdTypeToTickNumber: ConvertBack< + Self::ThresholdType, + ::TickNumber, + >; /// The type to convert a hash to a threshold. type HashToThresholdType: Convert; @@ -432,29 +437,28 @@ pub mod pallet { #[pallet::getter(fn replication_target)] pub type ReplicationTarget = StorageValue<_, ReplicationTargetType, ValueQuery>; - /// Number of blocks until all BSPs would reach the [`Config::MaximumThreshold`] to ensure that all BSPs are able to volunteer. + /// Number of ticks until all BSPs would reach the [`Config::MaximumThreshold`] to ensure that all BSPs are able to volunteer. #[pallet::storage] - #[pallet::getter(fn block_range_to_maximum_threshold)] - pub type BlockRangeToMaximumThreshold = - StorageValue<_, BlockNumberFor, ValueQuery>; + #[pallet::getter(fn tick_range_to_maximum_threshold)] + pub type TickRangeToMaximumThreshold = StorageValue<_, TickNumber, ValueQuery>; #[pallet::genesis_config] pub struct GenesisConfig { pub replication_target: ReplicationTargetType, - pub block_range_to_maximum_threshold: BlockNumberFor, + pub tick_range_to_maximum_threshold: TickNumber, } impl Default for GenesisConfig { fn default() -> Self { let replication_target = 1u32.into(); - let block_range_to_maximum_threshold = 10u32.into(); + let tick_range_to_maximum_threshold = 10u32.into(); ReplicationTarget::::put(replication_target); - BlockRangeToMaximumThreshold::::put(block_range_to_maximum_threshold); + TickRangeToMaximumThreshold::::put(tick_range_to_maximum_threshold); Self { replication_target, - block_range_to_maximum_threshold, + tick_range_to_maximum_threshold, } } } @@ -463,7 +467,7 @@ pub mod pallet { impl BuildGenesisConfig for GenesisConfig { fn build(&self) { ReplicationTarget::::put(self.replication_target); - BlockRangeToMaximumThreshold::::put(self.block_range_to_maximum_threshold); + TickRangeToMaximumThreshold::::put(self.tick_range_to_maximum_threshold); } } @@ -664,8 +668,6 @@ pub mod pallet { FailedToDecodeThreshold, /// BSP did not succeed threshold check. AboveThreshold, - /// Failed to convert block number to threshold. - FailedToConvertBlockNumber, /// Arithmetic error in threshold calculation. ThresholdArithmeticError, /// Failed to convert to primitive type. @@ -706,8 +708,8 @@ pub mod pallet { NoGlobalReputationWeightSet, /// Maximum threshold cannot be zero. MaximumThresholdCannotBeZero, - /// Block range to maximum threshold cannot be zero. - BlockRangeToMaximumThresholdCannotBeZero, + /// Tick range to maximum threshold cannot be zero. + TickRangeToMaximumThresholdCannotBeZero, /// Pending stop storing request not found. PendingStopStoringRequestNotFound, /// Minimum amount of blocks between the request opening and being able to confirm it not reached. @@ -1206,7 +1208,7 @@ pub mod pallet { pub fn set_global_parameters( origin: OriginFor, replication_target: Option, - block_range_to_maximum_threshold: Option>, + tick_range_to_maximum_threshold: Option>, ) -> DispatchResult { // Check that the extrinsic was sent with root origin. ensure_root(origin)?; @@ -1220,13 +1222,13 @@ pub mod pallet { ReplicationTarget::::put(replication_target); } - if let Some(block_range_to_maximum_threshold) = block_range_to_maximum_threshold { + if let Some(tick_range_to_maximum_threshold) = tick_range_to_maximum_threshold { ensure!( - block_range_to_maximum_threshold > BlockNumberFor::::zero(), - Error::::BlockRangeToMaximumThresholdCannotBeZero + tick_range_to_maximum_threshold > TickNumber::::zero(), + Error::::TickRangeToMaximumThresholdCannotBeZero ); - BlockRangeToMaximumThreshold::::put(block_range_to_maximum_threshold); + TickRangeToMaximumThreshold::::put(tick_range_to_maximum_threshold); } Ok(().into()) diff --git a/pallets/file-system/src/mock.rs b/pallets/file-system/src/mock.rs index bc37cf776..58cbc5c3a 100644 --- a/pallets/file-system/src/mock.rs +++ b/pallets/file-system/src/mock.rs @@ -1,11 +1,13 @@ use core::marker::PhantomData; use frame_support::{ - construct_runtime, derive_impl, parameter_types, + construct_runtime, derive_impl, + dispatch::DispatchClass, + parameter_types, traits::{AsEnsureOriginWithArg, Everything, Hooks, Randomness}, weights::{constants::RocksDbWeight, Weight, WeightMeter}, BoundedBTreeSet, }; -use frame_system as system; +use frame_system::{self as system, limits::BlockWeights, BlockWeight, ConsumedWeight}; use num_bigint::BigUint; use pallet_nfts::PalletFeatures; use shp_file_metadata::ChunkId; @@ -16,8 +18,8 @@ use shp_traits::{ use sp_core::{hashing::blake2_256, ConstU128, ConstU32, ConstU64, Get, Hasher, H256}; use sp_keyring::sr25519::Keyring; use sp_runtime::{ - traits::{BlakeTwo256, Convert, ConvertBack, IdentifyAccount, IdentityLookup, Verify}, - BuildStorage, DispatchError, MultiSignature, SaturatedConversion, + traits::{BlakeTwo256, Convert, ConvertBack, IdentifyAccount, IdentityLookup, Verify, Zero}, + BuildStorage, DispatchError, MultiSignature, Perbill, SaturatedConversion, }; use sp_std::collections::btree_set::BTreeSet; use sp_trie::{CompactProof, LayoutV1, MemoryDB, TrieConfiguration, TrieLayout}; @@ -58,22 +60,55 @@ impl Randomness for MockRandomness { } } -/// Rolls to the desired block. Returns the number of blocks played. +/// Rolls to the desired block, with non-spammed blocks. Returns the number of blocks played. pub(crate) fn roll_to(n: BlockNumber) -> BlockNumber { let mut num_blocks = 0; let mut block = System::block_number(); while block < n { - block = roll_one_block(); + block = roll_one_block(false); num_blocks += 1; } num_blocks } -// Rolls forward one block. Returns the new block number. -fn roll_one_block() -> BlockNumber { +/// Rolls to the desired block with spammed blocks. Returns the number of blocks played. +pub(crate) fn roll_to_spammed(n: BlockNumber) -> BlockNumber { + let mut num_blocks = 0; + let mut block = System::block_number(); + while block < n { + block = roll_one_block(true); + num_blocks += 1; + } + num_blocks +} + +/// Rolls forward one block. Returns the new block number. +/// +/// It can be configured whether the block is spammed or not. +/// A spammed block is one where there is no weight left for other transactions. +fn roll_one_block(spammed: bool) -> BlockNumber { System::set_block_number(System::block_number() + 1); ProofsDealer::on_poll(System::block_number(), &mut WeightMeter::new()); + + // Set block weight usage. + let normal_weight = if spammed { + let weights: BlockWeights = ::BlockWeights::get(); + weights + .get(DispatchClass::Normal) + .max_total + .unwrap_or(weights.max_block) + } else { + Zero::zero() + }; + let block_weight = ConsumedWeight::new(|class: DispatchClass| match class { + DispatchClass::Normal => normal_weight, + DispatchClass::Operational => Zero::zero(), + DispatchClass::Mandatory => Zero::zero(), + }); + BlockWeight::::set(block_weight); + FileSystem::on_idle(System::block_number(), Weight::MAX); + ProofsDealer::on_finalize(System::block_number()); System::block_number() } @@ -269,6 +304,21 @@ impl Get for TreasuryAccount { } } +pub struct BlockFullnessHeadroom; +impl Get for BlockFullnessHeadroom { + fn get() -> Weight { + Weight::from_parts(10_000, 0) + + ::DbWeight::get().reads_writes(0, 1) + } +} + +pub struct MinNotFullBlocksRatio; +impl Get for MinNotFullBlocksRatio { + fn get() -> Perbill { + Perbill::from_percent(50) + } +} + impl pallet_proofs_dealer::Config for Test { type RuntimeEvent = RuntimeEvent; type ProvidersPallet = Providers; @@ -282,15 +332,18 @@ impl pallet_proofs_dealer::Config for Test { type MaxCustomChallengesPerBlock = ConstU32<10>; type MaxSubmittersPerTick = ConstU32<1000>; // TODO: Change this value after benchmarking for it to coincide with the implicit limit given by maximum block weight type TargetTicksStorageOfSubmitters = ConstU32<3>; - type ChallengeHistoryLength = ConstU64<10>; - type ChallengesQueueLength = ConstU32<10>; - type CheckpointChallengePeriod = ConstU64<10>; + type ChallengeHistoryLength = ConstU64<30>; + type ChallengesQueueLength = ConstU32<25>; + type CheckpointChallengePeriod = ConstU64<20>; type ChallengesFee = ConstU128<1_000_000>; type Treasury = TreasuryAccount; type RandomnessProvider = MockRandomness; type StakeToChallengePeriod = ConstU128; type MinChallengePeriod = ConstU64<4>; - type ChallengeTicksTolerance = ConstU64<20>; + type ChallengeTicksTolerance = ConstU64<10>; + type BlockFullnessPeriod = ConstU64<10>; + type BlockFullnessHeadroom = BlockFullnessHeadroom; + type MinNotFullBlocksRatio = MinNotFullBlocksRatio; } /// Structure to mock a verifier that returns `true` when `proof` is not empty @@ -372,7 +425,7 @@ impl crate::Config for Test { type Fingerprint = H256; type ReplicationTargetType = u32; type ThresholdType = ThresholdType; - type ThresholdTypeToBlockNumber = ThresholdTypeToBlockNumberConverter; + type ThresholdTypeToTickNumber = ThresholdTypeToBlockNumberConverter; type HashToThresholdType = HashToThresholdTypeConverter; type MerkleHashToRandomnessOutput = MerkleHashToRandomnessOutputConverter; type ChunkIdToMerkleHash = ChunkIdToMerkleHashConverter; @@ -416,7 +469,7 @@ pub fn new_test_ext() -> sp_io::TestExternalities { crate::GenesisConfig:: { replication_target: 2, - block_range_to_maximum_threshold: 1, + tick_range_to_maximum_threshold: 1, } .assimilate_storage(&mut t) .unwrap(); @@ -434,7 +487,7 @@ pub fn new_test_ext() -> sp_io::TestExternalities { .unwrap(); let mut ext = sp_io::TestExternalities::new(t); - ext.execute_with(|| System::set_block_number(1)); + ext.execute_with(|| roll_one_block(false)); ext } diff --git a/pallets/file-system/src/tests.rs b/pallets/file-system/src/tests.rs index 418198260..aa550a2dd 100644 --- a/pallets/file-system/src/tests.rs +++ b/pallets/file-system/src/tests.rs @@ -6,9 +6,9 @@ use crate::{ StorageData, StorageRequestBspsMetadata, StorageRequestMetadata, StorageRequestTtl, ThresholdType, }, - BlockRangeToMaximumThreshold, Config, DataServersForMoveBucket, Error, Event, - PendingBucketsToMove, PendingMoveBucketRequests, PendingStopStoringRequests, ReplicationTarget, - StorageRequestExpirations, StorageRequests, + Config, DataServersForMoveBucket, Error, Event, PendingBucketsToMove, + PendingMoveBucketRequests, PendingStopStoringRequests, ReplicationTarget, + StorageRequestExpirations, StorageRequests, TickRangeToMaximumThreshold, }; use frame_support::{ assert_noop, assert_ok, @@ -19,7 +19,10 @@ use frame_support::{ use frame_system::pallet_prelude::BlockNumberFor; use pallet_proofs_dealer::{LastTickProviderSubmittedAProofFor, PriorityChallengesQueue}; use pallet_storage_providers::types::Bucket; -use shp_traits::{ReadBucketsInterface, ReadStorageProvidersInterface, TrieRemoveMutation}; +use shp_traits::{ + MutateStorageProvidersInterface, ReadBucketsInterface, ReadChallengeableProvidersInterface, + ReadStorageProvidersInterface, TrieRemoveMutation, +}; use sp_core::{ByteArray, Hasher, H256}; use sp_keyring::sr25519::Keyring; use sp_runtime::{ @@ -183,9 +186,10 @@ mod request_move_bucket { let bucket_id = create_bucket(&owner, name.clone(), msp_charlie_id); // Check bucket is stored by Charlie - assert!( - <::Providers as ReadBucketsInterface>::is_bucket_stored_by_msp(&msp_charlie_id, &bucket_id) - ); + assert!(Providers::is_bucket_stored_by_msp( + &msp_charlie_id, + &bucket_id + )); // Dispatch a signed extrinsic. assert_ok!(FileSystem::issue_storage_request( @@ -220,9 +224,10 @@ mod request_move_bucket { let bucket_id = create_bucket(&owner, name.clone(), msp_charlie_id); // Check bucket is stored by Charlie - assert!( - <::Providers as ReadBucketsInterface>::is_bucket_stored_by_msp(&msp_charlie_id, &bucket_id) - ); + assert!(Providers::is_bucket_stored_by_msp( + &msp_charlie_id, + &bucket_id + )); // Dispatch a signed extrinsic. assert_ok!(FileSystem::request_move_bucket( @@ -251,9 +256,10 @@ mod request_move_bucket { let bucket_id = create_bucket(&owner, name.clone(), msp_charlie_id); // Check bucket is stored by Charlie - assert!( - <::Providers as ReadBucketsInterface>::is_bucket_stored_by_msp(&msp_charlie_id, &bucket_id) - ); + assert!(Providers::is_bucket_stored_by_msp( + &msp_charlie_id, + &bucket_id + )); assert_noop!( FileSystem::request_move_bucket(origin, bucket_id, msp_charlie_id), @@ -341,7 +347,7 @@ mod request_move_bucket { peer_ids.clone(), )); - // Compute the file key. + // Compute the file key. let file_key = FileSystem::compute_file_key( owner.clone(), bucket_id, @@ -351,9 +357,10 @@ mod request_move_bucket { ); // Check bucket is stored by Charlie - assert!( - <::Providers as ReadBucketsInterface>::is_bucket_stored_by_msp(&msp_charlie_id, &bucket_id) - ); + assert!(Providers::is_bucket_stored_by_msp( + &msp_charlie_id, + &bucket_id + )); // Manually set enough capacity for Charlie pallet_storage_providers::MainStorageProviders::::mutate( @@ -368,18 +375,18 @@ mod request_move_bucket { // Dispatch the MSP accept request. // This opereration increases the bucket size. assert_ok!(FileSystem::msp_accept_storage_request( - RuntimeOrigin::signed(msp_charlie), - file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - }, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - } - )); + RuntimeOrigin::signed(msp_charlie), + file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + }, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )); // Check bucket size - let bucket_size = <::Providers as ReadBucketsInterface>::get_bucket_size(&bucket_id).unwrap(); + let bucket_size = Providers::get_bucket_size(&bucket_id).unwrap(); assert_eq!(bucket_size, size); // BSP confirm storage request @@ -413,7 +420,12 @@ mod request_move_bucket { let pending_move_bucket = PendingMoveBucketRequests::::get(&msp_dave_id, bucket_id); - assert_eq!(pending_move_bucket, Some(MoveBucketRequestMetadata { requester: owner.clone() })); + assert_eq!( + pending_move_bucket, + Some(MoveBucketRequestMetadata { + requester: owner.clone() + }) + ); assert!(PendingBucketsToMove::::contains_key(&bucket_id)); @@ -468,9 +480,10 @@ mod request_move_bucket { let bucket_id = create_bucket(&owner, name.clone(), msp_charlie_id); // Check bucket is stored by Charlie - assert!( - <::Providers as ReadBucketsInterface>::is_bucket_stored_by_msp(&msp_charlie_id, &bucket_id) - ); + assert!(Providers::is_bucket_stored_by_msp( + &msp_charlie_id, + &bucket_id + )); // Dispatch a signed extrinsic. assert_ok!(FileSystem::request_move_bucket( @@ -481,7 +494,12 @@ mod request_move_bucket { let pending_move_bucket = PendingMoveBucketRequests::::get(&msp_dave_id, bucket_id); - assert_eq!(pending_move_bucket, Some(MoveBucketRequestMetadata { requester: owner.clone() })); + assert_eq!( + pending_move_bucket, + Some(MoveBucketRequestMetadata { + requester: owner.clone() + }) + ); assert!(PendingBucketsToMove::::contains_key(&bucket_id)); @@ -512,13 +530,14 @@ mod request_move_bucket { ); // Check bucket is stored by Dave - assert!( - <::Providers as ReadBucketsInterface>::is_bucket_stored_by_msp(&msp_dave_id, &bucket_id) - ); + assert!(Providers::is_bucket_stored_by_msp(&msp_dave_id, &bucket_id)); // Check pending bucket storages are cleared assert!(!PendingBucketsToMove::::contains_key(&bucket_id)); - assert!(!PendingMoveBucketRequests::::contains_key(&msp_dave_id, bucket_id)); + assert!(!PendingMoveBucketRequests::::contains_key( + &msp_dave_id, + bucket_id + )); }); } @@ -537,9 +556,10 @@ mod request_move_bucket { let bucket_id = create_bucket(&owner, name.clone(), msp_charlie_id); // Check bucket is stored by Charlie - assert!( - <::Providers as ReadBucketsInterface>::is_bucket_stored_by_msp(&msp_charlie_id, &bucket_id) - ); + assert!(Providers::is_bucket_stored_by_msp( + &msp_charlie_id, + &bucket_id + )); // Dispatch a signed extrinsic. assert_ok!(FileSystem::request_move_bucket( @@ -550,7 +570,12 @@ mod request_move_bucket { let pending_move_bucket = PendingMoveBucketRequests::::get(&msp_dave_id, bucket_id); - assert_eq!(pending_move_bucket, Some(MoveBucketRequestMetadata { requester: owner.clone() })); + assert_eq!( + pending_move_bucket, + Some(MoveBucketRequestMetadata { + requester: owner.clone() + }) + ); assert!(PendingBucketsToMove::::contains_key(&bucket_id)); @@ -581,13 +606,17 @@ mod request_move_bucket { ); // Check bucket is still stored by Charlie - assert!( - <::Providers as ReadBucketsInterface>::is_bucket_stored_by_msp(&msp_charlie_id, &bucket_id) - ); + assert!(Providers::is_bucket_stored_by_msp( + &msp_charlie_id, + &bucket_id + )); // Check pending bucket storages are cleared assert!(!PendingBucketsToMove::::contains_key(&bucket_id)); - assert!(!PendingMoveBucketRequests::::contains_key(&msp_dave_id, bucket_id)); + assert!(!PendingMoveBucketRequests::::contains_key( + &msp_dave_id, + bucket_id + )); }); } @@ -606,9 +635,10 @@ mod request_move_bucket { let bucket_id = create_bucket(&owner, name.clone(), msp_charlie_id); // Check bucket is stored by Charlie - assert!( - <::Providers as ReadBucketsInterface>::is_bucket_stored_by_msp(&msp_charlie_id, &bucket_id) - ); + assert!(Providers::is_bucket_stored_by_msp( + &msp_charlie_id, + &bucket_id + )); // Dispatch a signed extrinsic. assert_ok!(FileSystem::request_move_bucket( @@ -619,7 +649,12 @@ mod request_move_bucket { let pending_move_bucket = PendingMoveBucketRequests::::get(&msp_dave_id, bucket_id); - assert_eq!(pending_move_bucket, Some(MoveBucketRequestMetadata { requester: owner.clone() })); + assert_eq!( + pending_move_bucket, + Some(MoveBucketRequestMetadata { + requester: owner.clone() + }) + ); assert!(PendingBucketsToMove::::contains_key(&bucket_id)); @@ -634,7 +669,7 @@ mod request_move_bucket { ); // Check move bucket request expires after MoveBucketRequestTtl - let move_bucket_request_ttl: u32 = ::MoveBucketRequestTtl::get() ; + let move_bucket_request_ttl: u32 = ::MoveBucketRequestTtl::get(); let move_bucket_request_ttl: BlockNumber = move_bucket_request_ttl.into(); let expiration = move_bucket_request_ttl + System::block_number(); @@ -642,7 +677,10 @@ mod request_move_bucket { roll_to(expiration); assert!(!PendingBucketsToMove::::contains_key(&bucket_id)); - assert!(!PendingMoveBucketRequests::::contains_key(&msp_dave_id, bucket_id)); + assert!(!PendingMoveBucketRequests::::contains_key( + &msp_dave_id, + bucket_id + )); }); } } @@ -692,7 +730,10 @@ mod bsp_add_data_server_for_move_bucket_request { let msp_charlie = Keyring::Charlie.to_account_id(); let msp_dave = Keyring::Dave.to_account_id(); let bsp_account_id = Keyring::Bob.to_account_id(); - assert_ok!(bsp_sign_up(RuntimeOrigin::signed(bsp_account_id.clone()), 1000)); + assert_ok!(bsp_sign_up( + RuntimeOrigin::signed(bsp_account_id.clone()), + 1000 + )); let msp_charlie_id = add_msp_to_provider_storage(&msp_charlie); let msp_dave_id = add_msp_to_provider_storage(&msp_dave); @@ -701,9 +742,10 @@ mod bsp_add_data_server_for_move_bucket_request { let bucket_id = create_bucket(&owner, name.clone(), msp_charlie_id); // Check bucket is stored by Charlie - assert!( - <::Providers as ReadBucketsInterface>::is_bucket_stored_by_msp(&msp_charlie_id, &bucket_id) - ); + assert!(Providers::is_bucket_stored_by_msp( + &msp_charlie_id, + &bucket_id + )); assert_ok!(FileSystem::request_move_bucket( origin.clone(), @@ -713,7 +755,12 @@ mod bsp_add_data_server_for_move_bucket_request { let pending_move_bucket = PendingMoveBucketRequests::::get(&msp_dave_id, bucket_id); - assert_eq!(pending_move_bucket, Some(MoveBucketRequestMetadata { requester: owner.clone() })); + assert_eq!( + pending_move_bucket, + Some(MoveBucketRequestMetadata { + requester: owner.clone() + }) + ); assert!(PendingBucketsToMove::::contains_key(&bucket_id)); @@ -732,16 +779,18 @@ mod bsp_add_data_server_for_move_bucket_request { bucket_id, )); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id.clone(), - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id.clone()).unwrap(); let pending_move_bucket = PendingMoveBucketRequests::::get(&msp_dave_id, bucket_id); - assert_eq!(pending_move_bucket, Some(MoveBucketRequestMetadata { requester: owner })); - assert_eq!(DataServersForMoveBucket::::iter_key_prefix(&bucket_id).next(), Some(bsp_id)); + assert_eq!( + pending_move_bucket, + Some(MoveBucketRequestMetadata { requester: owner }) + ); + assert_eq!( + DataServersForMoveBucket::::iter_key_prefix(&bucket_id).next(), + Some(bsp_id) + ); assert_noop!( FileSystem::bsp_add_data_server_for_move_bucket_request( @@ -767,7 +816,10 @@ mod bsp_add_data_server_for_move_bucket_request { let msp_charlie = Keyring::Charlie.to_account_id(); let msp_dave = Keyring::Dave.to_account_id(); let bsp_account_id = Keyring::Bob.to_account_id(); - assert_ok!(bsp_sign_up(RuntimeOrigin::signed(bsp_account_id.clone()), 1000)); + assert_ok!(bsp_sign_up( + RuntimeOrigin::signed(bsp_account_id.clone()), + 1000 + )); let msp_charlie_id = add_msp_to_provider_storage(&msp_charlie); let msp_dave_id = add_msp_to_provider_storage(&msp_dave); @@ -776,9 +828,10 @@ mod bsp_add_data_server_for_move_bucket_request { let bucket_id = create_bucket(&owner, name.clone(), msp_charlie_id); // Check bucket is stored by Charlie - assert!( - <::Providers as ReadBucketsInterface>::is_bucket_stored_by_msp(&msp_charlie_id, &bucket_id) - ); + assert!(Providers::is_bucket_stored_by_msp( + &msp_charlie_id, + &bucket_id + )); // Dispatch a signed extrinsic. assert_ok!(FileSystem::request_move_bucket( @@ -789,7 +842,12 @@ mod bsp_add_data_server_for_move_bucket_request { let pending_move_bucket = PendingMoveBucketRequests::::get(&msp_dave_id, bucket_id); - assert_eq!(pending_move_bucket, Some(MoveBucketRequestMetadata { requester: owner.clone() })); + assert_eq!( + pending_move_bucket, + Some(MoveBucketRequestMetadata { + requester: owner.clone() + }) + ); assert!(PendingBucketsToMove::::contains_key(&bucket_id)); @@ -809,24 +867,22 @@ mod bsp_add_data_server_for_move_bucket_request { bucket_id, )); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); let pending_move_bucket = PendingMoveBucketRequests::::get(&msp_dave_id, bucket_id); - assert_eq!(pending_move_bucket, Some(MoveBucketRequestMetadata { requester: owner })); - assert_eq!(DataServersForMoveBucket::::iter_key_prefix(&bucket_id).next(), Some(bsp_id)); + assert_eq!( + pending_move_bucket, + Some(MoveBucketRequestMetadata { requester: owner }) + ); + assert_eq!( + DataServersForMoveBucket::::iter_key_prefix(&bucket_id).next(), + Some(bsp_id) + ); // Assert that the correct event was deposited System::assert_last_event( - Event::DataServerRegisteredForMoveBucket { - bsp_id, - bucket_id, - } - .into(), + Event::DataServerRegisteredForMoveBucket { bsp_id, bucket_id }.into(), ); }); } @@ -1330,9 +1386,10 @@ mod request_storage { let bucket_id = create_bucket(&owner, name.clone(), msp_charlie_id); // Check bucket is stored by Charlie - assert!( - <::Providers as ReadBucketsInterface>::is_bucket_stored_by_msp(&msp_charlie_id, &bucket_id) - ); + assert!(Providers::is_bucket_stored_by_msp( + &msp_charlie_id, + &bucket_id + )); // Dispatch a signed extrinsic. assert_ok!(FileSystem::request_move_bucket( @@ -1343,7 +1400,12 @@ mod request_storage { let pending_move_bucket = PendingMoveBucketRequests::::get(&msp_dave_id, bucket_id); - assert_eq!(pending_move_bucket, Some(MoveBucketRequestMetadata { requester: owner.clone() })); + assert_eq!( + pending_move_bucket, + Some(MoveBucketRequestMetadata { + requester: owner.clone() + }) + ); assert_noop!( FileSystem::issue_storage_request( @@ -1649,9 +1711,6 @@ mod request_storage { let storage_request_ttl: BlockNumberFor = storage_request_ttl.into(); let expiration_block = System::block_number() + storage_request_ttl; - // Assert that the next starting block to clean up is set to 0 initially - assert_eq!(FileSystem::next_starting_block_to_clean_up(), 0); - // Assert that the next expiration block number is the storage request ttl since a single storage request was made assert_eq!( FileSystem::next_available_storage_request_expiration_block(), @@ -1796,9 +1855,6 @@ mod request_storage { let expected_expiration_block_number: BlockNumberFor = expected_expiration_block_number.into(); - // Assert that the `NextExpirationInsertionBlockNumber` storage is set to 0 initially - assert_eq!(FileSystem::next_starting_block_to_clean_up(), 0); - // Assert that the storage request expirations storage is at max capacity assert_eq!( FileSystem::storage_request_expirations(expected_expiration_block_number).len(), @@ -1816,9 +1872,6 @@ mod request_storage { max_storage_request_expiry as usize ); - // Assert that the `NextExpirationInsertionBlockNumber` storage did not update - assert_eq!(FileSystem::next_starting_block_to_clean_up(), 0); - // Go to block number after which the storage request expirations should be removed roll_to(expected_expiration_block_number + 1); @@ -1940,9 +1993,6 @@ mod revoke_storage_request { let storage_request_ttl: BlockNumberFor = storage_request_ttl.into(); let expiration_block = System::block_number() + storage_request_ttl; - // Assert that the NextExpirationInsertionBlockNumber storage is set to 0 initially - assert_eq!(FileSystem::next_starting_block_to_clean_up(), 0); - // Assert that the storage request expiration was appended to the list at `StorageRequestTtl` assert_eq!( FileSystem::storage_request_expirations(expiration_block), @@ -1973,14 +2023,14 @@ mod revoke_storage_request { let bucket_id = create_bucket(&owner_account.clone(), name.clone(), msp_id); assert_ok!(FileSystem::issue_storage_request( - owner.clone(), - bucket_id, - location.clone(), - fingerprint, - 4, - msp_id, - peer_ids.clone(), - )); + owner.clone(), + bucket_id, + location.clone(), + fingerprint, + 4, + msp_id, + peer_ids.clone(), + )); let bsp_account_id = Keyring::Bob.to_account_id(); let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); @@ -1989,11 +2039,7 @@ mod revoke_storage_request { assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); let file_key = FileSystem::compute_file_key( owner_account.clone(), @@ -2117,25 +2163,25 @@ mod msp_accept_storage_request { let peer_id = BoundedVec::try_from(vec![1]).unwrap(); let peer_ids: PeerIds = BoundedVec::try_from(vec![peer_id]).unwrap(); - // Register the MSP. + // Register the MSP. let msp_id = add_msp_to_provider_storage(&msp); - // Create the bucket that will hold the file. + // Create the bucket that will hold the file. let name = BoundedVec::try_from(b"bucket".to_vec()).unwrap(); let bucket_id = create_bucket(&owner_account_id.clone(), name, msp_id); // Dispatch a storage request. assert_ok!(FileSystem::issue_storage_request( - owner_signed.clone(), - bucket_id, - location.clone(), - fingerprint, - size, - msp_id, - peer_ids.clone(), - )); + owner_signed.clone(), + bucket_id, + location.clone(), + fingerprint, + size, + msp_id, + peer_ids.clone(), + )); - // Compute the file key. + // Compute the file key. let file_key = FileSystem::compute_file_key( owner_account_id.clone(), bucket_id, @@ -2146,15 +2192,15 @@ mod msp_accept_storage_request { // Dispatch the MSP accept request. assert_ok!(FileSystem::msp_accept_storage_request( - RuntimeOrigin::signed(msp.clone()), - file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - }, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - } - )); + RuntimeOrigin::signed(msp.clone()), + file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + }, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )); // Assert that the storage was updated assert_eq!( @@ -2162,20 +2208,18 @@ mod msp_accept_storage_request { Some((msp_id, true)) ); - // Get the new root of the bucket. - let new_bucket_root = - <::Providers as shp_traits::ReadBucketsInterface>::get_root_bucket(&bucket_id,) - .unwrap(); + // Get the new root of the bucket. + let new_bucket_root = Providers::get_root_bucket(&bucket_id).unwrap(); // Assert that the correct event was deposited System::assert_last_event( Event::MspAcceptedStoring { - file_key, - msp_id, - bucket_id, - owner: owner_account_id, - new_bucket_root - } + file_key, + msp_id, + bucket_id, + owner: owner_account_id, + new_bucket_root, + } .into(), ); }); @@ -2188,22 +2232,24 @@ mod msp_accept_storage_request { let owner_signed = RuntimeOrigin::signed(owner_account_id.clone()); let msp = Keyring::Charlie.to_account_id(); let first_location = FileLocation::::try_from(b"test".to_vec()).unwrap(); - let second_location = FileLocation::::try_from(b"never/go/to/a/second/location".to_vec()).unwrap(); + let second_location = + FileLocation::::try_from(b"never/go/to/a/second/location".to_vec()) + .unwrap(); let first_size = 4; - let second_size = 8; + let second_size = 8; let first_fingerprint = H256::zero(); - let second_fingerprint = H256::random(); + let second_fingerprint = H256::random(); let peer_id = BoundedVec::try_from(vec![1]).unwrap(); let peer_ids: PeerIds = BoundedVec::try_from(vec![peer_id]).unwrap(); - // Register the MSP. + // Register the MSP. let msp_id = add_msp_to_provider_storage(&msp); - // Create the bucket that will hold both files. + // Create the bucket that will hold both files. let name = BoundedVec::try_from(b"bucket".to_vec()).unwrap(); let bucket_id = create_bucket(&owner_account_id.clone(), name, msp_id); - // Compute the file key for the first file. + // Compute the file key for the first file. let first_file_key = FileSystem::compute_file_key( owner_account_id.clone(), bucket_id, @@ -2212,48 +2258,48 @@ mod msp_accept_storage_request { first_fingerprint, ); - // Compute the file key for the second file. - let second_file_key = FileSystem::compute_file_key( - owner_account_id.clone(), - bucket_id, - second_location.clone(), - second_size, - second_fingerprint, - ); + // Compute the file key for the second file. + let second_file_key = FileSystem::compute_file_key( + owner_account_id.clone(), + bucket_id, + second_location.clone(), + second_size, + second_fingerprint, + ); // Dispatch a storage request for the first file. assert_ok!(FileSystem::issue_storage_request( - owner_signed.clone(), - bucket_id, - first_location.clone(), - first_fingerprint, - first_size, - msp_id, - peer_ids.clone(), - )); + owner_signed.clone(), + bucket_id, + first_location.clone(), + first_fingerprint, + first_size, + msp_id, + peer_ids.clone(), + )); - // Dispatch a storage request for the second file. - assert_ok!(FileSystem::issue_storage_request( - owner_signed.clone(), - bucket_id, - second_location.clone(), - second_fingerprint, - second_size, - msp_id, - peer_ids.clone(), - )); + // Dispatch a storage request for the second file. + assert_ok!(FileSystem::issue_storage_request( + owner_signed.clone(), + bucket_id, + second_location.clone(), + second_fingerprint, + second_size, + msp_id, + peer_ids.clone(), + )); // Dispatch the MSP accept request for the first file. assert_ok!(FileSystem::msp_accept_storage_request( - RuntimeOrigin::signed(msp.clone()), - first_file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - }, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - } - )); + RuntimeOrigin::signed(msp.clone()), + first_file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + }, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )); // Assert that the storage was updated assert_eq!( @@ -2261,69 +2307,65 @@ mod msp_accept_storage_request { Some((msp_id, true)) ); - // Get the new root of the bucket. - let new_bucket_root = - <::Providers as shp_traits::ReadBucketsInterface>::get_root_bucket(&bucket_id,) - .unwrap(); + // Get the new root of the bucket. + let new_bucket_root = Providers::get_root_bucket(&bucket_id).unwrap(); // Assert that the correct event was deposited System::assert_last_event( Event::MspAcceptedStoring { - file_key: first_file_key, - msp_id, - bucket_id, - owner: owner_account_id.clone(), - new_bucket_root - } + file_key: first_file_key, + msp_id, + bucket_id, + owner: owner_account_id.clone(), + new_bucket_root, + } .into(), ); - // Assert that the MSP used capacity has been updated. - assert_eq!( - ::get_used_capacity(&msp_id), - first_size - ); + // Assert that the MSP used capacity has been updated. + assert_eq!( + ::get_used_capacity(&msp_id), + first_size + ); - // Dispatch the MSP accept request for the second file. - assert_ok!(FileSystem::msp_accept_storage_request( - RuntimeOrigin::signed(msp.clone()), - second_file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - }, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - } - )); + // Dispatch the MSP accept request for the second file. + assert_ok!(FileSystem::msp_accept_storage_request( + RuntimeOrigin::signed(msp.clone()), + second_file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + }, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )); - // Assert that the storage was updated - assert_eq!( - FileSystem::storage_requests(second_file_key).unwrap().msp, - Some((msp_id, true)) - ); + // Assert that the storage was updated + assert_eq!( + FileSystem::storage_requests(second_file_key).unwrap().msp, + Some((msp_id, true)) + ); - // Get the new root of the bucket. - let new_bucket_root = - <::Providers as shp_traits::ReadBucketsInterface>::get_root_bucket(&bucket_id,) - .unwrap(); + // Get the new root of the bucket. + let new_bucket_root = Providers::get_root_bucket(&bucket_id).unwrap(); - // Assert that the correct event was deposited - System::assert_last_event( - Event::MspAcceptedStoring { - file_key: second_file_key, - msp_id, - bucket_id, - owner: owner_account_id, - new_bucket_root - } - .into(), - ); + // Assert that the correct event was deposited + System::assert_last_event( + Event::MspAcceptedStoring { + file_key: second_file_key, + msp_id, + bucket_id, + owner: owner_account_id, + new_bucket_root, + } + .into(), + ); - // Assert that the MSP used capacity has been updated. - assert_eq!( - ::get_used_capacity(&msp_id), - first_size + second_size - ); + // Assert that the MSP used capacity has been updated. + assert_eq!( + ::get_used_capacity(&msp_id), + first_size + second_size + ); }); } @@ -2334,26 +2376,29 @@ mod msp_accept_storage_request { let owner_signed = RuntimeOrigin::signed(owner_account_id.clone()); let msp = Keyring::Charlie.to_account_id(); let first_location = FileLocation::::try_from(b"test".to_vec()).unwrap(); - let second_location = FileLocation::::try_from(b"never/go/to/a/second/location".to_vec()).unwrap(); + let second_location = + FileLocation::::try_from(b"never/go/to/a/second/location".to_vec()) + .unwrap(); let first_size = 4; - let second_size = 8; + let second_size = 8; let first_fingerprint = H256::zero(); - let second_fingerprint = H256::random(); + let second_fingerprint = H256::random(); let peer_id = BoundedVec::try_from(vec![1]).unwrap(); let peer_ids: PeerIds = BoundedVec::try_from(vec![peer_id]).unwrap(); - // Register the MSP. + // Register the MSP. let msp_id = add_msp_to_provider_storage(&msp); - // Create the bucket that will hold the first file. + // Create the bucket that will hold the first file. let first_name = BoundedVec::try_from(b"first bucket".to_vec()).unwrap(); let first_bucket_id = create_bucket(&owner_account_id.clone(), first_name, msp_id); - // Create the bucket that will hold the second file. - let second_name = BoundedVec::try_from(b"second bucket".to_vec()).unwrap(); - let second_bucket_id = create_bucket(&owner_account_id.clone(), second_name, msp_id); + // Create the bucket that will hold the second file. + let second_name = BoundedVec::try_from(b"second bucket".to_vec()).unwrap(); + let second_bucket_id = + create_bucket(&owner_account_id.clone(), second_name, msp_id); - // Compute the file key for the first file. + // Compute the file key for the first file. let first_file_key = FileSystem::compute_file_key( owner_account_id.clone(), first_bucket_id, @@ -2362,48 +2407,48 @@ mod msp_accept_storage_request { first_fingerprint, ); - // Compute the file key for the second file. - let second_file_key = FileSystem::compute_file_key( - owner_account_id.clone(), - second_bucket_id, - second_location.clone(), - second_size, - second_fingerprint, - ); + // Compute the file key for the second file. + let second_file_key = FileSystem::compute_file_key( + owner_account_id.clone(), + second_bucket_id, + second_location.clone(), + second_size, + second_fingerprint, + ); // Dispatch a storage request for the first file. assert_ok!(FileSystem::issue_storage_request( - owner_signed.clone(), - first_bucket_id, - first_location.clone(), - first_fingerprint, - first_size, - msp_id, - peer_ids.clone(), - )); + owner_signed.clone(), + first_bucket_id, + first_location.clone(), + first_fingerprint, + first_size, + msp_id, + peer_ids.clone(), + )); - // Dispatch a storage request for the second file. - assert_ok!(FileSystem::issue_storage_request( - owner_signed.clone(), - second_bucket_id, - second_location.clone(), - second_fingerprint, - second_size, - msp_id, - peer_ids.clone(), - )); + // Dispatch a storage request for the second file. + assert_ok!(FileSystem::issue_storage_request( + owner_signed.clone(), + second_bucket_id, + second_location.clone(), + second_fingerprint, + second_size, + msp_id, + peer_ids.clone(), + )); // Dispatch the MSP accept request for the first file. assert_ok!(FileSystem::msp_accept_storage_request( - RuntimeOrigin::signed(msp.clone()), - first_file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - }, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - } - )); + RuntimeOrigin::signed(msp.clone()), + first_file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + }, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )); // Assert that the storage was updated assert_eq!( @@ -2411,69 +2456,65 @@ mod msp_accept_storage_request { Some((msp_id, true)) ); - // Get the new root of the bucket. - let new_bucket_root = - <::Providers as shp_traits::ReadBucketsInterface>::get_root_bucket(&first_bucket_id,) - .unwrap(); + // Get the new root of the bucket. + let new_bucket_root = Providers::get_root_bucket(&first_bucket_id).unwrap(); // Assert that the correct event was deposited System::assert_last_event( Event::MspAcceptedStoring { - file_key: first_file_key, - msp_id, - bucket_id: first_bucket_id, - owner: owner_account_id.clone(), - new_bucket_root - } + file_key: first_file_key, + msp_id, + bucket_id: first_bucket_id, + owner: owner_account_id.clone(), + new_bucket_root, + } .into(), ); - // Assert that the MSP used capacity has been updated. - assert_eq!( - ::get_used_capacity(&msp_id), - first_size - ); + // Assert that the MSP used capacity has been updated. + assert_eq!( + ::get_used_capacity(&msp_id), + first_size + ); - // Dispatch the MSP accept request for the second file. - assert_ok!(FileSystem::msp_accept_storage_request( - RuntimeOrigin::signed(msp.clone()), - second_file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - }, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - } - )); + // Dispatch the MSP accept request for the second file. + assert_ok!(FileSystem::msp_accept_storage_request( + RuntimeOrigin::signed(msp.clone()), + second_file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + }, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )); - // Assert that the storage was updated - assert_eq!( - FileSystem::storage_requests(second_file_key).unwrap().msp, - Some((msp_id, true)) - ); + // Assert that the storage was updated + assert_eq!( + FileSystem::storage_requests(second_file_key).unwrap().msp, + Some((msp_id, true)) + ); - // Get the new root of the bucket. - let new_bucket_root = - <::Providers as shp_traits::ReadBucketsInterface>::get_root_bucket(&second_bucket_id,) - .unwrap(); - - // Assert that the correct event was deposited - System::assert_last_event( - Event::MspAcceptedStoring { - file_key: second_file_key, - msp_id, - bucket_id: second_bucket_id, - owner: owner_account_id, - new_bucket_root - } - .into(), - ); + // Get the new root of the bucket. + let new_bucket_root = Providers::get_root_bucket(&second_bucket_id).unwrap(); - // Assert that the MSP used capacity has been updated. - assert_eq!( - ::get_used_capacity(&msp_id), - first_size + second_size - ); + // Assert that the correct event was deposited + System::assert_last_event( + Event::MspAcceptedStoring { + file_key: second_file_key, + msp_id, + bucket_id: second_bucket_id, + owner: owner_account_id, + new_bucket_root, + } + .into(), + ); + + // Assert that the MSP used capacity has been updated. + assert_eq!( + ::get_used_capacity(&msp_id), + first_size + second_size + ); }); } @@ -2482,32 +2523,38 @@ mod msp_accept_storage_request { new_test_ext().execute_with(|| { let first_owner_account_id = Keyring::Alice.to_account_id(); let first_owner_signed = RuntimeOrigin::signed(first_owner_account_id.clone()); - let second_owner_account_id = Keyring::Bob.to_account_id(); - let second_owner_signed = RuntimeOrigin::signed(second_owner_account_id.clone()); + let second_owner_account_id = Keyring::Bob.to_account_id(); + let second_owner_signed = RuntimeOrigin::signed(second_owner_account_id.clone()); let msp = Keyring::Charlie.to_account_id(); let first_location = FileLocation::::try_from(b"test".to_vec()).unwrap(); - let second_location = FileLocation::::try_from(b"never/go/to/a/second/location".to_vec()).unwrap(); + let second_location = + FileLocation::::try_from(b"never/go/to/a/second/location".to_vec()) + .unwrap(); let first_size = 4; - let second_size = 8; + let second_size = 8; let first_fingerprint = H256::zero(); - let second_fingerprint = H256::random(); + let second_fingerprint = H256::random(); let first_peer_id = BoundedVec::try_from(vec![1]).unwrap(); - let first_peer_ids: PeerIds = BoundedVec::try_from(vec![first_peer_id]).unwrap(); - let second_peer_id = BoundedVec::try_from(vec![2]).unwrap(); - let second_peer_ids: PeerIds = BoundedVec::try_from(vec![second_peer_id]).unwrap(); + let first_peer_ids: PeerIds = + BoundedVec::try_from(vec![first_peer_id]).unwrap(); + let second_peer_id = BoundedVec::try_from(vec![2]).unwrap(); + let second_peer_ids: PeerIds = + BoundedVec::try_from(vec![second_peer_id]).unwrap(); - // Register the MSP. + // Register the MSP. let msp_id = add_msp_to_provider_storage(&msp); - // Create the bucket that will hold the first file. + // Create the bucket that will hold the first file. let first_name = BoundedVec::try_from(b"first bucket".to_vec()).unwrap(); - let first_bucket_id = create_bucket(&first_owner_account_id.clone(), first_name, msp_id); + let first_bucket_id = + create_bucket(&first_owner_account_id.clone(), first_name, msp_id); - // Create the bucket that will hold the second file. - let second_name = BoundedVec::try_from(b"second bucket".to_vec()).unwrap(); - let second_bucket_id = create_bucket(&second_owner_account_id.clone(), second_name, msp_id); + // Create the bucket that will hold the second file. + let second_name = BoundedVec::try_from(b"second bucket".to_vec()).unwrap(); + let second_bucket_id = + create_bucket(&second_owner_account_id.clone(), second_name, msp_id); - // Compute the file key for the first file. + // Compute the file key for the first file. let first_file_key = FileSystem::compute_file_key( first_owner_account_id.clone(), first_bucket_id, @@ -2516,48 +2563,48 @@ mod msp_accept_storage_request { first_fingerprint, ); - // Compute the file key for the second file. - let second_file_key = FileSystem::compute_file_key( - second_owner_account_id.clone(), - second_bucket_id, - second_location.clone(), - second_size, - second_fingerprint, - ); + // Compute the file key for the second file. + let second_file_key = FileSystem::compute_file_key( + second_owner_account_id.clone(), + second_bucket_id, + second_location.clone(), + second_size, + second_fingerprint, + ); // Dispatch a storage request for the first file. assert_ok!(FileSystem::issue_storage_request( - first_owner_signed.clone(), - first_bucket_id, - first_location.clone(), - first_fingerprint, - first_size, - msp_id, - first_peer_ids.clone(), - )); + first_owner_signed.clone(), + first_bucket_id, + first_location.clone(), + first_fingerprint, + first_size, + msp_id, + first_peer_ids.clone(), + )); - // Dispatch a storage request for the second file. - assert_ok!(FileSystem::issue_storage_request( - second_owner_signed.clone(), - second_bucket_id, - second_location.clone(), - second_fingerprint, - second_size, - msp_id, - second_peer_ids.clone(), - )); + // Dispatch a storage request for the second file. + assert_ok!(FileSystem::issue_storage_request( + second_owner_signed.clone(), + second_bucket_id, + second_location.clone(), + second_fingerprint, + second_size, + msp_id, + second_peer_ids.clone(), + )); // Dispatch the MSP accept request for the first file. assert_ok!(FileSystem::msp_accept_storage_request( - RuntimeOrigin::signed(msp.clone()), - first_file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - }, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - } - )); + RuntimeOrigin::signed(msp.clone()), + first_file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + }, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )); // Assert that the storage was updated assert_eq!( @@ -2565,69 +2612,65 @@ mod msp_accept_storage_request { Some((msp_id, true)) ); - // Get the new root of the bucket. - let new_bucket_root = - <::Providers as shp_traits::ReadBucketsInterface>::get_root_bucket(&first_bucket_id,) - .unwrap(); + // Get the new root of the bucket. + let new_bucket_root = Providers::get_root_bucket(&first_bucket_id).unwrap(); // Assert that the correct event was deposited System::assert_last_event( Event::MspAcceptedStoring { - file_key: first_file_key, - msp_id, - bucket_id: first_bucket_id, - owner: first_owner_account_id.clone(), - new_bucket_root - } + file_key: first_file_key, + msp_id, + bucket_id: first_bucket_id, + owner: first_owner_account_id.clone(), + new_bucket_root, + } .into(), ); - // Assert that the MSP used capacity has been updated. - assert_eq!( - ::get_used_capacity(&msp_id), - first_size - ); + // Assert that the MSP used capacity has been updated. + assert_eq!( + ::get_used_capacity(&msp_id), + first_size + ); - // Dispatch the MSP accept request for the second file. - assert_ok!(FileSystem::msp_accept_storage_request( - RuntimeOrigin::signed(msp.clone()), - second_file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - }, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - } - )); + // Dispatch the MSP accept request for the second file. + assert_ok!(FileSystem::msp_accept_storage_request( + RuntimeOrigin::signed(msp.clone()), + second_file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + }, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )); - // Assert that the storage was updated - assert_eq!( - FileSystem::storage_requests(second_file_key).unwrap().msp, - Some((msp_id, true)) - ); + // Assert that the storage was updated + assert_eq!( + FileSystem::storage_requests(second_file_key).unwrap().msp, + Some((msp_id, true)) + ); - // Get the new root of the bucket. - let new_bucket_root = - <::Providers as shp_traits::ReadBucketsInterface>::get_root_bucket(&second_bucket_id,) - .unwrap(); - - // Assert that the correct event was deposited - System::assert_last_event( - Event::MspAcceptedStoring { - file_key: second_file_key, - msp_id, - bucket_id: second_bucket_id, - owner: second_owner_account_id, - new_bucket_root - } - .into(), - ); + // Get the new root of the bucket. + let new_bucket_root = Providers::get_root_bucket(&second_bucket_id).unwrap(); - // Assert that the MSP used capacity has been updated. - assert_eq!( - ::get_used_capacity(&msp_id), - first_size + second_size - ); + // Assert that the correct event was deposited + System::assert_last_event( + Event::MspAcceptedStoring { + file_key: second_file_key, + msp_id, + bucket_id: second_bucket_id, + owner: second_owner_account_id, + new_bucket_root, + } + .into(), + ); + + // Assert that the MSP used capacity has been updated. + assert_eq!( + ::get_used_capacity(&msp_id), + first_size + second_size + ); }); } @@ -3411,6 +3454,79 @@ mod bsp_volunteer { }); } + #[test] + fn bsp_volunteer_above_threshold_high_fail_even_with_spamming() { + new_test_ext().execute_with(|| { + let owner_account_id = Keyring::Alice.to_account_id(); + let owner_signed = RuntimeOrigin::signed(owner_account_id.clone()); + let bsp_account_id = Keyring::Bob.to_account_id(); + let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); + let msp = Keyring::Charlie.to_account_id(); + let location = FileLocation::::try_from(b"test".to_vec()).unwrap(); + let size = 4; + let file_content = b"test".to_vec(); + let fingerprint = BlakeTwo256::hash(&file_content); + let peer_id = BoundedVec::try_from(vec![1]).unwrap(); + let peer_ids: PeerIds = BoundedVec::try_from(vec![peer_id]).unwrap(); + let storage_amount: StorageData = 100; + + let msp_id = add_msp_to_provider_storage(&msp); + + let name = BoundedVec::try_from(b"bucket".to_vec()).unwrap(); + let bucket_id = create_bucket(&owner_account_id.clone(), name, msp_id); + + // Sign up account as a Backup Storage Provider + assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount,)); + + // Get BSP ID. + let bsp_id = Providers::get_provider_id(bsp_account_id.clone()).unwrap(); + + // Dispatch storage request. + assert_ok!(FileSystem::issue_storage_request( + owner_signed.clone(), + bucket_id, + location.clone(), + fingerprint, + size, + msp_id, + peer_ids.clone(), + )); + + // Compute the file key to volunteer for. + let file_key = FileSystem::compute_file_key( + owner_account_id.clone(), + bucket_id, + location.clone(), + size, + fingerprint, + ); + + // Set a somewhat high block range to maximum threshold. + assert_ok!(FileSystem::set_global_parameters( + RuntimeOrigin::root(), + None, + Some(40) + )); + + // Calculate how many ticks until this BSP can volunteer for the file. + let current_tick = ProofsDealer::get_current_tick(); + let tick_when_bsp_can_volunteer = + FileSystem::query_earliest_file_volunteer_tick(bsp_id, file_key).unwrap(); + let ticks_to_advance = tick_when_bsp_can_volunteer - current_tick + 1; + let current_block = System::block_number(); + + // Advance by the number of ticks until this BSP can volunteer for the file. + // In the process, this BSP will spam the chain to prevent others from volunteering and confirming. + roll_to_spammed(current_block + ticks_to_advance); + + // Dispatch BSP volunteer. + assert_noop!( + FileSystem::bsp_volunteer(bsp_signed.clone(), file_key), + Error::::AboveThreshold + ); + }); + } + #[test] fn bsp_volunteer_with_insufficient_capacity() { new_test_ext().execute_with(|| { @@ -3432,33 +3548,26 @@ mod bsp_volunteer { // Dispatch storage request. assert_ok!(FileSystem::issue_storage_request( - origin, - bucket_id, - location.clone(), - fingerprint, - 4, - msp_id, - peer_ids.clone(), - )); + origin, + bucket_id, + location.clone(), + fingerprint, + 4, + msp_id, + peer_ids.clone(), + )); // Sign up account as a Backup Storage Provider assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id.clone(), - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id.clone()).unwrap(); - pallet_storage_providers::BackupStorageProviders::::mutate( - bsp_id, - |bsp| { - assert!(bsp.is_some()); - if let Some(bsp) = bsp { - bsp.capacity = 0; - } - }, - ); + pallet_storage_providers::BackupStorageProviders::::mutate(bsp_id, |bsp| { + assert!(bsp.is_some()); + if let Some(bsp) = bsp { + bsp.capacity = 0; + } + }); let file_key = FileSystem::compute_file_key( owner.clone(), @@ -3502,14 +3611,14 @@ mod bsp_volunteer { // Dispatch storage request. assert_ok!(FileSystem::issue_storage_request( - origin, - bucket_id, - location.clone(), - fingerprint, - 4, - msp_id, - peer_ids.clone(), - )); + origin, + bucket_id, + location.clone(), + fingerprint, + 4, + msp_id, + peer_ids.clone(), + )); // Sign up account as a Backup Storage Provider assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); @@ -3522,11 +3631,7 @@ mod bsp_volunteer { fingerprint, ); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); // Dispatch BSP volunteer. assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key)); @@ -3552,24 +3657,16 @@ mod bsp_volunteer { owner, size, } - .into(), + .into(), ); }); } - } -} - -mod bsp_confirm { - use super::*; - mod failure { - use pallet_storage_providers::types::ReputationWeightType; - - use super::*; #[test] - fn bsp_actions_not_a_bsp_fail() { + fn bsp_volunteer_succeeds_after_waiting_enough_blocks_without_spam() { new_test_ext().execute_with(|| { let owner_account_id = Keyring::Alice.to_account_id(); + let owner_signed = RuntimeOrigin::signed(owner_account_id.clone()); let bsp_account_id = Keyring::Bob.to_account_id(); let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); let msp = Keyring::Charlie.to_account_id(); @@ -3579,15 +3676,22 @@ mod bsp_confirm { let fingerprint = BlakeTwo256::hash(&file_content); let peer_id = BoundedVec::try_from(vec![1]).unwrap(); let peer_ids: PeerIds = BoundedVec::try_from(vec![peer_id]).unwrap(); + let storage_amount: StorageData = 100; let msp_id = add_msp_to_provider_storage(&msp); - let name = BoundedVec::try_from(vec![1]).unwrap(); + let name = BoundedVec::try_from(b"bucket".to_vec()).unwrap(); let bucket_id = create_bucket(&owner_account_id.clone(), name, msp_id); + // Sign up account as a Backup Storage Provider + assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount,)); + + // Get BSP ID. + let bsp_id = Providers::get_provider_id(bsp_account_id.clone()).unwrap(); + // Dispatch storage request. assert_ok!(FileSystem::issue_storage_request( - RuntimeOrigin::signed(owner_account_id.clone()), + owner_signed.clone(), bucket_id, location.clone(), fingerprint, @@ -3596,6 +3700,7 @@ mod bsp_confirm { peer_ids.clone(), )); + // Compute the file key to volunteer for. let file_key = FileSystem::compute_file_key( owner_account_id.clone(), bucket_id, @@ -3604,24 +3709,117 @@ mod bsp_confirm { fingerprint, ); - assert_noop!( - FileSystem::bsp_confirm_storing( - bsp_signed.clone(), - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - }, - BoundedVec::try_from(vec![( - file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - } - )]) - .unwrap(), - ), - Error::::NotABsp - ); - }); - } + // Set a somewhat high block range to maximum threshold. + assert_ok!(FileSystem::set_global_parameters( + RuntimeOrigin::root(), + None, + Some(40) + )); + + // Calculate how many ticks until this BSP can volunteer for the file. + let current_tick = ProofsDealer::get_current_tick(); + let tick_when_bsp_can_volunteer = + FileSystem::query_earliest_file_volunteer_tick(bsp_id, file_key).unwrap(); + let ticks_to_advance = tick_when_bsp_can_volunteer - current_tick + 1; + let current_block = System::block_number(); + + // Advance by the number of ticks until this BSP can volunteer for the file. + roll_to(current_block + ticks_to_advance); + + // Dispatch BSP volunteer. + assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key)); + + // Assert that the RequestStorageBsps has the correct value + assert_eq!( + FileSystem::storage_request_bsps(file_key, bsp_id) + .expect("BSP should exist in storage"), + StorageRequestBspsMetadata:: { + confirmed: false, + _phantom: Default::default() + } + ); + + // Assert that the correct event was deposited + System::assert_last_event( + Event::AcceptedBspVolunteer { + bsp_id, + bucket_id, + location, + fingerprint, + multiaddresses: create_sp_multiaddresses(), + owner: owner_account_id, + size, + } + .into(), + ); + }); + } + } +} + +mod bsp_confirm { + use super::*; + mod failure { + use pallet_storage_providers::types::ReputationWeightType; + + use super::*; + + #[test] + fn bsp_actions_not_a_bsp_fail() { + new_test_ext().execute_with(|| { + let owner_account_id = Keyring::Alice.to_account_id(); + let bsp_account_id = Keyring::Bob.to_account_id(); + let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); + let msp = Keyring::Charlie.to_account_id(); + let location = FileLocation::::try_from(b"test".to_vec()).unwrap(); + let size = 4; + let file_content = b"test".to_vec(); + let fingerprint = BlakeTwo256::hash(&file_content); + let peer_id = BoundedVec::try_from(vec![1]).unwrap(); + let peer_ids: PeerIds = BoundedVec::try_from(vec![peer_id]).unwrap(); + + let msp_id = add_msp_to_provider_storage(&msp); + + let name = BoundedVec::try_from(vec![1]).unwrap(); + let bucket_id = create_bucket(&owner_account_id.clone(), name, msp_id); + + // Dispatch storage request. + assert_ok!(FileSystem::issue_storage_request( + RuntimeOrigin::signed(owner_account_id.clone()), + bucket_id, + location.clone(), + fingerprint, + size, + msp_id, + peer_ids.clone(), + )); + + let file_key = FileSystem::compute_file_key( + owner_account_id.clone(), + bucket_id, + location.clone(), + size, + fingerprint, + ); + + assert_noop!( + FileSystem::bsp_confirm_storing( + bsp_signed.clone(), + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + }, + BoundedVec::try_from(vec![( + file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )]) + .unwrap(), + ), + Error::::NotABsp + ); + }); + } #[test] fn bsp_confirm_storing_storage_request_not_found_fail() { @@ -3851,9 +4049,7 @@ mod bsp_confirm { // Sign up account as a Backup Storage Provider assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_id = <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id.clone(), - ).unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id.clone()).unwrap(); // Force BSP to pass all threshold checks when volunteering. pallet_storage_providers::BackupStorageProviders::::mutate(&bsp_id, |bsp| { @@ -3866,7 +4062,8 @@ mod bsp_confirm { // Issue 5 storage requests and volunteer for each for i in 0..5 { - let location = FileLocation::::try_from(format!("test{}", i).into_bytes()).unwrap(); + let location = + FileLocation::::try_from(format!("test{}", i).into_bytes()).unwrap(); let fingerprint = H256::repeat_byte(i as u8); let name = BoundedVec::try_from(format!("bucket{}", i).into_bytes()).unwrap(); @@ -3909,12 +4106,18 @@ mod bsp_confirm { encoded_nodes: vec![H256::default().as_ref().to_vec()], }; - let file_keys_and_proofs: BoundedVec<_, ::MaxBatchConfirmStorageRequests> = file_keys + let file_keys_and_proofs: BoundedVec< + _, + ::MaxBatchConfirmStorageRequests, + > = file_keys .into_iter() .map(|file_key| { - (file_key, CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }) + ( + file_key, + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + ) }) .collect::>() .try_into() @@ -3960,14 +4163,14 @@ mod bsp_confirm { // Dispatch storage request. assert_ok!(FileSystem::issue_storage_request( - owner_signed.clone(), - bucket_id, - location.clone(), - fingerprint, - size, - msp_id, - peer_ids.clone(), - )); + owner_signed.clone(), + bucket_id, + location.clone(), + fingerprint, + size, + msp_id, + peer_ids.clone(), + )); // Sign up account as a Backup Storage Provider assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); @@ -3980,18 +4183,13 @@ mod bsp_confirm { fingerprint, ); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id.clone(), - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id.clone()).unwrap(); // Dispatch BSP volunteer. assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key,)); - // In this case, the tick number is going to be equal to the current block number - // minus one (on_poll hook not executed in first block) - let tick_when_confirming = System::block_number() - 1; + // Get the current tick number. + let tick_when_confirming = ProofsDealer::get_current_tick(); // Dispatch BSP confirm storing. assert_ok!(FileSystem::bsp_confirm_storing( @@ -3999,11 +4197,13 @@ mod bsp_confirm { CompactProof { encoded_nodes: vec![H256::default().as_ref().to_vec()], }, - BoundedVec::try_from(vec![(file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - })]).unwrap() - , + BoundedVec::try_from(vec![( + file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )]) + .unwrap(), )); // Assert that the storage was updated @@ -4043,11 +4243,7 @@ mod bsp_confirm { fingerprint, ); - let new_root = - <::Providers as shp_traits::ReadProvidersInterface>::get_root( - bsp_id, - ) - .unwrap(); + let new_root = Providers::get_root(bsp_id).unwrap(); // Assert that the correct event was deposited System::assert_last_event( @@ -4057,7 +4253,7 @@ mod bsp_confirm { file_keys: BoundedVec::try_from(vec![file_key]).unwrap(), new_root, } - .into(), + .into(), ); // Assert that the proving cycle was initialised for this BSP. @@ -4071,7 +4267,7 @@ mod bsp_confirm { who: bsp_account_id, bsp_id, } - .into(), + .into(), ); // Assert that the payment stream between the BSP and the user has been created @@ -4122,7 +4318,7 @@ mod bsp_confirm { ); let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( + Providers::get_provider_id( bsp_account_id.clone(), ) .unwrap(); @@ -4130,9 +4326,8 @@ mod bsp_confirm { // Dispatch BSP volunteer. assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key,)); - // In this case, the tick number is going to be equal to the current block number - // minus one (on_poll hook not executed in first block) - let tick_when_confirming = System::block_number() - 1; + // Get the current tick number. + let tick_when_confirming = ProofsDealer::get_current_tick(); // Dispatch BSP confirm storing. assert_ok!(FileSystem::bsp_confirm_storing( @@ -4177,7 +4372,7 @@ mod bsp_confirm { ); let new_root = - <::Providers as shp_traits::ReadProvidersInterface>::get_root( + Providers::get_root( bsp_id, ) .unwrap(); @@ -4280,7 +4475,7 @@ mod bsp_confirm { ); let new_root = - <::Providers as shp_traits::ReadProvidersInterface>::get_root( + Providers::get_root( bsp_id, ) .unwrap(); @@ -4388,14 +4583,14 @@ mod bsp_stop_storing { // Dispatch storage request. assert_ok!(FileSystem::issue_storage_request( - owner.clone(), - bucket_id, - location.clone(), - fingerprint, - size, - msp_id, - peer_ids.clone(), - )); + owner.clone(), + bucket_id, + location.clone(), + fingerprint, + size, + msp_id, + peer_ids.clone(), + )); // Sign up account as a Backup Storage Provider assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); @@ -4408,11 +4603,7 @@ mod bsp_stop_storing { fingerprint, ); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); // Dispatch BSP volunteer. assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key,)); @@ -4422,11 +4613,14 @@ mod bsp_stop_storing { bsp_signed.clone(), CompactProof { encoded_nodes: vec![H256::default().as_ref().to_vec()], - },BoundedVec::try_from(vec![(file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - })]).unwrap() - , + }, + BoundedVec::try_from(vec![( + file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )]) + .unwrap(), )); // Assert that the RequestStorageBsps now contains the BSP under the location @@ -4467,20 +4661,22 @@ mod bsp_stop_storing { ); // Dispatch BSP stop storing. - assert_noop!(FileSystem::bsp_request_stop_storing( - bsp_signed.clone(), - file_key, - bucket_id, - location.clone(), - owner_account_id.clone(), - fingerprint, - size, - false, - CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }, - ), Error::::InvalidFileKeyMetadata); - + assert_noop!( + FileSystem::bsp_request_stop_storing( + bsp_signed.clone(), + file_key, + bucket_id, + location.clone(), + owner_account_id.clone(), + fingerprint, + size, + false, + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + ), + Error::::InvalidFileKeyMetadata + ); }); } @@ -4506,14 +4702,14 @@ mod bsp_stop_storing { // Dispatch storage request. assert_ok!(FileSystem::issue_storage_request( - owner.clone(), - bucket_id, - location.clone(), - fingerprint, - size, - msp_id, - peer_ids.clone(), - )); + owner.clone(), + bucket_id, + location.clone(), + fingerprint, + size, + msp_id, + peer_ids.clone(), + )); // Sign up account as a Backup Storage Provider assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); @@ -4526,11 +4722,7 @@ mod bsp_stop_storing { fingerprint, ); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); // Dispatch BSP volunteer. assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key,)); @@ -4540,11 +4732,14 @@ mod bsp_stop_storing { bsp_signed.clone(), CompactProof { encoded_nodes: vec![H256::default().as_ref().to_vec()], - },BoundedVec::try_from(vec![(file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - })]).unwrap() - , + }, + BoundedVec::try_from(vec![( + file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )]) + .unwrap(), )); // Assert that the RequestStorageBsps now contains the BSP under the location @@ -4586,37 +4781,39 @@ mod bsp_stop_storing { // Dispatch BSP request stop storing. assert_ok!(FileSystem::bsp_request_stop_storing( - bsp_signed.clone(), - file_key, - bucket_id, - location.clone(), - owner_account_id.clone(), - fingerprint, - size, - false, - CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }, - )); - - // Check that the request now exists. - assert!(PendingStopStoringRequests::::get(&bsp_id, &file_key).is_some()); + bsp_signed.clone(), + file_key, + bucket_id, + location.clone(), + owner_account_id.clone(), + fingerprint, + size, + false, + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + )); - // Try sending the stop storing request again. - assert_noop!(FileSystem::bsp_request_stop_storing( - bsp_signed.clone(), - file_key, - bucket_id, - location.clone(), - owner_account_id.clone(), - fingerprint, - size, - false, - CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }, - ), Error::::PendingStopStoringRequestAlreadyExists); + // Check that the request now exists. + assert!(PendingStopStoringRequests::::get(&bsp_id, &file_key).is_some()); + // Try sending the stop storing request again. + assert_noop!( + FileSystem::bsp_request_stop_storing( + bsp_signed.clone(), + file_key, + bucket_id, + location.clone(), + owner_account_id.clone(), + fingerprint, + size, + false, + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + ), + Error::::PendingStopStoringRequestAlreadyExists + ); }); } @@ -4642,14 +4839,14 @@ mod bsp_stop_storing { // Dispatch storage request. assert_ok!(FileSystem::issue_storage_request( - owner.clone(), - bucket_id, - location.clone(), - fingerprint, - size, - msp_id, - peer_ids.clone(), - )); + owner.clone(), + bucket_id, + location.clone(), + fingerprint, + size, + msp_id, + peer_ids.clone(), + )); // Sign up account as a Backup Storage Provider assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); @@ -4662,11 +4859,7 @@ mod bsp_stop_storing { fingerprint, ); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); // Dispatch BSP volunteer. assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key,)); @@ -4676,11 +4869,14 @@ mod bsp_stop_storing { bsp_signed.clone(), CompactProof { encoded_nodes: vec![H256::default().as_ref().to_vec()], - },BoundedVec::try_from(vec![(file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - })]).unwrap() - , + }, + BoundedVec::try_from(vec![( + file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )]) + .unwrap(), )); // Assert that the RequestStorageBsps now contains the BSP under the location @@ -4722,18 +4918,18 @@ mod bsp_stop_storing { // Dispatch BSP request stop storing. assert_ok!(FileSystem::bsp_request_stop_storing( - bsp_signed.clone(), - file_key, - bucket_id, - location.clone(), - owner_account_id.clone(), - fingerprint, - size, - false, - CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }, - )); + bsp_signed.clone(), + file_key, + bucket_id, + location.clone(), + owner_account_id.clone(), + fingerprint, + size, + false, + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + )); // Assert that the RequestStorageBsps has the correct value assert!(FileSystem::storage_request_bsps(file_key, bsp_id).is_none()); @@ -4757,8 +4953,8 @@ mod bsp_stop_storing { }) ); - // Assert that the request was added to the pending stop storing requests. - assert!(PendingStopStoringRequests::::get(&bsp_id, &file_key).is_some()); + // Assert that the request was added to the pending stop storing requests. + assert!(PendingStopStoringRequests::::get(&bsp_id, &file_key).is_some()); // Assert that the correct event was deposited System::assert_last_event( @@ -4768,20 +4964,23 @@ mod bsp_stop_storing { owner: owner_account_id, location, } - .into(), + .into(), ); - // Dispatch BSP confirm stop storing. - assert_noop!(FileSystem::bsp_confirm_stop_storing( - bsp_signed.clone(), - file_key, - CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }, - ), Error::::MinWaitForStopStoringNotReached); + // Dispatch BSP confirm stop storing. + assert_noop!( + FileSystem::bsp_confirm_stop_storing( + bsp_signed.clone(), + file_key, + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + ), + Error::::MinWaitForStopStoringNotReached + ); - // Assert that the pending stop storing request is still there. - assert!(PendingStopStoringRequests::::get(&bsp_id, &file_key).is_some()); + // Assert that the pending stop storing request is still there. + assert!(PendingStopStoringRequests::::get(&bsp_id, &file_key).is_some()); }); } } @@ -4811,14 +5010,14 @@ mod bsp_stop_storing { // Dispatch storage request. assert_ok!(FileSystem::issue_storage_request( - owner.clone(), - bucket_id, - location.clone(), - fingerprint, - size, - msp_id, - peer_ids.clone(), - )); + owner.clone(), + bucket_id, + location.clone(), + fingerprint, + size, + msp_id, + peer_ids.clone(), + )); // Sign up account as a Backup Storage Provider assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); @@ -4831,11 +5030,7 @@ mod bsp_stop_storing { fingerprint, ); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); // Dispatch BSP volunteer. assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key,)); @@ -4845,11 +5040,14 @@ mod bsp_stop_storing { bsp_signed.clone(), CompactProof { encoded_nodes: vec![H256::default().as_ref().to_vec()], - },BoundedVec::try_from(vec![(file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - })]).unwrap() - , + }, + BoundedVec::try_from(vec![( + file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )]) + .unwrap(), )); // Assert that the RequestStorageBsps now contains the BSP under the location @@ -4891,18 +5089,18 @@ mod bsp_stop_storing { // Dispatch BSP request stop storing. assert_ok!(FileSystem::bsp_request_stop_storing( - bsp_signed.clone(), - file_key, - bucket_id, - location.clone(), - owner_account_id.clone(), - fingerprint, - size, - false, - CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }, - )); + bsp_signed.clone(), + file_key, + bucket_id, + location.clone(), + owner_account_id.clone(), + fingerprint, + size, + false, + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + )); // Assert that the RequestStorageBsps has the correct value assert!(FileSystem::storage_request_bsps(file_key, bsp_id).is_none()); @@ -4926,8 +5124,8 @@ mod bsp_stop_storing { }) ); - // Assert that the request was added to the pending stop storing requests. - assert!(PendingStopStoringRequests::::get(&bsp_id, &file_key).is_some()); + // Assert that the request was added to the pending stop storing requests. + assert!(PendingStopStoringRequests::::get(&bsp_id, &file_key).is_some()); // Assert that the correct event was deposited System::assert_last_event( @@ -4937,7 +5135,7 @@ mod bsp_stop_storing { owner: owner_account_id, location, } - .into(), + .into(), ); }); } @@ -4964,14 +5162,14 @@ mod bsp_stop_storing { // Dispatch storage request. assert_ok!(FileSystem::issue_storage_request( - owner.clone(), - bucket_id, - location.clone(), - fingerprint, - size, - msp_id, - peer_ids.clone(), - )); + owner.clone(), + bucket_id, + location.clone(), + fingerprint, + size, + msp_id, + peer_ids.clone(), + )); // Sign up account as a Backup Storage Provider assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); @@ -4984,11 +5182,7 @@ mod bsp_stop_storing { fingerprint, ); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); // Dispatch BSP volunteer. assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key,)); @@ -4998,11 +5192,14 @@ mod bsp_stop_storing { bsp_signed.clone(), CompactProof { encoded_nodes: vec![H256::default().as_ref().to_vec()], - },BoundedVec::try_from(vec![(file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - })]).unwrap() - , + }, + BoundedVec::try_from(vec![( + file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )]) + .unwrap(), )); // Assert that the RequestStorageBsps now contains the BSP under the location @@ -5044,18 +5241,18 @@ mod bsp_stop_storing { // Dispatch BSP request stop storing. assert_ok!(FileSystem::bsp_request_stop_storing( - bsp_signed.clone(), - file_key, - bucket_id, - location.clone(), - owner_account_id.clone(), - fingerprint, - size, - false, - CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }, - )); + bsp_signed.clone(), + file_key, + bucket_id, + location.clone(), + owner_account_id.clone(), + fingerprint, + size, + false, + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + )); // Assert that the RequestStorageBsps has the correct value assert!(FileSystem::storage_request_bsps(file_key, bsp_id).is_none()); @@ -5079,8 +5276,8 @@ mod bsp_stop_storing { }) ); - // Assert that the request was added to the pending stop storing requests. - assert!(PendingStopStoringRequests::::get(&bsp_id, &file_key).is_some()); + // Assert that the request was added to the pending stop storing requests. + assert!(PendingStopStoringRequests::::get(&bsp_id, &file_key).is_some()); // Assert that the correct event was deposited System::assert_last_event( @@ -5090,39 +5287,37 @@ mod bsp_stop_storing { owner: owner_account_id, location, } - .into(), + .into(), ); - // Advance enough blocks to allow the BSP to confirm the stop storing request. - roll_to(frame_system::Pallet::::block_number() + MinWaitForStopStoring::get()); + // Advance enough blocks to allow the BSP to confirm the stop storing request. + roll_to( + frame_system::Pallet::::block_number() + MinWaitForStopStoring::get(), + ); - // Dispatch BSP confirm stop storing. - assert_ok!(FileSystem::bsp_confirm_stop_storing( - bsp_signed.clone(), - file_key, - CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }, - )); + // Dispatch BSP confirm stop storing. + assert_ok!(FileSystem::bsp_confirm_stop_storing( + bsp_signed.clone(), + file_key, + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + )); - // Assert that the pending stop storing request was removed. - assert!(PendingStopStoringRequests::::get(&bsp_id, &file_key).is_none()); + // Assert that the pending stop storing request was removed. + assert!(PendingStopStoringRequests::::get(&bsp_id, &file_key).is_none()); - // Assert that the correct event was deposited. - let new_root = - <::Providers as shp_traits::ReadProvidersInterface>::get_root( - bsp_id, - ) - .unwrap(); + // Assert that the correct event was deposited. + let new_root = Providers::get_root(bsp_id).unwrap(); - System::assert_last_event( - Event::BspConfirmStoppedStoring { - bsp_id, - file_key, - new_root, - } - .into(), - ); + System::assert_last_event( + Event::BspConfirmStoppedStoring { + bsp_id, + file_key, + new_root, + } + .into(), + ); }); } @@ -5146,14 +5341,14 @@ mod bsp_stop_storing { // Dispatch storage request. assert_ok!(FileSystem::issue_storage_request( - owner.clone(), - bucket_id, - location.clone(), - fingerprint, - size, - msp_id, - Default::default(), - )); + owner.clone(), + bucket_id, + location.clone(), + fingerprint, + size, + msp_id, + Default::default(), + )); // Sign up account as a Backup Storage Provider assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); @@ -5166,11 +5361,7 @@ mod bsp_stop_storing { fingerprint, ); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); // Dispatch BSP volunteer. assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key)); @@ -5181,10 +5372,13 @@ mod bsp_stop_storing { CompactProof { encoded_nodes: vec![H256::default().as_ref().to_vec()], }, - BoundedVec::try_from(vec![(file_key, - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - })]).unwrap() + BoundedVec::try_from(vec![( + file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )]) + .unwrap() )); let file_key = FileSystem::compute_file_key( @@ -5197,18 +5391,18 @@ mod bsp_stop_storing { // Dispatch BSP stop storing. assert_ok!(FileSystem::bsp_request_stop_storing( - bsp_signed.clone(), - file_key, - bucket_id, - location.clone(), - owner_account_id.clone(), - H256::zero(), - size, - false, - CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }, - )); + bsp_signed.clone(), + file_key, + bucket_id, + location.clone(), + owner_account_id.clone(), + H256::zero(), + size, + false, + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + )); // Assert that the RequestStorageBsps has the correct value assert!(FileSystem::storage_request_bsps(file_key, bsp_id).is_none()); @@ -5240,7 +5434,7 @@ mod bsp_stop_storing { owner: owner_account_id, location, } - .into(), + .into(), ); }); } @@ -5265,23 +5459,19 @@ mod bsp_stop_storing { // Dispatch storage request. assert_ok!(FileSystem::issue_storage_request( - owner.clone(), - bucket_id, - location.clone(), - fingerprint, - size, - msp_id, - Default::default(), - )); + owner.clone(), + bucket_id, + location.clone(), + fingerprint, + size, + msp_id, + Default::default(), + )); // Sign up account as a Backup Storage Provider assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); let file_key = FileSystem::compute_file_key( owner_account_id.clone(), @@ -5292,24 +5482,22 @@ mod bsp_stop_storing { ); // Increase the data used by the registered bsp, to simulate that it is indeed storing the file - assert_ok!(<::Providers as shp_traits::MutateStorageProvidersInterface>::increase_capacity_used( - &bsp_id, size, - )); + assert_ok!(Providers::increase_capacity_used(&bsp_id, size,)); // Dispatch BSP stop storing. assert_ok!(FileSystem::bsp_request_stop_storing( - bsp_signed.clone(), - file_key, - bucket_id, - location.clone(), - owner_account_id.clone(), - fingerprint, - size, - false, - CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }, - )); + bsp_signed.clone(), + file_key, + bucket_id, + location.clone(), + owner_account_id.clone(), + fingerprint, + size, + false, + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + )); let current_bsps_required: ::ReplicationTargetType = ReplicationTarget::::get(); @@ -5341,7 +5529,7 @@ mod bsp_stop_storing { owner: owner_account_id, location, } - .into(), + .into(), ); }); } @@ -5367,11 +5555,7 @@ mod bsp_stop_storing { // Sign up account as a Backup Storage Provider assert_ok!(bsp_sign_up(bsp_signed.clone(), 100)); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); let file_key = FileSystem::compute_file_key( owner_account_id.clone(), @@ -5382,24 +5566,22 @@ mod bsp_stop_storing { ); // Increase the data used by the registered bsp, to simulate that it is indeed storing the file - assert_ok!(<::Providers as shp_traits::MutateStorageProvidersInterface>::increase_capacity_used( - &bsp_id, size, - )); + assert_ok!(Providers::increase_capacity_used(&bsp_id, size,)); // Dispatch BSP stop storing. assert_ok!(FileSystem::bsp_request_stop_storing( - bsp_signed.clone(), - file_key, - bucket_id, - location.clone(), - owner_account_id.clone(), - fingerprint, - size, - false, - CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }, - )); + bsp_signed.clone(), + file_key, + bucket_id, + location.clone(), + owner_account_id.clone(), + fingerprint, + size, + false, + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + )); // Assert that the storage request was created with one bsps_required assert_eq!( @@ -5428,7 +5610,7 @@ mod bsp_stop_storing { owner: owner_account_id, location, } - .into(), + .into(), ); }); } @@ -5464,7 +5646,7 @@ mod set_global_parameters_tests { assert_noop!( FileSystem::set_global_parameters(RuntimeOrigin::root(), None, Some(0)), - Error::::BlockRangeToMaximumThresholdCannotBeZero + Error::::TickRangeToMaximumThresholdCannotBeZero ); }); } @@ -5487,7 +5669,7 @@ mod set_global_parameters_tests { // Assert that the global parameters were set correctly assert_eq!(ReplicationTarget::::get(), 3); - assert_eq!(BlockRangeToMaximumThreshold::::get(), 10); + assert_eq!(TickRangeToMaximumThreshold::::get(), 10); }); } } @@ -6055,7 +6237,7 @@ mod compute_threshold { mod success { use super::*; #[test] - fn query_earliest_file_volunteer_block() { + fn query_earliest_file_volunteer_tick() { new_test_ext().execute_with(|| { let owner_account_id = Keyring::Alice.to_account_id(); let user = RuntimeOrigin::signed(owner_account_id.clone()); @@ -6098,13 +6280,10 @@ mod compute_threshold { assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); - let block_number = FileSystem::query_earliest_file_volunteer_block(bsp_id, file_key).unwrap(); + let block_number = + FileSystem::query_earliest_file_volunteer_tick(bsp_id, file_key).unwrap(); assert!(frame_system::Pallet::::block_number() <= block_number); }); @@ -6154,43 +6333,56 @@ mod compute_threshold { assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); let storage_request = FileSystem::storage_requests(file_key).unwrap(); FileSystem::set_global_parameters(RuntimeOrigin::root(), None, Some(1)).unwrap(); - assert_eq!(BlockRangeToMaximumThreshold::::get(), 1); + assert_eq!(TickRangeToMaximumThreshold::::get(), 1); - let (threshold_to_succeed, slope) = FileSystem::compute_threshold_to_succeed(&bsp_id, storage_request.requested_at).unwrap(); + let (threshold_to_succeed, slope) = + FileSystem::compute_threshold_to_succeed(&bsp_id, storage_request.requested_at) + .unwrap(); - assert!(threshold_to_succeed > 0 && threshold_to_succeed <= ThresholdType::::max_value()); + assert!( + threshold_to_succeed > 0 + && threshold_to_succeed <= ThresholdType::::max_value() + ); assert!(slope > 0); - let block_number = FileSystem::query_earliest_file_volunteer_block(bsp_id, file_key).unwrap(); + let block_number = + FileSystem::query_earliest_file_volunteer_tick(bsp_id, file_key).unwrap(); - // BSP should be able to volunteer immediately for the storage request since the BlockRangeToMaximumThreshold is 1 + // BSP should be able to volunteer immediately for the storage request since the TickRangeToMaximumThreshold is 1 assert_eq!(block_number, frame_system::Pallet::::block_number()); - let starting_bsp_weight: pallet_storage_providers::types::ReputationWeightType = ::StartingReputationWeight::get(); + let starting_bsp_weight: pallet_storage_providers::types::ReputationWeightType< + Test, + > = ::StartingReputationWeight::get(); // Simulate there being many BSPs in the network with high reputation weight - pallet_storage_providers::GlobalBspsReputationWeight::::set(1000u32.saturating_mul(starting_bsp_weight.into())); + pallet_storage_providers::GlobalBspsReputationWeight::::set( + 1000u32.saturating_mul(starting_bsp_weight.into()), + ); - FileSystem::set_global_parameters(RuntimeOrigin::root(), None, Some(1000000000)).unwrap(); + FileSystem::set_global_parameters(RuntimeOrigin::root(), None, Some(1000000000)) + .unwrap(); - assert_eq!(BlockRangeToMaximumThreshold::::get(), 1000000000); + assert_eq!(TickRangeToMaximumThreshold::::get(), 1000000000); - let (threshold_to_succeed, slope) = FileSystem::compute_threshold_to_succeed(&bsp_id, storage_request.requested_at).unwrap(); + let (threshold_to_succeed, slope) = + FileSystem::compute_threshold_to_succeed(&bsp_id, storage_request.requested_at) + .unwrap(); - assert!(threshold_to_succeed > 0 && threshold_to_succeed <= ThresholdType::::max_value()); + assert!( + threshold_to_succeed > 0 + && threshold_to_succeed <= ThresholdType::::max_value() + ); assert!(slope > 0); - let block_number = FileSystem::query_earliest_file_volunteer_block(bsp_id, file_key).unwrap(); + let block_number = + FileSystem::query_earliest_file_volunteer_tick(bsp_id, file_key).unwrap(); // BSP can only volunteer after some number of blocks have passed. assert!(block_number > frame_system::Pallet::::block_number()); @@ -6207,12 +6399,18 @@ mod compute_threshold { } }); - let (threshold_to_succeed, slope) = FileSystem::compute_threshold_to_succeed(&bsp_id, storage_request.requested_at).unwrap(); + let (threshold_to_succeed, slope) = + FileSystem::compute_threshold_to_succeed(&bsp_id, storage_request.requested_at) + .unwrap(); - assert!(threshold_to_succeed > 0 && threshold_to_succeed <= ThresholdType::::max_value()); + assert!( + threshold_to_succeed > 0 + && threshold_to_succeed <= ThresholdType::::max_value() + ); assert!(slope > 0); - let block_number = FileSystem::query_earliest_file_volunteer_block(bsp_id, file_key).unwrap(); + let block_number = + FileSystem::query_earliest_file_volunteer_tick(bsp_id, file_key).unwrap(); // BSP should be able to volunteer immediately for the storage request since the reputation weight is so high. assert_eq!(block_number, frame_system::Pallet::::block_number()); @@ -6263,11 +6461,7 @@ mod compute_threshold { assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); // Set reputation weight of BSP to max pallet_storage_providers::BackupStorageProviders::::mutate(&bsp_id, |bsp| { @@ -6283,14 +6477,16 @@ mod compute_threshold { FileSystem::set_global_parameters(RuntimeOrigin::root(), None, Some(1)).unwrap(); - assert_eq!(BlockRangeToMaximumThreshold::::get(), 1); + assert_eq!(TickRangeToMaximumThreshold::::get(), 1); - let (threshold_to_succeed, slope) = FileSystem::compute_threshold_to_succeed(&bsp_id, 0).unwrap(); + let (threshold_to_succeed, slope) = + FileSystem::compute_threshold_to_succeed(&bsp_id, 0).unwrap(); assert_eq!(threshold_to_succeed, ThresholdType::::max_value()); assert!(slope > 0); - let block_number = FileSystem::query_earliest_file_volunteer_block(bsp_id, file_key).unwrap(); + let block_number = + FileSystem::query_earliest_file_volunteer_tick(bsp_id, file_key).unwrap(); // BSP should be able to volunteer immediately for the storage request since the reputation weight is so high. assert_eq!(block_number, frame_system::Pallet::::block_number()); @@ -6304,11 +6500,7 @@ mod compute_threshold { let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); let storage_amount: StorageData = 100; assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); // Set global_weight to zero pallet_storage_providers::GlobalBspsReputationWeight::::set(0); @@ -6329,16 +6521,12 @@ mod compute_threshold { let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); let storage_amount: StorageData = 100; assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); - // Set BlockRangeToMaximumThreshold to one + // Set TickRangeToMaximumThreshold to one FileSystem::set_global_parameters(RuntimeOrigin::root(), None, Some(1)).unwrap(); - assert_eq!(BlockRangeToMaximumThreshold::::get(), 1); + assert_eq!(TickRangeToMaximumThreshold::::get(), 1); let requested_at = frame_system::Pallet::::block_number(); @@ -6361,11 +6549,7 @@ mod compute_threshold { let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); let storage_amount: StorageData = 100; assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id).unwrap(); // Set global_weight to 1 pallet_storage_providers::GlobalBspsReputationWeight::::set(1); @@ -6373,7 +6557,7 @@ mod compute_threshold { // Set ReplicationTarget to 2 ReplicationTarget::::set(2); - // Set BlockRangeToMaximumThreshold to a non-zero value + // Set TickRangeToMaximumThreshold to a non-zero value FileSystem::set_global_parameters(RuntimeOrigin::root(), None, Some(100)).unwrap(); // Set max reputation weight @@ -6398,37 +6582,29 @@ mod compute_threshold { } #[test] - fn bsp_with_heigher_weight_should_have_higher_slope() { + fn bsp_with_higher_weight_should_have_higher_slope() { new_test_ext().execute_with(|| { // Setup: create a BSP let bsp_account_id = Keyring::Bob.to_account_id(); let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); let storage_amount: StorageData = 100; assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_bob_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_bob_id = Providers::get_provider_id(bsp_account_id).unwrap(); // Create another BSP with higher weight let bsp_account_id = Keyring::Charlie.to_account_id(); let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); let storage_amount: StorageData = 100; assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_charlie_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_charlie_id = Providers::get_provider_id(bsp_account_id).unwrap(); - // Set global_weight to 1 - pallet_storage_providers::GlobalBspsReputationWeight::::set(1); + // Set global_weight to the sum of the two BSPs reputation weights + pallet_storage_providers::GlobalBspsReputationWeight::::set(10 + 1); // Set ReplicationTarget to 2 ReplicationTarget::::set(2); - // Set BlockRangeToMaximumThreshold to a non-zero value + // Set TickRangeToMaximumThreshold to a non-zero value FileSystem::set_global_parameters(RuntimeOrigin::root(), None, Some(100)).unwrap(); let requested_at = frame_system::Pallet::::block_number(); @@ -6436,21 +6612,22 @@ mod compute_threshold { let (_threshold_to_succeed, slope_bsp_1) = FileSystem::compute_threshold_to_succeed(&bsp_bob_id, requested_at).unwrap(); - - // Set BSP's reputation weight to max - pallet_storage_providers::BackupStorageProviders::::mutate(&bsp_charlie_id, |bsp| { - match bsp { + // Set BSP's reputation weight to 10 (10 times higher than the other BSP) + pallet_storage_providers::BackupStorageProviders::::mutate( + &bsp_charlie_id, + |bsp| match bsp { Some(bsp) => { - bsp.reputation_weight = u32::MAX; + bsp.reputation_weight = 10; } None => { panic!("BSP should exist"); } - } - }); + }, + ); let (_threshold_to_succeed, slope_bsp_2) = - FileSystem::compute_threshold_to_succeed(&bsp_charlie_id, requested_at).unwrap(); + FileSystem::compute_threshold_to_succeed(&bsp_charlie_id, requested_at) + .unwrap(); // BSP with higher weight should have higher slope assert!(slope_bsp_2 > slope_bsp_1); @@ -6465,29 +6642,21 @@ mod compute_threshold { let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); let storage_amount: StorageData = 100; assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_bob_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_bob_id = Providers::get_provider_id(bsp_account_id).unwrap(); // Create another BSP let bsp_account_id = Keyring::Charlie.to_account_id(); let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); let storage_amount: StorageData = 100; assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - let bsp_charlie_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id, - ) - .unwrap(); + let bsp_charlie_id = Providers::get_provider_id(bsp_account_id).unwrap(); - // Set global_weight to 1 - pallet_storage_providers::GlobalBspsReputationWeight::::set(1); + // Set global_weight to the sum of the weights of the BSPs + pallet_storage_providers::GlobalBspsReputationWeight::::set(1 + 1); // Set ReplicationTarget to 2 ReplicationTarget::::set(2); - // Set BlockRangeToMaximumThreshold to a non-zero value + // Set TickRangeToMaximumThreshold to a non-zero value FileSystem::set_global_parameters(RuntimeOrigin::root(), None, Some(100)).unwrap(); let requested_at = frame_system::Pallet::::block_number(); @@ -6496,9 +6665,10 @@ mod compute_threshold { FileSystem::compute_threshold_to_succeed(&bsp_bob_id, requested_at).unwrap(); let (_threshold_to_succeed, slope_bsp_2) = - FileSystem::compute_threshold_to_succeed(&bsp_charlie_id, requested_at).unwrap(); + FileSystem::compute_threshold_to_succeed(&bsp_charlie_id, requested_at) + .unwrap(); - // BSP with higher weight should have higher slope + // BSPs with equal weight should have equal slope assert_eq!(slope_bsp_2, slope_bsp_1); }); } @@ -6511,6 +6681,8 @@ mod stop_storing_for_insolvent_user { mod success { + use shp_traits::PaymentStreamsInterface; + use super::*; #[test] @@ -6555,18 +6727,13 @@ mod stop_storing_for_insolvent_user { fingerprint, ); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id.clone(), - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id.clone()).unwrap(); // Dispatch BSP volunteer. assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key,)); - // In this case, the tick number is going to be equal to the current block number - // minus one (on_poll hook not executed in first block) - let tick_when_confirming = System::block_number() - 1; + // Get the current tick number. + let tick_when_confirming = ProofsDealer::get_current_tick(); // Dispatch BSP confirm storing. assert_ok!(FileSystem::bsp_confirm_storing( @@ -6620,11 +6787,7 @@ mod stop_storing_for_insolvent_user { fingerprint, ); - let new_root = - <::Providers as shp_traits::ReadProvidersInterface>::get_root( - bsp_id, - ) - .unwrap(); + let new_root = Providers::get_root(bsp_id).unwrap(); // Assert that the correct event was deposited System::assert_last_event( @@ -6797,11 +6960,7 @@ mod stop_storing_for_insolvent_user { fingerprint, ); - let new_bucket_root = - <::Providers as shp_traits::ReadBucketsInterface>::get_root_bucket( - &bucket_id, - ) - .unwrap(); + let new_bucket_root = Providers::get_root_bucket(&bucket_id).unwrap(); // Assert that the correct event was deposited System::assert_last_event( @@ -6841,10 +7000,7 @@ mod stop_storing_for_insolvent_user { // Get the new bucket root after deletion let new_bucket_root_after_deletion = - <::Providers as shp_traits::ReadBucketsInterface>::get_root_bucket( - &bucket_id, - ) - .unwrap(); + Providers::get_root_bucket(&bucket_id).unwrap(); // Assert that the correct event was deposited System::assert_last_event( @@ -6871,185 +7027,178 @@ mod stop_storing_for_insolvent_user { #[test] fn stop_storing_for_insolvent_user_works_if_user_does_not_have_payment_stream_with_sp() { new_test_ext().execute_with(|| { - let owner_account_id = Keyring::Alice.to_account_id(); - let owner_signed = RuntimeOrigin::signed(owner_account_id.clone()); - let bsp_account_id = Keyring::Bob.to_account_id(); - let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); - let msp = Keyring::Charlie.to_account_id(); - let location = FileLocation::::try_from(b"test".to_vec()).unwrap(); - let size = 4; - let fingerprint = H256::zero(); - let peer_id = BoundedVec::try_from(vec![1]).unwrap(); - let peer_ids: PeerIds = BoundedVec::try_from(vec![peer_id]).unwrap(); - let storage_amount: StorageData = 100; - - let msp_id = add_msp_to_provider_storage(&msp); - - let name = BoundedVec::try_from(b"bucket".to_vec()).unwrap(); - let bucket_id = create_bucket(&owner_account_id.clone(), name, msp_id); - - // Dispatch storage request. - assert_ok!(FileSystem::issue_storage_request( - owner_signed.clone(), - bucket_id, - location.clone(), - fingerprint, - size, - msp_id, - peer_ids.clone(), - )); - - // Sign up account as a Backup Storage Provider - assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); - - let file_key = FileSystem::compute_file_key( - owner_account_id.clone(), - bucket_id, - location.clone(), - size, - fingerprint, - ); - - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id.clone(), - ) - .unwrap(); - - // Dispatch BSP volunteer. - assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key,)); - - // In this case, the tick number is going to be equal to the current block number - // minus one (on_poll hook not executed in first block) - let tick_when_confirming = System::block_number() - 1; - - // Dispatch BSP confirm storing. - assert_ok!(FileSystem::bsp_confirm_storing( - bsp_signed.clone(), - CompactProof { - encoded_nodes: vec![H256::default().as_ref().to_vec()], - }, - BoundedVec::try_from(vec![( - file_key, + let owner_account_id = Keyring::Alice.to_account_id(); + let owner_signed = RuntimeOrigin::signed(owner_account_id.clone()); + let bsp_account_id = Keyring::Bob.to_account_id(); + let bsp_signed = RuntimeOrigin::signed(bsp_account_id.clone()); + let msp = Keyring::Charlie.to_account_id(); + let location = FileLocation::::try_from(b"test".to_vec()).unwrap(); + let size = 4; + let fingerprint = H256::zero(); + let peer_id = BoundedVec::try_from(vec![1]).unwrap(); + let peer_ids: PeerIds = BoundedVec::try_from(vec![peer_id]).unwrap(); + let storage_amount: StorageData = 100; + + let msp_id = add_msp_to_provider_storage(&msp); + + let name = BoundedVec::try_from(b"bucket".to_vec()).unwrap(); + let bucket_id = create_bucket(&owner_account_id.clone(), name, msp_id); + + // Dispatch storage request. + assert_ok!(FileSystem::issue_storage_request( + owner_signed.clone(), + bucket_id, + location.clone(), + fingerprint, + size, + msp_id, + peer_ids.clone(), + )); + + // Sign up account as a Backup Storage Provider + assert_ok!(bsp_sign_up(bsp_signed.clone(), storage_amount)); + + let file_key = FileSystem::compute_file_key( + owner_account_id.clone(), + bucket_id, + location.clone(), + size, + fingerprint, + ); + + let bsp_id = Providers::get_provider_id(bsp_account_id.clone()).unwrap(); + + // Dispatch BSP volunteer. + assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key,)); + + // Get the current tick number. + let tick_when_confirming = ProofsDealer::get_current_tick(); + + // Dispatch BSP confirm storing. + assert_ok!(FileSystem::bsp_confirm_storing( + bsp_signed.clone(), CompactProof { encoded_nodes: vec![H256::default().as_ref().to_vec()], + }, + BoundedVec::try_from(vec![( + file_key, + CompactProof { + encoded_nodes: vec![H256::default().as_ref().to_vec()], + } + )]) + .unwrap(), + )); + + // Assert that the storage was updated + assert_eq!( + FileSystem::storage_requests(file_key), + Some(StorageRequestMetadata { + requested_at: 1, + owner: owner_account_id.clone(), + bucket_id, + location: location.clone(), + fingerprint, + size, + msp: Some((msp_id, false)), + user_peer_ids: peer_ids.clone(), + data_server_sps: BoundedVec::default(), + bsps_required: ReplicationTarget::::get(), + bsps_confirmed: 1, + bsps_volunteered: 1, + }) + ); + + // Assert that the RequestStorageBsps was updated + assert_eq!( + FileSystem::storage_request_bsps(file_key, bsp_id) + .expect("BSP should exist in storage"), + StorageRequestBspsMetadata:: { + confirmed: true, + _phantom: Default::default() + } + ); + + let new_root = Providers::get_root(bsp_id).unwrap(); + + // Assert that the correct event was deposited + System::assert_last_event( + Event::BspConfirmedStoring { + who: bsp_account_id.clone(), + bsp_id, + file_keys: BoundedVec::try_from(vec![file_key]).unwrap(), + new_root, + } + .into(), + ); + + // Assert that the proving cycle was initialised for this BSP. + let last_tick_provider_submitted_proof = + LastTickProviderSubmittedAProofFor::::get(&bsp_id).unwrap(); + assert_eq!(last_tick_provider_submitted_proof, tick_when_confirming); + + // Assert that the correct event was deposited. + System::assert_has_event( + Event::BspChallengeCycleInitialised { + who: bsp_account_id, + bsp_id, } - )]) - .unwrap(), - )); + .into(), + ); + + // Assert that the capacity used by the BSP was updated + assert_eq!( + pallet_storage_providers::BackupStorageProviders::::get(bsp_id) + .expect("BSP should exist in storage") + .capacity_used, + size + ); + + // Now that the BSP has confirmed storing, we can simulate the payment stream being deleted + // and the BSP stopping storing for the user. Note that we use Alice as a user for this test, + // which is NOT an insolvent user. This simulates the case where the user has correctly paid all + // its debt but a lagging SP has not updated its storage state yet. - // Assert that the storage was updated - assert_eq!( - FileSystem::storage_requests(file_key), - Some(StorageRequestMetadata { - requested_at: 1, - owner: owner_account_id.clone(), + // Delete the payment stream between the user and the BSP. + assert_ok!( + ::delete_dynamic_rate_payment_stream( + &bsp_id, + &owner_account_id, + ) + ); + // Try to stop storing the user's file as the BSP. + assert_ok!(FileSystem::stop_storing_for_insolvent_user( + bsp_signed.clone(), + file_key, bucket_id, - location: location.clone(), + location.clone(), + owner_account_id.clone(), fingerprint, size, - msp: Some((msp_id, false)), - user_peer_ids: peer_ids.clone(), - data_server_sps: BoundedVec::default(), - bsps_required: ReplicationTarget::::get(), - bsps_confirmed: 1, - bsps_volunteered: 1, - }) - ); - - // Assert that the RequestStorageBsps was updated - assert_eq!( - FileSystem::storage_request_bsps(file_key, bsp_id) - .expect("BSP should exist in storage"), - StorageRequestBspsMetadata:: { - confirmed: true, - _phantom: Default::default() - } - ); - - let new_root = - <::Providers as shp_traits::ReadProvidersInterface>::get_root( - bsp_id, - ) - .unwrap(); - - // Assert that the correct event was deposited - System::assert_last_event( - Event::BspConfirmedStoring { - who: bsp_account_id.clone(), - bsp_id, - file_keys: BoundedVec::try_from(vec![file_key]).unwrap(), - new_root, - } - .into(), - ); - - // Assert that the proving cycle was initialised for this BSP. - let last_tick_provider_submitted_proof = - LastTickProviderSubmittedAProofFor::::get(&bsp_id).unwrap(); - assert_eq!(last_tick_provider_submitted_proof, tick_when_confirming); - - // Assert that the correct event was deposited. - System::assert_has_event( - Event::BspChallengeCycleInitialised { - who: bsp_account_id, - bsp_id, - } - .into(), - ); - - // Assert that the capacity used by the BSP was updated - assert_eq!( - pallet_storage_providers::BackupStorageProviders::::get(bsp_id) - .expect("BSP should exist in storage") - .capacity_used, - size - ); - - // Now that the BSP has confirmed storing, we can simulate the payment stream being deleted - // and the BSP stopping storing for the user. Note that we use Alice as a user for this test, - // which is NOT an insolvent user. This simulates the case where the user has correctly paid all - // its debt but a lagging SP has not updated its storage state yet. - - // Delete the payment stream between the user and the BSP. - assert_ok!(<::PaymentStreams as shp_traits::PaymentStreamsInterface>::delete_dynamic_rate_payment_stream( - &bsp_id, - &owner_account_id, - )); - // Try to stop storing the user's file as the BSP. - assert_ok!(FileSystem::stop_storing_for_insolvent_user( - bsp_signed.clone(), - file_key, - bucket_id, - location.clone(), - owner_account_id.clone(), - fingerprint, - size, - CompactProof { - encoded_nodes: vec![file_key.as_ref().to_vec()], - }, - )); + CompactProof { + encoded_nodes: vec![file_key.as_ref().to_vec()], + }, + )); - // Assert that the correct event was deposited - System::assert_last_event( - Event::SpStopStoringInsolventUser { - sp_id: bsp_id, - file_key, - owner: owner_account_id, - location, - new_root, - } - .into(), - ); - - // Assert that the capacity used by the BSP was updated - assert_eq!( - pallet_storage_providers::BackupStorageProviders::::get(bsp_id) - .expect("BSP should exist in storage") - .capacity_used, - 0 - ); - }); + // Assert that the correct event was deposited + System::assert_last_event( + Event::SpStopStoringInsolventUser { + sp_id: bsp_id, + file_key, + owner: owner_account_id, + location, + new_root, + } + .into(), + ); + + // Assert that the capacity used by the BSP was updated + assert_eq!( + pallet_storage_providers::BackupStorageProviders::::get(bsp_id) + .expect("BSP should exist in storage") + .capacity_used, + 0 + ); + }); } } @@ -7134,18 +7283,13 @@ mod stop_storing_for_insolvent_user { fingerprint, ); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id.clone(), - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id.clone()).unwrap(); // Dispatch BSP volunteer. assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key,)); - // In this case, the tick number is going to be equal to the current block number - // minus one (on_poll hook not executed in first block) - let tick_when_confirming = System::block_number() - 1; + // Get the current tick number. + let tick_when_confirming = ProofsDealer::get_current_tick(); // Dispatch BSP confirm storing. assert_ok!(FileSystem::bsp_confirm_storing( @@ -7199,11 +7343,7 @@ mod stop_storing_for_insolvent_user { fingerprint, ); - let new_root = - <::Providers as shp_traits::ReadProvidersInterface>::get_root( - bsp_id, - ) - .unwrap(); + let new_root = Providers::get_root(bsp_id).unwrap(); // Assert that the correct event was deposited System::assert_last_event( @@ -7335,18 +7475,13 @@ mod stop_storing_for_insolvent_user { fingerprint, ); - let bsp_id = - <::Providers as shp_traits::ReadProvidersInterface>::get_provider_id( - bsp_account_id.clone(), - ) - .unwrap(); + let bsp_id = Providers::get_provider_id(bsp_account_id.clone()).unwrap(); // Dispatch BSP volunteer. assert_ok!(FileSystem::bsp_volunteer(bsp_signed.clone(), file_key,)); - // In this case, the tick number is going to be equal to the current block number - // minus one (on_poll hook not executed in first block) - let tick_when_confirming = System::block_number() - 1; + // Get the current tick number. + let tick_when_confirming = ProofsDealer::get_current_tick(); // Dispatch BSP confirm storing. assert_ok!(FileSystem::bsp_confirm_storing( @@ -7400,11 +7535,7 @@ mod stop_storing_for_insolvent_user { fingerprint, ); - let new_root = - <::Providers as shp_traits::ReadProvidersInterface>::get_root( - bsp_id, - ) - .unwrap(); + let new_root = Providers::get_root(bsp_id).unwrap(); // Assert that the correct event was deposited System::assert_last_event( diff --git a/pallets/file-system/src/types.rs b/pallets/file-system/src/types.rs index 450ed237c..c6832a366 100644 --- a/pallets/file-system/src/types.rs +++ b/pallets/file-system/src/types.rs @@ -22,11 +22,11 @@ use crate::{ #[derive(Encode, Decode, MaxEncodedLen, TypeInfo, Debug, PartialEq, Eq, Clone)] #[scale_info(skip_type_params(T))] pub struct StorageRequestMetadata { - /// Block number at which the storage request was made. + /// Tick number at which the storage request was made. /// /// Used primarily for tracking the age of the request which is useful for /// cleaning up old requests. - pub requested_at: BlockNumberFor, + pub requested_at: TickNumber, /// AccountId of the user who owns the data being stored. pub owner: T::AccountId, @@ -310,3 +310,7 @@ pub type FileDeletionRequestExpirationItem = /// Alias for the `ThresholdType` used in the FileSystem pallet. pub type ThresholdType = ::ThresholdType; + +/// Alias for the `TickNumber` used in the ProofsDealer pallet. +pub type TickNumber = + <::ProofDealer as shp_traits::ProofsDealerInterface>::TickNumber; diff --git a/pallets/file-system/src/utils.rs b/pallets/file-system/src/utils.rs index 6fb47db6d..3ce649016 100644 --- a/pallets/file-system/src/utils.rs +++ b/pallets/file-system/src/utils.rs @@ -16,7 +16,7 @@ use sp_runtime::{ use sp_std::{collections::btree_set::BTreeSet, vec, vec::Vec}; use pallet_file_system_runtime_api::{ - QueryBspConfirmChunksToProveForFileError, QueryFileEarliestVolunteerBlockError, + QueryBspConfirmChunksToProveForFileError, QueryFileEarliestVolunteerTickError, }; use pallet_nfts::{CollectionConfig, CollectionSettings, ItemSettings, MintSettings, MintType}; use shp_file_metadata::ChunkId; @@ -33,11 +33,12 @@ use crate::{ CollectionIdFor, ExpirationItem, FileKeyHasher, FileLocation, Fingerprint, ForestProof, KeyProof, MaxBspsPerStorageRequest, MerkleHash, MoveBucketRequestMetadata, MultiAddresses, PeerIds, ProviderIdFor, ReplicationTargetType, StorageData, StorageRequestBspsMetadata, - StorageRequestMetadata, + StorageRequestMetadata, TickNumber, }, - BlockRangeToMaximumThreshold, BucketsWithStorageRequests, DataServersForMoveBucket, Error, - Event, Pallet, PendingBucketsToMove, PendingFileDeletionRequests, PendingMoveBucketRequests, + BucketsWithStorageRequests, DataServersForMoveBucket, Error, Event, Pallet, + PendingBucketsToMove, PendingFileDeletionRequests, PendingMoveBucketRequests, PendingStopStoringRequests, ReplicationTarget, StorageRequestBsps, StorageRequests, + TickRangeToMaximumThreshold, }; macro_rules! expect_or_err { @@ -89,63 +90,65 @@ impl Pallet where T: pallet::Config, { - /// Compute the block number at which the BSP is eligible to volunteer for a storage request. - pub fn query_earliest_file_volunteer_block( + /// Compute the tick number at which the BSP is eligible to volunteer for a storage request. + pub fn query_earliest_file_volunteer_tick( bsp_id: ProviderIdFor, file_key: MerkleHash, - ) -> Result, QueryFileEarliestVolunteerBlockError> + ) -> Result, QueryFileEarliestVolunteerTickError> where T: frame_system::Config, { - // Get the block number at which the storage request was created. - let (storage_request_block, fingerprint) = match >::get(&file_key) { + // Get the tick number at which the storage request was created. + let (storage_request_tick, fingerprint) = match >::get(&file_key) { Some(storage_request) => (storage_request.requested_at, storage_request.fingerprint), None => { - return Err(QueryFileEarliestVolunteerBlockError::StorageRequestNotFound); + return Err(QueryFileEarliestVolunteerTickError::StorageRequestNotFound); } }; // Get the threshold needed for the BSP to be able to volunteer for the storage request. let bsp_threshold = Self::get_threshold_for_bsp_request(&bsp_id, &fingerprint); - // Compute the block number at which the BSP should send the volunteer request. - Self::compute_volunteer_block_number(bsp_id, bsp_threshold, storage_request_block) - .map_err(|_| QueryFileEarliestVolunteerBlockError::ThresholdArithmeticError) + // Compute the tick number at which the BSP should send the volunteer request. + Self::compute_volunteer_tick_number(bsp_id, bsp_threshold, storage_request_tick) + .map_err(|_| QueryFileEarliestVolunteerTickError::ThresholdArithmeticError) } - fn compute_volunteer_block_number( + fn compute_volunteer_tick_number( bsp_id: ProviderIdFor, bsp_threshold: T::ThresholdType, - storage_request_block: BlockNumberFor, - ) -> Result, DispatchError> + storage_request_tick: TickNumber, + ) -> Result, DispatchError> where T: frame_system::Config, { // Compute the threshold to succeed and the slope of the bsp. let (to_succeed, slope) = - Self::compute_threshold_to_succeed(&bsp_id, storage_request_block)?; + Self::compute_threshold_to_succeed(&bsp_id, storage_request_tick)?; let threshold_diff = match bsp_threshold.checked_sub(&to_succeed) { Some(diff) => diff, None => { // The BSP's threshold is less than the current threshold. - return Ok(>::block_number()); + let current_tick = + ::get_current_tick(); + return Ok(current_tick); } }; - // Calculate the number of blocks required to be below the threshold. - let blocks_to_wait = match threshold_diff.checked_div(&slope) { - Some(blocks) => blocks, + // Calculate the number of ticks required to be below the threshold. + let ticks_to_wait = match threshold_diff.checked_div(&slope) { + Some(ticks) => ticks, None => { return Err(Error::::ThresholdArithmeticError.into()); } }; - // Compute the block number at which the BSP should send the volunteer request. - let volunteer_block_number = storage_request_block - .saturating_add(T::ThresholdTypeToBlockNumber::convert(blocks_to_wait)); + // Compute the tick number at which the BSP should send the volunteer request. + let volunteer_tick_number = storage_request_tick + .saturating_add(T::ThresholdTypeToTickNumber::convert(ticks_to_wait)); - Ok(volunteer_block_number) + Ok(volunteer_tick_number) } pub fn query_bsp_confirm_chunks_to_prove_for_file( @@ -532,8 +535,10 @@ where return Err(Error::::BspsRequiredExceedsTarget)?; } + let current_tick = + ::get_current_tick(); let storage_request_metadata = StorageRequestMetadata:: { - requested_at: >::block_number(), + requested_at: current_tick, owner: sender.clone(), bucket_id, location: location.clone(), @@ -722,8 +727,10 @@ where /// less than the [globally computed threshold](BspsAssignmentThreshold). As the number of BSPs signed up increases, the threshold decreases, meaning there is a /// lower chance of a BSP being eligible to volunteer for a storage request. /// - /// Though, as the storage request remains open, the threshold increases over time based on the number of blocks since the storage request was issued. This is to + /// Though, as the storage request remains open, the threshold increases over time based on the number of ticks since the storage request was issued. This is to /// ensure that the storage request is fulfilled by opening up the opportunity for more BSPs to volunteer. + /// + /// For more information on what "ticks" are, see the [Proofs Dealer pallet](https://github.com/Moonsong-Labs/storage-hub/blob/main/pallets/proofs-dealer/README.md). pub(crate) fn do_bsp_volunteer( sender: T::AccountId, file_key: MerkleHash, @@ -1029,7 +1036,7 @@ where } } - // Check if this is the first file added to the BSP's Forest. If so, initialise last block proven by this BSP. + // Check if this is the first file added to the BSP's Forest. If so, initialise last tick proven by this BSP. let old_root = expect_or_err!( ::get_root(bsp_id), "Failed to get root for BSP, when it was already checked to be a BSP", @@ -1724,7 +1731,7 @@ where /// The formalized formulas are documented in the [README](https://github.com/Moonsong-Labs/storage-hub/blob/main/pallets/file-system/README.md#volunteering-succeeding-threshold-checks). pub fn compute_threshold_to_succeed( bsp_id: &ProviderIdFor, - requested_at: BlockNumberFor, + requested_at: TickNumber, ) -> Result<(T::ThresholdType, T::ThresholdType), DispatchError> { let maximum_threshold = T::ThresholdType::max_value(); @@ -1767,20 +1774,17 @@ where let threshold_weighted_starting_point = bsp_weight.saturating_mul(threshold_global_starting_point); + // Rate of increase from the weighted threshold starting point up to the maximum threshold within a tick range. let base_slope = maximum_threshold .saturating_sub(threshold_global_starting_point) - .checked_div(&T::ThresholdTypeToBlockNumber::convert_back( - BlockRangeToMaximumThreshold::::get(), + .checked_div(&T::ThresholdTypeToTickNumber::convert_back( + TickRangeToMaximumThreshold::::get(), )) .unwrap_or(T::ThresholdType::one()); - let threshold_slope = base_slope.saturating_add( - base_slope - .checked_mul(&bsp_weight) - .unwrap_or(maximum_threshold) - .checked_div(&global_weight) - .unwrap_or(T::ThresholdType::one()), - ); + let threshold_slope = base_slope + .checked_mul(&bsp_weight) + .unwrap_or(maximum_threshold); // Since checked_div only returns None on a result of zero, there is the case when the result is between 0 and 1 and rounds down to 0. let threshold_slope = if threshold_slope.is_zero() { @@ -1789,15 +1793,16 @@ where threshold_slope }; - let current_block_number = >::block_number(); + let current_tick_number = + ::get_current_tick(); - // Get number of blocks since the storage request was issued. - let blocks_since_requested = current_block_number.saturating_sub(requested_at); - let blocks_since_requested = - T::ThresholdTypeToBlockNumber::convert_back(blocks_since_requested); + // Get number of ticks since the storage request was issued. + let ticks_since_requested = current_tick_number.saturating_sub(requested_at); + let ticks_since_requested = + T::ThresholdTypeToTickNumber::convert_back(ticks_since_requested); let to_succeed = threshold_weighted_starting_point - .saturating_add(threshold_slope.saturating_mul(blocks_since_requested)); + .saturating_add(threshold_slope.saturating_mul(ticks_since_requested)); Ok((to_succeed, threshold_slope)) } diff --git a/pallets/proofs-dealer/README.md b/pallets/proofs-dealer/README.md index 3e26bb82c..df7281b78 100644 --- a/pallets/proofs-dealer/README.md +++ b/pallets/proofs-dealer/README.md @@ -98,6 +98,28 @@ Proof verification, which happens in the `submit_proof` extrinsic, follows the n 1. The last tick for which the submitter submitted a proof is updated to the tick for which the proof is being submitted. 2. The deadline for submitting a proof is updated to the next tick for which the submitter should be submitting a proof. +### Tick-Stopping Anti-Spam Mechanism + +This pallet implements a mechanism to prevent a spamming attack that would allow a malicious actor to spam the network with tipped transactions, preventing honest Providers from submitting their proofs in time. + +Essentially, the mechanism consists in stopping the tick counter, when the network is presumably under a spam attack. Stopping the tick counter has the following effects: + +1. No new random seeds are generated, meaning that no new challenges are generated. This is to prevent accumulation of challenges in the network, while Providers are presumably unable to respond to them. +2. No new checkpoint challenges are generated. Given that the tick doesn't advance, the checkpoint challenge ticks are not reached. +3. Deadlines are indefinitely pushed forwards. To be precise, given that ticks don't advance, the tick where Providers would meet their deadlines are never reached. This is the key part to discourage the spamming attack, given that it would have a potentially indefinite cost, but no Provider should be slashed as a result. +4. Proofs are still accepted, and valid proofs will be registered as processed in the tick number that was stopped. + +This pallet evaluates a configurable number of blocks in the past (`BlockFullnessPeriod`), checking whether or not they are considered "full". For a block to be _NOT_ full, its [Normal](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/support/src/dispatch.rs#L172) used weight should be such that the difference between such used weight, and the maximum available weight for the [Normal](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/support/src/dispatch.rs#L172) `DispatchClass`, is greater or equal than `BlockFullnessHeadroom`. Both `ref_time` and `proof_size` components of the weight are considered in this comparison. + +The code that checks this condition is implemented in the `do_check_spamming_condition` function, which is called by the `on_poll` hook at the beginning of every block, except during Multi Block Migrations. In this function, the pallet checks how many of the past `BlockFullnessPeriod` blocks are considered _NOT_ full, and if that number is greater than `MinNotFullBlocksRatio * BlockFullnessPeriod`, the tick counter is stopped. The `MinNotFullBlocksRatio` constant is a configurable parameter that, in a way, determines the tolerance for malicious collators in the network. For example, if `MinNotFullBlocksRatio` is set to 0.5, then in order to consider the network spammed, more than half of the past `BlockFullnessPeriod` blocks should be considered _NOT_ full. In those past _non-full_ blocks, there would have been at least one block produced by an honest collator. + +The [Normal](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/support/src/dispatch.rs#L172) weight used in every block is registered in the `on_finalize` hook, which is executed even in MBMs. However, the criteria to check whether or not a block is considered _NOT_ full is run in the `on_poll` hook of the next block, so successive MBMs would not be considered as multiple _non-full_ blocks. + +> `IMPORTANT ❗️` +> +> - The `BlockFullnessPeriod` should be configured to be smaller or equal than the `ChallengeTicksTolerance` constant. Otherwise, if bigger, the attacker could spam the network during the tolerance period of a given Provider, but still not spam enough blocks to trigger the anti-spam mechanism. +> - The `BlockFullnessHeadroom` should be configured to some weight value that would reflect that "an honest Provider could have submitted a proof in that block, if the block was produced by an honest collator". + ## Interfaces This pallet implements: diff --git a/pallets/proofs-dealer/src/lib.rs b/pallets/proofs-dealer/src/lib.rs index 0d50d7b9b..be48de466 100644 --- a/pallets/proofs-dealer/src/lib.rs +++ b/pallets/proofs-dealer/src/lib.rs @@ -28,7 +28,10 @@ pub mod pallet { CommitmentVerifier, MutateChallengeableProvidersInterface, ProofsDealerInterface, ReadChallengeableProvidersInterface, TrieProofDeltaApplier, TrieRemoveMutation, }; - use sp_runtime::traits::Convert; + use sp_runtime::{ + traits::{CheckedSub, Convert, Saturating}, + Perbill, + }; use sp_std::vec::Vec; use types::{KeyFor, ProviderIdFor}; @@ -50,7 +53,7 @@ pub mod pallet { /// The type used to verify Merkle Patricia Forest proofs. /// This verifies proofs of keys belonging to the Merkle Patricia Forest. - /// Something that implements the `CommitmentVerifier` trait. + /// Something that implements the [`CommitmentVerifier`] trait. /// The type of the challenge is a hash, and it is expected that a proof will provide the /// exact hash if it exists in the forest, or the previous and next hashes if it does not. type ForestVerifier: CommitmentVerifier, Challenge = KeyFor> @@ -61,11 +64,11 @@ pub mod pallet { >; /// The type used to verify the proof of a specific key within the Merkle Patricia Forest. - /// While `ForestVerifier` verifies that some keys are in the Merkle Patricia Forest, this + /// While [`Config::ForestVerifier`] verifies that some keys are in the Merkle Patricia Forest, this /// verifies specifically a proof for that key. For example, if the keys in the forest - /// represent files, this would verify the proof for a specific file, and `ForestVerifier` + /// represent files, this would verify the proof for a specific file, and [`Config::ForestVerifier`] /// would verify that the file is in the forest. - /// The type of the challenge is a [u8; 8] that actually represents a u64 number, which is + /// The type of the challenge is a `[u8; 8]` that actually represents a u64 number, which is /// the index of the chunk being challenged. type KeyVerifier: CommitmentVerifier, Challenge = KeyFor>; @@ -112,7 +115,7 @@ pub mod pallet { type MaxCustomChallengesPerBlock: Get; /// The number of ticks that challenges history is kept for. - /// After this many ticks, challenges are removed from `TickToChallengesSeed` StorageMap. + /// After this many ticks, challenges are removed from [`TickToChallengesSeed`] StorageMap. /// A "tick" is usually one block, but some blocks may be skipped due to migrations. #[pallet::constant] type ChallengeHistoryLength: Get>; @@ -180,6 +183,38 @@ pub mod pallet { /// - The slashed funds are transferred. #[pallet::constant] type Treasury: Get; + + /// The period of blocks for which the block fullness is checked. + /// + /// This is the amount of blocks from the past, for which the block fullness has been checked + /// and is stored. Blocks older than `current_block` - [`Config::BlockFullnessPeriod`] are + /// cleared from storage. + /// + /// This constant should be equal or smaller than the [`Config::ChallengeTicksTolerance`] constant, + /// if the goal is to prevent spamming attacks that would prevent honest Providers from submitting + /// their proofs in time. + #[pallet::constant] + type BlockFullnessPeriod: Get>; + + /// The minimum unused weight that a block must have to be considered _not_ full. + /// + /// This is used as part of the criteria for checking if the network is presumably under a spam attack. + /// For example, this can be set to the benchmarked weight of a `submit_proof` extrinsic, which would + /// mean that a block is not considered full if a `submit_proof` extrinsic could have still fit in it. + #[pallet::constant] + type BlockFullnessHeadroom: Get; + + /// The minimum ratio (or percentage if you will) of blocks that must be considered _not_ full, + /// from the total number of [`Config::BlockFullnessPeriod`] blocks taken into account. + /// + /// If less than this percentage of blocks are not full, the networks is considered to be presumably + /// under a spam attack. + /// This can also be thought of as the maximum ratio of misbehaving collators tolerated. For example, + /// if this is set to `Perbill::from_percent(50)`, then if more than half of the last `BlockFullnessPeriod` + /// blocks are not full, then one of those blocks surely was produced by an honest collator, meaning + /// that there was at least one truly _not_ full block in the last `BlockFullnessPeriod` blocks. + #[pallet::constant] + type MinNotFullBlocksRatio: Get; } #[pallet::pallet] @@ -188,7 +223,7 @@ pub mod pallet { /// A mapping from challenges tick to a random seed used for generating the challenges in that tick. /// /// This is used to keep track of the challenges' seed in the past. - /// This mapping goes back only `ChallengeHistoryLength` blocks. Previous challenges are removed. + /// This mapping goes back only [`ChallengeHistoryLengthFor`] blocks. Previous challenges are removed. #[pallet::storage] #[pallet::getter(fn tick_to_challenges)] pub type TickToChallengesSeed = @@ -198,8 +233,8 @@ pub mod pallet { /// /// This is used to keep track of the challenges that have been made in the past, specifically /// in the checkpoint challenge rounds. - /// The vector is bounded by `MaxCustomChallengesPerBlockFor`. - /// This mapping goes back only `ChallengeHistoryLength` ticks. Previous challenges are removed. + /// The vector is bounded by [`MaxCustomChallengesPerBlockFor`]. + /// This mapping goes back only [`ChallengeHistoryLengthFor`] ticks. Previous challenges are removed. #[pallet::storage] #[pallet::getter(fn tick_to_checkpoint_challenges)] pub type TickToCheckpointChallenges = StorageMap< @@ -211,8 +246,8 @@ pub mod pallet { /// The challenge tick of the last checkpoint challenge round. /// - /// This is used to determine when to include the challenges from the `ChallengesQueue` and - /// `PriorityChallengesQueue` in the `TickToCheckpointChallenges` StorageMap. These checkpoint + /// This is used to determine when to include the challenges from the [`ChallengesQueue`] and + /// [`PriorityChallengesQueue`] in the [`TickToCheckpointChallenges`] StorageMap. These checkpoint /// challenge rounds have to be answered by ALL Providers, and this is enforced by the /// `submit_proof` extrinsic. #[pallet::storage] @@ -229,7 +264,7 @@ pub mod pallet { /// have failed to submit a proof and subject to slashing. #[pallet::storage] #[pallet::getter(fn tick_to_challenged_providers)] - pub type ChallengeTickToChallengedProviders = StorageDoubleMap< + pub type TickToProvidersDeadlines = StorageDoubleMap< _, Blake2_128Concat, BlockNumberFor, @@ -239,7 +274,7 @@ pub mod pallet { >; /// A mapping from a Provider to the last tick for which they SHOULD have submitted a proof. - /// If for a Provider `p`, `LastTickProviderSubmittedProofFor[p]` is `n`, then the + /// If for a Provider `p`, `LastTickProviderSubmittedAProofFor[p]` is `n`, then the /// Provider should submit a proof for tick `n + stake_to_challenge_period(p)`. /// /// This gets updated when a Provider submits a proof successfully and is used to determine the @@ -286,7 +321,7 @@ pub mod pallet { /// This counter is not necessarily the same as the block number, as challenges are /// distributed in the `on_poll` hook, which happens at the beginning of every block, /// so long as the block is not part of a [Multi-Block-Migration](https://github.com/paritytech/polkadot-sdk/pull/1781) (MBM). - /// During MBMsm, the block number increases, but `ChallengesTicker` does not. + /// During MBMsm, the block number increases, but [`ChallengesTicker`] does not. #[pallet::storage] #[pallet::getter(fn challenges_ticker)] pub type ChallengesTicker = StorageValue<_, BlockNumberFor, ValueQuery>; @@ -298,9 +333,10 @@ pub mod pallet { /// A mapping from tick to Providers, which is set if the Provider submitted a valid proof in that tick. /// /// This is used to keep track of the Providers that have submitted proofs in the last few - /// ticks, where availability only up to the last `TargetTicksStorageOfSubmitters` ticks is guaranteed. - /// This storage is then made available for other pallets to use through the `ReadProofSubmittersInterface`. + /// ticks, where availability only up to the last [`Config::TargetTicksStorageOfSubmitters`] ticks is guaranteed. + /// This storage is then made available for other pallets to use through the `ProofSubmittersInterface`. #[pallet::storage] + #[pallet::getter(fn valid_proof_submitters_last_ticks)] pub type ValidProofSubmittersLastTicks = StorageMap< _, Blake2_128Concat, @@ -308,13 +344,42 @@ pub mod pallet { BoundedBTreeSet, T::MaxSubmittersPerTick>, >; - /// A value that represents the last tick that was deleted from the `ValidProofSubmittersLastTicks` StorageMap. + /// A value that represents the last tick that was deleted from the [`ValidProofSubmittersLastTicks`] StorageMap. /// - /// This is used to know which tick to delete from the `ValidProofSubmittersLastTicks` StorageMap when the + /// This is used to know which tick to delete from the [`ValidProofSubmittersLastTicks`] StorageMap when the /// `on_idle` hook is called. #[pallet::storage] + #[pallet::getter(fn last_deleted_tick)] pub type LastDeletedTick = StorageValue<_, BlockNumberFor, ValueQuery>; + /// A boolean that represents whether the [`ChallengesTicker`] is paused. + /// + /// By default, this is `false`, meaning that the [`ChallengesTicker`] is incremented every time `on_poll` is called. + /// This can be set to `true` which would pause the [`ChallengesTicker`], preventing `do_new_challenges_round` from + /// being executed. Therefore: + /// - No new random challenges would be emitted and added to [`TickToChallengesSeed`]. + /// - No new checkpoint challenges would be emitted and added to [`TickToCheckpointChallenges`]. + /// - Deadlines for proof submissions are indefinitely postponed. + #[pallet::storage] + #[pallet::getter(fn challenges_ticker_paused)] + pub type ChallengesTickerPaused = StorageValue<_, ()>; + + /// A mapping from block number to the weight used in that block. + /// + /// This is used to check if the network is presumably under a spam attack. + /// It is cleared for blocks older than `current_block` - ([`Config::BlockFullnessPeriod`] + 1). + #[pallet::storage] + #[pallet::getter(fn past_blocks_fullness)] + pub type PastBlocksWeight = + StorageMap<_, Blake2_128Concat, BlockNumberFor, Weight>; + + /// The number of blocks that have been considered _not_ full in the last [`Config::BlockFullnessPeriod`]. + /// + /// This is used to check if the network is presumably under a spam attack. + #[pallet::storage] + #[pallet::getter(fn not_full_blocks_count)] + pub type NotFullBlocksCount = StorageValue<_, BlockNumberFor, ValueQuery>; + // Pallets use events to inform users when important changes are made. // https://docs.substrate.io/v3/runtime/events-and-errors #[pallet::event] @@ -370,6 +435,9 @@ pub mod pallet { mutations: Vec<(KeyFor, TrieRemoveMutation)>, new_root: KeyFor, }, + + /// The [`ChallengesTicker`] has been paused or unpaused. + ChallengesTickerSet { paused: bool }, } // Errors inform users that something went wrong. @@ -502,7 +570,7 @@ pub mod pallet { /// Validates that the proof corresponds to a challenge that was made in the past, /// by checking the `TickToChallengesSeed` StorageMap. The challenge tick that the /// Provider should have submitted a proof is calculated based on the last tick they - /// submitted a proof for (`LastTickProviderSubmittedProofFor`), and the proving period for + /// submitted a proof for ([`LastTickProviderSubmittedAProofFor`]), and the proving period for /// that Provider, which is a function of their stake. /// This extrinsic also checks that there hasn't been a checkpoint challenge round /// in between the last time the Provider submitted a proof for and the tick @@ -510,7 +578,7 @@ pub mod pallet { /// subject to slashing. /// /// If valid: - /// - Pushes forward the Provider in the `ChallengeTickToChallengedProviders` StorageMap a number + /// - Pushes forward the Provider in the [`TickToProvidersDeadlines`] StorageMap a number /// of ticks corresponding to the stake of the Provider. /// - Registers this tick as the last tick in which the Provider submitted a proof. /// @@ -557,7 +625,7 @@ pub mod pallet { origin: OriginFor, provider: ProviderIdFor, ) -> DispatchResultWithPostInfo { - // Check that the extrinsic was executed by the root origin + // Check that the extrinsic was executed by the root origin. ensure_root(origin)?; // Execute checks and logic, update storage. @@ -566,6 +634,28 @@ pub mod pallet { // Return a successful DispatchResultWithPostInfo. Ok(Pays::No.into()) } + + /// Set the [`ChallengesTickerPaused`] to `true` or `false`. + /// + /// Only callable by sudo. + #[pallet::call_index(3)] + #[pallet::weight(Weight::from_parts(10_000, 0) + T::DbWeight::get().writes(1))] + pub fn set_paused(origin: OriginFor, paused: bool) -> DispatchResultWithPostInfo { + // Check that the extrinsic was executed by the root origin. + ensure_root(origin)?; + + if paused { + ChallengesTickerPaused::::set(Some(())); + } else { + ChallengesTickerPaused::::set(None); + } + + // Emit the corresponding event. + Self::deposit_event(Event::::ChallengesTickerSet { paused }); + + // Return a successful DispatchResultWithPostInfo. + Ok(Pays::No.into()) + } } #[pallet::hooks] @@ -579,7 +669,45 @@ pub mod pallet { fn on_poll(_n: BlockNumberFor, weight: &mut frame_support::weights::WeightMeter) { // TODO: Benchmark computational weight cost of this hook. - Self::do_new_challenges_round(weight); + // Only execute the `do_new_challenges_round` if the `ChallengesTicker` is not paused. + if ChallengesTickerPaused::::get().is_none() { + Self::do_new_challenges_round(weight); + } + + // Check if the network is presumably under a spam attack. + // If so, `ChallengesTicker` will be paused. + // This check is done "a posteriori", meaning that we first increment the `ChallengesTicker`, send out challenges + // and slash Providers if in the last block we didn't consider the network to be under spam. + // Then if at this block we consider the network to be under spam, we pause the `ChallengesTicker`, which will not + // be incremented in the next block. + Self::do_check_spamming_condition(weight); + } + + /// This hook is called on block initialization and returns the Weight of the `on_finalize` hook to + /// let block builders know how much weight to reserve for it + /// TODO: Benchmark on_finalize to get its weight and replace the placeholder weight for that + fn on_initialize(_n: BlockNumberFor) -> Weight { + Weight::from_parts(10_000, 0) + T::DbWeight::get().reads_writes(0, 2) + } + + fn on_finalize(block_number: BlockNumberFor) { + // Get weight usage in this block so far, for the dispatch class of `submit_proof` extrinsics. + let weight_used = frame_system::Pallet::::block_weight(); + let weight_used_for_class = weight_used.get(DispatchClass::Normal); + + // Store the weight usage in this block. + PastBlocksWeight::::insert(block_number, weight_used_for_class); + + // Get the oldest block weight registered. + let block_fullness_period = T::BlockFullnessPeriod::get(); + + // Clear the storage for block at `current_block` - (`BlockFullnessPeriod` + 1). + if let Some(oldest_block_fullness_number) = + block_number.checked_sub(&block_fullness_period.saturating_add(1u32.into())) + { + // If it is older than `BlockFullnessPeriod` + 1, we clear the storage. + PastBlocksWeight::::remove(oldest_block_fullness_number); + } } // TODO: Document why we need to do this. @@ -587,7 +715,8 @@ pub mod pallet { // TODO: to the largest period of a Provider. The provider with largest period would be the one with the // TODO: smallest stake. fn integrity_test() { - // TODO: Check that the `CheckpointChallengePeriod` is greater or equal to the largest period of a Provider. + // TODO: Check that the `CheckpointChallengePeriod` is greater or equal to the largest period of a Provider. plus `ChallengeTicksTolerance`. + // TODO: Check that `BlockFullnessPeriod` is smaller or equal than `CheckpointChallengePeriod`. } /// This hook is used to trim down the `ValidProofSubmittersLastTicks` StorageMap up to the `TargetTicksOfProofsStorage`. diff --git a/pallets/proofs-dealer/src/mock.rs b/pallets/proofs-dealer/src/mock.rs index e926ddca5..3bde1a606 100644 --- a/pallets/proofs-dealer/src/mock.rs +++ b/pallets/proofs-dealer/src/mock.rs @@ -7,7 +7,7 @@ use frame_support::{ pallet_prelude::Get, parameter_types, traits::{Everything, Randomness}, - weights::constants::RocksDbWeight, + weights::{constants::RocksDbWeight, Weight}, BoundedBTreeSet, }; use frame_system as system; @@ -18,7 +18,7 @@ use shp_traits::{ use sp_core::{hashing::blake2_256, ConstU128, ConstU32, ConstU64, Hasher, H256}; use sp_runtime::{ traits::{BlakeTwo256, Convert, IdentityLookup}, - BuildStorage, DispatchError, SaturatedConversion, + BuildStorage, DispatchError, Perbill, SaturatedConversion, }; use sp_std::collections::btree_set::BTreeSet; use sp_trie::{CompactProof, LayoutV1, MemoryDB, TrieConfiguration, TrieLayout}; @@ -202,6 +202,21 @@ impl ProofSubmittersInterface for MockSubmittingProviders { fn clear_accrued_failed_proof_submissions(_provider_id: &Self::ProviderId) {} } +pub struct BlockFullnessHeadroom; +impl Get for BlockFullnessHeadroom { + fn get() -> Weight { + Weight::from_parts(10_000, 0) + + ::DbWeight::get().reads_writes(0, 1) + } +} + +pub struct MinNotFullBlocksRatio; +impl Get for MinNotFullBlocksRatio { + fn get() -> Perbill { + Perbill::from_percent(50) + } +} + impl crate::Config for Test { type RuntimeEvent = RuntimeEvent; type ProvidersPallet = Providers; @@ -224,6 +239,9 @@ impl crate::Config for Test { type StakeToChallengePeriod = ConstU128; type MinChallengePeriod = ConstU64<4>; type ChallengeTicksTolerance = ConstU64<10>; + type BlockFullnessPeriod = ConstU64<10>; + type BlockFullnessHeadroom = BlockFullnessHeadroom; + type MinNotFullBlocksRatio = MinNotFullBlocksRatio; } /// Structure to mock a verifier that returns `true` when `proof` is not empty diff --git a/pallets/proofs-dealer/src/tests.rs b/pallets/proofs-dealer/src/tests.rs index 1d6143485..06437ac89 100644 --- a/pallets/proofs-dealer/src/tests.rs +++ b/pallets/proofs-dealer/src/tests.rs @@ -1,42 +1,85 @@ -use std::collections::BTreeMap; -use std::vec; - -use crate::pallet::Event; -use crate::types::{ - ChallengeHistoryLengthFor, ChallengeTicksToleranceFor, ChallengesQueueLengthFor, - CheckpointChallengePeriodFor, KeyProof, MaxCustomChallengesPerBlockFor, - MaxSubmittersPerTickFor, ProviderIdFor, ProvidersPalletFor, RandomChallengesPerBlockFor, - TargetTicksStorageOfSubmittersFor, -}; -use crate::{mock::*, types::Proof}; -use crate::{ - ChallengeTickToChallengedProviders, ChallengesTicker, LastCheckpointTick, LastDeletedTick, - LastTickProviderSubmittedAProofFor, SlashableProviders, TickToChallengesSeed, - TickToCheckpointChallenges, ValidProofSubmittersLastTicks, -}; +use std::{collections::BTreeMap, vec}; + use codec::Encode; use frame_support::{ assert_err, assert_noop, assert_ok, + dispatch::DispatchClass, pallet_prelude::Weight, traits::{ fungible::{Mutate, MutateHold}, - OnIdle, OnPoll, + OnFinalize, OnIdle, OnPoll, }, weights::WeightMeter, BoundedBTreeSet, }; +use frame_system::{limits::BlockWeights, BlockWeight, ConsumedWeight}; use pallet_storage_providers::HoldReason; use shp_traits::{ProofsDealerInterface, ReadChallengeableProvidersInterface, TrieRemoveMutation}; use sp_core::{blake2_256, Get, Hasher, H256}; -use sp_runtime::{traits::BlakeTwo256, BoundedVec, DispatchError}; +use sp_runtime::{ + traits::{BlakeTwo256, Zero}, + BoundedVec, DispatchError, +}; use sp_trie::CompactProof; +use crate::{ + mock::*, + pallet::Event, + types::{ + BlockFullnessHeadroomFor, BlockFullnessPeriodFor, ChallengeHistoryLengthFor, + ChallengeTicksToleranceFor, ChallengesQueueLengthFor, CheckpointChallengePeriodFor, + KeyProof, MaxCustomChallengesPerBlockFor, MaxSubmittersPerTickFor, + MinNotFullBlocksRatioFor, Proof, ProviderIdFor, ProvidersPalletFor, + RandomChallengesPerBlockFor, TargetTicksStorageOfSubmittersFor, + }, + ChallengesTicker, ChallengesTickerPaused, LastCheckpointTick, LastDeletedTick, + LastTickProviderSubmittedAProofFor, NotFullBlocksCount, SlashableProviders, + TickToChallengesSeed, TickToCheckpointChallenges, TickToProvidersDeadlines, + ValidProofSubmittersLastTicks, +}; + fn run_to_block(n: u64) { while System::block_number() < n { System::set_block_number(System::block_number() + 1); - // Trigger any on_poll hook execution. + // Trigger on_poll hook execution. ProofsDealer::on_poll(System::block_number(), &mut WeightMeter::new()); + + // Set weight used to be zero. + let zero_block_weight = ConsumedWeight::new(|class: DispatchClass| match class { + DispatchClass::Normal => Zero::zero(), + DispatchClass::Operational => Zero::zero(), + DispatchClass::Mandatory => Zero::zero(), + }); + BlockWeight::::set(zero_block_weight); + + // Trigger on_finalize hook execution. + ProofsDealer::on_finalize(System::block_number()); + } +} + +fn run_to_block_spammed(n: u64) { + while System::block_number() < n { + System::set_block_number(System::block_number() + 1); + + // Trigger on_poll hook execution. + ProofsDealer::on_poll(System::block_number(), &mut WeightMeter::new()); + + // Fill up block. + let weights: BlockWeights = ::BlockWeights::get(); + let max_weight_normal = weights + .get(DispatchClass::Normal) + .max_total + .unwrap_or(weights.max_block); + let block_weight = ConsumedWeight::new(|class: DispatchClass| match class { + DispatchClass::Normal => max_weight_normal, + DispatchClass::Operational => Zero::zero(), + DispatchClass::Mandatory => Zero::zero(), + }); + BlockWeight::::set(block_weight); + + // Trigger on_finalize hook execution. + ProofsDealer::on_finalize(System::block_number()); } } @@ -473,8 +516,7 @@ fn proofs_dealer_trait_initialise_challenge_cycle_success() { let challenge_period_plus_tolerance = challenge_period + challenge_ticks_tolerance; let expected_deadline = last_tick_provider_submitted_proof + challenge_period_plus_tolerance; - let deadline = - ChallengeTickToChallengedProviders::::get(expected_deadline, provider_id); + let deadline = TickToProvidersDeadlines::::get(expected_deadline, provider_id); assert_eq!(deadline, Some(())); // Check that the last event emitted is the correct one. @@ -552,7 +594,7 @@ fn proofs_dealer_trait_initialise_challenge_cycle_already_initialised_success() let challenge_ticks_tolerance: u64 = ChallengeTicksToleranceFor::::get(); let challenge_period_plus_tolerance = challenge_period + challenge_ticks_tolerance; let prev_deadline = last_tick_provider_submitted_proof + challenge_period_plus_tolerance; - let deadline = ChallengeTickToChallengedProviders::::get(prev_deadline, provider_id); + let deadline = TickToProvidersDeadlines::::get(prev_deadline, provider_id); assert_eq!(deadline, Some(())); // Let some blocks pass (less than `ChallengeTicksTolerance` blocks). @@ -582,12 +624,11 @@ fn proofs_dealer_trait_initialise_challenge_cycle_already_initialised_success() let challenge_period_plus_tolerance = challenge_period + challenge_ticks_tolerance; let expected_deadline = last_tick_provider_submitted_proof + challenge_period_plus_tolerance; - let deadline = - ChallengeTickToChallengedProviders::::get(expected_deadline, provider_id); + let deadline = TickToProvidersDeadlines::::get(expected_deadline, provider_id); assert_eq!(deadline, Some(())); // Check that the Provider no longer has the previous deadline. - let deadline = ChallengeTickToChallengedProviders::::get(prev_deadline, provider_id); + let deadline = TickToProvidersDeadlines::::get(prev_deadline, provider_id); assert_eq!(deadline, None); // Advance beyond the previous deadline block and check that the Provider is not marked as slashable. @@ -688,8 +729,7 @@ fn proofs_dealer_trait_initialise_challenge_cycle_already_initialised_and_new_su let challenge_ticks_tolerance: u64 = ChallengeTicksToleranceFor::::get(); let challenge_period_plus_tolerance = challenge_period + challenge_ticks_tolerance; let prev_deadline = last_tick_provider_submitted_proof + challenge_period_plus_tolerance; - let deadline = - ChallengeTickToChallengedProviders::::get(prev_deadline, provider_id_1); + let deadline = TickToProvidersDeadlines::::get(prev_deadline, provider_id_1); assert_eq!(deadline, Some(())); // Let some blocks pass (less than `ChallengeTicksTolerance` blocks). @@ -716,13 +756,11 @@ fn proofs_dealer_trait_initialise_challenge_cycle_already_initialised_and_new_su let challenge_period_plus_tolerance = challenge_period + challenge_ticks_tolerance; let expected_deadline = last_tick_provider_submitted_proof + challenge_period_plus_tolerance; - let deadline = - ChallengeTickToChallengedProviders::::get(expected_deadline, provider_id_1); + let deadline = TickToProvidersDeadlines::::get(expected_deadline, provider_id_1); assert_eq!(deadline, Some(())); // Check that the Provider no longer has the previous deadline. - let deadline = - ChallengeTickToChallengedProviders::::get(prev_deadline, provider_id_1); + let deadline = TickToProvidersDeadlines::::get(prev_deadline, provider_id_1); assert_eq!(deadline, None); // Advance beyond the previous deadline block and check that the Provider is not marked as slashable. @@ -819,7 +857,7 @@ fn submit_proof_success() { let challenge_ticks_tolerance: u64 = ChallengeTicksToleranceFor::::get(); let challenge_period_plus_tolerance = challenge_period + challenge_ticks_tolerance; let prev_deadline = current_tick + challenge_period_plus_tolerance; - ChallengeTickToChallengedProviders::::insert(prev_deadline, provider_id, ()); + TickToProvidersDeadlines::::insert(prev_deadline, provider_id, ()); // Advance to the next challenge the Provider should listen to. let providers_stake = @@ -888,12 +926,12 @@ fn submit_proof_success() { // Check that the Provider's deadline was pushed forward. assert_eq!( - ChallengeTickToChallengedProviders::::get(prev_deadline, provider_id), + TickToProvidersDeadlines::::get(prev_deadline, provider_id), None ); let new_deadline = expected_new_tick + challenge_period + challenge_ticks_tolerance; assert_eq!( - ChallengeTickToChallengedProviders::::get(new_deadline, provider_id), + TickToProvidersDeadlines::::get(new_deadline, provider_id), Some(()), ); }); @@ -970,7 +1008,7 @@ fn submit_proof_adds_provider_to_valid_submitters_set() { let challenge_ticks_tolerance: u64 = ChallengeTicksToleranceFor::::get(); let challenge_period_plus_tolerance = challenge_period + challenge_ticks_tolerance; let prev_deadline = current_tick + challenge_period_plus_tolerance; - ChallengeTickToChallengedProviders::::insert(prev_deadline, provider_id, ()); + TickToProvidersDeadlines::::insert(prev_deadline, provider_id, ()); // Advance to the next challenge the Provider should listen to. let current_block = System::block_number(); @@ -2993,7 +3031,7 @@ fn new_challenges_round_provider_marked_as_slashable() { let challenge_ticks_tolerance: u64 = ChallengeTicksToleranceFor::::get(); let challenge_period_plus_tolerance = challenge_period + challenge_ticks_tolerance; let prev_deadline = current_tick + challenge_period_plus_tolerance; - ChallengeTickToChallengedProviders::::insert(prev_deadline, provider_id, ()); + TickToProvidersDeadlines::::insert(prev_deadline, provider_id, ()); // Check that Provider is not in the SlashableProviders storage map. assert!(!SlashableProviders::::contains_key(&provider_id)); @@ -3029,13 +3067,13 @@ fn new_challenges_round_provider_marked_as_slashable() { // Check that the Provider's deadline was pushed forward. assert_eq!( - ChallengeTickToChallengedProviders::::get(prev_deadline, provider_id), + TickToProvidersDeadlines::::get(prev_deadline, provider_id), None ); let new_deadline = new_last_tick_provider_submitted_proof + challenge_period + challenge_ticks_tolerance; assert_eq!( - ChallengeTickToChallengedProviders::::get(new_deadline, provider_id), + TickToProvidersDeadlines::::get(new_deadline, provider_id), Some(()), ); }); @@ -3109,7 +3147,7 @@ fn multiple_new_challenges_round_provider_accrued_many_failed_proof_submissions( let challenge_period_plus_tolerance = challenge_period + challenge_ticks_tolerance; let prev_deadline = current_tick + challenge_period_plus_tolerance; - ChallengeTickToChallengedProviders::::insert(prev_deadline, provider_id, ()); + TickToProvidersDeadlines::::insert(prev_deadline, provider_id, ()); // Check that Provider is not in the SlashableProviders storage map. assert!(!SlashableProviders::::contains_key(&provider_id)); @@ -3160,7 +3198,7 @@ fn multiple_new_challenges_round_provider_accrued_many_failed_proof_submissions( // New challenges round let current_tick = ChallengesTicker::::get(); let prev_deadline = current_tick + challenge_period; - ChallengeTickToChallengedProviders::::insert(prev_deadline, provider_id, ()); + TickToProvidersDeadlines::::insert(prev_deadline, provider_id, ()); // Advance to the deadline block for this Provider. run_to_block(next_challenge_deadline); @@ -3288,8 +3326,8 @@ fn new_challenges_round_bad_provider_marked_as_slashable_but_good_no() { let challenge_ticks_tolerance: u64 = ChallengeTicksToleranceFor::::get(); let challenge_period_plus_tolerance = challenge_period + challenge_ticks_tolerance; let prev_deadline = current_tick + challenge_period_plus_tolerance; - ChallengeTickToChallengedProviders::::insert(prev_deadline, alice_provider_id, ()); - ChallengeTickToChallengedProviders::::insert(prev_deadline, bob_provider_id, ()); + TickToProvidersDeadlines::::insert(prev_deadline, alice_provider_id, ()); + TickToProvidersDeadlines::::insert(prev_deadline, bob_provider_id, ()); // Check that Alice and Bob are not in the SlashableProviders storage map. assert!(!SlashableProviders::::contains_key( @@ -3384,22 +3422,659 @@ fn new_challenges_round_bad_provider_marked_as_slashable_but_good_no() { assert_eq!(expected_new_tick, new_last_interval_tick_bob); assert_eq!( - ChallengeTickToChallengedProviders::::get(prev_deadline, alice_provider_id), + TickToProvidersDeadlines::::get(prev_deadline, alice_provider_id), None ); assert_eq!( - ChallengeTickToChallengedProviders::::get(prev_deadline, bob_provider_id), + TickToProvidersDeadlines::::get(prev_deadline, bob_provider_id), None ); // Check that the both Alice and Bob's deadlines were pushed forward. let new_deadline = expected_new_tick + challenge_period_plus_tolerance; assert_eq!( - ChallengeTickToChallengedProviders::::get(new_deadline, alice_provider_id), + TickToProvidersDeadlines::::get(new_deadline, alice_provider_id), + Some(()), + ); + assert_eq!( + TickToProvidersDeadlines::::get(new_deadline, bob_provider_id), Some(()), ); + }); +} + +#[test] +fn challenges_ticker_paused_works() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited. + run_to_block(1); + + // Get the current tick. + let current_tick = ChallengesTicker::::get(); + + // Set the challenges ticker to paused. + assert_ok!(ProofsDealer::set_paused(RuntimeOrigin::root(), true)); + + // Assert event emitted. + System::assert_last_event(Event::::ChallengesTickerSet { paused: true }.into()); + + // Advance a number of blocks. + let current_block = System::block_number(); + run_to_block(current_block + 10); + + // Check that the challenges ticker is still the same. + assert_eq!(ChallengesTicker::::get(), current_tick); + + // Unpause the challenges ticker. + assert_ok!(ProofsDealer::set_paused(RuntimeOrigin::root(), false)); + + // Assert event emitted. + System::assert_last_event(Event::::ChallengesTickerSet { paused: false }.into()); + + // Advance a number of blocks. + let current_block = System::block_number(); + run_to_block(current_block + 10); + + // Check that the challenges ticker is now incremented. + assert_eq!(ChallengesTicker::::get(), current_tick + 10); + }); +} + +#[test] +fn challenges_ticker_block_considered_full_with_max_normal_weight() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited. + run_to_block(1); + + // Simulate a full block. + System::set_block_number(System::block_number() + 1); + + // Starting with `on_poll` hook. + ProofsDealer::on_poll(System::block_number(), &mut WeightMeter::new()); + + // Set normal weight used to be the maximum. + let weights: BlockWeights = ::BlockWeights::get(); + let max_weight_normal = weights + .get(DispatchClass::Normal) + .max_total + .unwrap_or(weights.max_block); + let max_block_weight = ConsumedWeight::new(|class: DispatchClass| match class { + DispatchClass::Normal => max_weight_normal, + DispatchClass::Operational => Zero::zero(), + DispatchClass::Mandatory => Zero::zero(), + }); + BlockWeight::::set(max_block_weight); + + // Trigger on_finalize hook execution. + ProofsDealer::on_finalize(System::block_number()); + + // Get the current count of non-full blocks. + let blocks_not_full = NotFullBlocksCount::::get(); + + // In the next block, after executing `on_poll`, `NonFullBlocksCount` should NOT be incremented. + System::set_block_number(System::block_number() + 1); + ProofsDealer::on_poll(System::block_number(), &mut WeightMeter::new()); + assert_eq!(NotFullBlocksCount::::get(), blocks_not_full); + }); +} + +#[test] +fn challenges_ticker_block_considered_full_with_weight_left_smaller_than_headroom() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited. + run_to_block(1); + + // Simulate an almost full block. + System::set_block_number(System::block_number() + 1); + + // Starting with `on_poll` hook. + ProofsDealer::on_poll(System::block_number(), &mut WeightMeter::new()); + + // Set weight used to NOT leave headroom. + let headroom_weight = BlockFullnessHeadroomFor::::get(); + let weights: BlockWeights = ::BlockWeights::get(); + let max_weight_normal = weights + .get(DispatchClass::Normal) + .max_total + .unwrap_or(weights.max_block); + let max_block_weight = ConsumedWeight::new(|class: DispatchClass| match class { + DispatchClass::Normal => max_weight_normal - headroom_weight + Weight::from_parts(1, 0), + DispatchClass::Operational => Zero::zero(), + DispatchClass::Mandatory => Zero::zero(), + }); + BlockWeight::::set(max_block_weight); + + // Trigger on_finalize hook execution. + ProofsDealer::on_finalize(System::block_number()); + + // Get the current count of non-full blocks. + let blocks_not_full = NotFullBlocksCount::::get(); + + // In the next block, after executing `on_poll`, `NonFullBlocksCount` should NOT be incremented. + System::set_block_number(System::block_number() + 1); + ProofsDealer::on_poll(System::block_number(), &mut WeightMeter::new()); + assert_eq!(NotFullBlocksCount::::get(), blocks_not_full); + }); +} + +#[test] +fn challenges_ticker_block_considered_not_full_with_weight_left_equal_to_headroom() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited. + run_to_block(1); + + // Simulate a block with exactly headroom weight left. + System::set_block_number(System::block_number() + 1); + + // Starting with `on_poll` hook. + ProofsDealer::on_poll(System::block_number(), &mut WeightMeter::new()); + + // Set weight used to leave headroom. + let headroom_weight = BlockFullnessHeadroomFor::::get(); + let weights: BlockWeights = ::BlockWeights::get(); + let max_weight_normal = weights + .get(DispatchClass::Normal) + .max_total + .unwrap_or(weights.max_block); + let max_block_weight = ConsumedWeight::new(|class: DispatchClass| match class { + DispatchClass::Normal => max_weight_normal.saturating_sub(headroom_weight), + DispatchClass::Operational => Zero::zero(), + DispatchClass::Mandatory => Zero::zero(), + }); + BlockWeight::::set(max_block_weight); + + // Trigger on_finalize hook execution. + ProofsDealer::on_finalize(System::block_number()); + + // Get the current count of non-full blocks. + let blocks_not_full = NotFullBlocksCount::::get(); + + // In the next block, after executing `on_poll`, `NonFullBlocksCount` should be incremented. + System::set_block_number(System::block_number() + 1); + ProofsDealer::on_poll(System::block_number(), &mut WeightMeter::new()); + assert_eq!(NotFullBlocksCount::::get(), blocks_not_full + 1); + }); +} + +#[test] +fn challenges_ticker_block_considered_not_full_with_weight_left_greater_than_headroom() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited. + run_to_block(1); + + // Simulate a not-full block. + System::set_block_number(System::block_number() + 1); + + // Starting with `on_poll` hook. + ProofsDealer::on_poll(System::block_number(), &mut WeightMeter::new()); + + // Set weight used to leave headroom. + let headroom_weight = BlockFullnessHeadroomFor::::get(); + let weights: BlockWeights = ::BlockWeights::get(); + let max_weight_normal = weights + .get(DispatchClass::Normal) + .max_total + .unwrap_or(weights.max_block); + let max_block_weight = ConsumedWeight::new(|class: DispatchClass| match class { + DispatchClass::Normal => max_weight_normal.saturating_sub(headroom_weight.mul(2)), + DispatchClass::Operational => Zero::zero(), + DispatchClass::Mandatory => Zero::zero(), + }); + BlockWeight::::set(max_block_weight); + + // Trigger on_finalize hook execution. + ProofsDealer::on_finalize(System::block_number()); + + // Get the current count of non-full blocks. + let blocks_not_full = NotFullBlocksCount::::get(); + + // In the next block, after executing `on_poll`, `NonFullBlocksCount` should be incremented. + System::set_block_number(System::block_number() + 1); + ProofsDealer::on_poll(System::block_number(), &mut WeightMeter::new()); + assert_eq!(NotFullBlocksCount::::get(), blocks_not_full + 1); + }); +} + +#[test] +fn challenges_ticker_paused_only_after_tolerance_blocks() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited. + run_to_block(1); + + // Tick counter should be 1 while in block 1. + assert_eq!(ChallengesTicker::::get(), 1); + + // Go until `BlockFullnessPeriodFor` blocks, with spammed blocks. + let block_fullness_period = BlockFullnessPeriodFor::::get(); + run_to_block_spammed(block_fullness_period); + + // Assert that the challenges ticker is NOT paused, and the tick counter advanced `BlockFullnessPeriodFor`. + assert!(ChallengesTickerPaused::::get().is_none()); + assert_eq!(ChallengesTicker::::get(), block_fullness_period); + + // Go one more block beyond `BlockFullnessPeriodFor`. + // Ticker should stop at this tick. + run_to_block_spammed(block_fullness_period + 1); + + // Assert that now the challenges ticker is paused, and the tick counter stopped at `BlockFullnessPeriodFor` + 1. + assert!(ChallengesTickerPaused::::get().is_some()); + assert_eq!(ChallengesTicker::::get(), block_fullness_period + 1); + + // Going one block beyond, shouldn't increment the ticker. + run_to_block(block_fullness_period + 2); + assert!(ChallengesTickerPaused::::get().is_some()); + assert_eq!(ChallengesTicker::::get(), block_fullness_period + 1); + }); +} + +#[test] +fn challenges_ticker_paused_when_less_than_min_not_full_blocks_ratio_are_not_full() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited. + run_to_block(1); + + // Tick counter should be 1 while in block 1. + assert_eq!(ChallengesTicker::::get(), 1); + + // Make sure there are `BlockFullnessPeriod * MinNotFullBlocksRatio` (floor) + // not-spammed blocks. Consider that the first block was not spammed. + let block_fullness_period: u64 = BlockFullnessPeriodFor::::get(); + let min_not_full_blocks_ratio = MinNotFullBlocksRatioFor::::get(); + let blocks_to_spam = min_not_full_blocks_ratio + .mul_floor(block_fullness_period) + .saturating_sub(1); + let current_block = System::block_number(); + run_to_block(current_block + blocks_to_spam); + + // Go until `BlockFullnessPeriodFor` blocks, with spammed blocks. + run_to_block_spammed(block_fullness_period); + + // Assert that the challenges ticker is NOT paused, and the tick counter advanced `BlockFullnessPeriod`. + assert!(ChallengesTickerPaused::::get().is_none()); + assert_eq!(ChallengesTicker::::get(), block_fullness_period); + + // Go one more block beyond `BlockFullnessPeriod`. + // Ticker should stop at this tick. + run_to_block(block_fullness_period + 1); + + // Assert that now the challenges ticker is paused, and the tick counter stopped at `BlockFullnessPeriod` + 1. + assert!(ChallengesTickerPaused::::get().is_some()); + assert_eq!(ChallengesTicker::::get(), block_fullness_period + 1); + + // Going one block beyond, shouldn't increment the ticker. + run_to_block(block_fullness_period + 2); + assert!(ChallengesTickerPaused::::get().is_some()); + assert_eq!(ChallengesTicker::::get(), block_fullness_period + 1); + }); +} + +#[test] +fn challenges_ticker_not_paused_when_more_than_min_not_full_blocks_ratio_are_not_full() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited. + run_to_block(1); + + // Tick counter should be 1 while in block 1. + assert_eq!(ChallengesTicker::::get(), 1); + + // Make sure there are more than `BlockFullnessPeriod * MinNotFullBlocksRatio` (floor) + // not-spammed blocks. Consider that the first block was not spammed. + let block_fullness_period: u64 = BlockFullnessPeriodFor::::get(); + let min_not_full_blocks_ratio = MinNotFullBlocksRatioFor::::get(); + let blocks_to_spam = min_not_full_blocks_ratio + .mul_floor(block_fullness_period) + .saturating_sub(1); + let current_block = System::block_number(); + run_to_block(current_block + blocks_to_spam + 1); + + // Go until `BlockFullnessPeriodFor` blocks, with spammed blocks. + run_to_block_spammed(block_fullness_period); + + // Assert that the challenges ticker is NOT paused, and the tick counter advanced `BlockFullnessPeriod`. + assert!(ChallengesTickerPaused::::get().is_none()); + assert_eq!(ChallengesTicker::::get(), block_fullness_period); + + // Go one more block beyond `BlockFullnessPeriod`. + // Ticker should NOT stop at this tick. + run_to_block(block_fullness_period + 1); + + // Assert that the challenges ticker is still NOT paused, and the tick counter continues. + assert!(ChallengesTickerPaused::::get().is_none()); + assert_eq!(ChallengesTicker::::get(), block_fullness_period + 1); + + // Going one block beyond, should increment the ticker. + run_to_block(block_fullness_period + 2); + assert!(ChallengesTickerPaused::::get().is_none()); + assert_eq!(ChallengesTicker::::get(), block_fullness_period + 2); + }); +} + +#[test] +fn challenges_ticker_not_paused_when_blocks_dont_run_on_poll() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited. + run_to_block(1); + + // Simulate multiple non-spammed blocks that don't run on `on_poll`. + // Like multi block migrations. + let block_fullness_period = BlockFullnessPeriodFor::::get(); + for _ in 1..block_fullness_period { + System::set_block_number(System::block_number() + 1); + + // Set weight used to zero (not-spammed). + let max_block_weight = ConsumedWeight::new(|class: DispatchClass| match class { + DispatchClass::Normal => Zero::zero(), + DispatchClass::Operational => Zero::zero(), + DispatchClass::Mandatory => Zero::zero(), + }); + BlockWeight::::set(max_block_weight); + + // Trigger on_finalize hook execution. + ProofsDealer::on_finalize(System::block_number()); + } + + // Get the current count of non-full blocks. Should be zero as `on_poll` was only run + // once in `run_to_block(1)`, taking into account the genesis block. In other words, not + // adding anything. + let blocks_not_full = NotFullBlocksCount::::get(); + assert_eq!(blocks_not_full, 0); + + // Current ticker should be 1. + assert_eq!(ChallengesTicker::::get(), 1); + + // In the next block, after executing `on_poll`, `NonFullBlocksCount` should be incremented. + System::set_block_number(System::block_number() + 1); + ProofsDealer::on_poll(System::block_number(), &mut WeightMeter::new()); + assert_eq!(NotFullBlocksCount::::get(), blocks_not_full + 1); + }); +} + +#[test] +fn challenges_ticker_unpaused_after_spam_finishes() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited. + run_to_block(1); + + // Tick counter should be 1 while in block 1. + assert_eq!(ChallengesTicker::::get(), 1); + + // Go until `BlockFullnessPeriod` blocks, with spammed blocks. + let block_fullness_period = BlockFullnessPeriodFor::::get(); + run_to_block_spammed(block_fullness_period); + + // Go one more block beyond `BlockFullnessPeriod`. + // Ticker should stop at this tick. + run_to_block_spammed(block_fullness_period + 1); + + // Going one block beyond, shouldn't increment the ticker. + run_to_block(block_fullness_period + 2); + assert!(ChallengesTickerPaused::::get().is_some()); + assert_eq!(ChallengesTicker::::get(), block_fullness_period + 1); + + // Getting how many blocks have been considered NOT full from the last `BlockFullnessPeriod`. + // We need to increase that number so that it is greater than `BlockFullnessPeriod * MinNotFullBlocksRatio`. + let blocks_not_full = NotFullBlocksCount::::get(); + let min_non_full_blocks_ratio = MinNotFullBlocksRatioFor::::get(); + let min_non_full_blocks: u64 = + min_non_full_blocks_ratio.mul_floor(BlockFullnessPeriodFor::::get()); + let empty_blocks_to_advance = min_non_full_blocks + 1 - blocks_not_full; + + // Advance `empty_blocks_to_advance` blocks. + let current_ticker = ChallengesTicker::::get(); + let current_block = System::block_number(); + run_to_block(current_block + empty_blocks_to_advance); + + // Assert that the challenges ticker is NOT paused, but that the `ChallengesTicker` is still the same. + assert!(ChallengesTickerPaused::::get().is_none()); + assert_eq!(ChallengesTicker::::get(), current_ticker); + + // Advance one more block and assert that the challenges ticker increments. + run_to_block(current_block + empty_blocks_to_advance + 1); + assert!(ChallengesTickerPaused::::get().is_none()); + assert_eq!(ChallengesTicker::::get(), current_ticker + 1); + }); +} + +#[test] +fn challenges_ticker_paused_twice() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited. + run_to_block(1); + + // Tick counter should be 1 while in block 1. + assert_eq!(ChallengesTicker::::get(), 1); + + // Go until `BlockFullnessPeriod` blocks, with spammed blocks. + let block_fullness_period = BlockFullnessPeriodFor::::get(); + run_to_block_spammed(block_fullness_period); + + // Go one more block beyond `BlockFullnessPeriod`. + // Ticker should stop at this tick. + run_to_block_spammed(block_fullness_period + 1); + + // Going one block beyond, shouldn't increment the ticker. + run_to_block(block_fullness_period + 2); + assert!(ChallengesTickerPaused::::get().is_some()); + assert_eq!(ChallengesTicker::::get(), block_fullness_period + 1); + + // Getting how many blocks have been considered NOT full from the last `BlockFullnessPeriod`. + // We need to increase that number so that it is greater than `BlockFullnessPeriod * MinNotFullBlocksRatio`. + let blocks_not_full = NotFullBlocksCount::::get(); + let min_non_full_blocks_ratio = MinNotFullBlocksRatioFor::::get(); + let min_non_full_blocks: u64 = + min_non_full_blocks_ratio.mul_floor(BlockFullnessPeriodFor::::get()); + let empty_blocks_to_advance = min_non_full_blocks + 1 - blocks_not_full; + + // Advance `empty_blocks_to_advance` blocks. + let current_ticker = ChallengesTicker::::get(); + let current_block = System::block_number(); + run_to_block(current_block + empty_blocks_to_advance); + + // Assert that the challenges ticker is NOT paused, but that the `ChallengesTicker` is still the same. + assert!(ChallengesTickerPaused::::get().is_none()); + assert_eq!(ChallengesTicker::::get(), current_ticker); + + // Advance one more block and assert that the challenges ticker increments. + run_to_block(current_block + empty_blocks_to_advance + 1); + assert!(ChallengesTickerPaused::::get().is_none()); + assert_eq!(ChallengesTicker::::get(), current_ticker + 1); + + // Getting how many blocks have been considered NOT full from the last `BlockFullnessPeriod`. + // We need to decrease that number so that it is smaller or equal to`BlockFullnessPeriod * MinNotFullBlocksRatio`. + let mut blocks_not_full = NotFullBlocksCount::::get(); + let min_non_full_blocks_ratio = MinNotFullBlocksRatioFor::::get(); + let min_non_full_blocks: u64 = + min_non_full_blocks_ratio.mul_floor(BlockFullnessPeriodFor::::get()); + + // We cannot just spam however many blocks of difference are in `blocks_not_full` - `min_non_full_blocks` + // because the oldest blocks being considered were also spammed. We would be adding new spammed blocks + // in the newest blocks, and removing them from the oldest ones. So we need to spam blocks until non-spammed + // blocks are old enough and start getting discarded. + let mut blocks_advanced = 0; + let current_ticker = ChallengesTicker::::get(); + while blocks_not_full > min_non_full_blocks { + let current_block = System::block_number(); + run_to_block_spammed(current_block + 1); + blocks_not_full = NotFullBlocksCount::::get(); + blocks_advanced += 1; + } + + // Assert that the challenges ticker IS paused, but that the `ChallengesTicker` has advanced `not_empty_blocks_to_advance`. + assert!(ChallengesTickerPaused::::get().is_some()); + assert_eq!( + ChallengesTicker::::get(), + current_ticker + blocks_advanced + ); + + // Advance one more block and assert that the challenges ticker doesn't increment. + let current_block = System::block_number(); + run_to_block(current_block + 1); + assert!(ChallengesTickerPaused::::get().is_some()); + assert_eq!( + ChallengesTicker::::get(), + current_ticker + blocks_advanced + ); + }); +} + +#[test] +fn challenges_ticker_provider_not_slashed_if_network_spammed() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited. + run_to_block(1); + + // Go beyond `BlockFullnessPeriod` blocks, with not spammed blocks, to simulate + // an operational scenario already. + let block_fullness_period: u64 = BlockFullnessPeriodFor::::get(); + run_to_block(block_fullness_period + 1); + + // Register user as a Provider in Providers pallet. + let provider_id = BlakeTwo256::hash(b"provider_id"); + pallet_storage_providers::AccountIdToBackupStorageProviderId::::insert( + &1, + provider_id, + ); + pallet_storage_providers::BackupStorageProviders::::insert( + &provider_id, + pallet_storage_providers::types::BackupStorageProvider { + capacity: Default::default(), + capacity_used: Default::default(), + multiaddresses: Default::default(), + root: Default::default(), + last_capacity_change: Default::default(), + owner_account: 1u64, + payment_account: Default::default(), + reputation_weight: + ::StartingReputationWeight::get(), + }, + ); + + // Add balance to that Provider and hold some so it has a stake. + let provider_balance = 1_000_000_000_000_000; + assert_ok!(::NativeBalance::mint_into( + &1, + provider_balance + )); + assert_ok!(::NativeBalance::hold( + &HoldReason::StorageProviderDeposit.into(), + &1, + provider_balance / 100 + )); + + // Set Provider's root to be an arbitrary value, different than the default root, + // to simulate that it is actually providing a service. + let root = BlakeTwo256::hash(b"1234"); + pallet_storage_providers::BackupStorageProviders::::mutate( + &provider_id, + |provider| { + provider.as_mut().expect("Provider should exist").root = root; + }, + ); + + // Set Provider's last submitted proof block. + let current_tick = ChallengesTicker::::get(); + let prev_tick_provider_submitted_proof = current_tick; + LastTickProviderSubmittedAProofFor::::insert( + &provider_id, + prev_tick_provider_submitted_proof, + ); + + // Set Provider's deadline for submitting a proof. + // It is the sum of this Provider's challenge period and the `ChallengesTicksTolerance`. + let providers_stake = + as ReadChallengeableProvidersInterface>::get_stake( + provider_id, + ) + .unwrap(); + let challenge_period = crate::Pallet::::stake_to_challenge_period(providers_stake); + let challenge_ticks_tolerance: u64 = ChallengeTicksToleranceFor::::get(); + let challenge_period_plus_tolerance = challenge_period + challenge_ticks_tolerance; + let prev_deadline = current_tick + challenge_period_plus_tolerance; + TickToProvidersDeadlines::::insert(prev_deadline, provider_id, ()); + + // Check that Provider is not in the SlashableProviders storage map. + assert!(!SlashableProviders::::contains_key(&provider_id)); + + // Up until this point, all blocks have been not-spammed, so the `NotFullBlocksCount` + // should be equal to `BlockFullnessPeriod`. + let current_not_full_blocks_count = NotFullBlocksCount::::get(); + assert_eq!(current_not_full_blocks_count, block_fullness_period); + + // Advance until the next challenge period block without spammed blocks. + let current_block = System::block_number(); + run_to_block(current_block + challenge_period); + + // Advance to the deadline block for this Provider, but with spammed blocks. + run_to_block_spammed(prev_deadline); + + // Check that Provider is NOT in the SlashableProviders storage map. + assert!(!SlashableProviders::::contains_key(&provider_id)); + + // Getting how many blocks have been considered NOT full from the last `BlockFullnessPeriod`. + // We need to increase that number so that it is greater than `BlockFullnessPeriod * MinNotFullBlocksRatio`. + let mut blocks_not_full = NotFullBlocksCount::::get(); + let min_non_full_blocks_ratio = MinNotFullBlocksRatioFor::::get(); + let min_non_full_blocks: u64 = + min_non_full_blocks_ratio.mul_floor(BlockFullnessPeriodFor::::get()); + + let current_ticker = ChallengesTicker::::get(); + while blocks_not_full <= min_non_full_blocks { + let current_block = System::block_number(); + run_to_block(current_block + 1); + blocks_not_full = NotFullBlocksCount::::get(); + } + + // Now the `ChallengesTicker` shouldn't be paused. But current ticker should be the same. + assert!(ChallengesTickerPaused::::get().is_none()); + assert_eq!(ChallengesTicker::::get(), current_ticker); + + // Advancing one more block should increase the `ChallengesTicker` by one. + let current_block = System::block_number(); + run_to_block(current_block + 1); + assert!(ChallengesTickerPaused::::get().is_none()); + assert_eq!(ChallengesTicker::::get(), current_ticker + 1); + + // Get how many blocks until the deadline tick. + let current_ticker = ChallengesTicker::::get(); + let blocks_to_advance = prev_deadline - current_ticker; + let current_block = System::block_number(); + run_to_block(current_block + blocks_to_advance); + + // Check event of provider being marked as slashable. + System::assert_has_event( + Event::SlashableProvider { + provider: provider_id, + next_challenge_deadline: prev_deadline + challenge_period, + } + .into(), + ); + + // Check that Provider is in the SlashableProviders storage map. + assert!(SlashableProviders::::contains_key(&provider_id)); + assert_eq!( + SlashableProviders::::get(&provider_id), + Some(::RandomChallengesPerBlock::get()) + ); + + // Check the new last time this provider submitted a proof. + let current_tick_provider_submitted_proof = + prev_tick_provider_submitted_proof + challenge_period; + let new_last_tick_provider_submitted_proof = + LastTickProviderSubmittedAProofFor::::get(provider_id).unwrap(); + assert_eq!( + current_tick_provider_submitted_proof, + new_last_tick_provider_submitted_proof + ); + + // Check that the Provider's deadline was pushed forward. + assert_eq!( + TickToProvidersDeadlines::::get(prev_deadline, provider_id), + None + ); + let new_deadline = + new_last_tick_provider_submitted_proof + challenge_period + challenge_ticks_tolerance; assert_eq!( - ChallengeTickToChallengedProviders::::get(new_deadline, bob_provider_id), + TickToProvidersDeadlines::::get(new_deadline, provider_id), Some(()), ); }); diff --git a/pallets/proofs-dealer/src/types.rs b/pallets/proofs-dealer/src/types.rs index c5263c266..024751ecb 100644 --- a/pallets/proofs-dealer/src/types.rs +++ b/pallets/proofs-dealer/src/types.rs @@ -145,3 +145,12 @@ pub type RandomnessProviderFor = ::RandomnessProvider; /// Syntactic sugar for the Randomness Output type used in the proofs pallet. pub type RandomnessOutputFor = ::Hash; + +/// Syntactic sugar for BlockFullnessPeriod type used in the ProofsDealer pallet. +pub type BlockFullnessPeriodFor = ::BlockFullnessPeriod; + +/// Syntactic sugar for BlockFullnessHeadroom type used in the ProofsDealer pallet. +pub type BlockFullnessHeadroomFor = ::BlockFullnessHeadroom; + +/// Syntactic sugar for MinNotFullBlocksRatio type used in the ProofsDealer pallet. +pub type MinNotFullBlocksRatioFor = ::MinNotFullBlocksRatio; diff --git a/pallets/proofs-dealer/src/utils.rs b/pallets/proofs-dealer/src/utils.rs index f6353d7a1..2441ec6a3 100644 --- a/pallets/proofs-dealer/src/utils.rs +++ b/pallets/proofs-dealer/src/utils.rs @@ -1,7 +1,7 @@ use codec::Encode; use frame_support::{ ensure, - pallet_prelude::DispatchResult, + pallet_prelude::{DispatchClass, DispatchResult}, traits::{fungible::Mutate, tokens::Preservation, Get, Randomness}, weights::{Weight, WeightMeter}, BoundedBTreeSet, @@ -36,10 +36,10 @@ use crate::{ RandomChallengesPerBlockFor, RandomnessOutputFor, RandomnessProviderFor, StakeToChallengePeriodFor, TargetTicksStorageOfSubmittersFor, TreasuryAccountFor, }, - ChallengeTickToChallengedProviders, ChallengesQueue, ChallengesTicker, Error, Event, - LastCheckpointTick, LastDeletedTick, LastTickProviderSubmittedAProofFor, Pallet, - PriorityChallengesQueue, SlashableProviders, TickToChallengesSeed, TickToCheckpointChallenges, - ValidProofSubmittersLastTicks, + ChallengesQueue, ChallengesTicker, ChallengesTickerPaused, Error, Event, LastCheckpointTick, + LastDeletedTick, LastTickProviderSubmittedAProofFor, NotFullBlocksCount, Pallet, + PastBlocksWeight, PriorityChallengesQueue, SlashableProviders, TickToChallengesSeed, + TickToCheckpointChallenges, TickToProvidersDeadlines, ValidProofSubmittersLastTicks, }; macro_rules! expect_or_err { @@ -195,7 +195,7 @@ where // Check that the submitter is not submitting the proof to late, i.e. that the challenges tick // is not greater or equal than `challenges_tick` + `T::ChallengeTicksTolerance::get()`. - // This should never happen, as the `ChallengeTickToChallengedProviders` StorageMap is + // This should never happen, as the `TickToProvidersDeadlines` StorageMap is // cleaned up every block. Therefore, if a Provider reached this deadline, it should have been // slashed, and its next challenge tick pushed forwards. let challenges_tick_deadline = challenges_tick @@ -339,8 +339,8 @@ where // submitted a proof for. LastTickProviderSubmittedAProofFor::::set(*submitter, Some(challenges_tick)); - // Remove the submitter from its current deadline registered in `ChallengeTickToChallengedProviders`. - ChallengeTickToChallengedProviders::::remove(challenges_tick_deadline, submitter); + // Remove the submitter from its current deadline registered in `TickToProvidersDeadlines`. + TickToProvidersDeadlines::::remove(challenges_tick_deadline, submitter); // Calculate the next tick for which the submitter should be submitting a proof. let next_challenges_tick = challenges_tick @@ -353,12 +353,8 @@ where .checked_add(&T::ChallengeTicksTolerance::get()) .ok_or(DispatchError::Arithmetic(ArithmeticError::Overflow))?; - // Add this Provider to the `ChallengeTickToChallengedProviders` StorageMap, with its new deadline. - ChallengeTickToChallengedProviders::::set( - next_challenges_tick_deadline, - submitter, - Some(()), - ); + // Add this Provider to the `TickToProvidersDeadlines` StorageMap, with its new deadline. + TickToProvidersDeadlines::::set(next_challenges_tick_deadline, submitter, Some(())); // Add this Provider to the `ValidProofSubmittersLastTicks` StorageMap, with the current tick number. let current_tick_valid_submitters = @@ -398,21 +394,21 @@ where /// Generate a new round of challenges, be it random or checkpoint. /// /// Random challenges are automatically generated based on some external source of - /// randomness, and are added to `TickToChallengesSeed`, for this block's number. + /// randomness, and are added to [`TickToChallengesSeed`], for this tick's number. /// /// It also takes care of including the challenges from the `ChallengesQueue` and /// `PriorityChallengesQueue`. These custom challenges are only included in "checkpoint" - /// blocks + /// ticks /// /// Additionally, it takes care of checking if there are Providers that have - /// failed to submit a proof, and should have submitted one by this block. It does so - /// by checking the `ChallengeTickToChallengedProviders` StorageMap. If a Provider is found + /// failed to submit a proof, and should have submitted one by this tick. It does so + /// by checking the [`TickToProvidersDeadlines`] StorageMap. If a Provider is found /// to have failed to submit a proof, it is subject to slashing. /// /// Finally, it cleans up: - /// - The `TickToChallengesSeed` StorageMap, removing entries older than `ChallengeHistoryLength`. - /// - The `TickToCheckpointChallenges` StorageMap, removing the previous checkpoint challenge block. - /// - The `ChallengeTickToChallengedProviders` StorageMap, removing entries for the current challenges tick. + /// - The [`TickToChallengesSeed`] StorageMap, removing entries older than `ChallengeHistoryLength`. + /// - The [`TickToCheckpointChallenges`] StorageMap, removing the previous checkpoint challenge block. + /// - The [`TickToProvidersDeadlines`] StorageMap, removing entries for the current challenges tick. pub fn do_new_challenges_round(weight: &mut WeightMeter) { // Increment the challenges' ticker. let mut challenges_ticker = ChallengesTicker::::get(); @@ -458,10 +454,10 @@ where } weight.consume(T::DbWeight::get().reads_writes(2, 0)); - // If there are providers left in `ChallengeTickToChallengedProviders` for this tick, + // If there are providers left in `TickToProvidersDeadlines` for this tick, // they are marked as slashable. let mut slashable_providers = - ChallengeTickToChallengedProviders::::drain_prefix(challenges_ticker); + TickToProvidersDeadlines::::drain_prefix(challenges_ticker); while let Some((provider, _)) = slashable_providers.next() { // One read for every provider in the prefix, and one write as we're consuming and deleting the entry. weight.consume(T::DbWeight::get().reads_writes(1, 1)); @@ -537,11 +533,7 @@ where challenges_ticker.saturating_add(Self::stake_to_challenge_period(stake)); // Update this Provider's next challenge deadline. - ChallengeTickToChallengedProviders::::set( - next_challenge_deadline, - provider, - Some(()), - ); + TickToProvidersDeadlines::::set(next_challenge_deadline, provider, Some(())); weight.consume(T::DbWeight::get().reads_writes(0, 1)); @@ -562,6 +554,108 @@ where } } + /// Check if the network is presumably under a spam attack. + /// + /// The function looks at the weight used in the past `BlockFullnessPeriod` blocks, comparing it + /// with the maximum allowed weight (`max_weight_for_class`) for the dispatch class of `submit_proof` extrinsics. + /// The idea is to track blocks that have not been filled to capacity within a + /// specific period (`BlockFullnessPeriod`) and determine if there is enough "headroom" + /// (unused block capacity) to consider the network not under spam. + pub fn do_check_spamming_condition(weight: &mut WeightMeter) { + // Get the maximum weight for the dispatch class of `submit_proof` extrinsics. + let weights = T::BlockWeights::get(); + let max_weight_for_class = weights + .get(DispatchClass::Normal) + .max_total + .unwrap_or(weights.max_block); + + let current_block = frame_system::Pallet::::block_number(); + + // Get the number of blocks that have been considered _not_ full in the past `BlockFullnessPeriod`. + let not_full_blocks_count = NotFullBlocksCount::::get(); + let mut new_not_full_blocks_count = not_full_blocks_count.clone(); + weight.consume(T::DbWeight::get().reads_writes(1, 0)); + + // This would only be `None` if the block number is 0, so this should be safe. + if let Some(prev_block) = current_block.checked_sub(&1u32.into()) { + // Get the weight usage in the previous block. + weight.consume(T::DbWeight::get().reads_writes(1, 0)); + if let Some(weight_used_in_prev_block) = PastBlocksWeight::::get(prev_block) { + // Check how much weight was left in the previous block, compared to the maximum weight. + // This is computed both for proof size and ref time. + let weight_left_in_prev_block = + max_weight_for_class.saturating_sub(weight_used_in_prev_block); + + // If the weight left in the previous block is greater or equal than the headroom, for both proof size or ref time, + // we consider the previous block to be NOT full and count it as such. + if weight_left_in_prev_block.ref_time() + >= T::BlockFullnessHeadroom::get().ref_time() + && weight_left_in_prev_block.proof_size() + >= T::BlockFullnessHeadroom::get().proof_size() + { + // Increment the counter of blocks that are not full. + new_not_full_blocks_count = + new_not_full_blocks_count.saturating_add(1u32.into()); + } + } + } + + // This would be `None` during the first `BlockFullnessPeriod` + 1 blocks. + if let Some(oldest_block_fullness_number) = + current_block.checked_sub(&T::BlockFullnessPeriod::get().saturating_add(1u32.into())) + { + // Get the weight usage in the oldest registered block. + weight.consume(T::DbWeight::get().reads_writes(1, 0)); + if let Some(weight_used_in_oldest_block) = + PastBlocksWeight::::get(oldest_block_fullness_number) + { + // Check how much weight was left in the oldest block, compared to the maximum weight. + // This is computed both for proof size and ref time. + let weight_left_in_oldest_block = + max_weight_for_class.saturating_sub(weight_used_in_oldest_block); + + // If the weight left in the oldest block is greater or equal than the headroom, for both proof size or ref time, + // we consider the oldest block to be NOT full. If that is the case, we have to remove it from the + // count as it is now out of the `BlockFullnessPeriod` of blocks taken into account. + if weight_left_in_oldest_block.ref_time() + >= T::BlockFullnessHeadroom::get().ref_time() + && weight_left_in_oldest_block.proof_size() + >= T::BlockFullnessHeadroom::get().proof_size() + { + // Decrement the counter of blocks that are not full. + new_not_full_blocks_count = + new_not_full_blocks_count.saturating_sub(1u32.into()); + } + } + } + + // If there was a change in the number of blocks that were not full, we need to update the storage. + if new_not_full_blocks_count != not_full_blocks_count { + NotFullBlocksCount::::set(new_not_full_blocks_count); + weight.consume(T::DbWeight::get().reads_writes(0, 1)); + } + + // At this point, we have an updated count of blocks that were not full in the past `BlockFullnessPeriod`. + weight.consume(T::DbWeight::get().reads_writes(1, 0)); + if ChallengesTicker::::get() > T::BlockFullnessPeriod::get() { + // Running this check only makes sense after `ChallengesTicker` has advanced past `BlockFullnessPeriod`. + // To consider the network NOT to be under spam, we need more than `min_non_full_blocks` blocks to be not full. + let min_non_full_blocks_ratio = T::MinNotFullBlocksRatio::get(); + let min_non_full_blocks = + min_non_full_blocks_ratio.mul_floor(T::BlockFullnessPeriod::get()); + + // If `not_full_blocks_count` is greater than `min_non_full_blocks`, we consider the network NOT to be under spam. + if new_not_full_blocks_count > min_non_full_blocks { + // The network is NOT considered to be under a spam attack, so we resume the `ChallengesTicker`. + ChallengesTickerPaused::::set(None); + } else { + // At this point, the network is presumably under a spam attack, so we pause the `ChallengesTicker`. + ChallengesTickerPaused::::set(Some(())); + } + weight.consume(T::DbWeight::get().reads_writes(1, 1)); + } + } + /// Generate new checkpoint challenges for a given block. /// /// Fills up a new vector of checkpoint challenges with challenges in the `PriorityChallengesQueue`, @@ -823,6 +917,7 @@ impl ProofsDealerInterface for Pallet { type MerkleHash = T::MerkleTrieHash; type MerkleHashing = T::MerkleTrieHashing; type RandomnessOutput = RandomnessOutputFor; + type TickNumber = BlockNumberFor; fn verify_forest_proof( provider_id: &Self::ProviderId, @@ -951,10 +1046,7 @@ impl ProofsDealerInterface for Pallet { .ok_or(DispatchError::Arithmetic(ArithmeticError::Overflow))?; // Remove the old deadline. - ChallengeTickToChallengedProviders::::remove( - old_next_challenge_deadline, - *provider_id, - ); + TickToProvidersDeadlines::::remove(old_next_challenge_deadline, *provider_id); } // Set `LastTickProviderSubmittedAProofFor` to the current tick. @@ -972,11 +1064,7 @@ impl ProofsDealerInterface for Pallet { .ok_or(DispatchError::Arithmetic(ArithmeticError::Overflow))?; // Set the deadline for submitting a proof. - ChallengeTickToChallengedProviders::::set( - next_challenge_deadline, - *provider_id, - Some(()), - ); + TickToProvidersDeadlines::::set(next_challenge_deadline, *provider_id, Some(())); // Emit event. Self::deposit_event(Event::::NewChallengeCycleInitialised { @@ -988,6 +1076,10 @@ impl ProofsDealerInterface for Pallet { Ok(()) } + + fn get_current_tick() -> Self::TickNumber { + ChallengesTicker::::get() + } } impl ProofSubmittersInterface for Pallet { diff --git a/pallets/providers/src/mock.rs b/pallets/providers/src/mock.rs index 4ae33fe01..984cb2c14 100644 --- a/pallets/providers/src/mock.rs +++ b/pallets/providers/src/mock.rs @@ -4,7 +4,7 @@ use core::marker::PhantomData; use frame_support::{ construct_runtime, derive_impl, parameter_types, traits::{Everything, Randomness}, - weights::constants::RocksDbWeight, + weights::{constants::RocksDbWeight, Weight}, BoundedBTreeSet, }; use frame_system as system; @@ -16,7 +16,7 @@ use shp_traits::{ use sp_core::{hashing::blake2_256, ConstU128, ConstU32, ConstU64, Get, Hasher, H256}; use sp_runtime::{ traits::{BlakeTwo256, Convert, IdentityLookup}, - BuildStorage, DispatchError, SaturatedConversion, + BuildStorage, DispatchError, Perbill, SaturatedConversion, }; use sp_trie::{CompactProof, LayoutV1, MemoryDB, TrieConfiguration, TrieLayout}; use std::collections::BTreeSet; @@ -114,15 +114,18 @@ impl pallet_proofs_dealer::Config for Test { type MaxCustomChallengesPerBlock = ConstU32<10>; type MaxSubmittersPerTick = ConstU32<1000>; // TODO: Change this value after benchmarking for it to coincide with the implicit limit given by maximum block weight type TargetTicksStorageOfSubmitters = ConstU32<3>; - type ChallengeHistoryLength = ConstU64<10>; - type ChallengesQueueLength = ConstU32<10>; - type CheckpointChallengePeriod = ConstU64<10>; + type ChallengeHistoryLength = ConstU64<30>; + type ChallengesQueueLength = ConstU32<25>; + type CheckpointChallengePeriod = ConstU64<20>; type ChallengesFee = ConstU128<1_000_000>; type Treasury = TreasuryAccount; type RandomnessProvider = MockRandomness; type StakeToChallengePeriod = ConstU128; type MinChallengePeriod = ConstU64<4>; - type ChallengeTicksTolerance = ConstU64<20>; + type ChallengeTicksTolerance = ConstU64<10>; + type BlockFullnessPeriod = ConstU64<10>; + type BlockFullnessHeadroom = BlockFullnessHeadroom; + type MinNotFullBlocksRatio = MinNotFullBlocksRatio; } // Converter from the Balance type to the BlockNumber type for math. @@ -135,6 +138,21 @@ impl Convert> for SaturatingBalanceToBlockNumber { } } +pub struct BlockFullnessHeadroom; +impl Get for BlockFullnessHeadroom { + fn get() -> Weight { + Weight::from_parts(10_000, 0) + + ::DbWeight::get().reads_writes(0, 1) + } +} + +pub struct MinNotFullBlocksRatio; +impl Get for MinNotFullBlocksRatio { + fn get() -> Perbill { + Perbill::from_percent(50) + } +} + /// Structure to mock a verifier that returns `true` when `proof` is not empty /// and `false` otherwise. pub struct MockVerifier { diff --git a/primitives/forest-verifier/src/lib.rs b/primitives/forest-verifier/src/lib.rs index 1e26bf6e9..332010784 100644 --- a/primitives/forest-verifier/src/lib.rs +++ b/primitives/forest-verifier/src/lib.rs @@ -55,6 +55,8 @@ where // Check if the iterator has at least one leaf. if trie_de_iter.next().is_none() { + // If there are no leaves, and still we reached this point, it is because this is a proof of an empty forest. + // In this case, we return an empty set of proven keys, meaning that this is a valid proof of having an empty forest. return Ok(BTreeSet::new()); } diff --git a/primitives/traits/src/lib.rs b/primitives/traits/src/lib.rs index 31707aeef..2fc52d003 100644 --- a/primitives/traits/src/lib.rs +++ b/primitives/traits/src/lib.rs @@ -11,7 +11,10 @@ use frame_support::{ use scale_info::{prelude::fmt::Debug, TypeInfo}; use sp_core::Get; use sp_runtime::{ - traits::{AtLeast32BitUnsigned, CheckedAdd, Hash, One, Saturating}, + traits::{ + AtLeast32BitUnsigned, CheckedAdd, CheckedDiv, CheckedMul, CheckedSub, Hash, One, + Saturating, Zero, + }, BoundedVec, DispatchError, }; use sp_std::{collections::btree_set::BTreeSet, vec::Vec}; @@ -673,6 +676,25 @@ pub trait ProofsDealerInterface { type MerkleHashing: Hash; /// The type that represents the randomness output. type RandomnessOutput: Parameter + Member + Debug; + /// The numerical type used to represent ticks. + /// The Proofs Dealer pallet uses ticks to keep track of time, for things like sending out + /// challenges and making sure that Providers respond to them in time + type TickNumber: Parameter + + Member + + AtLeast32BitUnsigned + + Debug + + Default + + Copy + + MaxEncodedLen + + FullCodec + + MaybeSerializeDeserialize + + Zero + + One + + CheckedAdd + + CheckedSub + + CheckedDiv + + CheckedMul + + Saturating; /// Verify a proof just for the Merkle Patricia Forest, for a given Provider. /// @@ -752,6 +774,12 @@ pub trait ProofsDealerInterface { /// deadline for submitting a proof to the current tick + the Provider's period (based on its /// stake) + the challenges tick tolerance. fn initialise_challenge_cycle(who: &Self::ProviderId) -> DispatchResult; + + /// Get the current tick. + /// + /// The Proofs Dealer pallet uses ticks to keep track of time, for things like sending out + /// challenges and making sure that Providers respond to them in time. + fn get_current_tick() -> Self::TickNumber; } /// A trait to verify proofs based on commitments and challenges. @@ -968,6 +996,8 @@ pub trait ReadUserSolvencyInterface { fn is_user_insolvent(user_account: &Self::AccountId) -> bool; } +/// The interface of the ProofsDealer pallet that allows other pallets to query and modify proof +/// submitters in the last ticks. pub trait ProofSubmittersInterface { /// The type which represents a provider identifier. type ProviderId: Parameter diff --git a/runtime/src/configs/mod.rs b/runtime/src/configs/mod.rs index c5915b3dd..3def5383b 100644 --- a/runtime/src/configs/mod.rs +++ b/runtime/src/configs/mod.rs @@ -528,6 +528,23 @@ impl Get for TreasuryAccount { } } +pub struct BlockFullnessHeadroom; +impl Get for BlockFullnessHeadroom { + fn get() -> Weight { + // TODO: Change this to the benchmarked weight of a `submit_proof` extrinsic or more. + // TODO: Right now, it is set to the weight of a `transfer_keep_alive` extrinsic. + Weight::from_parts(297_297_000, 308) + } +} + +pub struct MinNotFullBlocksRatio; +impl Get for MinNotFullBlocksRatio { + fn get() -> Perbill { + // This means that we tolerate at most 50% of misbehaving collators. + Perbill::from_percent(50) + } +} + parameter_types! { pub const RandomChallengesPerBlock: u32 = 10; pub const MaxCustomChallengesPerBlock: u32 = 10; @@ -569,6 +586,9 @@ impl pallet_proofs_dealer::Config for Runtime { type StakeToChallengePeriod = StakeToChallengePeriod; type MinChallengePeriod = MinChallengePeriod; type ChallengeTicksTolerance = ChallengeTicksTolerance; + type BlockFullnessPeriod = ChallengeTicksTolerance; // We purposely set this to `ChallengeTicksTolerance` so that spamming of the chain is evaluated for the same blocks as the tolerance BSPs are given. + type BlockFullnessHeadroom = BlockFullnessHeadroom; + type MinNotFullBlocksRatio = MinNotFullBlocksRatio; } /// Structure to mock a verifier that returns `true` when `proof` is not empty @@ -615,7 +635,7 @@ impl pallet_file_system::Config for Runtime { type Fingerprint = Hash; type ReplicationTargetType = u32; type ThresholdType = ThresholdType; - type ThresholdTypeToBlockNumber = ThresholdTypeToBlockNumberConverter; + type ThresholdTypeToTickNumber = ThresholdTypeToBlockNumberConverter; type HashToThresholdType = HashToThresholdTypeConverter; type MerkleHashToRandomnessOutput = MerkleHashToRandomnessOutputConverter; type ChunkIdToMerkleHash = ChunkIdToMerkleHashConverter; diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 685e07ede..c2610d394 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -44,7 +44,7 @@ pub use sp_runtime::{MultiAddress, Perbill, Permill}; use sp_std::prelude::Vec; use pallet_file_system_runtime_api::{ - QueryBspConfirmChunksToProveForFileError, QueryFileEarliestVolunteerBlockError, + QueryBspConfirmChunksToProveForFileError, QueryFileEarliestVolunteerTickError, }; use pallet_payment_streams_runtime_api::GetUsersWithDebtOverThresholdError; use pallet_proofs_dealer::types::{KeyFor, ProviderIdFor, RandomnessOutputFor}; @@ -537,8 +537,8 @@ impl_runtime_apis! { } impl pallet_file_system_runtime_api::FileSystemApi, H256, BlockNumber, ChunkId> for Runtime { - fn query_earliest_file_volunteer_block(bsp_id: BackupStorageProviderId, file_key: H256) -> Result { - FileSystem::query_earliest_file_volunteer_block(bsp_id, file_key) + fn query_earliest_file_volunteer_tick(bsp_id: BackupStorageProviderId, file_key: H256) -> Result { + FileSystem::query_earliest_file_volunteer_tick(bsp_id, file_key) } fn query_bsp_confirm_chunks_to_prove_for_file(bsp_id: BackupStorageProviderId, file_key: H256) -> Result, QueryBspConfirmChunksToProveForFileError> { diff --git a/test/suites/integration/bsp/bsp-thresholds.test.ts b/test/suites/integration/bsp/bsp-thresholds.test.ts index 241282273..4372695d0 100644 --- a/test/suites/integration/bsp/bsp-thresholds.test.ts +++ b/test/suites/integration/bsp/bsp-thresholds.test.ts @@ -14,7 +14,7 @@ import { describeBspNet( "BSPNet: BSP Volunteering Thresholds", - { initialised: false, bspStartingWeight: 5n }, + { initialised: false, bspStartingWeight: 5n, networkConfig: "standard" }, ({ before, it, createUserApi, beforeEach }) => { let api: EnrichedBspApi; @@ -34,7 +34,7 @@ describeBspNet( strictEqual(extSuccess, true, "Extrinsic should be successful"); strictEqual( - (await api.query.fileSystem.blockRangeToMaximumThreshold()).toNumber(), + (await api.query.fileSystem.tickRangeToMaximumThreshold()).toNumber(), 200, "Threshold should have changed" ); @@ -54,7 +54,7 @@ describeBspNet( strictEqual(error, "BadOrigin", "Extrinsic should fail with BadOrigin"); strictEqual( - (await api.query.fileSystem.blockRangeToMaximumThreshold()).toNumber(), + (await api.query.fileSystem.tickRangeToMaximumThreshold()).toNumber(), 1, "Threshold should not have changed" ); @@ -130,26 +130,24 @@ describeBspNet( "test/cloud.jpg", "bucket-2" ); // T0 - const bsp1VolunteerBlock = ( - await api.call.fileSystemApi.queryEarliestFileVolunteerBlock(ShConsts.DUMMY_BSP_ID, fileKey) + const bsp1VolunteerTick = ( + await api.call.fileSystemApi.queryEarliestFileVolunteerTick(ShConsts.DUMMY_BSP_ID, fileKey) ).asOk.toNumber(); - const bsp2VolunteerBlock = ( - await api.call.fileSystemApi.queryEarliestFileVolunteerBlock(ShConsts.BSP_TWO_ID, fileKey) + const bsp2VolunteerTick = ( + await api.call.fileSystemApi.queryEarliestFileVolunteerTick(ShConsts.BSP_TWO_ID, fileKey) ).asOk.toNumber(); - if ((await api.rpc.chain.getHeader()).number.toNumber() !== bsp1VolunteerBlock) { - await api.advanceToBlock(bsp1VolunteerBlock); + if ((await api.rpc.chain.getHeader()).number.toNumber() !== bsp1VolunteerTick) { + await api.block.skipTo(bsp1VolunteerTick); } await api.wait.bspVolunteer(); await api.wait.bspStored(); - if ((await api.rpc.chain.getHeader()).number.toNumber() !== bsp2VolunteerBlock) { - await api.advanceToBlock(bsp2VolunteerBlock); + if ((await api.rpc.chain.getHeader()).number.toNumber() !== bsp2VolunteerTick) { + await api.block.skipTo(bsp2VolunteerTick); } await api.wait.bspVolunteer(); await api.wait.bspStored(); - - await api.docker.stopBspContainer("sh-bsp-two"); }); it("BSP with reputation is prioritised", async () => { @@ -165,7 +163,7 @@ describeBspNet( await api.sealBlock(api.tx.sudo.sudo(api.tx.fileSystem.setGlobalParameters(2, 10))); // Create a new storage request - await api.file.newStorageRequest("res/adolphus.jpg", "test/adolphus.jpg", "bucket-3"); // T0 + await api.file.newStorageRequest("res/adolphus.jpg", "test/adolphus.jpg", "bucket-4"); // T0 await api.wait.bspVolunteer(); const matchedEvents = await api.assert.eventMany("fileSystem", "AcceptedBspVolunteer"); // T1 @@ -180,5 +178,46 @@ describeBspNet( assert(filtered.length === 1, "BSP with reputation should be prioritised"); await api.docker.stopBspContainer("sh-bsp-three"); }); + + it( + "BSP two cannot spam the chain to volunteer first", + { + skip: "Test takes way to long to run. This test actually spams the chain with transactions, unskip it if you want to run it." + }, + async () => { + await api.sealBlock(api.tx.sudo.sudo(api.tx.fileSystem.setGlobalParameters(2, 50))); + + const { fileKey } = await api.file.newStorageRequest( + "res/cloud.jpg", + "test/cloud.jpg", + "bucket-3" + ); // T0 + const bsp1VolunteerTick = ( + await api.call.fileSystemApi.queryEarliestFileVolunteerTick( + ShConsts.DUMMY_BSP_ID, + fileKey + ) + ).asOk.toNumber(); + const bsp2VolunteerTick = ( + await api.call.fileSystemApi.queryEarliestFileVolunteerTick(ShConsts.BSP_TWO_ID, fileKey) + ).asOk.toNumber(); + + assert(bsp1VolunteerTick < bsp2VolunteerTick, "BSP one should be able to volunteer first"); + + // BSP two tries to spam the chain to advance until it can volunteer + if ((await api.rpc.chain.getHeader()).number.toNumber() !== bsp2VolunteerTick) { + await api.block.skipTo(bsp2VolunteerTick, { spam: true, verbose: true }); + } + + const tickAfterSpamResult = (await api.call.proofsDealerApi.getCurrentTick()).toNumber(); + + assert( + tickAfterSpamResult < bsp2VolunteerTick, + "BSP two should not be able to spam the chain and reach his threshold to volunteer" + ); + + await api.docker.stopBspContainer("sh-bsp-two"); + } + ); } ); diff --git a/test/suites/integration/bsp/debt-collection.test.ts b/test/suites/integration/bsp/debt-collection.test.ts index ff7b15d35..47b376d4e 100644 --- a/test/suites/integration/bsp/debt-collection.test.ts +++ b/test/suites/integration/bsp/debt-collection.test.ts @@ -1,10 +1,16 @@ import assert, { strictEqual } from "node:assert"; import { after } from "node:test"; -import { describeBspNet, fetchEventData, ShConsts, type EnrichedBspApi } from "../../../util"; +import { + describeBspNet, + fetchEventData, + ShConsts, + sleep, + type EnrichedBspApi +} from "../../../util"; describeBspNet( "BSPNet: Collect users debt", - { initialised: "multi", networkConfig: "standard" }, + { initialised: "multi", networkConfig: "standard", only: true }, ({ before, it, createUserApi, createBspApi, getLaunchResponse, createApi }) => { let userApi: EnrichedBspApi; let bspApi: EnrichedBspApi; @@ -405,6 +411,7 @@ describeBspNet( // Seal a block to allow BSPs to charge the payment stream await userApi.sealBlock(); + await sleep(500); // Assert that event for the BSP charging its payment stream was emitted await userApi.assert.eventPresent("paymentStreams", "PaymentStreamCharged"); diff --git a/test/util/bspNet/block.ts b/test/util/bspNet/block.ts index 18f942f1c..fa315fc45 100644 --- a/test/util/bspNet/block.ts +++ b/test/util/bspNet/block.ts @@ -9,7 +9,7 @@ import type { ApiPromise } from "@polkadot/api"; import type { SubmittableExtrinsic } from "@polkadot/api/types"; import type { ISubmittableResult } from "@polkadot/types/types"; import type { KeyringPair } from "@polkadot/keyring/types"; -import { alice } from "../pjsKeyring"; +import { alice, bob } from "../pjsKeyring"; import { isExtSuccess } from "../extrinsics"; import { sleep } from "../timer"; import * as ShConsts from "./consts"; @@ -171,9 +171,11 @@ export async function runToNextChallengePeriodBlock( nextChallengeTick: number, provider: string ): Promise { - const challengeTickToChallengedProviders = - await api.query.proofsDealer.challengeTickToChallengedProviders(nextChallengeTick, provider); - strictEqual(challengeTickToChallengedProviders.isSome, true); + const tickToProvidersDeadlines = await api.query.proofsDealer.tickToProvidersDeadlines( + nextChallengeTick, + provider + ); + strictEqual(tickToProvidersDeadlines.isSome, true); const blockNumber = await api.query.system.number(); for (let i = blockNumber.toNumber(); i < nextChallengeTick - 1; i++) { @@ -216,6 +218,10 @@ export async function runToNextChallengePeriodBlock( * - If false or undefined, doesn't wait between blocks. * @param watchForBspProofs - Optional. An array of BSP IDs to watch for proofs. * If specified, the function will wait for BSP proofs at appropriate intervals. + * @param spam - Optional. If specified, the function will spam the chain with blocks. + * - If true, the function will spam all blocks. + * - If false or undefined, the function will not spam the chain. + * - If a number, the function will spam the chain for that many blocks, and then continue with non-spammed blocks. * * @returns A Promise that resolves to a SealedBlock object representing the last sealed block. * @@ -237,7 +243,9 @@ export const advanceToBlock = async ( api: ApiPromise, blockNumber: number, waitBetweenBlocks?: number | boolean, - watchForBspProofs?: string[] + watchForBspProofs?: string[], + spam?: number | boolean, + verbose?: boolean ): Promise => { // If watching for BSP proofs, we need to know the blocks at which they are challenged. const challengeBlockNumbers: { nextChallengeBlock: number; challengePeriod: number }[] = []; @@ -272,10 +280,57 @@ export const advanceToBlock = async ( `Block number ${blockNumber} is lower than current block number ${currentBlockNumber}` ); const blocksToAdvance = blockNumber - currentBlockNumber; + + let blocksToSpam = 0; + if (spam) { + if (typeof spam === "number") { + blocksToSpam = spam; + } else { + blocksToSpam = blocksToAdvance; + } + } + + // Get the maximum block weight for normal class. + // This is used to check if the block weight is reaching that maximum. + const maxNormalBlockWeight = api.consts.system.blockWeights.perClass.normal.maxTotal.unwrap(); + for (let i = 0; i < blocksToAdvance; i++) { + if (spam && i < blocksToSpam) { + if (verbose) { + console.log(`Spamming block ${i + 1} of ${blocksToSpam}`); + } + // The nonce of the spamming transactions should be incremented by 1 for each transaction. + let nonce = (await api.rpc.system.accountNextIndex(alice.address)).toNumber(); + + // We don't consider the proof size of the weight because we're spamming with transfers from + // and to the same account. So the proof size is the same, regardless of the number of transfers. + let accumulatedTransferWeightRefTime = 0; + while ( + accumulatedTransferWeightRefTime + ShConsts.TRANSFER_WEIGHT_REF_TIME <= + maxNormalBlockWeight.refTime.toNumber() + ) { + // We use transfers instead of remarks because with remarks the tx pool gets filled up before + // we reach the maximum block weight. + await api.tx.balances.transferAllowDeath(bob.address, 1).signAndSend(alice, { nonce }); + + accumulatedTransferWeightRefTime += ShConsts.TRANSFER_WEIGHT_REF_TIME; + nonce += 1; + } + } + blockResult = await sealBlock(api); currentBlockNumber += 1; + const blockWeight = await api.query.system.blockWeight(); + const blockWeightNormal = blockWeight.normal; + + if (spam && i < blocksToSpam && verbose) { + console.log(`Normal block weight for block ${i + 1}: ${blockWeightNormal}`); + + const currentTick = (await api.call.proofsDealerApi.getCurrentTick()).toNumber(); + console.log(`Current tick: ${currentTick}`); + } + // Check if we need to wait for BSP proofs. if (watchForBspProofs) { for (const challengeBlockNumber of challengeBlockNumbers) { diff --git a/test/util/bspNet/consts.ts b/test/util/bspNet/consts.ts index c275b993d..40e8e9eb7 100644 --- a/test/util/bspNet/consts.ts +++ b/test/util/bspNet/consts.ts @@ -85,3 +85,8 @@ export const CAPACITY = { export const U32_MAX = (BigInt(1) << BigInt(32)) - BigInt(1); export const MAX_STORAGE_CAPACITY = CAPACITY[1024] * 4n - 1n; + +export const REMARK_WEIGHT_REF_TIME = 127_121_340; +export const REMARK_WEIGHT_PROOF_SIZE = 142; +export const TRANSFER_WEIGHT_REF_TIME = 297_297_000; +export const TRANSFER_WEIGHT_PROOF_SIZE = 308; diff --git a/test/util/bspNet/helpers.ts b/test/util/bspNet/helpers.ts index 1e74645b7..ae24ec466 100644 --- a/test/util/bspNet/helpers.ts +++ b/test/util/bspNet/helpers.ts @@ -104,7 +104,7 @@ export const getContainerPeerId = async (url: string, verbose = false) => { throw `Error fetching peerId from ${url}`; }; -export const runSimpleBspNet = async (bspNetConfig: BspNetConfig) => { +export const runSimpleBspNet = async (bspNetConfig: BspNetConfig, verbose = false) => { let userApi: EnrichedBspApi | undefined; try { console.log(`SH user id: ${shUser.address}`); @@ -142,16 +142,12 @@ export const runSimpleBspNet = async (bspNetConfig: BspNetConfig) => { ); if (bspNetConfig.noisy) { - console.log(`toxiproxy IP: ${bspIp}`); + verbose && console.log(`toxiproxy IP: ${bspIp}`); } else { - console.log(`sh-bsp IP: ${bspIp}`); + verbose && console.log(`sh-bsp IP: ${bspIp}`); } - const bspPeerId = await getContainerPeerId( - `http://127.0.0.1:${ShConsts.NODE_INFOS.bsp.port}`, - true - ); - console.log(`sh-bsp Peer ID: ${bspPeerId}`); + const bspPeerId = await getContainerPeerId(`http://127.0.0.1:${ShConsts.NODE_INFOS.bsp.port}`); process.env.BSP_IP = bspIp; process.env.BSP_PEER_ID = bspPeerId; @@ -170,7 +166,7 @@ export const runSimpleBspNet = async (bspNetConfig: BspNetConfig) => { const peerIDUser = await getContainerPeerId( `http://127.0.0.1:${ShConsts.NODE_INFOS.user.port}` ); - console.log(`sh-user Peer ID: ${peerIDUser}`); + verbose && console.log(`sh-user Peer ID: ${peerIDUser}`); const multiAddressBsp = `/ip4/${bspIp}/tcp/30350/p2p/${bspPeerId}`; diff --git a/test/util/bspNet/test-api.ts b/test/util/bspNet/test-api.ts index d62eb1cb4..8526624d8 100644 --- a/test/util/bspNet/test-api.ts +++ b/test/util/bspNet/test-api.ts @@ -241,6 +241,10 @@ export class BspNetTestApi implements AsyncDisposable { bspStored: (expectedExts?: number) => Waits.waitForBspStored(this._api, expectedExts) }; + /** + * File operations namespace + * Contains methods for interacting with StorageHub file system. + */ const remappedFileNs = { /** * Creates a new bucket. @@ -307,15 +311,21 @@ export class BspNetTestApi implements AsyncDisposable { */ skipTo: ( blockNumber: number, - options?: { waitBetweenBlocks?: number | boolean; waitForBspProofs?: string[] } + options?: { + waitBetweenBlocks?: number | boolean; + waitForBspProofs?: string[]; + spam?: boolean; + verbose?: boolean; + } ) => BspNetBlock.advanceToBlock( this._api, blockNumber, options?.waitBetweenBlocks, - options?.waitForBspProofs + options?.waitForBspProofs, + options?.spam, + options?.verbose ), - /** * Skips blocks until the minimum time for capacity changes is reached. * @returns A promise that resolves when the minimum change time is reached. diff --git a/types-bundle/dist/runtime.js b/types-bundle/dist/runtime.js index 7565d8758..b8c10faff 100644 --- a/types-bundle/dist/runtime.js +++ b/types-bundle/dist/runtime.js @@ -1,6 +1,6 @@ const FILE_SYSTEM_V1 = { - query_earliest_file_volunteer_block: { - description: "Query the earliest block number that a BSP can volunteer for a file.", + query_earliest_file_volunteer_tick: { + description: "Query the earliest tick number that a BSP can volunteer for a file.", params: [ { name: "bspId", diff --git a/types-bundle/dist/runtime.js.map b/types-bundle/dist/runtime.js.map index de75cea6f..60ce63c19 100644 --- a/types-bundle/dist/runtime.js.map +++ b/types-bundle/dist/runtime.js.map @@ -1 +1 @@ -{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types-bundle/src/runtime.ts b/types-bundle/src/runtime.ts index 43c79f971..148413724 100644 --- a/types-bundle/src/runtime.ts +++ b/types-bundle/src/runtime.ts @@ -1,8 +1,8 @@ import type { DefinitionCall, DefinitionsCall } from "@polkadot/types/types"; const FILE_SYSTEM_V1: Record = { - query_earliest_file_volunteer_block: { - description: "Query the earliest block number that a BSP can volunteer for a file.", + query_earliest_file_volunteer_tick: { + description: "Query the earliest tick number that a BSP can volunteer for a file.", params: [ { name: "bspId", diff --git a/xcm-simulator/src/lib.rs b/xcm-simulator/src/lib.rs index c1d2e988f..aec519547 100644 --- a/xcm-simulator/src/lib.rs +++ b/xcm-simulator/src/lib.rs @@ -259,7 +259,7 @@ pub fn sh_ext() -> sp_io::TestExternalities { pallet_file_system::GenesisConfig:: { replication_target: 2, - block_range_to_maximum_threshold: 1, + tick_range_to_maximum_threshold: 1, } .assimilate_storage(&mut t) .unwrap(); diff --git a/xcm-simulator/src/storagehub/configs/mod.rs b/xcm-simulator/src/storagehub/configs/mod.rs index ab6c91a57..0aa1bdcd5 100644 --- a/xcm-simulator/src/storagehub/configs/mod.rs +++ b/xcm-simulator/src/storagehub/configs/mod.rs @@ -540,6 +540,23 @@ impl Get for TreasuryAccount { } } +pub struct BlockFullnessHeadroom; +impl Get for BlockFullnessHeadroom { + fn get() -> Weight { + // TODO: Change this to the benchmarked weight of a `submit_proof` extrinsic or more. + Weight::from_parts(10_000, 0) + + ::DbWeight::get().reads_writes(0, 1) + } +} + +pub struct MinNotFullBlocksRatio; +impl Get for MinNotFullBlocksRatio { + fn get() -> Perbill { + // This means that we tolerate at most 50% of misbehaving collators. + Perbill::from_percent(50) + } +} + parameter_types! { pub const RandomChallengesPerBlock: u32 = 10; pub const MaxCustomChallengesPerBlock: u32 = 10; @@ -576,6 +593,9 @@ impl pallet_proofs_dealer::Config for Runtime { type StakeToChallengePeriod = StakeToChallengePeriod; type MinChallengePeriod = MinChallengePeriod; type ChallengeTicksTolerance = ChallengeTicksTolerance; + type BlockFullnessPeriod = ChallengeTicksTolerance; // We purposely set this to `ChallengeTicksTolerance` so that spamming of the chain is evaluated for the same blocks as the tolerance BSPs are given. + type BlockFullnessHeadroom = BlockFullnessHeadroom; + type MinNotFullBlocksRatio = MinNotFullBlocksRatio; } /// Structure to mock a verifier that returns `true` when `proof` is not empty @@ -652,7 +672,7 @@ impl pallet_file_system::Config for Runtime { type Fingerprint = Hash; type ReplicationTargetType = u32; type ThresholdType = ThresholdType; - type ThresholdTypeToBlockNumber = ThresholdTypeToBlockNumberConverter; + type ThresholdTypeToTickNumber = ThresholdTypeToBlockNumberConverter; type HashToThresholdType = HashToThresholdTypeConverter; type MerkleHashToRandomnessOutput = MerkleHashToRandomnessOutputConverter; type ChunkIdToMerkleHash = ChunkIdToMerkleHashConverter; diff --git a/xcm-simulator/src/tests.rs b/xcm-simulator/src/tests.rs index 80a8ca58e..4343b618b 100644 --- a/xcm-simulator/src/tests.rs +++ b/xcm-simulator/src/tests.rs @@ -1,23 +1,42 @@ -use frame_support::{assert_ok, traits::fungible::Inspect}; +use codec::Encode; +use frame_support::{ + assert_ok, + dispatch::GetDispatchInfo, + traits::{fungible::Inspect, OnFinalize, OnPoll}, + BoundedVec, +}; +use pallet_balances; +use pallet_storage_providers::types::{MaxMultiAddressAmount, MultiAddress}; +use shp_traits::{ReadBucketsInterface, ReadProvidersInterface}; +use sp_core::H256; +use sp_weights::WeightMeter; use xcm::prelude::*; use xcm_executor::traits::ConvertLocation; use xcm_simulator::TestExt; -use crate::relay_chain::location_converter::LocationConverter; -use crate::storagehub::configs::MaxBatchConfirmStorageRequests; -use crate::system_chain; use crate::{ constants::{ALICE, BOB, CENTS, INITIAL_BALANCE}, - parachain, relay_chain, sh_sibling_account_id, storagehub, MockNet, MockParachain, - MockSystemChain, Relay, StorageHub, NON_SYS_PARA_ID, + parachain, relay_chain, + relay_chain::location_converter::LocationConverter, + sh_sibling_account_id, storagehub, + storagehub::configs::MaxBatchConfirmStorageRequests, + system_chain, MockNet, MockParachain, MockSystemChain, Relay, StorageHub, NON_SYS_PARA_ID, }; -use codec::Encode; -use frame_support::dispatch::GetDispatchInfo; -use frame_support::BoundedVec; -use pallet_balances; -use pallet_storage_providers::types::{MaxMultiAddressAmount, MultiAddress}; -use shp_traits::{ReadBucketsInterface, ReadProvidersInterface}; -use sp_core::H256; + +fn sh_run_to_block(n: u32) { + while storagehub::System::block_number() < n { + storagehub::System::set_block_number(storagehub::System::block_number() + 1); + + // Trigger on_poll hook execution. + storagehub::ProofsDealer::on_poll( + storagehub::System::block_number(), + &mut WeightMeter::new(), + ); + + // Trigger on_finalize hook execution. + storagehub::ProofsDealer::on_finalize(storagehub::System::block_number()); + } +} mod relay_token { use crate::{child_account_id, SH_PARA_ID}; @@ -1085,7 +1104,7 @@ mod providers { assert!(storagehub::Providers::is_provider(parachain_provider_id),); // Advance enough blocks to allow the parachain to change its provided capacity - storagehub::System::set_block_number( + sh_run_to_block( storagehub::System::block_number() + MinBlocksBetweenCapacityChanges::get(), ); }); @@ -1322,7 +1341,8 @@ mod users { assert!(storagehub::FileSystem::storage_requests(file_key.clone()).is_some()); // Advance enough blocks to make sure Bob can volunteer according to the threshold - storagehub::System::set_block_number(storagehub::System::block_number() + 1); // In the config we set to reach the maximum threshold after 1 block + // In the config we set to reach the maximum threshold after 1 block + sh_run_to_block(storagehub::System::block_number() + 1); // Volunteer Bob assert_ok!(storagehub::FileSystem::bsp_volunteer( @@ -1695,7 +1715,8 @@ mod users { assert!(storagehub::FileSystem::storage_requests(file_key.clone()).is_some()); // Advance enough blocks to make sure Bob can volunteer according to the threshold - storagehub::System::set_block_number(storagehub::System::block_number() + 1); // In the config we set to reach the maximum threshold after 1 block + // In the config we set to reach the maximum threshold after 1 block + sh_run_to_block(storagehub::System::block_number() + 1); // Volunteer Bob assert_ok!(storagehub::FileSystem::bsp_volunteer(