From adb6d4be485483d4b95d5eb7742943dc2f2109e9 Mon Sep 17 00:00:00 2001 From: Will Winder Date: Wed, 31 Mar 2021 17:23:16 -0400 Subject: [PATCH] Code generation for more of the http client (#201) --- client/v2/algod/accountInformation.go | 22 +- client/v2/algod/algod.go | 73 +- client/v2/algod/application_client.go | 33 - client/v2/algod/blockRaw.go | 9 +- client/v2/algod/getApplicationByID.go | 17 +- client/v2/algod/getAssetByID.go | 16 +- client/v2/algod/{block.go => getBlock.go} | 26 +- client/v2/algod/getGenesis.go | 2 + client/v2/algod/getPendingTransactions.go | 5 + .../algod/getPendingTransactionsByAddress.go | 15 +- client/v2/algod/getProof.go | 6 +- client/v2/algod/getStatus.go | 2 + client/v2/algod/{supply.go => getSupply.go} | 7 +- .../v2/algod/{versions.go => getVersion.go} | 4 + client/v2/algod/healthCheck.go | 3 + .../v2/algod/pendingTransactionInformation.go | 11 + ...endRawTransaction.go => rawTransaction.go} | 19 +- client/v2/algod/statusAfterBlock.go | 18 - client/v2/algod/tealCompile.go | 18 +- client/v2/algod/tealDryrun.go | 17 +- ...uggestedParams.go => transactionParams.go} | 9 +- client/v2/algod/waitForBlock.go | 23 + .../v2/common/models/account_participation.go | 22 + client/v2/common/models/account_response.go | 12 + client/v2/common/models/accounts_response.go | 14 + .../models/application_responsemodels.go | 109 - .../common/models/asset_balances_response.go | 14 + client/v2/common/models/asset_params.go | 52 + client/v2/common/models/asset_response.go | 10 + client/v2/common/models/assets_response.go | 14 + client/v2/common/models/block.go | 52 + client/v2/common/models/block_response.go | 13 + client/v2/common/models/block_rewards.go | 28 + .../v2/common/models/block_upgrade_state.go | 22 + client/v2/common/models/block_upgrade_vote.go | 13 + client/v2/common/models/build_version.go | 22 + .../models/catchpoint_abort_response.go | 7 + .../models/catchpoint_start_response.go | 7 + client/v2/common/models/compile_response.go | 10 + client/v2/common/models/dryrun_request.go | 33 + client/v2/common/models/dryrun_response.go | 14 + client/v2/common/models/dryrun_source.go | 19 + client/v2/common/models/dryrun_state.go | 19 + client/v2/common/models/dryrun_txn_result.go | 26 + client/v2/common/models/error_response.go | 10 + client/v2/common/models/filtermodels.go | 280 -- .../models/post_transactions_response.go | 7 + client/v2/common/models/responsemodels.go | 690 --- client/v2/common/models/shim.go | 9 + client/v2/common/models/supply_response.go | 13 + client/v2/common/models/transaction.go | 139 + .../common/models/transaction_asset_config.go | 18 + .../common/models/transaction_asset_freeze.go | 15 + .../models/transaction_asset_transfer.go | 31 + client/v2/common/models/transaction_keyreg.go | 27 + .../models/transaction_parameters_response.go | 28 + .../v2/common/models/transaction_payment.go | 20 + .../v2/common/models/transaction_signature.go | 18 + .../models/transaction_signature_logicsig.go | 21 + .../models/transaction_signature_multisig.go | 15 + ...saction_signature_multisig_subsignature.go | 10 + .../v2/common/models/transactions_response.go | 14 + client/v2/common/models/version.go | 16 + client/v2/indexer/application_client.go | 13 - client/v2/indexer/healthCheck.go | 19 - client/v2/indexer/indexer.go | 69 +- client/v2/indexer/lookupAccountByID.go | 5 +- .../v2/indexer/lookupAccountTransactions.go | 179 +- client/v2/indexer/lookupApplicationByID.go | 3 + client/v2/indexer/lookupAssetBalances.go | 80 +- client/v2/indexer/lookupAssetByID.go | 30 +- client/v2/indexer/lookupAssetTransactions.go | 206 +- client/v2/indexer/lookupBlock.go | 13 +- client/v2/indexer/lookupTransaction.go | 2 + client/v2/indexer/makeHealthCheck.go | 6 +- client/v2/indexer/searchForAccounts.go | 3 + client/v2/indexer/searchForApplications.go | 3 + client/v2/indexer/searchForAssets.go | 86 +- client/v2/indexer/searchForTransactions.go | 246 +- logic/bundledSpecInject.go | 4130 ++++++++--------- test/algodclientv2_test.go | 187 +- test/indexer_unit_test.go | 304 +- test/responses_unit_test.go | 19 +- types/signature.go | 1 - 84 files changed, 3765 insertions(+), 4107 deletions(-) delete mode 100644 client/v2/algod/application_client.go rename client/v2/algod/{block.go => getBlock.go} (59%) rename client/v2/algod/{supply.go => getSupply.go} (57%) rename client/v2/algod/{versions.go => getVersion.go} (73%) rename client/v2/algod/{sendRawTransaction.go => rawTransaction.go} (63%) delete mode 100644 client/v2/algod/statusAfterBlock.go rename client/v2/algod/{suggestedParams.go => transactionParams.go} (75%) create mode 100644 client/v2/algod/waitForBlock.go create mode 100644 client/v2/common/models/account_participation.go create mode 100644 client/v2/common/models/account_response.go create mode 100644 client/v2/common/models/accounts_response.go delete mode 100644 client/v2/common/models/application_responsemodels.go create mode 100644 client/v2/common/models/asset_balances_response.go create mode 100644 client/v2/common/models/asset_params.go create mode 100644 client/v2/common/models/asset_response.go create mode 100644 client/v2/common/models/assets_response.go create mode 100644 client/v2/common/models/block.go create mode 100644 client/v2/common/models/block_response.go create mode 100644 client/v2/common/models/block_rewards.go create mode 100644 client/v2/common/models/block_upgrade_state.go create mode 100644 client/v2/common/models/block_upgrade_vote.go create mode 100644 client/v2/common/models/build_version.go create mode 100644 client/v2/common/models/catchpoint_abort_response.go create mode 100644 client/v2/common/models/catchpoint_start_response.go create mode 100644 client/v2/common/models/compile_response.go create mode 100644 client/v2/common/models/dryrun_request.go create mode 100644 client/v2/common/models/dryrun_response.go create mode 100644 client/v2/common/models/dryrun_source.go create mode 100644 client/v2/common/models/dryrun_state.go create mode 100644 client/v2/common/models/dryrun_txn_result.go create mode 100644 client/v2/common/models/error_response.go delete mode 100644 client/v2/common/models/filtermodels.go create mode 100644 client/v2/common/models/post_transactions_response.go delete mode 100644 client/v2/common/models/responsemodels.go create mode 100644 client/v2/common/models/supply_response.go create mode 100644 client/v2/common/models/transaction.go create mode 100644 client/v2/common/models/transaction_asset_config.go create mode 100644 client/v2/common/models/transaction_asset_freeze.go create mode 100644 client/v2/common/models/transaction_asset_transfer.go create mode 100644 client/v2/common/models/transaction_keyreg.go create mode 100644 client/v2/common/models/transaction_parameters_response.go create mode 100644 client/v2/common/models/transaction_payment.go create mode 100644 client/v2/common/models/transaction_signature.go create mode 100644 client/v2/common/models/transaction_signature_logicsig.go create mode 100644 client/v2/common/models/transaction_signature_multisig.go create mode 100644 client/v2/common/models/transaction_signature_multisig_subsignature.go create mode 100644 client/v2/common/models/transactions_response.go create mode 100644 client/v2/common/models/version.go delete mode 100644 client/v2/indexer/application_client.go delete mode 100644 client/v2/indexer/healthCheck.go diff --git a/client/v2/algod/accountInformation.go b/client/v2/algod/accountInformation.go index 8540bf94..6a9fe05b 100644 --- a/client/v2/algod/accountInformation.go +++ b/client/v2/algod/accountInformation.go @@ -3,16 +3,30 @@ package algod import ( "context" "fmt" + "github.com/algorand/go-algorand-sdk/client/v2/common" "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// AccountInformationParams contains all of the query parameters for url serialization. +type AccountInformationParams struct { + + // Format configures whether the response object is JSON or MessagePack encoded. + Format string `url:"format,omitempty"` +} + +// AccountInformation given a specific account public key, this call returns the +// accounts status, balance and spendable amounts type AccountInformation struct { - c *Client - account string + c *Client + + address string + + p AccountInformationParams } -func (s *AccountInformation) Do(ctx context.Context, headers ...*common.Header) (result models.Account, err error) { - err = s.c.get(ctx, &result, fmt.Sprintf("/v2/accounts/%s", s.account), nil, headers) +// Do performs the HTTP request +func (s *AccountInformation) Do(ctx context.Context, headers ...*common.Header) (response models.Account, err error) { + err = s.c.get(ctx, &response, fmt.Sprintf("/v2/accounts/%v", s.address), s.p, headers) return } diff --git a/client/v2/algod/algod.go b/client/v2/algod/algod.go index 7e8e1558..b788e049 100644 --- a/client/v2/algod/algod.go +++ b/client/v2/algod/algod.go @@ -4,9 +4,10 @@ import ( "context" "github.com/algorand/go-algorand-sdk/client/v2/common" + "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) -const algodAuthHeader = "X-Algo-API-Token" +const authHeader = "X-Algo-API-Token" type Client common.Client @@ -34,67 +35,83 @@ func (c *Client) post(ctx context.Context, response interface{}, path string, bo // MakeClient is the factory for constructing a ClientV2 for a given endpoint. func MakeClient(address string, apiToken string) (c *Client, err error) { - commonClient, err := common.MakeClient(address, algodAuthHeader, apiToken) + commonClient, err := common.MakeClient(address, authHeader, apiToken) c = (*Client)(commonClient) return } -func (c *Client) AccountInformation(account string) *AccountInformation { - return &AccountInformation{c: c, account: account} +func (c *Client) HealthCheck() *HealthCheck { + return &HealthCheck{c: c} } -func (c *Client) Block(round uint64) *Block { - return &Block{c: c, round: round} +func (c *Client) GetGenesis() *GetGenesis { + return &GetGenesis{c: c} } -func (c *Client) BlockRaw(round uint64) *BlockRaw { - return &BlockRaw{c: c, round: round} +func (c *Client) Versions() *Versions { + return &Versions{c: c} } -func (c *Client) HealthCheck() *HealthCheck { - return &HealthCheck{c: c} +func (c *Client) AccountInformation(address string) *AccountInformation { + return &AccountInformation{c: c, address: address} } -func (c *Client) PendingTransactionInformation(txid string) *PendingTransactionInformation { - return &PendingTransactionInformation{c: c, txid: txid} +func (c *Client) PendingTransactionsByAddress(address string) *PendingTransactionsByAddress { + return &PendingTransactionsByAddress{c: c, address: address} } -func (c *Client) PendingTransactionsByAddress(address string) *PendingTransactionInformationByAddress { - return &PendingTransactionInformationByAddress{c: c, address: address} +func (c *Client) Block(round uint64) *Block { + return &Block{c: c, round: round} } -func (c *Client) PendingTransactions() *PendingTransactions { - return &PendingTransactions{c: c} +func (c *Client) GetProof(round uint64, txid string) *GetProof { + return &GetProof{c: c, round: round, txid: txid} +} + +func (c *Client) Supply() *Supply { + return &Supply{c: c} } -func (c *Client) SendRawTransaction(tx []byte) *SendRawTransaction { - return &SendRawTransaction{c: c, stx: tx} +func (c *Client) Status() *Status { + return &Status{c: c} } func (c *Client) StatusAfterBlock(round uint64) *StatusAfterBlock { return &StatusAfterBlock{c: c, round: round} } -func (c *Client) Status() *Status { - return &Status{c: c} +func (c *Client) SendRawTransaction(rawtxn []byte) *SendRawTransaction { + return &SendRawTransaction{c: c, rawtxn: rawtxn} } func (c *Client) SuggestedParams() *SuggestedParams { return &SuggestedParams{c: c} } -func (c *Client) Supply() *Supply { - return &Supply{c: c} +func (c *Client) PendingTransactions() *PendingTransactions { + return &PendingTransactions{c: c} } -func (c *Client) Versions() *Versions { - return &Versions{c: c} +func (c *Client) PendingTransactionInformation(txid string) *PendingTransactionInformation { + return &PendingTransactionInformation{c: c, txid: txid} } -func (c *Client) GetGenesis() *GetGenesis { - return &GetGenesis{c: c} +func (c *Client) GetApplicationByID(applicationId uint64) *GetApplicationByID { + return &GetApplicationByID{c: c, applicationId: applicationId} } -func (c *Client) GetProof(round uint64, txid string) *GetProof { - return &GetProof{c: c, round: round, txid: txid} +func (c *Client) GetAssetByID(assetId uint64) *GetAssetByID { + return &GetAssetByID{c: c, assetId: assetId} +} + +func (c *Client) TealCompile(source []byte) *TealCompile { + return &TealCompile{c: c, source: source} +} + +func (c *Client) TealDryrun(request models.DryrunRequest) *TealDryrun { + return &TealDryrun{c: c, request: request} +} + +func (c *Client) BlockRaw(round uint64) *BlockRaw { + return &BlockRaw{c: c, round: round} } diff --git a/client/v2/algod/application_client.go b/client/v2/algod/application_client.go deleted file mode 100644 index 6f3aa307..00000000 --- a/client/v2/algod/application_client.go +++ /dev/null @@ -1,33 +0,0 @@ -package algod - -import ( - "github.com/algorand/go-algorand-sdk/client/v2/common/models" -) - -// /v2/applications/{application-id} -// Given a application id, it returns application information including creator, -// approval and clear programs, global and local schemas, and global state. -func (c *Client) GetApplicationByID(applicationId uint64) *GetApplicationByID { - return &GetApplicationByID{c: c, applicationId: applicationId} -} - -// /v2/assets/{asset-id} -// Given a asset id, it returns asset information including creator, name, total -// supply and special addresses. -func (c *Client) GetAssetByID(assetId uint64) *GetAssetByID { - return &GetAssetByID{c: c, assetId: assetId} -} - -// /v2/teal/compile -// Given TEAL source code in plain text, return base64 encoded program bytes and -// base32 SHA512_256 hash of program bytes (Address style). -func (c *Client) TealCompile(source []byte) *TealCompile { - return &TealCompile{c: c, source: source} -} - -// /v2/teal/dryrun -// Executes TEAL program(s) in context and returns debugging information about the -// execution. -func (c *Client) TealDryrun(request models.DryrunRequest) *TealDryrun { - return &TealDryrun{c: c, request: request} -} diff --git a/client/v2/algod/blockRaw.go b/client/v2/algod/blockRaw.go index 1a16f918..711f687d 100644 --- a/client/v2/algod/blockRaw.go +++ b/client/v2/algod/blockRaw.go @@ -5,14 +5,19 @@ import ( "fmt" "github.com/algorand/go-algorand-sdk/client/v2/common" - "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// GetBlockParams defines parameters for GetBlock. +type GetBlockParams struct { + // Return raw msgpack block bytes or json + Format string `url:"format,omitempty"` +} + // BlockRaw contains metadata required to execute a BlockRaw query. type BlockRaw struct { c *Client round uint64 - p models.GetBlockParams + p GetBlockParams } // Do executes the BlockRaw query and gets the results. diff --git a/client/v2/algod/getApplicationByID.go b/client/v2/algod/getApplicationByID.go index 83b19c1c..43028741 100644 --- a/client/v2/algod/getApplicationByID.go +++ b/client/v2/algod/getApplicationByID.go @@ -8,18 +8,17 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) -// GetApplicationByID /v2/applications/{application-id} -// Given a application id, it returns application information including creator, -// approval and clear programs, global and local schemas, and global state. +// GetApplicationByID given a application id, it returns application information +// including creator, approval and clear programs, global and local schemas, and +// global state. type GetApplicationByID struct { - c *Client + c *Client + applicationId uint64 } -// Do performs HTTP request -func (s *GetApplicationByID) Do(ctx context.Context, - headers ...*common.Header) (response models.Application, err error) { - err = s.c.get(ctx, &response, - fmt.Sprintf("/v2/applications/%d", s.applicationId), nil, headers) +// Do performs the HTTP request +func (s *GetApplicationByID) Do(ctx context.Context, headers ...*common.Header) (response models.Application, err error) { + err = s.c.get(ctx, &response, fmt.Sprintf("/v2/applications/%v", s.applicationId), nil, headers) return } diff --git a/client/v2/algod/getAssetByID.go b/client/v2/algod/getAssetByID.go index 381e9e1b..9358296d 100644 --- a/client/v2/algod/getAssetByID.go +++ b/client/v2/algod/getAssetByID.go @@ -8,18 +8,16 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) -// GetAssetByID /v2/assets/{asset-id} -// Given a asset id, it returns asset information including creator, name, total -// supply and special addresses. +// GetAssetByID given a asset id, it returns asset information including creator, +// name, total supply and special addresses. type GetAssetByID struct { - c *Client + c *Client + assetId uint64 } -// Do performs HTTP request -func (s *GetAssetByID) Do(ctx context.Context, - headers ...*common.Header) (response models.Asset, err error) { - err = s.c.get(ctx, &response, - fmt.Sprintf("/v2/assets/%d", s.assetId), nil, headers) +// Do performs the HTTP request +func (s *GetAssetByID) Do(ctx context.Context, headers ...*common.Header) (response models.Asset, err error) { + err = s.c.get(ctx, &response, fmt.Sprintf("/v2/assets/%v", s.assetId), nil, headers) return } diff --git a/client/v2/algod/block.go b/client/v2/algod/getBlock.go similarity index 59% rename from client/v2/algod/block.go rename to client/v2/algod/getBlock.go index d487b63d..bcc63505 100644 --- a/client/v2/algod/block.go +++ b/client/v2/algod/getBlock.go @@ -3,32 +3,38 @@ package algod import ( "context" "fmt" + "github.com/algorand/go-algorand-sdk/client/v2/common" "github.com/algorand/go-algorand-sdk/client/v2/common/models" "github.com/algorand/go-algorand-sdk/types" ) -type Block struct { - c *Client - round uint64 - p models.GetBlockParams +// BlockParams contains all of the query parameters for url serialization. +type BlockParams struct { + + // Format configures whether the response object is JSON or MessagePack encoded. + Format string `url:"format,omitempty"` } -type generatedBlockResponse struct { - // Block header data. - Block types.Block `json:"block"` +// Block get the block for the given round. +type Block struct { + c *Client - // Optional certificate object. This is only included when the format is set to message pack. - Cert *map[string]interface{} `json:"cert,omitempty"` + round uint64 + + p BlockParams } +// Do performs the HTTP request func (s *Block) Do(ctx context.Context, headers ...*common.Header) (result types.Block, err error) { + var response models.BlockResponse + s.p.Format = "msgpack" - var response generatedBlockResponse err = s.c.getMsgpack(ctx, &response, fmt.Sprintf("/v2/blocks/%d", s.round), s.p, headers) if err != nil { return } + result = response.Block return } diff --git a/client/v2/algod/getGenesis.go b/client/v2/algod/getGenesis.go index dcf3d90c..9ee87127 100644 --- a/client/v2/algod/getGenesis.go +++ b/client/v2/algod/getGenesis.go @@ -6,10 +6,12 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common" ) +// GetGenesis returns the entire genesis file in json. type GetGenesis struct { c *Client } +// Do performs the HTTP request func (s *GetGenesis) Do(ctx context.Context, headers ...*common.Header) (response string, err error) { err = s.c.get(ctx, &response, "/genesis", nil, headers) return diff --git a/client/v2/algod/getPendingTransactions.go b/client/v2/algod/getPendingTransactions.go index e79bf14c..2ef1b55d 100644 --- a/client/v2/algod/getPendingTransactions.go +++ b/client/v2/algod/getPendingTransactions.go @@ -8,6 +8,7 @@ import ( "github.com/algorand/go-algorand-sdk/types" ) +// PendingTransactionsParams contains all of the query parameters for url serialization. type PendingTransactionsParams struct { // Format configures whether the response object is JSON or MessagePack encoded. @@ -18,6 +19,9 @@ type PendingTransactionsParams struct { Max uint64 `url:"max,omitempty"` } +// PendingTransactions get the list of pending transactions, sorted by priority, in +// decreasing order, truncated at the end at MAX. If MAX = 0, returns all pending +// transactions. type PendingTransactions struct { c *Client @@ -31,6 +35,7 @@ func (s *PendingTransactions) Max(Max uint64) *PendingTransactions { return s } +// Do performs the HTTP request func (s *PendingTransactions) Do(ctx context.Context, headers ...*common.Header) (total uint64, topTransactions []types.SignedTxn, err error) { s.p.Format = "msgpack" response := models.PendingTransactionsResponse{} diff --git a/client/v2/algod/getPendingTransactionsByAddress.go b/client/v2/algod/getPendingTransactionsByAddress.go index 31da97ca..60ddfb73 100644 --- a/client/v2/algod/getPendingTransactionsByAddress.go +++ b/client/v2/algod/getPendingTransactionsByAddress.go @@ -9,7 +9,8 @@ import ( "github.com/algorand/go-algorand-sdk/types" ) -type PendingTransactionInformationByAddressParams struct { +// PendingTransactionsByAddressParams contains all of the query parameters for url serialization. +type PendingTransactionsByAddressParams struct { // Format configures whether the response object is JSON or MessagePack encoded. Format string `url:"format,omitempty"` @@ -19,22 +20,26 @@ type PendingTransactionInformationByAddressParams struct { Max uint64 `url:"max,omitempty"` } -type PendingTransactionInformationByAddress struct { +// PendingTransactionsByAddress get the list of pending transactions by address, +// sorted by priority, in decreasing order, truncated at the end at MAX. If MAX = +// 0, returns all pending transactions. +type PendingTransactionsByAddress struct { c *Client address string - p PendingTransactionInformationByAddressParams + p PendingTransactionsByAddressParams } // Max truncated number of transactions to display. If max=0, returns all pending // txns. -func (s *PendingTransactionInformationByAddress) Max(Max uint64) *PendingTransactionInformationByAddress { +func (s *PendingTransactionsByAddress) Max(Max uint64) *PendingTransactionsByAddress { s.p.Max = Max return s } -func (s *PendingTransactionInformationByAddress) Do(ctx context.Context, headers ...*common.Header) (total uint64, topTransactions []types.SignedTxn, err error) { +// Do performs the HTTP request +func (s *PendingTransactionsByAddress) Do(ctx context.Context, headers ...*common.Header) (total uint64, topTransactions []types.SignedTxn, err error) { s.p.Format = "msgpack" response := models.PendingTransactionsResponse{} err = s.c.getMsgpack(ctx, &response, fmt.Sprintf("/v2/accounts/%s/transactions/pending", s.address), s.p, headers) diff --git a/client/v2/algod/getProof.go b/client/v2/algod/getProof.go index 6526ebf4..e856702f 100644 --- a/client/v2/algod/getProof.go +++ b/client/v2/algod/getProof.go @@ -8,22 +8,24 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// GetProofParams contains all of the query parameters for url serialization. type GetProofParams struct { // Format configures whether the response object is JSON or MessagePack encoded. Format string `url:"format,omitempty"` } +// GetProof get a Merkle proof for a transaction in a block. type GetProof struct { c *Client round uint64 - - txid string + txid string p GetProofParams } +// Do performs the HTTP request func (s *GetProof) Do(ctx context.Context, headers ...*common.Header) (response models.ProofResponse, err error) { err = s.c.get(ctx, &response, fmt.Sprintf("/v2/blocks/%v/transactions/%v/proof", s.round, s.txid), s.p, headers) return diff --git a/client/v2/algod/getStatus.go b/client/v2/algod/getStatus.go index 0d93e991..7bbec8b5 100644 --- a/client/v2/algod/getStatus.go +++ b/client/v2/algod/getStatus.go @@ -7,10 +7,12 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// Status gets the current node status. type Status struct { c *Client } +// Do performs the HTTP request func (s *Status) Do(ctx context.Context, headers ...*common.Header) (response models.NodeStatus, err error) { err = s.c.get(ctx, &response, "/v2/status", nil, headers) return diff --git a/client/v2/algod/supply.go b/client/v2/algod/getSupply.go similarity index 57% rename from client/v2/algod/supply.go rename to client/v2/algod/getSupply.go index 16336d54..513e57d5 100644 --- a/client/v2/algod/supply.go +++ b/client/v2/algod/getSupply.go @@ -2,15 +2,18 @@ package algod import ( "context" + "github.com/algorand/go-algorand-sdk/client/v2/common" "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// Supply get the current supply reported by the ledger. type Supply struct { c *Client } -func (s *Supply) Do(ctx context.Context, headers ...*common.Header) (supply models.Supply, err error) { - err = s.c.get(ctx, &supply, "/v2/ledger/supply", nil, headers) +// Do performs the HTTP request +func (s *Supply) Do(ctx context.Context, headers ...*common.Header) (response models.Supply, err error) { + err = s.c.get(ctx, &response, "/v2/ledger/supply", nil, headers) return } diff --git a/client/v2/algod/versions.go b/client/v2/algod/getVersion.go similarity index 73% rename from client/v2/algod/versions.go rename to client/v2/algod/getVersion.go index 0143e72b..31e5f893 100644 --- a/client/v2/algod/versions.go +++ b/client/v2/algod/getVersion.go @@ -2,14 +2,18 @@ package algod import ( "context" + "github.com/algorand/go-algorand-sdk/client/v2/common" "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// Versions retrieves the supported API versions, binary build versions, and +// genesis information. type Versions struct { c *Client } +// Do performs the HTTP request func (s *Versions) Do(ctx context.Context, headers ...*common.Header) (response models.Version, err error) { err = s.c.get(ctx, &response, "/versions", nil, headers) return diff --git a/client/v2/algod/healthCheck.go b/client/v2/algod/healthCheck.go index 28b8c6a4..df0ba1d9 100644 --- a/client/v2/algod/healthCheck.go +++ b/client/v2/algod/healthCheck.go @@ -2,13 +2,16 @@ package algod import ( "context" + "github.com/algorand/go-algorand-sdk/client/v2/common" ) +// HealthCheck returns OK if healthy. type HealthCheck struct { c *Client } +// Do performs the HTTP request func (s *HealthCheck) Do(ctx context.Context, headers ...*common.Header) error { return s.c.get(ctx, nil, "/health", nil, headers) } diff --git a/client/v2/algod/pendingTransactionInformation.go b/client/v2/algod/pendingTransactionInformation.go index cc3f56a0..7d92a79a 100644 --- a/client/v2/algod/pendingTransactionInformation.go +++ b/client/v2/algod/pendingTransactionInformation.go @@ -9,12 +9,22 @@ import ( "github.com/algorand/go-algorand-sdk/types" ) +// PendingTransactionInformationParams contains all of the query parameters for url serialization. type PendingTransactionInformationParams struct { // Format configures whether the response object is JSON or MessagePack encoded. Format string `url:"format,omitempty"` } +// PendingTransactionInformation given a transaction id of a recently submitted +// transaction, it returns information about it. There are several cases when this +// might succeed: +// - transaction committed (committed round > 0) +// - transaction still in the pool (committed round = 0, pool error = "") +// - transaction removed from pool due to error (committed round = 0, pool error != +// "") +// Or the transaction may have happened sufficiently long ago that the node no +// longer remembers it, and this will return an error. type PendingTransactionInformation struct { c *Client @@ -23,6 +33,7 @@ type PendingTransactionInformation struct { p PendingTransactionInformationParams } +// Do performs the HTTP request func (s *PendingTransactionInformation) Do(ctx context.Context, headers ...*common.Header) (response models.PendingTransactionInfoResponse, stxn types.SignedTxn, err error) { s.p.Format = "msgpack" err = s.c.getMsgpack(ctx, &response, fmt.Sprintf("/v2/transactions/pending/%s", s.txid), s.p, headers) diff --git a/client/v2/algod/sendRawTransaction.go b/client/v2/algod/rawTransaction.go similarity index 63% rename from client/v2/algod/sendRawTransaction.go rename to client/v2/algod/rawTransaction.go index 8a68450c..d97b158a 100644 --- a/client/v2/algod/sendRawTransaction.go +++ b/client/v2/algod/rawTransaction.go @@ -2,21 +2,22 @@ package algod import ( "context" - "github.com/algorand/go-algorand-sdk/client/v2/common" "strings" + + "github.com/algorand/go-algorand-sdk/client/v2/common" + "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// SendRawTransaction broadcasts a raw transaction to the network. type SendRawTransaction struct { - c *Client - stx []byte -} + c *Client -type txidresponse struct { - TxID string `json:"txId"` + rawtxn []byte } +// Do performs the HTTP request func (s *SendRawTransaction) Do(ctx context.Context, headers ...*common.Header) (txid string, err error) { - var response txidresponse + var response models.PostTransactionsResponse // Set default Content-Type, if the user didn't specify it. addContentType := true for _, header := range headers { @@ -28,7 +29,7 @@ func (s *SendRawTransaction) Do(ctx context.Context, headers ...*common.Header) if addContentType { headers = append(headers, &common.Header{"Content-Type", "application/x-binary"}) } - err = s.c.post(ctx, &response, "/v2/transactions", s.stx, headers) - txid = response.TxID + err = s.c.post(ctx, &response, "/v2/transactions", s.rawtxn, headers) + txid = response.Txid return } diff --git a/client/v2/algod/statusAfterBlock.go b/client/v2/algod/statusAfterBlock.go deleted file mode 100644 index 115fe90c..00000000 --- a/client/v2/algod/statusAfterBlock.go +++ /dev/null @@ -1,18 +0,0 @@ -package algod - -import ( - "context" - "fmt" - "github.com/algorand/go-algorand-sdk/client/v2/common" - "github.com/algorand/go-algorand-sdk/client/v2/common/models" -) - -type StatusAfterBlock struct { - c *Client - round uint64 -} - -func (s *StatusAfterBlock) Do(ctx context.Context, headers ...*common.Header) (status models.NodeStatus, err error) { - err = s.c.get(ctx, &status, fmt.Sprintf("/v2/status/wait-for-block-after/%d", s.round), nil, headers) - return -} diff --git a/client/v2/algod/tealCompile.go b/client/v2/algod/tealCompile.go index 01130188..2d77b75a 100644 --- a/client/v2/algod/tealCompile.go +++ b/client/v2/algod/tealCompile.go @@ -7,18 +7,18 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) -// TealCompile /v2/teal/compile -// Given TEAL source code in plain text, return base64 encoded program bytes and -// base32 SHA512_256 hash of program bytes (Address style). +// TealCompile given TEAL source code in plain text, return base64 encoded program +// bytes and base32 SHA512_256 hash of program bytes (Address style). This endpoint +// is only enabled when a node's configureation file sets EnableDeveloperAPI to +// true. type TealCompile struct { - c *Client + c *Client + source []byte } -// Do performs HTTP request -func (s *TealCompile) Do(ctx context.Context, - headers ...*common.Header) (response models.CompileResponse, err error) { - err = s.c.post(ctx, &response, - "/v2/teal/compile", s.source, headers) +// Do performs the HTTP request +func (s *TealCompile) Do(ctx context.Context, headers ...*common.Header) (response models.CompileResponse, err error) { + err = s.c.post(ctx, &response, "/v2/teal/compile", s.source, headers) return } diff --git a/client/v2/algod/tealDryrun.go b/client/v2/algod/tealDryrun.go index 2b130858..da27faae 100644 --- a/client/v2/algod/tealDryrun.go +++ b/client/v2/algod/tealDryrun.go @@ -8,18 +8,17 @@ import ( "github.com/algorand/go-algorand-sdk/encoding/msgpack" ) -// TealDryrun /v2/teal/dryrun -// Executes TEAL program(s) in context and returns debugging information about the -// execution. +// TealDryrun executes TEAL program(s) in context and returns debugging information +// about the execution. This endpoint is only enabled when a node's configureation +// file sets EnableDeveloperAPI to true. type TealDryrun struct { - c *Client + c *Client + request models.DryrunRequest } -// Do performs HTTP request -func (s *TealDryrun) Do(ctx context.Context, - headers ...*common.Header) (response models.DryrunResponse, err error) { - err = s.c.post(ctx, &response, - "/v2/teal/dryrun", msgpack.Encode(&s.request), headers) +// Do performs the HTTP request +func (s *TealDryrun) Do(ctx context.Context, headers ...*common.Header) (response models.DryrunResponse, err error) { + err = s.c.post(ctx, &response, "/v2/teal/dryrun", msgpack.Encode(&s.request), headers) return } diff --git a/client/v2/algod/suggestedParams.go b/client/v2/algod/transactionParams.go similarity index 75% rename from client/v2/algod/suggestedParams.go rename to client/v2/algod/transactionParams.go index 88d76c6b..fe237662 100644 --- a/client/v2/algod/suggestedParams.go +++ b/client/v2/algod/transactionParams.go @@ -2,22 +2,25 @@ package algod import ( "context" + "github.com/algorand/go-algorand-sdk/client/v2/common" "github.com/algorand/go-algorand-sdk/client/v2/common/models" "github.com/algorand/go-algorand-sdk/types" ) +// SuggestedParams get parameters for constructing a new transaction type SuggestedParams struct { c *Client } +// Do performs the HTTP request func (s *SuggestedParams) Do(ctx context.Context, headers ...*common.Header) (params types.SuggestedParams, err error) { - var response models.TransactionParams + var response models.TransactionParametersResponse err = s.c.get(ctx, &response, "/v2/transactions/params", nil, headers) params = types.SuggestedParams{ Fee: types.MicroAlgos(response.Fee), - GenesisID: response.GenesisID, - GenesisHash: response.Genesishash, + GenesisID: response.GenesisId, + GenesisHash: response.GenesisHash, FirstRoundValid: types.Round(response.LastRound), LastRoundValid: types.Round(response.LastRound + 1000), ConsensusVersion: response.ConsensusVersion, diff --git a/client/v2/algod/waitForBlock.go b/client/v2/algod/waitForBlock.go new file mode 100644 index 00000000..536865dd --- /dev/null +++ b/client/v2/algod/waitForBlock.go @@ -0,0 +1,23 @@ +package algod + +import ( + "context" + "fmt" + + "github.com/algorand/go-algorand-sdk/client/v2/common" + "github.com/algorand/go-algorand-sdk/client/v2/common/models" +) + +// StatusAfterBlock waits for a block to appear after round {round} and returns the +// node's status at the time. +type StatusAfterBlock struct { + c *Client + + round uint64 +} + +// Do performs the HTTP request +func (s *StatusAfterBlock) Do(ctx context.Context, headers ...*common.Header) (response models.NodeStatus, err error) { + err = s.c.get(ctx, &response, fmt.Sprintf("/v2/status/wait-for-block-after/%v", s.round), nil, headers) + return +} diff --git a/client/v2/common/models/account_participation.go b/client/v2/common/models/account_participation.go new file mode 100644 index 00000000..3ed08a15 --- /dev/null +++ b/client/v2/common/models/account_participation.go @@ -0,0 +1,22 @@ +package models + +// AccountParticipation accountParticipation describes the parameters used by this +// account in consensus protocol. +type AccountParticipation struct { + // SelectionParticipationKey (sel) Selection public key (if any) currently + // registered for this round. + SelectionParticipationKey []byte `json:"selection-participation-key,omitempty"` + + // VoteFirstValid (voteFst) First round for which this participation is valid. + VoteFirstValid uint64 `json:"vote-first-valid,omitempty"` + + // VoteKeyDilution (voteKD) Number of subkeys in each batch of participation keys. + VoteKeyDilution uint64 `json:"vote-key-dilution,omitempty"` + + // VoteLastValid (voteLst) Last round for which this participation is valid. + VoteLastValid uint64 `json:"vote-last-valid,omitempty"` + + // VoteParticipationKey (vote) root participation public key (if any) currently + // registered for this round. + VoteParticipationKey []byte `json:"vote-participation-key,omitempty"` +} diff --git a/client/v2/common/models/account_response.go b/client/v2/common/models/account_response.go new file mode 100644 index 00000000..9ccbd289 --- /dev/null +++ b/client/v2/common/models/account_response.go @@ -0,0 +1,12 @@ +package models + +// AccountResponse +type AccountResponse struct { + // Account account information at a given round. + // Definition: + // data/basics/userBalance.go : AccountData + Account Account `json:"account,omitempty"` + + // CurrentRound round at which the results were computed. + CurrentRound uint64 `json:"current-round,omitempty"` +} diff --git a/client/v2/common/models/accounts_response.go b/client/v2/common/models/accounts_response.go new file mode 100644 index 00000000..e5f0b5b8 --- /dev/null +++ b/client/v2/common/models/accounts_response.go @@ -0,0 +1,14 @@ +package models + +// AccountsResponse +type AccountsResponse struct { + // Accounts + Accounts []Account `json:"accounts,omitempty"` + + // CurrentRound round at which the results were computed. + CurrentRound uint64 `json:"current-round,omitempty"` + + // NextToken used for pagination, when making another request provide this token + // with the next parameter. + NextToken string `json:"next-token,omitempty"` +} diff --git a/client/v2/common/models/application_responsemodels.go b/client/v2/common/models/application_responsemodels.go deleted file mode 100644 index 86ff0069..00000000 --- a/client/v2/common/models/application_responsemodels.go +++ /dev/null @@ -1,109 +0,0 @@ -package models - -import "github.com/algorand/go-algorand-sdk/types" - -// DryrunState stores the TEAL eval step data -type DryrunState struct { - // Error evaluation error if any - Error string `json:"error,omitempty"` - - // Line number - Line uint64 `json:"line,omitempty"` - - // Pc program counter - Pc uint64 `json:"pc,omitempty"` - - Scratch []TealValue `json:"scratch,omitempty"` - - Stack []TealValue `json:"stack,omitempty"` -} - -// DryrunTxnResult contains any LogicSig or ApplicationCall program debug -// information and state updates from a dryrun. -type DryrunTxnResult struct { - AppCallMessages []string `json:"app-call-messages,omitempty"` - - AppCallTrace []DryrunState `json:"app-call-trace,omitempty"` - - // Disassembly disassembled program line by line. - Disassembly []string `json:"disassembly,omitempty"` - - // GlobalDelta application state delta. - GlobalDelta []EvalDeltaKeyValue `json:"global-delta,omitempty"` - - LocalDeltas []AccountStateDelta `json:"local-deltas,omitempty"` - - LogicSigMessages []string `json:"logic-sig-messages,omitempty"` - - LogicSigTrace []DryrunState `json:"logic-sig-trace,omitempty"` -} - -// DryrunRequest request data type for dryrun endpoint. Given the Transactions and -// simulated ledger state upload, run TEAL scripts and return debugging -// information. -type DryrunRequest struct { - Accounts []Account `json:"accounts,omitempty"` - - Apps []Application `json:"apps,omitempty"` - - // LatestTimestamp is available to some TEAL scripts. Defaults to the latest - // confirmed timestamp this algod is attached to. - LatestTimestamp uint64 `json:"latest-timestamp,omitempty"` - - // ProtocolVersion specifies a specific version string to operate under, otherwise - // whatever the current protocol of the network this algod is running in. - ProtocolVersion string `json:"protocol-version,omitempty"` - - // Round is available to some TEAL scripts. Defaults to the current round on the - // network this algod is attached to. - Round uint64 `json:"round,omitempty"` - - Sources []DryrunSource `json:"sources,omitempty"` - - Txns []types.SignedTxn `json:"txns,omitempty"` -} - -// DryrunSource is TEAL source text that gets uploaded, compiled, and inserted into -// transactions or application state. -type DryrunSource struct { - AppIndex uint64 `json:"app-index,omitempty"` - - // FieldName is what kind of sources this is. If lsig then it goes into the - // transactions[this.TxnIndex].LogicSig. If approv or clearp it goes into the - // Approval Program or Clear State Program of application[this.AppIndex]. - FieldName string `json:"field-name,omitempty"` - - Source string `json:"source,omitempty"` - - TxnIndex uint64 `json:"txn-index,omitempty"` -} - -type CatchpointStartResponse struct { - // CatchupMessage catchup start response string - CatchupMessage string `json:"catchup-message,omitempty"` -} - -type CatchpointAbortResponse struct { - // CatchupMessage catchup abort response string - CatchupMessage string `json:"catchup-message,omitempty"` -} - -// CompileResponse teal compile Result -type CompileResponse struct { - // Hash base32 SHA512_256 of program bytes (Address style) - Hash string `json:"hash,omitempty"` - - // Result base64 encoded program bytes - Result string `json:"result,omitempty"` -} - -// DryrunResponse contains per-txn debug information from a dryrun. -type DryrunResponse struct { - Error string `json:"error,omitempty"` - - // ProtocolVersion protocol version is the protocol version Dryrun was operated - // under. - ProtocolVersion string `json:"protocol-version,omitempty"` - - Txns []DryrunTxnResult `json:"txns,omitempty"` -} diff --git a/client/v2/common/models/asset_balances_response.go b/client/v2/common/models/asset_balances_response.go new file mode 100644 index 00000000..5ec206e1 --- /dev/null +++ b/client/v2/common/models/asset_balances_response.go @@ -0,0 +1,14 @@ +package models + +// AssetBalancesResponse +type AssetBalancesResponse struct { + // Balances + Balances []MiniAssetHolding `json:"balances,omitempty"` + + // CurrentRound round at which the results were computed. + CurrentRound uint64 `json:"current-round,omitempty"` + + // NextToken used for pagination, when making another request provide this token + // with the next parameter. + NextToken string `json:"next-token,omitempty"` +} diff --git a/client/v2/common/models/asset_params.go b/client/v2/common/models/asset_params.go new file mode 100644 index 00000000..fbe395c2 --- /dev/null +++ b/client/v2/common/models/asset_params.go @@ -0,0 +1,52 @@ +package models + +// AssetParams assetParams specifies the parameters for an asset. +// (apar) when part of an AssetConfig transaction. +// Definition: +// data/transactions/asset.go : AssetParams +type AssetParams struct { + // Clawback (c) Address of account used to clawback holdings of this asset. If + // empty, clawback is not permitted. + Clawback string `json:"clawback,omitempty"` + + // Creator the address that created this asset. This is the address where the + // parameters for this asset can be found, and also the address where unwanted + // asset units can be sent in the worst case. + Creator string `json:"creator,omitempty"` + + // Decimals (dc) The number of digits to use after the decimal point when + // displaying this asset. If 0, the asset is not divisible. If 1, the base unit of + // the asset is in tenths. If 2, the base unit of the asset is in hundredths, and + // so on. This value must be between 0 and 19 (inclusive). + Decimals uint64 `json:"decimals,omitempty"` + + // DefaultFrozen (df) Whether holdings of this asset are frozen by default. + DefaultFrozen bool `json:"default-frozen,omitempty"` + + // Freeze (f) Address of account used to freeze holdings of this asset. If empty, + // freezing is not permitted. + Freeze string `json:"freeze,omitempty"` + + // Manager (m) Address of account used to manage the keys of this asset and to + // destroy it. + Manager string `json:"manager,omitempty"` + + // MetadataHash (am) A commitment to some unspecified asset metadata. The format of + // this metadata is up to the application. + MetadataHash []byte `json:"metadata-hash,omitempty"` + + // Name (an) Name of this asset, as supplied by the creator. + Name string `json:"name,omitempty"` + + // Reserve (r) Address of account holding reserve (non-minted) units of this asset. + Reserve string `json:"reserve,omitempty"` + + // Total (t) The total number of units of this asset. + Total uint64 `json:"total,omitempty"` + + // UnitName (un) Name of a unit of this asset, as supplied by the creator. + UnitName string `json:"unit-name,omitempty"` + + // Url (au) URL where more information about the asset can be retrieved. + Url string `json:"url,omitempty"` +} diff --git a/client/v2/common/models/asset_response.go b/client/v2/common/models/asset_response.go new file mode 100644 index 00000000..6cffe4b8 --- /dev/null +++ b/client/v2/common/models/asset_response.go @@ -0,0 +1,10 @@ +package models + +// AssetResponse +type AssetResponse struct { + // Asset specifies both the unique identifier and the parameters for an asset + Asset Asset `json:"asset,omitempty"` + + // CurrentRound round at which the results were computed. + CurrentRound uint64 `json:"current-round,omitempty"` +} diff --git a/client/v2/common/models/assets_response.go b/client/v2/common/models/assets_response.go new file mode 100644 index 00000000..d91dbd7a --- /dev/null +++ b/client/v2/common/models/assets_response.go @@ -0,0 +1,14 @@ +package models + +// AssetsResponse +type AssetsResponse struct { + // Assets + Assets []Asset `json:"assets,omitempty"` + + // CurrentRound round at which the results were computed. + CurrentRound uint64 `json:"current-round,omitempty"` + + // NextToken used for pagination, when making another request provide this token + // with the next parameter. + NextToken string `json:"next-token,omitempty"` +} diff --git a/client/v2/common/models/block.go b/client/v2/common/models/block.go new file mode 100644 index 00000000..59b56502 --- /dev/null +++ b/client/v2/common/models/block.go @@ -0,0 +1,52 @@ +package models + +// Block block information. +// Definition: +// data/bookkeeping/block.go : Block +type Block struct { + // GenesisHash (gh) hash to which this block belongs. + GenesisHash []byte `json:"genesis-hash,omitempty"` + + // GenesisId (gen) ID to which this block belongs. + GenesisId string `json:"genesis-id,omitempty"` + + // PreviousBlockHash (prev) Previous block hash. + PreviousBlockHash []byte `json:"previous-block-hash,omitempty"` + + // Rewards fields relating to rewards, + Rewards BlockRewards `json:"rewards,omitempty"` + + // Round (rnd) Current round on which this block was appended to the chain. + Round uint64 `json:"round,omitempty"` + + // Seed (seed) Sortition seed. + Seed []byte `json:"seed,omitempty"` + + // Timestamp (ts) Block creation timestamp in seconds since eposh + Timestamp uint64 `json:"timestamp,omitempty"` + + // Transactions (txns) list of transactions corresponding to a given round. + Transactions []Transaction `json:"transactions,omitempty"` + + // TransactionsRoot (txn) TransactionsRoot authenticates the set of transactions + // appearing in the block. More specifically, it's the root of a merkle tree whose + // leaves are the block's Txids, in lexicographic order. For the empty block, it's + // 0. Note that the TxnRoot does not authenticate the signatures on the + // transactions, only the transactions themselves. Two blocks with the same + // transactions but in a different order and with different signatures will have + // the same TxnRoot. + TransactionsRoot []byte `json:"transactions-root,omitempty"` + + // TxnCounter (tc) TxnCounter counts the number of transactions committed in the + // ledger, from the time at which support for this feature was introduced. + // Specifically, TxnCounter is the number of the next transaction that will be + // committed after this block. It is 0 when no transactions have ever been + // committed (since TxnCounter started being supported). + TxnCounter uint64 `json:"txn-counter,omitempty"` + + // UpgradeState fields relating to a protocol upgrade. + UpgradeState BlockUpgradeState `json:"upgrade-state,omitempty"` + + // UpgradeVote fields relating to voting for a protocol upgrade. + UpgradeVote BlockUpgradeVote `json:"upgrade-vote,omitempty"` +} diff --git a/client/v2/common/models/block_response.go b/client/v2/common/models/block_response.go new file mode 100644 index 00000000..2a3c8e3f --- /dev/null +++ b/client/v2/common/models/block_response.go @@ -0,0 +1,13 @@ +package models + +import "github.com/algorand/go-algorand-sdk/types" + +// BlockResponse encoded block object. +type BlockResponse struct { + // Block block header data. + Block types.Block `json:"block,omitempty"` + + // Cert optional certificate object. This is only included when the format is set + // to message pack. + Cert *map[string]interface{} `json:"cert,omitempty"` +} diff --git a/client/v2/common/models/block_rewards.go b/client/v2/common/models/block_rewards.go new file mode 100644 index 00000000..4b2443f6 --- /dev/null +++ b/client/v2/common/models/block_rewards.go @@ -0,0 +1,28 @@ +package models + +// BlockRewards fields relating to rewards, +type BlockRewards struct { + // FeeSink (fees) accepts transaction fees, it can only spend to the incentive + // pool. + FeeSink string `json:"fee-sink,omitempty"` + + // RewardsCalculationRound (rwcalr) number of leftover MicroAlgos after the + // distribution of rewards-rate MicroAlgos for every reward unit in the next round. + RewardsCalculationRound uint64 `json:"rewards-calculation-round,omitempty"` + + // RewardsLevel (earn) How many rewards, in MicroAlgos, have been distributed to + // each RewardUnit of MicroAlgos since genesis. + RewardsLevel uint64 `json:"rewards-level,omitempty"` + + // RewardsPool (rwd) accepts periodic injections from the fee-sink and continually + // redistributes them as rewards. + RewardsPool string `json:"rewards-pool,omitempty"` + + // RewardsRate (rate) Number of new MicroAlgos added to the participation stake + // from rewards at the next round. + RewardsRate uint64 `json:"rewards-rate,omitempty"` + + // RewardsResidue (frac) Number of leftover MicroAlgos after the distribution of + // RewardsRate/rewardUnits MicroAlgos for every reward unit in the next round. + RewardsResidue uint64 `json:"rewards-residue,omitempty"` +} diff --git a/client/v2/common/models/block_upgrade_state.go b/client/v2/common/models/block_upgrade_state.go new file mode 100644 index 00000000..f8cbb226 --- /dev/null +++ b/client/v2/common/models/block_upgrade_state.go @@ -0,0 +1,22 @@ +package models + +// BlockUpgradeState fields relating to a protocol upgrade. +type BlockUpgradeState struct { + // CurrentProtocol (proto) The current protocol version. + CurrentProtocol string `json:"current-protocol,omitempty"` + + // NextProtocol (nextproto) The next proposed protocol version. + NextProtocol string `json:"next-protocol,omitempty"` + + // NextProtocolApprovals (nextyes) Number of blocks which approved the protocol + // upgrade. + NextProtocolApprovals uint64 `json:"next-protocol-approvals,omitempty"` + + // NextProtocolSwitchOn (nextswitch) Round on which the protocol upgrade will take + // effect. + NextProtocolSwitchOn uint64 `json:"next-protocol-switch-on,omitempty"` + + // NextProtocolVoteBefore (nextbefore) Deadline round for this protocol upgrade (No + // votes will be consider after this round). + NextProtocolVoteBefore uint64 `json:"next-protocol-vote-before,omitempty"` +} diff --git a/client/v2/common/models/block_upgrade_vote.go b/client/v2/common/models/block_upgrade_vote.go new file mode 100644 index 00000000..18309a39 --- /dev/null +++ b/client/v2/common/models/block_upgrade_vote.go @@ -0,0 +1,13 @@ +package models + +// BlockUpgradeVote fields relating to voting for a protocol upgrade. +type BlockUpgradeVote struct { + // UpgradeApprove (upgradeyes) Indicates a yes vote for the current proposal. + UpgradeApprove bool `json:"upgrade-approve,omitempty"` + + // UpgradeDelay (upgradedelay) Indicates the time between acceptance and execution. + UpgradeDelay uint64 `json:"upgrade-delay,omitempty"` + + // UpgradePropose (upgradeprop) Indicates a proposed upgrade. + UpgradePropose string `json:"upgrade-propose,omitempty"` +} diff --git a/client/v2/common/models/build_version.go b/client/v2/common/models/build_version.go new file mode 100644 index 00000000..1d623381 --- /dev/null +++ b/client/v2/common/models/build_version.go @@ -0,0 +1,22 @@ +package models + +// BuildVersion defines a model for BuildVersion. +type BuildVersion struct { + // Branch + Branch string `json:"branch,omitempty"` + + // BuildNumber + BuildNumber uint64 `json:"build_number,omitempty"` + + // Channel + Channel string `json:"channel,omitempty"` + + // CommitHash + CommitHash string `json:"commit_hash,omitempty"` + + // Major + Major uint64 `json:"major,omitempty"` + + // Minor + Minor uint64 `json:"minor,omitempty"` +} diff --git a/client/v2/common/models/catchpoint_abort_response.go b/client/v2/common/models/catchpoint_abort_response.go new file mode 100644 index 00000000..92945e78 --- /dev/null +++ b/client/v2/common/models/catchpoint_abort_response.go @@ -0,0 +1,7 @@ +package models + +// CatchpointAbortResponse +type CatchpointAbortResponse struct { + // CatchupMessage catchup abort response string + CatchupMessage string `json:"catchup-message,omitempty"` +} diff --git a/client/v2/common/models/catchpoint_start_response.go b/client/v2/common/models/catchpoint_start_response.go new file mode 100644 index 00000000..21f7baff --- /dev/null +++ b/client/v2/common/models/catchpoint_start_response.go @@ -0,0 +1,7 @@ +package models + +// CatchpointStartResponse +type CatchpointStartResponse struct { + // CatchupMessage catchup start response string + CatchupMessage string `json:"catchup-message,omitempty"` +} diff --git a/client/v2/common/models/compile_response.go b/client/v2/common/models/compile_response.go new file mode 100644 index 00000000..54dbde86 --- /dev/null +++ b/client/v2/common/models/compile_response.go @@ -0,0 +1,10 @@ +package models + +// CompileResponse teal compile Result +type CompileResponse struct { + // Hash base32 SHA512_256 of program bytes (Address style) + Hash string `json:"hash,omitempty"` + + // Result base64 encoded program bytes + Result string `json:"result,omitempty"` +} diff --git a/client/v2/common/models/dryrun_request.go b/client/v2/common/models/dryrun_request.go new file mode 100644 index 00000000..3caf15fa --- /dev/null +++ b/client/v2/common/models/dryrun_request.go @@ -0,0 +1,33 @@ +package models + +import "github.com/algorand/go-algorand-sdk/types" + +// DryrunRequest request data type for dryrun endpoint. Given the Transactions and +// simulated ledger state upload, run TEAL scripts and return debugging +// information. +type DryrunRequest struct { + // Accounts + Accounts []Account `json:"accounts,omitempty"` + + // Apps + Apps []Application `json:"apps,omitempty"` + + // LatestTimestamp latestTimestamp is available to some TEAL scripts. Defaults to + // the latest confirmed timestamp this algod is attached to. + LatestTimestamp uint64 `json:"latest-timestamp,omitempty"` + + // ProtocolVersion protocolVersion specifies a specific version string to operate + // under, otherwise whatever the current protocol of the network this algod is + // running in. + ProtocolVersion string `json:"protocol-version,omitempty"` + + // Round round is available to some TEAL scripts. Defaults to the current round on + // the network this algod is attached to. + Round uint64 `json:"round,omitempty"` + + // Sources + Sources []DryrunSource `json:"sources,omitempty"` + + // Txns + Txns []types.SignedTxn `json:"txns,omitempty"` +} diff --git a/client/v2/common/models/dryrun_response.go b/client/v2/common/models/dryrun_response.go new file mode 100644 index 00000000..b62c1bb6 --- /dev/null +++ b/client/v2/common/models/dryrun_response.go @@ -0,0 +1,14 @@ +package models + +// DryrunResponse dryrunResponse contains per-txn debug information from a dryrun. +type DryrunResponse struct { + // Error + Error string `json:"error,omitempty"` + + // ProtocolVersion protocol version is the protocol version Dryrun was operated + // under. + ProtocolVersion string `json:"protocol-version,omitempty"` + + // Txns + Txns []DryrunTxnResult `json:"txns,omitempty"` +} diff --git a/client/v2/common/models/dryrun_source.go b/client/v2/common/models/dryrun_source.go new file mode 100644 index 00000000..5be82870 --- /dev/null +++ b/client/v2/common/models/dryrun_source.go @@ -0,0 +1,19 @@ +package models + +// DryrunSource dryrunSource is TEAL source text that gets uploaded, compiled, and +// inserted into transactions or application state. +type DryrunSource struct { + // AppIndex + AppIndex uint64 `json:"app-index,omitempty"` + + // FieldName fieldName is what kind of sources this is. If lsig then it goes into + // the transactions[this.TxnIndex].LogicSig. If approv or clearp it goes into the + // Approval Program or Clear State Program of application[this.AppIndex]. + FieldName string `json:"field-name,omitempty"` + + // Source + Source string `json:"source,omitempty"` + + // TxnIndex + TxnIndex uint64 `json:"txn-index,omitempty"` +} diff --git a/client/v2/common/models/dryrun_state.go b/client/v2/common/models/dryrun_state.go new file mode 100644 index 00000000..1a0db9e0 --- /dev/null +++ b/client/v2/common/models/dryrun_state.go @@ -0,0 +1,19 @@ +package models + +// DryrunState stores the TEAL eval step data +type DryrunState struct { + // Error evaluation error if any + Error string `json:"error,omitempty"` + + // Line line number + Line uint64 `json:"line,omitempty"` + + // Pc program counter + Pc uint64 `json:"pc,omitempty"` + + // Scratch + Scratch []TealValue `json:"scratch,omitempty"` + + // Stack + Stack []TealValue `json:"stack,omitempty"` +} diff --git a/client/v2/common/models/dryrun_txn_result.go b/client/v2/common/models/dryrun_txn_result.go new file mode 100644 index 00000000..c3699426 --- /dev/null +++ b/client/v2/common/models/dryrun_txn_result.go @@ -0,0 +1,26 @@ +package models + +// DryrunTxnResult dryrunTxnResult contains any LogicSig or ApplicationCall program +// debug information and state updates from a dryrun. +type DryrunTxnResult struct { + // AppCallMessages + AppCallMessages []string `json:"app-call-messages,omitempty"` + + // AppCallTrace + AppCallTrace []DryrunState `json:"app-call-trace,omitempty"` + + // Disassembly disassembled program line by line. + Disassembly []string `json:"disassembly,omitempty"` + + // GlobalDelta application state delta. + GlobalDelta []EvalDeltaKeyValue `json:"global-delta,omitempty"` + + // LocalDeltas + LocalDeltas []AccountStateDelta `json:"local-deltas,omitempty"` + + // LogicSigMessages + LogicSigMessages []string `json:"logic-sig-messages,omitempty"` + + // LogicSigTrace + LogicSigTrace []DryrunState `json:"logic-sig-trace,omitempty"` +} diff --git a/client/v2/common/models/error_response.go b/client/v2/common/models/error_response.go new file mode 100644 index 00000000..536a0035 --- /dev/null +++ b/client/v2/common/models/error_response.go @@ -0,0 +1,10 @@ +package models + +// ErrorResponse an error response with optional data field. +type ErrorResponse struct { + // Data + Data *map[string]interface{} `json:"data,omitempty"` + + // Message + Message string `json:"message,omitempty"` +} diff --git a/client/v2/common/models/filtermodels.go b/client/v2/common/models/filtermodels.go deleted file mode 100644 index a53127ae..00000000 --- a/client/v2/common/models/filtermodels.go +++ /dev/null @@ -1,280 +0,0 @@ -package models - -// GetBlockParams defines parameters for GetBlock. -type GetBlockParams struct { - // Return raw msgpack block bytes or json - Format string `url:"format,omitempty"` -} - -// RegisterParticipationKeysAccountIdParams defines parameters for GetV2RegisterParticipationKeysAccountId. -type RegisterParticipationKeysAccountIdParams struct { - - // The fee to use when submitting key registration transactions. Defaults to the suggested fee. - Fee uint64 `url:"fee,omitempty"` - - // value to use for two-level participation key. - KeyDilution uint64 `url:"key-dilution,omitempty"` - - // The last round for which the generated participation keys will be valid. - RoundLastValid uint64 `url:"round-last-valid,omitempty"` - - // Don't wait for transaction to commit. - NoWait bool `url:"no-wait,omitempty"` -} - -// ShutdownParams defines parameters for GetV2Shutdown. -type ShutdownParams struct { - Timeout uint64 `url:"timeout,omitempty"` -} - -// SearchAccountsParams defines parameters for SearchAccounts. -type SearchAccountsParams struct { - // ApplicationId application ID - ApplicationId uint64 `url:"application-id,omitempty"` - - // Include accounts holding the specified asset - AssetId uint64 `url:"asset-id,omitempty"` - - // Maximum number of results to return. - Limit uint64 `url:"limit,omitempty"` - - // Results should have an amount greater than this value. MicroAlgos are the default currency unless an asset-id is provided, in which case the asset will be used. - CurrencyGreaterThan uint64 `url:"currency-greater-than,omitempty"` - - // Results should have an amount less than this value. MicroAlgos are the default currency unless an asset-id is provided, in which case the asset will be used. - CurrencyLessThan uint64 `url:"currency-less-than,omitempty"` - - // Used in conjunction with limit to page through results. - AfterAddress string `url:"after-address,omitempty"` - - // Used for pagination. - NextToken string `url:"next,omitempty"` - - // Round for results. - Round uint64 `url:"round,omitempty"` - - // Include accounts associated with this spending key. - AuthAddr string `url:"auth-addr,omitempty"` -} - -// LookupAccountByIDParams defines parameters for LookupAccountByID. -type LookupAccountByIDParams struct { - - // Include results for the specified round. - Round uint64 `url:"round,omitempty"` -} - -// LookupAccountTransactionsParams defines parameters for LookupAccountTransactions. -type LookupAccountTransactionsParams struct { - - // Specifies a prefix which must be contained in the note field. - NotePrefix string `url:"note-prefix,omitempty"` - TxType string `url:"tx-type,omitempty"` - - // SigType filters just results using the specified type of signature: - // sig - Standard - // msig - MultiSig - // lsig - LogicSig - SigType string `url:"sig-type,omitempty"` - - // Lookup the specific transaction by ID. - TxId string `url:"txid,omitempty"` - - // Include results for the specified round. - Round uint64 `url:"round,omitempty"` - - // Include results at or after the specified min-round. - MinRound uint64 `url:"min-round,omitempty"` - - // Include results at or before the specified max-round. - MaxRound uint64 `url:"max-round,omitempty"` - - // Asset ID - AssetId uint64 `url:"asset-id,omitempty"` - - // Maximum number of results to return. - Limit uint64 `url:"limit,omitempty"` - - // Include results before the given time. Must be an RFC 3339 formatted string. - BeforeTime string `url:"before-time,omitempty"` - - // Include results after the given time. Must be an RFC 3339 formatted string. - AfterTime string `url:"after-time,omitempty"` - - // Results should have an amount greater than this value. MicroAlgos are the default currency unless an asset-id is provided, in which case the asset will be used. - CurrencyGreaterThan uint64 `url:"currency-greater-than,omitempty"` - - // Results should have an amount less than this value. MicroAlgos are the default currency unless an asset-id is provided, in which case the asset will be used. - CurrencyLessThan uint64 `url:"currency-less-than,omitempty"` - - // Used for pagination. - NextToken string `url:"next,omitempty"` - - // Whether to include rekeying transactions - RekeyTo bool `url:"rekey-to,omitempty"` -} - -// SearchForAssetsParams defines parameters for SearchForAssets. -type SearchForAssetsParams struct { - - // Maximum number of results to return. - Limit uint64 `url:"limit,omitempty"` - - // Filter just assets with the given creator address. - Creator string `url:"creator,omitempty"` - - // Filter just assets with the given name. - Name string `url:"name,omitempty"` - - // Filter just assets with the given unit. - Unit string `url:"unit,omitempty"` - - // Asset ID - AssetId uint64 `url:"asset-id,omitempty"` - - // Used in conjunction with limit to page through results. - AfterAsset uint64 `url:"after-asset,omitempty"` - - // Used for pagination. - NextToken string `url:"next,omitempty"` -} - -// LookupAssetBalancesParams defines parameters for LookupAssetBalances. -type LookupAssetBalancesParams struct { - - // Maximum number of results to return. - Limit uint64 `url:"limit,omitempty"` - - // Used in conjunction with limit to page through results. - AfterAddress string `url:"after-address,omitempty"` - - // Include results for the specified round. - Round uint64 `url:"round,omitempty"` - - // Results should have an amount greater than this value. MicroAlgos are the default currency unless an asset-id is provided, in which case the asset will be used. - CurrencyGreaterThan uint64 `url:"currency-greater-than,omitempty"` - - // Results should have an amount less than this value. MicroAlgos are the default currency unless an asset-id is provided, in which case the asset will be used. - CurrencyLessThan uint64 `url:"currency-less-than,omitempty"` - - // Used for pagination. - NextToken string `url:"next,omitempty"` -} - -// LookupAssetTransactionsParams defines parameters for LookupAssetTransactions. -type LookupAssetTransactionsParams struct { - - // Specifies a prefix which must be contained in the note field. - NotePrefix string `url:"note-prefix,omitempty"` - TxType string `url:"tx-type,omitempty"` - - // SigType filters just results using the specified type of signature: - // sig - Standard - // msig - MultiSig - // lsig - LogicSig - SigType string `url:"sig-type,omitempty"` - - // Lookup the specific transaction by ID. - TxId string `url:"txid,omitempty"` - - // Include results for the specified round. - Round uint64 `url:"round,omitempty"` - - // Include results at or after the specified min-round. - MinRound uint64 `url:"min-round,omitempty"` - - // Include results at or before the specified max-round. - MaxRound uint64 `url:"max-round,omitempty"` - - // Maximum number of results to return. - Limit uint64 `url:"limit,omitempty"` - - // Include results before the given time. Must be an RFC 3339 formatted string. - BeforeTime string `url:"before-time,omitempty"` - - // Include results after the given time. Must be an RFC 3339 formatted string. - AfterTime string `url:"after-time,omitempty"` - - // Results should have an amount greater than this value. MicroAlgos are the default currency unless an asset-id is provided, in which case the asset will be used. - CurrencyGreaterThan uint64 `url:"currency-greater-than,omitempty"` - - // Results should have an amount less than this value. MicroAlgos are the default currency unless an asset-id is provided, in which case the asset will be used. - CurrencyLessThan uint64 `url:"currency-less-than,omitempty"` - - // Only include transactions with this address in one of the transaction fields. - Address string `url:"address,omitempty"` - - // Combine with the address parameter to define what type of address to search for. - AddressRole string `url:"address-role,omitempty"` - - // Combine with address and address-role parameters to define what type of address to search for. The close to fields are normally treated as a receiver, if you would like to exclude them set this parameter to true. - ExcludeCloseTo bool `url:"exclude-close-to,omitempty"` - - // Used for pagination. - NextToken string `url:"next,omitempty"` - - // Whether to include rekeying transactions - RekeyTo bool `url:"rekey-to,omitempty"` -} - -// SearchForTransactionsParams defines parameters for SearchForTransactions. -type SearchForTransactionsParams struct { - - // ApplicationId application ID - ApplicationId uint64 `url:"application-id,omitempty"` - - // Specifies a prefix which must be contained in the note field. - NotePrefix string `url:"note-prefix,omitempty"` - TxType string `url:"tx-type,omitempty"` - - // SigType filters just results using the specified type of signature: - // sig - Standard - // msig - MultiSig - // lsig - LogicSig - SigType string `url:"sig-type,omitempty"` - - // Lookup the specific transaction by ID. - TxId string `url:"txid,omitempty"` - - // Include results for the specified round. - Round uint64 `url:"round,omitempty"` - - // Include results at or after the specified min-round. - MinRound uint64 `url:"min-round,omitempty"` - - // Include results at or before the specified max-round. - MaxRound uint64 `url:"max-round,omitempty"` - - // Asset ID - AssetId uint64 `url:"asset-id,omitempty"` - - // Maximum number of results to return. - Limit uint64 `url:"limit,omitempty"` - - // Include results before the given time. Must be an RFC 3339 formatted string. - BeforeTime string `url:"before-time,omitempty"` - - // Include results after the given time. Must be an RFC 3339 formatted string. - AfterTime string `url:"after-time,omitempty"` - - // Results should have an amount greater than this value. MicroAlgos are the default currency unless an asset-id is provided, in which case the asset will be used. - CurrencyGreaterThan uint64 `url:"currency-greater-than,omitempty"` - - // Results should have an amount less than this value. MicroAlgos are the default currency unless an asset-id is provided, in which case the asset will be used. - CurrencyLessThan uint64 `url:"currency-less-than,omitempty"` - - // Only include transactions with this address in one of the transaction fields. - Address string `url:"address,omitempty"` - - // Combine with the address parameter to define what type of address to search for. - AddressRole string `url:"address-role,omitempty"` - - // Combine with address and address-role parameters to define what type of address to search for. The close to fields are normally treated as a receiver, if you would like to exclude them set this parameter to true. - ExcludeCloseTo bool `url:"exclude-close-to,omitempty"` - - // Used for pagination. - NextToken string `url:"next,omitempty"` - - // Whether to include rekeying transactions - RekeyTo bool `url:"rekey-to,omitempty"` -} diff --git a/client/v2/common/models/post_transactions_response.go b/client/v2/common/models/post_transactions_response.go new file mode 100644 index 00000000..4a5fc1e2 --- /dev/null +++ b/client/v2/common/models/post_transactions_response.go @@ -0,0 +1,7 @@ +package models + +// PostTransactionsResponse transaction ID of the submission. +type PostTransactionsResponse struct { + // Txid encoding of the transaction hash. + Txid string `json:"txId,omitempty"` +} diff --git a/client/v2/common/models/responsemodels.go b/client/v2/common/models/responsemodels.go deleted file mode 100644 index db6ba1a6..00000000 --- a/client/v2/common/models/responsemodels.go +++ /dev/null @@ -1,690 +0,0 @@ -package models - -// AccountParticipation describes the parameters used by this account in consensus protocol. -type AccountParticipation struct { - - // \[sel\] Selection public key (if any) currently registered for this round. - SelectionParticipationKey []byte `json:"selection-participation-key,omitempty"` - - // \[voteFst\] First round for which this participation is valid. - VoteFirstValid uint64 `json:"vote-first-valid,omitempty"` - - // \[voteKD\] Number of subkeys in each batch of participation keys. - VoteKeyDilution uint64 `json:"vote-key-dilution,omitempty"` - - // \[voteLst\] Last round for which this participation is valid. - VoteLastValid uint64 `json:"vote-last-valid,omitempty"` - - // \[vote\] root participation public key (if any) currently registered for this round. - VoteParticipationKey []byte `json:"vote-participation-key,omitempty"` -} - -// AssetParams specifies the parameters for an asset. -type AssetParams struct { - - // \[c\] Address of account used to clawback holdings of this asset. If empty, clawback is not permitted. - Clawback string `json:"clawback,omitempty"` - - // The address that created this asset. This is the address where the parameters for this asset can be found, and also the address where unwanted asset units can be sent in the worst case. - Creator string `json:"creator"` - - // \[dc\] The number of digits to use after the decimal point when displaying this asset. If 0, the asset is not divisible. If 1, the base unit of the asset is in tenths. If 2, the base unit of the asset is in hundredths, and so on. This value must be between 0 and 19 (inclusive). - Decimals uint64 `json:"decimals"` - - // \[df\] Whether holdings of this asset are frozen by default. - DefaultFrozen bool `json:"default-frozen,omitempty"` - - // \[f\] Address of account used to freeze holdings of this asset. If empty, freezing is not permitted. - Freeze string `json:"freeze,omitempty"` - - // \[m\] Address of account used to manage the keys of this asset and to destroy it. - Manager string `json:"manager,omitempty"` - - // \[am\] A commitment to some unspecified asset metadata. The format of this metadata is up to the application. - MetadataHash []byte `json:"metadata-hash,omitempty"` - - // \[an\] Name of this asset, as supplied by the creator. - Name string `json:"name,omitempty"` - - // \[r\] Address of account holding reserve (non-minted) units of this asset. - Reserve string `json:"reserve,omitempty"` - - // \[t\] The total number of units of this asset. - Total uint64 `json:"total"` - - // \[un\] Name of a unit of this asset, as supplied by the creator. - UnitName string `json:"unit-name,omitempty"` - - // \[au\] URL where more information about the asset can be retrieved. - Url string `json:"url,omitempty"` -} - -type RawBlockJson struct { - Block string -} -type RawBlockMsgpack struct { - Block string `json:"url,omitempty"` -} - -// Block defines model for Block. -type Block struct { - Cert string `json:"cert"` - - // \[gh\] hash to which this block belongs. - GenesisHash []byte `json:"genesis-hash"` - - // \[gen\] ID to which this block belongs. - GenesisId string `json:"genesis-id"` - - // Current block hash - Hash []byte `json:"hash"` - - // Period on which the block was confirmed. - Period uint64 `json:"period"` - - // \[prev\] Previous block hash. - PreviousBlockHash []byte `json:"previous-block-hash"` - - // Address that proposed this block. - Proposer string `json:"proposer"` - - // Fields relating to rewards, - Rewards BlockRewards `json:"rewards,omitempty"` - - // \[rnd\] Current round on which this block was appended to the chain. - Round uint64 `json:"round"` - - // \[seed\] Sortition seed. - Seed []byte `json:"seed"` - - // \[ts\] Block creation timestamp in seconds since eposh - Timestamp uint64 `json:"timestamp"` - - // \[txns\] list of transactions corresponding to a given round. - Transactions []Transaction `json:"transactions,omitempty"` - - // \[txn\] TransactionsRoot authenticates the set of transactions appearing in the block. More specifically, it's the root of a merkle tree whose leaves are the block's Txids, in lexicographic order. For the empty block, it's 0. Note that the TxnRoot does not authenticate the signatures on the transactions, only the transactions themselves. Two blocks with the same transactions but in a different order and with different signatures will have the same TxnRoot. - TransactionsRoot []byte `json:"transactions-root"` - - // \[tc\] TxnCounter counts the number of transactions committed in the ledger, from the time at which support for this feature was introduced. - // - // Specifically, TxnCounter is the number of the next transaction that will be committed after this block. It is 0 when no transactions have ever been committed (since TxnCounter started being supported). - TxnCounter uint64 `json:"txn-counter,omitempty"` - - // Fields relating to a protocol upgrade. - UpgradeState BlockUpgradeState `json:"upgrade-state,omitempty"` - - // Fields relating to voting for a protocol upgrade. - UpgradeVote BlockUpgradeVote `json:"upgrade-vote,omitempty"` -} - -// BlockRewards defines model for BlockRewards. -type BlockRewards struct { - - // \[fees\] accepts transaction fees, it can only spend to the incentive pool. - FeeSink string `json:"fee-sink"` - - // \[rwcalr\] number of leftover MicroAlgos after the distribution of rewards-rate MicroAlgos for every reward unit in the next round. - RewardsCalculationRound uint64 `json:"rewards-calculation-round"` - - // \[earn\] How many rewards, in MicroAlgos, have been distributed to each RewardUnit of MicroAlgos since genesis. - RewardsLevel uint64 `json:"rewards-level"` - - // \[rwd\] accepts periodic injections from the fee-sink and continually redistributes them as rewards. - RewardsPool string `json:"rewards-pool"` - - // \[rate\] Number of new MicroAlgos added to the participation stake from rewards at the next round. - RewardsRate uint64 `json:"rewards-rate"` - - // \[frac\] Number of leftover MicroAlgos after the distribution of RewardsRate/rewardUnits MicroAlgos for every reward unit in the next round. - RewardsResidue uint64 `json:"rewards-residue"` -} - -// BlockUpgradeState defines model for BlockUpgradeState. -type BlockUpgradeState struct { - - // \[proto\] The current protocol version. - CurrentProtocol string `json:"current-protocol"` - - // \[nextproto\] The next proposed protocol version. - NextProtocol string `json:"next-protocol,omitempty"` - - // \[nextyes\] Number of blocks which approved the protocol upgrade. - NextProtocolApprovals uint64 `json:"next-protocol-approvals,omitempty"` - - // \[nextswitch\] Round on which the protocol upgrade will take effect. - NextProtocolSwitchOn uint64 `json:"next-protocol-switch-on,omitempty"` - - // \[nextbefore\] Deadline round for this protocol upgrade (No votes will be consider after this round). - NextProtocolVoteBefore uint64 `json:"next-protocol-vote-before,omitempty"` -} - -// BlockUpgradeVote defines model for BlockUpgradeVote. -type BlockUpgradeVote struct { - - // \[upgradeyes\] Indicates a yes vote for the current proposal. - UpgradeApprove bool `json:"upgrade-approve,omitempty"` - - // \[upgradedelay\] Indicates the time between acceptance and execution. - UpgradeDelay uint64 `json:"upgrade-delay,omitempty"` - - // \[upgradeprop\] Indicates a proposed upgrade. - UpgradePropose string `json:"upgrade-propose,omitempty"` -} - -// Supply defines model for Supply. -type Supply struct { - - // OnlineMoney - OnlineMoney uint64 `json:"online-money"` - - // Round - Round uint64 `json:"current_round"` - - // TotalMoney - TotalMoney uint64 `json:"total-money"` -} - -// Transaction contains all fields common to all transactions and serves as an -// envelope to all transactions type. -// Definition: -// data/transactions/signedtxn.go : SignedTxn -// data/transactions/transaction.go : Transaction -type Transaction struct { - // ApplicationTransaction fields for application transactions. - // Definition: - // data/transactions/application.go : ApplicationCallTxnFields - ApplicationTransaction TransactionApplication `json:"application-transaction,omitempty"` - - // AssetConfigTransaction fields for asset allocation, re-configuration, and - // destruction. - // A zero value for asset-id indicates asset creation. - // A zero value for the params indicates asset destruction. - // Definition: - // data/transactions/asset.go : AssetConfigTxnFields - AssetConfigTransaction TransactionAssetConfig `json:"asset-config-transaction,omitempty"` - - // AssetFreezeTransaction fields for an asset freeze transaction. - // Definition: - // data/transactions/asset.go : AssetFreezeTxnFields - AssetFreezeTransaction TransactionAssetFreeze `json:"asset-freeze-transaction,omitempty"` - - // AssetTransferTransaction fields for an asset transfer transaction. - // Definition: - // data/transactions/asset.go : AssetTransferTxnFields - AssetTransferTransaction TransactionAssetTransfer `json:"asset-transfer-transaction,omitempty"` - - // AuthAddr (sgnr) The address used to sign the transaction. This is used for - // rekeyed accounts to indicate that the sender address did not sign the - // transaction. - AuthAddr string `json:"auth-addr,omitempty"` - - // CloseRewards (rc) rewards applied to close-remainder-to account. - CloseRewards uint64 `json:"close-rewards,omitempty"` - - // ClosingAmount (ca) closing amount for transaction. - ClosingAmount uint64 `json:"closing-amount,omitempty"` - - // ConfirmedRound round when the transaction was confirmed. - ConfirmedRound uint64 `json:"confirmed-round,omitempty"` - - // CreatedApplicationIndex specifies an application index (ID) if an application - // was created with this transaction. - CreatedApplicationIndex uint64 `json:"created-application-index,omitempty"` - - // CreatedAssetIndex specifies an asset index (ID) if an asset was created with - // this transaction. - CreatedAssetIndex uint64 `json:"created-asset-index,omitempty"` - - // Fee (fee) Transaction fee. - Fee uint64 `json:"fee,omitempty"` - - // FirstValid (fv) First valid round for this transaction. - FirstValid uint64 `json:"first-valid,omitempty"` - - // GenesisHash (gh) Hash of genesis block. - GenesisHash []byte `json:"genesis-hash,omitempty"` - - // GenesisId (gen) genesis block ID. - GenesisId string `json:"genesis-id,omitempty"` - - // GlobalStateDelta (gd) Global state key/value changes for the application being - // executed by this transaction. - GlobalStateDelta []EvalDeltaKeyValue `json:"global-state-delta,omitempty"` - - // Group (grp) Base64 encoded byte array of a sha512/256 digest. When present - // indicates that this transaction is part of a transaction group and the value is - // the sha512/256 hash of the transactions in that group. - Group []byte `json:"group,omitempty"` - - // Id transaction ID - Id string `json:"id,omitempty"` - - // IntraRoundOffset offset into the round where this transaction was confirmed. - IntraRoundOffset uint64 `json:"intra-round-offset,omitempty"` - - // KeyregTransaction fields for a keyreg transaction. - // Definition: - // data/transactions/keyreg.go : KeyregTxnFields - KeyregTransaction TransactionKeyreg `json:"keyreg-transaction,omitempty"` - - // LastValid (lv) Last valid round for this transaction. - LastValid uint64 `json:"last-valid"` - - // Lease (lx) Base64 encoded 32-byte array. Lease enforces mutual exclusion of - // transactions. If this field is nonzero, then once the transaction is confirmed, - // it acquires the lease identified by the (Sender, Lease) pair of the transaction - // until the LastValid round passes. While this transaction possesses the lease, no - // other transaction specifying this lease can be confirmed. - Lease []byte `json:"lease,omitempty"` - - // LocalStateDelta (ld) Local state key/value changes for the application being - // executed by this transaction. - LocalStateDelta []AccountStateDelta `json:"local-state-delta,omitempty"` - - // Note (note) Free form data. - Note []byte `json:"note,omitempty"` - - // PaymentTransaction fields for a payment transaction. - // Definition: - // data/transactions/payment.go : PaymentTxnFields - PaymentTransaction TransactionPayment `json:"payment-transaction,omitempty"` - - // ReceiverRewards (rr) rewards applied to receiver account. - ReceiverRewards uint64 `json:"receiver-rewards,omitempty"` - - // RekeyTo (rekey) when included in a valid transaction, the accounts auth addr - // will be updated with this value and future signatures must be signed with the - // key represented by this address. - RekeyTo string `json:"rekey-to,omitempty"` - - // RoundTime time when the block this transaction is in was confirmed. - RoundTime uint64 `json:"round-time,omitempty"` - - // Sender (snd) Sender's address. - Sender string `json:"sender"` - - // SenderRewards (rs) rewards applied to sender account. - SenderRewards uint64 `json:"sender-rewards,omitempty"` - - // Signature validation signature associated with some data. Only one of the - // signatures should be provided. - Signature TransactionSignature `json:"signature"` - - // TxType (type) Indicates what type of transaction this is. Different types have - // different fields. - // Valid types, and where their fields are stored: - // * (pay) payment-transaction - // * (keyreg) keyreg-transaction - // * (acfg) asset-config-transaction - // * (axfer) asset-transfer-transaction - // * (afrz) asset-freeze-transaction - // * (appl) application-transaction - Type string `json:"tx-type"` -} - -// TransactionAssetConfig defines model for TransactionAssetConfig. -type TransactionAssetConfig struct { - - // \[xaid\] ID of the asset being configured or empty if creating. - AssetId uint64 `json:"asset-id,omitempty"` - - // AssetParams specifies the parameters for an asset. - // - // \[apar\] when part of an AssetConfig transaction. - // - // Definition: - // data/transactions/asset.go : AssetParams - Params AssetParams `json:"params,omitempty"` -} - -// TransactionAssetFreeze defines model for TransactionAssetFreeze. -type TransactionAssetFreeze struct { - - // \[fadd\] Address of the account whose asset is being frozen or thawed. - Address string `json:"address"` - - // \[faid\] ID of the asset being frozen or thawed. - AssetId uint64 `json:"asset-id"` - - // \[afrz\] The new freeze status. - NewFreezeStatus bool `json:"new-freeze-status"` -} - -// TransactionAssetTransfer defines model for TransactionAssetTransfer. -type TransactionAssetTransfer struct { - - // \[aamt\] Amount of asset to transfer. A zero amount transferred to self allocates that asset in the account's Assets map. - Amount uint64 `json:"amount"` - - // \[xaid\] ID of the asset being transferred. - AssetId uint64 `json:"asset-id"` - - // \[aclose\] Indicates that the asset should be removed from the account's Assets map, and specifies where the remaining asset holdings should be transferred. It's always valid to transfer remaining asset holdings to the creator account. - CloseTo string `json:"close-to,omitempty"` - - // \[arcv\] Recipient address of the transfer. - Receiver string `json:"receiver"` - - // \[asnd\] The effective sender during a clawback transactions. If this is not a zero value, the real transaction sender must be the Clawback address from the AssetParams. - Sender string `json:"sender,omitempty"` - - CloseAmount uint64 `json:"close-amount,omitempty"` -} - -// TransactionKeyreg defines model for TransactionKeyreg. -type TransactionKeyreg struct { - - // \[nonpart\] Mark the account as participating or non-participating. - NonParticipation bool `json:"non-participation,omitempty"` - - // \[selkey\] Public key used with the Verified Random Function (VRF) result during committee selection. - SelectionParticipationKey []byte `json:"selection-participation-key,omitempty"` - - // \[votefst\] First round this participation key is valid. - VoteFirstValid uint64 `json:"vote-first-valid,omitempty"` - - // \[votekd\] Number of subkeys in each batch of participation keys. - VoteKeyDilution uint64 `json:"vote-key-dilution,omitempty"` - - // \[votelst\] Last round this participation key is valid. - VoteLastValid uint64 `json:"vote-last-valid,omitempty"` - - // \[votekey\] Participation public key used in key registration transactions. - VoteParticipationKey []byte `json:"vote-participation-key,omitempty"` -} - -// TransactionParams contains the parameters that help a client construct a new transaction. -type TransactionParams struct { - - // ConsensusVersion indicates the consensus protocol version - // as of LastRound. - ConsensusVersion string `json:"consensus-version"` - - // Fee is the suggested transaction fee - // Fee is in units of micro-Algos per byte. - // Fee may fall to zero but transactions must still have a fee of - // at least MinTxnFee for the current network protocol. - Fee uint64 `json:"fee"` - - // GenesisID is an ID listed in the genesis block. - GenesisID string `json:"genesis-id"` - - // GenesisHash is the hash of the genesis block. - Genesishash []byte `json:"genesis-hash"` - - // LastRound indicates the last round seen - LastRound uint64 `json:"last-round"` - - // The minimum transaction fee (not per byte) required for the - // txn to validate for the current network protocol. - MinFee uint64 `json:"min-fee,omitempty"` -} - -// TransactionPayment defines model for TransactionPayment. -type TransactionPayment struct { - - // \[amt\] number of MicroAlgos intended to be transferred. - Amount uint64 `json:"amount"` - - // Number of MicroAlgos that were sent to the close-remainder-to address when closing the sender account. - CloseAmount uint64 `json:"close-amount,omitempty"` - - // \[close\] when set, indicates that the sending account should be closed and all remaining funds be transferred to this address. - CloseRemainderTo string `json:"close-remainder-to,omitempty"` - - // \[rcv\] receiver's address. - Receiver string `json:"receiver"` -} - -// TransactionSignature defines model for TransactionSignature. -type TransactionSignature struct { - - // \[lsig\] Programatic transaction signature. - // - // Definition: - // data/transactions/logicsig.go - Logicsig TransactionSignatureLogicsig `json:"logicsig,omitempty"` - - // \[msig\] structure holding multiple subsignatures. - // - // Definition: - // crypto/multisig.go : MultisigSig - Multisig TransactionSignatureMultisig `json:"multisig,omitempty"` - - // \[sig\] Standard ed25519 signature. - Sig []byte `json:"sig,omitempty"` -} - -// TransactionSignatureLogicsig defines model for TransactionSignatureLogicsig. -type TransactionSignatureLogicsig struct { - - // \[arg\] Logic arguments, base64 encoded. - Args []string `json:"args,omitempty"` - - // \[l\] Program signed by a signature or multi signature, or hashed to be the address of ana ccount. Base64 encoded TEAL program. - Logic []byte `json:"logic"` - - // \[msig\] structure holding multiple subsignatures. - // - // Definition: - // crypto/multisig.go : MultisigSig - MultisigSignature TransactionSignatureMultisig `json:"multisig-signature,omitempty"` - - // \[sig\] ed25519 signature. - Signature []byte `json:"signature,omitempty"` -} - -// TransactionSignatureMultisig defines model for TransactionSignatureMultisig. -type TransactionSignatureMultisig struct { - - // \[subsig\] holds pairs of public key and signatures. - Subsignature []TransactionSignatureMultisigSubsignature `json:"subsignature,omitempty"` - - // \[thr\] - Threshold uint64 `json:"threshold,omitempty"` - - // \[v\] - Version uint64 `json:"version,omitempty"` -} - -// TransactionSignatureMultisigSubsignature defines model for TransactionSignatureMultisigSubsignature. -type TransactionSignatureMultisigSubsignature struct { - - // \[pk\] - PublicKey []byte `json:"public-key,omitempty"` - - // \[s\] - Signature []byte `json:"signature,omitempty"` -} - -// Version defines model for Version. -type Version struct { - - // the current algod build version information. - Build VersionBuild `json:"build"` - GenesisHash []byte `json:"genesis-hash"` - GenesisId string `json:"genesis-id"` - Versions []string `json:"versions"` -} - -// VersionBuild defines model for the current algod build version information. -type VersionBuild struct { - Branch string `json:"branch"` - BuildNumber uint64 `json:"build-number"` - Channel string `json:"channel"` - CommitHash []byte `json:"commit-hash"` - Major uint64 `json:"major"` - Minor uint64 `json:"minor"` -} - -// AccountId defines model for account-id. -type AccountId string - -// Address defines model for address. -type Address string - -// AddressGreaterThan defines model for address-greater-than. -type AddressGreaterThan string - -// AddressRole defines model for address-role. -type AddressRole string - -// AfterAddress defines model for after-address. -type AfterAddress string - -// AfterAsset defines model for after-asset. -type AfterAsset uint64 - -// AfterTime defines model for after-time. -type AfterTime string - -// AlgosGreaterThan defines model for algos-greater-than. -type AlgosGreaterThan uint64 - -// AlgosLessThan defines model for algos-less-than. -type AlgosLessThan uint64 - -// AssetId defines model for asset-id. -type AssetId uint64 - -// BeforeTime defines model for before-time. -type BeforeTime string - -// CurrencyGreaterThan defines model for currency-greater-than. -type CurrencyGreaterThan uint64 - -// CurrencyLessThan defines model for currency-less-than. -type CurrencyLessThan uint64 - -// ExcludeCloseTo defines model for exclude-close-to. -type ExcludeCloseTo bool - -// Limit defines model for limit. -type Limit uint64 - -// MaxRound defines model for max-round. -type MaxRound uint64 - -// MinRound defines model for min-round. -type MinRound uint64 - -// NotePrefix defines model for note-prefix. -type NotePrefix []byte - -// Offset defines model for offset. -type Offset uint64 - -// Round defines model for round. -type Round uint64 - -// RoundNumber defines model for round-number. -type RoundNumber uint64 - -// SigType defines model for sig-type. -type SigType string - -// TxId defines model for tx-id. -type TxId []byte - -// TxType defines model for tx-type. -type TxType string - -// AccountResponse defines model for AccountResponse. -type AccountResponse struct { - - // Account information at a given round. - // - // Definition: - // data/basics/userBalance.go : AccountData - Account Account `json:"account"` - - // Round at which the results were computed. - CurrentRound uint64 `json:"current-round"` - - // Used for pagination, when making another request provide this token with the next parameter. - NextToken string `json:"next-token"` -} - -// AccountsResponse defines model for AccountsResponse. -type AccountsResponse struct { - Accounts []Account `json:"accounts"` - - // Round at which the results were computed. - CurrentRound uint64 `json:"current-round"` - - // Used for pagination, when making another request provide this token with the next parameter. - NextToken string `json:"next-token"` -} - -// AssetBalancesResponse defines model for AssetBalancesResponse. -type AssetBalancesResponse struct { - - // A simplified version of AssetHolding - Balances []MiniAssetHolding `json:"balances"` - - // Round at which the results were computed. - CurrentRound uint64 `json:"current-round"` - - // Used for pagination, when making another request provide this token with the next parameter. - NextToken string `json:"next-token"` -} - -// AssetResponse defines model for AssetResponse. -type AssetResponse struct { - - // Specifies both the unique identifier and the parameters for an asset - Asset Asset `json:"asset"` - - // Round at which the results were computed. - CurrentRound uint64 `json:"current-round"` -} - -// AssetsResponse defines model for AssetsResponse. -type AssetsResponse struct { - Assets []Asset `json:"assets"` - - // Round at which the results were computed. - CurrentRound uint64 `json:"current-round"` - - // Used for pagination, when making another request provide this token with the next parameter. - NextToken string `json:"next-token"` -} - -// BlockResponse defines model for BlockResponse. -type BlockResponse Block - -// HealthCheckResponse defines model for HealthCheckResponse. -type HealthCheckResponse HealthCheck - -// ErrorResponse defines model for ErrorResponse. -type ErrorResponse struct { - Data *map[string]interface{} `json:"data,omitempty"` - Message string `json:"message"` -} - -// TransactionsResponse defines model for TransactionsResponse. -type TransactionsResponse struct { - - // Round at which the results were computed. - CurrentRound uint64 `json:"current-round"` - Transactions []Transaction `json:"transactions"` - - // Used for pagination, when making another request provide this token with the next parameter. - NextToken string `json:"next-token"` -} - -// GetBlock response is returned by Block -type GetBlockResponse = struct { - Blockb64 string `json:"block"` -} - -type LookupAccountByIDResponse struct { - CurrentRound uint64 `json:"current-round"` - Account Account `json:"account"` -} - -type LookupAssetByIDResponse struct { - CurrentRound uint64 `json:"current-round"` - Asset Asset `json:"asset"` -} diff --git a/client/v2/common/models/shim.go b/client/v2/common/models/shim.go index 671d5ad2..cf856e28 100644 --- a/client/v2/common/models/shim.go +++ b/client/v2/common/models/shim.go @@ -8,3 +8,12 @@ type NodeStatus NodeStatusResponse // PendingTransactionInfoResponse is the single pending transaction response. type PendingTransactionInfoResponse PendingTransactionResponse + +// HealthCheckResponse defines model for HealthCheckResponse. +type HealthCheckResponse HealthCheck + +// Supply +type Supply SupplyResponse + +// VersionBuild +type VersionBuild BuildVersion diff --git a/client/v2/common/models/supply_response.go b/client/v2/common/models/supply_response.go new file mode 100644 index 00000000..64c68e96 --- /dev/null +++ b/client/v2/common/models/supply_response.go @@ -0,0 +1,13 @@ +package models + +// SupplyResponse supply represents the current supply of MicroAlgos in the system. +type SupplyResponse struct { + // Current_round round + Current_round uint64 `json:"current_round,omitempty"` + + // OnlineMoney onlineMoney + OnlineMoney uint64 `json:"online-money,omitempty"` + + // TotalMoney totalMoney + TotalMoney uint64 `json:"total-money,omitempty"` +} diff --git a/client/v2/common/models/transaction.go b/client/v2/common/models/transaction.go new file mode 100644 index 00000000..8d2f373c --- /dev/null +++ b/client/v2/common/models/transaction.go @@ -0,0 +1,139 @@ +package models + +// Transaction contains all fields common to all transactions and serves as an +// envelope to all transactions type. +// Definition: +// data/transactions/signedtxn.go : SignedTxn +// data/transactions/transaction.go : Transaction +type Transaction struct { + // ApplicationTransaction fields for application transactions. + // Definition: + // data/transactions/application.go : ApplicationCallTxnFields + ApplicationTransaction TransactionApplication `json:"application-transaction,omitempty"` + + // AssetConfigTransaction fields for asset allocation, re-configuration, and + // destruction. + // A zero value for asset-id indicates asset creation. + // A zero value for the params indicates asset destruction. + // Definition: + // data/transactions/asset.go : AssetConfigTxnFields + AssetConfigTransaction TransactionAssetConfig `json:"asset-config-transaction,omitempty"` + + // AssetFreezeTransaction fields for an asset freeze transaction. + // Definition: + // data/transactions/asset.go : AssetFreezeTxnFields + AssetFreezeTransaction TransactionAssetFreeze `json:"asset-freeze-transaction,omitempty"` + + // AssetTransferTransaction fields for an asset transfer transaction. + // Definition: + // data/transactions/asset.go : AssetTransferTxnFields + AssetTransferTransaction TransactionAssetTransfer `json:"asset-transfer-transaction,omitempty"` + + // AuthAddr (sgnr) The address used to sign the transaction. This is used for + // rekeyed accounts to indicate that the sender address did not sign the + // transaction. + AuthAddr string `json:"auth-addr,omitempty"` + + // CloseRewards (rc) rewards applied to close-remainder-to account. + CloseRewards uint64 `json:"close-rewards,omitempty"` + + // ClosingAmount (ca) closing amount for transaction. + ClosingAmount uint64 `json:"closing-amount,omitempty"` + + // ConfirmedRound round when the transaction was confirmed. + ConfirmedRound uint64 `json:"confirmed-round,omitempty"` + + // CreatedApplicationIndex specifies an application index (ID) if an application + // was created with this transaction. + CreatedApplicationIndex uint64 `json:"created-application-index,omitempty"` + + // CreatedAssetIndex specifies an asset index (ID) if an asset was created with + // this transaction. + CreatedAssetIndex uint64 `json:"created-asset-index,omitempty"` + + // Fee (fee) Transaction fee. + Fee uint64 `json:"fee,omitempty"` + + // FirstValid (fv) First valid round for this transaction. + FirstValid uint64 `json:"first-valid,omitempty"` + + // GenesisHash (gh) Hash of genesis block. + GenesisHash []byte `json:"genesis-hash,omitempty"` + + // GenesisId (gen) genesis block ID. + GenesisId string `json:"genesis-id,omitempty"` + + // GlobalStateDelta (gd) Global state key/value changes for the application being + // executed by this transaction. + GlobalStateDelta []EvalDeltaKeyValue `json:"global-state-delta,omitempty"` + + // Group (grp) Base64 encoded byte array of a sha512/256 digest. When present + // indicates that this transaction is part of a transaction group and the value is + // the sha512/256 hash of the transactions in that group. + Group []byte `json:"group,omitempty"` + + // Id transaction ID + Id string `json:"id,omitempty"` + + // IntraRoundOffset offset into the round where this transaction was confirmed. + IntraRoundOffset uint64 `json:"intra-round-offset,omitempty"` + + // KeyregTransaction fields for a keyreg transaction. + // Definition: + // data/transactions/keyreg.go : KeyregTxnFields + KeyregTransaction TransactionKeyreg `json:"keyreg-transaction,omitempty"` + + // LastValid (lv) Last valid round for this transaction. + LastValid uint64 `json:"last-valid,omitempty"` + + // Lease (lx) Base64 encoded 32-byte array. Lease enforces mutual exclusion of + // transactions. If this field is nonzero, then once the transaction is confirmed, + // it acquires the lease identified by the (Sender, Lease) pair of the transaction + // until the LastValid round passes. While this transaction possesses the lease, no + // other transaction specifying this lease can be confirmed. + Lease []byte `json:"lease,omitempty"` + + // LocalStateDelta (ld) Local state key/value changes for the application being + // executed by this transaction. + LocalStateDelta []AccountStateDelta `json:"local-state-delta,omitempty"` + + // Note (note) Free form data. + Note []byte `json:"note,omitempty"` + + // PaymentTransaction fields for a payment transaction. + // Definition: + // data/transactions/payment.go : PaymentTxnFields + PaymentTransaction TransactionPayment `json:"payment-transaction,omitempty"` + + // ReceiverRewards (rr) rewards applied to receiver account. + ReceiverRewards uint64 `json:"receiver-rewards,omitempty"` + + // RekeyTo (rekey) when included in a valid transaction, the accounts auth addr + // will be updated with this value and future signatures must be signed with the + // key represented by this address. + RekeyTo string `json:"rekey-to,omitempty"` + + // RoundTime time when the block this transaction is in was confirmed. + RoundTime uint64 `json:"round-time,omitempty"` + + // Sender (snd) Sender's address. + Sender string `json:"sender,omitempty"` + + // SenderRewards (rs) rewards applied to sender account. + SenderRewards uint64 `json:"sender-rewards,omitempty"` + + // Signature validation signature associated with some data. Only one of the + // signatures should be provided. + Signature TransactionSignature `json:"signature,omitempty"` + + // Type (type) Indicates what type of transaction this is. Different types have + // different fields. + // Valid types, and where their fields are stored: + // * (pay) payment-transaction + // * (keyreg) keyreg-transaction + // * (acfg) asset-config-transaction + // * (axfer) asset-transfer-transaction + // * (afrz) asset-freeze-transaction + // * (appl) application-transaction + Type string `json:"tx-type,omitempty"` +} diff --git a/client/v2/common/models/transaction_asset_config.go b/client/v2/common/models/transaction_asset_config.go new file mode 100644 index 00000000..ef652aa6 --- /dev/null +++ b/client/v2/common/models/transaction_asset_config.go @@ -0,0 +1,18 @@ +package models + +// TransactionAssetConfig fields for asset allocation, re-configuration, and +// destruction. +// A zero value for asset-id indicates asset creation. +// A zero value for the params indicates asset destruction. +// Definition: +// data/transactions/asset.go : AssetConfigTxnFields +type TransactionAssetConfig struct { + // AssetId (xaid) ID of the asset being configured or empty if creating. + AssetId uint64 `json:"asset-id,omitempty"` + + // Params assetParams specifies the parameters for an asset. + // (apar) when part of an AssetConfig transaction. + // Definition: + // data/transactions/asset.go : AssetParams + Params AssetParams `json:"params,omitempty"` +} diff --git a/client/v2/common/models/transaction_asset_freeze.go b/client/v2/common/models/transaction_asset_freeze.go new file mode 100644 index 00000000..51e6528f --- /dev/null +++ b/client/v2/common/models/transaction_asset_freeze.go @@ -0,0 +1,15 @@ +package models + +// TransactionAssetFreeze fields for an asset freeze transaction. +// Definition: +// data/transactions/asset.go : AssetFreezeTxnFields +type TransactionAssetFreeze struct { + // Address (fadd) Address of the account whose asset is being frozen or thawed. + Address string `json:"address,omitempty"` + + // AssetId (faid) ID of the asset being frozen or thawed. + AssetId uint64 `json:"asset-id,omitempty"` + + // NewFreezeStatus (afrz) The new freeze status. + NewFreezeStatus bool `json:"new-freeze-status,omitempty"` +} diff --git a/client/v2/common/models/transaction_asset_transfer.go b/client/v2/common/models/transaction_asset_transfer.go new file mode 100644 index 00000000..9f50cd2e --- /dev/null +++ b/client/v2/common/models/transaction_asset_transfer.go @@ -0,0 +1,31 @@ +package models + +// TransactionAssetTransfer fields for an asset transfer transaction. +// Definition: +// data/transactions/asset.go : AssetTransferTxnFields +type TransactionAssetTransfer struct { + // Amount (aamt) Amount of asset to transfer. A zero amount transferred to self + // allocates that asset in the account's Assets map. + Amount uint64 `json:"amount,omitempty"` + + // AssetId (xaid) ID of the asset being transferred. + AssetId uint64 `json:"asset-id,omitempty"` + + // CloseAmount number of assets transfered to the close-to account as part of the + // transaction. + CloseAmount uint64 `json:"close-amount,omitempty"` + + // CloseTo (aclose) Indicates that the asset should be removed from the account's + // Assets map, and specifies where the remaining asset holdings should be + // transferred. It's always valid to transfer remaining asset holdings to the + // creator account. + CloseTo string `json:"close-to,omitempty"` + + // Receiver (arcv) Recipient address of the transfer. + Receiver string `json:"receiver,omitempty"` + + // Sender (asnd) The effective sender during a clawback transactions. If this is + // not a zero value, the real transaction sender must be the Clawback address from + // the AssetParams. + Sender string `json:"sender,omitempty"` +} diff --git a/client/v2/common/models/transaction_keyreg.go b/client/v2/common/models/transaction_keyreg.go new file mode 100644 index 00000000..c5f96502 --- /dev/null +++ b/client/v2/common/models/transaction_keyreg.go @@ -0,0 +1,27 @@ +package models + +// TransactionKeyreg fields for a keyreg transaction. +// Definition: +// data/transactions/keyreg.go : KeyregTxnFields +type TransactionKeyreg struct { + // NonParticipation (nonpart) Mark the account as participating or + // non-participating. + NonParticipation bool `json:"non-participation,omitempty"` + + // SelectionParticipationKey (selkey) Public key used with the Verified Random + // Function (VRF) result during committee selection. + SelectionParticipationKey []byte `json:"selection-participation-key,omitempty"` + + // VoteFirstValid (votefst) First round this participation key is valid. + VoteFirstValid uint64 `json:"vote-first-valid,omitempty"` + + // VoteKeyDilution (votekd) Number of subkeys in each batch of participation keys. + VoteKeyDilution uint64 `json:"vote-key-dilution,omitempty"` + + // VoteLastValid (votelst) Last round this participation key is valid. + VoteLastValid uint64 `json:"vote-last-valid,omitempty"` + + // VoteParticipationKey (votekey) Participation public key used in key registration + // transactions. + VoteParticipationKey []byte `json:"vote-participation-key,omitempty"` +} diff --git a/client/v2/common/models/transaction_parameters_response.go b/client/v2/common/models/transaction_parameters_response.go new file mode 100644 index 00000000..25117bc0 --- /dev/null +++ b/client/v2/common/models/transaction_parameters_response.go @@ -0,0 +1,28 @@ +package models + +// TransactionParametersResponse transactionParams contains the parameters that +// help a client construct a new transaction. +type TransactionParametersResponse struct { + // ConsensusVersion consensusVersion indicates the consensus protocol version + // as of LastRound. + ConsensusVersion string `json:"consensus-version,omitempty"` + + // Fee fee is the suggested transaction fee + // Fee is in units of micro-Algos per byte. + // Fee may fall to zero but transactions must still have a fee of + // at least MinTxnFee for the current network protocol. + Fee uint64 `json:"fee,omitempty"` + + // GenesisHash genesisHash is the hash of the genesis block. + GenesisHash []byte `json:"genesis-hash,omitempty"` + + // GenesisId genesisID is an ID listed in the genesis block. + GenesisId string `json:"genesis-id,omitempty"` + + // LastRound lastRound indicates the last round seen + LastRound uint64 `json:"last-round,omitempty"` + + // MinFee the minimum transaction fee (not per byte) required for the + // txn to validate for the current network protocol. + MinFee uint64 `json:"min-fee,omitempty"` +} diff --git a/client/v2/common/models/transaction_payment.go b/client/v2/common/models/transaction_payment.go new file mode 100644 index 00000000..12388bec --- /dev/null +++ b/client/v2/common/models/transaction_payment.go @@ -0,0 +1,20 @@ +package models + +// TransactionPayment fields for a payment transaction. +// Definition: +// data/transactions/payment.go : PaymentTxnFields +type TransactionPayment struct { + // Amount (amt) number of MicroAlgos intended to be transferred. + Amount uint64 `json:"amount,omitempty"` + + // CloseAmount number of MicroAlgos that were sent to the close-remainder-to + // address when closing the sender account. + CloseAmount uint64 `json:"close-amount,omitempty"` + + // CloseRemainderTo (close) when set, indicates that the sending account should be + // closed and all remaining funds be transferred to this address. + CloseRemainderTo string `json:"close-remainder-to,omitempty"` + + // Receiver (rcv) receiver's address. + Receiver string `json:"receiver,omitempty"` +} diff --git a/client/v2/common/models/transaction_signature.go b/client/v2/common/models/transaction_signature.go new file mode 100644 index 00000000..fd99ac2d --- /dev/null +++ b/client/v2/common/models/transaction_signature.go @@ -0,0 +1,18 @@ +package models + +// TransactionSignature validation signature associated with some data. Only one of +// the signatures should be provided. +type TransactionSignature struct { + // Logicsig (lsig) Programatic transaction signature. + // Definition: + // data/transactions/logicsig.go + Logicsig TransactionSignatureLogicsig `json:"logicsig,omitempty"` + + // Multisig (msig) structure holding multiple subsignatures. + // Definition: + // crypto/multisig.go : MultisigSig + Multisig TransactionSignatureMultisig `json:"multisig,omitempty"` + + // Sig (sig) Standard ed25519 signature. + Sig []byte `json:"sig,omitempty"` +} diff --git a/client/v2/common/models/transaction_signature_logicsig.go b/client/v2/common/models/transaction_signature_logicsig.go new file mode 100644 index 00000000..dbcf6a53 --- /dev/null +++ b/client/v2/common/models/transaction_signature_logicsig.go @@ -0,0 +1,21 @@ +package models + +// TransactionSignatureLogicsig (lsig) Programatic transaction signature. +// Definition: +// data/transactions/logicsig.go +type TransactionSignatureLogicsig struct { + // Args (arg) Logic arguments, base64 encoded. + Args [][]byte `json:"args,omitempty"` + + // Logic (l) Program signed by a signature or multi signature, or hashed to be the + // address of ana ccount. Base64 encoded TEAL program. + Logic []byte `json:"logic,omitempty"` + + // MultisigSignature (msig) structure holding multiple subsignatures. + // Definition: + // crypto/multisig.go : MultisigSig + MultisigSignature TransactionSignatureMultisig `json:"multisig-signature,omitempty"` + + // Signature (sig) ed25519 signature. + Signature []byte `json:"signature,omitempty"` +} diff --git a/client/v2/common/models/transaction_signature_multisig.go b/client/v2/common/models/transaction_signature_multisig.go new file mode 100644 index 00000000..be139660 --- /dev/null +++ b/client/v2/common/models/transaction_signature_multisig.go @@ -0,0 +1,15 @@ +package models + +// TransactionSignatureMultisig (msig) structure holding multiple subsignatures. +// Definition: +// crypto/multisig.go : MultisigSig +type TransactionSignatureMultisig struct { + // Subsignature (subsig) holds pairs of public key and signatures. + Subsignature []TransactionSignatureMultisigSubsignature `json:"subsignature,omitempty"` + + // Threshold (thr) + Threshold uint64 `json:"threshold,omitempty"` + + // Version (v) + Version uint64 `json:"version,omitempty"` +} diff --git a/client/v2/common/models/transaction_signature_multisig_subsignature.go b/client/v2/common/models/transaction_signature_multisig_subsignature.go new file mode 100644 index 00000000..4d9f2248 --- /dev/null +++ b/client/v2/common/models/transaction_signature_multisig_subsignature.go @@ -0,0 +1,10 @@ +package models + +// TransactionSignatureMultisigSubsignature defines a model for TransactionSignatureMultisigSubsignature. +type TransactionSignatureMultisigSubsignature struct { + // PublicKey (pk) + PublicKey []byte `json:"public-key,omitempty"` + + // Signature (s) + Signature []byte `json:"signature,omitempty"` +} diff --git a/client/v2/common/models/transactions_response.go b/client/v2/common/models/transactions_response.go new file mode 100644 index 00000000..b56ca623 --- /dev/null +++ b/client/v2/common/models/transactions_response.go @@ -0,0 +1,14 @@ +package models + +// TransactionsResponse +type TransactionsResponse struct { + // CurrentRound round at which the results were computed. + CurrentRound uint64 `json:"current-round,omitempty"` + + // NextToken used for pagination, when making another request provide this token + // with the next parameter. + NextToken string `json:"next-token,omitempty"` + + // Transactions + Transactions []Transaction `json:"transactions,omitempty"` +} diff --git a/client/v2/common/models/version.go b/client/v2/common/models/version.go new file mode 100644 index 00000000..d63e7b0d --- /dev/null +++ b/client/v2/common/models/version.go @@ -0,0 +1,16 @@ +package models + +// Version algod version information. +type Version struct { + // Build + Build BuildVersion `json:"build,omitempty"` + + // GenesisHash + GenesisHash []byte `json:"genesis_hash_b64,omitempty"` + + // GenesisID + GenesisID string `json:"genesis_id,omitempty"` + + // Versions + Versions []string `json:"versions,omitempty"` +} diff --git a/client/v2/indexer/application_client.go b/client/v2/indexer/application_client.go deleted file mode 100644 index 211aaf77..00000000 --- a/client/v2/indexer/application_client.go +++ /dev/null @@ -1,13 +0,0 @@ -package indexer - -// /v2/applications/{application-id} -// Lookup application. -func (c *Client) LookupApplicationByID(applicationId uint64) *LookupApplicationByID { - return &LookupApplicationByID{c: c, applicationId: applicationId} -} - -// /v2/applications -// Search for applications -func (c *Client) SearchForApplications() *SearchForApplications { - return &SearchForApplications{c: c} -} diff --git a/client/v2/indexer/healthCheck.go b/client/v2/indexer/healthCheck.go deleted file mode 100644 index a8e039a8..00000000 --- a/client/v2/indexer/healthCheck.go +++ /dev/null @@ -1,19 +0,0 @@ -package indexer - -import ( - "context" - - "github.com/algorand/go-algorand-sdk/client/v2/common" - "github.com/algorand/go-algorand-sdk/client/v2/common/models" -) - -type HealthCheck struct { - c *Client -} - -func (s *HealthCheck) Do(ctx context.Context, headers ...*common.Header) (healthCheck models.HealthCheckResponse, err error) { - var response models.HealthCheckResponse - err = s.c.get(ctx, &response, "/health", nil, headers) - healthCheck = models.HealthCheckResponse(response) - return -} diff --git a/client/v2/indexer/indexer.go b/client/v2/indexer/indexer.go index 3546b7f1..731c28c1 100644 --- a/client/v2/indexer/indexer.go +++ b/client/v2/indexer/indexer.go @@ -6,18 +6,35 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common" ) -const indexerAuthHeader = "X-Indexer-API-Token" +const authHeader = "X-Indexer-API-Token" type Client common.Client -// get performs a GET request to the specific path against the server +// get performs a GET request to the specific path against the server, assumes JSON response func (c *Client) get(ctx context.Context, response interface{}, path string, body interface{}, headers []*common.Header) error { return (*common.Client)(c).Get(ctx, response, path, body, headers) } -// MakeClient is the factory for constructing an IndexerClient for a given endpoint. +// getMsgpack performs a GET request to the specific path against the server, assumes msgpack response +func (c *Client) getMsgpack(ctx context.Context, response interface{}, path string, body interface{}, headers []*common.Header) error { + return (*common.Client)(c).GetRawMsgpack(ctx, response, path, body, headers) +} + +// getMsgpack performs a GET request to the specific path against the server, assumes msgpack response +func (c *Client) getRaw(ctx context.Context, path string, body interface{}, headers []*common.Header) ([]byte, error) { + return (*common.Client)(c).GetRaw(ctx, path, body, headers) +} + +// post sends a POST request to the given path with the given request object. +// No query parameters will be sent if request is nil. +// response must be a pointer to an object as post writes the response there. +func (c *Client) post(ctx context.Context, response interface{}, path string, body interface{}, headers []*common.Header) error { + return (*common.Client)(c).Post(ctx, response, path, body, headers) +} + +// MakeClient is the factory for constructing a ClientV2 for a given endpoint. func MakeClient(address string, apiToken string) (c *Client, err error) { - commonClient, err := common.MakeClient(address, indexerAuthHeader, apiToken) + commonClient, err := common.MakeClient(address, authHeader, apiToken) c = (*Client)(commonClient) return } @@ -26,42 +43,50 @@ func (c *Client) HealthCheck() *HealthCheck { return &HealthCheck{c: c} } -func (c *Client) LookupAssetBalances(index uint64) *LookupAssetBalances { - return &LookupAssetBalances{c: c, index: index} +func (c *Client) SearchAccounts() *SearchAccounts { + return &SearchAccounts{c: c} } -func (c *Client) LookupAssetTransactions(index uint64) *LookupAssetTransactions { - return &LookupAssetTransactions{c: c, index: index} +func (c *Client) LookupAccountByID(accountId string) *LookupAccountByID { + return &LookupAccountByID{c: c, accountId: accountId} } -func (c *Client) LookupAccountTransactions(account string) *LookupAccountTransactions { - return &LookupAccountTransactions{c: c, account: account} +func (c *Client) LookupAccountTransactions(accountId string) *LookupAccountTransactions { + return &LookupAccountTransactions{c: c, accountId: accountId} } -func (c *Client) LookupBlock(round uint64) *LookupBlock { - return &LookupBlock{c: c, round: round} +func (c *Client) SearchForApplications() *SearchForApplications { + return &SearchForApplications{c: c} } -func (c *Client) LookupAccountByID(account string) *LookupAccountByID { - return &LookupAccountByID{c: c, accountId: account} +func (c *Client) LookupApplicationByID(applicationId uint64) *LookupApplicationByID { + return &LookupApplicationByID{c: c, applicationId: applicationId} } -func (c *Client) LookupAssetByID(index uint64) *LookupAssetByID { - return &LookupAssetByID{c: c, index: index} +func (c *Client) SearchForAssets() *SearchForAssets { + return &SearchForAssets{c: c} } -func (c *Client) SearchAccounts() *SearchAccounts { - return &SearchAccounts{c: c} +func (c *Client) LookupAssetByID(assetId uint64) *LookupAssetByID { + return &LookupAssetByID{c: c, assetId: assetId} } -func (c *Client) SearchForTransactions() *SearchForTransactions { - return &SearchForTransactions{c: c} +func (c *Client) LookupAssetBalances(assetId uint64) *LookupAssetBalances { + return &LookupAssetBalances{c: c, assetId: assetId} } -func (c *Client) SearchForAssets() *SearchForAssets { - return &SearchForAssets{c: c} +func (c *Client) LookupAssetTransactions(assetId uint64) *LookupAssetTransactions { + return &LookupAssetTransactions{c: c, assetId: assetId} +} + +func (c *Client) LookupBlock(roundNumber uint64) *LookupBlock { + return &LookupBlock{c: c, roundNumber: roundNumber} } func (c *Client) LookupTransaction(txid string) *LookupTransaction { return &LookupTransaction{c: c, txid: txid} } + +func (c *Client) SearchForTransactions() *SearchForTransactions { + return &SearchForTransactions{c: c} +} diff --git a/client/v2/indexer/lookupAccountByID.go b/client/v2/indexer/lookupAccountByID.go index b54bafa1..9831daa6 100644 --- a/client/v2/indexer/lookupAccountByID.go +++ b/client/v2/indexer/lookupAccountByID.go @@ -8,6 +8,7 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// LookupAccountByIDParams contains all of the query parameters for url serialization. type LookupAccountByIDParams struct { // IncludeAll include all items including closed accounts, deleted applications, @@ -19,6 +20,7 @@ type LookupAccountByIDParams struct { Round uint64 `url:"round,omitempty"` } +// LookupAccountByID lookup account information. type LookupAccountByID struct { c *Client @@ -41,8 +43,9 @@ func (s *LookupAccountByID) Round(Round uint64) *LookupAccountByID { return s } +// Do performs the HTTP request func (s *LookupAccountByID) Do(ctx context.Context, headers ...*common.Header) (validRound uint64, result models.Account, err error) { - response := models.LookupAccountByIDResponse{} + response := models.AccountResponse{} err = s.c.get(ctx, &response, fmt.Sprintf("/v2/accounts/%s", s.accountId), s.p, headers) validRound = response.CurrentRound result = response.Account diff --git a/client/v2/indexer/lookupAccountTransactions.go b/client/v2/indexer/lookupAccountTransactions.go index e857fb02..ac08c29a 100644 --- a/client/v2/indexer/lookupAccountTransactions.go +++ b/client/v2/indexer/lookupAccountTransactions.go @@ -10,98 +10,193 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// LookupAccountTransactionsParams contains all of the query parameters for url serialization. +type LookupAccountTransactionsParams struct { + + // AfterTime include results after the given time. Must be an RFC 3339 formatted + // string. + AfterTime string `url:"after-time,omitempty"` + + // AssetID asset ID + AssetID uint64 `url:"asset-id,omitempty"` + + // BeforeTime include results before the given time. Must be an RFC 3339 formatted + // string. + BeforeTime string `url:"before-time,omitempty"` + + // CurrencyGreaterThan results should have an amount greater than this value. + // MicroAlgos are the default currency unless an asset-id is provided, in which + // case the asset will be used. + CurrencyGreaterThan uint64 `url:"currency-greater-than,omitempty"` + + // CurrencyLessThan results should have an amount less than this value. MicroAlgos + // are the default currency unless an asset-id is provided, in which case the asset + // will be used. + CurrencyLessThan uint64 `url:"currency-less-than,omitempty"` + + // Limit maximum number of results to return. + Limit uint64 `url:"limit,omitempty"` + + // MaxRound include results at or before the specified max-round. + MaxRound uint64 `url:"max-round,omitempty"` + + // MinRound include results at or after the specified min-round. + MinRound uint64 `url:"min-round,omitempty"` + + // NextToken the next page of results. Use the next token provided by the previous + // results. + NextToken string `url:"next,omitempty"` + + // NotePrefix specifies a prefix which must be contained in the note field. + NotePrefix string `url:"note-prefix,omitempty"` + + // RekeyTo include results which include the rekey-to field. + RekeyTo bool `url:"rekey-to,omitempty"` + + // Round include results for the specified round. + Round uint64 `url:"round,omitempty"` + + // SigType sigType filters just results using the specified type of signature: + // * sig - Standard + // * msig - MultiSig + // * lsig - LogicSig + SigType string `url:"sig-type,omitempty"` + + // TxType + TxType string `url:"tx-type,omitempty"` + + // TXID lookup the specific transaction by ID. + TXID string `url:"txid,omitempty"` +} + +// LookupAccountTransactions lookup account transactions. type LookupAccountTransactions struct { - c *Client - account string - p models.LookupAccountTransactionsParams + c *Client + + accountId string + + p LookupAccountTransactionsParams } -func (s *LookupAccountTransactions) NextToken(nextToken string) *LookupAccountTransactions { - s.p.NextToken = nextToken +// AfterTimeString include results after the given time. Must be an RFC 3339 +// formatted string. +func (s *LookupAccountTransactions) AfterTimeString(AfterTime string) *LookupAccountTransactions { + s.p.AfterTime = AfterTime return s } -func (s *LookupAccountTransactions) NotePrefix(prefix []byte) *LookupAccountTransactions { - s.p.NotePrefix = base64.StdEncoding.EncodeToString(prefix) - return s +// AfterTime include results after the given time. Must be an RFC 3339 formatted +// string. +func (s *LookupAccountTransactions) AfterTime(AfterTime time.Time) *LookupAccountTransactions { + AfterTimeStr := AfterTime.Format(time.RFC3339) + + return s.AfterTimeString(AfterTimeStr) } -func (s *LookupAccountTransactions) TxType(txtype string) *LookupAccountTransactions { - s.p.TxType = txtype +// AssetID asset ID +func (s *LookupAccountTransactions) AssetID(AssetID uint64) *LookupAccountTransactions { + s.p.AssetID = AssetID return s } -func (s *LookupAccountTransactions) SigType(sigtype string) *LookupAccountTransactions { - s.p.SigType = sigtype +// BeforeTimeString include results before the given time. Must be an RFC 3339 +// formatted string. +func (s *LookupAccountTransactions) BeforeTimeString(BeforeTime string) *LookupAccountTransactions { + s.p.BeforeTime = BeforeTime return s } -func (s *LookupAccountTransactions) TXID(txid string) *LookupAccountTransactions { - s.p.TxId = txid - return s +// BeforeTime include results before the given time. Must be an RFC 3339 formatted +// string. +func (s *LookupAccountTransactions) BeforeTime(BeforeTime time.Time) *LookupAccountTransactions { + BeforeTimeStr := BeforeTime.Format(time.RFC3339) + + return s.BeforeTimeString(BeforeTimeStr) } -func (s *LookupAccountTransactions) Round(rnd uint64) *LookupAccountTransactions { - s.p.Round = rnd +// CurrencyGreaterThan results should have an amount greater than this value. +// MicroAlgos are the default currency unless an asset-id is provided, in which +// case the asset will be used. +func (s *LookupAccountTransactions) CurrencyGreaterThan(CurrencyGreaterThan uint64) *LookupAccountTransactions { + s.p.CurrencyGreaterThan = CurrencyGreaterThan return s } -func (s *LookupAccountTransactions) MinRound(min uint64) *LookupAccountTransactions { - s.p.MinRound = min +// CurrencyLessThan results should have an amount less than this value. MicroAlgos +// are the default currency unless an asset-id is provided, in which case the asset +// will be used. +func (s *LookupAccountTransactions) CurrencyLessThan(CurrencyLessThan uint64) *LookupAccountTransactions { + s.p.CurrencyLessThan = CurrencyLessThan return s } -func (s *LookupAccountTransactions) MaxRound(max uint64) *LookupAccountTransactions { - s.p.MaxRound = max +// Limit maximum number of results to return. +func (s *LookupAccountTransactions) Limit(Limit uint64) *LookupAccountTransactions { + s.p.Limit = Limit return s } -func (s *LookupAccountTransactions) AssetID(index uint64) *LookupAccountTransactions { - s.p.AssetId = index +// MaxRound include results at or before the specified max-round. +func (s *LookupAccountTransactions) MaxRound(MaxRound uint64) *LookupAccountTransactions { + s.p.MaxRound = MaxRound return s } -func (s *LookupAccountTransactions) Limit(limit uint64) *LookupAccountTransactions { - s.p.Limit = limit +// MinRound include results at or after the specified min-round. +func (s *LookupAccountTransactions) MinRound(MinRound uint64) *LookupAccountTransactions { + s.p.MinRound = MinRound return s } -func (s *LookupAccountTransactions) BeforeTimeString(before string) *LookupAccountTransactions { - s.p.BeforeTime = before +// NextToken the next page of results. Use the next token provided by the previous +// results. +func (s *LookupAccountTransactions) NextToken(NextToken string) *LookupAccountTransactions { + s.p.NextToken = NextToken return s } -func (s *LookupAccountTransactions) AfterTimeString(after string) *LookupAccountTransactions { - s.p.AfterTime = after +// NotePrefix specifies a prefix which must be contained in the note field. +func (s *LookupAccountTransactions) NotePrefix(NotePrefix []byte) *LookupAccountTransactions { + s.p.NotePrefix = base64.StdEncoding.EncodeToString(NotePrefix) + return s } -func (s *LookupAccountTransactions) BeforeTime(before time.Time) *LookupAccountTransactions { - beforeString := before.Format(time.RFC3339) - return s.BeforeTimeString(beforeString) +// RekeyTo include results which include the rekey-to field. +func (s *LookupAccountTransactions) RekeyTo(RekeyTo bool) *LookupAccountTransactions { + s.p.RekeyTo = RekeyTo + return s } -func (s *LookupAccountTransactions) AfterTime(after time.Time) *LookupAccountTransactions { - afterString := after.Format(time.RFC3339) - return s.AfterTimeString(afterString) +// Round include results for the specified round. +func (s *LookupAccountTransactions) Round(Round uint64) *LookupAccountTransactions { + s.p.Round = Round + return s } -func (s *LookupAccountTransactions) CurrencyGreaterThan(greaterThan uint64) *LookupAccountTransactions { - s.p.CurrencyGreaterThan = greaterThan +// SigType sigType filters just results using the specified type of signature: +// * sig - Standard +// * msig - MultiSig +// * lsig - LogicSig +func (s *LookupAccountTransactions) SigType(SigType string) *LookupAccountTransactions { + s.p.SigType = SigType return s } -func (s *LookupAccountTransactions) CurrencyLessThan(lessThan uint64) *LookupAccountTransactions { - s.p.CurrencyLessThan = lessThan +// TxType +func (s *LookupAccountTransactions) TxType(TxType string) *LookupAccountTransactions { + s.p.TxType = TxType return s } -func (s *LookupAccountTransactions) RekeyTo(rekeyTo bool) *LookupAccountTransactions { - s.p.RekeyTo = rekeyTo +// TXID lookup the specific transaction by ID. +func (s *LookupAccountTransactions) TXID(TXID string) *LookupAccountTransactions { + s.p.TXID = TXID return s } +// Do performs the HTTP request func (s *LookupAccountTransactions) Do(ctx context.Context, headers ...*common.Header) (response models.TransactionsResponse, err error) { - err = s.c.get(ctx, &response, fmt.Sprintf("/v2/accounts/%s/transactions", s.account), s.p, headers) + err = s.c.get(ctx, &response, fmt.Sprintf("/v2/accounts/%v/transactions", s.accountId), s.p, headers) return } diff --git a/client/v2/indexer/lookupApplicationByID.go b/client/v2/indexer/lookupApplicationByID.go index faab017c..eab18a07 100644 --- a/client/v2/indexer/lookupApplicationByID.go +++ b/client/v2/indexer/lookupApplicationByID.go @@ -8,6 +8,7 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// LookupApplicationByIDParams contains all of the query parameters for url serialization. type LookupApplicationByIDParams struct { // IncludeAll include all items including closed accounts, deleted applications, @@ -16,6 +17,7 @@ type LookupApplicationByIDParams struct { IncludeAll bool `url:"include-all,omitempty"` } +// LookupApplicationByID lookup application. type LookupApplicationByID struct { c *Client @@ -32,6 +34,7 @@ func (s *LookupApplicationByID) IncludeAll(IncludeAll bool) *LookupApplicationBy return s } +// Do performs the HTTP request func (s *LookupApplicationByID) Do(ctx context.Context, headers ...*common.Header) (response models.ApplicationResponse, err error) { err = s.c.get(ctx, &response, fmt.Sprintf("/v2/applications/%v", s.applicationId), s.p, headers) return diff --git a/client/v2/indexer/lookupAssetBalances.go b/client/v2/indexer/lookupAssetBalances.go index b9a1493f..b678b2ba 100644 --- a/client/v2/indexer/lookupAssetBalances.go +++ b/client/v2/indexer/lookupAssetBalances.go @@ -8,39 +8,89 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) -// LookupAssetBalances is used to lookup asset balances +// LookupAssetBalancesParams contains all of the query parameters for url serialization. +type LookupAssetBalancesParams struct { + + // CurrencyGreaterThan results should have an amount greater than this value. + // MicroAlgos are the default currency unless an asset-id is provided, in which + // case the asset will be used. + CurrencyGreaterThan uint64 `url:"currency-greater-than,omitempty"` + + // CurrencyLessThan results should have an amount less than this value. MicroAlgos + // are the default currency unless an asset-id is provided, in which case the asset + // will be used. + CurrencyLessThan uint64 `url:"currency-less-than,omitempty"` + + // IncludeAll include all items including closed accounts, deleted applications, + // destroyed assets, opted-out asset holdings, and closed-out application + // localstates. + IncludeAll bool `url:"include-all,omitempty"` + + // Limit maximum number of results to return. + Limit uint64 `url:"limit,omitempty"` + + // NextToken the next page of results. Use the next token provided by the previous + // results. + NextToken string `url:"next,omitempty"` + + // Round include results for the specified round. + Round uint64 `url:"round,omitempty"` +} + +// LookupAssetBalances lookup the list of accounts who hold this asset type LookupAssetBalances struct { - c *Client - index uint64 - p models.LookupAssetBalancesParams + c *Client + + assetId uint64 + + p LookupAssetBalancesParams +} + +// CurrencyGreaterThan results should have an amount greater than this value. +// MicroAlgos are the default currency unless an asset-id is provided, in which +// case the asset will be used. +func (s *LookupAssetBalances) CurrencyGreaterThan(CurrencyGreaterThan uint64) *LookupAssetBalances { + s.p.CurrencyGreaterThan = CurrencyGreaterThan + return s } -func (s *LookupAssetBalances) NextToken(nextToken string) *LookupAssetBalances { - s.p.NextToken = nextToken +// CurrencyLessThan results should have an amount less than this value. MicroAlgos +// are the default currency unless an asset-id is provided, in which case the asset +// will be used. +func (s *LookupAssetBalances) CurrencyLessThan(CurrencyLessThan uint64) *LookupAssetBalances { + s.p.CurrencyLessThan = CurrencyLessThan return s } -func (s *LookupAssetBalances) Limit(lim uint64) *LookupAssetBalances { - s.p.Limit = lim +// IncludeAll include all items including closed accounts, deleted applications, +// destroyed assets, opted-out asset holdings, and closed-out application +// localstates. +func (s *LookupAssetBalances) IncludeAll(IncludeAll bool) *LookupAssetBalances { + s.p.IncludeAll = IncludeAll return s } -func (s *LookupAssetBalances) Round(rnd uint64) *LookupAssetBalances { - s.p.Round = rnd +// Limit maximum number of results to return. +func (s *LookupAssetBalances) Limit(Limit uint64) *LookupAssetBalances { + s.p.Limit = Limit return s } -func (s *LookupAssetBalances) CurrencyGreaterThan(greaterThan uint64) *LookupAssetBalances { - s.p.CurrencyGreaterThan = greaterThan +// NextToken the next page of results. Use the next token provided by the previous +// results. +func (s *LookupAssetBalances) NextToken(NextToken string) *LookupAssetBalances { + s.p.NextToken = NextToken return s } -func (s *LookupAssetBalances) CurrencyLessThan(lessThan uint64) *LookupAssetBalances { - s.p.CurrencyLessThan = lessThan +// Round include results for the specified round. +func (s *LookupAssetBalances) Round(Round uint64) *LookupAssetBalances { + s.p.Round = Round return s } +// Do performs the HTTP request func (s *LookupAssetBalances) Do(ctx context.Context, headers ...*common.Header) (response models.AssetBalancesResponse, err error) { - err = s.c.get(ctx, &response, fmt.Sprintf("/v2/assets/%d/balances", s.index), s.p, headers) + err = s.c.get(ctx, &response, fmt.Sprintf("/v2/assets/%v/balances", s.assetId), s.p, headers) return } diff --git a/client/v2/indexer/lookupAssetByID.go b/client/v2/indexer/lookupAssetByID.go index 70a428be..dbf2d55a 100644 --- a/client/v2/indexer/lookupAssetByID.go +++ b/client/v2/indexer/lookupAssetByID.go @@ -8,14 +8,36 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// LookupAssetByIDParams contains all of the query parameters for url serialization. +type LookupAssetByIDParams struct { + + // IncludeAll include all items including closed accounts, deleted applications, + // destroyed assets, opted-out asset holdings, and closed-out application + // localstates. + IncludeAll bool `url:"include-all,omitempty"` +} + +// LookupAssetByID lookup asset information. type LookupAssetByID struct { - c *Client - index uint64 + c *Client + + assetId uint64 + + p LookupAssetByIDParams +} + +// IncludeAll include all items including closed accounts, deleted applications, +// destroyed assets, opted-out asset holdings, and closed-out application +// localstates. +func (s *LookupAssetByID) IncludeAll(IncludeAll bool) *LookupAssetByID { + s.p.IncludeAll = IncludeAll + return s } +// Do performs the HTTP request func (s *LookupAssetByID) Do(ctx context.Context, headers ...*common.Header) (validRound uint64, result models.Asset, err error) { - response := models.LookupAssetByIDResponse{} - err = s.c.get(ctx, &response, fmt.Sprintf("/v2/assets/%d", s.index), nil, headers) + response := models.AssetResponse{} + err = s.c.get(ctx, &response, fmt.Sprintf("/v2/assets/%d", s.assetId), s.p, headers) validRound = response.CurrentRound result = response.Asset return diff --git a/client/v2/indexer/lookupAssetTransactions.go b/client/v2/indexer/lookupAssetTransactions.go index 2e321914..f1e21e93 100644 --- a/client/v2/indexer/lookupAssetTransactions.go +++ b/client/v2/indexer/lookupAssetTransactions.go @@ -8,115 +8,221 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common" "github.com/algorand/go-algorand-sdk/client/v2/common/models" - "github.com/algorand/go-algorand-sdk/types" ) +// LookupAssetTransactionsParams contains all of the query parameters for url serialization. +type LookupAssetTransactionsParams struct { + + // AddressString only include transactions with this address in one of the + // transaction fields. + AddressString string `url:"address,omitempty"` + + // AddressRole combine with the address parameter to define what type of address to + // search for. + AddressRole string `url:"address-role,omitempty"` + + // AfterTime include results after the given time. Must be an RFC 3339 formatted + // string. + AfterTime string `url:"after-time,omitempty"` + + // BeforeTime include results before the given time. Must be an RFC 3339 formatted + // string. + BeforeTime string `url:"before-time,omitempty"` + + // CurrencyGreaterThan results should have an amount greater than this value. + // MicroAlgos are the default currency unless an asset-id is provided, in which + // case the asset will be used. + CurrencyGreaterThan uint64 `url:"currency-greater-than,omitempty"` + + // CurrencyLessThan results should have an amount less than this value. MicroAlgos + // are the default currency unless an asset-id is provided, in which case the asset + // will be used. + CurrencyLessThan uint64 `url:"currency-less-than,omitempty"` + + // ExcludeCloseTo combine with address and address-role parameters to define what + // type of address to search for. The close to fields are normally treated as a + // receiver, if you would like to exclude them set this parameter to true. + ExcludeCloseTo bool `url:"exclude-close-to,omitempty"` + + // Limit maximum number of results to return. + Limit uint64 `url:"limit,omitempty"` + + // MaxRound include results at or before the specified max-round. + MaxRound uint64 `url:"max-round,omitempty"` + + // MinRound include results at or after the specified min-round. + MinRound uint64 `url:"min-round,omitempty"` + + // NextToken the next page of results. Use the next token provided by the previous + // results. + NextToken string `url:"next,omitempty"` + + // NotePrefix specifies a prefix which must be contained in the note field. + NotePrefix string `url:"note-prefix,omitempty"` + + // RekeyTo include results which include the rekey-to field. + RekeyTo bool `url:"rekey-to,omitempty"` + + // Round include results for the specified round. + Round uint64 `url:"round,omitempty"` + + // SigType sigType filters just results using the specified type of signature: + // * sig - Standard + // * msig - MultiSig + // * lsig - LogicSig + SigType string `url:"sig-type,omitempty"` + + // TxType + TxType string `url:"tx-type,omitempty"` + + // TXID lookup the specific transaction by ID. + TXID string `url:"txid,omitempty"` +} + +// LookupAssetTransactions lookup transactions for an asset. type LookupAssetTransactions struct { - c *Client - index uint64 - p models.LookupAssetTransactionsParams + c *Client + + assetId uint64 + + p LookupAssetTransactionsParams } -func (s *LookupAssetTransactions) NextToken(nextToken string) *LookupAssetTransactions { - s.p.NextToken = nextToken +// AddressString only include transactions with this address in one of the +// transaction fields. +func (s *LookupAssetTransactions) AddressString(AddressString string) *LookupAssetTransactions { + s.p.AddressString = AddressString return s } -func (s *LookupAssetTransactions) NotePrefix(prefix []byte) *LookupAssetTransactions { - s.p.NotePrefix = base64.StdEncoding.EncodeToString(prefix) +// AddressRole combine with the address parameter to define what type of address to +// search for. +func (s *LookupAssetTransactions) AddressRole(AddressRole string) *LookupAssetTransactions { + s.p.AddressRole = AddressRole return s } -func (s *LookupAssetTransactions) TxType(txtype string) *LookupAssetTransactions { - s.p.TxType = txtype +// AfterTimeString include results after the given time. Must be an RFC 3339 +// formatted string. +func (s *LookupAssetTransactions) AfterTimeString(AfterTime string) *LookupAssetTransactions { + s.p.AfterTime = AfterTime return s } -func (s *LookupAssetTransactions) SigType(sigtype string) *LookupAssetTransactions { - s.p.SigType = sigtype - return s +// AfterTime include results after the given time. Must be an RFC 3339 formatted +// string. +func (s *LookupAssetTransactions) AfterTime(AfterTime time.Time) *LookupAssetTransactions { + AfterTimeStr := AfterTime.Format(time.RFC3339) + + return s.AfterTimeString(AfterTimeStr) } -func (s *LookupAssetTransactions) TXID(txid string) *LookupAssetTransactions { - s.p.TxId = txid +// BeforeTimeString include results before the given time. Must be an RFC 3339 +// formatted string. +func (s *LookupAssetTransactions) BeforeTimeString(BeforeTime string) *LookupAssetTransactions { + s.p.BeforeTime = BeforeTime return s } -func (s *LookupAssetTransactions) Round(rnd uint64) *LookupAssetTransactions { - s.p.Round = rnd - return s +// BeforeTime include results before the given time. Must be an RFC 3339 formatted +// string. +func (s *LookupAssetTransactions) BeforeTime(BeforeTime time.Time) *LookupAssetTransactions { + BeforeTimeStr := BeforeTime.Format(time.RFC3339) + + return s.BeforeTimeString(BeforeTimeStr) } -func (s *LookupAssetTransactions) MinRound(min uint64) *LookupAssetTransactions { - s.p.MinRound = min +// CurrencyGreaterThan results should have an amount greater than this value. +// MicroAlgos are the default currency unless an asset-id is provided, in which +// case the asset will be used. +func (s *LookupAssetTransactions) CurrencyGreaterThan(CurrencyGreaterThan uint64) *LookupAssetTransactions { + s.p.CurrencyGreaterThan = CurrencyGreaterThan return s } -func (s *LookupAssetTransactions) MaxRound(max uint64) *LookupAssetTransactions { - s.p.MaxRound = max +// CurrencyLessThan results should have an amount less than this value. MicroAlgos +// are the default currency unless an asset-id is provided, in which case the asset +// will be used. +func (s *LookupAssetTransactions) CurrencyLessThan(CurrencyLessThan uint64) *LookupAssetTransactions { + s.p.CurrencyLessThan = CurrencyLessThan return s } -func (s *LookupAssetTransactions) AddressString(address string) *LookupAssetTransactions { - s.p.Address = address +// ExcludeCloseTo combine with address and address-role parameters to define what +// type of address to search for. The close to fields are normally treated as a +// receiver, if you would like to exclude them set this parameter to true. +func (s *LookupAssetTransactions) ExcludeCloseTo(ExcludeCloseTo bool) *LookupAssetTransactions { + s.p.ExcludeCloseTo = ExcludeCloseTo return s } -func (s *LookupAssetTransactions) Address(address types.Address) *LookupAssetTransactions { - return s.AddressString(address.String()) +// Limit maximum number of results to return. +func (s *LookupAssetTransactions) Limit(Limit uint64) *LookupAssetTransactions { + s.p.Limit = Limit + return s } -func (s *LookupAssetTransactions) Limit(limit uint64) *LookupAssetTransactions { - s.p.Limit = limit +// MaxRound include results at or before the specified max-round. +func (s *LookupAssetTransactions) MaxRound(MaxRound uint64) *LookupAssetTransactions { + s.p.MaxRound = MaxRound return s } -func (s *LookupAssetTransactions) BeforeTimeString(before string) *LookupAssetTransactions { - s.p.BeforeTime = before +// MinRound include results at or after the specified min-round. +func (s *LookupAssetTransactions) MinRound(MinRound uint64) *LookupAssetTransactions { + s.p.MinRound = MinRound return s } -func (s *LookupAssetTransactions) AfterTimeString(after string) *LookupAssetTransactions { - s.p.AfterTime = after +// NextToken the next page of results. Use the next token provided by the previous +// results. +func (s *LookupAssetTransactions) NextToken(NextToken string) *LookupAssetTransactions { + s.p.NextToken = NextToken return s } -func (s *LookupAssetTransactions) BeforeTime(before time.Time) *LookupAssetTransactions { - beforeString := before.Format(time.RFC3339) - return s.BeforeTimeString(beforeString) -} +// NotePrefix specifies a prefix which must be contained in the note field. +func (s *LookupAssetTransactions) NotePrefix(NotePrefix []byte) *LookupAssetTransactions { + s.p.NotePrefix = base64.StdEncoding.EncodeToString(NotePrefix) -func (s *LookupAssetTransactions) AfterTime(after time.Time) *LookupAssetTransactions { - afterString := after.Format(time.RFC3339) - return s.AfterTimeString(afterString) + return s } -func (s *LookupAssetTransactions) CurrencyGreaterThan(greaterThan uint64) *LookupAssetTransactions { - s.p.CurrencyGreaterThan = greaterThan +// RekeyTo include results which include the rekey-to field. +func (s *LookupAssetTransactions) RekeyTo(RekeyTo bool) *LookupAssetTransactions { + s.p.RekeyTo = RekeyTo return s } -func (s *LookupAssetTransactions) CurrencyLessThan(lessThan uint64) *LookupAssetTransactions { - s.p.CurrencyLessThan = lessThan +// Round include results for the specified round. +func (s *LookupAssetTransactions) Round(Round uint64) *LookupAssetTransactions { + s.p.Round = Round return s } -func (s *LookupAssetTransactions) AddressRole(role string) *LookupAssetTransactions { - s.p.AddressRole = role +// SigType sigType filters just results using the specified type of signature: +// * sig - Standard +// * msig - MultiSig +// * lsig - LogicSig +func (s *LookupAssetTransactions) SigType(SigType string) *LookupAssetTransactions { + s.p.SigType = SigType return s } -func (s *LookupAssetTransactions) ExcludeCloseTo(exclude bool) *LookupAssetTransactions { - s.p.ExcludeCloseTo = exclude +// TxType +func (s *LookupAssetTransactions) TxType(TxType string) *LookupAssetTransactions { + s.p.TxType = TxType return s } -func (s *LookupAssetTransactions) RekeyTo(rekeyTo bool) *LookupAssetTransactions { - s.p.RekeyTo = rekeyTo +// TXID lookup the specific transaction by ID. +func (s *LookupAssetTransactions) TXID(TXID string) *LookupAssetTransactions { + s.p.TXID = TXID return s } +// Do performs the HTTP request func (s *LookupAssetTransactions) Do(ctx context.Context, headers ...*common.Header) (response models.TransactionsResponse, err error) { - err = s.c.get(ctx, &response, fmt.Sprintf("/v2/assets/%d/transactions", s.index), s.p, headers) + err = s.c.get(ctx, &response, fmt.Sprintf("/v2/assets/%v/transactions", s.assetId), s.p, headers) return } diff --git a/client/v2/indexer/lookupBlock.go b/client/v2/indexer/lookupBlock.go index a7f2fab3..0ca25275 100644 --- a/client/v2/indexer/lookupBlock.go +++ b/client/v2/indexer/lookupBlock.go @@ -8,14 +8,15 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// LookupBlock lookup block. type LookupBlock struct { - c *Client - round uint64 + c *Client + + roundNumber uint64 } -func (s *LookupBlock) Do(ctx context.Context, headers ...*common.Header) (block models.Block, err error) { - var response models.BlockResponse - err = s.c.get(ctx, &response, fmt.Sprintf("/v2/blocks/%d", s.round), nil, headers) - block = models.Block(response) +// Do performs the HTTP request +func (s *LookupBlock) Do(ctx context.Context, headers ...*common.Header) (response models.Block, err error) { + err = s.c.get(ctx, &response, fmt.Sprintf("/v2/blocks/%v", s.roundNumber), nil, headers) return } diff --git a/client/v2/indexer/lookupTransaction.go b/client/v2/indexer/lookupTransaction.go index 9edb110a..f8b5faeb 100644 --- a/client/v2/indexer/lookupTransaction.go +++ b/client/v2/indexer/lookupTransaction.go @@ -8,12 +8,14 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// LookupTransaction lookup a single transaction. type LookupTransaction struct { c *Client txid string } +// Do performs the HTTP request func (s *LookupTransaction) Do(ctx context.Context, headers ...*common.Header) (response models.TransactionResponse, err error) { err = s.c.get(ctx, &response, fmt.Sprintf("/v2/transactions/%v", s.txid), nil, headers) return diff --git a/client/v2/indexer/makeHealthCheck.go b/client/v2/indexer/makeHealthCheck.go index bec784aa..03b2df73 100644 --- a/client/v2/indexer/makeHealthCheck.go +++ b/client/v2/indexer/makeHealthCheck.go @@ -7,11 +7,13 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) -type MakeHealthCheck struct { +// HealthCheck returns 200 if healthy. +type HealthCheck struct { c *Client } -func (s *MakeHealthCheck) Do(ctx context.Context, headers ...*common.Header) (response models.HealthCheck, err error) { +// Do performs the HTTP request +func (s *HealthCheck) Do(ctx context.Context, headers ...*common.Header) (response models.HealthCheckResponse, err error) { err = s.c.get(ctx, &response, "/health", nil, headers) return } diff --git a/client/v2/indexer/searchForAccounts.go b/client/v2/indexer/searchForAccounts.go index 7f0e809d..aece6375 100644 --- a/client/v2/indexer/searchForAccounts.go +++ b/client/v2/indexer/searchForAccounts.go @@ -7,6 +7,7 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// SearchAccountsParams contains all of the query parameters for url serialization. type SearchAccountsParams struct { // ApplicationId application ID @@ -45,6 +46,7 @@ type SearchAccountsParams struct { Round uint64 `url:"round,omitempty"` } +// SearchAccounts search for accounts. type SearchAccounts struct { c *Client @@ -113,6 +115,7 @@ func (s *SearchAccounts) Round(Round uint64) *SearchAccounts { return s } +// Do performs the HTTP request func (s *SearchAccounts) Do(ctx context.Context, headers ...*common.Header) (response models.AccountsResponse, err error) { err = s.c.get(ctx, &response, "/v2/accounts", s.p, headers) return diff --git a/client/v2/indexer/searchForApplications.go b/client/v2/indexer/searchForApplications.go index 37e05af4..d521847b 100644 --- a/client/v2/indexer/searchForApplications.go +++ b/client/v2/indexer/searchForApplications.go @@ -7,6 +7,7 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) +// SearchForApplicationsParams contains all of the query parameters for url serialization. type SearchForApplicationsParams struct { // ApplicationId application ID @@ -25,6 +26,7 @@ type SearchForApplicationsParams struct { Next string `url:"next,omitempty"` } +// SearchForApplications search for applications type SearchForApplications struct { c *Client @@ -58,6 +60,7 @@ func (s *SearchForApplications) Next(Next string) *SearchForApplications { return s } +// Do performs the HTTP request func (s *SearchForApplications) Do(ctx context.Context, headers ...*common.Header) (response models.ApplicationsResponse, err error) { err = s.c.get(ctx, &response, "/v2/applications", s.p, headers) return diff --git a/client/v2/indexer/searchForAssets.go b/client/v2/indexer/searchForAssets.go index 6f52e3c2..f646fcfd 100644 --- a/client/v2/indexer/searchForAssets.go +++ b/client/v2/indexer/searchForAssets.go @@ -7,54 +7,88 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common/models" ) -// SearchForAssets /v2/assets -// Search for assets. +// SearchForAssetsParams contains all of the query parameters for url serialization. +type SearchForAssetsParams struct { + + // AssetID asset ID + AssetID uint64 `url:"asset-id,omitempty"` + + // Creator filter just assets with the given creator address. + Creator string `url:"creator,omitempty"` + + // IncludeAll include all items including closed accounts, deleted applications, + // destroyed assets, opted-out asset holdings, and closed-out application + // localstates. + IncludeAll bool `url:"include-all,omitempty"` + + // Limit maximum number of results to return. + Limit uint64 `url:"limit,omitempty"` + + // Name filter just assets with the given name. + Name string `url:"name,omitempty"` + + // NextToken the next page of results. Use the next token provided by the previous + // results. + NextToken string `url:"next,omitempty"` + + // Unit filter just assets with the given unit. + Unit string `url:"unit,omitempty"` +} + +// SearchForAssets search for assets. type SearchForAssets struct { c *Client - p models.SearchForAssetsParams + + p SearchForAssetsParams } -// NextToken the next page of results. Use the next token provided by the previous -// results. -func (s *SearchForAssets) NextToken(nextToken string) *SearchForAssets { - s.p.NextToken = nextToken +// AssetID asset ID +func (s *SearchForAssets) AssetID(AssetID uint64) *SearchForAssets { + s.p.AssetID = AssetID return s } -// Limit maximum number of results to return. -func (s *SearchForAssets) Limit(lim uint64) *SearchForAssets { - s.p.Limit = lim +// Creator filter just assets with the given creator address. +func (s *SearchForAssets) Creator(Creator string) *SearchForAssets { + s.p.Creator = Creator return s } -// Creator filter just assets with the given creator address. -func (s *SearchForAssets) Creator(creator string) *SearchForAssets { - s.p.Creator = creator +// IncludeAll include all items including closed accounts, deleted applications, +// destroyed assets, opted-out asset holdings, and closed-out application +// localstates. +func (s *SearchForAssets) IncludeAll(IncludeAll bool) *SearchForAssets { + s.p.IncludeAll = IncludeAll + return s +} + +// Limit maximum number of results to return. +func (s *SearchForAssets) Limit(Limit uint64) *SearchForAssets { + s.p.Limit = Limit return s } // Name filter just assets with the given name. -func (s *SearchForAssets) Name(name string) *SearchForAssets { - s.p.Name = name +func (s *SearchForAssets) Name(Name string) *SearchForAssets { + s.p.Name = Name return s } -// Unit filter just assets with the given unit. -func (s *SearchForAssets) Unit(unit string) *SearchForAssets { - s.p.Unit = unit +// NextToken the next page of results. Use the next token provided by the previous +// results. +func (s *SearchForAssets) NextToken(NextToken string) *SearchForAssets { + s.p.NextToken = NextToken return s } -// AssetID asset ID -func (s *SearchForAssets) AssetID(id uint64) *SearchForAssets { - s.p.AssetId = id +// Unit filter just assets with the given unit. +func (s *SearchForAssets) Unit(Unit string) *SearchForAssets { + s.p.Unit = Unit return s } -// Do performs HTTP request -func (s *SearchForAssets) Do(ctx context.Context, - headers ...*common.Header) (response models.AssetsResponse, err error) { - err = s.c.get(ctx, &response, - "/v2/assets", s.p, headers) +// Do performs the HTTP request +func (s *SearchForAssets) Do(ctx context.Context, headers ...*common.Header) (response models.AssetsResponse, err error) { + err = s.c.get(ctx, &response, "/v2/assets", s.p, headers) return } diff --git a/client/v2/indexer/searchForTransactions.go b/client/v2/indexer/searchForTransactions.go index 448b54cc..f744020c 100644 --- a/client/v2/indexer/searchForTransactions.go +++ b/client/v2/indexer/searchForTransactions.go @@ -7,154 +7,236 @@ import ( "github.com/algorand/go-algorand-sdk/client/v2/common" "github.com/algorand/go-algorand-sdk/client/v2/common/models" - "github.com/algorand/go-algorand-sdk/types" ) -// SearchForTransactions /v2/transactions -// Search for transactions. +// SearchForTransactionsParams contains all of the query parameters for url serialization. +type SearchForTransactionsParams struct { + + // AddressString only include transactions with this address in one of the + // transaction fields. + AddressString string `url:"address,omitempty"` + + // AddressRole combine with the address parameter to define what type of address to + // search for. + AddressRole string `url:"address-role,omitempty"` + + // AfterTime include results after the given time. Must be an RFC 3339 formatted + // string. + AfterTime string `url:"after-time,omitempty"` + + // ApplicationId application ID + ApplicationId uint64 `url:"application-id,omitempty"` + + // AssetID asset ID + AssetID uint64 `url:"asset-id,omitempty"` + + // BeforeTime include results before the given time. Must be an RFC 3339 formatted + // string. + BeforeTime string `url:"before-time,omitempty"` + + // CurrencyGreaterThan results should have an amount greater than this value. + // MicroAlgos are the default currency unless an asset-id is provided, in which + // case the asset will be used. + CurrencyGreaterThan uint64 `url:"currency-greater-than,omitempty"` + + // CurrencyLessThan results should have an amount less than this value. MicroAlgos + // are the default currency unless an asset-id is provided, in which case the asset + // will be used. + CurrencyLessThan uint64 `url:"currency-less-than,omitempty"` + + // ExcludeCloseTo combine with address and address-role parameters to define what + // type of address to search for. The close to fields are normally treated as a + // receiver, if you would like to exclude them set this parameter to true. + ExcludeCloseTo bool `url:"exclude-close-to,omitempty"` + + // Limit maximum number of results to return. + Limit uint64 `url:"limit,omitempty"` + + // MaxRound include results at or before the specified max-round. + MaxRound uint64 `url:"max-round,omitempty"` + + // MinRound include results at or after the specified min-round. + MinRound uint64 `url:"min-round,omitempty"` + + // NextToken the next page of results. Use the next token provided by the previous + // results. + NextToken string `url:"next,omitempty"` + + // NotePrefix specifies a prefix which must be contained in the note field. + NotePrefix string `url:"note-prefix,omitempty"` + + // RekeyTo include results which include the rekey-to field. + RekeyTo bool `url:"rekey-to,omitempty"` + + // Round include results for the specified round. + Round uint64 `url:"round,omitempty"` + + // SigType sigType filters just results using the specified type of signature: + // * sig - Standard + // * msig - MultiSig + // * lsig - LogicSig + SigType string `url:"sig-type,omitempty"` + + // TxType + TxType string `url:"tx-type,omitempty"` + + // TXID lookup the specific transaction by ID. + TXID string `url:"txid,omitempty"` +} + +// SearchForTransactions search for transactions. type SearchForTransactions struct { c *Client - p models.SearchForTransactionsParams + + p SearchForTransactionsParams } -// ApplicationId application ID -func (s *SearchForTransactions) ApplicationId(applicationId uint64) *SearchForTransactions { - s.p.ApplicationId = applicationId +// AddressString only include transactions with this address in one of the +// transaction fields. +func (s *SearchForTransactions) AddressString(AddressString string) *SearchForTransactions { + s.p.AddressString = AddressString return s } -func (s *SearchForTransactions) NextToken(nextToken string) *SearchForTransactions { - s.p.NextToken = nextToken +// AddressRole combine with the address parameter to define what type of address to +// search for. +func (s *SearchForTransactions) AddressRole(AddressRole string) *SearchForTransactions { + s.p.AddressRole = AddressRole return s } -// NotePrefix specifies a prefix which must be contained in the note field. -func (s *SearchForTransactions) NotePrefix(prefix []byte) *SearchForTransactions { - s.p.NotePrefix = base64.StdEncoding.EncodeToString(prefix) +// AfterTimeString include results after the given time. Must be an RFC 3339 +// formatted string. +func (s *SearchForTransactions) AfterTimeString(AfterTime string) *SearchForTransactions { + s.p.AfterTime = AfterTime return s } -func (s *SearchForTransactions) TxType(txtype string) *SearchForTransactions { - s.p.TxType = txtype - return s +// AfterTime include results after the given time. Must be an RFC 3339 formatted +// string. +func (s *SearchForTransactions) AfterTime(AfterTime time.Time) *SearchForTransactions { + AfterTimeStr := AfterTime.Format(time.RFC3339) + + return s.AfterTimeString(AfterTimeStr) } -// SigType filters just results using the specified type of signature: -// * sig - Standard -// * msig - MultiSig -// * lsig - LogicSig -func (s *SearchForTransactions) SigType(sigtype string) *SearchForTransactions { - s.p.SigType = sigtype +// ApplicationId application ID +func (s *SearchForTransactions) ApplicationId(ApplicationId uint64) *SearchForTransactions { + s.p.ApplicationId = ApplicationId return s } -// TXID lookup the specific transaction by ID. -func (s *SearchForTransactions) TXID(txid string) *SearchForTransactions { - s.p.TxId = txid +// AssetID asset ID +func (s *SearchForTransactions) AssetID(AssetID uint64) *SearchForTransactions { + s.p.AssetID = AssetID return s } -// Round include results for the specified round. -func (s *SearchForTransactions) Round(rnd uint64) *SearchForTransactions { - s.p.Round = rnd +// BeforeTimeString include results before the given time. Must be an RFC 3339 +// formatted string. +func (s *SearchForTransactions) BeforeTimeString(BeforeTime string) *SearchForTransactions { + s.p.BeforeTime = BeforeTime return s } -// MinRound include results at or after the specified min-round. -func (s *SearchForTransactions) MinRound(min uint64) *SearchForTransactions { - s.p.MinRound = min +// BeforeTime include results before the given time. Must be an RFC 3339 formatted +// string. +func (s *SearchForTransactions) BeforeTime(BeforeTime time.Time) *SearchForTransactions { + BeforeTimeStr := BeforeTime.Format(time.RFC3339) + + return s.BeforeTimeString(BeforeTimeStr) +} + +// CurrencyGreaterThan results should have an amount greater than this value. +// MicroAlgos are the default currency unless an asset-id is provided, in which +// case the asset will be used. +func (s *SearchForTransactions) CurrencyGreaterThan(CurrencyGreaterThan uint64) *SearchForTransactions { + s.p.CurrencyGreaterThan = CurrencyGreaterThan return s } -// MaxRound include results at or before the specified max-round. -func (s *SearchForTransactions) MaxRound(max uint64) *SearchForTransactions { - s.p.MaxRound = max +// CurrencyLessThan results should have an amount less than this value. MicroAlgos +// are the default currency unless an asset-id is provided, in which case the asset +// will be used. +func (s *SearchForTransactions) CurrencyLessThan(CurrencyLessThan uint64) *SearchForTransactions { + s.p.CurrencyLessThan = CurrencyLessThan return s } -func (s *SearchForTransactions) AssetID(index uint64) *SearchForTransactions { - s.p.AssetId = index +// ExcludeCloseTo combine with address and address-role parameters to define what +// type of address to search for. The close to fields are normally treated as a +// receiver, if you would like to exclude them set this parameter to true. +func (s *SearchForTransactions) ExcludeCloseTo(ExcludeCloseTo bool) *SearchForTransactions { + s.p.ExcludeCloseTo = ExcludeCloseTo return s } // Limit maximum number of results to return. -func (s *SearchForTransactions) Limit(limit uint64) *SearchForTransactions { - s.p.Limit = limit +func (s *SearchForTransactions) Limit(Limit uint64) *SearchForTransactions { + s.p.Limit = Limit return s } -func (s *SearchForTransactions) BeforeTimeString(before string) *SearchForTransactions { - s.p.BeforeTime = before +// MaxRound include results at or before the specified max-round. +func (s *SearchForTransactions) MaxRound(MaxRound uint64) *SearchForTransactions { + s.p.MaxRound = MaxRound return s } -func (s *SearchForTransactions) AfterTimeString(after string) *SearchForTransactions { - s.p.AfterTime = after +// MinRound include results at or after the specified min-round. +func (s *SearchForTransactions) MinRound(MinRound uint64) *SearchForTransactions { + s.p.MinRound = MinRound return s } -// BeforeTime include results before the given time. Must be an RFC 3339 formatted -// string. -func (s *SearchForTransactions) BeforeTime(before time.Time) *SearchForTransactions { - beforeString := before.Format(time.RFC3339) - return s.BeforeTimeString(beforeString) +// NextToken the next page of results. Use the next token provided by the previous +// results. +func (s *SearchForTransactions) NextToken(NextToken string) *SearchForTransactions { + s.p.NextToken = NextToken + return s } -// AfterTime include results after the given time. Must be an RFC 3339 formatted -// string. -func (s *SearchForTransactions) AfterTime(after time.Time) *SearchForTransactions { - afterString := after.Format(time.RFC3339) - return s.AfterTimeString(afterString) -} +// NotePrefix specifies a prefix which must be contained in the note field. +func (s *SearchForTransactions) NotePrefix(NotePrefix []byte) *SearchForTransactions { + s.p.NotePrefix = base64.StdEncoding.EncodeToString(NotePrefix) -// CurrencyGreaterThan results should have an amount greater than this value. -// MicroAlgos are the default currency unless an asset-id is provided, in which -// case the asset will be used. -func (s *SearchForTransactions) CurrencyGreaterThan(greaterThan uint64) *SearchForTransactions { - s.p.CurrencyGreaterThan = greaterThan return s } -// CurrencyLessThan results should have an amount less than this value. MicroAlgos -// are the default currency unless an asset-id is provided, in which case the asset -// will be used. -func (s *SearchForTransactions) CurrencyLessThan(lessThan uint64) *SearchForTransactions { - s.p.CurrencyLessThan = lessThan +// RekeyTo include results which include the rekey-to field. +func (s *SearchForTransactions) RekeyTo(RekeyTo bool) *SearchForTransactions { + s.p.RekeyTo = RekeyTo return s } -// AddressRole combine with the address parameter to define what type of address to -// search for. -func (s *SearchForTransactions) AddressRole(role string) *SearchForTransactions { - s.p.AddressRole = role +// Round include results for the specified round. +func (s *SearchForTransactions) Round(Round uint64) *SearchForTransactions { + s.p.Round = Round return s } -func (s *SearchForTransactions) AddressString(address string) *SearchForTransactions { - s.p.Address = address +// SigType sigType filters just results using the specified type of signature: +// * sig - Standard +// * msig - MultiSig +// * lsig - LogicSig +func (s *SearchForTransactions) SigType(SigType string) *SearchForTransactions { + s.p.SigType = SigType return s } -// Address only include transactions with this address in one of the transaction -// fields. -func (s *SearchForTransactions) Address(address types.Address) *SearchForTransactions { - return s.AddressString(address.String()) -} - -// ExcludeCloseTo combine with address and address-role parameters to define what -// type of address to search for. The close to fields are normally treated as a -// receiver, if you would like to exclude them set this parameter to true. -func (s *SearchForTransactions) ExcludeCloseTo(exclude bool) *SearchForTransactions { - s.p.ExcludeCloseTo = exclude +// TxType +func (s *SearchForTransactions) TxType(TxType string) *SearchForTransactions { + s.p.TxType = TxType return s } -// RekeyTo include results which include the rekey-to field. -func (s *SearchForTransactions) RekeyTo(rekeyTo bool) *SearchForTransactions { - s.p.RekeyTo = rekeyTo +// TXID lookup the specific transaction by ID. +func (s *SearchForTransactions) TXID(TXID string) *SearchForTransactions { + s.p.TXID = TXID return s } +// Do performs the HTTP request func (s *SearchForTransactions) Do(ctx context.Context, headers ...*common.Header) (response models.TransactionsResponse, err error) { err = s.c.get(ctx, &response, "/v2/transactions", s.p, headers) return diff --git a/logic/bundledSpecInject.go b/logic/bundledSpecInject.go index 4f7d354a..8980d372 100644 --- a/logic/bundledSpecInject.go +++ b/logic/bundledSpecInject.go @@ -5,2160 +5,1980 @@ var langSpecJson []byte func init() { langSpecJson = []byte{ - 0x7B, 0x22, 0x45, 0x76, 0x61, 0x6C, 0x4D, 0x61, 0x78, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x4C, - 0x6F, 0x67, 0x69, 0x63, 0x53, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6F, 0x6E, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x4F, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, - 0x22, 0x3A, 0x30, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, - 0x22, 0x65, 0x72, 0x72, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x45, 0x72, - 0x72, 0x6F, 0x72, 0x2E, 0x20, 0x50, 0x61, 0x6E, 0x69, 0x63, 0x20, - 0x69, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6C, 0x79, - 0x2E, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x70, - 0x72, 0x69, 0x6D, 0x61, 0x72, 0x69, 0x6C, 0x79, 0x20, 0x61, 0x20, - 0x66, 0x65, 0x6E, 0x63, 0x65, 0x70, 0x6F, 0x73, 0x74, 0x20, 0x61, - 0x67, 0x61, 0x69, 0x6E, 0x73, 0x74, 0x20, 0x61, 0x63, 0x63, 0x69, - 0x64, 0x65, 0x6E, 0x74, 0x61, 0x6C, 0x20, 0x7A, 0x65, 0x72, 0x6F, - 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x67, 0x65, 0x74, 0x74, - 0x69, 0x6E, 0x67, 0x20, 0x63, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, - 0x64, 0x20, 0x69, 0x6E, 0x74, 0x6F, 0x20, 0x70, 0x72, 0x6F, 0x67, - 0x72, 0x61, 0x6D, 0x73, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, - 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, - 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, - 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x73, - 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, - 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, - 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x33, 0x35, 0x2C, 0x22, 0x53, - 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x22, 0x3A, 0x22, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x20, 0x68, - 0x61, 0x73, 0x68, 0x20, 0x6F, 0x66, 0x20, 0x76, 0x61, 0x6C, 0x75, - 0x65, 0x20, 0x58, 0x2C, 0x20, 0x79, 0x69, 0x65, 0x6C, 0x64, 0x73, - 0x20, 0x5B, 0x33, 0x32, 0x5D, 0x62, 0x79, 0x74, 0x65, 0x22, 0x2C, - 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, - 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, - 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, - 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, - 0x22, 0x6B, 0x65, 0x63, 0x63, 0x61, 0x6B, 0x32, 0x35, 0x36, 0x22, - 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, - 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, - 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, - 0x31, 0x33, 0x30, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x4B, 0x65, - 0x63, 0x63, 0x61, 0x6B, 0x32, 0x35, 0x36, 0x20, 0x68, 0x61, 0x73, - 0x68, 0x20, 0x6F, 0x66, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, - 0x58, 0x2C, 0x20, 0x79, 0x69, 0x65, 0x6C, 0x64, 0x73, 0x20, 0x5B, - 0x33, 0x32, 0x5D, 0x62, 0x79, 0x74, 0x65, 0x22, 0x2C, 0x22, 0x47, - 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, - 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, - 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, - 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x73, - 0x68, 0x61, 0x35, 0x31, 0x32, 0x5F, 0x32, 0x35, 0x36, 0x22, 0x2C, - 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, - 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, - 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x34, - 0x35, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x53, 0x48, 0x41, 0x35, - 0x31, 0x32, 0x5F, 0x32, 0x35, 0x36, 0x20, 0x68, 0x61, 0x73, 0x68, - 0x20, 0x6F, 0x66, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x58, - 0x2C, 0x20, 0x79, 0x69, 0x65, 0x6C, 0x64, 0x73, 0x20, 0x5B, 0x33, - 0x32, 0x5D, 0x62, 0x79, 0x74, 0x65, 0x22, 0x2C, 0x22, 0x47, 0x72, - 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, - 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, - 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x34, - 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x65, 0x64, - 0x32, 0x35, 0x35, 0x31, 0x39, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, - 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, - 0x42, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, - 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, - 0x74, 0x22, 0x3A, 0x31, 0x39, 0x30, 0x30, 0x2C, 0x22, 0x53, 0x69, - 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, - 0x3A, 0x22, 0x66, 0x6F, 0x72, 0x20, 0x28, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x41, 0x2C, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x20, 0x42, 0x2C, 0x20, 0x70, 0x75, 0x62, 0x6B, 0x65, - 0x79, 0x20, 0x43, 0x29, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x28, 0x5C, 0x22, 0x50, - 0x72, 0x6F, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5C, 0x22, 0x20, 0x7C, - 0x7C, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x5F, 0x68, - 0x61, 0x73, 0x68, 0x20, 0x7C, 0x7C, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x29, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6E, 0x73, 0x74, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x75, 0x62, 0x6B, 0x65, 0x79, 0x20, 0x3D, - 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, - 0x72, 0x20, 0x31, 0x7D, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, - 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x54, 0x68, 0x65, 0x20, - 0x33, 0x32, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x70, 0x75, 0x62, - 0x6C, 0x69, 0x63, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x69, 0x73, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6C, 0x61, 0x73, 0x74, 0x20, 0x65, 0x6C, - 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x2C, 0x20, 0x70, 0x72, - 0x65, 0x63, 0x65, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x36, 0x34, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, - 0x73, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x61, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6F, 0x6E, - 0x64, 0x2D, 0x74, 0x6F, 0x2D, 0x6C, 0x61, 0x73, 0x74, 0x20, 0x65, - 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x6F, 0x6E, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x2C, 0x20, 0x70, - 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x77, 0x61, 0x73, 0x20, 0x73, 0x69, 0x67, - 0x6E, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x74, 0x68, 0x69, 0x72, 0x64, 0x2D, 0x74, 0x6F, 0x2D, 0x6C, 0x61, - 0x73, 0x74, 0x20, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, - 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, - 0x6B, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, - 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, - 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x38, 0x2C, 0x22, 0x4E, 0x61, - 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x2B, 0x22, 0x2C, 0x22, 0x41, 0x72, - 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x70, 0x6C, 0x75, 0x73, 0x20, - 0x42, 0x2E, 0x20, 0x50, 0x61, 0x6E, 0x69, 0x63, 0x20, 0x6F, 0x6E, - 0x20, 0x6F, 0x76, 0x65, 0x72, 0x66, 0x6C, 0x6F, 0x77, 0x2E, 0x22, - 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, - 0x3A, 0x22, 0x4F, 0x76, 0x65, 0x72, 0x66, 0x6C, 0x6F, 0x77, 0x20, - 0x69, 0x73, 0x20, 0x61, 0x6E, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, - 0x20, 0x63, 0x6F, 0x6E, 0x64, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, 0x6C, 0x74, 0x73, - 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x20, - 0x61, 0x6E, 0x64, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6F, 0x6E, 0x2E, 0x20, 0x46, 0x75, 0x6C, 0x6C, 0x20, 0x70, - 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x73, - 0x20, 0x61, 0x76, 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x20, - 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x60, 0x61, 0x64, 0x64, 0x77, 0x60, - 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, - 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, - 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, - 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x39, 0x2C, 0x22, 0x4E, 0x61, 0x6D, - 0x65, 0x22, 0x3A, 0x22, 0x2D, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, - 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, - 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, - 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x22, 0x3A, 0x22, 0x41, 0x20, 0x6D, 0x69, 0x6E, 0x75, 0x73, 0x20, - 0x42, 0x2E, 0x20, 0x50, 0x61, 0x6E, 0x69, 0x63, 0x20, 0x69, 0x66, - 0x20, 0x42, 0x20, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x41, - 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, - 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, - 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, - 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x30, 0x2C, 0x22, 0x4E, 0x61, - 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x2F, 0x22, 0x2C, 0x22, 0x41, 0x72, - 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x64, 0x69, 0x76, 0x69, 0x64, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x42, 0x2E, 0x20, 0x50, 0x61, - 0x6E, 0x69, 0x63, 0x20, 0x69, 0x66, 0x20, 0x42, 0x20, 0x3D, 0x3D, - 0x20, 0x30, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, - 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, - 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, - 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x31, 0x2C, 0x22, - 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x2A, 0x22, 0x2C, 0x22, - 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, - 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, - 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, - 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x74, 0x69, 0x6D, - 0x65, 0x73, 0x20, 0x42, 0x2E, 0x20, 0x50, 0x61, 0x6E, 0x69, 0x63, - 0x20, 0x6F, 0x6E, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x66, 0x6C, 0x6F, - 0x77, 0x2E, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, - 0x72, 0x61, 0x22, 0x3A, 0x22, 0x4F, 0x76, 0x65, 0x72, 0x66, 0x6C, - 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6E, 0x20, 0x65, 0x72, - 0x72, 0x6F, 0x72, 0x20, 0x63, 0x6F, 0x6E, 0x64, 0x69, 0x74, 0x69, - 0x6F, 0x6E, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, - 0x6C, 0x74, 0x73, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6F, 0x6E, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x66, 0x61, 0x69, 0x6C, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x20, 0x46, 0x75, 0x6C, - 0x6C, 0x20, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6F, 0x6E, - 0x20, 0x69, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6C, 0x61, 0x62, - 0x6C, 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x60, 0x6D, 0x75, - 0x6C, 0x77, 0x60, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, - 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, - 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, - 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x32, 0x2C, - 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x5C, 0x75, 0x30, - 0x30, 0x33, 0x63, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, - 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, - 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, - 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, - 0x22, 0x41, 0x20, 0x6C, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x6E, 0x20, 0x42, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, - 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x7D, 0x22, 0x2C, - 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, - 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, - 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, - 0x22, 0x3A, 0x31, 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, - 0x3A, 0x22, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x22, 0x2C, 0x22, - 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, - 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, - 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, - 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6E, 0x20, 0x42, - 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, - 0x20, 0x6F, 0x72, 0x20, 0x31, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, - 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, - 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, - 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, - 0x34, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x5C, - 0x75, 0x30, 0x30, 0x33, 0x63, 0x3D, 0x22, 0x2C, 0x22, 0x41, 0x72, - 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x6C, 0x65, 0x73, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x6E, 0x20, 0x6F, 0x72, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6C, 0x20, 0x74, 0x6F, 0x20, 0x42, 0x20, 0x3D, 0x5C, 0x75, - 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, - 0x31, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, - 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, - 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x35, 0x2C, 0x22, 0x4E, - 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x5C, 0x75, 0x30, 0x30, 0x33, - 0x65, 0x3D, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, - 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, - 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, - 0x41, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6E, 0x20, 0x6F, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6C, 0x20, 0x74, 0x6F, 0x20, 0x42, 0x20, 0x3D, 0x5C, 0x75, 0x30, - 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, - 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, - 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, - 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, - 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x36, 0x2C, 0x22, 0x4E, 0x61, - 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x5C, 0x75, 0x30, 0x30, 0x32, 0x36, - 0x5C, 0x75, 0x30, 0x30, 0x32, 0x36, 0x22, 0x2C, 0x22, 0x41, 0x72, - 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x69, 0x73, 0x20, 0x6E, 0x6F, - 0x74, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x20, 0x61, 0x6E, 0x64, 0x20, - 0x42, 0x20, 0x69, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x7A, 0x65, - 0x72, 0x6F, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, - 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x7D, 0x22, 0x2C, 0x22, - 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, - 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, - 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, - 0x3A, 0x31, 0x37, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, - 0x22, 0x7C, 0x7C, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, - 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, - 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, - 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, - 0x22, 0x41, 0x20, 0x69, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x7A, - 0x65, 0x72, 0x6F, 0x20, 0x6F, 0x72, 0x20, 0x42, 0x20, 0x69, 0x73, - 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x20, 0x3D, - 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, - 0x72, 0x20, 0x31, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, - 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, - 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, - 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x38, 0x2C, - 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x3D, 0x3D, 0x22, - 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x2E, - 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, - 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, - 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, - 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x69, - 0x73, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6C, 0x20, 0x74, 0x6F, 0x20, - 0x42, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, - 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x7D, 0x22, 0x2C, 0x22, 0x47, - 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, - 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, - 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, - 0x31, 0x39, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, - 0x21, 0x3D, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, - 0x22, 0x2E, 0x2E, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, - 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, - 0x41, 0x20, 0x69, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6C, 0x20, 0x74, 0x6F, 0x20, 0x42, 0x20, 0x3D, 0x5C, - 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, - 0x20, 0x31, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, - 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, - 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, - 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, 0x30, 0x2C, 0x22, - 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x21, 0x22, 0x2C, 0x22, - 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, - 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, - 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x58, 0x20, 0x3D, 0x3D, 0x20, 0x30, - 0x20, 0x79, 0x69, 0x65, 0x6C, 0x64, 0x73, 0x20, 0x31, 0x3B, 0x20, - 0x65, 0x6C, 0x73, 0x65, 0x20, 0x30, 0x22, 0x2C, 0x22, 0x47, 0x72, - 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, - 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, - 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, - 0x31, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x6C, - 0x65, 0x6E, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, - 0x22, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, - 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, - 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, - 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x79, - 0x69, 0x65, 0x6C, 0x64, 0x73, 0x20, 0x6C, 0x65, 0x6E, 0x67, 0x74, - 0x68, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x76, - 0x61, 0x6C, 0x75, 0x65, 0x20, 0x58, 0x22, 0x2C, 0x22, 0x47, 0x72, - 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, - 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, - 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, - 0x32, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x69, - 0x74, 0x6F, 0x62, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, - 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, - 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, - 0x63, 0x6F, 0x6E, 0x76, 0x65, 0x72, 0x74, 0x73, 0x20, 0x75, 0x69, - 0x6E, 0x74, 0x36, 0x34, 0x20, 0x58, 0x20, 0x74, 0x6F, 0x20, 0x62, - 0x69, 0x67, 0x20, 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x20, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, - 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, - 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, - 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, 0x33, 0x2C, - 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x74, 0x6F, - 0x69, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, - 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, - 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x63, 0x6F, - 0x6E, 0x76, 0x65, 0x72, 0x74, 0x73, 0x20, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x20, 0x58, 0x20, 0x61, 0x73, 0x20, 0x62, 0x69, 0x67, 0x20, - 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x20, 0x74, 0x6F, 0x20, 0x75, - 0x69, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x60, 0x62, 0x74, - 0x6F, 0x69, 0x60, 0x20, 0x70, 0x61, 0x6E, 0x69, 0x63, 0x73, 0x20, - 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6E, 0x70, 0x75, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x6C, 0x6F, 0x6E, 0x67, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6E, 0x20, 0x38, 0x20, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, - 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, - 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, - 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, 0x34, 0x2C, 0x22, - 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x25, 0x22, 0x2C, 0x22, - 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, - 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, - 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, - 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x6D, 0x6F, 0x64, - 0x75, 0x6C, 0x6F, 0x20, 0x42, 0x2E, 0x20, 0x50, 0x61, 0x6E, 0x69, - 0x63, 0x20, 0x69, 0x66, 0x20, 0x42, 0x20, 0x3D, 0x3D, 0x20, 0x30, - 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, - 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, - 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, - 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, 0x35, 0x2C, 0x22, 0x4E, 0x61, - 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x7C, 0x22, 0x2C, 0x22, 0x41, 0x72, - 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x62, 0x69, 0x74, 0x77, 0x69, - 0x73, 0x65, 0x2D, 0x6F, 0x72, 0x20, 0x42, 0x22, 0x2C, 0x22, 0x47, - 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, - 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, - 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, - 0x32, 0x36, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, - 0x5C, 0x75, 0x30, 0x30, 0x32, 0x36, 0x22, 0x2C, 0x22, 0x41, 0x72, - 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x62, 0x69, 0x74, 0x77, 0x69, - 0x73, 0x65, 0x2D, 0x61, 0x6E, 0x64, 0x20, 0x42, 0x22, 0x2C, 0x22, - 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, - 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, - 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, - 0x3A, 0x32, 0x37, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, - 0x22, 0x5E, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, - 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, - 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, - 0x41, 0x20, 0x62, 0x69, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2D, 0x78, - 0x6F, 0x72, 0x20, 0x42, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, - 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, - 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, - 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, 0x38, 0x2C, - 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x7E, 0x22, 0x2C, - 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, - 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, - 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, - 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x62, 0x69, 0x74, 0x77, 0x69, - 0x73, 0x65, 0x20, 0x69, 0x6E, 0x76, 0x65, 0x72, 0x74, 0x20, 0x76, - 0x61, 0x6C, 0x75, 0x65, 0x20, 0x58, 0x22, 0x2C, 0x22, 0x47, 0x72, - 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, - 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, - 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, - 0x39, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x6D, - 0x75, 0x6C, 0x77, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, - 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, - 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, - 0x3A, 0x22, 0x41, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x73, 0x20, 0x42, - 0x20, 0x6F, 0x75, 0x74, 0x20, 0x74, 0x6F, 0x20, 0x31, 0x32, 0x38, - 0x2D, 0x62, 0x69, 0x74, 0x20, 0x6C, 0x6F, 0x6E, 0x67, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6C, 0x74, 0x20, 0x61, 0x73, 0x20, 0x6C, 0x6F, - 0x77, 0x20, 0x28, 0x74, 0x6F, 0x70, 0x29, 0x20, 0x61, 0x6E, 0x64, - 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, 0x75, 0x69, 0x6E, 0x74, 0x36, - 0x34, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, 0x6F, 0x6E, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, - 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, - 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, - 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, - 0x65, 0x22, 0x3A, 0x33, 0x30, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, - 0x22, 0x3A, 0x22, 0x61, 0x64, 0x64, 0x77, 0x22, 0x2C, 0x22, 0x41, - 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, - 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, - 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x70, 0x6C, 0x75, - 0x73, 0x20, 0x42, 0x20, 0x6F, 0x75, 0x74, 0x20, 0x74, 0x6F, 0x20, - 0x31, 0x32, 0x38, 0x2D, 0x62, 0x69, 0x74, 0x20, 0x6C, 0x6F, 0x6E, - 0x67, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x20, 0x61, 0x73, - 0x20, 0x73, 0x75, 0x6D, 0x20, 0x28, 0x74, 0x6F, 0x70, 0x29, 0x20, - 0x61, 0x6E, 0x64, 0x20, 0x63, 0x61, 0x72, 0x72, 0x79, 0x2D, 0x62, - 0x69, 0x74, 0x20, 0x75, 0x69, 0x6E, 0x74, 0x36, 0x34, 0x20, 0x76, - 0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, - 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, - 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, - 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, - 0x33, 0x32, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, - 0x69, 0x6E, 0x74, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x22, 0x2C, - 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, - 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x30, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x22, 0x3A, 0x22, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x20, - 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6F, 0x66, 0x20, 0x75, 0x69, - 0x6E, 0x74, 0x36, 0x34, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, - 0x6E, 0x74, 0x73, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x75, 0x73, 0x65, - 0x20, 0x62, 0x79, 0x20, 0x69, 0x6E, 0x74, 0x63, 0x22, 0x2C, 0x22, - 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, - 0x60, 0x69, 0x6E, 0x74, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x60, - 0x20, 0x6C, 0x6F, 0x61, 0x64, 0x73, 0x20, 0x66, 0x6F, 0x6C, 0x6C, - 0x6F, 0x77, 0x69, 0x6E, 0x67, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, - 0x61, 0x6D, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x69, 0x6E, - 0x74, 0x6F, 0x20, 0x61, 0x6E, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x20, 0x6F, 0x66, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, - 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x20, - 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x76, 0x61, 0x6C, - 0x75, 0x61, 0x74, 0x6F, 0x72, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x73, - 0x65, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x63, - 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x20, 0x63, 0x61, - 0x6E, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, - 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x79, 0x20, 0x60, 0x69, - 0x6E, 0x74, 0x63, 0x60, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x60, 0x69, - 0x6E, 0x74, 0x63, 0x5F, 0x2A, 0x60, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x77, 0x69, 0x6C, 0x6C, 0x20, 0x70, 0x75, 0x73, 0x68, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, - 0x6F, 0x6E, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, - 0x61, 0x63, 0x6B, 0x2E, 0x20, 0x53, 0x75, 0x62, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6E, 0x74, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73, 0x20, - 0x74, 0x6F, 0x20, 0x60, 0x69, 0x6E, 0x74, 0x63, 0x62, 0x6C, 0x6F, - 0x63, 0x6B, 0x60, 0x20, 0x72, 0x65, 0x73, 0x65, 0x74, 0x20, 0x61, - 0x6E, 0x64, 0x20, 0x72, 0x65, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, - 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x20, - 0x61, 0x76, 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x74, - 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x2E, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, - 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, - 0x76, 0x61, 0x72, 0x75, 0x69, 0x6E, 0x74, 0x20, 0x6C, 0x65, 0x6E, - 0x67, 0x74, 0x68, 0x7D, 0x20, 0x5B, 0x7B, 0x76, 0x61, 0x72, 0x75, - 0x69, 0x6E, 0x74, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x7D, 0x2C, - 0x20, 0x2E, 0x2E, 0x2E, 0x5D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, - 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, - 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, - 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, - 0x22, 0x3A, 0x33, 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, - 0x3A, 0x22, 0x69, 0x6E, 0x74, 0x63, 0x22, 0x2C, 0x22, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, - 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, - 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x49, 0x74, 0x68, - 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, 0x66, - 0x72, 0x6F, 0x6D, 0x20, 0x69, 0x6E, 0x74, 0x63, 0x62, 0x6C, 0x6F, - 0x63, 0x6B, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, - 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, - 0x6E, 0x74, 0x38, 0x20, 0x69, 0x6E, 0x74, 0x20, 0x63, 0x6F, 0x6E, - 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, - 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, - 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, - 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x33, 0x34, - 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x6E, - 0x74, 0x63, 0x5F, 0x30, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, - 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, - 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, - 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, - 0x61, 0x6E, 0x74, 0x20, 0x30, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, - 0x69, 0x6E, 0x74, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, - 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, - 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, - 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, - 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, - 0x64, 0x65, 0x22, 0x3A, 0x33, 0x35, 0x2C, 0x22, 0x4E, 0x61, 0x6D, - 0x65, 0x22, 0x3A, 0x22, 0x69, 0x6E, 0x74, 0x63, 0x5F, 0x31, 0x22, - 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, - 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, - 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, 0x31, - 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x69, 0x6E, 0x74, 0x63, 0x62, - 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, - 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, - 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, - 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x33, - 0x36, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x69, - 0x6E, 0x74, 0x63, 0x5F, 0x32, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, - 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, - 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, - 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x63, 0x6F, 0x6E, 0x73, - 0x74, 0x61, 0x6E, 0x74, 0x20, 0x32, 0x20, 0x66, 0x72, 0x6F, 0x6D, - 0x20, 0x69, 0x6E, 0x74, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, - 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, - 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, - 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, - 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, - 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x33, 0x37, 0x2C, 0x22, 0x4E, 0x61, - 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x6E, 0x74, 0x63, 0x5F, 0x33, - 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, - 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, - 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, - 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, - 0x68, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, - 0x33, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x69, 0x6E, 0x74, 0x63, - 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, - 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, - 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, - 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, - 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, - 0x33, 0x38, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, - 0x62, 0x79, 0x74, 0x65, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x30, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x22, 0x3A, 0x22, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, - 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6F, 0x66, 0x20, 0x62, - 0x79, 0x74, 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x63, - 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x20, 0x66, 0x6F, - 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x62, 0x79, 0x20, 0x62, 0x79, - 0x74, 0x65, 0x63, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, - 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x60, 0x62, 0x79, 0x74, 0x65, - 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x60, 0x20, 0x6C, 0x6F, 0x61, - 0x64, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6F, 0x6C, 0x6C, - 0x6F, 0x77, 0x69, 0x6E, 0x67, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, - 0x61, 0x6D, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x69, 0x6E, - 0x74, 0x6F, 0x20, 0x61, 0x6E, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x2D, 0x61, 0x72, - 0x72, 0x61, 0x79, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, - 0x74, 0x73, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x76, 0x61, 0x6C, 0x75, 0x61, 0x74, 0x6F, 0x72, 0x2E, 0x20, 0x54, - 0x68, 0x65, 0x73, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, - 0x6E, 0x74, 0x73, 0x20, 0x63, 0x61, 0x6E, 0x20, 0x62, 0x65, 0x20, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6F, - 0x20, 0x62, 0x79, 0x20, 0x60, 0x62, 0x79, 0x74, 0x65, 0x63, 0x60, - 0x20, 0x61, 0x6E, 0x64, 0x20, 0x60, 0x62, 0x79, 0x74, 0x65, 0x63, - 0x5F, 0x2A, 0x60, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, - 0x69, 0x6C, 0x6C, 0x20, 0x70, 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x6F, 0x6E, 0x74, - 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, - 0x2E, 0x20, 0x53, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6E, - 0x74, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73, 0x20, 0x74, 0x6F, 0x20, - 0x60, 0x62, 0x79, 0x74, 0x65, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, - 0x60, 0x20, 0x72, 0x65, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6E, 0x64, - 0x20, 0x72, 0x65, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x63, 0x6F, 0x6E, - 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, - 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2E, 0x22, 0x2C, - 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, - 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x76, 0x61, 0x72, 0x75, - 0x69, 0x6E, 0x74, 0x20, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x7D, - 0x20, 0x5B, 0x28, 0x7B, 0x76, 0x61, 0x72, 0x75, 0x69, 0x6E, 0x74, - 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x6C, 0x65, 0x6E, 0x67, - 0x74, 0x68, 0x7D, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0x2C, - 0x20, 0x2E, 0x2E, 0x2E, 0x5D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, - 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, - 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, - 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, - 0x22, 0x3A, 0x33, 0x39, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, - 0x3A, 0x22, 0x62, 0x79, 0x74, 0x65, 0x63, 0x22, 0x2C, 0x22, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x49, 0x74, - 0x68, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, - 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x62, 0x79, 0x74, 0x65, 0x63, 0x62, - 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, - 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, - 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, - 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, - 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, 0x69, 0x6E, - 0x64, 0x65, 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, - 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, - 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, - 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, - 0x3A, 0x34, 0x30, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, - 0x22, 0x62, 0x79, 0x74, 0x65, 0x63, 0x5F, 0x30, 0x22, 0x2C, 0x22, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, - 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, - 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x63, - 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, 0x30, 0x20, 0x66, - 0x72, 0x6F, 0x6D, 0x20, 0x62, 0x79, 0x74, 0x65, 0x63, 0x62, 0x6C, - 0x6F, 0x63, 0x6B, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, - 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, - 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, - 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x34, 0x31, - 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x79, - 0x74, 0x65, 0x63, 0x5F, 0x31, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, - 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, - 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, - 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x63, 0x6F, 0x6E, 0x73, - 0x74, 0x61, 0x6E, 0x74, 0x20, 0x31, 0x20, 0x66, 0x72, 0x6F, 0x6D, - 0x20, 0x62, 0x79, 0x74, 0x65, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, - 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, - 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, - 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, - 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, - 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x34, 0x32, 0x2C, 0x22, 0x4E, - 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x79, 0x74, 0x65, 0x63, - 0x5F, 0x32, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, - 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, - 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, - 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, - 0x75, 0x73, 0x68, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, - 0x74, 0x20, 0x32, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x62, 0x79, - 0x74, 0x65, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, 0x6F, - 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, - 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, - 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, - 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, - 0x65, 0x22, 0x3A, 0x34, 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, - 0x22, 0x3A, 0x22, 0x62, 0x79, 0x74, 0x65, 0x63, 0x5F, 0x33, 0x22, - 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, - 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, - 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, 0x33, - 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x62, 0x79, 0x74, 0x65, 0x63, - 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, - 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, - 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, - 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, - 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, - 0x34, 0x34, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, - 0x61, 0x72, 0x67, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, - 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, - 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, - 0x70, 0x75, 0x73, 0x68, 0x20, 0x4E, 0x74, 0x68, 0x20, 0x4C, 0x6F, - 0x67, 0x69, 0x63, 0x53, 0x69, 0x67, 0x20, 0x61, 0x72, 0x67, 0x75, - 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, - 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, - 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, - 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x61, 0x72, 0x67, 0x20, 0x69, - 0x6E, 0x64, 0x65, 0x78, 0x20, 0x4E, 0x7D, 0x22, 0x2C, 0x22, 0x47, - 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, - 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, - 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, - 0x64, 0x65, 0x22, 0x3A, 0x34, 0x35, 0x2C, 0x22, 0x4E, 0x61, 0x6D, - 0x65, 0x22, 0x3A, 0x22, 0x61, 0x72, 0x67, 0x5F, 0x30, 0x22, 0x2C, - 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, - 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, - 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, - 0x4C, 0x6F, 0x67, 0x69, 0x63, 0x53, 0x69, 0x67, 0x20, 0x61, 0x72, - 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x30, 0x20, 0x74, 0x6F, - 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, - 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, - 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, - 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, - 0x65, 0x22, 0x3A, 0x34, 0x36, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, - 0x22, 0x3A, 0x22, 0x61, 0x72, 0x67, 0x5F, 0x31, 0x22, 0x2C, 0x22, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, - 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, - 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x4C, - 0x6F, 0x67, 0x69, 0x63, 0x53, 0x69, 0x67, 0x20, 0x61, 0x72, 0x67, - 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x31, 0x20, 0x74, 0x6F, 0x20, - 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, - 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, - 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, - 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, - 0x22, 0x3A, 0x34, 0x37, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, - 0x3A, 0x22, 0x61, 0x72, 0x67, 0x5F, 0x32, 0x22, 0x2C, 0x22, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x4C, 0x6F, - 0x67, 0x69, 0x63, 0x53, 0x69, 0x67, 0x20, 0x61, 0x72, 0x67, 0x75, - 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x32, 0x20, 0x74, 0x6F, 0x20, 0x73, - 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, - 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, - 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, - 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, - 0x3A, 0x34, 0x38, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, - 0x22, 0x61, 0x72, 0x67, 0x5F, 0x33, 0x22, 0x2C, 0x22, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, - 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, - 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x4C, 0x6F, 0x67, - 0x69, 0x63, 0x53, 0x69, 0x67, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6D, - 0x65, 0x6E, 0x74, 0x20, 0x33, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, - 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, - 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, - 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, - 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, - 0x34, 0x39, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, - 0x74, 0x78, 0x6E, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, - 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, - 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, - 0x6D, 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x65, 0x6E, 0x64, 0x65, 0x72, - 0x22, 0x2C, 0x22, 0x46, 0x65, 0x65, 0x22, 0x2C, 0x22, 0x46, 0x69, - 0x72, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x22, 0x2C, 0x22, - 0x46, 0x69, 0x72, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x54, - 0x69, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x4C, 0x61, 0x73, 0x74, 0x56, - 0x61, 0x6C, 0x69, 0x64, 0x22, 0x2C, 0x22, 0x4E, 0x6F, 0x74, 0x65, - 0x22, 0x2C, 0x22, 0x4C, 0x65, 0x61, 0x73, 0x65, 0x22, 0x2C, 0x22, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x2C, 0x22, - 0x41, 0x6D, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x43, 0x6C, - 0x6F, 0x73, 0x65, 0x52, 0x65, 0x6D, 0x61, 0x69, 0x6E, 0x64, 0x65, - 0x72, 0x54, 0x6F, 0x22, 0x2C, 0x22, 0x56, 0x6F, 0x74, 0x65, 0x50, - 0x4B, 0x22, 0x2C, 0x22, 0x53, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x69, - 0x6F, 0x6E, 0x50, 0x4B, 0x22, 0x2C, 0x22, 0x56, 0x6F, 0x74, 0x65, - 0x46, 0x69, 0x72, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x56, 0x6F, 0x74, - 0x65, 0x4C, 0x61, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x56, 0x6F, 0x74, - 0x65, 0x4B, 0x65, 0x79, 0x44, 0x69, 0x6C, 0x75, 0x74, 0x69, 0x6F, - 0x6E, 0x22, 0x2C, 0x22, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2C, 0x22, - 0x54, 0x79, 0x70, 0x65, 0x45, 0x6E, 0x75, 0x6D, 0x22, 0x2C, 0x22, - 0x58, 0x66, 0x65, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0x2C, - 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x6D, 0x6F, 0x75, 0x6E, - 0x74, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x65, - 0x6E, 0x64, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x2C, - 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x43, 0x6C, 0x6F, 0x73, 0x65, - 0x54, 0x6F, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x49, - 0x6E, 0x64, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x54, 0x78, 0x49, 0x44, - 0x22, 0x2C, 0x22, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6F, 0x6E, 0x49, 0x44, 0x22, 0x2C, 0x22, 0x4F, 0x6E, 0x43, - 0x6F, 0x6D, 0x70, 0x6C, 0x65, 0x74, 0x69, 0x6F, 0x6E, 0x22, 0x2C, - 0x22, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x41, 0x72, 0x67, 0x73, 0x22, 0x2C, 0x22, 0x4E, 0x75, 0x6D, - 0x41, 0x70, 0x70, 0x41, 0x72, 0x67, 0x73, 0x22, 0x2C, 0x22, 0x41, - 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x22, 0x2C, 0x22, 0x4E, - 0x75, 0x6D, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x22, - 0x2C, 0x22, 0x41, 0x70, 0x70, 0x72, 0x6F, 0x76, 0x61, 0x6C, 0x50, - 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x22, 0x2C, 0x22, 0x43, 0x6C, - 0x65, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6F, - 0x67, 0x72, 0x61, 0x6D, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x6B, 0x65, - 0x79, 0x54, 0x6F, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, - 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x43, 0x6F, - 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x6F, - 0x74, 0x61, 0x6C, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, - 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x6D, - 0x61, 0x6C, 0x73, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, - 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6C, 0x74, 0x46, 0x72, 0x6F, 0x7A, 0x65, 0x6E, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x55, 0x6E, 0x69, 0x74, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, - 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x55, 0x52, 0x4C, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x4D, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, - 0x61, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, - 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x4D, 0x61, 0x6E, 0x61, 0x67, - 0x65, 0x72, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x43, 0x6C, 0x61, 0x77, 0x62, 0x61, 0x63, 0x6B, 0x22, - 0x2C, 0x22, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x22, 0x2C, 0x22, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, - 0x74, 0x22, 0x2C, 0x22, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x46, 0x72, 0x6F, 0x7A, 0x65, 0x6E, 0x22, - 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0x2C, 0x22, - 0x4E, 0x75, 0x6D, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0x2C, - 0x22, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x73, 0x22, 0x2C, 0x22, 0x4E, 0x75, 0x6D, 0x41, 0x70, 0x70, - 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x22, 0x2C, - 0x22, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x4E, 0x75, 0x6D, 0x55, - 0x69, 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x47, 0x6C, 0x6F, 0x62, 0x61, - 0x6C, 0x4E, 0x75, 0x6D, 0x42, 0x79, 0x74, 0x65, 0x53, 0x6C, 0x69, - 0x63, 0x65, 0x22, 0x2C, 0x22, 0x4C, 0x6F, 0x63, 0x61, 0x6C, 0x4E, - 0x75, 0x6D, 0x55, 0x69, 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x4C, 0x6F, - 0x63, 0x61, 0x6C, 0x4E, 0x75, 0x6D, 0x42, 0x79, 0x74, 0x65, 0x53, - 0x6C, 0x69, 0x63, 0x65, 0x22, 0x5D, 0x2C, 0x22, 0x41, 0x72, 0x67, - 0x45, 0x6E, 0x75, 0x6D, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3A, - 0x22, 0x42, 0x55, 0x55, 0x55, 0x55, 0x42, 0x42, 0x42, 0x55, 0x42, - 0x42, 0x42, 0x55, 0x55, 0x55, 0x42, 0x55, 0x55, 0x55, 0x42, 0x42, - 0x42, 0x55, 0x42, 0x55, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42, 0x42, - 0x42, 0x55, 0x55, 0x55, 0x55, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, - 0x42, 0x42, 0x55, 0x42, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, - 0x70, 0x75, 0x73, 0x68, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, - 0x46, 0x20, 0x6F, 0x66, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, - 0x74, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6F, 0x6E, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, - 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, - 0x22, 0x3A, 0x22, 0x46, 0x69, 0x72, 0x73, 0x74, 0x56, 0x61, 0x6C, - 0x69, 0x64, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x63, 0x61, 0x75, 0x73, - 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, 0x67, - 0x72, 0x61, 0x6D, 0x20, 0x74, 0x6F, 0x20, 0x66, 0x61, 0x69, 0x6C, - 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, - 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x64, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x66, 0x75, 0x74, 0x75, 0x72, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x2E, 0x22, 0x2C, 0x22, 0x49, 0x6D, - 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, - 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x74, - 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, - 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, - 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, - 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, - 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x35, 0x30, - 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x6C, - 0x6F, 0x62, 0x61, 0x6C, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, - 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, - 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, - 0x75, 0x6D, 0x22, 0x3A, 0x5B, 0x22, 0x4D, 0x69, 0x6E, 0x54, 0x78, - 0x6E, 0x46, 0x65, 0x65, 0x22, 0x2C, 0x22, 0x4D, 0x69, 0x6E, 0x42, - 0x61, 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x22, 0x2C, 0x22, 0x4D, 0x61, - 0x78, 0x54, 0x78, 0x6E, 0x4C, 0x69, 0x66, 0x65, 0x22, 0x2C, 0x22, - 0x5A, 0x65, 0x72, 0x6F, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x53, 0x69, 0x7A, - 0x65, 0x22, 0x2C, 0x22, 0x4C, 0x6F, 0x67, 0x69, 0x63, 0x53, 0x69, - 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x22, 0x2C, 0x22, - 0x52, 0x6F, 0x75, 0x6E, 0x64, 0x22, 0x2C, 0x22, 0x4C, 0x61, 0x74, - 0x65, 0x73, 0x74, 0x54, 0x69, 0x6D, 0x65, 0x73, 0x74, 0x61, 0x6D, - 0x70, 0x22, 0x2C, 0x22, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, - 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, - 0x49, 0x44, 0x22, 0x2C, 0x22, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6F, - 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x2C, - 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, 0x6D, 0x54, 0x79, 0x70, - 0x65, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x55, 0x42, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x42, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, - 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x76, 0x61, 0x6C, 0x75, - 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x67, 0x6C, 0x6F, 0x62, - 0x61, 0x6C, 0x73, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, - 0x6B, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, - 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, - 0x69, 0x6E, 0x74, 0x38, 0x20, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, - 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, - 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, - 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, - 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x35, - 0x31, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x67, - 0x74, 0x78, 0x6E, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, - 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, - 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, - 0x6D, 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x65, 0x6E, 0x64, 0x65, 0x72, - 0x22, 0x2C, 0x22, 0x46, 0x65, 0x65, 0x22, 0x2C, 0x22, 0x46, 0x69, - 0x72, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x22, 0x2C, 0x22, - 0x46, 0x69, 0x72, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x54, - 0x69, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x4C, 0x61, 0x73, 0x74, 0x56, - 0x61, 0x6C, 0x69, 0x64, 0x22, 0x2C, 0x22, 0x4E, 0x6F, 0x74, 0x65, - 0x22, 0x2C, 0x22, 0x4C, 0x65, 0x61, 0x73, 0x65, 0x22, 0x2C, 0x22, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x2C, 0x22, - 0x41, 0x6D, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x43, 0x6C, - 0x6F, 0x73, 0x65, 0x52, 0x65, 0x6D, 0x61, 0x69, 0x6E, 0x64, 0x65, - 0x72, 0x54, 0x6F, 0x22, 0x2C, 0x22, 0x56, 0x6F, 0x74, 0x65, 0x50, - 0x4B, 0x22, 0x2C, 0x22, 0x53, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x69, - 0x6F, 0x6E, 0x50, 0x4B, 0x22, 0x2C, 0x22, 0x56, 0x6F, 0x74, 0x65, - 0x46, 0x69, 0x72, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x56, 0x6F, 0x74, - 0x65, 0x4C, 0x61, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x56, 0x6F, 0x74, - 0x65, 0x4B, 0x65, 0x79, 0x44, 0x69, 0x6C, 0x75, 0x74, 0x69, 0x6F, - 0x6E, 0x22, 0x2C, 0x22, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2C, 0x22, - 0x54, 0x79, 0x70, 0x65, 0x45, 0x6E, 0x75, 0x6D, 0x22, 0x2C, 0x22, - 0x58, 0x66, 0x65, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0x2C, - 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x6D, 0x6F, 0x75, 0x6E, - 0x74, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x65, - 0x6E, 0x64, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x2C, - 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x43, 0x6C, 0x6F, 0x73, 0x65, - 0x54, 0x6F, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x49, - 0x6E, 0x64, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x54, 0x78, 0x49, 0x44, - 0x22, 0x2C, 0x22, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6F, 0x6E, 0x49, 0x44, 0x22, 0x2C, 0x22, 0x4F, 0x6E, 0x43, - 0x6F, 0x6D, 0x70, 0x6C, 0x65, 0x74, 0x69, 0x6F, 0x6E, 0x22, 0x2C, - 0x22, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x41, 0x72, 0x67, 0x73, 0x22, 0x2C, 0x22, 0x4E, 0x75, 0x6D, - 0x41, 0x70, 0x70, 0x41, 0x72, 0x67, 0x73, 0x22, 0x2C, 0x22, 0x41, - 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x22, 0x2C, 0x22, 0x4E, - 0x75, 0x6D, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x22, - 0x2C, 0x22, 0x41, 0x70, 0x70, 0x72, 0x6F, 0x76, 0x61, 0x6C, 0x50, - 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x22, 0x2C, 0x22, 0x43, 0x6C, - 0x65, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6F, - 0x67, 0x72, 0x61, 0x6D, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x6B, 0x65, - 0x79, 0x54, 0x6F, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, - 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x43, 0x6F, - 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x6F, - 0x74, 0x61, 0x6C, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, - 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x6D, - 0x61, 0x6C, 0x73, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, - 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6C, 0x74, 0x46, 0x72, 0x6F, 0x7A, 0x65, 0x6E, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x55, 0x6E, 0x69, 0x74, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, - 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x55, 0x52, 0x4C, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x4D, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, - 0x61, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, - 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x4D, 0x61, 0x6E, 0x61, 0x67, - 0x65, 0x72, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x43, 0x6C, 0x61, 0x77, 0x62, 0x61, 0x63, 0x6B, 0x22, - 0x2C, 0x22, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x22, 0x2C, 0x22, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, - 0x74, 0x22, 0x2C, 0x22, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x46, 0x72, 0x6F, 0x7A, 0x65, 0x6E, 0x22, - 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0x2C, 0x22, - 0x4E, 0x75, 0x6D, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0x2C, - 0x22, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x73, 0x22, 0x2C, 0x22, 0x4E, 0x75, 0x6D, 0x41, 0x70, 0x70, - 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x22, 0x2C, - 0x22, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x4E, 0x75, 0x6D, 0x55, - 0x69, 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x47, 0x6C, 0x6F, 0x62, 0x61, - 0x6C, 0x4E, 0x75, 0x6D, 0x42, 0x79, 0x74, 0x65, 0x53, 0x6C, 0x69, - 0x63, 0x65, 0x22, 0x2C, 0x22, 0x4C, 0x6F, 0x63, 0x61, 0x6C, 0x4E, - 0x75, 0x6D, 0x55, 0x69, 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x4C, 0x6F, - 0x63, 0x61, 0x6C, 0x4E, 0x75, 0x6D, 0x42, 0x79, 0x74, 0x65, 0x53, - 0x6C, 0x69, 0x63, 0x65, 0x22, 0x5D, 0x2C, 0x22, 0x41, 0x72, 0x67, - 0x45, 0x6E, 0x75, 0x6D, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3A, - 0x22, 0x42, 0x55, 0x55, 0x55, 0x55, 0x42, 0x42, 0x42, 0x55, 0x42, - 0x42, 0x42, 0x55, 0x55, 0x55, 0x42, 0x55, 0x55, 0x55, 0x42, 0x42, - 0x42, 0x55, 0x42, 0x55, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42, 0x42, - 0x42, 0x55, 0x55, 0x55, 0x55, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, - 0x42, 0x42, 0x55, 0x42, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, - 0x70, 0x75, 0x73, 0x68, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, - 0x46, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x54, 0x74, - 0x68, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6F, 0x6E, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x67, 0x72, 0x6F, 0x75, - 0x70, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, - 0x61, 0x22, 0x3A, 0x22, 0x66, 0x6F, 0x72, 0x20, 0x6E, 0x6F, 0x74, - 0x65, 0x73, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x69, 0x65, 0x6C, - 0x64, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C, - 0x65, 0x2C, 0x20, 0x73, 0x65, 0x65, 0x20, 0x60, 0x74, 0x78, 0x6E, - 0x60, 0x2E, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x20, 0x69, 0x73, 0x20, 0x5F, 0x69, 0x5F, 0x20, 0x69, 0x6E, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x2C, 0x20, - 0x60, 0x67, 0x74, 0x78, 0x6E, 0x20, 0x69, 0x20, 0x66, 0x69, 0x65, - 0x6C, 0x64, 0x60, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, - 0x76, 0x61, 0x6C, 0x65, 0x6E, 0x74, 0x20, 0x74, 0x6F, 0x20, 0x60, - 0x74, 0x78, 0x6E, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x60, 0x2E, - 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, - 0x6E, 0x74, 0x38, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x20, - 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, 0x20, 0x7B, 0x75, 0x69, 0x6E, - 0x74, 0x38, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, - 0x6E, 0x64, 0x65, 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, - 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, - 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, - 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, - 0x22, 0x3A, 0x35, 0x32, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, - 0x3A, 0x22, 0x6C, 0x6F, 0x61, 0x64, 0x22, 0x2C, 0x22, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, - 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, - 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x22, 0x3A, 0x22, 0x63, 0x6F, 0x70, 0x79, 0x20, 0x61, 0x20, 0x76, - 0x61, 0x6C, 0x75, 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x73, - 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x20, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, - 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, - 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, - 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x70, 0x6F, 0x73, 0x69, - 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x6E, 0x20, 0x73, 0x63, 0x72, - 0x61, 0x74, 0x63, 0x68, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, - 0x74, 0x6F, 0x20, 0x6C, 0x6F, 0x61, 0x64, 0x20, 0x66, 0x72, 0x6F, - 0x6D, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, - 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, - 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x35, - 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x73, - 0x74, 0x6F, 0x72, 0x65, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, - 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, - 0x32, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x6F, - 0x70, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x66, - 0x72, 0x6F, 0x6D, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, - 0x63, 0x6B, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x73, 0x74, 0x6F, 0x72, - 0x65, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, - 0x68, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x2C, 0x22, 0x49, - 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, - 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, - 0x70, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x6E, - 0x20, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x20, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x6F, 0x72, - 0x65, 0x20, 0x74, 0x6F, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, - 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, - 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, - 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, - 0x22, 0x3A, 0x35, 0x34, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, - 0x3A, 0x22, 0x74, 0x78, 0x6E, 0x61, 0x22, 0x2C, 0x22, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, - 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, - 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x41, 0x72, 0x67, - 0x45, 0x6E, 0x75, 0x6D, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x70, 0x70, - 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x41, 0x72, 0x67, - 0x73, 0x22, 0x2C, 0x22, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, - 0x73, 0x22, 0x5D, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, - 0x6D, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x42, - 0x55, 0x55, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, - 0x70, 0x75, 0x73, 0x68, 0x20, 0x49, 0x74, 0x68, 0x20, 0x76, 0x61, - 0x6C, 0x75, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, - 0x20, 0x46, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6E, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x49, - 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, - 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, - 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, - 0x78, 0x7D, 0x20, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x74, - 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, - 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, - 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, - 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, - 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, - 0x64, 0x65, 0x22, 0x3A, 0x35, 0x35, 0x2C, 0x22, 0x4E, 0x61, 0x6D, - 0x65, 0x22, 0x3A, 0x22, 0x67, 0x74, 0x78, 0x6E, 0x61, 0x22, 0x2C, - 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, - 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, - 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x34, 0x2C, 0x22, - 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, 0x6D, 0x22, 0x3A, 0x5B, 0x22, - 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, - 0x41, 0x72, 0x67, 0x73, 0x22, 0x2C, 0x22, 0x41, 0x63, 0x63, 0x6F, - 0x75, 0x6E, 0x74, 0x73, 0x22, 0x5D, 0x2C, 0x22, 0x41, 0x72, 0x67, - 0x45, 0x6E, 0x75, 0x6D, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3A, - 0x22, 0x42, 0x42, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x49, 0x74, 0x68, - 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x66, 0x69, - 0x65, 0x6C, 0x64, 0x20, 0x46, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x54, 0x74, 0x68, 0x20, 0x74, 0x72, 0x61, - 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x6E, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, - 0x74, 0x20, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x22, 0x2C, 0x22, 0x49, - 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, - 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, - 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x20, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x20, 0x69, 0x6E, 0x64, 0x65, - 0x78, 0x7D, 0x20, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x74, - 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, - 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, - 0x7D, 0x20, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x74, 0x72, - 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x66, - 0x69, 0x65, 0x6C, 0x64, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, - 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, - 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, - 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, - 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, - 0x65, 0x22, 0x3A, 0x35, 0x36, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, - 0x22, 0x3A, 0x22, 0x67, 0x74, 0x78, 0x6E, 0x73, 0x22, 0x2C, 0x22, - 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, - 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x44, - 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x66, - 0x69, 0x65, 0x6C, 0x64, 0x20, 0x46, 0x20, 0x6F, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x41, 0x74, 0x68, 0x20, 0x74, 0x72, 0x61, 0x6E, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x6E, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, - 0x20, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x22, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x66, 0x6F, - 0x72, 0x20, 0x6E, 0x6F, 0x74, 0x65, 0x73, 0x20, 0x6F, 0x6E, 0x20, - 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x73, 0x20, 0x61, 0x76, 0x61, - 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x2C, 0x20, 0x73, 0x65, 0x65, - 0x20, 0x60, 0x74, 0x78, 0x6E, 0x60, 0x2E, 0x20, 0x49, 0x66, 0x20, - 0x74, 0x6F, 0x70, 0x20, 0x6F, 0x66, 0x20, 0x73, 0x74, 0x61, 0x63, - 0x6B, 0x20, 0x69, 0x73, 0x20, 0x5F, 0x69, 0x5F, 0x2C, 0x20, 0x60, - 0x67, 0x74, 0x78, 0x6E, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, - 0x60, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, - 0x6C, 0x65, 0x6E, 0x74, 0x20, 0x74, 0x6F, 0x20, 0x60, 0x67, 0x74, - 0x78, 0x6E, 0x20, 0x5F, 0x69, 0x5F, 0x20, 0x66, 0x69, 0x65, 0x6C, - 0x64, 0x60, 0x2E, 0x20, 0x67, 0x74, 0x78, 0x6E, 0x73, 0x20, 0x65, - 0x78, 0x69, 0x73, 0x74, 0x73, 0x20, 0x73, 0x6F, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x5F, 0x69, 0x5F, 0x20, 0x63, 0x61, 0x6E, 0x20, - 0x62, 0x65, 0x20, 0x63, 0x61, 0x6C, 0x63, 0x75, 0x6C, 0x61, 0x74, - 0x65, 0x64, 0x2C, 0x20, 0x6F, 0x66, 0x74, 0x65, 0x6E, 0x20, 0x62, - 0x61, 0x73, 0x65, 0x64, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, 0x6F, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, - 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x2E, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, - 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, - 0x69, 0x6E, 0x74, 0x38, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, - 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, - 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, - 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, - 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, - 0x64, 0x65, 0x22, 0x3A, 0x35, 0x37, 0x2C, 0x22, 0x4E, 0x61, 0x6D, - 0x65, 0x22, 0x3A, 0x22, 0x67, 0x74, 0x78, 0x6E, 0x73, 0x61, 0x22, - 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, - 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, - 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x33, 0x2C, - 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, - 0x20, 0x49, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, - 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x46, 0x20, 0x66, - 0x72, 0x6F, 0x6D, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x74, 0x68, - 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, - 0x6E, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x67, 0x72, 0x6F, 0x75, 0x70, - 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, - 0x6E, 0x74, 0x38, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, - 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, 0x20, 0x7B, 0x75, 0x69, 0x6E, - 0x74, 0x38, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, - 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, - 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, - 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, - 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x36, 0x34, 0x2C, - 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x6E, 0x7A, - 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, - 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x44, - 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, - 0x20, 0x74, 0x6F, 0x20, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x20, - 0x69, 0x66, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x58, 0x20, - 0x69, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x7A, 0x65, 0x72, 0x6F, - 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, - 0x22, 0x3A, 0x22, 0x54, 0x68, 0x65, 0x20, 0x60, 0x62, 0x6E, 0x7A, - 0x60, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, - 0x6F, 0x6E, 0x20, 0x6F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x20, 0x30, - 0x78, 0x34, 0x30, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6F, 0x6C, 0x6C, - 0x6F, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x77, 0x6F, - 0x20, 0x69, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x20, - 0x64, 0x61, 0x74, 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, - 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x6C, - 0x6F, 0x77, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x73, 0x65, 0x63, - 0x6F, 0x6E, 0x64, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, - 0x6F, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x66, 0x6F, 0x72, - 0x6D, 0x20, 0x61, 0x20, 0x31, 0x36, 0x20, 0x62, 0x69, 0x74, 0x20, - 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x6D, 0x61, 0x79, 0x20, - 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, 0x74, 0x6F, 0x2E, 0x20, - 0x46, 0x6F, 0x72, 0x20, 0x61, 0x20, 0x62, 0x6E, 0x7A, 0x20, 0x69, - 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, - 0x61, 0x74, 0x20, 0x60, 0x70, 0x63, 0x60, 0x2C, 0x20, 0x69, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6C, 0x61, 0x73, 0x74, 0x20, 0x65, - 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x6F, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x20, 0x69, 0x73, - 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x20, 0x74, - 0x68, 0x65, 0x6E, 0x20, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, - 0x74, 0x6F, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x69, 0x6F, 0x6E, 0x20, 0x61, 0x74, 0x20, 0x60, 0x70, 0x63, 0x20, - 0x2B, 0x20, 0x33, 0x20, 0x2B, 0x20, 0x4E, 0x60, 0x2C, 0x20, 0x65, - 0x6C, 0x73, 0x65, 0x20, 0x70, 0x72, 0x6F, 0x63, 0x65, 0x65, 0x64, - 0x20, 0x74, 0x6F, 0x20, 0x6E, 0x65, 0x78, 0x74, 0x20, 0x69, 0x6E, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x61, - 0x74, 0x20, 0x60, 0x70, 0x63, 0x20, 0x2B, 0x20, 0x33, 0x60, 0x2E, - 0x20, 0x42, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x73, 0x20, 0x6D, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x77, 0x65, 0x6C, 0x6C, 0x20, 0x61, 0x6C, 0x69, 0x67, - 0x6E, 0x65, 0x64, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x20, 0x28, 0x65, 0x2E, 0x67, - 0x2E, 0x20, 0x42, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x69, 0x6E, 0x67, - 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, - 0x6F, 0x6E, 0x64, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x6F, 0x66, - 0x20, 0x61, 0x20, 0x32, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x6F, - 0x70, 0x20, 0x77, 0x69, 0x6C, 0x6C, 0x20, 0x62, 0x65, 0x20, 0x72, - 0x65, 0x6A, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2E, 0x29, 0x20, 0x42, - 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, 0x6F, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6E, 0x74, 0x6C, 0x79, 0x20, 0x6C, 0x69, 0x6D, 0x69, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x66, 0x6F, 0x72, 0x77, 0x61, - 0x72, 0x64, 0x20, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x65, 0x73, - 0x20, 0x6F, 0x6E, 0x6C, 0x79, 0x2C, 0x20, 0x30, 0x2D, 0x30, 0x78, - 0x37, 0x66, 0x66, 0x66, 0x2E, 0x20, 0x41, 0x20, 0x66, 0x75, 0x74, - 0x75, 0x72, 0x65, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6E, 0x73, 0x69, - 0x6F, 0x6E, 0x20, 0x6D, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6D, 0x61, - 0x6B, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, - 0x69, 0x67, 0x6E, 0x65, 0x64, 0x20, 0x31, 0x36, 0x20, 0x62, 0x69, - 0x74, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x61, - 0x6C, 0x6C, 0x6F, 0x77, 0x69, 0x6E, 0x67, 0x20, 0x66, 0x6F, 0x72, - 0x20, 0x62, 0x61, 0x63, 0x6B, 0x77, 0x61, 0x72, 0x64, 0x20, 0x62, - 0x72, 0x61, 0x6E, 0x63, 0x68, 0x65, 0x73, 0x20, 0x61, 0x6E, 0x64, - 0x20, 0x6C, 0x6F, 0x6F, 0x70, 0x69, 0x6E, 0x67, 0x2E, 0x5C, 0x6E, - 0x5C, 0x6E, 0x41, 0x74, 0x20, 0x4C, 0x6F, 0x67, 0x69, 0x63, 0x53, - 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x32, - 0x20, 0x69, 0x74, 0x20, 0x62, 0x65, 0x63, 0x61, 0x6D, 0x65, 0x20, - 0x61, 0x6C, 0x6C, 0x6F, 0x77, 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, - 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, 0x74, 0x6F, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x65, 0x6E, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, - 0x65, 0x78, 0x61, 0x63, 0x74, 0x6C, 0x79, 0x20, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6C, 0x61, 0x73, 0x74, - 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6F, - 0x6E, 0x3A, 0x20, 0x62, 0x6E, 0x7A, 0x20, 0x74, 0x6F, 0x20, 0x62, - 0x79, 0x74, 0x65, 0x20, 0x4E, 0x20, 0x28, 0x77, 0x69, 0x74, 0x68, - 0x20, 0x30, 0x2D, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x69, 0x6E, 0x67, - 0x29, 0x20, 0x77, 0x61, 0x73, 0x20, 0x69, 0x6C, 0x6C, 0x65, 0x67, - 0x61, 0x6C, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x61, 0x20, 0x54, 0x45, - 0x41, 0x4C, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x4E, 0x20, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, 0x65, 0x20, 0x4C, 0x6F, - 0x67, 0x69, 0x63, 0x53, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6F, 0x6E, 0x20, 0x32, 0x2C, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x69, - 0x73, 0x20, 0x6C, 0x65, 0x67, 0x61, 0x6C, 0x20, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x20, 0x69, 0x74, 0x2E, 0x20, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x63, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x20, 0x65, 0x6C, 0x69, - 0x6D, 0x69, 0x6E, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6E, 0x65, 0x65, 0x64, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x61, - 0x20, 0x6C, 0x61, 0x73, 0x74, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x6F, 0x66, 0x20, 0x6E, - 0x6F, 0x2D, 0x6F, 0x70, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x62, - 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6E, - 0x64, 0x2E, 0x20, 0x28, 0x42, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x69, - 0x6E, 0x67, 0x20, 0x62, 0x65, 0x79, 0x6F, 0x6E, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x65, 0x6E, 0x64, 0x2D, 0x2D, 0x69, 0x6E, 0x20, - 0x6F, 0x74, 0x68, 0x65, 0x72, 0x20, 0x77, 0x6F, 0x72, 0x64, 0x73, - 0x2C, 0x20, 0x74, 0x6F, 0x20, 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, - 0x20, 0x6C, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, - 0x6E, 0x20, 0x4E, 0x2D, 0x2D, 0x69, 0x73, 0x20, 0x73, 0x74, 0x69, - 0x6C, 0x6C, 0x20, 0x69, 0x6C, 0x6C, 0x65, 0x67, 0x61, 0x6C, 0x20, - 0x61, 0x6E, 0x64, 0x20, 0x77, 0x69, 0x6C, 0x6C, 0x20, 0x63, 0x61, - 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, - 0x67, 0x72, 0x61, 0x6D, 0x20, 0x74, 0x6F, 0x20, 0x66, 0x61, 0x69, - 0x6C, 0x2E, 0x29, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, - 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, - 0x7B, 0x30, 0x2E, 0x2E, 0x30, 0x78, 0x37, 0x66, 0x66, 0x66, 0x20, - 0x66, 0x6F, 0x72, 0x77, 0x61, 0x72, 0x64, 0x20, 0x62, 0x72, 0x61, - 0x6E, 0x63, 0x68, 0x20, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2C, - 0x20, 0x62, 0x69, 0x67, 0x20, 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, - 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, - 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, 0x6E, - 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, - 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x36, 0x35, 0x2C, 0x22, - 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x7A, 0x22, 0x2C, - 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, - 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, - 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x22, 0x3A, 0x22, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, 0x74, - 0x6F, 0x20, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x20, 0x69, 0x66, - 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x58, 0x20, 0x69, 0x73, - 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x53, 0x65, 0x65, - 0x20, 0x60, 0x62, 0x6E, 0x7A, 0x60, 0x20, 0x66, 0x6F, 0x72, 0x20, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6C, 0x73, 0x20, 0x6F, 0x6E, 0x20, - 0x68, 0x6F, 0x77, 0x20, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x65, - 0x73, 0x20, 0x77, 0x6F, 0x72, 0x6B, 0x2E, 0x20, 0x60, 0x62, 0x7A, - 0x60, 0x20, 0x69, 0x6E, 0x76, 0x65, 0x72, 0x74, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6F, 0x72, - 0x20, 0x6F, 0x66, 0x20, 0x60, 0x62, 0x6E, 0x7A, 0x60, 0x2E, 0x22, - 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, - 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x30, 0x2E, 0x2E, - 0x30, 0x78, 0x37, 0x66, 0x66, 0x66, 0x20, 0x66, 0x6F, 0x72, 0x77, - 0x61, 0x72, 0x64, 0x20, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, - 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2C, 0x20, 0x62, 0x69, 0x67, - 0x20, 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x7D, 0x22, 0x2C, 0x22, - 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, - 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, - 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, - 0x65, 0x22, 0x3A, 0x36, 0x36, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, - 0x22, 0x3A, 0x22, 0x62, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, - 0x33, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x62, 0x72, - 0x61, 0x6E, 0x63, 0x68, 0x20, 0x75, 0x6E, 0x63, 0x6F, 0x6E, 0x64, - 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x61, 0x6C, 0x6C, 0x79, 0x20, 0x74, - 0x6F, 0x20, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x22, 0x2C, 0x22, - 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, - 0x53, 0x65, 0x65, 0x20, 0x60, 0x62, 0x6E, 0x7A, 0x60, 0x20, 0x66, - 0x6F, 0x72, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6C, 0x73, 0x20, - 0x6F, 0x6E, 0x20, 0x68, 0x6F, 0x77, 0x20, 0x62, 0x72, 0x61, 0x6E, - 0x63, 0x68, 0x65, 0x73, 0x20, 0x77, 0x6F, 0x72, 0x6B, 0x2E, 0x20, - 0x60, 0x62, 0x60, 0x20, 0x61, 0x6C, 0x77, 0x61, 0x79, 0x73, 0x20, - 0x6A, 0x75, 0x6D, 0x70, 0x73, 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2E, 0x22, 0x2C, - 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, - 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x30, 0x2E, 0x2E, 0x30, - 0x78, 0x37, 0x66, 0x66, 0x66, 0x20, 0x66, 0x6F, 0x72, 0x77, 0x61, - 0x72, 0x64, 0x20, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, 0x6F, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x2C, 0x20, 0x62, 0x69, 0x67, 0x20, - 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x7D, 0x22, 0x2C, 0x22, 0x47, - 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, - 0x6F, 0x77, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, - 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, - 0x22, 0x3A, 0x36, 0x37, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, - 0x3A, 0x22, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x22, 0x2C, 0x22, - 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, - 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, - 0x3A, 0x22, 0x75, 0x73, 0x65, 0x20, 0x6C, 0x61, 0x73, 0x74, 0x20, - 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x6F, 0x6E, 0x20, 0x73, 0x74, - 0x61, 0x63, 0x6B, 0x20, 0x61, 0x73, 0x20, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3B, 0x20, - 0x65, 0x6E, 0x64, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, - 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, 0x43, - 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, - 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x36, 0x38, - 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x73, - 0x73, 0x65, 0x72, 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, - 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x69, 0x6D, - 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6C, 0x79, 0x20, 0x66, - 0x61, 0x69, 0x6C, 0x20, 0x75, 0x6E, 0x6C, 0x65, 0x73, 0x73, 0x20, - 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x58, 0x20, 0x69, 0x73, 0x20, - 0x61, 0x20, 0x6E, 0x6F, 0x6E, 0x2D, 0x7A, 0x65, 0x72, 0x6F, 0x20, - 0x6E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x47, 0x72, - 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, - 0x77, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, - 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, - 0x3A, 0x37, 0x32, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, - 0x22, 0x70, 0x6F, 0x70, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, - 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x64, 0x69, - 0x73, 0x63, 0x61, 0x72, 0x64, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, - 0x20, 0x58, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x73, 0x74, 0x61, - 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, - 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, - 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x37, 0x33, 0x2C, - 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x64, 0x75, 0x70, - 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, - 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, - 0x3A, 0x22, 0x2E, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x64, 0x75, - 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x6C, 0x61, 0x73, - 0x74, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x6F, 0x6E, 0x20, - 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, - 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, - 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, - 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, - 0x37, 0x34, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, - 0x64, 0x75, 0x70, 0x32, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, - 0x22, 0x3A, 0x22, 0x2E, 0x2E, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, - 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x2E, 0x2E, 0x2E, - 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, - 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x64, 0x75, 0x70, 0x6C, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x20, 0x74, 0x77, 0x6F, 0x20, 0x6C, 0x61, 0x73, - 0x74, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, 0x6F, 0x6E, - 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x3A, 0x20, 0x41, 0x2C, 0x20, - 0x42, 0x20, 0x2D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x41, - 0x2C, 0x20, 0x42, 0x2C, 0x20, 0x41, 0x2C, 0x20, 0x42, 0x22, 0x2C, - 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, - 0x46, 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, - 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, - 0x64, 0x65, 0x22, 0x3A, 0x37, 0x35, 0x2C, 0x22, 0x4E, 0x61, 0x6D, - 0x65, 0x22, 0x3A, 0x22, 0x64, 0x69, 0x67, 0x22, 0x2C, 0x22, 0x41, - 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x2E, - 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x44, - 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x4E, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6C, 0x75, - 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x74, 0x6F, 0x70, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x73, 0x74, 0x61, 0x63, 0x6B, 0x2E, 0x20, 0x64, 0x69, 0x67, 0x20, - 0x30, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, - 0x6C, 0x65, 0x6E, 0x74, 0x20, 0x74, 0x6F, 0x20, 0x64, 0x75, 0x70, - 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, - 0x6E, 0x74, 0x38, 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, 0x7D, 0x22, - 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, - 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, - 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, - 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x37, 0x36, 0x2C, 0x22, 0x4E, 0x61, - 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x73, 0x77, 0x61, 0x70, 0x22, 0x2C, - 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x2E, 0x22, - 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, - 0x22, 0x2E, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, - 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, - 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x73, 0x77, 0x61, - 0x70, 0x73, 0x20, 0x74, 0x77, 0x6F, 0x20, 0x6C, 0x61, 0x73, 0x74, - 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, 0x6F, 0x6E, 0x20, - 0x73, 0x74, 0x61, 0x63, 0x6B, 0x3A, 0x20, 0x41, 0x2C, 0x20, 0x42, - 0x20, 0x2D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x42, 0x2C, - 0x20, 0x41, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, - 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, - 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x37, 0x37, 0x2C, - 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x73, 0x65, 0x6C, - 0x65, 0x63, 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, - 0x3A, 0x22, 0x2E, 0x2E, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, - 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, - 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, - 0x3A, 0x22, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6F, - 0x6E, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x77, 0x6F, 0x20, 0x76, - 0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, - 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x6F, 0x70, 0x2D, 0x6F, 0x66, 0x2D, - 0x73, 0x74, 0x61, 0x63, 0x6B, 0x3A, 0x20, 0x41, 0x2C, 0x20, 0x42, - 0x2C, 0x20, 0x43, 0x20, 0x2D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, - 0x20, 0x28, 0x69, 0x66, 0x20, 0x43, 0x20, 0x21, 0x3D, 0x20, 0x30, - 0x20, 0x74, 0x68, 0x65, 0x6E, 0x20, 0x42, 0x20, 0x65, 0x6C, 0x73, - 0x65, 0x20, 0x41, 0x29, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, - 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, - 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, - 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x38, - 0x30, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x63, - 0x6F, 0x6E, 0x63, 0x61, 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, - 0x73, 0x22, 0x3A, 0x22, 0x42, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, - 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, - 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, 0x20, 0x74, 0x77, 0x6F, 0x20, - 0x62, 0x79, 0x74, 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, 0x79, 0x73, - 0x20, 0x41, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x42, 0x20, 0x61, 0x6E, - 0x64, 0x20, 0x6A, 0x6F, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x6D, - 0x2C, 0x20, 0x70, 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x22, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x60, 0x63, - 0x6F, 0x6E, 0x63, 0x61, 0x74, 0x60, 0x20, 0x70, 0x61, 0x6E, 0x69, - 0x63, 0x73, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6C, 0x74, 0x20, 0x77, 0x6F, 0x75, 0x6C, 0x64, - 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6E, 0x20, 0x34, 0x30, 0x39, 0x36, 0x20, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, - 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, - 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, - 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x38, - 0x31, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x73, - 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x22, 0x2C, 0x22, - 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, - 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x44, - 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, 0x20, 0x61, 0x20, - 0x62, 0x79, 0x74, 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, - 0x41, 0x2E, 0x20, 0x46, 0x6F, 0x72, 0x20, 0x69, 0x6D, 0x6D, 0x65, - 0x64, 0x69, 0x61, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, - 0x73, 0x20, 0x69, 0x6E, 0x20, 0x30, 0x2E, 0x2E, 0x32, 0x35, 0x35, - 0x20, 0x53, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x45, 0x3A, 0x20, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x61, 0x20, 0x72, 0x61, - 0x6E, 0x67, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x41, 0x20, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x61, 0x74, 0x20, 0x53, - 0x20, 0x75, 0x70, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x75, 0x74, 0x20, - 0x6E, 0x6F, 0x74, 0x20, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x69, - 0x6E, 0x67, 0x20, 0x45, 0x2C, 0x20, 0x70, 0x75, 0x73, 0x68, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, - 0x6E, 0x67, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x2E, 0x20, - 0x49, 0x66, 0x20, 0x45, 0x20, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x63, - 0x20, 0x53, 0x2C, 0x20, 0x6F, 0x72, 0x20, 0x65, 0x69, 0x74, 0x68, - 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6C, 0x61, 0x72, 0x67, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x61, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6C, 0x65, 0x6E, 0x67, 0x74, - 0x68, 0x2C, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, 0x67, - 0x72, 0x61, 0x6D, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x73, 0x22, 0x2C, - 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, - 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, - 0x38, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x70, 0x6F, 0x73, - 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x7D, 0x20, 0x7B, 0x75, 0x69, 0x6E, - 0x74, 0x38, 0x20, 0x65, 0x6E, 0x64, 0x20, 0x70, 0x6F, 0x73, 0x69, - 0x74, 0x69, 0x6F, 0x6E, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, - 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, - 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, - 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x38, 0x32, - 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x73, 0x75, - 0x62, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x33, 0x22, 0x2C, 0x22, - 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x55, 0x55, 0x22, - 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, - 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, 0x20, - 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x20, 0x41, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x74, 0x77, 0x6F, - 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x73, 0x20, 0x42, - 0x20, 0x61, 0x6E, 0x64, 0x20, 0x43, 0x2E, 0x20, 0x45, 0x78, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x20, 0x61, 0x20, 0x72, 0x61, 0x6E, 0x67, - 0x65, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, - 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x41, 0x20, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x69, 0x6E, 0x67, 0x20, 0x61, 0x74, 0x20, 0x42, 0x20, 0x75, - 0x70, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6E, 0x6F, - 0x74, 0x20, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x69, 0x6E, 0x67, - 0x20, 0x43, 0x2C, 0x20, 0x70, 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x2E, 0x20, 0x49, 0x66, - 0x20, 0x43, 0x20, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x63, 0x20, 0x42, - 0x2C, 0x20, 0x6F, 0x72, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x69, 0x73, 0x20, 0x6C, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x61, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, - 0x72, 0x61, 0x79, 0x20, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x2C, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, - 0x6D, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x73, 0x22, 0x2C, 0x22, 0x47, - 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, - 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, - 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, - 0x38, 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, - 0x67, 0x65, 0x74, 0x62, 0x69, 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, - 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x55, 0x22, 0x2C, 0x22, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, - 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, 0x20, 0x61, 0x20, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x41, 0x20, 0x28, 0x69, 0x6E, - 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x6F, 0x72, 0x20, 0x62, 0x79, - 0x74, 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x2C, 0x20, - 0x61, 0x6E, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, 0x42, - 0x2E, 0x20, 0x50, 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x42, 0x74, 0x68, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6F, 0x66, 0x20, - 0x41, 0x2E, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, - 0x72, 0x61, 0x22, 0x3A, 0x22, 0x73, 0x65, 0x65, 0x20, 0x65, 0x78, - 0x70, 0x6C, 0x61, 0x6E, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x6F, - 0x66, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6F, 0x72, 0x64, 0x65, 0x72, - 0x69, 0x6E, 0x67, 0x20, 0x69, 0x6E, 0x20, 0x73, 0x65, 0x74, 0x62, - 0x69, 0x74, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, - 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, - 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x38, 0x34, 0x2C, 0x22, 0x4E, - 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x73, 0x65, 0x74, 0x62, 0x69, - 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, - 0x2E, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, - 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, - 0x70, 0x6F, 0x70, 0x20, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x20, 0x41, 0x2C, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, - 0x42, 0x2C, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x62, 0x69, 0x74, 0x20, - 0x43, 0x2E, 0x20, 0x53, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x42, 0x74, 0x68, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6F, 0x66, 0x20, - 0x41, 0x20, 0x74, 0x6F, 0x20, 0x43, 0x2C, 0x20, 0x61, 0x6E, 0x64, - 0x20, 0x70, 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6C, 0x74, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x62, 0x69, 0x74, - 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x69, 0x6E, 0x67, 0x20, 0x62, - 0x65, 0x67, 0x69, 0x6E, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x6C, 0x6F, 0x77, 0x2D, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x20, 0x62, - 0x69, 0x74, 0x73, 0x20, 0x69, 0x6E, 0x20, 0x69, 0x6E, 0x74, 0x65, - 0x67, 0x65, 0x72, 0x73, 0x2E, 0x20, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6E, 0x67, 0x20, 0x62, 0x69, 0x74, 0x20, 0x34, 0x20, 0x74, 0x6F, - 0x20, 0x31, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, - 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x30, 0x20, 0x79, 0x69, - 0x65, 0x6C, 0x64, 0x73, 0x20, 0x31, 0x36, 0x20, 0x28, 0x60, 0x69, - 0x6E, 0x74, 0x20, 0x30, 0x78, 0x30, 0x30, 0x31, 0x30, 0x60, 0x2C, - 0x20, 0x6F, 0x72, 0x20, 0x32, 0x5E, 0x34, 0x29, 0x2E, 0x20, 0x49, - 0x6E, 0x64, 0x65, 0x78, 0x69, 0x6E, 0x67, 0x20, 0x62, 0x65, 0x67, - 0x69, 0x6E, 0x73, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x20, 0x6F, 0x66, 0x20, 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, 0x2D, - 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x61, 0x73, 0x20, - 0x73, 0x65, 0x65, 0x6E, 0x20, 0x69, 0x6E, 0x20, 0x67, 0x65, 0x74, - 0x62, 0x79, 0x74, 0x65, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x73, 0x75, - 0x62, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x29, 0x2E, 0x20, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x62, 0x69, 0x74, 0x73, - 0x20, 0x30, 0x20, 0x74, 0x68, 0x72, 0x6F, 0x75, 0x67, 0x68, 0x20, - 0x31, 0x31, 0x20, 0x74, 0x6F, 0x20, 0x31, 0x20, 0x69, 0x6E, 0x20, - 0x61, 0x20, 0x34, 0x20, 0x62, 0x79, 0x74, 0x65, 0x2D, 0x61, 0x72, - 0x72, 0x61, 0x79, 0x20, 0x6F, 0x66, 0x20, 0x30, 0x73, 0x20, 0x79, - 0x69, 0x65, 0x6C, 0x64, 0x73, 0x20, 0x60, 0x62, 0x79, 0x74, 0x65, - 0x20, 0x30, 0x78, 0x66, 0x66, 0x66, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x60, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, - 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, - 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, - 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x38, 0x35, 0x2C, 0x22, 0x4E, 0x61, - 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x65, 0x74, 0x62, 0x79, 0x74, - 0x65, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, - 0x42, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, - 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, - 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, - 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, - 0x6F, 0x70, 0x20, 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, 0x2D, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x20, 0x41, 0x20, 0x61, 0x6E, 0x64, 0x20, - 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x42, 0x2E, 0x20, - 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x42, 0x74, 0x68, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x6F, - 0x66, 0x20, 0x41, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x70, 0x75, 0x73, - 0x68, 0x20, 0x69, 0x74, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6E, 0x20, - 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x47, - 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, - 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, - 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, - 0x38, 0x36, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, - 0x73, 0x65, 0x74, 0x62, 0x79, 0x74, 0x65, 0x22, 0x2C, 0x22, 0x41, - 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x55, 0x55, 0x22, 0x2C, - 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, - 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, - 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, - 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, 0x20, 0x61, - 0x20, 0x62, 0x79, 0x74, 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x20, 0x41, 0x2C, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, - 0x20, 0x42, 0x2C, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x73, 0x6D, 0x61, - 0x6C, 0x6C, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, - 0x43, 0x20, 0x28, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6E, 0x20, - 0x30, 0x2E, 0x2E, 0x32, 0x35, 0x35, 0x29, 0x2E, 0x20, 0x53, 0x65, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x74, 0x68, 0x20, 0x62, - 0x79, 0x74, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x41, 0x20, 0x74, 0x6F, - 0x20, 0x43, 0x2C, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x70, 0x75, 0x73, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6C, - 0x74, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, - 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, - 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, - 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x39, 0x36, 0x2C, 0x22, 0x4E, 0x61, - 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x61, 0x6C, 0x61, 0x6E, 0x63, - 0x65, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, - 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, - 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x67, 0x65, - 0x74, 0x20, 0x62, 0x61, 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x20, 0x66, - 0x6F, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, - 0x6E, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x20, 0x54, 0x78, 0x6E, 0x2E, 0x41, 0x63, - 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x69, - 0x6E, 0x20, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x61, 0x6C, 0x67, 0x6F, - 0x73, 0x2E, 0x20, 0x41, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, - 0x6E, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x69, - 0x6E, 0x64, 0x65, 0x78, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x20, 0x66, - 0x69, 0x65, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x43, 0x61, 0x6C, 0x6C, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x7A, 0x65, 0x72, - 0x6F, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, 0x6D, 0x65, 0x61, - 0x6E, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x6E, 0x64, - 0x65, 0x72, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, 0x62, 0x61, 0x6C, - 0x61, 0x6E, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6F, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x73, 0x20, 0x6F, 0x66, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6F, - 0x75, 0x73, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6F, 0x6E, 0x73, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x2C, 0x20, 0x61, 0x6E, 0x64, - 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x66, 0x65, 0x65, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x74, 0x72, - 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x69, - 0x73, 0x20, 0x64, 0x65, 0x64, 0x75, 0x63, 0x74, 0x65, 0x64, 0x2E, - 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, - 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, - 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x39, 0x37, 0x2C, 0x22, 0x4E, - 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x70, 0x70, 0x5F, 0x6F, - 0x70, 0x74, 0x65, 0x64, 0x5F, 0x69, 0x6E, 0x22, 0x2C, 0x22, 0x41, - 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, - 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, - 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x63, 0x68, 0x65, 0x63, 0x6B, 0x20, - 0x69, 0x66, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x54, 0x78, 0x6E, 0x2E, 0x41, 0x63, 0x63, 0x6F, 0x75, - 0x6E, 0x74, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x6F, 0x70, 0x74, 0x65, - 0x64, 0x20, 0x69, 0x6E, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6F, 0x6E, 0x20, 0x42, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, - 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x7D, 0x22, - 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, - 0x3A, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x61, - 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, 0x65, - 0x78, 0x2C, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x64, 0x20, 0x28, 0x74, 0x6F, 0x70, - 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, - 0x63, 0x6B, 0x20, 0x6F, 0x6E, 0x20, 0x6F, 0x70, 0x63, 0x6F, 0x64, - 0x65, 0x20, 0x65, 0x6E, 0x74, 0x72, 0x79, 0x29, 0x2E, 0x20, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x3A, 0x20, 0x31, 0x20, 0x69, 0x66, - 0x20, 0x6F, 0x70, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6E, 0x20, 0x61, - 0x6E, 0x64, 0x20, 0x30, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x77, - 0x69, 0x73, 0x65, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, - 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, - 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x39, - 0x38, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, - 0x70, 0x70, 0x5F, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x5F, 0x67, 0x65, - 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, - 0x55, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, - 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, - 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, - 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x72, - 0x65, 0x61, 0x64, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x61, 0x63, - 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, - 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x54, 0x78, 0x6E, - 0x2E, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5B, 0x41, - 0x5D, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x6C, 0x6F, 0x63, 0x61, - 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x6F, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, - 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x42, 0x20, 0x3D, 0x5C, 0x75, - 0x30, 0x30, 0x33, 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, - 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, - 0x3A, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x61, - 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, 0x65, - 0x78, 0x2C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x6B, 0x65, - 0x79, 0x2E, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x3A, 0x20, - 0x76, 0x61, 0x6C, 0x75, 0x65, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x7A, 0x65, - 0x72, 0x6F, 0x20, 0x28, 0x6F, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x20, 0x75, 0x69, 0x6E, 0x74, 0x36, 0x34, 0x29, 0x20, 0x69, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x64, 0x6F, - 0x65, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, - 0x74, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, - 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x39, 0x39, 0x2C, - 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x70, 0x70, - 0x5F, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x5F, 0x67, 0x65, 0x74, 0x5F, - 0x65, 0x78, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, - 0x22, 0x55, 0x55, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x55, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, - 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, - 0x3A, 0x22, 0x72, 0x65, 0x61, 0x64, 0x20, 0x66, 0x72, 0x6F, 0x6D, - 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, - 0x54, 0x78, 0x6E, 0x2E, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, - 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x6C, - 0x6F, 0x63, 0x61, 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, - 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6C, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x42, 0x20, 0x6B, - 0x65, 0x79, 0x20, 0x43, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, - 0x65, 0x20, 0x5B, 0x2A, 0x2E, 0x2E, 0x2E, 0x20, 0x73, 0x74, 0x61, - 0x63, 0x6B, 0x2A, 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x2C, - 0x20, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x5D, 0x22, 0x2C, 0x22, - 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, - 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x61, 0x63, 0x63, - 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x2C, - 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x20, 0x69, 0x64, 0x2C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x20, 0x6B, 0x65, 0x79, 0x2E, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6E, 0x3A, 0x20, 0x64, 0x69, 0x64, 0x5F, 0x65, 0x78, 0x69, 0x73, - 0x74, 0x20, 0x66, 0x6C, 0x61, 0x67, 0x20, 0x28, 0x74, 0x6F, 0x70, - 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, - 0x63, 0x6B, 0x2C, 0x20, 0x31, 0x20, 0x69, 0x66, 0x20, 0x65, 0x78, - 0x69, 0x73, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x30, 0x20, 0x6F, - 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x29, 0x2C, 0x20, - 0x76, 0x61, 0x6C, 0x75, 0x65, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x7A, 0x65, - 0x72, 0x6F, 0x20, 0x28, 0x6F, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x20, 0x75, 0x69, 0x6E, 0x74, 0x36, 0x34, 0x29, 0x20, 0x69, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x64, 0x6F, - 0x65, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, - 0x74, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, - 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x30, 0x30, - 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x70, - 0x70, 0x5F, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x5F, 0x67, 0x65, - 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, - 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, - 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x72, 0x65, - 0x61, 0x64, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x41, 0x20, 0x66, 0x72, - 0x6F, 0x6D, 0x20, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x20, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x61, 0x20, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6C, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x3D, 0x5C, 0x75, - 0x30, 0x30, 0x33, 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, - 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, - 0x3A, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x2E, 0x20, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x3A, 0x20, 0x76, 0x61, 0x6C, 0x75, - 0x65, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, - 0x65, 0x20, 0x69, 0x73, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x20, 0x28, - 0x6F, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x75, 0x69, 0x6E, - 0x74, 0x36, 0x34, 0x29, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6B, 0x65, 0x79, 0x20, 0x64, 0x6F, 0x65, 0x73, 0x20, 0x6E, - 0x6F, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2E, 0x22, 0x2C, - 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, - 0x64, 0x65, 0x22, 0x3A, 0x31, 0x30, 0x31, 0x2C, 0x22, 0x4E, 0x61, - 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x70, 0x70, 0x5F, 0x67, 0x6C, - 0x6F, 0x62, 0x61, 0x6C, 0x5F, 0x67, 0x65, 0x74, 0x5F, 0x65, 0x78, - 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, - 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, - 0x22, 0x3A, 0x22, 0x2E, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, - 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, - 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x72, - 0x65, 0x61, 0x64, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x61, 0x70, - 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x54, - 0x78, 0x6E, 0x2E, 0x46, 0x6F, 0x72, 0x65, 0x69, 0x67, 0x6E, 0x41, - 0x70, 0x70, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x67, 0x6C, 0x6F, 0x62, - 0x61, 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x6B, 0x65, - 0x79, 0x20, 0x42, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, - 0x20, 0x5B, 0x2A, 0x2E, 0x2E, 0x2E, 0x20, 0x73, 0x74, 0x61, 0x63, - 0x6B, 0x2A, 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x2C, 0x20, - 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x5D, 0x2E, 0x20, 0x41, 0x20, - 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6E, 0x20, 0x61, 0x63, 0x63, - 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, - 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x46, 0x6F, 0x72, 0x65, - 0x69, 0x67, 0x6E, 0x41, 0x70, 0x70, 0x73, 0x20, 0x66, 0x69, 0x65, - 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, - 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x43, - 0x61, 0x6C, 0x6C, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x20, - 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, 0x6D, 0x65, 0x61, 0x6E, 0x73, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x70, 0x70, 0x22, 0x2C, - 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, - 0x22, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x61, 0x70, - 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x69, - 0x6E, 0x64, 0x65, 0x78, 0x2C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x20, 0x6B, 0x65, 0x79, 0x2E, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6E, 0x3A, 0x20, 0x64, 0x69, 0x64, 0x5F, 0x65, 0x78, 0x69, 0x73, - 0x74, 0x20, 0x66, 0x6C, 0x61, 0x67, 0x20, 0x28, 0x74, 0x6F, 0x70, - 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, - 0x63, 0x6B, 0x2C, 0x20, 0x31, 0x20, 0x69, 0x66, 0x20, 0x65, 0x78, - 0x69, 0x73, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x30, 0x20, 0x6F, - 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x29, 0x2C, 0x20, - 0x76, 0x61, 0x6C, 0x75, 0x65, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x7A, 0x65, - 0x72, 0x6F, 0x20, 0x28, 0x6F, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x20, 0x75, 0x69, 0x6E, 0x74, 0x36, 0x34, 0x29, 0x20, 0x69, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x64, 0x6F, - 0x65, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, - 0x74, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, - 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x30, 0x32, - 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x70, - 0x70, 0x5F, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x5F, 0x70, 0x75, 0x74, - 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, - 0x42, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x20, 0x74, 0x6F, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, - 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x54, 0x78, 0x6E, 0x2E, 0x41, 0x63, 0x63, - 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x74, 0x6F, - 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x20, 0x6F, 0x66, 0x20, 0x61, 0x20, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6E, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x42, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, - 0x43, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, - 0x61, 0x22, 0x3A, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x3A, - 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x69, 0x6E, - 0x64, 0x65, 0x78, 0x2C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, - 0x6B, 0x65, 0x79, 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x2E, - 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, - 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, - 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x30, 0x33, 0x2C, 0x22, - 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x70, 0x70, 0x5F, - 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x5F, 0x70, 0x75, 0x74, 0x22, - 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x2E, - 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, - 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, - 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, - 0x6B, 0x65, 0x79, 0x20, 0x41, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x76, - 0x61, 0x6C, 0x75, 0x65, 0x20, 0x42, 0x20, 0x74, 0x6F, 0x20, 0x67, - 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6E, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, - 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, - 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, - 0x31, 0x30, 0x34, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, - 0x22, 0x61, 0x70, 0x70, 0x5F, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x5F, - 0x64, 0x65, 0x6C, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, - 0x3A, 0x22, 0x55, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, - 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, - 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x64, 0x65, - 0x6C, 0x65, 0x74, 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x61, - 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x54, 0x78, - 0x6E, 0x2E, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5B, - 0x41, 0x5D, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x20, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x42, 0x20, 0x6F, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6E, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, - 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6D, - 0x73, 0x3A, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, - 0x69, 0x6E, 0x64, 0x65, 0x78, 0x2C, 0x20, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x20, 0x6B, 0x65, 0x79, 0x2E, 0x5C, 0x6E, 0x5C, 0x6E, 0x44, - 0x65, 0x6C, 0x65, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x61, 0x20, 0x6B, - 0x65, 0x79, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, - 0x20, 0x61, 0x6C, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x61, 0x62, - 0x73, 0x65, 0x6E, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x6E, 0x6F, - 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x6F, 0x6E, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x20, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2E, 0x20, 0x28, 0x49, 0x6E, 0x20, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6C, 0x61, 0x72, 0x2C, - 0x20, 0x69, 0x74, 0x20, 0x64, 0x6F, 0x65, 0x73, 0x20, 0x5F, 0x6E, - 0x6F, 0x74, 0x5F, 0x20, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, - 0x74, 0x6F, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x2E, 0x29, 0x22, 0x2C, - 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, - 0x64, 0x65, 0x22, 0x3A, 0x31, 0x30, 0x35, 0x2C, 0x22, 0x4E, 0x61, - 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x70, 0x70, 0x5F, 0x67, 0x6C, - 0x6F, 0x62, 0x61, 0x6C, 0x5F, 0x64, 0x65, 0x6C, 0x22, 0x2C, 0x22, - 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, - 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, - 0x3A, 0x22, 0x64, 0x65, 0x6C, 0x65, 0x74, 0x65, 0x20, 0x6B, 0x65, - 0x79, 0x20, 0x41, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x61, 0x20, - 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x44, 0x6F, - 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x70, 0x61, - 0x72, 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x20, 0x6B, 0x65, 0x79, 0x2E, 0x5C, 0x6E, 0x5C, 0x6E, 0x44, 0x65, - 0x6C, 0x65, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x61, 0x20, 0x6B, 0x65, - 0x79, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, - 0x61, 0x6C, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x61, 0x62, 0x73, - 0x65, 0x6E, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x6E, 0x6F, 0x20, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x6F, 0x6E, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6F, 0x6E, 0x20, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x20, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2E, 0x20, 0x28, 0x49, 0x6E, 0x20, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6C, 0x61, 0x72, 0x2C, - 0x20, 0x69, 0x74, 0x20, 0x64, 0x6F, 0x65, 0x73, 0x20, 0x5F, 0x6E, - 0x6F, 0x74, 0x5F, 0x20, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, - 0x74, 0x6F, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x2E, 0x29, 0x22, 0x2C, - 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, - 0x64, 0x65, 0x22, 0x3A, 0x31, 0x31, 0x32, 0x2C, 0x22, 0x4E, 0x61, - 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5F, - 0x68, 0x6F, 0x6C, 0x64, 0x69, 0x6E, 0x67, 0x5F, 0x67, 0x65, 0x74, - 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, - 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, - 0x22, 0x3A, 0x22, 0x2E, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, - 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, - 0x3A, 0x32, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, 0x6D, - 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, - 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x46, 0x72, 0x6F, 0x7A, 0x65, 0x6E, 0x22, 0x5D, 0x2C, - 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, 0x6D, 0x54, 0x79, 0x70, - 0x65, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x44, - 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x72, 0x65, 0x61, 0x64, 0x20, 0x66, - 0x72, 0x6F, 0x6D, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, - 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x54, 0x78, 0x6E, 0x2E, 0x41, 0x63, 0x63, 0x6F, - 0x75, 0x6E, 0x74, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x61, 0x6E, 0x64, - 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x42, 0x20, 0x68, 0x6F, - 0x6C, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, - 0x20, 0x58, 0x20, 0x28, 0x69, 0x6D, 0x6D, 0x20, 0x61, 0x72, 0x67, - 0x29, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, - 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x20, 0x28, 0x74, 0x6F, 0x70, - 0x29, 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x7D, 0x22, 0x2C, - 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, - 0x22, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x61, 0x63, - 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, - 0x2C, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x69, 0x64, 0x2E, - 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x3A, 0x20, 0x64, 0x69, - 0x64, 0x5F, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x66, 0x6C, 0x61, - 0x67, 0x20, 0x28, 0x31, 0x20, 0x69, 0x66, 0x20, 0x65, 0x78, 0x69, - 0x73, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x30, 0x20, 0x6F, 0x74, - 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x29, 0x2C, 0x20, 0x76, - 0x61, 0x6C, 0x75, 0x65, 0x2E, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, - 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, - 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x20, 0x68, 0x6F, 0x6C, 0x64, 0x69, 0x6E, 0x67, - 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, - 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, - 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x31, 0x33, - 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x5F, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x5F, - 0x67, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, - 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x55, 0x22, 0x2C, 0x22, 0x43, - 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, - 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, - 0x75, 0x6D, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x54, 0x6F, 0x74, 0x61, 0x6C, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x6D, 0x61, 0x6C, 0x73, 0x22, - 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6C, 0x74, 0x46, 0x72, 0x6F, 0x7A, 0x65, 0x6E, 0x22, 0x2C, - 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x55, 0x6E, 0x69, 0x74, 0x4E, - 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x55, 0x52, 0x4C, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x4D, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x61, - 0x73, 0x68, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x4D, - 0x61, 0x6E, 0x61, 0x67, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, - 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x46, 0x72, 0x65, 0x65, - 0x7A, 0x65, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x43, - 0x6C, 0x61, 0x77, 0x62, 0x61, 0x63, 0x6B, 0x22, 0x5D, 0x2C, 0x22, - 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, 0x6D, 0x54, 0x79, 0x70, 0x65, - 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x55, 0x42, 0x42, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x42, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, - 0x3A, 0x22, 0x72, 0x65, 0x61, 0x64, 0x20, 0x66, 0x72, 0x6F, 0x6D, - 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x54, 0x78, 0x6E, 0x2E, - 0x46, 0x6F, 0x72, 0x65, 0x69, 0x67, 0x6E, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6D, - 0x73, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x58, 0x20, 0x28, - 0x69, 0x6D, 0x6D, 0x20, 0x61, 0x72, 0x67, 0x29, 0x20, 0x3D, 0x5C, - 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, - 0x20, 0x31, 0x20, 0x28, 0x74, 0x6F, 0x70, 0x29, 0x2C, 0x20, 0x76, - 0x61, 0x6C, 0x75, 0x65, 0x7D, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, - 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x70, 0x61, 0x72, - 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x74, 0x78, 0x6E, 0x2E, 0x46, 0x6F, - 0x72, 0x65, 0x69, 0x67, 0x6E, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, - 0x20, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2E, 0x20, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6E, 0x3A, 0x20, 0x64, 0x69, 0x64, 0x5F, 0x65, - 0x78, 0x69, 0x73, 0x74, 0x20, 0x66, 0x6C, 0x61, 0x67, 0x20, 0x28, - 0x31, 0x20, 0x69, 0x66, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, - 0x61, 0x6E, 0x64, 0x20, 0x30, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, - 0x77, 0x69, 0x73, 0x65, 0x29, 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, - 0x65, 0x2E, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, - 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, - 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x20, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x20, 0x66, 0x69, 0x65, - 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, 0x22, 0x2C, - 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, - 0x64, 0x65, 0x22, 0x3A, 0x31, 0x32, 0x30, 0x2C, 0x22, 0x4E, 0x61, - 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x6D, 0x69, 0x6E, 0x5F, 0x62, 0x61, - 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, - 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, - 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, - 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, - 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, - 0x3A, 0x22, 0x67, 0x65, 0x74, 0x20, 0x6D, 0x69, 0x6E, 0x69, 0x6D, - 0x75, 0x6D, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x20, 0x62, 0x61, 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x20, 0x66, 0x6F, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, - 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x54, 0x78, 0x6E, 0x2E, 0x41, 0x63, 0x63, - 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x69, 0x6E, - 0x20, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x61, 0x6C, 0x67, 0x6F, 0x73, - 0x2E, 0x20, 0x41, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6E, - 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x69, 0x6E, - 0x64, 0x65, 0x78, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x20, 0x66, 0x69, - 0x65, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, - 0x43, 0x61, 0x6C, 0x6C, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x7A, 0x65, 0x72, 0x6F, - 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, 0x6D, 0x65, 0x61, 0x6E, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x6E, 0x64, 0x65, - 0x72, 0x2E, 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x20, 0x62, 0x61, 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x5B, 0x41, 0x53, 0x41, 0x5D, 0x28, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x64, 0x65, 0x76, 0x65, 0x6C, 0x6F, - 0x70, 0x65, 0x72, 0x2E, 0x61, 0x6C, 0x67, 0x6F, 0x72, 0x61, 0x6E, - 0x64, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x64, 0x6F, 0x63, 0x73, 0x2F, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x2F, 0x61, 0x73, - 0x61, 0x2F, 0x23, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2D, 0x6F, - 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x29, 0x20, 0x61, 0x6E, - 0x64, 0x20, 0x5B, 0x41, 0x70, 0x70, 0x5D, 0x28, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x64, 0x65, 0x76, 0x65, 0x6C, 0x6F, - 0x70, 0x65, 0x72, 0x2E, 0x61, 0x6C, 0x67, 0x6F, 0x72, 0x61, 0x6E, - 0x64, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x64, 0x6F, 0x63, 0x73, 0x2F, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x2F, 0x61, 0x73, - 0x63, 0x31, 0x2F, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6C, - 0x2F, 0x23, 0x6D, 0x69, 0x6E, 0x69, 0x6D, 0x75, 0x6D, 0x2D, 0x62, - 0x61, 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x2D, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x2D, 0x66, 0x6F, 0x72, - 0x2D, 0x61, 0x2D, 0x73, 0x6D, 0x61, 0x72, 0x74, 0x2D, 0x63, 0x6F, - 0x6E, 0x74, 0x72, 0x61, 0x63, 0x74, 0x29, 0x20, 0x75, 0x73, 0x61, - 0x67, 0x65, 0x2E, 0x20, 0x57, 0x68, 0x65, 0x6E, 0x20, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x6F, 0x72, 0x20, 0x6F, - 0x70, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x69, 0x6E, 0x74, 0x6F, 0x20, - 0x61, 0x6E, 0x20, 0x61, 0x70, 0x70, 0x2C, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6D, 0x69, 0x6E, 0x69, 0x6D, 0x75, 0x6D, 0x20, 0x62, 0x61, - 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x20, 0x67, 0x72, 0x6F, 0x77, 0x73, - 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x61, 0x70, 0x70, 0x20, 0x63, 0x6F, 0x64, 0x65, 0x20, 0x72, - 0x75, 0x6E, 0x73, 0x2C, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x66, - 0x6F, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6E, 0x63, - 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x69, 0x73, 0x20, 0x76, 0x69, - 0x73, 0x69, 0x62, 0x6C, 0x65, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, - 0x2E, 0x20, 0x57, 0x68, 0x65, 0x6E, 0x20, 0x64, 0x65, 0x6C, 0x65, - 0x74, 0x69, 0x6E, 0x67, 0x20, 0x6F, 0x72, 0x20, 0x63, 0x6C, 0x6F, - 0x73, 0x69, 0x6E, 0x67, 0x20, 0x6F, 0x75, 0x74, 0x2C, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6D, 0x69, 0x6E, 0x69, 0x6D, 0x75, 0x6D, 0x20, - 0x62, 0x61, 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x20, 0x64, 0x65, 0x63, - 0x72, 0x65, 0x61, 0x73, 0x65, 0x73, 0x20, 0x61, 0x66, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x20, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x73, 0x2E, 0x22, 0x2C, 0x22, - 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, - 0x65, 0x22, 0x3A, 0x31, 0x32, 0x38, 0x2C, 0x22, 0x4E, 0x61, 0x6D, - 0x65, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, - 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, - 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, - 0x3A, 0x30, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, - 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6F, 0x6C, - 0x6C, 0x6F, 0x77, 0x69, 0x6E, 0x67, 0x20, 0x70, 0x72, 0x6F, 0x67, - 0x72, 0x61, 0x6D, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x74, - 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, - 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x76, 0x61, - 0x72, 0x75, 0x69, 0x6E, 0x74, 0x20, 0x6C, 0x65, 0x6E, 0x67, 0x74, - 0x68, 0x7D, 0x20, 0x7B, 0x62, 0x79, 0x74, 0x65, 0x73, 0x7D, 0x22, - 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, - 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, - 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, - 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x32, 0x39, 0x2C, - 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, - 0x68, 0x69, 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, - 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, - 0x65, 0x22, 0x3A, 0x30, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, - 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x69, 0x6D, 0x6D, 0x65, 0x64, - 0x69, 0x61, 0x74, 0x65, 0x20, 0x55, 0x49, 0x4E, 0x54, 0x20, 0x74, - 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, - 0x20, 0x61, 0x73, 0x20, 0x61, 0x6E, 0x20, 0x69, 0x6E, 0x74, 0x65, - 0x67, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, - 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, - 0x7B, 0x76, 0x61, 0x72, 0x75, 0x69, 0x6E, 0x74, 0x20, 0x69, 0x6E, - 0x74, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, - 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, - 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x5D, - 0x7D, 0x0A, + 0x7B, 0x22, 0x45, 0x76, 0x61, 0x6C, 0x4D, 0x61, 0x78, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6F, 0x6E, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x4C, 0x6F, 0x67, + 0x69, 0x63, 0x53, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, + 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x4F, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x7B, + 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x30, 0x2C, 0x22, + 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x65, 0x72, 0x72, 0x22, 0x2C, + 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, + 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, + 0x22, 0x45, 0x72, 0x72, 0x6F, 0x72, 0x2E, 0x20, 0x50, 0x61, 0x6E, 0x69, + 0x63, 0x20, 0x69, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6C, + 0x79, 0x2E, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x70, + 0x72, 0x69, 0x6D, 0x61, 0x72, 0x69, 0x6C, 0x79, 0x20, 0x61, 0x20, 0x66, + 0x65, 0x6E, 0x63, 0x65, 0x70, 0x6F, 0x73, 0x74, 0x20, 0x61, 0x67, 0x61, + 0x69, 0x6E, 0x73, 0x74, 0x20, 0x61, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6E, + 0x74, 0x61, 0x6C, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x20, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x63, + 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x64, 0x20, 0x69, 0x6E, 0x74, 0x6F, + 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x73, 0x2E, 0x22, 0x2C, + 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, + 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, + 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x73, + 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, + 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, + 0x74, 0x22, 0x3A, 0x33, 0x35, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x53, 0x48, + 0x41, 0x32, 0x35, 0x36, 0x20, 0x68, 0x61, 0x73, 0x68, 0x20, 0x6F, 0x66, + 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x58, 0x2C, 0x20, 0x79, 0x69, + 0x65, 0x6C, 0x64, 0x73, 0x20, 0x5B, 0x33, 0x32, 0x5D, 0x62, 0x79, 0x74, + 0x65, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, + 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, + 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, + 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, + 0x6B, 0x65, 0x63, 0x63, 0x61, 0x6B, 0x32, 0x35, 0x36, 0x22, 0x2C, 0x22, + 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, + 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x33, 0x30, 0x2C, 0x22, + 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, + 0x22, 0x3A, 0x22, 0x4B, 0x65, 0x63, 0x63, 0x61, 0x6B, 0x32, 0x35, 0x36, + 0x20, 0x68, 0x61, 0x73, 0x68, 0x20, 0x6F, 0x66, 0x20, 0x76, 0x61, 0x6C, + 0x75, 0x65, 0x20, 0x58, 0x2C, 0x20, 0x79, 0x69, 0x65, 0x6C, 0x64, 0x73, + 0x20, 0x5B, 0x33, 0x32, 0x5D, 0x62, 0x79, 0x74, 0x65, 0x22, 0x2C, 0x22, + 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, + 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, + 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x33, 0x2C, + 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x73, 0x68, 0x61, 0x35, + 0x31, 0x32, 0x5F, 0x32, 0x35, 0x36, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, + 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, + 0x73, 0x74, 0x22, 0x3A, 0x34, 0x35, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x53, + 0x48, 0x41, 0x35, 0x31, 0x32, 0x5F, 0x32, 0x35, 0x36, 0x20, 0x68, 0x61, + 0x73, 0x68, 0x20, 0x6F, 0x66, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, + 0x58, 0x2C, 0x20, 0x79, 0x69, 0x65, 0x6C, 0x64, 0x73, 0x20, 0x5B, 0x33, + 0x32, 0x5D, 0x62, 0x79, 0x74, 0x65, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, + 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, + 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, + 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x34, 0x2C, 0x22, 0x4E, 0x61, + 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x65, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, + 0x73, 0x22, 0x3A, 0x22, 0x42, 0x42, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, + 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x39, 0x30, 0x30, 0x2C, 0x22, + 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, + 0x22, 0x3A, 0x22, 0x66, 0x6F, 0x72, 0x20, 0x28, 0x64, 0x61, 0x74, 0x61, + 0x20, 0x41, 0x2C, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x20, 0x42, 0x2C, 0x20, 0x70, 0x75, 0x62, 0x6B, 0x65, 0x79, 0x20, + 0x43, 0x29, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, + 0x6F, 0x66, 0x20, 0x28, 0x5C, 0x22, 0x50, 0x72, 0x6F, 0x67, 0x44, 0x61, + 0x74, 0x61, 0x5C, 0x22, 0x20, 0x7C, 0x7C, 0x20, 0x70, 0x72, 0x6F, 0x67, + 0x72, 0x61, 0x6D, 0x5F, 0x68, 0x61, 0x73, 0x68, 0x20, 0x7C, 0x7C, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6E, 0x73, + 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x75, 0x62, 0x6B, 0x65, 0x79, + 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, + 0x6F, 0x72, 0x20, 0x31, 0x7D, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, + 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x54, 0x68, 0x65, 0x20, 0x33, + 0x32, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x70, 0x75, 0x62, 0x6C, 0x69, + 0x63, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x6C, 0x61, 0x73, 0x74, 0x20, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, + 0x74, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, + 0x63, 0x6B, 0x2C, 0x20, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x64, + 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x36, 0x34, 0x20, 0x62, + 0x79, 0x74, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, + 0x6F, 0x6E, 0x64, 0x2D, 0x74, 0x6F, 0x2D, 0x6C, 0x61, 0x73, 0x74, 0x20, + 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x6F, 0x6E, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x2C, 0x20, 0x70, 0x72, + 0x65, 0x63, 0x65, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, + 0x20, 0x77, 0x61, 0x73, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x65, 0x64, 0x20, + 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, + 0x2D, 0x74, 0x6F, 0x2D, 0x6C, 0x61, 0x73, 0x74, 0x20, 0x65, 0x6C, 0x65, + 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x73, 0x74, 0x61, 0x63, 0x6B, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, + 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, + 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, + 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x38, 0x2C, 0x22, 0x4E, 0x61, + 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x2B, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, + 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, + 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, + 0x20, 0x70, 0x6C, 0x75, 0x73, 0x20, 0x42, 0x2E, 0x20, 0x50, 0x61, 0x6E, + 0x69, 0x63, 0x20, 0x6F, 0x6E, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x66, 0x6C, + 0x6F, 0x77, 0x2E, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, + 0x72, 0x61, 0x22, 0x3A, 0x22, 0x4F, 0x76, 0x65, 0x72, 0x66, 0x6C, 0x6F, + 0x77, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6E, 0x20, 0x65, 0x72, 0x72, 0x6F, + 0x72, 0x20, 0x63, 0x6F, 0x6E, 0x64, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x20, + 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, 0x6C, 0x74, 0x73, 0x20, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x61, 0x6E, + 0x64, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2E, + 0x20, 0x46, 0x75, 0x6C, 0x6C, 0x20, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6C, + 0x61, 0x62, 0x6C, 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x60, 0x61, + 0x64, 0x64, 0x77, 0x60, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, + 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, + 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, + 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x39, 0x2C, 0x22, 0x4E, 0x61, 0x6D, + 0x65, 0x22, 0x3A, 0x22, 0x2D, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, + 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, + 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, + 0x6D, 0x69, 0x6E, 0x75, 0x73, 0x20, 0x42, 0x2E, 0x20, 0x50, 0x61, 0x6E, + 0x69, 0x63, 0x20, 0x69, 0x66, 0x20, 0x42, 0x20, 0x5C, 0x75, 0x30, 0x30, + 0x33, 0x65, 0x20, 0x41, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, + 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, + 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, + 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x30, 0x2C, 0x22, 0x4E, 0x61, + 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x2F, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, + 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, + 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, + 0x20, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, + 0x42, 0x2E, 0x20, 0x50, 0x61, 0x6E, 0x69, 0x63, 0x20, 0x69, 0x66, 0x20, + 0x42, 0x20, 0x3D, 0x3D, 0x20, 0x30, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, + 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, + 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, + 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x31, 0x2C, 0x22, + 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x2A, 0x22, 0x2C, 0x22, 0x41, + 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, + 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, + 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, + 0x22, 0x41, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x73, 0x20, 0x42, 0x2E, 0x20, + 0x50, 0x61, 0x6E, 0x69, 0x63, 0x20, 0x6F, 0x6E, 0x20, 0x6F, 0x76, 0x65, + 0x72, 0x66, 0x6C, 0x6F, 0x77, 0x2E, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, + 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x4F, 0x76, 0x65, 0x72, + 0x66, 0x6C, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6E, 0x20, 0x65, + 0x72, 0x72, 0x6F, 0x72, 0x20, 0x63, 0x6F, 0x6E, 0x64, 0x69, 0x74, 0x69, + 0x6F, 0x6E, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, 0x6C, + 0x74, 0x73, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6F, 0x6E, + 0x20, 0x61, 0x6E, 0x64, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x73, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6F, 0x6E, 0x2E, 0x20, 0x46, 0x75, 0x6C, 0x6C, 0x20, 0x70, 0x72, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x73, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, + 0x20, 0x60, 0x6D, 0x75, 0x6C, 0x77, 0x60, 0x2E, 0x22, 0x2C, 0x22, 0x47, + 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, + 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, + 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x32, 0x2C, + 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x5C, 0x75, 0x30, 0x30, + 0x33, 0x63, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, + 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, + 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x6C, 0x65, 0x73, + 0x73, 0x20, 0x74, 0x68, 0x61, 0x6E, 0x20, 0x42, 0x20, 0x3D, 0x5C, 0x75, + 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, + 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, + 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, + 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, + 0x22, 0x3A, 0x31, 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, + 0x22, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x22, 0x2C, 0x22, 0x41, 0x72, + 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, + 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, + 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, + 0x41, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, + 0x61, 0x6E, 0x20, 0x42, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, + 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x7D, 0x22, 0x2C, 0x22, + 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, + 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, + 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x34, + 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x5C, 0x75, 0x30, + 0x30, 0x33, 0x63, 0x3D, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, + 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, + 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x6C, + 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6E, 0x20, 0x6F, 0x72, 0x20, + 0x65, 0x71, 0x75, 0x61, 0x6C, 0x20, 0x74, 0x6F, 0x20, 0x42, 0x20, 0x3D, + 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, + 0x20, 0x31, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, + 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, + 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, + 0x64, 0x65, 0x22, 0x3A, 0x31, 0x35, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, + 0x22, 0x3A, 0x22, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x3D, 0x22, 0x2C, + 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, + 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, + 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, + 0x22, 0x3A, 0x22, 0x41, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, + 0x20, 0x74, 0x68, 0x61, 0x6E, 0x20, 0x6F, 0x72, 0x20, 0x65, 0x71, 0x75, + 0x61, 0x6C, 0x20, 0x74, 0x6F, 0x20, 0x42, 0x20, 0x3D, 0x5C, 0x75, 0x30, + 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x7D, + 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, + 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, + 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, + 0x3A, 0x31, 0x36, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, + 0x5C, 0x75, 0x30, 0x30, 0x32, 0x36, 0x5C, 0x75, 0x30, 0x30, 0x32, 0x36, + 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, + 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, + 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, + 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, + 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x69, 0x73, 0x20, 0x6E, 0x6F, + 0x74, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x42, + 0x20, 0x69, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x7A, 0x65, 0x72, 0x6F, + 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, + 0x6F, 0x72, 0x20, 0x31, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, + 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, + 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, + 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x37, 0x2C, 0x22, 0x4E, 0x61, + 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x7C, 0x7C, 0x22, 0x2C, 0x22, 0x41, 0x72, + 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, + 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, + 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, + 0x41, 0x20, 0x69, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x7A, 0x65, 0x72, + 0x6F, 0x20, 0x6F, 0x72, 0x20, 0x42, 0x20, 0x69, 0x73, 0x20, 0x6E, 0x6F, + 0x74, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, + 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x7D, 0x22, + 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, + 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, + 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, + 0x31, 0x38, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x3D, + 0x3D, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, + 0x2E, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, + 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x69, 0x73, 0x20, 0x65, + 0x71, 0x75, 0x61, 0x6C, 0x20, 0x74, 0x6F, 0x20, 0x42, 0x20, 0x3D, 0x5C, + 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, + 0x31, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, + 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, + 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, + 0x65, 0x22, 0x3A, 0x31, 0x39, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, + 0x3A, 0x22, 0x21, 0x3D, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, + 0x3A, 0x22, 0x2E, 0x2E, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, + 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x69, + 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6C, 0x20, + 0x74, 0x6F, 0x20, 0x42, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, + 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x7D, 0x22, 0x2C, 0x22, + 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, + 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, + 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, 0x30, + 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x21, 0x22, 0x2C, + 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, + 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, + 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, + 0x3A, 0x22, 0x58, 0x20, 0x3D, 0x3D, 0x20, 0x30, 0x20, 0x79, 0x69, 0x65, + 0x6C, 0x64, 0x73, 0x20, 0x31, 0x3B, 0x20, 0x65, 0x6C, 0x73, 0x65, 0x20, + 0x30, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, + 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, + 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, + 0x22, 0x3A, 0x32, 0x31, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, + 0x22, 0x6C, 0x65, 0x6E, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, + 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, + 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, + 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x79, 0x69, 0x65, 0x6C, + 0x64, 0x73, 0x20, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x20, 0x6F, 0x66, + 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, + 0x58, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, + 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, + 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, + 0x22, 0x3A, 0x32, 0x32, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, + 0x22, 0x69, 0x74, 0x6F, 0x62, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, + 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, + 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x63, 0x6F, 0x6E, + 0x76, 0x65, 0x72, 0x74, 0x73, 0x20, 0x75, 0x69, 0x6E, 0x74, 0x36, 0x34, + 0x20, 0x58, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x69, 0x67, 0x20, 0x65, 0x6E, + 0x64, 0x69, 0x61, 0x6E, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x22, 0x2C, + 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, + 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, + 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, + 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x74, + 0x6F, 0x69, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, + 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, + 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x63, 0x6F, 0x6E, 0x76, 0x65, 0x72, + 0x74, 0x73, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x58, 0x20, 0x61, + 0x73, 0x20, 0x62, 0x69, 0x67, 0x20, 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, + 0x20, 0x74, 0x6F, 0x20, 0x75, 0x69, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, + 0x60, 0x62, 0x74, 0x6F, 0x69, 0x60, 0x20, 0x70, 0x61, 0x6E, 0x69, 0x63, + 0x73, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6E, 0x70, + 0x75, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6C, 0x6F, 0x6E, 0x67, 0x65, 0x72, + 0x20, 0x74, 0x68, 0x61, 0x6E, 0x20, 0x38, 0x20, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, + 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, + 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, + 0x65, 0x22, 0x3A, 0x32, 0x34, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, + 0x3A, 0x22, 0x25, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, + 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, + 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, + 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x6D, 0x6F, + 0x64, 0x75, 0x6C, 0x6F, 0x20, 0x42, 0x2E, 0x20, 0x50, 0x61, 0x6E, 0x69, + 0x63, 0x20, 0x69, 0x66, 0x20, 0x42, 0x20, 0x3D, 0x3D, 0x20, 0x30, 0x2E, + 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, + 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, + 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, + 0x3A, 0x32, 0x35, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, + 0x7C, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, + 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, + 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x62, 0x69, 0x74, 0x77, + 0x69, 0x73, 0x65, 0x2D, 0x6F, 0x72, 0x20, 0x42, 0x22, 0x2C, 0x22, 0x47, + 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, + 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, + 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, 0x36, 0x2C, + 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x5C, 0x75, 0x30, 0x30, + 0x32, 0x36, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, + 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, + 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x62, 0x69, 0x74, + 0x77, 0x69, 0x73, 0x65, 0x2D, 0x61, 0x6E, 0x64, 0x20, 0x42, 0x22, 0x2C, + 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, + 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, + 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, + 0x37, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x5E, 0x22, + 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, + 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, + 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, + 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x62, 0x69, 0x74, 0x77, 0x69, 0x73, + 0x65, 0x2D, 0x78, 0x6F, 0x72, 0x20, 0x42, 0x22, 0x2C, 0x22, 0x47, 0x72, + 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, + 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, + 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, 0x38, 0x2C, 0x22, + 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x7E, 0x22, 0x2C, 0x22, 0x41, + 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, + 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, + 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, + 0x62, 0x69, 0x74, 0x77, 0x69, 0x73, 0x65, 0x20, 0x69, 0x6E, 0x76, 0x65, + 0x72, 0x74, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x58, 0x22, 0x2C, + 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, + 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, + 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, + 0x39, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x6D, 0x75, + 0x6C, 0x77, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, + 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, + 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, + 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x74, 0x69, + 0x6D, 0x65, 0x73, 0x20, 0x42, 0x20, 0x6F, 0x75, 0x74, 0x20, 0x74, 0x6F, + 0x20, 0x31, 0x32, 0x38, 0x2D, 0x62, 0x69, 0x74, 0x20, 0x6C, 0x6F, 0x6E, + 0x67, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x20, 0x61, 0x73, 0x20, + 0x6C, 0x6F, 0x77, 0x20, 0x28, 0x74, 0x6F, 0x70, 0x29, 0x20, 0x61, 0x6E, + 0x64, 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, 0x75, 0x69, 0x6E, 0x74, 0x36, + 0x34, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, 0x6F, 0x6E, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, + 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, + 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, + 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x33, 0x30, + 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x64, 0x64, + 0x77, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, + 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, + 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x41, 0x20, 0x70, 0x6C, 0x75, + 0x73, 0x20, 0x42, 0x20, 0x6F, 0x75, 0x74, 0x20, 0x74, 0x6F, 0x20, 0x31, + 0x32, 0x38, 0x2D, 0x62, 0x69, 0x74, 0x20, 0x6C, 0x6F, 0x6E, 0x67, 0x20, + 0x72, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x20, 0x61, 0x73, 0x20, 0x73, 0x75, + 0x6D, 0x20, 0x28, 0x74, 0x6F, 0x70, 0x29, 0x20, 0x61, 0x6E, 0x64, 0x20, + 0x63, 0x61, 0x72, 0x72, 0x79, 0x2D, 0x62, 0x69, 0x74, 0x20, 0x75, 0x69, + 0x6E, 0x74, 0x36, 0x34, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, + 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, + 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, + 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, + 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, + 0x3A, 0x33, 0x32, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, + 0x69, 0x6E, 0x74, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x22, 0x2C, 0x22, + 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, + 0x65, 0x22, 0x3A, 0x30, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, + 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x20, 0x62, 0x6C, 0x6F, 0x63, + 0x6B, 0x20, 0x6F, 0x66, 0x20, 0x75, 0x69, 0x6E, 0x74, 0x36, 0x34, 0x20, + 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x20, 0x66, 0x6F, + 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x62, 0x79, 0x20, 0x69, 0x6E, 0x74, + 0x63, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, + 0x22, 0x3A, 0x22, 0x60, 0x69, 0x6E, 0x74, 0x63, 0x62, 0x6C, 0x6F, 0x63, + 0x6B, 0x60, 0x20, 0x6C, 0x6F, 0x61, 0x64, 0x73, 0x20, 0x66, 0x6F, 0x6C, + 0x6C, 0x6F, 0x77, 0x69, 0x6E, 0x67, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, + 0x61, 0x6D, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x69, 0x6E, 0x74, + 0x6F, 0x20, 0x61, 0x6E, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6F, + 0x66, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x63, 0x6F, + 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x20, 0x69, 0x6E, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x65, 0x76, 0x61, 0x6C, 0x75, 0x61, 0x74, 0x6F, 0x72, + 0x2E, 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x69, 0x6E, 0x74, 0x65, + 0x67, 0x65, 0x72, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, + 0x73, 0x20, 0x63, 0x61, 0x6E, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x79, 0x20, + 0x60, 0x69, 0x6E, 0x74, 0x63, 0x60, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x60, + 0x69, 0x6E, 0x74, 0x63, 0x5F, 0x2A, 0x60, 0x20, 0x77, 0x68, 0x69, 0x63, + 0x68, 0x20, 0x77, 0x69, 0x6C, 0x6C, 0x20, 0x70, 0x75, 0x73, 0x68, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x6F, 0x6E, + 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, + 0x2E, 0x20, 0x53, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6E, 0x74, + 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73, 0x20, 0x74, 0x6F, 0x20, 0x60, 0x69, + 0x6E, 0x74, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x60, 0x20, 0x72, 0x65, + 0x73, 0x65, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x72, 0x65, 0x70, 0x6C, + 0x61, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6E, 0x74, 0x65, + 0x67, 0x65, 0x72, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, + 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x20, + 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x2E, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, + 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x76, 0x61, + 0x72, 0x75, 0x69, 0x6E, 0x74, 0x20, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, + 0x7D, 0x20, 0x5B, 0x7B, 0x76, 0x61, 0x72, 0x75, 0x69, 0x6E, 0x74, 0x20, + 0x76, 0x61, 0x6C, 0x75, 0x65, 0x7D, 0x2C, 0x20, 0x2E, 0x2E, 0x2E, 0x5D, + 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, + 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, + 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, + 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x33, 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, + 0x65, 0x22, 0x3A, 0x22, 0x69, 0x6E, 0x74, 0x63, 0x22, 0x2C, 0x22, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, + 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, + 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, + 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x49, 0x74, 0x68, 0x20, 0x63, 0x6F, + 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, + 0x69, 0x6E, 0x74, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, 0x6F, + 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, + 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, + 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x69, 0x6E, 0x74, 0x20, + 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, + 0x65, 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, + 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, + 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, + 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x33, 0x34, 0x2C, 0x22, + 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x6E, 0x74, 0x63, 0x5F, + 0x30, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, + 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x63, + 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, 0x30, 0x20, 0x66, 0x72, + 0x6F, 0x6D, 0x20, 0x69, 0x6E, 0x74, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, + 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, + 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, + 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, + 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, + 0x22, 0x3A, 0x33, 0x35, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, + 0x22, 0x69, 0x6E, 0x74, 0x63, 0x5F, 0x31, 0x22, 0x2C, 0x22, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, + 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, + 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, + 0x70, 0x75, 0x73, 0x68, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, + 0x74, 0x20, 0x31, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x69, 0x6E, 0x74, + 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, + 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, + 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, + 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, + 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x33, 0x36, 0x2C, 0x22, + 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x6E, 0x74, 0x63, 0x5F, + 0x32, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, + 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x63, + 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, 0x32, 0x20, 0x66, 0x72, + 0x6F, 0x6D, 0x20, 0x69, 0x6E, 0x74, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, + 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, + 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, + 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, + 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, + 0x22, 0x3A, 0x33, 0x37, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, + 0x22, 0x69, 0x6E, 0x74, 0x63, 0x5F, 0x33, 0x22, 0x2C, 0x22, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, + 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, + 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, + 0x70, 0x75, 0x73, 0x68, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, + 0x74, 0x20, 0x33, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x69, 0x6E, 0x74, + 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, + 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, + 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, + 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, + 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x33, 0x38, 0x2C, 0x22, + 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x79, 0x74, 0x65, 0x63, + 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x30, + 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x72, 0x65, 0x70, + 0x61, 0x72, 0x65, 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6F, 0x66, + 0x20, 0x62, 0x79, 0x74, 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, + 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x20, 0x66, 0x6F, + 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x62, 0x79, 0x20, 0x62, 0x79, 0x74, + 0x65, 0x63, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, + 0x61, 0x22, 0x3A, 0x22, 0x60, 0x62, 0x79, 0x74, 0x65, 0x63, 0x62, 0x6C, + 0x6F, 0x63, 0x6B, 0x60, 0x20, 0x6C, 0x6F, 0x61, 0x64, 0x73, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x66, 0x6F, 0x6C, 0x6C, 0x6F, 0x77, 0x69, 0x6E, 0x67, + 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x20, 0x69, 0x6E, 0x74, 0x6F, 0x20, 0x61, 0x6E, 0x20, 0x61, + 0x72, 0x72, 0x61, 0x79, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, + 0x2D, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, + 0x61, 0x6E, 0x74, 0x73, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x65, 0x76, 0x61, 0x6C, 0x75, 0x61, 0x74, 0x6F, 0x72, 0x2E, 0x20, 0x54, + 0x68, 0x65, 0x73, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, + 0x74, 0x73, 0x20, 0x63, 0x61, 0x6E, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x79, + 0x20, 0x60, 0x62, 0x79, 0x74, 0x65, 0x63, 0x60, 0x20, 0x61, 0x6E, 0x64, + 0x20, 0x60, 0x62, 0x79, 0x74, 0x65, 0x63, 0x5F, 0x2A, 0x60, 0x20, 0x77, + 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x69, 0x6C, 0x6C, 0x20, 0x70, 0x75, + 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, + 0x20, 0x6F, 0x6E, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, + 0x61, 0x63, 0x6B, 0x2E, 0x20, 0x53, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, + 0x65, 0x6E, 0x74, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73, 0x20, 0x74, 0x6F, + 0x20, 0x60, 0x62, 0x79, 0x74, 0x65, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, + 0x60, 0x20, 0x72, 0x65, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, + 0x72, 0x65, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, + 0x6E, 0x74, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C, + 0x65, 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x2E, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, + 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, + 0x76, 0x61, 0x72, 0x75, 0x69, 0x6E, 0x74, 0x20, 0x6C, 0x65, 0x6E, 0x67, + 0x74, 0x68, 0x7D, 0x20, 0x5B, 0x28, 0x7B, 0x76, 0x61, 0x72, 0x75, 0x69, + 0x6E, 0x74, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x6C, 0x65, 0x6E, + 0x67, 0x74, 0x68, 0x7D, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0x2C, + 0x20, 0x2E, 0x2E, 0x2E, 0x5D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, + 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, + 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, + 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x33, 0x39, + 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x79, 0x74, + 0x65, 0x63, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, + 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, + 0x49, 0x74, 0x68, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, + 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x62, 0x79, 0x74, 0x65, 0x63, 0x62, + 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, + 0x6B, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, + 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, + 0x74, 0x38, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x73, + 0x74, 0x61, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, 0x22, + 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, + 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, + 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, + 0x64, 0x65, 0x22, 0x3A, 0x34, 0x30, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, + 0x22, 0x3A, 0x22, 0x62, 0x79, 0x74, 0x65, 0x63, 0x5F, 0x30, 0x22, 0x2C, + 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, + 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, + 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x63, 0x6F, 0x6E, 0x73, + 0x74, 0x61, 0x6E, 0x74, 0x20, 0x30, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, + 0x62, 0x79, 0x74, 0x65, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, + 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, + 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, + 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, + 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, + 0x34, 0x31, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, + 0x79, 0x74, 0x65, 0x63, 0x5F, 0x31, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, + 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, + 0x75, 0x73, 0x68, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, + 0x20, 0x31, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x62, 0x79, 0x74, 0x65, + 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, + 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, + 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, + 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, + 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x34, 0x32, 0x2C, 0x22, + 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x79, 0x74, 0x65, 0x63, + 0x5F, 0x32, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, + 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, + 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x20, 0x32, 0x20, 0x66, + 0x72, 0x6F, 0x6D, 0x20, 0x62, 0x79, 0x74, 0x65, 0x63, 0x62, 0x6C, 0x6F, + 0x63, 0x6B, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, + 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, + 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, + 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, + 0x64, 0x65, 0x22, 0x3A, 0x34, 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, + 0x22, 0x3A, 0x22, 0x62, 0x79, 0x74, 0x65, 0x63, 0x5F, 0x33, 0x22, 0x2C, + 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, + 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, + 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x63, 0x6F, 0x6E, 0x73, + 0x74, 0x61, 0x6E, 0x74, 0x20, 0x33, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, + 0x62, 0x79, 0x74, 0x65, 0x63, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x74, + 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, + 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, + 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, + 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, + 0x34, 0x34, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, + 0x72, 0x67, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, + 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, + 0x4E, 0x74, 0x68, 0x20, 0x4C, 0x6F, 0x67, 0x69, 0x63, 0x53, 0x69, 0x67, + 0x20, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x74, 0x6F, + 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, + 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, + 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x61, 0x72, 0x67, 0x20, + 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, 0x4E, 0x7D, 0x22, 0x2C, 0x22, 0x47, + 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, + 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, + 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, + 0x3A, 0x34, 0x35, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, + 0x61, 0x72, 0x67, 0x5F, 0x30, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, + 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, + 0x73, 0x68, 0x20, 0x4C, 0x6F, 0x67, 0x69, 0x63, 0x53, 0x69, 0x67, 0x20, + 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x30, 0x20, 0x74, + 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, + 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, + 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, + 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, + 0x34, 0x36, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, + 0x72, 0x67, 0x5F, 0x31, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, + 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, + 0x68, 0x20, 0x4C, 0x6F, 0x67, 0x69, 0x63, 0x53, 0x69, 0x67, 0x20, 0x61, + 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x31, 0x20, 0x74, 0x6F, + 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, + 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, + 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, + 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x34, + 0x37, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x72, + 0x67, 0x5F, 0x32, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, + 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, + 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, + 0x20, 0x4C, 0x6F, 0x67, 0x69, 0x63, 0x53, 0x69, 0x67, 0x20, 0x61, 0x72, + 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x32, 0x20, 0x74, 0x6F, 0x20, + 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, + 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, + 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, + 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x34, 0x38, + 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x72, 0x67, + 0x5F, 0x33, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, + 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, + 0x4C, 0x6F, 0x67, 0x69, 0x63, 0x53, 0x69, 0x67, 0x20, 0x61, 0x72, 0x67, + 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x33, 0x20, 0x74, 0x6F, 0x20, 0x73, + 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, + 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, + 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, + 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x34, 0x39, 0x2C, + 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x74, 0x78, 0x6E, 0x22, + 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, + 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x41, 0x72, + 0x67, 0x45, 0x6E, 0x75, 0x6D, 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x65, 0x6E, + 0x64, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x46, 0x65, 0x65, 0x22, 0x2C, 0x22, + 0x46, 0x69, 0x72, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x22, 0x2C, + 0x22, 0x46, 0x69, 0x72, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x54, + 0x69, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x4C, 0x61, 0x73, 0x74, 0x56, 0x61, + 0x6C, 0x69, 0x64, 0x22, 0x2C, 0x22, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x2C, + 0x22, 0x4C, 0x65, 0x61, 0x73, 0x65, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x41, 0x6D, 0x6F, 0x75, + 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x43, 0x6C, 0x6F, 0x73, 0x65, 0x52, 0x65, + 0x6D, 0x61, 0x69, 0x6E, 0x64, 0x65, 0x72, 0x54, 0x6F, 0x22, 0x2C, 0x22, + 0x56, 0x6F, 0x74, 0x65, 0x50, 0x4B, 0x22, 0x2C, 0x22, 0x53, 0x65, 0x6C, + 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x50, 0x4B, 0x22, 0x2C, 0x22, 0x56, + 0x6F, 0x74, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x56, + 0x6F, 0x74, 0x65, 0x4C, 0x61, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x56, 0x6F, + 0x74, 0x65, 0x4B, 0x65, 0x79, 0x44, 0x69, 0x6C, 0x75, 0x74, 0x69, 0x6F, + 0x6E, 0x22, 0x2C, 0x22, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2C, 0x22, 0x54, + 0x79, 0x70, 0x65, 0x45, 0x6E, 0x75, 0x6D, 0x22, 0x2C, 0x22, 0x58, 0x66, + 0x65, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x41, 0x6D, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x22, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x65, 0x6E, 0x64, 0x65, 0x72, 0x22, + 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x43, + 0x6C, 0x6F, 0x73, 0x65, 0x54, 0x6F, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, + 0x75, 0x70, 0x49, 0x6E, 0x64, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x54, 0x78, + 0x49, 0x44, 0x22, 0x2C, 0x22, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6F, 0x6E, 0x49, 0x44, 0x22, 0x2C, 0x22, 0x4F, 0x6E, 0x43, + 0x6F, 0x6D, 0x70, 0x6C, 0x65, 0x74, 0x69, 0x6F, 0x6E, 0x22, 0x2C, 0x22, + 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x41, + 0x72, 0x67, 0x73, 0x22, 0x2C, 0x22, 0x4E, 0x75, 0x6D, 0x41, 0x70, 0x70, + 0x41, 0x72, 0x67, 0x73, 0x22, 0x2C, 0x22, 0x41, 0x63, 0x63, 0x6F, 0x75, + 0x6E, 0x74, 0x73, 0x22, 0x2C, 0x22, 0x4E, 0x75, 0x6D, 0x41, 0x63, 0x63, + 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x22, 0x2C, 0x22, 0x41, 0x70, 0x70, 0x72, + 0x6F, 0x76, 0x61, 0x6C, 0x50, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x22, + 0x2C, 0x22, 0x43, 0x6C, 0x65, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x50, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x22, 0x2C, 0x22, 0x52, 0x65, + 0x6B, 0x65, 0x79, 0x54, 0x6F, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, + 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x43, 0x6F, + 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x6F, 0x74, + 0x61, 0x6C, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x6D, 0x61, 0x6C, 0x73, + 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x46, 0x72, 0x6F, + 0x7A, 0x65, 0x6E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x55, 0x6E, 0x69, 0x74, 0x4E, 0x61, 0x6D, + 0x65, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x43, 0x6F, + 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x55, 0x52, 0x4C, + 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x4D, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x61, + 0x73, 0x68, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x4D, 0x61, 0x6E, 0x61, 0x67, 0x65, 0x72, 0x22, + 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x2C, 0x22, 0x43, + 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x46, 0x72, + 0x65, 0x65, 0x7A, 0x65, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, + 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x43, 0x6C, 0x61, 0x77, 0x62, 0x61, + 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x46, 0x72, 0x65, 0x65, 0x7A, + 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, + 0x74, 0x22, 0x2C, 0x22, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x46, 0x72, 0x6F, 0x7A, 0x65, 0x6E, 0x22, 0x2C, 0x22, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0x2C, 0x22, 0x4E, 0x75, 0x6D, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0x2C, 0x22, 0x41, 0x70, 0x70, + 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x22, 0x2C, 0x22, + 0x4E, 0x75, 0x6D, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6F, 0x6E, 0x73, 0x22, 0x2C, 0x22, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, + 0x4E, 0x75, 0x6D, 0x55, 0x69, 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x47, 0x6C, + 0x6F, 0x62, 0x61, 0x6C, 0x4E, 0x75, 0x6D, 0x42, 0x79, 0x74, 0x65, 0x53, + 0x6C, 0x69, 0x63, 0x65, 0x22, 0x2C, 0x22, 0x4C, 0x6F, 0x63, 0x61, 0x6C, + 0x4E, 0x75, 0x6D, 0x55, 0x69, 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x4C, 0x6F, + 0x63, 0x61, 0x6C, 0x4E, 0x75, 0x6D, 0x42, 0x79, 0x74, 0x65, 0x53, 0x6C, + 0x69, 0x63, 0x65, 0x22, 0x5D, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, + 0x75, 0x6D, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x55, + 0x55, 0x55, 0x55, 0x42, 0x42, 0x42, 0x55, 0x42, 0x42, 0x42, 0x55, 0x55, + 0x55, 0x42, 0x55, 0x55, 0x55, 0x42, 0x42, 0x42, 0x55, 0x42, 0x55, 0x55, + 0x42, 0x55, 0x42, 0x55, 0x42, 0x42, 0x42, 0x55, 0x55, 0x55, 0x55, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x55, 0x42, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, + 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x66, 0x69, 0x65, 0x6C, + 0x64, 0x20, 0x46, 0x20, 0x6F, 0x66, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6E, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6F, 0x6E, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, + 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, + 0x22, 0x46, 0x69, 0x72, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x54, + 0x69, 0x6D, 0x65, 0x20, 0x63, 0x61, 0x75, 0x73, 0x65, 0x73, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, 0x74, + 0x6F, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, + 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x66, 0x75, + 0x74, 0x75, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x2E, 0x22, 0x2C, 0x22, + 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, + 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x74, + 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x66, + 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, 0x22, + 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, + 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, + 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, + 0x64, 0x65, 0x22, 0x3A, 0x35, 0x30, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, + 0x22, 0x3A, 0x22, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x22, 0x2C, 0x22, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, + 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, + 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, + 0x6E, 0x75, 0x6D, 0x22, 0x3A, 0x5B, 0x22, 0x4D, 0x69, 0x6E, 0x54, 0x78, + 0x6E, 0x46, 0x65, 0x65, 0x22, 0x2C, 0x22, 0x4D, 0x69, 0x6E, 0x42, 0x61, + 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x22, 0x2C, 0x22, 0x4D, 0x61, 0x78, 0x54, + 0x78, 0x6E, 0x4C, 0x69, 0x66, 0x65, 0x22, 0x2C, 0x22, 0x5A, 0x65, 0x72, + 0x6F, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x2C, 0x22, 0x47, + 0x72, 0x6F, 0x75, 0x70, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x2C, 0x22, 0x4C, + 0x6F, 0x67, 0x69, 0x63, 0x53, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x52, 0x6F, 0x75, 0x6E, 0x64, 0x22, 0x2C, + 0x22, 0x4C, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6D, 0x65, 0x73, + 0x74, 0x61, 0x6D, 0x70, 0x22, 0x2C, 0x22, 0x43, 0x75, 0x72, 0x72, 0x65, + 0x6E, 0x74, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, + 0x6E, 0x49, 0x44, 0x22, 0x2C, 0x22, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6F, + 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x2C, 0x22, + 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, 0x6D, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x22, 0x3A, 0x22, 0x55, 0x55, 0x55, 0x42, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x42, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, + 0x73, 0x68, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x66, 0x72, 0x6F, + 0x6D, 0x20, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73, 0x20, 0x74, 0x6F, + 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, + 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, + 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x67, 0x6C, 0x6F, 0x62, + 0x61, 0x6C, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, + 0x65, 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, + 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, + 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, + 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x35, 0x31, 0x2C, 0x22, + 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x74, 0x78, 0x6E, 0x22, + 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, + 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x41, 0x72, + 0x67, 0x45, 0x6E, 0x75, 0x6D, 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x65, 0x6E, + 0x64, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x46, 0x65, 0x65, 0x22, 0x2C, 0x22, + 0x46, 0x69, 0x72, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x22, 0x2C, + 0x22, 0x46, 0x69, 0x72, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x54, + 0x69, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x4C, 0x61, 0x73, 0x74, 0x56, 0x61, + 0x6C, 0x69, 0x64, 0x22, 0x2C, 0x22, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x2C, + 0x22, 0x4C, 0x65, 0x61, 0x73, 0x65, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x41, 0x6D, 0x6F, 0x75, + 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x43, 0x6C, 0x6F, 0x73, 0x65, 0x52, 0x65, + 0x6D, 0x61, 0x69, 0x6E, 0x64, 0x65, 0x72, 0x54, 0x6F, 0x22, 0x2C, 0x22, + 0x56, 0x6F, 0x74, 0x65, 0x50, 0x4B, 0x22, 0x2C, 0x22, 0x53, 0x65, 0x6C, + 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x50, 0x4B, 0x22, 0x2C, 0x22, 0x56, + 0x6F, 0x74, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x56, + 0x6F, 0x74, 0x65, 0x4C, 0x61, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x56, 0x6F, + 0x74, 0x65, 0x4B, 0x65, 0x79, 0x44, 0x69, 0x6C, 0x75, 0x74, 0x69, 0x6F, + 0x6E, 0x22, 0x2C, 0x22, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2C, 0x22, 0x54, + 0x79, 0x70, 0x65, 0x45, 0x6E, 0x75, 0x6D, 0x22, 0x2C, 0x22, 0x58, 0x66, + 0x65, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x41, 0x6D, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x22, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x65, 0x6E, 0x64, 0x65, 0x72, 0x22, + 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x43, + 0x6C, 0x6F, 0x73, 0x65, 0x54, 0x6F, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, + 0x75, 0x70, 0x49, 0x6E, 0x64, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x54, 0x78, + 0x49, 0x44, 0x22, 0x2C, 0x22, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6F, 0x6E, 0x49, 0x44, 0x22, 0x2C, 0x22, 0x4F, 0x6E, 0x43, + 0x6F, 0x6D, 0x70, 0x6C, 0x65, 0x74, 0x69, 0x6F, 0x6E, 0x22, 0x2C, 0x22, + 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x41, + 0x72, 0x67, 0x73, 0x22, 0x2C, 0x22, 0x4E, 0x75, 0x6D, 0x41, 0x70, 0x70, + 0x41, 0x72, 0x67, 0x73, 0x22, 0x2C, 0x22, 0x41, 0x63, 0x63, 0x6F, 0x75, + 0x6E, 0x74, 0x73, 0x22, 0x2C, 0x22, 0x4E, 0x75, 0x6D, 0x41, 0x63, 0x63, + 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x22, 0x2C, 0x22, 0x41, 0x70, 0x70, 0x72, + 0x6F, 0x76, 0x61, 0x6C, 0x50, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x22, + 0x2C, 0x22, 0x43, 0x6C, 0x65, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x50, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x22, 0x2C, 0x22, 0x52, 0x65, + 0x6B, 0x65, 0x79, 0x54, 0x6F, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, + 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x43, 0x6F, + 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x6F, 0x74, + 0x61, 0x6C, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x6D, 0x61, 0x6C, 0x73, + 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x46, 0x72, 0x6F, + 0x7A, 0x65, 0x6E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x55, 0x6E, 0x69, 0x74, 0x4E, 0x61, 0x6D, + 0x65, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x43, 0x6F, + 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x55, 0x52, 0x4C, + 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x4D, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x61, + 0x73, 0x68, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x4D, 0x61, 0x6E, 0x61, 0x67, 0x65, 0x72, 0x22, + 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x2C, 0x22, 0x43, + 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x46, 0x72, + 0x65, 0x65, 0x7A, 0x65, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x6E, 0x66, 0x69, + 0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x43, 0x6C, 0x61, 0x77, 0x62, 0x61, + 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x46, 0x72, 0x65, 0x65, 0x7A, + 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, + 0x74, 0x22, 0x2C, 0x22, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x46, 0x72, 0x6F, 0x7A, 0x65, 0x6E, 0x22, 0x2C, 0x22, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0x2C, 0x22, 0x4E, 0x75, 0x6D, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0x2C, 0x22, 0x41, 0x70, 0x70, + 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x22, 0x2C, 0x22, + 0x4E, 0x75, 0x6D, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6F, 0x6E, 0x73, 0x22, 0x2C, 0x22, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, + 0x4E, 0x75, 0x6D, 0x55, 0x69, 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x47, 0x6C, + 0x6F, 0x62, 0x61, 0x6C, 0x4E, 0x75, 0x6D, 0x42, 0x79, 0x74, 0x65, 0x53, + 0x6C, 0x69, 0x63, 0x65, 0x22, 0x2C, 0x22, 0x4C, 0x6F, 0x63, 0x61, 0x6C, + 0x4E, 0x75, 0x6D, 0x55, 0x69, 0x6E, 0x74, 0x22, 0x2C, 0x22, 0x4C, 0x6F, + 0x63, 0x61, 0x6C, 0x4E, 0x75, 0x6D, 0x42, 0x79, 0x74, 0x65, 0x53, 0x6C, + 0x69, 0x63, 0x65, 0x22, 0x5D, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, + 0x75, 0x6D, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x55, + 0x55, 0x55, 0x55, 0x42, 0x42, 0x42, 0x55, 0x42, 0x42, 0x42, 0x55, 0x55, + 0x55, 0x42, 0x55, 0x55, 0x55, 0x42, 0x42, 0x42, 0x55, 0x42, 0x55, 0x55, + 0x42, 0x55, 0x42, 0x55, 0x42, 0x42, 0x42, 0x55, 0x55, 0x55, 0x55, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x55, 0x42, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, + 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x66, 0x69, 0x65, 0x6C, + 0x64, 0x20, 0x46, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x54, + 0x74, 0x68, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6F, 0x6E, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x22, + 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, + 0x22, 0x66, 0x6F, 0x72, 0x20, 0x6E, 0x6F, 0x74, 0x65, 0x73, 0x20, 0x6F, + 0x6E, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, + 0x6E, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x73, 0x20, 0x61, 0x76, 0x61, + 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x2C, 0x20, 0x73, 0x65, 0x65, 0x20, + 0x60, 0x74, 0x78, 0x6E, 0x60, 0x2E, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6F, 0x6E, 0x20, 0x69, 0x73, 0x20, 0x5F, 0x69, 0x5F, 0x20, 0x69, 0x6E, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x2C, 0x20, + 0x60, 0x67, 0x74, 0x78, 0x6E, 0x20, 0x69, 0x20, 0x66, 0x69, 0x65, 0x6C, + 0x64, 0x60, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, + 0x6C, 0x65, 0x6E, 0x74, 0x20, 0x74, 0x6F, 0x20, 0x60, 0x74, 0x78, 0x6E, + 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x60, 0x2E, 0x22, 0x2C, 0x22, 0x49, + 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, + 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x74, 0x72, + 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x67, 0x72, + 0x6F, 0x75, 0x70, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, 0x20, 0x7B, + 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, + 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, + 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, + 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, + 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x35, + 0x32, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x6F, + 0x61, 0x64, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, + 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x63, 0x6F, 0x70, 0x79, 0x20, + 0x61, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, + 0x20, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x20, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, + 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, + 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, + 0x69, 0x6E, 0x74, 0x38, 0x20, 0x70, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, + 0x6E, 0x20, 0x69, 0x6E, 0x20, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, + 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x74, 0x6F, 0x20, 0x6C, 0x6F, + 0x61, 0x64, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x7D, 0x22, 0x2C, 0x22, 0x47, + 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, + 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, + 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, + 0x3A, 0x35, 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, + 0x73, 0x74, 0x6F, 0x72, 0x65, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, + 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, 0x20, 0x61, + 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x20, 0x61, 0x6E, + 0x64, 0x20, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x20, 0x74, 0x6F, 0x20, 0x73, + 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, + 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, + 0x38, 0x20, 0x70, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x69, + 0x6E, 0x20, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x20, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x6F, 0x72, 0x65, + 0x20, 0x74, 0x6F, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, + 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, + 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, + 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x35, 0x34, 0x2C, + 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x74, 0x78, 0x6E, 0x61, + 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, + 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, + 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x41, + 0x72, 0x67, 0x45, 0x6E, 0x75, 0x6D, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x70, + 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x41, 0x72, 0x67, + 0x73, 0x22, 0x2C, 0x22, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, + 0x22, 0x5D, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, 0x6D, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x42, 0x55, 0x55, 0x22, + 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, + 0x20, 0x49, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x6F, + 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, + 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x46, 0x20, 0x6F, 0x66, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x74, + 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x22, 0x2C, + 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, + 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, + 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, + 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, + 0x20, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x74, 0x72, 0x61, 0x6E, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x69, 0x65, 0x6C, + 0x64, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x69, 0x6E, 0x64, 0x65, + 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, + 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, + 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, + 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x35, 0x35, 0x2C, 0x22, 0x4E, + 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x74, 0x78, 0x6E, 0x61, 0x22, + 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, + 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x34, 0x2C, 0x22, 0x41, 0x72, + 0x67, 0x45, 0x6E, 0x75, 0x6D, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x70, 0x70, + 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x41, 0x72, 0x67, 0x73, + 0x22, 0x2C, 0x22, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x22, + 0x5D, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, 0x6D, 0x54, 0x79, + 0x70, 0x65, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x42, 0x55, 0x55, 0x22, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, + 0x49, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x6F, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x66, + 0x69, 0x65, 0x6C, 0x64, 0x20, 0x46, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x54, 0x74, 0x68, 0x20, 0x74, 0x72, 0x61, 0x6E, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x6E, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x67, + 0x72, 0x6F, 0x75, 0x70, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, + 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, + 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x20, + 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, 0x20, 0x7B, 0x75, 0x69, 0x6E, 0x74, + 0x38, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, + 0x6E, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, + 0x78, 0x7D, 0x20, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x74, 0x72, + 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x69, + 0x65, 0x6C, 0x64, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x69, 0x6E, + 0x64, 0x65, 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, + 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, + 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, + 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x35, 0x36, 0x2C, + 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x74, 0x78, 0x6E, + 0x73, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, + 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, + 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, + 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x44, + 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x66, 0x69, + 0x65, 0x6C, 0x64, 0x20, 0x46, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x41, 0x74, 0x68, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x67, 0x72, 0x6F, 0x75, + 0x70, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, + 0x22, 0x3A, 0x22, 0x66, 0x6F, 0x72, 0x20, 0x6E, 0x6F, 0x74, 0x65, 0x73, + 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x73, 0x20, 0x61, + 0x76, 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x2C, 0x20, 0x73, 0x65, + 0x65, 0x20, 0x60, 0x74, 0x78, 0x6E, 0x60, 0x2E, 0x20, 0x49, 0x66, 0x20, + 0x74, 0x6F, 0x70, 0x20, 0x6F, 0x66, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, + 0x20, 0x69, 0x73, 0x20, 0x5F, 0x69, 0x5F, 0x2C, 0x20, 0x60, 0x67, 0x74, + 0x78, 0x6E, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x60, 0x20, 0x69, + 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6C, 0x65, 0x6E, 0x74, + 0x20, 0x74, 0x6F, 0x20, 0x60, 0x67, 0x74, 0x78, 0x6E, 0x20, 0x5F, 0x69, + 0x5F, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x60, 0x2E, 0x20, 0x67, 0x74, + 0x78, 0x6E, 0x73, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x20, 0x73, + 0x6F, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x5F, 0x69, 0x5F, 0x20, 0x63, + 0x61, 0x6E, 0x20, 0x62, 0x65, 0x20, 0x63, 0x61, 0x6C, 0x63, 0x75, 0x6C, + 0x61, 0x74, 0x65, 0x64, 0x2C, 0x20, 0x6F, 0x66, 0x74, 0x65, 0x6E, 0x20, + 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x74, 0x72, + 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x22, 0x2C, + 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, + 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, + 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, + 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, + 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, + 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, + 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, + 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x35, 0x37, 0x2C, 0x22, 0x4E, 0x61, 0x6D, + 0x65, 0x22, 0x3A, 0x22, 0x67, 0x74, 0x78, 0x6E, 0x73, 0x61, 0x22, 0x2C, + 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, + 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, + 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, + 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x49, 0x74, 0x68, 0x20, 0x76, + 0x61, 0x6C, 0x75, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, + 0x46, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, + 0x74, 0x68, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6F, 0x6E, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x22, + 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, + 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, + 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, + 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, + 0x7D, 0x20, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x74, 0x72, 0x61, + 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x69, 0x65, + 0x6C, 0x64, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x69, 0x6E, 0x64, + 0x65, 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, + 0x22, 0x3A, 0x5B, 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, + 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, + 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x36, 0x34, 0x2C, 0x22, + 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x6E, 0x7A, 0x22, 0x2C, + 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, + 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, + 0x65, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, + 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, 0x74, 0x6F, 0x20, 0x54, 0x41, + 0x52, 0x47, 0x45, 0x54, 0x20, 0x69, 0x66, 0x20, 0x76, 0x61, 0x6C, 0x75, + 0x65, 0x20, 0x58, 0x20, 0x69, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x7A, + 0x65, 0x72, 0x6F, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, + 0x72, 0x61, 0x22, 0x3A, 0x22, 0x54, 0x68, 0x65, 0x20, 0x60, 0x62, 0x6E, + 0x7A, 0x60, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, + 0x6F, 0x6E, 0x20, 0x6F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x20, 0x30, 0x78, + 0x34, 0x30, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6F, 0x6C, 0x6C, 0x6F, 0x77, + 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x77, 0x6F, 0x20, 0x69, 0x6D, + 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, + 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, + 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, + 0x62, 0x79, 0x74, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x61, + 0x6E, 0x64, 0x20, 0x6C, 0x6F, 0x77, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, + 0x73, 0x65, 0x63, 0x6F, 0x6E, 0x64, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, + 0x20, 0x74, 0x6F, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x66, 0x6F, + 0x72, 0x6D, 0x20, 0x61, 0x20, 0x31, 0x36, 0x20, 0x62, 0x69, 0x74, 0x20, + 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x6D, 0x61, 0x79, 0x20, 0x62, 0x72, 0x61, + 0x6E, 0x63, 0x68, 0x20, 0x74, 0x6F, 0x2E, 0x20, 0x46, 0x6F, 0x72, 0x20, + 0x61, 0x20, 0x62, 0x6E, 0x7A, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x61, 0x74, 0x20, 0x60, 0x70, 0x63, + 0x60, 0x2C, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6C, 0x61, + 0x73, 0x74, 0x20, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x6F, + 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x20, + 0x69, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x20, + 0x74, 0x68, 0x65, 0x6E, 0x20, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, + 0x74, 0x6F, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, + 0x6F, 0x6E, 0x20, 0x61, 0x74, 0x20, 0x60, 0x70, 0x63, 0x20, 0x2B, 0x20, + 0x33, 0x20, 0x2B, 0x20, 0x4E, 0x60, 0x2C, 0x20, 0x65, 0x6C, 0x73, 0x65, + 0x20, 0x70, 0x72, 0x6F, 0x63, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, + 0x6E, 0x65, 0x78, 0x74, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x61, 0x74, 0x20, 0x60, 0x70, 0x63, 0x20, + 0x2B, 0x20, 0x33, 0x60, 0x2E, 0x20, 0x42, 0x72, 0x61, 0x6E, 0x63, 0x68, + 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x20, 0x6D, 0x75, 0x73, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x77, 0x65, 0x6C, 0x6C, 0x20, 0x61, 0x6C, + 0x69, 0x67, 0x6E, 0x65, 0x64, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x20, 0x28, 0x65, 0x2E, 0x67, + 0x2E, 0x20, 0x42, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x69, 0x6E, 0x67, 0x20, + 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6F, 0x6E, + 0x64, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x61, 0x20, + 0x32, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x6F, 0x70, 0x20, 0x77, 0x69, + 0x6C, 0x6C, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x6A, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x2E, 0x29, 0x20, 0x42, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, + 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x6C, 0x79, 0x20, 0x6C, 0x69, + 0x6D, 0x69, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x66, 0x6F, 0x72, + 0x77, 0x61, 0x72, 0x64, 0x20, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x65, + 0x73, 0x20, 0x6F, 0x6E, 0x6C, 0x79, 0x2C, 0x20, 0x30, 0x2D, 0x30, 0x78, + 0x37, 0x66, 0x66, 0x66, 0x2E, 0x20, 0x41, 0x20, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6E, 0x73, 0x69, 0x6F, 0x6E, + 0x20, 0x6D, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6D, 0x61, 0x6B, 0x65, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x65, + 0x64, 0x20, 0x31, 0x36, 0x20, 0x62, 0x69, 0x74, 0x20, 0x69, 0x6E, 0x74, + 0x65, 0x67, 0x65, 0x72, 0x20, 0x61, 0x6C, 0x6C, 0x6F, 0x77, 0x69, 0x6E, + 0x67, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x77, 0x61, + 0x72, 0x64, 0x20, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x65, 0x73, 0x20, + 0x61, 0x6E, 0x64, 0x20, 0x6C, 0x6F, 0x6F, 0x70, 0x69, 0x6E, 0x67, 0x2E, + 0x5C, 0x6E, 0x5C, 0x6E, 0x41, 0x74, 0x20, 0x4C, 0x6F, 0x67, 0x69, 0x63, + 0x53, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x32, + 0x20, 0x69, 0x74, 0x20, 0x62, 0x65, 0x63, 0x61, 0x6D, 0x65, 0x20, 0x61, + 0x6C, 0x6C, 0x6F, 0x77, 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x72, + 0x61, 0x6E, 0x63, 0x68, 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x65, 0x6E, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, + 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, 0x65, 0x78, 0x61, 0x63, 0x74, + 0x6C, 0x79, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x6C, 0x61, 0x73, 0x74, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x62, 0x6E, 0x7A, 0x20, 0x74, + 0x6F, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x4E, 0x20, 0x28, 0x77, 0x69, + 0x74, 0x68, 0x20, 0x30, 0x2D, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x69, 0x6E, + 0x67, 0x29, 0x20, 0x77, 0x61, 0x73, 0x20, 0x69, 0x6C, 0x6C, 0x65, 0x67, + 0x61, 0x6C, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x61, 0x20, 0x54, 0x45, 0x41, + 0x4C, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, 0x77, 0x69, + 0x74, 0x68, 0x20, 0x4E, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x62, + 0x65, 0x66, 0x6F, 0x72, 0x65, 0x20, 0x4C, 0x6F, 0x67, 0x69, 0x63, 0x53, + 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x32, 0x2C, + 0x20, 0x61, 0x6E, 0x64, 0x20, 0x69, 0x73, 0x20, 0x6C, 0x65, 0x67, 0x61, + 0x6C, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x69, 0x74, 0x2E, 0x20, + 0x54, 0x68, 0x69, 0x73, 0x20, 0x63, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x20, + 0x65, 0x6C, 0x69, 0x6D, 0x69, 0x6E, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x6E, 0x65, 0x65, 0x64, 0x20, 0x66, 0x6F, 0x72, 0x20, + 0x61, 0x20, 0x6C, 0x61, 0x73, 0x74, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x6F, 0x66, 0x20, 0x6E, 0x6F, + 0x2D, 0x6F, 0x70, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x62, 0x72, 0x61, + 0x6E, 0x63, 0x68, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x61, + 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6E, 0x64, 0x2E, 0x20, 0x28, + 0x42, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x69, 0x6E, 0x67, 0x20, 0x62, 0x65, + 0x79, 0x6F, 0x6E, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6E, 0x64, + 0x2D, 0x2D, 0x69, 0x6E, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x20, 0x77, + 0x6F, 0x72, 0x64, 0x73, 0x2C, 0x20, 0x74, 0x6F, 0x20, 0x61, 0x20, 0x62, + 0x79, 0x74, 0x65, 0x20, 0x6C, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, + 0x68, 0x61, 0x6E, 0x20, 0x4E, 0x2D, 0x2D, 0x69, 0x73, 0x20, 0x73, 0x74, + 0x69, 0x6C, 0x6C, 0x20, 0x69, 0x6C, 0x6C, 0x65, 0x67, 0x61, 0x6C, 0x20, + 0x61, 0x6E, 0x64, 0x20, 0x77, 0x69, 0x6C, 0x6C, 0x20, 0x63, 0x61, 0x75, + 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, + 0x61, 0x6D, 0x20, 0x74, 0x6F, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x2E, 0x29, + 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, + 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x30, 0x2E, 0x2E, 0x30, + 0x78, 0x37, 0x66, 0x66, 0x66, 0x20, 0x66, 0x6F, 0x72, 0x77, 0x61, 0x72, + 0x64, 0x20, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, 0x6F, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x2C, 0x20, 0x62, 0x69, 0x67, 0x20, 0x65, 0x6E, 0x64, + 0x69, 0x61, 0x6E, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, + 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, + 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, + 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x36, 0x35, 0x2C, 0x22, 0x4E, + 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x7A, 0x22, 0x2C, 0x22, 0x41, + 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, + 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, + 0x3A, 0x33, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x62, 0x72, + 0x61, 0x6E, 0x63, 0x68, 0x20, 0x74, 0x6F, 0x20, 0x54, 0x41, 0x52, 0x47, + 0x45, 0x54, 0x20, 0x69, 0x66, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, + 0x58, 0x20, 0x69, 0x73, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x22, 0x2C, 0x22, + 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x53, + 0x65, 0x65, 0x20, 0x60, 0x62, 0x6E, 0x7A, 0x60, 0x20, 0x66, 0x6F, 0x72, + 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6C, 0x73, 0x20, 0x6F, 0x6E, 0x20, + 0x68, 0x6F, 0x77, 0x20, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x65, 0x73, + 0x20, 0x77, 0x6F, 0x72, 0x6B, 0x2E, 0x20, 0x60, 0x62, 0x7A, 0x60, 0x20, + 0x69, 0x6E, 0x76, 0x65, 0x72, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6F, 0x72, 0x20, 0x6F, 0x66, 0x20, + 0x60, 0x62, 0x6E, 0x7A, 0x60, 0x2E, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, + 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, + 0x22, 0x7B, 0x30, 0x2E, 0x2E, 0x30, 0x78, 0x37, 0x66, 0x66, 0x66, 0x20, + 0x66, 0x6F, 0x72, 0x77, 0x61, 0x72, 0x64, 0x20, 0x62, 0x72, 0x61, 0x6E, + 0x63, 0x68, 0x20, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2C, 0x20, 0x62, + 0x69, 0x67, 0x20, 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x7D, 0x22, 0x2C, + 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, + 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, + 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, + 0x3A, 0x36, 0x36, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, + 0x62, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x44, 0x6F, + 0x63, 0x22, 0x3A, 0x22, 0x62, 0x72, 0x61, 0x6E, 0x63, 0x68, 0x20, 0x75, + 0x6E, 0x63, 0x6F, 0x6E, 0x64, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x61, 0x6C, + 0x6C, 0x79, 0x20, 0x74, 0x6F, 0x20, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, + 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, + 0x3A, 0x22, 0x53, 0x65, 0x65, 0x20, 0x60, 0x62, 0x6E, 0x7A, 0x60, 0x20, + 0x66, 0x6F, 0x72, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6C, 0x73, 0x20, + 0x6F, 0x6E, 0x20, 0x68, 0x6F, 0x77, 0x20, 0x62, 0x72, 0x61, 0x6E, 0x63, + 0x68, 0x65, 0x73, 0x20, 0x77, 0x6F, 0x72, 0x6B, 0x2E, 0x20, 0x60, 0x62, + 0x60, 0x20, 0x61, 0x6C, 0x77, 0x61, 0x79, 0x73, 0x20, 0x6A, 0x75, 0x6D, + 0x70, 0x73, 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6F, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x2E, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, + 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, + 0x7B, 0x30, 0x2E, 0x2E, 0x30, 0x78, 0x37, 0x66, 0x66, 0x66, 0x20, 0x66, + 0x6F, 0x72, 0x77, 0x61, 0x72, 0x64, 0x20, 0x62, 0x72, 0x61, 0x6E, 0x63, + 0x68, 0x20, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2C, 0x20, 0x62, 0x69, + 0x67, 0x20, 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x7D, 0x22, 0x2C, 0x22, + 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, + 0x6F, 0x77, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, + 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, + 0x36, 0x37, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6E, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, + 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x75, 0x73, 0x65, 0x20, 0x6C, + 0x61, 0x73, 0x74, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x6F, 0x6E, + 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x20, 0x61, 0x73, 0x20, 0x73, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3B, + 0x20, 0x65, 0x6E, 0x64, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, + 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, + 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, + 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x36, 0x38, 0x2C, 0x22, 0x4E, + 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, + 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, + 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, + 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, + 0x3A, 0x22, 0x69, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6C, + 0x79, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x20, 0x75, 0x6E, 0x6C, 0x65, 0x73, + 0x73, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x58, 0x20, 0x69, 0x73, + 0x20, 0x61, 0x20, 0x6E, 0x6F, 0x6E, 0x2D, 0x7A, 0x65, 0x72, 0x6F, 0x20, + 0x6E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, + 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, + 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, + 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x37, 0x32, 0x2C, + 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, 0x22, + 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, + 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, + 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, + 0x22, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x20, 0x76, 0x61, 0x6C, + 0x75, 0x65, 0x20, 0x58, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x73, 0x74, + 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, + 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, 0x6E, + 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, + 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x37, 0x33, 0x2C, 0x22, 0x4E, 0x61, + 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x64, 0x75, 0x70, 0x22, 0x2C, 0x22, 0x41, + 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x2E, 0x22, 0x2C, + 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, + 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, + 0x22, 0x64, 0x75, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x6C, + 0x61, 0x73, 0x74, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x6F, 0x6E, + 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, + 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, + 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, + 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x37, 0x34, 0x2C, + 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x64, 0x75, 0x70, 0x32, + 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x2E, + 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, + 0x22, 0x2E, 0x2E, 0x2E, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, + 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x64, 0x75, 0x70, 0x6C, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x74, 0x77, 0x6F, 0x20, 0x6C, 0x61, + 0x73, 0x74, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, 0x6F, 0x6E, + 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x3A, 0x20, 0x41, 0x2C, 0x20, 0x42, + 0x20, 0x2D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x41, 0x2C, 0x20, + 0x42, 0x2C, 0x20, 0x41, 0x2C, 0x20, 0x42, 0x22, 0x2C, 0x22, 0x47, 0x72, + 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, + 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, + 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x37, 0x35, + 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x64, 0x69, 0x67, + 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x22, + 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, + 0x2E, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, + 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x44, + 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x4E, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, + 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6F, 0x70, + 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, + 0x6B, 0x2E, 0x20, 0x64, 0x69, 0x67, 0x20, 0x30, 0x20, 0x69, 0x73, 0x20, + 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6C, 0x65, 0x6E, 0x74, 0x20, 0x74, + 0x6F, 0x20, 0x64, 0x75, 0x70, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, + 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, + 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, + 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, + 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, + 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, + 0x64, 0x65, 0x22, 0x3A, 0x37, 0x36, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, + 0x22, 0x3A, 0x22, 0x73, 0x77, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x41, 0x72, + 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x2E, 0x22, 0x2C, 0x22, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x2E, 0x22, 0x2C, + 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, + 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, + 0x22, 0x73, 0x77, 0x61, 0x70, 0x73, 0x20, 0x74, 0x77, 0x6F, 0x20, 0x6C, + 0x61, 0x73, 0x74, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, 0x6F, + 0x6E, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x3A, 0x20, 0x41, 0x2C, 0x20, + 0x42, 0x20, 0x2D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x42, 0x2C, + 0x20, 0x41, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, + 0x3A, 0x5B, 0x22, 0x46, 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, 0x6E, 0x74, + 0x72, 0x6F, 0x6C, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, + 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x37, 0x37, 0x2C, 0x22, 0x4E, 0x61, 0x6D, + 0x65, 0x22, 0x3A, 0x22, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x22, 0x2C, + 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x2E, 0x55, 0x22, + 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, + 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, + 0x63, 0x22, 0x3A, 0x22, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x73, 0x20, + 0x6F, 0x6E, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x77, 0x6F, 0x20, 0x76, + 0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, + 0x6F, 0x6E, 0x20, 0x74, 0x6F, 0x70, 0x2D, 0x6F, 0x66, 0x2D, 0x73, 0x74, + 0x61, 0x63, 0x6B, 0x3A, 0x20, 0x41, 0x2C, 0x20, 0x42, 0x2C, 0x20, 0x43, + 0x20, 0x2D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x28, 0x69, 0x66, + 0x20, 0x43, 0x20, 0x21, 0x3D, 0x20, 0x30, 0x20, 0x74, 0x68, 0x65, 0x6E, + 0x20, 0x42, 0x20, 0x65, 0x6C, 0x73, 0x65, 0x20, 0x41, 0x29, 0x22, 0x2C, + 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x46, + 0x6C, 0x6F, 0x77, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x22, + 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, + 0x3A, 0x38, 0x30, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, + 0x63, 0x6F, 0x6E, 0x63, 0x61, 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, + 0x73, 0x22, 0x3A, 0x22, 0x42, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, + 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, + 0x6F, 0x70, 0x20, 0x74, 0x77, 0x6F, 0x20, 0x62, 0x79, 0x74, 0x65, 0x2D, + 0x61, 0x72, 0x72, 0x61, 0x79, 0x73, 0x20, 0x41, 0x20, 0x61, 0x6E, 0x64, + 0x20, 0x42, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x6A, 0x6F, 0x69, 0x6E, 0x20, + 0x74, 0x68, 0x65, 0x6D, 0x2C, 0x20, 0x70, 0x75, 0x73, 0x68, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x22, 0x2C, 0x22, + 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x60, + 0x63, 0x6F, 0x6E, 0x63, 0x61, 0x74, 0x60, 0x20, 0x70, 0x61, 0x6E, 0x69, + 0x63, 0x73, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x73, 0x75, 0x6C, 0x74, 0x20, 0x77, 0x6F, 0x75, 0x6C, 0x64, 0x20, 0x62, + 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, + 0x61, 0x6E, 0x20, 0x34, 0x30, 0x39, 0x36, 0x20, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, + 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, + 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, + 0x65, 0x22, 0x3A, 0x38, 0x31, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, + 0x3A, 0x22, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x22, + 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, + 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, + 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x33, 0x2C, 0x22, 0x44, 0x6F, 0x63, + 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, 0x20, 0x61, 0x20, 0x62, 0x79, 0x74, + 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x41, 0x2E, 0x20, 0x46, + 0x6F, 0x72, 0x20, 0x69, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, + 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, 0x69, 0x6E, 0x20, 0x30, + 0x2E, 0x2E, 0x32, 0x35, 0x35, 0x20, 0x53, 0x20, 0x61, 0x6E, 0x64, 0x20, + 0x45, 0x3A, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x61, + 0x20, 0x72, 0x61, 0x6E, 0x67, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x41, 0x20, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x61, 0x74, 0x20, 0x53, + 0x20, 0x75, 0x70, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6E, + 0x6F, 0x74, 0x20, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x69, 0x6E, 0x67, + 0x20, 0x45, 0x2C, 0x20, 0x70, 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x72, + 0x65, 0x73, 0x75, 0x6C, 0x74, 0x2E, 0x20, 0x49, 0x66, 0x20, 0x45, 0x20, + 0x5C, 0x75, 0x30, 0x30, 0x33, 0x63, 0x20, 0x53, 0x2C, 0x20, 0x6F, 0x72, + 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6C, + 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6E, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6C, 0x65, 0x6E, + 0x67, 0x74, 0x68, 0x2C, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, + 0x67, 0x72, 0x61, 0x6D, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x73, 0x22, 0x2C, + 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, + 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x70, 0x6F, 0x73, 0x69, 0x74, 0x69, + 0x6F, 0x6E, 0x7D, 0x20, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x65, + 0x6E, 0x64, 0x20, 0x70, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x7D, + 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, + 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, + 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, + 0x3A, 0x38, 0x32, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, + 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x33, 0x22, 0x2C, + 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x55, 0x55, 0x22, + 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, + 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, + 0x63, 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, 0x20, 0x61, 0x20, 0x62, 0x79, + 0x74, 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x41, 0x20, 0x61, + 0x6E, 0x64, 0x20, 0x74, 0x77, 0x6F, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, + 0x65, 0x72, 0x73, 0x20, 0x42, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x43, 0x2E, + 0x20, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x61, 0x20, 0x72, + 0x61, 0x6E, 0x67, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x41, 0x20, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x61, 0x74, 0x20, 0x42, 0x20, 0x75, + 0x70, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6E, 0x6F, 0x74, + 0x20, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x43, + 0x2C, 0x20, 0x70, 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, + 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x72, 0x65, 0x73, + 0x75, 0x6C, 0x74, 0x2E, 0x20, 0x49, 0x66, 0x20, 0x43, 0x20, 0x5C, 0x75, + 0x30, 0x30, 0x33, 0x63, 0x20, 0x42, 0x2C, 0x20, 0x6F, 0x72, 0x20, 0x65, + 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6C, 0x61, 0x72, + 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6E, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6C, 0x65, 0x6E, 0x67, 0x74, + 0x68, 0x2C, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, + 0x61, 0x6D, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x73, 0x22, 0x2C, 0x22, 0x47, + 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, + 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, + 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x38, 0x33, 0x2C, + 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x65, 0x74, 0x62, + 0x69, 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, + 0x2E, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, + 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, 0x20, 0x61, + 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x41, 0x20, 0x28, 0x69, + 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x6F, 0x72, 0x20, 0x62, 0x79, + 0x74, 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x2C, 0x20, 0x61, + 0x6E, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, 0x42, 0x2E, 0x20, + 0x50, 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x74, 0x68, + 0x20, 0x62, 0x69, 0x74, 0x20, 0x6F, 0x66, 0x20, 0x41, 0x2E, 0x22, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, + 0x73, 0x65, 0x65, 0x20, 0x65, 0x78, 0x70, 0x6C, 0x61, 0x6E, 0x61, 0x74, + 0x69, 0x6F, 0x6E, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6F, + 0x72, 0x64, 0x65, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x69, 0x6E, 0x20, 0x73, + 0x65, 0x74, 0x62, 0x69, 0x74, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, + 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, + 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, + 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x38, 0x34, 0x2C, 0x22, 0x4E, 0x61, + 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x73, 0x65, 0x74, 0x62, 0x69, 0x74, 0x22, + 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x55, 0x55, + 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, + 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, + 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, + 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, 0x20, 0x61, 0x20, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x41, 0x2C, 0x20, 0x69, 0x6E, 0x64, + 0x65, 0x78, 0x20, 0x42, 0x2C, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x62, 0x69, + 0x74, 0x20, 0x43, 0x2E, 0x20, 0x53, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x42, 0x74, 0x68, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6F, 0x66, 0x20, + 0x41, 0x20, 0x74, 0x6F, 0x20, 0x43, 0x2C, 0x20, 0x61, 0x6E, 0x64, 0x20, + 0x70, 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, + 0x75, 0x6C, 0x74, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, + 0x72, 0x61, 0x22, 0x3A, 0x22, 0x62, 0x69, 0x74, 0x20, 0x69, 0x6E, 0x64, + 0x65, 0x78, 0x69, 0x6E, 0x67, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6E, 0x73, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6C, 0x6F, 0x77, 0x2D, 0x6F, 0x72, + 0x64, 0x65, 0x72, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x69, 0x6E, 0x20, + 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x73, 0x2E, 0x20, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x62, 0x69, 0x74, 0x20, 0x34, 0x20, + 0x74, 0x6F, 0x20, 0x31, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x30, 0x20, 0x79, 0x69, + 0x65, 0x6C, 0x64, 0x73, 0x20, 0x31, 0x36, 0x20, 0x28, 0x60, 0x69, 0x6E, + 0x74, 0x20, 0x30, 0x78, 0x30, 0x30, 0x31, 0x30, 0x60, 0x2C, 0x20, 0x6F, + 0x72, 0x20, 0x32, 0x5E, 0x34, 0x29, 0x2E, 0x20, 0x49, 0x6E, 0x64, 0x65, + 0x78, 0x69, 0x6E, 0x67, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6E, 0x73, 0x20, + 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, + 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x6F, 0x66, 0x20, 0x61, 0x20, + 0x62, 0x79, 0x74, 0x65, 0x2D, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x20, + 0x28, 0x61, 0x73, 0x20, 0x73, 0x65, 0x65, 0x6E, 0x20, 0x69, 0x6E, 0x20, + 0x67, 0x65, 0x74, 0x62, 0x79, 0x74, 0x65, 0x20, 0x61, 0x6E, 0x64, 0x20, + 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x29, 0x2E, 0x20, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x62, 0x69, 0x74, 0x73, + 0x20, 0x30, 0x20, 0x74, 0x68, 0x72, 0x6F, 0x75, 0x67, 0x68, 0x20, 0x31, + 0x31, 0x20, 0x74, 0x6F, 0x20, 0x31, 0x20, 0x69, 0x6E, 0x20, 0x61, 0x20, + 0x34, 0x20, 0x62, 0x79, 0x74, 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, 0x79, + 0x20, 0x6F, 0x66, 0x20, 0x30, 0x73, 0x20, 0x79, 0x69, 0x65, 0x6C, 0x64, + 0x73, 0x20, 0x60, 0x62, 0x79, 0x74, 0x65, 0x20, 0x30, 0x78, 0x66, 0x66, + 0x66, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0x22, 0x2C, 0x22, 0x47, 0x72, + 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, + 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, + 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x38, 0x35, 0x2C, 0x22, + 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x65, 0x74, 0x62, 0x79, + 0x74, 0x65, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, + 0x42, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, + 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, 0x20, 0x61, + 0x20, 0x62, 0x79, 0x74, 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, + 0x41, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, + 0x72, 0x20, 0x42, 0x2E, 0x20, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x74, 0x68, 0x20, 0x62, 0x79, 0x74, + 0x65, 0x20, 0x6F, 0x66, 0x20, 0x41, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x70, + 0x75, 0x73, 0x68, 0x20, 0x69, 0x74, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6E, + 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x47, + 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, + 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, + 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x38, 0x36, 0x2C, + 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x73, 0x65, 0x74, 0x62, + 0x79, 0x74, 0x65, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, + 0x22, 0x42, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, + 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x6F, 0x70, + 0x20, 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, 0x2D, 0x61, 0x72, 0x72, 0x61, + 0x79, 0x20, 0x41, 0x2C, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, + 0x20, 0x42, 0x2C, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x73, 0x6D, 0x61, 0x6C, + 0x6C, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x43, 0x20, + 0x28, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6E, 0x20, 0x30, 0x2E, 0x2E, + 0x32, 0x35, 0x35, 0x29, 0x2E, 0x20, 0x53, 0x65, 0x74, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x42, 0x74, 0x68, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x6F, + 0x66, 0x20, 0x41, 0x20, 0x74, 0x6F, 0x20, 0x43, 0x2C, 0x20, 0x61, 0x6E, + 0x64, 0x20, 0x70, 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, + 0x65, 0x73, 0x75, 0x6C, 0x74, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, + 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, + 0x65, 0x74, 0x69, 0x63, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, + 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x39, 0x36, 0x2C, 0x22, 0x4E, 0x61, + 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x62, 0x61, 0x6C, 0x61, 0x6E, 0x63, 0x65, + 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, + 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, + 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, + 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, + 0x63, 0x22, 0x3A, 0x22, 0x67, 0x65, 0x74, 0x20, 0x62, 0x61, 0x6C, 0x61, + 0x6E, 0x63, 0x65, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x61, 0x63, + 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x54, 0x78, 0x6E, 0x2E, 0x41, + 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x69, + 0x6E, 0x20, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x61, 0x6C, 0x67, 0x6F, 0x73, + 0x2E, 0x20, 0x41, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6E, 0x20, 0x61, + 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, + 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6F, + 0x75, 0x6E, 0x74, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x6F, + 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x43, 0x61, 0x6C, 0x6C, 0x20, 0x74, 0x72, + 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x7A, + 0x65, 0x72, 0x6F, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, 0x6D, 0x65, + 0x61, 0x6E, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x6E, 0x64, + 0x65, 0x72, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, 0x62, 0x61, 0x6C, 0x61, + 0x6E, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6F, 0x62, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x64, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6F, 0x66, + 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6F, 0x75, 0x73, 0x20, 0x74, 0x72, + 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x20, 0x69, + 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x2C, + 0x20, 0x61, 0x6E, 0x64, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x66, 0x65, 0x65, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x74, + 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x69, + 0x73, 0x20, 0x64, 0x65, 0x64, 0x75, 0x63, 0x74, 0x65, 0x64, 0x2E, 0x22, + 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, + 0x22, 0x3A, 0x39, 0x37, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, + 0x22, 0x61, 0x70, 0x70, 0x5F, 0x6F, 0x70, 0x74, 0x65, 0x64, 0x5F, 0x69, + 0x6E, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, + 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, + 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x63, 0x68, 0x65, 0x63, 0x6B, 0x20, + 0x69, 0x66, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x73, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, + 0x54, 0x78, 0x6E, 0x2E, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, + 0x5B, 0x41, 0x5D, 0x20, 0x6F, 0x70, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6E, + 0x20, 0x66, 0x6F, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, + 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x42, 0x20, 0x3D, + 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, + 0x20, 0x31, 0x7D, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, + 0x72, 0x61, 0x22, 0x3A, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x3A, + 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, + 0x65, 0x78, 0x2C, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x64, 0x20, 0x28, 0x74, 0x6F, 0x70, 0x20, + 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, + 0x20, 0x6F, 0x6E, 0x20, 0x6F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x20, 0x65, + 0x6E, 0x74, 0x72, 0x79, 0x29, 0x2E, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6E, 0x3A, 0x20, 0x31, 0x20, 0x69, 0x66, 0x20, 0x6F, 0x70, 0x74, 0x65, + 0x64, 0x20, 0x69, 0x6E, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x30, 0x20, 0x6F, + 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x2E, 0x22, 0x2C, 0x22, + 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, + 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, + 0x39, 0x38, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, + 0x70, 0x70, 0x5F, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x5F, 0x67, 0x65, 0x74, + 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x42, + 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, + 0x22, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, + 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, + 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x72, 0x65, 0x61, 0x64, 0x20, 0x66, 0x72, + 0x6F, 0x6D, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x73, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, + 0x54, 0x78, 0x6E, 0x2E, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, + 0x5B, 0x41, 0x5D, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x6C, 0x6F, 0x63, + 0x61, 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x6F, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, + 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, + 0x6B, 0x65, 0x79, 0x20, 0x42, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, + 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x2C, 0x22, 0x44, 0x6F, + 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x70, 0x61, 0x72, + 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, + 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x2C, 0x20, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x20, 0x6B, 0x65, 0x79, 0x2E, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6E, 0x3A, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x2E, 0x20, 0x54, 0x68, + 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x7A, + 0x65, 0x72, 0x6F, 0x20, 0x28, 0x6F, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x20, 0x75, 0x69, 0x6E, 0x74, 0x36, 0x34, 0x29, 0x20, 0x69, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x64, 0x6F, 0x65, 0x73, + 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2E, 0x22, + 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, + 0x22, 0x3A, 0x39, 0x39, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, + 0x22, 0x61, 0x70, 0x70, 0x5F, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x5F, 0x67, + 0x65, 0x74, 0x5F, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, + 0x22, 0x3A, 0x22, 0x55, 0x55, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x55, 0x22, 0x2C, 0x22, + 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, + 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, + 0x72, 0x65, 0x61, 0x64, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x61, 0x63, + 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x54, 0x78, 0x6E, 0x2E, 0x41, + 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x66, + 0x72, 0x6F, 0x6D, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x20, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, + 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x42, + 0x20, 0x6B, 0x65, 0x79, 0x20, 0x43, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, + 0x33, 0x65, 0x20, 0x5B, 0x2A, 0x2E, 0x2E, 0x2E, 0x20, 0x73, 0x74, 0x61, + 0x63, 0x6B, 0x2A, 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x2C, 0x20, + 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x5D, 0x22, 0x2C, 0x22, 0x44, 0x6F, + 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x70, 0x61, 0x72, + 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, + 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x2C, 0x20, 0x61, 0x70, 0x70, 0x6C, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x64, 0x2C, 0x20, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x2E, 0x20, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6E, 0x3A, 0x20, 0x64, 0x69, 0x64, 0x5F, 0x65, + 0x78, 0x69, 0x73, 0x74, 0x20, 0x66, 0x6C, 0x61, 0x67, 0x20, 0x28, 0x74, + 0x6F, 0x70, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, + 0x61, 0x63, 0x6B, 0x2C, 0x20, 0x31, 0x20, 0x69, 0x66, 0x20, 0x65, 0x78, + 0x69, 0x73, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x30, 0x20, 0x6F, 0x74, + 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x29, 0x2C, 0x20, 0x76, 0x61, + 0x6C, 0x75, 0x65, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6C, + 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x20, 0x28, + 0x6F, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x75, 0x69, 0x6E, 0x74, + 0x36, 0x34, 0x29, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6B, + 0x65, 0x79, 0x20, 0x64, 0x6F, 0x65, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, + 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, + 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x30, 0x30, + 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x70, 0x70, + 0x5F, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x5F, 0x67, 0x65, 0x74, 0x22, + 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, + 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, + 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, + 0x22, 0x3A, 0x22, 0x72, 0x65, 0x61, 0x64, 0x20, 0x6B, 0x65, 0x79, 0x20, + 0x41, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x67, 0x6C, 0x6F, 0x62, 0x61, + 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x61, + 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x61, 0x70, 0x70, + 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x3D, 0x5C, 0x75, + 0x30, 0x30, 0x33, 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, + 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x20, 0x6B, 0x65, 0x79, 0x2E, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6E, 0x3A, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x2E, 0x20, 0x54, 0x68, + 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x7A, + 0x65, 0x72, 0x6F, 0x20, 0x28, 0x6F, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x20, 0x75, 0x69, 0x6E, 0x74, 0x36, 0x34, 0x29, 0x20, 0x69, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x64, 0x6F, 0x65, 0x73, + 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2E, 0x22, + 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, + 0x22, 0x3A, 0x31, 0x30, 0x31, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, + 0x3A, 0x22, 0x61, 0x70, 0x70, 0x5F, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, + 0x5F, 0x67, 0x65, 0x74, 0x5F, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x41, 0x72, + 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x42, 0x22, 0x2C, 0x22, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x55, 0x22, 0x2C, + 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, + 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, + 0x22, 0x72, 0x65, 0x61, 0x64, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x61, + 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x54, + 0x78, 0x6E, 0x2E, 0x46, 0x6F, 0x72, 0x65, 0x69, 0x67, 0x6E, 0x41, 0x70, + 0x70, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, + 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x42, + 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, 0x20, 0x5B, 0x2A, 0x2E, + 0x2E, 0x2E, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, 0x2A, 0x2C, 0x20, 0x76, + 0x61, 0x6C, 0x75, 0x65, 0x2C, 0x20, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, + 0x5D, 0x2E, 0x20, 0x41, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6E, 0x20, + 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, 0x65, + 0x78, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x46, 0x6F, 0x72, + 0x65, 0x69, 0x67, 0x6E, 0x41, 0x70, 0x70, 0x73, 0x20, 0x66, 0x69, 0x65, + 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x70, + 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x43, 0x61, 0x6C, + 0x6C, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, + 0x6E, 0x2C, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x20, 0x69, 0x6E, 0x64, 0x65, + 0x78, 0x20, 0x6D, 0x65, 0x61, 0x6E, 0x73, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x20, 0x61, 0x70, 0x70, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, + 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, + 0x3A, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, + 0x6E, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x2C, 0x20, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x2E, 0x20, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6E, 0x3A, 0x20, 0x64, 0x69, 0x64, 0x5F, 0x65, 0x78, 0x69, 0x73, + 0x74, 0x20, 0x66, 0x6C, 0x61, 0x67, 0x20, 0x28, 0x74, 0x6F, 0x70, 0x20, + 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6B, + 0x2C, 0x20, 0x31, 0x20, 0x69, 0x66, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, + 0x20, 0x61, 0x6E, 0x64, 0x20, 0x30, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, + 0x77, 0x69, 0x73, 0x65, 0x29, 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, + 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, + 0x69, 0x73, 0x20, 0x7A, 0x65, 0x72, 0x6F, 0x20, 0x28, 0x6F, 0x66, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x20, 0x75, 0x69, 0x6E, 0x74, 0x36, 0x34, 0x29, + 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x20, + 0x64, 0x6F, 0x65, 0x73, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, + 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, + 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x30, 0x32, 0x2C, 0x22, 0x4E, + 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x70, 0x70, 0x5F, 0x6C, 0x6F, + 0x63, 0x61, 0x6C, 0x5F, 0x70, 0x75, 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, + 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x42, 0x2E, 0x22, 0x2C, 0x22, 0x43, + 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x20, 0x74, 0x6F, 0x20, 0x61, 0x63, 0x63, 0x6F, + 0x75, 0x6E, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, + 0x64, 0x20, 0x62, 0x79, 0x20, 0x54, 0x78, 0x6E, 0x2E, 0x41, 0x63, 0x63, + 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x74, 0x6F, 0x20, + 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, + 0x6F, 0x66, 0x20, 0x61, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, + 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, + 0x20, 0x6B, 0x65, 0x79, 0x20, 0x42, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, + 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x43, 0x22, 0x2C, 0x22, 0x44, 0x6F, + 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x70, 0x61, 0x72, + 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, + 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x2C, 0x20, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x20, 0x6B, 0x65, 0x79, 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, + 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, + 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, + 0x64, 0x65, 0x22, 0x3A, 0x31, 0x30, 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, + 0x65, 0x22, 0x3A, 0x22, 0x61, 0x70, 0x70, 0x5F, 0x67, 0x6C, 0x6F, 0x62, + 0x61, 0x6C, 0x5F, 0x70, 0x75, 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, + 0x73, 0x22, 0x3A, 0x22, 0x42, 0x2E, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, + 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x41, 0x20, 0x61, 0x6E, 0x64, + 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x42, 0x20, 0x74, 0x6F, 0x20, + 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6E, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, + 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, + 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x30, 0x34, 0x2C, 0x22, 0x4E, + 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, 0x70, 0x70, 0x5F, 0x6C, 0x6F, + 0x63, 0x61, 0x6C, 0x5F, 0x64, 0x65, 0x6C, 0x22, 0x2C, 0x22, 0x41, 0x72, + 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, + 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, + 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x64, 0x65, + 0x6C, 0x65, 0x74, 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x61, 0x63, + 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x54, 0x78, 0x6E, 0x2E, 0x41, + 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x6C, + 0x6F, 0x63, 0x61, 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x6B, + 0x65, 0x79, 0x20, 0x42, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6C, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x44, 0x6F, + 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, 0x70, 0x61, 0x72, + 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, + 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x2C, 0x20, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x20, 0x6B, 0x65, 0x79, 0x2E, 0x5C, 0x6E, 0x5C, 0x6E, 0x44, 0x65, + 0x6C, 0x65, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x61, 0x20, 0x6B, 0x65, 0x79, + 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6C, + 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x61, 0x62, 0x73, 0x65, 0x6E, 0x74, + 0x20, 0x68, 0x61, 0x73, 0x20, 0x6E, 0x6F, 0x20, 0x65, 0x66, 0x66, 0x65, + 0x63, 0x74, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, + 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x6C, 0x6F, + 0x63, 0x61, 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2E, 0x20, 0x28, + 0x49, 0x6E, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6C, 0x61, + 0x72, 0x2C, 0x20, 0x69, 0x74, 0x20, 0x64, 0x6F, 0x65, 0x73, 0x20, 0x5F, + 0x6E, 0x6F, 0x74, 0x5F, 0x20, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, 0x74, + 0x6F, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x2E, 0x29, 0x22, 0x2C, 0x22, 0x47, + 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, + 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, + 0x30, 0x35, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x61, + 0x70, 0x70, 0x5F, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x5F, 0x64, 0x65, + 0x6C, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x42, + 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, + 0x22, 0x3A, 0x22, 0x64, 0x65, 0x6C, 0x65, 0x74, 0x65, 0x20, 0x6B, 0x65, + 0x79, 0x20, 0x41, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x61, 0x20, 0x67, + 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, + 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6E, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, + 0x61, 0x22, 0x3A, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x3A, 0x20, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x6B, 0x65, 0x79, 0x2E, 0x5C, 0x6E, + 0x5C, 0x6E, 0x44, 0x65, 0x6C, 0x65, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x61, + 0x20, 0x6B, 0x65, 0x79, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, + 0x73, 0x20, 0x61, 0x6C, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x61, 0x62, + 0x73, 0x65, 0x6E, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x6E, 0x6F, 0x20, + 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, + 0x6E, 0x20, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x20, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x2E, 0x20, 0x28, 0x49, 0x6E, 0x20, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x63, 0x75, 0x6C, 0x61, 0x72, 0x2C, 0x20, 0x69, 0x74, 0x20, 0x64, + 0x6F, 0x65, 0x73, 0x20, 0x5F, 0x6E, 0x6F, 0x74, 0x5F, 0x20, 0x63, 0x61, + 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6F, 0x67, + 0x72, 0x61, 0x6D, 0x20, 0x74, 0x6F, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x2E, + 0x29, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, + 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, + 0x64, 0x65, 0x22, 0x3A, 0x31, 0x31, 0x32, 0x2C, 0x22, 0x4E, 0x61, 0x6D, + 0x65, 0x22, 0x3A, 0x22, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5F, 0x68, 0x6F, + 0x6C, 0x64, 0x69, 0x6E, 0x67, 0x5F, 0x67, 0x65, 0x74, 0x22, 0x2C, 0x22, + 0x41, 0x72, 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x55, + 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, + 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x41, 0x72, 0x67, + 0x45, 0x6E, 0x75, 0x6D, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x42, 0x61, 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x22, 0x2C, 0x22, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x46, 0x72, 0x6F, 0x7A, 0x65, 0x6E, 0x22, 0x5D, + 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, 0x6D, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, 0x22, 0x2C, 0x22, 0x44, 0x6F, + 0x63, 0x22, 0x3A, 0x22, 0x72, 0x65, 0x61, 0x64, 0x20, 0x66, 0x72, 0x6F, + 0x6D, 0x20, 0x61, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x73, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x54, + 0x78, 0x6E, 0x2E, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5B, + 0x41, 0x5D, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x20, 0x42, 0x20, 0x68, 0x6F, 0x6C, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x66, + 0x69, 0x65, 0x6C, 0x64, 0x20, 0x58, 0x20, 0x28, 0x69, 0x6D, 0x6D, 0x20, + 0x61, 0x72, 0x67, 0x29, 0x20, 0x3D, 0x5C, 0x75, 0x30, 0x30, 0x33, 0x65, + 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x20, 0x28, 0x74, 0x6F, + 0x70, 0x29, 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x7D, 0x22, 0x2C, + 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3A, 0x22, + 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x61, 0x63, 0x63, 0x6F, + 0x75, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x2C, 0x20, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x20, 0x69, 0x64, 0x2E, 0x20, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6E, 0x3A, 0x20, 0x64, 0x69, 0x64, 0x5F, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x20, 0x66, 0x6C, 0x61, 0x67, 0x20, 0x28, 0x31, 0x20, 0x69, + 0x66, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, + 0x30, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x29, + 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x2E, 0x22, 0x2C, 0x22, 0x49, + 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, + 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, 0x38, 0x20, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x20, 0x68, 0x6F, 0x6C, 0x64, 0x69, 0x6E, 0x67, 0x20, + 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x7D, + 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, + 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, 0x6F, 0x64, + 0x65, 0x22, 0x3A, 0x31, 0x31, 0x33, 0x2C, 0x22, 0x4E, 0x61, 0x6D, 0x65, + 0x22, 0x3A, 0x22, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5F, 0x70, 0x61, 0x72, + 0x61, 0x6D, 0x73, 0x5F, 0x67, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x41, 0x72, + 0x67, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x2E, 0x55, 0x22, 0x2C, 0x22, + 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, + 0x65, 0x22, 0x3A, 0x32, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, 0x75, + 0x6D, 0x22, 0x3A, 0x5B, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x6F, + 0x74, 0x61, 0x6C, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x6D, 0x61, 0x6C, 0x73, 0x22, 0x2C, 0x22, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x46, 0x72, + 0x6F, 0x7A, 0x65, 0x6E, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x55, 0x6E, 0x69, 0x74, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x4E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x55, 0x52, 0x4C, 0x22, 0x2C, 0x22, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x4D, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, + 0x61, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x4D, + 0x61, 0x6E, 0x61, 0x67, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x2C, 0x22, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x46, 0x72, 0x65, 0x65, 0x7A, 0x65, 0x22, + 0x2C, 0x22, 0x41, 0x73, 0x73, 0x65, 0x74, 0x43, 0x6C, 0x61, 0x77, 0x62, + 0x61, 0x63, 0x6B, 0x22, 0x5D, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x45, 0x6E, + 0x75, 0x6D, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x55, + 0x55, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x22, 0x2C, 0x22, + 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x72, 0x65, 0x61, 0x64, 0x20, 0x66, + 0x72, 0x6F, 0x6D, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x54, 0x78, + 0x6E, 0x2E, 0x46, 0x6F, 0x72, 0x65, 0x69, 0x67, 0x6E, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6D, + 0x73, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x58, 0x20, 0x28, 0x69, + 0x6D, 0x6D, 0x20, 0x61, 0x72, 0x67, 0x29, 0x20, 0x3D, 0x5C, 0x75, 0x30, + 0x30, 0x33, 0x65, 0x20, 0x7B, 0x30, 0x20, 0x6F, 0x72, 0x20, 0x31, 0x20, + 0x28, 0x74, 0x6F, 0x70, 0x29, 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, + 0x7D, 0x22, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, + 0x22, 0x3A, 0x22, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x3A, 0x20, 0x74, + 0x78, 0x6E, 0x2E, 0x46, 0x6F, 0x72, 0x65, 0x69, 0x67, 0x6E, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x73, 0x20, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2E, + 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x3A, 0x20, 0x64, 0x69, 0x64, + 0x5F, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x66, 0x6C, 0x61, 0x67, 0x20, + 0x28, 0x31, 0x20, 0x69, 0x66, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, + 0x61, 0x6E, 0x64, 0x20, 0x30, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x77, + 0x69, 0x73, 0x65, 0x29, 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x2E, + 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, + 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x75, 0x69, 0x6E, 0x74, + 0x38, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, + 0x6D, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x69, 0x6E, 0x64, + 0x65, 0x78, 0x7D, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, + 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, + 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x32, 0x30, 0x2C, 0x22, 0x4E, + 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x6D, 0x69, 0x6E, 0x5F, 0x62, 0x61, + 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x22, 0x2C, 0x22, 0x41, 0x72, 0x67, 0x73, + 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6E, 0x73, 0x22, 0x3A, 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, + 0x74, 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, + 0x31, 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x67, 0x65, 0x74, + 0x20, 0x6D, 0x69, 0x6E, 0x69, 0x6D, 0x75, 0x6D, 0x20, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x62, 0x61, 0x6C, 0x61, 0x6E, 0x63, + 0x65, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x61, 0x63, 0x63, 0x6F, + 0x75, 0x6E, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, + 0x64, 0x20, 0x62, 0x79, 0x20, 0x54, 0x78, 0x6E, 0x2E, 0x41, 0x63, 0x63, + 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5B, 0x41, 0x5D, 0x20, 0x69, 0x6E, 0x20, + 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x61, 0x6C, 0x67, 0x6F, 0x73, 0x2E, 0x20, + 0x41, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6E, 0x20, 0x61, 0x63, 0x63, + 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, 0x69, + 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, + 0x74, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6F, 0x6E, 0x43, 0x61, 0x6C, 0x6C, 0x20, 0x74, 0x72, 0x61, 0x6E, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x7A, 0x65, 0x72, + 0x6F, 0x20, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x20, 0x6D, 0x65, 0x61, 0x6E, + 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x6E, 0x64, 0x65, 0x72, + 0x2E, 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x62, + 0x61, 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x66, + 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x5B, 0x41, + 0x53, 0x41, 0x5D, 0x28, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, + 0x64, 0x65, 0x76, 0x65, 0x6C, 0x6F, 0x70, 0x65, 0x72, 0x2E, 0x61, 0x6C, + 0x67, 0x6F, 0x72, 0x61, 0x6E, 0x64, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x64, + 0x6F, 0x63, 0x73, 0x2F, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, + 0x2F, 0x61, 0x73, 0x61, 0x2F, 0x23, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, + 0x2D, 0x6F, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x29, 0x20, 0x61, + 0x6E, 0x64, 0x20, 0x5B, 0x41, 0x70, 0x70, 0x5D, 0x28, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x64, 0x65, 0x76, 0x65, 0x6C, 0x6F, 0x70, + 0x65, 0x72, 0x2E, 0x61, 0x6C, 0x67, 0x6F, 0x72, 0x61, 0x6E, 0x64, 0x2E, + 0x6F, 0x72, 0x67, 0x2F, 0x64, 0x6F, 0x63, 0x73, 0x2F, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x2F, 0x61, 0x73, 0x63, 0x31, 0x2F, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6C, 0x2F, 0x23, 0x6D, 0x69, 0x6E, + 0x69, 0x6D, 0x75, 0x6D, 0x2D, 0x62, 0x61, 0x6C, 0x61, 0x6E, 0x63, 0x65, + 0x2D, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6D, 0x65, 0x6E, 0x74, + 0x2D, 0x66, 0x6F, 0x72, 0x2D, 0x61, 0x2D, 0x73, 0x6D, 0x61, 0x72, 0x74, + 0x2D, 0x63, 0x6F, 0x6E, 0x74, 0x72, 0x61, 0x63, 0x74, 0x29, 0x20, 0x75, + 0x73, 0x61, 0x67, 0x65, 0x2E, 0x20, 0x57, 0x68, 0x65, 0x6E, 0x20, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x6F, 0x72, 0x20, 0x6F, + 0x70, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x69, 0x6E, 0x74, 0x6F, 0x20, 0x61, + 0x6E, 0x20, 0x61, 0x70, 0x70, 0x2C, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6D, + 0x69, 0x6E, 0x69, 0x6D, 0x75, 0x6D, 0x20, 0x62, 0x61, 0x6C, 0x61, 0x6E, + 0x63, 0x65, 0x20, 0x67, 0x72, 0x6F, 0x77, 0x73, 0x20, 0x62, 0x65, 0x66, + 0x6F, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x20, + 0x63, 0x6F, 0x64, 0x65, 0x20, 0x72, 0x75, 0x6E, 0x73, 0x2C, 0x20, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x66, 0x6F, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x69, 0x6E, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x69, 0x73, + 0x20, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6C, 0x65, 0x20, 0x74, 0x68, 0x65, + 0x72, 0x65, 0x2E, 0x20, 0x57, 0x68, 0x65, 0x6E, 0x20, 0x64, 0x65, 0x6C, + 0x65, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x6F, 0x72, 0x20, 0x63, 0x6C, 0x6F, + 0x73, 0x69, 0x6E, 0x67, 0x20, 0x6F, 0x75, 0x74, 0x2C, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x6D, 0x69, 0x6E, 0x69, 0x6D, 0x75, 0x6D, 0x20, 0x62, 0x61, + 0x6C, 0x61, 0x6E, 0x63, 0x65, 0x20, 0x64, 0x65, 0x63, 0x72, 0x65, 0x61, + 0x73, 0x65, 0x73, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x61, 0x70, 0x70, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x65, 0x73, 0x2E, 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, + 0x22, 0x3A, 0x5B, 0x22, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, + 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x32, 0x38, 0x2C, 0x22, 0x4E, + 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, + 0x73, 0x22, 0x3A, 0x22, 0x42, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, + 0x22, 0x3A, 0x31, 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x30, + 0x2C, 0x22, 0x44, 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6F, 0x6C, 0x6C, 0x6F, 0x77, 0x69, + 0x6E, 0x67, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x73, 0x74, 0x61, 0x63, 0x6B, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, + 0x64, 0x69, 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, + 0x7B, 0x76, 0x61, 0x72, 0x75, 0x69, 0x6E, 0x74, 0x20, 0x6C, 0x65, 0x6E, + 0x67, 0x74, 0x68, 0x7D, 0x20, 0x7B, 0x62, 0x79, 0x74, 0x65, 0x73, 0x7D, + 0x22, 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, + 0x22, 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, + 0x75, 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x4F, 0x70, 0x63, + 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x31, 0x32, 0x39, 0x2C, 0x22, 0x4E, 0x61, + 0x6D, 0x65, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x69, 0x6E, 0x74, + 0x22, 0x2C, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x73, 0x22, 0x3A, + 0x22, 0x55, 0x22, 0x2C, 0x22, 0x43, 0x6F, 0x73, 0x74, 0x22, 0x3A, 0x31, + 0x2C, 0x22, 0x53, 0x69, 0x7A, 0x65, 0x22, 0x3A, 0x30, 0x2C, 0x22, 0x44, + 0x6F, 0x63, 0x22, 0x3A, 0x22, 0x70, 0x75, 0x73, 0x68, 0x20, 0x69, 0x6D, + 0x6D, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x20, 0x55, 0x49, 0x4E, 0x54, + 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, + 0x6B, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6E, 0x20, 0x69, 0x6E, 0x74, 0x65, + 0x67, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x49, 0x6D, 0x6D, 0x65, 0x64, 0x69, + 0x61, 0x74, 0x65, 0x4E, 0x6F, 0x74, 0x65, 0x22, 0x3A, 0x22, 0x7B, 0x76, + 0x61, 0x72, 0x75, 0x69, 0x6E, 0x74, 0x20, 0x69, 0x6E, 0x74, 0x7D, 0x22, + 0x2C, 0x22, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x73, 0x22, 0x3A, 0x5B, 0x22, + 0x4C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x56, 0x61, 0x6C, 0x75, + 0x65, 0x73, 0x22, 0x5D, 0x7D, 0x5D, 0x7D, 0x0A, } } diff --git a/test/algodclientv2_test.go b/test/algodclientv2_test.go index 104a48e8..3c458ccf 100644 --- a/test/algodclientv2_test.go +++ b/test/algodclientv2_test.go @@ -5,7 +5,6 @@ import ( "context" "encoding/base64" "fmt" - "path" "github.com/algorand/go-algorand-sdk/client/v2/algod" "github.com/algorand/go-algorand-sdk/client/v2/common/models" @@ -19,32 +18,32 @@ func AlgodClientV2Context(s *godog.Suite) { s.Step(`^mock http responses in "([^"]*)" loaded from "([^"]*)"$`, mockHttpResponsesInLoadedFrom) s.Step(`^expect error string to contain "([^"]*)"$`, expectErrorStringToContain) s.Step(`^we make any Pending Transaction Information call$`, weMakeAnyPendingTransactionInformationCall) - s.Step(`^the parsed Pending Transaction Information response should have sender "([^"]*)"$`, theParsedPendingTransactionInformationResponseShouldHaveSender) + s.Step(`^the parsed Pending Transaction Information response should have sender "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any Pending Transactions Information call$`, weMakeAnyPendingTransactionsInformationCall) - s.Step(`^the parsed Pending Transactions Information response should have sender "([^"]*)"$`, theParsedPendingTransactionsInformationResponseShouldHaveSender) + s.Step(`^the parsed Pending Transactions Information response should have sender "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any Send Raw Transaction call$`, weMakeAnySendRawTransactionCall) - s.Step(`^the parsed Send Raw Transaction response should have txid "([^"]*)"$`, theParsedSendRawTransactionResponseShouldHaveTxid) + s.Step(`^the parsed Send Raw Transaction response should have txid "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any Pending Transactions By Address call$`, weMakeAnyPendingTransactionsByAddressCall) - s.Step(`^the parsed Pending Transactions By Address response should contain an array of len (\d+) and element number (\d+) should have sender "([^"]*)"$`, theParsedPendingTransactionsByAddressResponseShouldContainAnArrayOfLenAndElementNumberShouldHaveSender) + s.Step(`^the parsed Pending Transactions By Address response should contain an array of len (\d+) and element number (\d+) should have sender "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any Node Status call$`, weMakeAnyNodeStatusCall) - s.Step(`^the parsed Node Status response should have a last round of (\d+)$`, theParsedNodeStatusResponseShouldHaveALastRoundOf) + s.Step(`^the parsed Node Status response should have a last round of (\d+)$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any Ledger Supply call$`, weMakeAnyLedgerSupplyCall) - s.Step(`^the parsed Ledger Supply response should have totalMoney (\d+) onlineMoney (\d+) on round (\d+)$`, theParsedLedgerSupplyResponseShouldHaveTotalMoneyOnlineMoneyOnRound) + s.Step(`^the parsed Ledger Supply response should have totalMoney (\d+) onlineMoney (\d+) on round (\d+)$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any Status After Block call$`, weMakeAnyStatusAfterBlockCall) - s.Step(`^the parsed Status After Block response should have a last round of (\d+)$`, theParsedStatusAfterBlockResponseShouldHaveALastRoundOf) + s.Step(`^the parsed Status After Block response should have a last round of (\d+)$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any Account Information call$`, weMakeAnyAccountInformationCall) - s.Step(`^the parsed Account Information response should have address "([^"]*)"$`, theParsedAccountInformationResponseShouldHaveAddress) + s.Step(`^the parsed Account Information response should have address "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any Get Block call$`, weMakeAnyGetBlockCall) s.Step(`^the parsed Get Block response should have rewards pool "([^"]*)"$`, theParsedGetBlockResponseShouldHaveRewardsPool) s.Step(`^we make any Suggested Transaction Parameters call$`, weMakeAnySuggestedTransactionParametersCall) - s.Step(`^the parsed Suggested Transaction Parameters response should have first round valid of (\d+)$`, theParsedSuggestedTransactionParametersResponseShouldHaveFirstRoundValidOf) + s.Step(`^the parsed Suggested Transaction Parameters response should have first round valid of (\d+)$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^expect the path used to be "([^"]*)"$`, expectThePathUsedToBe) s.Step(`^we make a Pending Transaction Information against txid "([^"]*)" with max (\d+)$`, weMakeAPendingTransactionInformationAgainstTxidWithMax) s.Step(`^we make a Pending Transactions By Address call against account "([^"]*)" and max (\d+)$`, weMakeAPendingTransactionsByAddressCallAgainstAccountAndMax) s.Step(`^we make a Status after Block call with round (\d+)$`, weMakeAStatusAfterBlockCallWithRound) s.Step(`^we make an Account Information call against account "([^"]*)"$`, weMakeAnAccountInformationCallAgainstAccount) s.Step(`^we make a Get Block call against block number (\d+)$`, weMakeAGetBlockCallAgainstBlockNumber) - s.Step(`^the parsed Pending Transactions Information response should contain an array of len (\d+) and element number (\d+) should have sender "([^"]*)"$`, theParsedPendingTransactionsInformationResponseShouldContainAnArrayOfLenAndElementNumberShouldHaveSender) + s.Step(`^the parsed Pending Transactions Information response should contain an array of len (\d+) and element number (\d+) should have sender "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make a Pending Transaction Information against txid "([^"]*)" with format "([^"]*)"$`, weMakeAPendingTransactionInformationAgainstTxidWithFormat) s.Step(`^we make a Pending Transaction Information with max (\d+) and format "([^"]*)"$`, weMakeAPendingTransactionInformationWithMaxAndFormat) s.Step(`^we make a Pending Transactions By Address call against account "([^"]*)" and max (\d+) and format "([^"]*)"$`, weMakeAPendingTransactionsByAddressCallAgainstAccountAndMaxAndFormat) @@ -56,170 +55,43 @@ func AlgodClientV2Context(s *godog.Suite) { }) } -var stxResponse types.SignedTxn -var pendingTransactionInformationResponse models.PendingTransactionInfoResponse - func weMakeAnyPendingTransactionInformationCall() error { - algodClient, err := algod.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - pendingTransactionInformationResponse, stxResponse, globalErrForExamination = algodClient.PendingTransactionInformation("").Do(context.Background()) - return nil + return weMakeAnyCallTo("algod", "PendingTransactionInformation") } -func theParsedPendingTransactionInformationResponseShouldHaveSender(sender string) error { - if stxResponse.Txn.Sender.String() != sender { - return fmt.Errorf("expected txn to have sender %s but actual sender was %s", sender, stxResponse.Txn.Sender.String()) - } - return nil -} - -var stxsResponse []types.SignedTxn - func weMakeAnyPendingTransactionsInformationCall() error { - algodClient, err := algod.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - _, stxsResponse, globalErrForExamination = algodClient.PendingTransactions().Do(context.Background()) - return nil -} - -func theParsedPendingTransactionsInformationResponseShouldHaveSender(sender string) error { - if stxsResponse[0].Txn.Sender.String() != sender { - return fmt.Errorf("expected txn to have sender %s but actual sender was %s", sender, stxsResponse[0].Txn.Sender.String()) - } - return nil -} - -func theParsedPendingTransactionsInformationResponseShouldContainAnArrayOfLenAndElementNumberShouldHaveSender(length, idx int, sender string) error { - if len(stxsResponse) != length { - return fmt.Errorf("expected response length %d but received length %d", length, len(stxsResponse)) - } - if stxsResponse[idx].Txn.Sender.String() != sender { - return fmt.Errorf("expected txn %d to have sender %s but real sender was %s", idx, sender, stxsResponse[idx].Txn.Sender.String()) - } - return nil + return weMakeAnyCallTo("algod", "GetPendingTransactions") } -var txidResponse string - func weMakeAnySendRawTransactionCall() error { - algodClient, err := algod.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - txidResponse, globalErrForExamination = algodClient.SendRawTransaction(nil).Do(context.Background()) - return nil -} - -func theParsedSendRawTransactionResponseShouldHaveTxid(txid string) error { - if txidResponse != txid { - return fmt.Errorf("expected txn to have txid %s but actual txid was %s", txidResponse, txid) - } - return nil + return weMakeAnyCallTo("algod", "RawTransaction") } func weMakeAnyPendingTransactionsByAddressCall() error { - algodClient, err := algod.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - _, stxsResponse, globalErrForExamination = algodClient.PendingTransactionsByAddress("").Do(context.Background()) - return nil -} - -func theParsedPendingTransactionsByAddressResponseShouldContainAnArrayOfLenAndElementNumberShouldHaveSender(expectedLen, idx int, expectedSender string) error { - length := len(stxsResponse) - if length != expectedLen { - return fmt.Errorf("length of response %d mismatched expected length %d", length, expectedLen) - } - if stxsResponse[idx].Txn.Sender.String() != expectedSender { - return fmt.Errorf("response sender %s mismatched expected sender %s", stxsResponse[idx].Txn.Sender.String(), expectedSender) - } - return nil + return weMakeAnyCallTo("algod", "GetPendingTransactionsByAddress") } -var statusResponse models.NodeStatus - func weMakeAnyNodeStatusCall() error { - algodClient, err := algod.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - statusResponse, globalErrForExamination = algodClient.Status().Do(context.Background()) - return nil -} - -func theParsedNodeStatusResponseShouldHaveALastRoundOf(lastRound int) error { - if statusResponse.LastRound != uint64(lastRound) { - return fmt.Errorf("response last round %d mismatched expected last round %d", statusResponse.LastRound, lastRound) - } - return nil + return weMakeAnyCallTo("algod", "GetStatus") } -var supplyResponse models.Supply - func weMakeAnyLedgerSupplyCall() error { - algodClient, err := algod.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - supplyResponse, globalErrForExamination = algodClient.Supply().Do(context.Background()) - return nil -} - -func theParsedLedgerSupplyResponseShouldHaveTotalMoneyOnlineMoneyOnRound(total, online, round int) error { - if supplyResponse.TotalMoney != uint64(total) { - return fmt.Errorf("response total money %d mismatched expected total %d", supplyResponse.TotalMoney, uint64(total)) - } - if supplyResponse.OnlineMoney != uint64(online) { - return fmt.Errorf("response online money %d mismatched expected online money %d", supplyResponse.OnlineMoney, uint64(online)) - } - if supplyResponse.Round != uint64(round) { - return fmt.Errorf("response round %d mismatched expected round %d", supplyResponse.Round, uint64(round)) - } - return nil + return weMakeAnyCallTo("algod", "GetSupply") } func weMakeAnyStatusAfterBlockCall() error { - algodClient, err := algod.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - statusResponse, globalErrForExamination = algodClient.StatusAfterBlock(0).Do(context.Background()) - return nil + return weMakeAnyCallTo("algod", "WaitForBlock") } -func theParsedStatusAfterBlockResponseShouldHaveALastRoundOf(lastRound int) error { - if statusResponse.LastRound != uint64(lastRound) { - return fmt.Errorf("response last round %d mismatched expected last round %d", statusResponse.LastRound, lastRound) - } - return nil -} - -var accountResponse models.Account - func weMakeAnyAccountInformationCall() error { - algodClient, err := algod.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - accountResponse, globalErrForExamination = algodClient.AccountInformation("").Do(context.Background()) - return nil -} - -func theParsedAccountInformationResponseShouldHaveAddress(address string) error { - if accountResponse.Address != address { - return fmt.Errorf("response address %s mismatched expected address %s", accountResponse.Address, address) - } - return nil + return weMakeAnyCallTo("algod", "GetAccountInformation") } var blockResponse types.Block func weMakeAnyGetBlockCall() error { + // This endpoint requires some sort of base64 decoding for the verification step and it isn't working properly. + //return weMakeAnyCallTo("algod", "GetBlock") algodClient, err := algod.MakeClient(mockServer.URL, "") if err != nil { return err @@ -240,22 +112,8 @@ func theParsedGetBlockResponseShouldHaveRewardsPool(pool string) error { return nil } -var suggestedParamsResponse types.SuggestedParams - func weMakeAnySuggestedTransactionParametersCall() error { - algodClient, err := algod.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - suggestedParamsResponse, globalErrForExamination = algodClient.SuggestedParams().Do(context.Background()) - return nil -} - -func theParsedSuggestedTransactionParametersResponseShouldHaveFirstRoundValidOf(firstValid int) error { - if suggestedParamsResponse.FirstRoundValid != types.Round(firstValid) { - return fmt.Errorf("response first round valid %d mismatched expected first round valid %d", suggestedParamsResponse.FirstRoundValid, types.Round(firstValid)) - } - return nil + return weMakeAnyCallTo("algod", "TransactionParams") } func weMakeAPendingTransactionInformationAgainstTxidWithMax(txid string, max int) error { @@ -366,6 +224,5 @@ func parsedDryrunResponseShouldHave(key string, action int) error { } func mockHttpResponsesInLoadedFrom(jsonfiles, directory string) error { - fullPath := path.Join("./features/resources/", directory) - return mockHttpResponsesInLoadedFromHelper(jsonfiles, fullPath, 0) + return mockHttpResponsesInLoadedFromWithStatus(jsonfiles, directory, 200) } diff --git a/test/indexer_unit_test.go b/test/indexer_unit_test.go index 6f72e4ba..1324ed33 100644 --- a/test/indexer_unit_test.go +++ b/test/indexer_unit_test.go @@ -3,33 +3,30 @@ package test import ( "context" "encoding/base64" - "fmt" - "github.com/algorand/go-algorand-sdk/client/v2/common/models" "github.com/algorand/go-algorand-sdk/client/v2/indexer" "github.com/cucumber/godog" ) func IndexerUnitTestContext(s *godog.Suite) { s.Step(`^we make any LookupAssetBalances call$`, weMakeAnyLookupAssetBalancesCall) - s.Step(`^the parsed LookupAssetBalances response should be valid on round (\d+), and contain an array of len (\d+) and element number (\d+) should have address "([^"]*)" amount (\d+) and frozen state "([^"]*)"$`, theParsedLookupAssetBalancesResponseShouldBeValidOnRoundAndContainAnArrayOfLenAndElementNumberShouldHaveAddressAmountAndFrozenState) + s.Step(`^the parsed LookupAssetBalances response should be valid on round (\d+), and contain an array of len (\d+) and element number (\d+) should have address "([^"]*)" amount (\d+) and frozen state "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any LookupAssetTransactions call$`, weMakeAnyLookupAssetTransactionsCall) - s.Step(`^the parsed LookupAssetTransactions response should be valid on round (\d+), and contain an array of len (\d+) and element number (\d+) should have sender "([^"]*)"$`, theParsedLookupAssetTransactionsResponseShouldBeValidOnRoundAndContainAnArrayOfLenAndElementNumberShouldHaveSender) + s.Step(`^the parsed LookupAssetTransactions response should be valid on round (\d+), and contain an array of len (\d+) and element number (\d+) should have sender "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any LookupAccountTransactions call$`, weMakeAnyLookupAccountTransactionsCall) - s.Step(`^the parsed LookupAccountTransactions response should be valid on round (\d+), and contain an array of len (\d+) and element number (\d+) should have sender "([^"]*)"$`, theParsedLookupAccountTransactionsResponseShouldBeValidOnRoundAndContainAnArrayOfLenAndElementNumberShouldHaveSender) + s.Step(`^the parsed LookupAccountTransactions response should be valid on round (\d+), and contain an array of len (\d+) and element number (\d+) should have sender "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any LookupBlock call$`, weMakeAnyLookupBlockCall) - s.Step(`^the parsed LookupBlock response should have proposer "([^"]*)"$`, theParsedLookupBlockResponseShouldHaveProposer) - s.Step(`^the parsed LookupBlock response should have previous block hash "([^"]*)"$`, theParsedLookupBlockResponseShouldHavePreviousBlockHash) + s.Step(`^the parsed LookupBlock response should have previous block hash "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any LookupAccountByID call$`, weMakeAnyLookupAccountByIDCall) - s.Step(`^the parsed LookupAccountByID response should have address "([^"]*)"$`, theParsedLookupAccountByIDResponseShouldHaveAddress) + s.Step(`^the parsed LookupAccountByID response should have address "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any LookupAssetByID call$`, weMakeAnyLookupAssetByIDCall) - s.Step(`^the parsed LookupAssetByID response should have index (\d+)$`, theParsedLookupAssetByIDResponseShouldHaveIndex) + s.Step(`^the parsed LookupAssetByID response should have index (\d+)$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any SearchAccounts call$`, weMakeAnySearchAccountsCall) - s.Step(`^the parsed SearchAccounts response should be valid on round (\d+) and the array should be of len (\d+) and the element at index (\d+) should have address "([^"]*)"$`, theParsedSearchAccountsResponseShouldBeValidOnRoundAndTheArrayShouldBeOfLenAndTheElementAtIndexShouldHaveAddress) + s.Step(`^the parsed SearchAccounts response should be valid on round (\d+) and the array should be of len (\d+) and the element at index (\d+) should have address "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any SearchForTransactions call$`, weMakeAnySearchForTransactionsCall) - s.Step(`^the parsed SearchForTransactions response should be valid on round (\d+) and the array should be of len (\d+) and the element at index (\d+) should have sender "([^"]*)"$`, theParsedSearchForTransactionsResponseShouldBeValidOnRoundAndTheArrayShouldBeOfLenAndTheElementAtIndexShouldHaveSender) + s.Step(`^the parsed SearchForTransactions response should be valid on round (\d+) and the array should be of len (\d+) and the element at index (\d+) should have sender "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make any SearchForAssets call$`, weMakeAnySearchForAssetsCall) - s.Step(`^the parsed SearchForAssets response should be valid on round (\d+) and the array should be of len (\d+) and the element at index (\d+) should have asset index (\d+)$`, theParsedSearchForAssetsResponseShouldBeValidOnRoundAndTheArrayShouldBeOfLenAndTheElementAtIndexShouldHaveAssetIndex) + s.Step(`^the parsed SearchForAssets response should be valid on round (\d+) and the array should be of len (\d+) and the element at index (\d+) should have asset index (\d+)$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make a Lookup Asset Balances call against asset index (\d+) with limit (\d+) afterAddress "([^"]*)" round (\d+) currencyGreaterThan (\d+) currencyLessThan (\d+)$`, weMakeALookupAssetBalancesCallAgainstAssetIndexWithLimitLimitAfterAddressRoundCurrencyGreaterThanCurrencyLessThan) s.Step(`^we make a Lookup Asset Transactions call against asset index (\d+) with NotePrefix "([^"]*)" TxType "([^"]*)" SigType "([^"]*)" txid "([^"]*)" round (\d+) minRound (\d+) maxRound (\d+) limit (\d+) beforeTime "([^"]*)" afterTime "([^"]*)" currencyGreaterThan (\d+) currencyLessThan (\d+) address "([^"]*)" addressRole "([^"]*)" ExcluseCloseTo "([^"]*)"$`, deprecatedWeMakeALookupAssetTransactionsCallAgainstAssetIndexWithNotePrefixTxTypeSigTypeTxidRoundMinRoundMaxRoundLimitBeforeTimeAfterTimeCurrencyGreaterThanCurrencyLessThanAddressAddressRoleExcluseCloseTo) s.Step(`^we make a Search Accounts call with assetID (\d+) limit (\d+) currencyGreaterThan (\d+) currencyLessThan (\d+) and round (\d+)$`, weMakeASearchAccountsCallWithAssetIDLimitCurrencyGreaterThanCurrencyLessThanAndRound) @@ -45,290 +42,48 @@ func IndexerUnitTestContext(s *godog.Suite) { s.Step(`^we make a Lookup Account Transactions call against account "([^"]*)" with NotePrefix "([^"]*)" TxType "([^"]*)" SigType "([^"]*)" txid "([^"]*)" round (\d+) minRound (\d+) maxRound (\d+) limit (\d+) beforeTime "([^"]*)" afterTime "([^"]*)" currencyGreaterThan (\d+) currencyLessThan (\d+) assetIndex (\d+) rekeyTo "([^"]*)"$`, weMakeALookupAccountTransactionsCallAgainstAccountWithNotePrefixTxTypeSigTypeTxidRoundMinRoundMaxRoundLimitBeforeTimeAfterTimeCurrencyGreaterThanCurrencyLessThanAssetIndexRekeyTo) s.Step(`^we make a Search Accounts call with assetID (\d+) limit (\d+) currencyGreaterThan (\d+) currencyLessThan (\d+) round (\d+) and authenticating address "([^"]*)"$`, weMakeASearchAccountsCallWithAssetIDLimitCurrencyGreaterThanCurrencyLessThanRoundAndAuthenticatingAddress) s.Step(`^we make a Search For Transactions call with account "([^"]*)" NotePrefix "([^"]*)" TxType "([^"]*)" SigType "([^"]*)" txid "([^"]*)" round (\d+) minRound (\d+) maxRound (\d+) limit (\d+) beforeTime "([^"]*)" afterTime "([^"]*)" currencyGreaterThan (\d+) currencyLessThan (\d+) assetIndex (\d+) addressRole "([^"]*)" ExcluseCloseTo "([^"]*)" rekeyTo "([^"]*)"$`, weMakeASearchForTransactionsCallWithAccountNotePrefixTxTypeSigTypeTxidRoundMinRoundMaxRoundLimitBeforeTimeAfterTimeCurrencyGreaterThanCurrencyLessThanAssetIndexAddressRoleExcluseCloseToRekeyTo) - s.Step(`^the parsed SearchAccounts response should be valid on round (\d+) and the array should be of len (\d+) and the element at index (\d+) should have authorizing address "([^"]*)"$`, theParsedSearchAccountsResponseShouldBeValidOnRoundAndTheArrayShouldBeOfLenAndTheElementAtIndexShouldHaveAuthorizingAddress) - s.Step(`^the parsed SearchForTransactions response should be valid on round (\d+) and the array should be of len (\d+) and the element at index (\d+) should have rekey-to "([^"]*)"$`, theParsedSearchForTransactionsResponseShouldBeValidOnRoundAndTheArrayShouldBeOfLenAndTheElementAtIndexShouldHaveRekeyto) + s.Step(`^the parsed SearchAccounts response should be valid on round (\d+) and the array should be of len (\d+) and the element at index (\d+) should have authorizing address "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) + s.Step(`^the parsed SearchForTransactions response should be valid on round (\d+) and the array should be of len (\d+) and the element at index (\d+) should have rekey-to "([^"]*)"$`, theParsedResponseShouldEqualTheMockResponse) s.Step(`^we make a Lookup Asset Transactions call against asset index (\d+) with NotePrefix "([^"]*)" TxType "([^"]*)" SigType "([^"]*)" txid "([^"]*)" round (\d+) minRound (\d+) maxRound (\d+) limit (\d+) beforeTime "([^"]*)" afterTime "([^"]*)" currencyGreaterThan (\d+) currencyLessThan (\d+) address "([^"]*)" addressRole "([^"]*)" ExcluseCloseTo "([^"]*)" RekeyTo "([^"]*)"$`, weMakeALookupAssetTransactionsCallAgainstAssetIndexWithNotePrefixTxTypeSigTypeTxidRoundMinRoundMaxRoundLimitBeforeTimeAfterTimeCurrencyGreaterThanCurrencyLessThanAddressAddressRoleExcluseCloseToRekeyTo) s.BeforeScenario(func(interface{}) { globalErrForExamination = nil }) } -var responseValidRound uint64 -var assetBalancesResponse []models.MiniAssetHolding - func weMakeAnyLookupAssetBalancesCall() error { - indexerClient, err := indexer.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - var result models.AssetBalancesResponse - result, globalErrForExamination = indexerClient.LookupAssetBalances(0).Do(context.Background()) - responseValidRound = result.CurrentRound - assetBalancesResponse = result.Balances - return nil -} - -func theParsedLookupAssetBalancesResponseShouldBeValidOnRoundAndContainAnArrayOfLenAndElementNumberShouldHaveAddressAmountAndFrozenState(round, length, idx int, address string, amount int, frozenState string) error { - if responseValidRound != uint64(round) { - return fmt.Errorf("response round %d did not match expected round %d", responseValidRound, uint64(round)) - } - realLen := len(assetBalancesResponse) - if realLen != length { - return fmt.Errorf("response length %d did not match expected length %d", realLen, length) - } - scrutinizedElement := assetBalancesResponse[idx] - if scrutinizedElement.Address != address { - return fmt.Errorf("response address %s did not match expected address %s", scrutinizedElement.Address, address) - } - if scrutinizedElement.Amount != uint64(amount) { - return fmt.Errorf("response amount %d did not match expected amount %d", scrutinizedElement.Amount, amount) - } - isFrozenBool := frozenState == "true" - if scrutinizedElement.IsFrozen != isFrozenBool { - return fmt.Errorf("response frozen state %v did not match expected frozen state %v", scrutinizedElement.IsFrozen, isFrozenBool) - } - return nil + return weMakeAnyCallTo("indexer", "lookupAssetBalances") } -var assetTransactionsResponse []models.Transaction - func weMakeAnyLookupAssetTransactionsCall() error { - indexerClient, err := indexer.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - var response models.TransactionsResponse - response, globalErrForExamination = indexerClient.LookupAssetTransactions(0).Do(context.Background()) - assetTransactionsResponse = response.Transactions - responseValidRound = response.CurrentRound - return nil -} - -func theParsedLookupAssetTransactionsResponseShouldBeValidOnRoundAndContainAnArrayOfLenAndElementNumberShouldHaveSender(round, length, idx int, sender string) error { - if responseValidRound != uint64(round) { - return fmt.Errorf("response round %d did not match expected round %d", responseValidRound, uint64(round)) - } - realLen := len(assetTransactionsResponse) - if realLen != length { - return fmt.Errorf("response length %d did not match expected length %d", realLen, length) - } - scrutinizedElement := assetTransactionsResponse[idx] - if scrutinizedElement.Sender != sender { - return fmt.Errorf("response sender %s did not match expected sender %s", scrutinizedElement.Sender, sender) - } - return nil + return weMakeAnyCallTo("indexer", "lookupAssetTransactions") } -var lookupAccountTransactionsResponse []models.Transaction - func weMakeAnyLookupAccountTransactionsCall() error { - indexerClient, err := indexer.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - var response models.TransactionsResponse - response, globalErrForExamination = indexerClient.LookupAccountTransactions("").Do(context.Background()) - lookupAccountTransactionsResponse = response.Transactions - responseValidRound = response.CurrentRound - return nil + return weMakeAnyCallTo("indexer", "lookupAccountTransactions") } -func theParsedLookupAccountTransactionsResponseShouldBeValidOnRoundAndContainAnArrayOfLenAndElementNumberShouldHaveSender(round, length, idx int, sender string) error { - if responseValidRound != uint64(round) { - return fmt.Errorf("response round %d did not match expected round %d", responseValidRound, uint64(round)) - } - realLen := len(lookupAccountTransactionsResponse) - if realLen != length { - return fmt.Errorf("response length %d did not match expected length %d", realLen, length) - } - if length == 0 { - return nil - } - scrutinizedElement := lookupAccountTransactionsResponse[idx] - if scrutinizedElement.Sender != sender { - return fmt.Errorf("response sender %s did not match expected sender %s", scrutinizedElement.Sender, sender) - } - return nil -} - -var lookupBlockResponse models.Block - func weMakeAnyLookupBlockCall() error { - indexerClient, err := indexer.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - lookupBlockResponse, globalErrForExamination = indexerClient.LookupBlock(0).Do(context.Background()) - return nil -} - -func theParsedLookupBlockResponseShouldHaveProposer(proposer string) error { - if lookupBlockResponse.Proposer != proposer { - return fmt.Errorf("response proposer %s did not match expected proposer %s", lookupBlockResponse.Proposer, proposer) - } - return nil -} - -func theParsedLookupBlockResponseShouldHavePreviousBlockHash(blockhash string) error { - blockHashString := base64.StdEncoding.EncodeToString(lookupBlockResponse.PreviousBlockHash) - if blockHashString != blockhash { - return fmt.Errorf("expected blockhash %s but got block hash %s", blockhash, blockHashString) - } - return nil + return weMakeAnyCallTo("indexer", "lookupBlock") } -var lookupAccountByIDResponse models.Account - func weMakeAnyLookupAccountByIDCall() error { - indexerClient, err := indexer.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - responseValidRound, lookupAccountByIDResponse, globalErrForExamination = indexerClient.LookupAccountByID("").Do(context.Background()) - return nil -} - -func theParsedLookupAccountByIDResponseShouldHaveAddress(address string) error { - if lookupAccountByIDResponse.Address != address { - return fmt.Errorf("response address %s did not match expected address %s", lookupAccountByIDResponse.Address, address) - } - return nil + return weMakeAnyCallTo("indexer", "lookupAccountByID") } -var lookupAssetByIDResponse models.Asset - func weMakeAnyLookupAssetByIDCall() error { - indexerClient, err := indexer.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - responseValidRound, lookupAssetByIDResponse, globalErrForExamination = indexerClient.LookupAssetByID(0).Do(context.Background()) - return nil -} - -func theParsedLookupAssetByIDResponseShouldHaveIndex(index int) error { - if lookupAssetByIDResponse.Index != uint64(index) { - return fmt.Errorf("response index %d did not match expected index %d", lookupAssetByIDResponse.Index, uint64(index)) - } - return nil + return weMakeAnyCallTo("indexer", "lookupAssetByID") } -var searchAccountsResponse []models.Account - func weMakeAnySearchAccountsCall() error { - indexerClient, err := indexer.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - var result models.AccountsResponse - result, globalErrForExamination = indexerClient.SearchAccounts().Do(context.Background()) - responseValidRound = result.CurrentRound - searchAccountsResponse = result.Accounts - return nil -} - -func theParsedSearchAccountsResponseShouldBeValidOnRoundAndTheArrayShouldBeOfLenAndTheElementAtIndexShouldHaveAddress(round, length, idx int, address string) error { - if responseValidRound != uint64(round) { - return fmt.Errorf("response round %d did not match expected round %d", responseValidRound, uint64(round)) - } - realLen := len(searchAccountsResponse) - if realLen != length { - return fmt.Errorf("response length %d did not match expected length %d", realLen, length) - } - scrutinizedElement := searchAccountsResponse[idx] - if scrutinizedElement.Address != address { - return fmt.Errorf("response address %s did not match expected address %s", scrutinizedElement.Address, address) - } - return nil -} - -func theParsedSearchAccountsResponseShouldBeValidOnRoundAndTheArrayShouldBeOfLenAndTheElementAtIndexShouldHaveAuthorizingAddress(round, length, idx int, address string) error { - if responseValidRound != uint64(round) { - return fmt.Errorf("response round %d did not match expected round %d", responseValidRound, uint64(round)) - } - realLen := len(searchAccountsResponse) - if realLen != length { - return fmt.Errorf("response length %d did not match expected length %d", realLen, length) - } - scrutinizedElement := searchAccountsResponse[idx] - if scrutinizedElement.AuthAddr != address { - return fmt.Errorf("response auth-address %s did not match expected auth-address %s", scrutinizedElement.AuthAddr, address) - } - return nil + return weMakeAnyCallTo("indexer", "searchForAccounts") } -var searchTransactionsResponse []models.Transaction - func weMakeAnySearchForTransactionsCall() error { - indexerClient, err := indexer.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - var result models.TransactionsResponse - result, globalErrForExamination = indexerClient.SearchForTransactions().Do(context.Background()) - responseValidRound = result.CurrentRound - searchTransactionsResponse = result.Transactions - return nil -} - -func theParsedSearchForTransactionsResponseShouldBeValidOnRoundAndTheArrayShouldBeOfLenAndTheElementAtIndexShouldHaveSender(round, length, idx int, sender string) error { - if responseValidRound != uint64(round) { - return fmt.Errorf("response round %d did not match expected round %d", responseValidRound, uint64(round)) - } - realLen := len(searchTransactionsResponse) - if realLen != length { - return fmt.Errorf("response length %d did not match expected length %d", realLen, length) - } - scrutinizedElement := searchTransactionsResponse[idx] - if scrutinizedElement.Sender != sender { - return fmt.Errorf("response sender %s did not match expected sender %s", scrutinizedElement.Sender, sender) - } - return nil -} - -func theParsedSearchForTransactionsResponseShouldBeValidOnRoundAndTheArrayShouldBeOfLenAndTheElementAtIndexShouldHaveRekeyto(round, length, idx int, rekeyTo string) error { - if responseValidRound != uint64(round) { - return fmt.Errorf("response round %d did not match expected round %d", responseValidRound, uint64(round)) - } - realLen := len(searchTransactionsResponse) - if realLen != length { - return fmt.Errorf("response length %d did not match expected length %d", realLen, length) - } - scrutinizedElement := searchTransactionsResponse[idx] - if scrutinizedElement.RekeyTo != rekeyTo { - return fmt.Errorf("response rekey-to %s did not match expected rekey-to %s", scrutinizedElement.RekeyTo, rekeyTo) - } - return nil + return weMakeAnyCallTo("indexer", "searchForTransactions") } -var searchAssetsResponse []models.Asset - func weMakeAnySearchForAssetsCall() error { - indexerClient, err := indexer.MakeClient(mockServer.URL, "") - if err != nil { - return err - } - var resp models.AssetsResponse - resp, globalErrForExamination = indexerClient.SearchForAssets().Do(context.Background()) - responseValidRound = resp.CurrentRound - searchAssetsResponse = resp.Assets - - return nil -} - -func theParsedSearchForAssetsResponseShouldBeValidOnRoundAndTheArrayShouldBeOfLenAndTheElementAtIndexShouldHaveAssetIndex(round, length, idx, expectedIndex int) error { - if responseValidRound != uint64(round) { - return fmt.Errorf("response round %d did not match expected round %d", responseValidRound, uint64(round)) - } - realLen := len(searchAssetsResponse) - if realLen != length { - return fmt.Errorf("response length %d did not match expected length %d", realLen, length) - } - scrutinizedElement := searchAssetsResponse[idx] - if scrutinizedElement.Index != uint64(expectedIndex) { - return fmt.Errorf("response asset index %d did not match expected index %d", scrutinizedElement.Index, uint64(expectedIndex)) - } - return nil + return weMakeAnyCallTo("indexer", "searchForAssets") } func weMakeALookupAssetBalancesCallAgainstAssetIndexWithLimitLimitAfterAddressRoundCurrencyGreaterThanCurrencyLessThan(index, limit int, _ string, round, currencyGreater, currencyLesser int) error { @@ -355,7 +110,24 @@ func weMakeALookupAssetTransactionsCallAgainstAssetIndexWithNotePrefixTxTypeSigT return err } rekeyToBool := rekeyTo == "true" - _, globalErrForExamination = indexerClient.LookupAssetTransactions(uint64(assetIndex)).NotePrefix(notePrefixBytes).TxType(txType).SigType(sigType).TXID(txid).Round(uint64(round)).MinRound(uint64(minRound)).MaxRound(uint64(maxRound)).Limit(uint64(limit)).BeforeTimeString(beforeTime).AfterTimeString(afterTime).CurrencyGreaterThan(uint64(currencyGreater)).CurrencyLessThan(uint64(currencyLesser)).AddressString(address).AddressRole(addressRole).ExcludeCloseTo(excludeCloseToBool).RekeyTo(rekeyToBool).Do(context.Background()) + _, globalErrForExamination = indexerClient.LookupAssetTransactions(uint64(assetIndex)). + NotePrefix(notePrefixBytes). + TxType(txType). + SigType(sigType). + TXID(txid). + Round(uint64(round)). + MinRound(uint64(minRound)). + MaxRound(uint64(maxRound)). + Limit(uint64(limit)). + BeforeTimeString(beforeTime). + AfterTimeString(afterTime). + CurrencyGreaterThan(uint64(currencyGreater)). + CurrencyLessThan(uint64(currencyLesser)). + AddressString(address). + AddressRole(addressRole). + ExcludeCloseTo(excludeCloseToBool). + RekeyTo(rekeyToBool). + Do(context.Background()) return nil } diff --git a/test/responses_unit_test.go b/test/responses_unit_test.go index b479267f..46e4e7f1 100644 --- a/test/responses_unit_test.go +++ b/test/responses_unit_test.go @@ -24,8 +24,7 @@ var response interface{} // @unit // @unit.responses -func mockHttpResponsesInLoadedFromWithStatus( - jsonfile, loadedFrom /* generated_responses*/ string, status int) error { +func mockHttpResponsesInLoadedFromWithStatus(jsonfile, loadedFrom string, status int) error { directory := path.Join("./features/resources/", loadedFrom) baselinePath = path.Join(directory, jsonfile) var err error @@ -51,7 +50,7 @@ func weMakeAnyCallTo(client /* algod/indexer */, endpoint string) (err error) { switch endpoint { case "lookupAccountByID": round, something, err = indexerC.LookupAccountByID("").Do(context.Background()) - response = models.LookupAccountByIDResponse{ + response = models.AccountResponse{ CurrentRound: round, Account: something.(models.Account), } @@ -65,7 +64,7 @@ func weMakeAnyCallTo(client /* algod/indexer */, endpoint string) (err error) { response, err = indexerC.LookupAssetBalances(10).Do(context.Background()) case "lookupAssetByID": round, something, err = indexerC.LookupAssetByID(10).Do(context.Background()) - response = models.LookupAssetByIDResponse{ + response = models.AssetResponse{ CurrentRound: round, Asset: something.(models.Asset), } @@ -77,6 +76,8 @@ func weMakeAnyCallTo(client /* algod/indexer */, endpoint string) (err error) { response, err = indexerC.LookupAssetTransactions(10).Do(context.Background()) case "searchForTransactions": response, err = indexerC.SearchForTransactions().Do(context.Background()) + case "lookupBlock": + response, err = indexerC.LookupBlock(10).Do(context.Background()) case "any": // This is an error case // pickup the error as the response @@ -88,6 +89,8 @@ func weMakeAnyCallTo(client /* algod/indexer */, endpoint string) (err error) { switch endpoint { case "GetStatus": response, err = algodC.Status().Do(context.Background()) + case "GetBlock": + response, err = algodC.Block(10).Do(context.Background()) case "WaitForBlock": response, err = algodC.StatusAfterBlock(10).Do(context.Background()) case "TealCompile": @@ -101,14 +104,16 @@ func weMakeAnyCallTo(client /* algod/indexer */, endpoint string) (err error) { case "TransactionParams": var sParams types.SuggestedParams sParams, err = algodC.SuggestedParams().Do(context.Background()) - response = models.TransactionParams{ + response = models.TransactionParametersResponse{ ConsensusVersion: sParams.ConsensusVersion, Fee: uint64(sParams.Fee), - GenesisID: sParams.GenesisID, - Genesishash: sParams.GenesisHash, + GenesisId: sParams.GenesisID, + GenesisHash: sParams.GenesisHash, LastRound: uint64(sParams.FirstRoundValid), MinFee: sParams.MinFee, } + case "GetAccountInformation": + response, err = algodC.AccountInformation("acct").Do(context.Background()) case "GetApplicationByID": response, err = algodC.GetApplicationByID(10).Do(context.Background()) case "GetAssetByID": diff --git a/types/signature.go b/types/signature.go index 738bb19a..3ca84341 100644 --- a/types/signature.go +++ b/types/signature.go @@ -74,4 +74,3 @@ func (lsig LogicSig) Blank() bool { } return true } -