@argonprotocol/mainchain 1.4.9 → 1.4.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/mainchain/mainchain/client/nodejs/lib/index.cjs","../src/index.ts","../metadata.json","../runtime_version.json","../genesis.json","../src/WageProtector.ts","../src/utils.ts","../src/TxResult.ts","../src/TxSubmitter.ts","../src/keyringUtils.ts","../src/header.ts","../src/Vault.ts","../src/convert.ts","../src/BitcoinLock.ts","../src/PriceIndex.ts","../src/EvmContracts.ts","../../../chains/ethereum/contracts/artifacts/contracts/ArgonToken.sol/ArgonToken.json","../../../chains/ethereum/contracts/artifacts/contracts/ArgonotToken.sol/ArgonotToken.json","../../../chains/ethereum/contracts/artifacts/contracts/MintingGateway.sol/MintingGateway.json","../../../chains/ethereum/contracts/artifacts/contracts/ProxyArtifacts.sol/ProxyAdmin.json","../../../chains/ethereum/contracts/artifacts/contracts/ProxyArtifacts.sol/TransparentUpgradeableProxy.json","../../../chains/ethereum/contracts/generated.ts","../../../chains/ethereum/contracts/hashing.ts","../../../chains/ethereum/contracts/index.ts","../src/EthereumProof.ts","../src/EthereumExecution.ts","../src/EthereumGatewayActivity.ts","../src/EthereumGatewayActivityProof.ts","../src/EthereumGatewayBackfill.ts","../src/EthereumBeaconApi.ts","../src/EthereumBeaconSync.ts"],"names":["result","BigNumber","SATS_PER_BTC","hashMintingGatewayTransferOutOfArgonRequest","hashMintingGatewayMintingAuthorization","receipts","loaded","camelcaseKeys"],"mappings":"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E,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACE,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACF;AhB++CU;AACA;AiB9oEV;AACE,EAAA;AACA,EAAA;AACA,EAAA;AACO,EAAA;AACL,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACE,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACF;AjBgpEU;AACA;AkB/yFV;AACE,EAAA;AACA,EAAA;AACA,EAAA;AACO,EAAA;AACL,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACgB,gBAAA;AACZ,kBAAA;AACkB,kBAAA;AACR,kBAAA;AACA,gBAAA;AACV,gBAAA;AACA,kBAAA;AACkB,kBAAA;AACR,kBAAA;AACA,gBAAA;AACV,gBAAA;AACA,kBAAA;AACkB,kBAAA;AACR,kBAAA;AACA,gBAAA;AACV,cAAA;AACF,cAAA;AACgB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACE,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACF;AlBizFU;AACA;AmB/hJV;AACE,EAAA;AACA,EAAA;AACA,EAAA;AACO,EAAA;AACL,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACF;AnBiiJU;AACA;AoBxqJV;AACE,EAAA;AACA,EAAA;AACA,EAAA;AACO,EAAA;AACL,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACE,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACF;ApB0qJU;AACA;AqBzyJG;AACX,EAAA;AACQ,IAAA;AACN,IAAA;AACA,IAAA;AACF,EAAA;AACQ,EAAA;AACR,EAAA;AACQ,IAAA;AACN,IAAA;AACM,IAAA;AACR,EAAA;AACA,EAAA;AACQ,IAAA;AACN,IAAA;AACM,IAAA;AACR,EAAA;AACA,EAAA;AACQ,IAAA;AACN,IAAA;AACI,MAAA;AACA,MAAA;AACA,MAAA;AACJ,IAAA;AACM,IAAA;AACR,EAAA;AACA,EAAA;AACQ,IAAA;AACN,IAAA;AACI,MAAA;AACA,MAAA;AACA,MAAA;AACJ,IAAA;AACM,IAAA;AACR,E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ACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AAES;AACA,EAAA;AACT;AAEM;AACI,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AAEM;AACI,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AACM;AACI,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AACM;AACD,EAAA;AACK,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AACM;AACD,EAAA;AACK,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AACM;AACD,EAAA;AACK,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AACM;AACD,EAAA;AACK,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AACM;AACD,EAAA;AACK,EAAA;AACA,EAAA;AACV;AACM;AACD,EAAA;AACK,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AAEM;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AACM;AACA;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AAGgB;AACP,EAAA;AACF,IAAA;AACF,IAAA;AACH,EAAA;AACF;AAEgB;AAGP,EAAA;AACT;AAEgB;AAGP,EAAA;AACT;AAEgB;AAGP,EAAA;AACT;AAEgB;AAGP,EAAA;AACL,IAAA;AACK,MAAA;AACF,MAAA;AACH,IAAA;AACF,EAAA;AACF;AAEgB;AAGP,EAAA;AACL,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACD,IAAA;AACH,EAAA;AACF;AAEgB;AAIP,EAAA;AACL,IAAA;AACA,IAAA;AACM,IAAA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,MAAA;AACF,IAAA;AACF,EAAA;AAEO,EAAA;AACL,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AAEA;AACM,EAAA;AAEC,EAAA;AACG,IAAA;AAUD,IAAA;AACH,MAAA;AACF,IAAA;AAEA,IAAA;AACM,MAAA;AACF,QAAA;AACF,MAAA;AACI,MAAA;AACF,QAAA;AACF,MAAA;AAEA,MAAA;AACD,IAAA;AACD,IAAA;AACF,EAAA;AAEI,EAAA;AACF,IAAA;AACF,EAAA;AACE,IAAA;AACM,IAAA;AACR,EAAA;AACF;AAES;AAEL,EAAA;AAEJ;AAES;AACD,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AAEJ,IAAA;AACE,MAAA;AACF,IAAA;AAEA,IAAA;AACE,EAAA;AAEG,EAAA;AACT;AAES;AACD,EAAA;AAGJ,EAAA;AAGJ;A9BsxPU;AACA;AC1sQD;AAGA;AACT;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACK;AA+BP;AACQ,EAAA;AACR;AAQA;AACM,EAAA;AACA,EAAA;AACF,IAAA;AACK,EAAA;AACL,IAAA;AACF,EAAA;AAEA,EAAA;AACQ,EAAA;AAER,EAAA;AACE,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAEM;AACG;AACH,EAAA;AACJ,EAAA;AACA,EAAA;AACA,EAAA;AACF;AAEgB;AACP,EAAA;AACT;ADiqQU;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/mainchain/mainchain/client/nodejs/lib/index.cjs","sourcesContent":[null,"import './interfaces/augment-api';\nimport './interfaces/augment-types';\nimport './interfaces/types-lookup';\nimport type { KeyringPair, KeyringPair$Json } from '@polkadot/keyring/types';\nimport { ApiPromise, HttpProvider, Keyring, WsProvider } from '@polkadot/api';\nimport {\n cryptoWaitReady,\n decodeAddress,\n encodeAddress,\n isAddress,\n mnemonicGenerate,\n} from '@polkadot/util-crypto';\nimport type { InterfaceTypes } from '@polkadot/types/types/registry';\nimport type { KeypairType } from '@polkadot/util-crypto/types';\nimport type { ProviderInterface } from '@polkadot/rpc-provider/types';\nimport type { ApiDecoration, ApiOptions } from '@polkadot/api/types';\nimport { Metadata, TypeRegistry } from '@polkadot/types';\nimport { result as metadataBytes } from '../metadata.json';\nimport { specVersion } from '../runtime_version.json';\nimport Genesis from '../genesis.json';\nimport { HexString } from '@polkadot/util/types';\n\nexport type { SubmittableExtrinsic } from '@polkadot/api/promise/types';\nexport { ApiDecoration };\nexport { WageProtector } from './WageProtector';\nexport { TxSubmitter, type ISubmittableOptions, type TxSigningAccount } from './TxSubmitter';\nexport { TxResult, type ITxProgressCallback } from './TxResult';\nexport * from './utils';\nexport * from './keyringUtils';\nexport * from './header';\nexport * from './Vault';\nexport * from './convert';\nexport * from './BitcoinLock';\nexport * from './PriceIndex';\nexport * as EvmContracts from './EvmContracts';\nexport * from './EthereumProof';\nexport type {\n EthereumBeaconBlockResponse,\n EthereumBeaconConfigSpecResponse,\n EthereumBeaconGenesisResponse,\n EthereumBeaconHeaderDetailsResponse,\n EthereumLightClientBootstrapResponse,\n EthereumLightClientHeader,\n EthereumLightClientUpdate,\n EthereumVersionedLightClientUpdate,\n} from './EthereumBeaconTypes';\nexport {\n decodeEthereumGatewayActivityLog,\n decodeEthereumTransferToArgonStartedLog,\n findEthereumTransferToArgonStartedLogIndexes,\n type EthereumGatewayActivity,\n} from './EthereumGatewayActivity';\nexport {\n buildGatewayActivityProofPayload,\n type EthereumGatewayActivityProofPayload,\n} from './EthereumGatewayActivityProof';\nexport {\n buildGatewayExecutionHeaderBackfill,\n buildGatewayExecutionHeaderBackfills,\n type EthereumExecutionHeaderBackfillPayload,\n} from './EthereumGatewayBackfill';\nexport * from './EthereumBeaconSync';\nexport type {\n EthereumExecutionClient,\n EthereumExecutionSource,\n EthereumReceipt,\n} from './EthereumExecution';\nexport {\n Keyring,\n KeyringPair,\n KeyringPair$Json,\n KeypairType,\n mnemonicGenerate,\n decodeAddress,\n isAddress,\n encodeAddress,\n};\n\nexport { u8aToHex, hexToU8a, u8aEq } from '@polkadot/util';\n\nexport * from '@polkadot/types/lookup';\nexport { GenericEvent, GenericBlock, GenericAddress } from '@polkadot/types/generic';\nexport {\n BTreeMap,\n Bytes,\n Compact,\n Enum,\n Null,\n Option,\n Result,\n Bool,\n Tuple,\n Range,\n Struct,\n Text,\n U256,\n U8aFixed,\n Vec,\n bool,\n i128,\n u128,\n u16,\n u32,\n u64,\n u8,\n} from '@polkadot/types-codec';\nexport type {\n ISubmittableResult,\n IExtrinsic,\n SignerResult,\n Signer,\n ISignerPayload,\n} from '@polkadot/types/types/extrinsic';\nexport { type ITuple, type Codec } from '@polkadot/types-codec/types';\nexport {\n type AccountId32,\n type Call,\n type H160,\n type H256,\n type MultiAddress,\n type Permill,\n type AccountId,\n type Header,\n type Block,\n type SignedBlock,\n} from '@polkadot/types/interfaces/runtime';\nexport type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interfaces/author';\nexport { type BlockHash } from '@polkadot/types/interfaces/chain';\nexport { InterfaceTypes as interfaces };\n\nexport type ArgonClient = ApiPromise;\nexport type IArgonQueryable = ArgonClient | ApiDecoration<'promise'>;\n\n/**\n * Wait for the crypto library to be ready (requires wasm, which needs async loading in commonjs)\n */\nexport async function waitForLoad(): Promise<void> {\n await cryptoWaitReady();\n}\n\n/**\n * Get a client for the given host\n * @param host The host to connect to\n * @param options Additional options for the API\n * @returns The client\n */\nexport async function getClient(host: string, options?: ApiOptions): Promise<ArgonClient> {\n let provider: ProviderInterface;\n if (host.startsWith('http')) {\n provider = new HttpProvider(host);\n } else {\n provider = new WsProvider(host);\n }\n\n options ??= {};\n options.metadata ??= {};\n\n for (const genesisHash of Object.values(Genesis)) {\n options.metadata[`${genesisHash}-${specVersion}`] = metadataBytes as HexString;\n }\n return await ApiPromise.create({ provider, noInitWarn: true, ...options });\n}\n\nconst registry = new TypeRegistry();\nregistry.setMetadata(\n new Metadata(registry, metadataBytes as HexString),\n undefined,\n undefined,\n true,\n);\n\nexport function getOfflineRegistry() {\n return registry;\n}\n","{\n \"jsonrpc\": \"2.0\",\n \"id\": \"1\",\n \"result\": \"0x6d6574610e4909000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050000240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006300030000005060034083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d00003800000208003c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677340013c5665633c4469676573744974656d3e000040000002440044102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e00060024436f6e73656e7375730800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000400105365616c0800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000500144f74686572040038011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000480000030400000008004c00000250005008306672616d655f73797374656d2c4576656e745265636f7264080445015404540134000c011470686173652902011450686173650001146576656e7454010445000118746f706963732d0201185665633c543e00005408346172676f6e5f72756e74696d653052756e74696d654576656e740001701853797374656d04005801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c44696765737473040080017870616c6c65745f646967657374733a3a4576656e743c52756e74696d653e000100204d756c7469736967040084017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e0003001450726f7879040094017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e000400284d696e696e67536c6f740400a4018870616c6c65745f6d696e696e675f736c6f743a3a4576656e743c52756e74696d653e00060030426974636f696e5574786f730400c8019070616c6c65745f626974636f696e5f7574786f733a3a4576656e743c52756e74696d653e000700185661756c74730400dc017470616c6c65745f7661756c74733a3a4576656e743c52756e74696d653e00080030426974636f696e4c6f636b730400e4019070616c6c65745f626974636f696e5f6c6f636b733a3a4576656e743c52756e74696d653e000900204e6f7461726965730400f0017c70616c6c65745f6e6f7461726965733a3a4576656e743c52756e74696d653e000a00204e6f7465626f6f6b04001501017c70616c6c65745f6e6f7465626f6f6b3a3a4576656e743c52756e74696d653e000b00484c6f63616c636861696e5472616e736665720400310101a870616c6c65745f6c6f63616c636861696e5f7472616e736665723a3a4576656e743c52756e74696d653e000c0034426c6f636b5365616c5370656304003501019870616c6c65745f626c6f636b5f7365616c5f737065633a3a4576656e743c52756e74696d653e000d001c446f6d61696e7304003901017870616c6c65745f646f6d61696e733a3a4576656e743c52756e74696d653e000e00285072696365496e64657804006101018870616c6c65745f70726963655f696e6465783a3a4576656e743c52756e74696d653e000f001c4772616e64706104006501015470616c6c65745f6772616e6470613a3a4576656e7400110030426c6f636b5265776172647304007101019070616c6c65745f626c6f636b5f726577617264733a3a4576656e743c52756e74696d653e001300104d696e7404008901016c70616c6c65745f6d696e743a3a4576656e743c52756e74696d653e0014002042616c616e6365730400990101ec70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d652c2070616c6c65745f62616c616e6365733a3a496e7374616e6365313e001500244f776e6572736869700400c10101ec70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d652c2070616c6c65745f62616c616e6365733a3a496e7374616e6365323e0016001c547850617573650400c501017c70616c6c65745f74785f70617573653a3a4576656e743c52756e74696d653e001700485472616e73616374696f6e5061796d656e740400d10101a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0018001c5574696c6974790400d501015470616c6c65745f7574696c6974793a3a4576656e74001900105375646f0400d901016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e001a002054726561737572790400dd01017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e001f0028466565436f6e74726f6c0400e501018870616c6c65745f6665655f636f6e74726f6c3a3a4576656e743c52756e74696d653e0020004c4f7065726174696f6e616c4163636f756e74730400f10101ac70616c6c65745f6f7065726174696f6e616c5f6163636f756e74733a3a4576656e743c52756e74696d653e00220040457468657265756d56657269666965720400f90101a070616c6c65745f657468657265756d5f76657269666965723a3a4576656e743c52756e74696d653e0023004843726f7373636861696e5472616e736665720400010201a870616c6c65745f63726f7373636861696e5f7472616e736665723a3a4576656e743c52756e74696d653e00240000580c306672616d655f73797374656d1870616c6c6574144576656e740404540001204045787472696e7369635375636365737304013464697370617463685f696e666f5c014444697370617463684576656e74496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7268013444697370617463684572726f7200013464697370617463685f696e666f5c014444697370617463684576656e74496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736834011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e8052656a6563746564496e76616c6964417574686f72697a656455706772616465080124636f64655f6861736834011c543a3a486173680001146572726f7268013444697370617463684572726f720007041101416e20696e76616c696420617574686f72697a65642075706772616465207761732072656a6563746564207768696c6520747279696e6720746f206170706c792069742e04704576656e7420666f72207468652053797374656d2070616c6c65742e5c08306672616d655f73797374656d4444697370617463684576656e74496e666f00000c0118776569676874280118576569676874000114636c6173736001344469737061746368436c617373000120706179735f666565640110506179730000600c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000640c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000068082873705f72756e74696d653444697370617463684572726f7200013c144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504006c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400700128546f6b656e4572726f720007002841726974686d65746963040074013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007801485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d00105472696504007c0124547269654572726f72000e00006c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7248018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000070082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000074083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000078082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007c0c2873705f72756e74696d653070726f76696e675f7472696524547269654572726f7200013840496e76616c69645374617465526f6f7400000048496e636f6d706c65746544617461626173650001005056616c75654174496e636f6d706c6574654b6579000200304465636f6465724572726f720003002c496e76616c696448617368000400304475706c69636174654b65790005003845787472616e656f75734e6f64650006003c45787472616e656f757356616c75650007005c45787472616e656f7573486173685265666572656e636500080054496e76616c69644368696c645265666572656e63650009003456616c75654d69736d61746368000a003c496e636f6d706c65746550726f6f66000b0030526f6f744d69736d61746368000c002c4465636f64654572726f72000d0000800c3870616c6c65745f646967657374731870616c6c6574144576656e74040454000100047c54686520604576656e746020656e756d206f6620746869732070616c6c6574840c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001142c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e7488017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e7488017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c748c01384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e7488017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e304465706f736974506f6b656410010c77686f000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c4861736800012c6f6c645f6465706f73697418013042616c616e63654f663c543e00012c6e65775f6465706f73697418013042616c616e63654f663c543e000404f0546865206465706f73697420666f722061206d756c7469736967206f7065726174696f6e20686173206265656e20757064617465642f706f6b65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657488083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c75333200008c0418526573756c740804540190044501680108084f6b040090000000000c4572720400680000010000900000040000940c3070616c6c65745f70726f78791870616c6c6574144576656e7404045400011c3450726f78794578656375746564040118726573756c748c01384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656418011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465789c010c7531360001086174100144426c6f636b4e756d626572466f723c543e00013c65787472696e7369635f696e64657810010c753332000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e28507572654b696c6c656410011070757265000130543a3a4163636f756e74496400011c737061776e6572000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465789c010c7531360002049c4120707572652070726f787920776173206b696c6c65642062792069747320737061776e65722e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736834013443616c6c486173684f663c543e000304e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00040448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00050450412070726f7879207761732072656d6f7665642e304465706f736974506f6b656410010c77686f000130543a3a4163636f756e7449640001106b696e64a0012c4465706f7369744b696e6400012c6f6c645f6465706f73697418013042616c616e63654f663c543e00012c6e65775f6465706f73697418013042616c616e63654f663c543e000604090141206465706f7369742073746f72656420666f722070726f78696573206f7220616e6e6f756e63656d656e74732077617320706f6b6564202f20757064617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749808346172676f6e5f72756e74696d652450726f7879547970650001200c416e790000002c4e6f6e5472616e73666572000100285072696365496e646578000200244d696e696e67426964000300504d696e696e674269645265616c506179734665650004001c426974636f696e000500285661756c7441646d696e000600345661756c7444656c6567617465000700009c0000050400a0083070616c6c65745f70726f78792c4465706f7369744b696e640001081c50726f7869657300000034416e6e6f756e63656d656e747300010000a40c4870616c6c65745f6d696e696e675f736c6f741870616c6c6574144576656e7404045400011c244e65774d696e6572730c01286e65775f6d696e657273a801b4426f756e6465645665633c526567697374726174696f6e3c543e2c20543a3a4d6178436f686f727453697a653e00013c72656c65617365645f6d696e65727310010c7533320001206672616d655f696430011c4672616d6549640000003c536c6f7442696464657241646465640c01286163636f756e745f6964000130543a3a4163636f756e7449640001286269645f616d6f756e74180128543a3a42616c616e6365000114696e64657810010c75333200010044536c6f7442696464657244726f707065640801286163636f756e745f6964000130543a3a4163636f756e7449640001587072657365727665645f6172676f6e6f745f686f6c64200110626f6f6c0002005452656c656173654d696e6572536561744572726f720801286163636f756e745f6964000130543a3a4163636f756e7449640001146572726f7268013444697370617463684572726f72000300684d696e696e67436f6e66696775726174696f6e557064617465640c01887469636b735f6265666f72655f6269645f656e645f666f725f7672665f636c6f73653001105469636b00014c7469636b735f6265747765656e5f736c6f74733001105469636b000178736c6f745f62696464696e675f73746172745f61667465725f7469636b733001105469636b000400404d696e696e6742696473436c6f7365640401206672616d655f696430011c4672616d654964000504f4426964732061726520636c6f7365642064756520746f20746865205652462072616e646f6d697a65642066756e6374696f6e2074726967676572696e673c52656c656173654269644572726f720801286163636f756e745f6964000130543a3a4163636f756e7449640001146572726f7268013444697370617463684572726f72000600047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a80c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ac045300000400c401185665633c543e0000ac0c406172676f6e5f7072696d69746976657328626c6f636b5f7365616c484d696e696e67526567697374726174696f6e0c244163636f756e74496401001c42616c616e63650118104b65797301b0001c01286163636f756e745f69640001244163636f756e74496400016065787465726e616c5f66756e64696e675f6163636f756e74bc01444f7074696f6e3c4163636f756e7449643e00010c626964c0011c42616c616e63650001206172676f6e6f7473c0011c42616c616e6365000138617574686f726974795f6b657973b001104b6579730001447374617274696e675f6672616d655f69642c011c4672616d65496400012c6269645f61745f7469636b2c01105469636b0000b008346172676f6e5f72756e74696d652c53657373696f6e4b657973000008011c6772616e647061b401d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000150626c6f636b5f7365616c5f617574686f72697479b801dc3c4d696e696e67536c6f74206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000b40c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c69630000040004013c656432353531393a3a5075626c69630000b810406172676f6e5f7072696d69746976657328626c6f636b5f7365616c0c617070185075626c69630000040004013c656432353531393a3a5075626c69630000bc04184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000c00000061800c4000002ac00c80c5070616c6c65745f626974636f696e5f7574786f731870616c6c6574144576656e7404045400011c305574786f566572696669656408011c7574786f5f69643001185574786f49640001447361746f736869735f72656365697665643001205361746f73686973000000305574786f52656a656374656410011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f52656600013c72656a65637465645f726561736f6ed80154426974636f696e52656a6563746564526561736f6e0001447361746f736869735f72656365697665643001205361746f73686973000100245574786f5370656e7408011c7574786f5f69643001185574786f4964000130626c6f636b5f686569676874300134426974636f696e486569676874000200345574786f556e7761746368656404011c7574786f5f69643001185574786f4964000300385574786f5370656e744572726f7208011c7574786f5f69643001185574786f49640001146572726f7268013444697370617463684572726f72000400445574786f56657269666965644572726f7208011c7574786f5f69643001185574786f49640001146572726f7268013444697370617463684572726f72000500445574786f52656a65637465644572726f7208011c7574786f5f69643001185574786f49640001146572726f7268013444697370617463684572726f72000600047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c406172676f6e5f7072696d6974697665731c626974636f696e1c5574786f526566000008011074786964d00118483235364c650001306f75747075745f696e646578d4010c7533320000d00c406172676f6e5f7072696d6974697665731c626974636f696e18483235364c65000004000401205b75383b2033325d0000d40000061000d80c406172676f6e5f7072696d6974697665731c626974636f696e54426974636f696e52656a6563746564526561736f6e000110705361746f736869734f757473696465416363657074656452616e6765000000145370656e740001004c566572696669636174696f6e457870697265640002003c416c7265616479566572696669656400030000dc0c3470616c6c65745f7661756c74731870616c6c6574144576656e74040454000140305661756c74437265617465641401207661756c745f696410011c5661756c74496400013873656375726974697a6174696f6e180128543a3a42616c616e636500015073656375726974697a6174696f6e5f726174696fe0012446697865645531323800014c6f70657261746f725f6163636f756e745f6964000130543a3a4163636f756e74496400012c6f70656e65645f7469636b3001105469636b000000345661756c744d6f6469666965641001207661756c745f696410011c5661756c74496400013873656375726974697a6174696f6e180128543a3a42616c616e636504c0546865206e65772073656375726974697a6174696f6e20616d6f756e74206166746572206d6f64696669636174696f6e015473656375726974697a6174696f6e5f746172676574180128543a3a42616c616e63650449015468652073656375726974697a6174696f6e2074617267657420616d6f756e74206166746572206d6f64696669636174696f6e20287468697320697320746865206c6f6e67207465726d2074617267657429015073656375726974697a6174696f6e5f726174696fe00124466978656455313238000100645661756c745465726d734368616e67655363686564756c65640801207661756c745f696410011c5661756c74496400012c6368616e67655f7469636b3001105469636b000200445661756c745465726d734368616e6765640401207661756c745f696410011c5661756c7449640003002c5661756c74436c6f7365640c01207661756c745f696410011c5661756c74496400016073656375726974697a6174696f6e5f72656d61696e696e67180128543a3a42616c616e636500015c73656375726974697a6174696f6e5f72656c6561736564180128543a3a42616c616e6365000400585661756c74426974636f696e587075624368616e67650401207661756c745f696410011c5661756c7449640005005c5661756c74526576656e7565556e636f6c6c65637465640c01207661756c745f696410011c5661756c7449640001206672616d655f696430011c4672616d654964000118616d6f756e74180128543a3a42616c616e636500060439015661756c7420726576656e756520776173206e6f7420636f6c6c65637465642077697468696e207468652072657175697265642077696e646f772c20736f20686173206265656e206275726e6564385661756c74436f6c6c65637465640801207661756c745f696410011c5661756c74496400011c726576656e7565180128543a3a42616c616e63650007040901546865207661756c7420636f6c6c656374656420726576656e756520616e6420636f7369676e656420616c6c2070656e64696e6720626974636f696e206c6f636b732c46756e64734c6f636b65641801207661756c745f696410011c5661756c7449640001186c6f636b6572000130543a3a4163636f756e7449640001486c69717569646974795f70726f6d69736564180128543a3a42616c616e636500012869735f72617463686574200110626f6f6c00012c6665655f726576656e7565180128543a3a42616c616e63650001486469645f7573655f6665655f636f75706f6e200110626f6f6c0008004046756e644c6f636b43616e63656c65640801207661756c745f696410011c5661756c744964000118616d6f756e74180128543a3a42616c616e63650009006046756e64735363686564756c6564466f7252656c656173650c01207661756c745f696410011c5661756c74496400013873656375726974697a6174696f6e180128543a3a42616c616e636500013872656c656173655f686569676874300134426974636f696e486569676874000a00584c6f7374426974636f696e436f6d70656e73617465641001207661756c745f696410011c5661756c74496400012c62656e6566696369617279000130543a3a4163636f756e744964000138746f5f62656e6566696369617279180128543a3a42616c616e63650001186275726e6564180128543a3a42616c616e6365000b003446756e647352656c65617365640801207661756c745f696410011c5661756c74496400013873656375726974697a6174696f6e180128543a3a42616c616e6365000c004846756e647352656c65617365644572726f720801207661756c745f696410011c5661756c7449640001146572726f7268013444697370617463684572726f72000d005854726561737572795265636f7264696e674572726f721001207661756c745f696410011c5661756c7449640001206672616d655f696430011c4672616d6549640001387661756c745f6561726e696e6773180128543a3a42616c616e63650001146572726f7268013444697370617463684572726f72000e0050436f6d6d69747465644172676f6e6f74735365740c01207661756c745f696410011c5661756c74496400014c6f70657261746f725f6163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000f00047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e00c3473705f61726974686d657469632c66697865645f706f696e742446697865645531323800000400180110753132380000e40c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c6574144576656e7404045400013848426974636f696e4c6f636b437265617465641c011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c7449640001486c69717569646974795f70726f6d69736564180128543a3a42616c616e636500013873656375726974697a6174696f6e180128543a3a42616c616e636500014c6c6f636b65645f7461726765745f7072696365180128543a3a42616c616e63650001286163636f756e745f6964000130543a3a4163636f756e74496400013073656375726974795f666565180128543a3a42616c616e636500000050426974636f696e4c6f636b52617463686574656420011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c7449640001486c69717569646974795f70726f6d69736564180128543a3a42616c616e63650001406f6c645f7461726765745f7072696365180128543a3a42616c616e636500013073656375726974795f666565180128543a3a42616c616e63650001406e65775f7461726765745f7072696365180128543a3a42616c616e6365000134616d6f756e745f6275726e6564180128543a3a42616c616e63650001286163636f756e745f6964000130543a3a4163636f756e74496400010044426974636f696e4c6f636b4275726e65640c011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c7449640001387761735f7574786f5f7370656e74200110626f6f6c00020068426974636f696e5574786f436f7369676e52657175657374656408011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c7449640003004c426974636f696e5574786f436f7369676e65640c011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c7449640001247369676e6174757265e80140426974636f696e5369676e617475726500040060426974636f696e5370656e74416674657252656c6561736508011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c74496400050050426974636f696e436f7369676e5061737444756510011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c74496400014c636f6d70656e736174696f6e5f616d6f756e74180128543a3a42616c616e6365000158636f6d70656e73617465645f6163636f756e745f6964000130543a3a4163636f756e74496400060048436f7369676e4f7665726475654572726f7208011c7574786f5f69643001185574786f49640001146572726f7268013444697370617463684572726f720007040901416e206572726f72206f63637572726564207768696c6520726566756e64696e6720616e206f76657264756520636f7369676e656420626974636f696e206c6f636b4c4c6f636b45787069726174696f6e4572726f7208011c7574786f5f69643001185574786f49640001146572726f7268013444697370617463684572726f72000804a4416e206572726f72206f63637572726564207768696c6520636f6d706c6574696e672061206c6f636b504f727068616e65645574786f526563656976656410011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f5265660001207661756c745f696410011c5661756c7449640001207361746f736869733001205361746f73686973000900704f727068616e65645574786f52656c6561736552657175657374656410011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f5265660001207661756c745f696410011c5661756c7449640001286163636f756e745f6964000130543a3a4163636f756e744964000a00504f727068616e65645574786f436f7369676e656414011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f5265660001207661756c745f696410011c5661756c7449640001286163636f756e745f6964000130543a3a4163636f756e7449640001247369676e6174757265e80140426974636f696e5369676e6174757265000b005c5574786f46756e64656446726f6d43616e64696461746510011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f5265660001207661756c745f696410011c5661756c7449640001286163636f756e745f6964000130543a3a4163636f756e744964000c005c53656375726974697a6174696f6e496e6372656173656410011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c7449640001306e65775f7361746f736869733001205361746f736869730001286163636f756e745f6964000130543a3a4163636f756e744964000d00047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e80c406172676f6e5f7072696d6974697665731c626974636f696e40426974636f696e5369676e617475726500000400ec0170426f756e6465645665633c75382c20436f6e73745533323c37343e3e0000ec0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000f00c3c70616c6c65745f6e6f7461726965731870616c6c6574144576656e74040454000114384e6f7461727950726f706f7365640c01406f70657261746f725f6163636f756e74000130543a3a4163636f756e7449640001106d657461f4013c4e6f746172794d6574614f663c543e00011c65787069726573100144426c6f636b4e756d626572466f723c543e000004a4412075736572206861732070726f706f736564206f7065726174696e672061732061206e6f746172793c4e6f746172794163746976617465640401186e6f74617279110101444e6f746172795265636f72644f663c543e0001048c41206e6f746172792070726f706f73616c20686173206265656e206163636570746564584e6f746172794d6574615570646174655175657565640c01246e6f746172795f69641001204e6f7461727949640001106d657461f4013c4e6f746172794d6574614f663c543e0001386566666563746976655f7469636b3001105469636b000204844e6f74617279206d657461646174612071756575656420666f7220757064617465444e6f746172794d657461557064617465640801246e6f746172795f69641001204e6f7461727949640001106d657461f4013c4e6f746172794d6574614f663c543e0003045c4e6f74617279206d657461646174612075706461746564544e6f746172794d6574615570646174654572726f720c01246e6f746172795f69641001204e6f7461727949640001146572726f7268013444697370617463684572726f720001106d657461f4013c4e6f746172794d6574614f663c543e000404844572726f72207570646174696e6720717565756564206e6f7461727920696e666f047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f40c406172676f6e5f7072696d697469766573186e6f74617279284e6f746172794d65746104204d6178486f73747300000c01106e616d65f801284e6f746172794e616d650001187075626c69630401304e6f746172795075626c6963000114686f73747301010168426f756e6465645665633c486f73742c204d6178486f7374733e0000f80c406172676f6e5f7072696d697469766573186e6f74617279284e6f746172794e616d6500000400fc0170426f756e6465645665633c75382c20436f6e73745533323c35353e3e0000fc0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000001010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540105010453000004000d0101185665633c543e000005010c406172676f6e5f7072696d69746976657310686f737410486f73740000040009010174426f756e6465645665633c75382c20436f6e73745533323c3235333e3e000009010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00000d0100000205010011010c406172676f6e5f7072696d697469766573186e6f74617279304e6f746172795265636f72640c244163636f756e74496401002c426c6f636b4e756d6265720110204d6178486f73747300001801246e6f746172795f6964d401204e6f74617279496400014c6f70657261746f725f6163636f756e745f69640001244163636f756e74496400013c6163746976617465645f626c6f636bd4012c426c6f636b4e756d6265720001486d6574615f757064617465645f626c6f636bd4012c426c6f636b4e756d6265720001446d6574615f757064617465645f7469636b2c01105469636b0001106d657461f401504e6f746172794d6574613c4d6178486f7374733e000015010c3c70616c6c65745f6e6f7465626f6f6b1870616c6c6574144576656e7404045400010c444e6f7465626f6f6b5375626d69747465640801246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d626572000000504e6f7465626f6f6b41756469744661696c7572651001246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d6265720001346e6f7465626f6f6b5f686173683401104832353600015066697273745f6661696c7572655f726561736f6e1901014c4e6f7465626f6f6b5665726966794572726f72000100644e6f7465626f6f6b5265616479466f72526570726f636573730801246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d626572000200047c54686520604576656e746020656e756d206f6620746869732070616c6c657419010c486172676f6e5f6e6f746172795f6175646974146572726f722c5665726966794572726f720001ec504d697373696e674163636f756e744f726967696e0801286163636f756e745f696400012c4163636f756e74496433320001306163636f756e745f747970651d01012c4163636f756e745479706500000048486973746f72794c6f6f6b75704572726f72040118736f75726365210101644163636f756e74486973746f72794c6f6f6b75704572726f7200010060496e76616c69644163636f756e744368616e67656c69737400020064496e76616c6964436861696e5472616e73666572734c69737400030060496e76616c696442616c616e63654368616e6765526f6f7400040060496e76616c69644865616465725461785265636f7264656400050050496e76616c696450726576696f75734e6f6e636500060058496e76616c696450726576696f757342616c616e636500070070496e76616c696450726576696f75734163636f756e744f726967696e00080090496e76616c696450726576696f757342616c616e63654368616e67654e6f7465626f6f6b00090050496e76616c696442616c616e63654368616e6765000a0074496e76616c696442616c616e63654368616e67655369676e61747572650401306368616e67655f696e6465789c010c753136000b0054496e76616c69644e6f7465526563697069656e7473000c004842616c616e63654368616e67654572726f720c01306368616e67655f696e6465789c010c7531360001286e6f74655f696e6465789c010c75313600011c6d6573736167652501013c4d61784c656e677468537472696e67000d0068496e76616c69644e657442616c616e63654368616e6765736574000e004c496e73756666696369656e7442616c616e636510011c62616c616e636518011075313238000118616d6f756e74180110753132380001286e6f74655f696e6465789c010c7531360001306368616e67655f696e6465789c010c753136000f004845786365656465644d617842616c616e636510011c62616c616e636518011075313238000118616d6f756e74180110753132380001286e6f74655f696e6465789c010c7531360001306368616e67655f696e6465789c010c7531360010005442616c616e63654368616e67654d69736d617463680c01306368616e67655f696e6465789c010c75313600014070726f76696465645f62616c616e63651801107531323800014863616c63756c617465645f62616c616e63652d010110693132380011005c42616c616e63654368616e67654e6f744e65745a65726f08011073656e741801107531323800011c636c61696d65641801107531323800120070496e76616c6964446f6d61696e4c65617365416c6c6f636174696f6e0013006854617842616c616e63654368616e67654e6f744e65745a65726f08011073656e741801107531323800011c636c61696d6564180110753132380014004c4d697373696e6742616c616e636550726f6f660015006c496e76616c696450726576696f757342616c616e636550726f6f660016004c496e76616c69644e6f7465626f6f6b4861736800170064496e76616c69644e6f7465626f6f6b4865616465724861736800180058496e76616c69644e6f7465626f6f6b56657273696f6e001900584475706c6963617465436861696e5472616e73666572001a00684475706c6963617465644163636f756e744f726967696e556964001b0058496e76616c69644e6f746172795369676e6174757265001c0054496e76616c696453656372657450726f7669646564001d00384e6f7465626f6f6b546f6f4f6c64001e005c436174636875704e6f7465626f6f6b734d697373696e67001f002c4465636f64654572726f72002000744163636f756e744368616e6e656c486f6c64446f65736e744578697374002100704163636f756e74416c72656164794861734368616e6e656c486f6c640022006c4368616e6e656c486f6c644e6f745265616479466f72436c61696d08013063757272656e745f7469636b3001105469636b000128636c61696d5f7469636b3001105469636b002300344163636f756e744c6f636b6564002400584d697373696e674368616e6e656c486f6c644e6f746500250058496e76616c69644368616e6e656c486f6c644e6f746500260068496e76616c69644368616e6e656c486f6c64436c61696d6572730027006c4368616e6e656c486f6c644e6f746542656c6f774d696e696d756d00280054496e76616c69645461784e6f74654163636f756e740029004c496e76616c69645461784f7065726174696f6e002a005c496e73756666696369656e74546178496e636c756465640c01207461785f73656e74180110753132380001207461785f6f776564180110753132380001286163636f756e745f696400012c4163636f756e7449643332002b0060496e73756666696369656e74426c6f636b566f7465546178002c0048496e656c696769626c65546178566f746572002d0064426c6f636b566f7465496e76616c69645369676e6174757265002e0068496e76616c6964426c6f636b566f7465416c6c6f636174696f6e002f0050496e76616c6964426c6f636b566f7465526f6f7400300058496e76616c6964426c6f636b566f746573436f756e740031005c496e76616c6964426c6f636b566f74696e67506f77657200320050496e76616c6964426c6f636b566f74654c6973740033004c496e76616c6964436f6d7075746550726f6f6600340058496e76616c6964426c6f636b566f7465536f7572636500350070496e73756666696369656e74426c6f636b566f74654d696e696d756d00360050496e76616c6964426c6f636b566f74655469636b0801107469636b3001105469636b0001346e6f7465626f6f6b5f7469636b3001105469636b0037005c496e76616c696444656661756c74426c6f636b566f746500380074496e76616c696444656661756c74426c6f636b566f7465417574686f72080118617574686f7200012c4163636f756e7449643332000120657870656374656400012c4163636f756e7449643332003900484e6f44656661756c74426c6f636b566f7465003a00001d010c406172676f6e5f7072696d6974697665731c6163636f756e742c4163636f756e74547970650001080c5461780000001c4465706f73697400010000210108486172676f6e5f6e6f746172795f6175646974644163636f756e74486973746f72794c6f6f6b75704572726f7200011030526f6f744e6f74466f756e64000000484c6173744368616e67654e6f74466f756e640001006c496e76616c69645472616e73666572546f4c6f63616c636861696e00020068426c6f636b53706563696669636174696f6e4e6f74466f756e640003000025010c486172676f6e5f6e6f746172795f6175646974146572726f723c4d61784c656e677468537472696e670000040029010174426f756e6465645665633c75382c20436f6e73745533323c3130303e3e000029010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00002d010000050d0031010c6870616c6c65745f6c6f63616c636861696e5f7472616e736665721870616c6c6574144576656e7404045400011c505472616e73666572546f4c6f63616c636861696e1401286163636f756e745f69640001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e741801583c5420617320436f6e6669673e3a3a42616c616e636500012c7472616e736665725f69641001585472616e73666572546f4c6f63616c636861696e49640001246e6f746172795f69641001204e6f74617279496400013c65787069726174696f6e5f7469636b3001105469636b0000046846756e64732073656e7420746f2061206c6f63616c636861696e6c5472616e73666572546f4c6f63616c636861696e457870697265640c01286163636f756e745f69640001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400012c7472616e736665725f69641001585472616e73666572546f4c6f63616c636861696e49640001246e6f746172795f69641001204e6f746172794964000104b85472616e7366657220746f206c6f63616c636861696e206578706972656420616e6420726f6c6c6564206261636b585472616e7366657246726f6d4c6f63616c636861696e0c01286163636f756e745f69640001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e741801583c5420617320436f6e6669673e3a3a42616c616e63650001246e6f746172795f69641001204e6f746172794964000204945472616e736665722066726f6d204c6f63616c636861696e20746f204d61696e636861696e6c5472616e7366657246726f6d4c6f63616c636861696e4572726f721401286163636f756e745f69640001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e741801583c5420617320436f6e6669673e3a3a42616c616e63650001246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d6265720001146572726f7268013444697370617463684572726f720003049041207472616e7366657220696e746f20746865206d61696e636861696e206661696c65647c5472616e73666572546f4c6f63616c636861696e526566756e644572726f721401286163636f756e745f69640001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400012c7472616e736665725f69641001585472616e73666572546f4c6f63616c636861696e49640001246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d6265720001146572726f7268013444697370617463684572726f72000404dc416e2065787069726564207472616e7366657220746f206c6f63616c636861696e206661696c656420746f20626520726566756e646564a0506f737369626c65496e76616c69644c6f63616c636861696e5472616e73666572416c6c6f7765640c012c7472616e736665725f69641001585472616e73666572546f4c6f63616c636861696e49640001246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d626572000508450141206c6f63616c636861696e207472616e7366657220636f756c64206e6f7420626520636c65616e65642075702070726f7065726c792e20506f737369626c6520696e76616c6964207472616e73666572586e656564696e6720696e7665737469676174696f6e2e345461786174696f6e4572726f721001246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d62657200010c7461781801583c5420617320436f6e6669673e3a3a42616c616e63650001146572726f7268013444697370617463684572726f720006043c5461786174696f6e206661696c6564047c54686520604576656e746020656e756d206f6620746869732070616c6c657435010c5870616c6c65745f626c6f636b5f7365616c5f737065631870616c6c6574144576656e740404540001084c566f74654d696e696d756d41646a757374656410015065787065637465645f626c6f636b5f766f7465731801107531323800014861637475616c5f626c6f636b5f766f7465731801107531323800014873746172745f766f74655f6d696e696d756d18012c566f74654d696e696d756d0001406e65775f766f74655f6d696e696d756d18012c566f74654d696e696d756d00000064436f6d70757465446966666963756c747941646a757374656410014c65787065637465645f626c6f636b5f74696d6530010c75363400014461637475616c5f626c6f636b5f74696d6530010c75363400014073746172745f646966666963756c7479180144436f6d70757465446966666963756c74790001386e65775f646966666963756c7479180144436f6d70757465446966666963756c7479000100047c54686520604576656e746020656e756d206f6620746869732070616c6c657439010c3870616c6c65745f646f6d61696e731870616c6c6574144576656e74040454000118445a6f6e655265636f72645570646174656408012c646f6d61696e5f68617368340128446f6d61696e4861736800012c7a6f6e655f7265636f72643d0101605a6f6e655265636f72643c543a3a4163636f756e7449643e000004804120646f6d61696e207a6f6e65207265636f726420776173207570646174656440446f6d61696e5265676973746572656408012c646f6d61696e5f68617368340128446f6d61696e48617368000130726567697374726174696f6e5d010180446f6d61696e526567697374726174696f6e3c543a3a4163636f756e7449643e0001045c4120646f6d61696e20776173207265676973746572656434446f6d61696e52656e6577656404012c646f6d61696e5f68617368340128446f6d61696e486173680002045c4120646f6d61696e20776173207265676973746572656434446f6d61696e4578706972656404012c646f6d61696e5f68617368340128446f6d61696e48617368000304504120646f6d61696e20776173206578706972656468446f6d61696e526567697374726174696f6e43616e63656c656408012c646f6d61696e5f68617368340128446f6d61696e48617368000130726567697374726174696f6e5d010180446f6d61696e526567697374726174696f6e3c543a3a4163636f756e7449643e00040841014120646f6d61696e20726567697374726174696f6e207761732063616e63656c65642064756520746f206120636f6e666c696374696e6720726567697374726174696f6e20696e207468652073616d65107469636b5c446f6d61696e526567697374726174696f6e4572726f720c012c646f6d61696e5f68617368340128446f6d61696e486173680001286163636f756e745f696400012c4163636f756e74496433320001146572726f7268013444697370617463684572726f72000504b04120646f6d61696e20726567697374726174696f6e206661696c65642064756520746f20616e206572726f72047c54686520604576656e746020656e756d206f6620746869732070616c6c65743d010c406172676f6e5f7072696d69746976657318646f6d61696e285a6f6e655265636f726404244163636f756e7449640100000c013c7061796d656e745f6163636f756e740001244163636f756e7449640001246e6f746172795f69641001204e6f74617279496400012076657273696f6e73410101cc426f756e64656442547265654d61703c53656d7665722c2056657273696f6e486f73742c20436f6e73745533323c3530303e3e000041010c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01450104560149010453000004005101013842547265654d61703c4b2c20563e000045010c406172676f6e5f7072696d69746976657318646f6d61696e1853656d76657200000c01146d616a6f7210010c7533320001146d696e6f7210010c753332000114706174636810010c753332000049010c406172676f6e5f7072696d69746976657318646f6d61696e2c56657273696f6e486f737400000801306461746173746f72655f69644d010170426f756e6465645665633c75382c20436f6e73745533323c35303e3e000110686f737405010110486f737400004d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00005101042042547265654d617008044b01450104560149010004005501000000550100000259010059010000040845014901005d01083870616c6c65745f646f6d61696e7348446f6d61696e526567697374726174696f6e04244163636f756e7449640100000801286163636f756e745f69640001244163636f756e744964000148726567697374657265645f61745f7469636b3001105469636b000061010c4870616c6c65745f70726963655f696e6465781870616c6c6574144576656e74040454000108204e6577496e646578000004c44576656e7420656d6974746564207768656e2061206e657720707269636520696e646578206973207375626d69747465643c4f70657261746f724368616e67656404012c6f70657261746f725f6964000130543a3a4163636f756e744964000100047c54686520604576656e746020656e756d206f6620746869732070616c6c657465010c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f73657469010134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657469010000026d01006d0100000408b4300071010c5070616c6c65745f626c6f636b5f726577617264731870616c6c6574144576656e74040454000108345265776172644372656174656404011c72657761726473750101a85665633c426c6f636b5061796f75743c543a3a4163636f756e7449642c20543a3a42616c616e63653e3e000000445265776172644372656174654572726f721001286163636f756e745f6964000130543a3a4163636f756e7449640001186172676f6e73850101484f7074696f6e3c543a3a42616c616e63653e0001246f776e657273686970850101484f7074696f6e3c543a3a42616c616e63653e0001146572726f7268013444697370617463684572726f72000100047c54686520604576656e746020656e756d206f6620746869732070616c6c6574750100000279010079010c406172676f6e5f7072696d69746976657328626c6f636b5f7365616c2c426c6f636b5061796f757408244163636f756e74496401001c42616c616e63650118001401286163636f756e745f69640001244163636f756e7449640001246f776e657273686970c0011c42616c616e63650001186172676f6e73c0011c42616c616e636500012c7265776172645f747970657d01013c426c6f636b52657761726454797065000150626c6f636b5f7365616c5f617574686f72697479810101704f7074696f6e3c426c6f636b5365616c417574686f7269747949643e00007d010c406172676f6e5f7072696d69746976657328626c6f636b5f7365616c3c426c6f636b5265776172645479706500010c144d696e657200000014566f7465720001002c50726f666974536861726500020000810104184f7074696f6e04045401b80108104e6f6e6500000010536f6d650400b80000010000850104184f7074696f6e04045401180108104e6f6e6500000010536f6d65040018000001000089010c2c70616c6c65745f6d696e741870616c6c6574144576656e7404045400010c2c426974636f696e4d696e740c01286163636f756e745f6964000130543a3a4163636f756e74496400011c7574786f5f69648d0101384f7074696f6e3c5574786f49643e000118616d6f756e74180128543a3a42616c616e63650000044c416e7920626974636f696e73206d696e746564284d696e696e674d696e74100118616d6f756e74180128543a3a42616c616e63650001247065725f6d696e6572180128543a3a42616c616e63650001246172676f6e5f637069910101204172676f6e4350490001246c6971756964697479180128543a3a42616c616e63650001084d0154686520616d6f756e74206f66206d6963726f676f6e73206d696e74656420666f72206d696e696e672e204e4f54453a206163636f756e74732062656c6f77204578697374656e7469616c204465706f7369746077696c6c206e6f742062652061626c6520746f206d696e74244d696e744572726f721401246d696e745f74797065950101204d696e74547970650001286163636f756e745f6964000130543a3a4163636f756e74496400011c7574786f5f69648d0101384f7074696f6e3c5574786f49643e000118616d6f756e74180128543a3a42616c616e63650001146572726f7268013444697370617463684572726f720002085d014572726f727320656e636f756e7465726564207768696c65206d696e74696e672e204d6f7374206f6674656e2064756520746f206d696e7420616d6f756e74207374696c6c2062656c6f77204578697374656e7469616c1c4465706f736974047c54686520604576656e746020656e756d206f6620746869732070616c6c65748d0104184f7074696f6e04045401300108104e6f6e6500000010536f6d65040030000001000091010c3473705f61726974686d657469632c66697865645f706f696e7424466978656449313238000004002d01011069313238000095010c2c70616c6c65745f6d696e741870616c6c6574204d696e74547970650001081c426974636f696e000000184d696e696e670001000099010c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001781c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475739d0101185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e304d696e746564437265646974040118616d6f756e74180128543a3a42616c616e6365000b04e0536f6d6520637265646974207761732062616c616e63656420616e6420616464656420746f2074686520546f74616c49737375616e63652e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e284275726e656444656274040118616d6f756e74180128543a3a42616c616e6365000d04cc536f6d65206465627420686173206265656e2064726f707065642066726f6d2074686520546f74616c2049737375616e63652e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000e041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000f04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e74496400100460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e63650011042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650012042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500150460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500160460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001704ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e1048656c640c0118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500180480536f6d652062616c616e63652077617320706c61636564206f6e20686f6c642e284275726e656448656c640c0118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365001904a048656c642062616c616e636520776173206275726e65642066726f6d20616e206163636f756e742e385472616e736665724f6e486f6c64100118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e000118736f75726365000130543a3a4163636f756e74496400011064657374000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365001a04150141207472616e73666572206f662060616d6f756e7460206f6e20686f6c642066726f6d2060736f757263656020746f206064657374602077617320696e697469617465642e3c5472616e73666572416e64486f6c64100118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e000118736f75726365000130543a3a4163636f756e74496400011064657374000130543a3a4163636f756e74496400012c7472616e73666572726564180128543a3a42616c616e6365001b04090154686520607472616e73666572726564602062616c616e636520697320706c61636564206f6e20686f6c642061742074686520606465737460206163636f756e742e2052656c65617365640c0118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365001c0490536f6d652062616c616e6365207761732072656c65617365642066726f6d20686f6c642e28556e65787065637465640400bd010138556e65787065637465644b696e64001d04b0416e20756e65787065637465642f646566656e73697665206576656e7420776173207472696767657265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749d0114346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000a10108346172676f6e5f72756e74696d654452756e74696d65486f6c64526561736f6e000118284d696e696e67536c6f740400a501017870616c6c65745f6d696e696e675f736c6f743a3a486f6c64526561736f6e000600185661756c74730400a901016470616c6c65745f7661756c74733a3a486f6c64526561736f6e00080030426974636f696e4c6f636b730400ad01018070616c6c65745f626974636f696e5f6c6f636b733a3a486f6c64526561736f6e00090030426c6f636b526577617264730400b101018070616c6c65745f626c6f636b5f726577617264733a3a486f6c64526561736f6e0013002054726561737572790400b501016c70616c6c65745f74726561737572793a3a486f6c64526561736f6e001f004843726f7373636861696e5472616e736665720400b901019870616c6c65745f63726f7373636861696e5f7472616e736665723a3a486f6c64526561736f6e00240000a5010c4870616c6c65745f6d696e696e675f736c6f741870616c6c657428486f6c64526561736f6e0001043c526567697374657241734d696e657200000000a9010c3470616c6c65745f7661756c74731870616c6c657428486f6c64526561736f6e00010c28456e7465725661756c74000000344f626c69676174696f6e4665650001003850656e64696e67436f6c6c65637400020000ad010c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c657428486f6c64526561736f6e0001044852656c65617365426974636f696e4c6f636b00000000b1010c5070616c6c65745f626c6f636b5f726577617264731870616c6c657428486f6c64526561736f6e000104404d617475726174696f6e506572696f6400000000b5010c3c70616c6c65745f74726561737572791870616c6c657428486f6c64526561736f6e00010454436f6e7472696275746564546f547265617375727900000000b9010c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c657428486f6c64526561736f6e000108785472616e736665724f75744d696e74696e67417574686f726974795469700000008c4d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7400010000bd010c3c70616c6c65745f62616c616e6365731870616c6c657438556e65787065637465644b696e640001083842616c616e636555706461746564000000544661696c6564546f4d75746174654163636f756e7400010000c1010c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001781c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475739d0101185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e304d696e746564437265646974040118616d6f756e74180128543a3a42616c616e6365000b04e0536f6d6520637265646974207761732062616c616e63656420616e6420616464656420746f2074686520546f74616c49737375616e63652e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e284275726e656444656274040118616d6f756e74180128543a3a42616c616e6365000d04cc536f6d65206465627420686173206265656e2064726f707065642066726f6d2074686520546f74616c2049737375616e63652e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000e041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000f04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e74496400100460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e63650011042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650012042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500150460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500160460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001704ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e1048656c640c0118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500180480536f6d652062616c616e63652077617320706c61636564206f6e20686f6c642e284275726e656448656c640c0118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365001904a048656c642062616c616e636520776173206275726e65642066726f6d20616e206163636f756e742e385472616e736665724f6e486f6c64100118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e000118736f75726365000130543a3a4163636f756e74496400011064657374000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365001a04150141207472616e73666572206f662060616d6f756e7460206f6e20686f6c642066726f6d2060736f757263656020746f206064657374602077617320696e697469617465642e3c5472616e73666572416e64486f6c64100118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e000118736f75726365000130543a3a4163636f756e74496400011064657374000130543a3a4163636f756e74496400012c7472616e73666572726564180128543a3a42616c616e6365001b04090154686520607472616e73666572726564602062616c616e636520697320706c61636564206f6e20686f6c642061742074686520606465737460206163636f756e742e2052656c65617365640c0118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365001c0490536f6d652062616c616e6365207761732072656c65617365642066726f6d20686f6c642e28556e65787065637465640400bd010138556e65787065637465644b696e64001d04b0416e20756e65787065637465642f646566656e73697665206576656e7420776173207472696767657265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c5010c3c70616c6c65745f74785f70617573651870616c6c6574144576656e740404540001082843616c6c50617573656404012466756c6c5f6e616d65c901015052756e74696d6543616c6c4e616d654f663c543e000004b8546869732070616c6c65742c206f7220612073706563696669632063616c6c206973206e6f77207061757365642e3043616c6c556e70617573656404012466756c6c5f6e616d65c901015052756e74696d6543616c6c4e616d654f663c543e000104c0546869732070616c6c65742c206f7220612073706563696669632063616c6c206973206e6f7720756e7061757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c90100000408cd01cd0100cd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000d1010c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d5010c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000120404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7268013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7268013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c748c01384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e444966456c73654d61696e53756363657373000604644d61696e2063616c6c2077617320646973706174636865642e504966456c736546616c6c6261636b43616c6c65640401286d61696e5f6572726f7268013444697370617463684572726f72000704845468652066616c6c6261636b2063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d9010c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400011014537564696404012c7375646f5f726573756c748c01384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e00047041207375646f2063616c6c206a75737420746f6f6b20706c6163652e284b65794368616e67656408010c6f6c64bc01504f7074696f6e3c543a3a4163636f756e7449643e04b4546865206f6c64207375646f206b657920286966206f6e65207761732070726576696f75736c7920736574292e010c6e6577000130543a3a4163636f756e7449640488546865206e6577207375646f206b657920286966206f6e652077617320736574292e010478546865207375646f206b657920686173206265656e20757064617465642e284b657952656d6f76656400020480546865206b657920776173207065726d616e656e746c792072656d6f7665642e285375646f4173446f6e6504012c7375646f5f726573756c748c01384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e0304c841205b7375646f5f61735d2850616c6c65743a3a7375646f5f6173292063616c6c206a75737420746f6f6b20706c6163652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574dd010c3c70616c6c65745f74726561737572791870616c6c6574144576656e740404540001248c436f756c644e6f74446973747269627574654561726e696e6773546f426f6e644c6f741801206672616d655f696430011c4672616d6549640001207661756c745f696410011c5661756c74496400012c626f6e645f6c6f745f6964300124426f6e644c6f7449640001286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500013864697370617463685f6572726f7268013444697370617463684572726f72000004f4416e206572726f72206f63637572726564207768696c6520706179696e67206672616d65206561726e696e677320666f72206120626f6e64206c6f742e88436f756c644e6f745472616e73666572546f547265617375727952657365727665730c01206672616d655f696430011c4672616d654964000118616d6f756e74180128543a3a42616c616e636500013864697370617463685f6572726f7268013444697370617463684572726f720001041501416e206572726f72206f63637572726564207768696c65206d6f76696e67206269642d706f6f6c2066756e647320696e746f2074726561737572792072657365727665732e604672616d654561726e696e677344697374726962757465641001206672616d655f696430011c4672616d6549640001506269645f706f6f6c5f6469737472696275746564180128543a3a42616c616e636500014474726561737572795f7265736572766573180128543a3a42616c616e636500015070617274696369706174696e675f7661756c747310010c753332000204804672616d65206561726e696e677320776572652064697374726962757465642e5c4672616d655661756c744361706974616c4c6f636b65640c01206672616d655f696430011c4672616d654964000150746f74616c5f656c696769626c655f626f6e64731801107531323800015070617274696369706174696e675f7661756c747310010c753332000304c05468652063757272656e74206672616d652773207661756c74206361706974616c20776173206c6f636b656420696e2e58436f756c644e6f7452656c65617365426f6e644c6f741801206672616d655f696430011c4672616d6549640001207661756c745f696410011c5661756c74496400012c626f6e645f6c6f745f6964300124426f6e644c6f744964000118616d6f756e74180128543a3a42616c616e63650001286163636f756e745f6964000130543a3a4163636f756e74496400013864697370617463685f6572726f7268013444697370617463684572726f72000404b4416e206572726f72206f63637572726564207768696c652072656c656173696e67206120626f6e64206c6f742e40426f6e644c6f745075726368617365641001207661756c745f696410011c5661756c74496400012c626f6e645f6c6f745f6964300124426f6e644c6f7449640001286163636f756e745f6964000130543a3a4163636f756e744964000114626f6e6473100114426f6e6473000504c04120626f6e6420707572636861736520656e74657265642061207661756c742773206163636570746564206c6973742e5c426f6e644c6f7452656c656173655363686564756c65641801207661756c745f696410011c5661756c74496400012c626f6e645f6c6f745f6964300124426f6e644c6f7449640001286163636f756e745f6964000130543a3a4163636f756e744964000114626f6e6473100114426f6e647300014072656c656173655f6672616d655f696430011c4672616d654964000118726561736f6ee1010144426f6e6452656c65617365526561736f6e00060411014120626f6e64206c6f74207761732072656d6f7665642066726f6d20667574757265206672616d657320616e64207363686564756c656420666f722072656c656173652e3c426f6e644c6f7452656c65617365641401206672616d655f696430011c4672616d6549640001207661756c745f696410011c5661756c74496400012c626f6e645f6c6f745f6964300124426f6e644c6f7449640001286163636f756e745f6964000130543a3a4163636f756e744964000114626f6e6473100114426f6e6473000704604120626f6e64206c6f74207761732072656c65617365642e74456e63756d6265726564426f6e644d6963726f676f6e734275726e65640c01286163636f756e745f6964000130543a3a4163636f756e7449640001346275726e65645f616d6f756e74180128543a3a42616c616e636500013c72656c65617365645f616d6f756e74180128543a3a42616c616e63650008084d01456e63756d6265726564207472656173757279206261636b696e6720776173206275726e656420616e6420616e79206e6f2d6c6f6e6765722d6e6565646564206672616374696f6e616c20686f6c64207761732472657475726e65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e1010c3c70616c6c65745f74726561737572791870616c6c657444426f6e6452656c65617365526561736f6e00010c3c557365724c69717569646174696f6e0000001842756d7065640001002c5661756c74436c6f73656400020000e5010c4870616c6c65745f6665655f636f6e74726f6c1870616c6c6574144576656e7404045400010828466565536b69707065640401186f726967696ee90101c03c543a3a52756e74696d654f726967696e206173204f726967696e54726169743e3a3a50616c6c6574734f726967696e0000047841207472616e73616374696f6e206665652077617320736b69707065642e3046656544656c6567617465640c01186f726967696ee90101c03c543a3a52756e74696d654f726967696e206173204f726967696e54726169743e3a3a50616c6c6574734f726967696e00011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e7449640001047c41207472616e73616374696f6e20666565207761732064656c656761746564047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e90108346172676f6e5f72756e74696d65304f726967696e43616c6c65720001041873797374656d0400ed0101746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e00000000ed010c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100011010526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020028417574686f72697a656400030000f1010c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c6574144576656e7404045400011c704f7065726174696f6e616c4163636f756e745265676973746572656414014c6f7065726174696f6e616c5f6163636f756e74000130543a3a4163636f756e7449640001347661756c745f6163636f756e74000130543a3a4163636f756e7449640001586d696e696e675f66756e64696e675f6163636f756e74000130543a3a4163636f756e7449640001486d696e696e675f626f745f6163636f756e74000130543a3a4163636f756e74496400011c73706f6e736f72bc01504f7074696f6e3c543a3a4163636f756e7449643e000004fc416e206f7065726174696f6e616c206163636f756e74207761732072656769737465726564207769746820697473206c696e6b6564206163636f756e74732e584163636f756e7457656e744f7065726174696f6e616c04011c6163636f756e74000130543a3a4163636f756e7449640001047c4163636f756e7420686173206265636f6d65206f7065726174696f6e616c2e5c4f7065726174696f6e616c5265776172644561726e65640c011c6163636f756e74000130543a3a4163636f756e74496400012c7265776172645f6b696e64f50101544f7065726174696f6e616c5265776172644b696e64000118616d6f756e74180128543a3a42616c616e63650002040d014120726577617264206973206561726e656420666f7220616e206f7065726174696f6e616c206163636f756e742c20627574206e6f742079657420636c61696d65642e644f7065726174696f6e616c52657761726473436c61696d656410014c6f7065726174696f6e616c5f6163636f756e74000130543a3a4163636f756e744964000120636c61696d616e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014472656d61696e696e675f70656e64696e67180128543a3a42616c616e6365000304f4436c61696d61626c65206f7065726174696f6e616c20726577617264732077657265207061696420746f2061206d616e61676564206163636f756e742e5052657761726473436f6e6669675570646174656408016c6f7065726174696f6e616c5f726566657272616c5f726577617264180128543a3a42616c616e6365000154726566657272616c5f626f6e75735f726577617264180128543a3a42616c616e63650004048852657761726420636f6e6669672076616c756573207765726520757064617465642e644f7065726174696f6e616c50726f6772657373466f726365641c011c6163636f756e74000130543a3a4163636f756e74496400016c7570646174655f6f7065726174696f6e616c5f70726f6772657373200110626f6f6c0001506861735f756e69737761705f7472616e73666572200110626f6f6c0001347661756c745f63726561746564200110626f6f6c00017c6861735f74726561737572795f706f6f6c5f70617274696369706174696f6e200110626f6f6c0001586f627365727665645f626974636f696e5f746f74616c180128543a3a42616c616e63650001686f627365727665645f6d696e696e675f736561745f746f74616c10010c753332000504a04f7065726174696f6e616c2070726f67726573732077617320666f7263656420627920726f6f742e58456e637279707465645365727665725570646174656408011c73706f6e736f72000130543a3a4163636f756e74496400011c73706f6e736565000130543a3a4163636f756e744964000604f4412073706f6e736f7220757064617465642074686520656e6372797074656420736572766572207061796c6f616420666f7220612073706f6e7365652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f5010c406172676f6e5f7072696d6974697665732470726f766964657273544f7065726174696f6e616c5265776172644b696e640001082841637469766174696f6e00000034526566657272616c426f6e757300010000f9010c6070616c6c65745f657468657265756d5f76657269666965721870616c6c6574144576656e7404045400011450426561636f6e486561646572496d706f72746564080128626c6f636b5f6861736834011048323536000110736c6f7430010c75363400000074457865637574696f6e486561646572416e63686f72496d706f72746564080128626c6f636b5f68617368340148457865637574696f6e426c6f636b48617368000130626c6f636b5f6e756d626572300150457865637574696f6e426c6f636b4e756d6265720001007c457865637574696f6e486561646572416e63686f724261636b66696c6c656410012c626561636f6e5f726f6f7434011048323536000110736c6f7430010c753634000128626c6f636b5f68617368340148457865637574696f6e426c6f636b48617368000130626c6f636b5f6e756d626572300150457865637574696f6e426c6f636b4e756d6265720002005053796e63436f6d6d697474656555706461746564040118706572696f6430010c753634000300504f7065726174696e674d6f64654368616e6765640401106d6f6465fd01014842617369634f7065726174696e674d6f646500040444536574204f7065726174696e674d6f6465047c54686520604576656e746020656e756d206f6620746869732070616c6c6574fd010c6070616c6c65745f657468657265756d5f76657269666965721474797065734842617369634f7065726174696e674d6f6465000108184e6f726d616c0000001848616c7465640001000001020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574144576656e74040454000158585472616e73666572546f4172676f6e536574746c6564080130736f757263655f636861696e0502012c536f75726365436861696e0001207472616e73666572090201685472616e73666572546f4172676f6e41637469766974793c543e0000040d014120605472616e73666572546f4172676f6e5374617274656460206163746976697479207761732070726f76656e20616e6420736574746c6564206c6f63616c6c792e6c476c6f62616c49737375616e6365436f756e63696c466f7263656408014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e000130636f756e63696c5f68617368340110483235360001042901526f6f7420666f7263652d736574207468652061637469766520476c6f62616c2049737375616e636520436f756e63696c20666f7220612064657374696e6174696f6e20636861696e2e5c436f756e63696c5369676e6572526567697374657265640c014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e0001286163636f756e745f6964000130543a3a4163636f756e7449640001187369676e65720d020110483136300002040d01416e206163636f756e7420726567697374657265642069747320636f756e63696c207369676e657220666f72206f6e652064657374696e6174696f6e20636861696e2e6c436f756e63696c5369676e6572526f746174696f6e5175657565640c014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e0001286163636f756e745f6964000130543a3a4163636f756e7449640001187369676e65720d020110483136300003042d01416e206163636f756e74207175657565642061207265706c6163656d656e7420636f756e63696c207369676e657220666f7220746865206e65787420636f756e63696c207570646174652e684d696e74696e67417574686f726974795265676973746572656410014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b65790d020110483136300001286163636f756e745f6964000130543a3a4163636f756e744964000150617070726f76616c5f71756575655f6e6f6e6365300164436f756e63696c417070726f76616c51756575654e6f6e63650004045901416e206f70657261746f72206163636f756e7420726567697374657265642061204d696e74696e6720417574686f7269747920616e642071756575656420697420666f7220636f756e63696c20617070726f76616c2e884d696e74696e67417574686f72697479446561637469766174696f6e5175657565640c014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b65790d02011048313630000150617070726f76616c5f71756575655f6e6f6e6365300164436f756e63696c417070726f76616c51756575654e6f6e63650005045901416e206f70657261746f72207175657565642074686520636f756e63696c2d617070726f76656420457468657265756d20646561637469766174696f6e20666f722061204d696e74696e6720417574686f726974792e7c4d696e696d756d4d696e74696e67417574686f7269747956616c756553657408014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e0001346d696e696d756d5f76616c7565180128543a3a42616c616e63650006084501526f6f74207570646174656420746865206d696e696d756d206e6f726d616c697a6564206d6963726f676f6e2076616c756520726571756972656420746f2072656769737465722061204d696e74696e678c417574686f72697479206f6e206f6e652064657374696e6174696f6e20636861696e2eb44d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e6753657404014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e0007085101526f6f742075706461746564207468652070726963696e6720696e70757473207573656420746f2072657061792072656c617965727320666f722061637469766174696f6e2062617463686573206f6e206f6e654864657374696e6174696f6e20636861696e2e685175657565456e747279417070726f76616c5265636f726465640c014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e0001187461726765741902015c436f756e63696c417070726f76616c5461726765744964000150617070726f76616c5f71756575655f6e6f6e6365300164436f756e63696c417070726f76616c51756575654e6f6e636500080415014120636f756e63696c206d656d626572207265636f7264656420617070726f76616c20666f7220612071756575656420636f756e63696c2075706461746520656e7472792e5c5175657565456e747279417070726f76616c52656164790c014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e0001187461726765741902015c436f756e63696c417070726f76616c5461726765744964000150617070726f76616c5f71756575655f6e6f6e6365300164436f756e63696c417070726f76616c51756575654e6f6e6365000904d45468652071756575656420636f756e63696c2075706461746520656e7472792072656163686564206c6f63616c2071756f72756d2e8c4d696e74696e67417574686f7269747941637469766174696f6e46696e616c697a6564080130736f757263655f636861696e0502012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b65790d02011048313630000a042101412070726f76656e20457468657265756d2061637469766174696f6e2066696c6c6564207468652070656e64696e67206c6f63616c2061637469766174696f6e206669656c64732e8c4d696e74696e67417574686f7269747941637469766174696f6e436f6d706c6574656410014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b65790d0201104831363000016072656c617965725f6172676f6e5f6163636f756e745f6964000130543a3a4163636f756e74496400014072657061796d656e745f616d6f756e74180128543a3a42616c616e6365000b084101412070726f76656e2061637469766174696f6e2070616964206f722072656c6561736564207468652068656c642072656c61796572207265696d62757273656d656e7420616e64206d6164652074686544617574686f7269747920757361626c652e944d696e74696e67417574686f72697479446561637469766174696f6e46696e616c697a6564080130736f757263655f636861696e0502012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b65790d02011048313630000c084901412070726f76656e20457468657265756d20646561637469766174696f6e2072656c656173656420636f6c6c61746572616c20616e642072656d6f76656420746865206c6f63616c20617574686f726974791c7265636f72642e444761746577617953796e63506175736564080130736f757263655f636861696e0502012c536f75726365436861696e00011470617573651d0201404761746577617953796e635061757365000d044d01476174657761792070726f6f66206170706c69636174696f6e20706175736564206f6e6520736f7572636520636861696e20617420612073706563696669632063616e6f6e6963616c2061637469766974792e3c47617465776179556e706175736564040130736f757263655f636861696e0502012c536f75726365436861696e000e04a0526f6f74206d616e75616c6c7920756e706175736564206f6e6520736f7572636520636861696e2e50476174657761795374617465416476616e636564080130736f757263655f636861696e0502012c536f75726365436861696e000134676174657761795f73746174652502013c4761746577617953746174653c543e000f042d015468652073746f72656420676174657761792d737461746520736e617073686f7420616476616e63656420616674657220612070726f76656e20636f6e746967756f75732062617463682e485472616e736665724f75745374617274656418014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e00012c7472616e736665725f6964340110483235360001286163636f756e745f6964000130543a3a4163636f756e74496400011461737365741502012441737365744b696e64000118616d6f756e74180128543a3a42616c616e63650001546d696e74696e675f617574686f726974795f746970180128543a3a42616c616e63650010046841207472616e73666572206f757420776173206f70656e65642e585472616e73666572436f6c6c61746572616c697a656410012c7472616e736665725f69643401104832353600015c64657374696e6174696f6e5f7369676e696e675f6b65790d0201104831363000014c6d6963726f676f6e5f636f6c6c61746572616c180128543a3a42616c616e636500014c6d6963726f6e6f745f636f6c6c61746572616c180128543a3a42616c616e6365001104c041206d696e74696e6720617574686f726974792075706461746564207472616e7366657220636f6c6c61746572616c2e405472616e736665724f7574526561647904012c7472616e736665725f6964340110483235360012049441207472616e7366657220697320726561647920666f722066696e616c697a6174696f6e2e505472616e736665724f757446696e616c697a6564080130736f757263655f636861696e0502012c536f75726365436861696e00012c7472616e736665725f696434011048323536001304b441207472616e73666572207761732066696e616c697a6564206f6e2074686520736f7572636520636861696e2e4c5472616e736665724f757443616e63656c6564080130736f757263655f636861696e0502012c536f75726365436861696e00012c7472616e736665725f696434011048323536001404b041207472616e73666572207761732063616e63656c6564206f6e2074686520736f7572636520636861696e2e745472616e73666572436f6c6c61746572616c496e76616c69646174656408012c7472616e736665725f69643401104832353600015c64657374696e6174696f6e5f7369676e696e675f6b65790d02011048313630001504c4412070656e64696e6720636f6c6c61746572616c207265736572766174696f6e2077617320696e76616c6964617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657405020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65742c536f75726365436861696e00010420457468657265756d0000000009020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65745c5472616e73666572546f4172676f6e41637469766974790404540000140158676174657761795f61637469766974795f6e6f6e63652c01504761746577617941637469766974794e6f6e636500011066726f6d0d0201104831363000011461737365741502012441737365744b696e64000108746f000130543a3a4163636f756e744964000118616d6f756e74c00128543a3a42616c616e636500000d02083c7072696d69746976655f7479706573104831363000000400110201205b75383b2032305d0000110200000314000000080015020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65742441737365744b696e64000108144172676f6e0000001c4172676f6e6f740001000019020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65745c436f756e63696c417070726f76616c546172676574496400010c684d696e74696e67417574686f7269747941637469766174696f6e04000d02011048313630000000704d696e74696e67417574686f72697479446561637469766174696f6e04000d0201104831363000010074476c6f62616c49737375616e6365436f756e63696c526f746174696f6e040034011048323536000200001d020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574404761746577617953796e63506175736500000c01806c6173745f676f6f645f676174657761795f61637469766974795f6e6f6e63652c01504761746577617941637469766974794e6f6e63650001746661696c65645f676174657761795f61637469766974795f6e6f6e63652c01504761746577617941637469766974794e6f6e6365000118726561736f6e210201584761746577617953796e635061757365526561736f6e000021020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574584761746577617953796e635061757365526561736f6e000128184d616e75616c000000604d616c666f726d656447617465776179416374697669747900010040556e737570706f72746564546f6b656e000200604d696e74696e67417574686f726974794e6f74466f756e640003007c556e65787065637465644d696e74696e67417574686f726974795374617465000400604d696e74696e67417574686f726974794d69736d61746368000500c44d697373696e674d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e67000600ac4d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e744d69736d6174636800070074476c6f62616c49737375616e6365436f756e63696c4e6f74466f756e640008004447617465776179537461746544726966740009000025020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574304761746577617953746174650404540000100158676174657761795f61637469766974795f6e6f6e63652c01504761746577617941637469766974794e6f6e63650001546172676f6e5f617070726f76616c735f6e6f6e63652c014c4172676f6e417070726f76616c734e6f6e63650001446172676f6e5f63697263756c6174696f6e180128543a3a42616c616e636500014c6172676f6e6f745f63697263756c6174696f6e180128543a3a42616c616e63650000290208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e000200002d0200000234003102000002350200350200000408101000390208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ed4014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d653d020144436f773c277374617469632c207374723e00003d02040c436f77040454014102000400410200000041020000050200450208306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c000049020c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b38011c5665633c75383e00000c684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e008843616e20626520657865637574656420627920657665727920606f726967696e602e387365745f686561705f7061676573040114706167657330010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646538011c5665633c75383e0002046453657420746865206e65772072756e74696d6520636f64652e5c7365745f636f64655f776974686f75745f636865636b73040110636f646538011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0051014e6f746520746861742072756e74696d652075706772616465732077696c6c206e6f742072756e20696620746869732069732063616c6c656420776974682061206e6f742d696e6372656173696e6720737065632076657273696f6e212c7365745f73746f726167650401146974656d734d0201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973550201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697838010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b38011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e44617574686f72697a655f75706772616465040124636f64655f6861736834011c543a3a486173680009106101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736834011c543a3a48617368000a206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015741524e494e473a205468697320617574686f72697a657320616e207570677261646520746861742077696c6c2074616b6520706c61636520776974686f757420616e792073616665747920636865636b732c20666f7259016578616d706c652074686174207468652073706563206e616d652072656d61696e73207468652073616d6520616e642074686174207468652076657273696f6e206e756d62657220696e637265617365732e204e6f74f07265636f6d6d656e64656420666f72206e6f726d616c207573652e205573652060617574686f72697a655f757067726164656020696e73746561642e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e606170706c795f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000b24550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005901446570656e64696e67206f6e207468652072756e74696d65277320604f6e536574436f64656020636f6e66696775726174696f6e2c20746869732066756e6374696f6e206d6179206469726563746c79206170706c791101746865206e65772060636f64656020696e207468652073616d6520626c6f636b206f7220617474656d707420746f207363686564756c652074686520757067726164652e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d020000025102005102000004083838005502000002380059020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c6173735d0201845065724469737061746368436c6173733c57656967687473506572436c6173733e00005d020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454016102000c01186e6f726d616c610201045400012c6f7065726174696f6e616c61020104540001246d616e6461746f72796102010454000061020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e736963650201384f7074696f6e3c5765696768743e0001246d61785f746f74616c650201384f7074696f6e3c5765696768743e0001207265736572766564650201384f7074696f6e3c5765696768743e0000650204184f7074696f6e04045401280108104e6f6e6500000010536f6d65040028000001000069020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000008010c6d61786d0201545065724469737061746368436c6173733c7533323e00013c6d61785f6865616465725f73697a657102012c4f7074696f6e3c7533323e00006d020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f7279100104540000710204184f7074696f6e04045401100108104e6f6e6500000010536f6d6504001000000100007502082873705f776569676874733c52756e74696d65446257656967687400000801107265616430010c753634000114777269746530010c75363400007902082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d653d020144436f773c277374617469632c207374723e000124696d706c5f6e616d653d020144436f773c277374617469632c207374723e000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069737d02011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013873797374656d5f76657273696f6e080108753800007d02040c436f77040454018102000400810200000081020000028502008502000004088902100089020000030800000008008d020c306672616d655f73797374656d1870616c6c6574144572726f720404540001243c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e6c4d756c7469426c6f636b4d6967726174696f6e734f6e676f696e67000604550141206d756c74692d626c6f636b206d6967726174696f6e206973206f6e676f696e6720616e642070726576656e7473207468652063757272656e7420636f64652066726f6d206265696e67207265706c616365642e444e6f7468696e67417574686f72697a6564000704584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400080494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c657491020c406172676f6e5f7072696d6974697665731c6469676573747324446967657374736574084c4e6f7465626f6f6b5665726966794572726f72011901244163636f756e7449640100001c0118617574686f720001244163636f756e744964000128626c6f636b5f766f74659502013c426c6f636b566f7465446967657374000128766f74696e675f6b6579990201744f7074696f6e3c506172656e74566f74696e674b65794469676573743e000128666f726b5f706f776572a50201444f7074696f6e3c466f726b506f7765723e0001286672616d655f696e666fb90201444f7074696f6e3c4672616d65496e666f3e0001107469636bc10201285469636b4469676573740001246e6f7465626f6f6b73c502018c4e6f7465626f6f6b4469676573743c4e6f7465626f6f6b5665726966794572726f723e000095020c406172676f6e5f7072696d6974697665731c646967657374733c426c6f636b566f74654469676573740000080130766f74696e675f706f776572c00140426c6f636b566f74696e67506f77657200012c766f7465735f636f756e74d4010c7533320000990204184f7074696f6e040454019d020108104e6f6e6500000010536f6d6504009d0200000100009d020c406172676f6e5f7072696d6974697665731c6469676573747354506172656e74566f74696e674b65794469676573740000040144706172656e745f766f74696e675f6b6579a10201444f7074696f6e3c566f74696e674b65793e0000a10204184f7074696f6e04045401340108104e6f6e6500000010536f6d650400340000010000a50204184f7074696f6e04045401a9020108104e6f6e6500000010536f6d650400a9020000010000a9020c406172676f6e5f7072696d69746976657328666f726b5f706f77657224466f726b506f77657200001c013869735f6c61746573745f766f7465200110626f6f6c0001246e6f7465626f6f6b732c010c753634000130766f74696e675f706f776572ad020110553235360001347365616c5f737472656e677468ad02011055323536000160746f74616c5f636f6d707574655f646966666963756c7479ad0201105532353600014c766f74655f637265617465645f626c6f636b73c00110753132380001446d696e65725f6e6f6e63655f73636f7265b50201304f7074696f6e3c553235363e0000ad02083c7072696d69746976655f7479706573105532353600000400b10201205b7536343b20345d0000b102000003040000003000b50204184f7074696f6e04045401ad020108104e6f6e6500000010536f6d650400ad020000010000b90204184f7074696f6e04045401bd020108104e6f6e6500000010536f6d650400bd020000010000bd020c406172676f6e5f7072696d6974697665731c64696765737473244672616d65496e666f00000c01206672616d655f69642c011c4672616d6549640001706672616d655f7265776172645f7469636b735f72656d61696e696e67d4010c75333200013069735f6e65775f6672616d65200110626f6f6c0000c1020c406172676f6e5f7072696d697469766573107469636b285469636b446967657374000004003001105469636b0000c5020c406172676f6e5f7072696d6974697665731c64696765737473384e6f7465626f6f6b446967657374042c5665726966794572726f72011901000401246e6f7465626f6f6b73c90201ec426f756e6465645665633c4e6f7465626f6f6b4175646974526573756c743c5665726966794572726f723e2c20436f6e73745533323c3235363e3e0000c9020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401cd02045300000400d50201185665633c543e0000cd020c406172676f6e5f7072696d697469766573206e6f7465626f6f6b4c4e6f7465626f6f6b4175646974526573756c74042c5665726966794572726f72011901001001246e6f746172795f6964d401204e6f74617279496400013c6e6f7465626f6f6b5f6e756d626572d401384e6f7465626f6f6b4e756d6265720001107469636b2c01105469636b00014c61756469745f66697273745f6661696c757265d102014c4f7074696f6e3c5665726966794572726f723e0000d10204184f7074696f6e0404540119010108104e6f6e6500000010536f6d65040019010000010000d502000002cd0200d9020c3870616c6c65745f646967657374731870616c6c6574144572726f72040454000134604475706c6963617465426c6f636b566f74654469676573740000047c4475706c696361746520426c6f636b566f746544696765737420666f756e64544475706c6963617465417574686f72446967657374000104704475706c696361746520417574686f7244696765737420666f756e644c4475706c69636174655469636b446967657374000204684475706c6963617465205469636b44696765737420666f756e64784475706c6963617465506172656e74566f74696e674b6579446967657374000304944475706c696361746520506172656e74566f74696e674b657944696765737420666f756e645c4475706c69636174654e6f7465626f6f6b446967657374000404784475706c6963617465204e6f7465626f6f6b44696765737420666f756e64604475706c6963617465466f726b506f7765724469676573740005047c4475706c696361746520466f726b506f77657244696765737420666f756e64584d697373696e67426c6f636b566f74654469676573740006045c4d697373696e6720426c6f636b566f74654469676573744c4d697373696e67417574686f72446967657374000704504d697373696e6720417574686f72446967657374444d697373696e675469636b446967657374000804484d697373696e67205469636b446967657374704d697373696e67506172656e74566f74696e674b6579446967657374000904744d697373696e6720506172656e74566f74696e674b6579446967657374544d697373696e674e6f7465626f6f6b446967657374000a04584d697373696e67204e6f7465626f6f6b44696765737450436f756c644e6f744465636f6465446967657374000b04604661696c656420746f206465636f64652064696765737473604475706c69636174654672616d65496e666f446967657374000c04644475706c6963617465204672616d65496e666f20666f756e64048054686520604572726f726020656e756d206f6620746869732070616c6c65742edd020c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400004c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e7420737065636966696564206279685b60436f6e6669673a3a4d696e696d756d506572696f64605d2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e0051015468697320646973706174636820636c617373206973205f4d616e6461746f72795f20746f20656e73757265206974206765747320657865637574656420696e2074686520626c6f636b2e204265206177617265510174686174206368616e67696e672074686520636f6d706c6578697479206f6620746869732063616c6c20636f756c6420726573756c742065786861757374696e6720746865207265736f757263657320696e206184626c6f636b20746f206578656375746520616e79206f746865722063616c6c732e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602955012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f283129602062656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee10200000408000400e502083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656e88015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c73e902018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e0000e9020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400ed0201185665633c543e0000ed020000020000f1020c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001145061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573ed0201445665633c543a3a4163636f756e7449643e00011063616c6cf502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c649c010c7531360001446f746865725f7369676e61746f72696573ed0201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74350501904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6cf502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f7765696768742801185765696768740001a85501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e003d012a2a49662074686520617070726f76616c207468726573686f6c64206973206d65742028696e636c7564696e67207468652073656e646572277320617070726f76616c292c20746869732077696c6c4501696d6d6564696174656c792065786563757465207468652063616c6c2e2a2a205468697320697320746865206f6e6c792077617920746f20657865637574652061206d756c74697369672063616c6c202dc060617070726f76655f61735f6d756c7469602077696c6c206e65766572207472696767657220657865637574696f6e2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e004d014e4f54453a20466f7220696e7465726d65646961746520617070726f76616c7320286e6f74207468652066696e616c20617070726f76616c292c20796f752073686f756c642067656e6572616c6c7920757365450160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c20616e64206973206d6f726528656666696369656e742e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c649c010c7531360001446f746865725f7369676e61746f72696573ed0201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74350501904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742801185765696768740002985501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e0039012a2a546869732066756e6374696f6e2077696c6c204e455645522065786563757465207468652063616c6c2c206576656e2069662074686520617070726f76616c207468726573686f6c642069735101726561636865642e2a2a204974206f6e6c792072656769737465727320617070726f76616c2e20546f2061637475616c6c792065786563757465207468652063616c6c2c206061735f6d756c746960206d757374f062652063616c6c65642077697468207468652066756c6c2063616c6c206461746120627920616e79206f6620746865207369676e61746f726965732e004d01546869732066756e6374696f6e206973206d6f726520656666696369656e74207468616e206061735f6d756c74696020666f7220696e7465726d65646961746520617070726f76616c732073696e6365206974d06f6e6c79207265717569726573207468652063616c6c20686173682c206e6f74207468652066756c6c2063616c6c20646174612e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e003d014e4f54453a20546f2065786563757465207468652063616c6c20616674657220617070726f76616c73206172652067617468657265642c20616e79207369676e61746f7279206d7573742063616c6c29016061735f6d756c7469602077697468207468652066756c6c2063616c6c20646174612e20546869732066756e6374696f6e2063616e6e6f742065786563757465207468652063616c6c2e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c649c010c7531360001446f746865725f7369676e61746f72696573ed0201445665633c543a3a4163636f756e7449643e00012474696d65706f696e7488017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e30706f6b655f6465706f7369740c01247468726573686f6c649c010c7531360001446f746865725f7369676e61746f72696573ed0201445665633c543a3a4163636f756e7449643e00012463616c6c5f686173680401205b75383b2033325d000434f4506f6b6520746865206465706f73697420726573657276656420666f7220616e206578697374696e67206d756c7469736967206f7065726174696f6e2e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d75737420626520746865206f726967696e616c206465706f7369746f72206f665c746865206d756c7469736967206f7065726174696f6e2e000101546865207472616e73616374696f6e206665652069732077616976656420696620746865206465706f73697420616d6f756e7420686173206368616e6765642e0019012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c73206e656564656420666f722074686973206d756c74697369672e3d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f66207468652c20206d756c74697369672e05012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c2074686973206465706f73697420697320726573657276656420666f722e008c456d69747320604465706f736974506f6b656460206966207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef50208346172676f6e5f72756e74696d652c52756e74696d6543616c6c0001701853797374656d0400490201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400dd0201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e000200204d756c74697369670400f10201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e0003001450726f78790400f90201a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e000400145469636b730400090301a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5469636b732c2052756e74696d653e000500284d696e696e67536c6f7404000d0301bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d696e696e67536c6f742c2052756e74696d653e00060030426974636f696e5574786f730400110301c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426974636f696e5574786f732c2052756e74696d653e000700185661756c74730400310301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5661756c74732c2052756e74696d653e00080030426974636f696e4c6f636b730400590301c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426974636f696e4c6f636b732c2052756e74696d653e000900204e6f7461726965730400750301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6f7461726965732c2052756e74696d653e000a00204e6f7465626f6f6b0400790301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6f7465626f6f6b2c2052756e74696d653e000b00484c6f63616c636861696e5472616e736665720400b90301dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4c6f63616c636861696e5472616e736665722c2052756e74696d653e000c0034426c6f636b5365616c537065630400bd0301c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426c6f636b5365616c537065632c2052756e74696d653e000d001c446f6d61696e730400c10301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446f6d61696e732c2052756e74696d653e000e00285072696365496e6465780400c50301bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5072696365496e6465782c2052756e74696d653e000f001c4772616e6470610400cd0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e00110024426c6f636b5365616c0400f90301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426c6f636b5365616c2c2052756e74696d653e00120030426c6f636b526577617264730400150401c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426c6f636b526577617264732c2052756e74696d653e001300104d696e740400190401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d696e742c2052756e74696d653e0014002042616c616e63657304001d0401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e001500244f776e6572736869700400250401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f776e6572736869702c2052756e74696d653e0016001c547850617573650400290401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c547850617573652c2052756e74696d653e0017001c5574696c69747904002d0401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e001900105375646f0400350401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e001a002054726561737572790400390401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e001f004c4f7065726174696f6e616c4163636f756e74730400450401e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f7065726174696f6e616c4163636f756e74732c2052756e74696d653e00220040457468657265756d56657269666965720400690401d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c457468657265756d56657269666965722c2052756e74696d653e0023004843726f7373636861696e5472616e736665720400c10401dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43726f7373636861696e5472616e736665722c2052756e74696d653e00240000f9020c3070616c6c65745f70726f78791870616c6c65741043616c6c04045400012c1470726f78790c01107265616cfd0201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065050301504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cf502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465fd0201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e0001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465fd0201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e005d015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e7473206372656174656420627920606372656174655f70757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e000114696e6465789c010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572fd0201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065980130543a3a50726f787954797065000114696e6465789c010c753136000118686569676874d40144426c6f636b4e756d626572466f723c543e0001246578745f696e646578d4010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746fb0606372656174655f7075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0055012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c656420606372656174655f707572656020746f206372656174652074686973206163636f756e742e55012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f20606372656174655f70757265602e2050726f6261626c79206030602e09012d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f20606372656174655f70757265602e45012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20606372656174655f7075726560207761732070726f6365737365642e51012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20606372656174655f7075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265f86163636f756e742077686f736520606372656174655f70757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616cfd0201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616cfd0201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465fd0201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465fd0201504163636f756e7449644c6f6f6b75704f663c543e0001107265616cfd0201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065050301504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cf502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e30706f6b655f6465706f736974000a204901506f6b65202f2041646a757374206465706f73697473206d61646520666f722070726f7869657320616e6420616e6e6f756e63656d656e7473206261736564206f6e2063757272656e742076616c7565732e0d01546869732063616e2062652075736564206279206163636f756e747320746f20706f737369626c79206c6f776572207468656972206c6f636b656420616d6f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e000101546865207472616e73616374696f6e206665652069732077616976656420696620746865206465706f73697420616d6f756e7420686173206368616e6765642e008c456d69747320604465706f736974506f6b656460206966207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732efd020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780190011408496404000001244163636f756e74496400000014496e6465780400010301304163636f756e74496e6465780001000c526177040038011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400110201205b75383b2032305d0004000001030000069000050304184f7074696f6e04045401980108104e6f6e6500000010536f6d65040098000001000009030c3070616c6c65745f7469636b731870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e0d030c4870616c6c65745f6d696e696e675f736c6f741870616c6c65741043616c6c0404540001080c6269640c010c626964180128543a3a42616c616e63650001106b657973b0011c543a3a4b6579730001446d696e696e675f6163636f756e745f6964bc01504f7074696f6e3c543a3a4163636f756e7449643e00005861015375626d697420612062696420666f722061206d696e696e6720736c6f7420696e20746865206e65787420636f686f72742e204f6e636520616c6c2073706f7473206172652066696c6c656420696e20746865206e657874f4636f686f72742c2061206269646465722063616e20626520737570706c616e74656420627920737570706c79696e67206120686967686572206269642e00b84561636820736c6f742068617320604d6178436f686f727453697a65602073706f747320617661696c61626c652e005101546f20626520656c696769626c6520666f72206120736c6f742c20796f75206d757374206861766520746865207265717569726564206f776e65727368697020746f6b656e7320286172676f6e6f74732920696e590174686973206163636f756e742e2054686520726571756972656420616d6f756e742069732063616c63756c6174656420617320612070657263656e74616765206f662074686520746f74616c206f776e6572736869705501746f6b656e7320696e20746865206e6574776f726b2e20546869732070657263656e746167652069732061646a7573746564206265666f72652074686520626567696e6e696e67206f66206561636820736c6f742e004501496620796f757220626964206973206e6f206c6f6e6765722077696e6e696e672c20612060536c6f7442696464657244726f7070656460206576656e742077696c6c20626520656d69747465642e2042792d016d6f6e69746f72696e6720666f722074686973206576656e742c20796f752077696c6c2062652061626c6520746f20656e7375726520796f7572206269642069732061636365707465642e000d014e4f54453a2062696464696e6720666f72206561636820736c6f742077696c6c20626520636c6f73656420617420612072616e646f6d20626c6f636b2077697468696e3d01606d696e696e675f636f6e6669672e7469636b735f6265666f72655f6269645f656e645f666f725f7672665f636c6f73656020626c6f636b73206f662074686520736c6f7420656e642074696d652e00610154686520736c6f74206475726174696f6e2063616e2062652063616c63756c617465642061732060426c6f636b734265747765656e536c6f7473202a204d61784d696e657273202f204d6178436f686f727453697a65602e002c506172616d65746572733a902d2060626964603a2054686520616d6f756e74206f66206172676f6e7320746f206269644d012d20606b657973603a205468652073657373696f6e2022686f7422206b65797320666f722074686520736c6f742028426c6f636b5365616c417574686f72697479496420616e64204772616e6470614964292e59012d20606d696e696e675f6163636f756e745f6964603a2054686973206163636f756e745f696420616c6c6f777320796f7520746f206f7065726174652061732074686973206d696e6572206163636f756e742069642c01012020627574207573652066756e64696e6720286172676f6e6f747320616e6420626964292066726f6d20746865207375626d697474696e67206163636f756e746c636f6e6669677572655f6d696e696e675f736c6f745f64656c61790801446d696e696e675f736c6f745f64656c61798d0101304f7074696f6e3c5469636b3e0001887469636b735f6265666f72655f6269645f656e645f666f725f7672665f636c6f73658d0101304f7074696f6e3c5469636b3e000104bc41646d696e2066756e6374696f6e20746f2075706461746520746865206d696e696e6720736c6f742064656c61792e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e11030c5070616c6c65745f626974636f696e5f7574786f731870616c6c65741043616c6c0404540001141073796e630401247574786f5f73796e631503013c426974636f696e5574786f53796e63000004e85375626d6974746564207768656e206120626974636f696e205554584f20686173206265656e206d6f766564206f7220636f6e6669726d65642e4c7365745f636f6e6669726d65645f626c6f636b080138626974636f696e5f686569676874300134426974636f696e486569676874000148626974636f696e5f626c6f636b5f68617368d00140426974636f696e426c6f636b4861736800011449015365747320746865206d6f737420726563656e7420636f6e6669726d656420626974636f696e20626c6f636b2068656967687420286f6e6c792065786563757461626c6520627920746865204f7261636c65444f70657261746f72206163636f756e7429002c2320417267756d656e747311012a2060626974636f696e5f68656967687460202d20746865206c617465737420626974636f696e20626c6f636b2068656967687420746f20626520636f6e6669726d6564307365745f6f70657261746f720401286163636f756e745f6964000130543a3a4163636f756e74496400021025015365747320746865206f7261636c65206f70657261746f72206163636f756e7420696420286f6e6c792065786563757461626c652062792074686520526f6f74206163636f756e7429002c2320417267756d656e7473bc2a20606163636f756e745f696460202d20746865206163636f756e74206964206f6620746865206f70657261746f726066756e645f776974685f7574786f5f63616e64696461746508011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f52656600030cec42696e6420612063616e646964617465205554584f20726566206173207468652066756e64696e67205554584f20666f7220697473206c6f636b2e3d01546865206c6f636b732070616c6c657420617574686f72697a6573207468652070726f6d6f74696f6e3b20746869732070616c6c65742062696e6473207468652072656620616e6420626567696e7324747261636b696e672e5472656a6563745f7574786f5f63616e64696461746508011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f526566000408450152656a65637420612070656e64696e672063616e646964617465205554584f20616e64206d6174657269616c697a6520697420617320616e206f727068616e207468726f75676820746865206c6f636b731c70616c6c65742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15030c406172676f6e5f7072696d69746976657324696e686572656e74733c426974636f696e5574786f53796e6300000c01147370656e74190301545665633c426974636f696e5574786f5370656e643e00011866756e6465642503015c5665633c426974636f696e5574786f46756e64696e673e00013473796e635f746f5f626c6f636b2d030130426974636f696e426c6f636b000019030000021d03001d030c406172676f6e5f7072696d69746976657324696e686572656e747340426974636f696e5574786f5370656e6400000c011c7574786f5f69642c01185574786f49640001207574786f5f7265662103013c4f7074696f6e3c5574786f5265663e000138626974636f696e5f6865696768742c0134426974636f696e4865696768740000210304184f7074696f6e04045401cc0108104e6f6e6500000010536f6d650400cc0000010000250300000229030029030c406172676f6e5f7072696d69746976657324696e686572656e747348426974636f696e5574786f46756e64696e67000014011c7574786f5f69642c01185574786f49640001207574786f5f726566cc011c5574786f5265660001207361746f736869732c01205361746f7368697300014465787065637465645f7361746f736869732c01205361746f73686973000138626974636f696e5f6865696768742c0134426974636f696e48656967687400002d030c406172676f6e5f7072696d6974697665731c626974636f696e30426974636f696e426c6f636b0000080130626c6f636b5f6865696768742c0134426974636f696e486569676874000128626c6f636b5f68617368d00140426974636f696e426c6f636b48617368000031030c3470616c6c65745f7661756c74731870616c6c65741043616c6c040454000124186372656174650401307661756c745f636f6e666967350301945661756c74436f6e6669673c543a3a4163636f756e7449642c20543a3a42616c616e63653e000000386d6f646966795f66756e64696e670c01207661756c745f696410011c5661756c74496400013873656375726974697a6174696f6e180128543a3a42616c616e636500015073656375726974697a6174696f6e5f726174696fe0012446697865645531323800012061014d6f646966792066756e647320616c6c6f636174656420627920746865207661756c742e20546869732077696c6c206e6f74206166666563742069737375656420626974636f696e206c6f636b732c206275742077696c6cc86166666563742074686520616d6f756e74206f662066756e647320617661696c61626c6520666f72206e6577206f6e65732e00ec5468652073656375726974697a6174696f6e2070657263656e74206d757374206265206d61696e7461696e6564206f7220696e637265617365642e00610154686520616d6f756e7420616c6c6f6361746564206d6179206e6f7420676f2062656c6f7720746865206578697374696e6720726573657276656420616d6f756e74732c2062757420796f752063616e2072656c656173654d0166756e647320696e2074686973207661756c7420617320626974636f696e206c6f636b73206172652072656c65617365642e20546f2073746f702069737375696e6720616e79206d6f726520626974636f696e6c6c6f636b732c20757365207468652060636c6f736560206170692e306d6f646966795f7465726d730801207661756c745f696410011c5661756c7449640001147465726d73390301585661756c745465726d733c543a3a42616c616e63653e0002084d014368616e676520746865207465726d73206f662074686973207661756c742e20546865206368616e67652077696c6c206265206170706c69656420617420746865206e657874206d696e696e67206672616d6515016368616e67652074686174206973206174206c6561737420604d696e5465726d734d6f64696669636174696f6e426c6f636b44656c61796020626c6f636b7320617761792e14636c6f73650401207661756c745f696410011c5661756c744964000308410153746f70206f66666572696e67206164646974696f6e616c20626974636f696e206c6f636b732066726f6d2074686973207661756c742e2057696c6c206e6f7420616666656374206578697374696e671d016c6f636b732e2041732066756e6473206172652072657475726e65642c20746865792077696c6c2062652072656c656173656420746f20746865207661756c74206f776e65722e507265706c6163655f626974636f696e5f787075620801207661756c745f696410011c5661756c744964000130626974636f696e5f78707562510301444f7061717565426974636f696e5870756200040c61015265706c6163652074686520626974636f696e20787075626b657920666f722074686973207661756c742e20546869732077696c6c206e6f7420616666656374206578697374696e6720626974636f696e206c6f636b732c31016275742077696c6c206265207573656420666f7220616e79206c6f636b73206166746572207468697320706f696e742e2057696c6c2062652072656a656374656420696620616c726561647914757365642e1c636f6c6c6563740401207661756c745f696410011c5661756c744964000500507365745f64656c65676174655f6163636f756e7404014c64656c65676174655f6163636f756e745f6964bc01504f7074696f6e3c543a3a4163636f756e7449643e000600207365745f6e616d650401106e616d65490301444f7074696f6e3c5661756c744e616d653e000700587365745f636f6d6d69747465645f6172676f6e6f7473040118616d6f756e74c00128543a3a42616c616e6365000800040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e35030c3470616c6c65745f7661756c74731870616c6c65742c5661756c74436f6e66696708244163636f756e74496401001c42616c616e63650118001801147465726d733903014c5661756c745465726d733c42616c616e63653e0001106e616d65490301444f7074696f6e3c5661756c744e616d653e00014c64656c65676174655f6163636f756e745f6964bc01444f7074696f6e3c4163636f756e7449643e00013873656375726974697a6174696f6ec0011c42616c616e636500013c626974636f696e5f787075626b6579510301444f7061717565426974636f696e5870756200015073656375726974697a6174696f6e5f726174696f3d030124466978656455313238000039030c406172676f6e5f7072696d697469766573147661756c74285661756c745465726d73041c42616c616e636501180010016c626974636f696e5f616e6e75616c5f70657263656e745f726174653d030124466978656455313238000140626974636f696e5f626173655f666565c0011c42616c616e636500015c74726561737572795f70726f6669745f73686172696e674103011c5065726d696c6c00017474726561737572795f626f6e75735f70726f6669745f73686172696e674103011c5065726d696c6c00003d03000006e000410300000645030045030c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000490304184f7074696f6e040454014d030108104e6f6e6500000010536f6d6504004d0300000100004d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000051030c406172676f6e5f7072696d6974697665731c626974636f696e444f7061717565426974636f696e5870756200000400550301205b75383b2037385d000055030000034e000000080059030c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c65741043616c6c04045400012428696e697469616c697a651001207661756c745f696410011c5661756c7449640001207361746f736869732c01205361746f73686973000138626974636f696e5f7075626b65795d03015c436f6d70726573736564426974636f696e5075626b657900011c6f7074696f6e73650301584f7074696f6e3c4c6f636b4f7074696f6e733c543e3e0000205901496e697469616c697a65206120626974636f696e206c6f636b2e20546869732077696c6c206372656174652061204c6f636b6564426974636f696e20666f7220746865207375626d697474696e67206163636f756e74a8616e64206c6f672074686520426974636f696e20536372697074206861736820746f204576656e74732e005d01546865207075626b6579207375626d697474656420686572652077696c6c206265207573656420746f20637265617465206120736372697074207075626b657920746861742077696c6c206265207573656420696e2061b474696d656c6f636b206d756c74697369672073637269707420746f206c6f636b2074686520626974636f696e2e0039014e4f54453a204120226c6f636b2d657222206d7573742073656e642062746320746f2074686520636f7369676e6572205554584f206164647265737320746f2022636f6d706c6574652220746865d04c6f636b6564426974636f696e20616e6420626520616464656420746f2074686520426974636f696e204d696e74206c696e652e3c726571756573745f72656c656173650c011c7574786f5f69643001185574786f4964000140746f5f7363726970745f7075626b65796d03014c426974636f696e5363726970745075626b657900014c626974636f696e5f6e6574776f726b5f6665653001205361746f7368697300011851015375626d6974746564206279206120426974636f696e20686f6c64657220746f2074726967676572207468652072656c65617365206f66207468656972205574786f206f7574206f662074686520636f7369676e45017363726970742e2041207472616e73616374696f6e207370656e64696e6720746865205554584f2073686f756c64206265207072652d6372656174656420736f20746861742074686520736967686173683d0163616e206265207375626d697474656420686572652e20546865207661756c74206f70657261746f722077696c6c2068617665203130206461797320746f20636f756e7465722d7369676e2074686555017472616e73616374696f6e2e2049742077696c6c206265207075626c6973686564207769746820746865207075626c6963206b6579206173206120426974636f696e5574786f436f7369676e6564204576656e742e003d014f776e6572206d757374207375626d6974206120736372697074207075626b657920616e6420616c736f20612066656520746f2070617920746f2074686520626974636f696e206e6574776f726b2e38636f7369676e5f72656c6561736508011c7574786f5f69643001185574786f49640001247369676e6174757265e80140426974636f696e5369676e617475726500021461015375626d69747465642062792061205661756c74206f70657261746f7220746f20636f7369676e207468652072656c65617365206f66206120626974636f696e207574786f2e2054686520426974636f696e206f776e6572550172656c65617365206665652077696c6c206265206275726e65642c20616e6420746865206c6f636b2077696c6c20626520616c6c6f77656420746f2065787069726520776974686f757420612070656e616c74792e004d0154686973206973207375626d69747465642061732061206e6f2d666565207472616e73616374696f6e206f666620636861696e20746f20616c6c6f77206b65797320746f2072656d61696e20696e20636f6c642077616c6c6574732e1c7261746368657408011c7574786f5f69643001185574786f496400011c6f7074696f6e73650301584f7074696f6e3c4c6f636b4f7074696f6e733c543e3e000338410152617463686574696e6720616c6c6f77732061207573657220746f206368616e676520746865206c6f636b207072696365206f6620746865697220626974636f696e206c6f636b2e2054686973206973510166756e6374696f6e616c6c79207468652073616d652061732072656c656173696e6720616e642072652d696e697469616c697a696e672c2062757420697420616c6c6f77732061207573657220746f20736b6970610173656e64696e67207472616e73616374696f6e73207468726f75676820626974636f696e20616e6420616e79206173736f63696174656420666565732e20497420616c736f20616c6c6f777320796f7520746f20737461794d016f6e20796f7572206f726967696e616c206c6f636b2065787069726174696f6e20776974686f757420686176696e6720746f20706179207468652066756c6c2079656172206f66206665657320616761696e2e00610152617463686574696e672022646f776e22202d207768656e20746865207072696365206f6620626974636f696e206973206c6f776572207468616e20796f7572206c6f636b2070726963652c20796f7520706179207468655d0166756c6c2072656c6561736520707269636520616e6420676574206164646564206261636b20746f20746865206d696e74207175657565206174207468652063757272656e74206d61726b657420726174652e20596f755901706f636b65742074686520646966666572656e6365206265747765656e2074686520616c7265616479206d696e74656420226c6f636b2070726963652220616e6420746865206e6577206d61726b65742076616c7565550128776869636820796f75206a75737420686164206275726e6564292e20596f7572206e6577206c6f636b2070726963652069732073657420746f20746865206d61726b6574206c6f772c20736f20796f752063616eb874616b6520616476616e74616765206f66207261746368657473202275702220696e20746865206675747572652e00550152617463686574696e672022757022202d207768656e20746865207072696365206f6620626974636f696e20697320686967686572207468616e20796f7572206c6f636b2070726963652c20796f75207061792061610170726f72617465642066656520666f72207468652072656d61696e646572206f6620796f7572206578697374696e67206c6f636b206475726174696f6e2e20596f752061726520616464656420746f20746865206d696e742d01717565756520666f722074686520646966666572656e636520696e20796f7572206e6577206c6f636b207072696365207673207468652070726576696f7573206c6f636b2070726963652e8061646d696e5f6d6f646966795f6d696e696d756d5f6c6f636b65645f736174730401207361746f736869733001205361746f7368697300040074726571756573745f6f727068616e65645f7574786f5f72656c656173650c01207574786f5f726566cc011c5574786f526566000140746f5f7363726970745f7075626b65796d03014c426974636f696e5363726970745075626b657900014c626974636f696e5f6e6574776f726b5f6665653001205361746f7368697300050070636f7369676e5f6f727068616e65645f7574786f5f72656c656173650c01306f727068616e5f6f776e6572000130543a3a4163636f756e7449640001207574786f5f726566cc011c5574786f5265660001247369676e6174757265e80140426974636f696e5369676e617475726500061c41014e4f54453a2054686520607369676e61747572656020706172616d65746572206973204e4f54207665726966696564206f6e2d636861696e2e20546865206f727068616e207265636f726420646f657339016e6f742072657461696e2074686520636f7369676e207363726970742061726773206e656564656420666f7220766572696669636174696f6e2028746865792061726520636c65616e6564207570f4776974682074686520426974636f696e4c6f636b292e20546865207369676e617475726520697320706173736564207468726f75676820746f207468654101604f727068616e65645574786f436f7369676e656460206576656e7420736f20746865206c6f636b206f776e65722063616e20636f6e7374727563742074686520426974636f696e2072656c6561736535017472616e73616374696f6e206f66662d636861696e2e20412067617262616765207369676e6174757265206d65616e7320746865206f776e65722063616e2774207370656e6420e28094206e6f41016f6e2d636861696e2064616d6167652e20546f20616464206f6e2d636861696e20766572696669636174696f6e2c2074686520636f7369676e20736372697074206172677320776f756c64206e656564f0746f2062652073746f72656420696e20604f727068616e65645574786f60202873746f72616765206d6967726174696f6e207265717569726564292e38696e697469616c697a655f666f721401286163636f756e745f6964000130543a3a4163636f756e7449640001207661756c745f696410011c5661756c7449640001207361746f736869732c01205361746f73686973000138626974636f696e5f7075626b65795d03015c436f6d70726573736564426974636f696e5075626b657900011c6f7074696f6e73650301584f7074696f6e3c4c6f636b4f7074696f6e733c543e3e0008005c696e6372656173655f73656375726974697a6174696f6e08011c7574786f5f69643001185574786f49640001306e65775f7361746f736869732c01205361746f73686973000900040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d030c406172676f6e5f7072696d6974697665731c626974636f696e5c436f6d70726573736564426974636f696e5075626b657900000400610301205b75383b2033335d00006103000003210000000800650304184f7074696f6e0404540169030108104e6f6e6500000010536f6d6504006903000001000069030c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c65742c4c6f636b4f7074696f6e7304045400010408563104016c6d6963726f676f6e735f61745f7461726765745f7065725f627463850101484f7074696f6e3c543a3a42616c616e63653e000000006d030c406172676f6e5f7072696d6974697665731c626974636f696e4c426974636f696e5363726970745075626b65790000040071030170426f756e6465645665633c75382c20436f6e73745533323c33343e3e000071030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000075030c3c70616c6c65745f6e6f7461726965731870616c6c65741043616c6c04045400010c1c70726f706f73650401106d657461f4013c4e6f746172794d6574614f663c543e0000002061637469766174650401406f70657261746f725f6163636f756e74000130543a3a4163636f756e744964000100187570646174650c01246e6f746172795f6964d401204e6f7461727949640001106d657461f4013c4e6f746172794d6574614f663c543e0001386566666563746976655f7469636b2c01105469636b000208610155706461746520746865206d65746164617461206f662061206e6f746172792c20746f206265206566666563746976652061742074686520676976656e207469636b206865696768742c207768696368206d757374206265b03e3d204d6574614368616e6765735469636b44656c6179207469636b7320696e20746865206675747572652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e79030c3c70616c6c65745f6e6f7465626f6f6b1870616c6c65741043616c6c040454000108187375626d69740401246e6f7465626f6f6b737d0301645665633c5369676e65644e6f7465626f6f6b4865616465723e00000018756e6c6f636b0401246e6f746172795f69641001204e6f746172794964000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e7d0300000281030081030c406172676f6e5f7072696d697469766573206e6f7465626f6f6b505369676e65644e6f7465626f6f6b4865616465720000080118686561646572850301384e6f7465626f6f6b4865616465720001247369676e6174757265b503013c4e6f746172795369676e6174757265000085030c406172676f6e5f7072696d697469766573206e6f7465626f6f6b384e6f7465626f6f6b48656164657200003c011c76657273696f6e8903010c75313600013c6e6f7465626f6f6b5f6e756d626572d401384e6f7465626f6f6b4e756d6265720001107469636b2c01105469636b00010c746178c00110753132380001246e6f746172795f6964d401204e6f74617279496400013c636861696e5f7472616e73666572738d0301bc426f756e6465645665633c436861696e5472616e736665722c204d61784e6f7465626f6f6b5472616e73666572733e0001546368616e6765645f6163636f756e74735f726f6f743401104832353600015c6368616e6765645f6163636f756e745f6f726967696e73990301c4426f756e6465645665633c4163636f756e744f726967696e2c20436f6e73745533323c7b207533323a3a4d4158207d3e3e000140626c6f636b5f766f7465735f726f6f7434011048323536000144626c6f636b5f766f7465735f636f756e74d4010c753332000144626c6f636b735f776974685f766f746573a5030180426f756e6465645665633c483235362c20436f6e73745533323c313030303e3e000148626c6f636b5f766f74696e675f706f776572c00140426c6f636b566f74696e67506f77657200012c7365637265745f686173683401484e6f7465626f6f6b53656372657448617368000134706172656e745f736563726574a10201584f7074696f6e3c4e6f7465626f6f6b5365637265743e00011c646f6d61696e73a90301e8426f756e6465645665633c28446f6d61696e486173682c204163636f756e744964292c204d6178446f6d61696e735065724e6f7465626f6f6b3e000089030000069c008d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019103045300000400950301185665633c543e000091030c406172676f6e5f7072696d697469766573206e6f7465626f6f6b34436861696e5472616e736665720001082c546f4d61696e636861696e0801286163636f756e745f69640001244163636f756e744964000118616d6f756e74c001107531323800000030546f4c6f63616c636861696e04012c7472616e736665725f6964d401585472616e73666572546f4c6f63616c636861696e496400010000950300000291030099030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019d03045300000400a10301185665633c543e00009d030c406172676f6e5f7072696d6974697665733862616c616e63655f6368616e6765344163636f756e744f726967696e000008013c6e6f7465626f6f6b5f6e756d626572d401384e6f7465626f6f6b4e756d62657200012c6163636f756e745f756964d401404163636f756e744f726967696e5569640000a1030000029d0300a5030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401340453000004002d0201185665633c543e0000a9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ad03045300000400b10301185665633c543e0000ad0300000408340000b103000002ad0300b503000003400000000800b9030c6870616c6c65745f6c6f63616c636861696e5f7472616e736665721870616c6c65741043616c6c0404540001044873656e645f746f5f6c6f63616c636861696e080118616d6f756e74c001583c5420617320436f6e6669673e3a3a42616c616e63650001246e6f746172795f69641001204e6f746172794964000000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ebd030c5870616c6c65745f626c6f636b5f7365616c5f737065631870616c6c65741043616c6c04045400010424636f6e666967757265080130766f74655f6d696e696d756d8501014c4f7074696f6e3c566f74654d696e696d756d3e000148636f6d707574655f646966666963756c7479850101304f7074696f6e3c753132383e000000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec1030c3870616c6c65745f646f6d61696e731870616c6c65741043616c6c0404540001043c7365745f7a6f6e655f7265636f726408012c646f6d61696e5f68617368340128446f6d61696e4861736800012c7a6f6e655f7265636f72643d0101605a6f6e655265636f72643c543a3a4163636f756e7449643e000000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec5030c4870616c6c65745f70726963655f696e6465781870616c6c65741043616c6c040454000108187375626d6974040114696e646578c90301285072696365496e64657800000435015375626d697420746865206c617465737420707269636520696e6465782e204f6e6c792076616c696420666f722074686520636f6e66696775726564206f70657261746f72206163636f756e74307365745f6f70657261746f720401286163636f756e745f6964000130543a3a4163636f756e74496400011009015365747320746865206f70657261746f72206163636f756e7420696420286f6e6c792065786563757461626c652062792074686520526f6f74206163636f756e7429002c2320417267756d656e7473bc2a20606163636f756e745f696460202d20746865206163636f756e74206964206f6620746865206f70657261746f72040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec903084870616c6c65745f70726963655f696e646578285072696365496e64657800001801346274635f7573645f70726963653d0301244669786564553132380001446172676f6e6f745f7573645f7072696365e0012446697865645531323800013c6172676f6e5f7573645f70726963653d0301244669786564553132380001586172676f6e5f7573645f7461726765745f7072696365e001244669786564553132380001946172676f6e5f74696d655f77656967687465645f617665726167655f6c697175696469747918011c42616c616e63650001107469636b2c01105469636b0000cd030c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66d10301c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f66f5030140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66d10301c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f66f5030140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100144426c6f636b4e756d626572466f723c543e00016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e0002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed103085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f660804480134044e0110000801187365745f6964300114536574496400013065717569766f636174696f6ed503014845717569766f636174696f6e3c482c204e3e0000d503085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e0804480134044e011001081c507265766f74650400d90301890166696e616c6974795f6772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c2066696e616c6974795f6772616e6470613a3a507265766f74653c0a482c204e3e2c20417574686f726974795369676e61747572652c3e00000024507265636f6d6d69740400e90301910166696e616c6974795f6772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c2066696e616c6974795f6772616e6470613a3a507265636f6d6d69740a3c482c204e3e2c20417574686f726974795369676e61747572652c3e00010000d903084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401b4045601dd03045301e10300100130726f756e645f6e756d62657230010c7536340001206964656e74697479b4010849640001146669727374e503011828562c2053290001187365636f6e64e503011828562c2053290000dd03084066696e616c6974795f6772616e6470611c507265766f74650804480134044e01100008012c7461726765745f68617368340104480001347461726765745f6e756d6265721001044e0000e1030c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e617475726500000400b5030148656432353531393a3a5369676e61747572650000e50300000408dd03e10300e903084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401b4045601ed03045301e10300100130726f756e645f6e756d62657230010c7536340001206964656e74697479b4010849640001146669727374f103011828562c2053290001187365636f6e64f103011828562c2053290000ed03084066696e616c6974795f6772616e64706124507265636f6d6d69740804480134044e01100008012c7461726765745f68617368340104480001347461726765745f6e756d6265721001044e0000f10300000408ed03e10300f503081c73705f636f726510566f696400010000f9030c4470616c6c65745f626c6f636b5f7365616c1870616c6c65741043616c6c040454000104146170706c790401107365616cfd030144426c6f636b5365616c496e686572656e74000000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732efd030c406172676f6e5f7072696d69746976657324696e686572656e747344426c6f636b5365616c496e686572656e7400010810566f74651801347365616c5f737472656e677468ad020110553235360001246e6f746172795f6964d401204e6f746172794964000158736f757263655f6e6f7465626f6f6b5f6e756d626572d401384e6f7465626f6f6b4e756d626572000154736f757263655f6e6f7465626f6f6b5f70726f6f660104012c4d65726b6c6550726f6f66000128626c6f636b5f766f746509040124426c6f636b566f74650001446d696e65725f6e6f6e63655f73636f7265b50201304f7074696f6e3c553235363e0000001c436f6d707574650001000001040c406172676f6e5f7072696d6974697665733862616c616e63655f6368616e67652c4d65726b6c6550726f6f6600000c011470726f6f66050401a0426f756e6465645665633c483235362c20436f6e73745533323c7b207533323a3a4d4158207d3e3e0001406e756d6265725f6f665f6c6561766573d4010c7533320001286c6561665f696e646578d4010c753332000005040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401340453000004002d0201185665633c543e000009040c406172676f6e5f7072696d69746976657328626c6f636b5f766f746528426c6f636b566f7465540410486173680134001c01286163636f756e745f69640001244163636f756e744964000128626c6f636b5f6861736834011048617368000114696e646578d4010c753332000114706f776572c00140426c6f636b566f74696e67506f7765720001247369676e61747572650d0401384d756c74695369676e6174757265000160626c6f636b5f726577617264735f6163636f756e745f69640001244163636f756e7449640001107469636b2c01105469636b00000d04082873705f72756e74696d65384d756c74695369676e61747572650001101c456432353531390400b5030148656432353531393a3a5369676e61747572650000001c537232353531390400b5030148737232353531393a3a5369676e617475726500010014456364736104001104014065636473613a3a5369676e61747572650002000c45746804001104015865636473613a3a4b656363616b5369676e617475726500030000110400000341000000080015040c5070616c6c65745f626c6f636b5f726577617264731870616c6c65741043616c6c040454000108607365745f626c6f636b5f726577617264735f706175736564040118706175736564200110626f6f6c0000007c7365745f626c6f636b5f766f7465725f726577617264735f656e61626c656404011c656e61626c6564200110626f6f6c000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e19040c2c70616c6c65745f6d696e741870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e1d040c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374fd0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c00128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e38666f7263655f7472616e736665720c0118736f75726365fd0201504163636f756e7449644c6f6f6b75704f663c543e00011064657374fd0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c00128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374fd0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c00128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374fd0201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665200110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686ffd0201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686fed0201445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f722074686558706f73736962696c697479206f6620636875726e292e44666f7263655f7365745f62616c616e636508010c77686ffd0201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565c00128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6e2104014c41646a7573746d656e74446972656374696f6e00011464656c7461c00128543a3a42616c616e6365000914b841646a7573742074686520746f74616c2069737375616e636520696e20612073617475726174696e67207761792e00fc43616e206f6e6c792062652063616c6c656420627920726f6f7420616e6420616c77617973206e65656473206120706f736974697665206064656c7461602e002423204578616d706c65106275726e08011476616c7565c00128543a3a42616c616e63650001286b6565705f616c697665200110626f6f6c000a1cfc4275726e2074686520737065636966696564206c697175696420667265652062616c616e63652066726f6d20746865206f726967696e206163636f756e742e002501496620746865206f726967696e2773206163636f756e7420656e64732075702062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c7409016f6620746865206275726e20616e6420606b6565705f616c697665602069732066616c73652c20746865206163636f756e742077696c6c206265207265617065642e005101556e6c696b652073656e64696e672066756e647320746f2061205f6275726e5f20616464726573732c207768696368206d6572656c79206d616b6573207468652066756e647320696e61636365737369626c652c21017468697320606275726e60206f7065726174696f6e2077696c6c2072656475636520746f74616c2069737375616e63652062792074686520616d6f756e74205f6275726e65645f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e21040c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e6372656173650000002044656372656173650001000025040c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374fd0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c00128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e38666f7263655f7472616e736665720c0118736f75726365fd0201504163636f756e7449644c6f6f6b75704f663c543e00011064657374fd0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c00128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374fd0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c00128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374fd0201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665200110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686ffd0201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686fed0201445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f722074686558706f73736962696c697479206f6620636875726e292e44666f7263655f7365745f62616c616e636508010c77686ffd0201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565c00128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6e2104014c41646a7573746d656e74446972656374696f6e00011464656c7461c00128543a3a42616c616e6365000914b841646a7573742074686520746f74616c2069737375616e636520696e20612073617475726174696e67207761792e00fc43616e206f6e6c792062652063616c6c656420627920726f6f7420616e6420616c77617973206e65656473206120706f736974697665206064656c7461602e002423204578616d706c65106275726e08011476616c7565c00128543a3a42616c616e63650001286b6565705f616c697665200110626f6f6c000a1cfc4275726e2074686520737065636966696564206c697175696420667265652062616c616e63652066726f6d20746865206f726967696e206163636f756e742e002501496620746865206f726967696e2773206163636f756e7420656e64732075702062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c7409016f6620746865206275726e20616e6420606b6565705f616c697665602069732066616c73652c20746865206163636f756e742077696c6c206265207265617065642e005101556e6c696b652073656e64696e672066756e647320746f2061205f6275726e5f20616464726573732c207768696368206d6572656c79206d616b6573207468652066756e647320696e61636365737369626c652c21017468697320606275726e60206f7065726174696f6e2077696c6c2072656475636520746f74616c2069737375616e63652062792074686520616d6f756e74205f6275726e65645f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e29040c3c70616c6c65745f74785f70617573651870616c6c65741043616c6c04045400010814706175736504012466756c6c5f6e616d65c901015052756e74696d6543616c6c4e616d654f663c543e00001034506175736520612063616c6c2e00b843616e206f6e6c792062652063616c6c6564206279205b60436f6e6669673a3a50617573654f726967696e605d2ec0456d69747320616e205b604576656e743a3a43616c6c506175736564605d206576656e74206f6e20737563636573732e1c756e70617573650401146964656e74c901015052756e74696d6543616c6c4e616d654f663c543e00011040556e2d706175736520612063616c6c2e00c043616e206f6e6c792062652063616c6c6564206279205b60436f6e6669673a3a556e70617573654f726967696e605d2ec8456d69747320616e205b604576656e743a3a43616c6c556e706175736564605d206576656e74206f6e20737563636573732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400012014626174636804011463616c6c733104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465789c010c75313600011063616c6cf502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c733104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696ee9010154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6cf502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c733104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6cf502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e1c69665f656c73650801106d61696ef502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00012066616c6c6261636bf502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00065c1501446973706174636820612066616c6c6261636b2063616c6c20696e20746865206576656e7420746865206d61696e2063616c6c206661696c7320746f20657865637574652eb04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e00e4546869732066756e6374696f6e20666972737420617474656d70747320746f2064697370617463682074686520606d61696e602063616c6c2ed449662074686520606d61696e602063616c6c206661696c732c20746865206066616c6c6261636b6020697320617474656d7465642e15016966207468652066616c6c6261636b206973207375636365737366756c6c7920646973706174636865642c207468652077656967687473206f6620626f74682063616c6c73250161726520616363756d756c6174656420616e6420616e206576656e7420636f6e7461696e696e6720746865206d61696e2063616c6c206572726f72206973206465706f73697465642e00dc496e20746865206576656e74206f6620612066616c6c6261636b206661696c757265207468652077686f6c652063616c6c206661696c7368776974682074686520776569676874732072657475726e65642e0041012d20606d61696e603a20546865206d61696e2063616c6c20746f20626520646973706174636865642e205468697320697320746865207072696d61727920616374696f6e20746f20657865637574652e3d012d206066616c6c6261636b603a205468652066616c6c6261636b2063616c6c20746f206265206469737061746368656420696e20636173652074686520606d61696e602063616c6c206661696c732e00442323204469737061746368204c6f67696341012d20496620746865206f726967696e2069732060726f6f74602c20626f746820746865206d61696e20616e642066616c6c6261636b2063616c6c732061726520657865637574656420776974686f75747820206170706c79696e6720616e79206f726967696e2066696c746572732e49012d20496620746865206f726967696e206973206e6f742060726f6f74602c20746865206f726967696e2066696c746572206973206170706c69656420746f20626f74682074686520606d61696e6020616e644c20206066616c6c6261636b602063616c6c732e002c232320557365204361736559012d20536f6d6520757365206361736573206d6967687420696e766f6c7665207375626d697474696e672061206062617463686020747970652063616c6c20696e20656974686572206d61696e2c2066616c6c6261636b2820206f7220626f74682e5064697370617463685f61735f66616c6c69626c6508012461735f6f726967696ee9010154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6cf502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000714c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e005101416c6d6f7374207468652073616d65206173205b6050616c6c65743a3a64697370617463685f6173605d2062757420666f72776172647320616e79206572726f72206f662074686520696e6e65722063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3104000002f5020035040c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000114107375646f04011063616c6cf502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000004350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e547375646f5f756e636865636b65645f77656967687408011063616c6cf502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000114350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e1c7365745f6b657904010c6e6577fd0201504163636f756e7449644c6f6f6b75704f663c543e0002085d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e1c7375646f5f617308010c77686ffd0201504163636f756e7449644c6f6f6b75704f663c543e00011063616c6cf502017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0003104d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2872656d6f76655f6b657900040c845065726d616e656e746c792072656d6f76657320746865207375646f206b65792e006c2a2a546869732063616e6e6f7420626520756e2d646f6e652e2a2a040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e39040c3c70616c6c65745f74726561737572791870616c6c65741043616c6c040454000108246275795f626f6e64730c01207661756c745f696410011c5661756c744964000114626f6e6473100114426f6e6473000138626f6e75735f617070726f76616c3d0401884f7074696f6e3c5472656173757279426f6e7573417070726f76616c50726f6f663e00040c984275792077686f6c65206031204152474f4e6020626f6e647320666f722061207661756c742e00d85468652070757263686173652065697468657220656e7465727320746865206163636570746564206c697374206f72206661696c732e486c69717569646174655f626f6e645f6c6f7404012c626f6e645f6c6f745f6964300124426f6e644c6f74496400050c704c6971756964617465206f6e652066756c6c20626f6e64206c6f742e001d01546865206c6f742073746f70732070617274696369706174696e67207269676874206177617920616e642069732072656c6561736564206166746572207468652064656c61792e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d0404184f7074696f6e0404540141040108104e6f6e6500000010536f6d6504004104000001000041040c406172676f6e5f7072696d697469766573147661756c74685472656173757279426f6e7573417070726f76616c50726f6f6600001001207661756c745f6964d4011c5661756c74496400012c62656e656669636961727900012c4163636f756e7449643332000140657870697265735f61745f6672616d652c011c4672616d6549640001247369676e61747572650d0401245369676e6174757265000045040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c65741043616c6c040454000118207265676973746572040130726567697374726174696f6e4904013c526567697374726174696f6e3c543e00001031015265676973746572207661756c742c206d696e696e672066756e64696e672c20616e6420626f74206163636f756e747320666f7220616e206f7065726174696f6e616c206163636f756e742eec416e79206163636f756e7420696e2074686520726567697374726174696f6e206d6179207375626d697420746865207472616e73616374696f6e2e4d014966206120726566657272616c2070726f6f662069732070726f76696465642c2074686520726567697374726174696f6e207265636f726473207468652073706f6e736f722072656c6174696f6e736869702e01015768656e20696e766974652d6f6e6c7920697320656e61626c65642c20612076616c696420726566657272616c2070726f6f662069732072657175697265642e447365745f7265776172645f636f6e66696708016c6f7065726174696f6e616c5f726566657272616c5f726577617264180128543a3a42616c616e6365000154726566657272616c5f626f6e75735f726577617264180128543a3a42616c616e6365000204bc5570646174652072657761726420616d6f756e747320666f72206f7065726174696f6e616c206163636f756e74732e48666f7263655f7365745f70726f67726573730c01146f776e6572000130543a3a4163636f756e7449640001147061746368610401904f7065726174696f6e616c50726f677265737350617463683c543a3a42616c616e63653e00016c7570646174655f6f7065726174696f6e616c5f70726f6772657373200110626f6f6c000304e4466f7263652d757064617465206f7065726174696f6e616c2070726f6772657373206d61726b65727320666f7220616e206163636f756e742e807365745f656e637279707465645f7365727665725f666f725f73706f6e73656508011c73706f6e736565000130543a3a4163636f756e744964000140656e637279707465645f73657276657238011c5665633c75383e000404550153746f726520616e206f706171756520656e637279707465642073706f6e736f7220736572766572207061796c6f616420666f7220612073706f6e736f726564206f7065726174696f6e616c206163636f756e742e2061637469766174650005040901416374697661746520616e20656c696769626c65206f7065726174696f6e616c206163636f756e742066726f6d20616e79206d616e61676564206163636f756e742e34636c61696d5f72657761726473040118616d6f756e74180128543a3a42616c616e6365000604e4436c61696d2070656e64696e67206f7065726174696f6e616c207265776172647320746f20616e79206d616e61676564206163636f756e742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e49040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c657430526567697374726174696f6e04045400010408563104004d040144526567697374726174696f6e56313c543e000000004d040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c657438526567697374726174696f6e5631040454000028014c6f7065726174696f6e616c5f6163636f756e74000130543a3a4163636f756e744964000144656e6372797074696f6e5f7075626b6579510401584f7061717565456e6372797074696f6e5075626b65790001646f7065726174696f6e616c5f6163636f756e745f70726f6f66550401544163636f756e744f776e65727368697050726f6f660001347661756c745f6163636f756e74000130543a3a4163636f756e7449640001586d696e696e675f66756e64696e675f6163636f756e74000130543a3a4163636f756e7449640001486d696e696e675f626f745f6163636f756e74000130543a3a4163636f756e74496400014c7661756c745f6163636f756e745f70726f6f66550401544163636f756e744f776e65727368697050726f6f660001706d696e696e675f66756e64696e675f6163636f756e745f70726f6f66550401544163636f756e744f776e65727368697050726f6f660001606d696e696e675f626f745f6163636f756e745f70726f6f66550401544163636f756e744f776e65727368697050726f6f66000138726566657272616c5f70726f6f665904018c4f7074696f6e3c526566657272616c50726f6f663c543a3a4163636f756e7449643e3e000051040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c6574584f7061717565456e6372797074696f6e5075626b6579000004000401205b75383b2033325d000055040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c6574544163636f756e744f776e65727368697050726f6f6600000401247369676e61747572650d0401245369676e61747572650000590404184f7074696f6e040454015d040108104e6f6e6500000010536f6d6504005d0400000100005d040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c657434526566657272616c50726f6f6604244163636f756e744964010000140134726566657272616c5f636f646504013c737232353531393a3a5075626c6963000148726566657272616c5f7369676e6174757265b5030148737232353531393a3a5369676e617475726500011c73706f6e736f720001244163636f756e744964000140657870697265735f61745f6672616d652c011c4672616d65496400014473706f6e736f725f7369676e61747572650d0401245369676e6174757265000061040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c6574604f7065726174696f6e616c50726f67726573735061746368041c42616c616e63650118001401506861735f756e69737761705f7472616e73666572650401304f7074696f6e3c626f6f6c3e0001347661756c745f63726561746564650401304f7074696f6e3c626f6f6c3e00017c6861735f74726561737572795f706f6f6c5f70617274696369706174696f6e650401304f7074696f6e3c626f6f6c3e0001586f627365727665645f626974636f696e5f746f74616c8501013c4f7074696f6e3c42616c616e63653e0001686f627365727665645f6d696e696e675f736561745f746f74616c7102012c4f7074696f6e3c7533323e0000650404184f7074696f6e04045401200108104e6f6e6500000010536f6d65040020000001000069040c6070616c6c65745f657468657265756d5f76657269666965721870616c6c65741043616c6c04045400011040666f7263655f636865636b706f696e740801187570646174656d040154426f783c436865636b706f696e745570646174653e000134666f726b5f76657273696f6e739d040130466f726b56657273696f6e7300000841015573656420666f722070616c6c657420696e697469616c697a6174696f6e20616e64206c6967687420636c69656e7420726573657474696e672e204e6565647320746f2062652063616c6c65642062794074686520726f6f74206f726967696e2e187375626d6974040118757064617465a504012c426f783c5570646174653e00010c35015375626d6974732061206e65772066696e616c697a656420626561636f6e20686561646572207570646174652e2054686520757064617465206d617920636f6e7461696e20746865206e657874450173796e6320636f6d6d697474656520616e6420616e20657865637574696f6e20686561646572207769746e65737320666f72207468652066696e616c697a656420626561636f6e2068656164657220697424616476616e6365732ea0696d706f72745f747275737465645f657865637574696f6e5f6865616465725f6261636b66696c6c0c015065787065637465645f626561636f6e5f726f6f743401104832353600011868656164657271040130426561636f6e486561646572000158657865637574696f6e5f6865616465725f70726f6f668d040150457865637574696f6e48656164657250726f6f66000200487365745f6f7065726174696e675f6d6f64650401106d6f6465fd01014842617369634f7065726174696e674d6f6465000304050148616c74206f7220726573756d6520616c6c2070616c6c6574206f7065726174696f6e732e204d6179206f6e6c792062652063616c6c656420627920726f6f742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d040c6070616c6c65745f657468657265756d5f766572696669657214747970657340436865636b706f696e74557064617465000014011868656164657271040130426561636f6e48656164657200015863757272656e745f73796e635f636f6d6d69747465657504013453796e63436f6d6d697474656500017463757272656e745f73796e635f636f6d6d69747465655f6272616e63688904012c4272616e636850726f6f6600013c76616c696461746f72735f726f6f7434011048323536000158657865637574696f6e5f6865616465725f70726f6f668d040150457865637574696f6e48656164657250726f6f66000071040c70736e6f776272696467655f626561636f6e5f7072696d69746976657314747970657330426561636f6e4865616465720000140110736c6f7430010c75363400013870726f706f7365725f696e64657830013856616c696461746f72496e64657800012c706172656e745f726f6f743401104832353600012873746174655f726f6f7434011048323536000124626f64795f726f6f7434011048323536000075040c6070616c6c65745f657468657265756d5f76657269666965721474797065733453796e63436f6d6d6974746565000008011c7075626b657973790401f8426f756e6465645665633c5075626c69634b65792c20436f6e73745533323c7b2053594e435f434f4d4d49545445455f424f554e445f53495a45207d3e3e0001406167677265676174655f7075626b65797d0401245075626c69634b6579000079040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017d04045300000400850401185665633c543e00007d040c70736e6f776272696467655f626561636f6e5f7072696d697469766573147479706573245075626c69634b657900000400810401445b75383b205055424b45595f53495a455d0000810400000330000000080085040000027d040089040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401340453000004002d0201185665633c543e00008d040c6070616c6c65745f657468657265756d5f766572696669657214747970657350457865637574696f6e48656164657250726f6f660000080140657865637574696f6e5f6865616465729104017c56657273696f6e6564457865637574696f6e5061796c6f6164486561646572000140657865637574696f6e5f6272616e63688904012c4272616e636850726f6f66000091040c70736e6f776272696467655f626561636f6e5f7072696d6974697665731474797065737c56657273696f6e6564457865637574696f6e5061796c6f61644865616465720001081c436170656c6c61040095040158457865637574696f6e5061796c6f61644865616465720000001444656e656204009904017464656e65623a3a457865637574696f6e5061796c6f61644865616465720001000095040c70736e6f776272696467655f626561636f6e5f7072696d69746976657314747970657358457865637574696f6e5061796c6f616448656164657200003c012c706172656e745f68617368340110483235360001346665655f726563697069656e740d0201104831363000012873746174655f726f6f743401104832353600013472656365697074735f726f6f74340110483235360001286c6f67735f626c6f6f6d38011c5665633c75383e00012c707265765f72616e64616f34011048323536000130626c6f636b5f6e756d62657230010c7536340001246761735f6c696d697430010c7536340001206761735f7573656430010c75363400012474696d657374616d7030010c75363400012865787472615f6461746138011c5665633c75383e000140626173655f6665655f7065725f676173ad02011055323536000128626c6f636b5f68617368340110483235360001447472616e73616374696f6e735f726f6f74340110483235360001407769746864726177616c735f726f6f7434011048323536000099041070736e6f776272696467655f626561636f6e5f7072696d6974697665731474797065731464656e656258457865637574696f6e5061796c6f6164486561646572000044012c706172656e745f68617368340110483235360001346665655f726563697069656e740d0201104831363000012873746174655f726f6f743401104832353600013472656365697074735f726f6f74340110483235360001286c6f67735f626c6f6f6d38011c5665633c75383e00012c707265765f72616e64616f34011048323536000130626c6f636b5f6e756d62657230010c7536340001246761735f6c696d697430010c7536340001206761735f7573656430010c75363400012474696d657374616d7030010c75363400012865787472615f6461746138011c5665633c75383e000140626173655f6665655f7065725f676173ad02011055323536000128626c6f636b5f68617368340110483235360001447472616e73616374696f6e735f726f6f74340110483235360001407769746864726177616c735f726f6f7434011048323536000134626c6f625f6761735f7573656430010c75363400013c6578636573735f626c6f625f67617330010c75363400009d040c6070616c6c65745f657468657265756d5f766572696669657214747970657330466f726b56657273696f6e7300001c011c67656e65736973a1040110466f726b000118616c74616972a1040110466f726b00012462656c6c6174726978a1040110466f726b00011c636170656c6c61a1040110466f726b00011464656e6562a1040110466f726b00011c656c6563747261a1040110466f726b00011066756c75a1040110466f726b0000a1040c6070616c6c65745f657468657265756d5f766572696669657214747970657310466f726b000008011c76657273696f6e48012c466f726b56657273696f6e00011465706f63682c010c7536340000a5040c6070616c6c65745f657468657265756d5f76657269666965721474797065731855706461746500001c013c61747465737465645f68656164657271040130426561636f6e48656164657200013873796e635f616767726567617465a904013453796e634167677265676174650001387369676e61747572655f736c6f742c010c7536340001686e6578745f73796e635f636f6d6d69747465655f757064617465b904017c4f7074696f6e3c4e65787453796e63436f6d6d69747465655570646174653e00014066696e616c697a65645f68656164657271040130426561636f6e48656164657200013c66696e616c6974795f6272616e63688904012c4272616e636850726f6f66000158657865637574696f6e5f6865616465725f70726f6f668d040150457865637574696f6e48656164657250726f6f660000a9040c6070616c6c65745f657468657265756d5f76657269666965721474797065733453796e63416767726567617465000008014c73796e635f636f6d6d69747465655f62697473ad0401f0426f756e6465645665633c75382c20436f6e73745533323c7b2053594e435f434f4d4d49545445455f424954535f424f554e445f53495a45207d3e3e00016073796e635f636f6d6d69747465655f7369676e6174757265b10401245369676e61747572650000ad040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000b1040c70736e6f776272696467655f626561636f6e5f7072696d697469766573147479706573245369676e617475726500000400b50401505b75383b205349474e41545552455f53495a455d0000b504000003600000000800b90404184f7074696f6e04045401bd040108104e6f6e6500000010536f6d650400bd040000010000bd040c6070616c6c65745f657468657265756d5f76657269666965721474797065735c4e65787453796e63436f6d6d6974746565557064617465000008014c6e6578745f73796e635f636f6d6d69747465657504013453796e63436f6d6d69747465650001686e6578745f73796e635f636f6d6d69747465655f6272616e63688904012c4272616e636850726f6f660000c1040c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65741043616c6c040454000134407365745f636861696e5f636f6e666967080130736f757263655f636861696e0502012c536f75726365436861696e000118636f6e666967c504012c436861696e436f6e66696700000084666f7263655f7365745f676c6f62616c5f69737375616e63655f636f756e63696c0c014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e00012c61667465725f6e6f6e63652c0164436f756e63696c417070726f76616c51756575654e6f6e63650001486d656d6265725f6163636f756e745f696473c90401b8426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d6178436f756e63696c4d656d626572733e0001003470617573655f67617465776179040130736f757263655f636861696e0502012c536f75726365436861696e0002003c756e70617573655f67617465776179040130736f757263655f636861696e0502012c536f75726365436861696e0003008c7365745f6d696e696d756d5f6d696e74696e675f617574686f726974795f76616c756508014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e0001346d696e696d756d5f76616c7565c00128543a3a42616c616e6365000400c87365745f6d696e74696e675f617574686f726974795f61637469766174696f6e5f72657061796d656e745f70726963696e6708014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e00011c70726963696e67cd0401b44d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e673c543e0005005c72656769737465725f636f756e63696c5f7369676e65720c014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e00012c7369676e696e675f6b65790d020110483136300001247369676e61747572651104013c4b656363616b5369676e617475726500060054617070726f76655f71756575655f656e747269657308014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e0001287369676e617475726573d10401e0426f756e6465645665633c4b656363616b5369676e61747572652c20543a3a4d61785175657565417070726f76616c7350657243616c6c3e0007005870726f76655f676174657761795f61637469766974790c0130736f757263655f636861696e0502012c536f75726365436861696e00017c70726576696f75735f676174657761795f61637469766974795f6e6f6e63652c01504761746577617941637469766974794e6f6e636500012c70726f6f665f6261746368d904017047617465776179416374697669747950726f6f6642617463683c543e0008006872656769737465725f6d696e74696e675f617574686f7269747914014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b65790d020110483136300001247369676e61747572651104013c4b656363616b5369676e617475726500014c6d6963726f676f6e5f636f6c6c61746572616cc00128543a3a42616c616e636500014c6d6963726f6e6f745f636f6c6c61746572616cc00128543a3a42616c616e636500090070646561637469766174655f6d696e74696e675f617574686f7269747904015c64657374696e6174696f6e5f7369676e696e675f6b65790d02011048313630000a00307472616e736665725f6f757410014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e00011461737365741502012441737365744b696e6400014c64657374696e6174696f6e5f6163636f756e740d02011048313630000118616d6f756e74c00128543a3a42616c616e6365000b0058636f6c6c61746572616c697a655f7472616e7366657210012c7472616e736665725f6964340110483235360001247369676e61747572651104013c4b656363616b5369676e617475726500014c6d6963726f676f6e5f636f6c6c61746572616cc00128543a3a42616c616e636500014c6d6963726f6e6f745f636f6c6c61746572616cc00128543a3a42616c616e6365000c00040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec5040c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65742c436861696e436f6e6669670001040c45766d100120636861696e5f69642c010c75363400011c676174657761790d0201104831363000012c6172676f6e5f746f6b656e0d020110483136300001346172676f6e6f745f746f6b656e0d0201104831363000000000c9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400ed0201185665633c543e0000cd040c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574a84d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e67040454000010014c61637469766174696f6e5f6761735f636f7374c00110753132380001487369676e61747572655f6761735f636f7374c0011075313238000154657374696d617465645f7765695f7065725f676173c001107531323800016c657374696d617465645f6d6963726f676f6e735f7065725f657468180128543a3a42616c616e63650000d1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011104045300000400d50401185665633c543e0000d504000002110400d9040c406172676f6e5f7072696d69746976657320657468657265756d70457468657265756d526563656970744c6f6750726f6f66426174636808384d617850726f6f66426c6f636b7300384d6178526563656970744c6f67730000080154657865637574696f6e5f626c6f636b5f70726f6f66dd04016c457468657265756d457865637574696f6e426c6f636b50726f6f66000118626c6f636b73f104012501426f756e6465645665633c457468657265756d526563656970744c6f6750726f6f66426c6f636b3c4d6178526563656970744c6f67733e2c204d617850726f6f66426c6f636b730a3e0000dd040c406172676f6e5f7072696d69746976657320657468657265756d6c457468657265756d457865637574696f6e426c6f636b50726f6f660000080144616e63686f725f626c6f636b5f68617368340110483235360001747461726765745f746f5f616e63686f725f6865616465725f636861696ee1040170457468657265756d457865637574696f6e486561646572436861696e0000e1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e504045300000400ed0401185665633c543e0000e5040c406172676f6e5f7072696d69746976657320657468657265756d5c457468657265756d457865637574696f6e486561646572000004010c726c70e9040168457468657265756d457865637574696f6e486561646572526c700000e9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000ed04000002e50400f1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f504045300000400310501185665633c543e0000f5040c406172676f6e5f7072696d69746976657320657468657265756d70457468657265756d526563656970744c6f6750726f6f66426c6f636b04384d6178526563656970744c6f677300000c014c7461726765745f626c6f636b5f6e756d6265722c014c457468657265756d426c6f636b4e756d626572000134726563656970745f70726f6f66f9040170457468657265756d436f6d62696e65645265636569707450726f6f66000130726563656970745f6c6f6773190501b8426f756e6465645665633c457468657265756d526563656970744c6f672c204d6178526563656970744c6f67733e0000f9040c406172676f6e5f7072696d69746976657320657468657265756d70457468657265756d436f6d62696e65645265636569707450726f6f6600000801146e6f646573fd040184457468657265756d436f6d62696e65645265636569707450726f6f664e6f646573000120726563656970747305050190457468657265756d436f6d62696e65645265636569707450726f6f6652656365697074730000fd040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e904045300000400010501185665633c543e00000105000002e9040005050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010905045300000400150501185665633c543e000009050c406172676f6e5f7072696d69746976657320657468657265756d6c457468657265756d5265636569707450726f6f665265636569707400000801447472616e73616374696f6e5f696e6465782c010c7536340001306e6f64655f696e64657865730d05017c457468657265756d5265636569707450726f6f664e6f6465496e646578657300000d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019c045300000400110501185665633c543e000011050000029c00150500000209050019050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011d050453000004002d0501185665633c543e00001d050c406172676f6e5f7072696d69746976657320657468657265756d48457468657265756d526563656970744c6f6700000801447472616e73616374696f6e5f696e6465782c010c7536340001246576656e745f6c6f672105012c457468657265756d4c6f67000021050c406172676f6e5f7072696d69746976657320657468657265756d2c457468657265756d4c6f6700000c011c616464726573730d02011048313630000118746f7069637325050144457468657265756d4c6f67546f70696373000110646174612905013c457468657265756d4c6f6744617461000025050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401340453000004002d0201185665633c543e000029050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00002d050000021d05003105000002f50400350504184f7074696f6e04045401880108104e6f6e6500000010536f6d65040088000001000039050c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704a04d756c7469736967206f7065726174696f6e206e6f7420666f756e6420696e2073746f726167652e204e6f744f776e657200080851014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c206974206f722075706461746534697473206465706f736974732e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e3d05000004084105180041050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014505045300000400490501185665633c543e00004505083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501982c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f7479706598012450726f78795479706500011464656c617910012c426c6f636b4e756d626572000049050000024505004d05000004085105180051050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015505045300000400590501185665633c543e00005505083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801342c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683401104861736800011868656967687410012c426c6f636b4e756d626572000059050000025505005d050c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e61050c406172676f6e5f7072696d697469766573107469636b185469636b657200000801507469636b5f6475726174696f6e5f6d696c6c69732c010c7536340001746368616e6e656c5f686f6c645f65787069726174696f6e5f7469636b732c01105469636b000065050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401340453000004002d0201185665633c543e000069050c3070616c6c65745f7469636b731870616c6c6574144572726f72040454000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742e6d050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b013004560171050453000004008105013842547265654d61703c4b2c20563e000071050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540175050453000004007d0501185665633c543e00007505084870616c6c65745f6d696e696e675f736c6f74444d696e65724e6f6e636553636f72696e6704045400001001146e6f6e6365ad020110553235360001386c6173745f77696e5f626c6f636b710201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e00014c626c6f636b735f776f6e5f696e5f6672616d659c010c7531360001786672616d655f73746172745f626c6f636b735f776f6e5f737572706c75737905010c693136000079050000050a007d050000027505008105042042547265654d617008044b0130045601710500040085050000008505000002890500890500000408307105008d050000040830100091050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0100045601ac0453000004009505013842547265654d61703c4b2c20563e00009505042042547265654d617008044b0100045601ac000400990500000099050000029d05009d050000040800ac00a1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a505045300000400a90501185665633c543e0000a5050c406172676f6e5f7072696d69746976657328626c6f636b5f7365616c384d696e696e6742696453746174730000100128626964735f636f756e7410010c7533320001386269645f616d6f756e745f6d696e18011c42616c616e63650001386269645f616d6f756e745f6d617818011c42616c616e63650001386269645f616d6f756e745f73756d18011c42616c616e63650000a905000002a50500ad050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540118045300000400b10501185665633c543e0000b1050000021800b5050c406172676f6e5f7072696d69746976657328626c6f636b5f7365616c404d696e696e67536c6f74436f6e66696700000c01887469636b735f6265666f72655f6269645f656e645f666f725f7672665f636c6f73652c01105469636b00014c7469636b735f6265747765656e5f736c6f74732c01105469636b000178736c6f745f62696464696e675f73746172745f61667465725f7469636b732c01105469636b0000b9050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b013004560110045300000400bd05013842547265654d61703c4b2c20563e0000bd05042042547265654d617008044b013004560110000400c105000000c1050000028d0500c5050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400c90501185665633c543e0000c9050000021000cd050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b013004560130045300000400d105013842547265654d61703c4b2c20563e0000d105042042547265654d617008044b013004560130000400d505000000d505000002d90500d90500000408303000dd050c4870616c6c65745f6d696e696e675f736c6f741870616c6c6574144572726f7204045400012c44536c6f744e6f7454616b696e67426964730000049842696464696e6720666f7220746865206e65787420636f686f72742068617320636c6f7365645c546f6f4d616e79426c6f636b52656769737472616e74730001048854686520636f686f727420726567697374726174696f6e206f766572666c6f7765646c496e73756666696369656e744f776e657273686970546f6b656e73000204f8546869732066756e64696e67206163636f756e7420646f6573206e6f7420686f6c6420746865206d696e696d756d206172676f6e6f7473206e656564656424426964546f6f4c6f77000304cc54686520676976656e206269642069736e2774206869676820656e6f75676820746f20626520696e2074686520636f686f72748443616e6e6f7452656769737465724f7665726c617070696e6753657373696f6e73000404c0416e206163636f756e742063616e206f6e6c792068617665206f6e652061637469766520726567697374726174696f6e6843616e6e6f744368616e676546756e64696e674163636f756e74000504f843616e6e6f742072652d726567697374657220616e206163636f756e742077697468206120646966666572656e742066756e64696e67206163636f756e7444496e73756666696369656e7446756e6473000604fc5468652066756e64696e67206163636f756e7420646f6573206e6f74206861766520656e6f7567682066756e647320746f20636f76657220746865206269644842696443616e6e6f7442655265647563656400070480546865206d696e696e67206269642063616e6e6f74206265207265647563656440496e76616c6964426964416d6f756e740008048842696473206d75737420626520696e20616c6c6f77656420696e6372656d656e7473984f7065726174696f6e616c4163636f756e74526567697374726174696f6e526571756972656400090439014d696e696e6720736c6f742062696464696e672063757272656e746c79207265717569726573207072696f72206f7065726174696f6e616c2d6163636f756e7420726567697374726174696f6e2e44556e7265636f76657261626c65486f6c64000a049c546865206172676f6e6f7473206f6e20686f6c642063616e6e6f742062652072656c6561736564048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee1050c406172676f6e5f7072696d6974697665731c626974636f696e245574786f56616c7565000014011c7574786f5f69643001185574786f49640001347363726970745f7075626b6579e5050164426974636f696e436f7369676e5363726970745075626b65790001207361746f736869732c01205361746f7368697300014c7375626d69747465645f61745f6865696768742c0134426974636f696e48656967687400017077617463685f666f725f7370656e745f756e74696c5f6865696768742c0134426974636f696e4865696768740000e5050c406172676f6e5f7072696d6974697665731c626974636f696e64426974636f696e436f7369676e5363726970745075626b6579000104145032575348040130777363726970745f686173683401104832353600000000e9050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0130045601e105045300000400ed05013842547265654d61703c4b2c20563e0000ed05042042547265654d617008044b0130045601e105000400f105000000f105000002f50500f5050000040830e10500f9050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01cc04560130045300000400fd05013842547265654d61703c4b2c20563e0000fd05042042547265654d617008044b01cc0456013000040001060000000106000002050600050600000408cc300009060c406172676f6e5f7072696d6974697665731c626974636f696e38426974636f696e4e6574776f726b0001101c426974636f696e0000001c546573746e6574000100185369676e65740002001c52656774657374000300000d060c5070616c6c65745f626974636f696e5f7574786f731870616c6c6574144572726f7204045400013c344e6f5065726d697373696f6e73000004bc4f6e6c7920616e204f7261636c65204f70657261746f722063616e20706572666f726d207468697320616374696f6e5c4e6f426974636f696e436f6e6669726d6564426c6f636b00010405014e6f204f7261636c652d70726f766964656420626974636f696e20626c6f636b20686173206265656e2070726f766964656420746f20746865206e6574776f726b64496e73756666696369656e74426974636f696e416d6f756e740002046c496e73756666696369656e7420626974636f696e20616d6f756e74604e6f426974636f696e507269636573417661696c61626c65000304a04e6f207072696365732061726520617661696c61626c6520746f206d696e7420626974636f696e73505363726970745075626b6579436f6e666c696374000404a05363726970745075624b657920697320616c7265616479206265696e672077616974656420666f72345574786f4e6f744c6f636b6564000504544c6f636b6564205574786f204e6f7420466f756e6458526564656d7074696f6e73556e617661696c61626c650006048c526564656d7074696f6e73206e6f742063757272656e746c7920617661696c61626c6560496e76616c6964426974636f696e53796e6348656967687400070494496e76616c696420626974636f696e2073796e632068656967687420617474656d7074656464426974636f696e4865696768744e6f74436f6e6669726d656400080480426974636f696e20686569676874206e6f7420636f6e6669726d656420796574404d61785574786f73457863656564656400090480546f6f206d616e79205554584f7320617265206265696e67207761746368656450496e76616c6964426974636f696e536372697074000a04644c6f636b696e672073637269707420686173206572726f72733c4475706c69636174655574786f4964000b04844475706c696361746564205574786f49642e20416c726561647920696e20757365644d617843616e6469646174655574786f734578636565646564000c04dc546f6f206d616e792063616e646964617465205554584f7320617265206265696e672073746f72656420666f722074686973206c6f636b405574786f4e6f7443616e646964617465000d04d0546865205554584f207265666572656e636520646f6573206e6f74206d617020746f20612063616e64696461746520656e747279444c6f636b416c726561647946756e646564000e04b854686973204c6f636b20616c72656164792068617320616e2061747461636865642066756e64696e67205554584f048054686520604572726f726020656e756d206f6620746869732070616c6c65742e11060c406172676f6e5f7072696d697469766573147661756c74145661756c7408244163636f756e74496401001c42616c616e636501180044014c6f70657261746f725f6163636f756e745f69640001244163636f756e74496400014c64656c65676174655f6163636f756e745f6964bc01444f7074696f6e3c4163636f756e7449643e0001106e616d65490301444f7074696f6e3c5661756c744e616d653e0001546c6173745f6e616d655f6368616e67655f7469636b8d0101304f7074696f6e3c5469636b3e00013873656375726974697a6174696f6ec0011c42616c616e636500015473656375726974697a6174696f6e5f746172676574c0011c42616c616e636500015473656375726974697a6174696f6e5f6c6f636b6564c0011c42616c616e636500018473656375726974697a6174696f6e5f70656e64696e675f61637469766174696f6ec0011c42616c616e636500013c6c6f636b65645f7361746f736869732c01205361746f7368697300015073656375726974697a65645f7361746f736869732c01205361746f7368697300017c73656375726974697a6174696f6e5f72656c656173655f7363686564756c65150601d8426f756e64656442547265654d61703c426974636f696e4865696768742c2042616c616e63652c20436f6e73745533323c3336363e3e00015073656375726974697a6174696f6e5f726174696f3d03012446697865645531323800012469735f636c6f736564200110626f6f6c0001147465726d733903014c5661756c745465726d733c42616c616e63653e00013470656e64696e675f7465726d732506018c4f7074696f6e3c285469636b2c205661756c745465726d733c42616c616e63653e293e00012c6f70656e65645f7469636b2c01105469636b0001806f7065726174696f6e616c5f6d696e696d756d5f72656c656173655f7469636b8d0101304f7074696f6e3c5469636b3e000015060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0130045601180453000004001906013842547265654d61703c4b2c20563e00001906042042547265654d617008044b0130045601180004001d060000001d06000002210600210600000408301800250604184f7074696f6e0404540129060108104e6f6e6500000010536f6d65040029060000010000290600000408303903002d060c406172676f6e5f7072696d697469766573147661756c74585661756c744172676f6e6f74436f6d6d69746d656e74041c42616c616e636501180008014c636f6d6d69747465645f6d6963726f6e6f7473c0011c42616c616e6365000150656e63756d62657265645f6d6963726f6e6f7473c0011c42616c616e636500003106000004083506100035060c406172676f6e5f7072696d6974697665731c626974636f696e2c426974636f696e5850756200001801287075626c69635f6b65795d03015c436f6d70726573736564426974636f696e5075626b65790001146465707468390601087538000148706172656e745f66696e6765727072696e7448013c5850756246696e6765727072696e740001306368696c645f6e756d626572d4013c585075624368696c644e756d626572000128636861696e5f636f64650401205b75383b2033325d00011c6e6574776f726b3d06012c4e6574776f726b4b696e640000390600000608003d060c406172676f6e5f7072696d6974697665731c626974636f696e2c4e6574776f726b4b696e64000108104d61696e00000010546573740001000041060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400c90501185665633c543e000045060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401300453000004004906012c42547265655365743c543e000049060420425472656553657404045401300004004d060000004d06000002300051060000040810000055060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401100453000004005906012c42547265655365743c543e00005906042042547265655365740404540110000400c9050000005d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016106045300000400650601185665633c543e000061060c3470616c6c65745f7661756c74731870616c6c6574445661756c744672616d65526576656e756504045400004001206672616d655f69642c011c4672616d654964000160626974636f696e5f6c6f636b5f6665655f726576656e7565c00128543a3a42616c616e6365000188626974636f696e5f6c6f636b5f6665655f636f75706f6e5f76616c75655f75736564c00128543a3a42616c616e6365000154626974636f696e5f6c6f636b735f63726561746564d4010c753332000190626974636f696e5f6c6f636b735f6e65775f6c69717569646974795f70726f6d69736564c00128543a3a42616c616e6365000180626974636f696e5f6c6f636b735f72656c65617365645f6c6971756964697479c00128543a3a42616c616e6365000170626974636f696e5f6c6f636b735f61646465645f7361746f736869732c01205361746f7368697300017c626974636f696e5f6c6f636b735f72656c65617365645f7361746f736869732c01205361746f7368697300016073656375726974697a6174696f6e5f616374697661746564c00128543a3a42616c616e636500016473656375726974697a6174696f6e5f72656c6f636b61626c65c00128543a3a42616c616e636500013873656375726974697a6174696f6ec00128543a3a42616c616e636500015c74726561737572795f7661756c745f6561726e696e6773c00128543a3a42616c616e636500015c74726561737572795f746f74616c5f6561726e696e6773c00128543a3a42616c616e636500015874726561737572795f7661756c745f6361706974616cc00128543a3a42616c616e636500016474726561737572795f65787465726e616c5f6361706974616cc00128543a3a42616c616e636500014c756e636f6c6c65637465645f726576656e7565c00128543a3a42616c616e63650000650600000261060069060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016d06045300000400710601185665633c543e00006d060c3470616c6c65745f7661756c74731870616c6c657448526563656e74436170616369747944726f70081c42616c616e636501182c426c6f636b4e756d626572011000100130626c6f636b5f6e756d626572d4012c426c6f636b4e756d626572000154617661696c61626c655f6265666f72655f64726f70c0011c42616c616e6365000150617661696c61626c655f61667465725f64726f70c0011c42616c616e63650001506e6f5f6665655f6661696c757265735f75736564d4010c753332000071060000026d060075060c3470616c6c65745f7661756c74731870616c6c6574144572726f72040454000188384e6f4d6f72655661756c744964730000049c496e7465726e616c6c792c20746865207661756c742069647320617265206d61786564206f757444496e73756666696369656e7446756e6473000104ec546865207573657220646f65736e2774206861766520656e6f7567682066756e647320746f20636f6d706c6574652074686973207265717565737458496e73756666696369656e745661756c7446756e647300020429015468657265206172656e277420656e6f7567682066756e647320696e20746865207661756c7420746f20636f766572207468652072657175657374656420626974636f696e206c6f636b684163636f756e7442656c6f774d696e696d756d42616c616e63650003045d015468652070726f706f736564207472616e73616374696f6e20776f756c642074616b6520746865206163636f756e742062656c6f7720746865206d696e696d756d20286578697374656e7469616c292062616c616e63652c5661756c74436c6f7365640004045054686973207661756c7420697320636c6f73656448496e76616c69645661756c74416d6f756e74000504dc46756e64696e6720776f756c6420726573756c7420696e20616e206f766572666c6f77206f66207468652062616c616e63652074797065845661756c74526564756374696f6e42656c6f7753656375726974697a6174696f6e00060439015468697320726564756374696f6e20696e207661756c742073656375726974697a6174696f6e20676f65732062656c6f772074686520616d6f756e7420616c726561647920636f6d6d697474656454496e76616c696453656375726974697a6174696f6e0007084101416e20696e76616c69642073656375726974697a6174696f6e2070657263656e74207761732070726f766964656420666f7220746865207661756c742e204e4f54453a2069742063616e6e6f742062655c64656372656173656420286f72206e6567617469766529585265757365645661756c74426974636f696e58707562000804bc546865207661756c7420626974636f696e20787075626b65792068617320616c7265616479206265656e207573656450496e76616c6964426974636f696e536372697074000904c854686520626974636f696e2073637269707420746f206c6f636b207468697320626974636f696e20686173206572726f727338496e76616c6964587075626b6579000a0460556e61626c6520746f206465636f646520787075626b65794057726f6e67587075624e6574776f726b000b044857726f6e672058707562204e6574776f726b34556e73616665587075626b6579000c040901546865205850756220697320756e7361666520746f2075736520696e2061207075626c696320626c6f636b636861696e2028616b612c20756e68617264656e65642970556e61626c65546f4465726976655661756c74587075624368696c64000d0478556e61626c6520746f2064657269766520787075626b6579206368696c645c426974636f696e436f6e76657273696f6e4661696c6564000e04b8426974636f696e20636f6e76657273696f6e20746f20636f6d70726573736564207075626b6579206661696c6564344e6f5065726d697373696f6e73000f0060486f6c64556e65787065637465646c794d6f64696669656400100044556e7265636f76657261626c65486f6c64001100345661756c744e6f74466f756e64001200445661756c744e6f745965744163746976650013046c546865207661756c74206973206e6f742079657420616374697665784e6f5661756c74426974636f696e5075626b657973417661696c61626c65001404884e6f205661756c74207075626c6963206b6579732061726520617661696c61626c65645465726d734d6f64696669636174696f6e4f766572666c6f77001504ec546865207465726d73206d6f64696669636174696f6e206c69737420636f756c64206e6f742068616e646c6520616e79206d6f7265206974656d736c5465726d734368616e6765416c72656164795363686564756c6564001604a45465726d732061726520616c7265616479207363686564756c656420746f206265206368616e67656434496e7465726e616c4572726f7200170494416e20696e7465726e616c2070726f63657373696e67206572726f72206f6363757272656488556e61626c65546f47656e65726174655661756c74426974636f696e5075626b6579001804b4556e61626c6520746f2067656e65726174652061206e6577207661756c7420626974636f696e207075626b65797446756e64696e674368616e6765416c72656164795363686564756c656400190494412066756e64696e67206368616e676520697320616c7265616479207363686564756c65645c496e76616c6964426f6e6453686172696e675465726d73001a04d0547265617375727920626f6e642073686172696e6720706c757320626f6e75732063616e6e6f742065786365656420313030252e40496e76616c69645661756c744e616d65001b0831015661756c74206e616d6573206d757374207374617274207769746820616e20757070657263617365204153434949206c657474657220616e64206f746865727769736520626520415343494934616c7068616e756d657269632e6c50656e64696e67436f7369676e734265666f7265436f6c6c656374001c04010141207661756c74206d75737420636c656172206f757420616c6c2070656e64696e6720636f7369676e73206265666f72652069742063616e20636f6c6c6563749c50656e64696e674f727068616e65645574786f436f7369676e734265666f7265436f6c6c656374001d041d0141207661756c74206d75737420636c656172206f757420616c6c2070656e64696e67206f727068616e20636f7369676e73206265666f72652069742063616e20636f6c6c6563748c4f766572647565436f6c6c656374426c6f636b6572734265666f7265436f6c6c656374001e044d0141207661756c74206d75737420636c656172206f757420616c6c206f7665726475652065787465726e616c20636f6c6c65637420626c6f636b657273206265666f72652069742063616e20636f6c6c6563742e584163636f756e74416c72656164794861735661756c74001f04d4416e206163636f756e74206d6179206f6e6c79206265206173736f636961746564207769746820612073696e676c65207661756c74984f7065726174696f6e616c4163636f756e74526567697374726174696f6e526571756972656400200425015661756c74206372656174696f6e2063757272656e746c79207265717569726573207072696f72206f7065726174696f6e616c2d6163636f756e7420726567697374726174696f6e2e9c436f6d6d69747465644172676f6e6f747342656c6f77456e63756d62657265644261636b696e670021045101436f6d6d6974746564204172676f6e6f74732063616e6e6f7420626520726564756365642062656c6f772074686520616d6f756e7420616c72656164792063726f7373636861696e2d656e63756d62657265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e79060c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c6574344c6f636b6564426974636f696e04045400005001207661756c745f6964d4011c5661756c7449640001486c69717569646974795f70726f6d69736564c00128543a3a42616c616e636500014c6c6f636b65645f7461726765745f7072696365c00128543a3a42616c616e63650001346f776e65725f6163636f756e74000130543a3a4163636f756e74496400015073656375726974697a6174696f6e5f726174696fe0012446697865645531323800013473656375726974795f66656573c00128543a3a42616c616e6365000140636f75706f6e5f706169645f66656573c00128543a3a42616c616e63650001207361746f736869732c01205361746f736869730001347574786f5f7361746f736869738d0101404f7074696f6e3c5361746f736869733e0001307661756c745f7075626b65795d03015c436f6d70726573736564426974636f696e5075626b65790001487661756c745f636c61696d5f7075626b65795d03015c436f6d70726573736564426974636f696e5075626b65790001487661756c745f787075625f736f75726365737d0601cc285850756246696e6765727072696e742c20585075624368696c644e756d6265722c20585075624368696c644e756d626572290001306f776e65725f7075626b65795d03015c436f6d70726573736564426974636f696e5075626b65790001487661756c745f636c61696d5f6865696768742c0134426974636f696e4865696768740001446f70656e5f636c61696d5f6865696768742c0134426974636f696e486569676874000144637265617465645f61745f6865696768742c0134426974636f696e4865696768740001487574786f5f7363726970745f7075626b6579e5050164426974636f696e436f7369676e5363726970745075626b657900012469735f66756e646564200110626f6f6c00015066756e645f686f6c645f657874656e73696f6e73150601e4426f756e64656442547265654d61703c426974636f696e4865696768742c20543a3a42616c616e63652c20436f6e73745533323c3336363e3e000158637265617465645f61745f6172676f6e5f626c6f636bd40144426c6f636b4e756d626572466f723c543e00007d060000040c4810100081060000040810300085060c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c6574484c6f636b52656c6561736552657175657374041c42616c616e636501180018011c7574786f5f69642c01185574786f49640001207661756c745f6964d4011c5661756c74496400014c626974636f696e5f6e6574776f726b5f6665652c01205361746f73686973000140636f7369676e5f6475655f6672616d652c011c4672616d654964000140746f5f7363726970745f7075626b65796d03014c426974636f696e5363726970745075626b6579000144726564656d7074696f6e5f616d6f756e74c0011c42616c616e6365000089060000040800cc008d060c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c6574304f727068616e65645574786f042c426c6f636b4e756d62657201100014011c7574786f5f69642c01185574786f49640001207661756c745f6964d4011c5661756c7449640001207361746f736869732c01205361746f7368697300016c7265636f726465645f6172676f6e5f626c6f636b5f6e756d626572d4012c426c6f636b4e756d626572000138636f7369676e5f72657175657374910601b84f7074696f6e3c4f727068616e65645574786f436f7369676e526571756573743c426c6f636b4e756d6265723e3e0000910604184f7074696f6e0404540195060108104e6f6e6500000010536f6d6504009506000001000095060c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c6574644f727068616e65645574786f436f7369676e52657175657374042c426c6f636b4e756d6265720110000c014c626974636f696e5f6e6574776f726b5f6665653001205361746f73686973000140746f5f7363726970745f7075626b65796d03014c426974636f696e5363726970745075626b6579000174637265617465645f61745f6172676f6e5f626c6f636b5f6e756d62657210012c426c6f636b4e756d626572000099060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401300453000004004906012c42547265655365743c543e00009d060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401300453000004004906012c42547265655365743c543e0000a1060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454018906045300000400a506012c42547265655365743c543e0000a50604204254726565536574040454018906000400a906000000a906000002890600ad060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540121060453000004001d0601185665633c543e0000b1060c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c6574144572726f7204045400018c44496e73756666696369656e7446756e647300000058496e73756666696369656e745661756c7446756e6473000100844163636f756e74576f756c64476f42656c6f774d696e696d756d42616c616e63650002045d015468652070726f706f736564207472616e73616374696f6e20776f756c642074616b6520746865206163636f756e742062656c6f7720746865206d696e696d756d20286578697374656e7469616c292062616c616e63652c5661756c74436c6f7365640003045054686973207661756c7420697320636c6f73656448496e76616c69645661756c74416d6f756e74000404dc46756e64696e6720776f756c6420726573756c7420696e20616e206f766572666c6f77206f66207468652062616c616e636520747970654c526564656d7074696f6e4e6f744c6f636b6564000504b85468697320626974636f696e20726564656d7074696f6e20686173206e6f74206265656e206c6f636b656420696e98426974636f696e52656c65617365496e6974696174696f6e446561646c696e65506173736564000604c454686520626974636f696e20686173207061737365642074686520646561646c696e6520746f2072656c6561736520697444426974636f696e466565546f6f48696768000704b05468652066656520666f72207468697320626974636f696e2072656c6561736520697320746f6f20686967684c426974636f696e5574786f4e6f74466f756e64000804ec54686520426974636f696e20556e7370656374205472616e73616374696f6e204f757470757420285554584f2920776173206e6f7420666f756e6488426974636f696e556e61626c65546f42654465636f646564466f7252656c65617365000904e85468697320626974636f696e20636f7369676e2073637269707420636f756c646e2774206265206465636f64656420666f722072656c6561736584426974636f696e5369676e6174757265556e61626c65546f42654465636f646564000a04d85468697320626974636f696e207369676e617475726520636f756c646e2774206265206465636f64656420666f722072656c6561736578426974636f696e5075626b6579556e61626c65546f42654465636f646564000b04cc5468697320626974636f696e207075626b657920636f756c646e2774206265206465636f64656420666f722072656c6561736564426974636f696e496e76616c6964436f7369676e6174757265000c04e454686520636f7369676e207369676e6174757265206973206e6f742076616c696420666f722074686520626974636f696e2072656c6561736568496e73756666696369656e745361746f736869734c6f636b6564000d04a8546865206d696e696d756d206e756d626572206f66207361746f7368697320776173206e6f74206d6574604e6f426974636f696e507269636573417661696c61626c65000e0435015468652070726963652070726f766964657220686173206e6f20626974636f696e2070726963657320617661696c61626c652e205468697320697320612074656d706f72617279206572726f7250496e76616c6964426974636f696e536372697074000f04c854686520626974636f696e2073637269707420746f206c6f636b207468697320626974636f696e20686173206572726f7273344e6f5065726d697373696f6e73001004e4546865207573657220646f6573206e6f742068617665207065726d697373696f6e7320746f20706572666f726d207468697320616374696f6e60486f6c64556e65787065637465646c794d6f646966696564001104090154686520657870656374656420616d6f756e74206f662066756e647320746f2072657475726e2066726f6d20686f6c6420776173206e6f7420617661696c61626c6544556e7265636f76657261626c65486f6c64001204a054686520686f6c64206f6e2066756e647320636f756c64206e6f74206265207265636f7665726564345661756c744e6f74466f756e640013045c546865207661756c7420776173206e6f7420666f756e644447656e657269635661756c744572726f720400b50601285661756c744572726f7200140494416e206572726f72206f6363757272656420696e20746865207661756c74206d6f64756c65304c6f636b4e6f74466f756e640015049454686520426974636f696e204c6f636b207265636f726420776173206e6f7420666f756e64784e6f5661756c74426974636f696e5075626b657973417661696c61626c65001604884e6f205661756c74207075626c6963206b6579732061726520617661696c61626c6588556e61626c65546f47656e65726174655661756c74426974636f696e5075626b6579001704a4556e61626c6520746f2067656e65726174652061206e6577207661756c74207075626c6963206b6579445661756c744e6f745965744163746976650018047054686973207661756c74206973206e6f7420796574206163746976656445787069726174696f6e4174426c6f636b4f766572666c6f77001904c0416e206f766572666c6f77206f63637572726564207265636f7264696e672061206c6f636b2065787069726174696f6e544e6f52617463686574696e67417661696c61626c65001a04484e6f7468696e6720746f2072617463686574584c6f636b496e50726f636573734f6652656c65617365001b04c041206c6f636b20696e2070726f63657373206f662072656c656173652063616e6e6f7420626520726174636865746564484c6f636b50656e64696e6746756e64696e67001c04c8546865206c6f636b2066756e64696e6720686173206e6f74206265656e20636f6e6669726d6564206f6e20626974636f696e344f766572666c6f774572726f72001d042101416e206f766572666c6f77206f7220756e646572666c6f77206f63637572726564207768696c652063616c63756c6174696e672074686520726564656d7074696f6e2070726963657c496e656c696769626c654d6963726f676f6e52617465526571756573746564001e04c4416e20696e656c696769626c65206d6963726f676f6e2072617465207065722062746320776173207265717565737465646c4f727068616e65645574786f46756e64696e67436f6e666c696374001f04050143616e6e6f742066756e64207769746820616e206f727068616e6564207574786f206166746572206c6f636b2066756e64696e6720697320636f6e6669726d6564704f727068616e65645574786f52656c65617365526571756573746564002004ec43616e6e6f74206c6f636b20616e206f727068616e6564207574786f207769746820612070656e64696e672072656c6561736520726571756573746c46756e64696e675574786f43616e6e6f74426552656c6561736564002104dc43616e6e6f74207265717565737420616e206f727068616e65642072656c6561736520666f72207468652066756e64696e67205554584f984d61784f727068616e65645574786f52656c6561736552657175657374734578636565646564002204c8546f6f206d616e79206f727068616e6564207574786f2072656c6561736520726571756573747320666f722061206c6f636b048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb5060c406172676f6e5f7072696d697469766573147661756c74285661756c744572726f720001342c5661756c74436c6f736564000000684163636f756e74576f756c64426542656c6f774d696e696d756d00010044496e73756666696369656e7446756e647300020058496e73756666696369656e745661756c7446756e647300030060486f6c64556e65787065637465646c794d6f64696669656400040044556e7265636f76657261626c65486f6c64000500345661756c744e6f74466f756e64000600784e6f5661756c74426974636f696e5075626b657973417661696c61626c6500070088556e61626c65546f47656e65726174655661756c74426974636f696e5075626b657900080050496e76616c6964426974636f696e53637269707400090034496e7465726e616c4572726f72000a00445661756c744e6f74596574416374697665000b009c436f6d6d69747465644172676f6e6f747342656c6f77456e63756d62657265644261636b696e67000c0000b90600000408f41000bd060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400ed0201185665633c543e0000c1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011101045300000400c50601185665633c543e0000c506000002110100c9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401cd06045300000400d10601185665633c543e0000cd0600000408300400d106000002cd0600d5060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601f4045300000400d906013842547265654d61703c4b2c20563e0000d906042042547265654d617008044b0110045601f4000400dd06000000dd06000002e10600e1060000040810f400e5060c3c70616c6c65745f6e6f7461726965731870616c6c6574144572726f720404540001244050726f706f73616c4e6f74466f756e64000004985468652070726f706f73616c20746f20616374697661746520776173206e6f7420666f756e644c4d61784e6f74617269657345786365656465640001048c4d6178696d756d206e756d626572206f66206e6f746172696573206578636565646564704d617850726f706f73616c73506572426c6f636b4578636565646564000204b84d6178696d756d206e756d626572206f662070726f706f73616c732070657220626c6f636b206578636565646564444e6f74416e4163746976654e6f74617279000304f054686973206e6f74617279206973206e6f74206163746976652c20736f2074686973206368616e67652063616e6e6f74206265206d6164652079657454496e76616c69644e6f746172794f70657261746f72000404a8496e76616c6964206e6f74617279206f70657261746f7220666f722074686973206f7065726174696f6e3c4e6f4d6f72654e6f74617279496473000504f4416e20696e7465726e616c206572726f7220686173206f636375727265642e20546865206e6f746172792069647320617265206578686175737465642e504566666563746976655469636b546f6f536f6f6e0006049c5468652070726f706f73656420656666656374697665207469636b20697320746f6f20736f6f6e2c546f6f4d616e794b65797300070458546f6f206d616e7920696e7465726e616c206b65797334496e76616c69644e6f7461727900080454546865206e6f7461727920697320696e76616c6964048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee90600000408109d0300ed060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f106045300000400f90601185665633c543e0000f10600000408f5062000f5060c406172676f6e5f7072696d697469766573186e6f74617279604e6f746172794e6f7465626f6f6b4b657944657461696c73000014013c6e6f7465626f6f6b5f6e756d626572d401384e6f7465626f6f6b4e756d6265720001107469636b2c01105469636b000140626c6f636b5f766f7465735f726f6f743401104832353600012c7365637265745f686173683401484e6f7465626f6f6b53656372657448617368000134706172656e745f736563726574a10201584f7074696f6e3c4e6f7465626f6f6b5365637265743e0000f906000002f10600fd060000040c103019010001070c3c70616c6c65745f6e6f7465626f6f6b1870616c6c6574144572726f7204045400013c5c4475706c69636174654e6f7465626f6f6b4e756d626572000004a054686973206e6f7465626f6f6b2068617320616c7265616479206265656e207375626d6974746564544d697373696e674e6f7465626f6f6b4e756d6265720001047c4e6f7465626f6f6b73207265636569766564206f7574206f66206f726465725c4e6f7465626f6f6b5469636b416c726561647955736564000204b041206e6f7465626f6f6b2077617320616c72656164792070726f76696465642061742074686973207469636b60496e76616c69644e6f7465626f6f6b5369676e6174757265000304a0546865207369676e6174757265206f6620746865206e6f7465626f6f6b20697320696e76616c696454496e76616c696453656372657450726f7669646564000404f454686520736563726574206f72207365637265742068617368206f662074686520706172656e74206e6f7465626f6f6b20646f206e6f74206d6174636858436f756c644e6f744465636f64654e6f7465626f6f6b000504c0436f756c64206e6f74206465636f646520746865207363616c65206279746573206f6620746865206e6f7465626f6f6b5c4475706c69636174654e6f7465626f6f6b446967657374000604bc546865206e6f7465626f6f6b206469676573742077617320696e636c75646564206d6f7265207468616e206f6e6365544d697373696e674e6f7465626f6f6b44696765737400070490546865206e6f7465626f6f6b2064696765737420776173206e6f7420696e636c7564656454496e76616c69644e6f7465626f6f6b446967657374000804e0546865206e6f7465626f6f6b2064696765737420646964206e6f74206d617463682074686520696e636c75646564206e6f7465626f6f6b73844d756c7469706c654e6f7465626f6f6b496e686572656e747350726f76696465640009046c4d756c7469706c6520696e686572656e74732070726f766964656434496e7465726e616c4572726f72000a04a0556e61626c6520746f20747261636b20746865206e6f7465626f6f6b206368616e6765206c697374804e6f7465626f6f6b5375626d6974746564466f724c6f636b65644e6f74617279000b04350141206e6f7465626f6f6b20776173207375626d697474656420666f722061206e6f746172792074686174206661696c65642061756469742c207768696368206973206e6f7420616c6c6f77656460496e76616c6964526570726f636573734e6f7465626f6f6b000c0468496e76616c696420726570726f63657373206e6f7465626f6f6b54496e76616c69644e6f746172794f70657261746f72000d045c496e76616c6964206e6f74617279206f70657261746f7274496e76616c69644e6f7465626f6f6b5375626d697373696f6e5469636b000e0480496e76616c6964206e6f7465626f6f6b207375626d697373696f6e207469636b048054686520604572726f726020656e756d206f6620746869732070616c6c65742e0507086870616c6c65745f6c6f63616c636861696e5f7472616e73666572445175657565645472616e736665724f757408244163636f756e74496401001c42616c616e63650118001001286163636f756e745f69640001244163636f756e744964000118616d6f756e7418011c42616c616e636500013c65787069726174696f6e5f7469636b3001105469636b0001246e6f746172795f69641001204e6f746172794964000009070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400c90501185665633c543e00000d0708346672616d655f737570706f72742050616c6c65744964000004008902011c5b75383b20385d000011070c6870616c6c65745f6c6f63616c636861696e5f7472616e736665721870616c6c6574144572726f72040454000120644d6178426c6f636b5472616e7366657273457863656564656400000044496e73756666696369656e7446756e6473000104b0496e73756666696369656e742062616c616e636520746f206372656174652074686973207472616e7366657268496e73756666696369656e744e6f746172697a656446756e6473000204d0496e73756666696369656e742062616c616e636520746f2066756c66696c6c2061206d61696e636861696e207472616e7366657294496e76616c69644f724475706c6963617465644c6f63616c636861696e5472616e73666572000304d8546865207472616e736665722077617320616c7265616479207375626d697474656420696e20612070726576696f757320626c6f636ba44e6f7465626f6f6b496e636c75646573457870697265644c6f63616c636861696e5472616e73666572000404410141207472616e7366657220776173207375626d697474656420696e20612070726576696f757320626c6f636b20627574207468652065787069726174696f6e20626c6f636b206861732070617373656470496e76616c69644e6f7461727955736564466f725472616e736665720005047c546865206e6f74617279206964206973206e6f7420726567697374657265645c4e6f746172794c6f636b6564466f725472616e73666572000604ec546865206e6f746172792069732063757272656e746c79206c6f636b656420616e642063616e6e6f742070726f63657373207472616e7366657273544e6f417661696c61626c655472616e7366657249640007049c4e6f207472616e7366657220494473206172652063757272656e746c7920617661696c61626c65048054686520604572726f726020656e756d206f6620746869732070616c6c65742e15070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401300453000004004d0601185665633c543e000019070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540118045300000400b10501185665633c543e00001d070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012107045300000400250701185665633c543e000021070c406172676f6e5f7072696d697469766573186e6f746172797c4e6f746172794e6f7465626f6f6b566f746544696765737444657461696c7300001401246e6f746172795f6964d401204e6f74617279496400013c6e6f7465626f6f6b5f6e756d626572d401384e6f7465626f6f6b4e756d6265720001107469636b2c01105469636b000144626c6f636b5f766f7465735f636f756e74d4010c753332000148626c6f636b5f766f74696e675f706f776572c00140426c6f636b566f74696e67506f7765720000250700000221070029070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012d07045300000400310701185665633c543e00002d070000040c3010180031070000022d070035070c5870616c6c65745f626c6f636b5f7365616c5f737065631870616c6c6574144572726f72040454000104684d61784e6f7465626f6f6b7341745469636b45786365656465640000041501546865206d6178696d756d206e756d626572206f66206e6f7465626f6f6b73206174207468652063757272656e74207469636b20686173206265656e206578636565646564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e39070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401340453000004002d0201185665633c543e00003d070c3870616c6c65745f646f6d61696e731870616c6c6574144572726f720404540001144c446f6d61696e4e6f74526567697374657265640000047454686520646f6d61696e206973206e6f7420726567697374657265642e384e6f74446f6d61696e4f776e6572000104a85468652073656e646572206973206e6f7420746865206f776e6572206f662074686520646f6d61696e2e6c4661696c6564546f416464546f41646472657373486973746f7279000204944661696c656420746f2061646420746f20746865206164647265737320686973746f72792e644661696c6564546f4164644578706972696e67446f6d61696e000304a44661696c656420746f2061646420746f20746865206578706972696e6720646f6d61696e206c697374504163636f756e744465636f64696e674572726f72000404884572726f72206465636f64696e67206163636f756e742066726f6d206e6f74617279048054686520604572726f726020656e756d206f6620746869732070616c6c65742e41070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014507045300000400490701185665633c543e00004507084870616c6c65745f70726963655f696e646578504370694d6561737572656d656e744275636b657400000c01287469636b5f72616e6765d9050130285469636b2c205469636b29000124746f74616c5f637069910101204172676f6e4350490001486d6561737572656d656e74735f636f756e7410010c753332000049070000024507004d070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0130045601180453000004001906013842547265654d61703c4b2c20563e000051070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0130045601180453000004001906013842547265654d61703c4b2c20563e00005507084870616c6c65745f70726963655f696e646578784172676f6e6f74417665726167654672616d65416363756d756c61746f72041c42616c616e63650118000c01206672616d655f69642c011c4672616d65496400016c746f74616c5f6d6963726f676f6e735f7065725f6172676f6e6f74c0011c42616c616e636500013073616d706c655f636f756e74d4010c753332000059070c4870616c6c65745f70726963655f696e6465781870616c6c6574144572726f72040454000110544e6f74417574686f72697a65644f70657261746f72000004904e6f7420617574686f72697a656420617320616e206f7261636c65206f70657261746f72304d697373696e6756616c7565000104344d697373696e672076616c756530507269636573546f6f4f6c6400020480546865207375626d6974746564207072696365732061726520746f6f206f6c64744d617850726963654368616e67655065725469636b4578636565646564000304884368616e676520696e206172676f6e20707269636520697320746f6f206c61726765048054686520604572726f726020656e756d206f6620746869732070616c6c65742e5d07083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e000300006107083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f7269746965736507016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564710201244f7074696f6e3c4e3e000065070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454016d01045300000400690101185665633c543e000069070c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e6d070c406172676f6e5f7072696d6974697665732470726f7669646572733c426c6f636b5365616c6572496e666f08244163636f756e74496401002c417574686f72697479496401b8000c015c626c6f636b5f617574686f725f6163636f756e745f69640001244163636f756e744964000168626c6f636b5f766f74655f726577617264735f6163636f756e74bc01444f7074696f6e3c4163636f756e7449643e000150626c6f636b5f7365616c5f617574686f726974798101014c4f7074696f6e3c417574686f7269747949643e000071070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018d05045300000400c10501185665633c543e000075070c4470616c6c65745f626c6f636b5f7365616c1870616c6c6574144572726f720404540001545c496e76616c6964566f74655365616c537472656e677468000004e454686520737472656e677468206f662074686520676976656e207365616c20646964206e6f74206d617463682063616c63756c6174696f6e7340496e76616c69645375626d697474657200010494566f7465206e6f74207375626d697474656420627920746865207269676874206d696e657264556e61626c65546f4465636f6465566f74654163636f756e740002047c436f756c64206e6f74206465636f64652074686520766f74652062797465735c556e72656769737465726564426c6f636b417574686f72000304a854686520626c6f636b20617574686f72206973206e6f7420612072656769737465726564206d696e657254496e76616c6964426c6f636b566f746550726f6f66000404f4546865206d65726b6c652070726f6f66206f6620766f746520696e636c7573696f6e20696e20746865206e6f7465626f6f6b20697320696e76616c6964604e6f4772616e64706172656e74566f74654d696e696d756d000504ac4e6f20766f7465206d696e696d756d20666f756e64206174206772616e64706172656e7420686569676874684475706c6963617465426c6f636b5365616c50726f766964656400060478546f6f206d616e7920626c6f636b207365616c73207375626d69747465645c496e73756666696369656e74566f74696e67506f776572000704590154686520626c6f636b20766f746520646964206e6f7420726561636820746865206d696e696d756d20766f74696e6720706f7765722061742074696d65206f6620746865206772616e64706172656e7420626c6f636b5c506172656e74566f74696e674b65794e6f74466f756e64000804cc4e6f207265676973746572656420766f74696e67206b657920666f756e6420666f722074686520706172656e7420626c6f636b68496e76616c6964566f74654772616e64706172656e7448617368000904a054686520626c6f636b20766f746520776173206e6f7420666f7220612076616c696420626c6f636b58496e656c696769626c654e6f7465626f6f6b55736564000a04cc546865206e6f7465626f6f6b20666f72207468697320766f746520776173206e6f7420656c696769626c6520746f20766f7465504e6f456c696769626c65566f74696e67526f6f74000b043d01546865206c6f6f6b757020746f20766572696679206120766f746527732061757468656e746963697479206973206e6f7420617661696c61626c6520666f722074686520676976656e20626c6f636b48436f756c644e6f744465636f6465566f7465000c04b4436f756c64206e6f74206465636f646520746865207363616c65206279746573206f662074686520766f746573684d61784e6f7465626f6f6b7341745469636b4578636565646564000d043901546f6f206d616e79206e6f7465626f6f6b732077657265207375626d697474656420666f72207468652063757272656e74207469636b2e2053686f756c64206e6f7420626520706f737369626c65684e6f436c6f736573744d696e6572466f756e64466f72566f7465000e047c4e6f20636c6f73657374206d696e657220666f756e6420666f7220766f746564426c6f636b566f7465496e76616c69645369676e6174757265000f047854686520766f7465207369676e61747572652077617320696e76616c696458496e76616c6964466f726b506f776572506172656e7400100464496e76616c696420666f726b20706f77657220706172656e7450426c6f636b5365616c4465636f64654572726f72001104d04120626c6f636b207365616c20617574686f7269747920636f756c64206e6f742062652070726f7065726c79206465636f6465645c496e76616c6964436f6d70757465426c6f636b5469636b001204dc436f6d7075746520626c6f636b732063616e7420626520616464656420696e207468652073616d65207469636b206173206120766f746558496e76616c69644d696e65724e6f6e636553636f7265001304b0546865206e6f6e63652073636f72652064697374616e636520737570706c69656420697320696e76616c6964604475706c6963617465566f7465426c6f636b41745469636b001404504475706c696361746520766f746520626c6f636b048054686520604572726f726020656e756d206f6620746869732070616c6c65742e79070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017901045300000400750101185665633c543e00007d070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540121060453000004001d0601185665633c543e000081070000040c1830180085070c5070616c6c65745f626c6f636b5f726577617264731870616c6c6574144572726f72040454000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742e89070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018d07045300000400910701185665633c543e00008d070000040c3000180091070000028d070095070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0130045601180453000004001906013842547265654d61703c4b2c20563e0000990700000408109d07009d070c2c70616c6c65745f6d696e741870616c6c6574284d696e74416374696f6e0404420118000c01306172676f6e5f6275726e6564180104420001306172676f6e5f6d696e74656418010442000138626974636f696e5f6d696e746564180104420000a1070c2c70616c6c65745f6d696e741870616c6c6574144572726f720404540001044c546f6f4d616e7950656e64696e674d696e7473000000048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea5070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401a907045300000400b10701185665633c543e0000a9070c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964890201384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73ad07011c526561736f6e730000ad070c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000b107000002a90700b5070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b907045300000400bd0701185665633c543e0000b9070c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720189021c42616c616e6365011800080108696489020144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000bd07000002b90700c1070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c507045300000400c90701185665633c543e0000c50714346672616d655f737570706f72741874726169747318746f6b656e73106d697363204964416d6f756e740808496401a1011c42616c616e63650118000801086964a10101084964000118616d6f756e7418011c42616c616e63650000c907000002c50700cd070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d107045300000400dd0701185665633c543e0000d10714346672616d655f737570706f72741874726169747318746f6b656e73106d697363204964416d6f756e740808496401d5071c42616c616e63650118000801086964d50701084964000118616d6f756e7418011c42616c616e63650000d50708346172676f6e5f72756e74696d654c52756e74696d65467265657a65526561736f6e00010430426c6f636b526577617264730400d907018870616c6c65745f626c6f636b5f726577617264733a3a467265657a65526561736f6e00130000d9070c5070616c6c65745f626c6f636b5f726577617264731870616c6c657430467265657a65526561736f6e000104404d617475726174696f6e506572696f6400000000dd07000002d10700e1070c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee5070c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee9070c3c70616c6c65745f74785f70617573651870616c6c6574144572726f720404540001102049735061757365640000044c5468652063616c6c206973207061757365642e284973556e706175736564000104545468652063616c6c20697320756e7061757365642e28556e7061757361626c65000204b45468652063616c6c2069732077686974656c697374656420616e642063616e6e6f74206265207061757365642e204e6f74466f756e64000300048054686520604572726f726020656e756d206f6620746869732070616c6c65742eed07086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000f10710346672616d655f737570706f7274187472616974731c73746f72616765184e6f44726f7004045401f507000400f5070104540000f50718346672616d655f737570706f72741874726169747318746f6b656e732066756e6769626c6524696d62616c616e636524496d62616c616e63650c04420118184f6e44726f7000384f70706f736974654f6e44726f700000040118616d6f756e74180104420000f9070c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd070c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000048053656e646572206d75737420626520746865205375646f206163636f756e742e04684572726f7220666f7220746865205375646f2070616c6c65742e01080c3c70616c6c65745f74726561737572791870616c6c6574444672616d655661756c744361706974616c04045400000801206672616d655f69642c011c4672616d6549640001187661756c7473050801f8426f756e64656442547265654d61703c5661756c7449642c205661756c744361706974616c3c543e2c20543a3a4d61785661756c7473506572506f6f6c3e000005080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011004560109080453000004001908013842547265654d61703c4b2c20563e000009080c3c70616c6c65745f74726561737572791870616c6c6574305661756c744361706974616c0404540000080150626f6e645f6c6f745f616c6c6f636174696f6e730d0801e4426f756e6465645665633c426f6e644c6f74416c6c6f636174696f6e2c20543a3a4d61785472656173757279436f6e7472696275746f72733e000138656c696769626c655f626f6e6473d40114426f6e647300000d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011108045300000400150801185665633c543e000011080c3c70616c6c65745f74726561737572791870616c6c657444426f6e644c6f74416c6c6f636174696f6e000008012c626f6e645f6c6f745f69642c0124426f6e644c6f74496400011c70726f72617461e00124466978656455313238000015080000021108001908042042547265654d617008044b011004560109080004001d080000001d080000022108002108000004081009080025080c3c70616c6c65745f74726561737572791870616c6c65741c426f6e644c6f7404045400003001146f776e6572000130543a3a4163636f756e7449640001207661756c745f6964d4011c5661756c744964000114626f6e6473d40114426f6e647300013c73686172696e675f70657263656e744103011c5065726d696c6c000134626f6e75735f70657263656e744103011c5065726d696c6c000140637265617465645f6672616d655f69642c011c4672616d65496400014c7061727469636970617465645f6672616d6573d4010c7533320001706c6173745f6672616d655f6561726e696e67735f6672616d655f69648d01013c4f7074696f6e3c4672616d6549643e00014c6c6173745f6672616d655f6561726e696e6773850101484f7074696f6e3c543a3a42616c616e63653e00014c63756d756c61746976655f6561726e696e6773c00128543a3a42616c616e636500014072656c656173655f6672616d655f69648d01013c4f7074696f6e3c4672616d6549643e00013872656c656173655f726561736f6e290801644f7074696f6e3c426f6e6452656c65617365526561736f6e3e0000290804184f7074696f6e04045401e1010108104e6f6e6500000010536f6d650400e10100000100002d080000040800300031080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401300453000004004d0601185665633c543e000035080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540139080453000004003d0801185665633c543e000039080c3c70616c6c65745f74726561737572791870616c6c657438426f6e644c6f7453756d6d617279000008012c626f6e645f6c6f745f69642c0124426f6e644c6f744964000114626f6e6473d40114426f6e647300003d0800000239080041080c3473705f61726974686d65746963287065725f7468696e67731c50657263656e74000004000801087538000045080c3c70616c6c65745f74726561737572791870616c6c6574144572726f7204045400014050426f6e64507572636861736552656a6563746564000004dc54686520707572636861736520776f756c64206e6f7420656e74657220746865207661756c742773206163636570746564206c6973742e785661756c744e6f74416363657074696e67426f6e64507572636861736573000104a8546865207661756c74206973206e6f7420616363657074696e6720626f6e64207075726368617365732e60426f6e64507572636861736542656c6f774d696e696d756d000204a45468652070757263686173652069732062656c6f7720746865206d696e696d756d20616d6f756e742e34496e7465726e616c4572726f720003046c416e20696e7465726e616c206572726f72206f636375727265642e6c4d61784163636570746564426f6e644c6f74734578636565646564000404fc546865207661756c7420616c72656164792068617320746865206d6178696d756d206e756d626572206f6620616363657074656420626f6e64206c6f74732e784d617850656e64696e67426f6e6452656c65617365734578636565646564000504f0546f6f206d616e7920626f6e64206c6f742072656c656173657320617265207363686564756c656420666f72207468652073616d65206672616d652e3c426f6e644c6f744e6f74466f756e640006048054686520626f6e64206c6f7420636f756c64206e6f7420626520666f756e642e3c4e6f74426f6e644c6f744f776e6572000704945468652063616c6c657220646f6573206e6f74206f776e2074686520626f6e64206c6f742e5c426f6e644c6f74416c726561647952656c656173696e67000804b854686520626f6e64206c6f7420697320616c7265616479207363686564756c656420666f722072656c656173652e64426f6e64507572636861736541626f766553656375726974790009043101546865207661756c7420646f65736e2774206861766520656e6f75676820626974636f696e20736563757269747920746f20737570706f7274207468697320626f6e6420707572636861736598416374697665426f6e64416d6f756e7442656c6f77456e63756d62657265644261636b696e67000a0841014c69717569646174696e67207468697320626f6e64206c6f7420776f756c642074616b6520746865206163636f756e742062656c6f77206974732063726f7373636861696e2d656e63756d6265726564447472656173757279206261636b696e672e5c426f6e7573417070726f76616c57726f6e675661756c74000b04d054686520626f6e757320617070726f76616c20776173207369676e656420666f72206120646966666572656e74207661756c742e64426f6e7573417070726f76616c57726f6e674163636f756e74000c04e854686520626f6e757320617070726f76616c20776173207369676e656420666f72206120646966666572656e742062656e65666963696172792e50426f6e7573417070726f76616c45787069726564000d048c54686520626f6e757320617070726f76616c20616c726561647920657870697265642e70426f6e7573417070726f76616c4578697374696e67426f6e644c6f74000e04d85468652062656e656669636961727920616c726561647920686173206120626f6e64206c6f7420666f722074686973207661756c742e74496e76616c6964426f6e7573417070726f76616c5369676e6174757265000f04e054686520626f6e757320617070726f76616c207369676e617475726520697320696e76616c6964206f7220756e617574686f72697a65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e49080c4870616c6c65745f6665655f636f6e74726f6c1870616c6c6574144572726f720404540001044c53706f6e736f726564466565546f6f4869676800000425015468652072657175657374656420746970202b2066656520697320686967686572207468616e20746865206d6178696d756d20616c6c6f776564206279207468652073706f6e736f72048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4d080c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c6574484f7065726174696f6e616c4163636f756e7404045400004c01347661756c745f6163636f756e74000130543a3a4163636f756e7449640001586d696e696e675f66756e64696e675f6163636f756e74000130543a3a4163636f756e7449640001486d696e696e675f626f745f6163636f756e74000130543a3a4163636f756e744964000144656e6372797074696f6e5f7075626b6579510401584f7061717565456e6372797074696f6e5075626b657900011c73706f6e736f72bc01504f7074696f6e3c543a3a4163636f756e7449643e0001506861735f756e69737761705f7472616e73666572200110626f6f6c0001347661756c745f63726561746564200110626f6f6c00013c626974636f696e5f6163637275616c180128543a3a42616c616e6365000154626974636f696e5f6170706c6965645f746f74616c180128543a3a42616c616e636500017c6861735f74726561737572795f706f6f6c5f70617274696369706174696f6e200110626f6f6c00014c6d696e696e675f736561745f6163637275616cd4010c7533320001646d696e696e675f736561745f6170706c6965645f746f74616cd4010c75333200016c6f7065726174696f6e616c5f726566657272616c735f636f756e74d4010c753332000140726566657272616c5f70656e64696e67200110626f6f6c00014c617661696c61626c655f726566657272616c73d4010c753332000150726577617264735f6561726e65645f636f756e74d4010c753332000154726577617264735f6561726e65645f616d6f756e74180128543a3a42616c616e6365000160726577617264735f636f6c6c65637465645f616d6f756e74180128543a3a42616c616e636500013869735f6f7065726174696f6e616c200110626f6f6c000051080000040830040055080c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c65743452657761726473436f6e666967041c42616c616e636501180008016c6f7065726174696f6e616c5f726566657272616c5f726577617264c0011c42616c616e6365000154726566657272616c5f626f6e75735f726577617264c0011c42616c616e6365000059080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00005d080c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c6574144572726f7204045400014844416c726561647952656769737465726564000004d45468652063616c6c657220616c7265616479207265676973746572656420616e206f7065726174696f6e616c206163636f756e742e70496e76616c6964526567697374726174696f6e5375626d69747465720001040d015468652063616c6c6572206973206e6f74206f6e65206f6620746865206163636f756e747320696e636c7564656420696e2074686520726567697374726174696f6e2e504163636f756e74416c72656164794c696e6b656400020425014f6e65206f66207468652070726f7669646564206163636f756e747320697320616c7265616479206c696e6b656420746f20616e206f7065726174696f6e616c206163636f756e742e4c496e76616c69644163636f756e7450726f6f66000304d84f6e65206f6620746865206c696e6b6564206163636f756e74206f776e6572736869702070726f6f667320697320696e76616c69642e544e6f744f7065726174696f6e616c4163636f756e74000404d45468652063616c6c657220686173206e6f74207265676973746572656420616e206f7065726174696f6e616c206163636f756e742e50496e76616c6964526566657272616c50726f6f66000504bc54686520726566657272616c2070726f6f66206f722073706f6e736f722070726f6f6620697320696e76616c69642e50526566657272616c50726f6f66457870697265640006047c54686520726566657272616c2070726f6f662068617320657870697265642e68526567697374726174696f6e496e766974655265717569726564000704f8412076616c696420696e7669746520697320726571756972656420746f20726567697374657220616e206f7065726174696f6e616c206163636f756e742e604e6f50726f677265737355706461746550726f7669646564000804e8546865207265717565737465642070726f677265737320706174636820646f6573206e6f7420636f6e7461696e20616e7920757064617465732e58456e63727970746564536572766572546f6f4c6f6e67000904fc54686520656e6372797074656420736572766572207061796c6f616420657863656564732074686520636f6e66696775726564206d6178206c656e6774682e4c4e6f7453706f6e736f724f6653706f6e736565000a04dc5468652063616c6c6572206973206e6f74207468652073706f6e736f72206f6620746865207265717565737465642073706f6e7365652e404e6f50656e64696e6752657761726473000b04e0546865206f7065726174696f6e616c206163636f756e7420686173206e6f2070656e64696e67207265776172647320746f20636c61696d2e5c526577617264436c61696d42656c6f774d696e696d756d000c04a452657761726420636c61696d73206d757374206265206174206c65617374206f6e65204172676f6e2e60526577617264436c61696d4e6f7457686f6c654172676f6e000d04b452657761726420636c61696d73206d7573742062652077686f6c65204172676f6e20696e6372656d656e74732e64526577617264436c61696d4578636565647350656e64696e67000e04cc546865207265717565737465642072657761726420636c61696d20657863656564732070656e64696e6720726577617264732e645472656173757279496e73756666696369656e7446756e6473000f04350154686520747265617375727920646f6573206e6f742063757272656e746c79206861766520656e6f75676820617661696c61626c6520726573657276657320666f722074686520636c61696d2e48416c72656164794f7065726174696f6e616c0010048c546865206163636f756e7420697320616c7265616479206f7065726174696f6e616c2e604e6f74456c696769626c65466f7241637469766174696f6e001104ec546865206163636f756e7420686173206e6f7420736174697366696564206f7065726174696f6e616c20726571756972656d656e7473207965742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e61080c6070616c6c65745f657468657265756d5f76657269666965721474797065736846696e616c697a6564426561636f6e48656164657253746174650000040110736c6f742c010c753634000065080c6070616c6c65745f657468657265756d5f766572696669657214747970657354457865637574696f6e486561646572416e63686f720000180130626c6f636b5f6e756d6265722c0150457865637574696f6e426c6f636b4e756d62657200014074696d657374616d705f6d696c6c69732c010c753634000128626c6f636b5f68617368340148457865637574696f6e426c6f636b4861736800012c706172656e745f68617368340148457865637574696f6e426c6f636b4861736800012873746174655f726f6f743401104832353600013472656365697074735f726f6f743401305265636569707473526f6f74000069080c6070616c6c65745f657468657265756d5f76657269666965721474797065735453796e63436f6d6d6974746565507265706172656400000c0110726f6f743401104832353600011c7075626b6579736d08011901426f756e6465645665633c5075626c69634b657950726570617265642c20436f6e73745533323c7b2053594e435f434f4d4d49545445455f424f554e445f53495a45207d3e3e0001406167677265676174655f7075626b6579710801445075626c69634b6579507265706172656400006d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017108045300000400890801185665633c543e000071080c58736e6f776272696467655f6d696c6167726f5f626c73106b657973245075626c69634b65790000040114706f696e747508011c47726f7570473100007508103c736e6f776272696467655f616d636c18626c733338310c6563700c45435000000c010478790801084650000104797908010846500001047a79080108465000007908103c736e6f776272696467655f616d636c18626c733338310866700846500000080104787d08010c42696700010c7865738508010c69333200007d08103c736e6f776272696467655f616d636c18626c733338310c6269670c426967000004010477810801345b4368756e6b3b204e4c454e5d000081080000030e00000085080085080000050b0089080000027108008d080c406172676f6e5f7072696d69746976657320657468657265756d50457468657265756d426561636f6e5072657365740001081c4d61696e6e65740000001c4d696e696d616c0001000091080c6070616c6c65745f657468657265756d5f76657269666965721870616c6c6574144572726f7204045400016068536b697070656453796e63436f6d6d6974746565506572696f640000006c53796e63436f6d6d6974746565557064617465526571756972656400010040497272656c6576616e74557064617465000204d8417474657374656420686561646572206973206f6c646572207468616e206c61746573742066696e616c697a6564206865616465722e3c4e6f74426f6f747374726170706564000300a453796e63436f6d6d69747465655061727469636970616e74734e6f7453757065726d616a6f7269747900040060496e76616c69644865616465724d65726b6c6550726f6f660005007c496e76616c696453796e63436f6d6d69747465654d65726b6c6550726f6f660006006c496e76616c6964457865637574696f6e48656164657250726f6f6600070064496e76616c696446696e616c697a6564486561646572476170000804410154686520676170206265747765656e2066696e616c697a65642068656164657273206973206c6172676572207468616e207468652072657461696e656420686973746f726963616c2077696e646f772e64496e76616c69644261636b66696c6c486561646572526f6f7400090090457865637574696f6e486561646572416e63686f72416c7265616479496d706f72746564000a0088457865637574696f6e486561646572416e63686f724e6f74486973746f726963616c000b00604865616465724861736854726565526f6f744661696c6564000c006c426c6f636b426f64794861736854726565526f6f744661696c6564000d007c53796e63436f6d6d69747465654861736854726565526f6f744661696c6564000e00745369676e696e67526f6f744861736854726565526f6f744661696c6564000f0068466f726b446174614861736854726565526f6f744661696c656400100080457870656374656446696e616c697a65644865616465724e6f7453746f72656400110068424c53507265706172655075626c69634b6579734661696c656400120054424c53566572696669636174696f6e4661696c656400130058556e6578706563746564426561636f6e50726573657400140044496e76616c6964557064617465536c6f7400150068496e76616c696453796e63436f6d6d6974746565557064617465001608550154686520676976656e20757064617465206973206e6f7420696e2074686520657870656374656420706572696f642c206f722074686520676976656e206e6578742073796e6320636f6d6d697474656520646f6573b46e6f74206d6174636820746865206e6578742073796e6320636f6d6d697474656520696e2073746f726167652e1848616c746564001700048054686520604572726f726020656e756d206f6620746869732070616c6c65742e9508000004080502000099080c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c657454476c6f62616c49737375616e6365436f756e63696c04045400000c016c65706f63685f6d6963726f676f6e735f7065725f6172676f6e6f74180128543a3a42616c616e636500011c6d656d626572739d08013101426f756e64656442547265654d61703c483136302c20476c6f62616c49737375616e6365436f756e63696c4d656d6265723c543e2c20543a3a0a4d6178436f756e63696c4d656d626572733e000130746f74616c5f776569676874180128543a3a42616c616e636500009d080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b010d02045601a108045300000400a508013842547265654d61703c4b2c20563e0000a1080c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65746c476c6f62616c49737375616e6365436f756e63696c4d656d62657204045400000c01286163636f756e745f6964000130543a3a4163636f756e7449640001187369676e65720d02011048313630000118776569676874180128543a3a42616c616e63650000a508042042547265654d617008044b010d02045601a108000400a908000000a908000002ad0800ad08000004080d02a10800b1080000040805023000b5080c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c657464436f756e63696c417070726f76616c5175657565456e7472790404540000200158617070726f76696e675f636f756e63696c5f68617368340110483235360001187461726765741902015c436f756e63696c417070726f76616c546172676574496400014c7461726765745f7061796c6f61645f68617368340110483235360001306475655f6672616d655f69642c011c4672616d65496400015870726576696f75735f617070726f76616c5f6861736834011048323536000134617070726f76616c5f6861736834011048323536000154617070726f7665645f746f74616c5f776569676874180128543a3a42616c616e63650001287369676e617475726573b90801f0426f756e64656442547265654d61703c483136302c204b656363616b5369676e61747572652c20543a3a4d6178436f756e63696c4d656d626572733e0000b9080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b010d020456011104045300000400bd08013842547265654d61703c4b2c20563e0000bd08042042547265654d617008044b010d020456011104000400c108000000c108000002c50800c508000004080d02110400c9080c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574404d696e74696e67417574686f7269747904045400003401286163636f756e745f6964000130543a3a4163636f756e74496400014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b65790d020110483136300001147374617465cd0801544d696e74696e67417574686f726974795374617465000194676174657761795f72656d61696e696e675f6d6963726f676f6e5f636f6c6c61746572616c180128543a3a42616c616e6365000194676174657761795f72656d61696e696e675f6d6963726f6e6f745f636f6c6c61746572616c180128543a3a42616c616e636500019070656e64696e675f72657365727665645f6d6963726f676f6e5f636f6c6c61746572616c180128543a3a42616c616e636500019070656e64696e675f72657365727665645f6d6963726f6e6f745f636f6c6c61746572616c180128543a3a42616c616e636500016c6163746976655f70656e64696e675f7472616e736665725f696473d108012901426f756e6465645665633c483235362c3c5420617320436f6e6669673e3a3a0a4d617850656e64696e675472616e736665724f75747350657244657374696e6174696f6e436861696e3e00017c61637469766174696f6e5f617070726f76616c5f71756575655f6e6f6e6365300164436f756e63696c417070726f76616c51756575654e6f6e636500017c61637469766174696f6e5f626173655f72657061796d656e745f71756f7465c00128543a3a42616c616e636500019061637469766174696f6e5f7369676e61747572655f72657061796d656e745f71756f7465c00128543a3a42616c616e6365000184646561637469766174696f6e5f617070726f76616c5f71756575655f6e6f6e63658d0101844f7074696f6e3c436f756e63696c417070726f76616c51756575654e6f6e63653e0000cd080c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574544d696e74696e67417574686f72697479537461746500010c4450656e64696e6741637469766174696f6e0000001841637469766500010030446561637469766174696e6700020000d1080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401340453000004002d0201185665633c543e0000d5080c6870616c6c65745f63726f7373636861696e5f7472616e73666572307472616e736665725f6f7574485472616e736665724f75744f664172676f6e04045400003001406172676f6e5f6163636f756e745f6964000130543a3a4163636f756e7449640001506172676f6e5f7472616e736665725f6e6f6e63652c015c5472616e736665724f7574526571756573744e6f6e636500014464657374696e6174696f6e5f636861696e0502012c536f75726365436861696e0001546d6963726f676f6e735f7065725f6172676f6e6f74c00128543a3a42616c616e636500014c64657374696e6174696f6e5f6163636f756e740d0201104831363000016876616c69645f756e74696c5f657468657265756d5f626c6f636b2c014c457468657265756d426c6f636b4e756d62657200011461737365741502012441737365744b696e64000118616d6f756e74180128543a3a42616c616e63650001546d696e74696e675f617574686f726974795f746970180128543a3a42616c616e6365000164746f74616c5f61747461636865645f636f6c6c61746572616c180128543a3a42616c616e63650001986d696e74696e675f617574686f726974795f636f6c6c61746572616c5f62795f7369676e6572d908015101426f756e64656442547265654d61703c483136302c204d696e74696e67417574686f726974795472616e736665725265736572766174696f6e3c543e2c20543a3a0a4d6178436f756e63696c4d656d626572733e0001147374617465ed0801405472616e736665724f757453746174650000d9080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b010d02045601dd08045300000400e108013842547265654d61703c4b2c20563e0000dd080c6870616c6c65745f63726f7373636861696e5f7472616e73666572307472616e736665725f6f75748c4d696e74696e67417574686f726974795472616e736665725265736572766174696f6e040454000010014c6d6963726f676f6e5f636f6c6c61746572616c180128543a3a42616c616e636500014c6d6963726f6e6f745f636f6c6c61746572616c180128543a3a42616c616e6365000140636f6c6c61746572616c5f7368617265180128543a3a42616c616e63650001247369676e61747572651104013c4b656363616b5369676e61747572650000e108042042547265654d617008044b010d02045601dd08000400e508000000e508000002e90800e908000004080d02dd0800ed080c6870616c6c65745f63726f7373636861696e5f7472616e73666572307472616e736665725f6f7574405472616e736665724f757453746174650001081c5374617274656400000014526561647900010000f1080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f508045300000400f90801185665633c543e0000f5080c6870616c6c65745f63726f7373636861696e5f7472616e73666572307472616e736665725f6f75747c50656e64696e67436f6c6c61746572616c697a6174696f6e5265717565737404045400000c012c7472616e736665725f69643401104832353600015072656d61696e696e675f636f6c6c61746572616c180128543a3a42616c616e636500017c72656d61696e696e675f6d696e74696e675f617574686f726974795f746970180128543a3a42616c616e63650000f908000002f50800fd080c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c657458536f75726365436861696e43697263756c6174696f6e04045400000801446172676f6e5f63697263756c6174696f6e180128543a3a42616c616e636500014c6172676f6e6f745f63697263756c6174696f6e180128543a3a42616c616e6365000001090c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574144572726f720404540001d878496e76616c69645472616e73666572546f4172676f6e41637469766974790000042d0154686520457468657265756d206576656e7420746f70696373206f72207061796c6f616420646f206e6f74206d6174636820605472616e73666572546f4172676f6e53746172746564602e704e6f4761746577617950726f6f66426c6f636b7350726f7669646564000104f04174206c65617374206f6e652070726f76656e20676174657761792d616374697669747920626c6f636b206d75737420626520737570706c6965642e6c4e6f476174657761794163746976697469657350726f766964656400020429014174206c65617374206f6e652067617465776179206163746976697479206c6f67206d75737420626520737570706c69656420776974682074686520726563656970742070726f6f662e30496e76616c696450726f6f66000304c854686520457468657265756d2076657269666965722072656a65637465642074686520737570706c6965642070726f6f662e44556e737570706f72746564536f75726365000404d854686520736f7572636520636861696e206973206e6f7420636f6e6669677572656420666f7220696e626f756e6420636c61696d732e48556e737570706f7274656447617465776179000504e8546865206761746577617920646f6573206e6f74206d617463682074686520636f6e66696775726564206761746577617920616464726573732e40556e737570706f72746564546f6b656e000604e054686520746f6b656e206973206e6f7420737570706f7274656420756e6465722074686520636f6e6669677572656420676174657761792e98556e657870656374656450726576696f75734761746577617941637469766974794e6f6e636500070449015468652063616c6c6572277320657870656374656420616c72656164792d70726f76656e2067617465776179206163746976697479206e6f6e6365206973207374616c65206f7220696e636f72726563742e78556e65787065637465644761746577617941637469766974794e6f6e63650008040d015468652070726f76656e2067617465776179206163746976697479206e6f6e6365206973206e6f7420746865206e65787420636f6e746967756f7573206e6f6e63652e48496e76616c6964436861696e436f6e666967000904f454686520636f6e6669677572656420736f757263652d636861696e20736861706520697320696e636f6d706c657465206f72206d616c666f726d65642e54496e73756666696369656e744c6971756964697479000a04d4546865206275726e206163636f756e74206c61636b7320656e6f7567682062616c616e636520666f7220746865207061796f75742e604d696e74696e67417574686f726974794e6f74466f756e64000b04090154686520737570706c696564204d696e74696e6720417574686f72697479207369676e696e67206b657920646f6573206e6f74206578697374206c6f63616c6c792e604d696e74696e67417574686f726974794d69736d61746368000c041d01546865206c6f63616c204d696e74696e6720417574686f7269747920646964206e6f74206d61746368207468652070726f76656e20457468657265756d2061637469766974792e7c556e65787065637465644d696e74696e67417574686f726974795374617465000d041101546865206c6f63616c204d696e74696e6720417574686f7269747920776173206e6f7420696e20746865206578706563746564206c6966656379636c652073746174652e44556e6b6e6f776e4f776e65725661756c74000e04b0546865206c6f63616c206f776e6572207661756c7420636f756c64206e6f74206265207265736f6c7665642e84496e76616c69644d696e74696e67417574686f726974795369676e696e674b6579000f04d854686520737570706c696564204d696e74696e6720417574686f72697479207369676e696e67206b657920697320696e76616c69642e844d696e74696e67417574686f72697479416c726561647952656769737465726564001004550154686520737570706c696564204d696e74696e6720417574686f72697479207369676e696e67206b657920616c7265616479206861732061206c697665206c6f63616c20617574686f72697479207265636f72642e98496e76616c69644d696e74696e67417574686f726974795369676e696e674b657950726f6f6600110841015468652070726f7669646564204d696e74696e6720417574686f72697479207369676e65722070726f6f6620646964206e6f74206d6174636820746865207265636f766572656420457468657265756d1c7369676e65722e84496e76616c69644d696e74696e67417574686f72697479436f6c6c61746572616c001204d454686520737570706c696564204d696e74696e6720417574686f7269747920636f6c6c61746572616c20697320696e76616c69642e74476c6f62616c49737375616e6365436f756e63696c4e6f74466f756e6400130449015468652061637469766520476c6f62616c2049737375616e636520436f756e63696c20686173206e6f74206265656e2073656564656420666f7220746869732064657374696e6174696f6e20636861696e2e70496e76616c6964476c6f62616c49737375616e6365436f756e63696c001404250154686520737570706c69656420476c6f62616c2049737375616e636520436f756e63696c20697320656d707479206f7220696e7465726e616c6c7920696e636f6e73697374656e742e904475706c6963617465476c6f62616c49737375616e6365436f756e63696c5369676e6572001504350154686520737570706c69656420476c6f62616c2049737375616e636520436f756e63696c20636f6e7461696e73207468652073616d65207369676e6572206d6f7265207468616e206f6e63652e944475706c6963617465476c6f62616c49737375616e6365436f756e63696c4163636f756e74001604390154686520737570706c69656420476c6f62616c2049737375616e636520436f756e63696c20636f6e7461696e73207468652073616d65206163636f756e74206d6f7265207468616e206f6e63652e64496e76616c6964436f756e63696c5369676e657250726f6f6600170439015468652070726f766964656420636f756e63696c207369676e65722070726f6f6620646964206e6f74206d6174636820746865207265636f766572656420457468657265756d207369676e65722e8c476c6f62616c49737375616e6365436f756e63696c4d656d6265724e6f74466f756e640018045501546865206f726967696e206973206e6f7420616e2061637469766520476c6f62616c2049737375616e636520436f756e63696c206d656d62657220666f72207468652064657374696e6174696f6e20636861696e2e68436f756e63696c5369676e65724e6f74526567697374657265640019042d01546865206163636f756e7420686173206e6f742072656769737465726564206120636f756e63696c207369676e657220666f7220746869732064657374696e6174696f6e20636861696e2e84436f756e63696c417070726f76616c5175657565456e7472794e6f74466f756e64001a04e8546865204d696e74696e6720417574686f7269747920617070726f76616c20717565756520656e74727920646f6573206e6f742065786973742e78436f756e63696c417070726f76616c416c72656164795265636f72646564001b0409015468697320636f756e63696c206d656d62657220616c726561647920617070726f7665642074686520717565756564204d696e74696e6720417574686f726974792e64496e76616c6964466f72636553657441667465724e6f6e6365001c04110154686520666f7263652d7365742063757420706f696e742077617320626568696e6420616c726561647920636f6e6669726d65642071756575652070726f67726573732e9843616e6e6f74466f72636553657451756f72756d417070726f7665645175657565456e747279001d04310154686520666f7263652d7365742063757420776f756c642064697363617264206120717565756520656e747279207468617420616c726561647920686173206c6f63616c2071756f72756d2e7c496e76616c6964436f756e63696c417070726f76616c5369676e6174757265001e044d015468652070726f766964656420636f756e63696c20617070726f76616c207369676e617475726520646964206e6f74206d617463682074686520657870656374656420457468657265756d207369676e65722e8c4e6f436f756e63696c417070726f76616c5369676e61747572657350726f7669646564001f04e44174206c65617374206f6e6520636f756e63696c20617070726f76616c207369676e6174757265206d75737420626520737570706c6965642e9c496e73756666696369656e74436f6d6d69747465644d6963726f676f6e436f6c6c61746572616c0020084901546865206f70657261746f7220646f6573206e6f74206861766520656e6f7567682072656d61696e696e6720636f6d6d6974746564206d6963726f676f6e20636f6c6c61746572616c20666f722074686973484d696e74696e6720417574686f726974792e98496e73756666696369656e74436f6d6d69747465644172676f6e6f74436f6c6c61746572616c0021084501546865206f70657261746f7220646f6573206e6f74206861766520656e6f7567682072656d61696e696e6720636f6d6d6974746564204172676f6e6f7420636f6c6c61746572616c20666f722074686973484d696e74696e6720417574686f726974792eb0496e76616c69644d696e74696e67417574686f72697479446561637469766174696f6e5369676e61747572650022041d015265736572766564206c6567616379206572726f7220666f7220696e76616c6964207369676e65722d6b6579656420646561637469766174696f6e207369676e6174757265732e68496e76616c69644d6963726f676f6e735065724172676f6e6f740023043d0154686520636f756e63696c2d6d616e61676564204172676f6e6f7420666c6f6f7220636f756c64206e6f742062652064657465726d696e65642066726f6d2063757272656e742070726963696e672e984d696e74696e67417574686f72697479436f6c6c61746572616c42656c6f774d696e696d756d0024084d0154686520737570706c696564204d696e74696e6720417574686f7269747920636f6c6c61746572616c2069732062656c6f772074686520636f6e66696775726564207065722d636861696e206d696e696d756d686e6f726d616c697a6564206d6963726f676f6e2076616c75652ec4496e76616c69644d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e67002504090154686520636f6e666967757265642061637469766174696f6e2072657061796d656e742070726963696e6720697320696e7465726e616c6c7920696e76616c69642ec44d697373696e674d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e67002604350154686520636f6e666967757265642061637469766174696f6e2072657061796d656e742070726963696e67206973206d697373696e6720666f72207468697320736f7572636520636861696e2e58496e76616c69644761746577617941637469766974790027043d0154686520457468657265756d206576656e7420746f70696373206f72207061796c6f616420646f206e6f74206d61746368206120737570706f7274656420676174657761792061637469766974792e444761746577617953796e635061757365640028083d015468697320736f7572636520636861696e206973207061757365642064756520746f20676174657761792073796e63206d6973616c69676e6d656e7420616e64206e65656473206f70657261746f72247265636f766572792e60496e76616c69645472616e736665724f7574416d6f756e74002904a0546865207472616e736665722d6f757420616d6f756e74206d757374206265206e6f6e7a65726f2e6c496e76616c69645472616e736665724f7574526563697069656e74002a041501546865207472616e736665722d6f757420726563697069656e74206d757374206265206e6f6e7a65726f20666f72207468652064657374696e6174696f6e20636861696e2e744d697373696e675665726966696564457865637574696f6e426c6f636b002b0845014e6f2076657269666965722d6261636b656420457468657265756d20657865637574696f6e20626c6f636b20697320617661696c61626c6520746f20616e63686f722061207472616e736665722d6f7574386578706972792077696e646f772e6c5374616c655665726966696564457865637574696f6e426c6f636b002c084d01546865206c61746573742076657269666965722d6261636b656420457468657265756d20657865637574696f6e20626c6f636b20697320746f6f206f6c6420746f20736166656c79206f70656e2061206e6577347472616e73666572206f75742e4c5472616e736665724f75744e6f74466f756e64002d04b0546865206f7574626f756e64207472616e73666572207265636f726420646f6573206e6f742065786973742e5c5472616e736665724f7574416c72656164795265616479002e083d01546865206f7574626f756e64207472616e736665722063616e6e6f7420616363657074206d6f726520636f6c6c61746572616c206265636175736520697420697320616c72656164792066756c6c7920636f76657265642e485472616e736665724f757445787069726564002f045d01546865206f7574626f756e64207472616e73666572207265717565737420697320616c72656164792065787069726564206f6e20746865206c617465737420766572696669656420457468657265756d20626c6f636b2e64496e76616c69645472616e73666572436f6c6c61746572616c00300421015468652070726f7669646564207472616e7366657220636f6c6c61746572616c20726f7720697320696e76616c696420666f722074686973207472616e736665722061737365742e7c496e76616c69645472616e73666572436f6c6c61746572616c55706461746500310451015468652070726f7669646564207472616e7366657220636f6c6c61746572616c20726f7720646964206e6f7420616476616e636520746865207369676e65722773206c6f63616c207265736572766174696f6e2e88496e76616c69645472616e73666572436f6c6c61746572616c5369676e61747572650032042901546865207472616e7366657220636f6c6c61746572616c207369676e617475726520646964206e6f74206d617463682074686520617574686f72697479207369676e696e67206b65792e98496e73756666696369656e744d696e74696e67417574686f72697479436f6c6c61746572616c003304590154686520617574686f7269747920646f6573206e6f74206861766520656e6f7567682072656d61696e696e67206761746577617920636f6c6c61746572616c20666f722074686973207472616e7366657220726f772e8c5472616e73666572436f6c6c61746572616c496e6372656d656e74546f6f536d616c6c003408490154686520636f6c6c61746572616c20696e6372656d656e742069732062656c6f772074686520636f6e66696775726564206d696e696d756d20616e6420646f6573206e6f7420636f6d706c65746520746865247472616e736665722e68546f6f4d616e7950656e64696e675472616e736665724f75747300350851015468652064657374696e6174696f6e20636861696e20616c726561647920747261636b7320746865206d6178696d756d206e756d626572206f66206e6f6e2d7465726d696e616c207472616e736665722d6f75742472657175657374732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e0509102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301fd021043616c6c01f502245369676e6174757265010d041445787472610109090004003800000009090000042c0d091109150919091d09210929092d09310935093d09000d0910306672616d655f73797374656d28657874656e73696f6e7338617574686f72697a655f63616c6c34417574686f72697a6543616c6c04045400000000110910306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000150910306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000190910306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e040454000000001d0910306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000210910306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004002509010c45726100002509102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000290910306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400d40120543a3a4e6f6e636500002d0910306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000003109086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400c0013042616c616e63654f663c543e0000350908746672616d655f6d657461646174615f686173685f657874656e73696f6e44436865636b4d657461646174614861736804045400000401106d6f6465390901104d6f64650000390908746672616d655f6d657461646174615f686173685f657874656e73696f6e104d6f64650001082044697361626c65640000001c456e61626c6564000100003d0910306672616d655f73797374656d28657874656e73696f6e73387765696768745f7265636c61696d345765696768745265636c61696d04045400000000410904184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000450908346172676f6e5f72756e74696d651c52756e74696d6500000000801853797374656d011853797374656d501c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e40496e686572656e74734170706c696564010020040004a4205768657468657220616c6c20696e686572656e74732068617665206265656e206170706c6965642e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e24426c6f636b53697a6500001004000cb020546f74616c2073697a652028696e20627974657329206f66207468652063757272656e7420626c6f636b2e00c820547261636b73207468652073697a65206f66207468652068656164657220616e6420616c6c2065787472696e736963732e24426c6f636b486173680101040510348000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510380400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401003c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023431020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000390204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e44426c6f636b7354696c6c55706772616465000008040004ec204e756d626572206f6620626c6f636b732074696c6c207468652070656e64696e6720636f64652075706772616465206973206170706c6965642e545570677261646564546f553332526566436f756e740100200400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100200400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500002902040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a65645570677261646500004502040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e6045787472696e7369635765696768745265636c61696d65640100280800001ca02054686520776569676874207265636c61696d656420666f72207468652065787472696e7369632e002101205468697320696e666f726d6174696f6e20697320617661696c61626c6520756e74696c2074686520656e64206f66207468652065787472696e73696320657865637574696f6e2e2101204d6f726520707265636973656c79207468697320696e666f726d6174696f6e2069732072656d6f76656420696e20606e6f74655f6170706c6965645f65787472696e736963602e007101204c6f67696320646f696e6720736f6d6520706f73742064697370617463682077656967687420726564756374696f6e206d7573742075706461746520746869732073746f7261676520746f2061766f6964206475706c69636174652c20726564756374696f6e2e01490201581830426c6f636b576569676874735902fd01c2a0e766000b00a0724e180913ffffffffffffffff2261c91900010bb81711ca5d061332333333333333b3010b00f8d53ad20613ffffffffffffffbf0100002261c91900010bb8bfaddda3081332333333333333f3010b00a0724e180913ffffffffffffffff010b00a89c1346021300000000000000402261c9190000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e67746869023400003c0000005000000050000004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101000100000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687475024040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e79026904146172676f6e146172676f6e010000009b0000000a00000054df6acb689907609b0500000037e397fc7c91f5e402000000ccd9de6396c899ca0100000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000bc9d89904f5b923f01000000ab3c0572291feb8b0200000037c8bb1350a9a2a804000000f3ff14d5ab5270590300000061571683e6d7a7c8010000005e4dc2ce83c23f0901000000e6683faaa563317a0200000011de59f9923f03d80100000051c97e4020145cb001000000bab599c4f0d362c601000000fff0fb031985f8a1020000000090f9d890bb0bb20100000005dd9be92cc17d2803000000ed99c5acb25eedf503000000fbc577b9d747efd60100000005000000010484204765742074686520636861696e277320696e2d636f64652076657273696f6e2e28535335385072656669789c082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e018d02001c44696765737473011c44696765737473042c54656d7044696765737473000091020400000001800001d902012454696d657374616d70012454696d657374616d70080c4e6f7701003020000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010020040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e01dd020004344d696e696d756d506572696f6430200100000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e0002204d756c746973696701204d756c746973696704244d756c7469736967730001080502e102e502040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01f10201840c2c4465706f736974426173651840a005000000000000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f721840a00000000000000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e013905031450726f7879011450726f7879081c50726f7869657301010405003d054400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e747301010405004d0544000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01f9020194184050726f78794465706f736974426173651840b004000000000000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f721840a500000000000000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310102000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710102000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f736974426173651840d804000000000000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f7218404a01000000000000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e015d0504145469636b7301145469636b73143050726576696f75735469636b010030200000000000000000002c43757272656e745469636b010030200000000000000000002c47656e657369735469636b010030200000000000000000003447656e657369735469636b657201006105080000004c526563656e74426c6f636b7341745469636b7301010405306505040008e820426c6f636b732066726f6d20746865206c61737420313030207469636b732e205472696d6d656420696e206f6e5f696e697469616c697a652ef4204e4f54453a2063616e6e6f7420696e636c756465207468652063757272656e7420626c6f636b206861736820756e74696c206e65787420626c6f636b010903000001690505284d696e696e67536c6f7401284d696e696e67536c6f74505c48617341646465644772616e647061526f746174696f6e010020040000384d696e6572734279436f686f72740101040230a80400045901204d696e6572732074686174206172652061637469766520696e207468652063757272656e7420626c6f636b2028706f737420696e697469616c697a6529206279207468656972207374617274696e67206672616d65444163746976654d696e657273436f756e7401009c08000000644d696e65724e6f6e636553636f72696e674279436f686f727401006d0504000c610120546869732069732061206c6f6f6b7570206f662065616368206d696e65722773206e6f6e636520746f20757365207768656e207069636b696e672061206265737420617574686f7269747920746f207375626d69742061510120626c6f636b2e2049742773206120626c616b6532203235362068617368206f6620746865206d696e6572206163636f756e7420696420616e642074686520626c6f636b20686173682061742074696d65206f66302061637469766174696f6e2e544172676f6e6f74735065724d696e696e6753656174010018401027000000000000000000000000000004c8204172676f6e6f74732074686174206d757374206265206c6f636b656420746f2074616b652061204d696e657220726f6c65484163636f756e74496e6465784c6f6f6b757000010402008d050400046901204c6f6f6b7570206279206163636f756e7420696420746f2074686520636f72726573706f6e64696e6720696e64657820696e204d696e6572734279436f686f727420616e64204d696e65724e6f6e6365734279436f686f72745442696473466f724e657874536c6f74436f686f72740100a80400080d012054686520636f686f72742073657420746f20676f20696e746f2065666665637420696e20746865206e65787420736c6f742e20546865205665632068617320616c6c882072656769737472616e747320776974682074686569722062696420616d6f756e746452656c65617365644d696e65727342794163636f756e74496401009105040004150120546865206d696e6572732072656c656173656420696e20746865206c61737420626c6f636b20286f6e6c79206b65707420666f7220612073696e676c6520626c6f636b295449734e657874536c6f7442696464696e674f70656e0100200400049420497320746865206e65787420736c6f74207374696c6c206f70656e20666f72206269647354486973746f726963616c42696473506572536c6f740100a105040004050120546865206e756d626572206f6620626964732070657220736c6f7420666f7220746865206c61737420313020736c6f747320286e6577657374206669727374294c417665726167655072696365506572536561740100ad05040004050120546865206176657261676520707269636520706572207365617420666f7220746865206c617374203130206672616d657320286e657765737420666972737429304d696e696e67436f6e6669670100b5050c00000004b420546865206d696e696e6720736c6f7420636f6e66696775726174696f6e2073657420696e2067656e657369732c4e6578744672616d65496401003020000000000000000008750120546865206e657874206672616d6549642e2041206672616d6520696e206172676f6e2069732074686520323420686f757273206265747765656e20746865207374617274206f662074776f20646966666572656e74206d696e696e672420636f686f7274732e4c4e65776c79537461727465644672616d654964000030040004942049732061206e6577206672616d65207374617274656420696e207468697320626c6f636b384e657874436f686f727453697a65010010100000000004f420546865206e756d626572206f6620616c6c6f77206d696e65727320746f2062696420666f7220746865206e657874206d696e696e6720636f686f7274805363686564756c6564436f686f727453697a654368616e676542794672616d650100b90504000ce420546865207570636f6d696e67206368616e676573207363686564756c656420666f7220636f686f72742073697a65206279206672616d652e5501204361706163697479206f6620313120616c6c6f777320666f72203130206672616d657320776f727468206f66207363686564756c6564206368616e67657320706c7573206f6e6520776f726b696e6720736c6f74d020746f207363686564756c652061206e6577206368616e676520647572696e67206672616d652066696e616c697a6174696f6e2e644672616d655265776172645469636b7352656d61696e696e6701003020000000000000000004c820546865206e756d626572206f6620726577617264207469636b732072656d61696e696e6720696e20746865206672616d65584672616d655374617274426c6f636b4e756d626572730100c505040004a8205468652070726576696f7573203130206672616d6520737461727420626c6f636b206e756d626572733c4672616d6553746172745469636b730100cd0504000488205468652070726576696f7573203130206672616d65207374617274207469636b734c54656d704672616d65496e666f4469676573740000bd02040004982054656d706f726172792073746f726520746865206672616d6520696e666f20646967657374010d0301a4244c4672616d65735065724d696e696e675465726d10100a00000004a820546865206e756d626572206f66206672616d65732061206d696e6572206f7065726174657320666f72344d696e436f686f727453697a6510100a00000004a020546865206d696e696d756d206e756d626572206f66206d696e6572732070657220636f686f7274344d6178436f686f727453697a65101090000000085d0120486f77206d616e79206e6577206d696e6572732063616e20626520696e2074686520636f686f727420666f72206561636820736c6f742e205468652061637475616c206d6178696d756d2077696c6c2061646a757374302064796e616d6963616c6c7958496e697469616c4172676f6e6f7473506572536561741840102700000000000000000000000000000435012054686520696e697469616c206172676f6e6f7473206e6565646564207065722073656174206265666f72652061207072696f722d646179206d656469616e20697320617661696c61626c652e704172676f6e6f74426964436f6c6c61746572616c4d756c7469706c6518400200000000000000000000000000000004510120546865206d756c7469706c65206f6620746865207072696f722d646179206c6f776572206d656469616e2077696e6e696e67206269642074686174206d75737420626520636f6c6c61746572616c697a65642e48546172676574507269636550657253656174184000ca9a3b000000000000000000000000046c20546865207461726765742070726963652070657220736561742e7050726963655065725365617441646a7573746d656e7444616d706572e040000014bbf08ac6020000000000000000040901205468652064616d706572206f6e207468652070726963652070657220736561742061646a7573746d656e74202866726f6d20746865206c61737420707269636529504d696e696e67426964506f6f6c4163636f756e7400806d6f646c6c7164506f6f6c730000000000000000000000000000000000000000041501204163636f756e742074686174207265636569766573206d696e696e67206269642066756e6473206265666f726520747265617375727920646973747269627574696f6e2e34426964496e6372656d656e74731840102700000000000000000000000000000419012054686520696e6372656d656e74207468617420626964732063616e206265206f6e2028666f7220696e7374616e63652c206f6e652063656e7420696e6372656d656e74732901dd050630426974636f696e5574786f730130426974636f696e5574786f73302c4c6f636b65645574786f7300010402cce10504000c5d01204c6f636b656420426974636f696e205554584f7320746861742068617665206265656e2066756e64656420776974682061205574786f5265662066726f6d2074686520426974636f696e206e6574776f726b20616e645d0120616d6f756e74732077697468696e20746865204d696e696d756d5361746f7368695468726573686f6c64206f66207468652065787065637465642e204966206120426974636f696e205554584f206973206d6f7665643101206265666f7265207468652065787069726174696f6e20626c6f636b2c207468652066756e647320617265206275726e656420616e6420746865205554584f20697320756e6c6f636b65642e585574786f4964546f46756e64696e675574786f5265660001040530cc040004d42041206d617070696e67206f66207574786f20696420746f2074686520636f6e6669726d6564207574786f207265666572656e63654c4c6f636b7350656e64696e6746756e64696e670100e9050400040d0120426974636f696e206c6f636b732074686174206172652070656e64696e672066756c6c2066756e64696e67206f6e2074686520626974636f696e206e6574776f726b544578706972656450656e64696e6746756e64696e670100e90504000431012050656e64696e672066756e64696e6720656e747269657320746861742068617665206578706972656420616e6420617265206177616974696e6720626f756e64656420636c65616e75702e6443616e6469646174655574786f5265667342795574786f49640101040530f90504000429012043616e646964617465205554584f73206173736f63696174656420776974682061206c6f636b20286d69736d6174636865732c2065787472612066756e64696e672c206574632e292e38426974636f696e4e6574776f726b01000906040304ec205468652067656e657369732073657420626974636f696e206e6574776f726b2074686174207468697320636861696e206973207469656420746f60436f6e6669726d6564426974636f696e426c6f636b54697000002d03040004fc20416e206f7261636c652d70726f766964656420636f6e6669726d656420626974636f696e20626c6f636b202865672c203620626c6f636b73206261636b295c50726576696f7573426974636f696e426c6f636b54697000002d030400005854656d70506172656e7448617353796e635374617465010020040004d42053746f72657320696620706172656e7420626c6f636b20686164206120636f6e6669726d656420626974636f696e20626c6f636b4c53796e63686564426974636f696e426c6f636b00002d030400047c20546865206c6173742073796e6368656420626974636f696e20626c6f636b544f7261636c654f70657261746f724163636f756e740000000400048020426974636f696e204f7261636c65204f70657261746f72204163636f756e7440496e686572656e74496e636c756465640100200400048c20436865636b2069662074686520696e686572656e742077617320696e636c7564656401110301c8146c4d617850656e64696e67436f6e6669726d6174696f6e5574786f7310101027000004650120546865206d6178696d756d206e756d626572206f66205554584f7320746861742063616e206265207761746368656420696e206120626c6f636b20616e642f6f72206578706972696e672061742073616d6520626c6f636b904d617850656e64696e6746756e64696e6745787069726174696f6e73506572426c6f636b10106400000004310120546865206d6178696d756d206e756d626572206f6620657870697265642070656e64696e672066756e64696e6720656e747269657320636c65616e656420757020696e206120626c6f636b604d617843616e6469646174655574786f735065724c6f636b10106400000004c8204d6178696d756d206e756d626572206f662063616e646964617465205554584f732073746f72656420706572206c6f636b704d617850656e64696e67436f6e6669726d6174696f6e426c6f636b7330209000000000000000042501204d6178696d756d20626974636f696e20626c6f636b7320746f2077617463682061205574786f20666f7220636f6e6669726d6174696f6e206265666f72652063616e63656c696e678c4d6178696d756d5361746f7368695468726573686f6c6446726f6d45787065637465643020e803000000000000084501204d6178696d756d206e756d626572206f66207361746f73686920646966666572656e636520616c6c6f7765642066726f6d20657870656374656420746f20636f6e73696465722061205554584f206173302022636f6e6669726d656422010d0607185661756c747301185661756c7473382c4e6578745661756c744964000010040000285661756c7473427949640001040510110604000434205661756c7473206279206964445661756c74496442794f70657261746f7200010405001004000440205661756c7473206279206f776e6572684172676f6e6f74436f6d6d69746d656e7442795661756c74496400010405102d060400040101205661756c742d7369646520636f6d6d697474656420616e642063726f7373636861696e2d656e63756d6265726564206172676f6e6f74206261636b696e672e345661756c74585075624279496400010405103106040004e0205661756c7420426974636f696e205870756220616e642063757272656e74206368696c6420636f756e746572206279205661756c744964644c617374436f6c6c6563744672616d6542795661756c7449640001040510300400049420546865206c61737420636f6c6c656374206672616d65206f662065616368207661756c747c50656e64696e675465726d734d6f64696669636174696f6e7342795469636b010104053041060400085d012050656e64696e67207465726d7320746861742077696c6c20626520636f6d6d69747465642061742074686520676976656e20626c6f636b206e756d62657220286d7573742062652061206d696e696d756d206f6620314c206672616d65206368616e67652061776179295850656e64696e67436f7369676e42795661756c74496401010405104506040004a420426974636f696e204c6f636b732070656e64696e6720636f7369676e206279207661756c74206964744f727068616e65645574786f4163636f756e747342795661756c7449640101080502510610100000000004c8204f727068616e656420426974636f696e205574786f732070656e64696e6720636f7369676e206279207661756c742069646c5661756c7446756e647352656c656173696e67427948656967687401010405305506040004fc20546865207661756c7473207468617420686176652066756e64732072656c656173696e67206174206120676976656e20626974636f696e206865696768749c5661756c747352656c656173696e674f7065726174696f6e616c4d696e696d756d42795469636b010104053055060400043101205661756c74732077686f73652074656d706f72617279206f7065726174696f6e616c206d696e696d756d206d61792062652072656c6561736564206174206120676976656e207469636b2e58526576656e75655065724672616d6542795661756c7401010405105d0604000c710120547261636b7320726576656e75652066726f6d20426974636f696e204c6f636b7320616e6420547265617375727920506f6f6c7320666f722074686520747261696c696e67206672616d657320666f722065616368207661756c747101202861206672616d65206973206120226d696e696e67206461792220696e204172676f6e292e204e6577657374206672616d6573206172652066697273742e204672616d6573206172652072656d6f76656420616674657220746865050120636f6c6c6563742065787069726174696f6e2077696e646f77202860526576656e7565436f6c6c656374696f6e45787069726174696f6e4672616d657360292e6c526576656e75655065724672616d6542795661756c74436f756e7401001010000000000068526563656e74436170616369747944726f707342795661756c7401010405106906040004f420526563656e7420726564756374696f6e7320696e2060617661696c61626c655f666f725f6c6f636b602c2067726f75706564206279207661756c742e01310301dc24884d617850656e64696e675465726d4d6f64696669636174696f6e735065725469636b10106400000004b420546865206d61782070656e64696e67207661756c74207465726d206368616e6765732070657220626c6f636b244d61785661756c747310101027000004b420546865206d6178206e756d626572206f66207661756c747320746861742063616e2062652063726561746564644d617850656e64696e67436f7369676e735065725661756c7410106400000004a4204d617820636f6e63757272656e7420636f7369676e732070656e64696e6720706572207661756c7484526576656e7565436f6c6c656374696f6e45787069726174696f6e4672616d657330200a0000000000000004f020546865206e756d626572206f66206672616d65732077697468696e20776869636820726576656e7565206d75737420626520636f6c6c6563746564944f7065726174696f6e616c4d696e696d756d5661756c7453656375726974697a6174696f6e184000943577000000000000000000000000044901204d696e696d756d207661756c742073656375726974697a6174696f6e207265717569726564207768696c6520746865206f7065726174696f6e616c20666c6f6f72206c6f636b206973206163746976652e804f7065726174696f6e616c4d696e696d756d5661756c744c6f636b5469636b7330202005080000000000045101204475726174696f6e20746f206b65657020746865206f7065726174696f6e616c206d696e696d756d2073656375726974697a6174696f6e206c6f636b65642066726f6d207661756c74206372656174696f6e2e74526563656e74436170616369747944726f70426c6f636b57696e646f77101008000000046101204e756d626572206f66204172676f6e20626c6f636b7320746f206b65657020726563656e742060617661696c61626c655f666f725f6c6f636b602064726f707320666f72207374616c6520696e697420636865636b732e784d6178526563656e74436170616369747944726f70735065725661756c74101040000000042101204d6178696d756d206e756d626572206f6620726563656e742060617661696c61626c655f666f725f6c6f636b602064726f70732072657461696e656420706572207661756c742e5c436170616369747944726f70417474656d7074556e6974184000e1f505000000000000000000000000085901204f6e65206e6f2d666565207374616c652060696e697469616c697a655f666f7260206661696c75726520697320616c6c6f77656420666f72206561636820746869732d6d616e7920756e697473206f66206c6f7374582060617661696c61626c655f666f725f6c6f636b602e0175060830426974636f696e4c6f636b730130426974636f696e4c6f636b732c284e6578745574786f4964000030040000344c6f636b7342795574786f496400010405307906040004e02053746f72657320626974636f696e207574786f73207468617420686176652072657175657374656420746f2062652072656c6561736564405574786f49647342795661756c74496400010805058106900400048c20496e646578206f6620616374697665205554584f2049447320706572207661756c746c4c6f636b52656c65617365436f7369676e486569676874427949640001040530100400040d012053746f7265732074686520626c6f636b206e756d62657220776865726520612072656c656173652077617320636f7369676e656420627920746865207661756c742e6c4c6f636b52656c65617365526571756573747342795574786f496400010405308506040004e02053746f72657320626974636f696e206c6f636b73207468617420686176652072657175657374656420746f2062652072656c6561736564584f727068616e65645574786f7342794163636f756e74000108050589068d060400042501204d69736d617463686564207574786f73207468617420776572652073656e74207769746820696e76616c696420616d6f756e747320746f2061206c6f636b656420626974636f696e3c4d696e696d756d5361746f7368697301003020000000000000000004c820546865206d696e696d756d206e756d626572206f66207361746f7368697320746861742063616e206265206c6f636b6564504c6f636b436f7369676e44756542794672616d6501010405309906040004f0205574786f7320746861742068617665206265656e2072657175657374656420746f20626520636f7369676e656420666f722072656c656173696e67784c6f636b45787069726174696f6e734279426974636f696e48656967687401010405309d060400085d012045787069726174696f6e206f6620626974636f696e206c6f636b7320627920626974636f696e206865696768742e2046756e647320617265206275726e65642073696e636520746865207573657220646964206e6f749020756e6c6f636b2069742e20426974636f696e2077696c6c20676f20746f207661756c74744f727068616e65645574786f45787069726174696f6e42794672616d650101040530a106040004c42045787069726174696f6e206f66206f727068616e6564207574786f20726566732062792075736572206163636f756e74544d6963726f676f6e506572427463486973746f72790100ad060400049420486973746f7279206f6620746172676574206d6963726f676f6e7320706572206274632e01590301e424404172676f6e5469636b735065724461793020a005000000000000044c204172676f6e207469636b2070657220646179744d6178436f6e63757272656e746c7952656c656173696e674c6f636b731010e80300000488204d6178696d756d2072656c656173696e67207574786f7320617420612074696d65484c6f636b4475726174696f6e426c6f636b73302050cd00000000000004d420546865206e756d626572206f6620626974636f696e20626c6f636b73206120626974636f696e206973206c6f636b656420666f72544c6f636b5265636c616d6174696f6e426c6f636b733020e0100000000000000861012054686520626974636f696e20626c6f636b73206166746572206120426974636f696e4c6f636b206578706972657320776869636820746865207661756c742077696c6c20626520616c6c6f77656420746f20636c61696d28206120626974636f696e7c4c6f636b52656c65617365436f7369676e446561646c696e654672616d657330200a0000000000000004fc204e756d626572206f66206672616d65732061207661756c742068617320746f20636f756e7465722d7369676e206120626974636f696e2072656c656173657c4f727068616e65645574786f52656c656173654578706972794672616d657330200a00000000000000084d01204e756d626572206f66206672616d6573206f727068616e6564205554584f2072656c6561736520656e7472696573206172652072657461696e65642061667465722061206c6f636b206c6966656379636c6590207472616e736974696f6e206265666f7265206265696e6720636c65616e65642075702e704d6178436f6e63757272656e746c794578706972696e674c6f636b731010102700000861012050616c6c65742073746f7261676520726571756972657320626f756e64732c20736f207765206861766520746f207365742061206d6178696d756d206e756d62657220746861742063616e2065787069726520696e2061342073696e676c6520626c6f636b505469636b73506572426974636f696e426c6f636b30200a000000000000000488204e756d626572206f66207469636b732070657220626974636f696e20626c6f636b484d617842746350726963655469636b41676510101e00000004c0204d617820616c6c6f776564207469636b2d616765206f66206d6963726f676f6e2d7065722d6274632070726963657301b10609204e6f74617269657301204e6f74617269657318304e6578744e6f7461727949640000100400004050726f706f7365644e6f7461726965730001040200b906040000444578706972696e6750726f706f73616c730101040510bd06040000384163746976654e6f7461726965730100c106040000404e6f746172794b6579486973746f72790101040510c9060400005c5175657565644e6f746172794d6574614368616e6765730101040530d506040004cc204d65746164617461206368616e67657320746f206265206163746976617465642061742074686520676976656e207469636b01750301f018444d61784163746976654e6f746172696573101019000000049020546865206d6178696d756d20616374697665206e6f74617269657320616c6c6f776564544d617850726f706f73616c486f6c64426c6f636b731010c04e000004c420546865206d6178696d756d20626c6f636b7320612070726f706f73616c2063616e2073697420756e617070726f766564504d617850726f706f73616c73506572426c6f636b10100a00000000504d6574614368616e6765735469636b44656c617930200600000000000000084901204e756d626572206f66207469636b7320746f2064656c6179206368616e67696e672061206e6f74617269657327206d65746120287468697320697320746f20616c6c6f7720612077696e646f7720666f72f4206e6f74617269657320746f2073776974636820746f206e6577206b6579732061667465722061206e6577206b65792069732066696e616c697a656429544d61785469636b73466f724b6579486973746f72791010400b000008e0204e756d626572206f66207469636b7320746f206d61696e7461696e206b657920686973746f727920666f722065616368206e6f74617279a8204e4f54453a206f6e6c79207072756e6564207768656e206e6577206b65797320617265206164646564384d61784e6f74617279486f7374731010040000000488204d6178696d756d20686f7374732061206e6f746172792063616e20737570706c7901e5060a204e6f7465626f6f6b01204e6f7465626f6f6b1c8c4e6f7465626f6f6b4368616e6765644163636f756e7473526f6f7442794e6f746172790001080205350234040004010120446f75626c652073746f72616765206d6170206f66206e6f74617279206964202b206e6f7465626f6f6b202320746f20746865206368616e676520726f6f74a04163636f756e744f726967696e4c6173744368616e6765644e6f7465626f6f6b42794e6f746172790001080202e9061004000c35012053746f72616765206d6170206f66206163636f756e74206f726967696e20286e6f746172795f69642c206e6f7465626f6f6b2c206163636f756e745f7569642920746f20746865206c6173741501206e6f7465626f6f6b20636f6e7461696e696e672074686973206163636f756e7420696e20746865206368616e676564206163636f756e7473206d65726b6c6520726f6f749820284e6f7465626f6f6b4368616e6765644163636f756e7473526f6f7442794e6f74617279296c4c6173744e6f7465626f6f6b44657461696c7342794e6f746172790101040210ed060400086901204c697374206f66206c61737420666577206e6f7465626f6f6b2064657461696c73206279206e6f746172792e2054686520626f6f6c206973207768657468657220746865206e6f7465626f6f6b20697320656c696769626c65d820666f7220766f7465732028726563656976656420617420636f7272656374207469636b20616e64206175646974207061737365642938426c6f636b4e6f7465626f6f6b730100c5020400049420546865206e6f7465626f6f6b7320696e636c7564656420696e207468697320626c6f636b40496e686572656e74496e636c756465640100200400048c20436865636b2069662074686520696e686572656e742077617320696e636c75646564704e6f7461726965734c6f636b6564466f724661696c656441756469740001040210fd060400048c204e6f746172696573206c6f636b656420666f72206661696c696e6720617564697473744c6f636b65644e6f746172795265616479466f72526570726f636573730001040210100400040101204e6f74617269657320726561647920746f20737461727420726570726f63657373696e67206174206120676976656e206e6f7465626f6f6b206e756d626572017903011501000101070b484c6f63616c636861696e5472616e7366657201484c6f63616c636861696e5472616e736665720c384e6578745472616e7366657249640000100400004c50656e64696e675472616e73666572734f757400010402100507040000704578706972696e675472616e73666572734f757442794e6f7461727901010805058106090704001845012045787069726174696f6e20696e64657820666f72206f7574676f696e67207472616e7366657273206b657965642062792060286e6f746172795f69642c2065787069726174696f6e5f7469636b29602e006901204e4f54453a2045787069726174696f6e2070726f63657373696e6720666f6c6c6f7773206e6f7465626f6f6b2070726f6772657373696f6e2028606865616465722e7469636b602920666f722065616368206e6f746172792c5101206e6f742077616c6c2f72756e74696d65207469636b2e2049662061206e6f746172792073746f7073207375626d697474696e67206e6f7465626f6f6b7320696e646566696e6974656c792c2070656e64696e676501207472616e736665727320666f722074686174206e6f746172792072656d61696e2066726f7a656e2062792064657369676e20756e74696c2061206e6f746172792d737769746368207265636f766572792070617468206973282065786563757465642e01b9030131010c2050616c6c657449640d07207472616e73666572005c5472616e7366657245787069726174696f6e5469636b733020b036000000000000085d0120486f77206c6f6e672061207472616e736665722073686f756c642072656d61696e20696e2073746f72616765206265666f72652072657475726e696e672e204e4f54453a20746865726520697320612032207469636bc820677261636520706572696f642077686572652077652077696c6c207374696c6c20616c6c6f772061207472616e73666572784d617850656e64696e675472616e73666572734f7574506572426c6f636b1010e803000004bc20486f77206d616e79207472616e7366657273206f75742063616e206265207175657565642070657220626c6f636b0111070c34426c6f636b5365616c537065630134426c6f636b5365616c53706563284843757272656e74566f74654d696e696d756d01001840000000000000000000000000000000000c5501205468652063757272656e7420766f7465206d696e696d756d206f662074686520636861696e2e20426c6f636b20766f746573207573652074686973206d696e696d756d20746f2064657465726d696e65207468655d01206d696e696d756d20616d6f756e74206f6620746178206f7220636f6d70757465206e656564656420746f20637265617465206120766f74652e2049742069732061646a7573746564207570206f7220646f776e20746f74207461726765742061206d6178206e756d626572206f6620766f7465736043757272656e74436f6d70757465446966666963756c747901001840000000000000000000000000000000000c5501205468652063757272656e7420766f7465206d696e696d756d206f662074686520636861696e2e20426c6f636b20766f746573207573652074686973206d696e696d756d20746f2064657465726d696e65207468655d01206d696e696d756d20616d6f756e74206f6620746178206f7220636f6d70757465206e656564656420746f20637265617465206120766f74652e2049742069732061646a7573746564207570206f7220646f776e20746f74207461726765742061206d6178206e756d626572206f6620766f7465735843757272656e74436f6d707574654b6579426c6f636b00003404000c650120546865206b6579204b2069732073656c656374656420746f206265207468652068617368206f66206120626c6f636b20696e2074686520626c6f636b636861696e202d207468697320626c6f636b2069732063616c6c656445012074686520276b657920626c6f636b272e20466f72206f7074696d616c206d696e696e6720616e6420766572696669636174696f6e20706572666f726d616e63652c20746865206b65792073686f756c6444206368616e6765206576657279206461795450617374436f6d70757465426c6f636b54696d6573010015070400005850726576696f7573426c6f636b54696d657374616d7000003004000498205468652074696d657374616d702066726f6d207468652070726576696f757320626c6f636b4854656d70426c6f636b54696d657374616d7000003004000048566f74654d696e696d756d486973746f7279010019070400043101204b6565707320746865206c617374203320766f7465206d696e696d756d732e20546865206669727374206f6e65206170706c69657320746f207468652063757272656e7420626c6f636b2e7c54656d7043757272656e745469636b4e6f7465626f6f6b73496e426c6f636b01001d070400043d012054656d706f726172792073746f7265206f6620616e792063757272656e74207469636b206e6f7465626f6f6b7320696e636c7564656420696e207468697320626c6f636b20287673207469636b294c54656d70426c6f636b566f746544696765737400009502040004802054656d706f726172792073746f72652074686520766f7465206469676573743850617374426c6f636b566f7465730100290704000001bd0301350110444d61784163746976654e6f746172696573101019000000049020546865206d6178696d756d20616374697665206e6f74617269657320616c6c6f77656440546172676574426c6f636b566f746573184050c30000000000000000000000000000047020546865206465736972656420766f7465732070657220626c6f636b84486973746f726963616c436f6d70757465426c6f636b73466f724176657261676510100a000000085d0120546865206e756d626572206f6620686973746f726963616c20636f6d707574652074696d657320746f2075736520746f2063616c63756c6174652074686520726f6c6c696e6720636f6d707574652061766572616765442028666f722061646a7573746d656e742978486973746f726963616c566f7465426c6f636b73466f72417665726167651010a005000004490120546865206e756d626572206f6620686973746f726963616c20766f746520626c6f636b7320746f2075736520746f2063616c63756c6174652074686520726f6c6c696e6720766f746520617665726167650135070d1c446f6d61696e73011c446f6d61696e730c4452656769737465726564446f6d61696e7300010402345d010400004c5a6f6e655265636f7264734279446f6d61696e00010402343d01040000584578706972696e67446f6d61696e734279426c6f636b0101040530390704000001c10301390100013d070e285072696365496e64657801285072696365496e6465781c1c43757272656e740000c903040004782053746f726573207468652061637469766520707269636520696e646578244c61737456616c69640000c903040004882053746f72657320746865206c6173742076616c696420707269636520696e64657840486973746f7269634172676f6e43504901004107040004ac20547261636b73207468652061766572616765206370692064617461206576657279203630207469636b736c486973746f7269634172676f6e6f74466c6f6f7242794672616d6501004d07040004fc20547261636b7320746865206c6f77657374204172676f6e6f7420666c6f6f72206f6273657276656420696e206561636820726563656e74206672616d652e74486973746f7269634172676f6e6f744176657261676542794672616d6501005107040004010120547261636b73207468652061766572616765204172676f6e6f74207072696365206f6273657276656420696e206561636820726563656e74206672616d652e6843757272656e744672616d654172676f6e6f744176657261676500005507040004390120416363756d756c61746573207468652063757272656e74206672616d652773204172676f6e6f742070726963652073616d706c657320756e74696c20746865206672616d6520636c6f7365732e204f70657261746f72000000040004842054686520707269636520696e646578206f70657261746f72206163636f756e7401c503016101186c4d6178446f776e74696d655469636b734265666f7265526573657430203c0000000000000004d820546865206d6178696d756d206e756d626572206f66207469636b7320746f207072657365727665206120707269636520696e646578484d61785072696365416765496e5469636b733020a005000000000000046c20546865206f6c6465737420686973746f727920746f206b656570704d61784172676f6e6f74466c6f6f72486973746f72794672616d657310100a00000004f4204d6178696d756d206e756d626572206f66207065722d6672616d65204172676f6e6f7420666c6f6f72206275636b65747320746f2072657461696e2e784d61784172676f6e6f7441766572616765486973746f72794672616d657310100a00000004fc204d6178696d756d206e756d626572206f66207065722d6672616d65204172676f6e6f742061766572616765206275636b65747320746f2072657461696e2e8c4d61784172676f6e4368616e67655065725469636b4177617946726f6d546172676574e0400000c16ff2862300000000000000000008650120546865206d617820707269636520646966666572656e63652064726f7070696e672062656c6f7720746172676574206f722072616973696e672061626f76652074617267657420706572207469636b2e2054686572652773e4206e6f20636f72726573706f6e64696e6720636f6e7374616e7420666f722074696d6520746f207265636f7665727920746f207461726765746c4d61784172676f6e5461726765744368616e67655065725469636be0400000c16ff28623000000000000000000000159070f28417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000101c4772616e647061011c4772616e6470611c14537461746501005d0704000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500006107040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c6564000035020400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010030200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405301004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e2c417574686f7269746965730100650704000484205468652063757272656e74206c697374206f6620617574686f7269746965732e01cd030165010c384d6178417574686f7269746965731010e8030000045c204d617820417574686f72697469657320696e20757365344d61784e6f6d696e61746f727310100000000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e584d6178536574496453657373696f6e456e74726965733020020000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e0169071124426c6f636b5365616c0124426c6f636b5365616c1c4c4c617374426c6f636b5365616c6572496e666f00006d070400003c506172656e74566f74696e674b65790100a1020400086101205468652063616c63756c6174656420706172656e7420766f74696e67206b657920666f72206120626c6f636b2e2052656665727320746f20746865204e6f7465626f6f6b20426c6f636b566f74652052657665616c6564e020536563726574202b20566f7465734d65726b6c65526f6f74206f662074686520706172656e7420626c6f636b206e6f7465626f6f6b732e38426c6f636b466f726b506f7765720100a902910100000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000008e4205468652063616c63756c6174656420737472656e67746820696e207468652072756e74696d6520736f20746861742069742063616e20626511012075706772616465642c20627574206973207573656420627920746865206e6f646520746f2064657465726d696e6520776869636820666f726b20746f20666f6c6c6f7744566f746573496e50617374335469636b73010071070400049c2054686520636f756e74206f6620766f74657320696e20746865206c6173742033207469636b734054656d705365616c496e686572656e740000fd03040004a820456e7375726573206f6e6c7920612073696e676c6520696e686572656e74206973206170706c696564504c6173745469636b57697468566f74655365616c010030200000000000000000004c4973426c6f636b46726f6d566f74655365616c0100200400047c2049732074686520626c6f636b2066726f6d206120766f7465207365616c3f01f90300000175071230426c6f636b526577617264730130426c6f636b5265776172647318385061796f7574734279426c6f636b010104021079070400048c20486973746f726963616c207061796f75747320627920626c6f636b206e756d62657248426c6f636b526577617264735061757365640100200400048420426f6f6c20696620626c6f636b2072657761726473206172652070617573656460426c6f636b566f74657252657761726473456e61626c6564010020040004a020426f6f6c20696620626c6f636b20766f74657220726577617264732061726520656e61626c656450426c6f636b526577617264734279436f686f727401007d0704000441012054686520636f686f727420626c6f636b2072657761726473206279206d696e696e6720636f686f7274202869652c2077697468207468652073616d65207374617274696e67206672616d6520696429384172676f6e73506572426c6f636b0100184000000000000000000000000000000000087501205468652063757272656e74207363616c656420626c6f636b20726577617264732e2049742077696c6c2061646a757374206261736564206f6e20746865206172676f6e206d6f76656d656e7420617761792066726f6d2070726963651c2074617267657424426c6f636b4665657301001840000000000000000000000000000000000001150401710118585374617274696e674172676f6e73506572426c6f636b184020a107000000000000000000000000000488204e756d626572206f66206172676f6e73206d696e7465642070657220626c6f636b7c5374617274696e674f776e657273686970546f6b656e73506572426c6f636b184020a1070000000000000000000000000004b0204e756d626572206f66206f776e65727368697020746f6b656e73206d696e7465642070657220626c6f636b44496e6372656d656e74616c47726f7774688107a0e8030000000000000000000000000000b400000000000000404b4c0000000000000000000000000004f4205468652067726f777468207061746820666f7220626f7468206f776e65727368697020616e64206172676f6e73206265666f72652068616c76696e673048616c76696e675469636b733020200b20000000000004dc204e756d626572206f66207469636b7320666f722068616c76696e67206f66206f776e65727368697020736861726520726577617264734448616c76696e67426567696e5469636b733020105c0c000000000004050120546865207469636b206e756d626572206174207768696368207468652068616c76696e6720626567696e7320666f72206f776e65727368697020746f6b656e73484d696e65725061796f757450657263656e74e04000008bbd0689680a0000000000000000042d012050657263656e742061732061206e756d626572206f7574206f6620313030206f662074686520626c6f636b20726577617264207468617420676f657320746f20746865206d696e65722e01850713104d696e7401104d696e74144050656e64696e674d696e745574786f730100890704000c6d0120426974636f696e205554584f7320746861742068617665206265656e207375626d697474656420666f72206d696e74696e672e2054686973206c697374206973204649464f20666f72206d696e74696e67207768656e657665724020612920435049203e3d203020616e643d012062292074686520616767726567617465206d696e74656420426974636f696e73203c3d2074686520616767726567617465206d696e746564206d6963726f676f6e732066726f6d206d696e696e67544d696e7465644d696e696e674d6963726f676f6e73010018400000000000000000000000000000000004c02054686520746f74616c20616d6f756e74206f66206d6963726f676f6e73206d696e74656420666f72206d696e696e67584d696e746564426974636f696e4d6963726f676f6e7301001840000000000000000000000000000000000455012054686520746f74616c20616d6f756e74206f6620426974636f696e206d6963726f676f6e73206d696e7465642e2043616e6e6f742065786365656420604d696e7465644d696e696e674d6963726f676f6e73602e4c4d696e696e674d696e74506572436f686f72740100950704000445012054686520616d6f756e74206f66206172676f6e73206d696e74656420706572206d696e696e6720636f686f7274202869652c2067726f75706564206279207374617274696e67206672616d65206964293c426c6f636b4d696e74416374696f6e01009907d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000119040189010c4c4d617850656e64696e674d696e745574786f7310101027000004f020546865206d6178696d756d206e756d626572206f66205554584f7320746861742063616e2062652077616974696e6720666f72206d696e74696e67604d61784d696e74486973746f7279546f4d61696e7461696e10100a00000004b420546865206d6178696d756d206e756d626572206f66206d696e7420686973746f7269657320746f206b656570444d6178506f737369626c654d696e6572731010a00500000001a107142042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200a507040010b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602052657365727665730101040200b50704000ca4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f6014486f6c64730101040200c1070400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a65730101040200cd070400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e011d0401990110484578697374656e7469616c4465706f73697418401027000000000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000010f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602c4d617852657365727665731010000000000c0d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f60284d6178467265657a657310100200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01e10715244f776e65727368697001244f776e6572736869701c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200a507040010b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602052657365727665730101040200b50704000ca4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f6014486f6c64730101040200c1070400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a65730101040200cd070400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e01250401c10110484578697374656e7469616c4465706f73697418401027000000000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000010f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602c4d617852657365727665731010000000000c0d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f60284d6178467265657a657310100200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01e507161c54785061757365011c54785061757365042c50617573656443616c6c7300010402c90190040004b42054686520736574206f662063616c6c73207468617420617265206578706c696369746c79207061757365642e01290401c50104284d61784e616d654c656e1010000100000c2501204d6178696d756d206c656e67746820666f722070616c6c6574206e616d6520616e642063616c6c206e616d65205343414c4520656e636f64656420737472696e67206e616d65732e00a820544f4f204c4f4e47204e414d45532057494c4c2042452054524541544544204153205041555345442e01e90717485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e740c444e6578744665654d756c7469706c6965720100e040000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100ed070400003c54785061796d656e744372656469740000f10704000cf02054686520604f6e4368617267655472616e73616374696f6e602073746f726573207468652077697468647261776e2074782066656520686572652e00350120557365206077697468647261775f74786665656020616e64206072656d61696e696e675f74786665656020746f206163636573732066726f6d206f757473696465207468652063726174652e0001d10104604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00181c5574696c69747900012d0401d501044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01f90719105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01350401d9010001fd071a20547265617375727901205472656173757279206043757272656e744672616d655661756c744361706974616c0000010804000cc020546865207661756c74206361706974616c206c6f636b656420666f72207468652063757272656e74206672616d652e004d01205061796f75742075736573207468697320746f20736565207768696368207661756c747320616e6420626f6e64206c6f7473206172652070617274696369706174696e6720696e20746865206672616d652e344e657874426f6e644c6f744964010030200000000000000000045820546865206e65787420626f6e64206c6f742069642e2c426f6e644c6f74427949640001040530250804000490205468652073746f72656420737461746520666f72206561636820626f6e64206c6f742e4c426f6e644c6f7449647342794163636f756e7400010805052d0890040004b02054686520626f6e64206c6f742069647320746861742062656c6f6e6720746f20616e206163636f756e742e80456e63756d6265726564426f6e644d6963726f676f6e7342794163636f756e74010104050018400000000000000000000000000000000018510120457861637420747265617375727920626f6e64206261636b696e6720726573657276656420666f722063726f7373636861696e206d696e74696e6720617574686f726974696573206279206163636f756e742e005d01205468697320697320616e206578616374206d6963726f676f6e20636c61696d2c206e6f742061206d6972726f72206f6620746865206163636f756e742773206163746976652077686f6c652d626f6e64206c6f74732e750120426f6e64206c6f7473207374617920636f6172736520626563617573652070617274696369706174696f6e206f6e6c79206d6f76657320696e2077686f6c6520626f6e64732c207768696c6520656e63756d6272616e63652063616e65012072656d61696e206672616374696f6e616c2061667465722061206275726e2e20546865206b657920696e76617269616e74206973207468617420746865206e6f6e2d72656c656173696e672068656c642062616c616e63656c20616c7761797320636f76657273207468697320616d6f756e742e6850656e64696e67426f6e6452656c656173657342794672616d6501010405303108040004a420426f6e64206c6f747320746f2072656c656173652061742074686520676976656e206672616d652e7450656e64696e67426f6e6452656c656173655265747279437572736f72000030040004f820546865206f6c64657374206672616d652074686174207374696c6c2068617320626f6e64206c6f747320746f2072657472792072656c656173696e672e3c426f6e644c6f747342795661756c740101040510350804000c902054686520616363657074656420626f6e64206c6f747320666f722061207661756c742e004501204c6f747320617265206b65707420696e2064657363656e64696e6720626f6e64206f726465722c207468656e206c6f7765722060626f6e645f6c6f745f69646020666972737420666f7220746965732e01390401dd01205c4d61785472656173757279436f6e7472696275746f727310106400000004390120546865206d6178696d756d206e756d626572206f6620616363657074656420626f6e64206c6f747320696e2061207661756c74277320616363657074656420626f6e642d6c6f74206c6973742e6c4d696e696d756d4172676f6e73506572436f6e7472696275746f72184000e1f50500000000000000000000000004a020546865206d696e696d756d2077686f6c652d626f6e6420707572636861736520616d6f756e742e2050616c6c657449640d07206c7164506f6f6c730401012054726561737572792070616c6c65742069642072657461696e656420696e206d6574616461746120666f72206163636f756e742064657269766174696f6e2e5c547265617375727952657365727665734163636f756e7400806d6f646c6c7164506f6f6c7374726561737572792d7265736572766500000000043101204163636f756e74207468617420686f6c647320747265617375727920726573657276657320666f7220636c61696d7320616e6420726573657276652d66756e646564207061796f7574732e6850657263656e74466f72547265617375727952657365727665734108041404e02050657263656e74206f66207468652062696420706f6f6c20726573657276656420666f722074726561737572792072657365727665732e404d61785661756c7473506572506f6f6c101064000000045d0120546865206d6178696d756d206e756d626572206f66207661756c747320746861742063616e20706172746963697061746520696e206f6e65206672616d652773206c6f636b6564207661756c74206361706974616c2e644d617850656e64696e67556e6c6f636b735065724672616d651010e803000004490120546865206d6178696d756d206e756d626572206f6620626f6e64206c6f74732077686f73652072656c656173652064656c6179206d6179206d617475726520696e20612073696e676c65206672616d652e5c54726561737572794578697444656c61794672616d657330200a00000000000000041d0120546865206e756d626572206f66206672616d657320612072656c656173696e6720626f6e64206c6f742072656d61696e732068656c64206265666f72652072656c656173652e0145081f28466565436f6e74726f6c000001e50100014908204c4f7065726174696f6e616c4163636f756e7473014c4f7065726174696f6e616c4163636f756e7473204c4f7065726174696f6e616c4163636f756e747300010402004d0804000405012052656769737465726564206f7065726174696f6e616c206163636f756e7473206b6579656420627920746865207072696d617279206163636f756e742069642e784f7065726174696f6e616c4163636f756e7442795375624163636f756e7400010402000004000411012052657665727365206c6f6f6b7570206f6620616e79206c696e6b6564206163636f756e7420746f20697473206f7065726174696f6e616c206163636f756e742069642e54436f6e73756d6564526566657272616c436f646573000104020430040004550120526566657272616c20636f6465732074686174206861766520616c7265616479206265656e206c696e6b65642c206b6579656420746f2074686569722070726f6f662065787069726174696f6e206672616d652e84436f6e73756d6564526566657272616c436f646573427945787069726174696f6e0001080502510890040004150120526566657272616c20636f64657320746f20636c65617220616674657220746865697220726566657272616c2070726f6f662065787069726174696f6e206672616d652e7c45787069726564526566657272616c436f6465436c65616e75704672616d650000300400042101204f6c6465737420726566657272616c2065787069726174696f6e206672616d652074686174207374696c6c2068617320636c65616e757020776f726b20746f20726573756d652e7849734f7065726174696f6e616c4163636f756e74496e766974654f6e6c7901002004011ccc2057686574686572206f7065726174696f6e616c2d6163636f756e742061636365737320697320696e766974652d6f6e6c792e005101205768656e20656e61626c65642c20726567697374726174696f6e20726571756972657320612076616c696420726566657272616c20696e7669746520616e64207661756c74206372656174696f6e20706c75732901206d696e696e672d736c6f742062696464696e672072656d61696e207265737472696374656420746f2072656769737465726564206f7065726174696f6e616c206163636f756e74732e006901204578697374696e67206c6976652072617720636861696e20737065637320646f206e6f7420636f6e7461696e2074686973206b65792c20736f207468652064656661756c742072656d61696e7320696e766974652d6f6e6c79d020756e6c657373206120646576656c6f706d656e7420636861696e206f766572726964657320697420696e2067656e657369732e1c526577617264730100550808000004d020436f6e666967757265642072657761726420616d6f756e747320666f72206f7065726174696f6e616c206163636f756e74732e60456e63727970746564536572766572427953706f6e736565000104020059080400044901204f706171756520656e637279707465642073706f6e736f7220736572766572207061796c6f6164206b65796564206279207468652073706f6e736565206f7065726174696f6e616c206163636f756e742e01450401f1012868426974636f696e4c6f636b53697a65466f72526566657272616c184000f2052a010000000000000000000000043901204164646974696f6e616c206172676f6e20616d6f756e7420286261736520756e697473292072657175697265642070657220726566657272616c206166746572206f7065726174696f6e616c2e644f7065726174696f6e616c526566657272616c52657761726418400065cd1d00000000000000000000000004e42044656661756c74207265776172642070616964207768656e20616e206163636f756e74206265636f6d6573206f7065726174696f6e616c2e784f7065726174696f6e616c526566657272616c426f6e7573526577617264184000f2052a01000000000000000000000004d02044656661756c7420626f6e757320726577617264207061696420657665727920726566657272616c207468726573686f6c642e98526566657272616c426f6e75734576657279584f7065726174696f6e616c53706f6e73656573101005000000040d01204e756d626572206f66206f7065726174696f6e616c2073706f6e736565732072657175697265642070657220726566657272616c20626f6e7573207265776172642e544d6178417661696c61626c65526566657272616c7310100300000004dc204d6178696d756d206e756d626572206f6620617661696c61626c6520726566657272616c7320616c6c6f776564206174206f6e63652e984d617845787069726564526566657272616c436f6465436c65616e757073506572426c6f636b1010e803000004f0204d6178696d756d206e756d626572206f66206578706972656420726566657272616c20636f64657320636c65617265642070657220626c6f636b2e544d6178456e637279707465645365727665724c656e10100001000004f4204d6178696d756d206e756d626572206f6620656e63727970746564207365727665722062797465732073746f726564207065722073706f6e7365652e944f7065726174696f6e616c4d696e696d756d5661756c7453656375726974697a6174696f6e18400094357700000000000000000000000004f4204d696e696d756d207661756c742073656375726974697a6174696f6e20726571756972656420746f206265636f6d65206f7065726174696f6e616c2e644d696e696e675365617473466f724f7065726174696f6e616c10100200000004b4204d696e696e6720736561747320726571756972656420746f206265636f6d65206f7065726174696f6e616c2e584d696e696e675365617473506572526566657272616c10100500000004d8204d696e696e672073656174732072657175697265642070657220726566657272616c206166746572206f7065726174696f6e616c2e015d082240457468657265756d56657269666965720140457468657265756d56657269666965724054496e697469616c436865636b706f696e74526f6f740100348000000000000000000000000000000000000000000000000000000000000000000480204c617465737420696d706f7274656420636865636b706f696e7420726f6f74604c617465737446696e616c697a6564426c6f636b526f6f740100348000000000000000000000000000000000000000000000000000000000000000000494204c617465737420696d706f727465642066696e616c697a656420626c6f636b20726f6f745046696e616c697a6564426561636f6e5374617465000104063461080400049420426561636f6e2073746174652062792066696e616c697a656420626c6f636b20726f6f746446696e616c697a6564426561636f6e5374617465496e646578010010100000000004cc2046696e616c697a656420486561646572733a2043757272656e7420706f736974696f6e20696e2072696e67206275666665726c46696e616c697a6564426561636f6e53746174654d617070696e67010104061034800000000000000000000000000000000000000000000000000000000000000000041d012046696e616c697a656420486561646572733a204d617070696e67206f662072696e672062756666657220696e64657820746f2061207072756e696e672063616e64696461746558457865637574696f6e486561646572416e63686f72730001040634650804000405012052657461696e656420657865637574696f6e2d6c617965722068656164657220616e63686f727320627920657865637574696f6e20626c6f636b20686173682e8c457865637574696f6e486561646572416e63686f72734279426c6f636b4e756d62657200010406890265080400182901204f7264657265642072657461696e656420657865637574696f6e2d6c6179657220616e63686f7273206b6579656420627920657865637574696f6e20626c6f636b206e756d6265722e00710120546865206b657920697320746865206269672d656e6469616e20657865637574696f6e20626c6f636b206e756d62657220736f20636c69656e74732063616e20737461727420617420612074617267657420657865637574696f6e690120626c6f636b206e756d62657220616e64207363616e20666f727761726420746f207468652066697273742072657461696e656420616e63686f72206174206f72206166746572207468617420626c6f636b20776974686f757475012077616c6b696e672065766572792072657461696e65642066696e616c697a656420626561636f6e20726f6f742e2060457865637574696f6e486561646572416e63686f7273602072656d61696e73207468652063616e6f6e6963616c6420686173682d6b657965642070726f6f66206c6f6f6b75702e7846696e616c697a6564457865637574696f6e486561646572416e63686f72000104063434040004550120417474616368656420657865637574696f6e2d6c6179657220616e63686f72206861736820666f7220656163682072657461696e65642066696e616c697a656420626561636f6e2068656164657220726f6f742e904c6174657374457865637574696f6e486561646572416e63686f72426c6f636b48617368000034040004cc204c61746573742072657461696e656420657865637574696f6e2d6c6179657220616e63686f7220626c6f636b20686173682e3856616c696461746f7273526f6f74010034800000000000000000000000000000000000000000000000000000000000000000004c466f726b56657273696f6e5363686564756c6500009d04040004590120466f726b2d76657273696f6e207363686564756c65207573656420666f722073796e632d636f6d6d6974746565207369676e696e6720646f6d61696e7320616e6420626561636f6e2073746174652070617468732e5043757272656e7453796e63436f6d6d697474656501006908550300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004882053796e6320636f6d6d697474656520666f722063757272656e7420706572696f64444e65787453796e63436f6d6d6974746565010069085503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047c2053796e6320636f6d6d697474656520666f72206e65787420706572696f647c4c617465737453796e63436f6d6d6974746565557064617465506572696f6401003020000000000000000004110120546865206c61737420706572696f6420776865726520746865206e6578742073796e6320636f6d6d697474656520776173207570646174656420666f7220667265652e344f7065726174696e674d6f64650100fd01040004a8205468652063757272656e74206f7065726174696e67206d6f6465206f66207468652070616c6c65742e30426561636f6e50726573657401008d08040004450120436861696e2d636f6e6669677572656420626561636f6e2070726573657420657870656374656420627920636c69656e74732074686174207375626d697420766572696669657220757064617465732e01690401f901044c4672656548656164657273496e74657276616c101020000000040101204d696e696d756d20676170206265747765656e2066696e616c697a6564206865616465727320666f7220616e2075706461746520746f20626520667265652e019108234843726f7373636861696e5472616e73666572014843726f7373636861696e5472616e736665726460436861696e436f6e6669674279536f75726365436861696e000104020502c504040004c420436f6e66696720616363657074656420666f72206561636820737570706f7274656420736f7572636520636861696e2e644761746577617953746174654279536f75726365436861696e0001040205022502040004fc204c61746573742070726f76656e206761746577617920616374697669747920736e617073686f7420666f72206561636820736f7572636520636861696e2e744761746577617953796e6350617573654279536f75726365436861696e0001040205021d020400044501205061757365207374617465207265636f72646564207768656e20612063616e6f6e6963616c20676174657761792061637469766974792063616e6e6f74206265206170706c69656420736166656c792e74526563656e744172676f6e5472616e736665727342794163636f756e740101040200101000000000042d0120436f756e74206f66207374696c6c2d72657461696e6564207175616c696679696e67204172676f6e207472616e736665727320666f722065616368206c6f63616c206163636f756e742ecc436f756e63696c417070726f76616c437572736f72427944657374696e6174696f6e436861696e416e644163636f756e74496400010802029508300400045901204c617465737420636f756e63696c20617070726f76616c207175657565206e6f6e6365207369676e65642062792074686973206163636f756e7420666f72206f6e652064657374696e6174696f6e20636861696e2e68496e626f756e645472616e73666572734578706972696e6741740101040530ed020400040501204163636f756e74732077686f736520726563656e742d7472616e736665722065766964656e63652065787069726573206174206120676976656e207469636b2e744c6173745472616e73666572457870697279436c65616e75705469636b010030200000000000000000041101204c6174657374207469636b2077686f736520726563656e742d7472616e736665722065787069726174696f6e206275636b65742077617320636c65616e65642075702eac436f756e63696c5369676e6572427944657374696e6174696f6e436861696e416e644163636f756e744964000108020295080d02040004290120546865207265676973746572656420636f756e63696c207369676e657220666f722065616368206163636f756e74206f6e20656163682064657374696e6174696f6e20636861696e2ec850656e64696e67436f756e63696c5369676e6572427944657374696e6174696f6e436861696e416e644163636f756e744964000108020295080d02040004710120412073746167656420636f756e63696c207369676e657220726f746174696f6e20666f7220746865206e65787420636f756e63696c2061637469766174696f6e206f6e20656163682064657374696e6174696f6e20636861696e2eb4416374697665476c6f62616c49737375616e6365436f756e63696c427944657374696e6174696f6e436861696e000104020502340400043501205468652061637469766520476c6f62616c2049737375616e636520436f756e63696c206861736820696e20666f72636520666f7220656163682064657374696e6174696f6e20636861696e2edc43757272656e745472616e736665724f75744d6963726f676f6e735065724172676f6e6f74427944657374696e6174696f6e436861696e000104020502180400045d0120436f6e736572766174697665207472616e736665722d6f757420636f6e76657273696f6e20726174652063757272656e746c792071756f74656420666f7220656163682064657374696e6174696f6e20636861696e2ee050726576696f75735472616e736665724f75744d6963726f676f6e735065724172676f6e6f74427944657374696e6174696f6e436861696e00010402050218040008690120496d6d6564696174656c792070726576696f7573207472616e736665722d6f757420636f6e76657273696f6e2072617465207374696c6c206163636570746564207768696c652074686520666c6f6f722072617463686574738c20757077617264206163726f737320636f756e63696c207472616e736974696f6e732e6c476c6f62616c49737375616e6365436f756e63696c42794861736800010402349908040004650120486973746f726963616c20476c6f62616c2049737375616e636520436f756e63696c20736e617073686f7473206b65796564206279207468656972207369676e65722d6f72646572656420636f756e63696c20686173682ea44c6174657374517565756564436f756e63696c48617368427944657374696e6174696f6e436861696e000104020502340400086d0120546865206c61746573742071756575656420636f756e63696c206861736820746861742073686f756c6420676f7665726e20746865206e65787420717565756520656e747279206f6e20656163682064657374696e6174696f6e1c20636861696e2ed45472616e736665724f757451756f74654d6963726f676f6e735065724172676f6e6f74427944657374696e6174696f6e436861696e0001040205021804000855012054686520636f6e736572766174697665207472616e736665722d6f75742071756f746520666c6f6f72207468617420746865206e657874206e65776c79206f70656e6564207472616e736665722073686f756c649020736e617073686f74206f6e20656163682064657374696e6174696f6e20636861696e2ebc4e657874436f756e63696c417070726f76616c51756575654e6f6e6365427944657374696e6174696f6e436861696e0101040205023020000000000000000004310120546865206e657874206f7574626f756e6420617070726f76616c2d7175657565206e6f6e636520746f2061737369676e206f6e20656163682064657374696e6174696f6e20636861696e2eb8436f756e63696c417070726f76616c5175657565427944657374696e6174696f6e436861696e416e644e6f6e63650001080205b108b508040004210120546865206f726465726564206f7574626f756e6420636f756e63696c20617070726f76616c20717565756520666f7220656163682064657374696e6174696f6e20636861696e2e684d696e74696e67417574686f72697469657342795369676e6572000104020d02c9080400042101204c6f63616c204d696e74696e6720417574686f72697479207265636f726473206b657965642062792074686569722064657374696e6174696f6e207369676e696e67206b65792eb84d696e696d756d4d696e74696e67417574686f7269747956616c7565427944657374696e6174696f6e436861696e010104020502184010270000000000000000000000000000085101205065722d636861696e206f7665727269646520666f7220746865206d696e696d756d206e6f726d616c697a6564206d6963726f676f6e2076616c756520726571756972656420746f20726567697374657220614c204d696e74696e6720417574686f726974792ef04d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e67427944657374696e6174696f6e436861696e000104020502cd040400085d012050726963696e6720696e70757473207573656420746f2072657061792072656c617965727320666f72204d696e74696e6720417574686f726974792061637469766174696f6e2062617463686573206f6e20656163684c2064657374696e6174696f6e20636861696e2e984e6578745472616e736665724f75744e6f6e6365427953656e64696e674163636f756e74496401010402003020000000000000000004dc204e657874206f7574626f756e64207472616e73666572206e6f6e636520666f7220656163682073656e64696e67206163636f756e742e3c5472616e736665724f7574427949640001040234d5080400048c204f7574626f756e64207472616e7366657273206279207472616e736665722069642e9c50656e64696e67436f6c6c61746572616c697a6174696f6e52657175657374734279436861696e010104020502f108040004050120436f6c6c61746572616c697a6174696f6e207265717565737473207374696c6c206f70656e206f6e20656163682064657374696e6174696f6e20636861696e2eb44e6f6e5465726d696e616c5472616e736665724f7574436f756e74427944657374696e6174696f6e436861696e010104020502101000000000042101204e756d626572206f66206e6f6e2d7465726d696e616c207472616e736665722d6f7574207265717565737473206f6e20656163682064657374696e6174696f6e20636861696e2ebc50656e64696e675472616e736665724f757443697263756c6174696f6e427944657374696e6174696f6e436861696e010104020502fd0880000000000000000000000000000000000000000000000000000000000000000004c42050656e64696e67206f7574626f756e64207072696e636970616c2062792064657374696e6174696f6e20636861696e2e01c104010102384c457468657265756d4275726e4163636f756e7400806d6f646c78636861696e7472006275726e0000000000000000000000000000000445012043616e6f6e6963616c20457468657265756d206275726e2d6163636f756e74696e67206163636f756e7420726570726573656e74696e672066756e6473206d6f76656420746f20457468657265756d2e70526563656e745472616e73666572526574656e74696f6e5469636b7330204038000000000000084d0120526574656e74696f6e2077696e646f772c20696e207469636b732c20666f7220726563656e74204172676f6e207472616e736665722065766964656e63652075736564206279206f7065726174696f6e616c28206163636f756e74732e704d6178416374697669746965735065725265636569707450726f6f66101010000000043d01204d6178696d756d206e756d626572206f66206f726465726564206761746577617920616374697669746965732074686174206d6179207368617265206f6e6520726563656970742070726f6f662e704d61785265636569707450726f6f667350657245787472696e73696310100a000000043d01204d6178696d756d206e756d626572206f662070726f76656e20726563656970742070726f6f66732074686174206d617920626520737570706c69656420696e206f6e652065787472696e7369632e444d6178436f756e63696c4d656d62657273101064000000042101204d6178696d756d206e756d626572206f66206d656d62657273207468652061637469766520476c6f62616c2049737375616e636520436f756e63696c206d61792063617272792e604d61785175657565417070726f76616c7350657243616c6c101020000000046101204d6178696d756d206e756d626572206f6620636f6e746967756f757320717565756520617070726f76616c73206f6e6520636f756e63696c206d656d626572206d6179207375626d697420696e206f6e652063616c6c2e845472616e736665724f757456616c6964697479457468657265756d426c6f636b733020401901000000000008210120457468657265756d2d626c6f636b2077696e646f7720616464656420746f20746865206c617465737420766572696669656420626c6f636b207768656e206f70656e696e67206138207472616e73666572206f75742e844d61785665726966696564457865637574696f6e426c6f636b4167655469636b7330203c00000000000000084101204d6178696d756d206167652c20696e207469636b732c206f662074686520766572696669656420457468657265756d20657865637574696f6e20616e63686f72207573656420746f206f70656e206138207472616e73666572206f75742ea45472616e736665724f75744d696e74696e67417574686f726974795469704261736973506f696e747310100a000000043501204d696e74696e6720617574686f72697479207469702072617465206170706c69656420746f207472616e736665722d6f757420726571756573747320696e20626173697320706f696e74732e784d696e5472616e73666572436f6c6c61746572616c496e6372656d656e74184010270000000000000000000000000000085d01204d696e696d756d206e6f726d616c697a656420636f6c6c61746572616c20696e6372656d656e7420616363657074656420666f72206f6e65207472616e7366657220756e6c6573732074686520696e6372656d656e74a820636f6d706c65746573207468652072656d61696e696e6720756e636f766572656420616d6f756e742eac44656661756c744d696e696d756d4d696e74696e67417574686f726974794d6963726f676f6e56616c75651840102700000000000000000000000000000859012044656661756c74206d696e696d756d206e6f726d616c697a6564206d6963726f676f6e2076616c756520726571756972656420746f2072656769737465722061204d696e74696e6720417574686f72697479206f6e5c206f6e652064657374696e6174696f6e20636861696e2ea44d617850656e64696e675472616e736665724f75747350657244657374696e6174696f6e436861696e101064000000046101204d6178696d756d206e756d626572206f66206e6f6e2d7465726d696e616c207472616e736665722d6f757420726571756573747320747261636b656420666f72206f6e652064657374696e6174696f6e20636861696e2e54436f756e63696c526f746174696f6e4672616d657330200a00000000000000085101204d696e696d756d2072656d61696e696e67206672616d6520636f6d6d69746d656e74207265717569726564207768656e2072656164696e67207661756c7420636f6d6d697474656420636f6c6c61746572616c050120636170616369747920666f7220636f756e63696c20776569676874696e6720616e64204d696e74696e6720417574686f7269747920636f6c6c61746572616c2e806d61785f70726f6f665f657865637574696f6e5f6865616465725f6465707468101040000000044501204d6178696d756d20657865637574696f6e2068656164657273206361727269656420696e206f6e6520726563656970742070726f6f662773207461726765742d746f2d616e63686f7220636861696e2e010109240509042c34417574686f72697a6543616c6c0d099048436865636b4e6f6e5a65726f53656e64657211099040436865636b5370656356657273696f6e15091038436865636b547856657273696f6e19091030436865636b47656e657369731d093438436865636b4d6f7274616c69747921093428436865636b4e6f6e63652909902c436865636b5765696768742d0990604368617267655472616e73616374696f6e5061796d656e7431099044436865636b4d657461646174614861736835094109345765696768745265636c61696d3d09904509\"\n}\n","{\n \"specName\": \"argon\",\n \"implName\": \"argon\",\n \"authoringVersion\": 1,\n \"specVersion\": 155,\n \"implVersion\": 10,\n \"apis\": [\n [\"0xab3c0572291feb8b\", 2],\n [\"0xf78b278be53f454c\", 2],\n [\"0xccd9de6396c899ca\", 1],\n [\"0x61571683e6d7a7c8\", 1],\n [\"0xbc9d89904f5b923f\", 1],\n [\"0x5e4dc2ce83c23f09\", 1],\n [\"0xfbc577b9d747efd6\", 1],\n [\"0xbab599c4f0d362c6\", 1],\n [\"0x05dd9be92cc17d28\", 3],\n [\"0xd2bc9897eed08f15\", 3],\n [\"0x37e397fc7c91f5e4\", 2],\n [\"0x0090f9d890bb0bb2\", 1],\n [\"0xfff0fb031985f8a1\", 2],\n [\"0xf3ff14d5ab527059\", 3],\n [\"0x11de59f9923f03d8\", 1],\n [\"0xdf6acb689907609b\", 5],\n [\"0x51c97e4020145cb0\", 1],\n [\"0x40fe3ad401f8959a\", 6],\n [\"0xe6683faaa563317a\", 2],\n [\"0x37c8bb1350a9a2a8\", 4],\n [\"0xed99c5acb25eedf5\", 3]\n ],\n \"transactionVersion\": 5,\n \"systemVersion\": 1,\n \"stateVersion\": 1\n}\n","{\n \"mainnet\": \"0xee11bf2ff8838fcb0832c09085c5319a08ba6111c225ecd899fe659872d9d45d\",\n \"testnet\": \"0x66dc4e5ff85faddb0311b768eb73a58d9a00c65f06056ffaa370a1b1354d7411\"\n}\n","import { ArgonClient } from './index';\n\nexport interface IArgonCpiSnapshot {\n // The target price of the argon as a fixed point number (18 decimals)\n argonUsdTargetPrice: bigint;\n // The current price of the argon as a fixed point number (18 decimals)\n argonUsdPrice: bigint;\n // The block hash in which the cpi was finalized\n finalizedBlock: Uint8Array;\n tick: bigint;\n}\n\n/**\n * The WageProtector class is used to protect wages from inflation by using the current Argon Price Index to adjust the\n * baseAmount to current conditions. This ensures that the wage is always stable and does not lose or gain value based on\n * demand for the argon or fiat monetary supply changes.\n */\nexport class WageProtector {\n constructor(public latestCpi: IArgonCpiSnapshot) {}\n\n /**\n * Converts the base wage to the current wage using the latest CPI snapshot\n *\n * @param baseWage The base wage to convert\n * @returns The protected wage\n */\n public getProtectedWage(baseWage: bigint): bigint {\n return (baseWage * this.latestCpi.argonUsdTargetPrice) / this.latestCpi.argonUsdPrice;\n }\n\n /**\n * Subscribes to the current CPI and calls the callback function whenever the CPI changes\n * @param client The ArgonClient to use\n * @param callback The callback function to call when the CPI changes\n * @returns An object with an unsubscribe function that can be called to stop the subscription\n */\n public static async subscribe(\n client: ArgonClient,\n callback: (cpi: WageProtector) => void,\n ): Promise<{\n unsubscribe: () => void;\n }> {\n const unsubscribe = await client.query.priceIndex.current(async cpi => {\n if (cpi.isNone) {\n return;\n }\n const finalizedBlock = await client.rpc.chain.getFinalizedHead();\n\n callback(\n new WageProtector({\n argonUsdTargetPrice: cpi.value.argonUsdTargetPrice.toBigInt(),\n argonUsdPrice: cpi.value.argonUsdPrice.toBigInt(),\n finalizedBlock: new Uint8Array(finalizedBlock),\n tick: cpi.value.tick.toBigInt(),\n }),\n );\n });\n return { unsubscribe };\n }\n\n /**\n * Creates a new WageProtector instance by subscribing to the current CPI and waiting for the first value\n * @param client The ArgonClient to use\n */\n public static async create(client: ArgonClient): Promise<WageProtector> {\n return new Promise<WageProtector>(async (resolve, reject) => {\n try {\n const { unsubscribe } = await WageProtector.subscribe(client, x => {\n resolve(x);\n unsubscribe();\n });\n } catch (e) {\n reject(e);\n }\n });\n }\n}\n","import BigNumber from 'bignumber.js';\nimport type { ArgonClient } from './index';\nimport { EventRecord } from '@polkadot/types/interfaces/system';\n\nexport const MICROGONS_PER_ARGON = 1_000_000;\ntype IDispatchErrorLike = {\n isModule: boolean;\n asModule: Parameters<ArgonClient['registry']['findMetaError']>[0];\n toString(): string;\n};\n\nexport function formatArgons(microgons: bigint | number): string {\n if (microgons === undefined || microgons === null) return 'na';\n const isNegative = microgons < 0;\n let format = BigNumber(microgons.toString())\n .abs()\n .div(MICROGONS_PER_ARGON)\n .toFormat(2, BigNumber.ROUND_FLOOR);\n if (format.endsWith('.00')) {\n format = format.slice(0, -3);\n }\n return `${isNegative ? '-' : ''}₳${format}`;\n}\n\nexport async function gettersToObject<T>(obj: T): Promise<T> {\n if (obj === null || obj === undefined || typeof obj !== 'object') return obj;\n\n const keys = [];\n\n for (const key in obj) {\n keys.push(key);\n }\n\n if (Symbol.iterator in obj) {\n const iterableToArray = [];\n // @ts-expect-error - it should iterate by virtue of Symbol.iterator\n for (const item of obj) {\n iterableToArray.push(await gettersToObject(item));\n }\n return iterableToArray as T;\n }\n\n const result = {} as any;\n for (const key of keys) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, key);\n // Skip functions\n if (descriptor && typeof descriptor.value === 'function') {\n continue;\n }\n const value = descriptor && descriptor.get ? descriptor.get.call(obj) : obj[key as keyof T];\n if (typeof value === 'function') continue;\n\n result[key] = await gettersToObject(value);\n }\n return result as T;\n}\n\nexport function dispatchErrorToString(client: ArgonClient, error: IDispatchErrorLike) {\n let message = error.toString();\n if (error.isModule) {\n const decoded = client.registry.findMetaError(error.asModule);\n const { docs, name, section } = decoded;\n message = `${section}.${name}: ${docs.join(' ')}`;\n }\n return message;\n}\n\nexport function isOutdatedTransactionError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes('Invalid Transaction: Transaction is outdated') ||\n message.includes('InvalidTransaction::Stale')\n );\n}\n\nexport const TxSubmissionErrorCode = {\n Dropped: 'TxSubmission.Dropped',\n Invalid: 'TxSubmission.Invalid',\n Usurped: 'TxSubmission.Usurped',\n} as const;\n\nexport type TxSubmissionErrorCode =\n (typeof TxSubmissionErrorCode)[keyof typeof TxSubmissionErrorCode];\n\nexport class TxSubmissionError extends Error {\n constructor(\n public readonly errorCode: TxSubmissionErrorCode,\n message: string,\n ) {\n super(message);\n this.name = 'TxSubmissionError';\n }\n}\n\nexport function isTxSubmissionError(\n error: unknown,\n ...codes: TxSubmissionErrorCode[]\n): error is TxSubmissionError {\n if (!(error instanceof TxSubmissionError)) {\n return false;\n }\n\n return codes.length === 0 || codes.includes(error.errorCode);\n}\n\n// ExtrinsicError\nexport class ExtrinsicError extends Error {\n constructor(\n public readonly errorCode: string,\n public readonly details?: string,\n public readonly batchInterruptedIndex?: number,\n public readonly txFee: bigint = 0n,\n ) {\n super(errorCode);\n }\n\n public override toString() {\n if (this.batchInterruptedIndex !== undefined) {\n return `${this.errorCode} ${this.details ?? ''} (Batch interrupted at index ${this.batchInterruptedIndex})`;\n }\n return `${this.errorCode} ${this.details ?? ''}`;\n }\n}\n\nexport function dispatchErrorToExtrinsicError(\n client: ArgonClient,\n error: IDispatchErrorLike,\n batchInterruptedIndex?: number,\n txFee?: bigint,\n) {\n if (error.isModule) {\n const decoded = client.registry.findMetaError(error.asModule);\n const { docs, name, section } = decoded;\n return new ExtrinsicError(`${section}.${name}`, docs.join(' '), batchInterruptedIndex, txFee);\n }\n return new ExtrinsicError(error.toString(), undefined, batchInterruptedIndex, txFee);\n}\n\n/**\n * Check for an extrinsic success event in the given events. Helpful to validate the result of an extrinsic inclusion in a block (it will be included even if it fails)\n * @param events The events to check\n * @param client The client to use\n * @returns A promise that resolves if the extrinsic was successful, and rejects if it failed\n */\nexport function checkForExtrinsicSuccess(\n events: EventRecord[],\n client: ArgonClient,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n for (const { event } of events) {\n if (client.events.system.ExtrinsicSuccess.is(event)) {\n resolve();\n } else if (client.events.system.ExtrinsicFailed.is(event)) {\n // extract the data for this event\n const [dispatchError] = event.data;\n let errorInfo = dispatchError.toString();\n\n if (dispatchError.isModule) {\n const decoded = client.registry.findMetaError(dispatchError.asModule);\n errorInfo = `${decoded.section}.${decoded.name}`;\n }\n\n reject(new Error(`${event.section}.${event.method}:: ExtrinsicFailed:: ${errorInfo}`));\n }\n }\n });\n}\n\n/**\n * Return a bigint value using a canonical field first, then named fallback fields on the same source object.\n * Helpful when reading runtime records that may use older field names across spec versions.\n * @param value The preferred bigint-like value, usually from the current field name\n * @param source The object to read fallback fields from\n * @param fallbackFields The fallback field names to check in order\n * @param fallback The value to return if no preferred or fallback field is present\n * @returns The preferred or fallback value converted to bigint\n */\nexport function getBigIntFallback<T extends object>(\n value: IBigIntLike | undefined,\n source: T,\n fallbackFields: readonly string[],\n fallback = 0n,\n): bigint {\n if (typeof value === 'bigint') return value;\n if (value !== undefined) return value.toBigInt();\n\n const record = source as Record<string, IBigIntLike | undefined>;\n\n for (const fieldName of fallbackFields) {\n const field = record[fieldName];\n if (typeof field === 'bigint') return field;\n if (field !== undefined) return field.toBigInt();\n }\n\n return fallback;\n}\n\ntype IBigIntLike = bigint | { toBigInt(): bigint };\n","import { ArgonClient, GenericEvent, SpRuntimeDispatchError } from './index';\nimport {\n dispatchErrorToExtrinsicError,\n ExtrinsicError,\n TxSubmissionError,\n TxSubmissionErrorCode,\n} from './utils';\nimport type { ISubmittableResult } from '@polkadot/types/types/extrinsic';\nimport { DispatchError } from '@polkadot/types/interfaces';\n\nexport type ITxProgressCallback = (progressToInBlock: number, result?: TxResult) => void;\n\nexport class TxResult {\n #isBroadcast = false;\n #submissionError?: Error;\n\n set isBroadcast(value: boolean) {\n this.#isBroadcast = value;\n this.updateProgress();\n }\n\n get isBroadcast(): boolean {\n return this.#isBroadcast;\n }\n\n set submissionError(value: Error) {\n if (value) {\n this.#submissionError = value;\n this.finalizedReject(value);\n this.inBlockReject(value);\n this.updateProgress();\n }\n }\n\n get submissionError(): Error | undefined {\n return this.#submissionError;\n }\n\n public waitForFinalizedBlock: Promise<Uint8Array>;\n public waitForInFirstBlock: Promise<Uint8Array>;\n public events: GenericEvent[] = [];\n\n public extrinsicError: ExtrinsicError | Error | undefined;\n public extrinsicIndex: number | undefined;\n\n public txProgressCallback?: ITxProgressCallback;\n /**\n * The index of the batch that was interrupted, if any.\n */\n public batchInterruptedIndex?: number;\n public blockHash?: Uint8Array;\n public blockNumber?: number;\n /**\n * The final fee paid for the transaction, including the fee tip.\n */\n public finalFee?: bigint;\n /**\n * The fee tip paid for the transaction.\n */\n public finalFeeTip?: bigint;\n\n public txProgress = 0;\n public isFinalized = false;\n\n protected finalizedResolve!: (block: Uint8Array) => void;\n protected finalizedReject!: (error: ExtrinsicError | Error) => void;\n protected inBlockResolve!: (block: Uint8Array) => void;\n protected inBlockReject!: (error: ExtrinsicError | Error) => void;\n\n constructor(\n protected readonly client: ArgonClient,\n public extrinsic: {\n signedHash: string;\n method: any;\n submittedTime: Date;\n submittedAtBlockNumber: number;\n accountAddress: string;\n nonce: number;\n },\n ) {\n this.waitForFinalizedBlock = new Promise((resolve, reject) => {\n this.finalizedResolve = resolve;\n this.finalizedReject = reject;\n });\n this.waitForInFirstBlock = new Promise((resolve, reject) => {\n this.inBlockResolve = resolve;\n this.inBlockReject = reject;\n });\n // drown reject\n this.waitForFinalizedBlock.catch(() => null);\n this.waitForInFirstBlock.catch(() => null);\n }\n\n public async setSeenInBlock(block: {\n blockHash: Uint8Array;\n blockNumber?: number;\n extrinsicIndex: number;\n events: GenericEvent[];\n }): Promise<void> {\n const { blockHash, blockNumber, events } = block;\n if (blockHash !== this.blockHash) {\n this.parseEvents(events);\n this.blockHash = blockHash;\n this.blockNumber =\n blockNumber ??\n (await this.client.rpc.chain.getHeader(blockHash).then(h => h.number.toNumber()));\n this.extrinsicIndex = block.extrinsicIndex;\n this.updateProgress();\n if (this.extrinsicError) {\n this.inBlockReject(this.extrinsicError);\n } else {\n this.inBlockResolve(blockHash);\n }\n }\n }\n\n public setFinalized() {\n this.isFinalized = true;\n this.updateProgress();\n\n let error = this.extrinsicError ?? this.submissionError;\n if (!error && !this.blockHash) {\n error = new Error('Cannot finalize transaction before it is included in a block');\n }\n\n if (error) {\n this.finalizedReject(error);\n this.inBlockReject(error);\n } else {\n this.finalizedResolve(this.blockHash!);\n this.inBlockResolve(this.blockHash!);\n }\n }\n\n public onSubscriptionResult(result: ISubmittableResult) {\n const { events, status, isFinalized, txIndex } = result;\n const extrinsicEvents = events.map(x => x.event);\n\n if (status.isBroadcast) {\n this.isBroadcast = true;\n if (result.internalError) this.submissionError = result.internalError;\n }\n if (status.isInBlock) {\n void this.setSeenInBlock({\n blockHash: Uint8Array.from(status.asInBlock),\n events: extrinsicEvents,\n extrinsicIndex: txIndex!,\n });\n }\n if (status.isUsurped) {\n this.submissionError = new TxSubmissionError(\n TxSubmissionErrorCode.Usurped,\n `Transaction was usurped by ${status.asUsurped.toHex()}.`,\n );\n }\n if (status.isDropped) {\n this.submissionError = new TxSubmissionError(\n TxSubmissionErrorCode.Dropped,\n 'Transaction was dropped before it was included in a block.',\n );\n }\n if (status.isInvalid) {\n this.submissionError = new TxSubmissionError(\n TxSubmissionErrorCode.Invalid,\n 'Transaction was rejected as invalid by the node.',\n );\n }\n if (isFinalized) {\n this.setFinalized();\n }\n }\n\n private updateProgress() {\n if (this.isFinalized || this.submissionError) {\n this.txProgress = 100;\n } else if (this.blockNumber) {\n const elapsedBlocks = this.blockNumber - this.extrinsic.submittedAtBlockNumber;\n const FINALIZATION_BLOCKS = 5;\n const remainingPercent = Math.max(0, FINALIZATION_BLOCKS - elapsedBlocks) * 20;\n const percent = 100 - remainingPercent;\n this.txProgress = Math.min(percent, 99);\n } else if (this.extrinsic.submittedAtBlockNumber) {\n this.txProgress = 10;\n }\n this.txProgressCallback?.(this.txProgress);\n }\n\n private parseEvents(events: GenericEvent[]) {\n let encounteredError: SpRuntimeDispatchError | undefined;\n for (const event of events) {\n if (this.client.events.system.ExtrinsicFailed.is(event)) {\n const { dispatchError } = event.data;\n encounteredError ??= dispatchError;\n }\n if (this.client.events.utility.BatchInterrupted.is(event)) {\n const { index, error } = event.data;\n this.batchInterruptedIndex = index.toNumber();\n encounteredError = error;\n }\n if (this.client.events.transactionPayment.TransactionFeePaid.is(event)) {\n const { actualFee, tip } = event.data;\n this.finalFee = actualFee.toBigInt();\n this.finalFeeTip = tip.toBigInt();\n }\n }\n if (encounteredError) {\n this.extrinsicError = dispatchErrorToExtrinsicError(\n this.client,\n encounteredError as unknown as DispatchError,\n this.batchInterruptedIndex,\n this.finalFee,\n );\n } else {\n this.extrinsicError = undefined;\n }\n this.events = events;\n }\n}\n","import { waitForLoad } from './index';\nimport type { ArgonClient } from './index';\nimport type { SubmittableExtrinsic } from '@polkadot/api/promise/types';\nimport type { SignerOptions } from '@polkadot/api/types';\nimport type { KeyringPair } from '@polkadot/keyring/types';\nimport { ITxProgressCallback, TxResult } from './TxResult';\n\nexport type TxSigningAccount =\n | KeyringPair\n | { address: string; signer: NonNullable<SignerOptions['signer']> };\n\nexport type ISubmittableOptions = Partial<Omit<SignerOptions, 'signer'>> & {\n tip?: bigint;\n logResults?: boolean;\n useLatestNonce?: boolean;\n txProgressCallback?: ITxProgressCallback;\n disableAutomaticTxTracking?: boolean;\n};\n\nexport class TxSubmitter {\n public readonly address: string;\n\n constructor(\n public readonly client: ArgonClient,\n public tx: SubmittableExtrinsic,\n public readonly account: TxSigningAccount,\n ) {\n this.address = account.address;\n }\n\n public async feeEstimate(tip?: bigint): Promise<bigint> {\n const { partialFee } = await this.tx.paymentInfo(this.address, { tip });\n return partialFee.toBigInt();\n }\n\n public async canAfford(\n options: {\n tip?: bigint;\n unavailableBalance?: bigint;\n includeExistentialDeposit?: boolean;\n } = {},\n ): Promise<{ canAfford: boolean; availableBalance: bigint; txFee: bigint }> {\n const { tip, unavailableBalance } = options;\n const account = await this.client.query.system.account(this.address);\n let availableBalance = account.data.free.toBigInt();\n const userBalance = availableBalance;\n if (unavailableBalance) {\n availableBalance -= unavailableBalance;\n }\n const existentialDeposit = options.includeExistentialDeposit\n ? this.client.consts.balances.existentialDeposit.toBigInt()\n : 0n;\n const fees = await this.feeEstimate(tip);\n const totalCharge = fees + (tip ?? 0n);\n const canAfford = availableBalance >= totalCharge + existentialDeposit;\n return { canAfford, availableBalance: userBalance, txFee: fees };\n }\n\n public async sign(options: ISubmittableOptions = {}): Promise<SubmittableExtrinsic> {\n const { useLatestNonce, ...apiOptions } = options;\n await waitForLoad();\n if (useLatestNonce && apiOptions.nonce === undefined) {\n apiOptions.nonce = await this.client.rpc.system.accountNextIndex(this.address);\n }\n\n if ('signer' in this.account) {\n return await this.tx.signAsync(this.address, { ...apiOptions, signer: this.account.signer });\n }\n\n return await this.tx.signAsync(this.account, apiOptions);\n }\n\n public async submitSigned(\n signedTx: SubmittableExtrinsic,\n options: ISubmittableOptions = {},\n ): Promise<TxResult> {\n const blockHeight = await this.client.rpc.chain.getHeader().then(h => h.number.toNumber());\n if (options.logResults) {\n this.logRequest();\n }\n const txHash = signedTx.hash.toHex();\n const result = new TxResult(this.client, {\n signedHash: txHash,\n method: signedTx.method.toHuman(),\n accountAddress: this.address,\n submittedTime: new Date(),\n submittedAtBlockNumber: blockHeight,\n nonce: signedTx.nonce.toNumber(),\n });\n result.txProgressCallback = options.txProgressCallback;\n if (options.disableAutomaticTxTracking !== true) {\n await signedTx.send(result.onSubscriptionResult.bind(result));\n } else {\n try {\n await signedTx.send();\n result.isBroadcast = true;\n } catch (error) {\n result.submissionError = error as Error;\n }\n }\n return result;\n }\n\n public async submit(options: ISubmittableOptions = {}): Promise<TxResult> {\n const signedTx = await this.sign(options);\n return await this.submitSigned(signedTx, options);\n }\n\n private logRequest() {\n let toHuman = (this.tx.toHuman() as any).method;\n const txString = [];\n let api = formatCall(toHuman);\n const args: any[] = [];\n if (api === 'proxy.proxy') {\n toHuman = toHuman.args.call;\n txString.push('Proxy');\n api = formatCall(toHuman);\n }\n if (api.startsWith('utility.batch')) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n const calls = toHuman.args.calls.map(formatCall).join(', ');\n txString.push(`Batch[${calls}]`);\n } else {\n txString.push(api);\n args.push(toHuman.args);\n }\n args.unshift(txString.join('->'));\n console.log('Submitting transaction from %s:', this.address, ...args);\n }\n}\n\nfunction formatCall(call: any): string {\n return `${call.section}.${call.method}`;\n}\n","import { Keyring, KeyringPair, mnemonicGenerate } from './index';\n\nexport function keyringFromSuri(\n suri: string,\n cryptoType: 'sr25519' | 'ed25519' = 'sr25519',\n): KeyringPair {\n return new Keyring({ type: cryptoType }).createFromUri(suri);\n}\n\nexport function createKeyringPair(opts: { cryptoType?: 'sr25519' | 'ed25519' }): KeyringPair {\n const { cryptoType } = opts;\n const seed = mnemonicGenerate();\n return keyringFromSuri(seed, cryptoType);\n}\n","import { getOfflineRegistry, type ArgonPrimitivesDigestsFrameInfo, type Header } from './index';\n\nexport function getTickFromHeader(header: Header): number | undefined {\n for (const x of header.digest.logs) {\n if (x.isPreRuntime) {\n const [engineId, data] = x.asPreRuntime;\n if (engineId.toString() === 'aura') {\n return getOfflineRegistry().createType('u64', data).toNumber();\n }\n }\n }\n return undefined;\n}\n\nexport function getAuthorFromHeader(header: Header): string | undefined {\n for (const x of header.digest.logs) {\n if (x.isPreRuntime) {\n const [engineId, data] = x.asPreRuntime;\n if (engineId.toString() === 'pow_') {\n return getOfflineRegistry().createType('AccountId32', data).toHuman();\n }\n }\n }\n return undefined;\n}\n\nexport function getFrameInfoFromHeader(\n header: Header,\n): { isNewFrame: boolean; frameId: number; frameRewardTicksRemaining: number } | undefined {\n for (const x of header.digest.logs) {\n if (x.isConsensus) {\n const [engineId, data] = x.asConsensus;\n if (engineId.toString() === 'fram') {\n const decoded: ArgonPrimitivesDigestsFrameInfo = getOfflineRegistry().createType(\n 'ArgonPrimitivesDigestsFrameInfo',\n data,\n );\n return {\n isNewFrame: decoded.isNewFrame.toPrimitive(),\n frameId: decoded.frameId.toNumber(),\n frameRewardTicksRemaining: decoded.frameRewardTicksRemaining.toNumber(),\n };\n }\n }\n }\n return undefined;\n}\n","import {\n type ArgonClient,\n type ArgonPrimitivesVault,\n FIXED_U128_DECIMALS,\n formatArgons,\n fromFixedNumber,\n MICROGONS_PER_ARGON,\n PERMILL_DECIMALS,\n toFixedNumber,\n TxSubmitter,\n} from './index';\nimport BigNumber from 'bignumber.js';\nimport bs58check from 'bs58check';\nimport { hexToU8a } from '@polkadot/util';\nimport { TxResult } from './TxResult';\nimport type { ISubmittableOptions, TxSigningAccount } from './TxSubmitter';\nimport type { PriceIndex } from './PriceIndex';\nimport { ApiDecoration } from '@polkadot/api/types';\nimport type {\n bool,\n BTreeMap,\n Bytes,\n Compact,\n Option,\n Struct,\n u128,\n u64,\n} from '@polkadot/types-codec';\nimport type { AccountId32 } from '@polkadot/types/interfaces/runtime';\nimport type { ITuple } from '@polkadot/types-codec/types';\nimport { ArgonPrimitivesVaultVaultTerms } from '@polkadot/types/lookup';\n\ninterface ArgonPrimitivesVaultV144 extends Struct {\n readonly operatorAccountId: AccountId32;\n readonly securitization: Compact<u128>;\n readonly argonsLocked: Compact<u128>;\n readonly argonsPendingActivation: Compact<u128>;\n readonly argonsScheduledForRelease: BTreeMap<u64, u128>;\n readonly securitizationRatio: Compact<u128>;\n readonly isClosed: bool;\n readonly terms: ArgonPrimitivesVaultVaultTerms;\n readonly pendingTerms: Option<ITuple<[u64, ArgonPrimitivesVaultVaultTerms]>>;\n readonly openedTick: Compact<u64>;\n}\n\nexport class Vault {\n public securitization!: bigint;\n public securitizationLocked!: bigint;\n public securitizationPendingActivation!: bigint;\n /**\n * Map of bitcoin height to amount of securitization released at that height\n */\n public securitizationReleaseSchedule: Map<number, bigint>;\n public terms!: ITerms;\n public operatorAccountId!: string;\n public isClosed!: boolean;\n public vaultId: number;\n public pendingTerms?: ITerms;\n public pendingTermsChangeTick?: number;\n public openedDate: Date;\n public openedTick: number;\n public securitizationRatio!: number;\n\n public lockedSatoshis!: number;\n public securitizedSatoshis!: number;\n public name?: string;\n public lastNameChangeTick?: number;\n public delegateAccountId?: string;\n\n constructor(\n id: number,\n vault: ArgonPrimitivesVault,\n public tickDuration: number,\n ) {\n this.vaultId = id;\n this.openedTick = vault.openedTick.toNumber();\n this.openedDate = new Date(this.openedTick * this.tickDuration);\n this.securitizationReleaseSchedule = new Map();\n this.load(vault);\n }\n\n public load(vault: ArgonPrimitivesVault | ArgonPrimitivesVaultV144): void {\n this.securitization = vault.securitization.toBigInt();\n this.securitizationRatio = fromFixedNumber(\n vault.securitizationRatio.toBigInt(),\n FIXED_U128_DECIMALS,\n ).toNumber();\n this.securitizationReleaseSchedule.clear();\n let schedule: BTreeMap<u64, u128>;\n if ('argonsLocked' in vault) {\n // spec 143 compatibility - don't bother with ratio as it was forced to 1:1\n this.securitizationLocked = vault.argonsLocked.toBigInt();\n this.securitizationPendingActivation = vault.argonsPendingActivation.toBigInt();\n schedule = vault.argonsScheduledForRelease;\n } else {\n this.securitizationLocked = vault.securitizationLocked.toBigInt();\n this.securitizationPendingActivation = vault.securitizationPendingActivation.toBigInt();\n schedule = vault.securitizationReleaseSchedule;\n }\n if (schedule.size > 0) {\n for (const [bitcoinHeight, amount] of schedule.entries()) {\n this.securitizationReleaseSchedule.set(bitcoinHeight.toNumber(), amount.toBigInt());\n }\n }\n const currentBonusSharingPercent =\n 'treasuryBonusProfitSharing' in vault.terms\n ? vault.terms.treasuryBonusProfitSharing\n : undefined;\n this.terms = {\n bitcoinAnnualPercentRate: fromFixedNumber(\n vault.terms.bitcoinAnnualPercentRate.toBigInt(),\n FIXED_U128_DECIMALS,\n ),\n bitcoinBaseFee: vault.terms.bitcoinBaseFee.toBigInt(),\n treasuryProfitSharing: fromFixedNumber(\n vault.terms.treasuryProfitSharing.toBigInt(),\n PERMILL_DECIMALS,\n ),\n treasuryBonusProfitSharing: fromFixedNumber(\n currentBonusSharingPercent?.toBigInt() ?? 0n,\n PERMILL_DECIMALS,\n ),\n };\n if ('lockedSatoshis' in vault) {\n this.lockedSatoshis = vault.lockedSatoshis.toNumber();\n this.securitizedSatoshis = vault.securitizedSatoshis.toNumber();\n } else {\n this.lockedSatoshis = 0;\n this.securitizedSatoshis = 0;\n }\n\n this.operatorAccountId = vault.operatorAccountId.toString();\n this.isClosed = vault.isClosed.valueOf();\n this.pendingTerms = undefined;\n this.pendingTermsChangeTick = undefined;\n this.name = undefined;\n this.lastNameChangeTick = undefined;\n this.delegateAccountId = undefined;\n if (vault.pendingTerms.isSome) {\n const [tickApply, terms] = vault.pendingTerms.value;\n const pendingBonusSharingPercent =\n 'treasuryBonusProfitSharing' in terms ? terms.treasuryBonusProfitSharing : undefined;\n this.pendingTermsChangeTick = tickApply.toNumber();\n this.pendingTerms = {\n bitcoinAnnualPercentRate: fromFixedNumber(\n terms.bitcoinAnnualPercentRate.toBigInt(),\n FIXED_U128_DECIMALS,\n ),\n bitcoinBaseFee: terms.bitcoinBaseFee.toBigInt(),\n treasuryProfitSharing: fromFixedNumber(\n terms.treasuryProfitSharing.toBigInt(),\n PERMILL_DECIMALS,\n ),\n treasuryBonusProfitSharing: fromFixedNumber(\n pendingBonusSharingPercent?.toBigInt() ?? 0n,\n PERMILL_DECIMALS,\n ),\n };\n }\n if ('name' in vault && vault.name.isSome) {\n this.name = decodeVaultName(vault.name.unwrap());\n }\n if ('lastNameChangeTick' in vault && vault.lastNameChangeTick.isSome) {\n this.lastNameChangeTick = vault.lastNameChangeTick.unwrap().toNumber();\n }\n const legacyDelegateAccount = (\n vault as {\n bitcoinLockDelegateAccount?: Option<AccountId32>;\n }\n ).bitcoinLockDelegateAccount;\n if (legacyDelegateAccount?.isSome) {\n this.delegateAccountId = legacyDelegateAccount.unwrap().toHuman();\n }\n if ('delegateAccountId' in vault && vault.delegateAccountId.isSome) {\n this.delegateAccountId = vault.delegateAccountId.unwrap().toHuman();\n }\n }\n\n public availableBitcoinSpace(): bigint {\n const availableSecuritization = this.availableSecuritization();\n const microgons = BigNumber(availableSecuritization).div(this.securitizationRatioBN());\n return bigNumberToBigInt(microgons);\n }\n\n public availableSecuritization(): bigint {\n return this.securitization - this.securitizationLocked;\n }\n\n public availableBondSpace(\n priceIndex: PriceIndex,\n bondLots?: Iterable<{ activeBonds: number }>,\n bondFullCapacityPerFrame?: boolean,\n ): bigint {\n if (this.securitizedSatoshis <= 0) return 0n;\n\n const microgonsPerBond = BigInt(MICROGONS_PER_ARGON);\n const totalBondCapacityMicrogons = priceIndex.getSatoshiPriceInTargetMicrogons(\n BigInt(this.securitizedSatoshis),\n );\n const capacityMicrogons = bondFullCapacityPerFrame\n ? totalBondCapacityMicrogons\n : totalBondCapacityMicrogons / 10n;\n const bondCapacity = Number(capacityMicrogons / microgonsPerBond);\n const activeBonds = [...(bondLots ?? [])].reduce(\n (sum, bondLot) => sum + bondLot.activeBonds,\n 0,\n );\n const availableBonds = activeBonds < bondCapacity ? bondCapacity - activeBonds : 0;\n\n return BigInt(availableBonds) * microgonsPerBond;\n }\n\n public getRelockCapacity(): bigint {\n return [...this.securitizationReleaseSchedule.values()].reduce((acc, val) => acc + val, 0n);\n }\n\n public securitizationRatioBN(): BigNumber {\n return new BigNumber(this.securitizationRatio);\n }\n\n public activatedSecuritization(): bigint {\n return this.securitizationLocked - this.securitizationPendingActivation;\n }\n\n /**\n * Returns the amount of securitization available to match per treasury pool\n */\n public activatedSecuritizationPerSlot(): bigint {\n const activated = this.activatedSecuritization();\n return activated / 10n;\n }\n\n public calculateBitcoinFee(amount: bigint): bigint {\n const feeBn = this.terms.bitcoinAnnualPercentRate\n .multipliedBy(amount)\n .integerValue(BigNumber.ROUND_CEIL);\n return BigInt(feeBn.toString()) + this.terms.bitcoinBaseFee;\n }\n\n public static async get(\n client: ArgonClient | ApiDecoration<'promise'>,\n vaultId: number,\n tickDurationMillis?: number,\n ): Promise<Vault> {\n const rawVault = await client.query.vaults.vaultsById(vaultId);\n if (rawVault.isNone) {\n throw new Error(`Vault with id ${vaultId} not found`);\n }\n const tickDuration =\n tickDurationMillis ??\n (await client.query.ticks.genesisTicker().then(x => x.tickDurationMillis.toNumber()))!;\n return new Vault(vaultId, rawVault.unwrap(), tickDuration);\n }\n\n public static async create(\n client: ArgonClient,\n txSigner: TxSigningAccount,\n args: {\n securitization: bigint | number;\n securitizationRatio: number;\n annualPercentRate: number;\n baseFee: bigint | number;\n bitcoinXpub: string;\n delegateAccountId?: string;\n name?: string;\n treasuryProfitSharing: number;\n treasuryBonusProfitSharing: number;\n doNotExceedBalance?: bigint;\n } & ISubmittableOptions,\n config: { tickDurationMillis?: number } = {},\n ): Promise<{ getVault(): Promise<Vault>; txResult: TxResult }> {\n const {\n securitization,\n securitizationRatio,\n annualPercentRate,\n baseFee,\n bitcoinXpub,\n delegateAccountId,\n name,\n tip,\n doNotExceedBalance,\n } = args;\n let xpubBytes = hexToU8a(bitcoinXpub);\n if (xpubBytes.length !== 78) {\n if (\n bitcoinXpub.startsWith('xpub') ||\n bitcoinXpub.startsWith('tpub') ||\n bitcoinXpub.startsWith('zpub')\n ) {\n const bytes = bs58check.decode(bitcoinXpub);\n if (bytes.length !== 78) {\n throw new Error('Invalid Bitcoin xpub key length, must be 78 bytes');\n }\n xpubBytes = bytes;\n }\n }\n if (securitizationRatio < 1 || securitizationRatio > 2) {\n throw new Error('Securitization ratio must be between 1 and 2');\n }\n const encodedName = encodeVaultName(name);\n const vaultParams = {\n terms: {\n // convert to fixed u128\n bitcoinAnnualPercentRate: toFixedNumber(annualPercentRate, FIXED_U128_DECIMALS),\n bitcoinBaseFee: BigInt(baseFee),\n treasuryProfitSharing: toFixedNumber(args.treasuryProfitSharing, PERMILL_DECIMALS),\n treasuryBonusProfitSharing: toFixedNumber(\n args.treasuryBonusProfitSharing,\n PERMILL_DECIMALS,\n ),\n },\n securitizationRatio: toFixedNumber(securitizationRatio, FIXED_U128_DECIMALS),\n securitization: BigInt(securitization),\n bitcoinXpubkey: xpubBytes,\n delegateAccountId: delegateAccountId ?? null,\n name: encodedName,\n };\n const tx = new TxSubmitter(client, client.tx.vaults.create(vaultParams), txSigner);\n if (doNotExceedBalance) {\n const finalTip = tip ?? 0n;\n let txFee = await tx.feeEstimate(finalTip);\n while (txFee + finalTip + vaultParams.securitization > doNotExceedBalance) {\n vaultParams.securitization = doNotExceedBalance - txFee - finalTip;\n tx.tx = client.tx.vaults.create(vaultParams);\n txFee = await tx.feeEstimate(finalTip);\n }\n }\n const canAfford = await tx.canAfford({ tip, unavailableBalance: BigInt(securitization) });\n if (!canAfford.canAfford) {\n throw new Error(\n `Insufficient balance to create vault. Required: ${formatArgons(securitization)}, Available: ${formatArgons(canAfford.availableBalance)}`,\n );\n }\n\n const result = await tx.submit({\n ...args,\n useLatestNonce: true,\n });\n\n async function getVault(): Promise<Vault> {\n await result.waitForFinalizedBlock;\n let vaultId: number | undefined;\n for (const event of result.events) {\n if (client.events.vaults.VaultCreated.is(event)) {\n vaultId = event.data.vaultId.toNumber();\n break;\n }\n }\n if (vaultId === undefined) {\n throw new Error('Vault creation failed, no VaultCreated event found');\n }\n return Vault.get(client, vaultId, config.tickDurationMillis);\n }\n return { getVault, txResult: result };\n }\n\n public static async setName(\n client: ArgonClient,\n txSigner: TxSigningAccount,\n args: {\n name?: string | null;\n } & ISubmittableOptions,\n ): Promise<TxResult> {\n const tx = new TxSubmitter(\n client,\n client.tx.vaults.setName(encodeVaultName(args.name)),\n txSigner,\n );\n\n return tx.submit({\n ...args,\n useLatestNonce: true,\n });\n }\n}\n\nexport interface ITerms {\n readonly bitcoinAnnualPercentRate: BigNumber;\n readonly bitcoinBaseFee: bigint;\n readonly treasuryProfitSharing: BigNumber;\n readonly treasuryBonusProfitSharing: BigNumber;\n}\nfunction bigNumberToBigInt(bn: BigNumber): bigint {\n return BigInt(bn.integerValue(BigNumber.ROUND_DOWN).toString());\n}\n\nfunction decodeVaultName(name: Bytes): string {\n return new TextDecoder().decode(Uint8Array.from(name));\n}\n\nfunction encodeVaultName(name?: string | null): string | null {\n if (name === undefined || name === null) {\n return null;\n }\n if (!/^[A-Z][A-Za-z0-9]{0,17}$/.test(name)) {\n throw new Error(\n 'Vault name must start with a capital letter and contain at most 18 alphanumeric characters',\n );\n }\n return name;\n}\n","import BigNumber from 'bignumber.js';\n\nexport function toFixedNumber(\n value: string | number | BigNumber, // accept string to avoid early precision loss\n decimals: number,\n): bigint {\n const factor = new BigNumber(10).pow(decimals);\n const bn = new BigNumber(value);\n // truncate toward 0; use ROUND_FLOOR if you really need floor for positives\n const int = bn.times(factor).integerValue(BigNumber.ROUND_DOWN);\n return BigInt(int.toFixed(0));\n}\n\nexport function fromFixedNumber(value: bigint, decimals: number = FIXED_U128_DECIMALS): BigNumber {\n const factor = new BigNumber(10).pow(decimals);\n const bn = new BigNumber(value.toString());\n return bn.div(factor);\n}\n\nexport const FIXED_U128_DECIMALS = 18;\nexport const PERMILL_DECIMALS = 6;\n","import {\n ArgonClient,\n ArgonPrimitivesBitcoinBitcoinNetwork,\n ArgonPrimitivesBitcoinUtxoRef,\n getBigIntFallback,\n} from './index';\nimport { GenericEvent } from '@polkadot/types';\nimport type { SubmittableExtrinsic } from '@polkadot/api/promise/types';\nimport type { ISubmittableOptions, TxSigningAccount } from './TxSubmitter';\nimport { TxSubmitter } from './TxSubmitter';\nimport { TxResult } from './TxResult';\nimport { u8aToHex } from '@polkadot/util';\nimport { ApiDecoration } from '@polkadot/api/types';\nimport { PriceIndex } from './PriceIndex';\nimport { bool, Option } from '@polkadot/types-codec';\nimport { formatArgons } from './utils';\nimport type { Vault } from './Vault';\nimport BigNumber from 'bignumber.js';\n\nexport const SATS_PER_BTC = 100_000_000n;\n\ntype IQueryableClient = ArgonClient | ApiDecoration<'promise'>;\ntype UtxoRefLike =\n | ArgonPrimitivesBitcoinUtxoRef\n | { txid: string | Uint8Array; outputIndex: number };\n\ntype UtxoRefOption = { unwrap: () => ArgonPrimitivesBitcoinUtxoRef };\n\nfunction normalizeUtxoRef(utxoRef: UtxoRefLike): {\n txid: string;\n outputIndex: number;\n} {\n let txid = utxoRef.txid;\n if (typeof txid === 'object' && 'toHex' in txid) {\n txid = txid.toHex();\n } else if (typeof txid !== 'string') {\n txid = u8aToHex(txid);\n }\n let outputIndex = utxoRef.outputIndex;\n if (typeof outputIndex !== 'number') {\n outputIndex = outputIndex.toNumber();\n }\n return { txid, outputIndex };\n}\n\nexport class BitcoinLock implements IBitcoinLock {\n public utxoId: number;\n public p2wshScriptHashHex: string;\n public vaultId: number;\n public lockedTargetPrice: bigint;\n public liquidityPromised: bigint;\n public ownerAccount: string;\n public satoshis: bigint;\n public utxoSatoshis?: bigint;\n public vaultPubkey: string;\n public securityFees: bigint;\n public vaultClaimPubkey: string;\n public ownerPubkey: string;\n public vaultXpubSources: {\n parentFingerprint: Uint8Array;\n cosignHdIndex: number;\n claimHdIndex: number;\n };\n public vaultClaimHeight: number;\n public openClaimHeight: number;\n public createdAtHeight: number;\n public isFunded: boolean;\n public createdAtArgonBlock: number;\n public fundHoldExtensionsByBitcoinExpirationHeight: Record<number, bigint>;\n public couponFeesPaid: bigint;\n\n constructor(data: IBitcoinLock) {\n this.utxoId = data.utxoId;\n this.p2wshScriptHashHex = data.p2wshScriptHashHex;\n this.vaultId = data.vaultId;\n this.lockedTargetPrice = data.lockedTargetPrice;\n this.liquidityPromised = data.liquidityPromised;\n this.ownerAccount = data.ownerAccount;\n this.satoshis = data.satoshis;\n this.utxoSatoshis = data.utxoSatoshis;\n this.vaultPubkey = data.vaultPubkey;\n this.securityFees = data.securityFees;\n this.vaultClaimPubkey = data.vaultClaimPubkey;\n this.ownerPubkey = data.ownerPubkey;\n this.vaultXpubSources = data.vaultXpubSources;\n this.vaultClaimHeight = data.vaultClaimHeight;\n this.openClaimHeight = data.openClaimHeight;\n this.createdAtHeight = data.createdAtHeight;\n this.isFunded = data.isFunded;\n this.fundHoldExtensionsByBitcoinExpirationHeight =\n data.fundHoldExtensionsByBitcoinExpirationHeight;\n this.createdAtArgonBlock = data.createdAtArgonBlock;\n this.couponFeesPaid = data.couponFeesPaid ?? 0n;\n }\n\n /**\n * Gets the UTXO reference by ID.\n * @param client - client at the block height to query the UTXO reference at a specific point in time.\n * @return An object containing the transaction ID and output index, or undefined if not found.\n * @return.txid - The Bitcoin transaction ID of the UTXO.\n * @return.vout - The output index of the UTXO in the transaction.\n * @return.bitcoinTxid - The Bitcoin transaction ID of the UTXO formatted in little endian\n */\n public async getFundingUtxoRef(\n client: IQueryableClient,\n ): Promise<{ txid: string; vout: number; bitcoinTxid: string } | undefined> {\n let refRaw: Option<ArgonPrimitivesBitcoinUtxoRef>;\n if (\n 'utxoIdToRef' in client.query.bitcoinUtxos &&\n typeof client.query.bitcoinUtxos.utxoIdToRef === 'function'\n ) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n refRaw = await client.query.bitcoinUtxos.utxoIdToRef(this.utxoId);\n } else {\n refRaw = await client.query.bitcoinUtxos.utxoIdToFundingUtxoRef(this.utxoId);\n }\n if (!refRaw || refRaw.isNone) {\n return;\n }\n const ref = refRaw.unwrap();\n\n const txid = u8aToHex(ref.txid);\n const bitcoinTxid = u8aToHex(ref.txid.slice().reverse());\n const vout = ref.outputIndex.toNumber();\n return { txid, vout, bitcoinTxid };\n }\n\n public async findPendingMints(client: IQueryableClient): Promise<bigint[]> {\n const pendingMint = await client.query.mint.pendingMintUtxos();\n const mintsPending: bigint[] = [];\n for (const [utxoIdRaw, _accountId, mintAmountRaw] of pendingMint) {\n if (utxoIdRaw.toNumber() === this.utxoId) {\n mintsPending.push(mintAmountRaw.toBigInt());\n }\n }\n return mintsPending;\n }\n\n public async calculateRatchetingCosts(\n client: IQueryableClient,\n priceIndex: PriceIndex,\n vault: Vault,\n microgonsAtTargetPerBtc?: bigint,\n ): Promise<{ burnAmount: bigint; ratchetingFee: bigint }> {\n const { createdAtHeight, vaultClaimHeight, lockedTargetPrice, satoshis } = this;\n const currentTargetPrice =\n microgonsAtTargetPerBtc !== undefined\n ? (microgonsAtTargetPerBtc * satoshis) / SATS_PER_BTC\n : priceIndex.getSatoshiPriceInTargetMicrogons(satoshis);\n\n let ratchetingFee = vault.terms.bitcoinBaseFee;\n let burnAmount = 0n;\n\n // ratchet up\n if (currentTargetPrice > lockedTargetPrice) {\n const diffTargetAmount = currentTargetPrice - lockedTargetPrice;\n const amountToMint = BitcoinLock.calculateRedemptionAmount(priceIndex, diffTargetAmount);\n const bitcoinFee = vault.calculateBitcoinFee(amountToMint);\n const percentageFee = bitcoinFee - vault.terms.bitcoinBaseFee;\n\n const currentBitcoinHeight = await client.query.bitcoinUtxos\n .confirmedBitcoinBlockTip()\n .then(x => x.unwrap().blockHeight.toNumber());\n const fullTerm = Math.max(1, vaultClaimHeight - createdAtHeight);\n const elapsedBlocks = Math.max(0, currentBitcoinHeight - createdAtHeight);\n const cappedRemainingBlocks = Math.max(0, fullTerm - elapsedBlocks);\n const proratedFee = (percentageFee * BigInt(cappedRemainingBlocks)) / BigInt(fullTerm);\n ratchetingFee = vault.terms.bitcoinBaseFee + proratedFee;\n } else {\n burnAmount = BitcoinLock.calculateRedemptionAmount(priceIndex, currentTargetPrice);\n }\n\n return {\n ratchetingFee,\n burnAmount,\n };\n }\n\n public async ratchet(\n args: {\n client: ArgonClient;\n priceIndex: PriceIndex;\n txSigner: TxSigningAccount;\n vault: Vault;\n microgonsAtTargetPerBtc?: bigint;\n } & ISubmittableOptions,\n ): Promise<{\n txResult: TxResult;\n getRatchetResult: () => Promise<{\n securityFee: bigint;\n txFee: bigint;\n lockedTargetPrice: bigint;\n liquidityPromised: bigint;\n pendingMint: bigint;\n burned: bigint;\n blockHeight: number;\n bitcoinBlockHeight: number;\n }>;\n }> {\n const { priceIndex, txSigner, tip = 0n, vault, client, microgonsAtTargetPerBtc } = args;\n\n const ratchetingCosts = await this.calculateRatchetingCosts(\n client,\n priceIndex,\n vault,\n microgonsAtTargetPerBtc,\n );\n const tx = client.tx.bitcoinLocks.ratchet(this.utxoId, { V1: { microgonsAtTargetPerBtc } });\n const txSubmitter = new TxSubmitter(client, tx, txSigner);\n const canAfford = await txSubmitter.canAfford({\n tip,\n unavailableBalance: BigInt(ratchetingCosts.burnAmount + ratchetingCosts.ratchetingFee),\n });\n if (!canAfford.canAfford) {\n throw new Error(\n `Insufficient funds to ratchet lock. Available: ${formatArgons(canAfford.availableBalance)}, Required: ${formatArgons(\n ratchetingCosts.burnAmount + ratchetingCosts.ratchetingFee,\n )}`,\n );\n }\n\n const txResult = await txSubmitter.submit(args);\n\n const getRatchetResult = async () => {\n const blockHash = await txResult.waitForFinalizedBlock;\n const ratchetEvent = txResult.events.find(x =>\n client.events.bitcoinLocks.BitcoinLockRatcheted.is(x),\n );\n if (!ratchetEvent) {\n throw new Error(`Ratchet event not found in transaction events`);\n }\n const api = await client.at(blockHash);\n const bitcoinBlockHeight = await api.query.bitcoinUtxos\n .confirmedBitcoinBlockTip()\n .then(x => x.unwrap().blockHeight.toNumber());\n const {\n amountBurned,\n liquidityPromised: liquidityPromisedRaw,\n newTargetPrice: newTargetPriceRaw,\n oldTargetPrice: oldTargetPriceRaw,\n securityFee,\n } = ratchetEvent.data;\n\n const liquidityPromised = liquidityPromisedRaw.toBigInt();\n const newTargetPrice = newTargetPriceRaw.toBigInt();\n const oldTargetPrice = oldTargetPriceRaw.toBigInt();\n const pendingMint =\n newTargetPrice > oldTargetPrice\n ? BitcoinLock.calculateRedemptionAmount(priceIndex, newTargetPrice - oldTargetPrice)\n : liquidityPromised;\n\n return {\n txFee: txResult.finalFee ?? 0n,\n blockHeight: txResult.blockNumber!,\n bitcoinBlockHeight,\n pendingMint,\n liquidityPromised,\n lockedTargetPrice: newTargetPrice,\n burned: amountBurned.toBigInt(),\n securityFee: securityFee.toBigInt(),\n };\n };\n\n return {\n txResult,\n getRatchetResult,\n };\n }\n\n public calculateRedemptionAmount(priceIndex: PriceIndex): bigint {\n return BitcoinLock.calculateRedemptionAmountFromSatoshis(\n priceIndex,\n this.satoshis,\n this.lockedTargetPrice,\n );\n }\n\n public async requestRelease(\n args: {\n client: ArgonClient;\n priceIndex: PriceIndex;\n releaseRequest: IReleaseRequest;\n txSigner: TxSigningAccount;\n } & ISubmittableOptions,\n ): Promise<TxResult> {\n const {\n priceIndex,\n releaseRequest: { bitcoinNetworkFee, toScriptPubkey },\n txSigner,\n tip = 0n,\n client,\n } = args;\n\n if (!toScriptPubkey.startsWith('0x')) {\n throw new Error('toScriptPubkey must be a hex string starting with 0x');\n }\n\n const submitter = new TxSubmitter(\n client,\n client.tx.bitcoinLocks.requestRelease(this.utxoId, toScriptPubkey, bitcoinNetworkFee),\n txSigner,\n );\n\n const redemptionAmount = this.calculateRedemptionAmount(priceIndex);\n\n const canAfford = await submitter.canAfford({\n tip,\n unavailableBalance: BigInt(redemptionAmount),\n });\n\n if (!canAfford.canAfford) {\n throw new Error(\n `Insufficient funds to release lock. Available: ${formatArgons(canAfford.availableBalance)}, Required: ${formatArgons(redemptionAmount + canAfford.txFee + tip)}`,\n );\n }\n return submitter.submit({\n logResults: true,\n ...args,\n });\n }\n\n public async getReleaseRequest(\n client: IQueryableClient,\n ): Promise<IReleaseRequestDetails | undefined> {\n const requestMaybe = await client.query.bitcoinLocks.lockReleaseRequestsByUtxoId(this.utxoId);\n if (!requestMaybe.isSome) {\n return undefined;\n }\n const request = requestMaybe.unwrap();\n return {\n toScriptPubkey: request.toScriptPubkey.toHex(),\n bitcoinNetworkFee: request.bitcoinNetworkFee.toBigInt(),\n dueFrame: request.cosignDueFrame.toNumber(),\n vaultId: request.vaultId.toNumber(),\n redemptionAmount: getBigIntFallback(request.redemptionAmount, request, ['redemptionPrice']),\n };\n }\n\n /**\n * Finds the cosign signature for a vault lock by UTXO ID. Optionally waits for the signature\n * @param client - The Argon client with rpc access\n * @param finalizedStateOnly - If true, only checks finalized state\n * @param waitForSignatureMillis - Optional timeout in milliseconds to wait for the signature. If -1, waits indefinitely.\n */\n public async findVaultCosignSignature(\n client: ArgonClient,\n finalizedStateOnly = false,\n waitForSignatureMillis?: number,\n ): Promise<{ blockHeight: number; signature: Uint8Array } | undefined> {\n let queryClient = client as IQueryableClient;\n if (finalizedStateOnly) {\n const finalizedHead = await client.rpc.chain.getFinalizedHead();\n queryClient = await client.at(finalizedHead);\n }\n const releaseHeight = await queryClient.query.bitcoinLocks.lockReleaseCosignHeightById(\n this.utxoId,\n );\n if (releaseHeight.isSome) {\n const releaseHeightValue = releaseHeight.unwrap().toNumber();\n const signature = await this.getVaultCosignSignature(client, releaseHeightValue);\n if (signature) {\n return { blockHeight: releaseHeightValue, signature };\n }\n }\n\n if (!waitForSignatureMillis) {\n return undefined;\n }\n\n return await new Promise(async (resolve, reject) => {\n let timeout: NodeJS.Timeout | undefined;\n const unsub = await client.rpc.chain.subscribeNewHeads(header => {\n const atHeight = header.number.toNumber();\n this.getVaultCosignSignature(client, atHeight)\n .then(signature => {\n if (signature) {\n unsub?.();\n clearTimeout(timeout);\n resolve({ signature, blockHeight: atHeight });\n }\n })\n .catch(err => {\n console.error(`Error checking for cosign signature at height ${atHeight}:`, err);\n });\n });\n if (waitForSignatureMillis !== -1) {\n timeout = setTimeout(() => {\n unsub?.();\n reject(new Error(`Timeout waiting for cosign signature for UTXO ID ${this.utxoId}`));\n }, waitForSignatureMillis);\n }\n });\n }\n\n public async getVaultCosignSignature(\n client: ArgonClient,\n atHeight: number,\n ): Promise<Uint8Array | undefined> {\n const blockHash = await BitcoinLock.blockHashAtHeight(client, atHeight);\n if (!blockHash) {\n console.warn(`Block hash not found for height ${atHeight}`);\n return undefined;\n }\n\n const blockEvents = await client.at(blockHash).then(api => api.query.system.events());\n for (const event of blockEvents) {\n if (client.events.bitcoinLocks.BitcoinUtxoCosigned.is(event.event)) {\n const { utxoId: id, signature } = event.event.data;\n if (id.toNumber() === this.utxoId) {\n return new Uint8Array(signature);\n }\n }\n }\n return undefined;\n }\n\n public static async getUtxoIdFromEvents(client: IQueryableClient, events: GenericEvent[]) {\n for (const event of events) {\n if (client.events.bitcoinLocks.BitcoinLockCreated.is(event)) {\n return event.data.utxoId.toNumber();\n }\n }\n return undefined;\n }\n\n public static calculateRedemptionAmountFromSatoshis(\n priceIndex: PriceIndex,\n satoshis: bigint,\n lockedTargetPrice?: bigint,\n ): bigint {\n const btcMicrogonsAtTarget = priceIndex.getSatoshiPriceInTargetMicrogons(satoshis);\n return this.calculateRedemptionAmount(priceIndex, btcMicrogonsAtTarget, lockedTargetPrice);\n }\n\n public static calculateRedemptionAmount(\n priceIndex: PriceIndex,\n btcMicrogonsAtTarget: bigint,\n maxMicrogonsAtTarget?: bigint,\n ): bigint {\n let price = btcMicrogonsAtTarget;\n if (maxMicrogonsAtTarget !== undefined && maxMicrogonsAtTarget < btcMicrogonsAtTarget) {\n price = maxMicrogonsAtTarget;\n }\n\n const multiplierBn = this.redemptionMultiplierBn(priceIndex);\n\n return BigInt(\n new BigNumber(price.toString())\n .times(multiplierBn)\n .integerValue(BigNumber.ROUND_DOWN)\n .toFixed(0),\n );\n }\n\n private static redemptionMultiplierBn(priceIndex: PriceIndex): BigNumber {\n const r = priceIndex.rValue;\n\n if (r.gte(1)) {\n // Case 1: no penalty\n return new BigNumber(1);\n } else if (r.gte(0.9)) {\n // Case 2: quadratic curve\n // Formula: 20r² - 38r + 19\n return new BigNumber(20).times(r.pow(2)).minus(new BigNumber(38).times(r)).plus(19);\n } else if (r.gte(0.01)) {\n // Case 3: rational linear formula\n // Formula: (0.5618r + 0.3944) / r\n return new BigNumber(0.5618).times(r).plus(0.3944).div(r);\n } else {\n // Case 4: extreme deviation\n // Formula: (1 / r) * (0.576r + 0.4)\n return new BigNumber(1).div(r).times(new BigNumber(0.576).times(r).plus(0.4));\n }\n }\n\n public static async getConfig(client: IQueryableClient): Promise<IBitcoinLockConfig> {\n const bitcoinNetwork = await client.query.bitcoinUtxos.bitcoinNetwork();\n return {\n lockReleaseCosignDeadlineFrames:\n client.consts.bitcoinLocks.lockReleaseCosignDeadlineFrames.toNumber(),\n pendingConfirmationExpirationBlocks:\n client.consts.bitcoinUtxos.maxPendingConfirmationBlocks.toNumber(),\n tickDurationMillis: await client.query.ticks\n .genesisTicker()\n .then(x => x.tickDurationMillis.toNumber()),\n bitcoinNetwork,\n lockSatoshiAllowedVariance:\n client.consts.bitcoinUtxos.maximumSatoshiThresholdFromExpected?.toNumber() ?? 10_000,\n };\n }\n\n public static async getBitcoinConfirmedBlockHeight(client: IQueryableClient): Promise<number> {\n return await client.query.bitcoinUtxos\n .confirmedBitcoinBlockTip()\n .then(x => x.value?.blockHeight.toNumber() ?? 0);\n }\n\n public static async submitVaultSignature(\n args: {\n client: ArgonClient;\n utxoId: number;\n vaultSignature: Uint8Array;\n txSigner: TxSigningAccount;\n } & ISubmittableOptions,\n ): Promise<TxResult> {\n const { utxoId, vaultSignature, txSigner, client } = args;\n if (!vaultSignature || vaultSignature.byteLength < 70 || vaultSignature.byteLength > 73) {\n throw new Error(\n `Invalid vault signature length: ${vaultSignature.byteLength}. Must be 70-73 bytes.`,\n );\n }\n const signature = u8aToHex(vaultSignature);\n const tx = client.tx.bitcoinLocks.cosignRelease(utxoId, signature);\n const submitter = new TxSubmitter(client, tx, txSigner);\n\n return await submitter.submit(args);\n }\n\n public static async createIncreaseSecuritizationTx(\n args: {\n utxoId: number;\n client: ArgonClient;\n newSatoshis: bigint;\n } & ISubmittableOptions,\n ): Promise<SubmittableExtrinsic | undefined> {\n const { client, newSatoshis, utxoId } = args;\n const txBuilder = client.tx.bitcoinLocks.increaseSecuritization;\n if (!txBuilder?.meta) {\n return undefined;\n }\n return txBuilder(utxoId, newSatoshis);\n }\n\n public static async createFundWithUtxoCandidateTx(\n args: {\n client: ArgonClient;\n utxoId: number;\n utxoRef: UtxoRefLike;\n } & ISubmittableOptions,\n ): Promise<SubmittableExtrinsic | undefined> {\n const { client, utxoId, utxoRef } = args;\n const txBuilder = client.tx.bitcoinUtxos?.fundWithUtxoCandidate;\n if (!txBuilder?.meta) {\n return undefined;\n }\n return txBuilder(utxoId, normalizeUtxoRef(utxoRef));\n }\n\n public static async createOrphanedUtxoReleaseRequestTx(\n args: {\n client: ArgonClient;\n utxoRef: UtxoRefLike;\n releaseRequest: IReleaseRequest;\n } & ISubmittableOptions,\n ): Promise<SubmittableExtrinsic | undefined> {\n const {\n client,\n utxoRef,\n releaseRequest: { bitcoinNetworkFee, toScriptPubkey },\n } = args;\n\n if (!toScriptPubkey.startsWith('0x')) {\n throw new Error('toScriptPubkey must be a hex string starting with 0x');\n }\n\n const txBuilder = client.tx.bitcoinLocks.requestOrphanedUtxoRelease;\n if (!txBuilder?.meta) {\n return undefined;\n }\n\n return txBuilder(normalizeUtxoRef(utxoRef), toScriptPubkey, bitcoinNetworkFee);\n }\n\n public static async createOrphanedUtxoCosignTx(\n args: {\n client: ArgonClient;\n orphanOwner: string;\n utxoRef: UtxoRefLike;\n vaultSignature: Uint8Array;\n } & ISubmittableOptions,\n ): Promise<SubmittableExtrinsic | undefined> {\n const { client, orphanOwner, utxoRef, vaultSignature } = args;\n if (!vaultSignature || vaultSignature.byteLength < 70 || vaultSignature.byteLength > 73) {\n throw new Error(\n `Invalid vault signature length: ${vaultSignature.byteLength}. Must be 70-73 bytes.`,\n );\n }\n if (!client.tx.bitcoinLocks.cosignOrphanedUtxoRelease?.meta) {\n return undefined;\n }\n const signature = u8aToHex(vaultSignature);\n return client.tx.bitcoinLocks.cosignOrphanedUtxoRelease(\n orphanOwner,\n normalizeUtxoRef(utxoRef),\n signature,\n );\n }\n\n public static async get(\n client: IQueryableClient,\n utxoId: number,\n ): Promise<BitcoinLock | undefined> {\n const utxoRaw = await client.query.bitcoinLocks.locksByUtxoId(utxoId);\n if (!utxoRaw.isSome) {\n return;\n }\n const utxo = utxoRaw.unwrap();\n const p2shBytesPrefix = '0020';\n const wscriptHash = utxo.utxoScriptPubkey.asP2wsh.wscriptHash.toHex().replace('0x', '');\n const p2wshScriptHashHex = `0x${p2shBytesPrefix}${wscriptHash}`;\n const vaultId = utxo.vaultId.toNumber();\n const lockedTargetPrice = getBigIntFallback(utxo.lockedTargetPrice, utxo, [\n 'lockedMarketRate',\n 'peggedPrice',\n ]);\n const liquidityPromised = utxo.liquidityPromised.toBigInt();\n const ownerAccount = utxo.ownerAccount.toHuman();\n const satoshis = utxo.satoshis.toBigInt();\n const utxoSatoshis = utxo.utxoSatoshis?.isSome ? utxo.utxoSatoshis.value.toBigInt() : undefined;\n const vaultPubkey = utxo.vaultPubkey.toHex();\n const vaultClaimPubkey = utxo.vaultClaimPubkey.toHex();\n const ownerPubkey = utxo.ownerPubkey.toHex();\n const [fingerprint, cosign_hd_index, claim_hd_index] = utxo.vaultXpubSources;\n const vaultXpubSources = {\n parentFingerprint: new Uint8Array(fingerprint),\n cosignHdIndex: cosign_hd_index.toNumber(),\n claimHdIndex: claim_hd_index.toNumber(),\n };\n\n const createdAtArgonBlock = utxo.createdAtArgonBlock?.toNumber() ?? 0;\n const securityFees = utxo.securityFees.toBigInt();\n const vaultClaimHeight = utxo.vaultClaimHeight.toNumber();\n const openClaimHeight = utxo.openClaimHeight.toNumber();\n const createdAtHeight = utxo.createdAtHeight.toNumber();\n const isFunded = ((utxo as { isVerified?: bool })?.isVerified ?? utxo.isFunded).toJSON();\n const fundHoldExtensionsByBitcoinExpirationHeight = Object.fromEntries(\n [...utxo.fundHoldExtensions.entries()].map(([x, y]) => [x.toNumber(), y.toBigInt()]),\n );\n const couponFeesPaid = utxo.couponPaidFees?.toBigInt() ?? 0n;\n\n return new BitcoinLock({\n utxoId,\n p2wshScriptHashHex,\n vaultId,\n lockedTargetPrice,\n liquidityPromised,\n ownerAccount,\n satoshis,\n utxoSatoshis,\n vaultPubkey,\n vaultClaimPubkey,\n ownerPubkey,\n vaultXpubSources,\n vaultClaimHeight,\n openClaimHeight,\n createdAtHeight,\n securityFees,\n isFunded,\n couponFeesPaid,\n fundHoldExtensionsByBitcoinExpirationHeight,\n createdAtArgonBlock,\n });\n }\n\n public static async blockHashAtHeight(\n client: ArgonClient,\n atHeight: number,\n ): Promise<string | undefined> {\n for (let i = 0; i < 10; i++) {\n const currentHeight = await client.query.system.number().then(x => x.toNumber());\n if (atHeight > currentHeight) {\n console.warn(\n `Requested block height ${atHeight} is greater than current height ${currentHeight}. Retrying...`,\n );\n await new Promise(resolve => setTimeout(resolve, 1000)); // wait 1 second before retrying\n continue;\n }\n const hash = await client.rpc.chain.getBlockHash(atHeight).then(x => x.toHex());\n if (hash === '0x0000000000000000000000000000000000000000000000000000000000000000') {\n console.warn(`Block hash not found for height ${atHeight}. Retrying...`);\n await new Promise(resolve => setTimeout(resolve, 1000)); // wait 1 second before retrying\n continue;\n }\n return hash;\n }\n return undefined;\n }\n\n public static async createInitializeTx(args: {\n client: ArgonClient;\n vault: Vault;\n priceIndex: PriceIndex;\n ownerBitcoinPubkey: Uint8Array;\n satoshis: bigint;\n txSigner: TxSigningAccount;\n reducedBalanceBy?: bigint;\n microgonsAtTargetPerBtc?: bigint;\n tip?: bigint;\n initializeForAccountId?: string;\n }) {\n const {\n vault,\n priceIndex,\n txSigner,\n satoshis,\n tip = 0n,\n ownerBitcoinPubkey,\n client,\n microgonsAtTargetPerBtc = null,\n initializeForAccountId,\n } = args;\n if (ownerBitcoinPubkey.length !== 33) {\n throw new Error(\n `Invalid Bitcoin key length: ${ownerBitcoinPubkey.length}. Must be a compressed pukey (33 bytes).`,\n );\n }\n\n let tx: SubmittableExtrinsic;\n if (initializeForAccountId) {\n tx = client.tx.bitcoinLocks.initializeFor(\n initializeForAccountId,\n vault.vaultId,\n satoshis,\n ownerBitcoinPubkey,\n {\n V1: {\n microgonsAtTargetPerBtc,\n },\n },\n );\n } else {\n tx = client.tx.bitcoinLocks.initialize(vault.vaultId, satoshis, ownerBitcoinPubkey, {\n V1: {\n microgonsAtTargetPerBtc,\n },\n });\n }\n const submitter = new TxSubmitter(client, tx, txSigner);\n const targetPrice =\n microgonsAtTargetPerBtc !== null\n ? (microgonsAtTargetPerBtc * satoshis) / SATS_PER_BTC\n : priceIndex.getSatoshiPriceInTargetMicrogons(satoshis);\n const unlockAmount = this.calculateRedemptionAmount(priceIndex, targetPrice);\n const isVaultOwner = txSigner.address === vault.operatorAccountId;\n const securityFee = isVaultOwner ? 0n : vault.calculateBitcoinFee(unlockAmount);\n\n const { canAfford, availableBalance, txFee } = await submitter.canAfford({\n tip,\n unavailableBalance: securityFee + (args.reducedBalanceBy ?? 0n),\n includeExistentialDeposit: true,\n });\n return {\n tx,\n securityFee,\n txFee,\n canAfford,\n availableBalance,\n txFeePlusTip: txFee + tip,\n };\n }\n\n public static async initialize(\n args: {\n client: ArgonClient;\n vault: Vault;\n priceIndex: PriceIndex;\n ownerBitcoinPubkey: Uint8Array;\n txSigner: TxSigningAccount;\n satoshis: bigint;\n } & ISubmittableOptions,\n ): Promise<{\n getLock(): Promise<{ lock: BitcoinLock; createdAtHeight: number }>;\n txResult: TxResult;\n securityFee: bigint;\n }> {\n const { txSigner, client } = args;\n\n const { tx, securityFee, canAfford, txFeePlusTip } = await this.createInitializeTx(args);\n if (!canAfford) {\n throw new Error(\n `Insufficient funds to initialize bitcoin lock. Required security fee: ${formatArgons(securityFee)}, Tx fee plus tip: ${formatArgons(txFeePlusTip)}`,\n );\n }\n const submitter = new TxSubmitter(client, tx, txSigner);\n const txResult = await submitter.submit({ logResults: true, ...args });\n\n return {\n getLock: () => this.getBitcoinLockFromTxResult(client, txResult),\n txResult,\n securityFee,\n };\n }\n\n public static async getBitcoinLockFromTxResult(\n client: IQueryableClient,\n txResult: TxResult,\n ): Promise<{\n lock: BitcoinLock;\n createdAtHeight: number;\n txResult: TxResult;\n }> {\n await txResult.waitForFinalizedBlock;\n const blockHeight = txResult.blockNumber!;\n const utxoId = (await this.getUtxoIdFromEvents(client, txResult.events)) ?? 0;\n if (utxoId === 0) {\n throw new Error('Bitcoin lock creation failed, no UTXO ID found in transaction events');\n }\n const lock = await this.get(client, utxoId);\n if (!lock) {\n throw new Error(`Lock with ID ${utxoId} not found after initialization`);\n }\n return { lock, createdAtHeight: blockHeight, txResult };\n }\n\n public static satoshisRequiredForRedemptionAmount(\n priceIndex: PriceIndex,\n redemptionAmount: bigint,\n ): bigint {\n if (redemptionAmount <= 0n) return 0n;\n\n const multiplierBn = this.redemptionMultiplierBn(priceIndex);\n const targetMicrogonsPerBtc = priceIndex.getSatoshiPriceInTargetMicrogons(SATS_PER_BTC);\n let requiredTargetMicrogons = BigInt(\n new BigNumber(redemptionAmount.toString())\n .div(multiplierBn)\n .integerValue(BigNumber.ROUND_CEIL)\n .toFixed(0),\n );\n\n while (this.calculateRedemptionAmount(priceIndex, requiredTargetMicrogons) < redemptionAmount) {\n requiredTargetMicrogons += 1n;\n }\n\n let satoshis = BigInt(\n new BigNumber(requiredTargetMicrogons.toString())\n .times(SATS_PER_BTC.toString())\n .div(targetMicrogonsPerBtc.toString())\n .integerValue(BigNumber.ROUND_CEIL)\n .toFixed(0),\n );\n\n // The forward path floors target microgons from sats, then floors the redemption amount.\n // Verify the computed sats satisfy both boundaries, then step down to the minimal sat count.\n while (this.calculateRedemptionAmountFromSatoshis(priceIndex, satoshis) < redemptionAmount) {\n satoshis += 1n;\n }\n while (\n satoshis > 0n &&\n this.calculateRedemptionAmountFromSatoshis(priceIndex, satoshis - 1n) >= redemptionAmount\n ) {\n satoshis -= 1n;\n }\n\n return satoshis;\n }\n}\n\nexport interface IBitcoinLockConfig {\n lockReleaseCosignDeadlineFrames: number;\n pendingConfirmationExpirationBlocks: number;\n tickDurationMillis: number;\n bitcoinNetwork: ArgonPrimitivesBitcoinBitcoinNetwork;\n lockSatoshiAllowedVariance: number;\n}\nexport interface IReleaseRequest {\n toScriptPubkey: string;\n bitcoinNetworkFee: bigint;\n}\n\nexport interface IReleaseRequestDetails extends IReleaseRequest {\n dueFrame: number;\n vaultId: number;\n redemptionAmount: bigint;\n}\n\nexport interface IBitcoinLock {\n utxoId: number;\n p2wshScriptHashHex: string;\n vaultId: number;\n lockedTargetPrice: bigint;\n liquidityPromised: bigint;\n ownerAccount: string;\n satoshis: bigint;\n utxoSatoshis?: bigint;\n vaultPubkey: string;\n securityFees: bigint;\n couponFeesPaid: bigint;\n vaultClaimPubkey: string;\n ownerPubkey: string;\n vaultXpubSources: {\n parentFingerprint: Uint8Array;\n cosignHdIndex: number;\n claimHdIndex: number;\n };\n vaultClaimHeight: number;\n openClaimHeight: number;\n createdAtHeight: number;\n isFunded: boolean;\n createdAtArgonBlock: number;\n fundHoldExtensionsByBitcoinExpirationHeight: Record<number, bigint>;\n}\n","import type { ArgonClient } from './index';\nimport { FIXED_U128_DECIMALS, fromFixedNumber } from './convert';\nimport { MICROGONS_PER_ARGON } from './utils';\nimport BigNumber from 'bignumber.js';\nimport { ApiDecoration } from '@polkadot/api/types';\n\nconst SATS_PER_BTC = 100_000_000n;\n\nexport class PriceIndex {\n btcUsdPrice?: BigNumber;\n argonotUsdPrice?: BigNumber;\n argonUsdPrice?: BigNumber;\n argonUsdTargetPrice?: BigNumber;\n argonTimeWeightedAverageLiquidity?: BigNumber;\n lastUpdatedTick?: number;\n\n async load(client: ArgonClient | ApiDecoration<'promise'>): Promise<this> {\n const current = await client.query.priceIndex.current();\n if (!current.isSome) {\n this.argonUsdPrice = undefined;\n this.argonotUsdPrice = undefined;\n this.btcUsdPrice = undefined;\n this.argonUsdTargetPrice = undefined;\n this.argonTimeWeightedAverageLiquidity = undefined;\n this.lastUpdatedTick = undefined;\n return this;\n }\n const value = current.unwrap();\n\n this.btcUsdPrice = fromFixedNumber(value.btcUsdPrice.toBigInt(), FIXED_U128_DECIMALS);\n this.argonotUsdPrice = fromFixedNumber(value.argonotUsdPrice.toBigInt(), FIXED_U128_DECIMALS);\n this.argonUsdPrice = fromFixedNumber(value.argonUsdPrice.toBigInt(), FIXED_U128_DECIMALS);\n this.argonUsdTargetPrice = fromFixedNumber(\n value.argonUsdTargetPrice.toBigInt(),\n FIXED_U128_DECIMALS,\n );\n this.argonTimeWeightedAverageLiquidity = fromFixedNumber(\n value.argonTimeWeightedAverageLiquidity.toBigInt(),\n FIXED_U128_DECIMALS,\n );\n this.lastUpdatedTick = value.tick.toNumber();\n return this;\n }\n\n getSatoshiPriceInMarketMicrogons(satoshis: bigint | number): bigint {\n if (this.btcUsdPrice === undefined || this.argonUsdPrice === undefined) {\n throw new Error('PriceIndex not loaded');\n }\n\n const satoshiCents = this.btcUsdPrice.multipliedBy(satoshis).dividedBy(SATS_PER_BTC);\n\n const microgons = satoshiCents.multipliedBy(MICROGONS_PER_ARGON).dividedBy(this.argonUsdPrice);\n return BigInt(microgons.integerValue(BigNumber.ROUND_DOWN).toString());\n }\n\n getSatoshiPriceInTargetMicrogons(satoshis: bigint | number): bigint {\n if (this.btcUsdPrice === undefined || this.argonUsdTargetPrice === undefined) {\n throw new Error('PriceIndex not loaded');\n }\n\n const satoshiCents = this.btcUsdPrice.multipliedBy(satoshis).dividedBy(SATS_PER_BTC);\n\n const microgons = satoshiCents\n .multipliedBy(MICROGONS_PER_ARGON)\n .dividedBy(this.argonUsdTargetPrice);\n return BigInt(microgons.integerValue(BigNumber.ROUND_DOWN).toString());\n }\n\n get rValue(): BigNumber {\n if (this.argonUsdTargetPrice === undefined || this.argonUsdPrice === undefined) {\n throw new Error('PriceIndex not loaded');\n }\n return this.argonUsdPrice.div(this.argonUsdTargetPrice);\n }\n\n get argonCpi(): BigNumber {\n if (this.argonUsdTargetPrice === undefined || this.argonUsdPrice === undefined) {\n throw new Error('PriceIndex not loaded');\n }\n const ratio = this.argonUsdTargetPrice.div(this.argonUsdPrice);\n return ratio.minus(1);\n }\n}\n","import type { Abi, Hex } from 'viem';\nimport {\n ArgonTokenEvents,\n ArgonotTokenEvents,\n CanonicalMintableBurnableERC20Events,\n ICanonicalTokenEvents,\n MINTING_GATEWAY_RUNTIME_DECIMALS,\n MINTING_GATEWAY_RUNTIME_TO_ERC20_SCALE,\n MINTING_GATEWAY_TOKEN_DECIMALS,\n MINTING_GATEWAY_UPDATE_KINDS,\n MintingGatewayEvents,\n ProxyAdminEvents,\n TransparentUpgradeableProxyEvents,\n argonTokenAbi,\n argonTokenArtifact as rawArgonTokenArtifact,\n argonotTokenAbi,\n argonotTokenArtifact as rawArgonotTokenArtifact,\n canonicalMintableBurnableErc20Abi,\n encodeMintingGatewayCouncilSnapshot,\n encodeMintingGatewayGlobalIssuanceCouncilRotateTarget,\n encodeMintingGatewayMintingAuthorityActivationTarget,\n encodeMintingGatewayMintingAuthorityDeactivateTarget,\n hashMintingGatewayActivateMintingAuthority,\n hashMintingGatewayActivateMintingAuthorityApproval,\n hashMintingGatewayGatewayUpdateApproval,\n hashMintingGatewayGlobalIssuanceCouncil,\n hashMintingGatewayMintingAuthority,\n hashMintingGatewayMintingAuthorization as rawHashMintingGatewayMintingAuthorization,\n hashMintingGatewayRotateGlobalIssuanceCouncil,\n hashMintingGatewayRotateGlobalIssuanceCouncilApproval,\n hashMintingGatewayTransferOutOfArgonRequest as rawHashMintingGatewayTransferOutOfArgonRequest,\n iCanonicalTokenAbi,\n mintingGatewayAbi,\n mintingGatewayArtifact as rawMintingGatewayArtifact,\n proxyAdminAbi,\n proxyAdminArtifact as rawProxyAdminArtifact,\n transparentUpgradeableProxyAbi,\n transparentUpgradeableProxyArtifact as rawTransparentUpgradeableProxyArtifact,\n} from '@argonprotocol/ethereum-contracts';\n\nexport type * from '@argonprotocol/ethereum-contracts';\n\nexport type EvmContractArtifact = {\n abi: Abi;\n bytecode: Hex;\n};\n\nexport const argonTokenArtifact = rawArgonTokenArtifact as EvmContractArtifact;\nexport const argonotTokenArtifact = rawArgonotTokenArtifact as EvmContractArtifact;\nexport const mintingGatewayArtifact = rawMintingGatewayArtifact as EvmContractArtifact;\nexport const proxyAdminArtifact = rawProxyAdminArtifact as EvmContractArtifact;\nexport const transparentUpgradeableProxyArtifact =\n rawTransparentUpgradeableProxyArtifact as EvmContractArtifact;\n\nexport type MintingGatewayTransferOutOfArgonRequest = Parameters<\n typeof rawHashMintingGatewayTransferOutOfArgonRequest\n>[0];\n\nexport function hashMintingGatewayTransferOutOfArgonRequest(\n request: MintingGatewayTransferOutOfArgonRequest,\n) {\n return rawHashMintingGatewayTransferOutOfArgonRequest(request);\n}\n\nexport function hashMintingGatewayMintingAuthorization(\n gateway: Parameters<typeof rawHashMintingGatewayMintingAuthorization>[0],\n authorization: Omit<\n Parameters<typeof rawHashMintingGatewayMintingAuthorization>[1],\n 'request'\n > & {\n request: MintingGatewayTransferOutOfArgonRequest;\n },\n) {\n return rawHashMintingGatewayMintingAuthorization(gateway, authorization);\n}\n\nexport {\n ArgonTokenEvents,\n ArgonotTokenEvents,\n CanonicalMintableBurnableERC20Events,\n ICanonicalTokenEvents,\n MINTING_GATEWAY_RUNTIME_DECIMALS,\n MINTING_GATEWAY_RUNTIME_TO_ERC20_SCALE,\n MINTING_GATEWAY_TOKEN_DECIMALS,\n MINTING_GATEWAY_UPDATE_KINDS,\n MintingGatewayEvents,\n ProxyAdminEvents,\n TransparentUpgradeableProxyEvents,\n argonTokenAbi,\n argonotTokenAbi,\n canonicalMintableBurnableErc20Abi,\n encodeMintingGatewayCouncilSnapshot,\n encodeMintingGatewayGlobalIssuanceCouncilRotateTarget,\n encodeMintingGatewayMintingAuthorityActivationTarget,\n encodeMintingGatewayMintingAuthorityDeactivateTarget,\n hashMintingGatewayActivateMintingAuthority,\n hashMintingGatewayActivateMintingAuthorityApproval,\n hashMintingGatewayGatewayUpdateApproval,\n hashMintingGatewayGlobalIssuanceCouncil,\n hashMintingGatewayMintingAuthority,\n hashMintingGatewayRotateGlobalIssuanceCouncil,\n hashMintingGatewayRotateGlobalIssuanceCouncilApproval,\n iCanonicalTokenAbi,\n mintingGatewayAbi,\n proxyAdminAbi,\n transparentUpgradeableProxyAbi,\n};\n","{\n \"_format\": \"hh3-artifact-1\",\n \"contractName\": \"ArgonToken\",\n \"sourceName\": \"contracts/ArgonToken.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"gateway\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"ECDSAInvalidSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"length\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ECDSAInvalidSignatureLength\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"ECDSAInvalidSignatureS\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientAllowance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"balance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientBalance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"approver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidApprover\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidReceiver\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSpender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC2612ExpiredSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signer\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC2612InvalidSigner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"currentNonce\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InvalidAccountNonce\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"gateway\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"InvalidGateway\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidShortString\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"caller\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OnlyGateway\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"str\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"StringTooLong\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [],\n \"name\": \"EIP712DomainChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DOMAIN_SEPARATOR\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"burnFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"eip712Domain\",\n \"outputs\": [\n {\n \"internalType\": \"bytes1\",\n \"name\": \"fields\",\n \"type\": \"bytes1\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"version\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"verifyingContract\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"salt\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"extensions\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"gateway\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"nonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"permit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x610180604052348015610010575f5ffd5b506040516114c63803806114c683398101604081905261002f9161022a565b6040518060400160405280600581526020016420b933b7b760d91b8152506040518060400160405280600481526020016320a923a760e11b815250828280604051806040016040528060018152602001603160f81b8152508585816003908161009891906102fa565b5060046100a582826102fa565b506100b5915083905060056101bb565b610120526100c48160066101bb565b61014052815160208084019190912060e052815190820120610100524660a05261015060e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b038116158061017857506001600160a01b0381163b155b156101a557604051628ecbc360e51b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b03166101605250610410915050565b5f6020835110156101d6576101cf836101ed565b90506101e7565b816101e184826102fa565b5060ff90505b92915050565b5f5f829050601f81511115610217578260405163305a27a960e01b815260040161019c91906103b8565b8051610222826103ed565b179392505050565b5f6020828403121561023a575f5ffd5b81516001600160a01b0381168114610250575f5ffd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061027f57607f821691505b60208210810361029d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156102f557828211156102f557805f5260205f20601f840160051c60208510156102ce57505f5b90810190601f840160051c035f5b818110156102f1575f838201556001016102dc565b5050505b505050565b81516001600160401b0381111561031357610313610257565b61032781610321845461026b565b846102a3565b6020601f821160018114610359575f83156103425750848201515b5f19600385901b1c1916600184901b1784556103b1565b5f84815260208120601f198516915b828110156103885787850151825560209485019460019092019101610368565b50848210156103a557868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561029d575f1960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516101605161104d6104795f395f81816101450152818161038401526103e201525f61089801525f61086b01525f6107ac01525f61078401525f6106df01525f61070901525f610733015261104d5ff3fe608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c806370a082311161009357806395d89b411161006357806395d89b4114610239578063a9059cbb14610241578063d505accf14610254578063dd62ed3e14610267575f5ffd5b806370a08231146101d057806379cc6790146101f85780637ecebe001461020b57806384b0196e1461021e575f5ffd5b806323b872dd116100ce57806323b872dd14610191578063313ce567146101a45780633644e515146101b357806340c10f19146101bb575f5ffd5b806306fdde03146100ff578063095ea7b31461011d578063116191b61461014057806318160ddd1461017f575b5f5ffd5b61010761029f565b6040516101149190610dc9565b60405180910390f35b61013061012b366004610dfd565b61032f565b6040519015158152602001610114565b6101677f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610114565b6002545b604051908152602001610114565b61013061019f366004610e25565b610348565b60405160128152602001610114565b61018361036b565b6101ce6101c9366004610dfd565b610379565b005b6101836101de366004610e5f565b6001600160a01b03165f9081526020819052604090205490565b6101ce610206366004610dfd565b6103d7565b610183610219366004610e5f565b610437565b610226610454565b6040516101149796959493929190610e78565b610107610496565b61013061024f366004610dfd565b6104a5565b6101ce610262366004610f0e565b6104b2565b610183610275366004610f7b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546102ae90610fac565b80601f01602080910402602001604051908101604052809291908181526020018280546102da90610fac565b80156103255780601f106102fc57610100808354040283529160200191610325565b820191905f5260205f20905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b5f3361033c8185856105e8565b60019150505b92915050565b5f336103558582856105fa565b610360858585610676565b506001949350505050565b5f6103746106d3565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103c957604051634ca65edb60e11b81523360048201526024015b60405180910390fd5b6103d382826107fc565b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461042257604051634ca65edb60e11b81523360048201526024016103c0565b61042d8233836105fa565b6103d38282610830565b6001600160a01b0381165f90815260076020526040812054610342565b5f6060805f5f5f6060610465610864565b61046d610891565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102ae90610fac565b5f3361033c818585610676565b834211156104d65760405163313c898160e11b8152600481018590526024016103c0565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886105218c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61057b826108be565b90505f61058a828787876108ea565b9050896001600160a01b0316816001600160a01b0316146105d1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016103c0565b6105dc8a8a8a6105e8565b50505050505050505050565b6105f58383836001610916565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610670578181101561066257604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103c0565b61067084848484035f610916565b50505050565b6001600160a01b03831661069f57604051634b637e8f60e11b81525f60048201526024016103c0565b6001600160a01b0382166106c85760405163ec442f0560e01b81525f60048201526024016103c0565b6105f58383836109e8565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561072b57507f000000000000000000000000000000000000000000000000000000000000000046145b1561075557507f000000000000000000000000000000000000000000000000000000000000000090565b610374604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166108255760405163ec442f0560e01b81525f60048201526024016103c0565b6103d35f83836109e8565b6001600160a01b03821661085957604051634b637e8f60e11b81525f60048201526024016103c0565b6103d3825f836109e8565b60606103747f00000000000000000000000000000000000000000000000000000000000000006005610b0e565b60606103747f00000000000000000000000000000000000000000000000000000000000000006006610b0e565b5f6103426108ca6106d3565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f6108fa88888888610bb7565b92509250925061090a8282610c7f565b50909695505050505050565b6001600160a01b03841661093f5760405163e602df0560e01b81525f60048201526024016103c0565b6001600160a01b03831661096857604051634a1406b160e11b81525f60048201526024016103c0565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561067057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109da91815260200190565b60405180910390a350505050565b6001600160a01b038316610a12578060025f828254610a079190610fe4565b90915550610a829050565b6001600160a01b0383165f9081526020819052604090205481811015610a645760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103c0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610a9e57600280548290039055610abc565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0191815260200190565b60405180910390a3505050565b606060ff8314610b2857610b2183610d37565b9050610342565b818054610b3490610fac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090610fac565b8015610bab5780601f10610b8257610100808354040283529160200191610bab565b820191905f5260205f20905b815481529060010190602001808311610b8e57829003601f168201915b50505050509050610342565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610bf057505f91506003905082610c75565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610c41573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c6c57505f925060019150829050610c75565b92505f91508190505b9450945094915050565b5f826003811115610c9257610c92611003565b03610c9b575050565b6001826003811115610caf57610caf611003565b03610ccd5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ce157610ce1611003565b03610d025760405163fce698f760e01b8152600481018290526024016103c0565b6003826003811115610d1657610d16611003565b036103d3576040516335e2f38360e21b8152600481018290526024016103c0565b60605f610d4383610d74565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561034257604051632cd44ac360e21b815260040160405180910390fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610ddb6020830184610d9b565b9392505050565b80356001600160a01b0381168114610df8575f5ffd5b919050565b5f5f60408385031215610e0e575f5ffd5b610e1783610de2565b946020939093013593505050565b5f5f5f60608486031215610e37575f5ffd5b610e4084610de2565b9250610e4e60208501610de2565b929592945050506040919091013590565b5f60208284031215610e6f575f5ffd5b610ddb82610de2565b60ff60f81b8816815260e060208201525f610e9660e0830189610d9b565b8281036040840152610ea88189610d9b565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015610efd578351835260209384019390920191600101610edf565b50909b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a031215610f24575f5ffd5b610f2d88610de2565b9650610f3b60208901610de2565b95506040880135945060608801359350608088013560ff81168114610f5e575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610f8c575f5ffd5b610f9583610de2565b9150610fa360208401610de2565b90509250929050565b600181811c90821680610fc057607f821691505b602082108103610fde57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561034257634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220d85934bd5cd2b7cf394a709cc65749b23a8dc5a166ec28e0f61ff06755d34dde64736f6c63430008230033\",\n \"deployedBytecode\": \"0x608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c806370a082311161009357806395d89b411161006357806395d89b4114610239578063a9059cbb14610241578063d505accf14610254578063dd62ed3e14610267575f5ffd5b806370a08231146101d057806379cc6790146101f85780637ecebe001461020b57806384b0196e1461021e575f5ffd5b806323b872dd116100ce57806323b872dd14610191578063313ce567146101a45780633644e515146101b357806340c10f19146101bb575f5ffd5b806306fdde03146100ff578063095ea7b31461011d578063116191b61461014057806318160ddd1461017f575b5f5ffd5b61010761029f565b6040516101149190610dc9565b60405180910390f35b61013061012b366004610dfd565b61032f565b6040519015158152602001610114565b6101677f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610114565b6002545b604051908152602001610114565b61013061019f366004610e25565b610348565b60405160128152602001610114565b61018361036b565b6101ce6101c9366004610dfd565b610379565b005b6101836101de366004610e5f565b6001600160a01b03165f9081526020819052604090205490565b6101ce610206366004610dfd565b6103d7565b610183610219366004610e5f565b610437565b610226610454565b6040516101149796959493929190610e78565b610107610496565b61013061024f366004610dfd565b6104a5565b6101ce610262366004610f0e565b6104b2565b610183610275366004610f7b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546102ae90610fac565b80601f01602080910402602001604051908101604052809291908181526020018280546102da90610fac565b80156103255780601f106102fc57610100808354040283529160200191610325565b820191905f5260205f20905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b5f3361033c8185856105e8565b60019150505b92915050565b5f336103558582856105fa565b610360858585610676565b506001949350505050565b5f6103746106d3565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103c957604051634ca65edb60e11b81523360048201526024015b60405180910390fd5b6103d382826107fc565b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461042257604051634ca65edb60e11b81523360048201526024016103c0565b61042d8233836105fa565b6103d38282610830565b6001600160a01b0381165f90815260076020526040812054610342565b5f6060805f5f5f6060610465610864565b61046d610891565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102ae90610fac565b5f3361033c818585610676565b834211156104d65760405163313c898160e11b8152600481018590526024016103c0565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886105218c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61057b826108be565b90505f61058a828787876108ea565b9050896001600160a01b0316816001600160a01b0316146105d1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016103c0565b6105dc8a8a8a6105e8565b50505050505050505050565b6105f58383836001610916565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610670578181101561066257604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103c0565b61067084848484035f610916565b50505050565b6001600160a01b03831661069f57604051634b637e8f60e11b81525f60048201526024016103c0565b6001600160a01b0382166106c85760405163ec442f0560e01b81525f60048201526024016103c0565b6105f58383836109e8565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561072b57507f000000000000000000000000000000000000000000000000000000000000000046145b1561075557507f000000000000000000000000000000000000000000000000000000000000000090565b610374604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166108255760405163ec442f0560e01b81525f60048201526024016103c0565b6103d35f83836109e8565b6001600160a01b03821661085957604051634b637e8f60e11b81525f60048201526024016103c0565b6103d3825f836109e8565b60606103747f00000000000000000000000000000000000000000000000000000000000000006005610b0e565b60606103747f00000000000000000000000000000000000000000000000000000000000000006006610b0e565b5f6103426108ca6106d3565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f6108fa88888888610bb7565b92509250925061090a8282610c7f565b50909695505050505050565b6001600160a01b03841661093f5760405163e602df0560e01b81525f60048201526024016103c0565b6001600160a01b03831661096857604051634a1406b160e11b81525f60048201526024016103c0565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561067057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109da91815260200190565b60405180910390a350505050565b6001600160a01b038316610a12578060025f828254610a079190610fe4565b90915550610a829050565b6001600160a01b0383165f9081526020819052604090205481811015610a645760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103c0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610a9e57600280548290039055610abc565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0191815260200190565b60405180910390a3505050565b606060ff8314610b2857610b2183610d37565b9050610342565b818054610b3490610fac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090610fac565b8015610bab5780601f10610b8257610100808354040283529160200191610bab565b820191905f5260205f20905b815481529060010190602001808311610b8e57829003601f168201915b50505050509050610342565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610bf057505f91506003905082610c75565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610c41573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c6c57505f925060019150829050610c75565b92505f91508190505b9450945094915050565b5f826003811115610c9257610c92611003565b03610c9b575050565b6001826003811115610caf57610caf611003565b03610ccd5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ce157610ce1611003565b03610d025760405163fce698f760e01b8152600481018290526024016103c0565b6003826003811115610d1657610d16611003565b036103d3576040516335e2f38360e21b8152600481018290526024016103c0565b60605f610d4383610d74565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561034257604051632cd44ac360e21b815260040160405180910390fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610ddb6020830184610d9b565b9392505050565b80356001600160a01b0381168114610df8575f5ffd5b919050565b5f5f60408385031215610e0e575f5ffd5b610e1783610de2565b946020939093013593505050565b5f5f5f60608486031215610e37575f5ffd5b610e4084610de2565b9250610e4e60208501610de2565b929592945050506040919091013590565b5f60208284031215610e6f575f5ffd5b610ddb82610de2565b60ff60f81b8816815260e060208201525f610e9660e0830189610d9b565b8281036040840152610ea88189610d9b565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015610efd578351835260209384019390920191600101610edf565b50909b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a031215610f24575f5ffd5b610f2d88610de2565b9650610f3b60208901610de2565b95506040880135945060608801359350608088013560ff81168114610f5e575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610f8c575f5ffd5b610f9583610de2565b9150610fa360208401610de2565b90509250929050565b600181811c90821680610fc057607f821691505b602082108103610fde57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561034257634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220d85934bd5cd2b7cf394a709cc65749b23a8dc5a166ec28e0f61ff06755d34dde64736f6c63430008230033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {},\n \"immutableReferences\": {\n \"6252\": [\n {\n \"length\": 32,\n \"start\": 1843\n }\n ],\n \"6254\": [\n {\n \"length\": 32,\n \"start\": 1801\n }\n ],\n \"6256\": [\n {\n \"length\": 32,\n \"start\": 1759\n }\n ],\n \"6258\": [\n {\n \"length\": 32,\n \"start\": 1924\n }\n ],\n \"6260\": [\n {\n \"length\": 32,\n \"start\": 1964\n }\n ],\n \"6263\": [\n {\n \"length\": 32,\n \"start\": 2155\n }\n ],\n \"6266\": [\n {\n \"length\": 32,\n \"start\": 2200\n }\n ],\n \"10253\": [\n {\n \"length\": 32,\n \"start\": 325\n },\n {\n \"length\": 32,\n \"start\": 900\n },\n {\n \"length\": 32,\n \"start\": 994\n }\n ]\n },\n \"inputSourceName\": \"project/contracts/ArgonToken.sol\",\n \"buildInfoId\": \"solc-0_8_35-beb8df952405ec55b2bc54201ffcd6097ae4e14a\"\n}","{\n \"_format\": \"hh3-artifact-1\",\n \"contractName\": \"ArgonotToken\",\n \"sourceName\": \"contracts/ArgonotToken.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"gateway\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"ECDSAInvalidSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"length\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ECDSAInvalidSignatureLength\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"ECDSAInvalidSignatureS\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientAllowance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"balance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientBalance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"approver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidApprover\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidReceiver\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSpender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC2612ExpiredSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signer\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC2612InvalidSigner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"currentNonce\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InvalidAccountNonce\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"gateway\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"InvalidGateway\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidShortString\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"caller\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OnlyGateway\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"str\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"StringTooLong\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [],\n \"name\": \"EIP712DomainChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DOMAIN_SEPARATOR\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"burnFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"eip712Domain\",\n \"outputs\": [\n {\n \"internalType\": \"bytes1\",\n \"name\": \"fields\",\n \"type\": \"bytes1\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"version\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"verifyingContract\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"salt\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"extensions\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"gateway\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"nonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"permit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x610180604052348015610010575f5ffd5b506040516114ca3803806114ca83398101604081905261002f9161022e565b60405180604001604052806007815260200166105c99dbdb9bdd60ca1b81525060405180604001604052806006815260200165105491d393d560d21b815250828280604051806040016040528060018152602001603160f81b8152508585816003908161009c91906102fe565b5060046100a982826102fe565b506100b9915083905060056101bf565b610120526100c88160066101bf565b61014052815160208084019190912060e052815190820120610100524660a05261015460e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b038116158061017c57506001600160a01b0381163b155b156101a957604051628ecbc360e51b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b03166101605250610414915050565b5f6020835110156101da576101d3836101f1565b90506101eb565b816101e584826102fe565b5060ff90505b92915050565b5f5f829050601f8151111561021b578260405163305a27a960e01b81526004016101a091906103bc565b8051610226826103f1565b179392505050565b5f6020828403121561023e575f5ffd5b81516001600160a01b0381168114610254575f5ffd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061028357607f821691505b6020821081036102a157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156102f957828211156102f957805f5260205f20601f840160051c60208510156102d257505f5b90810190601f840160051c035f5b818110156102f5575f838201556001016102e0565b5050505b505050565b81516001600160401b038111156103175761031761025b565b61032b81610325845461026f565b846102a7565b6020601f82116001811461035d575f83156103465750848201515b5f19600385901b1c1916600184901b1784556103b5565b5f84815260208120601f198516915b8281101561038c578785015182556020948501946001909201910161036c565b50848210156103a957868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102a1575f1960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516101605161104d61047d5f395f81816101450152818161038401526103e201525f61089801525f61086b01525f6107ac01525f61078401525f6106df01525f61070901525f610733015261104d5ff3fe608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c806370a082311161009357806395d89b411161006357806395d89b4114610239578063a9059cbb14610241578063d505accf14610254578063dd62ed3e14610267575f5ffd5b806370a08231146101d057806379cc6790146101f85780637ecebe001461020b57806384b0196e1461021e575f5ffd5b806323b872dd116100ce57806323b872dd14610191578063313ce567146101a45780633644e515146101b357806340c10f19146101bb575f5ffd5b806306fdde03146100ff578063095ea7b31461011d578063116191b61461014057806318160ddd1461017f575b5f5ffd5b61010761029f565b6040516101149190610dc9565b60405180910390f35b61013061012b366004610dfd565b61032f565b6040519015158152602001610114565b6101677f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610114565b6002545b604051908152602001610114565b61013061019f366004610e25565b610348565b60405160128152602001610114565b61018361036b565b6101ce6101c9366004610dfd565b610379565b005b6101836101de366004610e5f565b6001600160a01b03165f9081526020819052604090205490565b6101ce610206366004610dfd565b6103d7565b610183610219366004610e5f565b610437565b610226610454565b6040516101149796959493929190610e78565b610107610496565b61013061024f366004610dfd565b6104a5565b6101ce610262366004610f0e565b6104b2565b610183610275366004610f7b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546102ae90610fac565b80601f01602080910402602001604051908101604052809291908181526020018280546102da90610fac565b80156103255780601f106102fc57610100808354040283529160200191610325565b820191905f5260205f20905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b5f3361033c8185856105e8565b60019150505b92915050565b5f336103558582856105fa565b610360858585610676565b506001949350505050565b5f6103746106d3565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103c957604051634ca65edb60e11b81523360048201526024015b60405180910390fd5b6103d382826107fc565b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461042257604051634ca65edb60e11b81523360048201526024016103c0565b61042d8233836105fa565b6103d38282610830565b6001600160a01b0381165f90815260076020526040812054610342565b5f6060805f5f5f6060610465610864565b61046d610891565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102ae90610fac565b5f3361033c818585610676565b834211156104d65760405163313c898160e11b8152600481018590526024016103c0565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886105218c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61057b826108be565b90505f61058a828787876108ea565b9050896001600160a01b0316816001600160a01b0316146105d1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016103c0565b6105dc8a8a8a6105e8565b50505050505050505050565b6105f58383836001610916565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610670578181101561066257604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103c0565b61067084848484035f610916565b50505050565b6001600160a01b03831661069f57604051634b637e8f60e11b81525f60048201526024016103c0565b6001600160a01b0382166106c85760405163ec442f0560e01b81525f60048201526024016103c0565b6105f58383836109e8565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561072b57507f000000000000000000000000000000000000000000000000000000000000000046145b1561075557507f000000000000000000000000000000000000000000000000000000000000000090565b610374604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166108255760405163ec442f0560e01b81525f60048201526024016103c0565b6103d35f83836109e8565b6001600160a01b03821661085957604051634b637e8f60e11b81525f60048201526024016103c0565b6103d3825f836109e8565b60606103747f00000000000000000000000000000000000000000000000000000000000000006005610b0e565b60606103747f00000000000000000000000000000000000000000000000000000000000000006006610b0e565b5f6103426108ca6106d3565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f6108fa88888888610bb7565b92509250925061090a8282610c7f565b50909695505050505050565b6001600160a01b03841661093f5760405163e602df0560e01b81525f60048201526024016103c0565b6001600160a01b03831661096857604051634a1406b160e11b81525f60048201526024016103c0565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561067057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109da91815260200190565b60405180910390a350505050565b6001600160a01b038316610a12578060025f828254610a079190610fe4565b90915550610a829050565b6001600160a01b0383165f9081526020819052604090205481811015610a645760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103c0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610a9e57600280548290039055610abc565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0191815260200190565b60405180910390a3505050565b606060ff8314610b2857610b2183610d37565b9050610342565b818054610b3490610fac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090610fac565b8015610bab5780601f10610b8257610100808354040283529160200191610bab565b820191905f5260205f20905b815481529060010190602001808311610b8e57829003601f168201915b50505050509050610342565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610bf057505f91506003905082610c75565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610c41573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c6c57505f925060019150829050610c75565b92505f91508190505b9450945094915050565b5f826003811115610c9257610c92611003565b03610c9b575050565b6001826003811115610caf57610caf611003565b03610ccd5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ce157610ce1611003565b03610d025760405163fce698f760e01b8152600481018290526024016103c0565b6003826003811115610d1657610d16611003565b036103d3576040516335e2f38360e21b8152600481018290526024016103c0565b60605f610d4383610d74565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561034257604051632cd44ac360e21b815260040160405180910390fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610ddb6020830184610d9b565b9392505050565b80356001600160a01b0381168114610df8575f5ffd5b919050565b5f5f60408385031215610e0e575f5ffd5b610e1783610de2565b946020939093013593505050565b5f5f5f60608486031215610e37575f5ffd5b610e4084610de2565b9250610e4e60208501610de2565b929592945050506040919091013590565b5f60208284031215610e6f575f5ffd5b610ddb82610de2565b60ff60f81b8816815260e060208201525f610e9660e0830189610d9b565b8281036040840152610ea88189610d9b565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015610efd578351835260209384019390920191600101610edf565b50909b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a031215610f24575f5ffd5b610f2d88610de2565b9650610f3b60208901610de2565b95506040880135945060608801359350608088013560ff81168114610f5e575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610f8c575f5ffd5b610f9583610de2565b9150610fa360208401610de2565b90509250929050565b600181811c90821680610fc057607f821691505b602082108103610fde57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561034257634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220a3276167a60dc36c592042d07732eea9655ac58439d35808227b8582ad099a0064736f6c63430008230033\",\n \"deployedBytecode\": \"0x608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c806370a082311161009357806395d89b411161006357806395d89b4114610239578063a9059cbb14610241578063d505accf14610254578063dd62ed3e14610267575f5ffd5b806370a08231146101d057806379cc6790146101f85780637ecebe001461020b57806384b0196e1461021e575f5ffd5b806323b872dd116100ce57806323b872dd14610191578063313ce567146101a45780633644e515146101b357806340c10f19146101bb575f5ffd5b806306fdde03146100ff578063095ea7b31461011d578063116191b61461014057806318160ddd1461017f575b5f5ffd5b61010761029f565b6040516101149190610dc9565b60405180910390f35b61013061012b366004610dfd565b61032f565b6040519015158152602001610114565b6101677f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610114565b6002545b604051908152602001610114565b61013061019f366004610e25565b610348565b60405160128152602001610114565b61018361036b565b6101ce6101c9366004610dfd565b610379565b005b6101836101de366004610e5f565b6001600160a01b03165f9081526020819052604090205490565b6101ce610206366004610dfd565b6103d7565b610183610219366004610e5f565b610437565b610226610454565b6040516101149796959493929190610e78565b610107610496565b61013061024f366004610dfd565b6104a5565b6101ce610262366004610f0e565b6104b2565b610183610275366004610f7b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546102ae90610fac565b80601f01602080910402602001604051908101604052809291908181526020018280546102da90610fac565b80156103255780601f106102fc57610100808354040283529160200191610325565b820191905f5260205f20905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b5f3361033c8185856105e8565b60019150505b92915050565b5f336103558582856105fa565b610360858585610676565b506001949350505050565b5f6103746106d3565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103c957604051634ca65edb60e11b81523360048201526024015b60405180910390fd5b6103d382826107fc565b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461042257604051634ca65edb60e11b81523360048201526024016103c0565b61042d8233836105fa565b6103d38282610830565b6001600160a01b0381165f90815260076020526040812054610342565b5f6060805f5f5f6060610465610864565b61046d610891565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102ae90610fac565b5f3361033c818585610676565b834211156104d65760405163313c898160e11b8152600481018590526024016103c0565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886105218c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61057b826108be565b90505f61058a828787876108ea565b9050896001600160a01b0316816001600160a01b0316146105d1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016103c0565b6105dc8a8a8a6105e8565b50505050505050505050565b6105f58383836001610916565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610670578181101561066257604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103c0565b61067084848484035f610916565b50505050565b6001600160a01b03831661069f57604051634b637e8f60e11b81525f60048201526024016103c0565b6001600160a01b0382166106c85760405163ec442f0560e01b81525f60048201526024016103c0565b6105f58383836109e8565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561072b57507f000000000000000000000000000000000000000000000000000000000000000046145b1561075557507f000000000000000000000000000000000000000000000000000000000000000090565b610374604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166108255760405163ec442f0560e01b81525f60048201526024016103c0565b6103d35f83836109e8565b6001600160a01b03821661085957604051634b637e8f60e11b81525f60048201526024016103c0565b6103d3825f836109e8565b60606103747f00000000000000000000000000000000000000000000000000000000000000006005610b0e565b60606103747f00000000000000000000000000000000000000000000000000000000000000006006610b0e565b5f6103426108ca6106d3565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f6108fa88888888610bb7565b92509250925061090a8282610c7f565b50909695505050505050565b6001600160a01b03841661093f5760405163e602df0560e01b81525f60048201526024016103c0565b6001600160a01b03831661096857604051634a1406b160e11b81525f60048201526024016103c0565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561067057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109da91815260200190565b60405180910390a350505050565b6001600160a01b038316610a12578060025f828254610a079190610fe4565b90915550610a829050565b6001600160a01b0383165f9081526020819052604090205481811015610a645760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103c0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610a9e57600280548290039055610abc565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0191815260200190565b60405180910390a3505050565b606060ff8314610b2857610b2183610d37565b9050610342565b818054610b3490610fac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090610fac565b8015610bab5780601f10610b8257610100808354040283529160200191610bab565b820191905f5260205f20905b815481529060010190602001808311610b8e57829003601f168201915b50505050509050610342565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610bf057505f91506003905082610c75565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610c41573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c6c57505f925060019150829050610c75565b92505f91508190505b9450945094915050565b5f826003811115610c9257610c92611003565b03610c9b575050565b6001826003811115610caf57610caf611003565b03610ccd5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ce157610ce1611003565b03610d025760405163fce698f760e01b8152600481018290526024016103c0565b6003826003811115610d1657610d16611003565b036103d3576040516335e2f38360e21b8152600481018290526024016103c0565b60605f610d4383610d74565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561034257604051632cd44ac360e21b815260040160405180910390fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610ddb6020830184610d9b565b9392505050565b80356001600160a01b0381168114610df8575f5ffd5b919050565b5f5f60408385031215610e0e575f5ffd5b610e1783610de2565b946020939093013593505050565b5f5f5f60608486031215610e37575f5ffd5b610e4084610de2565b9250610e4e60208501610de2565b929592945050506040919091013590565b5f60208284031215610e6f575f5ffd5b610ddb82610de2565b60ff60f81b8816815260e060208201525f610e9660e0830189610d9b565b8281036040840152610ea88189610d9b565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015610efd578351835260209384019390920191600101610edf565b50909b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a031215610f24575f5ffd5b610f2d88610de2565b9650610f3b60208901610de2565b95506040880135945060608801359350608088013560ff81168114610f5e575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610f8c575f5ffd5b610f9583610de2565b9150610fa360208401610de2565b90509250929050565b600181811c90821680610fc057607f821691505b602082108103610fde57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561034257634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220a3276167a60dc36c592042d07732eea9655ac58439d35808227b8582ad099a0064736f6c63430008230033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {},\n \"immutableReferences\": {\n \"6252\": [\n {\n \"length\": 32,\n \"start\": 1843\n }\n ],\n \"6254\": [\n {\n \"length\": 32,\n \"start\": 1801\n }\n ],\n \"6256\": [\n {\n \"length\": 32,\n \"start\": 1759\n }\n ],\n \"6258\": [\n {\n \"length\": 32,\n \"start\": 1924\n }\n ],\n \"6260\": [\n {\n \"length\": 32,\n \"start\": 1964\n }\n ],\n \"6263\": [\n {\n \"length\": 32,\n \"start\": 2155\n }\n ],\n \"6266\": [\n {\n \"length\": 32,\n \"start\": 2200\n }\n ],\n \"10253\": [\n {\n \"length\": 32,\n \"start\": 325\n },\n {\n \"length\": 32,\n \"start\": 900\n },\n {\n \"length\": 32,\n \"start\": 994\n }\n ]\n },\n \"inputSourceName\": \"project/contracts/ArgonotToken.sol\",\n \"buildInfoId\": \"solc-0_8_35-beb8df952405ec55b2bc54201ffcd6097ae4e14a\"\n}","{\n \"_format\": \"hh3-artifact-1\",\n \"contractName\": \"MintingGateway\",\n \"sourceName\": \"contracts/MintingGateway.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"argonTokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"argonotTokenAddress\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"ArrayLengthMismatch\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ECDSAInvalidSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"length\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ECDSAInvalidSignatureLength\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"ECDSAInvalidSignatureS\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"EnforcedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExpectedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"GlobalIssuanceCouncilNotBootstrapped\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"GlobalIssuanceCouncilQuorumNotMet\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"authorized\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"required\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InsufficientAuthorizedCollateral\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"expected\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"provided\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"InvalidChainId\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"expected\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"provided\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"InvalidCurrentCouncilSnapshot\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InvalidGlobalIssuanceCouncilMember\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidMicrogonCollateralForArgonotPayout\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"InvalidMintingAuthority\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"expected\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"provided\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"InvalidQueueNonce\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"expected\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"provided\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InvalidSignatureCount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidSignatureOrder\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxRate\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"providedRate\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"InvalidTransferOutRate\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"kind\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"InvalidUpdateKind\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"MigrationAlreadyCompleted\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"MintingAuthorityAlreadyActive\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"MintingAuthorityTransferCapacityExceeded\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"caller\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotGuardianOrOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"RuntimeAmountOverflow\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"maxAllowed\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"provided\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TooManyGatewayUpdates\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"maxAllowed\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"provided\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TooManyMintingAuthorizations\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"transferId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"TransferOutOfArgonAlreadyFinalized\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"currentBlock\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"validUntilBlock\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TransferOutOfArgonExpired\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"currentBlock\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"validUntilBlock\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TransferOutOfArgonNotExpired\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"UnsupportedToken\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroAdminSafe\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroAmount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroGuardian\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroMicrogonsPerArgonot\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ZeroRecipient\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroSigningKey\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"councilHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"GlobalIssuanceCouncilBootstrapped\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousCouncilHash\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"councilHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"GlobalIssuanceCouncilForceUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"councilHash\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"approvalHash\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"relayerArgonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"gatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonApprovalsNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonCirculation\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonotCirculation\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.GatewayActivityState\",\n \"name\": \"gatewayState\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"GlobalIssuanceCouncilRotated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousGuardian\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newGuardian\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"GuardianUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"argonRecipientCount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"argonTotalAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"argonotRecipientCount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"argonotTotalAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"MigrationCompleted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"microgonCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"micronotCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint32\",\n \"name\": \"coactivationCount\",\n \"type\": \"uint32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint32\",\n \"name\": \"sharedSignatureCount\",\n \"type\": \"uint32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"approvalHash\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"relayerArgonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"gatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonApprovalsNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonCirculation\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonotCirculation\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.GatewayActivityState\",\n \"name\": \"gatewayState\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"MintingAuthorityActivated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"microgonCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"micronotCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"approvalHash\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"relayerArgonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"gatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonApprovalsNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonCirculation\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonotCirculation\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.GatewayActivityState\",\n \"name\": \"gatewayState\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"MintingAuthorityDeactivated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"transferId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"gatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonApprovalsNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonCirculation\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonotCirculation\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.GatewayActivityState\",\n \"name\": \"gatewayState\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"TransferOutOfArgonCanceled\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"transferId\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"amount\",\n \"type\": \"uint128\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"microgonCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"micronotCollateral\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.MintingAuthorityCollateral[]\",\n \"name\": \"mintingCollateral\",\n \"type\": \"tuple[]\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"gatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonApprovalsNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonCirculation\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonotCirculation\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.GatewayActivityState\",\n \"name\": \"gatewayState\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"TransferOutOfArgonFinalized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"amount\",\n \"type\": \"uint128\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"argonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"gatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonApprovalsNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonCirculation\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonotCirculation\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.GatewayActivityState\",\n \"name\": \"gatewayState\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"TransferToArgonStarted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"ACTIVITY_HASH_VERSION\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MAX_GATEWAY_UPDATES_PER_BATCH\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MAX_MINTING_AUTHORIZATIONS_PER_TRANSFER\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"RUNTIME_DECIMALS\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"RUNTIME_TO_ERC20_SCALE\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"TOKEN_DECIMALS\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"locatorIndex\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"activityBlockLocators\",\n \"outputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"blockNumber\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"startGatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"endGatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"activityRoot\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"activityBlockLocatorsMappingSlot\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"slot\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"signers\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"weights\",\n \"type\": \"uint256[]\"\n }\n ],\n \"internalType\": \"struct MintingGateway.CouncilSnapshot\",\n \"name\": \"currentCouncil\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"queueNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"enum MintingGateway.GatewayUpdateKind\",\n \"name\": \"kind\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"payload\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"signatures\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct MintingGateway.GatewayUpdate[]\",\n \"name\": \"updates\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"relayerArgonAccountId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"applyGatewayUpdates\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"argonApprovalsHash\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"argonApprovalsNonce\",\n \"outputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"\",\n \"type\": \"uint64\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"argonCirculation\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"argonToken\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"argonotCirculation\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"argonotToken\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"argonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonTransferNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"chainId\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"microgonsPerArgonot\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"validUntilBlock\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"amount\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"mintingAuthorityTip\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct MintingGateway.TransferOutOfArgonRequest\",\n \"name\": \"request\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"cancelTransferOutOfArgon\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"argonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonTransferNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"chainId\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"microgonsPerArgonot\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"validUntilBlock\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"amount\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"mintingAuthorityTip\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct MintingGateway.TransferOutOfArgonRequest\",\n \"name\": \"request\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"microgonCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"micronotCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"internalType\": \"struct MintingGateway.MintingAuthorization[]\",\n \"name\": \"authorizations\",\n \"type\": \"tuple[]\"\n }\n ],\n \"internalType\": \"struct MintingGateway.TransferOutOfArgonProof\",\n \"name\": \"proof\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"finalizeTransferOutOfArgon\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"transferId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"finalizedTransferOutOfArgonIds\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"isFinalized\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"signers\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"weights\",\n \"type\": \"uint256[]\"\n }\n ],\n \"internalType\": \"struct MintingGateway.CouncilSnapshot\",\n \"name\": \"nextCouncil\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"nextMicrogonsPerArgonot\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"forceUpdateActiveCouncil\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"gatewayActivityNonce\",\n \"outputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"\",\n \"type\": \"uint64\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"globalIssuanceCouncil\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"totalWeight\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"memberCount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"councilHash\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"epochMicrogonsPerArgonot\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"guardian\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"adminSafe\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"guardianAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"councilHash\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"councilMemberCount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"councilTotalWeight\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"initialMicrogonsPerArgonot\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"latestActivityBlockLocatorIndex\",\n \"outputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"\",\n \"type\": \"uint64\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxTransferOutMicrogonsPerArgonot\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"recipients\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amounts\",\n \"type\": \"uint256[]\"\n }\n ],\n \"internalType\": \"struct MintingGateway.MigrationAssetDistribution\",\n \"name\": \"argonMigration\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"recipients\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amounts\",\n \"type\": \"uint256[]\"\n }\n ],\n \"internalType\": \"struct MintingGateway.MigrationAssetDistribution\",\n \"name\": \"argonotMigration\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"migrate\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"migrationCompleted\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"mintingAuthorityCollateralRemaining\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"microgonCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"micronotCollateral\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"guardianAddress\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setGuardian\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"amount\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"argonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"startTransferToArgon\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"amount\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"toTokenAmount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60c060405234801561000f575f5ffd5b50604051614c61380380614c6183398101604081905261002e9161011d565b6001600160a01b03808316608052811660a052610049610050565b505061014e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a05760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100ff5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b0381168114610118575f5ffd5b919050565b5f5f6040838503121561012e575f5ffd5b61013783610102565b915061014560208401610102565b90509250929050565b60805160a051614ab36101ae5f395f8181610325015281816113bd0152818161147f01528181611d6d0152611dff01525f818161046d01528181610c30015281816110f90152818161137a01528181611d3c0152611dc20152614ab35ff3fe608060405234801561000f575f5ffd5b506004361061021e575f3560e01c80636e2c77691161012a5780638da5cb5b116100b4578063d68d631111610079578063d68d631114610529578063e52580a61461053c578063ecec10a4146105b9578063f1982c67146105cc578063f2fde38b146105d3575f5ffd5b80638da5cb5b146104aa578063905d031f146104b2578063a3eb896114610505578063beabb5911461050e578063c017c90214610516575f5ffd5b80637c9afa67116100fa5780637c9afa671461043e57806380a126211461046057806383a4d591146104685780638456cb591461048f5780638a0dac4a14610497575f5ffd5b80636e2c7769146104085780636e888c461461041b578063715018a61461042e57806378d350e014610436575f5ffd5b80632ef29f3b116101ab578063452a93201161017b578063452a9320146103c757806359b23872146103d95780635b7f415c146103e15780635c975abb146103e95780635cadf6e814610400575f5ffd5b80632ef29f3b1461036757806331677980146103885780633f4ba83a146103ac578063422ad8f6146103b4575f5ffd5b806318a8f1f0116101f157806318a8f1f0146102945780631a5d93fd146102a75780631c1eeae1146102ef5780631e07f89e146103205780632ceeddf51461035f575f5ffd5b8063014c72f61461022257806309af0e3c14610237578063138f87811461026757806316dd172d1461027a575b5f5ffd5b610235610230366004613dea565b6105e6565b005b60085461024a906001600160801b031681565b6040516001600160801b0390911681526020015b60405180910390f35b610235610275366004613e45565b61071d565b610282600181565b60405160ff909116815260200161025e565b6102356102a2366004613eae565b610f41565b6004546005546006546007546102c6939291906001600160801b031684565b604080519485526020850193909352918301526001600160801b0316606082015260800161025e565b5f5461030890600160a01b90046001600160401b031681565b6040516001600160401b03909116815260200161025e565b6103477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025e565b61024a6110f3565b61037a610375366004613f1b565b611181565b60405190815260200161025e565b60035461039c90600160401b900460ff1681565b604051901515815260200161025e565b6102356111b2565b6102356103c2366004613f34565b6111c4565b5f54610347906001600160a01b031681565b61037a61131f565b610282601281565b5f516020614a5e5f395f51905f525460ff1661039c565b61037a601981565b600154610308906001600160401b031681565b610235610429366004613f4f565b611339565b610235611468565b61024a611479565b61039c61044c366004613fb2565b600a6020525f908152604090205460ff1681565b61037a606481565b6103477f000000000000000000000000000000000000000000000000000000000000000081565b6102356114d9565b6102356104a5366004613fc9565b611534565b6103476115b2565b6104e56104c0366004613fc9565b60096020525f90815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b0393841681529290911660208301520161025e565b61037a60025481565b610282600681565b610235610524366004613fe2565b6115e0565b600354610308906001600160401b031681565b61058461054a36600461403d565b600b6020525f9081526040902080546001909101546001600160401b0380831692600160401b8104821692600160801b9091049091169084565b60405161025e94939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b6102356105c7366004614063565b6117fa565b600b61037a565b6102356105e1366004613fc9565b611a90565b6105ee611acd565b806001600160801b03165f0361061757604051632440a7dd60e01b815260040160405180910390fd5b5f808061069d6106278680614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250610665925050506020880188614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250899250611aff915050565b6040805160808101825260045481526005546020820152600654918101919091526007546001600160801b0316606082015292955090935091506106e384848488611c1d565b8381604001517f33e53e90d61fdc868629a6234670f92c4445196f3f98ebd71935bbc76c7d915360405160405180910390a3505050505050565b610725611c6e565b61072e82611c9e565b61074661074160e0840160c08501613fc9565b611d08565b610757610100830160e08401613f1b565b6001600160801b03165f0361077f57604051631f2a200560e01b815260040160405180910390fd5b601961078b8280614102565b905011156107c757601961079f8280614102565b60405163e126b42160e01b815260048101939093526024830152506044015b60405180910390fd5b6107d760c0830160a0840161403d565b6001600160401b031643111561082357436107f860c0840160a0850161403d565b604051635728c7dd60e11b815260048101929092526001600160401b031660248201526044016107be565b5f61082d83611e5d565b905061083881611f67565b6108486080840160608501613f1b565b6001600160801b03165f0361087057604051632440a7dd60e01b815260040160405180910390fd5b6008546001600160801b03168061088d6080860160608701613f1b565b6001600160801b031611156108d957806108ad6080860160608701613f1b565b6040516343082d3360e01b81526001600160801b039283166004820152911660248201526044016107be565b5f8080806108e78780614102565b90506001600160401b0381111561090057610900614147565b60405190808252806020026020018201604052801561094957816020015b604080516060810182525f80825260208083018290529282015282525f1990920191018161091e5790505b5090505f5b6109588880614102565b9050811015610c25573661096c8980614102565b8381811061097c5761097c61415b565b905060200281019061098e919061416f565b90505f610a016109ef6109bd8d6109a86020870187613f1b565b6109b86040880160208901613f1b565b611f99565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b6109fc604085018561418d565b612026565b9050846001600160a01b0316816001600160a01b031611610a35576040516309cf9e4960e11b815260040160405180910390fd5b6001600160a01b0381165f90815260096020908152604090912090610a5c90840184613f1b565b81546001600160801b0391821691161080610a9c5750610a826040840160208501613f1b565b81546001600160801b03918216600160801b909104909116105b15610ac5576040516364fc3cd160e11b81526001600160a01b03831660048201526024016107be565b610ad26020840184613f1b565b815482905f90610aec9084906001600160801b03166141e3565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550826020016020810190610b239190613f1b565b81548290601090610b45908490600160801b90046001600160801b03166141e3565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550825f016020810190610b7b9190613f1b565b610b859089614202565b9750610b976040840160208501613f1b565b610ba19088614202565b96506040518060600160405280836001600160a01b03168152602001845f016020810190610bcf9190613f1b565b6001600160801b03168152602001846020016020810190610bf09190613f1b565b6001600160801b0316815250858581518110610c0e57610c0e61415b565b60209081029190910101525093505060010161094e565b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610c6060e08a0160c08b01613fc9565b6001600160a01b031603610d2e575f610c7b6006600a6142fc565b610c8b60808b0160608c01613f1b565b6001600160801b0316856001600160801b0316610ca8919061430a565b610cb29190614321565b90505f610cc8826001600160801b038816614340565b9050610cdb6101008b0160e08c01613f1b565b6001600160801b0316811015610d275780610cfd6101008c0160e08d01613f1b565b60405162f9825560e61b815260048101929092526001600160801b031660248201526044016107be565b5050610dbd565b6001600160801b03841615610d5657604051630994a0f360e11b815260040160405180910390fd5b610d67610100890160e08a01613f1b565b6001600160801b0316836001600160801b03161015610dbd5782610d926101008a0160e08b01613f1b565b60405162f9825560e61b81526001600160801b039283166004820152911660248201526044016107be565b610ddb865f908152600a60205260409020805460ff19166001179055565b610deb60e0890160c08a01613fc9565b6001600160a01b03166340c10f19610e0960a08b0160808c01613fc9565b610e1d6103756101008d0160e08e01613f1b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015610e60575f5ffd5b505af1158015610e72573d5f5f3e3d5ffd5b50505f8054909250610e9f9150610e9a90600160a01b90046001600160401b03166001614353565b612050565b9050610ed881610ed389610eb960e08e0160c08f01613fc9565b8d60e0016020810190610ecc9190613f1b565b87876120c5565b6121a0565b7f64d79900ed82270f744ae62db527f4e328e336d8b51e77bc72601391fe779d0687610f0a60e08c0160c08d01613fc9565b610f1b6101008d0160e08e01613f1b565b8585604051610f2e959493929190614424565b60405180910390a1505050505050505050565b610f49611c6e565b610f5287611d08565b856001600160801b03165f03610f7b57604051631f2a200560e01b815260040160405180910390fd5b5f610f8587611181565b60405163d505accf60e01b8152336004820152306024820152604481018290526064810187905260ff8616608482015260a4810185905260c481018490529091506001600160a01b0389169063d505accf9060e4015f604051808303815f87803b158015610ff1575f5ffd5b505af1158015611003573d5f5f3e3d5ffd5b505060405163079cc67960e41b8152336004820152602481018490526001600160a01b038b1692506379cc679091506044015f604051808303815f87803b15801561104c575f5ffd5b505af115801561105e573d5f5f3e3d5ffd5b50505f80549092506110869150610e9a90600160a01b90046001600160401b03166001614353565b905061109981610ed3338c8c8c87612461565b886001600160a01b0316336001600160a01b03167f3ab970a848f33363427e47cfbd7a627af0c6e72757f150137e38cef3cee24d938a8a856040516110e09392919061446c565b60405180910390a3505050505050505050565b5f61117c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611153573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111779190614490565b6124f8565b905090565b5f61118e600660126144a7565b61119990600a6142fc565b6111ac906001600160801b03841661430a565b92915050565b6111ba611acd565b6111c2612548565b565b6111cc611c6e565b6111d581611c9e565b6111e861074160e0830160c08401613fc9565b6111f9610100820160e08301613f1b565b6001600160801b03165f0361122157604051631f2a200560e01b815260040160405180910390fd5b61123160c0820160a0830161403d565b6001600160401b0316431161127c574361125160c0830160a0840161403d565b6040516374276dcf60e11b815260048101929092526001600160401b031660248201526044016107be565b5f61128682611e5d565b905061129181611f67565b6112af815f908152600a60205260409020805460ff19166001179055565b5f80546112d190610e9a90600160a01b90046001600160401b03166001614353565b90506112e181610ed384846125a7565b7f3cb8789e9bf6f532eec2bc8ffee9b622fc0d6e6daefb7fb6bb2e2f7b2d62e45282826040516113129291906144c0565b60405180910390a1505050565b61132b600660126144a7565b61133690600a6142fc565b81565b611341611acd565b611349611c6e565b600354600160401b900460ff161561137457604051633dbff3b560e01b815260040160405180910390fd5b5f6113b57f00000000000000000000000000000000000000000000000000000000000000006113a38580614102565b6113b06020880188614102565b612631565b90505f6113e67f00000000000000000000000000000000000000000000000000000000000000006113a38580614102565b6003805460ff60401b1916600160401b17905590507fc255ddc45163282f24909556f7475ab4ec8eb1d51763b25a4560cee9f43d06456114268580614102565b9050836114338680614102565b60405161145a94939250869093845260208401929092526040830152606082015260800190565b60405180910390a150505050565b611470611acd565b6111c25f612770565b5f61117c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611153573d5f5f3e3d5ffd5b5f546001600160a01b0316331480159061150c57506114f66115b2565b6001600160a01b0316336001600160a01b031614155b1561152c5760405163354de03160e21b81523360048201526024016107be565b6111c26127e0565b61153c611acd565b6001600160a01b0381166115635760405163a91f6a8960e01b815260040160405180910390fd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f064d28d3d3071c5cbc271a261c10c2f0f0d9e319390397101aa0eb23c6bad9099190a35050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b5f6115e9612828565b805490915060ff600160401b82041615906001600160401b03165f8115801561160f5750825b90505f826001600160401b0316600114801561162a5750303b155b905081158015611638575080155b156116565760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561168057845460ff60401b1916600160401b1785555b6001600160a01b038b166116a7576040516314030c0360e11b815260040160405180910390fd5b6001600160a01b038a166116ce5760405163a91f6a8960e01b815260040160405180910390fd5b8815806116d9575087155b806116e2575086155b156117025760405163665c282b60e01b81525f60048201526024016107be565b856001600160801b03165f0361172b57604051632440a7dd60e01b815260040160405180910390fd5b6117348b612850565b61173c612861565b5f80546001600160a01b0319166001600160a01b038c1617905561176289888a89611c1d565b600880546001600160801b0319166001600160801b03881617905560405189907fac3566d46c25f65b48d269870da4b9349704c79de13ad49b115532834d7e7ed1905f90a283156117ed57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b611802611c6e565b606482111561182e5760405163384b869360e21b815260646004820152602481018390526044016107be565b60065461184e57604051632c1dfd4f60e11b815260040160405180910390fd5b5f61185885612869565b6002549091505f8061186a8787612a2b565b90925090505f8615611886576118816001886144d4565b611888565b5f5b90505f5b87811015611a8457368989838181106118a7576118a761415b565b90506020028101906118b991906144e7565b60018054919250838514915f916118d9916001600160401b031690614353565b90506001600160401b0381166118f2602085018561403d565b6001600160401b03161461193a578061190e602085018561403d565b604051635efa452960e11b81526001600160401b039283166004820152911660248201526044016107be565b5f61194a848b604001518b612cd6565b905061195884828c86612e4c565b600261196a604086016020870161450f565b600281111561197b5761197b6144fb565b036119925761198b84828d612eb4565b9850611a75565b5f6119a3604086016020870161450f565b60028111156119b4576119b46144fb565b036119ce576119c484828d612ffb565b909a509850611a75565b60016119e0604086016020870161450f565b60028111156119f1576119f16144fb565b03611a355761198b84828a8881518110611a0d57611a0d61415b565b60200260200101518a8981518110611a2757611a2761415b565b60200260200101518f6131a9565b611a45604085016020860161450f565b6002811115611a5657611a566144fb565b60405163b99607f960e01b815260ff90911660048201526024016107be565b5050505080600101905061188c565b50505050505050505050565b611a98611acd565b6001600160a01b038116611ac157604051631e4fbdf760e01b81525f60048201526024016107be565b611aca81612770565b50565b33611ad66115b2565b6001600160a01b0316146111c25760405163118cdaa760e01b81523360048201526024016107be565b5f5f5f85515f03611b255760405163665c282b60e01b81525f60048201526024016107be565b8451865114611b475760405163512509d360e11b815260040160405180910390fd5b5f805b8751811015611c01575f888281518110611b6657611b6661415b565b602002602001015190505f888381518110611b8357611b8361415b565b602002602001015190505f6001600160a01b0316826001600160a01b03161480611bab575080155b80611bc85750836001600160a01b0316826001600160a01b031611155b15611be95760405163665c282b60e01b8152600481018490526024016107be565b611bf38187614340565b955090925050600101611b4a565b5086519150611c1187878761340c565b93505093509350939050565b60408051608081018252848152602081018490529081018590526001600160801b039091166060909101819052600492909255600555600691909155600780546001600160801b0319169091179055565b5f516020614a5e5f395f51905f525460ff16156111c25760405163d93c066560e01b815260040160405180910390fd5b466001600160401b038116611cb9606084016040850161403d565b6001600160401b031614611d045780611cd8606084016040850161403d565b6040516332e3634d60e21b81526001600160401b039283166004820152911660248201526044016107be565b5050565b6001600160a01b038116611d3a57604051635f8b555b60e11b81526001600160a01b03821660048201526024016107be565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580611d9757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b15611dc057604051635f8b555b60e11b81526001600160a01b03821660048201526024016107be565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614158015611e3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15611aca57604051635f8b555b60e11b81526001600160a01b03821660048201526024016107be565b5f8135611e70604084016020850161403d565b611e80606085016040860161403d565b611e906080860160608701613f1b565b611ea060a0870160808801613fc9565b611eb060c0880160a0890161403d565b611ec060e0890160c08a01613fc9565b611ed16101008a0160e08b01613f1b565b611ee36101208b016101008c01613f1b565b60408051602081019a909a526001600160401b03988916908a015295871660608901526001600160801b0394851660808901526001600160a01b0393841660a08901529590911660c08701521660e085015291821661010084015216610120820152610140015b604051602081830303815290604052805190602001209050919050565b5f818152600a602052604090205460ff1615611aca57604051632910aca360e01b8152600481018290526024016107be565b5f7f28bf99522b0d2f26a76cdeda71578156383bbae91175ca503165cfdbbd1ff34a4630611fc687611e5d565b6040805160208101959095528401929092526001600160a01b0316606083015260808201526001600160801b0380851660a0830152831660c082015260e0015b6040516020818303038152906040528051906020012090505b9392505050565b5f5f5f5f612035878787613422565b9250925092506120458282613469565b509095945050505050565b604080516080810182525f808252602082018190529181018290526060810191909152604080516080810182526001600160401b03808516825260015416602082015290810161209e6110f3565b6001600160801b031681526020016120b4611479565b6001600160801b0316905292915050565b5f7f6bf7256f4c4f60df0bd918b509bf742c125b14ab72c967f949c0c3e504d4d62560014630898989896040516020016120ff919061452d565b6040516020818303038152906040528051906020012061211e8a613521565b60408051602081019a909a5260ff9098169789019790975260608801959095526001600160a01b03938416608088015260a08701929092529190911660c08501526001600160801b031660e0840152610100830152610120820152610140015b6040516020818303038152906040528051906020012090505b95945050505050565b81515f80546001600160401b03808416600160a01b0267ffffffffffffffff60a01b199092169190911782556003544392911690036122cf576003805467ffffffffffffffff19166001179055604080516080810182526001600160401b03838116825284166020820181905291810191909152606081016122225f86613533565b905260015f52600b602090815281517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf80549284015160408501516001600160401b03908116600160801b0267ffffffffffffffff60801b19928216600160401b026001600160801b031990961694909116939093179390931792909216179055606001517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d05550505050565b6003546001600160401b039081165f908152600b602052604090208054909183811691160361233657805467ffffffffffffffff60801b1916600160801b6001600160401b03851602178155600181015461232a9085613533565b60019091015550505050565b6003545f9061234f906001600160401b03166001614353565b6003805467ffffffffffffffff19166001600160401b0383811691909117909155604080516080808201835287841682528884166020808401829052838501919091528351918201845287548086168352600160401b8104861691830191909152600160801b9004909316918301919091526001850154606080840191909152929350918201906123e9906123e390613555565b88613533565b90526001600160401b039182165f908152600b60209081526040918290208351815492850151938501518616600160801b0267ffffffffffffffff60801b19948716600160401b026001600160801b031990941691909616179190911791909116929092178255606001516001909101555050505050565b5f7ff1cdefdf363279c2a6d861bb708536f5c8470b6fb59f43e01f67bb3f168e7b1f60014630898989896124948a613521565b60408051602081019a909a5260ff9098169789019790975260608801959095526001600160a01b03938416608088015291831660a08701529190911660c08501526001600160801b031660e08401526101008301526101208201526101400161217e565b5f80612506600660126144a7565b61251190600a6142fc565b61251b9084614321565b90506001600160801b038111156111ac57604051639940a77560e01b8152600481018290526024016107be565b6125506135ad565b5f516020614a5e5f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b5f7febf24d41f9ef23280fd74eb80f9ce85e35b83fb7cf6aa2c52a07c20f981978c660014630866125d787613521565b60408051602081019790975260ff9095169486019490945260608501929092526001600160a01b0316608084015260a083015260c082015260e0015b60405160208183030381529060405280519060200120905092915050565b5f8382146126525760405163512509d360e11b815260040160405180910390fd5b5f5b84811015612766575f86868381811061266f5761266f61415b565b90506020020160208101906126849190613fc9565b90505f8585848181106126995761269961415b565b60200291909101359150506001600160a01b0382166126ce57604051633bca2f5160e21b8152600481018490526024016107be565b805f036126ee57604051631f2a200560e01b815260040160405180910390fd5b6040516340c10f1960e01b81526001600160a01b038381166004830152602482018390528a16906340c10f19906044015f604051808303815f87803b158015612735575f5ffd5b505af1158015612747573d5f5f3e3d5ffd5b5050505080846127579190614340565b93505050806001019050612654565b5095945050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6127e8611c6e565b5f516020614a5e5f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612589565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006111ac565b6128586135dc565b611aca81613601565b6111c26135dc565b6128986040518060a0016040528060608152602001606081526020015f81526020015f81526020015f81525090565b5f80806129296128a88680614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506128e6925050506020880188614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250506007546001600160801b03169150611aff9050565b9250925092506004600201548314158061294557506004548214155b8061295257506005548114155b1561297e57600654604051633b21437560e21b81526004810191909152602481018490526044016107be565b6040805160a08101909152806129948780614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050908252506020908101906129d990880188614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050908252506020810194909452604084019290925260609092019190915292915050565b606080826001600160401b03811115612a4657612a46614147565b604051908082528060200260200182016040528015612a6f578160200160208202803683370190505b509150826001600160401b03811115612a8a57612a8a614147565b604051908082528060200260200182016040528015612ab3578160200160208202803683370190505b5090508215612ccf575f836001600160401b03811115612ad557612ad5614147565b604051908082528060200260200182016040528015612afe578160200160208202803683370190505b5090505f8080612b0f6001886144d4565b90505f5b87811015612cc9575f898983818110612b2e57612b2e61415b565b9050602002810190612b4091906144e7565b612b5190604081019060200161450f565b90506001816002811115612b6757612b676144fb565b03612ba65781868663ffffffff1681518110612b8557612b8561415b565b63ffffffff90921660209283029190910190910152612ba38561453f565b94505b5f80826002811115612bba57612bba6144fb565b1480612bc557508383145b905080612bd3575050612cc1565b8a8a84818110612be557612be561415b565b9050602002810190612bf791906144e7565b612c05906060810190614102565b612c10915086614563565b94508563ffffffff165f03612c26575050612cc1565b5f5b8663ffffffff16811015612cb7575f888281518110612c4957612c4961415b565b602002602001015163ffffffff169050878b8281518110612c6c57612c6c61415b565b602002602001019063ffffffff16908163ffffffff1681525050868a8281518110612c9957612c9961415b565b63ffffffff9092166020928302919091019091015250600101612c28565b505f95505f945050505b600101612b13565b50505050505b9250929050565b5f6001612ce9604086016020870161450f565b6002811115612cfa57612cfa6144fb565b03612d49575f612d0d604086018661418d565b810190612d1a91906145d7565b9050612d41612d2c602087018761403d565b85835f01518460200151856040015188613609565b91505061201f565b6002612d5b604086016020870161450f565b6002811115612d6c57612d6c6144fb565b03612de1575f612d7f604086018661418d565b810190612d8c9190614642565b9050612d41612d9e602087018761403d565b825186906002906001600160a01b03168551604080516001600160a01b039092166020830152016040516020818303038152906040528051906020012088613639565b5f612df2604086016020870161450f565b6002811115612e0357612e036144fb565b03611a35575f612e16604086018661418d565b810190612e23919061470d565b9050612d41612e35602087018761403d565b8251805160209182015191850151889290886136ec565b5f612e5d604086016020870161450f565b6002811115612e6e57612e6e6144fb565b14158015612e7a575080155b612eae57612eae83612e8f6060870187614102565b612e9891614843565b845160208601516060870151608088015161371f565b50505050565b5f80612ec3604086018661418d565b810190612ed09190614642565b80519091506001600160a01b0316612efb5760405163611b32ab60e01b815260040160405180910390fd5b80516001600160a01b039081165f9081526009602090815260408083208054865190951684529083209290925590916001600160801b0380821692600160801b9092041690612f4c9089018961403d565b6001805467ffffffffffffffff19166001600160401b0392831617815560028990555f80549092612f8b92610e9a92600160a01b900490911690614353565b9050612fa281610ed3875f015186868d8d88613764565b845f01516001600160a01b03167f0b4ee788c9bfc3c405fb19e3f6137bf14a218c0dbc53c13a6ed07a225d360ebc84848b8b86604051612fe6959493929190614903565b60405180910390a25095979650505050505050565b61302a6040518060a0016040528060608152602001606081526020015f81526020015f81526020015f81525090565b5f80613039604087018761418d565b810190613046919061470d565b905080602001516001600160801b03165f0361307557604051632440a7dd60e01b815260040160405180910390fd5b5f5f5f613094845f01515f0151855f0151602001518660200151611aff565b8093508194508295505050506130b08383838760200151611c1d565b602084810151600880546001600160801b0319166001600160801b039092169190911790556130e1908a018a61403d565b6001805467ffffffffffffffff19166001600160401b0392831617815560028a90555f8054909261312092610e9a92600160a01b900490911690614353565b905061313281610ed3868c8c86613802565b7fee5f0b6612e124988e865e18a4c4b0ec70d2f263708bb1e17f6de867fb1fe1c2848a8a846040516131679493929190614937565b60405180910390a1506040805160a08101825285515181529451602090810151908601528401929092526060830152608082015291508390505b935093915050565b5f806131b8604088018861418d565b8101906131c591906145d7565b60408101519091506001600160a01b03166131f35760405163611b32ab60e01b815260040160405180910390fd5b80516001600160801b0316158015613216575060208101516001600160801b0316155b15613245576040808201519051632edcd91760e21b81526001600160a01b0390911660048201526024016107be565b63ffffffff8516158061325c575063ffffffff8416155b1561328b576040808201519051632edcd91760e21b81526001600160a01b0390911660048201526024016107be565b6040808201516001600160a01b03165f90815260096020522080546001600160801b03161515806132cc57508054600160801b90046001600160801b031615155b156132fb57604080830151905163cb96603760e01b81526001600160a01b0390911660048201526024016107be565b60408051808201825283516001600160801b0390811682526020808601518216818401908152868501516001600160a01b03165f9081526009835294909420925193518216600160801b029390911692909217905561335c9089018961403d565b6001805467ffffffffffffffff19166001600160401b0392831617815560028990555f8054909261339b92610e9a92600160a01b900490911690614353565b90506133bc81610ed38560400151865f015187602001518c8c8f8d8a61389e565b82604001516001600160a01b03167f9023f1e3e253ad361005d72868d790c37ca6f53a03d522ebc93dca42154e15bf845f015185602001518a8a8d8b88604051612fe69796959493929190614959565b5f838383604051602001612006939291906149a1565b5f80806041849003613456578435602086013560408701355f1a61344889828585613973565b955095509550505050613460565b505f915060029050825b93509350939050565b5f82600381111561347c5761347c6144fb565b03613485575050565b6001826003811115613499576134996144fb565b036134b75760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156134cb576134cb6144fb565b036134ec5760405163fce698f760e01b8152600481018290526024016107be565b6003826003811115613500576135006144fb565b03611d04576040516335e2f38360e21b8152600481018290526024016107be565b5f81604051602001611f4a9190614a37565b6040805160016020820152908101839052606081018290525f90608001612613565b5f6001825f0151836020015184604001518560600151604051602001611f4a95949392919060ff9590951685526001600160401b03938416602086015291831660408501529091166060830152608082015260a00190565b5f516020614a5e5f395f51905f525460ff166111c257604051638dfc202b60e01b815260040160405180910390fd5b6135e4613a3b565b6111c257604051631afcd79f60e31b815260040160405180910390fd5b611a986135dc565b5f61362c878760016001600160a01b0387166136268a8a8a613a54565b87613639565b90505b9695505050505050565b5f7f41936771719a172aa959076ca6aafb826eaf332dd0c9e7860901c398ef42da0546308989896002811115613671576136716144fb565b6040805160208101979097528601949094526001600160a01b0390921660608501526001600160401b0316608084015260a083015260ff1660c082015260e0810185905261010081018490526101208101839052610140015b6040516020818303038152906040528051906020012090509695505050505050565b5f5f6136f986868661340c565b905061371388885f8461370d8b8b8b613ab0565b88613639565b98975050505050505050565b5f5f61372d88888888613b1b565b9150915061373d82828686613cb1565b61375a5760405163079842ab60e41b815260040160405180910390fd5b5050505050505050565b5f7f8b2b1e5653cf18a7cb85828eebc4ac1e6c7093911ffb66bda4277640f68267f6600146308a8a8a8a8a6137988b613521565b60408051602081019b909b5260ff909916988a019890985260608901969096526001600160a01b0394851660808901529390921660a08701526001600160801b0390811660c08701521660e0850152610100840152610120830152610140820152610160016136ca565b5f7fd6c5d8b75d4c96100cc12b870b8e28bb0b07402bf67c8141d16c2c673af8bb5e6001463088888861383489613521565b60408051602081019990995260ff9097169688019690965260608701949094526001600160a01b03909216608086015260a085015260c084015260e0830152610100820152610120016040516020818303038152906040528051906020012090505b949350505050565b5f7ff81bcebf1f8da13ff1db236962ed82c8762b74f56aeb5a1bd1677ef0db43dbbe600146308c8c8c8c8c8c8c6138d48d613521565b60408051602081019d909d5260ff909b169a8c019a909a5260608b01989098526001600160a01b0396871660808b01529590941660a08901526001600160801b0392831660c0890152911660e087015263ffffffff908116610100870152166101208501526101408401526101608301526101808201526101a00160405160208183030381529060405280519060200120905098975050505050505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156139ac57505f91506003905082613a31565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156139fd573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116613a2857505f925060019150829050613a31565b92505f91508190505b9450945094915050565b5f613a44612828565b54600160401b900460ff16919050565b5f7f1cd7f89e34f6154d6f8387a08ffafc689e347b8d5809913b07c58a42995dff664630613a83878787613d12565b6040805160208101959095528401929092526001600160a01b03166060830152608082015260a001612006565b5f7f82ce6440aa5dde11f3613892819b630b62342bacf93e16a292d5c8783aafa4c34630613adf87878761340c565b6040805160208101959095528401929092526001600160a01b0316606083015260808201526001600160801b03831660a082015260c001612006565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c859052603c8120819081905f805b8851811015613ca4575f613b7d848b8481518110613b7057613b7061415b565b6020026020010151613d48565b9050846001600160a01b0316816001600160a01b031611613bb1576040516309cf9e4960e11b815260040160405180910390fd5b885183108015613beb5750806001600160a01b0316898481518110613bd857613bd861415b565b60200260200101516001600160a01b0316105b15613c0057613bf983614a45565b9250613bb1565b8851831480613c3a5750806001600160a01b0316898481518110613c2657613c2661415b565b60200260200101516001600160a01b031614155b15613c5b5760405163665c282b60e01b8152600481018390526024016107be565b613c6487614a45565b9650878381518110613c7857613c7861415b565b602002602001015186613c8b9190614340565b9550935083613c9983614a45565b925050600101613b50565b5050505094509492505050565b5f80613cbd86846144d4565b9050613cca84605a61430a565b613cd586606461430a565b10613ce4576001915050613896565b6002811115801561362f5750613cfb84605061430a565b613d0686606461430a565b10159695505050505050565b604080516001600160801b0380861660208301528416918101919091526001600160a01b03821660608201525f90608001612006565b5f5f5f5f613d568686613d70565b925092509250613d668282613469565b5090949350505050565b5f5f5f8351604103613da7576020840151604085015160608601515f1a613d9988828585613973565b955095509550505050613db2565b505081515f91506002905b9250925092565b5f60408284031215613dc9575f5ffd5b50919050565b80356001600160801b0381168114613de5575f5ffd5b919050565b5f5f60408385031215613dfb575f5ffd5b82356001600160401b03811115613e10575f5ffd5b613e1c85828601613db9565b925050613e2b60208401613dcf565b90509250929050565b5f6101208284031215613dc9575f5ffd5b5f5f6101408385031215613e57575f5ffd5b613e618484613e34565b91506101208301356001600160401b03811115613e7c575f5ffd5b830160208186031215613e8d575f5ffd5b809150509250929050565b80356001600160a01b0381168114613de5575f5ffd5b5f5f5f5f5f5f5f60e0888a031215613ec4575f5ffd5b613ecd88613e98565b9650613edb60208901613dcf565b95506040880135945060608801359350608088013560ff81168114613efe575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f60208284031215613f2b575f5ffd5b61201f82613dcf565b5f6101208284031215613f45575f5ffd5b61201f8383613e34565b5f5f60408385031215613f60575f5ffd5b82356001600160401b03811115613f75575f5ffd5b613f8185828601613db9565b92505060208301356001600160401b03811115613f9c575f5ffd5b613fa885828601613db9565b9150509250929050565b5f60208284031215613fc2575f5ffd5b5035919050565b5f60208284031215613fd9575f5ffd5b61201f82613e98565b5f5f5f5f5f5f60c08789031215613ff7575f5ffd5b61400087613e98565b955061400e60208801613e98565b945060408701359350606087013592506080870135915061403160a08801613dcf565b90509295509295509295565b5f6020828403121561404d575f5ffd5b81356001600160401b038116811461201f575f5ffd5b5f5f5f5f60608587031215614076575f5ffd5b84356001600160401b0381111561408b575f5ffd5b61409787828801613db9565b94505060208501356001600160401b038111156140b2575f5ffd5b8501601f810187136140c2575f5ffd5b80356001600160401b038111156140d7575f5ffd5b8760208260051b84010111156140eb575f5ffd5b949760209190910196509394604001359392505050565b5f5f8335601e19843603018112614117575f5ffd5b8301803591506001600160401b03821115614130575f5ffd5b6020019150600581901b3603821315612ccf575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614183575f5ffd5b9190910192915050565b5f5f8335601e198436030181126141a2575f5ffd5b8301803591506001600160401b038211156141bb575f5ffd5b602001915036819003821315612ccf575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160801b0382811682821603908111156111ac576111ac6141cf565b6001600160801b0381811683821601908111156111ac576111ac6141cf565b6001815b60018411156131a157808504811115614240576142406141cf565b600184161561424e57908102905b60019390931c928002614225565b5f8261426a575060016111ac565b8161427657505f6111ac565b816001811461428c5760028114614296576142b2565b60019150506111ac565b60ff8411156142a7576142a76141cf565b50506001821b6111ac565b5060208310610133831016604e8410600b84101617156142d5575081810a6111ac565b6142e15f198484614221565b805f19048211156142f4576142f46141cf565b029392505050565b5f61201f60ff84168361425c565b80820281158282048414176111ac576111ac6141cf565b5f8261433b57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156111ac576111ac6141cf565b6001600160401b0381811683821601908111156111ac576111ac6141cf565b5f8151808452602084019350602083015f5b828110156143d057815180516001600160a01b031687526020808201516001600160801b03908116828a0152604092830151169188019190915260609096019590910190600101614384565b5093949350505050565b6001600160401b0381511682526001600160401b0360208201511660208301526001600160801b0360408201511660408301526001600160801b0360608201511660608301525050565b8581526001600160a01b03851660208201526001600160801b0384166040820152610100606082018190525f9061445d90830185614372565b905061362f60808301846143da565b6001600160801b03841681526020810183905260c0810161389660408301846143da565b5f602082840312156144a0575f5ffd5b5051919050565b60ff82811682821603908111156111ac576111ac6141cf565b82815260a0810161201f60208301846143da565b818103818111156111ac576111ac6141cf565b5f8235607e19833603018112614183575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b5f6020828403121561451f575f5ffd5b81356003811061201f575f5ffd5b602081525f61201f6020830184614372565b5f63ffffffff821663ffffffff810361455a5761455a6141cf565b60010192915050565b63ffffffff81811683821601908111156111ac576111ac6141cf565b604080519081016001600160401b03811182821017156145a1576145a1614147565b60405290565b604051601f8201601f191681016001600160401b03811182821017156145cf576145cf614147565b604052919050565b5f60608284031280156145e8575f5ffd5b50604051606081016001600160401b038111828210171561460b5761460b614147565b60405261461783613dcf565b815261462560208401613dcf565b602082015261463660408401613e98565b60408201529392505050565b5f6020828403128015614653575f5ffd5b50604051602081016001600160401b038111828210171561467657614676614147565b60405261468283613e98565b81529392505050565b5f6001600160401b038211156146a3576146a3614147565b5060051b60200190565b5f82601f8301126146bc575f5ffd5b81356146cf6146ca8261468b565b6145a7565b8082825260208201915060208360051b8601019250858311156146f0575f5ffd5b602085015b838110156127665780358352602092830192016146f5565b5f6020828403121561471d575f5ffd5b81356001600160401b03811115614732575f5ffd5b820160408185031215614743575f5ffd5b61474b61457f565b81356001600160401b03811115614760575f5ffd5b820160408187031215614771575f5ffd5b61477961457f565b81356001600160401b0381111561478e575f5ffd5b8201601f8101881361479e575f5ffd5b80356147ac6146ca8261468b565b8082825260208201915060208360051b85010192508a8311156147cd575f5ffd5b6020840193505b828410156147f6576147e584613e98565b8252602093840193909101906147d4565b845250505060208201356001600160401b03811115614813575f5ffd5b61481f888285016146ad565b602083015250808352505061483660208301613dcf565b6020820152949350505050565b5f6148506146ca8461468b565b8381526020810190600585901b84013681111561486b575f5ffd5b845b818110156120455780356001600160401b0381111561488a575f5ffd5b860136601f82011261489a575f5ffd5b80356001600160401b038111156148b3576148b3614147565b6148c6601f8201601f19166020016145a7565b8181523660208385010111156148da575f5ffd5b816020840160208301375f6020838301015280875250505060208401935060208101905061486d565b6001600160801b038681168252851660208201526040810184905260608101839052610100810161362f60808301846143da565b848152602081018490526040810183905260e0810161219760608301846143da565b6001600160801b0388811682528716602082015263ffffffff8681166040830152851660608201526080810184905260a08101839052610140810161371360c08301846143da565b606080825284519082018190525f9060208601906080840190835b818110156149e35783516001600160a01b03168352602093840193909201916001016149bc565b5050838103602080860191909152865180835291810192508601905f5b81811015614a1e578251845260209384019390920191600101614a00565b5050506001600160801b03841660408401529050613896565b608081016111ac82846143da565b5f60018201614a5657614a566141cf565b506001019056fecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a264697066735822122024a774fd8e8bc6d7f1582a18acbcf68e3fdb1554db5ab94ea537d713ba6d6b0664736f6c63430008230033\",\n \"deployedBytecode\": \"0x608060405234801561000f575f5ffd5b506004361061021e575f3560e01c80636e2c77691161012a5780638da5cb5b116100b4578063d68d631111610079578063d68d631114610529578063e52580a61461053c578063ecec10a4146105b9578063f1982c67146105cc578063f2fde38b146105d3575f5ffd5b80638da5cb5b146104aa578063905d031f146104b2578063a3eb896114610505578063beabb5911461050e578063c017c90214610516575f5ffd5b80637c9afa67116100fa5780637c9afa671461043e57806380a126211461046057806383a4d591146104685780638456cb591461048f5780638a0dac4a14610497575f5ffd5b80636e2c7769146104085780636e888c461461041b578063715018a61461042e57806378d350e014610436575f5ffd5b80632ef29f3b116101ab578063452a93201161017b578063452a9320146103c757806359b23872146103d95780635b7f415c146103e15780635c975abb146103e95780635cadf6e814610400575f5ffd5b80632ef29f3b1461036757806331677980146103885780633f4ba83a146103ac578063422ad8f6146103b4575f5ffd5b806318a8f1f0116101f157806318a8f1f0146102945780631a5d93fd146102a75780631c1eeae1146102ef5780631e07f89e146103205780632ceeddf51461035f575f5ffd5b8063014c72f61461022257806309af0e3c14610237578063138f87811461026757806316dd172d1461027a575b5f5ffd5b610235610230366004613dea565b6105e6565b005b60085461024a906001600160801b031681565b6040516001600160801b0390911681526020015b60405180910390f35b610235610275366004613e45565b61071d565b610282600181565b60405160ff909116815260200161025e565b6102356102a2366004613eae565b610f41565b6004546005546006546007546102c6939291906001600160801b031684565b604080519485526020850193909352918301526001600160801b0316606082015260800161025e565b5f5461030890600160a01b90046001600160401b031681565b6040516001600160401b03909116815260200161025e565b6103477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025e565b61024a6110f3565b61037a610375366004613f1b565b611181565b60405190815260200161025e565b60035461039c90600160401b900460ff1681565b604051901515815260200161025e565b6102356111b2565b6102356103c2366004613f34565b6111c4565b5f54610347906001600160a01b031681565b61037a61131f565b610282601281565b5f516020614a5e5f395f51905f525460ff1661039c565b61037a601981565b600154610308906001600160401b031681565b610235610429366004613f4f565b611339565b610235611468565b61024a611479565b61039c61044c366004613fb2565b600a6020525f908152604090205460ff1681565b61037a606481565b6103477f000000000000000000000000000000000000000000000000000000000000000081565b6102356114d9565b6102356104a5366004613fc9565b611534565b6103476115b2565b6104e56104c0366004613fc9565b60096020525f90815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b0393841681529290911660208301520161025e565b61037a60025481565b610282600681565b610235610524366004613fe2565b6115e0565b600354610308906001600160401b031681565b61058461054a36600461403d565b600b6020525f9081526040902080546001909101546001600160401b0380831692600160401b8104821692600160801b9091049091169084565b60405161025e94939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b6102356105c7366004614063565b6117fa565b600b61037a565b6102356105e1366004613fc9565b611a90565b6105ee611acd565b806001600160801b03165f0361061757604051632440a7dd60e01b815260040160405180910390fd5b5f808061069d6106278680614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250610665925050506020880188614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250899250611aff915050565b6040805160808101825260045481526005546020820152600654918101919091526007546001600160801b0316606082015292955090935091506106e384848488611c1d565b8381604001517f33e53e90d61fdc868629a6234670f92c4445196f3f98ebd71935bbc76c7d915360405160405180910390a3505050505050565b610725611c6e565b61072e82611c9e565b61074661074160e0840160c08501613fc9565b611d08565b610757610100830160e08401613f1b565b6001600160801b03165f0361077f57604051631f2a200560e01b815260040160405180910390fd5b601961078b8280614102565b905011156107c757601961079f8280614102565b60405163e126b42160e01b815260048101939093526024830152506044015b60405180910390fd5b6107d760c0830160a0840161403d565b6001600160401b031643111561082357436107f860c0840160a0850161403d565b604051635728c7dd60e11b815260048101929092526001600160401b031660248201526044016107be565b5f61082d83611e5d565b905061083881611f67565b6108486080840160608501613f1b565b6001600160801b03165f0361087057604051632440a7dd60e01b815260040160405180910390fd5b6008546001600160801b03168061088d6080860160608701613f1b565b6001600160801b031611156108d957806108ad6080860160608701613f1b565b6040516343082d3360e01b81526001600160801b039283166004820152911660248201526044016107be565b5f8080806108e78780614102565b90506001600160401b0381111561090057610900614147565b60405190808252806020026020018201604052801561094957816020015b604080516060810182525f80825260208083018290529282015282525f1990920191018161091e5790505b5090505f5b6109588880614102565b9050811015610c25573661096c8980614102565b8381811061097c5761097c61415b565b905060200281019061098e919061416f565b90505f610a016109ef6109bd8d6109a86020870187613f1b565b6109b86040880160208901613f1b565b611f99565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b6109fc604085018561418d565b612026565b9050846001600160a01b0316816001600160a01b031611610a35576040516309cf9e4960e11b815260040160405180910390fd5b6001600160a01b0381165f90815260096020908152604090912090610a5c90840184613f1b565b81546001600160801b0391821691161080610a9c5750610a826040840160208501613f1b565b81546001600160801b03918216600160801b909104909116105b15610ac5576040516364fc3cd160e11b81526001600160a01b03831660048201526024016107be565b610ad26020840184613f1b565b815482905f90610aec9084906001600160801b03166141e3565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550826020016020810190610b239190613f1b565b81548290601090610b45908490600160801b90046001600160801b03166141e3565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550825f016020810190610b7b9190613f1b565b610b859089614202565b9750610b976040840160208501613f1b565b610ba19088614202565b96506040518060600160405280836001600160a01b03168152602001845f016020810190610bcf9190613f1b565b6001600160801b03168152602001846020016020810190610bf09190613f1b565b6001600160801b0316815250858581518110610c0e57610c0e61415b565b60209081029190910101525093505060010161094e565b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610c6060e08a0160c08b01613fc9565b6001600160a01b031603610d2e575f610c7b6006600a6142fc565b610c8b60808b0160608c01613f1b565b6001600160801b0316856001600160801b0316610ca8919061430a565b610cb29190614321565b90505f610cc8826001600160801b038816614340565b9050610cdb6101008b0160e08c01613f1b565b6001600160801b0316811015610d275780610cfd6101008c0160e08d01613f1b565b60405162f9825560e61b815260048101929092526001600160801b031660248201526044016107be565b5050610dbd565b6001600160801b03841615610d5657604051630994a0f360e11b815260040160405180910390fd5b610d67610100890160e08a01613f1b565b6001600160801b0316836001600160801b03161015610dbd5782610d926101008a0160e08b01613f1b565b60405162f9825560e61b81526001600160801b039283166004820152911660248201526044016107be565b610ddb865f908152600a60205260409020805460ff19166001179055565b610deb60e0890160c08a01613fc9565b6001600160a01b03166340c10f19610e0960a08b0160808c01613fc9565b610e1d6103756101008d0160e08e01613f1b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015610e60575f5ffd5b505af1158015610e72573d5f5f3e3d5ffd5b50505f8054909250610e9f9150610e9a90600160a01b90046001600160401b03166001614353565b612050565b9050610ed881610ed389610eb960e08e0160c08f01613fc9565b8d60e0016020810190610ecc9190613f1b565b87876120c5565b6121a0565b7f64d79900ed82270f744ae62db527f4e328e336d8b51e77bc72601391fe779d0687610f0a60e08c0160c08d01613fc9565b610f1b6101008d0160e08e01613f1b565b8585604051610f2e959493929190614424565b60405180910390a1505050505050505050565b610f49611c6e565b610f5287611d08565b856001600160801b03165f03610f7b57604051631f2a200560e01b815260040160405180910390fd5b5f610f8587611181565b60405163d505accf60e01b8152336004820152306024820152604481018290526064810187905260ff8616608482015260a4810185905260c481018490529091506001600160a01b0389169063d505accf9060e4015f604051808303815f87803b158015610ff1575f5ffd5b505af1158015611003573d5f5f3e3d5ffd5b505060405163079cc67960e41b8152336004820152602481018490526001600160a01b038b1692506379cc679091506044015f604051808303815f87803b15801561104c575f5ffd5b505af115801561105e573d5f5f3e3d5ffd5b50505f80549092506110869150610e9a90600160a01b90046001600160401b03166001614353565b905061109981610ed3338c8c8c87612461565b886001600160a01b0316336001600160a01b03167f3ab970a848f33363427e47cfbd7a627af0c6e72757f150137e38cef3cee24d938a8a856040516110e09392919061446c565b60405180910390a3505050505050505050565b5f61117c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611153573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111779190614490565b6124f8565b905090565b5f61118e600660126144a7565b61119990600a6142fc565b6111ac906001600160801b03841661430a565b92915050565b6111ba611acd565b6111c2612548565b565b6111cc611c6e565b6111d581611c9e565b6111e861074160e0830160c08401613fc9565b6111f9610100820160e08301613f1b565b6001600160801b03165f0361122157604051631f2a200560e01b815260040160405180910390fd5b61123160c0820160a0830161403d565b6001600160401b0316431161127c574361125160c0830160a0840161403d565b6040516374276dcf60e11b815260048101929092526001600160401b031660248201526044016107be565b5f61128682611e5d565b905061129181611f67565b6112af815f908152600a60205260409020805460ff19166001179055565b5f80546112d190610e9a90600160a01b90046001600160401b03166001614353565b90506112e181610ed384846125a7565b7f3cb8789e9bf6f532eec2bc8ffee9b622fc0d6e6daefb7fb6bb2e2f7b2d62e45282826040516113129291906144c0565b60405180910390a1505050565b61132b600660126144a7565b61133690600a6142fc565b81565b611341611acd565b611349611c6e565b600354600160401b900460ff161561137457604051633dbff3b560e01b815260040160405180910390fd5b5f6113b57f00000000000000000000000000000000000000000000000000000000000000006113a38580614102565b6113b06020880188614102565b612631565b90505f6113e67f00000000000000000000000000000000000000000000000000000000000000006113a38580614102565b6003805460ff60401b1916600160401b17905590507fc255ddc45163282f24909556f7475ab4ec8eb1d51763b25a4560cee9f43d06456114268580614102565b9050836114338680614102565b60405161145a94939250869093845260208401929092526040830152606082015260800190565b60405180910390a150505050565b611470611acd565b6111c25f612770565b5f61117c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611153573d5f5f3e3d5ffd5b5f546001600160a01b0316331480159061150c57506114f66115b2565b6001600160a01b0316336001600160a01b031614155b1561152c5760405163354de03160e21b81523360048201526024016107be565b6111c26127e0565b61153c611acd565b6001600160a01b0381166115635760405163a91f6a8960e01b815260040160405180910390fd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f064d28d3d3071c5cbc271a261c10c2f0f0d9e319390397101aa0eb23c6bad9099190a35050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b5f6115e9612828565b805490915060ff600160401b82041615906001600160401b03165f8115801561160f5750825b90505f826001600160401b0316600114801561162a5750303b155b905081158015611638575080155b156116565760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561168057845460ff60401b1916600160401b1785555b6001600160a01b038b166116a7576040516314030c0360e11b815260040160405180910390fd5b6001600160a01b038a166116ce5760405163a91f6a8960e01b815260040160405180910390fd5b8815806116d9575087155b806116e2575086155b156117025760405163665c282b60e01b81525f60048201526024016107be565b856001600160801b03165f0361172b57604051632440a7dd60e01b815260040160405180910390fd5b6117348b612850565b61173c612861565b5f80546001600160a01b0319166001600160a01b038c1617905561176289888a89611c1d565b600880546001600160801b0319166001600160801b03881617905560405189907fac3566d46c25f65b48d269870da4b9349704c79de13ad49b115532834d7e7ed1905f90a283156117ed57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b611802611c6e565b606482111561182e5760405163384b869360e21b815260646004820152602481018390526044016107be565b60065461184e57604051632c1dfd4f60e11b815260040160405180910390fd5b5f61185885612869565b6002549091505f8061186a8787612a2b565b90925090505f8615611886576118816001886144d4565b611888565b5f5b90505f5b87811015611a8457368989838181106118a7576118a761415b565b90506020028101906118b991906144e7565b60018054919250838514915f916118d9916001600160401b031690614353565b90506001600160401b0381166118f2602085018561403d565b6001600160401b03161461193a578061190e602085018561403d565b604051635efa452960e11b81526001600160401b039283166004820152911660248201526044016107be565b5f61194a848b604001518b612cd6565b905061195884828c86612e4c565b600261196a604086016020870161450f565b600281111561197b5761197b6144fb565b036119925761198b84828d612eb4565b9850611a75565b5f6119a3604086016020870161450f565b60028111156119b4576119b46144fb565b036119ce576119c484828d612ffb565b909a509850611a75565b60016119e0604086016020870161450f565b60028111156119f1576119f16144fb565b03611a355761198b84828a8881518110611a0d57611a0d61415b565b60200260200101518a8981518110611a2757611a2761415b565b60200260200101518f6131a9565b611a45604085016020860161450f565b6002811115611a5657611a566144fb565b60405163b99607f960e01b815260ff90911660048201526024016107be565b5050505080600101905061188c565b50505050505050505050565b611a98611acd565b6001600160a01b038116611ac157604051631e4fbdf760e01b81525f60048201526024016107be565b611aca81612770565b50565b33611ad66115b2565b6001600160a01b0316146111c25760405163118cdaa760e01b81523360048201526024016107be565b5f5f5f85515f03611b255760405163665c282b60e01b81525f60048201526024016107be565b8451865114611b475760405163512509d360e11b815260040160405180910390fd5b5f805b8751811015611c01575f888281518110611b6657611b6661415b565b602002602001015190505f888381518110611b8357611b8361415b565b602002602001015190505f6001600160a01b0316826001600160a01b03161480611bab575080155b80611bc85750836001600160a01b0316826001600160a01b031611155b15611be95760405163665c282b60e01b8152600481018490526024016107be565b611bf38187614340565b955090925050600101611b4a565b5086519150611c1187878761340c565b93505093509350939050565b60408051608081018252848152602081018490529081018590526001600160801b039091166060909101819052600492909255600555600691909155600780546001600160801b0319169091179055565b5f516020614a5e5f395f51905f525460ff16156111c25760405163d93c066560e01b815260040160405180910390fd5b466001600160401b038116611cb9606084016040850161403d565b6001600160401b031614611d045780611cd8606084016040850161403d565b6040516332e3634d60e21b81526001600160401b039283166004820152911660248201526044016107be565b5050565b6001600160a01b038116611d3a57604051635f8b555b60e11b81526001600160a01b03821660048201526024016107be565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580611d9757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b15611dc057604051635f8b555b60e11b81526001600160a01b03821660048201526024016107be565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614158015611e3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15611aca57604051635f8b555b60e11b81526001600160a01b03821660048201526024016107be565b5f8135611e70604084016020850161403d565b611e80606085016040860161403d565b611e906080860160608701613f1b565b611ea060a0870160808801613fc9565b611eb060c0880160a0890161403d565b611ec060e0890160c08a01613fc9565b611ed16101008a0160e08b01613f1b565b611ee36101208b016101008c01613f1b565b60408051602081019a909a526001600160401b03988916908a015295871660608901526001600160801b0394851660808901526001600160a01b0393841660a08901529590911660c08701521660e085015291821661010084015216610120820152610140015b604051602081830303815290604052805190602001209050919050565b5f818152600a602052604090205460ff1615611aca57604051632910aca360e01b8152600481018290526024016107be565b5f7f28bf99522b0d2f26a76cdeda71578156383bbae91175ca503165cfdbbd1ff34a4630611fc687611e5d565b6040805160208101959095528401929092526001600160a01b0316606083015260808201526001600160801b0380851660a0830152831660c082015260e0015b6040516020818303038152906040528051906020012090505b9392505050565b5f5f5f5f612035878787613422565b9250925092506120458282613469565b509095945050505050565b604080516080810182525f808252602082018190529181018290526060810191909152604080516080810182526001600160401b03808516825260015416602082015290810161209e6110f3565b6001600160801b031681526020016120b4611479565b6001600160801b0316905292915050565b5f7f6bf7256f4c4f60df0bd918b509bf742c125b14ab72c967f949c0c3e504d4d62560014630898989896040516020016120ff919061452d565b6040516020818303038152906040528051906020012061211e8a613521565b60408051602081019a909a5260ff9098169789019790975260608801959095526001600160a01b03938416608088015260a08701929092529190911660c08501526001600160801b031660e0840152610100830152610120820152610140015b6040516020818303038152906040528051906020012090505b95945050505050565b81515f80546001600160401b03808416600160a01b0267ffffffffffffffff60a01b199092169190911782556003544392911690036122cf576003805467ffffffffffffffff19166001179055604080516080810182526001600160401b03838116825284166020820181905291810191909152606081016122225f86613533565b905260015f52600b602090815281517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf80549284015160408501516001600160401b03908116600160801b0267ffffffffffffffff60801b19928216600160401b026001600160801b031990961694909116939093179390931792909216179055606001517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d05550505050565b6003546001600160401b039081165f908152600b602052604090208054909183811691160361233657805467ffffffffffffffff60801b1916600160801b6001600160401b03851602178155600181015461232a9085613533565b60019091015550505050565b6003545f9061234f906001600160401b03166001614353565b6003805467ffffffffffffffff19166001600160401b0383811691909117909155604080516080808201835287841682528884166020808401829052838501919091528351918201845287548086168352600160401b8104861691830191909152600160801b9004909316918301919091526001850154606080840191909152929350918201906123e9906123e390613555565b88613533565b90526001600160401b039182165f908152600b60209081526040918290208351815492850151938501518616600160801b0267ffffffffffffffff60801b19948716600160401b026001600160801b031990941691909616179190911791909116929092178255606001516001909101555050505050565b5f7ff1cdefdf363279c2a6d861bb708536f5c8470b6fb59f43e01f67bb3f168e7b1f60014630898989896124948a613521565b60408051602081019a909a5260ff9098169789019790975260608801959095526001600160a01b03938416608088015291831660a08701529190911660c08501526001600160801b031660e08401526101008301526101208201526101400161217e565b5f80612506600660126144a7565b61251190600a6142fc565b61251b9084614321565b90506001600160801b038111156111ac57604051639940a77560e01b8152600481018290526024016107be565b6125506135ad565b5f516020614a5e5f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b5f7febf24d41f9ef23280fd74eb80f9ce85e35b83fb7cf6aa2c52a07c20f981978c660014630866125d787613521565b60408051602081019790975260ff9095169486019490945260608501929092526001600160a01b0316608084015260a083015260c082015260e0015b60405160208183030381529060405280519060200120905092915050565b5f8382146126525760405163512509d360e11b815260040160405180910390fd5b5f5b84811015612766575f86868381811061266f5761266f61415b565b90506020020160208101906126849190613fc9565b90505f8585848181106126995761269961415b565b60200291909101359150506001600160a01b0382166126ce57604051633bca2f5160e21b8152600481018490526024016107be565b805f036126ee57604051631f2a200560e01b815260040160405180910390fd5b6040516340c10f1960e01b81526001600160a01b038381166004830152602482018390528a16906340c10f19906044015f604051808303815f87803b158015612735575f5ffd5b505af1158015612747573d5f5f3e3d5ffd5b5050505080846127579190614340565b93505050806001019050612654565b5095945050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6127e8611c6e565b5f516020614a5e5f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612589565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006111ac565b6128586135dc565b611aca81613601565b6111c26135dc565b6128986040518060a0016040528060608152602001606081526020015f81526020015f81526020015f81525090565b5f80806129296128a88680614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506128e6925050506020880188614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250506007546001600160801b03169150611aff9050565b9250925092506004600201548314158061294557506004548214155b8061295257506005548114155b1561297e57600654604051633b21437560e21b81526004810191909152602481018490526044016107be565b6040805160a08101909152806129948780614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050908252506020908101906129d990880188614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050908252506020810194909452604084019290925260609092019190915292915050565b606080826001600160401b03811115612a4657612a46614147565b604051908082528060200260200182016040528015612a6f578160200160208202803683370190505b509150826001600160401b03811115612a8a57612a8a614147565b604051908082528060200260200182016040528015612ab3578160200160208202803683370190505b5090508215612ccf575f836001600160401b03811115612ad557612ad5614147565b604051908082528060200260200182016040528015612afe578160200160208202803683370190505b5090505f8080612b0f6001886144d4565b90505f5b87811015612cc9575f898983818110612b2e57612b2e61415b565b9050602002810190612b4091906144e7565b612b5190604081019060200161450f565b90506001816002811115612b6757612b676144fb565b03612ba65781868663ffffffff1681518110612b8557612b8561415b565b63ffffffff90921660209283029190910190910152612ba38561453f565b94505b5f80826002811115612bba57612bba6144fb565b1480612bc557508383145b905080612bd3575050612cc1565b8a8a84818110612be557612be561415b565b9050602002810190612bf791906144e7565b612c05906060810190614102565b612c10915086614563565b94508563ffffffff165f03612c26575050612cc1565b5f5b8663ffffffff16811015612cb7575f888281518110612c4957612c4961415b565b602002602001015163ffffffff169050878b8281518110612c6c57612c6c61415b565b602002602001019063ffffffff16908163ffffffff1681525050868a8281518110612c9957612c9961415b565b63ffffffff9092166020928302919091019091015250600101612c28565b505f95505f945050505b600101612b13565b50505050505b9250929050565b5f6001612ce9604086016020870161450f565b6002811115612cfa57612cfa6144fb565b03612d49575f612d0d604086018661418d565b810190612d1a91906145d7565b9050612d41612d2c602087018761403d565b85835f01518460200151856040015188613609565b91505061201f565b6002612d5b604086016020870161450f565b6002811115612d6c57612d6c6144fb565b03612de1575f612d7f604086018661418d565b810190612d8c9190614642565b9050612d41612d9e602087018761403d565b825186906002906001600160a01b03168551604080516001600160a01b039092166020830152016040516020818303038152906040528051906020012088613639565b5f612df2604086016020870161450f565b6002811115612e0357612e036144fb565b03611a35575f612e16604086018661418d565b810190612e23919061470d565b9050612d41612e35602087018761403d565b8251805160209182015191850151889290886136ec565b5f612e5d604086016020870161450f565b6002811115612e6e57612e6e6144fb565b14158015612e7a575080155b612eae57612eae83612e8f6060870187614102565b612e9891614843565b845160208601516060870151608088015161371f565b50505050565b5f80612ec3604086018661418d565b810190612ed09190614642565b80519091506001600160a01b0316612efb5760405163611b32ab60e01b815260040160405180910390fd5b80516001600160a01b039081165f9081526009602090815260408083208054865190951684529083209290925590916001600160801b0380821692600160801b9092041690612f4c9089018961403d565b6001805467ffffffffffffffff19166001600160401b0392831617815560028990555f80549092612f8b92610e9a92600160a01b900490911690614353565b9050612fa281610ed3875f015186868d8d88613764565b845f01516001600160a01b03167f0b4ee788c9bfc3c405fb19e3f6137bf14a218c0dbc53c13a6ed07a225d360ebc84848b8b86604051612fe6959493929190614903565b60405180910390a25095979650505050505050565b61302a6040518060a0016040528060608152602001606081526020015f81526020015f81526020015f81525090565b5f80613039604087018761418d565b810190613046919061470d565b905080602001516001600160801b03165f0361307557604051632440a7dd60e01b815260040160405180910390fd5b5f5f5f613094845f01515f0151855f0151602001518660200151611aff565b8093508194508295505050506130b08383838760200151611c1d565b602084810151600880546001600160801b0319166001600160801b039092169190911790556130e1908a018a61403d565b6001805467ffffffffffffffff19166001600160401b0392831617815560028a90555f8054909261312092610e9a92600160a01b900490911690614353565b905061313281610ed3868c8c86613802565b7fee5f0b6612e124988e865e18a4c4b0ec70d2f263708bb1e17f6de867fb1fe1c2848a8a846040516131679493929190614937565b60405180910390a1506040805160a08101825285515181529451602090810151908601528401929092526060830152608082015291508390505b935093915050565b5f806131b8604088018861418d565b8101906131c591906145d7565b60408101519091506001600160a01b03166131f35760405163611b32ab60e01b815260040160405180910390fd5b80516001600160801b0316158015613216575060208101516001600160801b0316155b15613245576040808201519051632edcd91760e21b81526001600160a01b0390911660048201526024016107be565b63ffffffff8516158061325c575063ffffffff8416155b1561328b576040808201519051632edcd91760e21b81526001600160a01b0390911660048201526024016107be565b6040808201516001600160a01b03165f90815260096020522080546001600160801b03161515806132cc57508054600160801b90046001600160801b031615155b156132fb57604080830151905163cb96603760e01b81526001600160a01b0390911660048201526024016107be565b60408051808201825283516001600160801b0390811682526020808601518216818401908152868501516001600160a01b03165f9081526009835294909420925193518216600160801b029390911692909217905561335c9089018961403d565b6001805467ffffffffffffffff19166001600160401b0392831617815560028990555f8054909261339b92610e9a92600160a01b900490911690614353565b90506133bc81610ed38560400151865f015187602001518c8c8f8d8a61389e565b82604001516001600160a01b03167f9023f1e3e253ad361005d72868d790c37ca6f53a03d522ebc93dca42154e15bf845f015185602001518a8a8d8b88604051612fe69796959493929190614959565b5f838383604051602001612006939291906149a1565b5f80806041849003613456578435602086013560408701355f1a61344889828585613973565b955095509550505050613460565b505f915060029050825b93509350939050565b5f82600381111561347c5761347c6144fb565b03613485575050565b6001826003811115613499576134996144fb565b036134b75760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156134cb576134cb6144fb565b036134ec5760405163fce698f760e01b8152600481018290526024016107be565b6003826003811115613500576135006144fb565b03611d04576040516335e2f38360e21b8152600481018290526024016107be565b5f81604051602001611f4a9190614a37565b6040805160016020820152908101839052606081018290525f90608001612613565b5f6001825f0151836020015184604001518560600151604051602001611f4a95949392919060ff9590951685526001600160401b03938416602086015291831660408501529091166060830152608082015260a00190565b5f516020614a5e5f395f51905f525460ff166111c257604051638dfc202b60e01b815260040160405180910390fd5b6135e4613a3b565b6111c257604051631afcd79f60e31b815260040160405180910390fd5b611a986135dc565b5f61362c878760016001600160a01b0387166136268a8a8a613a54565b87613639565b90505b9695505050505050565b5f7f41936771719a172aa959076ca6aafb826eaf332dd0c9e7860901c398ef42da0546308989896002811115613671576136716144fb565b6040805160208101979097528601949094526001600160a01b0390921660608501526001600160401b0316608084015260a083015260ff1660c082015260e0810185905261010081018490526101208101839052610140015b6040516020818303038152906040528051906020012090509695505050505050565b5f5f6136f986868661340c565b905061371388885f8461370d8b8b8b613ab0565b88613639565b98975050505050505050565b5f5f61372d88888888613b1b565b9150915061373d82828686613cb1565b61375a5760405163079842ab60e41b815260040160405180910390fd5b5050505050505050565b5f7f8b2b1e5653cf18a7cb85828eebc4ac1e6c7093911ffb66bda4277640f68267f6600146308a8a8a8a8a6137988b613521565b60408051602081019b909b5260ff909916988a019890985260608901969096526001600160a01b0394851660808901529390921660a08701526001600160801b0390811660c08701521660e0850152610100840152610120830152610140820152610160016136ca565b5f7fd6c5d8b75d4c96100cc12b870b8e28bb0b07402bf67c8141d16c2c673af8bb5e6001463088888861383489613521565b60408051602081019990995260ff9097169688019690965260608701949094526001600160a01b03909216608086015260a085015260c084015260e0830152610100820152610120016040516020818303038152906040528051906020012090505b949350505050565b5f7ff81bcebf1f8da13ff1db236962ed82c8762b74f56aeb5a1bd1677ef0db43dbbe600146308c8c8c8c8c8c8c6138d48d613521565b60408051602081019d909d5260ff909b169a8c019a909a5260608b01989098526001600160a01b0396871660808b01529590941660a08901526001600160801b0392831660c0890152911660e087015263ffffffff908116610100870152166101208501526101408401526101608301526101808201526101a00160405160208183030381529060405280519060200120905098975050505050505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156139ac57505f91506003905082613a31565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156139fd573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116613a2857505f925060019150829050613a31565b92505f91508190505b9450945094915050565b5f613a44612828565b54600160401b900460ff16919050565b5f7f1cd7f89e34f6154d6f8387a08ffafc689e347b8d5809913b07c58a42995dff664630613a83878787613d12565b6040805160208101959095528401929092526001600160a01b03166060830152608082015260a001612006565b5f7f82ce6440aa5dde11f3613892819b630b62342bacf93e16a292d5c8783aafa4c34630613adf87878761340c565b6040805160208101959095528401929092526001600160a01b0316606083015260808201526001600160801b03831660a082015260c001612006565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c859052603c8120819081905f805b8851811015613ca4575f613b7d848b8481518110613b7057613b7061415b565b6020026020010151613d48565b9050846001600160a01b0316816001600160a01b031611613bb1576040516309cf9e4960e11b815260040160405180910390fd5b885183108015613beb5750806001600160a01b0316898481518110613bd857613bd861415b565b60200260200101516001600160a01b0316105b15613c0057613bf983614a45565b9250613bb1565b8851831480613c3a5750806001600160a01b0316898481518110613c2657613c2661415b565b60200260200101516001600160a01b031614155b15613c5b5760405163665c282b60e01b8152600481018390526024016107be565b613c6487614a45565b9650878381518110613c7857613c7861415b565b602002602001015186613c8b9190614340565b9550935083613c9983614a45565b925050600101613b50565b5050505094509492505050565b5f80613cbd86846144d4565b9050613cca84605a61430a565b613cd586606461430a565b10613ce4576001915050613896565b6002811115801561362f5750613cfb84605061430a565b613d0686606461430a565b10159695505050505050565b604080516001600160801b0380861660208301528416918101919091526001600160a01b03821660608201525f90608001612006565b5f5f5f5f613d568686613d70565b925092509250613d668282613469565b5090949350505050565b5f5f5f8351604103613da7576020840151604085015160608601515f1a613d9988828585613973565b955095509550505050613db2565b505081515f91506002905b9250925092565b5f60408284031215613dc9575f5ffd5b50919050565b80356001600160801b0381168114613de5575f5ffd5b919050565b5f5f60408385031215613dfb575f5ffd5b82356001600160401b03811115613e10575f5ffd5b613e1c85828601613db9565b925050613e2b60208401613dcf565b90509250929050565b5f6101208284031215613dc9575f5ffd5b5f5f6101408385031215613e57575f5ffd5b613e618484613e34565b91506101208301356001600160401b03811115613e7c575f5ffd5b830160208186031215613e8d575f5ffd5b809150509250929050565b80356001600160a01b0381168114613de5575f5ffd5b5f5f5f5f5f5f5f60e0888a031215613ec4575f5ffd5b613ecd88613e98565b9650613edb60208901613dcf565b95506040880135945060608801359350608088013560ff81168114613efe575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f60208284031215613f2b575f5ffd5b61201f82613dcf565b5f6101208284031215613f45575f5ffd5b61201f8383613e34565b5f5f60408385031215613f60575f5ffd5b82356001600160401b03811115613f75575f5ffd5b613f8185828601613db9565b92505060208301356001600160401b03811115613f9c575f5ffd5b613fa885828601613db9565b9150509250929050565b5f60208284031215613fc2575f5ffd5b5035919050565b5f60208284031215613fd9575f5ffd5b61201f82613e98565b5f5f5f5f5f5f60c08789031215613ff7575f5ffd5b61400087613e98565b955061400e60208801613e98565b945060408701359350606087013592506080870135915061403160a08801613dcf565b90509295509295509295565b5f6020828403121561404d575f5ffd5b81356001600160401b038116811461201f575f5ffd5b5f5f5f5f60608587031215614076575f5ffd5b84356001600160401b0381111561408b575f5ffd5b61409787828801613db9565b94505060208501356001600160401b038111156140b2575f5ffd5b8501601f810187136140c2575f5ffd5b80356001600160401b038111156140d7575f5ffd5b8760208260051b84010111156140eb575f5ffd5b949760209190910196509394604001359392505050565b5f5f8335601e19843603018112614117575f5ffd5b8301803591506001600160401b03821115614130575f5ffd5b6020019150600581901b3603821315612ccf575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614183575f5ffd5b9190910192915050565b5f5f8335601e198436030181126141a2575f5ffd5b8301803591506001600160401b038211156141bb575f5ffd5b602001915036819003821315612ccf575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160801b0382811682821603908111156111ac576111ac6141cf565b6001600160801b0381811683821601908111156111ac576111ac6141cf565b6001815b60018411156131a157808504811115614240576142406141cf565b600184161561424e57908102905b60019390931c928002614225565b5f8261426a575060016111ac565b8161427657505f6111ac565b816001811461428c5760028114614296576142b2565b60019150506111ac565b60ff8411156142a7576142a76141cf565b50506001821b6111ac565b5060208310610133831016604e8410600b84101617156142d5575081810a6111ac565b6142e15f198484614221565b805f19048211156142f4576142f46141cf565b029392505050565b5f61201f60ff84168361425c565b80820281158282048414176111ac576111ac6141cf565b5f8261433b57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156111ac576111ac6141cf565b6001600160401b0381811683821601908111156111ac576111ac6141cf565b5f8151808452602084019350602083015f5b828110156143d057815180516001600160a01b031687526020808201516001600160801b03908116828a0152604092830151169188019190915260609096019590910190600101614384565b5093949350505050565b6001600160401b0381511682526001600160401b0360208201511660208301526001600160801b0360408201511660408301526001600160801b0360608201511660608301525050565b8581526001600160a01b03851660208201526001600160801b0384166040820152610100606082018190525f9061445d90830185614372565b905061362f60808301846143da565b6001600160801b03841681526020810183905260c0810161389660408301846143da565b5f602082840312156144a0575f5ffd5b5051919050565b60ff82811682821603908111156111ac576111ac6141cf565b82815260a0810161201f60208301846143da565b818103818111156111ac576111ac6141cf565b5f8235607e19833603018112614183575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b5f6020828403121561451f575f5ffd5b81356003811061201f575f5ffd5b602081525f61201f6020830184614372565b5f63ffffffff821663ffffffff810361455a5761455a6141cf565b60010192915050565b63ffffffff81811683821601908111156111ac576111ac6141cf565b604080519081016001600160401b03811182821017156145a1576145a1614147565b60405290565b604051601f8201601f191681016001600160401b03811182821017156145cf576145cf614147565b604052919050565b5f60608284031280156145e8575f5ffd5b50604051606081016001600160401b038111828210171561460b5761460b614147565b60405261461783613dcf565b815261462560208401613dcf565b602082015261463660408401613e98565b60408201529392505050565b5f6020828403128015614653575f5ffd5b50604051602081016001600160401b038111828210171561467657614676614147565b60405261468283613e98565b81529392505050565b5f6001600160401b038211156146a3576146a3614147565b5060051b60200190565b5f82601f8301126146bc575f5ffd5b81356146cf6146ca8261468b565b6145a7565b8082825260208201915060208360051b8601019250858311156146f0575f5ffd5b602085015b838110156127665780358352602092830192016146f5565b5f6020828403121561471d575f5ffd5b81356001600160401b03811115614732575f5ffd5b820160408185031215614743575f5ffd5b61474b61457f565b81356001600160401b03811115614760575f5ffd5b820160408187031215614771575f5ffd5b61477961457f565b81356001600160401b0381111561478e575f5ffd5b8201601f8101881361479e575f5ffd5b80356147ac6146ca8261468b565b8082825260208201915060208360051b85010192508a8311156147cd575f5ffd5b6020840193505b828410156147f6576147e584613e98565b8252602093840193909101906147d4565b845250505060208201356001600160401b03811115614813575f5ffd5b61481f888285016146ad565b602083015250808352505061483660208301613dcf565b6020820152949350505050565b5f6148506146ca8461468b565b8381526020810190600585901b84013681111561486b575f5ffd5b845b818110156120455780356001600160401b0381111561488a575f5ffd5b860136601f82011261489a575f5ffd5b80356001600160401b038111156148b3576148b3614147565b6148c6601f8201601f19166020016145a7565b8181523660208385010111156148da575f5ffd5b816020840160208301375f6020838301015280875250505060208401935060208101905061486d565b6001600160801b038681168252851660208201526040810184905260608101839052610100810161362f60808301846143da565b848152602081018490526040810183905260e0810161219760608301846143da565b6001600160801b0388811682528716602082015263ffffffff8681166040830152851660608201526080810184905260a08101839052610140810161371360c08301846143da565b606080825284519082018190525f9060208601906080840190835b818110156149e35783516001600160a01b03168352602093840193909201916001016149bc565b5050838103602080860191909152865180835291810192508601905f5b81811015614a1e578251845260209384019390920191600101614a00565b5050506001600160801b03841660408401529050613896565b608081016111ac82846143da565b5f60018201614a5657614a566141cf565b506001019056fecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a264697066735822122024a774fd8e8bc6d7f1582a18acbcf68e3fdb1554db5ab94ea537d713ba6d6b0664736f6c63430008230033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {},\n \"immutableReferences\": {\n \"10452\": [\n {\n \"length\": 32,\n \"start\": 1133\n },\n {\n \"length\": 32,\n \"start\": 3120\n },\n {\n \"length\": 32,\n \"start\": 4345\n },\n {\n \"length\": 32,\n \"start\": 4986\n },\n {\n \"length\": 32,\n \"start\": 7484\n },\n {\n \"length\": 32,\n \"start\": 7618\n }\n ],\n \"10455\": [\n {\n \"length\": 32,\n \"start\": 805\n },\n {\n \"length\": 32,\n \"start\": 5053\n },\n {\n \"length\": 32,\n \"start\": 5247\n },\n {\n \"length\": 32,\n \"start\": 7533\n },\n {\n \"length\": 32,\n \"start\": 7679\n }\n ]\n },\n \"inputSourceName\": \"project/contracts/MintingGateway.sol\",\n \"buildInfoId\": \"solc-0_8_35-beb8df952405ec55b2bc54201ffcd6097ae4e14a\"\n}","{\n \"_format\": \"hh3-artifact-1\",\n \"contractName\": \"ProxyAdmin\",\n \"sourceName\": \"contracts/ProxyArtifacts.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"initialOwner\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"UPGRADE_INTERFACE_VERSION\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract ITransparentUpgradeableProxy\",\n \"name\": \"proxy\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x6080604052348015600e575f5ffd5b506040516104e83803806104e8833981016040819052602b9160b6565b80806001600160a01b038116605957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6060816067565b50505060e1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6020828403121560c5575f5ffd5b81516001600160a01b038116811460da575f5ffd5b9392505050565b6103fa806100ee5f395ff3fe608060405260043610610049575f3560e01c8063715018a61461004d5780638da5cb5b146100635780639623609d1461008e578063ad3cb1cc146100a1578063f2fde38b146100de575b5f5ffd5b348015610058575f5ffd5b506100616100fd565b005b34801561006e575f5ffd5b505f546040516001600160a01b0390911681526020015b60405180910390f35b61006161009c366004610260565b610110565b3480156100ac575f5ffd5b506100d1604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100859190610365565b3480156100e9575f5ffd5b506100616100f836600461037e565b61017b565b6101056101bd565b61010e5f6101e9565b565b6101186101bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906101489086908690600401610399565b5f604051808303818588803b15801561015f575f5ffd5b505af1158015610171573d5f5f3e3d5ffd5b5050505050505050565b6101836101bd565b6001600160a01b0381166101b157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6101ba816101e9565b50565b5f546001600160a01b0316331461010e5760405163118cdaa760e01b81523360048201526024016101a8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101ba575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610272575f5ffd5b833561027d81610238565b9250602084013561028d81610238565b9150604084013567ffffffffffffffff8111156102a8575f5ffd5b8401601f810186136102b8575f5ffd5b803567ffffffffffffffff8111156102d2576102d261024c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103015761030161024c565b604052818152828201602001881015610318575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6103776020830184610337565b9392505050565b5f6020828403121561038e575f5ffd5b813561037781610238565b6001600160a01b03831681526040602082018190525f906103bc90830184610337565b94935050505056fea2646970667358221220096ef5373ffbb308f5aaba93487a526eb7720bc0709046bc95ce238dee72824464736f6c63430008230033\",\n \"deployedBytecode\": \"0x608060405260043610610049575f3560e01c8063715018a61461004d5780638da5cb5b146100635780639623609d1461008e578063ad3cb1cc146100a1578063f2fde38b146100de575b5f5ffd5b348015610058575f5ffd5b506100616100fd565b005b34801561006e575f5ffd5b505f546040516001600160a01b0390911681526020015b60405180910390f35b61006161009c366004610260565b610110565b3480156100ac575f5ffd5b506100d1604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100859190610365565b3480156100e9575f5ffd5b506100616100f836600461037e565b61017b565b6101056101bd565b61010e5f6101e9565b565b6101186101bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906101489086908690600401610399565b5f604051808303818588803b15801561015f575f5ffd5b505af1158015610171573d5f5f3e3d5ffd5b5050505050505050565b6101836101bd565b6001600160a01b0381166101b157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6101ba816101e9565b50565b5f546001600160a01b0316331461010e5760405163118cdaa760e01b81523360048201526024016101a8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101ba575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610272575f5ffd5b833561027d81610238565b9250602084013561028d81610238565b9150604084013567ffffffffffffffff8111156102a8575f5ffd5b8401601f810186136102b8575f5ffd5b803567ffffffffffffffff8111156102d2576102d261024c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103015761030161024c565b604052818152828201602001881015610318575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6103776020830184610337565b9392505050565b5f6020828403121561038e575f5ffd5b813561037781610238565b6001600160a01b03831681526040602082018190525f906103bc90830184610337565b94935050505056fea2646970667358221220096ef5373ffbb308f5aaba93487a526eb7720bc0709046bc95ce238dee72824464736f6c63430008230033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {},\n \"immutableReferences\": {},\n \"inputSourceName\": \"project/contracts/ProxyArtifacts.sol\",\n \"buildInfoId\": \"solc-0_8_35-beb8df952405ec55b2bc54201ffcd6097ae4e14a\"\n}","{\n \"_format\": \"hh3-artifact-1\",\n \"contractName\": \"TransparentUpgradeableProxy\",\n \"sourceName\": \"contracts/ProxyArtifacts.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"logic\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"initialOwner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"admin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC1967InvalidAdmin\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC1967InvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ERC1967NonPayable\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ERC1967ProxyUninitialized\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"FailedCall\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ProxyDeniedAdminAccess\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"previousAdmin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n }\n ],\n \"bytecode\": \"0x60a0604052604051610d7d380380610d7d8339810160408190526100229161036c565b82828282818051610046576040516330a289cf60e21b815260040160405180910390fd5b61005082826100b1565b50508160405161005f90610330565b6001600160a01b039091168152602001604051809103905ff080158015610088573d5f5f3e3d5ffd5b506001600160a01b03166080526100a66100a160805190565b61010f565b50505050505061043d565b6100ba8261017c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610103576100fe82826101fa565b505050565b61010b61029b565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61014e5f516020610d5d5f395f51905f52546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1610179816102bc565b50565b806001600160a01b03163b5f036101b657604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f61020784846102f9565b905080801561022857505f3d118061022857505f846001600160a01b03163b115b1561023d5761023561030c565b915050610295565b801561026757604051639996b31560e01b81526001600160a01b03851660048201526024016101ad565b3d1561027a57610275610325565b610293565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102ba5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b0381166102e557604051633173bdd160e11b81525f60048201526024016101ad565b805f516020610d5d5f395f51905f526101d9565b5f5f5f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b6104e68061087783390190565b80516001600160a01b0381168114610353575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f6060848603121561037e575f5ffd5b6103878461033d565b92506103956020850161033d565b60408501519092506001600160401b038111156103b0575f5ffd5b8401601f810186136103c0575f5ffd5b80516001600160401b038111156103d9576103d9610358565b604051601f8201601f19908116603f011681016001600160401b038111828210171561040757610407610358565b60405281815282820160200188101561041e575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b6080516104236104545f395f601001526104235ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007a575f356001600160e01b03191663278f794360e11b14610070576040516334ad5dbb60e21b815260040160405180910390fd5b610078610082565b565b6100786100b0565b5f8061009136600481846102e1565b81019061009e919061031c565b915091506100ac82826100c0565b5050565b6100786100bb61011a565b610151565b6100c98261016f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156101125761010d82826101ea565b505050565b6100ac61028b565b5f61014c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e80801561016b573d5ff35b3d5ffd5b806001600160a01b03163b5f036101a957604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f6101f784846102aa565b905080801561021857505f3d118061021857505f846001600160a01b03163b115b1561022d576102256102bd565b915050610285565b801561025757604051639996b31560e01b81526001600160a01b03851660048201526024016101a0565b3d1561026a576102656102d6565b610283565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156100785760405163b398979f60e01b815260040160405180910390fd5b5f5f5f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f5f858511156102ef575f5ffd5b838611156102fb575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561032d575f5ffd5b82356001600160a01b0381168114610343575f5ffd5b9150602083013567ffffffffffffffff81111561035e575f5ffd5b8301601f8101851361036e575f5ffd5b803567ffffffffffffffff81111561038857610388610308565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103b7576103b7610308565b6040528181528282016020018710156103ce575f5ffd5b816020840160208301375f60208383010152809350505050925092905056fea2646970667358221220c6da87eea7b69da543d36ac7b83458efe061c9b7c29bf1c22b91b8a9cf8c0cab64736f6c634300082300336080604052348015600e575f5ffd5b506040516104e63803806104e6833981016040819052602b9160b4565b806001600160a01b038116605857604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b605f816065565b505060df565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6020828403121560c3575f5ffd5b81516001600160a01b038116811460d8575f5ffd5b9392505050565b6103fa806100ec5f395ff3fe608060405260043610610049575f3560e01c8063715018a61461004d5780638da5cb5b146100635780639623609d1461008e578063ad3cb1cc146100a1578063f2fde38b146100de575b5f5ffd5b348015610058575f5ffd5b506100616100fd565b005b34801561006e575f5ffd5b505f546040516001600160a01b0390911681526020015b60405180910390f35b61006161009c366004610260565b610110565b3480156100ac575f5ffd5b506100d1604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100859190610365565b3480156100e9575f5ffd5b506100616100f836600461037e565b61017b565b6101056101bd565b61010e5f6101e9565b565b6101186101bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906101489086908690600401610399565b5f604051808303818588803b15801561015f575f5ffd5b505af1158015610171573d5f5f3e3d5ffd5b5050505050505050565b6101836101bd565b6001600160a01b0381166101b157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6101ba816101e9565b50565b5f546001600160a01b0316331461010e5760405163118cdaa760e01b81523360048201526024016101a8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101ba575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610272575f5ffd5b833561027d81610238565b9250602084013561028d81610238565b9150604084013567ffffffffffffffff8111156102a8575f5ffd5b8401601f810186136102b8575f5ffd5b803567ffffffffffffffff8111156102d2576102d261024c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103015761030161024c565b604052818152828201602001881015610318575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6103776020830184610337565b9392505050565b5f6020828403121561038e575f5ffd5b813561037781610238565b6001600160a01b03831681526040602082018190525f906103bc90830184610337565b94935050505056fea264697066735822122061b7d945b272496e3ce5c522b8dbecb68e8abd611b1db3dd20a954a93ec3c53664736f6c63430008230033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\",\n \"deployedBytecode\": \"0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007a575f356001600160e01b03191663278f794360e11b14610070576040516334ad5dbb60e21b815260040160405180910390fd5b610078610082565b565b6100786100b0565b5f8061009136600481846102e1565b81019061009e919061031c565b915091506100ac82826100c0565b5050565b6100786100bb61011a565b610151565b6100c98261016f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156101125761010d82826101ea565b505050565b6100ac61028b565b5f61014c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e80801561016b573d5ff35b3d5ffd5b806001600160a01b03163b5f036101a957604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f6101f784846102aa565b905080801561021857505f3d118061021857505f846001600160a01b03163b115b1561022d576102256102bd565b915050610285565b801561025757604051639996b31560e01b81526001600160a01b03851660048201526024016101a0565b3d1561026a576102656102d6565b610283565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156100785760405163b398979f60e01b815260040160405180910390fd5b5f5f5f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f5f858511156102ef575f5ffd5b838611156102fb575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561032d575f5ffd5b82356001600160a01b0381168114610343575f5ffd5b9150602083013567ffffffffffffffff81111561035e575f5ffd5b8301601f8101851361036e575f5ffd5b803567ffffffffffffffff81111561038857610388610308565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103b7576103b7610308565b6040528181528282016020018710156103ce575f5ffd5b816020840160208301375f60208383010152809350505050925092905056fea2646970667358221220c6da87eea7b69da543d36ac7b83458efe061c9b7c29bf1c22b91b8a9cf8c0cab64736f6c63430008230033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {},\n \"immutableReferences\": {\n \"1213\": [\n {\n \"length\": 32,\n \"start\": 16\n }\n ]\n },\n \"inputSourceName\": \"project/contracts/ProxyArtifacts.sol\",\n \"buildInfoId\": \"solc-0_8_35-beb8df952405ec55b2bc54201ffcd6097ae4e14a\"\n}","//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ArgonToken\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const argonTokenAbi = [\n {\n type: 'constructor',\n inputs: [{ name: 'gateway', internalType: 'address', type: 'address' }],\n stateMutability: 'nonpayable',\n },\n { type: 'error', inputs: [], name: 'ECDSAInvalidSignature' },\n {\n type: 'error',\n inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }],\n name: 'ECDSAInvalidSignatureLength',\n },\n {\n type: 'error',\n inputs: [{ name: 's', internalType: 'bytes32', type: 'bytes32' }],\n name: 'ECDSAInvalidSignatureS',\n },\n {\n type: 'error',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'allowance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientAllowance',\n },\n {\n type: 'error',\n inputs: [\n { name: 'sender', internalType: 'address', type: 'address' },\n { name: 'balance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientBalance',\n },\n {\n type: 'error',\n inputs: [{ name: 'approver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidApprover',\n },\n {\n type: 'error',\n inputs: [{ name: 'receiver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidReceiver',\n },\n {\n type: 'error',\n inputs: [{ name: 'sender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSender',\n },\n {\n type: 'error',\n inputs: [{ name: 'spender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSpender',\n },\n {\n type: 'error',\n inputs: [{ name: 'deadline', internalType: 'uint256', type: 'uint256' }],\n name: 'ERC2612ExpiredSignature',\n },\n {\n type: 'error',\n inputs: [\n { name: 'signer', internalType: 'address', type: 'address' },\n { name: 'owner', internalType: 'address', type: 'address' },\n ],\n name: 'ERC2612InvalidSigner',\n },\n {\n type: 'error',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'currentNonce', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'InvalidAccountNonce',\n },\n {\n type: 'error',\n inputs: [{ name: 'gateway', internalType: 'address', type: 'address' }],\n name: 'InvalidGateway',\n },\n { type: 'error', inputs: [], name: 'InvalidShortString' },\n {\n type: 'error',\n inputs: [{ name: 'caller', internalType: 'address', type: 'address' }],\n name: 'OnlyGateway',\n },\n {\n type: 'error',\n inputs: [{ name: 'str', internalType: 'string', type: 'string' }],\n name: 'StringTooLong',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address', indexed: true },\n { name: 'spender', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Approval',\n },\n { type: 'event', anonymous: false, inputs: [], name: 'EIP712DomainChanged' },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Transfer',\n },\n {\n type: 'function',\n inputs: [],\n name: 'DOMAIN_SEPARATOR',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n ],\n name: 'allowance',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'burnFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'decimals',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'eip712Domain',\n outputs: [\n { name: 'fields', internalType: 'bytes1', type: 'bytes1' },\n { name: 'name', internalType: 'string', type: 'string' },\n { name: 'version', internalType: 'string', type: 'string' },\n { name: 'chainId', internalType: 'uint256', type: 'uint256' },\n { name: 'verifyingContract', internalType: 'address', type: 'address' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n { name: 'extensions', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'gateway',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'mint',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'name',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'nonces',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'v', internalType: 'uint8', type: 'uint8' },\n { name: 'r', internalType: 'bytes32', type: 'bytes32' },\n { name: 's', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'permit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'symbol',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'totalSupply',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transferFrom',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ArgonotToken\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const argonotTokenAbi = [\n {\n type: 'constructor',\n inputs: [{ name: 'gateway', internalType: 'address', type: 'address' }],\n stateMutability: 'nonpayable',\n },\n { type: 'error', inputs: [], name: 'ECDSAInvalidSignature' },\n {\n type: 'error',\n inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }],\n name: 'ECDSAInvalidSignatureLength',\n },\n {\n type: 'error',\n inputs: [{ name: 's', internalType: 'bytes32', type: 'bytes32' }],\n name: 'ECDSAInvalidSignatureS',\n },\n {\n type: 'error',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'allowance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientAllowance',\n },\n {\n type: 'error',\n inputs: [\n { name: 'sender', internalType: 'address', type: 'address' },\n { name: 'balance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientBalance',\n },\n {\n type: 'error',\n inputs: [{ name: 'approver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidApprover',\n },\n {\n type: 'error',\n inputs: [{ name: 'receiver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidReceiver',\n },\n {\n type: 'error',\n inputs: [{ name: 'sender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSender',\n },\n {\n type: 'error',\n inputs: [{ name: 'spender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSpender',\n },\n {\n type: 'error',\n inputs: [{ name: 'deadline', internalType: 'uint256', type: 'uint256' }],\n name: 'ERC2612ExpiredSignature',\n },\n {\n type: 'error',\n inputs: [\n { name: 'signer', internalType: 'address', type: 'address' },\n { name: 'owner', internalType: 'address', type: 'address' },\n ],\n name: 'ERC2612InvalidSigner',\n },\n {\n type: 'error',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'currentNonce', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'InvalidAccountNonce',\n },\n {\n type: 'error',\n inputs: [{ name: 'gateway', internalType: 'address', type: 'address' }],\n name: 'InvalidGateway',\n },\n { type: 'error', inputs: [], name: 'InvalidShortString' },\n {\n type: 'error',\n inputs: [{ name: 'caller', internalType: 'address', type: 'address' }],\n name: 'OnlyGateway',\n },\n {\n type: 'error',\n inputs: [{ name: 'str', internalType: 'string', type: 'string' }],\n name: 'StringTooLong',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address', indexed: true },\n { name: 'spender', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Approval',\n },\n { type: 'event', anonymous: false, inputs: [], name: 'EIP712DomainChanged' },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Transfer',\n },\n {\n type: 'function',\n inputs: [],\n name: 'DOMAIN_SEPARATOR',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n ],\n name: 'allowance',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'burnFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'decimals',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'eip712Domain',\n outputs: [\n { name: 'fields', internalType: 'bytes1', type: 'bytes1' },\n { name: 'name', internalType: 'string', type: 'string' },\n { name: 'version', internalType: 'string', type: 'string' },\n { name: 'chainId', internalType: 'uint256', type: 'uint256' },\n { name: 'verifyingContract', internalType: 'address', type: 'address' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n { name: 'extensions', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'gateway',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'mint',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'name',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'nonces',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'v', internalType: 'uint8', type: 'uint8' },\n { name: 'r', internalType: 'bytes32', type: 'bytes32' },\n { name: 's', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'permit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'symbol',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'totalSupply',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transferFrom',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// CanonicalMintableBurnableERC20\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const canonicalMintableBurnableErc20Abi = [\n { type: 'error', inputs: [], name: 'ECDSAInvalidSignature' },\n {\n type: 'error',\n inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }],\n name: 'ECDSAInvalidSignatureLength',\n },\n {\n type: 'error',\n inputs: [{ name: 's', internalType: 'bytes32', type: 'bytes32' }],\n name: 'ECDSAInvalidSignatureS',\n },\n {\n type: 'error',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'allowance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientAllowance',\n },\n {\n type: 'error',\n inputs: [\n { name: 'sender', internalType: 'address', type: 'address' },\n { name: 'balance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientBalance',\n },\n {\n type: 'error',\n inputs: [{ name: 'approver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidApprover',\n },\n {\n type: 'error',\n inputs: [{ name: 'receiver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidReceiver',\n },\n {\n type: 'error',\n inputs: [{ name: 'sender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSender',\n },\n {\n type: 'error',\n inputs: [{ name: 'spender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSpender',\n },\n {\n type: 'error',\n inputs: [{ name: 'deadline', internalType: 'uint256', type: 'uint256' }],\n name: 'ERC2612ExpiredSignature',\n },\n {\n type: 'error',\n inputs: [\n { name: 'signer', internalType: 'address', type: 'address' },\n { name: 'owner', internalType: 'address', type: 'address' },\n ],\n name: 'ERC2612InvalidSigner',\n },\n {\n type: 'error',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'currentNonce', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'InvalidAccountNonce',\n },\n {\n type: 'error',\n inputs: [{ name: 'gateway', internalType: 'address', type: 'address' }],\n name: 'InvalidGateway',\n },\n { type: 'error', inputs: [], name: 'InvalidShortString' },\n {\n type: 'error',\n inputs: [{ name: 'caller', internalType: 'address', type: 'address' }],\n name: 'OnlyGateway',\n },\n {\n type: 'error',\n inputs: [{ name: 'str', internalType: 'string', type: 'string' }],\n name: 'StringTooLong',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address', indexed: true },\n { name: 'spender', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Approval',\n },\n { type: 'event', anonymous: false, inputs: [], name: 'EIP712DomainChanged' },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Transfer',\n },\n {\n type: 'function',\n inputs: [],\n name: 'DOMAIN_SEPARATOR',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n ],\n name: 'allowance',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'burnFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'decimals',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'eip712Domain',\n outputs: [\n { name: 'fields', internalType: 'bytes1', type: 'bytes1' },\n { name: 'name', internalType: 'string', type: 'string' },\n { name: 'version', internalType: 'string', type: 'string' },\n { name: 'chainId', internalType: 'uint256', type: 'uint256' },\n { name: 'verifyingContract', internalType: 'address', type: 'address' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n { name: 'extensions', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'gateway',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'mint',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'name',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'nonces',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'v', internalType: 'uint8', type: 'uint8' },\n { name: 'r', internalType: 'bytes32', type: 'bytes32' },\n { name: 's', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'permit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'symbol',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'totalSupply',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transferFrom',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ICanonicalToken\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const iCanonicalTokenAbi = [\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address', indexed: true },\n { name: 'spender', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Approval',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Transfer',\n },\n {\n type: 'function',\n inputs: [],\n name: 'DOMAIN_SEPARATOR',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n ],\n name: 'allowance',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'burnFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'decimals',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'mint',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'nonces',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'v', internalType: 'uint8', type: 'uint8' },\n { name: 'r', internalType: 'bytes32', type: 'bytes32' },\n { name: 's', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'permit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'totalSupply',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transferFrom',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// MintingGateway\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const mintingGatewayAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'argonTokenAddress', internalType: 'address', type: 'address' },\n { name: 'argonotTokenAddress', internalType: 'address', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n { type: 'error', inputs: [], name: 'ArrayLengthMismatch' },\n { type: 'error', inputs: [], name: 'ECDSAInvalidSignature' },\n {\n type: 'error',\n inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }],\n name: 'ECDSAInvalidSignatureLength',\n },\n {\n type: 'error',\n inputs: [{ name: 's', internalType: 'bytes32', type: 'bytes32' }],\n name: 'ECDSAInvalidSignatureS',\n },\n { type: 'error', inputs: [], name: 'EnforcedPause' },\n { type: 'error', inputs: [], name: 'ExpectedPause' },\n { type: 'error', inputs: [], name: 'GlobalIssuanceCouncilNotBootstrapped' },\n { type: 'error', inputs: [], name: 'GlobalIssuanceCouncilQuorumNotMet' },\n {\n type: 'error',\n inputs: [\n { name: 'authorized', internalType: 'uint256', type: 'uint256' },\n { name: 'required', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'InsufficientAuthorizedCollateral',\n },\n {\n type: 'error',\n inputs: [\n { name: 'expected', internalType: 'uint64', type: 'uint64' },\n { name: 'provided', internalType: 'uint64', type: 'uint64' },\n ],\n name: 'InvalidChainId',\n },\n {\n type: 'error',\n inputs: [\n { name: 'expected', internalType: 'bytes32', type: 'bytes32' },\n { name: 'provided', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'InvalidCurrentCouncilSnapshot',\n },\n {\n type: 'error',\n inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256' }],\n name: 'InvalidGlobalIssuanceCouncilMember',\n },\n { type: 'error', inputs: [], name: 'InvalidInitialization' },\n { type: 'error', inputs: [], name: 'InvalidMicrogonCollateralForArgonotPayout' },\n {\n type: 'error',\n inputs: [{ name: 'signingKey', internalType: 'address', type: 'address' }],\n name: 'InvalidMintingAuthority',\n },\n {\n type: 'error',\n inputs: [\n { name: 'expected', internalType: 'uint64', type: 'uint64' },\n { name: 'provided', internalType: 'uint64', type: 'uint64' },\n ],\n name: 'InvalidQueueNonce',\n },\n {\n type: 'error',\n inputs: [\n { name: 'expected', internalType: 'uint256', type: 'uint256' },\n { name: 'provided', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'InvalidSignatureCount',\n },\n { type: 'error', inputs: [], name: 'InvalidSignatureOrder' },\n {\n type: 'error',\n inputs: [\n { name: 'maxRate', internalType: 'uint128', type: 'uint128' },\n { name: 'providedRate', internalType: 'uint128', type: 'uint128' },\n ],\n name: 'InvalidTransferOutRate',\n },\n {\n type: 'error',\n inputs: [{ name: 'kind', internalType: 'uint8', type: 'uint8' }],\n name: 'InvalidUpdateKind',\n },\n { type: 'error', inputs: [], name: 'MigrationAlreadyCompleted' },\n {\n type: 'error',\n inputs: [{ name: 'signingKey', internalType: 'address', type: 'address' }],\n name: 'MintingAuthorityAlreadyActive',\n },\n {\n type: 'error',\n inputs: [{ name: 'signingKey', internalType: 'address', type: 'address' }],\n name: 'MintingAuthorityTransferCapacityExceeded',\n },\n {\n type: 'error',\n inputs: [{ name: 'caller', internalType: 'address', type: 'address' }],\n name: 'NotGuardianOrOwner',\n },\n { type: 'error', inputs: [], name: 'NotInitializing' },\n {\n type: 'error',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'OwnableInvalidOwner',\n },\n {\n type: 'error',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'OwnableUnauthorizedAccount',\n },\n {\n type: 'error',\n inputs: [{ name: 'amount', internalType: 'uint256', type: 'uint256' }],\n name: 'RuntimeAmountOverflow',\n },\n {\n type: 'error',\n inputs: [\n { name: 'maxAllowed', internalType: 'uint256', type: 'uint256' },\n { name: 'provided', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TooManyGatewayUpdates',\n },\n {\n type: 'error',\n inputs: [\n { name: 'maxAllowed', internalType: 'uint256', type: 'uint256' },\n { name: 'provided', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TooManyMintingAuthorizations',\n },\n {\n type: 'error',\n inputs: [{ name: 'transferId', internalType: 'bytes32', type: 'bytes32' }],\n name: 'TransferOutOfArgonAlreadyFinalized',\n },\n {\n type: 'error',\n inputs: [\n { name: 'currentBlock', internalType: 'uint256', type: 'uint256' },\n { name: 'validUntilBlock', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TransferOutOfArgonExpired',\n },\n {\n type: 'error',\n inputs: [\n { name: 'currentBlock', internalType: 'uint256', type: 'uint256' },\n { name: 'validUntilBlock', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TransferOutOfArgonNotExpired',\n },\n {\n type: 'error',\n inputs: [{ name: 'token', internalType: 'address', type: 'address' }],\n name: 'UnsupportedToken',\n },\n { type: 'error', inputs: [], name: 'ZeroAdminSafe' },\n { type: 'error', inputs: [], name: 'ZeroAmount' },\n { type: 'error', inputs: [], name: 'ZeroGuardian' },\n { type: 'error', inputs: [], name: 'ZeroMicrogonsPerArgonot' },\n {\n type: 'error',\n inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256' }],\n name: 'ZeroRecipient',\n },\n { type: 'error', inputs: [], name: 'ZeroSigningKey' },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'councilHash', internalType: 'bytes32', type: 'bytes32', indexed: true }],\n name: 'GlobalIssuanceCouncilBootstrapped',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousCouncilHash', internalType: 'bytes32', type: 'bytes32', indexed: true },\n { name: 'councilHash', internalType: 'bytes32', type: 'bytes32', indexed: true },\n ],\n name: 'GlobalIssuanceCouncilForceUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'councilHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n { name: 'approvalHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n { name: 'relayerArgonAccountId', internalType: 'bytes32', type: 'bytes32', indexed: false },\n {\n name: 'gatewayState',\n internalType: 'struct MintingGateway.GatewayActivityState',\n type: 'tuple',\n components: [\n { name: 'gatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonApprovalsNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonCirculation', internalType: 'uint128', type: 'uint128' },\n { name: 'argonotCirculation', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n ],\n name: 'GlobalIssuanceCouncilRotated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousGuardian', internalType: 'address', type: 'address', indexed: true },\n { name: 'newGuardian', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'GuardianUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'version', internalType: 'uint64', type: 'uint64', indexed: false }],\n name: 'Initialized',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'argonRecipientCount', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'argonTotalAmount', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'argonotRecipientCount', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'argonotTotalAmount', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'MigrationCompleted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'signingKey', internalType: 'address', type: 'address', indexed: true },\n { name: 'microgonCollateral', internalType: 'uint128', type: 'uint128', indexed: false },\n { name: 'micronotCollateral', internalType: 'uint128', type: 'uint128', indexed: false },\n { name: 'coactivationCount', internalType: 'uint32', type: 'uint32', indexed: false },\n { name: 'sharedSignatureCount', internalType: 'uint32', type: 'uint32', indexed: false },\n { name: 'approvalHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n { name: 'relayerArgonAccountId', internalType: 'bytes32', type: 'bytes32', indexed: false },\n {\n name: 'gatewayState',\n internalType: 'struct MintingGateway.GatewayActivityState',\n type: 'tuple',\n components: [\n { name: 'gatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonApprovalsNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonCirculation', internalType: 'uint128', type: 'uint128' },\n { name: 'argonotCirculation', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n ],\n name: 'MintingAuthorityActivated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'signingKey', internalType: 'address', type: 'address', indexed: true },\n { name: 'microgonCollateral', internalType: 'uint128', type: 'uint128', indexed: false },\n { name: 'micronotCollateral', internalType: 'uint128', type: 'uint128', indexed: false },\n { name: 'approvalHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n { name: 'relayerArgonAccountId', internalType: 'bytes32', type: 'bytes32', indexed: false },\n {\n name: 'gatewayState',\n internalType: 'struct MintingGateway.GatewayActivityState',\n type: 'tuple',\n components: [\n { name: 'gatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonApprovalsNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonCirculation', internalType: 'uint128', type: 'uint128' },\n { name: 'argonotCirculation', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n ],\n name: 'MintingAuthorityDeactivated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'account', internalType: 'address', type: 'address', indexed: false }],\n name: 'Paused',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'transferId', internalType: 'bytes32', type: 'bytes32', indexed: false },\n {\n name: 'gatewayState',\n internalType: 'struct MintingGateway.GatewayActivityState',\n type: 'tuple',\n components: [\n { name: 'gatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonApprovalsNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonCirculation', internalType: 'uint128', type: 'uint128' },\n { name: 'argonotCirculation', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n ],\n name: 'TransferOutOfArgonCanceled',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'transferId', internalType: 'bytes32', type: 'bytes32', indexed: false },\n { name: 'token', internalType: 'address', type: 'address', indexed: false },\n { name: 'amount', internalType: 'uint128', type: 'uint128', indexed: false },\n {\n name: 'mintingCollateral',\n internalType: 'struct MintingGateway.MintingAuthorityCollateral[]',\n type: 'tuple[]',\n components: [\n { name: 'signingKey', internalType: 'address', type: 'address' },\n { name: 'microgonCollateral', internalType: 'uint128', type: 'uint128' },\n { name: 'micronotCollateral', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n {\n name: 'gatewayState',\n internalType: 'struct MintingGateway.GatewayActivityState',\n type: 'tuple',\n components: [\n { name: 'gatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonApprovalsNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonCirculation', internalType: 'uint128', type: 'uint128' },\n { name: 'argonotCirculation', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n ],\n name: 'TransferOutOfArgonFinalized',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'token', internalType: 'address', type: 'address', indexed: true },\n { name: 'amount', internalType: 'uint128', type: 'uint128', indexed: false },\n { name: 'argonAccountId', internalType: 'bytes32', type: 'bytes32', indexed: false },\n {\n name: 'gatewayState',\n internalType: 'struct MintingGateway.GatewayActivityState',\n type: 'tuple',\n components: [\n { name: 'gatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonApprovalsNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonCirculation', internalType: 'uint128', type: 'uint128' },\n { name: 'argonotCirculation', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n ],\n name: 'TransferToArgonStarted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'account', internalType: 'address', type: 'address', indexed: false }],\n name: 'Unpaused',\n },\n {\n type: 'function',\n inputs: [],\n name: 'ACTIVITY_HASH_VERSION',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAX_GATEWAY_UPDATES_PER_BATCH',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAX_MINTING_AUTHORIZATIONS_PER_TRANSFER',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'RUNTIME_DECIMALS',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'RUNTIME_TO_ERC20_SCALE',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'TOKEN_DECIMALS',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'locatorIndex', internalType: 'uint64', type: 'uint64' }],\n name: 'activityBlockLocators',\n outputs: [\n { name: 'blockNumber', internalType: 'uint64', type: 'uint64' },\n { name: 'startGatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'endGatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'activityRoot', internalType: 'bytes32', type: 'bytes32' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'activityBlockLocatorsMappingSlot',\n outputs: [{ name: 'slot', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'currentCouncil',\n internalType: 'struct MintingGateway.CouncilSnapshot',\n type: 'tuple',\n components: [\n { name: 'signers', internalType: 'address[]', type: 'address[]' },\n { name: 'weights', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n },\n {\n name: 'updates',\n internalType: 'struct MintingGateway.GatewayUpdate[]',\n type: 'tuple[]',\n components: [\n { name: 'queueNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'kind', internalType: 'enum MintingGateway.GatewayUpdateKind', type: 'uint8' },\n { name: 'payload', internalType: 'bytes', type: 'bytes' },\n { name: 'signatures', internalType: 'bytes[]', type: 'bytes[]' },\n ],\n },\n { name: 'relayerArgonAccountId', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'applyGatewayUpdates',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'argonApprovalsHash',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'argonApprovalsNonce',\n outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'argonCirculation',\n outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'argonToken',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'argonotCirculation',\n outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'argonotToken',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'request',\n internalType: 'struct MintingGateway.TransferOutOfArgonRequest',\n type: 'tuple',\n components: [\n { name: 'argonAccountId', internalType: 'bytes32', type: 'bytes32' },\n { name: 'argonTransferNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'chainId', internalType: 'uint64', type: 'uint64' },\n { name: 'microgonsPerArgonot', internalType: 'uint128', type: 'uint128' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n { name: 'validUntilBlock', internalType: 'uint64', type: 'uint64' },\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint128', type: 'uint128' },\n { name: 'mintingAuthorityTip', internalType: 'uint128', type: 'uint128' },\n ],\n },\n ],\n name: 'cancelTransferOutOfArgon',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'request',\n internalType: 'struct MintingGateway.TransferOutOfArgonRequest',\n type: 'tuple',\n components: [\n { name: 'argonAccountId', internalType: 'bytes32', type: 'bytes32' },\n { name: 'argonTransferNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'chainId', internalType: 'uint64', type: 'uint64' },\n { name: 'microgonsPerArgonot', internalType: 'uint128', type: 'uint128' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n { name: 'validUntilBlock', internalType: 'uint64', type: 'uint64' },\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint128', type: 'uint128' },\n { name: 'mintingAuthorityTip', internalType: 'uint128', type: 'uint128' },\n ],\n },\n {\n name: 'proof',\n internalType: 'struct MintingGateway.TransferOutOfArgonProof',\n type: 'tuple',\n components: [\n {\n name: 'authorizations',\n internalType: 'struct MintingGateway.MintingAuthorization[]',\n type: 'tuple[]',\n components: [\n { name: 'microgonCollateral', internalType: 'uint128', type: 'uint128' },\n { name: 'micronotCollateral', internalType: 'uint128', type: 'uint128' },\n { name: 'signature', internalType: 'bytes', type: 'bytes' },\n ],\n },\n ],\n },\n ],\n name: 'finalizeTransferOutOfArgon',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'transferId', internalType: 'bytes32', type: 'bytes32' }],\n name: 'finalizedTransferOutOfArgonIds',\n outputs: [{ name: 'isFinalized', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'nextCouncil',\n internalType: 'struct MintingGateway.CouncilSnapshot',\n type: 'tuple',\n components: [\n { name: 'signers', internalType: 'address[]', type: 'address[]' },\n { name: 'weights', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n },\n { name: 'nextMicrogonsPerArgonot', internalType: 'uint128', type: 'uint128' },\n ],\n name: 'forceUpdateActiveCouncil',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'gatewayActivityNonce',\n outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'globalIssuanceCouncil',\n outputs: [\n { name: 'totalWeight', internalType: 'uint256', type: 'uint256' },\n { name: 'memberCount', internalType: 'uint256', type: 'uint256' },\n { name: 'councilHash', internalType: 'bytes32', type: 'bytes32' },\n { name: 'epochMicrogonsPerArgonot', internalType: 'uint128', type: 'uint128' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'guardian',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'adminSafe', internalType: 'address', type: 'address' },\n { name: 'guardianAddress', internalType: 'address', type: 'address' },\n { name: 'councilHash', internalType: 'bytes32', type: 'bytes32' },\n { name: 'councilMemberCount', internalType: 'uint256', type: 'uint256' },\n { name: 'councilTotalWeight', internalType: 'uint256', type: 'uint256' },\n { name: 'initialMicrogonsPerArgonot', internalType: 'uint128', type: 'uint128' },\n ],\n name: 'initialize',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'latestActivityBlockLocatorIndex',\n outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'maxTransferOutMicrogonsPerArgonot',\n outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'argonMigration',\n internalType: 'struct MintingGateway.MigrationAssetDistribution',\n type: 'tuple',\n components: [\n { name: 'recipients', internalType: 'address[]', type: 'address[]' },\n { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n },\n {\n name: 'argonotMigration',\n internalType: 'struct MintingGateway.MigrationAssetDistribution',\n type: 'tuple',\n components: [\n { name: 'recipients', internalType: 'address[]', type: 'address[]' },\n { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n },\n ],\n name: 'migrate',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'migrationCompleted',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'signingKey', internalType: 'address', type: 'address' }],\n name: 'mintingAuthorityCollateralRemaining',\n outputs: [\n { name: 'microgonCollateral', internalType: 'uint128', type: 'uint128' },\n { name: 'micronotCollateral', internalType: 'uint128', type: 'uint128' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n { type: 'function', inputs: [], name: 'pause', outputs: [], stateMutability: 'nonpayable' },\n {\n type: 'function',\n inputs: [],\n name: 'paused',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'guardianAddress', internalType: 'address', type: 'address' }],\n name: 'setGuardian',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint128', type: 'uint128' },\n { name: 'argonAccountId', internalType: 'bytes32', type: 'bytes32' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'v', internalType: 'uint8', type: 'uint8' },\n { name: 'r', internalType: 'bytes32', type: 'bytes32' },\n { name: 's', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'startTransferToArgon',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'amount', internalType: 'uint128', type: 'uint128' }],\n name: 'toTokenAmount',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n { type: 'function', inputs: [], name: 'unpause', outputs: [], stateMutability: 'nonpayable' },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ProxyAdmin\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const proxyAdminAbi = [\n {\n type: 'constructor',\n inputs: [{ name: 'initialOwner', internalType: 'address', type: 'address' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'error',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'OwnableInvalidOwner',\n },\n {\n type: 'error',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'OwnableUnauthorizedAccount',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'function',\n inputs: [],\n name: 'UPGRADE_INTERFACE_VERSION',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'proxy', internalType: 'contract ITransparentUpgradeableProxy', type: 'address' },\n { name: 'implementation', internalType: 'address', type: 'address' },\n { name: 'data', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'upgradeAndCall',\n outputs: [],\n stateMutability: 'payable',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// TransparentUpgradeableProxy\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const transparentUpgradeableProxyAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'logic', internalType: 'address', type: 'address' },\n { name: 'initialOwner', internalType: 'address', type: 'address' },\n { name: 'data', internalType: 'bytes', type: 'bytes' },\n ],\n stateMutability: 'payable',\n },\n {\n type: 'error',\n inputs: [{ name: 'target', internalType: 'address', type: 'address' }],\n name: 'AddressEmptyCode',\n },\n {\n type: 'error',\n inputs: [{ name: 'admin', internalType: 'address', type: 'address' }],\n name: 'ERC1967InvalidAdmin',\n },\n {\n type: 'error',\n inputs: [{ name: 'implementation', internalType: 'address', type: 'address' }],\n name: 'ERC1967InvalidImplementation',\n },\n { type: 'error', inputs: [], name: 'ERC1967NonPayable' },\n { type: 'error', inputs: [], name: 'ERC1967ProxyUninitialized' },\n { type: 'error', inputs: [], name: 'FailedCall' },\n { type: 'error', inputs: [], name: 'ProxyDeniedAdminAccess' },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },\n { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },\n ],\n name: 'AdminChanged',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],\n name: 'Upgraded',\n },\n { type: 'fallback', stateMutability: 'payable' },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// EventMetadataConstants\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nimport type { Hex } from 'viem';\n\nexport type ArgonTokenApproval = {\n owner: Hex;\n spender: Hex;\n value: bigint;\n};\n\nexport type ArgonTokenEIP712DomainChanged = {};\n\nexport type ArgonTokenTransfer = {\n from: Hex;\n to: Hex;\n value: bigint;\n};\n\nexport type ArgonotTokenApproval = {\n owner: Hex;\n spender: Hex;\n value: bigint;\n};\n\nexport type ArgonotTokenEIP712DomainChanged = {};\n\nexport type ArgonotTokenTransfer = {\n from: Hex;\n to: Hex;\n value: bigint;\n};\n\nexport type CanonicalMintableBurnableERC20Approval = {\n owner: Hex;\n spender: Hex;\n value: bigint;\n};\n\nexport type CanonicalMintableBurnableERC20EIP712DomainChanged = {};\n\nexport type CanonicalMintableBurnableERC20Transfer = {\n from: Hex;\n to: Hex;\n value: bigint;\n};\n\nexport type ICanonicalTokenApproval = {\n owner: Hex;\n spender: Hex;\n value: bigint;\n};\n\nexport type ICanonicalTokenTransfer = {\n from: Hex;\n to: Hex;\n value: bigint;\n};\n\nexport type MintingGatewayGlobalIssuanceCouncilBootstrapped = {\n councilHash: Hex;\n};\n\nexport type MintingGatewayGlobalIssuanceCouncilForceUpdated = {\n previousCouncilHash: Hex;\n councilHash: Hex;\n};\n\nexport type MintingGatewayActivityState = {\n gatewayActivityNonce: bigint;\n argonApprovalsNonce: bigint;\n argonCirculation: bigint;\n argonotCirculation: bigint;\n};\n\nexport type MintingGatewayGlobalIssuanceCouncilRotated = {\n councilHash: Hex;\n approvalHash: Hex;\n relayerArgonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\n\nexport type MintingGatewayGuardianUpdated = {\n previousGuardian: Hex;\n newGuardian: Hex;\n};\n\nexport type MintingGatewayInitialized = {\n version: bigint;\n};\n\nexport type MintingGatewayMigrationCompleted = {\n argonRecipientCount: bigint;\n argonTotalAmount: bigint;\n argonotRecipientCount: bigint;\n argonotTotalAmount: bigint;\n};\n\nexport type MintingGatewayMintingAuthorityActivated = {\n signingKey: Hex;\n microgonCollateral: bigint;\n micronotCollateral: bigint;\n coactivationCount: bigint;\n sharedSignatureCount: bigint;\n approvalHash: Hex;\n relayerArgonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\n\nexport type MintingGatewayMintingAuthorityDeactivated = {\n signingKey: Hex;\n microgonCollateral: bigint;\n micronotCollateral: bigint;\n approvalHash: Hex;\n relayerArgonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\n\nexport type MintingGatewayOwnershipTransferred = {\n previousOwner: Hex;\n newOwner: Hex;\n};\n\nexport type MintingGatewayPaused = {\n account: Hex;\n};\n\nexport type MintingGatewayTransferOutOfArgonCanceled = {\n transferId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\n\nexport type MintingGatewayMintingAuthorityCollateral = {\n signingKey: Hex;\n microgonCollateral: bigint;\n micronotCollateral: bigint;\n};\n\nexport type MintingGatewayTransferOutOfArgonFinalized = {\n transferId: Hex;\n token: Hex;\n amount: bigint;\n mintingCollateral: readonly MintingGatewayMintingAuthorityCollateral[];\n gatewayState: MintingGatewayActivityState;\n};\n\nexport type MintingGatewayTransferToArgonStarted = {\n from: Hex;\n token: Hex;\n amount: bigint;\n argonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\n\nexport type MintingGatewayUnpaused = {\n account: Hex;\n};\n\nexport type ProxyAdminOwnershipTransferred = {\n previousOwner: Hex;\n newOwner: Hex;\n};\n\nexport type TransparentUpgradeableProxyAdminChanged = {\n previousAdmin: Hex;\n newAdmin: Hex;\n};\n\nexport type TransparentUpgradeableProxyUpgraded = {\n implementation: Hex;\n};\n\nexport const ArgonTokenEvents = {\n Approval: {\n name: 'Approval',\n topic: '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925',\n },\n EIP712DomainChanged: {\n name: 'EIP712DomainChanged',\n topic: '0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31',\n },\n Transfer: {\n name: 'Transfer',\n topic: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n },\n} as const;\n\nexport const ArgonotTokenEvents = {\n Approval: {\n name: 'Approval',\n topic: '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925',\n },\n EIP712DomainChanged: {\n name: 'EIP712DomainChanged',\n topic: '0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31',\n },\n Transfer: {\n name: 'Transfer',\n topic: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n },\n} as const;\n\nexport const CanonicalMintableBurnableERC20Events = {\n Approval: {\n name: 'Approval',\n topic: '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925',\n },\n EIP712DomainChanged: {\n name: 'EIP712DomainChanged',\n topic: '0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31',\n },\n Transfer: {\n name: 'Transfer',\n topic: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n },\n} as const;\n\nexport const ICanonicalTokenEvents = {\n Approval: {\n name: 'Approval',\n topic: '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925',\n },\n Transfer: {\n name: 'Transfer',\n topic: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n },\n} as const;\n\nexport const MintingGatewayEvents = {\n GlobalIssuanceCouncilBootstrapped: {\n name: 'GlobalIssuanceCouncilBootstrapped',\n topic: '0xac3566d46c25f65b48d269870da4b9349704c79de13ad49b115532834d7e7ed1',\n },\n GlobalIssuanceCouncilForceUpdated: {\n name: 'GlobalIssuanceCouncilForceUpdated',\n topic: '0x33e53e90d61fdc868629a6234670f92c4445196f3f98ebd71935bbc76c7d9153',\n },\n GlobalIssuanceCouncilRotated: {\n name: 'GlobalIssuanceCouncilRotated',\n topic: '0xee5f0b6612e124988e865e18a4c4b0ec70d2f263708bb1e17f6de867fb1fe1c2',\n },\n GuardianUpdated: {\n name: 'GuardianUpdated',\n topic: '0x064d28d3d3071c5cbc271a261c10c2f0f0d9e319390397101aa0eb23c6bad909',\n },\n Initialized: {\n name: 'Initialized',\n topic: '0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2',\n },\n MigrationCompleted: {\n name: 'MigrationCompleted',\n topic: '0xc255ddc45163282f24909556f7475ab4ec8eb1d51763b25a4560cee9f43d0645',\n },\n MintingAuthorityActivated: {\n name: 'MintingAuthorityActivated',\n topic: '0x9023f1e3e253ad361005d72868d790c37ca6f53a03d522ebc93dca42154e15bf',\n },\n MintingAuthorityDeactivated: {\n name: 'MintingAuthorityDeactivated',\n topic: '0x0b4ee788c9bfc3c405fb19e3f6137bf14a218c0dbc53c13a6ed07a225d360ebc',\n },\n OwnershipTransferred: {\n name: 'OwnershipTransferred',\n topic: '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0',\n },\n Paused: {\n name: 'Paused',\n topic: '0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258',\n },\n TransferOutOfArgonCanceled: {\n name: 'TransferOutOfArgonCanceled',\n topic: '0x3cb8789e9bf6f532eec2bc8ffee9b622fc0d6e6daefb7fb6bb2e2f7b2d62e452',\n },\n TransferOutOfArgonFinalized: {\n name: 'TransferOutOfArgonFinalized',\n topic: '0x64d79900ed82270f744ae62db527f4e328e336d8b51e77bc72601391fe779d06',\n },\n TransferToArgonStarted: {\n name: 'TransferToArgonStarted',\n topic: '0x3ab970a848f33363427e47cfbd7a627af0c6e72757f150137e38cef3cee24d93',\n },\n Unpaused: {\n name: 'Unpaused',\n topic: '0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa',\n },\n} as const;\n\nexport const ProxyAdminEvents = {\n OwnershipTransferred: {\n name: 'OwnershipTransferred',\n topic: '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0',\n },\n} as const;\n\nexport const TransparentUpgradeableProxyEvents = {\n AdminChanged: {\n name: 'AdminChanged',\n topic: '0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f',\n },\n Upgraded: {\n name: 'Upgraded',\n topic: '0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b',\n },\n} as const;\n","import type { Address, ContractFunctionArgs, Hex } from 'viem';\nimport { encodeAbiParameters, keccak256, stringToHex } from 'viem';\nimport type {\n MintingGatewayActivityState,\n MintingGatewayMintingAuthorityCollateral,\n} from './generated.js';\nimport { mintingGatewayAbi } from './generated.js';\n\nexport const MINTING_GATEWAY_UPDATE_KINDS = {\n globalIssuanceCouncilRotate: 0,\n mintingAuthorityActivate: 1,\n mintingAuthorityDeactivate: 2,\n} as const;\n\nexport type MintingGatewayHashContext = {\n chainId: bigint;\n gatewayAddress: Address;\n};\nexport type MintingGatewayActivityBlockLocator = {\n blockNumber: bigint;\n startGatewayActivityNonce: bigint;\n endGatewayActivityNonce: bigint;\n activityRoot: Hex;\n};\n\ntype ApplyGatewayUpdatesArgs = ContractFunctionArgs<\n typeof mintingGatewayAbi,\n 'nonpayable',\n 'applyGatewayUpdates'\n>;\ntype FinalizeTransferOutOfArgonArgs = ContractFunctionArgs<\n typeof mintingGatewayAbi,\n 'nonpayable',\n 'finalizeTransferOutOfArgon'\n>;\ntype MigrateArgs = ContractFunctionArgs<typeof mintingGatewayAbi, 'nonpayable', 'migrate'>;\nexport type MintingGatewayCouncilSnapshot = ApplyGatewayUpdatesArgs[0];\nexport type MintingGatewayGatewayUpdate = ApplyGatewayUpdatesArgs[1][number];\nexport type MintingGatewayTransferOutOfArgonRequest = FinalizeTransferOutOfArgonArgs[0];\nexport type MintingGatewayTransferOutOfArgonProof = FinalizeTransferOutOfArgonArgs[1];\nexport type MintingGatewayMintingAuthorization =\n MintingGatewayTransferOutOfArgonProof['authorizations'][number];\nexport type MintingGatewayMigrationAssetDistribution = MigrateArgs[0];\nexport type MintingGatewayGlobalIssuanceCouncilRotateTarget = {\n council: MintingGatewayCouncilSnapshot;\n epochMicrogonsPerArgonot: bigint;\n};\nexport type MintingGatewayGlobalIssuanceCouncilHashArgs = MintingGatewayCouncilSnapshot & {\n epochMicrogonsPerArgonot: bigint;\n};\n\nexport type MintingGatewayMintingAuthorityActivationTarget = {\n microgonCollateral: bigint;\n micronotCollateral: bigint;\n signingKey: Address;\n};\n\nexport type MintingGatewayMintingAuthorityDeactivateTarget = {\n signingKey: Address;\n};\ntype GlobalIssuanceCouncilRotatedActivityHashArgs = {\n councilHash: Hex;\n approvalHash: Hex;\n relayerArgonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\ntype MintingAuthorityActivatedActivityHashArgs = {\n signingKey: Address;\n microgonCollateral: bigint;\n micronotCollateral: bigint;\n coactivationCount: number | bigint;\n sharedSignatureCount: number | bigint;\n approvalHash: Hex;\n relayerArgonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\ntype MintingAuthorityDeactivatedActivityHashArgs = {\n signingKey: Address;\n microgonCollateral: bigint;\n micronotCollateral: bigint;\n approvalHash: Hex;\n relayerArgonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\ntype TransferToArgonStartedActivityHashArgs = {\n from: Address;\n token: Address;\n amount: bigint;\n argonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\ntype TransferOutOfArgonCanceledActivityHashArgs = {\n transferId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\ntype TransferOutOfArgonFinalizedActivityHashArgs = {\n transferId: Hex;\n token: Address;\n amount: bigint;\n mintingCollateral: MintingGatewayMintingAuthorityCollateral[];\n gatewayState: MintingGatewayActivityState;\n};\n\ntype ActivateMintingAuthorityApprovalArgs = {\n queueNonce: bigint;\n approvingCouncilHash: Hex;\n previousUpdateHash: Hex;\n target: MintingGatewayMintingAuthorityActivationTarget;\n};\n\ntype RotateGlobalIssuanceCouncilApprovalArgs = {\n queueNonce: bigint;\n approvingCouncilHash: Hex;\n previousUpdateHash: Hex;\n target: MintingGatewayGlobalIssuanceCouncilRotateTarget;\n};\n\ntype MintingAuthorizationHashArgs = {\n request: MintingGatewayTransferOutOfArgonRequest;\n microgonCollateral: MintingGatewayMintingAuthorization['microgonCollateral'];\n micronotCollateral: MintingGatewayMintingAuthorization['micronotCollateral'];\n};\n\ntype GatewayUpdateApprovalArgs = {\n queueNonce: bigint;\n approvingCouncilHash: Hex;\n kind: (typeof MINTING_GATEWAY_UPDATE_KINDS)[keyof typeof MINTING_GATEWAY_UPDATE_KINDS];\n targetId: Hex;\n targetPayloadHash: Hex;\n previousUpdateHash: Hex;\n};\n\nconst COUNCIL_SNAPSHOT_PARAMETERS = [\n { name: 'signers', type: 'address[]' },\n { name: 'weights', type: 'uint256[]' },\n] as const;\nconst GATEWAY_ACTIVITY_STATE_PARAMETERS = [\n { name: 'gatewayActivityNonce', type: 'uint64' },\n { name: 'argonApprovalsNonce', type: 'uint64' },\n { name: 'argonCirculation', type: 'uint128' },\n { name: 'argonotCirculation', type: 'uint128' },\n] as const;\nconst MINTING_AUTHORITY_COLLATERAL_PARAMETERS = [\n { name: 'signingKey', type: 'address' },\n { name: 'microgonCollateral', type: 'uint128' },\n { name: 'micronotCollateral', type: 'uint128' },\n] as const;\n\nconst GLOBAL_ISSUANCE_COUNCIL_ROTATE_TARGET_PARAMETERS = [\n {\n type: 'tuple',\n components: [\n {\n name: 'council',\n type: 'tuple',\n components: COUNCIL_SNAPSHOT_PARAMETERS,\n },\n { name: 'epochMicrogonsPerArgonot', type: 'uint128' },\n ],\n },\n] as const;\n\nconst ACTIVATION_TARGET_PARAMETERS = [\n {\n type: 'tuple',\n components: [\n { name: 'microgonCollateral', type: 'uint128' },\n { name: 'micronotCollateral', type: 'uint128' },\n { name: 'signingKey', type: 'address' },\n ],\n },\n] as const;\n\nconst DEACTIVATION_TARGET_PARAMETERS = [\n {\n type: 'tuple',\n components: [{ name: 'signingKey', type: 'address' }],\n },\n] as const;\n\nconst GATEWAY_UPDATE_APPROVAL_PARAMETERS = [\n { type: 'bytes32' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'uint64' },\n { type: 'bytes32' },\n { type: 'uint8' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\n\nconst MINTING_AUTHORITY_HASH_PARAMETERS = [\n { type: 'uint128' },\n { type: 'uint128' },\n { type: 'address' },\n] as const;\n\nconst MINTING_AUTHORITY_ACTIVATION_PARAMETERS = [\n { type: 'bytes32' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'bytes32' },\n] as const;\n\nconst GLOBAL_ISSUANCE_COUNCIL_ROTATION_PARAMETERS = [\n { type: 'bytes32' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'bytes32' },\n { type: 'uint128' },\n] as const;\n\nfunction signingKeyTargetId(signingKey: Address): Hex {\n return `0x${signingKey.slice(2).padStart(64, '0').toLowerCase()}`;\n}\n\nconst TRANSFER_OUT_OF_ARGON_REQUEST_PARAMETERS = [\n { type: 'bytes32' },\n { type: 'uint64' },\n { type: 'uint64' },\n { type: 'uint128' },\n { type: 'address' },\n { type: 'uint64' },\n { type: 'address' },\n { type: 'uint128' },\n { type: 'uint128' },\n] as const;\n\nconst MINTING_AUTHORIZATION_PARAMETERS = [\n { type: 'bytes32' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'bytes32' },\n { type: 'uint128' },\n { type: 'uint128' },\n] as const;\nconst GATEWAY_ACTIVITY_HASH_PARAMETERS = [\n { type: 'bytes32' },\n { type: 'uint8' },\n { type: 'uint256' },\n { type: 'address' },\n] as const;\nconst GLOBAL_ISSUANCE_COUNCIL_ROTATED_ACTIVITY_PARAMETERS = [\n ...GATEWAY_ACTIVITY_HASH_PARAMETERS,\n { type: 'bytes32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\nconst MINTING_AUTHORITY_ACTIVATED_ACTIVITY_PARAMETERS = [\n ...GATEWAY_ACTIVITY_HASH_PARAMETERS,\n { type: 'address' },\n { type: 'uint128' },\n { type: 'uint128' },\n { type: 'uint32' },\n { type: 'uint32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\nconst MINTING_AUTHORITY_DEACTIVATED_ACTIVITY_PARAMETERS = [\n ...GATEWAY_ACTIVITY_HASH_PARAMETERS,\n { type: 'address' },\n { type: 'uint128' },\n { type: 'uint128' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\nconst TRANSFER_TO_ARGON_STARTED_ACTIVITY_PARAMETERS = [\n ...GATEWAY_ACTIVITY_HASH_PARAMETERS,\n { type: 'address' },\n { type: 'address' },\n { type: 'uint128' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\nconst TRANSFER_OUT_OF_ARGON_CANCELED_ACTIVITY_PARAMETERS = [\n ...GATEWAY_ACTIVITY_HASH_PARAMETERS,\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\nconst TRANSFER_OUT_OF_ARGON_FINALIZED_ACTIVITY_PARAMETERS = [\n ...GATEWAY_ACTIVITY_HASH_PARAMETERS,\n { type: 'bytes32' },\n { type: 'address' },\n { type: 'uint128' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\n\nconst GLOBAL_ISSUANCE_COUNCIL_ROTATION_TAG = keccak256(\n stringToHex('ARGON_GLOBAL_ISSUANCE_COUNCIL_ROTATION'),\n);\nconst MINTING_AUTHORITY_ACTIVATION_TAG = keccak256(\n stringToHex('ARGON_MINTING_AUTHORITY_ACTIVATION'),\n);\nconst GATEWAY_UPDATE_APPROVAL_TAG = keccak256(stringToHex('ARGON_GATEWAY_UPDATE_APPROVAL'));\nconst TRANSFER_OUT_OF_ARGON_AUTHORIZATION_TAG = keccak256(\n stringToHex('ARGON_TRANSFER_OUT_OF_ARGON_AUTHORIZATION'),\n);\nconst GLOBAL_ISSUANCE_COUNCIL_ROTATED_ACTIVITY_TAG = keccak256(\n stringToHex('ARGON_GLOBAL_ISSUANCE_COUNCIL_ROTATED_ACTIVITY'),\n);\nconst MINTING_AUTHORITY_ACTIVATED_ACTIVITY_TAG = keccak256(\n stringToHex('ARGON_MINTING_AUTHORITY_ACTIVATED_ACTIVITY'),\n);\nconst MINTING_AUTHORITY_DEACTIVATED_ACTIVITY_TAG = keccak256(\n stringToHex('ARGON_MINTING_AUTHORITY_DEACTIVATED_ACTIVITY'),\n);\nconst TRANSFER_TO_ARGON_STARTED_ACTIVITY_TAG = keccak256(\n stringToHex('ARGON_TRANSFER_TO_ARGON_STARTED_ACTIVITY'),\n);\nconst TRANSFER_OUT_OF_ARGON_CANCELED_ACTIVITY_TAG = keccak256(\n stringToHex('ARGON_TRANSFER_OUT_OF_ARGON_CANCELED_ACTIVITY'),\n);\nconst TRANSFER_OUT_OF_ARGON_FINALIZED_ACTIVITY_TAG = keccak256(\n stringToHex('ARGON_TRANSFER_OUT_OF_ARGON_FINALIZED_ACTIVITY'),\n);\nexport const MINTING_GATEWAY_ACTIVITY_HASH_VERSION = 1;\n\nexport function encodeMintingGatewayCouncilSnapshot(snapshot: MintingGatewayCouncilSnapshot): Hex {\n return encodeAbiParameters(\n [{ type: 'tuple', components: COUNCIL_SNAPSHOT_PARAMETERS }],\n [snapshot],\n );\n}\n\nexport function encodeMintingGatewayGlobalIssuanceCouncilRotateTarget(\n target: MintingGatewayGlobalIssuanceCouncilRotateTarget,\n): Hex {\n return encodeAbiParameters(GLOBAL_ISSUANCE_COUNCIL_ROTATE_TARGET_PARAMETERS, [target]);\n}\n\nexport function encodeMintingGatewayMintingAuthorityActivationTarget(\n target: MintingGatewayMintingAuthorityActivationTarget,\n): Hex {\n return encodeAbiParameters(ACTIVATION_TARGET_PARAMETERS, [target]);\n}\n\nexport function encodeMintingGatewayMintingAuthorityDeactivateTarget(\n target: MintingGatewayMintingAuthorityDeactivateTarget,\n): Hex {\n return encodeAbiParameters(DEACTIVATION_TARGET_PARAMETERS, [target]);\n}\n\nexport function hashMintingGatewayGlobalIssuanceCouncil(\n council: MintingGatewayGlobalIssuanceCouncilHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(\n [{ type: 'address[]' }, { type: 'uint256[]' }, { type: 'uint128' }],\n [council.signers, council.weights, council.epochMicrogonsPerArgonot],\n ),\n );\n}\n\nexport function hashMintingGatewayMintingAuthority(\n target: MintingGatewayMintingAuthorityActivationTarget,\n): Hex {\n return keccak256(\n encodeAbiParameters(MINTING_AUTHORITY_HASH_PARAMETERS, [\n target.microgonCollateral,\n target.micronotCollateral,\n target.signingKey,\n ]),\n );\n}\n\nexport function hashMintingGatewayActivateMintingAuthorityApproval(\n context: MintingGatewayHashContext,\n args: ActivateMintingAuthorityApprovalArgs,\n): Hex {\n return hashMintingGatewayGatewayUpdateApproval(context, {\n queueNonce: args.queueNonce,\n approvingCouncilHash: args.approvingCouncilHash,\n kind: MINTING_GATEWAY_UPDATE_KINDS.mintingAuthorityActivate,\n targetId: signingKeyTargetId(args.target.signingKey),\n targetPayloadHash: hashMintingGatewayActivateMintingAuthority(context, args.target),\n previousUpdateHash: args.previousUpdateHash,\n });\n}\n\nexport function hashMintingGatewayRotateGlobalIssuanceCouncilApproval(\n context: MintingGatewayHashContext,\n args: RotateGlobalIssuanceCouncilApprovalArgs,\n): Hex {\n const nextCouncilHash = hashMintingGatewayGlobalIssuanceCouncil({\n ...args.target.council,\n epochMicrogonsPerArgonot: args.target.epochMicrogonsPerArgonot,\n });\n\n return hashMintingGatewayGatewayUpdateApproval(context, {\n queueNonce: args.queueNonce,\n approvingCouncilHash: args.approvingCouncilHash,\n kind: MINTING_GATEWAY_UPDATE_KINDS.globalIssuanceCouncilRotate,\n targetId: nextCouncilHash,\n targetPayloadHash: hashMintingGatewayRotateGlobalIssuanceCouncil(context, args.target),\n previousUpdateHash: args.previousUpdateHash,\n });\n}\n\nexport function hashMintingGatewayActivateMintingAuthority(\n context: MintingGatewayHashContext,\n target: MintingGatewayMintingAuthorityActivationTarget,\n): Hex {\n return keccak256(\n encodeAbiParameters(MINTING_AUTHORITY_ACTIVATION_PARAMETERS, [\n MINTING_AUTHORITY_ACTIVATION_TAG,\n context.chainId,\n context.gatewayAddress,\n hashMintingGatewayMintingAuthority(target),\n ]),\n );\n}\n\nexport function hashMintingGatewayRotateGlobalIssuanceCouncil(\n context: MintingGatewayHashContext,\n target: MintingGatewayGlobalIssuanceCouncilRotateTarget,\n): Hex {\n return keccak256(\n encodeAbiParameters(GLOBAL_ISSUANCE_COUNCIL_ROTATION_PARAMETERS, [\n GLOBAL_ISSUANCE_COUNCIL_ROTATION_TAG,\n context.chainId,\n context.gatewayAddress,\n hashMintingGatewayGlobalIssuanceCouncil({\n ...target.council,\n epochMicrogonsPerArgonot: target.epochMicrogonsPerArgonot,\n }),\n target.epochMicrogonsPerArgonot,\n ]),\n );\n}\n\nexport function hashMintingGatewayGatewayUpdateApproval(\n context: MintingGatewayHashContext,\n args: GatewayUpdateApprovalArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(GATEWAY_UPDATE_APPROVAL_PARAMETERS, [\n GATEWAY_UPDATE_APPROVAL_TAG,\n context.chainId,\n context.gatewayAddress,\n args.queueNonce,\n args.approvingCouncilHash,\n args.kind,\n args.targetId,\n args.targetPayloadHash,\n args.previousUpdateHash,\n ]),\n );\n}\n\nexport function hashMintingGatewayTransferOutOfArgonRequest(\n request: MintingGatewayTransferOutOfArgonRequest,\n): Hex {\n return keccak256(\n encodeAbiParameters(TRANSFER_OUT_OF_ARGON_REQUEST_PARAMETERS, [\n request.argonAccountId,\n request.argonTransferNonce,\n request.chainId,\n request.microgonsPerArgonot,\n request.recipient,\n request.validUntilBlock,\n request.token,\n request.amount,\n request.mintingAuthorityTip,\n ]),\n );\n}\n\nexport function hashMintingGatewayMintingAuthorization(\n context: MintingGatewayHashContext,\n args: MintingAuthorizationHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(MINTING_AUTHORIZATION_PARAMETERS, [\n TRANSFER_OUT_OF_ARGON_AUTHORIZATION_TAG,\n context.chainId,\n context.gatewayAddress,\n hashMintingGatewayTransferOutOfArgonRequest(args.request),\n args.microgonCollateral,\n args.micronotCollateral,\n ]),\n );\n}\n\nexport function hashMintingGatewayActivityState(gatewayState: MintingGatewayActivityState): Hex {\n return keccak256(\n encodeAbiParameters(\n [{ type: 'tuple', components: GATEWAY_ACTIVITY_STATE_PARAMETERS }],\n [gatewayState],\n ),\n );\n}\n\nexport function appendMintingGatewayActivityRoot(currentRoot: Hex, activityHash: Hex): Hex {\n return keccak256(\n encodeAbiParameters(\n [{ type: 'uint8' }, { type: 'bytes32' }, { type: 'bytes32' }],\n [MINTING_GATEWAY_ACTIVITY_HASH_VERSION, currentRoot, activityHash],\n ),\n );\n}\n\nexport function hashMintingGatewayActivityBlockLocator(\n locator: MintingGatewayActivityBlockLocator,\n): Hex {\n return keccak256(\n encodeAbiParameters(\n [\n { type: 'uint8' },\n { type: 'uint64' },\n { type: 'uint64' },\n { type: 'uint64' },\n { type: 'bytes32' },\n ],\n [\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n locator.blockNumber,\n locator.startGatewayActivityNonce,\n locator.endGatewayActivityNonce,\n locator.activityRoot,\n ],\n ),\n );\n}\n\nexport function hashMintingGatewayGlobalIssuanceCouncilRotatedActivity(\n context: MintingGatewayHashContext,\n args: GlobalIssuanceCouncilRotatedActivityHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(GLOBAL_ISSUANCE_COUNCIL_ROTATED_ACTIVITY_PARAMETERS, [\n GLOBAL_ISSUANCE_COUNCIL_ROTATED_ACTIVITY_TAG,\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n context.chainId,\n context.gatewayAddress,\n args.councilHash,\n args.approvalHash,\n args.relayerArgonAccountId,\n hashMintingGatewayActivityState(args.gatewayState),\n ]),\n );\n}\n\nexport function hashMintingGatewayMintingAuthorityActivatedActivity(\n context: MintingGatewayHashContext,\n args: MintingAuthorityActivatedActivityHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(MINTING_AUTHORITY_ACTIVATED_ACTIVITY_PARAMETERS, [\n MINTING_AUTHORITY_ACTIVATED_ACTIVITY_TAG,\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n context.chainId,\n context.gatewayAddress,\n args.signingKey,\n args.microgonCollateral,\n args.micronotCollateral,\n Number(args.coactivationCount),\n Number(args.sharedSignatureCount),\n args.approvalHash,\n args.relayerArgonAccountId,\n hashMintingGatewayActivityState(args.gatewayState),\n ]),\n );\n}\n\nexport function hashMintingGatewayMintingAuthorityDeactivatedActivity(\n context: MintingGatewayHashContext,\n args: MintingAuthorityDeactivatedActivityHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(MINTING_AUTHORITY_DEACTIVATED_ACTIVITY_PARAMETERS, [\n MINTING_AUTHORITY_DEACTIVATED_ACTIVITY_TAG,\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n context.chainId,\n context.gatewayAddress,\n args.signingKey,\n args.microgonCollateral,\n args.micronotCollateral,\n args.approvalHash,\n args.relayerArgonAccountId,\n hashMintingGatewayActivityState(args.gatewayState),\n ]),\n );\n}\n\nexport function hashMintingGatewayTransferToArgonStartedActivity(\n context: MintingGatewayHashContext,\n args: TransferToArgonStartedActivityHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(TRANSFER_TO_ARGON_STARTED_ACTIVITY_PARAMETERS, [\n TRANSFER_TO_ARGON_STARTED_ACTIVITY_TAG,\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n context.chainId,\n context.gatewayAddress,\n args.from,\n args.token,\n args.amount,\n args.argonAccountId,\n hashMintingGatewayActivityState(args.gatewayState),\n ]),\n );\n}\n\nexport function hashMintingGatewayTransferOutOfArgonCanceledActivity(\n context: MintingGatewayHashContext,\n args: TransferOutOfArgonCanceledActivityHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(TRANSFER_OUT_OF_ARGON_CANCELED_ACTIVITY_PARAMETERS, [\n TRANSFER_OUT_OF_ARGON_CANCELED_ACTIVITY_TAG,\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n context.chainId,\n context.gatewayAddress,\n args.transferId,\n hashMintingGatewayActivityState(args.gatewayState),\n ]),\n );\n}\n\nexport function hashMintingGatewayTransferOutOfArgonFinalizedActivity(\n context: MintingGatewayHashContext,\n args: TransferOutOfArgonFinalizedActivityHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(TRANSFER_OUT_OF_ARGON_FINALIZED_ACTIVITY_PARAMETERS, [\n TRANSFER_OUT_OF_ARGON_FINALIZED_ACTIVITY_TAG,\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n context.chainId,\n context.gatewayAddress,\n args.transferId,\n args.token,\n args.amount,\n keccak256(\n encodeAbiParameters(\n [{ type: 'tuple[]', components: MINTING_AUTHORITY_COLLATERAL_PARAMETERS }],\n [args.mintingCollateral],\n ),\n ),\n hashMintingGatewayActivityState(args.gatewayState),\n ]),\n );\n}\n","import argonTokenArtifact from './artifacts/contracts/ArgonToken.sol/ArgonToken.json' with { type: 'json' };\nimport argonotTokenArtifact from './artifacts/contracts/ArgonotToken.sol/ArgonotToken.json' with { type: 'json' };\nimport mintingGatewayArtifact from './artifacts/contracts/MintingGateway.sol/MintingGateway.json' with { type: 'json' };\nimport proxyAdminArtifact from './artifacts/contracts/ProxyArtifacts.sol/ProxyAdmin.json' with { type: 'json' };\nimport transparentUpgradeableProxyArtifact from './artifacts/contracts/ProxyArtifacts.sol/TransparentUpgradeableProxy.json' with { type: 'json' };\n\nexport const MINTING_GATEWAY_RUNTIME_DECIMALS = 6;\nexport const MINTING_GATEWAY_TOKEN_DECIMALS = 18;\nexport const MINTING_GATEWAY_RUNTIME_TO_ERC20_SCALE =\n 10n ** BigInt(MINTING_GATEWAY_TOKEN_DECIMALS - MINTING_GATEWAY_RUNTIME_DECIMALS);\n\nexport * from './generated.js';\nexport * from './hashing.js';\n\nexport {\n argonTokenArtifact,\n argonotTokenArtifact,\n mintingGatewayArtifact,\n proxyAdminArtifact,\n transparentUpgradeableProxyArtifact,\n};\n","import { BlockHeader, createBlockHeaderFromRPC, type JSONRPCBlock } from '@ethereumjs/block';\nimport { createMerkleProof, createMPT, verifyMPTWithMerkleProof } from '@ethereumjs/mpt';\nimport type { IArgonQueryable } from './index';\nimport { bytesToHex, type Hex, hexToBytes, toHex, toRlp } from 'viem';\nimport {\n type EthereumExecutionClient,\n type EthereumExecutionSource,\n type EthereumReceipt,\n getExecutionClient,\n retryWhileExecutionRpcIndexing,\n} from './EthereumExecution';\n\ntype EthGetBlockByHashRpc = {\n Method: 'eth_getBlockByHash';\n Parameters: [Hex, true];\n ReturnType: JSONRPCBlock;\n};\ntype EthGetBlockByNumberRpc = {\n Method: 'eth_getBlockByNumber';\n Parameters: [Hex, true];\n ReturnType: JSONRPCBlock;\n};\n\nexport type ArgonFinalizedExecutionHeader = {\n blockHash: Hex;\n blockNumber: bigint;\n};\n\nexport class ArgonFinalizedExecutionHeaderPathError extends Error {}\n\nexport type EthereumEventLocator = {\n txHash: Hex;\n logIndexes?: number[];\n receipt?: EthereumReceipt;\n};\n\nexport type EthereumEventLocatorBlock = EthereumEventLocator[];\n\nexport type EthereumEventLog = Pick<EthereumReceipt['logs'][number], 'address' | 'data'> & {\n topics: Hex[];\n};\n\ntype LoadedEthereumEventLocator = {\n receipt: EthereumReceipt;\n requestedLogs: EthereumReceipt['logs'];\n};\n\nexport type EthereumEventProof = {\n executionBlockProof: {\n anchorBlockHash: Hex;\n targetToAnchorHeaderChain: { rlp: Hex }[];\n };\n blocks: {\n targetBlockNumber: number;\n receiptLogs: {\n transactionIndex: number;\n eventLog: EthereumEventLog;\n }[];\n receiptProof: {\n nodes: Hex[];\n receipts: {\n transactionIndex: number;\n nodeIndexes: number[];\n }[];\n };\n }[];\n};\n\ntype EthereumEventProofBlock = EthereumEventProof['blocks'][number];\ntype EthereumReceiptProof = EthereumEventProofBlock['receiptProof'];\ntype EthereumReceiptLog = EthereumEventProofBlock['receiptLogs'][number];\ntype EthereumCombinedReceiptProofReceipt = EthereumReceiptProof['receipts'][number];\n\nexport function encodeReceiptTrieKey(transactionIndex: number): Uint8Array {\n return transactionIndex === 0 ? Uint8Array.from([0x80]) : toRlp(toHex(transactionIndex), 'bytes');\n}\n\nexport function encodeEthereumReceiptForProof(receipt: EthereumReceipt): Uint8Array {\n const payload = toRlp(\n [\n receipt.root ?? (receipt.status === 'success' ? '0x1' : '0x'),\n toHex(receipt.cumulativeGasUsed),\n receipt.logsBloom,\n receipt.logs.map(log => [log.address, [...log.topics], log.data]),\n ],\n 'bytes',\n );\n\n switch (receipt.type) {\n case 'legacy':\n return payload;\n case 'eip2930':\n return Uint8Array.from([...hexToBytes('0x01'), ...payload]);\n case 'eip1559':\n return Uint8Array.from([...hexToBytes('0x02'), ...payload]);\n case 'eip4844':\n return Uint8Array.from([...hexToBytes('0x03'), ...payload]);\n case 'eip7702':\n return Uint8Array.from([...hexToBytes('0x04'), ...payload]);\n default:\n throw new Error(`Unsupported Ethereum receipt type ${String(receipt.type)}`);\n }\n}\n\nexport async function buildEthereumEventProof(\n executionSource: EthereumExecutionSource,\n argonFinalizedExecutionHeader: ArgonFinalizedExecutionHeader,\n locatorBlocks: EthereumEventLocatorBlock[],\n): Promise<EthereumEventProof> {\n if (locatorBlocks.length === 0) {\n throw new Error('At least one Ethereum event locator is required');\n }\n\n const executionClient = getExecutionClient(executionSource);\n const blocksWithHeaders = await Promise.all(\n locatorBlocks.map(async (locatorBlock, index) => {\n if (locatorBlock.length === 0) {\n throw new Error(`Ethereum event locator block ${index} is empty`);\n }\n\n const loadedLocators = await loadEthereumEventLocators(executionClient, locatorBlock);\n const firstLocator = loadedLocators[0];\n const blockHash = firstLocator.receipt.blockHash;\n\n for (const locator of loadedLocators.slice(1)) {\n if (locator.receipt.blockHash.toLowerCase() !== blockHash.toLowerCase()) {\n throw new Error(`Ethereum event locator block ${index} spans multiple execution blocks`);\n }\n }\n\n const targetHeader = await loadExecutionHeader(executionClient, blockHash);\n if (argonFinalizedExecutionHeader.blockNumber < targetHeader.number) {\n throw new Error(\n `Argon finalized execution header ${argonFinalizedExecutionHeader.blockHash} is behind target block ${blockHash}; wait for relayer sync`,\n );\n }\n return {\n blockHash,\n locators: loadedLocators,\n targetHeader,\n };\n }),\n );\n\n if (blocksWithHeaders.length === 0) {\n throw new Error('At least one Ethereum event locator is required');\n }\n\n blocksWithHeaders.sort((a, b) => Number(a.targetHeader.number - b.targetHeader.number));\n const furthestTargetBlock = blocksWithHeaders[0];\n\n const targetToArgonFinalizedHeaderChain = await buildExecutionHeaderChain(\n executionClient,\n furthestTargetBlock.targetHeader,\n argonFinalizedExecutionHeader,\n );\n\n const blocks: EthereumEventProof['blocks'] = [];\n for (const { blockHash, locators, targetHeader } of blocksWithHeaders) {\n if (targetHeader.number === argonFinalizedExecutionHeader.blockNumber) {\n if (blockHash.toLowerCase() !== argonFinalizedExecutionHeader.blockHash.toLowerCase()) {\n throw new ArgonFinalizedExecutionHeaderPathError(\n `Target block ${blockHash} is not the Argon finalized execution header ${argonFinalizedExecutionHeader.blockHash}`,\n );\n }\n } else {\n const sharedTargetHeaderOnArgonFinalizedChain =\n targetToArgonFinalizedHeaderChain[\n Number(targetHeader.number - furthestTargetBlock.targetHeader.number)\n ];\n if (\n !sharedTargetHeaderOnArgonFinalizedChain ||\n sharedTargetHeaderOnArgonFinalizedChain.blockHash.toLowerCase() !== blockHash.toLowerCase()\n ) {\n throw new ArgonFinalizedExecutionHeaderPathError(\n `Target block ${blockHash} is not on the shared execution header chain to Argon finalized execution header ${argonFinalizedExecutionHeader.blockHash}`,\n );\n }\n }\n\n const receiptLogs: EthereumReceiptLog[] = [];\n const transactionIndexes: number[] = [];\n const seenTransactionIndexes = new Set<number>();\n\n for (const { receipt, requestedLogs } of locators) {\n if (!seenTransactionIndexes.has(receipt.transactionIndex)) {\n seenTransactionIndexes.add(receipt.transactionIndex);\n transactionIndexes.push(receipt.transactionIndex);\n }\n\n for (const log of requestedLogs) {\n receiptLogs.push({\n transactionIndex: receipt.transactionIndex,\n eventLog: {\n address: log.address,\n topics: [...log.topics],\n data: log.data,\n },\n });\n }\n }\n\n const receiptProof = await buildCombinedReceiptProof(\n executionClient,\n blockHash,\n transactionIndexes,\n bytesToHex(targetHeader.receiptTrie),\n );\n\n blocks.push({\n targetBlockNumber: Number(targetHeader.number),\n receiptProof,\n receiptLogs,\n });\n }\n\n return {\n executionBlockProof: {\n anchorBlockHash: argonFinalizedExecutionHeader.blockHash,\n targetToAnchorHeaderChain: targetToArgonFinalizedHeaderChain.map(({ rlp }) => ({ rlp })),\n },\n blocks,\n };\n}\n\nexport async function getLatestArgonFinalizedExecutionHeader(\n client: IArgonQueryable,\n): Promise<ArgonFinalizedExecutionHeader> {\n const verifierQuery = client.query.ethereumVerifier;\n const latestArgonFinalizedExecutionHeaderHash =\n await verifierQuery.latestExecutionHeaderAnchorBlockHash();\n\n if (latestArgonFinalizedExecutionHeaderHash.isNone) {\n throw new Error('No Argon finalized execution header is available yet; wait for relayer sync');\n }\n\n const blockHash = latestArgonFinalizedExecutionHeaderHash.unwrap().toHex();\n const argonFinalizedExecutionHeaderEntry = await verifierQuery.executionHeaderAnchors(blockHash);\n\n if (argonFinalizedExecutionHeaderEntry.isNone) {\n throw new Error(`Argon finalized execution header ${blockHash} is missing`);\n }\n\n return {\n blockHash,\n blockNumber: argonFinalizedExecutionHeaderEntry.unwrap().blockNumber.toBigInt(),\n };\n}\n\nexport async function waitForArgonFinalizedExecutionHeader(\n client: IArgonQueryable,\n targetBlockNumber: bigint,\n options: { pollMs?: number; timeoutMs?: number } = {},\n): Promise<ArgonFinalizedExecutionHeader> {\n const pollMs = options.pollMs ?? 3_000;\n const timeoutMs = options.timeoutMs ?? 5 * 60_000;\n const startedAt = Date.now();\n let lastError: Error | undefined;\n\n while (Date.now() - startedAt < timeoutMs) {\n try {\n const argonFinalizedExecutionHeader = await getLatestArgonFinalizedExecutionHeader(client);\n if (argonFinalizedExecutionHeader.blockNumber >= targetBlockNumber) {\n return argonFinalizedExecutionHeader;\n }\n } catch (error) {\n if (!(error instanceof Error)) {\n throw error;\n }\n lastError = error;\n }\n\n await new Promise(resolve => setTimeout(resolve, pollMs));\n }\n\n throw (\n lastError ??\n new Error(\n `Argon finalized execution header did not reach block ${targetBlockNumber} within ${Math.floor(timeoutMs / 1000)}s`,\n )\n );\n}\n\nasync function loadEthereumEventLocators(\n executionClient: EthereumExecutionClient,\n locators: EthereumEventLocator[],\n) {\n return await retryWhileExecutionRpcIndexing(() => {\n return Promise.all(\n locators.map(async ({ txHash, logIndexes, receipt }) => {\n receipt ??= await executionClient.getTransactionReceipt({ hash: txHash });\n const requestedLogIndexes = logIndexes ?? [0];\n if (requestedLogIndexes.length === 0) {\n throw new Error(`At least one log index is required for receipt ${txHash}`);\n }\n\n const requestedLogs = requestedLogIndexes.map(index => {\n const matchingLog =\n receipt.logs.find(log => log.logIndex != null && Number(log.logIndex) === index) ??\n receipt.logs[index];\n if (!matchingLog) {\n throw new Error(`Missing log ${index} in receipt ${receipt.transactionHash}`);\n }\n\n return matchingLog;\n });\n\n return {\n receipt,\n requestedLogs,\n } satisfies LoadedEthereumEventLocator;\n }),\n );\n });\n}\n\nexport async function loadExecutionHeader(\n executionClient: EthereumExecutionClient,\n blockTag: Hex | bigint,\n) {\n const blockData = await retryWhileExecutionRpcIndexing(() =>\n typeof blockTag === 'string'\n ? executionClient.request<EthGetBlockByHashRpc>({\n method: 'eth_getBlockByHash',\n params: [blockTag, true],\n })\n : executionClient.request<EthGetBlockByNumberRpc>({\n method: 'eth_getBlockByNumber',\n params: [toHex(blockTag), true],\n }),\n );\n const header = createBlockHeaderFromRPC(blockData);\n\n if (\n typeof blockTag === 'string' &&\n bytesToHex(header.hash()).toLowerCase() !== blockTag.toLowerCase()\n ) {\n throw new Error(`Execution header hash mismatch for block ${blockTag}`);\n }\n\n return header;\n}\n\nexport async function buildExecutionHeaderChain(\n executionClient: EthereumExecutionClient,\n targetHeader: BlockHeader,\n argonFinalizedExecutionHeader: ArgonFinalizedExecutionHeader,\n): Promise<{ blockHash: Hex; rlp: Hex }[]> {\n const targetBlockHash = bytesToHex(targetHeader.hash());\n\n if (targetHeader.number === argonFinalizedExecutionHeader.blockNumber) {\n if (targetBlockHash.toLowerCase() !== argonFinalizedExecutionHeader.blockHash.toLowerCase()) {\n throw new ArgonFinalizedExecutionHeaderPathError(\n `Target block ${targetBlockHash} is not the Argon finalized execution header ${argonFinalizedExecutionHeader.blockHash}`,\n );\n }\n\n return [];\n }\n\n const headers: { blockHash: Hex; rlp: Hex }[] = [];\n let header = await loadExecutionHeader(executionClient, argonFinalizedExecutionHeader.blockHash);\n\n if (header.number !== argonFinalizedExecutionHeader.blockNumber) {\n throw new Error(\n `Execution header ${argonFinalizedExecutionHeader.blockHash} is not block ${argonFinalizedExecutionHeader.blockNumber}`,\n );\n }\n\n while (header.number > targetHeader.number) {\n header = await loadExecutionHeader(executionClient, bytesToHex(header.parentHash));\n headers.push({\n blockHash: bytesToHex(header.hash()),\n rlp: bytesToHex(header.serialize()),\n });\n }\n\n if (\n header.number !== targetHeader.number ||\n bytesToHex(header.hash()).toLowerCase() !== targetBlockHash.toLowerCase()\n ) {\n throw new ArgonFinalizedExecutionHeaderPathError(\n `Target block ${targetBlockHash} is not on the shared execution header chain to Argon finalized execution header ${argonFinalizedExecutionHeader.blockHash}`,\n );\n }\n\n return headers.reverse();\n}\n\nasync function buildCombinedReceiptProof(\n executionClient: EthereumExecutionClient,\n blockHash: Hex,\n transactionIndexes: number[],\n receiptsRoot: Hex,\n): Promise<EthereumReceiptProof> {\n const { receipts } = await retryWhileExecutionRpcIndexing(async () => {\n const block = await executionClient.getBlock({ blockHash });\n const receipts = await Promise.all(\n block.transactions.map(hash => executionClient.getTransactionReceipt({ hash })),\n );\n\n return { receipts };\n });\n\n const trie = await createMPT();\n\n for (const receipt of receipts) {\n await trie.put(\n encodeReceiptTrieKey(receipt.transactionIndex),\n encodeEthereumReceiptForProof(receipt),\n );\n }\n\n if (bytesToHex(trie.root()).toLowerCase() !== receiptsRoot.toLowerCase()) {\n throw new Error(`Receipt trie root mismatch for block ${blockHash}`);\n }\n\n const nodeIndexesByHex = new Map<Hex, number>();\n const sharedNodes: Hex[] = [];\n const proofReceipts = await Promise.all(\n transactionIndexes.map(async transactionIndex => {\n const key = encodeReceiptTrieKey(transactionIndex);\n const proof = await createMerkleProof(trie, key);\n const verifiedReceipt = await verifyMPTWithMerkleProof(trie, trie.root(), key, proof);\n\n if (!verifiedReceipt) {\n throw new Error(\n `Receipt proof verification failed for transaction index ${transactionIndex}`,\n );\n }\n\n return {\n transactionIndex,\n nodeIndexes: proof.map(node => {\n const hexNode = bytesToHex(node);\n const existingIndex = nodeIndexesByHex.get(hexNode);\n if (existingIndex !== undefined) {\n return existingIndex;\n }\n\n const nextIndex = sharedNodes.length;\n sharedNodes.push(hexNode);\n nodeIndexesByHex.set(hexNode, nextIndex);\n return nextIndex;\n }),\n } satisfies EthereumCombinedReceiptProofReceipt;\n }),\n );\n\n return {\n nodes: sharedNodes,\n receipts: proofReceipts,\n };\n}\n","import { createPublicClient, http } from 'viem';\n\nexport type EthereumReceipt = Awaited<\n ReturnType<ReturnType<typeof createPublicClient>['getTransactionReceipt']>\n>;\nexport type EthereumExecutionClient = ReturnType<typeof createPublicClient>;\n\nexport type EthereumExecutionSource = {\n executionRpcUrl?: string;\n executionClient?: EthereumExecutionClient;\n};\n\nconst executionClientsByUrl = new Map<string, EthereumExecutionClient>();\n\nexport function getExecutionClient(source: EthereumExecutionSource): EthereumExecutionClient {\n if (source.executionClient) {\n return source.executionClient;\n }\n if (source.executionRpcUrl) {\n const cached = executionClientsByUrl.get(source.executionRpcUrl);\n if (cached) {\n return cached;\n }\n\n const client = createPublicClient({ transport: http(source.executionRpcUrl) });\n executionClientsByUrl.set(source.executionRpcUrl, client);\n return client;\n }\n\n throw new Error('Ethereum event proof requires an execution client or execution RPC URL');\n}\n\nfunction getExecutionRpcErrorText(error: unknown): string {\n if (error instanceof Error) {\n return [\n error.message,\n 'details' in error && typeof error.details === 'string' ? error.details : undefined,\n ]\n .filter(Boolean)\n .join(' ');\n }\n\n return String(error);\n}\n\n// Dev/test execution RPCs can expose a fresh block before their receipt/log indexes catch up.\n// When that happens, recent reads may fail transiently with \"indexing is in progress\".\nexport async function retryWhileExecutionRpcIndexing<TResult>(\n request: () => Promise<TResult>,\n): Promise<TResult> {\n const startedAt = Date.now();\n let lastError: Error | undefined;\n\n while (Date.now() - startedAt < 30_000) {\n try {\n return await request();\n } catch (error) {\n const errorText = getExecutionRpcErrorText(error);\n if (!errorText.includes('indexing is in progress')) {\n throw error;\n }\n\n lastError = error instanceof Error ? error : new Error(errorText);\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n }\n\n throw lastError ?? new Error('Timed out waiting for execution RPC indexing');\n}\n","import {\n mintingGatewayAbi,\n MintingGatewayEvents,\n type MintingGatewayGlobalIssuanceCouncilRotated,\n type MintingGatewayMintingAuthorityActivated,\n type MintingGatewayMintingAuthorityDeactivated,\n type MintingGatewayTransferOutOfArgonCanceled,\n type MintingGatewayTransferOutOfArgonFinalized,\n type MintingGatewayTransferToArgonStarted,\n} from './EvmContracts';\nimport { decodeEventLog, getAddress, type Hex } from 'viem';\nimport type { EthereumEventLog } from './EthereumProof';\n\ntype DecodedEthereumGatewayActivity =\n | ({\n kind: typeof MintingGatewayEvents.GlobalIssuanceCouncilRotated.name;\n } & MintingGatewayGlobalIssuanceCouncilRotated)\n | ({\n kind: typeof MintingGatewayEvents.MintingAuthorityActivated.name;\n } & MintingGatewayMintingAuthorityActivated)\n | ({\n kind: typeof MintingGatewayEvents.MintingAuthorityDeactivated.name;\n } & MintingGatewayMintingAuthorityDeactivated)\n | ({\n kind: typeof MintingGatewayEvents.TransferOutOfArgonCanceled.name;\n } & MintingGatewayTransferOutOfArgonCanceled)\n | ({\n kind: typeof MintingGatewayEvents.TransferOutOfArgonFinalized.name;\n } & MintingGatewayTransferOutOfArgonFinalized)\n | ({\n kind: typeof MintingGatewayEvents.TransferToArgonStarted.name;\n } & MintingGatewayTransferToArgonStarted);\n\nexport type EthereumGatewayActivity = DecodedEthereumGatewayActivity & {\n txHash: Hex;\n transactionIndex: number;\n logIndex: number;\n blockHash: Hex;\n blockNumber: bigint;\n};\n\nconst gatewayActivityEvents = [\n MintingGatewayEvents.GlobalIssuanceCouncilRotated,\n MintingGatewayEvents.MintingAuthorityActivated,\n MintingGatewayEvents.MintingAuthorityDeactivated,\n MintingGatewayEvents.TransferOutOfArgonCanceled,\n MintingGatewayEvents.TransferOutOfArgonFinalized,\n MintingGatewayEvents.TransferToArgonStarted,\n] as const;\n\nexport function findEthereumTransferToArgonStartedLogIndexes(\n receipt: { transactionHash: Hex; logs: { address: Hex; topics: Hex[] }[] },\n gatewayAddress: Hex,\n): number[] {\n const normalizedGatewayAddress = getAddress(gatewayAddress).toLowerCase();\n const indexes = receipt.logs.flatMap((log, index) =>\n log.address.toLowerCase() === normalizedGatewayAddress &&\n log.topics[0]?.toLowerCase() === MintingGatewayEvents.TransferToArgonStarted.topic\n ? [index]\n : [],\n );\n\n if (indexes.length === 0) {\n throw new Error(\n `Ethereum receipt ${receipt.transactionHash} did not emit TransferToArgonStarted from gateway ${gatewayAddress}`,\n );\n }\n\n return indexes;\n}\n\nexport function decodeEthereumTransferToArgonStartedLog(\n log: Pick<EthereumEventLog, 'topics' | 'data'>,\n): MintingGatewayTransferToArgonStarted {\n const decoded = decodeEthereumGatewayActivityLog(log);\n if (decoded.kind !== MintingGatewayEvents.TransferToArgonStarted.name) {\n throw new Error(\n `Expected ${MintingGatewayEvents.TransferToArgonStarted.name} gateway activity log`,\n );\n }\n\n const { kind: _kind, ...transfer } = decoded;\n return transfer;\n}\n\nexport function decodeEthereumGatewayActivityLog(\n log: Pick<EthereumEventLog, 'topics' | 'data'>,\n): DecodedEthereumGatewayActivity {\n const topic = log.topics[0]?.toLowerCase();\n if (!topic) {\n throw new Error('Gateway activity log is missing an event signature topic');\n }\n\n const event = gatewayActivityEvents.find(candidate => candidate.topic === topic);\n if (!event) {\n throw new Error(`Unsupported gateway activity event topic ${topic}`);\n }\n\n const { args } = decodeEventLog({\n abi: mintingGatewayAbi,\n eventName: event.name,\n topics: log.topics as [Hex, ...Hex[]],\n data: log.data,\n strict: true,\n });\n\n return {\n kind: event.name,\n ...args,\n } as DecodedEthereumGatewayActivity;\n}\n","import { mintingGatewayAbi } from './EvmContracts';\nimport type { ArgonClient, IArgonQueryable } from './index';\nimport { getAddress, type Hex, toHex } from 'viem';\nimport {\n decodeEthereumGatewayActivityLog,\n type EthereumGatewayActivity,\n} from './EthereumGatewayActivity';\nimport {\n ArgonFinalizedExecutionHeaderPathError,\n buildExecutionHeaderChain,\n buildEthereumEventProof,\n type ArgonFinalizedExecutionHeader,\n type EthereumEventLocator,\n type EthereumEventLocatorBlock,\n type EthereumEventProof,\n getLatestArgonFinalizedExecutionHeader,\n loadExecutionHeader,\n} from './EthereumProof';\nimport {\n getExecutionClient,\n type EthereumExecutionClient,\n type EthereumExecutionSource,\n retryWhileExecutionRpcIndexing,\n} from './EthereumExecution';\n\nexport type EthereumGatewayActivityProofPayload = {\n previousGatewayActivityNonce: bigint;\n proof: EthereumEventProof;\n gatewayActivityNonceRange: {\n start: bigint;\n end: bigint;\n };\n executionBlockNumberRange: {\n start: bigint;\n end: bigint;\n };\n activities: EthereumGatewayActivity[];\n};\n\nexport type DiscoveredGatewayActivities = Pick<\n EthereumGatewayActivityProofPayload,\n 'previousGatewayActivityNonce' | 'activities'\n>;\n\ntype MintingGatewayActivityBlockLocator = {\n blockNumber: bigint;\n startGatewayActivityNonce: bigint;\n endGatewayActivityNonce: bigint;\n activityRoot?: Hex;\n};\n\ntype GatewayActivityProofChunk = {\n activities: EthereumGatewayActivity[];\n locatorBlock: EthereumEventLocatorBlock;\n};\n\ntype GatewayProofBounds = {\n activitiesPerReceiptProof: number;\n receiptProofsPerExtrinsic: number;\n sharedHeaderDepth: number;\n};\n\ntype ArgonFinalizedExecutionHeaderPlan = {\n argonFinalizedExecutionHeader: ArgonFinalizedExecutionHeader;\n earliestTargetHeader: Awaited<ReturnType<typeof loadExecutionHeader>>;\n targetToArgonFinalizedHeaderChain: Awaited<ReturnType<typeof buildExecutionHeaderChain>>;\n};\n\ntype EthereumBlockLog = Awaited<ReturnType<EthereumExecutionClient['getLogs']>>[number];\n\nconst activityBlockLocatorAbi = [\n {\n inputs: [{ name: '', type: 'uint64' }],\n name: 'activityBlockLocators',\n outputs: [\n { name: 'blockNumber', type: 'uint64' },\n { name: 'startGatewayActivityNonce', type: 'uint64' },\n { name: 'endGatewayActivityNonce', type: 'uint64' },\n { name: 'activityRoot', type: 'bytes32' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\nconst legacyActivityBlockLocatorAbi = [\n {\n inputs: [{ name: '', type: 'uint64' }],\n name: 'activityBlockLocators',\n outputs: [\n { name: 'blockNumber', type: 'uint64' },\n { name: 'startGatewayActivityNonce', type: 'uint64' },\n { name: 'endGatewayActivityNonce', type: 'uint64' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\nexport async function buildGatewayActivityProofPayload(\n client: IArgonQueryable & Pick<ArgonClient, 'consts'>,\n options: EthereumExecutionSource & {\n gatewayAddress: Hex;\n throughExecutionBlockNumber?: bigint;\n },\n): Promise<EthereumGatewayActivityProofPayload | null> {\n const bounds = getGatewayProofBounds(client);\n const discovered = await discoverGatewayActivities(client, options);\n if (!discovered) {\n return null;\n }\n\n const executionClient = getExecutionClient(options);\n const proofChunks = chunkGatewayActivitiesForProof(\n discovered.activities,\n bounds.activitiesPerReceiptProof,\n );\n const argonFinalizedExecutionHeaderPlan = await selectArgonFinalizedExecutionHeader(\n client,\n executionClient,\n proofChunks[0],\n bounds.sharedHeaderDepth,\n );\n if (!argonFinalizedExecutionHeaderPlan) {\n return null;\n }\n\n const acceptedProofChunks = await collectProofChunksForArgonFinalizedExecutionHeader(\n executionClient,\n proofChunks,\n argonFinalizedExecutionHeaderPlan,\n bounds.receiptProofsPerExtrinsic,\n );\n if (acceptedProofChunks.length === 0) {\n return null;\n }\n\n const acceptedActivities = acceptedProofChunks.flatMap(({ activities }) => activities);\n const proof = await buildEthereumEventProof(\n options,\n argonFinalizedExecutionHeaderPlan.argonFinalizedExecutionHeader,\n acceptedProofChunks.map(({ locatorBlock }) => locatorBlock),\n );\n\n return {\n previousGatewayActivityNonce: discovered.previousGatewayActivityNonce,\n proof,\n gatewayActivityNonceRange: {\n start: acceptedActivities[0].gatewayState.gatewayActivityNonce,\n end: acceptedActivities.at(-1)!.gatewayState.gatewayActivityNonce,\n },\n executionBlockNumberRange: {\n start: acceptedActivities[0].blockNumber,\n end: acceptedActivities.at(-1)!.blockNumber,\n },\n activities: acceptedActivities,\n };\n}\n\nasync function loadActivityBlockLocator(\n executionClient: EthereumExecutionClient,\n gatewayAddress: Hex,\n locatorIndex: bigint,\n cache: Map<bigint, MintingGatewayActivityBlockLocator>,\n): Promise<MintingGatewayActivityBlockLocator> {\n const cached = cache.get(locatorIndex);\n if (cached) {\n return cached;\n }\n\n let locator: readonly [bigint, bigint, bigint, Hex];\n\n try {\n locator = await executionClient.readContract({\n abi: activityBlockLocatorAbi,\n address: gatewayAddress,\n functionName: 'activityBlockLocators',\n args: [locatorIndex],\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (\n !message.includes('out of bounds') &&\n !message.includes('Decode') &&\n !message.includes('decode')\n ) {\n throw error;\n }\n\n const legacyLocator = await executionClient.readContract({\n abi: legacyActivityBlockLocatorAbi,\n address: gatewayAddress,\n functionName: 'activityBlockLocators',\n args: [locatorIndex],\n });\n const [blockNumber, startGatewayActivityNonce, endGatewayActivityNonce] = legacyLocator;\n const loaded: MintingGatewayActivityBlockLocator = {\n blockNumber,\n startGatewayActivityNonce,\n endGatewayActivityNonce,\n };\n cache.set(locatorIndex, loaded);\n return loaded;\n }\n\n const [blockNumber, startGatewayActivityNonce, endGatewayActivityNonce, activityRoot] = locator;\n const loaded: MintingGatewayActivityBlockLocator = {\n blockNumber,\n startGatewayActivityNonce,\n endGatewayActivityNonce,\n activityRoot,\n };\n cache.set(locatorIndex, loaded);\n return loaded;\n}\n\nasync function findFirstUncoveredActivityBlockLocatorIndex(\n executionClient: EthereumExecutionClient,\n gatewayAddress: Hex,\n latestLocatorIndex: bigint,\n previousGatewayActivityNonce: bigint,\n cache: Map<bigint, MintingGatewayActivityBlockLocator>,\n): Promise<bigint | null> {\n let low = 1n;\n let high = latestLocatorIndex;\n let firstUncoveredIndex: bigint | null = null;\n\n while (low <= high) {\n const middle = (low + high) / 2n;\n const locator = await loadActivityBlockLocator(executionClient, gatewayAddress, middle, cache);\n\n if (locator.endGatewayActivityNonce > previousGatewayActivityNonce) {\n firstUncoveredIndex = middle;\n high = middle - 1n;\n continue;\n }\n\n low = middle + 1n;\n }\n\n return firstUncoveredIndex;\n}\n\nexport async function discoverGatewayActivities(\n client: IArgonQueryable,\n options: EthereumExecutionSource & {\n gatewayAddress: Hex;\n throughExecutionBlockNumber?: bigint;\n },\n): Promise<DiscoveredGatewayActivities | null> {\n const executionClient = getExecutionClient(options);\n const gatewayAddress = getAddress(options.gatewayAddress);\n const latestLocatorIndex = await executionClient.readContract({\n abi: mintingGatewayAbi,\n address: gatewayAddress,\n functionName: 'latestActivityBlockLocatorIndex',\n });\n if (latestLocatorIndex === 0n) {\n return null;\n }\n\n const currentGatewayState =\n await client.query.crosschainTransfer.gatewayStateBySourceChain('Ethereum');\n const previousGatewayActivityNonce = currentGatewayState.isSome\n ? currentGatewayState.unwrap().gatewayActivityNonce.toBigInt()\n : 0n;\n const locatorCache = new Map<bigint, MintingGatewayActivityBlockLocator>();\n const firstLocatorIndex = await findFirstUncoveredActivityBlockLocatorIndex(\n executionClient,\n gatewayAddress,\n latestLocatorIndex,\n previousGatewayActivityNonce,\n locatorCache,\n );\n if (!firstLocatorIndex) {\n return null;\n }\n\n const activities: EthereumGatewayActivity[] = [];\n let expectedGatewayActivityNonce = previousGatewayActivityNonce + 1n;\n\n for (\n let locatorIndex = firstLocatorIndex;\n locatorIndex <= latestLocatorIndex;\n locatorIndex += 1n\n ) {\n const locator = await loadActivityBlockLocator(\n executionClient,\n gatewayAddress,\n locatorIndex,\n locatorCache,\n );\n if (\n options.throughExecutionBlockNumber !== undefined &&\n locator.blockNumber > options.throughExecutionBlockNumber\n ) {\n break;\n }\n if (locator.endGatewayActivityNonce < expectedGatewayActivityNonce) {\n continue;\n }\n\n const blockActivities = await loadGatewayActivitiesForLocator(\n executionClient,\n gatewayAddress,\n locator,\n expectedGatewayActivityNonce,\n );\n activities.push(...blockActivities);\n expectedGatewayActivityNonce = locator.endGatewayActivityNonce + 1n;\n }\n\n if (activities.length === 0) {\n return null;\n }\n\n return {\n previousGatewayActivityNonce,\n activities,\n };\n}\n\nasync function loadGatewayActivitiesForLocator(\n executionClient: EthereumExecutionClient,\n gatewayAddress: Hex,\n locator: MintingGatewayActivityBlockLocator,\n expectedGatewayActivityNonce: bigint,\n): Promise<EthereumGatewayActivity[]> {\n const blockLogs = await retryWhileExecutionRpcIndexing(() =>\n executionClient.getLogs({\n address: gatewayAddress,\n fromBlock: locator.blockNumber,\n toBlock: locator.blockNumber,\n }),\n );\n const activities = blockLogs\n .flatMap(log => {\n try {\n return [toEthereumGatewayActivity(log)];\n } catch {\n return [];\n }\n })\n .sort((left, right) =>\n left.gatewayState.gatewayActivityNonce < right.gatewayState.gatewayActivityNonce ? -1 : 1,\n );\n const remainingActivities = activities.filter(\n activity =>\n activity.gatewayState.gatewayActivityNonce >= expectedGatewayActivityNonce &&\n activity.gatewayState.gatewayActivityNonce <= locator.endGatewayActivityNonce,\n );\n if (\n remainingActivities.length === 0 ||\n remainingActivities[0].gatewayState.gatewayActivityNonce !== expectedGatewayActivityNonce\n ) {\n throw new Error(`Gateway block ${locator.blockNumber} contains uncovered gateway activity`);\n }\n\n let previousNonce = expectedGatewayActivityNonce - 1n;\n for (const activity of remainingActivities) {\n if (activity.gatewayState.gatewayActivityNonce !== previousNonce + 1n) {\n throw new Error(\n `Gateway block ${locator.blockNumber} contains a gap in gateway activity coverage`,\n );\n }\n previousNonce = activity.gatewayState.gatewayActivityNonce;\n }\n\n if (previousNonce !== locator.endGatewayActivityNonce) {\n throw new Error(`Gateway block ${locator.blockNumber} contains uncovered gateway activity`);\n }\n\n return remainingActivities;\n}\n\nfunction toEthereumGatewayActivity(log: EthereumBlockLog): EthereumGatewayActivity {\n if (\n !log.transactionHash ||\n log.transactionIndex == null ||\n log.logIndex == null ||\n !log.blockHash ||\n log.blockNumber == null\n ) {\n throw new Error('Execution log is missing indexed receipt metadata');\n }\n\n return {\n txHash: log.transactionHash,\n transactionIndex: Number(log.transactionIndex),\n logIndex: Number(log.logIndex),\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n ...decodeEthereumGatewayActivityLog(log),\n };\n}\n\nfunction chunkGatewayActivitiesForProof(\n activities: EthereumGatewayActivity[],\n maxActivitiesPerReceiptProof: number,\n): GatewayActivityProofChunk[] {\n const chunks: GatewayActivityProofChunk[] = [];\n let currentBlockHash: Hex | undefined;\n let currentBlockActivities: EthereumGatewayActivity[] = [];\n\n const flushBlock = () => {\n if (!currentBlockHash || currentBlockActivities.length === 0) {\n return;\n }\n\n for (\n let start = 0;\n start < currentBlockActivities.length;\n start += maxActivitiesPerReceiptProof\n ) {\n const chunkActivities = currentBlockActivities.slice(\n start,\n start + maxActivitiesPerReceiptProof,\n );\n const locatorsByReceipt = new Map<Hex, EthereumEventLocator>();\n\n for (const activity of chunkActivities) {\n const existing = locatorsByReceipt.get(activity.txHash);\n if (existing) {\n existing.logIndexes!.push(activity.logIndex);\n continue;\n }\n\n locatorsByReceipt.set(activity.txHash, {\n txHash: activity.txHash,\n logIndexes: [activity.logIndex],\n });\n }\n\n chunks.push({\n activities: chunkActivities,\n locatorBlock: [...locatorsByReceipt.values()],\n });\n }\n };\n\n for (const activity of activities) {\n if (currentBlockHash && activity.blockHash.toLowerCase() !== currentBlockHash.toLowerCase()) {\n flushBlock();\n currentBlockActivities = [];\n }\n\n currentBlockHash = activity.blockHash;\n currentBlockActivities.push(activity);\n }\n\n flushBlock();\n return chunks;\n}\n\nfunction getGatewayProofBounds(client: Pick<ArgonClient, 'consts'>): GatewayProofBounds {\n const activitiesPerReceiptProof =\n client.consts.crosschainTransfer.maxActivitiesPerReceiptProof.toNumber();\n if (!Number.isInteger(activitiesPerReceiptProof) || activitiesPerReceiptProof < 1) {\n throw new Error('Gateway proof requires maxActivitiesPerReceiptProof to be a positive integer');\n }\n\n const receiptProofsPerExtrinsic =\n client.consts.crosschainTransfer.maxReceiptProofsPerExtrinsic.toNumber();\n if (!Number.isInteger(receiptProofsPerExtrinsic) || receiptProofsPerExtrinsic < 1) {\n throw new Error('Gateway proof requires maxReceiptProofsPerExtrinsic to be a positive integer');\n }\n\n return {\n activitiesPerReceiptProof,\n receiptProofsPerExtrinsic,\n sharedHeaderDepth: client.consts.crosschainTransfer.maxProofExecutionHeaderDepth.toNumber(),\n };\n}\n\nasync function selectArgonFinalizedExecutionHeader(\n client: IArgonQueryable,\n executionClient: EthereumExecutionClient,\n earliestProofChunk: GatewayActivityProofChunk,\n sharedHeaderDepth: number,\n): Promise<ArgonFinalizedExecutionHeaderPlan | null> {\n const earliestBlockHash = earliestProofChunk.activities[0].blockHash;\n const earliestBlockNumber = earliestProofChunk.activities[0].blockNumber;\n const earliestTargetHeader = await loadExecutionHeader(executionClient, earliestBlockHash);\n const latestArgonFinalizedExecutionHeader = await getLatestArgonFinalizedExecutionHeader(client);\n\n if (earliestBlockNumber > latestArgonFinalizedExecutionHeader.blockNumber) {\n return null;\n }\n\n const maxArgonFinalizedExecutionHeaderBlockNumber =\n earliestBlockNumber + BigInt(sharedHeaderDepth);\n\n if (\n latestArgonFinalizedExecutionHeader.blockNumber <= maxArgonFinalizedExecutionHeaderBlockNumber\n ) {\n try {\n return {\n argonFinalizedExecutionHeader: latestArgonFinalizedExecutionHeader,\n earliestTargetHeader,\n targetToArgonFinalizedHeaderChain: await buildExecutionHeaderChain(\n executionClient,\n earliestTargetHeader,\n latestArgonFinalizedExecutionHeader,\n ),\n };\n } catch (error) {\n if (!(error instanceof ArgonFinalizedExecutionHeaderPathError)) {\n throw error;\n }\n }\n }\n\n const scannedArgonFinalizedExecutionHeader =\n await loadRetainedExecutionHeaderAnchorAtOrAfterBlock(client, earliestBlockNumber);\n if (\n scannedArgonFinalizedExecutionHeader &&\n scannedArgonFinalizedExecutionHeader.blockNumber <= maxArgonFinalizedExecutionHeaderBlockNumber\n ) {\n return {\n argonFinalizedExecutionHeader: scannedArgonFinalizedExecutionHeader,\n earliestTargetHeader,\n targetToArgonFinalizedHeaderChain: await buildExecutionHeaderChain(\n executionClient,\n earliestTargetHeader,\n scannedArgonFinalizedExecutionHeader,\n ),\n };\n }\n\n throw new Error(\n 'Oldest uncovered gateway activity exceeds the Argon finalized execution-header window',\n );\n}\n\nexport async function loadRetainedExecutionHeaderAnchorAtOrAfterBlock(\n client: IArgonQueryable,\n earliestBlockNumber: bigint,\n): Promise<ArgonFinalizedExecutionHeader | null> {\n // The runtime stores this index under `block_number.to_be_bytes()`, so a fixed-width hex key\n // preserves the same big-endian ordering here. We first try the exact block number, then seek\n // to the first later retained key when that exact anchor is not present.\n const scanBlockNumberKey = toHex(earliestBlockNumber, { size: 8 });\n const executionHeaderAnchorsByBlockNumber =\n client.query.ethereumVerifier.executionHeaderAnchorsByBlockNumber;\n const exactAnchor = await executionHeaderAnchorsByBlockNumber(scanBlockNumberKey);\n const matchingEntry = exactAnchor.isSome\n ? exactAnchor\n : (\n await executionHeaderAnchorsByBlockNumber.entriesPaged({\n args: [],\n pageSize: 1,\n startKey: executionHeaderAnchorsByBlockNumber.key(scanBlockNumberKey),\n })\n )[0]?.[1];\n const scannedAnchor = matchingEntry?.isSome ? matchingEntry.unwrap() : null;\n\n if (!scannedAnchor) {\n return null;\n }\n\n return {\n blockHash: scannedAnchor.blockHash.toHex(),\n blockNumber: scannedAnchor.blockNumber.toBigInt(),\n };\n}\n\nasync function collectProofChunksForArgonFinalizedExecutionHeader(\n executionClient: EthereumExecutionClient,\n proofChunks: GatewayActivityProofChunk[],\n plan: ArgonFinalizedExecutionHeaderPlan,\n receiptProofsPerExtrinsic: number,\n): Promise<GatewayActivityProofChunk[]> {\n const acceptedProofChunks: GatewayActivityProofChunk[] = [];\n const loadedTargetHeaders = [\n {\n blockHash: proofChunks[0].activities[0].blockHash,\n targetHeader: plan.earliestTargetHeader,\n },\n ];\n\n for (const proofChunk of proofChunks) {\n if (acceptedProofChunks.length === receiptProofsPerExtrinsic) {\n break;\n }\n\n const blockHash = proofChunk.activities[0].blockHash;\n const blockNumber = proofChunk.activities[0].blockNumber;\n\n if (blockNumber > plan.argonFinalizedExecutionHeader.blockNumber) {\n break;\n }\n\n let targetHeader = loadedTargetHeaders.find(\n loadedHeader => loadedHeader.blockHash.toLowerCase() === blockHash.toLowerCase(),\n )?.targetHeader;\n if (!targetHeader) {\n targetHeader = await loadExecutionHeader(executionClient, blockHash);\n loadedTargetHeaders.push({ blockHash, targetHeader });\n }\n\n if (targetHeader.number === plan.argonFinalizedExecutionHeader.blockNumber) {\n if (blockHash.toLowerCase() !== plan.argonFinalizedExecutionHeader.blockHash.toLowerCase()) {\n break;\n }\n } else {\n const expectedTargetHeaderOnArgonFinalizedChain =\n plan.targetToArgonFinalizedHeaderChain[\n Number(targetHeader.number - plan.earliestTargetHeader.number)\n ];\n if (\n !expectedTargetHeaderOnArgonFinalizedChain ||\n expectedTargetHeaderOnArgonFinalizedChain.blockHash.toLowerCase() !==\n blockHash.toLowerCase()\n ) {\n break;\n }\n }\n\n acceptedProofChunks.push(proofChunk);\n }\n\n return acceptedProofChunks;\n}\n","import camelcaseKeys from 'camelcase-keys';\nimport { type Hex } from 'viem';\nimport type {\n EthereumBeaconConfigSpecResponse,\n EthereumBeaconGenesisResponse,\n EthereumLightClientBootstrapResponse,\n} from './EthereumBeaconTypes';\nimport { buildExecutionHeaderProof, getBeaconJson } from './EthereumBeaconApi';\nimport {\n discoverGatewayActivities,\n loadRetainedExecutionHeaderAnchorAtOrAfterBlock,\n} from './EthereumGatewayActivityProof';\nimport { getExecutionClient, type EthereumExecutionSource } from './EthereumExecution';\nimport type { ArgonClient, IArgonQueryable } from './index';\n\nexport type EthereumExecutionHeaderBackfillPayload = {\n targetExecutionBlockNumber: bigint;\n expectedBeaconRoot: Hex;\n header: {\n slot: string;\n proposerIndex: string;\n parentRoot: Hex;\n stateRoot: Hex;\n bodyRoot: Hex;\n };\n executionHeaderProof: ReturnType<typeof buildExecutionHeaderProof>;\n executionBlockNumber: bigint;\n executionBlockHash: Hex;\n};\n\ntype EthereumBeaconHeadersResponse = {\n data: Array<{\n root: Hex;\n }>;\n};\n\nexport async function buildGatewayExecutionHeaderBackfill(\n client: IArgonQueryable & Pick<ArgonClient, 'consts'>,\n options: EthereumExecutionSource & {\n beaconApiUrl: string;\n gatewayAddress: Hex;\n throughExecutionBlockNumber?: bigint;\n targetExecutionBlockNumber?: bigint;\n },\n): Promise<EthereumExecutionHeaderBackfillPayload | null> {\n const targetExecutionBlockNumber =\n options.targetExecutionBlockNumber ??\n (await discoverGatewayActivities(client, options))?.activities[0]?.blockNumber;\n if (targetExecutionBlockNumber == null) {\n return null;\n }\n\n const maxProofExecutionHeaderDepth =\n client.consts.crosschainTransfer.maxProofExecutionHeaderDepth.toNumber();\n if (!Number.isInteger(maxProofExecutionHeaderDepth) || maxProofExecutionHeaderDepth < 0) {\n throw new Error(\n 'Gateway backfill requires maxProofExecutionHeaderDepth to be a non-negative integer',\n );\n }\n\n const retainedAnchor = await loadRetainedExecutionHeaderAnchorAtOrAfterBlock(\n client,\n targetExecutionBlockNumber,\n );\n if (\n retainedAnchor &&\n retainedAnchor.blockNumber <= targetExecutionBlockNumber + BigInt(maxProofExecutionHeaderDepth)\n ) {\n return null;\n }\n\n const latestFinalizedBlockRoot = (await client.query.ethereumVerifier.latestFinalizedBlockRoot())\n .toHex()\n .toLowerCase() as Hex;\n const finalizedState =\n await client.query.ethereumVerifier.finalizedBeaconState(latestFinalizedBlockRoot);\n if (finalizedState.isNone) {\n return null;\n }\n const finalizedStateValue = finalizedState.unwrap();\n\n const executionClient = getExecutionClient(options);\n const [spec, genesis, targetExecutionHeader] = await Promise.all([\n getBeaconJson<EthereumBeaconConfigSpecResponse>(options.beaconApiUrl, '/eth/v1/config/spec'),\n getBeaconJson<EthereumBeaconGenesisResponse>(options.beaconApiUrl, '/eth/v1/beacon/genesis'),\n executionClient.getBlock({ blockNumber: targetExecutionBlockNumber }),\n ]);\n const slotsPerEpoch = BigInt(spec.data.SLOTS_PER_EPOCH);\n const secondsPerSlot = BigInt(spec.data.SECONDS_PER_SLOT);\n if (slotsPerEpoch <= 0n) {\n throw new Error('Beacon API returned an invalid SLOTS_PER_EPOCH value');\n }\n if (secondsPerSlot <= 0n) {\n throw new Error('Beacon API returned an invalid SECONDS_PER_SLOT value');\n }\n\n const latestFinalizedSlot = finalizedStateValue.slot.toBigInt();\n const beaconGenesisTime = BigInt(genesis.data.genesis_time);\n let scanSlot =\n targetExecutionHeader.timestamp <= beaconGenesisTime\n ? 0n\n : (targetExecutionHeader.timestamp - beaconGenesisTime) / secondsPerSlot;\n\n if (scanSlot >= slotsPerEpoch) {\n scanSlot -= slotsPerEpoch;\n } else {\n scanSlot = 0n;\n }\n if (scanSlot > latestFinalizedSlot) {\n scanSlot = latestFinalizedSlot;\n }\n const maxScanSlot =\n scanSlot + slotsPerEpoch * 8n < latestFinalizedSlot\n ? scanSlot + slotsPerEpoch * 8n\n : latestFinalizedSlot;\n\n while (scanSlot <= maxScanSlot) {\n let headers: EthereumBeaconHeadersResponse = { data: [] };\n try {\n headers = await getBeaconJson<EthereumBeaconHeadersResponse>(\n options.beaconApiUrl,\n `/eth/v1/beacon/headers?slot=${scanSlot}`,\n );\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (\n !message.includes(`/eth/v1/beacon/headers?slot=${scanSlot}`) ||\n !message.includes(': 404')\n ) {\n throw error;\n }\n }\n\n const checkpointHeader = headers.data[0];\n\n if (checkpointHeader) {\n try {\n const bootstrap = await getBeaconJson<EthereumLightClientBootstrapResponse>(\n options.beaconApiUrl,\n `/eth/v1/beacon/light_client/bootstrap/${checkpointHeader.root}`,\n );\n const executionBlockNumber = BigInt(bootstrap.data.header.execution.block_number);\n\n if (executionBlockNumber >= targetExecutionBlockNumber) {\n return {\n targetExecutionBlockNumber,\n expectedBeaconRoot: checkpointHeader.root.toLowerCase() as Hex,\n header: camelcaseKeys(\n bootstrap.data.header.beacon,\n ) as EthereumExecutionHeaderBackfillPayload['header'],\n executionHeaderProof: buildExecutionHeaderProof(bootstrap.data.header),\n executionBlockNumber,\n executionBlockHash: bootstrap.data.header.execution.block_hash.toLowerCase() as Hex,\n };\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (\n !message.includes('/eth/v1/beacon/light_client/bootstrap/') ||\n !message.includes(': 404')\n ) {\n throw error;\n }\n }\n }\n\n scanSlot += 1n;\n }\n\n throw new Error(\n `Unable to find a historical light-client bootstrap near execution block ${targetExecutionBlockNumber} using ${options.beaconApiUrl}; try a beacon API that exposes historical /eth/v1/beacon/light_client/bootstrap roots`,\n );\n}\n\nexport async function buildGatewayExecutionHeaderBackfills(\n client: IArgonQueryable & Pick<ArgonClient, 'consts'>,\n options: EthereumExecutionSource & {\n beaconApiUrl: string;\n gatewayAddress: Hex;\n throughExecutionBlockNumber?: bigint;\n },\n): Promise<EthereumExecutionHeaderBackfillPayload[]> {\n const discovered = await discoverGatewayActivities(client, options);\n if (!discovered) {\n return [];\n }\n\n const maxProofExecutionHeaderDepth =\n client.consts.crosschainTransfer.maxProofExecutionHeaderDepth.toNumber();\n if (!Number.isInteger(maxProofExecutionHeaderDepth) || maxProofExecutionHeaderDepth < 0) {\n throw new Error(\n 'Gateway backfill requires maxProofExecutionHeaderDepth to be a non-negative integer',\n );\n }\n\n const seenTargetBlocks = new Set<bigint>();\n const targetExecutionBlockNumbers: bigint[] = [];\n for (const activity of discovered.activities) {\n if (seenTargetBlocks.has(activity.blockNumber)) {\n continue;\n }\n seenTargetBlocks.add(activity.blockNumber);\n targetExecutionBlockNumbers.push(activity.blockNumber);\n }\n\n const payloads: EthereumExecutionHeaderBackfillPayload[] = [];\n let coveringExecutionBlockNumber: bigint | null = null;\n\n for (const targetExecutionBlockNumber of targetExecutionBlockNumbers) {\n if (\n coveringExecutionBlockNumber !== null &&\n coveringExecutionBlockNumber >= targetExecutionBlockNumber &&\n coveringExecutionBlockNumber <=\n targetExecutionBlockNumber + BigInt(maxProofExecutionHeaderDepth)\n ) {\n continue;\n }\n\n const retainedAnchor = await loadRetainedExecutionHeaderAnchorAtOrAfterBlock(\n client,\n targetExecutionBlockNumber,\n );\n if (\n retainedAnchor &&\n retainedAnchor.blockNumber <=\n targetExecutionBlockNumber + BigInt(maxProofExecutionHeaderDepth)\n ) {\n coveringExecutionBlockNumber = retainedAnchor.blockNumber;\n continue;\n }\n\n const payload = await buildGatewayExecutionHeaderBackfill(client, {\n ...options,\n targetExecutionBlockNumber,\n });\n if (!payload) {\n throw new Error(\n `Unable to build a gateway execution-header backfill for execution block ${targetExecutionBlockNumber}`,\n );\n }\n\n payloads.push(payload);\n coveringExecutionBlockNumber = payload.executionBlockNumber;\n }\n\n return payloads;\n}\n","import { type Hex } from 'viem';\nimport type { EthereumLightClientHeader } from './EthereumBeaconTypes';\n\nexport function buildExecutionHeaderProof(finalizedHeader: EthereumLightClientHeader) {\n return {\n executionHeader: buildExecutionPayloadHeader(finalizedHeader.execution),\n executionBranch: finalizedHeader.execution_branch.map(witness => witness.toLowerCase() as Hex),\n };\n}\n\nexport async function getBeaconJson<T>(beaconApiUrl: string, path: string): Promise<T> {\n const response = await fetch(\n new URL(path, beaconApiUrl.endsWith('/') ? beaconApiUrl : `${beaconApiUrl}/`),\n );\n\n if (!response.ok) {\n throw new Error(\n `Beacon API request failed for ${path}: ${response.status} ${response.statusText}`,\n );\n }\n\n return (await response.json()) as T;\n}\n\nfunction buildExecutionPayloadHeader(header: EthereumLightClientHeader['execution']) {\n const executionHeader = {\n parentHash: header.parent_hash,\n feeRecipient: header.fee_recipient,\n stateRoot: header.state_root,\n receiptsRoot: header.receipts_root,\n logsBloom: header.logs_bloom,\n prevRandao: header.prev_randao,\n blockNumber: header.block_number,\n gasLimit: header.gas_limit,\n gasUsed: header.gas_used,\n timestamp: header.timestamp,\n extraData: header.extra_data,\n baseFeePerGas: header.base_fee_per_gas,\n blockHash: header.block_hash,\n transactionsRoot: header.transactions_root,\n withdrawalsRoot: header.withdrawals_root,\n };\n\n if (header.blob_gas_used && header.excess_blob_gas) {\n return {\n Deneb: {\n ...executionHeader,\n blobGasUsed: header.blob_gas_used,\n excessBlobGas: header.excess_blob_gas,\n },\n };\n }\n\n return { Capella: executionHeader };\n}\n","import camelcaseKeys from 'camelcase-keys';\nimport type { SubmittableExtrinsic } from '@polkadot/api/promise/types';\nimport type {\n EthereumBeaconConfigSpecResponse,\n EthereumBeaconGenesisResponse,\n EthereumBeaconHeaderDetailsResponse,\n EthereumLightClientBootstrapResponse,\n EthereumLightClientUpdate,\n EthereumLightClientUpdatesResponse,\n} from './EthereumBeaconTypes';\nimport { buildExecutionHeaderProof, getBeaconJson } from './EthereumBeaconApi';\nimport type { ArgonClient } from './index';\nimport { type Hex, hexToBytes } from 'viem';\n\ntype BeaconPreset = 'mainnet' | 'minimal';\ntype BeaconNetworkParams = {\n epochsPerSyncCommitteePeriod: bigint;\n preset: BeaconPreset;\n slotsPerEpoch: bigint;\n slotsPerHistoricalRoot: bigint;\n};\ntype EthereumBeaconSyncState =\n | {\n isBootstrapped: false;\n hasNextSyncCommittee: boolean;\n latestFinalizedBlockRoot: string;\n latestSyncCommitteeUpdatePeriod: bigint;\n headerInterval: bigint;\n }\n | {\n isBootstrapped: true;\n hasNextSyncCommittee: boolean;\n latestFinalizedBlockRoot: string;\n latestFinalizedSlot: bigint;\n nextRecommendedFinalizedSlot: bigint;\n latestSyncCommitteeUpdatePeriod: bigint;\n headerInterval: bigint;\n };\n\nconst lightClientUpdateRetryIntervalMs = 500;\nconst lightClientUpdateRetryTimeoutMs = 30_000;\nconst expectedBeaconPresetPromises = new WeakMap<ArgonClient, Promise<BeaconPreset | undefined>>();\nconst beaconNetworkParamsPromises = new Map<string, Promise<BeaconNetworkParams>>();\n\nexport async function getEthereumBeaconSyncBootstrapTx(\n client: ArgonClient,\n beaconApiUrl: string,\n): Promise<SubmittableExtrinsic> {\n const expectedPreset = await getExpectedBeaconPreset(client);\n const [genesis, spec] = await Promise.all([\n getBeaconJson<EthereumBeaconGenesisResponse>(beaconApiUrl, '/eth/v1/beacon/genesis'),\n getBeaconJson<EthereumBeaconConfigSpecResponse>(beaconApiUrl, '/eth/v1/config/spec'),\n ]);\n const specData = spec.data;\n parseBeaconNetworkParams(specData, expectedPreset);\n const startedAt = Date.now();\n let lastError: Error | undefined;\n let bootstrap: EthereumLightClientBootstrapResponse | undefined;\n\n while (Date.now() - startedAt < lightClientUpdateRetryTimeoutMs) {\n try {\n const finalizedHeader = await getBeaconJson<EthereumBeaconHeaderDetailsResponse>(\n beaconApiUrl,\n '/eth/v1/beacon/headers/finalized',\n );\n bootstrap = await getBeaconJson<EthereumLightClientBootstrapResponse>(\n beaconApiUrl,\n `/eth/v1/beacon/light_client/bootstrap/${finalizedHeader.data.root}`,\n );\n lastError = undefined;\n break;\n } catch (error) {\n if (!(error instanceof Error)) {\n throw error;\n }\n lastError = error;\n await new Promise(resolve => setTimeout(resolve, lightClientUpdateRetryIntervalMs));\n }\n }\n\n if (!bootstrap) {\n throw (\n lastError ??\n new Error('Unable to fetch ethereum beacon bootstrap before the retry timeout elapsed')\n );\n }\n\n return client.tx.ethereumVerifier.forceCheckpoint(\n {\n header: camelcaseKeys(bootstrap.data.header.beacon),\n currentSyncCommittee: camelcaseKeys(bootstrap.data.current_sync_committee),\n currentSyncCommitteeBranch: bootstrap.data.current_sync_committee_branch,\n validatorsRoot: genesis.data.genesis_validators_root,\n executionHeaderProof: buildExecutionHeaderProof(bootstrap.data.header),\n },\n {\n genesis: {\n version: genesis.data.genesis_fork_version,\n epoch: 0n,\n },\n altair: buildFork(specData, 'ALTAIR'),\n bellatrix: buildFork(specData, 'BELLATRIX'),\n capella: buildFork(specData, 'CAPELLA'),\n deneb: buildFork(specData, 'DENEB'),\n electra: buildFork(specData, 'ELECTRA'),\n fulu: buildFork(specData, 'FULU'),\n },\n );\n}\n\nexport async function getNextEthereumBeaconSyncTxs(\n client: ArgonClient,\n beaconApiUrl: string,\n): Promise<SubmittableExtrinsic[]> {\n const state = await getEthereumBeaconSyncState(client);\n\n if (!state.isBootstrapped) {\n return [];\n }\n\n const expectedPreset = await getExpectedBeaconPreset(client);\n const beaconNetworkParams = await getBeaconNetworkParams(beaconApiUrl, expectedPreset);\n const storedPeriod = computePeriod(state.latestFinalizedSlot, beaconNetworkParams);\n const maxBridgeableFinalizedSlot =\n state.latestFinalizedSlot + beaconNetworkParams.slotsPerHistoricalRoot;\n const txs: SubmittableExtrinsic[] = [];\n const startedAt = Date.now();\n\n while (Date.now() - startedAt < lightClientUpdateRetryTimeoutMs) {\n let finalityUpdate: EthereumLightClientUpdate;\n\n try {\n finalityUpdate = (\n await getBeaconJson<{ data: EthereumLightClientUpdate }>(\n beaconApiUrl,\n '/eth/v1/beacon/light_client/finality_update',\n )\n ).data;\n } catch (error) {\n if (!isRetryableBeaconLightClientError(error)) {\n throw error;\n }\n\n await new Promise(resolve => setTimeout(resolve, lightClientUpdateRetryIntervalMs));\n continue;\n }\n\n const missingNextSyncCommittee = !state.hasNextSyncCommittee;\n const finalityFinalizedSlot = BigInt(finalityUpdate.finalized_header.beacon.slot);\n const finalityFinalizedPeriod = computePeriod(finalityFinalizedSlot, beaconNetworkParams);\n const requiredCommitteePeriod = getRequiredCommitteePeriod({\n storedPeriod,\n missingNextSyncCommittee,\n latestSyncCommitteeUpdatePeriod: state.latestSyncCommitteeUpdatePeriod,\n finalityFinalizedPeriod,\n });\n const needsCommitteeData = requiredCommitteePeriod !== undefined;\n const finalityCarriesRequiredCommittee = updateCarriesCommitteeForPeriod(\n finalityUpdate,\n requiredCommitteePeriod,\n beaconNetworkParams,\n );\n const finalityIsBridgeable = finalityFinalizedSlot <= maxBridgeableFinalizedSlot;\n const needsCurrentPeriodUpdate = needsCommitteeData && !finalityCarriesRequiredCommittee;\n const needsPeriodUpdate = needsCurrentPeriodUpdate || !finalityIsBridgeable;\n let submitUpdate: EthereumLightClientUpdate | undefined;\n\n if (finalityIsBridgeable && !needsCurrentPeriodUpdate) {\n submitUpdate = finalityUpdate;\n }\n\n if (needsPeriodUpdate) {\n let periodUpdates: EthereumLightClientUpdatesResponse;\n const periodUpdateStartPeriod = requiredCommitteePeriod ?? storedPeriod;\n\n try {\n periodUpdates = await getBeaconJson<EthereumLightClientUpdatesResponse>(\n beaconApiUrl,\n `/eth/v1/beacon/light_client/updates?count=1&start_period=${periodUpdateStartPeriod}`,\n );\n } catch (error) {\n if (!isRetryableBeaconLightClientError(error)) {\n throw error;\n }\n\n await new Promise(resolve => setTimeout(resolve, lightClientUpdateRetryIntervalMs));\n continue;\n }\n\n const periodUpdate = periodUpdates[0]?.data;\n const periodUpdateFinalizedSlot = periodUpdate\n ? BigInt(periodUpdate.finalized_header.beacon.slot)\n : undefined;\n const hasBridgeablePeriodUpdate =\n periodUpdateFinalizedSlot !== undefined &&\n periodUpdateFinalizedSlot <= maxBridgeableFinalizedSlot;\n let periodUpdateHasRequiredCommittee = !needsCommitteeData;\n\n if (periodUpdate && needsCommitteeData) {\n periodUpdateHasRequiredCommittee = updateCarriesCommitteeForPeriod(\n periodUpdate,\n requiredCommitteePeriod,\n beaconNetworkParams,\n );\n }\n\n if (periodUpdate && hasBridgeablePeriodUpdate && periodUpdateHasRequiredCommittee) {\n submitUpdate = periodUpdate;\n }\n }\n\n if (needsCurrentPeriodUpdate && !submitUpdate) {\n return [];\n }\n\n if (needsPeriodUpdate && !submitUpdate) {\n await new Promise(resolve => setTimeout(resolve, lightClientUpdateRetryIntervalMs));\n continue;\n }\n\n // make sure the update we choose has a supermajority of sync committee participants\n if (\n submitUpdate &&\n !hasSyncCommitteeSupermajority(submitUpdate.sync_aggregate.sync_committee_bits)\n ) {\n await new Promise(resolve => setTimeout(resolve, lightClientUpdateRetryIntervalMs));\n continue;\n }\n\n if (submitUpdate) {\n const finalizedSlot = BigInt(submitUpdate.finalized_header.beacon.slot);\n const attestedSlot = BigInt(submitUpdate.attested_header.beacon.slot);\n\n const finalizedPeriod = computePeriod(finalizedSlot, beaconNetworkParams);\n const attestedPeriod = computePeriod(attestedSlot, beaconNetworkParams);\n\n const isNewerThanStoredFinalized = finalizedSlot > state.latestFinalizedSlot;\n const hasReachedNextFinalizedWindow = finalizedSlot >= state.nextRecommendedFinalizedSlot;\n const canAdvanceFinalized = isNewerThanStoredFinalized && hasReachedNextFinalizedWindow;\n const advancesSyncCommitteePeriod = finalizedPeriod > state.latestSyncCommitteeUpdatePeriod;\n const canUseNextSyncCommittee = missingNextSyncCommittee || advancesSyncCommitteePeriod;\n const includesNextSyncCommittee =\n hasNextSyncCommitteeUpdate(submitUpdate) && canUseNextSyncCommittee;\n const fillsMissingNextSyncCommittee =\n missingNextSyncCommittee && includesNextSyncCommittee && attestedPeriod === storedPeriod;\n const advancesKnownSyncCommitteePeriod =\n !missingNextSyncCommittee && includesNextSyncCommittee;\n\n if (\n canAdvanceFinalized ||\n fillsMissingNextSyncCommittee ||\n advancesKnownSyncCommitteePeriod\n ) {\n const nextSyncCommitteeUpdate = includesNextSyncCommittee\n ? {\n nextSyncCommitteeUpdate: {\n nextSyncCommittee: camelcaseKeys(submitUpdate.next_sync_committee!),\n nextSyncCommitteeBranch: submitUpdate.next_sync_committee_branch!,\n },\n }\n : {};\n txs.push(\n client.tx.ethereumVerifier.submit({\n attestedHeader: camelcaseKeys(submitUpdate.attested_header.beacon),\n syncAggregate: camelcaseKeys(submitUpdate.sync_aggregate),\n signatureSlot: submitUpdate.signature_slot,\n ...nextSyncCommitteeUpdate,\n finalizedHeader: camelcaseKeys(submitUpdate.finalized_header.beacon),\n finalityBranch: submitUpdate.finality_branch,\n executionHeaderProof: buildExecutionHeaderProof(submitUpdate.finalized_header),\n }),\n );\n }\n }\n\n break;\n }\n\n return txs;\n}\n\nexport async function getEthereumBeaconSyncState(\n client: ArgonClient,\n): Promise<EthereumBeaconSyncState> {\n const latestFinalizedBlockRoot = (await client.query.ethereumVerifier.latestFinalizedBlockRoot())\n .toHex()\n .toLowerCase();\n const finalizedState =\n await client.query.ethereumVerifier.finalizedBeaconState(latestFinalizedBlockRoot);\n const latestSyncCommitteeUpdatePeriod = (\n await client.query.ethereumVerifier.latestSyncCommitteeUpdatePeriod()\n ).toBigInt();\n const headerInterval = client.consts.ethereumVerifier.freeHeadersInterval.toBigInt();\n const hasNextSyncCommittee = !(\n await client.query.ethereumVerifier.nextSyncCommittee.size()\n ).isZero();\n\n if (finalizedState.isNone) {\n return {\n isBootstrapped: false,\n hasNextSyncCommittee,\n latestFinalizedBlockRoot,\n latestSyncCommitteeUpdatePeriod,\n headerInterval,\n };\n }\n\n const latestFinalizedSlot = finalizedState.unwrap().slot.toBigInt();\n\n return {\n isBootstrapped: true,\n hasNextSyncCommittee,\n latestFinalizedBlockRoot,\n latestFinalizedSlot,\n nextRecommendedFinalizedSlot: latestFinalizedSlot + headerInterval,\n latestSyncCommitteeUpdatePeriod,\n headerInterval,\n };\n}\n\nfunction buildFork(spec: Record<string, string>, name: string) {\n const version = spec[`${name}_FORK_VERSION`];\n const epoch = spec[`${name}_FORK_EPOCH`];\n\n if (!version) throw new Error(`Missing beacon spec value for ${name}_FORK_VERSION`);\n if (!epoch) throw new Error(`Missing beacon spec value for ${name}_FORK_EPOCH`);\n\n return {\n version,\n epoch: BigInt(epoch),\n };\n}\n\nfunction hasNextSyncCommitteeUpdate(\n update?: Pick<EthereumLightClientUpdate, 'next_sync_committee' | 'next_sync_committee_branch'>,\n): boolean {\n return !!update?.next_sync_committee && !!update?.next_sync_committee_branch;\n}\n\nfunction getRequiredCommitteePeriod({\n storedPeriod,\n missingNextSyncCommittee,\n latestSyncCommitteeUpdatePeriod,\n finalityFinalizedPeriod,\n}: {\n storedPeriod: bigint;\n missingNextSyncCommittee: boolean;\n latestSyncCommitteeUpdatePeriod: bigint;\n finalityFinalizedPeriod: bigint;\n}): bigint | undefined {\n if (missingNextSyncCommittee) {\n return storedPeriod;\n }\n\n if (finalityFinalizedPeriod > latestSyncCommitteeUpdatePeriod) {\n return latestSyncCommitteeUpdatePeriod + 1n;\n }\n\n return undefined;\n}\n\nfunction updateCarriesCommitteeForPeriod(\n update: EthereumLightClientUpdate | undefined,\n requiredCommitteePeriod: bigint | undefined,\n beaconNetworkParams: BeaconNetworkParams,\n): boolean {\n if (!update || requiredCommitteePeriod === undefined || !hasNextSyncCommitteeUpdate(update)) {\n return false;\n }\n\n const attestedPeriod = computePeriod(\n BigInt(update.attested_header.beacon.slot),\n beaconNetworkParams,\n );\n const finalizedPeriod = computePeriod(\n BigInt(update.finalized_header.beacon.slot),\n beaconNetworkParams,\n );\n\n return attestedPeriod === requiredCommitteePeriod && finalizedPeriod === requiredCommitteePeriod;\n}\n\nfunction detectBeaconPreset(spec: Record<string, string>): BeaconPreset {\n return spec.SLOTS_PER_HISTORICAL_ROOT === '64' ? 'minimal' : 'mainnet';\n}\n\nasync function getBeaconNetworkParams(\n beaconApiUrl: string,\n expectedPreset?: BeaconPreset,\n): Promise<BeaconNetworkParams> {\n let paramsPromise = beaconNetworkParamsPromises.get(beaconApiUrl);\n\n if (!paramsPromise) {\n paramsPromise = getBeaconJson<EthereumBeaconConfigSpecResponse>(\n beaconApiUrl,\n '/eth/v1/config/spec',\n ).then(({ data }) => parseBeaconNetworkParams(data));\n beaconNetworkParamsPromises.set(beaconApiUrl, paramsPromise);\n }\n\n const beaconNetworkParams = await paramsPromise;\n\n if (expectedPreset && beaconNetworkParams.preset !== expectedPreset) {\n throw new Error(\n `Beacon preset mismatch: chain expects ${expectedPreset}, but endpoint reports ${beaconNetworkParams.preset}`,\n );\n }\n\n return beaconNetworkParams;\n}\n\nfunction parseBeaconNetworkParams(\n spec: Record<string, string>,\n expectedPreset?: BeaconPreset,\n): BeaconNetworkParams {\n const slotsPerEpoch = spec.SLOTS_PER_EPOCH;\n const epochsPerSyncCommitteePeriod = spec.EPOCHS_PER_SYNC_COMMITTEE_PERIOD;\n const slotsPerHistoricalRoot = spec.SLOTS_PER_HISTORICAL_ROOT;\n\n if (!slotsPerEpoch) {\n throw new Error('Missing beacon spec value for SLOTS_PER_EPOCH');\n }\n if (!epochsPerSyncCommitteePeriod) {\n throw new Error('Missing beacon spec value for EPOCHS_PER_SYNC_COMMITTEE_PERIOD');\n }\n if (!slotsPerHistoricalRoot) {\n throw new Error('Missing beacon spec value for SLOTS_PER_HISTORICAL_ROOT');\n }\n\n const preset = detectBeaconPreset(spec);\n\n if (expectedPreset && preset !== expectedPreset) {\n throw new Error(\n `Beacon preset mismatch: chain expects ${expectedPreset}, but endpoint reports ${preset}`,\n );\n }\n\n return {\n preset,\n slotsPerEpoch: BigInt(slotsPerEpoch),\n epochsPerSyncCommitteePeriod: BigInt(epochsPerSyncCommitteePeriod),\n slotsPerHistoricalRoot: BigInt(slotsPerHistoricalRoot),\n };\n}\n\nasync function getExpectedBeaconPreset(client: ArgonClient): Promise<BeaconPreset | undefined> {\n let presetPromise = expectedBeaconPresetPromises.get(client);\n\n if (!presetPromise) {\n const beaconPresetQuery = (\n client.query.ethereumVerifier as {\n beaconPreset?: () => Promise<{\n isMainnet: boolean;\n isMinimal: boolean;\n toString(): string;\n }>;\n }\n ).beaconPreset;\n\n if (!beaconPresetQuery) {\n return;\n }\n\n presetPromise = beaconPresetQuery.call(client.query.ethereumVerifier).then(preset => {\n if (preset.isMainnet) {\n return 'mainnet';\n }\n if (preset.isMinimal) {\n return 'minimal';\n }\n\n throw new Error(`Unknown ethereum verifier beacon preset: ${preset.toString()}`);\n });\n expectedBeaconPresetPromises.set(client, presetPromise);\n }\n\n try {\n return await presetPromise;\n } catch (error) {\n expectedBeaconPresetPromises.delete(client);\n throw error;\n }\n}\n\nfunction computePeriod(slot: bigint, beaconNetworkParams: BeaconNetworkParams) {\n return (\n slot / beaconNetworkParams.slotsPerEpoch / beaconNetworkParams.epochsPerSyncCommitteePeriod\n );\n}\n\nfunction hasSyncCommitteeSupermajority(syncCommitteeBits: string) {\n const bytes = hexToBytes(syncCommitteeBits as Hex);\n const totalBits = bytes.length * 8;\n const participants = bytes.reduce((total, byte) => {\n let count = 0;\n\n for (let value = byte; value > 0; value >>= 1) {\n count += value & 1;\n }\n\n return total + count;\n }, 0);\n\n return participants * 3 >= totalBits * 2;\n}\n\nfunction isRetryableBeaconLightClientError(error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n\n return (\n message.includes('/eth/v1/beacon/light_client/') &&\n (message.includes(': 404') || message.includes(': 500'))\n );\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/mainchain/mainchain/client/nodejs/lib/index.cjs","../src/index.ts","../metadata.json","../runtime_version.json","../genesis.json","../src/WageProtector.ts","../src/utils.ts","../src/TxResult.ts","../src/TxSubmitter.ts","../src/keyringUtils.ts","../src/header.ts","../src/Vault.ts","../src/convert.ts","../src/BitcoinLock.ts","../src/PriceIndex.ts","../src/EvmContracts.ts","../../../chains/ethereum/contracts/artifacts/contracts/ArgonToken.sol/ArgonToken.json","../../../chains/ethereum/contracts/artifacts/contracts/ArgonotToken.sol/ArgonotToken.json","../../../chains/ethereum/contracts/artifacts/contracts/MintingGateway.sol/MintingGateway.json","../../../chains/ethereum/contracts/artifacts/contracts/ProxyArtifacts.sol/ProxyAdmin.json","../../../chains/ethereum/contracts/artifacts/contracts/ProxyArtifacts.sol/TransparentUpgradeableProxy.json","../../../chains/ethereum/contracts/generated.ts","../../../chains/ethereum/contracts/hashing.ts","../../../chains/ethereum/contracts/index.ts","../src/EthereumProof.ts","../src/EthereumExecution.ts","../src/EthereumGatewayActivity.ts","../src/EthereumGatewayActivityProof.ts","../src/EthereumGatewayBackfill.ts","../src/EthereumBeaconApi.ts","../src/EthereumBeaconSync.ts"],"names":["result","BigNumber","mintsPending","SATS_PER_BTC","hashMintingGatewayTransferOutOfArgonRequest","hashMintingGatewayMintingAuthorization","receipts","loaded","camelcaseKeys"],"mappings":"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UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACE,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACF;AhBwkDU;AACA;AiBvuEV;AACE,EAAA;AACA,EAAA;AACA,EAAA;AACO,EAAA;AACL,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACE,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACF;AjByuEU;AACA;AkBx4FV;AACE,EAAA;AACA,EAAA;AACA,EAAA;AACO,EAAA;AACL,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACgB,gBAAA;AACZ,kBAAA;AACkB,kBAAA;AACR,kBAAA;AACA,gBAAA;AACV,gBAAA;AACA,kBAAA;AACkB,kBAAA;AACR,kBAAA;AACA,gBAAA;AACV,gBAAA;AACA,kBAAA;AACkB,kBAAA;AACR,kBAAA;AACA,gBAAA;AACV,cAAA;AACF,cAAA;AACgB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AAAc,YAAA;AACZ,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AACV,YAAA;AACA,cAAA;AACkB,cAAA;AACR,cAAA;AACA,YAAA;AAEZ,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACE,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACF;AlB04FU;AACA;AmBxnJV;AACE,EAAA;AACA,EAAA;AACA,EAAA;AACO,EAAA;AACL,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACF;AnB0nJU;AACA;AoBjwJV;AACE,EAAA;AACA,EAAA;AACA,EAAA;AACO,EAAA;AACL,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF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A;AACN,IAAA;AACA,IAAA;AACI,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACM,IAAA;AACR,EAAA;AACA,EAAA;AACQ,IAAA;AACN,IAAA;AACA,IAAA;AACI,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACM,IAAA;AACR,EAAA;AACA,EAAA;AACQ,IAAA;AACN,IAAA;AACA,IAAA;AACI,MAAA;AACA,MAAA;AACJ,IAAA;AACM,IAAA;AACR,EAAA;AACA,EAAA;AACQ,IAAA;AACN,IAAA;AACA,IAAA;AACM,IAAA;AACR,EAAA;AACA,EAAA;AACQ,IAAA;AACN,IAAA;AACA,IAAA;AACI,MAAA;AACF,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACM,IAAA;AACR,EAAA;AACA,EAAA;AACQ,IAAA;AACN,IAAA;AACA,IAAA;AACI,MAAA;AACA,MAAA;AACA,MAAA;AACF,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACM,IAAA;AACR,EAAA;AACA,EAAA;AACQ,IAAA;AACN,IAAA;AACA,IAA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A,EAAA;AACA,EAAA;AACV;AACM;AACD,EAAA;AACK,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AACM;AACD,EAAA;AACK,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AACM;AACD,EAAA;AACK,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AACM;AACD,EAAA;AACK,EAAA;AACA,EAAA;AACV;AACM;AACD,EAAA;AACK,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACV;AAEM;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AACM;AACA;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AACM;AACJ,EAAA;AACF;AAGgB;AACP,EAAA;AACF,IAAA;AACF,IAAA;AACH,EAAA;AACF;AAEgB;AAGP,EAAA;AACT;AAEgB;AAGP,EAAA;AACT;AAEgB;AAGP,EAAA;AACT;AAEgB;AAGP,EAAA;AACL,IAAA;AACK,MAAA;AACF,MAAA;AACH,IAAA;AACF,EAAA;AACF;AAEgB;AAGP,EAAA;AACL,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACD,IAAA;AACH,EAAA;AACF;AAEgB;AAIP,EAAA;AACL,IAAA;AACA,IAAA;AACM,IAAA;AACN,IAAA;AACA,IAAA;AACA,IAAA;AACD,EAAA;AACH;AAEgB;AAIR,EAAA;AACD,IAAA;AACH,IAAA;AACD,EAAA;AAEM,EAAA;AACL,IAAA;AACA,IAAA;AACM,IAAA;AACN,IAAA;AACA,IAAA;AACA,IAAA;AACD,EAAA;AACH;AAEgB;AAIP,EAAA;AACL,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACD,IAAA;AACH,EAAA;AACF;AAEgB;AAIP,EAAA;AACL,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAA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AAA;AACF;AAES;AAEL,EAAA;AAEJ;AAES;AACD,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AAEJ,IAAA;AACE,MAAA;AACF,IAAA;AAEA,IAAA;AACE,EAAA;AAEG,EAAA;AACT;AAES;AACD,EAAA;AAGJ,EAAA;AAGJ;A9B+2PU;AACA;ACnyQD;AAGA;AACT;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACK;AA+BP;AACQ,EAAA;AACR;AAQA;AACM,EAAA;AACA,EAAA;AACF,IAAA;AACK,EAAA;AACL,IAAA;AACF,EAAA;AAEA,EAAA;AACQ,EAAA;AAER,EAAA;AACE,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAEM;AACG;AACH,EAAA;AACJ,EAAA;AACA,EAAA;AACA,EAAA;AACF;AAEgB;AACP,EAAA;AACT;AD0vQU;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/mainchain/mainchain/client/nodejs/lib/index.cjs","sourcesContent":[null,"import './interfaces/augment-api';\nimport './interfaces/augment-types';\nimport './interfaces/types-lookup';\nimport type { KeyringPair, KeyringPair$Json } from '@polkadot/keyring/types';\nimport { ApiPromise, HttpProvider, Keyring, WsProvider } from '@polkadot/api';\nimport {\n cryptoWaitReady,\n decodeAddress,\n encodeAddress,\n isAddress,\n mnemonicGenerate,\n} from '@polkadot/util-crypto';\nimport type { InterfaceTypes } from '@polkadot/types/types/registry';\nimport type { KeypairType } from '@polkadot/util-crypto/types';\nimport type { ProviderInterface } from '@polkadot/rpc-provider/types';\nimport type { ApiDecoration, ApiOptions } from '@polkadot/api/types';\nimport { Metadata, TypeRegistry } from '@polkadot/types';\nimport { result as metadataBytes } from '../metadata.json';\nimport { specVersion } from '../runtime_version.json';\nimport Genesis from '../genesis.json';\nimport { HexString } from '@polkadot/util/types';\n\nexport type { SubmittableExtrinsic } from '@polkadot/api/promise/types';\nexport { ApiDecoration };\nexport { WageProtector } from './WageProtector';\nexport { TxSubmitter, type ISubmittableOptions, type TxSigningAccount } from './TxSubmitter';\nexport { TxResult, type ITxProgressCallback } from './TxResult';\nexport * from './utils';\nexport * from './keyringUtils';\nexport * from './header';\nexport * from './Vault';\nexport * from './convert';\nexport * from './BitcoinLock';\nexport * from './PriceIndex';\nexport * as EvmContracts from './EvmContracts';\nexport * from './EthereumProof';\nexport type {\n EthereumBeaconBlockResponse,\n EthereumBeaconConfigSpecResponse,\n EthereumBeaconGenesisResponse,\n EthereumBeaconHeaderDetailsResponse,\n EthereumLightClientBootstrapResponse,\n EthereumLightClientHeader,\n EthereumLightClientUpdate,\n EthereumVersionedLightClientUpdate,\n} from './EthereumBeaconTypes';\nexport {\n decodeEthereumGatewayActivityLog,\n decodeEthereumTransferToArgonStartedLog,\n findEthereumTransferToArgonStartedLogIndexes,\n type EthereumGatewayActivity,\n} from './EthereumGatewayActivity';\nexport {\n buildGatewayActivityProofPayload,\n type EthereumGatewayActivityProofPayload,\n} from './EthereumGatewayActivityProof';\nexport {\n buildGatewayExecutionHeaderBackfill,\n buildGatewayExecutionHeaderBackfills,\n type EthereumExecutionHeaderBackfillPayload,\n} from './EthereumGatewayBackfill';\nexport * from './EthereumBeaconSync';\nexport type {\n EthereumExecutionClient,\n EthereumExecutionSource,\n EthereumReceipt,\n} from './EthereumExecution';\nexport {\n Keyring,\n KeyringPair,\n KeyringPair$Json,\n KeypairType,\n mnemonicGenerate,\n decodeAddress,\n isAddress,\n encodeAddress,\n};\n\nexport { u8aToHex, hexToU8a, u8aEq } from '@polkadot/util';\n\nexport * from '@polkadot/types/lookup';\nexport { GenericEvent, GenericBlock, GenericAddress } from '@polkadot/types/generic';\nexport {\n BTreeMap,\n Bytes,\n Compact,\n Enum,\n Null,\n Option,\n Result,\n Bool,\n Tuple,\n Range,\n Struct,\n Text,\n U256,\n U8aFixed,\n Vec,\n bool,\n i128,\n u128,\n u16,\n u32,\n u64,\n u8,\n} from '@polkadot/types-codec';\nexport type {\n ISubmittableResult,\n IExtrinsic,\n SignerResult,\n Signer,\n ISignerPayload,\n} from '@polkadot/types/types/extrinsic';\nexport { type ITuple, type Codec } from '@polkadot/types-codec/types';\nexport {\n type AccountId32,\n type Call,\n type H160,\n type H256,\n type MultiAddress,\n type Permill,\n type AccountId,\n type Header,\n type Block,\n type SignedBlock,\n} from '@polkadot/types/interfaces/runtime';\nexport type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interfaces/author';\nexport { type BlockHash } from '@polkadot/types/interfaces/chain';\nexport { InterfaceTypes as interfaces };\n\nexport type ArgonClient = ApiPromise;\nexport type IArgonQueryable = ArgonClient | ApiDecoration<'promise'>;\n\n/**\n * Wait for the crypto library to be ready (requires wasm, which needs async loading in commonjs)\n */\nexport async function waitForLoad(): Promise<void> {\n await cryptoWaitReady();\n}\n\n/**\n * Get a client for the given host\n * @param host The host to connect to\n * @param options Additional options for the API\n * @returns The client\n */\nexport async function getClient(host: string, options?: ApiOptions): Promise<ArgonClient> {\n let provider: ProviderInterface;\n if (host.startsWith('http')) {\n provider = new HttpProvider(host);\n } else {\n provider = new WsProvider(host);\n }\n\n options ??= {};\n options.metadata ??= {};\n\n for (const genesisHash of Object.values(Genesis)) {\n options.metadata[`${genesisHash}-${specVersion}`] = metadataBytes as HexString;\n }\n return await ApiPromise.create({ provider, noInitWarn: true, ...options });\n}\n\nconst registry = new TypeRegistry();\nregistry.setMetadata(\n new Metadata(registry, metadataBytes as HexString),\n undefined,\n undefined,\n true,\n);\n\nexport function getOfflineRegistry() {\n return registry;\n}\n","{\n \"jsonrpc\": \"2.0\",\n \"id\": \"1\",\n \"result\": \"0x6d6574610e5909000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050000240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006300030000005060034083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d00003800000208003c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677340013c5665633c4469676573744974656d3e000040000002440044102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e00060024436f6e73656e7375730800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000400105365616c0800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000500144f74686572040038011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000480000030400000008004c00000250005008306672616d655f73797374656d2c4576656e745265636f7264080445015404540134000c011470686173652d02011450686173650001146576656e7454010445000118746f70696373310201185665633c543e00005408346172676f6e5f72756e74696d653052756e74696d654576656e740001701853797374656d04005801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c44696765737473040080017870616c6c65745f646967657374733a3a4576656e743c52756e74696d653e000100204d756c7469736967040084017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e0003001450726f7879040094017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e000400284d696e696e67536c6f740400a4018870616c6c65745f6d696e696e675f736c6f743a3a4576656e743c52756e74696d653e00060030426974636f696e5574786f730400c8019070616c6c65745f626974636f696e5f7574786f733a3a4576656e743c52756e74696d653e000700185661756c74730400dc017470616c6c65745f7661756c74733a3a4576656e743c52756e74696d653e00080030426974636f696e4c6f636b730400e4019070616c6c65745f626974636f696e5f6c6f636b733a3a4576656e743c52756e74696d653e000900204e6f7461726965730400f0017c70616c6c65745f6e6f7461726965733a3a4576656e743c52756e74696d653e000a00204e6f7465626f6f6b04001501017c70616c6c65745f6e6f7465626f6f6b3a3a4576656e743c52756e74696d653e000b00484c6f63616c636861696e5472616e736665720400310101a870616c6c65745f6c6f63616c636861696e5f7472616e736665723a3a4576656e743c52756e74696d653e000c0034426c6f636b5365616c5370656304003501019870616c6c65745f626c6f636b5f7365616c5f737065633a3a4576656e743c52756e74696d653e000d001c446f6d61696e7304003901017870616c6c65745f646f6d61696e733a3a4576656e743c52756e74696d653e000e00285072696365496e64657804006101018870616c6c65745f70726963655f696e6465783a3a4576656e743c52756e74696d653e000f001c4772616e64706104006501015470616c6c65745f6772616e6470613a3a4576656e7400110030426c6f636b5265776172647304007101019070616c6c65745f626c6f636b5f726577617264733a3a4576656e743c52756e74696d653e001300104d696e7404008901016c70616c6c65745f6d696e743a3a4576656e743c52756e74696d653e0014002042616c616e6365730400990101ec70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d652c2070616c6c65745f62616c616e6365733a3a496e7374616e6365313e001500244f776e6572736869700400c10101ec70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d652c2070616c6c65745f62616c616e6365733a3a496e7374616e6365323e0016001c547850617573650400c501017c70616c6c65745f74785f70617573653a3a4576656e743c52756e74696d653e001700485472616e73616374696f6e5061796d656e740400d10101a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0018001c5574696c6974790400d501015470616c6c65745f7574696c6974793a3a4576656e74001900105375646f0400d901016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e001a002054726561737572790400dd01017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e001f0028466565436f6e74726f6c0400e901018870616c6c65745f6665655f636f6e74726f6c3a3a4576656e743c52756e74696d653e0020004c4f7065726174696f6e616c4163636f756e74730400f50101ac70616c6c65745f6f7065726174696f6e616c5f6163636f756e74733a3a4576656e743c52756e74696d653e00220040457468657265756d56657269666965720400fd0101a070616c6c65745f657468657265756d5f76657269666965723a3a4576656e743c52756e74696d653e0023004843726f7373636861696e5472616e736665720400050201a870616c6c65745f63726f7373636861696e5f7472616e736665723a3a4576656e743c52756e74696d653e00240000580c306672616d655f73797374656d1870616c6c6574144576656e740404540001204045787472696e7369635375636365737304013464697370617463685f696e666f5c014444697370617463684576656e74496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7268013444697370617463684572726f7200013464697370617463685f696e666f5c014444697370617463684576656e74496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736834011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e8052656a6563746564496e76616c6964417574686f72697a656455706772616465080124636f64655f6861736834011c543a3a486173680001146572726f7268013444697370617463684572726f720007041101416e20696e76616c696420617574686f72697a65642075706772616465207761732072656a6563746564207768696c6520747279696e6720746f206170706c792069742e04704576656e7420666f72207468652053797374656d2070616c6c65742e5c08306672616d655f73797374656d4444697370617463684576656e74496e666f00000c0118776569676874280118576569676874000114636c6173736001344469737061746368436c617373000120706179735f666565640110506179730000600c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000640c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000068082873705f72756e74696d653444697370617463684572726f7200013c144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504006c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400700128546f6b656e4572726f720007002841726974686d65746963040074013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007801485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d00105472696504007c0124547269654572726f72000e00006c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7248018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000070082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000074083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000078082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007c0c2873705f72756e74696d653070726f76696e675f7472696524547269654572726f7200013840496e76616c69645374617465526f6f7400000048496e636f6d706c65746544617461626173650001005056616c75654174496e636f6d706c6574654b6579000200304465636f6465724572726f720003002c496e76616c696448617368000400304475706c69636174654b65790005003845787472616e656f75734e6f64650006003c45787472616e656f757356616c75650007005c45787472616e656f7573486173685265666572656e636500080054496e76616c69644368696c645265666572656e63650009003456616c75654d69736d61746368000a003c496e636f6d706c65746550726f6f66000b0030526f6f744d69736d61746368000c002c4465636f64654572726f72000d0000800c3870616c6c65745f646967657374731870616c6c6574144576656e74040454000100047c54686520604576656e746020656e756d206f6620746869732070616c6c6574840c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001142c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e7488017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e7488017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c748c01384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e7488017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e304465706f736974506f6b656410010c77686f000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c4861736800012c6f6c645f6465706f73697418013042616c616e63654f663c543e00012c6e65775f6465706f73697418013042616c616e63654f663c543e000404f0546865206465706f73697420666f722061206d756c7469736967206f7065726174696f6e20686173206265656e20757064617465642f706f6b65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657488083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c75333200008c0418526573756c740804540190044501680108084f6b040090000000000c4572720400680000010000900000040000940c3070616c6c65745f70726f78791870616c6c6574144576656e7404045400011c3450726f78794578656375746564040118726573756c748c01384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656418011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465789c010c7531360001086174100144426c6f636b4e756d626572466f723c543e00013c65787472696e7369635f696e64657810010c753332000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e28507572654b696c6c656410011070757265000130543a3a4163636f756e74496400011c737061776e6572000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465789c010c7531360002049c4120707572652070726f787920776173206b696c6c65642062792069747320737061776e65722e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736834013443616c6c486173684f663c543e000304e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00040448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00050450412070726f7879207761732072656d6f7665642e304465706f736974506f6b656410010c77686f000130543a3a4163636f756e7449640001106b696e64a0012c4465706f7369744b696e6400012c6f6c645f6465706f73697418013042616c616e63654f663c543e00012c6e65775f6465706f73697418013042616c616e63654f663c543e000604090141206465706f7369742073746f72656420666f722070726f78696573206f7220616e6e6f756e63656d656e74732077617320706f6b6564202f20757064617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749808346172676f6e5f72756e74696d652450726f7879547970650001200c416e790000002c4e6f6e5472616e73666572000100285072696365496e646578000200244d696e696e67426964000300504d696e696e674269645265616c506179734665650004001c426974636f696e000500285661756c7441646d696e000600345661756c7444656c6567617465000700009c0000050400a0083070616c6c65745f70726f78792c4465706f7369744b696e640001081c50726f7869657300000034416e6e6f756e63656d656e747300010000a40c4870616c6c65745f6d696e696e675f736c6f741870616c6c6574144576656e7404045400011c244e65774d696e6572730c01286e65775f6d696e657273a801b4426f756e6465645665633c526567697374726174696f6e3c543e2c20543a3a4d6178436f686f727453697a653e00013c72656c65617365645f6d696e65727310010c7533320001206672616d655f696430011c4672616d6549640000003c536c6f7442696464657241646465640c01286163636f756e745f6964000130543a3a4163636f756e7449640001286269645f616d6f756e74180128543a3a42616c616e6365000114696e64657810010c75333200010044536c6f7442696464657244726f707065640801286163636f756e745f6964000130543a3a4163636f756e7449640001587072657365727665645f6172676f6e6f745f686f6c64200110626f6f6c0002005452656c656173654d696e6572536561744572726f720801286163636f756e745f6964000130543a3a4163636f756e7449640001146572726f7268013444697370617463684572726f72000300684d696e696e67436f6e66696775726174696f6e557064617465640c01887469636b735f6265666f72655f6269645f656e645f666f725f7672665f636c6f73653001105469636b00014c7469636b735f6265747765656e5f736c6f74733001105469636b000178736c6f745f62696464696e675f73746172745f61667465725f7469636b733001105469636b000400404d696e696e6742696473436c6f7365640401206672616d655f696430011c4672616d654964000504f4426964732061726520636c6f7365642064756520746f20746865205652462072616e646f6d697a65642066756e6374696f6e2074726967676572696e673c52656c656173654269644572726f720801286163636f756e745f6964000130543a3a4163636f756e7449640001146572726f7268013444697370617463684572726f72000600047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a80c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ac045300000400c401185665633c543e0000ac0c406172676f6e5f7072696d69746976657328626c6f636b5f7365616c484d696e696e67526567697374726174696f6e0c244163636f756e74496401001c42616c616e63650118104b65797301b0001c01286163636f756e745f69640001244163636f756e74496400016065787465726e616c5f66756e64696e675f6163636f756e74bc01444f7074696f6e3c4163636f756e7449643e00010c626964c0011c42616c616e63650001206172676f6e6f7473c0011c42616c616e6365000138617574686f726974795f6b657973b001104b6579730001447374617274696e675f6672616d655f69642c011c4672616d65496400012c6269645f61745f7469636b2c01105469636b0000b008346172676f6e5f72756e74696d652c53657373696f6e4b657973000008011c6772616e647061b401d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000150626c6f636b5f7365616c5f617574686f72697479b801dc3c4d696e696e67536c6f74206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000b40c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c69630000040004013c656432353531393a3a5075626c69630000b810406172676f6e5f7072696d69746976657328626c6f636b5f7365616c0c617070185075626c69630000040004013c656432353531393a3a5075626c69630000bc04184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000c00000061800c4000002ac00c80c5070616c6c65745f626974636f696e5f7574786f731870616c6c6574144576656e7404045400011c305574786f566572696669656408011c7574786f5f69643001185574786f49640001447361746f736869735f72656365697665643001205361746f73686973000000305574786f52656a656374656410011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f52656600013c72656a65637465645f726561736f6ed80154426974636f696e52656a6563746564526561736f6e0001447361746f736869735f72656365697665643001205361746f73686973000100245574786f5370656e7408011c7574786f5f69643001185574786f4964000130626c6f636b5f686569676874300134426974636f696e486569676874000200345574786f556e7761746368656404011c7574786f5f69643001185574786f4964000300385574786f5370656e744572726f7208011c7574786f5f69643001185574786f49640001146572726f7268013444697370617463684572726f72000400445574786f56657269666965644572726f7208011c7574786f5f69643001185574786f49640001146572726f7268013444697370617463684572726f72000500445574786f52656a65637465644572726f7208011c7574786f5f69643001185574786f49640001146572726f7268013444697370617463684572726f72000600047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c406172676f6e5f7072696d6974697665731c626974636f696e1c5574786f526566000008011074786964d00118483235364c650001306f75747075745f696e646578d4010c7533320000d00c406172676f6e5f7072696d6974697665731c626974636f696e18483235364c65000004000401205b75383b2033325d0000d40000061000d80c406172676f6e5f7072696d6974697665731c626974636f696e54426974636f696e52656a6563746564526561736f6e000110705361746f736869734f757473696465416363657074656452616e6765000000145370656e740001004c566572696669636174696f6e457870697265640002003c416c7265616479566572696669656400030000dc0c3470616c6c65745f7661756c74731870616c6c6574144576656e74040454000140305661756c74437265617465641401207661756c745f696410011c5661756c74496400013873656375726974697a6174696f6e180128543a3a42616c616e636500015073656375726974697a6174696f6e5f726174696fe0012446697865645531323800014c6f70657261746f725f6163636f756e745f6964000130543a3a4163636f756e74496400012c6f70656e65645f7469636b3001105469636b000000345661756c744d6f6469666965641001207661756c745f696410011c5661756c74496400013873656375726974697a6174696f6e180128543a3a42616c616e636504c0546865206e65772073656375726974697a6174696f6e20616d6f756e74206166746572206d6f64696669636174696f6e015473656375726974697a6174696f6e5f746172676574180128543a3a42616c616e63650449015468652073656375726974697a6174696f6e2074617267657420616d6f756e74206166746572206d6f64696669636174696f6e20287468697320697320746865206c6f6e67207465726d2074617267657429015073656375726974697a6174696f6e5f726174696fe00124466978656455313238000100645661756c745465726d734368616e67655363686564756c65640801207661756c745f696410011c5661756c74496400012c6368616e67655f7469636b3001105469636b000200445661756c745465726d734368616e6765640401207661756c745f696410011c5661756c7449640003002c5661756c74436c6f7365640c01207661756c745f696410011c5661756c74496400016073656375726974697a6174696f6e5f72656d61696e696e67180128543a3a42616c616e636500015c73656375726974697a6174696f6e5f72656c6561736564180128543a3a42616c616e6365000400585661756c74426974636f696e587075624368616e67650401207661756c745f696410011c5661756c7449640005005c5661756c74526576656e7565556e636f6c6c65637465640c01207661756c745f696410011c5661756c7449640001206672616d655f696430011c4672616d654964000118616d6f756e74180128543a3a42616c616e636500060439015661756c7420726576656e756520776173206e6f7420636f6c6c65637465642077697468696e207468652072657175697265642077696e646f772c20736f20686173206265656e206275726e6564385661756c74436f6c6c65637465640801207661756c745f696410011c5661756c74496400011c726576656e7565180128543a3a42616c616e63650007040901546865207661756c7420636f6c6c656374656420726576656e756520616e6420636f7369676e656420616c6c2070656e64696e6720626974636f696e206c6f636b732c46756e64734c6f636b65641801207661756c745f696410011c5661756c7449640001186c6f636b6572000130543a3a4163636f756e7449640001486c69717569646974795f70726f6d69736564180128543a3a42616c616e636500012869735f72617463686574200110626f6f6c00012c6665655f726576656e7565180128543a3a42616c616e63650001486469645f7573655f6665655f636f75706f6e200110626f6f6c0008004046756e644c6f636b43616e63656c65640801207661756c745f696410011c5661756c744964000118616d6f756e74180128543a3a42616c616e63650009006046756e64735363686564756c6564466f7252656c656173650c01207661756c745f696410011c5661756c74496400013873656375726974697a6174696f6e180128543a3a42616c616e636500013872656c656173655f686569676874300134426974636f696e486569676874000a00584c6f7374426974636f696e436f6d70656e73617465641001207661756c745f696410011c5661756c74496400012c62656e6566696369617279000130543a3a4163636f756e744964000138746f5f62656e6566696369617279180128543a3a42616c616e63650001186275726e6564180128543a3a42616c616e6365000b003446756e647352656c65617365640801207661756c745f696410011c5661756c74496400013873656375726974697a6174696f6e180128543a3a42616c616e6365000c004846756e647352656c65617365644572726f720801207661756c745f696410011c5661756c7449640001146572726f7268013444697370617463684572726f72000d005854726561737572795265636f7264696e674572726f721001207661756c745f696410011c5661756c7449640001206672616d655f696430011c4672616d6549640001387661756c745f6561726e696e6773180128543a3a42616c616e63650001146572726f7268013444697370617463684572726f72000e0050436f6d6d69747465644172676f6e6f74735365740c01207661756c745f696410011c5661756c74496400014c6f70657261746f725f6163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000f00047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e00c3473705f61726974686d657469632c66697865645f706f696e742446697865645531323800000400180110753132380000e40c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c6574144576656e7404045400013848426974636f696e4c6f636b437265617465641c011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c7449640001486c69717569646974795f70726f6d69736564180128543a3a42616c616e636500013873656375726974697a6174696f6e180128543a3a42616c616e636500014c6c6f636b65645f7461726765745f7072696365180128543a3a42616c616e63650001286163636f756e745f6964000130543a3a4163636f756e74496400013073656375726974795f666565180128543a3a42616c616e636500000050426974636f696e4c6f636b52617463686574656420011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c7449640001486c69717569646974795f70726f6d69736564180128543a3a42616c616e63650001406f6c645f7461726765745f7072696365180128543a3a42616c616e636500013073656375726974795f666565180128543a3a42616c616e63650001406e65775f7461726765745f7072696365180128543a3a42616c616e6365000134616d6f756e745f6275726e6564180128543a3a42616c616e63650001286163636f756e745f6964000130543a3a4163636f756e74496400010044426974636f696e4c6f636b4275726e65640c011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c7449640001387761735f7574786f5f7370656e74200110626f6f6c00020068426974636f696e5574786f436f7369676e52657175657374656408011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c7449640003004c426974636f696e5574786f436f7369676e65640c011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c7449640001247369676e6174757265e80140426974636f696e5369676e617475726500040060426974636f696e5370656e74416674657252656c6561736508011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c74496400050050426974636f696e436f7369676e5061737444756510011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c74496400014c636f6d70656e736174696f6e5f616d6f756e74180128543a3a42616c616e6365000158636f6d70656e73617465645f6163636f756e745f6964000130543a3a4163636f756e74496400060048436f7369676e4f7665726475654572726f7208011c7574786f5f69643001185574786f49640001146572726f7268013444697370617463684572726f720007040901416e206572726f72206f63637572726564207768696c6520726566756e64696e6720616e206f76657264756520636f7369676e656420626974636f696e206c6f636b4c4c6f636b45787069726174696f6e4572726f7208011c7574786f5f69643001185574786f49640001146572726f7268013444697370617463684572726f72000804a4416e206572726f72206f63637572726564207768696c6520636f6d706c6574696e672061206c6f636b504f727068616e65645574786f526563656976656410011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f5265660001207661756c745f696410011c5661756c7449640001207361746f736869733001205361746f73686973000900704f727068616e65645574786f52656c6561736552657175657374656410011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f5265660001207661756c745f696410011c5661756c7449640001286163636f756e745f6964000130543a3a4163636f756e744964000a00504f727068616e65645574786f436f7369676e656414011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f5265660001207661756c745f696410011c5661756c7449640001286163636f756e745f6964000130543a3a4163636f756e7449640001247369676e6174757265e80140426974636f696e5369676e6174757265000b005c5574786f46756e64656446726f6d43616e64696461746510011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f5265660001207661756c745f696410011c5661756c7449640001286163636f756e745f6964000130543a3a4163636f756e744964000c005c53656375726974697a6174696f6e496e6372656173656410011c7574786f5f69643001185574786f49640001207661756c745f696410011c5661756c7449640001306e65775f7361746f736869733001205361746f736869730001286163636f756e745f6964000130543a3a4163636f756e744964000d00047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e80c406172676f6e5f7072696d6974697665731c626974636f696e40426974636f696e5369676e617475726500000400ec0170426f756e6465645665633c75382c20436f6e73745533323c37343e3e0000ec0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000f00c3c70616c6c65745f6e6f7461726965731870616c6c6574144576656e74040454000114384e6f7461727950726f706f7365640c01406f70657261746f725f6163636f756e74000130543a3a4163636f756e7449640001106d657461f4013c4e6f746172794d6574614f663c543e00011c65787069726573100144426c6f636b4e756d626572466f723c543e000004a4412075736572206861732070726f706f736564206f7065726174696e672061732061206e6f746172793c4e6f746172794163746976617465640401186e6f74617279110101444e6f746172795265636f72644f663c543e0001048c41206e6f746172792070726f706f73616c20686173206265656e206163636570746564584e6f746172794d6574615570646174655175657565640c01246e6f746172795f69641001204e6f7461727949640001106d657461f4013c4e6f746172794d6574614f663c543e0001386566666563746976655f7469636b3001105469636b000204844e6f74617279206d657461646174612071756575656420666f7220757064617465444e6f746172794d657461557064617465640801246e6f746172795f69641001204e6f7461727949640001106d657461f4013c4e6f746172794d6574614f663c543e0003045c4e6f74617279206d657461646174612075706461746564544e6f746172794d6574615570646174654572726f720c01246e6f746172795f69641001204e6f7461727949640001146572726f7268013444697370617463684572726f720001106d657461f4013c4e6f746172794d6574614f663c543e000404844572726f72207570646174696e6720717565756564206e6f7461727920696e666f047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f40c406172676f6e5f7072696d697469766573186e6f74617279284e6f746172794d65746104204d6178486f73747300000c01106e616d65f801284e6f746172794e616d650001187075626c69630401304e6f746172795075626c6963000114686f73747301010168426f756e6465645665633c486f73742c204d6178486f7374733e0000f80c406172676f6e5f7072696d697469766573186e6f74617279284e6f746172794e616d6500000400fc0170426f756e6465645665633c75382c20436f6e73745533323c35353e3e0000fc0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000001010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540105010453000004000d0101185665633c543e000005010c406172676f6e5f7072696d69746976657310686f737410486f73740000040009010174426f756e6465645665633c75382c20436f6e73745533323c3235333e3e000009010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00000d0100000205010011010c406172676f6e5f7072696d697469766573186e6f74617279304e6f746172795265636f72640c244163636f756e74496401002c426c6f636b4e756d6265720110204d6178486f73747300001801246e6f746172795f6964d401204e6f74617279496400014c6f70657261746f725f6163636f756e745f69640001244163636f756e74496400013c6163746976617465645f626c6f636bd4012c426c6f636b4e756d6265720001486d6574615f757064617465645f626c6f636bd4012c426c6f636b4e756d6265720001446d6574615f757064617465645f7469636b2c01105469636b0001106d657461f401504e6f746172794d6574613c4d6178486f7374733e000015010c3c70616c6c65745f6e6f7465626f6f6b1870616c6c6574144576656e7404045400010c444e6f7465626f6f6b5375626d69747465640801246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d626572000000504e6f7465626f6f6b41756469744661696c7572651001246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d6265720001346e6f7465626f6f6b5f686173683401104832353600015066697273745f6661696c7572655f726561736f6e1901014c4e6f7465626f6f6b5665726966794572726f72000100644e6f7465626f6f6b5265616479466f72526570726f636573730801246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d626572000200047c54686520604576656e746020656e756d206f6620746869732070616c6c657419010c486172676f6e5f6e6f746172795f6175646974146572726f722c5665726966794572726f720001ec504d697373696e674163636f756e744f726967696e0801286163636f756e745f696400012c4163636f756e74496433320001306163636f756e745f747970651d01012c4163636f756e745479706500000048486973746f72794c6f6f6b75704572726f72040118736f75726365210101644163636f756e74486973746f72794c6f6f6b75704572726f7200010060496e76616c69644163636f756e744368616e67656c69737400020064496e76616c6964436861696e5472616e73666572734c69737400030060496e76616c696442616c616e63654368616e6765526f6f7400040060496e76616c69644865616465725461785265636f7264656400050050496e76616c696450726576696f75734e6f6e636500060058496e76616c696450726576696f757342616c616e636500070070496e76616c696450726576696f75734163636f756e744f726967696e00080090496e76616c696450726576696f757342616c616e63654368616e67654e6f7465626f6f6b00090050496e76616c696442616c616e63654368616e6765000a0074496e76616c696442616c616e63654368616e67655369676e61747572650401306368616e67655f696e6465789c010c753136000b0054496e76616c69644e6f7465526563697069656e7473000c004842616c616e63654368616e67654572726f720c01306368616e67655f696e6465789c010c7531360001286e6f74655f696e6465789c010c75313600011c6d6573736167652501013c4d61784c656e677468537472696e67000d0068496e76616c69644e657442616c616e63654368616e6765736574000e004c496e73756666696369656e7442616c616e636510011c62616c616e636518011075313238000118616d6f756e74180110753132380001286e6f74655f696e6465789c010c7531360001306368616e67655f696e6465789c010c753136000f004845786365656465644d617842616c616e636510011c62616c616e636518011075313238000118616d6f756e74180110753132380001286e6f74655f696e6465789c010c7531360001306368616e67655f696e6465789c010c7531360010005442616c616e63654368616e67654d69736d617463680c01306368616e67655f696e6465789c010c75313600014070726f76696465645f62616c616e63651801107531323800014863616c63756c617465645f62616c616e63652d010110693132380011005c42616c616e63654368616e67654e6f744e65745a65726f08011073656e741801107531323800011c636c61696d65641801107531323800120070496e76616c6964446f6d61696e4c65617365416c6c6f636174696f6e0013006854617842616c616e63654368616e67654e6f744e65745a65726f08011073656e741801107531323800011c636c61696d6564180110753132380014004c4d697373696e6742616c616e636550726f6f660015006c496e76616c696450726576696f757342616c616e636550726f6f660016004c496e76616c69644e6f7465626f6f6b4861736800170064496e76616c69644e6f7465626f6f6b4865616465724861736800180058496e76616c69644e6f7465626f6f6b56657273696f6e001900584475706c6963617465436861696e5472616e73666572001a00684475706c6963617465644163636f756e744f726967696e556964001b0058496e76616c69644e6f746172795369676e6174757265001c0054496e76616c696453656372657450726f7669646564001d00384e6f7465626f6f6b546f6f4f6c64001e005c436174636875704e6f7465626f6f6b734d697373696e67001f002c4465636f64654572726f72002000744163636f756e744368616e6e656c486f6c64446f65736e744578697374002100704163636f756e74416c72656164794861734368616e6e656c486f6c640022006c4368616e6e656c486f6c644e6f745265616479466f72436c61696d08013063757272656e745f7469636b3001105469636b000128636c61696d5f7469636b3001105469636b002300344163636f756e744c6f636b6564002400584d697373696e674368616e6e656c486f6c644e6f746500250058496e76616c69644368616e6e656c486f6c644e6f746500260068496e76616c69644368616e6e656c486f6c64436c61696d6572730027006c4368616e6e656c486f6c644e6f746542656c6f774d696e696d756d00280054496e76616c69645461784e6f74654163636f756e740029004c496e76616c69645461784f7065726174696f6e002a005c496e73756666696369656e74546178496e636c756465640c01207461785f73656e74180110753132380001207461785f6f776564180110753132380001286163636f756e745f696400012c4163636f756e7449643332002b0060496e73756666696369656e74426c6f636b566f7465546178002c0048496e656c696769626c65546178566f746572002d0064426c6f636b566f7465496e76616c69645369676e6174757265002e0068496e76616c6964426c6f636b566f7465416c6c6f636174696f6e002f0050496e76616c6964426c6f636b566f7465526f6f7400300058496e76616c6964426c6f636b566f746573436f756e740031005c496e76616c6964426c6f636b566f74696e67506f77657200320050496e76616c6964426c6f636b566f74654c6973740033004c496e76616c6964436f6d7075746550726f6f6600340058496e76616c6964426c6f636b566f7465536f7572636500350070496e73756666696369656e74426c6f636b566f74654d696e696d756d00360050496e76616c6964426c6f636b566f74655469636b0801107469636b3001105469636b0001346e6f7465626f6f6b5f7469636b3001105469636b0037005c496e76616c696444656661756c74426c6f636b566f746500380074496e76616c696444656661756c74426c6f636b566f7465417574686f72080118617574686f7200012c4163636f756e7449643332000120657870656374656400012c4163636f756e7449643332003900484e6f44656661756c74426c6f636b566f7465003a00001d010c406172676f6e5f7072696d6974697665731c6163636f756e742c4163636f756e74547970650001080c5461780000001c4465706f73697400010000210108486172676f6e5f6e6f746172795f6175646974644163636f756e74486973746f72794c6f6f6b75704572726f7200011030526f6f744e6f74466f756e64000000484c6173744368616e67654e6f74466f756e640001006c496e76616c69645472616e73666572546f4c6f63616c636861696e00020068426c6f636b53706563696669636174696f6e4e6f74466f756e640003000025010c486172676f6e5f6e6f746172795f6175646974146572726f723c4d61784c656e677468537472696e670000040029010174426f756e6465645665633c75382c20436f6e73745533323c3130303e3e000029010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00002d010000050d0031010c6870616c6c65745f6c6f63616c636861696e5f7472616e736665721870616c6c6574144576656e7404045400011c505472616e73666572546f4c6f63616c636861696e1401286163636f756e745f69640001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e741801583c5420617320436f6e6669673e3a3a42616c616e636500012c7472616e736665725f69641001585472616e73666572546f4c6f63616c636861696e49640001246e6f746172795f69641001204e6f74617279496400013c65787069726174696f6e5f7469636b3001105469636b0000046846756e64732073656e7420746f2061206c6f63616c636861696e6c5472616e73666572546f4c6f63616c636861696e457870697265640c01286163636f756e745f69640001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400012c7472616e736665725f69641001585472616e73666572546f4c6f63616c636861696e49640001246e6f746172795f69641001204e6f746172794964000104b85472616e7366657220746f206c6f63616c636861696e206578706972656420616e6420726f6c6c6564206261636b585472616e7366657246726f6d4c6f63616c636861696e0c01286163636f756e745f69640001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e741801583c5420617320436f6e6669673e3a3a42616c616e63650001246e6f746172795f69641001204e6f746172794964000204945472616e736665722066726f6d204c6f63616c636861696e20746f204d61696e636861696e6c5472616e7366657246726f6d4c6f63616c636861696e4572726f721401286163636f756e745f69640001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e741801583c5420617320436f6e6669673e3a3a42616c616e63650001246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d6265720001146572726f7268013444697370617463684572726f720003049041207472616e7366657220696e746f20746865206d61696e636861696e206661696c65647c5472616e73666572546f4c6f63616c636861696e526566756e644572726f721401286163636f756e745f69640001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400012c7472616e736665725f69641001585472616e73666572546f4c6f63616c636861696e49640001246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d6265720001146572726f7268013444697370617463684572726f72000404dc416e2065787069726564207472616e7366657220746f206c6f63616c636861696e206661696c656420746f20626520726566756e646564a0506f737369626c65496e76616c69644c6f63616c636861696e5472616e73666572416c6c6f7765640c012c7472616e736665725f69641001585472616e73666572546f4c6f63616c636861696e49640001246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d626572000508450141206c6f63616c636861696e207472616e7366657220636f756c64206e6f7420626520636c65616e65642075702070726f7065726c792e20506f737369626c6520696e76616c6964207472616e73666572586e656564696e6720696e7665737469676174696f6e2e345461786174696f6e4572726f721001246e6f746172795f69641001204e6f74617279496400013c6e6f7465626f6f6b5f6e756d6265721001384e6f7465626f6f6b4e756d62657200010c7461781801583c5420617320436f6e6669673e3a3a42616c616e63650001146572726f7268013444697370617463684572726f720006043c5461786174696f6e206661696c6564047c54686520604576656e746020656e756d206f6620746869732070616c6c657435010c5870616c6c65745f626c6f636b5f7365616c5f737065631870616c6c6574144576656e740404540001084c566f74654d696e696d756d41646a757374656410015065787065637465645f626c6f636b5f766f7465731801107531323800014861637475616c5f626c6f636b5f766f7465731801107531323800014873746172745f766f74655f6d696e696d756d18012c566f74654d696e696d756d0001406e65775f766f74655f6d696e696d756d18012c566f74654d696e696d756d00000064436f6d70757465446966666963756c747941646a757374656410014c65787065637465645f626c6f636b5f74696d6530010c75363400014461637475616c5f626c6f636b5f74696d6530010c75363400014073746172745f646966666963756c7479180144436f6d70757465446966666963756c74790001386e65775f646966666963756c7479180144436f6d70757465446966666963756c7479000100047c54686520604576656e746020656e756d206f6620746869732070616c6c657439010c3870616c6c65745f646f6d61696e731870616c6c6574144576656e74040454000118445a6f6e655265636f72645570646174656408012c646f6d61696e5f68617368340128446f6d61696e4861736800012c7a6f6e655f7265636f72643d0101605a6f6e655265636f72643c543a3a4163636f756e7449643e000004804120646f6d61696e207a6f6e65207265636f726420776173207570646174656440446f6d61696e5265676973746572656408012c646f6d61696e5f68617368340128446f6d61696e48617368000130726567697374726174696f6e5d010180446f6d61696e526567697374726174696f6e3c543a3a4163636f756e7449643e0001045c4120646f6d61696e20776173207265676973746572656434446f6d61696e52656e6577656404012c646f6d61696e5f68617368340128446f6d61696e486173680002045c4120646f6d61696e20776173207265676973746572656434446f6d61696e4578706972656404012c646f6d61696e5f68617368340128446f6d61696e48617368000304504120646f6d61696e20776173206578706972656468446f6d61696e526567697374726174696f6e43616e63656c656408012c646f6d61696e5f68617368340128446f6d61696e48617368000130726567697374726174696f6e5d010180446f6d61696e526567697374726174696f6e3c543a3a4163636f756e7449643e00040841014120646f6d61696e20726567697374726174696f6e207761732063616e63656c65642064756520746f206120636f6e666c696374696e6720726567697374726174696f6e20696e207468652073616d65107469636b5c446f6d61696e526567697374726174696f6e4572726f720c012c646f6d61696e5f68617368340128446f6d61696e486173680001286163636f756e745f696400012c4163636f756e74496433320001146572726f7268013444697370617463684572726f72000504b04120646f6d61696e20726567697374726174696f6e206661696c65642064756520746f20616e206572726f72047c54686520604576656e746020656e756d206f6620746869732070616c6c65743d010c406172676f6e5f7072696d69746976657318646f6d61696e285a6f6e655265636f726404244163636f756e7449640100000c013c7061796d656e745f6163636f756e740001244163636f756e7449640001246e6f746172795f69641001204e6f74617279496400012076657273696f6e73410101cc426f756e64656442547265654d61703c53656d7665722c2056657273696f6e486f73742c20436f6e73745533323c3530303e3e000041010c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01450104560149010453000004005101013842547265654d61703c4b2c20563e000045010c406172676f6e5f7072696d69746976657318646f6d61696e1853656d76657200000c01146d616a6f7210010c7533320001146d696e6f7210010c753332000114706174636810010c753332000049010c406172676f6e5f7072696d69746976657318646f6d61696e2c56657273696f6e486f737400000801306461746173746f72655f69644d010170426f756e6465645665633c75382c20436f6e73745533323c35303e3e000110686f737405010110486f737400004d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00005101042042547265654d617008044b01450104560149010004005501000000550100000259010059010000040845014901005d01083870616c6c65745f646f6d61696e7348446f6d61696e526567697374726174696f6e04244163636f756e7449640100000801286163636f756e745f69640001244163636f756e744964000148726567697374657265645f61745f7469636b3001105469636b000061010c4870616c6c65745f70726963655f696e6465781870616c6c6574144576656e74040454000108204e6577496e646578000004c44576656e7420656d6974746564207768656e2061206e657720707269636520696e646578206973207375626d69747465643c4f70657261746f724368616e67656404012c6f70657261746f725f6964000130543a3a4163636f756e744964000100047c54686520604576656e746020656e756d206f6620746869732070616c6c657465010c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f73657469010134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657469010000026d01006d0100000408b4300071010c5070616c6c65745f626c6f636b5f726577617264731870616c6c6574144576656e74040454000108345265776172644372656174656404011c72657761726473750101a85665633c426c6f636b5061796f75743c543a3a4163636f756e7449642c20543a3a42616c616e63653e3e000000445265776172644372656174654572726f721001286163636f756e745f6964000130543a3a4163636f756e7449640001186172676f6e73850101484f7074696f6e3c543a3a42616c616e63653e0001246f776e657273686970850101484f7074696f6e3c543a3a42616c616e63653e0001146572726f7268013444697370617463684572726f72000100047c54686520604576656e746020656e756d206f6620746869732070616c6c6574750100000279010079010c406172676f6e5f7072696d69746976657328626c6f636b5f7365616c2c426c6f636b5061796f757408244163636f756e74496401001c42616c616e63650118001401286163636f756e745f69640001244163636f756e7449640001246f776e657273686970c0011c42616c616e63650001186172676f6e73c0011c42616c616e636500012c7265776172645f747970657d01013c426c6f636b52657761726454797065000150626c6f636b5f7365616c5f617574686f72697479810101704f7074696f6e3c426c6f636b5365616c417574686f7269747949643e00007d010c406172676f6e5f7072696d69746976657328626c6f636b5f7365616c3c426c6f636b5265776172645479706500010c144d696e657200000014566f7465720001002c50726f666974536861726500020000810104184f7074696f6e04045401b80108104e6f6e6500000010536f6d650400b80000010000850104184f7074696f6e04045401180108104e6f6e6500000010536f6d65040018000001000089010c2c70616c6c65745f6d696e741870616c6c6574144576656e7404045400010c2c426974636f696e4d696e740c01286163636f756e745f6964000130543a3a4163636f756e74496400011c7574786f5f69648d0101384f7074696f6e3c5574786f49643e000118616d6f756e74180128543a3a42616c616e63650000044c416e7920626974636f696e73206d696e746564284d696e696e674d696e74100118616d6f756e74180128543a3a42616c616e63650001247065725f6d696e6572180128543a3a42616c616e63650001246172676f6e5f637069910101204172676f6e4350490001246c6971756964697479180128543a3a42616c616e63650001084d0154686520616d6f756e74206f66206d6963726f676f6e73206d696e74656420666f72206d696e696e672e204e4f54453a206163636f756e74732062656c6f77204578697374656e7469616c204465706f7369746077696c6c206e6f742062652061626c6520746f206d696e74244d696e744572726f721401246d696e745f74797065950101204d696e74547970650001286163636f756e745f6964000130543a3a4163636f756e74496400011c7574786f5f69648d0101384f7074696f6e3c5574786f49643e000118616d6f756e74180128543a3a42616c616e63650001146572726f7268013444697370617463684572726f720002085d014572726f727320656e636f756e7465726564207768696c65206d696e74696e672e204d6f7374206f6674656e2064756520746f206d696e7420616d6f756e74207374696c6c2062656c6f77204578697374656e7469616c1c4465706f736974047c54686520604576656e746020656e756d206f6620746869732070616c6c65748d0104184f7074696f6e04045401300108104e6f6e6500000010536f6d65040030000001000091010c3473705f61726974686d657469632c66697865645f706f696e7424466978656449313238000004002d01011069313238000095010c2c70616c6c65745f6d696e741870616c6c6574204d696e74547970650001081c426974636f696e000000184d696e696e670001000099010c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001781c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475739d0101185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e304d696e746564437265646974040118616d6f756e74180128543a3a42616c616e6365000b04e0536f6d6520637265646974207761732062616c616e63656420616e6420616464656420746f2074686520546f74616c49737375616e63652e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e284275726e656444656274040118616d6f756e74180128543a3a42616c616e6365000d04cc536f6d65206465627420686173206265656e2064726f707065642066726f6d2074686520546f74616c2049737375616e63652e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000e041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000f04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e74496400100460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e63650011042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650012042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500150460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500160460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001704ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e1048656c640c0118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500180480536f6d652062616c616e63652077617320706c61636564206f6e20686f6c642e284275726e656448656c640c0118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365001904a048656c642062616c616e636520776173206275726e65642066726f6d20616e206163636f756e742e385472616e736665724f6e486f6c64100118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e000118736f75726365000130543a3a4163636f756e74496400011064657374000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365001a04150141207472616e73666572206f662060616d6f756e7460206f6e20686f6c642066726f6d2060736f757263656020746f206064657374602077617320696e697469617465642e3c5472616e73666572416e64486f6c64100118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e000118736f75726365000130543a3a4163636f756e74496400011064657374000130543a3a4163636f756e74496400012c7472616e73666572726564180128543a3a42616c616e6365001b04090154686520607472616e73666572726564602062616c616e636520697320706c61636564206f6e20686f6c642061742074686520606465737460206163636f756e742e2052656c65617365640c0118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365001c0490536f6d652062616c616e6365207761732072656c65617365642066726f6d20686f6c642e28556e65787065637465640400bd010138556e65787065637465644b696e64001d04b0416e20756e65787065637465642f646566656e73697665206576656e7420776173207472696767657265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749d0114346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000a10108346172676f6e5f72756e74696d654452756e74696d65486f6c64526561736f6e000118284d696e696e67536c6f740400a501017870616c6c65745f6d696e696e675f736c6f743a3a486f6c64526561736f6e000600185661756c74730400a901016470616c6c65745f7661756c74733a3a486f6c64526561736f6e00080030426974636f696e4c6f636b730400ad01018070616c6c65745f626974636f696e5f6c6f636b733a3a486f6c64526561736f6e00090030426c6f636b526577617264730400b101018070616c6c65745f626c6f636b5f726577617264733a3a486f6c64526561736f6e0013002054726561737572790400b501016c70616c6c65745f74726561737572793a3a486f6c64526561736f6e001f004843726f7373636861696e5472616e736665720400b901019870616c6c65745f63726f7373636861696e5f7472616e736665723a3a486f6c64526561736f6e00240000a5010c4870616c6c65745f6d696e696e675f736c6f741870616c6c657428486f6c64526561736f6e0001043c526567697374657241734d696e657200000000a9010c3470616c6c65745f7661756c74731870616c6c657428486f6c64526561736f6e00010c28456e7465725661756c74000000344f626c69676174696f6e4665650001003850656e64696e67436f6c6c65637400020000ad010c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c657428486f6c64526561736f6e0001044852656c65617365426974636f696e4c6f636b00000000b1010c5070616c6c65745f626c6f636b5f726577617264731870616c6c657428486f6c64526561736f6e000104404d617475726174696f6e506572696f6400000000b5010c3c70616c6c65745f74726561737572791870616c6c657428486f6c64526561736f6e00010454436f6e7472696275746564546f547265617375727900000000b9010c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c657428486f6c64526561736f6e000108785472616e736665724f75744d696e74696e67417574686f726974795469700000008c4d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7400010000bd010c3c70616c6c65745f62616c616e6365731870616c6c657438556e65787065637465644b696e640001083842616c616e636555706461746564000000544661696c6564546f4d75746174654163636f756e7400010000c1010c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001781c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475739d0101185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e304d696e746564437265646974040118616d6f756e74180128543a3a42616c616e6365000b04e0536f6d6520637265646974207761732062616c616e63656420616e6420616464656420746f2074686520546f74616c49737375616e63652e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e284275726e656444656274040118616d6f756e74180128543a3a42616c616e6365000d04cc536f6d65206465627420686173206265656e2064726f707065642066726f6d2074686520546f74616c2049737375616e63652e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000e041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000f04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e74496400100460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e63650011042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650012042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500150460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500160460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001704ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e1048656c640c0118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500180480536f6d652062616c616e63652077617320706c61636564206f6e20686f6c642e284275726e656448656c640c0118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365001904a048656c642062616c616e636520776173206275726e65642066726f6d20616e206163636f756e742e385472616e736665724f6e486f6c64100118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e000118736f75726365000130543a3a4163636f756e74496400011064657374000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365001a04150141207472616e73666572206f662060616d6f756e7460206f6e20686f6c642066726f6d2060736f757263656020746f206064657374602077617320696e697469617465642e3c5472616e73666572416e64486f6c64100118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e000118736f75726365000130543a3a4163636f756e74496400011064657374000130543a3a4163636f756e74496400012c7472616e73666572726564180128543a3a42616c616e6365001b04090154686520607472616e73666572726564602062616c616e636520697320706c61636564206f6e20686f6c642061742074686520606465737460206163636f756e742e2052656c65617365640c0118726561736f6ea1010150543a3a52756e74696d65486f6c64526561736f6e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365001c0490536f6d652062616c616e6365207761732072656c65617365642066726f6d20686f6c642e28556e65787065637465640400bd010138556e65787065637465644b696e64001d04b0416e20756e65787065637465642f646566656e73697665206576656e7420776173207472696767657265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c5010c3c70616c6c65745f74785f70617573651870616c6c6574144576656e740404540001082843616c6c50617573656404012466756c6c5f6e616d65c901015052756e74696d6543616c6c4e616d654f663c543e000004b8546869732070616c6c65742c206f7220612073706563696669632063616c6c206973206e6f77207061757365642e3043616c6c556e70617573656404012466756c6c5f6e616d65c901015052756e74696d6543616c6c4e616d654f663c543e000104c0546869732070616c6c65742c206f7220612073706563696669632063616c6c206973206e6f7720756e7061757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c90100000408cd01cd0100cd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000d1010c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d5010c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000120404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7268013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7268013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c748c01384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e444966456c73654d61696e53756363657373000604644d61696e2063616c6c2077617320646973706174636865642e504966456c736546616c6c6261636b43616c6c65640401286d61696e5f6572726f7268013444697370617463684572726f72000704845468652066616c6c6261636b2063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d9010c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400011014537564696404012c7375646f5f726573756c748c01384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e00047041207375646f2063616c6c206a75737420746f6f6b20706c6163652e284b65794368616e67656408010c6f6c64bc01504f7074696f6e3c543a3a4163636f756e7449643e04b4546865206f6c64207375646f206b657920286966206f6e65207761732070726576696f75736c7920736574292e010c6e6577000130543a3a4163636f756e7449640488546865206e6577207375646f206b657920286966206f6e652077617320736574292e010478546865207375646f206b657920686173206265656e20757064617465642e284b657952656d6f76656400020480546865206b657920776173207065726d616e656e746c792072656d6f7665642e285375646f4173446f6e6504012c7375646f5f726573756c748c01384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e0304c841205b7375646f5f61735d2850616c6c65743a3a7375646f5f6173292063616c6c206a75737420746f6f6b20706c6163652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574dd010c3c70616c6c65745f74726561737572791870616c6c6574144576656e740404540001288c436f756c644e6f74446973747269627574654561726e696e6773546f426f6e644c6f741801206672616d655f696430011c4672616d6549640001207661756c745f696410011c5661756c74496400012c626f6e645f6c6f745f6964300124426f6e644c6f7449640001286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500013864697370617463685f6572726f7268013444697370617463684572726f72000004f4416e206572726f72206f63637572726564207768696c6520706179696e67206672616d65206561726e696e677320666f72206120626f6e64206c6f742ea8436f756c644e6f74446973747269627574654561726e696e6773546f4172676f6e6f74426f6e644c6f741401206672616d655f696430011c4672616d65496400012c626f6e645f6c6f745f6964300124426f6e644c6f7449640001286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500013864697370617463685f6572726f7268013444697370617463684572726f720001041901416e206572726f72206f63637572726564207768696c6520706179696e67206672616d65206561726e696e677320666f7220616e204172676f6e6f7420626f6e64206c6f742e88436f756c644e6f745472616e73666572546f547265617375727952657365727665730c01206672616d655f696430011c4672616d654964000118616d6f756e74180128543a3a42616c616e636500013864697370617463685f6572726f7268013444697370617463684572726f720002041501416e206572726f72206f63637572726564207768696c65206d6f76696e67206269642d706f6f6c2066756e647320696e746f2074726561737572792072657365727665732e604672616d654561726e696e677344697374726962757465641c01206672616d655f696430011c4672616d6549640001506269645f706f6f6c5f6469737472696275746564180128543a3a42616c616e636504390154686520746f74616c2067726f7373206269642d706f6f6c20616c6c6f636174696f6e206d61646520746f206e6f6e2d7265736572766520726563697069656e74732074686973206672616d652e01746172676f6e6f745f626f6e645f706f6f6c5f6469737472696275746564180128543a3a42616c616e63650409015468652067726f737320736c69636520616c6c6f636174656420746f204172676f6e6f7420626f6e64206c6f7473206265666f726520616e7920726566756e64732e01687661756c745f6269645f706f6f6c5f6469737472696275746564180128543a3a42616c616e63650415015468652067726f737320736c69636520616c6c6f636174656420746f207661756c7420747265617375727920706f6f6c73206265666f726520616e7920726566756e64732e014074726561737572795f726566756e6473180128543a3a42616c616e636504390154686520706f7274696f6e206f66206e6f6e2d7265736572766520616c6c6f636174696f6e732074686174207761732072657475726e656420746f2074726561737572792072657365727665732e014474726561737572795f7265736572766573180128543a3a42616c616e636504050154686520746f74616c20616d6f756e74206d6f76656420696e746f2074726561737572792072657365727665732c20696e636c7564696e6720726566756e64732e015070617274696369706174696e675f7661756c747310010c753332000304804672616d65206561726e696e677320776572652064697374726962757465642e5c4672616d655661756c744361706974616c4c6f636b65640c01206672616d655f696430011c4672616d654964000150746f74616c5f656c696769626c655f626f6e64731801107531323800015070617274696369706174696e675f7661756c747310010c753332000404c05468652063757272656e74206672616d652773207661756c74206361706974616c20776173206c6f636b656420696e2e58436f756c644e6f7452656c65617365426f6e644c6f741801206672616d655f696430011c4672616d65496400012870726f6772616d5f6964e1010134426f6e6450726f6772616d496400012c626f6e645f6c6f745f6964300124426f6e644c6f744964000118616d6f756e74180128543a3a42616c616e63650001286163636f756e745f6964000130543a3a4163636f756e74496400013864697370617463685f6572726f7268013444697370617463684572726f72000504b4416e206572726f72206f63637572726564207768696c652072656c656173696e67206120626f6e64206c6f742e40426f6e644c6f7450757263686173656410012870726f6772616d5f6964e1010134426f6e6450726f6772616d496400012c626f6e645f6c6f745f6964300124426f6e644c6f7449640001286163636f756e745f6964000130543a3a4163636f756e744964000114626f6e6473100114426f6e6473000604bc4120626f6e6420707572636861736520656e746572656420697473206163746976652070726f6772616d207365742e5c426f6e644c6f7452656c656173655363686564756c656418012870726f6772616d5f6964e1010134426f6e6450726f6772616d496400012c626f6e645f6c6f745f6964300124426f6e644c6f7449640001286163636f756e745f6964000130543a3a4163636f756e744964000114626f6e6473100114426f6e647300014072656c656173655f6672616d655f696430011c4672616d654964000118726561736f6ee5010144426f6e6452656c65617365526561736f6e00070411014120626f6e64206c6f74207761732072656d6f7665642066726f6d20667574757265206672616d657320616e64207363686564756c656420666f722072656c656173652e3c426f6e644c6f7452656c65617365641401206672616d655f696430011c4672616d65496400012870726f6772616d5f6964e1010134426f6e6450726f6772616d496400012c626f6e645f6c6f745f6964300124426f6e644c6f7449640001286163636f756e745f6964000130543a3a4163636f756e744964000114626f6e6473100114426f6e6473000804604120626f6e64206c6f74207761732072656c65617365642e74456e63756d6265726564426f6e644d6963726f676f6e734275726e65640c01286163636f756e745f6964000130543a3a4163636f756e7449640001346275726e65645f616d6f756e74180128543a3a42616c616e636500013c72656c65617365645f616d6f756e74180128543a3a42616c616e63650009084d01456e63756d6265726564207472656173757279206261636b696e6720776173206275726e656420616e6420616e79206e6f2d6c6f6e6765722d6e6565646564206672616374696f6e616c20686f6c64207761732472657475726e65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e1010c3c70616c6c65745f74726561737572791870616c6c657434426f6e6450726f6772616d4964000108145661756c740401207661756c745f6964d4011c5661756c7449640000001c4172676f6e6f7400010000e5010c3c70616c6c65745f74726561737572791870616c6c657444426f6e6452656c65617365526561736f6e00010c3c557365724c69717569646174696f6e0000001842756d7065640001002c5661756c74436c6f73656400020000e9010c4870616c6c65745f6665655f636f6e74726f6c1870616c6c6574144576656e7404045400010828466565536b69707065640401186f726967696eed0101c03c543a3a52756e74696d654f726967696e206173204f726967696e54726169743e3a3a50616c6c6574734f726967696e0000047841207472616e73616374696f6e206665652077617320736b69707065642e3046656544656c6567617465640c01186f726967696eed0101c03c543a3a52756e74696d654f726967696e206173204f726967696e54726169743e3a3a50616c6c6574734f726967696e00011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e7449640001047c41207472616e73616374696f6e20666565207761732064656c656761746564047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ed0108346172676f6e5f72756e74696d65304f726967696e43616c6c65720001041873797374656d0400f10101746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e00000000f1010c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100011010526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020028417574686f72697a656400030000f5010c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c6574144576656e74040454000120704f7065726174696f6e616c4163636f756e745265676973746572656410014c6f7065726174696f6e616c5f6163636f756e74000130543a3a4163636f756e7449640001347661756c745f6163636f756e74000130543a3a4163636f756e7449640001386d696e696e675f6163636f756e74000130543a3a4163636f756e744964000140757073747265616d5f6163636f756e74bc01504f7074696f6e3c543a3a4163636f756e7449643e000004fc416e206f7065726174696f6e616c206163636f756e74207761732072656769737465726564207769746820697473206c696e6b6564206163636f756e74732e504163636f756e744d656574734d696e696d756d7304011c6163636f756e74000130543a3a4163636f756e744964000104a84163636f756e7420686173206d65742074686520726567697374726174696f6e206d696e696d756d732e744163636f756e744f7065726174696f6e616c6c7943657274696669656404011c6163636f756e74000130543a3a4163636f756e744964000204ac4163636f756e7420686173206265636f6d65206f7065726174696f6e616c6c79206365727469666965642e5c4f7065726174696f6e616c5265776172644561726e65640c011c6163636f756e74000130543a3a4163636f756e74496400012c7265776172645f6b696e64f90101544f7065726174696f6e616c5265776172644b696e64000118616d6f756e74180128543a3a42616c616e63650003040d014120726577617264206973206561726e656420666f7220616e206f7065726174696f6e616c206163636f756e742c20627574206e6f742079657420636c61696d65642e644f7065726174696f6e616c52657761726473436c61696d656410014c6f7065726174696f6e616c5f6163636f756e74000130543a3a4163636f756e744964000120636c61696d616e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014472656d61696e696e675f70656e64696e67180128543a3a42616c616e6365000404f4436c61696d61626c65206f7065726174696f6e616c20726577617264732077657265207061696420746f2061206d616e61676564206163636f756e742e5052657761726473436f6e666967557064617465640801806f7065726174696f6e616c5f63657274696669636174696f6e5f726577617264180128543a3a42616c616e63650001986f7065726174696f6e616c5f63657274696669636174696f6e5f626f6e75735f726577617264180128543a3a42616c616e63650005048852657761726420636f6e6669672076616c756573207765726520757064617465642e644f7065726174696f6e616c50726f6772657373466f7263656424011c6163636f756e74000130543a3a4163636f756e74496400016c7570646174655f6f7065726174696f6e616c5f70726f6772657373200110626f6f6c0001386d656574735f6d696e696d756d73200110626f6f6c000184756e69737761705f6172676f6e5f7472616e73666572735f696e5f616d6f756e74180128543a3a42616c616e63650001586163636f756e745f626974636f696e5f616d6f756e74180128543a3a42616c616e63650001646163636f756e745f7661756c745f626f6e645f616d6f756e74180128543a3a42616c616e63650001347661756c745f63726561746564200110626f6f6c0001746f70657261746f725f7661756c745f626974636f696e5f616d6f756e74180128543a3a42616c616e63650001446d696e696e675f736561745f636f756e7410010c753332000604a04f7065726174696f6e616c2070726f67726573732077617320666f7263656420627920726f6f742e58456e6372797074656453657276657255706461746564080140757073747265616d5f6163636f756e74000130543a3a4163636f756e744964000148646f776e73747265616d5f6163636f756e74000130543a3a4163636f756e7449640007044901416e20757073747265616d206163636f756e7420757064617465642074686520656e6372797074656420736572766572207061796c6f616420666f72206120646f776e73747265616d206163636f756e742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f9010c406172676f6e5f7072696d6974697665732470726f766964657273544f7065726174696f6e616c5265776172644b696e640001083443657274696669636174696f6e000000744f7065726174696f6e616c43657274696669636174696f6e426f6e757300010000fd010c6070616c6c65745f657468657265756d5f76657269666965721870616c6c6574144576656e7404045400011450426561636f6e486561646572496d706f72746564080128626c6f636b5f6861736834011048323536000110736c6f7430010c75363400000074457865637574696f6e486561646572416e63686f72496d706f72746564080128626c6f636b5f68617368340148457865637574696f6e426c6f636b48617368000130626c6f636b5f6e756d626572300150457865637574696f6e426c6f636b4e756d6265720001007c457865637574696f6e486561646572416e63686f724261636b66696c6c656410012c626561636f6e5f726f6f7434011048323536000110736c6f7430010c753634000128626c6f636b5f68617368340148457865637574696f6e426c6f636b48617368000130626c6f636b5f6e756d626572300150457865637574696f6e426c6f636b4e756d6265720002005053796e63436f6d6d697474656555706461746564040118706572696f6430010c753634000300504f7065726174696e674d6f64654368616e6765640401106d6f64650102014842617369634f7065726174696e674d6f646500040444536574204f7065726174696e674d6f6465047c54686520604576656e746020656e756d206f6620746869732070616c6c657401020c6070616c6c65745f657468657265756d5f76657269666965721474797065734842617369634f7065726174696e674d6f6465000108184e6f726d616c0000001848616c7465640001000005020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574144576656e74040454000158585472616e73666572546f4172676f6e536574746c6564080130736f757263655f636861696e0902012c536f75726365436861696e0001207472616e736665720d0201685472616e73666572546f4172676f6e41637469766974793c543e0000040d014120605472616e73666572546f4172676f6e5374617274656460206163746976697479207761732070726f76656e20616e6420736574746c6564206c6f63616c6c792e6c476c6f62616c49737375616e6365436f756e63696c466f7263656408014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e000130636f756e63696c5f68617368340110483235360001042901526f6f7420666f7263652d736574207468652061637469766520476c6f62616c2049737375616e636520436f756e63696c20666f7220612064657374696e6174696f6e20636861696e2e5c436f756e63696c5369676e6572526567697374657265640c014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e0001286163636f756e745f6964000130543a3a4163636f756e7449640001187369676e657211020110483136300002040d01416e206163636f756e7420726567697374657265642069747320636f756e63696c207369676e657220666f72206f6e652064657374696e6174696f6e20636861696e2e6c436f756e63696c5369676e6572526f746174696f6e5175657565640c014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e0001286163636f756e745f6964000130543a3a4163636f756e7449640001187369676e657211020110483136300003042d01416e206163636f756e74207175657565642061207265706c6163656d656e7420636f756e63696c207369676e657220666f7220746865206e65787420636f756e63696c207570646174652e684d696e74696e67417574686f726974795265676973746572656410014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b657911020110483136300001286163636f756e745f6964000130543a3a4163636f756e744964000150617070726f76616c5f71756575655f6e6f6e6365300164436f756e63696c417070726f76616c51756575654e6f6e63650004045901416e206f70657261746f72206163636f756e7420726567697374657265642061204d696e74696e6720417574686f7269747920616e642071756575656420697420666f7220636f756e63696c20617070726f76616c2e884d696e74696e67417574686f72697479446561637469766174696f6e5175657565640c014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b65791102011048313630000150617070726f76616c5f71756575655f6e6f6e6365300164436f756e63696c417070726f76616c51756575654e6f6e63650005045901416e206f70657261746f72207175657565642074686520636f756e63696c2d617070726f76656420457468657265756d20646561637469766174696f6e20666f722061204d696e74696e6720417574686f726974792e7c4d696e696d756d4d696e74696e67417574686f7269747956616c756553657408014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e0001346d696e696d756d5f76616c7565180128543a3a42616c616e63650006084501526f6f74207570646174656420746865206d696e696d756d206e6f726d616c697a6564206d6963726f676f6e2076616c756520726571756972656420746f2072656769737465722061204d696e74696e678c417574686f72697479206f6e206f6e652064657374696e6174696f6e20636861696e2eb44d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e6753657404014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e0007085101526f6f742075706461746564207468652070726963696e6720696e70757473207573656420746f2072657061792072656c617965727320666f722061637469766174696f6e2062617463686573206f6e206f6e654864657374696e6174696f6e20636861696e2e685175657565456e747279417070726f76616c5265636f726465640c014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e0001187461726765741d02015c436f756e63696c417070726f76616c5461726765744964000150617070726f76616c5f71756575655f6e6f6e6365300164436f756e63696c417070726f76616c51756575654e6f6e636500080415014120636f756e63696c206d656d626572207265636f7264656420617070726f76616c20666f7220612071756575656420636f756e63696c2075706461746520656e7472792e5c5175657565456e747279417070726f76616c52656164790c014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e0001187461726765741d02015c436f756e63696c417070726f76616c5461726765744964000150617070726f76616c5f71756575655f6e6f6e6365300164436f756e63696c417070726f76616c51756575654e6f6e6365000904d45468652071756575656420636f756e63696c2075706461746520656e7472792072656163686564206c6f63616c2071756f72756d2e8c4d696e74696e67417574686f7269747941637469766174696f6e46696e616c697a6564080130736f757263655f636861696e0902012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b65791102011048313630000a042101412070726f76656e20457468657265756d2061637469766174696f6e2066696c6c6564207468652070656e64696e67206c6f63616c2061637469766174696f6e206669656c64732e8c4d696e74696e67417574686f7269747941637469766174696f6e436f6d706c6574656410014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b6579110201104831363000016072656c617965725f6172676f6e5f6163636f756e745f6964000130543a3a4163636f756e74496400014072657061796d656e745f616d6f756e74180128543a3a42616c616e6365000b084101412070726f76656e2061637469766174696f6e2070616964206f722072656c6561736564207468652068656c642072656c61796572207265696d62757273656d656e7420616e64206d6164652074686544617574686f7269747920757361626c652e944d696e74696e67417574686f72697479446561637469766174696f6e46696e616c697a6564080130736f757263655f636861696e0902012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b65791102011048313630000c084901412070726f76656e20457468657265756d20646561637469766174696f6e2072656c656173656420636f6c6c61746572616c20616e642072656d6f76656420746865206c6f63616c20617574686f726974791c7265636f72642e444761746577617953796e63506175736564080130736f757263655f636861696e0902012c536f75726365436861696e0001147061757365210201404761746577617953796e635061757365000d044d01476174657761792070726f6f66206170706c69636174696f6e20706175736564206f6e6520736f7572636520636861696e20617420612073706563696669632063616e6f6e6963616c2061637469766974792e3c47617465776179556e706175736564040130736f757263655f636861696e0902012c536f75726365436861696e000e04a0526f6f74206d616e75616c6c7920756e706175736564206f6e6520736f7572636520636861696e2e50476174657761795374617465416476616e636564080130736f757263655f636861696e0902012c536f75726365436861696e000134676174657761795f73746174652902013c4761746577617953746174653c543e000f042d015468652073746f72656420676174657761792d737461746520736e617073686f7420616476616e63656420616674657220612070726f76656e20636f6e746967756f75732062617463682e485472616e736665724f75745374617274656418014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e00012c7472616e736665725f6964340110483235360001286163636f756e745f6964000130543a3a4163636f756e74496400011461737365741902012441737365744b696e64000118616d6f756e74180128543a3a42616c616e63650001546d696e74696e675f617574686f726974795f746970180128543a3a42616c616e63650010046841207472616e73666572206f757420776173206f70656e65642e585472616e73666572436f6c6c61746572616c697a656410012c7472616e736665725f69643401104832353600015c64657374696e6174696f6e5f7369676e696e675f6b6579110201104831363000014c6d6963726f676f6e5f636f6c6c61746572616c180128543a3a42616c616e636500014c6d6963726f6e6f745f636f6c6c61746572616c180128543a3a42616c616e6365001104c041206d696e74696e6720617574686f726974792075706461746564207472616e7366657220636f6c6c61746572616c2e405472616e736665724f7574526561647904012c7472616e736665725f6964340110483235360012049441207472616e7366657220697320726561647920666f722066696e616c697a6174696f6e2e505472616e736665724f757446696e616c697a6564080130736f757263655f636861696e0902012c536f75726365436861696e00012c7472616e736665725f696434011048323536001304b441207472616e73666572207761732066696e616c697a6564206f6e2074686520736f7572636520636861696e2e4c5472616e736665724f757443616e63656c6564080130736f757263655f636861696e0902012c536f75726365436861696e00012c7472616e736665725f696434011048323536001404b041207472616e73666572207761732063616e63656c6564206f6e2074686520736f7572636520636861696e2e745472616e73666572436f6c6c61746572616c496e76616c69646174656408012c7472616e736665725f69643401104832353600015c64657374696e6174696f6e5f7369676e696e675f6b65791102011048313630001504c4412070656e64696e6720636f6c6c61746572616c207265736572766174696f6e2077617320696e76616c6964617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657409020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65742c536f75726365436861696e00010420457468657265756d000000000d020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65745c5472616e73666572546f4172676f6e41637469766974790404540000140158676174657761795f61637469766974795f6e6f6e63652c01504761746577617941637469766974794e6f6e636500011066726f6d110201104831363000011461737365741902012441737365744b696e64000108746f000130543a3a4163636f756e744964000118616d6f756e74c00128543a3a42616c616e636500001102083c7072696d69746976655f7479706573104831363000000400150201205b75383b2032305d0000150200000314000000080019020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65742441737365744b696e64000108144172676f6e0000001c4172676f6e6f74000100001d020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65745c436f756e63696c417070726f76616c546172676574496400010c684d696e74696e67417574686f7269747941637469766174696f6e04001102011048313630000000704d696e74696e67417574686f72697479446561637469766174696f6e0400110201104831363000010074476c6f62616c49737375616e6365436f756e63696c526f746174696f6e0400340110483235360002000021020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574404761746577617953796e63506175736500000c01806c6173745f676f6f645f676174657761795f61637469766974795f6e6f6e63652c01504761746577617941637469766974794e6f6e63650001746661696c65645f676174657761795f61637469766974795f6e6f6e63652c01504761746577617941637469766974794e6f6e6365000118726561736f6e250201584761746577617953796e635061757365526561736f6e000025020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574584761746577617953796e635061757365526561736f6e000128184d616e75616c000000604d616c666f726d656447617465776179416374697669747900010040556e737570706f72746564546f6b656e000200604d696e74696e67417574686f726974794e6f74466f756e640003007c556e65787065637465644d696e74696e67417574686f726974795374617465000400604d696e74696e67417574686f726974794d69736d61746368000500c44d697373696e674d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e67000600ac4d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e744d69736d6174636800070074476c6f62616c49737375616e6365436f756e63696c4e6f74466f756e640008004447617465776179537461746544726966740009000029020c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574304761746577617953746174650404540000100158676174657761795f61637469766974795f6e6f6e63652c01504761746577617941637469766974794e6f6e63650001546172676f6e5f617070726f76616c735f6e6f6e63652c014c4172676f6e417070726f76616c734e6f6e63650001446172676f6e5f63697263756c6174696f6e180128543a3a42616c616e636500014c6172676f6e6f745f63697263756c6174696f6e180128543a3a42616c616e636500002d0208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e000200003102000002340035020000023902003902000004081010003d0208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ed4014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d6541020144436f773c277374617469632c207374723e00004102040c436f77040454014502000400450200000045020000050200490208306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c00004d020c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b38011c5665633c75383e00000c684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e008843616e20626520657865637574656420627920657665727920606f726967696e602e387365745f686561705f7061676573040114706167657330010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646538011c5665633c75383e0002046453657420746865206e65772072756e74696d6520636f64652e5c7365745f636f64655f776974686f75745f636865636b73040110636f646538011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0051014e6f746520746861742072756e74696d652075706772616465732077696c6c206e6f742072756e20696620746869732069732063616c6c656420776974682061206e6f742d696e6372656173696e6720737065632076657273696f6e212c7365745f73746f726167650401146974656d73510201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973590201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697838010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b38011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e44617574686f72697a655f75706772616465040124636f64655f6861736834011c543a3a486173680009106101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736834011c543a3a48617368000a206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015741524e494e473a205468697320617574686f72697a657320616e207570677261646520746861742077696c6c2074616b6520706c61636520776974686f757420616e792073616665747920636865636b732c20666f7259016578616d706c652074686174207468652073706563206e616d652072656d61696e73207468652073616d6520616e642074686174207468652076657273696f6e206e756d62657220696e637265617365732e204e6f74f07265636f6d6d656e64656420666f72206e6f726d616c207573652e205573652060617574686f72697a655f757067726164656020696e73746561642e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e606170706c795f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000b24550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005901446570656e64696e67206f6e207468652072756e74696d65277320604f6e536574436f64656020636f6e66696775726174696f6e2c20746869732066756e6374696f6e206d6179206469726563746c79206170706c791101746865206e65772060636f64656020696e207468652073616d6520626c6f636b206f7220617474656d707420746f207363686564756c652074686520757067726164652e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5102000002550200550200000408383800590200000238005d020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c617373610201845065724469737061746368436c6173733c57656967687473506572436c6173733e000061020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454016502000c01186e6f726d616c650201045400012c6f7065726174696f6e616c65020104540001246d616e6461746f72796502010454000065020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e736963690201384f7074696f6e3c5765696768743e0001246d61785f746f74616c690201384f7074696f6e3c5765696768743e0001207265736572766564690201384f7074696f6e3c5765696768743e0000690204184f7074696f6e04045401280108104e6f6e6500000010536f6d6504002800000100006d020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000008010c6d6178710201545065724469737061746368436c6173733c7533323e00013c6d61785f6865616465725f73697a657502012c4f7074696f6e3c7533323e000071020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f7279100104540000750204184f7074696f6e04045401100108104e6f6e6500000010536f6d6504001000000100007902082873705f776569676874733c52756e74696d65446257656967687400000801107265616430010c753634000114777269746530010c75363400007d02082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d6541020144436f773c277374617469632c207374723e000124696d706c5f6e616d6541020144436f773c277374617469632c207374723e000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069738102011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013873797374656d5f76657273696f6e080108753800008102040c436f77040454018502000400850200000085020000028902008902000004088d0210008d0200000308000000080091020c306672616d655f73797374656d1870616c6c6574144572726f720404540001243c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e6c4d756c7469426c6f636b4d6967726174696f6e734f6e676f696e67000604550141206d756c74692d626c6f636b206d6967726174696f6e206973206f6e676f696e6720616e642070726576656e7473207468652063757272656e7420636f64652066726f6d206265696e67207265706c616365642e444e6f7468696e67417574686f72697a6564000704584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400080494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c657495020c406172676f6e5f7072696d6974697665731c6469676573747324446967657374736574084c4e6f7465626f6f6b5665726966794572726f72011901244163636f756e7449640100001c0118617574686f720001244163636f756e744964000128626c6f636b5f766f74659902013c426c6f636b566f7465446967657374000128766f74696e675f6b65799d0201744f7074696f6e3c506172656e74566f74696e674b65794469676573743e000128666f726b5f706f776572a90201444f7074696f6e3c466f726b506f7765723e0001286672616d655f696e666fbd0201444f7074696f6e3c4672616d65496e666f3e0001107469636bc50201285469636b4469676573740001246e6f7465626f6f6b73c902018c4e6f7465626f6f6b4469676573743c4e6f7465626f6f6b5665726966794572726f723e000099020c406172676f6e5f7072696d6974697665731c646967657374733c426c6f636b566f74654469676573740000080130766f74696e675f706f776572c00140426c6f636b566f74696e67506f77657200012c766f7465735f636f756e74d4010c75333200009d0204184f7074696f6e04045401a1020108104e6f6e6500000010536f6d650400a1020000010000a1020c406172676f6e5f7072696d6974697665731c6469676573747354506172656e74566f74696e674b65794469676573740000040144706172656e745f766f74696e675f6b6579a50201444f7074696f6e3c566f74696e674b65793e0000a50204184f7074696f6e04045401340108104e6f6e6500000010536f6d650400340000010000a90204184f7074696f6e04045401ad020108104e6f6e6500000010536f6d650400ad020000010000ad020c406172676f6e5f7072696d69746976657328666f726b5f706f77657224466f726b506f77657200001c013869735f6c61746573745f766f7465200110626f6f6c0001246e6f7465626f6f6b732c010c753634000130766f74696e675f706f776572b1020110553235360001347365616c5f737472656e677468b102011055323536000160746f74616c5f636f6d707574655f646966666963756c7479b10201105532353600014c766f74655f637265617465645f626c6f636b73c00110753132380001446d696e65725f6e6f6e63655f73636f7265b90201304f7074696f6e3c553235363e0000b102083c7072696d69746976655f7479706573105532353600000400b50201205b7536343b20345d0000b502000003040000003000b90204184f7074696f6e04045401b1020108104e6f6e6500000010536f6d650400b1020000010000bd0204184f7074696f6e04045401c1020108104e6f6e6500000010536f6d650400c1020000010000c1020c406172676f6e5f7072696d6974697665731c64696765737473244672616d65496e666f00000c01206672616d655f69642c011c4672616d6549640001706672616d655f7265776172645f7469636b735f72656d61696e696e67d4010c75333200013069735f6e65775f6672616d65200110626f6f6c0000c5020c406172676f6e5f7072696d697469766573107469636b285469636b446967657374000004003001105469636b0000c9020c406172676f6e5f7072696d6974697665731c64696765737473384e6f7465626f6f6b446967657374042c5665726966794572726f72011901000401246e6f7465626f6f6b73cd0201ec426f756e6465645665633c4e6f7465626f6f6b4175646974526573756c743c5665726966794572726f723e2c20436f6e73745533323c3235363e3e0000cd020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d102045300000400d90201185665633c543e0000d1020c406172676f6e5f7072696d697469766573206e6f7465626f6f6b4c4e6f7465626f6f6b4175646974526573756c74042c5665726966794572726f72011901001001246e6f746172795f6964d401204e6f74617279496400013c6e6f7465626f6f6b5f6e756d626572d401384e6f7465626f6f6b4e756d6265720001107469636b2c01105469636b00014c61756469745f66697273745f6661696c757265d502014c4f7074696f6e3c5665726966794572726f723e0000d50204184f7074696f6e0404540119010108104e6f6e6500000010536f6d65040019010000010000d902000002d10200dd020c3870616c6c65745f646967657374731870616c6c6574144572726f72040454000134604475706c6963617465426c6f636b566f74654469676573740000047c4475706c696361746520426c6f636b566f746544696765737420666f756e64544475706c6963617465417574686f72446967657374000104704475706c696361746520417574686f7244696765737420666f756e644c4475706c69636174655469636b446967657374000204684475706c6963617465205469636b44696765737420666f756e64784475706c6963617465506172656e74566f74696e674b6579446967657374000304944475706c696361746520506172656e74566f74696e674b657944696765737420666f756e645c4475706c69636174654e6f7465626f6f6b446967657374000404784475706c6963617465204e6f7465626f6f6b44696765737420666f756e64604475706c6963617465466f726b506f7765724469676573740005047c4475706c696361746520466f726b506f77657244696765737420666f756e64584d697373696e67426c6f636b566f74654469676573740006045c4d697373696e6720426c6f636b566f74654469676573744c4d697373696e67417574686f72446967657374000704504d697373696e6720417574686f72446967657374444d697373696e675469636b446967657374000804484d697373696e67205469636b446967657374704d697373696e67506172656e74566f74696e674b6579446967657374000904744d697373696e6720506172656e74566f74696e674b6579446967657374544d697373696e674e6f7465626f6f6b446967657374000a04584d697373696e67204e6f7465626f6f6b44696765737450436f756c644e6f744465636f6465446967657374000b04604661696c656420746f206465636f64652064696765737473604475706c69636174654672616d65496e666f446967657374000c04644475706c6963617465204672616d65496e666f20666f756e64048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee1020c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400004c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e7420737065636966696564206279685b60436f6e6669673a3a4d696e696d756d506572696f64605d2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e0051015468697320646973706174636820636c617373206973205f4d616e6461746f72795f20746f20656e73757265206974206765747320657865637574656420696e2074686520626c6f636b2e204265206177617265510174686174206368616e67696e672074686520636f6d706c6578697479206f6620746869732063616c6c20636f756c6420726573756c742065786861757374696e6720746865207265736f757263657320696e206184626c6f636b20746f206578656375746520616e79206f746865722063616c6c732e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602955012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f283129602062656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee50200000408000400e902083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656e88015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c73ed02018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e0000ed020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400f10201185665633c543e0000f1020000020000f5020c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001145061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573f10201445665633c543a3a4163636f756e7449643e00011063616c6cf902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c649c010c7531360001446f746865725f7369676e61746f72696573f10201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74390501904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6cf902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f7765696768742801185765696768740001a85501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e003d012a2a49662074686520617070726f76616c207468726573686f6c64206973206d65742028696e636c7564696e67207468652073656e646572277320617070726f76616c292c20746869732077696c6c4501696d6d6564696174656c792065786563757465207468652063616c6c2e2a2a205468697320697320746865206f6e6c792077617920746f20657865637574652061206d756c74697369672063616c6c202dc060617070726f76655f61735f6d756c7469602077696c6c206e65766572207472696767657220657865637574696f6e2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e004d014e4f54453a20466f7220696e7465726d65646961746520617070726f76616c7320286e6f74207468652066696e616c20617070726f76616c292c20796f752073686f756c642067656e6572616c6c7920757365450160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c20616e64206973206d6f726528656666696369656e742e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c649c010c7531360001446f746865725f7369676e61746f72696573f10201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74390501904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742801185765696768740002985501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e0039012a2a546869732066756e6374696f6e2077696c6c204e455645522065786563757465207468652063616c6c2c206576656e2069662074686520617070726f76616c207468726573686f6c642069735101726561636865642e2a2a204974206f6e6c792072656769737465727320617070726f76616c2e20546f2061637475616c6c792065786563757465207468652063616c6c2c206061735f6d756c746960206d757374f062652063616c6c65642077697468207468652066756c6c2063616c6c206461746120627920616e79206f6620746865207369676e61746f726965732e004d01546869732066756e6374696f6e206973206d6f726520656666696369656e74207468616e206061735f6d756c74696020666f7220696e7465726d65646961746520617070726f76616c732073696e6365206974d06f6e6c79207265717569726573207468652063616c6c20686173682c206e6f74207468652066756c6c2063616c6c20646174612e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e003d014e4f54453a20546f2065786563757465207468652063616c6c20616674657220617070726f76616c73206172652067617468657265642c20616e79207369676e61746f7279206d7573742063616c6c29016061735f6d756c7469602077697468207468652066756c6c2063616c6c20646174612e20546869732066756e6374696f6e2063616e6e6f742065786563757465207468652063616c6c2e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c649c010c7531360001446f746865725f7369676e61746f72696573f10201445665633c543a3a4163636f756e7449643e00012474696d65706f696e7488017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e30706f6b655f6465706f7369740c01247468726573686f6c649c010c7531360001446f746865725f7369676e61746f72696573f10201445665633c543a3a4163636f756e7449643e00012463616c6c5f686173680401205b75383b2033325d000434f4506f6b6520746865206465706f73697420726573657276656420666f7220616e206578697374696e67206d756c7469736967206f7065726174696f6e2e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d75737420626520746865206f726967696e616c206465706f7369746f72206f665c746865206d756c7469736967206f7065726174696f6e2e000101546865207472616e73616374696f6e206665652069732077616976656420696620746865206465706f73697420616d6f756e7420686173206368616e6765642e0019012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c73206e656564656420666f722074686973206d756c74697369672e3d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f66207468652c20206d756c74697369672e05012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c2074686973206465706f73697420697320726573657276656420666f722e008c456d69747320604465706f736974506f6b656460206966207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef90208346172676f6e5f72756e74696d652c52756e74696d6543616c6c0001701853797374656d04004d0201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400e10201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e000200204d756c74697369670400f50201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e0003001450726f78790400fd0201a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e000400145469636b7304000d0301a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5469636b732c2052756e74696d653e000500284d696e696e67536c6f740400110301bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d696e696e67536c6f742c2052756e74696d653e00060030426974636f696e5574786f730400150301c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426974636f696e5574786f732c2052756e74696d653e000700185661756c74730400350301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5661756c74732c2052756e74696d653e00080030426974636f696e4c6f636b7304005d0301c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426974636f696e4c6f636b732c2052756e74696d653e000900204e6f7461726965730400790301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6f7461726965732c2052756e74696d653e000a00204e6f7465626f6f6b04007d0301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6f7465626f6f6b2c2052756e74696d653e000b00484c6f63616c636861696e5472616e736665720400bd0301dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4c6f63616c636861696e5472616e736665722c2052756e74696d653e000c0034426c6f636b5365616c537065630400c10301c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426c6f636b5365616c537065632c2052756e74696d653e000d001c446f6d61696e730400c50301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446f6d61696e732c2052756e74696d653e000e00285072696365496e6465780400c90301bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5072696365496e6465782c2052756e74696d653e000f001c4772616e6470610400d10301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e00110024426c6f636b5365616c0400fd0301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426c6f636b5365616c2c2052756e74696d653e00120030426c6f636b526577617264730400190401c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426c6f636b526577617264732c2052756e74696d653e001300104d696e7404001d0401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d696e742c2052756e74696d653e0014002042616c616e6365730400210401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e001500244f776e6572736869700400290401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f776e6572736869702c2052756e74696d653e0016001c5478506175736504002d0401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c547850617573652c2052756e74696d653e0017001c5574696c6974790400310401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e001900105375646f0400390401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e001a0020547265617375727904003d0401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e001f004c4f7065726174696f6e616c4163636f756e74730400490401e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f7065726174696f6e616c4163636f756e74732c2052756e74696d653e00220040457468657265756d566572696669657204006d0401d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c457468657265756d56657269666965722c2052756e74696d653e0023004843726f7373636861696e5472616e736665720400c50401dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43726f7373636861696e5472616e736665722c2052756e74696d653e00240000fd020c3070616c6c65745f70726f78791870616c6c65741043616c6c04045400012c1470726f78790c01107265616c010301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065090301504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cf902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465010301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e0001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465010301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e005d015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e7473206372656174656420627920606372656174655f70757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e000114696e6465789c010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572010301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065980130543a3a50726f787954797065000114696e6465789c010c753136000118686569676874d40144426c6f636b4e756d626572466f723c543e0001246578745f696e646578d4010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746fb0606372656174655f7075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0055012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c656420606372656174655f707572656020746f206372656174652074686973206163636f756e742e55012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f20606372656174655f70757265602e2050726f6261626c79206030602e09012d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f20606372656174655f70757265602e45012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20606372656174655f7075726560207761732070726f6365737365642e51012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20606372656174655f7075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265f86163636f756e742077686f736520606372656174655f70757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616c010301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c010301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465010301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465010301504163636f756e7449644c6f6f6b75704f663c543e0001107265616c010301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065090301504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cf902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e30706f6b655f6465706f736974000a204901506f6b65202f2041646a757374206465706f73697473206d61646520666f722070726f7869657320616e6420616e6e6f756e63656d656e7473206261736564206f6e2063757272656e742076616c7565732e0d01546869732063616e2062652075736564206279206163636f756e747320746f20706f737369626c79206c6f776572207468656972206c6f636b656420616d6f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e000101546865207472616e73616374696f6e206665652069732077616976656420696620746865206465706f73697420616d6f756e7420686173206368616e6765642e008c456d69747320604465706f736974506f6b656460206966207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e01030c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780190011408496404000001244163636f756e74496400000014496e6465780400050301304163636f756e74496e6465780001000c526177040038011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400150201205b75383b2032305d0004000005030000069000090304184f7074696f6e04045401980108104e6f6e6500000010536f6d6504009800000100000d030c3070616c6c65745f7469636b731870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e11030c4870616c6c65745f6d696e696e675f736c6f741870616c6c65741043616c6c0404540001080c6269640c010c626964180128543a3a42616c616e63650001106b657973b0011c543a3a4b6579730001446d696e696e675f6163636f756e745f6964bc01504f7074696f6e3c543a3a4163636f756e7449643e00005861015375626d697420612062696420666f722061206d696e696e6720736c6f7420696e20746865206e65787420636f686f72742e204f6e636520616c6c2073706f7473206172652066696c6c656420696e20746865206e657874f4636f686f72742c2061206269646465722063616e20626520737570706c616e74656420627920737570706c79696e67206120686967686572206269642e00b84561636820736c6f742068617320604d6178436f686f727453697a65602073706f747320617661696c61626c652e005101546f20626520656c696769626c6520666f72206120736c6f742c20796f75206d757374206861766520746865207265717569726564206f776e65727368697020746f6b656e7320286172676f6e6f74732920696e590174686973206163636f756e742e2054686520726571756972656420616d6f756e742069732063616c63756c6174656420617320612070657263656e74616765206f662074686520746f74616c206f776e6572736869705501746f6b656e7320696e20746865206e6574776f726b2e20546869732070657263656e746167652069732061646a7573746564206265666f72652074686520626567696e6e696e67206f66206561636820736c6f742e004501496620796f757220626964206973206e6f206c6f6e6765722077696e6e696e672c20612060536c6f7442696464657244726f7070656460206576656e742077696c6c20626520656d69747465642e2042792d016d6f6e69746f72696e6720666f722074686973206576656e742c20796f752077696c6c2062652061626c6520746f20656e7375726520796f7572206269642069732061636365707465642e000d014e4f54453a2062696464696e6720666f72206561636820736c6f742077696c6c20626520636c6f73656420617420612072616e646f6d20626c6f636b2077697468696e3d01606d696e696e675f636f6e6669672e7469636b735f6265666f72655f6269645f656e645f666f725f7672665f636c6f73656020626c6f636b73206f662074686520736c6f7420656e642074696d652e00610154686520736c6f74206475726174696f6e2063616e2062652063616c63756c617465642061732060426c6f636b734265747765656e536c6f7473202a204d61784d696e657273202f204d6178436f686f727453697a65602e002c506172616d65746572733a902d2060626964603a2054686520616d6f756e74206f66206172676f6e7320746f206269644d012d20606b657973603a205468652073657373696f6e2022686f7422206b65797320666f722074686520736c6f742028426c6f636b5365616c417574686f72697479496420616e64204772616e6470614964292e59012d20606d696e696e675f6163636f756e745f6964603a2054686973206163636f756e745f696420616c6c6f777320796f7520746f206f7065726174652061732074686973206d696e6572206163636f756e742069642c01012020627574207573652066756e64696e6720286172676f6e6f747320616e6420626964292066726f6d20746865207375626d697474696e67206163636f756e746c636f6e6669677572655f6d696e696e675f736c6f745f64656c61790801446d696e696e675f736c6f745f64656c61798d0101304f7074696f6e3c5469636b3e0001887469636b735f6265666f72655f6269645f656e645f666f725f7672665f636c6f73658d0101304f7074696f6e3c5469636b3e000104bc41646d696e2066756e6374696f6e20746f2075706461746520746865206d696e696e6720736c6f742064656c61792e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15030c5070616c6c65745f626974636f696e5f7574786f731870616c6c65741043616c6c0404540001141073796e630401247574786f5f73796e631903013c426974636f696e5574786f53796e63000004e85375626d6974746564207768656e206120626974636f696e205554584f20686173206265656e206d6f766564206f7220636f6e6669726d65642e4c7365745f636f6e6669726d65645f626c6f636b080138626974636f696e5f686569676874300134426974636f696e486569676874000148626974636f696e5f626c6f636b5f68617368d00140426974636f696e426c6f636b4861736800011449015365747320746865206d6f737420726563656e7420636f6e6669726d656420626974636f696e20626c6f636b2068656967687420286f6e6c792065786563757461626c6520627920746865204f7261636c65444f70657261746f72206163636f756e7429002c2320417267756d656e747311012a2060626974636f696e5f68656967687460202d20746865206c617465737420626974636f696e20626c6f636b2068656967687420746f20626520636f6e6669726d6564307365745f6f70657261746f720401286163636f756e745f6964000130543a3a4163636f756e74496400021025015365747320746865206f7261636c65206f70657261746f72206163636f756e7420696420286f6e6c792065786563757461626c652062792074686520526f6f74206163636f756e7429002c2320417267756d656e7473bc2a20606163636f756e745f696460202d20746865206163636f756e74206964206f6620746865206f70657261746f726066756e645f776974685f7574786f5f63616e64696461746508011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f52656600030cec42696e6420612063616e646964617465205554584f20726566206173207468652066756e64696e67205554584f20666f7220697473206c6f636b2e3d01546865206c6f636b732070616c6c657420617574686f72697a6573207468652070726f6d6f74696f6e3b20746869732070616c6c65742062696e6473207468652072656620616e6420626567696e7324747261636b696e672e5472656a6563745f7574786f5f63616e64696461746508011c7574786f5f69643001185574786f49640001207574786f5f726566cc011c5574786f526566000408450152656a65637420612070656e64696e672063616e646964617465205554584f20616e64206d6174657269616c697a6520697420617320616e206f727068616e207468726f75676820746865206c6f636b731c70616c6c65742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e19030c406172676f6e5f7072696d69746976657324696e686572656e74733c426974636f696e5574786f53796e6300000c01147370656e741d0301545665633c426974636f696e5574786f5370656e643e00011866756e6465642903015c5665633c426974636f696e5574786f46756e64696e673e00013473796e635f746f5f626c6f636b31030130426974636f696e426c6f636b00001d0300000221030021030c406172676f6e5f7072696d69746976657324696e686572656e747340426974636f696e5574786f5370656e6400000c011c7574786f5f69642c01185574786f49640001207574786f5f7265662503013c4f7074696f6e3c5574786f5265663e000138626974636f696e5f6865696768742c0134426974636f696e4865696768740000250304184f7074696f6e04045401cc0108104e6f6e6500000010536f6d650400cc000001000029030000022d03002d030c406172676f6e5f7072696d69746976657324696e686572656e747348426974636f696e5574786f46756e64696e67000014011c7574786f5f69642c01185574786f49640001207574786f5f726566cc011c5574786f5265660001207361746f736869732c01205361746f7368697300014465787065637465645f7361746f736869732c01205361746f73686973000138626974636f696e5f6865696768742c0134426974636f696e486569676874000031030c406172676f6e5f7072696d6974697665731c626974636f696e30426974636f696e426c6f636b0000080130626c6f636b5f6865696768742c0134426974636f696e486569676874000128626c6f636b5f68617368d00140426974636f696e426c6f636b48617368000035030c3470616c6c65745f7661756c74731870616c6c65741043616c6c040454000124186372656174650401307661756c745f636f6e666967390301945661756c74436f6e6669673c543a3a4163636f756e7449642c20543a3a42616c616e63653e000000386d6f646966795f66756e64696e670c01207661756c745f696410011c5661756c74496400013873656375726974697a6174696f6e180128543a3a42616c616e636500015073656375726974697a6174696f6e5f726174696fe0012446697865645531323800012061014d6f646966792066756e647320616c6c6f636174656420627920746865207661756c742e20546869732077696c6c206e6f74206166666563742069737375656420626974636f696e206c6f636b732c206275742077696c6cc86166666563742074686520616d6f756e74206f662066756e647320617661696c61626c6520666f72206e6577206f6e65732e00ec5468652073656375726974697a6174696f6e2070657263656e74206d757374206265206d61696e7461696e6564206f7220696e637265617365642e00610154686520616d6f756e7420616c6c6f6361746564206d6179206e6f7420676f2062656c6f7720746865206578697374696e6720726573657276656420616d6f756e74732c2062757420796f752063616e2072656c656173654d0166756e647320696e2074686973207661756c7420617320626974636f696e206c6f636b73206172652072656c65617365642e20546f2073746f702069737375696e6720616e79206d6f726520626974636f696e6c6c6f636b732c20757365207468652060636c6f736560206170692e306d6f646966795f7465726d730801207661756c745f696410011c5661756c7449640001147465726d733d0301585661756c745465726d733c543a3a42616c616e63653e0002084d014368616e676520746865207465726d73206f662074686973207661756c742e20546865206368616e67652077696c6c206265206170706c69656420617420746865206e657874206d696e696e67206672616d6515016368616e67652074686174206973206174206c6561737420604d696e5465726d734d6f64696669636174696f6e426c6f636b44656c61796020626c6f636b7320617761792e14636c6f73650401207661756c745f696410011c5661756c744964000308410153746f70206f66666572696e67206164646974696f6e616c20626974636f696e206c6f636b732066726f6d2074686973207661756c742e2057696c6c206e6f7420616666656374206578697374696e671d016c6f636b732e2041732066756e6473206172652072657475726e65642c20746865792077696c6c2062652072656c656173656420746f20746865207661756c74206f776e65722e507265706c6163655f626974636f696e5f787075620801207661756c745f696410011c5661756c744964000130626974636f696e5f78707562550301444f7061717565426974636f696e5870756200040c61015265706c6163652074686520626974636f696e20787075626b657920666f722074686973207661756c742e20546869732077696c6c206e6f7420616666656374206578697374696e6720626974636f696e206c6f636b732c31016275742077696c6c206265207573656420666f7220616e79206c6f636b73206166746572207468697320706f696e742e2057696c6c2062652072656a656374656420696620616c726561647914757365642e1c636f6c6c6563740401207661756c745f696410011c5661756c744964000500507365745f64656c65676174655f6163636f756e7404014c64656c65676174655f6163636f756e745f6964bc01504f7074696f6e3c543a3a4163636f756e7449643e000600207365745f6e616d650401106e616d654d0301444f7074696f6e3c5661756c744e616d653e000700587365745f636f6d6d69747465645f6172676f6e6f7473040118616d6f756e74c00128543a3a42616c616e6365000800040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e39030c3470616c6c65745f7661756c74731870616c6c65742c5661756c74436f6e66696708244163636f756e74496401001c42616c616e63650118001801147465726d733d03014c5661756c745465726d733c42616c616e63653e0001106e616d654d0301444f7074696f6e3c5661756c744e616d653e00014c64656c65676174655f6163636f756e745f6964bc01444f7074696f6e3c4163636f756e7449643e00013873656375726974697a6174696f6ec0011c42616c616e636500013c626974636f696e5f787075626b6579550301444f7061717565426974636f696e5870756200015073656375726974697a6174696f6e5f726174696f4103012446697865645531323800003d030c406172676f6e5f7072696d697469766573147661756c74285661756c745465726d73041c42616c616e636501180010016c626974636f696e5f616e6e75616c5f70657263656e745f7261746541030124466978656455313238000140626974636f696e5f626173655f666565c0011c42616c616e636500015c74726561737572795f70726f6669745f73686172696e674503011c5065726d696c6c00017474726561737572795f626f6e75735f70726f6669745f73686172696e674503011c5065726d696c6c00004103000006e000450300000649030049030c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c75333200004d0304184f7074696f6e0404540151030108104e6f6e6500000010536f6d6504005103000001000051030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000055030c406172676f6e5f7072696d6974697665731c626974636f696e444f7061717565426974636f696e5870756200000400590301205b75383b2037385d000059030000034e00000008005d030c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c65741043616c6c04045400012428696e697469616c697a651001207661756c745f696410011c5661756c7449640001207361746f736869732c01205361746f73686973000138626974636f696e5f7075626b65796103015c436f6d70726573736564426974636f696e5075626b657900011c6f7074696f6e73690301584f7074696f6e3c4c6f636b4f7074696f6e733c543e3e0000205901496e697469616c697a65206120626974636f696e206c6f636b2e20546869732077696c6c206372656174652061204c6f636b6564426974636f696e20666f7220746865207375626d697474696e67206163636f756e74a8616e64206c6f672074686520426974636f696e20536372697074206861736820746f204576656e74732e005d01546865207075626b6579207375626d697474656420686572652077696c6c206265207573656420746f20637265617465206120736372697074207075626b657920746861742077696c6c206265207573656420696e2061b474696d656c6f636b206d756c74697369672073637269707420746f206c6f636b2074686520626974636f696e2e0039014e4f54453a204120226c6f636b2d657222206d7573742073656e642062746320746f2074686520636f7369676e6572205554584f206164647265737320746f2022636f6d706c6574652220746865d04c6f636b6564426974636f696e20616e6420626520616464656420746f2074686520426974636f696e204d696e74206c696e652e3c726571756573745f72656c656173650c011c7574786f5f69643001185574786f4964000140746f5f7363726970745f7075626b65797103014c426974636f696e5363726970745075626b657900014c626974636f696e5f6e6574776f726b5f6665653001205361746f7368697300011851015375626d6974746564206279206120426974636f696e20686f6c64657220746f2074726967676572207468652072656c65617365206f66207468656972205574786f206f7574206f662074686520636f7369676e45017363726970742e2041207472616e73616374696f6e207370656e64696e6720746865205554584f2073686f756c64206265207072652d6372656174656420736f20746861742074686520736967686173683d0163616e206265207375626d697474656420686572652e20546865207661756c74206f70657261746f722077696c6c2068617665203130206461797320746f20636f756e7465722d7369676e2074686555017472616e73616374696f6e2e2049742077696c6c206265207075626c6973686564207769746820746865207075626c6963206b6579206173206120426974636f696e5574786f436f7369676e6564204576656e742e003d014f776e6572206d757374207375626d6974206120736372697074207075626b657920616e6420616c736f20612066656520746f2070617920746f2074686520626974636f696e206e6574776f726b2e38636f7369676e5f72656c6561736508011c7574786f5f69643001185574786f49640001247369676e6174757265e80140426974636f696e5369676e617475726500021461015375626d69747465642062792061205661756c74206f70657261746f7220746f20636f7369676e207468652072656c65617365206f66206120626974636f696e207574786f2e2054686520426974636f696e206f776e6572550172656c65617365206665652077696c6c206265206275726e65642c20616e6420746865206c6f636b2077696c6c20626520616c6c6f77656420746f2065787069726520776974686f757420612070656e616c74792e004d0154686973206973207375626d69747465642061732061206e6f2d666565207472616e73616374696f6e206f666620636861696e20746f20616c6c6f77206b65797320746f2072656d61696e20696e20636f6c642077616c6c6574732e1c7261746368657408011c7574786f5f69643001185574786f496400011c6f7074696f6e73690301584f7074696f6e3c4c6f636b4f7074696f6e733c543e3e000338410152617463686574696e6720616c6c6f77732061207573657220746f206368616e676520746865206c6f636b207072696365206f6620746865697220626974636f696e206c6f636b2e2054686973206973510166756e6374696f6e616c6c79207468652073616d652061732072656c656173696e6720616e642072652d696e697469616c697a696e672c2062757420697420616c6c6f77732061207573657220746f20736b6970610173656e64696e67207472616e73616374696f6e73207468726f75676820626974636f696e20616e6420616e79206173736f63696174656420666565732e20497420616c736f20616c6c6f777320796f7520746f20737461794d016f6e20796f7572206f726967696e616c206c6f636b2065787069726174696f6e20776974686f757420686176696e6720746f20706179207468652066756c6c2079656172206f66206665657320616761696e2e00610152617463686574696e672022646f776e22202d207768656e20746865207072696365206f6620626974636f696e206973206c6f776572207468616e20796f7572206c6f636b2070726963652c20796f7520706179207468655d0166756c6c2072656c6561736520707269636520616e6420676574206164646564206261636b20746f20746865206d696e74207175657565206174207468652063757272656e74206d61726b657420726174652e20596f755901706f636b65742074686520646966666572656e6365206265747765656e2074686520616c7265616479206d696e74656420226c6f636b2070726963652220616e6420746865206e6577206d61726b65742076616c7565550128776869636820796f75206a75737420686164206275726e6564292e20596f7572206e6577206c6f636b2070726963652069732073657420746f20746865206d61726b6574206c6f772c20736f20796f752063616eb874616b6520616476616e74616765206f66207261746368657473202275702220696e20746865206675747572652e00550152617463686574696e672022757022202d207768656e20746865207072696365206f6620626974636f696e20697320686967686572207468616e20796f7572206c6f636b2070726963652c20796f75207061792061610170726f72617465642066656520666f72207468652072656d61696e646572206f6620796f7572206578697374696e67206c6f636b206475726174696f6e2e20596f752061726520616464656420746f20746865206d696e742d01717565756520666f722074686520646966666572656e636520696e20796f7572206e6577206c6f636b207072696365207673207468652070726576696f7573206c6f636b2070726963652e8061646d696e5f6d6f646966795f6d696e696d756d5f6c6f636b65645f736174730401207361746f736869733001205361746f7368697300040074726571756573745f6f727068616e65645f7574786f5f72656c656173650c01207574786f5f726566cc011c5574786f526566000140746f5f7363726970745f7075626b65797103014c426974636f696e5363726970745075626b657900014c626974636f696e5f6e6574776f726b5f6665653001205361746f7368697300050070636f7369676e5f6f727068616e65645f7574786f5f72656c656173650c01306f727068616e5f6f776e6572000130543a3a4163636f756e7449640001207574786f5f726566cc011c5574786f5265660001247369676e6174757265e80140426974636f696e5369676e617475726500061c41014e4f54453a2054686520607369676e61747572656020706172616d65746572206973204e4f54207665726966696564206f6e2d636861696e2e20546865206f727068616e207265636f726420646f657339016e6f742072657461696e2074686520636f7369676e207363726970742061726773206e656564656420666f7220766572696669636174696f6e2028746865792061726520636c65616e6564207570f4776974682074686520426974636f696e4c6f636b292e20546865207369676e617475726520697320706173736564207468726f75676820746f207468654101604f727068616e65645574786f436f7369676e656460206576656e7420736f20746865206c6f636b206f776e65722063616e20636f6e7374727563742074686520426974636f696e2072656c6561736535017472616e73616374696f6e206f66662d636861696e2e20412067617262616765207369676e6174757265206d65616e7320746865206f776e65722063616e2774207370656e6420e28094206e6f41016f6e2d636861696e2064616d6167652e20546f20616464206f6e2d636861696e20766572696669636174696f6e2c2074686520636f7369676e20736372697074206172677320776f756c64206e656564f0746f2062652073746f72656420696e20604f727068616e65645574786f60202873746f72616765206d6967726174696f6e207265717569726564292e38696e697469616c697a655f666f721401286163636f756e745f6964000130543a3a4163636f756e7449640001207661756c745f696410011c5661756c7449640001207361746f736869732c01205361746f73686973000138626974636f696e5f7075626b65796103015c436f6d70726573736564426974636f696e5075626b657900011c6f7074696f6e73690301584f7074696f6e3c4c6f636b4f7074696f6e733c543e3e0008005c696e6372656173655f73656375726974697a6174696f6e08011c7574786f5f69643001185574786f49640001306e65775f7361746f736869732c01205361746f73686973000900040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e61030c406172676f6e5f7072696d6974697665731c626974636f696e5c436f6d70726573736564426974636f696e5075626b657900000400650301205b75383b2033335d00006503000003210000000800690304184f7074696f6e040454016d030108104e6f6e6500000010536f6d6504006d0300000100006d030c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c65742c4c6f636b4f7074696f6e7304045400010408563104016c6d6963726f676f6e735f61745f7461726765745f7065725f627463850101484f7074696f6e3c543a3a42616c616e63653e0000000071030c406172676f6e5f7072696d6974697665731c626974636f696e4c426974636f696e5363726970745075626b65790000040075030170426f756e6465645665633c75382c20436f6e73745533323c33343e3e000075030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000079030c3c70616c6c65745f6e6f7461726965731870616c6c65741043616c6c04045400010c1c70726f706f73650401106d657461f4013c4e6f746172794d6574614f663c543e0000002061637469766174650401406f70657261746f725f6163636f756e74000130543a3a4163636f756e744964000100187570646174650c01246e6f746172795f6964d401204e6f7461727949640001106d657461f4013c4e6f746172794d6574614f663c543e0001386566666563746976655f7469636b2c01105469636b000208610155706461746520746865206d65746164617461206f662061206e6f746172792c20746f206265206566666563746976652061742074686520676976656e207469636b206865696768742c207768696368206d757374206265b03e3d204d6574614368616e6765735469636b44656c6179207469636b7320696e20746865206675747572652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e7d030c3c70616c6c65745f6e6f7465626f6f6b1870616c6c65741043616c6c040454000108187375626d69740401246e6f7465626f6f6b73810301645665633c5369676e65644e6f7465626f6f6b4865616465723e00000018756e6c6f636b0401246e6f746172795f69641001204e6f746172794964000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e810300000285030085030c406172676f6e5f7072696d697469766573206e6f7465626f6f6b505369676e65644e6f7465626f6f6b4865616465720000080118686561646572890301384e6f7465626f6f6b4865616465720001247369676e6174757265b903013c4e6f746172795369676e6174757265000089030c406172676f6e5f7072696d697469766573206e6f7465626f6f6b384e6f7465626f6f6b48656164657200003c011c76657273696f6e8d03010c75313600013c6e6f7465626f6f6b5f6e756d626572d401384e6f7465626f6f6b4e756d6265720001107469636b2c01105469636b00010c746178c00110753132380001246e6f746172795f6964d401204e6f74617279496400013c636861696e5f7472616e7366657273910301bc426f756e6465645665633c436861696e5472616e736665722c204d61784e6f7465626f6f6b5472616e73666572733e0001546368616e6765645f6163636f756e74735f726f6f743401104832353600015c6368616e6765645f6163636f756e745f6f726967696e739d0301c4426f756e6465645665633c4163636f756e744f726967696e2c20436f6e73745533323c7b207533323a3a4d4158207d3e3e000140626c6f636b5f766f7465735f726f6f7434011048323536000144626c6f636b5f766f7465735f636f756e74d4010c753332000144626c6f636b735f776974685f766f746573a9030180426f756e6465645665633c483235362c20436f6e73745533323c313030303e3e000148626c6f636b5f766f74696e675f706f776572c00140426c6f636b566f74696e67506f77657200012c7365637265745f686173683401484e6f7465626f6f6b53656372657448617368000134706172656e745f736563726574a50201584f7074696f6e3c4e6f7465626f6f6b5365637265743e00011c646f6d61696e73ad0301e8426f756e6465645665633c28446f6d61696e486173682c204163636f756e744964292c204d6178446f6d61696e735065724e6f7465626f6f6b3e00008d030000069c0091030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019503045300000400990301185665633c543e000095030c406172676f6e5f7072696d697469766573206e6f7465626f6f6b34436861696e5472616e736665720001082c546f4d61696e636861696e0801286163636f756e745f69640001244163636f756e744964000118616d6f756e74c001107531323800000030546f4c6f63616c636861696e04012c7472616e736665725f6964d401585472616e73666572546f4c6f63616c636861696e49640001000099030000029503009d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a103045300000400a50301185665633c543e0000a1030c406172676f6e5f7072696d6974697665733862616c616e63655f6368616e6765344163636f756e744f726967696e000008013c6e6f7465626f6f6b5f6e756d626572d401384e6f7465626f6f6b4e756d62657200012c6163636f756e745f756964d401404163636f756e744f726967696e5569640000a503000002a10300a9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400310201185665633c543e0000ad030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b103045300000400b50301185665633c543e0000b10300000408340000b503000002b10300b903000003400000000800bd030c6870616c6c65745f6c6f63616c636861696e5f7472616e736665721870616c6c65741043616c6c0404540001044873656e645f746f5f6c6f63616c636861696e080118616d6f756e74c001583c5420617320436f6e6669673e3a3a42616c616e63650001246e6f746172795f69641001204e6f746172794964000000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec1030c5870616c6c65745f626c6f636b5f7365616c5f737065631870616c6c65741043616c6c04045400010424636f6e666967757265080130766f74655f6d696e696d756d8501014c4f7074696f6e3c566f74654d696e696d756d3e000148636f6d707574655f646966666963756c7479850101304f7074696f6e3c753132383e000000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec5030c3870616c6c65745f646f6d61696e731870616c6c65741043616c6c0404540001043c7365745f7a6f6e655f7265636f726408012c646f6d61696e5f68617368340128446f6d61696e4861736800012c7a6f6e655f7265636f72643d0101605a6f6e655265636f72643c543a3a4163636f756e7449643e000000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec9030c4870616c6c65745f70726963655f696e6465781870616c6c65741043616c6c040454000108187375626d6974040114696e646578cd0301285072696365496e64657800000435015375626d697420746865206c617465737420707269636520696e6465782e204f6e6c792076616c696420666f722074686520636f6e66696775726564206f70657261746f72206163636f756e74307365745f6f70657261746f720401286163636f756e745f6964000130543a3a4163636f756e74496400011009015365747320746865206f70657261746f72206163636f756e7420696420286f6e6c792065786563757461626c652062792074686520526f6f74206163636f756e7429002c2320417267756d656e7473bc2a20606163636f756e745f696460202d20746865206163636f756e74206964206f6620746865206f70657261746f72040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd03084870616c6c65745f70726963655f696e646578285072696365496e64657800001801346274635f7573645f7072696365410301244669786564553132380001446172676f6e6f745f7573645f7072696365e0012446697865645531323800013c6172676f6e5f7573645f7072696365410301244669786564553132380001586172676f6e5f7573645f7461726765745f7072696365e001244669786564553132380001946172676f6e5f74696d655f77656967687465645f617665726167655f6c697175696469747918011c42616c616e63650001107469636b2c01105469636b0000d1030c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66d50301c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f66f9030140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66d50301c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f66f9030140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100144426c6f636b4e756d626572466f723c543e00016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e0002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed503085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f660804480134044e0110000801187365745f6964300114536574496400013065717569766f636174696f6ed903014845717569766f636174696f6e3c482c204e3e0000d903085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e0804480134044e011001081c507265766f74650400dd0301890166696e616c6974795f6772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c2066696e616c6974795f6772616e6470613a3a507265766f74653c0a482c204e3e2c20417574686f726974795369676e61747572652c3e00000024507265636f6d6d69740400ed0301910166696e616c6974795f6772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c2066696e616c6974795f6772616e6470613a3a507265636f6d6d69740a3c482c204e3e2c20417574686f726974795369676e61747572652c3e00010000dd03084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401b4045601e103045301e50300100130726f756e645f6e756d62657230010c7536340001206964656e74697479b4010849640001146669727374e903011828562c2053290001187365636f6e64e903011828562c2053290000e103084066696e616c6974795f6772616e6470611c507265766f74650804480134044e01100008012c7461726765745f68617368340104480001347461726765745f6e756d6265721001044e0000e5030c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e617475726500000400b9030148656432353531393a3a5369676e61747572650000e90300000408e103e50300ed03084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401b4045601f103045301e50300100130726f756e645f6e756d62657230010c7536340001206964656e74697479b4010849640001146669727374f503011828562c2053290001187365636f6e64f503011828562c2053290000f103084066696e616c6974795f6772616e64706124507265636f6d6d69740804480134044e01100008012c7461726765745f68617368340104480001347461726765745f6e756d6265721001044e0000f50300000408f103e50300f903081c73705f636f726510566f696400010000fd030c4470616c6c65745f626c6f636b5f7365616c1870616c6c65741043616c6c040454000104146170706c790401107365616c01040144426c6f636b5365616c496e686572656e74000000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e01040c406172676f6e5f7072696d69746976657324696e686572656e747344426c6f636b5365616c496e686572656e7400010810566f74651801347365616c5f737472656e677468b1020110553235360001246e6f746172795f6964d401204e6f746172794964000158736f757263655f6e6f7465626f6f6b5f6e756d626572d401384e6f7465626f6f6b4e756d626572000154736f757263655f6e6f7465626f6f6b5f70726f6f660504012c4d65726b6c6550726f6f66000128626c6f636b5f766f74650d040124426c6f636b566f74650001446d696e65725f6e6f6e63655f73636f7265b90201304f7074696f6e3c553235363e0000001c436f6d707574650001000005040c406172676f6e5f7072696d6974697665733862616c616e63655f6368616e67652c4d65726b6c6550726f6f6600000c011470726f6f66090401a0426f756e6465645665633c483235362c20436f6e73745533323c7b207533323a3a4d4158207d3e3e0001406e756d6265725f6f665f6c6561766573d4010c7533320001286c6561665f696e646578d4010c753332000009040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400310201185665633c543e00000d040c406172676f6e5f7072696d69746976657328626c6f636b5f766f746528426c6f636b566f7465540410486173680134001c01286163636f756e745f69640001244163636f756e744964000128626c6f636b5f6861736834011048617368000114696e646578d4010c753332000114706f776572c00140426c6f636b566f74696e67506f7765720001247369676e6174757265110401384d756c74695369676e6174757265000160626c6f636b5f726577617264735f6163636f756e745f69640001244163636f756e7449640001107469636b2c01105469636b00001104082873705f72756e74696d65384d756c74695369676e61747572650001101c456432353531390400b9030148656432353531393a3a5369676e61747572650000001c537232353531390400b9030148737232353531393a3a5369676e617475726500010014456364736104001504014065636473613a3a5369676e61747572650002000c45746804001504015865636473613a3a4b656363616b5369676e617475726500030000150400000341000000080019040c5070616c6c65745f626c6f636b5f726577617264731870616c6c65741043616c6c040454000108607365745f626c6f636b5f726577617264735f706175736564040118706175736564200110626f6f6c0000007c7365745f626c6f636b5f766f7465725f726577617264735f656e61626c656404011c656e61626c6564200110626f6f6c000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e1d040c2c70616c6c65745f6d696e741870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e21040c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374010301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c00128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e38666f7263655f7472616e736665720c0118736f75726365010301504163636f756e7449644c6f6f6b75704f663c543e00011064657374010301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c00128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374010301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c00128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374010301504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665200110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686f010301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686ff10201445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f722074686558706f73736962696c697479206f6620636875726e292e44666f7263655f7365745f62616c616e636508010c77686f010301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565c00128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6e2504014c41646a7573746d656e74446972656374696f6e00011464656c7461c00128543a3a42616c616e6365000914b841646a7573742074686520746f74616c2069737375616e636520696e20612073617475726174696e67207761792e00fc43616e206f6e6c792062652063616c6c656420627920726f6f7420616e6420616c77617973206e65656473206120706f736974697665206064656c7461602e002423204578616d706c65106275726e08011476616c7565c00128543a3a42616c616e63650001286b6565705f616c697665200110626f6f6c000a1cfc4275726e2074686520737065636966696564206c697175696420667265652062616c616e63652066726f6d20746865206f726967696e206163636f756e742e002501496620746865206f726967696e2773206163636f756e7420656e64732075702062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c7409016f6620746865206275726e20616e6420606b6565705f616c697665602069732066616c73652c20746865206163636f756e742077696c6c206265207265617065642e005101556e6c696b652073656e64696e672066756e647320746f2061205f6275726e5f20616464726573732c207768696368206d6572656c79206d616b6573207468652066756e647320696e61636365737369626c652c21017468697320606275726e60206f7065726174696f6e2077696c6c2072656475636520746f74616c2069737375616e63652062792074686520616d6f756e74205f6275726e65645f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e25040c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e6372656173650000002044656372656173650001000029040c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374010301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c00128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e38666f7263655f7472616e736665720c0118736f75726365010301504163636f756e7449644c6f6f6b75704f663c543e00011064657374010301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c00128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374010301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c00128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374010301504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665200110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686f010301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686ff10201445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f722074686558706f73736962696c697479206f6620636875726e292e44666f7263655f7365745f62616c616e636508010c77686f010301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565c00128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6e2504014c41646a7573746d656e74446972656374696f6e00011464656c7461c00128543a3a42616c616e6365000914b841646a7573742074686520746f74616c2069737375616e636520696e20612073617475726174696e67207761792e00fc43616e206f6e6c792062652063616c6c656420627920726f6f7420616e6420616c77617973206e65656473206120706f736974697665206064656c7461602e002423204578616d706c65106275726e08011476616c7565c00128543a3a42616c616e63650001286b6565705f616c697665200110626f6f6c000a1cfc4275726e2074686520737065636966696564206c697175696420667265652062616c616e63652066726f6d20746865206f726967696e206163636f756e742e002501496620746865206f726967696e2773206163636f756e7420656e64732075702062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c7409016f6620746865206275726e20616e6420606b6565705f616c697665602069732066616c73652c20746865206163636f756e742077696c6c206265207265617065642e005101556e6c696b652073656e64696e672066756e647320746f2061205f6275726e5f20616464726573732c207768696368206d6572656c79206d616b6573207468652066756e647320696e61636365737369626c652c21017468697320606275726e60206f7065726174696f6e2077696c6c2072656475636520746f74616c2069737375616e63652062792074686520616d6f756e74205f6275726e65645f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d040c3c70616c6c65745f74785f70617573651870616c6c65741043616c6c04045400010814706175736504012466756c6c5f6e616d65c901015052756e74696d6543616c6c4e616d654f663c543e00001034506175736520612063616c6c2e00b843616e206f6e6c792062652063616c6c6564206279205b60436f6e6669673a3a50617573654f726967696e605d2ec0456d69747320616e205b604576656e743a3a43616c6c506175736564605d206576656e74206f6e20737563636573732e1c756e70617573650401146964656e74c901015052756e74696d6543616c6c4e616d654f663c543e00011040556e2d706175736520612063616c6c2e00c043616e206f6e6c792062652063616c6c6564206279205b60436f6e6669673a3a556e70617573654f726967696e605d2ec8456d69747320616e205b604576656e743a3a43616c6c556e706175736564605d206576656e74206f6e20737563636573732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e31040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400012014626174636804011463616c6c733504017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465789c010c75313600011063616c6cf902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c733504017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696eed010154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6cf902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c733504017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6cf902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e1c69665f656c73650801106d61696ef902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00012066616c6c6261636bf902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00065c1501446973706174636820612066616c6c6261636b2063616c6c20696e20746865206576656e7420746865206d61696e2063616c6c206661696c7320746f20657865637574652eb04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e00e4546869732066756e6374696f6e20666972737420617474656d70747320746f2064697370617463682074686520606d61696e602063616c6c2ed449662074686520606d61696e602063616c6c206661696c732c20746865206066616c6c6261636b6020697320617474656d7465642e15016966207468652066616c6c6261636b206973207375636365737366756c6c7920646973706174636865642c207468652077656967687473206f6620626f74682063616c6c73250161726520616363756d756c6174656420616e6420616e206576656e7420636f6e7461696e696e6720746865206d61696e2063616c6c206572726f72206973206465706f73697465642e00dc496e20746865206576656e74206f6620612066616c6c6261636b206661696c757265207468652077686f6c652063616c6c206661696c7368776974682074686520776569676874732072657475726e65642e0041012d20606d61696e603a20546865206d61696e2063616c6c20746f20626520646973706174636865642e205468697320697320746865207072696d61727920616374696f6e20746f20657865637574652e3d012d206066616c6c6261636b603a205468652066616c6c6261636b2063616c6c20746f206265206469737061746368656420696e20636173652074686520606d61696e602063616c6c206661696c732e00442323204469737061746368204c6f67696341012d20496620746865206f726967696e2069732060726f6f74602c20626f746820746865206d61696e20616e642066616c6c6261636b2063616c6c732061726520657865637574656420776974686f75747820206170706c79696e6720616e79206f726967696e2066696c746572732e49012d20496620746865206f726967696e206973206e6f742060726f6f74602c20746865206f726967696e2066696c746572206973206170706c69656420746f20626f74682074686520606d61696e6020616e644c20206066616c6c6261636b602063616c6c732e002c232320557365204361736559012d20536f6d6520757365206361736573206d6967687420696e766f6c7665207375626d697474696e672061206062617463686020747970652063616c6c20696e20656974686572206d61696e2c2066616c6c6261636b2820206f7220626f74682e5064697370617463685f61735f66616c6c69626c6508012461735f6f726967696eed010154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6cf902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000714c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e005101416c6d6f7374207468652073616d65206173205b6050616c6c65743a3a64697370617463685f6173605d2062757420666f72776172647320616e79206572726f72206f662074686520696e6e65722063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3504000002f9020039040c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000114107375646f04011063616c6cf902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000004350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e547375646f5f756e636865636b65645f77656967687408011063616c6cf902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000114350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e1c7365745f6b657904010c6e6577010301504163636f756e7449644c6f6f6b75704f663c543e0002085d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e1c7375646f5f617308010c77686f010301504163636f756e7449644c6f6f6b75704f663c543e00011063616c6cf902017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0003104d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2872656d6f76655f6b657900040c845065726d616e656e746c792072656d6f76657320746865207375646f206b65792e006c2a2a546869732063616e6e6f7420626520756e2d646f6e652e2a2a040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d040c3c70616c6c65745f74726561737572791870616c6c65741043616c6c04045400010c246275795f626f6e64730c01207661756c745f696410011c5661756c744964000114626f6e6473100114426f6e6473000138626f6e75735f617070726f76616c410401884f7074696f6e3c5472656173757279426f6e7573417070726f76616c50726f6f663e00040c984275792077686f6c65206031204152474f4e6020626f6e647320666f722061207661756c742e00d85468652070757263686173652065697468657220656e7465727320746865206163636570746564206c697374206f72206661696c732e486c69717569646174655f626f6e645f6c6f7404012c626f6e645f6c6f745f6964300124426f6e644c6f74496400050c704c6971756964617465206f6e652066756c6c20626f6e64206c6f742e001d01546865206c6f742073746f70732070617274696369706174696e67207269676874206177617920616e642069732072656c6561736564206166746572207468652064656c61792e446275795f6172676f6e6f745f626f6e6473040114626f6e6473100114426f6e6473000604c04275792077686f6c6520626f6e6420756e69747320666f7220746865204172676f6e6f7420616374697665207365742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e410404184f7074696f6e0404540145040108104e6f6e6500000010536f6d6504004504000001000045040c406172676f6e5f7072696d697469766573147661756c74685472656173757279426f6e7573417070726f76616c50726f6f6600001001207661756c745f6964d4011c5661756c74496400012c62656e656669636961727900012c4163636f756e7449643332000140657870697265735f61745f6672616d652c011c4672616d6549640001247369676e6174757265110401245369676e6174757265000049040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c65741043616c6c040454000118207265676973746572040130726567697374726174696f6e4d04013c526567697374726174696f6e3c543e00000cf85265676973746572207661756c7420616e64206d696e696e67206163636f756e747320666f7220616e206f7065726174696f6e616c206163636f756e742eec416e79206163636f756e7420696e2074686520726567697374726174696f6e206d6179207375626d697420746865207472616e73616374696f6e2e51015768656e20696e766974652d6f6e6c7920697320656e61626c65642c2074686520726567697374726174696f6e206d75737420696e636c75646520616e20757073747265616d206163636573732070726f6f662e447365745f7265776172645f636f6e6669670801806f7065726174696f6e616c5f63657274696669636174696f6e5f726577617264180128543a3a42616c616e63650001986f7065726174696f6e616c5f63657274696669636174696f6e5f626f6e75735f726577617264180128543a3a42616c616e6365000204f45570646174652063657274696669636174696f6e2072657761726420616d6f756e747320666f72206f7065726174696f6e616c206163636f756e74732e48666f7263655f7365745f70726f67726573730c01146f776e6572000130543a3a4163636f756e7449640001147061746368650401904f7065726174696f6e616c50726f677265737350617463683c543a3a42616c616e63653e00016c7570646174655f6f7065726174696f6e616c5f70726f6772657373200110626f6f6c000304e4466f7263652d757064617465206f7065726174696f6e616c2070726f6772657373206d61726b65727320666f7220616e206163636f756e742eac7365745f656e637279707465645f7365727665725f666f725f646f776e73747265616d5f6163636f756e74080148646f776e73747265616d5f6163636f756e74000130543a3a4163636f756e744964000140656e637279707465645f73657276657238011c5665633c75383e0004042d0153746f726520616e206f706171756520656e6372797074656420757073747265616d20736572766572207061796c6f616420666f72206120646f776e73747265616d206163636f756e742e2061637469766174650005040901416374697661746520616e20656c696769626c65206f7065726174696f6e616c206163636f756e742066726f6d20616e79206d616e61676564206163636f756e742e34636c61696d5f72657761726473040118616d6f756e74180128543a3a42616c616e6365000604e4436c61696d2070656e64696e67206f7065726174696f6e616c207265776172647320746f20616e79206d616e61676564206163636f756e742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c657430526567697374726174696f6e040454000104085631040051040144526567697374726174696f6e56313c543e0000000051040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c657438526567697374726174696f6e5631040454000020014c6f7065726174696f6e616c5f6163636f756e74000130543a3a4163636f756e744964000144656e6372797074696f6e5f7075626b6579550401584f7061717565456e6372797074696f6e5075626b65790001646f7065726174696f6e616c5f6163636f756e745f70726f6f66590401544163636f756e744f776e65727368697050726f6f660001347661756c745f6163636f756e74000130543a3a4163636f756e7449640001386d696e696e675f6163636f756e74000130543a3a4163636f756e74496400014c7661756c745f6163636f756e745f70726f6f66590401544163636f756e744f776e65727368697050726f6f660001506d696e696e675f6163636f756e745f70726f6f66590401544163636f756e744f776e65727368697050726f6f660001306163636573735f70726f6f665d0401a44f7074696f6e3c557073747265616d41636365737350726f6f663c543a3a4163636f756e7449643e3e000055040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c6574584f7061717565456e6372797074696f6e5075626b6579000004000401205b75383b2033325d000059040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c6574544163636f756e744f776e65727368697050726f6f6600000401247369676e6174757265110401245369676e617475726500005d0404184f7074696f6e0404540161040108104e6f6e6500000010536f6d6504006104000001000061040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c65744c557073747265616d41636365737350726f6f6604244163636f756e744964010000080140757073747265616d5f6163636f756e740001244163636f756e7449640001247369676e6174757265110401245369676e6174757265000065040c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c6574604f7065726174696f6e616c50726f67726573735061746368041c42616c616e6365011800180184756e69737761705f6172676f6e5f7472616e73666572735f696e5f616d6f756e748501013c4f7074696f6e3c42616c616e63653e0001586163636f756e745f626974636f696e5f616d6f756e748501013c4f7074696f6e3c42616c616e63653e0001646163636f756e745f7661756c745f626f6e645f616d6f756e748501013c4f7074696f6e3c42616c616e63653e0001347661756c745f63726561746564690401304f7074696f6e3c626f6f6c3e0001507661756c745f626974636f696e5f616d6f756e748501013c4f7074696f6e3c42616c616e63653e0001446d696e696e675f736561745f636f756e747502012c4f7074696f6e3c7533323e0000690404184f7074696f6e04045401200108104e6f6e6500000010536f6d6504002000000100006d040c6070616c6c65745f657468657265756d5f76657269666965721870616c6c65741043616c6c04045400011040666f7263655f636865636b706f696e7408011875706461746571040154426f783c436865636b706f696e745570646174653e000134666f726b5f76657273696f6e73a1040130466f726b56657273696f6e7300000841015573656420666f722070616c6c657420696e697469616c697a6174696f6e20616e64206c6967687420636c69656e7420726573657474696e672e204e6565647320746f2062652063616c6c65642062794074686520726f6f74206f726967696e2e187375626d6974040118757064617465a904012c426f783c5570646174653e00010c35015375626d6974732061206e65772066696e616c697a656420626561636f6e20686561646572207570646174652e2054686520757064617465206d617920636f6e7461696e20746865206e657874450173796e6320636f6d6d697474656520616e6420616e20657865637574696f6e20686561646572207769746e65737320666f72207468652066696e616c697a656420626561636f6e2068656164657220697424616476616e6365732ea0696d706f72745f747275737465645f657865637574696f6e5f6865616465725f6261636b66696c6c0c015065787065637465645f626561636f6e5f726f6f743401104832353600011868656164657275040130426561636f6e486561646572000158657865637574696f6e5f6865616465725f70726f6f6691040150457865637574696f6e48656164657250726f6f66000200487365745f6f7065726174696e675f6d6f64650401106d6f64650102014842617369634f7065726174696e674d6f6465000304050148616c74206f7220726573756d6520616c6c2070616c6c6574206f7065726174696f6e732e204d6179206f6e6c792062652063616c6c656420627920726f6f742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e71040c6070616c6c65745f657468657265756d5f766572696669657214747970657340436865636b706f696e74557064617465000014011868656164657275040130426561636f6e48656164657200015863757272656e745f73796e635f636f6d6d69747465657904013453796e63436f6d6d697474656500017463757272656e745f73796e635f636f6d6d69747465655f6272616e63688d04012c4272616e636850726f6f6600013c76616c696461746f72735f726f6f7434011048323536000158657865637574696f6e5f6865616465725f70726f6f6691040150457865637574696f6e48656164657250726f6f66000075040c70736e6f776272696467655f626561636f6e5f7072696d69746976657314747970657330426561636f6e4865616465720000140110736c6f7430010c75363400013870726f706f7365725f696e64657830013856616c696461746f72496e64657800012c706172656e745f726f6f743401104832353600012873746174655f726f6f7434011048323536000124626f64795f726f6f7434011048323536000079040c6070616c6c65745f657468657265756d5f76657269666965721474797065733453796e63436f6d6d6974746565000008011c7075626b6579737d0401f8426f756e6465645665633c5075626c69634b65792c20436f6e73745533323c7b2053594e435f434f4d4d49545445455f424f554e445f53495a45207d3e3e0001406167677265676174655f7075626b6579810401245075626c69634b657900007d040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018104045300000400890401185665633c543e000081040c70736e6f776272696467655f626561636f6e5f7072696d697469766573147479706573245075626c69634b657900000400850401445b75383b205055424b45595f53495a455d0000850400000330000000080089040000028104008d040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400310201185665633c543e000091040c6070616c6c65745f657468657265756d5f766572696669657214747970657350457865637574696f6e48656164657250726f6f660000080140657865637574696f6e5f6865616465729504017c56657273696f6e6564457865637574696f6e5061796c6f6164486561646572000140657865637574696f6e5f6272616e63688d04012c4272616e636850726f6f66000095040c70736e6f776272696467655f626561636f6e5f7072696d6974697665731474797065737c56657273696f6e6564457865637574696f6e5061796c6f61644865616465720001081c436170656c6c61040099040158457865637574696f6e5061796c6f61644865616465720000001444656e656204009d04017464656e65623a3a457865637574696f6e5061796c6f61644865616465720001000099040c70736e6f776272696467655f626561636f6e5f7072696d69746976657314747970657358457865637574696f6e5061796c6f616448656164657200003c012c706172656e745f68617368340110483235360001346665655f726563697069656e74110201104831363000012873746174655f726f6f743401104832353600013472656365697074735f726f6f74340110483235360001286c6f67735f626c6f6f6d38011c5665633c75383e00012c707265765f72616e64616f34011048323536000130626c6f636b5f6e756d62657230010c7536340001246761735f6c696d697430010c7536340001206761735f7573656430010c75363400012474696d657374616d7030010c75363400012865787472615f6461746138011c5665633c75383e000140626173655f6665655f7065725f676173b102011055323536000128626c6f636b5f68617368340110483235360001447472616e73616374696f6e735f726f6f74340110483235360001407769746864726177616c735f726f6f743401104832353600009d041070736e6f776272696467655f626561636f6e5f7072696d6974697665731474797065731464656e656258457865637574696f6e5061796c6f6164486561646572000044012c706172656e745f68617368340110483235360001346665655f726563697069656e74110201104831363000012873746174655f726f6f743401104832353600013472656365697074735f726f6f74340110483235360001286c6f67735f626c6f6f6d38011c5665633c75383e00012c707265765f72616e64616f34011048323536000130626c6f636b5f6e756d62657230010c7536340001246761735f6c696d697430010c7536340001206761735f7573656430010c75363400012474696d657374616d7030010c75363400012865787472615f6461746138011c5665633c75383e000140626173655f6665655f7065725f676173b102011055323536000128626c6f636b5f68617368340110483235360001447472616e73616374696f6e735f726f6f74340110483235360001407769746864726177616c735f726f6f7434011048323536000134626c6f625f6761735f7573656430010c75363400013c6578636573735f626c6f625f67617330010c7536340000a1040c6070616c6c65745f657468657265756d5f766572696669657214747970657330466f726b56657273696f6e7300001c011c67656e65736973a5040110466f726b000118616c74616972a5040110466f726b00012462656c6c6174726978a5040110466f726b00011c636170656c6c61a5040110466f726b00011464656e6562a5040110466f726b00011c656c6563747261a5040110466f726b00011066756c75a5040110466f726b0000a5040c6070616c6c65745f657468657265756d5f766572696669657214747970657310466f726b000008011c76657273696f6e48012c466f726b56657273696f6e00011465706f63682c010c7536340000a9040c6070616c6c65745f657468657265756d5f76657269666965721474797065731855706461746500001c013c61747465737465645f68656164657275040130426561636f6e48656164657200013873796e635f616767726567617465ad04013453796e634167677265676174650001387369676e61747572655f736c6f742c010c7536340001686e6578745f73796e635f636f6d6d69747465655f757064617465bd04017c4f7074696f6e3c4e65787453796e63436f6d6d69747465655570646174653e00014066696e616c697a65645f68656164657275040130426561636f6e48656164657200013c66696e616c6974795f6272616e63688d04012c4272616e636850726f6f66000158657865637574696f6e5f6865616465725f70726f6f6691040150457865637574696f6e48656164657250726f6f660000ad040c6070616c6c65745f657468657265756d5f76657269666965721474797065733453796e63416767726567617465000008014c73796e635f636f6d6d69747465655f62697473b10401f0426f756e6465645665633c75382c20436f6e73745533323c7b2053594e435f434f4d4d49545445455f424954535f424f554e445f53495a45207d3e3e00016073796e635f636f6d6d69747465655f7369676e6174757265b50401245369676e61747572650000b1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000b5040c70736e6f776272696467655f626561636f6e5f7072696d697469766573147479706573245369676e617475726500000400b90401505b75383b205349474e41545552455f53495a455d0000b904000003600000000800bd0404184f7074696f6e04045401c1040108104e6f6e6500000010536f6d650400c1040000010000c1040c6070616c6c65745f657468657265756d5f76657269666965721474797065735c4e65787453796e63436f6d6d6974746565557064617465000008014c6e6578745f73796e635f636f6d6d69747465657904013453796e63436f6d6d69747465650001686e6578745f73796e635f636f6d6d69747465655f6272616e63688d04012c4272616e636850726f6f660000c5040c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65741043616c6c040454000134407365745f636861696e5f636f6e666967080130736f757263655f636861696e0902012c536f75726365436861696e000118636f6e666967c904012c436861696e436f6e66696700000084666f7263655f7365745f676c6f62616c5f69737375616e63655f636f756e63696c0c014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e00012c61667465725f6e6f6e63652c0164436f756e63696c417070726f76616c51756575654e6f6e63650001486d656d6265725f6163636f756e745f696473cd0401b8426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d6178436f756e63696c4d656d626572733e0001003470617573655f67617465776179040130736f757263655f636861696e0902012c536f75726365436861696e0002003c756e70617573655f67617465776179040130736f757263655f636861696e0902012c536f75726365436861696e0003008c7365745f6d696e696d756d5f6d696e74696e675f617574686f726974795f76616c756508014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e0001346d696e696d756d5f76616c7565c00128543a3a42616c616e6365000400c87365745f6d696e74696e675f617574686f726974795f61637469766174696f6e5f72657061796d656e745f70726963696e6708014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e00011c70726963696e67d10401b44d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e673c543e0005005c72656769737465725f636f756e63696c5f7369676e65720c014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e00012c7369676e696e675f6b657911020110483136300001247369676e61747572651504013c4b656363616b5369676e617475726500060054617070726f76655f71756575655f656e747269657308014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e0001287369676e617475726573d50401e0426f756e6465645665633c4b656363616b5369676e61747572652c20543a3a4d61785175657565417070726f76616c7350657243616c6c3e0007005870726f76655f676174657761795f61637469766974790c0130736f757263655f636861696e0902012c536f75726365436861696e00017c70726576696f75735f676174657761795f61637469766974795f6e6f6e63652c01504761746577617941637469766974794e6f6e636500012c70726f6f665f6261746368dd04017047617465776179416374697669747950726f6f6642617463683c543e0008006872656769737465725f6d696e74696e675f617574686f7269747914014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b657911020110483136300001247369676e61747572651504013c4b656363616b5369676e617475726500014c6d6963726f676f6e5f636f6c6c61746572616cc00128543a3a42616c616e636500014c6d6963726f6e6f745f636f6c6c61746572616cc00128543a3a42616c616e636500090070646561637469766174655f6d696e74696e675f617574686f7269747904015c64657374696e6174696f6e5f7369676e696e675f6b65791102011048313630000a00307472616e736665725f6f757410014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e00011461737365741902012441737365744b696e6400014c64657374696e6174696f6e5f6163636f756e741102011048313630000118616d6f756e74c00128543a3a42616c616e6365000b0058636f6c6c61746572616c697a655f7472616e7366657210012c7472616e736665725f6964340110483235360001247369676e61747572651504013c4b656363616b5369676e617475726500014c6d6963726f676f6e5f636f6c6c61746572616cc00128543a3a42616c616e636500014c6d6963726f6e6f745f636f6c6c61746572616cc00128543a3a42616c616e6365000c00040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec9040c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65742c436861696e436f6e6669670001040c45766d100120636861696e5f69642c010c75363400011c67617465776179110201104831363000012c6172676f6e5f746f6b656e11020110483136300001346172676f6e6f745f746f6b656e110201104831363000000000cd040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400f10201185665633c543e0000d1040c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574a84d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e67040454000010014c61637469766174696f6e5f6761735f636f7374c00110753132380001487369676e61747572655f6761735f636f7374c0011075313238000154657374696d617465645f7765695f7065725f676173c001107531323800016c657374696d617465645f6d6963726f676f6e735f7065725f657468180128543a3a42616c616e63650000d5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011504045300000400d90401185665633c543e0000d904000002150400dd040c406172676f6e5f7072696d69746976657320657468657265756d70457468657265756d526563656970744c6f6750726f6f66426174636808384d617850726f6f66426c6f636b7300384d6178526563656970744c6f67730000080154657865637574696f6e5f626c6f636b5f70726f6f66e104016c457468657265756d457865637574696f6e426c6f636b50726f6f66000118626c6f636b73f504012501426f756e6465645665633c457468657265756d526563656970744c6f6750726f6f66426c6f636b3c4d6178526563656970744c6f67733e2c204d617850726f6f66426c6f636b730a3e0000e1040c406172676f6e5f7072696d69746976657320657468657265756d6c457468657265756d457865637574696f6e426c6f636b50726f6f660000080144616e63686f725f626c6f636b5f68617368340110483235360001747461726765745f746f5f616e63686f725f6865616465725f636861696ee5040170457468657265756d457865637574696f6e486561646572436861696e0000e5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e904045300000400f10401185665633c543e0000e9040c406172676f6e5f7072696d69746976657320657468657265756d5c457468657265756d457865637574696f6e486561646572000004010c726c70ed040168457468657265756d457865637574696f6e486561646572526c700000ed040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000f104000002e90400f5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f904045300000400350501185665633c543e0000f9040c406172676f6e5f7072696d69746976657320657468657265756d70457468657265756d526563656970744c6f6750726f6f66426c6f636b04384d6178526563656970744c6f677300000c014c7461726765745f626c6f636b5f6e756d6265722c014c457468657265756d426c6f636b4e756d626572000134726563656970745f70726f6f66fd040170457468657265756d436f6d62696e65645265636569707450726f6f66000130726563656970745f6c6f67731d0501b8426f756e6465645665633c457468657265756d526563656970744c6f672c204d6178526563656970744c6f67733e0000fd040c406172676f6e5f7072696d69746976657320657468657265756d70457468657265756d436f6d62696e65645265636569707450726f6f6600000801146e6f64657301050184457468657265756d436f6d62696e65645265636569707450726f6f664e6f646573000120726563656970747309050190457468657265756d436f6d62696e65645265636569707450726f6f665265636569707473000001050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ed04045300000400050501185665633c543e00000505000002ed040009050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010d05045300000400190501185665633c543e00000d050c406172676f6e5f7072696d69746976657320657468657265756d6c457468657265756d5265636569707450726f6f665265636569707400000801447472616e73616374696f6e5f696e6465782c010c7536340001306e6f64655f696e64657865731105017c457468657265756d5265636569707450726f6f664e6f6465496e6465786573000011050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019c045300000400150501185665633c543e000015050000029c0019050000020d05001d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012105045300000400310501185665633c543e000021050c406172676f6e5f7072696d69746976657320657468657265756d48457468657265756d526563656970744c6f6700000801447472616e73616374696f6e5f696e6465782c010c7536340001246576656e745f6c6f672505012c457468657265756d4c6f67000025050c406172676f6e5f7072696d69746976657320657468657265756d2c457468657265756d4c6f6700000c011c616464726573731102011048313630000118746f7069637329050144457468657265756d4c6f67546f70696373000110646174612d05013c457468657265756d4c6f6744617461000029050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400310201185665633c543e00002d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000031050000022105003505000002f90400390504184f7074696f6e04045401880108104e6f6e6500000010536f6d6504008800000100003d050c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704a04d756c7469736967206f7065726174696f6e206e6f7420666f756e6420696e2073746f726167652e204e6f744f776e657200080851014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c206974206f722075706461746534697473206465706f736974732e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4105000004084505180045050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540149050453000004004d0501185665633c543e00004905083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501982c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f7479706598012450726f78795479706500011464656c617910012c426c6f636b4e756d62657200004d050000024905005105000004085505180055050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540159050453000004005d0501185665633c543e00005905083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801342c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683401104861736800011868656967687410012c426c6f636b4e756d62657200005d0500000259050061050c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e65050c406172676f6e5f7072696d697469766573107469636b185469636b657200000801507469636b5f6475726174696f6e5f6d696c6c69732c010c7536340001746368616e6e656c5f686f6c645f65787069726174696f6e5f7469636b732c01105469636b000069050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400310201185665633c543e00006d050c3070616c6c65745f7469636b731870616c6c6574144572726f72040454000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742e71050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b013004560175050453000004008505013842547265654d61703c4b2c20563e000075050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017905045300000400810501185665633c543e00007905084870616c6c65745f6d696e696e675f736c6f74444d696e65724e6f6e636553636f72696e6704045400001001146e6f6e6365b1020110553235360001386c6173745f77696e5f626c6f636b750201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e00014c626c6f636b735f776f6e5f696e5f6672616d659c010c7531360001786672616d655f73746172745f626c6f636b735f776f6e5f737572706c75737d05010c69313600007d050000050a0081050000027905008505042042547265654d617008044b01300456017505000400890500000089050000028d05008d05000004083075050091050000040830100095050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0100045601ac0453000004009905013842547265654d61703c4b2c20563e00009905042042547265654d617008044b0100045601ac0004009d050000009d05000002a10500a1050000040800ac00a5050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a905045300000400ad0501185665633c543e0000a9050c406172676f6e5f7072696d69746976657328626c6f636b5f7365616c384d696e696e6742696453746174730000100128626964735f636f756e7410010c7533320001386269645f616d6f756e745f6d696e18011c42616c616e63650001386269645f616d6f756e745f6d617818011c42616c616e63650001386269645f616d6f756e745f73756d18011c42616c616e63650000ad05000002a90500b1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540118045300000400b50501185665633c543e0000b5050000021800b9050c406172676f6e5f7072696d69746976657328626c6f636b5f7365616c404d696e696e67536c6f74436f6e66696700000c01887469636b735f6265666f72655f6269645f656e645f666f725f7672665f636c6f73652c01105469636b00014c7469636b735f6265747765656e5f736c6f74732c01105469636b000178736c6f745f62696464696e675f73746172745f61667465725f7469636b732c01105469636b0000bd050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b013004560110045300000400c105013842547265654d61703c4b2c20563e0000c105042042547265654d617008044b013004560110000400c505000000c505000002910500c9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400cd0501185665633c543e0000cd050000021000d1050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b013004560130045300000400d505013842547265654d61703c4b2c20563e0000d505042042547265654d617008044b013004560130000400d905000000d905000002dd0500dd0500000408303000e1050c4870616c6c65745f6d696e696e675f736c6f741870616c6c6574144572726f7204045400012c44536c6f744e6f7454616b696e67426964730000049842696464696e6720666f7220746865206e65787420636f686f72742068617320636c6f7365645c546f6f4d616e79426c6f636b52656769737472616e74730001048854686520636f686f727420726567697374726174696f6e206f766572666c6f7765646c496e73756666696369656e744f776e657273686970546f6b656e73000204f8546869732066756e64696e67206163636f756e7420646f6573206e6f7420686f6c6420746865206d696e696d756d206172676f6e6f7473206e656564656424426964546f6f4c6f77000304cc54686520676976656e206269642069736e2774206869676820656e6f75676820746f20626520696e2074686520636f686f72748443616e6e6f7452656769737465724f7665726c617070696e6753657373696f6e73000404c0416e206163636f756e742063616e206f6e6c792068617665206f6e652061637469766520726567697374726174696f6e6843616e6e6f744368616e676546756e64696e674163636f756e74000504f843616e6e6f742072652d726567697374657220616e206163636f756e742077697468206120646966666572656e742066756e64696e67206163636f756e7444496e73756666696369656e7446756e6473000604fc5468652066756e64696e67206163636f756e7420646f6573206e6f74206861766520656e6f7567682066756e647320746f20636f76657220746865206269644842696443616e6e6f7442655265647563656400070480546865206d696e696e67206269642063616e6e6f74206265207265647563656440496e76616c6964426964416d6f756e740008048842696473206d75737420626520696e20616c6c6f77656420696e6372656d656e7473984f7065726174696f6e616c4163636f756e74526567697374726174696f6e52657175697265640009042d014d696e696e6720736c6f742062696464696e672063757272656e746c792072657175697265732061207072696f72206f7065726174696f6e616c2d6163636f756e7420757067726164652e44556e7265636f76657261626c65486f6c64000a049c546865206172676f6e6f7473206f6e20686f6c642063616e6e6f742062652072656c6561736564048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee5050c406172676f6e5f7072696d6974697665731c626974636f696e245574786f56616c7565000014011c7574786f5f69643001185574786f49640001347363726970745f7075626b6579e9050164426974636f696e436f7369676e5363726970745075626b65790001207361746f736869732c01205361746f7368697300014c7375626d69747465645f61745f6865696768742c0134426974636f696e48656967687400017077617463685f666f725f7370656e745f756e74696c5f6865696768742c0134426974636f696e4865696768740000e9050c406172676f6e5f7072696d6974697665731c626974636f696e64426974636f696e436f7369676e5363726970745075626b6579000104145032575348040130777363726970745f686173683401104832353600000000ed050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0130045601e505045300000400f105013842547265654d61703c4b2c20563e0000f105042042547265654d617008044b0130045601e505000400f505000000f505000002f90500f9050000040830e50500fd050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01cc045601300453000004000106013842547265654d61703c4b2c20563e00000106042042547265654d617008044b01cc0456013000040005060000000506000002090600090600000408cc30000d060c406172676f6e5f7072696d6974697665731c626974636f696e38426974636f696e4e6574776f726b0001101c426974636f696e0000001c546573746e6574000100185369676e65740002001c526567746573740003000011060c5070616c6c65745f626974636f696e5f7574786f731870616c6c6574144572726f7204045400013c344e6f5065726d697373696f6e73000004bc4f6e6c7920616e204f7261636c65204f70657261746f722063616e20706572666f726d207468697320616374696f6e5c4e6f426974636f696e436f6e6669726d6564426c6f636b00010405014e6f204f7261636c652d70726f766964656420626974636f696e20626c6f636b20686173206265656e2070726f766964656420746f20746865206e6574776f726b64496e73756666696369656e74426974636f696e416d6f756e740002046c496e73756666696369656e7420626974636f696e20616d6f756e74604e6f426974636f696e507269636573417661696c61626c65000304a04e6f207072696365732061726520617661696c61626c6520746f206d696e7420626974636f696e73505363726970745075626b6579436f6e666c696374000404a05363726970745075624b657920697320616c7265616479206265696e672077616974656420666f72345574786f4e6f744c6f636b6564000504544c6f636b6564205574786f204e6f7420466f756e6458526564656d7074696f6e73556e617661696c61626c650006048c526564656d7074696f6e73206e6f742063757272656e746c7920617661696c61626c6560496e76616c6964426974636f696e53796e6348656967687400070494496e76616c696420626974636f696e2073796e632068656967687420617474656d7074656464426974636f696e4865696768744e6f74436f6e6669726d656400080480426974636f696e20686569676874206e6f7420636f6e6669726d656420796574404d61785574786f73457863656564656400090480546f6f206d616e79205554584f7320617265206265696e67207761746368656450496e76616c6964426974636f696e536372697074000a04644c6f636b696e672073637269707420686173206572726f72733c4475706c69636174655574786f4964000b04844475706c696361746564205574786f49642e20416c726561647920696e20757365644d617843616e6469646174655574786f734578636565646564000c04dc546f6f206d616e792063616e646964617465205554584f7320617265206265696e672073746f72656420666f722074686973206c6f636b405574786f4e6f7443616e646964617465000d04d0546865205554584f207265666572656e636520646f6573206e6f74206d617020746f20612063616e64696461746520656e747279444c6f636b416c726561647946756e646564000e04b854686973204c6f636b20616c72656164792068617320616e2061747461636865642066756e64696e67205554584f048054686520604572726f726020656e756d206f6620746869732070616c6c65742e15060c406172676f6e5f7072696d697469766573147661756c74145661756c7408244163636f756e74496401001c42616c616e636501180044014c6f70657261746f725f6163636f756e745f69640001244163636f756e74496400014c64656c65676174655f6163636f756e745f6964bc01444f7074696f6e3c4163636f756e7449643e0001106e616d654d0301444f7074696f6e3c5661756c744e616d653e0001546c6173745f6e616d655f6368616e67655f7469636b8d0101304f7074696f6e3c5469636b3e00013873656375726974697a6174696f6ec0011c42616c616e636500015473656375726974697a6174696f6e5f746172676574c0011c42616c616e636500015473656375726974697a6174696f6e5f6c6f636b6564c0011c42616c616e636500018473656375726974697a6174696f6e5f70656e64696e675f61637469766174696f6ec0011c42616c616e636500013c6c6f636b65645f7361746f736869732c01205361746f7368697300015073656375726974697a65645f7361746f736869732c01205361746f7368697300017c73656375726974697a6174696f6e5f72656c656173655f7363686564756c65190601d8426f756e64656442547265654d61703c426974636f696e4865696768742c2042616c616e63652c20436f6e73745533323c3336363e3e00015073656375726974697a6174696f6e5f726174696f4103012446697865645531323800012469735f636c6f736564200110626f6f6c0001147465726d733d03014c5661756c745465726d733c42616c616e63653e00013470656e64696e675f7465726d732906018c4f7074696f6e3c285469636b2c205661756c745465726d733c42616c616e63653e293e00012c6f70656e65645f7469636b2c01105469636b0001806f7065726174696f6e616c5f6d696e696d756d5f72656c656173655f7469636b8d0101304f7074696f6e3c5469636b3e000019060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0130045601180453000004001d06013842547265654d61703c4b2c20563e00001d06042042547265654d617008044b01300456011800040021060000002106000002250600250600000408301800290604184f7074696f6e040454012d060108104e6f6e6500000010536f6d6504002d0600000100002d0600000408303d030031060c406172676f6e5f7072696d697469766573147661756c74585661756c744172676f6e6f74436f6d6d69746d656e74041c42616c616e636501180008014c636f6d6d69747465645f6d6963726f6e6f7473c0011c42616c616e6365000150656e63756d62657265645f6d6963726f6e6f7473c0011c42616c616e636500003506000004083906100039060c406172676f6e5f7072696d6974697665731c626974636f696e2c426974636f696e5850756200001801287075626c69635f6b65796103015c436f6d70726573736564426974636f696e5075626b657900011464657074683d0601087538000148706172656e745f66696e6765727072696e7448013c5850756246696e6765727072696e740001306368696c645f6e756d626572d4013c585075624368696c644e756d626572000128636861696e5f636f64650401205b75383b2033325d00011c6e6574776f726b4106012c4e6574776f726b4b696e6400003d06000006080041060c406172676f6e5f7072696d6974697665731c626974636f696e2c4e6574776f726b4b696e64000108104d61696e00000010546573740001000045060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400cd0501185665633c543e000049060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401300453000004004d06012c42547265655365743c543e00004d0604204254726565536574040454013000040051060000005106000002300055060000040810000059060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401100453000004005d06012c42547265655365743c543e00005d06042042547265655365740404540110000400cd0500000061060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016506045300000400690601185665633c543e000065060c3470616c6c65745f7661756c74731870616c6c6574445661756c744672616d65526576656e756504045400004001206672616d655f69642c011c4672616d654964000160626974636f696e5f6c6f636b5f6665655f726576656e7565c00128543a3a42616c616e6365000188626974636f696e5f6c6f636b5f6665655f636f75706f6e5f76616c75655f75736564c00128543a3a42616c616e6365000154626974636f696e5f6c6f636b735f63726561746564d4010c753332000190626974636f696e5f6c6f636b735f6e65775f6c69717569646974795f70726f6d69736564c00128543a3a42616c616e6365000180626974636f696e5f6c6f636b735f72656c65617365645f6c6971756964697479c00128543a3a42616c616e6365000170626974636f696e5f6c6f636b735f61646465645f7361746f736869732c01205361746f7368697300017c626974636f696e5f6c6f636b735f72656c65617365645f7361746f736869732c01205361746f7368697300016073656375726974697a6174696f6e5f616374697661746564c00128543a3a42616c616e636500016473656375726974697a6174696f6e5f72656c6f636b61626c65c00128543a3a42616c616e636500013873656375726974697a6174696f6ec00128543a3a42616c616e636500015c74726561737572795f7661756c745f6561726e696e6773c00128543a3a42616c616e636500015c74726561737572795f746f74616c5f6561726e696e6773c00128543a3a42616c616e636500015874726561737572795f7661756c745f6361706974616cc00128543a3a42616c616e636500016474726561737572795f65787465726e616c5f6361706974616cc00128543a3a42616c616e636500014c756e636f6c6c65637465645f726576656e7565c00128543a3a42616c616e6365000069060000026506006d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017106045300000400750601185665633c543e000071060c3470616c6c65745f7661756c74731870616c6c657448526563656e74436170616369747944726f70081c42616c616e636501182c426c6f636b4e756d626572011000100130626c6f636b5f6e756d626572d4012c426c6f636b4e756d626572000154617661696c61626c655f6265666f72655f64726f70c0011c42616c616e6365000150617661696c61626c655f61667465725f64726f70c0011c42616c616e63650001506e6f5f6665655f6661696c757265735f75736564d4010c7533320000750600000271060079060c3470616c6c65745f7661756c74731870616c6c6574144572726f72040454000188384e6f4d6f72655661756c744964730000049c496e7465726e616c6c792c20746865207661756c742069647320617265206d61786564206f757444496e73756666696369656e7446756e6473000104ec546865207573657220646f65736e2774206861766520656e6f7567682066756e647320746f20636f6d706c6574652074686973207265717565737458496e73756666696369656e745661756c7446756e647300020429015468657265206172656e277420656e6f7567682066756e647320696e20746865207661756c7420746f20636f766572207468652072657175657374656420626974636f696e206c6f636b684163636f756e7442656c6f774d696e696d756d42616c616e63650003045d015468652070726f706f736564207472616e73616374696f6e20776f756c642074616b6520746865206163636f756e742062656c6f7720746865206d696e696d756d20286578697374656e7469616c292062616c616e63652c5661756c74436c6f7365640004045054686973207661756c7420697320636c6f73656448496e76616c69645661756c74416d6f756e74000504dc46756e64696e6720776f756c6420726573756c7420696e20616e206f766572666c6f77206f66207468652062616c616e63652074797065845661756c74526564756374696f6e42656c6f7753656375726974697a6174696f6e00060439015468697320726564756374696f6e20696e207661756c742073656375726974697a6174696f6e20676f65732062656c6f772074686520616d6f756e7420616c726561647920636f6d6d697474656454496e76616c696453656375726974697a6174696f6e0007084101416e20696e76616c69642073656375726974697a6174696f6e2070657263656e74207761732070726f766964656420666f7220746865207661756c742e204e4f54453a2069742063616e6e6f742062655c64656372656173656420286f72206e6567617469766529585265757365645661756c74426974636f696e58707562000804bc546865207661756c7420626974636f696e20787075626b65792068617320616c7265616479206265656e207573656450496e76616c6964426974636f696e536372697074000904c854686520626974636f696e2073637269707420746f206c6f636b207468697320626974636f696e20686173206572726f727338496e76616c6964587075626b6579000a0460556e61626c6520746f206465636f646520787075626b65794057726f6e67587075624e6574776f726b000b044857726f6e672058707562204e6574776f726b34556e73616665587075626b6579000c040901546865205850756220697320756e7361666520746f2075736520696e2061207075626c696320626c6f636b636861696e2028616b612c20756e68617264656e65642970556e61626c65546f4465726976655661756c74587075624368696c64000d0478556e61626c6520746f2064657269766520787075626b6579206368696c645c426974636f696e436f6e76657273696f6e4661696c6564000e04b8426974636f696e20636f6e76657273696f6e20746f20636f6d70726573736564207075626b6579206661696c6564344e6f5065726d697373696f6e73000f0060486f6c64556e65787065637465646c794d6f64696669656400100044556e7265636f76657261626c65486f6c64001100345661756c744e6f74466f756e64001200445661756c744e6f745965744163746976650013046c546865207661756c74206973206e6f742079657420616374697665784e6f5661756c74426974636f696e5075626b657973417661696c61626c65001404884e6f205661756c74207075626c6963206b6579732061726520617661696c61626c65645465726d734d6f64696669636174696f6e4f766572666c6f77001504ec546865207465726d73206d6f64696669636174696f6e206c69737420636f756c64206e6f742068616e646c6520616e79206d6f7265206974656d736c5465726d734368616e6765416c72656164795363686564756c6564001604a45465726d732061726520616c7265616479207363686564756c656420746f206265206368616e67656434496e7465726e616c4572726f7200170494416e20696e7465726e616c2070726f63657373696e67206572726f72206f6363757272656488556e61626c65546f47656e65726174655661756c74426974636f696e5075626b6579001804b4556e61626c6520746f2067656e65726174652061206e6577207661756c7420626974636f696e207075626b65797446756e64696e674368616e6765416c72656164795363686564756c656400190494412066756e64696e67206368616e676520697320616c7265616479207363686564756c65645c496e76616c6964426f6e6453686172696e675465726d73001a04d0547265617375727920626f6e642073686172696e6720706c757320626f6e75732063616e6e6f742065786365656420313030252e40496e76616c69645661756c744e616d65001b0831015661756c74206e616d6573206d757374207374617274207769746820616e20757070657263617365204153434949206c657474657220616e64206f746865727769736520626520415343494934616c7068616e756d657269632e6c50656e64696e67436f7369676e734265666f7265436f6c6c656374001c04010141207661756c74206d75737420636c656172206f757420616c6c2070656e64696e6720636f7369676e73206265666f72652069742063616e20636f6c6c6563749c50656e64696e674f727068616e65645574786f436f7369676e734265666f7265436f6c6c656374001d041d0141207661756c74206d75737420636c656172206f757420616c6c2070656e64696e67206f727068616e20636f7369676e73206265666f72652069742063616e20636f6c6c6563748c4f766572647565436f6c6c656374426c6f636b6572734265666f7265436f6c6c656374001e044d0141207661756c74206d75737420636c656172206f757420616c6c206f7665726475652065787465726e616c20636f6c6c65637420626c6f636b657273206265666f72652069742063616e20636f6c6c6563742e584163636f756e74416c72656164794861735661756c74001f04d4416e206163636f756e74206d6179206f6e6c79206265206173736f636961746564207769746820612073696e676c65207661756c74984f7065726174696f6e616c4163636f756e74526567697374726174696f6e526571756972656400200419015661756c74206372656174696f6e2063757272656e746c792072657175697265732061207072696f72206f7065726174696f6e616c2d6163636f756e7420757067726164652e9c436f6d6d69747465644172676f6e6f747342656c6f77456e63756d62657265644261636b696e670021045101436f6d6d6974746564204172676f6e6f74732063616e6e6f7420626520726564756365642062656c6f772074686520616d6f756e7420616c72656164792063726f7373636861696e2d656e63756d62657265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d060c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c6574344c6f636b6564426974636f696e04045400005001207661756c745f6964d4011c5661756c7449640001486c69717569646974795f70726f6d69736564c00128543a3a42616c616e636500014c6c6f636b65645f7461726765745f7072696365c00128543a3a42616c616e63650001346f776e65725f6163636f756e74000130543a3a4163636f756e74496400015073656375726974697a6174696f6e5f726174696fe0012446697865645531323800013473656375726974795f66656573c00128543a3a42616c616e6365000140636f75706f6e5f706169645f66656573c00128543a3a42616c616e63650001207361746f736869732c01205361746f736869730001347574786f5f7361746f736869738d0101404f7074696f6e3c5361746f736869733e0001307661756c745f7075626b65796103015c436f6d70726573736564426974636f696e5075626b65790001487661756c745f636c61696d5f7075626b65796103015c436f6d70726573736564426974636f696e5075626b65790001487661756c745f787075625f736f7572636573810601cc285850756246696e6765727072696e742c20585075624368696c644e756d6265722c20585075624368696c644e756d626572290001306f776e65725f7075626b65796103015c436f6d70726573736564426974636f696e5075626b65790001487661756c745f636c61696d5f6865696768742c0134426974636f696e4865696768740001446f70656e5f636c61696d5f6865696768742c0134426974636f696e486569676874000144637265617465645f61745f6865696768742c0134426974636f696e4865696768740001487574786f5f7363726970745f7075626b6579e9050164426974636f696e436f7369676e5363726970745075626b657900012469735f66756e646564200110626f6f6c00015066756e645f686f6c645f657874656e73696f6e73190601e4426f756e64656442547265654d61703c426974636f696e4865696768742c20543a3a42616c616e63652c20436f6e73745533323c3336363e3e000158637265617465645f61745f6172676f6e5f626c6f636bd40144426c6f636b4e756d626572466f723c543e000081060000040c481010008506000004081030008906000004080030008d060c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c6574484c6f636b52656c6561736552657175657374041c42616c616e636501180018011c7574786f5f69642c01185574786f49640001207661756c745f6964d4011c5661756c74496400014c626974636f696e5f6e6574776f726b5f6665652c01205361746f73686973000140636f7369676e5f6475655f6672616d652c011c4672616d654964000140746f5f7363726970745f7075626b65797103014c426974636f696e5363726970745075626b6579000144726564656d7074696f6e5f616d6f756e74c0011c42616c616e6365000091060000040800cc0095060c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c6574304f727068616e65645574786f042c426c6f636b4e756d62657201100014011c7574786f5f69642c01185574786f49640001207661756c745f6964d4011c5661756c7449640001207361746f736869732c01205361746f7368697300016c7265636f726465645f6172676f6e5f626c6f636b5f6e756d626572d4012c426c6f636b4e756d626572000138636f7369676e5f72657175657374990601b84f7074696f6e3c4f727068616e65645574786f436f7369676e526571756573743c426c6f636b4e756d6265723e3e0000990604184f7074696f6e040454019d060108104e6f6e6500000010536f6d6504009d0600000100009d060c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c6574644f727068616e65645574786f436f7369676e52657175657374042c426c6f636b4e756d6265720110000c014c626974636f696e5f6e6574776f726b5f6665653001205361746f73686973000140746f5f7363726970745f7075626b65797103014c426974636f696e5363726970745075626b6579000174637265617465645f61745f6172676f6e5f626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720000a1060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401300453000004004d06012c42547265655365743c543e0000a5060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401300453000004004d06012c42547265655365743c543e0000a9060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454019106045300000400ad06012c42547265655365743c543e0000ad0604204254726565536574040454019106000400b106000000b106000002910600b5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012506045300000400210601185665633c543e0000b9060c5070616c6c65745f626974636f696e5f6c6f636b731870616c6c6574144572726f7204045400018c44496e73756666696369656e7446756e647300000058496e73756666696369656e745661756c7446756e6473000100844163636f756e74576f756c64476f42656c6f774d696e696d756d42616c616e63650002045d015468652070726f706f736564207472616e73616374696f6e20776f756c642074616b6520746865206163636f756e742062656c6f7720746865206d696e696d756d20286578697374656e7469616c292062616c616e63652c5661756c74436c6f7365640003045054686973207661756c7420697320636c6f73656448496e76616c69645661756c74416d6f756e74000404dc46756e64696e6720776f756c6420726573756c7420696e20616e206f766572666c6f77206f66207468652062616c616e636520747970654c526564656d7074696f6e4e6f744c6f636b6564000504b85468697320626974636f696e20726564656d7074696f6e20686173206e6f74206265656e206c6f636b656420696e98426974636f696e52656c65617365496e6974696174696f6e446561646c696e65506173736564000604c454686520626974636f696e20686173207061737365642074686520646561646c696e6520746f2072656c6561736520697444426974636f696e466565546f6f48696768000704b05468652066656520666f72207468697320626974636f696e2072656c6561736520697320746f6f20686967684c426974636f696e5574786f4e6f74466f756e64000804ec54686520426974636f696e20556e7370656374205472616e73616374696f6e204f757470757420285554584f2920776173206e6f7420666f756e6488426974636f696e556e61626c65546f42654465636f646564466f7252656c65617365000904e85468697320626974636f696e20636f7369676e2073637269707420636f756c646e2774206265206465636f64656420666f722072656c6561736584426974636f696e5369676e6174757265556e61626c65546f42654465636f646564000a04d85468697320626974636f696e207369676e617475726520636f756c646e2774206265206465636f64656420666f722072656c6561736578426974636f696e5075626b6579556e61626c65546f42654465636f646564000b04cc5468697320626974636f696e207075626b657920636f756c646e2774206265206465636f64656420666f722072656c6561736564426974636f696e496e76616c6964436f7369676e6174757265000c04e454686520636f7369676e207369676e6174757265206973206e6f742076616c696420666f722074686520626974636f696e2072656c6561736568496e73756666696369656e745361746f736869734c6f636b6564000d04a8546865206d696e696d756d206e756d626572206f66207361746f7368697320776173206e6f74206d6574604e6f426974636f696e507269636573417661696c61626c65000e0435015468652070726963652070726f766964657220686173206e6f20626974636f696e2070726963657320617661696c61626c652e205468697320697320612074656d706f72617279206572726f7250496e76616c6964426974636f696e536372697074000f04c854686520626974636f696e2073637269707420746f206c6f636b207468697320626974636f696e20686173206572726f7273344e6f5065726d697373696f6e73001004e4546865207573657220646f6573206e6f742068617665207065726d697373696f6e7320746f20706572666f726d207468697320616374696f6e60486f6c64556e65787065637465646c794d6f646966696564001104090154686520657870656374656420616d6f756e74206f662066756e647320746f2072657475726e2066726f6d20686f6c6420776173206e6f7420617661696c61626c6544556e7265636f76657261626c65486f6c64001204a054686520686f6c64206f6e2066756e647320636f756c64206e6f74206265207265636f7665726564345661756c744e6f74466f756e640013045c546865207661756c7420776173206e6f7420666f756e644447656e657269635661756c744572726f720400bd0601285661756c744572726f7200140494416e206572726f72206f6363757272656420696e20746865207661756c74206d6f64756c65304c6f636b4e6f74466f756e640015049454686520426974636f696e204c6f636b207265636f726420776173206e6f7420666f756e64784e6f5661756c74426974636f696e5075626b657973417661696c61626c65001604884e6f205661756c74207075626c6963206b6579732061726520617661696c61626c6588556e61626c65546f47656e65726174655661756c74426974636f696e5075626b6579001704a4556e61626c6520746f2067656e65726174652061206e6577207661756c74207075626c6963206b6579445661756c744e6f745965744163746976650018047054686973207661756c74206973206e6f7420796574206163746976656445787069726174696f6e4174426c6f636b4f766572666c6f77001904c0416e206f766572666c6f77206f63637572726564207265636f7264696e672061206c6f636b2065787069726174696f6e544e6f52617463686574696e67417661696c61626c65001a04484e6f7468696e6720746f2072617463686574584c6f636b496e50726f636573734f6652656c65617365001b04c041206c6f636b20696e2070726f63657373206f662072656c656173652063616e6e6f7420626520726174636865746564484c6f636b50656e64696e6746756e64696e67001c04c8546865206c6f636b2066756e64696e6720686173206e6f74206265656e20636f6e6669726d6564206f6e20626974636f696e344f766572666c6f774572726f72001d042101416e206f766572666c6f77206f7220756e646572666c6f77206f63637572726564207768696c652063616c63756c6174696e672074686520726564656d7074696f6e2070726963657c496e656c696769626c654d6963726f676f6e52617465526571756573746564001e04c4416e20696e656c696769626c65206d6963726f676f6e2072617465207065722062746320776173207265717565737465646c4f727068616e65645574786f46756e64696e67436f6e666c696374001f04050143616e6e6f742066756e64207769746820616e206f727068616e6564207574786f206166746572206c6f636b2066756e64696e6720697320636f6e6669726d6564704f727068616e65645574786f52656c65617365526571756573746564002004ec43616e6e6f74206c6f636b20616e206f727068616e6564207574786f207769746820612070656e64696e672072656c6561736520726571756573746c46756e64696e675574786f43616e6e6f74426552656c6561736564002104dc43616e6e6f74207265717565737420616e206f727068616e65642072656c6561736520666f72207468652066756e64696e67205554584f984d61784f727068616e65645574786f52656c6561736552657175657374734578636565646564002204c8546f6f206d616e79206f727068616e6564207574786f2072656c6561736520726571756573747320666f722061206c6f636b048054686520604572726f726020656e756d206f6620746869732070616c6c65742ebd060c406172676f6e5f7072696d697469766573147661756c74285661756c744572726f720001342c5661756c74436c6f736564000000684163636f756e74576f756c64426542656c6f774d696e696d756d00010044496e73756666696369656e7446756e647300020058496e73756666696369656e745661756c7446756e647300030060486f6c64556e65787065637465646c794d6f64696669656400040044556e7265636f76657261626c65486f6c64000500345661756c744e6f74466f756e64000600784e6f5661756c74426974636f696e5075626b657973417661696c61626c6500070088556e61626c65546f47656e65726174655661756c74426974636f696e5075626b657900080050496e76616c6964426974636f696e53637269707400090034496e7465726e616c4572726f72000a00445661756c744e6f74596574416374697665000b009c436f6d6d69747465644172676f6e6f747342656c6f77456e63756d62657265644261636b696e67000c0000c10600000408f41000c5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400f10201185665633c543e0000c9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011101045300000400cd0601185665633c543e0000cd06000002110100d1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d506045300000400d90601185665633c543e0000d50600000408300400d906000002d50600dd060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601f4045300000400e106013842547265654d61703c4b2c20563e0000e106042042547265654d617008044b0110045601f4000400e506000000e506000002e90600e9060000040810f400ed060c3c70616c6c65745f6e6f7461726965731870616c6c6574144572726f720404540001244050726f706f73616c4e6f74466f756e64000004985468652070726f706f73616c20746f20616374697661746520776173206e6f7420666f756e644c4d61784e6f74617269657345786365656465640001048c4d6178696d756d206e756d626572206f66206e6f746172696573206578636565646564704d617850726f706f73616c73506572426c6f636b4578636565646564000204b84d6178696d756d206e756d626572206f662070726f706f73616c732070657220626c6f636b206578636565646564444e6f74416e4163746976654e6f74617279000304f054686973206e6f74617279206973206e6f74206163746976652c20736f2074686973206368616e67652063616e6e6f74206265206d6164652079657454496e76616c69644e6f746172794f70657261746f72000404a8496e76616c6964206e6f74617279206f70657261746f7220666f722074686973206f7065726174696f6e3c4e6f4d6f72654e6f74617279496473000504f4416e20696e7465726e616c206572726f7220686173206f636375727265642e20546865206e6f746172792069647320617265206578686175737465642e504566666563746976655469636b546f6f536f6f6e0006049c5468652070726f706f73656420656666656374697665207469636b20697320746f6f20736f6f6e2c546f6f4d616e794b65797300070458546f6f206d616e7920696e7465726e616c206b65797334496e76616c69644e6f7461727900080454546865206e6f7461727920697320696e76616c6964048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef1060000040810a10300f5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f906045300000400010701185665633c543e0000f90600000408fd062000fd060c406172676f6e5f7072696d697469766573186e6f74617279604e6f746172794e6f7465626f6f6b4b657944657461696c73000014013c6e6f7465626f6f6b5f6e756d626572d401384e6f7465626f6f6b4e756d6265720001107469636b2c01105469636b000140626c6f636b5f766f7465735f726f6f743401104832353600012c7365637265745f686173683401484e6f7465626f6f6b53656372657448617368000134706172656e745f736563726574a50201584f7074696f6e3c4e6f7465626f6f6b5365637265743e00000107000002f9060005070000040c103019010009070c3c70616c6c65745f6e6f7465626f6f6b1870616c6c6574144572726f7204045400013c5c4475706c69636174654e6f7465626f6f6b4e756d626572000004a054686973206e6f7465626f6f6b2068617320616c7265616479206265656e207375626d6974746564544d697373696e674e6f7465626f6f6b4e756d6265720001047c4e6f7465626f6f6b73207265636569766564206f7574206f66206f726465725c4e6f7465626f6f6b5469636b416c726561647955736564000204b041206e6f7465626f6f6b2077617320616c72656164792070726f76696465642061742074686973207469636b60496e76616c69644e6f7465626f6f6b5369676e6174757265000304a0546865207369676e6174757265206f6620746865206e6f7465626f6f6b20697320696e76616c696454496e76616c696453656372657450726f7669646564000404f454686520736563726574206f72207365637265742068617368206f662074686520706172656e74206e6f7465626f6f6b20646f206e6f74206d6174636858436f756c644e6f744465636f64654e6f7465626f6f6b000504c0436f756c64206e6f74206465636f646520746865207363616c65206279746573206f6620746865206e6f7465626f6f6b5c4475706c69636174654e6f7465626f6f6b446967657374000604bc546865206e6f7465626f6f6b206469676573742077617320696e636c75646564206d6f7265207468616e206f6e6365544d697373696e674e6f7465626f6f6b44696765737400070490546865206e6f7465626f6f6b2064696765737420776173206e6f7420696e636c7564656454496e76616c69644e6f7465626f6f6b446967657374000804e0546865206e6f7465626f6f6b2064696765737420646964206e6f74206d617463682074686520696e636c75646564206e6f7465626f6f6b73844d756c7469706c654e6f7465626f6f6b496e686572656e747350726f76696465640009046c4d756c7469706c6520696e686572656e74732070726f766964656434496e7465726e616c4572726f72000a04a0556e61626c6520746f20747261636b20746865206e6f7465626f6f6b206368616e6765206c697374804e6f7465626f6f6b5375626d6974746564466f724c6f636b65644e6f74617279000b04350141206e6f7465626f6f6b20776173207375626d697474656420666f722061206e6f746172792074686174206661696c65642061756469742c207768696368206973206e6f7420616c6c6f77656460496e76616c6964526570726f636573734e6f7465626f6f6b000c0468496e76616c696420726570726f63657373206e6f7465626f6f6b54496e76616c69644e6f746172794f70657261746f72000d045c496e76616c6964206e6f74617279206f70657261746f7274496e76616c69644e6f7465626f6f6b5375626d697373696f6e5469636b000e0480496e76616c6964206e6f7465626f6f6b207375626d697373696f6e207469636b048054686520604572726f726020656e756d206f6620746869732070616c6c65742e0d07086870616c6c65745f6c6f63616c636861696e5f7472616e73666572445175657565645472616e736665724f757408244163636f756e74496401001c42616c616e63650118001001286163636f756e745f69640001244163636f756e744964000118616d6f756e7418011c42616c616e636500013c65787069726174696f6e5f7469636b3001105469636b0001246e6f746172795f69641001204e6f746172794964000011070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400cd0501185665633c543e0000150708346672616d655f737570706f72742050616c6c65744964000004008d02011c5b75383b20385d000019070c6870616c6c65745f6c6f63616c636861696e5f7472616e736665721870616c6c6574144572726f72040454000120644d6178426c6f636b5472616e7366657273457863656564656400000044496e73756666696369656e7446756e6473000104b0496e73756666696369656e742062616c616e636520746f206372656174652074686973207472616e7366657268496e73756666696369656e744e6f746172697a656446756e6473000204d0496e73756666696369656e742062616c616e636520746f2066756c66696c6c2061206d61696e636861696e207472616e7366657294496e76616c69644f724475706c6963617465644c6f63616c636861696e5472616e73666572000304d8546865207472616e736665722077617320616c7265616479207375626d697474656420696e20612070726576696f757320626c6f636ba44e6f7465626f6f6b496e636c75646573457870697265644c6f63616c636861696e5472616e73666572000404410141207472616e7366657220776173207375626d697474656420696e20612070726576696f757320626c6f636b20627574207468652065787069726174696f6e20626c6f636b206861732070617373656470496e76616c69644e6f7461727955736564466f725472616e736665720005047c546865206e6f74617279206964206973206e6f7420726567697374657265645c4e6f746172794c6f636b6564466f725472616e73666572000604ec546865206e6f746172792069732063757272656e746c79206c6f636b656420616e642063616e6e6f742070726f63657373207472616e7366657273544e6f417661696c61626c655472616e7366657249640007049c4e6f207472616e7366657220494473206172652063757272656e746c7920617661696c61626c65048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1d070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400510601185665633c543e000021070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540118045300000400b50501185665633c543e000025070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540129070453000004002d0701185665633c543e000029070c406172676f6e5f7072696d697469766573186e6f746172797c4e6f746172794e6f7465626f6f6b566f746544696765737444657461696c7300001401246e6f746172795f6964d401204e6f74617279496400013c6e6f7465626f6f6b5f6e756d626572d401384e6f7465626f6f6b4e756d6265720001107469636b2c01105469636b000144626c6f636b5f766f7465735f636f756e74d4010c753332000148626c6f636b5f766f74696e675f706f776572c00140426c6f636b566f74696e67506f77657200002d0700000229070031070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013507045300000400390701185665633c543e000035070000040c3010180039070000023507003d070c5870616c6c65745f626c6f636b5f7365616c5f737065631870616c6c6574144572726f72040454000104684d61784e6f7465626f6f6b7341745469636b45786365656465640000041501546865206d6178696d756d206e756d626572206f66206e6f7465626f6f6b73206174207468652063757272656e74207469636b20686173206265656e206578636565646564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e41070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400310201185665633c543e000045070c3870616c6c65745f646f6d61696e731870616c6c6574144572726f720404540001144c446f6d61696e4e6f74526567697374657265640000047454686520646f6d61696e206973206e6f7420726567697374657265642e384e6f74446f6d61696e4f776e6572000104a85468652073656e646572206973206e6f7420746865206f776e6572206f662074686520646f6d61696e2e6c4661696c6564546f416464546f41646472657373486973746f7279000204944661696c656420746f2061646420746f20746865206164647265737320686973746f72792e644661696c6564546f4164644578706972696e67446f6d61696e000304a44661696c656420746f2061646420746f20746865206578706972696e6720646f6d61696e206c697374504163636f756e744465636f64696e674572726f72000404884572726f72206465636f64696e67206163636f756e742066726f6d206e6f74617279048054686520604572726f726020656e756d206f6620746869732070616c6c65742e49070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d07045300000400510701185665633c543e00004d07084870616c6c65745f70726963655f696e646578504370694d6561737572656d656e744275636b657400000c01287469636b5f72616e6765dd050130285469636b2c205469636b29000124746f74616c5f637069910101204172676f6e4350490001486d6561737572656d656e74735f636f756e7410010c753332000051070000024d070055070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0130045601180453000004001d06013842547265654d61703c4b2c20563e000059070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0130045601180453000004001d06013842547265654d61703c4b2c20563e00005d07084870616c6c65745f70726963655f696e646578784172676f6e6f74417665726167654672616d65416363756d756c61746f72041c42616c616e63650118000c01206672616d655f69642c011c4672616d65496400016c746f74616c5f6d6963726f676f6e735f7065725f6172676f6e6f74c0011c42616c616e636500013073616d706c655f636f756e74d4010c753332000061070c4870616c6c65745f70726963655f696e6465781870616c6c6574144572726f72040454000110544e6f74417574686f72697a65644f70657261746f72000004904e6f7420617574686f72697a656420617320616e206f7261636c65206f70657261746f72304d697373696e6756616c7565000104344d697373696e672076616c756530507269636573546f6f4f6c6400020480546865207375626d6974746564207072696365732061726520746f6f206f6c64744d617850726963654368616e67655065725469636b4578636565646564000304884368616e676520696e206172676f6e20707269636520697320746f6f206c61726765048054686520604572726f726020656e756d206f6620746869732070616c6c65742e6507083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e000300006907083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f7269746965736d07016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564750201244f7074696f6e3c4e3e00006d070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454016d01045300000400690101185665633c543e000071070c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e75070c406172676f6e5f7072696d6974697665732470726f7669646572733c426c6f636b5365616c6572496e666f08244163636f756e74496401002c417574686f72697479496401b8000c015c626c6f636b5f617574686f725f6163636f756e745f69640001244163636f756e744964000168626c6f636b5f766f74655f726577617264735f6163636f756e74bc01444f7074696f6e3c4163636f756e7449643e000150626c6f636b5f7365616c5f617574686f726974798101014c4f7074696f6e3c417574686f7269747949643e000079070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019105045300000400c50501185665633c543e00007d070c4470616c6c65745f626c6f636b5f7365616c1870616c6c6574144572726f720404540001545c496e76616c6964566f74655365616c537472656e677468000004e454686520737472656e677468206f662074686520676976656e207365616c20646964206e6f74206d617463682063616c63756c6174696f6e7340496e76616c69645375626d697474657200010494566f7465206e6f74207375626d697474656420627920746865207269676874206d696e657264556e61626c65546f4465636f6465566f74654163636f756e740002047c436f756c64206e6f74206465636f64652074686520766f74652062797465735c556e72656769737465726564426c6f636b417574686f72000304a854686520626c6f636b20617574686f72206973206e6f7420612072656769737465726564206d696e657254496e76616c6964426c6f636b566f746550726f6f66000404f4546865206d65726b6c652070726f6f66206f6620766f746520696e636c7573696f6e20696e20746865206e6f7465626f6f6b20697320696e76616c6964604e6f4772616e64706172656e74566f74654d696e696d756d000504ac4e6f20766f7465206d696e696d756d20666f756e64206174206772616e64706172656e7420686569676874684475706c6963617465426c6f636b5365616c50726f766964656400060478546f6f206d616e7920626c6f636b207365616c73207375626d69747465645c496e73756666696369656e74566f74696e67506f776572000704590154686520626c6f636b20766f746520646964206e6f7420726561636820746865206d696e696d756d20766f74696e6720706f7765722061742074696d65206f6620746865206772616e64706172656e7420626c6f636b5c506172656e74566f74696e674b65794e6f74466f756e64000804cc4e6f207265676973746572656420766f74696e67206b657920666f756e6420666f722074686520706172656e7420626c6f636b68496e76616c6964566f74654772616e64706172656e7448617368000904a054686520626c6f636b20766f746520776173206e6f7420666f7220612076616c696420626c6f636b58496e656c696769626c654e6f7465626f6f6b55736564000a04cc546865206e6f7465626f6f6b20666f72207468697320766f746520776173206e6f7420656c696769626c6520746f20766f7465504e6f456c696769626c65566f74696e67526f6f74000b043d01546865206c6f6f6b757020746f20766572696679206120766f746527732061757468656e746963697479206973206e6f7420617661696c61626c6520666f722074686520676976656e20626c6f636b48436f756c644e6f744465636f6465566f7465000c04b4436f756c64206e6f74206465636f646520746865207363616c65206279746573206f662074686520766f746573684d61784e6f7465626f6f6b7341745469636b4578636565646564000d043901546f6f206d616e79206e6f7465626f6f6b732077657265207375626d697474656420666f72207468652063757272656e74207469636b2e2053686f756c64206e6f7420626520706f737369626c65684e6f436c6f736573744d696e6572466f756e64466f72566f7465000e047c4e6f20636c6f73657374206d696e657220666f756e6420666f7220766f746564426c6f636b566f7465496e76616c69645369676e6174757265000f047854686520766f7465207369676e61747572652077617320696e76616c696458496e76616c6964466f726b506f776572506172656e7400100464496e76616c696420666f726b20706f77657220706172656e7450426c6f636b5365616c4465636f64654572726f72001104d04120626c6f636b207365616c20617574686f7269747920636f756c64206e6f742062652070726f7065726c79206465636f6465645c496e76616c6964436f6d70757465426c6f636b5469636b001204dc436f6d7075746520626c6f636b732063616e7420626520616464656420696e207468652073616d65207469636b206173206120766f746558496e76616c69644d696e65724e6f6e636553636f7265001304b0546865206e6f6e63652073636f72652064697374616e636520737570706c69656420697320696e76616c6964604475706c6963617465566f7465426c6f636b41745469636b001404504475706c696361746520766f746520626c6f636b048054686520604572726f726020656e756d206f6620746869732070616c6c65742e81070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017901045300000400750101185665633c543e000085070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012506045300000400210601185665633c543e000089070000040c183018008d070c5070616c6c65745f626c6f636b5f726577617264731870616c6c6574144572726f72040454000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742e91070c2c70616c6c65745f6d696e741870616c6c65743c50656e64696e674d696e745574786f040454000010011c7574786f5f69642c01185574786f49640001286163636f756e745f6964000130543a3a4163636f756e74496400014072656d61696e696e675f616d6f756e74c00128543a3a42616c616e63650001506d61785f616d6f756e745f7065725f6672616d65c00128543a3a42616c616e6365000095070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400510601185665633c543e000099070c2c70616c6c65745f6d696e741870616c6c65743c4d696e745175657565437572736f7200000c01487061796f75745f73746172745f696e6465782c01244d696e74496e64657800014c7061796f75745f637572736f725f696e6465782c01244d696e74496e6465780001587061796f75745f637572736f725f6672616d655f69648d01013c4f7074696f6e3c4672616d6549643e00009d070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0130045601180453000004001d06013842547265654d61703c4b2c20563e0000a1070000040810a50700a5070c2c70616c6c65745f6d696e741870616c6c6574284d696e74416374696f6e0404420118000c01306172676f6e5f6275726e6564180104420001306172676f6e5f6d696e74656418010442000138626974636f696e5f6d696e746564180104420000a9070c3473705f61726974686d65746963287065725f7468696e67731c50657263656e740000040008010875380000ad070c2c70616c6c65745f6d696e741870616c6c6574144572726f720404540001044c546f6f4d616e7950656e64696e674d696e7473000000048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb1070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401b507045300000400bd0701185665633c543e0000b5070c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c010869648d0201384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73b907011c526561736f6e730000b9070c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000bd07000002b50700c1070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c507045300000400c90701185665633c543e0000c5070c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e746966696572018d021c42616c616e636501180008010869648d020144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000c907000002c50700cd070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d107045300000400d50701185665633c543e0000d10714346672616d655f737570706f72741874726169747318746f6b656e73106d697363204964416d6f756e740808496401a1011c42616c616e63650118000801086964a10101084964000118616d6f756e7418011c42616c616e63650000d507000002d10700d9070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401dd07045300000400e90701185665633c543e0000dd0714346672616d655f737570706f72741874726169747318746f6b656e73106d697363204964416d6f756e740808496401e1071c42616c616e63650118000801086964e10701084964000118616d6f756e7418011c42616c616e63650000e10708346172676f6e5f72756e74696d654c52756e74696d65467265657a65526561736f6e00010430426c6f636b526577617264730400e507018870616c6c65745f626c6f636b5f726577617264733a3a467265657a65526561736f6e00130000e5070c5070616c6c65745f626c6f636b5f726577617264731870616c6c657430467265657a65526561736f6e000104404d617475726174696f6e506572696f6400000000e907000002dd0700ed070c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef1070c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef5070c3c70616c6c65745f74785f70617573651870616c6c6574144572726f720404540001102049735061757365640000044c5468652063616c6c206973207061757365642e284973556e706175736564000104545468652063616c6c20697320756e7061757365642e28556e7061757361626c65000204b45468652063616c6c2069732077686974656c697374656420616e642063616e6e6f74206265207061757365642e204e6f74466f756e64000300048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef907086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000fd0710346672616d655f737570706f7274187472616974731c73746f72616765184e6f44726f7004045401010800040001080104540000010818346672616d655f737570706f72741874726169747318746f6b656e732066756e6769626c6524696d62616c616e636524496d62616c616e63650c04420118184f6e44726f7000384f70706f736974654f6e44726f700000040118616d6f756e7418010442000005080c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e09080c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000048053656e646572206d75737420626520746865205375646f206163636f756e742e04684572726f7220666f7220746865205375646f2070616c6c65742e0d080c3c70616c6c65745f74726561737572791870616c6c6574444672616d655661756c744361706974616c04045400000801206672616d655f69642c011c4672616d6549640001187661756c7473110801f8426f756e64656442547265654d61703c5661756c7449642c205661756c744361706974616c3c543e2c20543a3a4d61785661756c7473506572506f6f6c3e000011080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011004560115080453000004002508013842547265654d61703c4b2c20563e000015080c3c70616c6c65745f74726561737572791870616c6c6574305661756c744361706974616c0404540000080150626f6e645f6c6f745f616c6c6f636174696f6e73190801e4426f756e6465645665633c426f6e644c6f74416c6c6f636174696f6e2c20543a3a4d61785472656173757279436f6e7472696275746f72733e000138656c696769626c655f626f6e6473d40114426f6e6473000019080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011d08045300000400210801185665633c543e00001d080c3c70616c6c65745f74726561737572791870616c6c657444426f6e644c6f74416c6c6f636174696f6e000008012c626f6e645f6c6f745f69642c0124426f6e644c6f74496400011c70726f72617461e00124466978656455313238000021080000021d08002508042042547265654d617008044b01100456011508000400290800000029080000022d08002d08000004081015080031080c3c70616c6c65745f74726561737572791870616c6c6574704672616d654172676f6e6f74426f6e645061727469636970616e747304045400000c01206672616d655f69642c011c4672616d65496400012c746f74616c5f626f6e6473d40114426f6e6473000124626f6e645f6c6f7473350801dc426f756e6465645665633c426f6e644c6f7453756d6d6172792c20543a3a4d61784163746976654172676f6e6f74426f6e644c6f74733e000035080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540139080453000004003d0801185665633c543e000039080c3c70616c6c65745f74726561737572791870616c6c657438426f6e644c6f7453756d6d617279000008012c626f6e645f6c6f745f69642c0124426f6e644c6f744964000114626f6e6473d40114426f6e647300003d0800000239080041080c3c70616c6c65745f74726561737572791870616c6c65741c426f6e644c6f7404045400002801146f776e6572000130543a3a4163636f756e74496400011c70726f6772616d4508012c426f6e6450726f6772616d000114626f6e6473d40114426f6e6473000140637265617465645f6672616d655f69642c011c4672616d65496400014c7061727469636970617465645f6672616d6573d4010c7533320001706c6173745f6672616d655f6561726e696e67735f6672616d655f69648d01013c4f7074696f6e3c4672616d6549643e00014c6c6173745f6672616d655f6561726e696e6773850101484f7074696f6e3c543a3a42616c616e63653e00014c63756d756c61746976655f6561726e696e6773c00128543a3a42616c616e636500014072656c656173655f6672616d655f69648d01013c4f7074696f6e3c4672616d6549643e00013872656c656173655f726561736f6e490801644f7074696f6e3c426f6e6452656c65617365526561736f6e3e000045080c3c70616c6c65745f74726561737572791870616c6c65742c426f6e6450726f6772616d000108145661756c740c01207661756c745f6964d4011c5661756c74496400013c73686172696e675f70657263656e744503011c5065726d696c6c000134626f6e75735f70657263656e744503011c5065726d696c6c0000001c4172676f6e6f7400010000490804184f7074696f6e04045401e5010108104e6f6e6500000010536f6d650400e50100000100004d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400510601185665633c543e000051080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540139080453000004003d0801185665633c543e000055080c3c70616c6c65745f74726561737572791870616c6c6574144572726f7204045400014850426f6e64507572636861736552656a6563746564000004dc54686520707572636861736520776f756c64206e6f7420656e74657220746865207661756c742773206163636570746564206c6973742e785661756c744e6f74416363657074696e67426f6e64507572636861736573000104a8546865207661756c74206973206e6f7420616363657074696e6720626f6e64207075726368617365732e60426f6e64507572636861736542656c6f774d696e696d756d000204a45468652070757263686173652069732062656c6f7720746865206d696e696d756d20616d6f756e742e34496e7465726e616c4572726f720003046c416e20696e7465726e616c206572726f72206f636375727265642e6c4d61784163636570746564426f6e644c6f74734578636565646564000404fc546865207661756c7420616c72656164792068617320746865206d6178696d756d206e756d626572206f6620616363657074656420626f6e64206c6f74732e784d617850656e64696e67426f6e6452656c65617365734578636565646564000504f0546f6f206d616e7920626f6e64206c6f742072656c656173657320617265207363686564756c656420666f72207468652073616d65206672616d652e3c426f6e644c6f744e6f74466f756e640006048054686520626f6e64206c6f7420636f756c64206e6f7420626520666f756e642e3c4e6f74426f6e644c6f744f776e6572000704945468652063616c6c657220646f6573206e6f74206f776e2074686520626f6e64206c6f742e5c426f6e644c6f74416c726561647952656c656173696e67000804b854686520626f6e64206c6f7420697320616c7265616479207363686564756c656420666f722072656c656173652e64426f6e64507572636861736541626f766553656375726974790009043101546865207661756c7420646f65736e2774206861766520656e6f75676820626974636f696e20736563757269747920746f20737570706f7274207468697320626f6e6420707572636861736598416374697665426f6e64416d6f756e7442656c6f77456e63756d62657265644261636b696e67000a0841014c69717569646174696e67207468697320626f6e64206c6f7420776f756c642074616b6520746865206163636f756e742062656c6f77206974732063726f7373636861696e2d656e63756d6265726564447472656173757279206261636b696e672e5c426f6e7573417070726f76616c57726f6e675661756c74000b04d054686520626f6e757320617070726f76616c20776173207369676e656420666f72206120646966666572656e74207661756c742e64426f6e7573417070726f76616c57726f6e674163636f756e74000c04e854686520626f6e757320617070726f76616c20776173207369676e656420666f72206120646966666572656e742062656e65666963696172792e50426f6e7573417070726f76616c45787069726564000d048c54686520626f6e757320617070726f76616c20616c726561647920657870697265642e70426f6e7573417070726f76616c4578697374696e67426f6e644c6f74000e04d85468652062656e656669636961727920616c726561647920686173206120626f6e64206c6f7420666f722074686973207661756c742e74496e76616c6964426f6e7573417070726f76616c5369676e6174757265000f04e054686520626f6e757320617070726f76616c207369676e617475726520697320696e76616c6964206f7220756e617574686f72697a65642e784172676f6e6f74426f6e64507572636861736542656c6f774375746f66660010041501546865204172676f6e6f7420626f6e6420707572636861736520646964206e6f742062656174207468652063757272656e74206163746976652d736574206375746f66662e6c4172676f6e6f74426f6e64507572636861736541626f76654361700011040901546865204172676f6e6f7420626f6e6420707572636861736520776f756c642065786365656420746865206163746976652063697263756c6174696f6e206361702e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e59080c4870616c6c65745f6665655f636f6e74726f6c1870616c6c6574144572726f720404540001044c53706f6e736f726564466565546f6f4869676800000425015468652072657175657374656420746970202b2066656520697320686967686572207468616e20746865206d6178696d756d20616c6c6f776564206279207468652073706f6e736f72048054686520604572726f726020656e756d206f6620746869732070616c6c65742e5d080c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c6574484f7065726174696f6e616c4163636f756e7404045400004c01347661756c745f6163636f756e74000130543a3a4163636f756e7449640001386d696e696e675f6163636f756e74000130543a3a4163636f756e744964000144656e6372797074696f6e5f7075626b6579550401584f7061717565456e6372797074696f6e5075626b6579000140757073747265616d5f6163636f756e74bc01504f7074696f6e3c543a3a4163636f756e7449643e000184756e69737761705f6172676f6e5f7472616e73666572735f696e5f616d6f756e74180128543a3a42616c616e63650001586163636f756e745f626974636f696e5f616d6f756e74180128543a3a42616c616e63650001646163636f756e745f7661756c745f626f6e645f616d6f756e74180128543a3a42616c616e63650001347661756c745f63726561746564200110626f6f6c0001547661756c745f626974636f696e5f6163637275616c180128543a3a42616c616e636500016c7661756c745f626974636f696e5f6170706c6965645f746f74616c180128543a3a42616c616e636500014c6d696e696e675f736561745f6163637275616cd4010c7533320001646d696e696e675f736561745f6170706c6965645f746f74616cd4010c7533320001806f7065726174696f6e616c5f63657274696669636174696f6e735f636f756e74d4010c75333200014c6163636573735f636f64655f70656e64696e67200110626f6f6c000158617661696c61626c655f6163636573735f636f646573d4010c753332000150726577617264735f6561726e65645f636f756e74d4010c753332000154726577617264735f6561726e65645f616d6f756e74180128543a3a42616c616e6365000160726577617264735f636f6c6c65637465645f616d6f756e74180128543a3a42616c616e636500016869735f6f7065726174696f6e616c6c795f636572746966696564200110626f6f6c000061080c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c65743452657761726473436f6e666967041c42616c616e63650118000801806f7065726174696f6e616c5f63657274696669636174696f6e5f726577617264c0011c42616c616e63650001986f7065726174696f6e616c5f63657274696669636174696f6e5f626f6e75735f726577617264c0011c42616c616e6365000065080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000069080c6c70616c6c65745f6f7065726174696f6e616c5f6163636f756e74731870616c6c6574144572726f7204045400015444416c726561647952656769737465726564000004d45468652063616c6c657220616c7265616479207265676973746572656420616e206f7065726174696f6e616c206163636f756e742e70496e76616c6964526567697374726174696f6e5375626d69747465720001040d015468652063616c6c6572206973206e6f74206f6e65206f6620746865206163636f756e747320696e636c7564656420696e2074686520726567697374726174696f6e2e504163636f756e74416c72656164794c696e6b656400020425014f6e65206f66207468652070726f7669646564206163636f756e747320697320616c7265616479206c696e6b656420746f20616e206f7065726174696f6e616c206163636f756e742e4c496e76616c69644163636f756e7450726f6f66000304d84f6e65206f6620746865206c696e6b6564206163636f756e74206f776e6572736869702070726f6f667320697320696e76616c69642e544e6f744f7065726174696f6e616c4163636f756e74000404f854686520726571756573746564206163636f756e7420686173206e6f742072656769737465726564206f7065726174696f6e616c206163636f756e74732e68526567697374726174696f6e496e766974655265717569726564000504f8412076616c696420696e7669746520697320726571756972656420746f20726567697374657220616e206f7065726174696f6e616c206163636f756e742e48496e76616c696441636365737350726f6f660006049454686520757073747265616d206163636573732070726f6f6620697320696e76616c69642e74557073747265616d4e6f744f7065726174696f6e616c4163636f756e7400070439015468652072657175657374656420757073747265616d206163636f756e7420646f6573206e6f74206861766520612072656769737465726564206f7065726174696f6e616c206163636f756e742e384d696e696d756d734e6f744d6574000804f854686520726571756573746564206163636f756e7420646f6573206e6f742063757272656e746c79207361746973667920746865206d696e696d756d732e5c43616e6e6f744772616e74416363657373546f53656c66000904a4416e206163636f756e742063616e6e6f74206772616e742061636365737320746f20697473656c662e604e6f50726f677265737355706461746550726f7669646564000a04e8546865207265717565737465642070726f677265737320706174636820646f6573206e6f7420636f6e7461696e20616e7920757064617465732e58456e63727970746564536572766572546f6f4c6f6e67000b04fc54686520656e6372797074656420736572766572207061796c6f616420657863656564732074686520636f6e66696775726564206d6178206c656e6774682e5c4e6f74557073747265616d4f66446f776e73747265616d000c0431015468652063616c6c6572206973206e6f742074686520757073747265616d206163636f756e7420666f72207468652072657175657374656420646f776e73747265616d206163636f756e742e404e6f50656e64696e6752657761726473000d04e0546865206f7065726174696f6e616c206163636f756e7420686173206e6f2070656e64696e67207265776172647320746f20636c61696d2e5c526577617264436c61696d42656c6f774d696e696d756d000e04a452657761726420636c61696d73206d757374206265206174206c65617374206f6e65204172676f6e2e60526577617264436c61696d4e6f7457686f6c654172676f6e000f04b452657761726420636c61696d73206d7573742062652077686f6c65204172676f6e20696e6372656d656e74732e64526577617264436c61696d4578636565647350656e64696e67001004cc546865207265717565737465642072657761726420636c61696d20657863656564732070656e64696e6720726577617264732e645472656173757279496e73756666696369656e7446756e6473001104350154686520747265617375727920646f6573206e6f742063757272656e746c79206861766520656e6f75676820617661696c61626c6520726573657276657320666f722074686520636c61696d2e74416c72656164794f7065726174696f6e616c6c79436572746966696564001204bc546865206163636f756e7420697320616c7265616479206f7065726174696f6e616c6c79206365727469666965642e604e6f74456c696769626c65466f7241637469766174696f6e001304ec546865206163636f756e7420686173206e6f7420736174697366696564206f7065726174696f6e616c20726571756972656d656e7473207965742e84557073747265616d4861734e6f417661696c61626c65416363657373436f64657300140421015468652072657175657374656420757073747265616d206163636f756e7420646f6573206e6f74206861766520616e7920617661696c61626c652061636365737320636f6465732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e6d080c6070616c6c65745f657468657265756d5f76657269666965721474797065736846696e616c697a6564426561636f6e48656164657253746174650000040110736c6f742c010c753634000071080c6070616c6c65745f657468657265756d5f766572696669657214747970657354457865637574696f6e486561646572416e63686f720000180130626c6f636b5f6e756d6265722c0150457865637574696f6e426c6f636b4e756d62657200014074696d657374616d705f6d696c6c69732c010c753634000128626c6f636b5f68617368340148457865637574696f6e426c6f636b4861736800012c706172656e745f68617368340148457865637574696f6e426c6f636b4861736800012873746174655f726f6f743401104832353600013472656365697074735f726f6f743401305265636569707473526f6f74000075080c6070616c6c65745f657468657265756d5f76657269666965721474797065735453796e63436f6d6d6974746565507265706172656400000c0110726f6f743401104832353600011c7075626b6579737908011901426f756e6465645665633c5075626c69634b657950726570617265642c20436f6e73745533323c7b2053594e435f434f4d4d49545445455f424f554e445f53495a45207d3e3e0001406167677265676174655f7075626b65797d0801445075626c69634b65795072657061726564000079080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017d08045300000400950801185665633c543e00007d080c58736e6f776272696467655f6d696c6167726f5f626c73106b657973245075626c69634b65790000040114706f696e748108011c47726f7570473100008108103c736e6f776272696467655f616d636c18626c733338310c6563700c45435000000c010478850801084650000104798508010846500001047a85080108465000008508103c736e6f776272696467655f616d636c18626c733338310866700846500000080104788908010c42696700010c7865739108010c69333200008908103c736e6f776272696467655f616d636c18626c733338310c6269670c4269670000040104778d0801345b4368756e6b3b204e4c454e5d00008d080000030e00000091080091080000050b0095080000027d080099080c406172676f6e5f7072696d69746976657320657468657265756d50457468657265756d426561636f6e5072657365740001081c4d61696e6e65740000001c4d696e696d616c000100009d080c6070616c6c65745f657468657265756d5f76657269666965721870616c6c6574144572726f7204045400016068536b697070656453796e63436f6d6d6974746565506572696f640000006c53796e63436f6d6d6974746565557064617465526571756972656400010040497272656c6576616e74557064617465000204d8417474657374656420686561646572206973206f6c646572207468616e206c61746573742066696e616c697a6564206865616465722e3c4e6f74426f6f747374726170706564000300a453796e63436f6d6d69747465655061727469636970616e74734e6f7453757065726d616a6f7269747900040060496e76616c69644865616465724d65726b6c6550726f6f660005007c496e76616c696453796e63436f6d6d69747465654d65726b6c6550726f6f660006006c496e76616c6964457865637574696f6e48656164657250726f6f6600070064496e76616c696446696e616c697a6564486561646572476170000804410154686520676170206265747765656e2066696e616c697a65642068656164657273206973206c6172676572207468616e207468652072657461696e656420686973746f726963616c2077696e646f772e64496e76616c69644261636b66696c6c486561646572526f6f7400090090457865637574696f6e486561646572416e63686f72416c7265616479496d706f72746564000a0088457865637574696f6e486561646572416e63686f724e6f74486973746f726963616c000b00604865616465724861736854726565526f6f744661696c6564000c006c426c6f636b426f64794861736854726565526f6f744661696c6564000d007c53796e63436f6d6d69747465654861736854726565526f6f744661696c6564000e00745369676e696e67526f6f744861736854726565526f6f744661696c6564000f0068466f726b446174614861736854726565526f6f744661696c656400100080457870656374656446696e616c697a65644865616465724e6f7453746f72656400110068424c53507265706172655075626c69634b6579734661696c656400120054424c53566572696669636174696f6e4661696c656400130058556e6578706563746564426561636f6e50726573657400140044496e76616c6964557064617465536c6f7400150068496e76616c696453796e63436f6d6d6974746565557064617465001608550154686520676976656e20757064617465206973206e6f7420696e2074686520657870656374656420706572696f642c206f722074686520676976656e206e6578742073796e6320636f6d6d697474656520646f6573b46e6f74206d6174636820746865206e6578742073796e6320636f6d6d697474656520696e2073746f726167652e1848616c746564001700048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea1080c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574544163636f756e745472616e73666572546f74616c7304045400002001306d6963726f676f6e735f696e180128543a3a42616c616e63650001346d6963726f676f6e735f6f7574180128543a3a42616c616e63650001606172676f6e5f7472616e73666572735f696e5f636f756e74d4010c7533320001646172676f6e5f7472616e73666572735f6f75745f636f756e74d4010c7533320001306d6963726f6e6f74735f696e180128543a3a42616c616e63650001346d6963726f6e6f74735f6f7574180128543a3a42616c616e63650001686172676f6e6f745f7472616e73666572735f696e5f636f756e74d4010c75333200016c6172676f6e6f745f7472616e73666572735f6f75745f636f756e74d4010c7533320000a5080000040809020000a9080c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c657454476c6f62616c49737375616e6365436f756e63696c04045400000c016c65706f63685f6d6963726f676f6e735f7065725f6172676f6e6f74180128543a3a42616c616e636500011c6d656d62657273ad08013101426f756e64656442547265654d61703c483136302c20476c6f62616c49737375616e6365436f756e63696c4d656d6265723c543e2c20543a3a0a4d6178436f756e63696c4d656d626572733e000130746f74616c5f776569676874180128543a3a42616c616e63650000ad080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011102045601b108045300000400b508013842547265654d61703c4b2c20563e0000b1080c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c65746c476c6f62616c49737375616e6365436f756e63696c4d656d62657204045400000c01286163636f756e745f6964000130543a3a4163636f756e7449640001187369676e65721102011048313630000118776569676874180128543a3a42616c616e63650000b508042042547265654d617008044b011102045601b108000400b908000000b908000002bd0800bd08000004081102b10800c1080000040809023000c5080c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c657464436f756e63696c417070726f76616c5175657565456e7472790404540000200158617070726f76696e675f636f756e63696c5f68617368340110483235360001187461726765741d02015c436f756e63696c417070726f76616c546172676574496400014c7461726765745f7061796c6f61645f68617368340110483235360001306475655f6672616d655f69642c011c4672616d65496400015870726576696f75735f617070726f76616c5f6861736834011048323536000134617070726f76616c5f6861736834011048323536000154617070726f7665645f746f74616c5f776569676874180128543a3a42616c616e63650001287369676e617475726573c90801f0426f756e64656442547265654d61703c483136302c204b656363616b5369676e61747572652c20543a3a4d6178436f756e63696c4d656d626572733e0000c9080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0111020456011504045300000400cd08013842547265654d61703c4b2c20563e0000cd08042042547265654d617008044b0111020456011504000400d108000000d108000002d50800d508000004081102150400d9080c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574404d696e74696e67417574686f7269747904045400003401286163636f756e745f6964000130543a3a4163636f756e74496400014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e00015c64657374696e6174696f6e5f7369676e696e675f6b657911020110483136300001147374617465dd0801544d696e74696e67417574686f726974795374617465000194676174657761795f72656d61696e696e675f6d6963726f676f6e5f636f6c6c61746572616c180128543a3a42616c616e6365000194676174657761795f72656d61696e696e675f6d6963726f6e6f745f636f6c6c61746572616c180128543a3a42616c616e636500019070656e64696e675f72657365727665645f6d6963726f676f6e5f636f6c6c61746572616c180128543a3a42616c616e636500019070656e64696e675f72657365727665645f6d6963726f6e6f745f636f6c6c61746572616c180128543a3a42616c616e636500016c6163746976655f70656e64696e675f7472616e736665725f696473e108012901426f756e6465645665633c483235362c3c5420617320436f6e6669673e3a3a0a4d617850656e64696e675472616e736665724f75747350657244657374696e6174696f6e436861696e3e00017c61637469766174696f6e5f617070726f76616c5f71756575655f6e6f6e6365300164436f756e63696c417070726f76616c51756575654e6f6e636500017c61637469766174696f6e5f626173655f72657061796d656e745f71756f7465c00128543a3a42616c616e636500019061637469766174696f6e5f7369676e61747572655f72657061796d656e745f71756f7465c00128543a3a42616c616e6365000184646561637469766174696f6e5f617070726f76616c5f71756575655f6e6f6e63658d0101844f7074696f6e3c436f756e63696c417070726f76616c51756575654e6f6e63653e0000dd080c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574544d696e74696e67417574686f72697479537461746500010c4450656e64696e6741637469766174696f6e0000001841637469766500010030446561637469766174696e6700020000e1080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400310201185665633c543e0000e5080c6870616c6c65745f63726f7373636861696e5f7472616e73666572307472616e736665725f6f7574485472616e736665724f75744f664172676f6e04045400003001406172676f6e5f6163636f756e745f6964000130543a3a4163636f756e7449640001506172676f6e5f7472616e736665725f6e6f6e63652c015c5472616e736665724f7574526571756573744e6f6e636500014464657374696e6174696f6e5f636861696e0902012c536f75726365436861696e0001546d6963726f676f6e735f7065725f6172676f6e6f74c00128543a3a42616c616e636500014c64657374696e6174696f6e5f6163636f756e74110201104831363000016876616c69645f756e74696c5f657468657265756d5f626c6f636b2c014c457468657265756d426c6f636b4e756d62657200011461737365741902012441737365744b696e64000118616d6f756e74180128543a3a42616c616e63650001546d696e74696e675f617574686f726974795f746970180128543a3a42616c616e6365000164746f74616c5f61747461636865645f636f6c6c61746572616c180128543a3a42616c616e63650001986d696e74696e675f617574686f726974795f636f6c6c61746572616c5f62795f7369676e6572e908015101426f756e64656442547265654d61703c483136302c204d696e74696e67417574686f726974795472616e736665725265736572766174696f6e3c543e2c20543a3a0a4d6178436f756e63696c4d656d626572733e0001147374617465fd0801405472616e736665724f757453746174650000e9080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011102045601ed08045300000400f108013842547265654d61703c4b2c20563e0000ed080c6870616c6c65745f63726f7373636861696e5f7472616e73666572307472616e736665725f6f75748c4d696e74696e67417574686f726974795472616e736665725265736572766174696f6e040454000010014c6d6963726f676f6e5f636f6c6c61746572616c180128543a3a42616c616e636500014c6d6963726f6e6f745f636f6c6c61746572616c180128543a3a42616c616e6365000140636f6c6c61746572616c5f7368617265180128543a3a42616c616e63650001247369676e61747572651504013c4b656363616b5369676e61747572650000f108042042547265654d617008044b011102045601ed08000400f508000000f508000002f90800f908000004081102ed0800fd080c6870616c6c65745f63726f7373636861696e5f7472616e73666572307472616e736665725f6f7574405472616e736665724f757453746174650001081c537461727465640000001452656164790001000001090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010509045300000400090901185665633c543e000005090c6870616c6c65745f63726f7373636861696e5f7472616e73666572307472616e736665725f6f75747c50656e64696e67436f6c6c61746572616c697a6174696f6e5265717565737404045400000c012c7472616e736665725f69643401104832353600015072656d61696e696e675f636f6c6c61746572616c180128543a3a42616c616e636500017c72656d61696e696e675f6d696e74696e675f617574686f726974795f746970180128543a3a42616c616e6365000009090000020509000d090c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c657458536f75726365436861696e43697263756c6174696f6e04045400000801446172676f6e5f63697263756c6174696f6e180128543a3a42616c616e636500014c6172676f6e6f745f63697263756c6174696f6e180128543a3a42616c616e6365000011090c6870616c6c65745f63726f7373636861696e5f7472616e736665721870616c6c6574144572726f720404540001d878496e76616c69645472616e73666572546f4172676f6e41637469766974790000042d0154686520457468657265756d206576656e7420746f70696373206f72207061796c6f616420646f206e6f74206d6174636820605472616e73666572546f4172676f6e53746172746564602e704e6f4761746577617950726f6f66426c6f636b7350726f7669646564000104f04174206c65617374206f6e652070726f76656e20676174657761792d616374697669747920626c6f636b206d75737420626520737570706c6965642e6c4e6f476174657761794163746976697469657350726f766964656400020429014174206c65617374206f6e652067617465776179206163746976697479206c6f67206d75737420626520737570706c69656420776974682074686520726563656970742070726f6f662e30496e76616c696450726f6f66000304c854686520457468657265756d2076657269666965722072656a65637465642074686520737570706c6965642070726f6f662e44556e737570706f72746564536f75726365000404d854686520736f7572636520636861696e206973206e6f7420636f6e6669677572656420666f7220696e626f756e6420636c61696d732e48556e737570706f7274656447617465776179000504e8546865206761746577617920646f6573206e6f74206d617463682074686520636f6e66696775726564206761746577617920616464726573732e40556e737570706f72746564546f6b656e000604e054686520746f6b656e206973206e6f7420737570706f7274656420756e6465722074686520636f6e6669677572656420676174657761792e98556e657870656374656450726576696f75734761746577617941637469766974794e6f6e636500070449015468652063616c6c6572277320657870656374656420616c72656164792d70726f76656e2067617465776179206163746976697479206e6f6e6365206973207374616c65206f7220696e636f72726563742e78556e65787065637465644761746577617941637469766974794e6f6e63650008040d015468652070726f76656e2067617465776179206163746976697479206e6f6e6365206973206e6f7420746865206e65787420636f6e746967756f7573206e6f6e63652e48496e76616c6964436861696e436f6e666967000904f454686520636f6e6669677572656420736f757263652d636861696e20736861706520697320696e636f6d706c657465206f72206d616c666f726d65642e54496e73756666696369656e744c6971756964697479000a04d4546865206275726e206163636f756e74206c61636b7320656e6f7567682062616c616e636520666f7220746865207061796f75742e604d696e74696e67417574686f726974794e6f74466f756e64000b04090154686520737570706c696564204d696e74696e6720417574686f72697479207369676e696e67206b657920646f6573206e6f74206578697374206c6f63616c6c792e604d696e74696e67417574686f726974794d69736d61746368000c041d01546865206c6f63616c204d696e74696e6720417574686f7269747920646964206e6f74206d61746368207468652070726f76656e20457468657265756d2061637469766974792e7c556e65787065637465644d696e74696e67417574686f726974795374617465000d041101546865206c6f63616c204d696e74696e6720417574686f7269747920776173206e6f7420696e20746865206578706563746564206c6966656379636c652073746174652e44556e6b6e6f776e4f776e65725661756c74000e04b0546865206c6f63616c206f776e6572207661756c7420636f756c64206e6f74206265207265736f6c7665642e84496e76616c69644d696e74696e67417574686f726974795369676e696e674b6579000f04d854686520737570706c696564204d696e74696e6720417574686f72697479207369676e696e67206b657920697320696e76616c69642e844d696e74696e67417574686f72697479416c726561647952656769737465726564001004550154686520737570706c696564204d696e74696e6720417574686f72697479207369676e696e67206b657920616c7265616479206861732061206c697665206c6f63616c20617574686f72697479207265636f72642e98496e76616c69644d696e74696e67417574686f726974795369676e696e674b657950726f6f6600110841015468652070726f7669646564204d696e74696e6720417574686f72697479207369676e65722070726f6f6620646964206e6f74206d6174636820746865207265636f766572656420457468657265756d1c7369676e65722e84496e76616c69644d696e74696e67417574686f72697479436f6c6c61746572616c001204d454686520737570706c696564204d696e74696e6720417574686f7269747920636f6c6c61746572616c20697320696e76616c69642e74476c6f62616c49737375616e6365436f756e63696c4e6f74466f756e6400130449015468652061637469766520476c6f62616c2049737375616e636520436f756e63696c20686173206e6f74206265656e2073656564656420666f7220746869732064657374696e6174696f6e20636861696e2e70496e76616c6964476c6f62616c49737375616e6365436f756e63696c001404250154686520737570706c69656420476c6f62616c2049737375616e636520436f756e63696c20697320656d707479206f7220696e7465726e616c6c7920696e636f6e73697374656e742e904475706c6963617465476c6f62616c49737375616e6365436f756e63696c5369676e6572001504350154686520737570706c69656420476c6f62616c2049737375616e636520436f756e63696c20636f6e7461696e73207468652073616d65207369676e6572206d6f7265207468616e206f6e63652e944475706c6963617465476c6f62616c49737375616e6365436f756e63696c4163636f756e74001604390154686520737570706c69656420476c6f62616c2049737375616e636520436f756e63696c20636f6e7461696e73207468652073616d65206163636f756e74206d6f7265207468616e206f6e63652e64496e76616c6964436f756e63696c5369676e657250726f6f6600170439015468652070726f766964656420636f756e63696c207369676e65722070726f6f6620646964206e6f74206d6174636820746865207265636f766572656420457468657265756d207369676e65722e8c476c6f62616c49737375616e6365436f756e63696c4d656d6265724e6f74466f756e640018045501546865206f726967696e206973206e6f7420616e2061637469766520476c6f62616c2049737375616e636520436f756e63696c206d656d62657220666f72207468652064657374696e6174696f6e20636861696e2e68436f756e63696c5369676e65724e6f74526567697374657265640019042d01546865206163636f756e7420686173206e6f742072656769737465726564206120636f756e63696c207369676e657220666f7220746869732064657374696e6174696f6e20636861696e2e84436f756e63696c417070726f76616c5175657565456e7472794e6f74466f756e64001a04e8546865204d696e74696e6720417574686f7269747920617070726f76616c20717565756520656e74727920646f6573206e6f742065786973742e78436f756e63696c417070726f76616c416c72656164795265636f72646564001b0409015468697320636f756e63696c206d656d62657220616c726561647920617070726f7665642074686520717565756564204d696e74696e6720417574686f726974792e64496e76616c6964466f72636553657441667465724e6f6e6365001c04110154686520666f7263652d7365742063757420706f696e742077617320626568696e6420616c726561647920636f6e6669726d65642071756575652070726f67726573732e9843616e6e6f74466f72636553657451756f72756d417070726f7665645175657565456e747279001d04310154686520666f7263652d7365742063757420776f756c642064697363617264206120717565756520656e747279207468617420616c726561647920686173206c6f63616c2071756f72756d2e7c496e76616c6964436f756e63696c417070726f76616c5369676e6174757265001e044d015468652070726f766964656420636f756e63696c20617070726f76616c207369676e617475726520646964206e6f74206d617463682074686520657870656374656420457468657265756d207369676e65722e8c4e6f436f756e63696c417070726f76616c5369676e61747572657350726f7669646564001f04e44174206c65617374206f6e6520636f756e63696c20617070726f76616c207369676e6174757265206d75737420626520737570706c6965642e9c496e73756666696369656e74436f6d6d69747465644d6963726f676f6e436f6c6c61746572616c0020084901546865206f70657261746f7220646f6573206e6f74206861766520656e6f7567682072656d61696e696e6720636f6d6d6974746564206d6963726f676f6e20636f6c6c61746572616c20666f722074686973484d696e74696e6720417574686f726974792e98496e73756666696369656e74436f6d6d69747465644172676f6e6f74436f6c6c61746572616c0021084501546865206f70657261746f7220646f6573206e6f74206861766520656e6f7567682072656d61696e696e6720636f6d6d6974746564204172676f6e6f7420636f6c6c61746572616c20666f722074686973484d696e74696e6720417574686f726974792eb0496e76616c69644d696e74696e67417574686f72697479446561637469766174696f6e5369676e61747572650022041d015265736572766564206c6567616379206572726f7220666f7220696e76616c6964207369676e65722d6b6579656420646561637469766174696f6e207369676e6174757265732e68496e76616c69644d6963726f676f6e735065724172676f6e6f740023043d0154686520636f756e63696c2d6d616e61676564204172676f6e6f7420666c6f6f7220636f756c64206e6f742062652064657465726d696e65642066726f6d2063757272656e742070726963696e672e984d696e74696e67417574686f72697479436f6c6c61746572616c42656c6f774d696e696d756d0024084d0154686520737570706c696564204d696e74696e6720417574686f7269747920636f6c6c61746572616c2069732062656c6f772074686520636f6e66696775726564207065722d636861696e206d696e696d756d686e6f726d616c697a6564206d6963726f676f6e2076616c75652ec4496e76616c69644d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e67002504090154686520636f6e666967757265642061637469766174696f6e2072657061796d656e742070726963696e6720697320696e7465726e616c6c7920696e76616c69642ec44d697373696e674d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e67002604350154686520636f6e666967757265642061637469766174696f6e2072657061796d656e742070726963696e67206973206d697373696e6720666f72207468697320736f7572636520636861696e2e58496e76616c69644761746577617941637469766974790027043d0154686520457468657265756d206576656e7420746f70696373206f72207061796c6f616420646f206e6f74206d61746368206120737570706f7274656420676174657761792061637469766974792e444761746577617953796e635061757365640028083d015468697320736f7572636520636861696e206973207061757365642064756520746f20676174657761792073796e63206d6973616c69676e6d656e7420616e64206e65656473206f70657261746f72247265636f766572792e60496e76616c69645472616e736665724f7574416d6f756e74002904a0546865207472616e736665722d6f757420616d6f756e74206d757374206265206e6f6e7a65726f2e6c496e76616c69645472616e736665724f7574526563697069656e74002a041501546865207472616e736665722d6f757420726563697069656e74206d757374206265206e6f6e7a65726f20666f72207468652064657374696e6174696f6e20636861696e2e744d697373696e675665726966696564457865637574696f6e426c6f636b002b0845014e6f2076657269666965722d6261636b656420457468657265756d20657865637574696f6e20626c6f636b20697320617661696c61626c6520746f20616e63686f722061207472616e736665722d6f7574386578706972792077696e646f772e6c5374616c655665726966696564457865637574696f6e426c6f636b002c084d01546865206c61746573742076657269666965722d6261636b656420457468657265756d20657865637574696f6e20626c6f636b20697320746f6f206f6c6420746f20736166656c79206f70656e2061206e6577347472616e73666572206f75742e4c5472616e736665724f75744e6f74466f756e64002d04b0546865206f7574626f756e64207472616e73666572207265636f726420646f6573206e6f742065786973742e5c5472616e736665724f7574416c72656164795265616479002e083d01546865206f7574626f756e64207472616e736665722063616e6e6f7420616363657074206d6f726520636f6c6c61746572616c206265636175736520697420697320616c72656164792066756c6c7920636f76657265642e485472616e736665724f757445787069726564002f045d01546865206f7574626f756e64207472616e73666572207265717565737420697320616c72656164792065787069726564206f6e20746865206c617465737420766572696669656420457468657265756d20626c6f636b2e64496e76616c69645472616e73666572436f6c6c61746572616c00300421015468652070726f7669646564207472616e7366657220636f6c6c61746572616c20726f7720697320696e76616c696420666f722074686973207472616e736665722061737365742e7c496e76616c69645472616e73666572436f6c6c61746572616c55706461746500310451015468652070726f7669646564207472616e7366657220636f6c6c61746572616c20726f7720646964206e6f7420616476616e636520746865207369676e65722773206c6f63616c207265736572766174696f6e2e88496e76616c69645472616e73666572436f6c6c61746572616c5369676e61747572650032042901546865207472616e7366657220636f6c6c61746572616c207369676e617475726520646964206e6f74206d617463682074686520617574686f72697479207369676e696e67206b65792e98496e73756666696369656e744d696e74696e67417574686f72697479436f6c6c61746572616c003304590154686520617574686f7269747920646f6573206e6f74206861766520656e6f7567682072656d61696e696e67206761746577617920636f6c6c61746572616c20666f722074686973207472616e7366657220726f772e8c5472616e73666572436f6c6c61746572616c496e6372656d656e74546f6f536d616c6c003408490154686520636f6c6c61746572616c20696e6372656d656e742069732062656c6f772074686520636f6e66696775726564206d696e696d756d20616e6420646f6573206e6f7420636f6d706c65746520746865247472616e736665722e68546f6f4d616e7950656e64696e675472616e736665724f75747300350851015468652064657374696e6174696f6e20636861696e20616c726561647920747261636b7320746865206d6178696d756d206e756d626572206f66206e6f6e2d7465726d696e616c207472616e736665722d6f75742472657175657374732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1509102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730101031043616c6c01f902245369676e61747572650111041445787472610119090004003800000019090000042c1d092109250929092d09310939093d09410945094d09001d0910306672616d655f73797374656d28657874656e73696f6e7338617574686f72697a655f63616c6c34417574686f72697a6543616c6c04045400000000210910306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000250910306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000290910306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e040454000000002d0910306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000310910306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004003509010c45726100003509102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000390910306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400d40120543a3a4e6f6e636500003d0910306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000004109086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400c0013042616c616e63654f663c543e0000450908746672616d655f6d657461646174615f686173685f657874656e73696f6e44436865636b4d657461646174614861736804045400000401106d6f6465490901104d6f64650000490908746672616d655f6d657461646174615f686173685f657874656e73696f6e104d6f64650001082044697361626c65640000001c456e61626c6564000100004d0910306672616d655f73797374656d28657874656e73696f6e73387765696768745f7265636c61696d345765696768745265636c61696d04045400000000510904184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000550908346172676f6e5f72756e74696d651c52756e74696d6500000000801853797374656d011853797374656d501c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e40496e686572656e74734170706c696564010020040004a4205768657468657220616c6c20696e686572656e74732068617665206265656e206170706c6965642e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e24426c6f636b53697a6500001004000cb020546f74616c2073697a652028696e20627974657329206f66207468652063757272656e7420626c6f636b2e00c820547261636b73207468652073697a65206f66207468652068656164657220616e6420616c6c2065787472696e736963732e24426c6f636b486173680101040510348000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510380400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401003c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023435020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d655570677261646500003d0204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e44426c6f636b7354696c6c55706772616465000008040004ec204e756d626572206f6620626c6f636b732074696c6c207468652070656e64696e6720636f64652075706772616465206973206170706c6965642e545570677261646564546f553332526566436f756e740100200400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100200400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500002d02040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a65645570677261646500004902040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e6045787472696e7369635765696768745265636c61696d65640100280800001ca02054686520776569676874207265636c61696d656420666f72207468652065787472696e7369632e002101205468697320696e666f726d6174696f6e20697320617661696c61626c6520756e74696c2074686520656e64206f66207468652065787472696e73696320657865637574696f6e2e2101204d6f726520707265636973656c79207468697320696e666f726d6174696f6e2069732072656d6f76656420696e20606e6f74655f6170706c6965645f65787472696e736963602e007101204c6f67696320646f696e6720736f6d6520706f73742064697370617463682077656967687420726564756374696f6e206d7573742075706461746520746869732073746f7261676520746f2061766f6964206475706c69636174652c20726564756374696f6e2e014d0201581830426c6f636b576569676874735d02fd01c2a0e766000b00a0724e180913ffffffffffffffff2261c91900010bb81711ca5d061332333333333333b3010b00f8d53ad20613ffffffffffffffbf0100002261c91900010bb8bfaddda3081332333333333333f3010b00a0724e180913ffffffffffffffff010b00a89c1346021300000000000000402261c9190000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e6774686d023400003c0000005000000050000004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101000100000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687479024040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e7d026904146172676f6e146172676f6e010000009c0000000a00000054df6acb689907609b0500000037e397fc7c91f5e402000000ccd9de6396c899ca0100000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000bc9d89904f5b923f01000000ab3c0572291feb8b0200000037c8bb1350a9a2a804000000f3ff14d5ab5270590300000061571683e6d7a7c8010000005e4dc2ce83c23f0901000000e6683faaa563317a0200000011de59f9923f03d80100000051c97e4020145cb001000000bab599c4f0d362c601000000fff0fb031985f8a1020000000090f9d890bb0bb20100000005dd9be92cc17d2803000000ed99c5acb25eedf503000000fbc577b9d747efd60100000005000000010484204765742074686520636861696e277320696e2d636f64652076657273696f6e2e28535335385072656669789c082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e019102001c44696765737473011c44696765737473042c54656d7044696765737473000095020400000001800001dd02012454696d657374616d70012454696d657374616d70080c4e6f7701003020000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010020040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e01e1020004344d696e696d756d506572696f6430200100000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e0002204d756c746973696701204d756c746973696704244d756c7469736967730001080502e502e902040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01f50201840c2c4465706f736974426173651840a005000000000000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f721840a00000000000000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e013d05031450726f7879011450726f7879081c50726f78696573010104050041054400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500510544000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01fd020194184050726f78794465706f736974426173651840b004000000000000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f721840a500000000000000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310102000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710102000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f736974426173651840d804000000000000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f7218404a01000000000000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e01610504145469636b7301145469636b73143050726576696f75735469636b010030200000000000000000002c43757272656e745469636b010030200000000000000000002c47656e657369735469636b010030200000000000000000003447656e657369735469636b657201006505080000004c526563656e74426c6f636b7341745469636b7301010405306905040008e820426c6f636b732066726f6d20746865206c61737420313030207469636b732e205472696d6d656420696e206f6e5f696e697469616c697a652ef4204e4f54453a2063616e6e6f7420696e636c756465207468652063757272656e7420626c6f636b206861736820756e74696c206e65787420626c6f636b010d030000016d0505284d696e696e67536c6f7401284d696e696e67536c6f74505c48617341646465644772616e647061526f746174696f6e010020040000384d696e6572734279436f686f72740101040230a80400045901204d696e6572732074686174206172652061637469766520696e207468652063757272656e7420626c6f636b2028706f737420696e697469616c697a6529206279207468656972207374617274696e67206672616d65444163746976654d696e657273436f756e7401009c08000000644d696e65724e6f6e636553636f72696e674279436f686f72740100710504000c610120546869732069732061206c6f6f6b7570206f662065616368206d696e65722773206e6f6e636520746f20757365207768656e207069636b696e672061206265737420617574686f7269747920746f207375626d69742061510120626c6f636b2e2049742773206120626c616b6532203235362068617368206f6620746865206d696e6572206163636f756e7420696420616e642074686520626c6f636b20686173682061742074696d65206f66302061637469766174696f6e2e544172676f6e6f74735065724d696e696e6753656174010018401027000000000000000000000000000004c8204172676f6e6f74732074686174206d757374206265206c6f636b656420746f2074616b652061204d696e657220726f6c65484163636f756e74496e6465784c6f6f6b7570000104020091050400046901204c6f6f6b7570206279206163636f756e7420696420746f2074686520636f72726573706f6e64696e6720696e64657820696e204d696e6572734279436f686f727420616e64204d696e65724e6f6e6365734279436f686f72745442696473466f724e657874536c6f74436f686f72740100a80400080d012054686520636f686f72742073657420746f20676f20696e746f2065666665637420696e20746865206e65787420736c6f742e20546865205665632068617320616c6c882072656769737472616e747320776974682074686569722062696420616d6f756e746452656c65617365644d696e65727342794163636f756e74496401009505040004150120546865206d696e6572732072656c656173656420696e20746865206c61737420626c6f636b20286f6e6c79206b65707420666f7220612073696e676c6520626c6f636b295449734e657874536c6f7442696464696e674f70656e0100200400049420497320746865206e65787420736c6f74207374696c6c206f70656e20666f72206269647354486973746f726963616c42696473506572536c6f740100a505040004050120546865206e756d626572206f6620626964732070657220736c6f7420666f7220746865206c61737420313020736c6f747320286e6577657374206669727374294c417665726167655072696365506572536561740100b105040004050120546865206176657261676520707269636520706572207365617420666f7220746865206c617374203130206672616d657320286e657765737420666972737429304d696e696e67436f6e6669670100b9050c00000004b420546865206d696e696e6720736c6f7420636f6e66696775726174696f6e2073657420696e2067656e657369732c4e6578744672616d65496401003020000000000000000008750120546865206e657874206672616d6549642e2041206672616d6520696e206172676f6e2069732074686520323420686f757273206265747765656e20746865207374617274206f662074776f20646966666572656e74206d696e696e672420636f686f7274732e4c4e65776c79537461727465644672616d654964000030040004942049732061206e6577206672616d65207374617274656420696e207468697320626c6f636b384e657874436f686f727453697a65010010100000000004f420546865206e756d626572206f6620616c6c6f77206d696e65727320746f2062696420666f7220746865206e657874206d696e696e6720636f686f7274805363686564756c6564436f686f727453697a654368616e676542794672616d650100bd0504000ce420546865207570636f6d696e67206368616e676573207363686564756c656420666f7220636f686f72742073697a65206279206672616d652e5501204361706163697479206f6620313120616c6c6f777320666f72203130206672616d657320776f727468206f66207363686564756c6564206368616e67657320706c7573206f6e6520776f726b696e6720736c6f74d020746f207363686564756c652061206e6577206368616e676520647572696e67206672616d652066696e616c697a6174696f6e2e644672616d655265776172645469636b7352656d61696e696e6701003020000000000000000004c820546865206e756d626572206f6620726577617264207469636b732072656d61696e696e6720696e20746865206672616d65584672616d655374617274426c6f636b4e756d626572730100c905040004a8205468652070726576696f7573203130206672616d6520737461727420626c6f636b206e756d626572733c4672616d6553746172745469636b730100d10504000488205468652070726576696f7573203130206672616d65207374617274207469636b734c54656d704672616d65496e666f4469676573740000c102040004982054656d706f726172792073746f726520746865206672616d6520696e666f2064696765737401110301a4244c4672616d65735065724d696e696e675465726d10100a00000004a820546865206e756d626572206f66206672616d65732061206d696e6572206f7065726174657320666f72344d696e436f686f727453697a6510100a00000004a020546865206d696e696d756d206e756d626572206f66206d696e6572732070657220636f686f7274344d6178436f686f727453697a65101090000000085d0120486f77206d616e79206e6577206d696e6572732063616e20626520696e2074686520636f686f727420666f72206561636820736c6f742e205468652061637475616c206d6178696d756d2077696c6c2061646a757374302064796e616d6963616c6c7958496e697469616c4172676f6e6f7473506572536561741840102700000000000000000000000000000435012054686520696e697469616c206172676f6e6f7473206e6565646564207065722073656174206265666f72652061207072696f722d646179206d656469616e20697320617661696c61626c652e704172676f6e6f74426964436f6c6c61746572616c4d756c7469706c6518400200000000000000000000000000000004510120546865206d756c7469706c65206f6620746865207072696f722d646179206c6f776572206d656469616e2077696e6e696e67206269642074686174206d75737420626520636f6c6c61746572616c697a65642e48546172676574507269636550657253656174184000ca9a3b000000000000000000000000046c20546865207461726765742070726963652070657220736561742e7050726963655065725365617441646a7573746d656e7444616d706572e040000014bbf08ac6020000000000000000040901205468652064616d706572206f6e207468652070726963652070657220736561742061646a7573746d656e74202866726f6d20746865206c61737420707269636529504d696e696e67426964506f6f6c4163636f756e7400806d6f646c6c7164506f6f6c730000000000000000000000000000000000000000041501204163636f756e742074686174207265636569766573206d696e696e67206269642066756e6473206265666f726520747265617375727920646973747269627574696f6e2e34426964496e6372656d656e74731840102700000000000000000000000000000419012054686520696e6372656d656e74207468617420626964732063616e206265206f6e2028666f7220696e7374616e63652c206f6e652063656e7420696e6372656d656e74732901e1050630426974636f696e5574786f730130426974636f696e5574786f73302c4c6f636b65645574786f7300010402cce50504000c5d01204c6f636b656420426974636f696e205554584f7320746861742068617665206265656e2066756e64656420776974682061205574786f5265662066726f6d2074686520426974636f696e206e6574776f726b20616e645d0120616d6f756e74732077697468696e20746865204d696e696d756d5361746f7368695468726573686f6c64206f66207468652065787065637465642e204966206120426974636f696e205554584f206973206d6f7665643101206265666f7265207468652065787069726174696f6e20626c6f636b2c207468652066756e647320617265206275726e656420616e6420746865205554584f20697320756e6c6f636b65642e585574786f4964546f46756e64696e675574786f5265660001040530cc040004d42041206d617070696e67206f66207574786f20696420746f2074686520636f6e6669726d6564207574786f207265666572656e63654c4c6f636b7350656e64696e6746756e64696e670100ed050400040d0120426974636f696e206c6f636b732074686174206172652070656e64696e672066756c6c2066756e64696e67206f6e2074686520626974636f696e206e6574776f726b544578706972656450656e64696e6746756e64696e670100ed0504000431012050656e64696e672066756e64696e6720656e747269657320746861742068617665206578706972656420616e6420617265206177616974696e6720626f756e64656420636c65616e75702e6443616e6469646174655574786f5265667342795574786f49640101040530fd0504000429012043616e646964617465205554584f73206173736f63696174656420776974682061206c6f636b20286d69736d6174636865732c2065787472612066756e64696e672c206574632e292e38426974636f696e4e6574776f726b01000d06040304ec205468652067656e657369732073657420626974636f696e206e6574776f726b2074686174207468697320636861696e206973207469656420746f60436f6e6669726d6564426974636f696e426c6f636b54697000003103040004fc20416e206f7261636c652d70726f766964656420636f6e6669726d656420626974636f696e20626c6f636b202865672c203620626c6f636b73206261636b295c50726576696f7573426974636f696e426c6f636b546970000031030400005854656d70506172656e7448617353796e635374617465010020040004d42053746f72657320696620706172656e7420626c6f636b20686164206120636f6e6669726d656420626974636f696e20626c6f636b4c53796e63686564426974636f696e426c6f636b000031030400047c20546865206c6173742073796e6368656420626974636f696e20626c6f636b544f7261636c654f70657261746f724163636f756e740000000400048020426974636f696e204f7261636c65204f70657261746f72204163636f756e7440496e686572656e74496e636c756465640100200400048c20436865636b2069662074686520696e686572656e742077617320696e636c7564656401150301c8146c4d617850656e64696e67436f6e6669726d6174696f6e5574786f7310101027000004650120546865206d6178696d756d206e756d626572206f66205554584f7320746861742063616e206265207761746368656420696e206120626c6f636b20616e642f6f72206578706972696e672061742073616d6520626c6f636b904d617850656e64696e6746756e64696e6745787069726174696f6e73506572426c6f636b10106400000004310120546865206d6178696d756d206e756d626572206f6620657870697265642070656e64696e672066756e64696e6720656e747269657320636c65616e656420757020696e206120626c6f636b604d617843616e6469646174655574786f735065724c6f636b10106400000004c8204d6178696d756d206e756d626572206f662063616e646964617465205554584f732073746f72656420706572206c6f636b704d617850656e64696e67436f6e6669726d6174696f6e426c6f636b7330209000000000000000042501204d6178696d756d20626974636f696e20626c6f636b7320746f2077617463682061205574786f20666f7220636f6e6669726d6174696f6e206265666f72652063616e63656c696e678c4d6178696d756d5361746f7368695468726573686f6c6446726f6d45787065637465643020e803000000000000084501204d6178696d756d206e756d626572206f66207361746f73686920646966666572656e636520616c6c6f7765642066726f6d20657870656374656420746f20636f6e73696465722061205554584f206173302022636f6e6669726d65642201110607185661756c747301185661756c7473382c4e6578745661756c744964000010040000285661756c7473427949640001040510150604000434205661756c7473206279206964445661756c74496442794f70657261746f7200010405001004000440205661756c7473206279206f776e6572684172676f6e6f74436f6d6d69746d656e7442795661756c744964000104051031060400040101205661756c742d7369646520636f6d6d697474656420616e642063726f7373636861696e2d656e63756d6265726564206172676f6e6f74206261636b696e672e345661756c74585075624279496400010405103506040004e0205661756c7420426974636f696e205870756220616e642063757272656e74206368696c6420636f756e746572206279205661756c744964644c617374436f6c6c6563744672616d6542795661756c7449640001040510300400049420546865206c61737420636f6c6c656374206672616d65206f662065616368207661756c747c50656e64696e675465726d734d6f64696669636174696f6e7342795469636b010104053045060400085d012050656e64696e67207465726d7320746861742077696c6c20626520636f6d6d69747465642061742074686520676976656e20626c6f636b206e756d62657220286d7573742062652061206d696e696d756d206f6620314c206672616d65206368616e67652061776179295850656e64696e67436f7369676e42795661756c74496401010405104906040004a420426974636f696e204c6f636b732070656e64696e6720636f7369676e206279207661756c74206964744f727068616e65645574786f4163636f756e747342795661756c7449640101080502550610100000000004c8204f727068616e656420426974636f696e205574786f732070656e64696e6720636f7369676e206279207661756c742069646c5661756c7446756e647352656c656173696e67427948656967687401010405305906040004fc20546865207661756c7473207468617420686176652066756e64732072656c656173696e67206174206120676976656e20626974636f696e206865696768749c5661756c747352656c656173696e674f7065726174696f6e616c4d696e696d756d42795469636b010104053059060400043101205661756c74732077686f73652074656d706f72617279206f7065726174696f6e616c206d696e696d756d206d61792062652072656c6561736564206174206120676976656e207469636b2e58526576656e75655065724672616d6542795661756c740101040510610604000c710120547261636b7320726576656e75652066726f6d20426974636f696e204c6f636b7320616e6420547265617375727920506f6f6c7320666f722074686520747261696c696e67206672616d657320666f722065616368207661756c747101202861206672616d65206973206120226d696e696e67206461792220696e204172676f6e292e204e6577657374206672616d6573206172652066697273742e204672616d6573206172652072656d6f76656420616674657220746865050120636f6c6c6563742065787069726174696f6e2077696e646f77202860526576656e7565436f6c6c656374696f6e45787069726174696f6e4672616d657360292e6c526576656e75655065724672616d6542795661756c74436f756e7401001010000000000068526563656e74436170616369747944726f707342795661756c7401010405106d06040004f420526563656e7420726564756374696f6e7320696e2060617661696c61626c655f666f725f6c6f636b602c2067726f75706564206279207661756c742e01350301dc24884d617850656e64696e675465726d4d6f64696669636174696f6e735065725469636b10106400000004b420546865206d61782070656e64696e67207661756c74207465726d206368616e6765732070657220626c6f636b244d61785661756c747310101027000004b420546865206d6178206e756d626572206f66207661756c747320746861742063616e2062652063726561746564644d617850656e64696e67436f7369676e735065725661756c7410106400000004a4204d617820636f6e63757272656e7420636f7369676e732070656e64696e6720706572207661756c7484526576656e7565436f6c6c656374696f6e45787069726174696f6e4672616d657330200a0000000000000004f020546865206e756d626572206f66206672616d65732077697468696e20776869636820726576656e7565206d75737420626520636f6c6c6563746564944f7065726174696f6e616c4d696e696d756d5661756c7453656375726974697a6174696f6e184000943577000000000000000000000000044901204d696e696d756d207661756c742073656375726974697a6174696f6e207265717569726564207768696c6520746865206f7065726174696f6e616c20666c6f6f72206c6f636b206973206163746976652e804f7065726174696f6e616c4d696e696d756d5661756c744c6f636b5469636b7330202005080000000000045101204475726174696f6e20746f206b65657020746865206f7065726174696f6e616c206d696e696d756d2073656375726974697a6174696f6e206c6f636b65642066726f6d207661756c74206372656174696f6e2e74526563656e74436170616369747944726f70426c6f636b57696e646f77101008000000046101204e756d626572206f66204172676f6e20626c6f636b7320746f206b65657020726563656e742060617661696c61626c655f666f725f6c6f636b602064726f707320666f72207374616c6520696e697420636865636b732e784d6178526563656e74436170616369747944726f70735065725661756c74101040000000042101204d6178696d756d206e756d626572206f6620726563656e742060617661696c61626c655f666f725f6c6f636b602064726f70732072657461696e656420706572207661756c742e5c436170616369747944726f70417474656d7074556e6974184000e1f505000000000000000000000000085901204f6e65206e6f2d666565207374616c652060696e697469616c697a655f666f7260206661696c75726520697320616c6c6f77656420666f72206561636820746869732d6d616e7920756e697473206f66206c6f7374582060617661696c61626c655f666f725f6c6f636b602e0179060830426974636f696e4c6f636b730130426974636f696e4c6f636b7330284e6578745574786f4964000030040000344c6f636b7342795574786f496400010405307d06040004e02053746f72657320626974636f696e207574786f73207468617420686176652072657175657374656420746f2062652072656c6561736564405574786f49647342795661756c74496400010805058506900400048c20496e646578206f6620616374697665205554584f2049447320706572207661756c74545574786f49647342794f776e65724163636f756e740001080505890690040004b020496e646578206f6620616374697665205554584f2049447320706572206f776e6572206163636f756e742e6c4c6f636b52656c65617365436f7369676e486569676874427949640001040530100400040d012053746f7265732074686520626c6f636b206e756d62657220776865726520612072656c656173652077617320636f7369676e656420627920746865207661756c742e6c4c6f636b52656c65617365526571756573747342795574786f496400010405308d06040004e02053746f72657320626974636f696e206c6f636b73207468617420686176652072657175657374656420746f2062652072656c6561736564584f727068616e65645574786f7342794163636f756e740001080505910695060400042501204d69736d617463686564207574786f73207468617420776572652073656e74207769746820696e76616c696420616d6f756e747320746f2061206c6f636b656420626974636f696e3c4d696e696d756d5361746f7368697301003020000000000000000004c820546865206d696e696d756d206e756d626572206f66207361746f7368697320746861742063616e206265206c6f636b6564504c6f636b436f7369676e44756542794672616d650101040530a106040004f0205574786f7320746861742068617665206265656e2072657175657374656420746f20626520636f7369676e656420666f722072656c656173696e67784c6f636b45787069726174696f6e734279426974636f696e4865696768740101040530a5060400085d012045787069726174696f6e206f6620626974636f696e206c6f636b7320627920626974636f696e206865696768742e2046756e647320617265206275726e65642073696e636520746865207573657220646964206e6f749020756e6c6f636b2069742e20426974636f696e2077696c6c20676f20746f207661756c74744f727068616e65645574786f45787069726174696f6e42794672616d650101040530a906040004c42045787069726174696f6e206f66206f727068616e6564207574786f20726566732062792075736572206163636f756e74544d6963726f676f6e506572427463486973746f72790100b5060400049420486973746f7279206f6620746172676574206d6963726f676f6e7320706572206274632e015d0301e424404172676f6e5469636b735065724461793020a005000000000000044c204172676f6e207469636b2070657220646179744d6178436f6e63757272656e746c7952656c656173696e674c6f636b731010e80300000488204d6178696d756d2072656c656173696e67207574786f7320617420612074696d65484c6f636b4475726174696f6e426c6f636b73302050cd00000000000004d420546865206e756d626572206f6620626974636f696e20626c6f636b73206120626974636f696e206973206c6f636b656420666f72544c6f636b5265636c616d6174696f6e426c6f636b733020e0100000000000000861012054686520626974636f696e20626c6f636b73206166746572206120426974636f696e4c6f636b206578706972657320776869636820746865207661756c742077696c6c20626520616c6c6f77656420746f20636c61696d28206120626974636f696e7c4c6f636b52656c65617365436f7369676e446561646c696e654672616d657330200a0000000000000004fc204e756d626572206f66206672616d65732061207661756c742068617320746f20636f756e7465722d7369676e206120626974636f696e2072656c656173657c4f727068616e65645574786f52656c656173654578706972794672616d657330200a00000000000000084d01204e756d626572206f66206672616d6573206f727068616e6564205554584f2072656c6561736520656e7472696573206172652072657461696e65642061667465722061206c6f636b206c6966656379636c6590207472616e736974696f6e206265666f7265206265696e6720636c65616e65642075702e704d6178436f6e63757272656e746c794578706972696e674c6f636b731010102700000861012050616c6c65742073746f7261676520726571756972657320626f756e64732c20736f207765206861766520746f207365742061206d6178696d756d206e756d62657220746861742063616e2065787069726520696e2061342073696e676c6520626c6f636b505469636b73506572426974636f696e426c6f636b30200a000000000000000488204e756d626572206f66207469636b732070657220626974636f696e20626c6f636b484d617842746350726963655469636b41676510101e00000004c0204d617820616c6c6f776564207469636b2d616765206f66206d6963726f676f6e2d7065722d6274632070726963657301b90609204e6f74617269657301204e6f74617269657318304e6578744e6f7461727949640000100400004050726f706f7365644e6f7461726965730001040200c106040000444578706972696e6750726f706f73616c730101040510c506040000384163746976654e6f7461726965730100c906040000404e6f746172794b6579486973746f72790101040510d1060400005c5175657565644e6f746172794d6574614368616e6765730101040530dd06040004cc204d65746164617461206368616e67657320746f206265206163746976617465642061742074686520676976656e207469636b01790301f018444d61784163746976654e6f746172696573101019000000049020546865206d6178696d756d20616374697665206e6f74617269657320616c6c6f776564544d617850726f706f73616c486f6c64426c6f636b731010c04e000004c420546865206d6178696d756d20626c6f636b7320612070726f706f73616c2063616e2073697420756e617070726f766564504d617850726f706f73616c73506572426c6f636b10100a00000000504d6574614368616e6765735469636b44656c617930200600000000000000084901204e756d626572206f66207469636b7320746f2064656c6179206368616e67696e672061206e6f74617269657327206d65746120287468697320697320746f20616c6c6f7720612077696e646f7720666f72f4206e6f74617269657320746f2073776974636820746f206e6577206b6579732061667465722061206e6577206b65792069732066696e616c697a656429544d61785469636b73466f724b6579486973746f72791010400b000008e0204e756d626572206f66207469636b7320746f206d61696e7461696e206b657920686973746f727920666f722065616368206e6f74617279a8204e4f54453a206f6e6c79207072756e6564207768656e206e6577206b65797320617265206164646564384d61784e6f74617279486f7374731010040000000488204d6178696d756d20686f7374732061206e6f746172792063616e20737570706c7901ed060a204e6f7465626f6f6b01204e6f7465626f6f6b1c8c4e6f7465626f6f6b4368616e6765644163636f756e7473526f6f7442794e6f746172790001080205390234040004010120446f75626c652073746f72616765206d6170206f66206e6f74617279206964202b206e6f7465626f6f6b202320746f20746865206368616e676520726f6f74a04163636f756e744f726967696e4c6173744368616e6765644e6f7465626f6f6b42794e6f746172790001080202f1061004000c35012053746f72616765206d6170206f66206163636f756e74206f726967696e20286e6f746172795f69642c206e6f7465626f6f6b2c206163636f756e745f7569642920746f20746865206c6173741501206e6f7465626f6f6b20636f6e7461696e696e672074686973206163636f756e7420696e20746865206368616e676564206163636f756e7473206d65726b6c6520726f6f749820284e6f7465626f6f6b4368616e6765644163636f756e7473526f6f7442794e6f74617279296c4c6173744e6f7465626f6f6b44657461696c7342794e6f746172790101040210f5060400086901204c697374206f66206c61737420666577206e6f7465626f6f6b2064657461696c73206279206e6f746172792e2054686520626f6f6c206973207768657468657220746865206e6f7465626f6f6b20697320656c696769626c65d820666f7220766f7465732028726563656976656420617420636f7272656374207469636b20616e64206175646974207061737365642938426c6f636b4e6f7465626f6f6b730100c9020400049420546865206e6f7465626f6f6b7320696e636c7564656420696e207468697320626c6f636b40496e686572656e74496e636c756465640100200400048c20436865636b2069662074686520696e686572656e742077617320696e636c75646564704e6f7461726965734c6f636b6564466f724661696c65644175646974000104021005070400048c204e6f746172696573206c6f636b656420666f72206661696c696e6720617564697473744c6f636b65644e6f746172795265616479466f72526570726f636573730001040210100400040101204e6f74617269657320726561647920746f20737461727420726570726f63657373696e67206174206120676976656e206e6f7465626f6f6b206e756d626572017d03011501000109070b484c6f63616c636861696e5472616e7366657201484c6f63616c636861696e5472616e736665720c384e6578745472616e7366657249640000100400004c50656e64696e675472616e73666572734f757400010402100d07040000704578706972696e675472616e73666572734f757442794e6f7461727901010805058506110704001845012045787069726174696f6e20696e64657820666f72206f7574676f696e67207472616e7366657273206b657965642062792060286e6f746172795f69642c2065787069726174696f6e5f7469636b29602e006901204e4f54453a2045787069726174696f6e2070726f63657373696e6720666f6c6c6f7773206e6f7465626f6f6b2070726f6772657373696f6e2028606865616465722e7469636b602920666f722065616368206e6f746172792c5101206e6f742077616c6c2f72756e74696d65207469636b2e2049662061206e6f746172792073746f7073207375626d697474696e67206e6f7465626f6f6b7320696e646566696e6974656c792c2070656e64696e676501207472616e736665727320666f722074686174206e6f746172792072656d61696e2066726f7a656e2062792064657369676e20756e74696c2061206e6f746172792d737769746368207265636f766572792070617468206973282065786563757465642e01bd030131010c2050616c6c657449641507207472616e73666572005c5472616e7366657245787069726174696f6e5469636b733020b036000000000000085d0120486f77206c6f6e672061207472616e736665722073686f756c642072656d61696e20696e2073746f72616765206265666f72652072657475726e696e672e204e4f54453a20746865726520697320612032207469636bc820677261636520706572696f642077686572652077652077696c6c207374696c6c20616c6c6f772061207472616e73666572784d617850656e64696e675472616e73666572734f7574506572426c6f636b1010e803000004bc20486f77206d616e79207472616e7366657273206f75742063616e206265207175657565642070657220626c6f636b0119070c34426c6f636b5365616c537065630134426c6f636b5365616c53706563284843757272656e74566f74654d696e696d756d01001840000000000000000000000000000000000c5501205468652063757272656e7420766f7465206d696e696d756d206f662074686520636861696e2e20426c6f636b20766f746573207573652074686973206d696e696d756d20746f2064657465726d696e65207468655d01206d696e696d756d20616d6f756e74206f6620746178206f7220636f6d70757465206e656564656420746f20637265617465206120766f74652e2049742069732061646a7573746564207570206f7220646f776e20746f74207461726765742061206d6178206e756d626572206f6620766f7465736043757272656e74436f6d70757465446966666963756c747901001840000000000000000000000000000000000c5501205468652063757272656e7420766f7465206d696e696d756d206f662074686520636861696e2e20426c6f636b20766f746573207573652074686973206d696e696d756d20746f2064657465726d696e65207468655d01206d696e696d756d20616d6f756e74206f6620746178206f7220636f6d70757465206e656564656420746f20637265617465206120766f74652e2049742069732061646a7573746564207570206f7220646f776e20746f74207461726765742061206d6178206e756d626572206f6620766f7465735843757272656e74436f6d707574654b6579426c6f636b00003404000c650120546865206b6579204b2069732073656c656374656420746f206265207468652068617368206f66206120626c6f636b20696e2074686520626c6f636b636861696e202d207468697320626c6f636b2069732063616c6c656445012074686520276b657920626c6f636b272e20466f72206f7074696d616c206d696e696e6720616e6420766572696669636174696f6e20706572666f726d616e63652c20746865206b65792073686f756c6444206368616e6765206576657279206461795450617374436f6d70757465426c6f636b54696d657301001d070400005850726576696f7573426c6f636b54696d657374616d7000003004000498205468652074696d657374616d702066726f6d207468652070726576696f757320626c6f636b4854656d70426c6f636b54696d657374616d7000003004000048566f74654d696e696d756d486973746f7279010021070400043101204b6565707320746865206c617374203320766f7465206d696e696d756d732e20546865206669727374206f6e65206170706c69657320746f207468652063757272656e7420626c6f636b2e7c54656d7043757272656e745469636b4e6f7465626f6f6b73496e426c6f636b010025070400043d012054656d706f726172792073746f7265206f6620616e792063757272656e74207469636b206e6f7465626f6f6b7320696e636c7564656420696e207468697320626c6f636b20287673207469636b294c54656d70426c6f636b566f746544696765737400009902040004802054656d706f726172792073746f72652074686520766f7465206469676573743850617374426c6f636b566f7465730100310704000001c10301350110444d61784163746976654e6f746172696573101019000000049020546865206d6178696d756d20616374697665206e6f74617269657320616c6c6f77656440546172676574426c6f636b566f746573184050c30000000000000000000000000000047020546865206465736972656420766f7465732070657220626c6f636b84486973746f726963616c436f6d70757465426c6f636b73466f724176657261676510100a000000085d0120546865206e756d626572206f6620686973746f726963616c20636f6d707574652074696d657320746f2075736520746f2063616c63756c6174652074686520726f6c6c696e6720636f6d707574652061766572616765442028666f722061646a7573746d656e742978486973746f726963616c566f7465426c6f636b73466f72417665726167651010a005000004490120546865206e756d626572206f6620686973746f726963616c20766f746520626c6f636b7320746f2075736520746f2063616c63756c6174652074686520726f6c6c696e6720766f74652061766572616765013d070d1c446f6d61696e73011c446f6d61696e730c4452656769737465726564446f6d61696e7300010402345d010400004c5a6f6e655265636f7264734279446f6d61696e00010402343d01040000584578706972696e67446f6d61696e734279426c6f636b0101040530410704000001c503013901000145070e285072696365496e64657801285072696365496e6465781c1c43757272656e740000cd03040004782053746f726573207468652061637469766520707269636520696e646578244c61737456616c69640000cd03040004882053746f72657320746865206c6173742076616c696420707269636520696e64657840486973746f7269634172676f6e43504901004907040004ac20547261636b73207468652061766572616765206370692064617461206576657279203630207469636b736c486973746f7269634172676f6e6f74466c6f6f7242794672616d6501005507040004fc20547261636b7320746865206c6f77657374204172676f6e6f7420666c6f6f72206f6273657276656420696e206561636820726563656e74206672616d652e74486973746f7269634172676f6e6f744176657261676542794672616d6501005907040004010120547261636b73207468652061766572616765204172676f6e6f74207072696365206f6273657276656420696e206561636820726563656e74206672616d652e6843757272656e744672616d654172676f6e6f744176657261676500005d07040004390120416363756d756c61746573207468652063757272656e74206672616d652773204172676f6e6f742070726963652073616d706c657320756e74696c20746865206672616d6520636c6f7365732e204f70657261746f72000000040004842054686520707269636520696e646578206f70657261746f72206163636f756e7401c903016101186c4d6178446f776e74696d655469636b734265666f7265526573657430203c0000000000000004d820546865206d6178696d756d206e756d626572206f66207469636b7320746f207072657365727665206120707269636520696e646578484d61785072696365416765496e5469636b733020a005000000000000046c20546865206f6c6465737420686973746f727920746f206b656570704d61784172676f6e6f74466c6f6f72486973746f72794672616d657310100a00000004f4204d6178696d756d206e756d626572206f66207065722d6672616d65204172676f6e6f7420666c6f6f72206275636b65747320746f2072657461696e2e784d61784172676f6e6f7441766572616765486973746f72794672616d657310100a00000004fc204d6178696d756d206e756d626572206f66207065722d6672616d65204172676f6e6f742061766572616765206275636b65747320746f2072657461696e2e8c4d61784172676f6e4368616e67655065725469636b4177617946726f6d546172676574e0400000c16ff2862300000000000000000008650120546865206d617820707269636520646966666572656e63652064726f7070696e672062656c6f7720746172676574206f722072616973696e672061626f76652074617267657420706572207469636b2e2054686572652773e4206e6f20636f72726573706f6e64696e6720636f6e7374616e7420666f722074696d6520746f207265636f7665727920746f207461726765746c4d61784172676f6e5461726765744368616e67655065725469636be0400000c16ff28623000000000000000000000161070f28417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000101c4772616e647061011c4772616e6470611c1453746174650100650704000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500006907040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c6564000039020400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010030200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405301004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e2c417574686f72697469657301006d0704000484205468652063757272656e74206c697374206f6620617574686f7269746965732e01d1030165010c384d6178417574686f7269746965731010e8030000045c204d617820417574686f72697469657320696e20757365344d61784e6f6d696e61746f727310100000000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e584d6178536574496453657373696f6e456e74726965733020020000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e0171071124426c6f636b5365616c0124426c6f636b5365616c1c4c4c617374426c6f636b5365616c6572496e666f000075070400003c506172656e74566f74696e674b65790100a5020400086101205468652063616c63756c6174656420706172656e7420766f74696e67206b657920666f72206120626c6f636b2e2052656665727320746f20746865204e6f7465626f6f6b20426c6f636b566f74652052657665616c6564e020536563726574202b20566f7465734d65726b6c65526f6f74206f662074686520706172656e7420626c6f636b206e6f7465626f6f6b732e38426c6f636b466f726b506f7765720100ad02910100000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000008e4205468652063616c63756c6174656420737472656e67746820696e207468652072756e74696d6520736f20746861742069742063616e20626511012075706772616465642c20627574206973207573656420627920746865206e6f646520746f2064657465726d696e6520776869636820666f726b20746f20666f6c6c6f7744566f746573496e50617374335469636b73010079070400049c2054686520636f756e74206f6620766f74657320696e20746865206c6173742033207469636b734054656d705365616c496e686572656e7400000104040004a820456e7375726573206f6e6c7920612073696e676c6520696e686572656e74206973206170706c696564504c6173745469636b57697468566f74655365616c010030200000000000000000004c4973426c6f636b46726f6d566f74655365616c0100200400047c2049732074686520626c6f636b2066726f6d206120766f7465207365616c3f01fd030000017d071230426c6f636b526577617264730130426c6f636b5265776172647318385061796f7574734279426c6f636b010104021081070400048c20486973746f726963616c207061796f75747320627920626c6f636b206e756d62657248426c6f636b526577617264735061757365640100200400048420426f6f6c20696620626c6f636b2072657761726473206172652070617573656460426c6f636b566f74657252657761726473456e61626c6564010020040004a020426f6f6c20696620626c6f636b20766f74657220726577617264732061726520656e61626c656450426c6f636b526577617264734279436f686f72740100850704000441012054686520636f686f727420626c6f636b2072657761726473206279206d696e696e6720636f686f7274202869652c2077697468207468652073616d65207374617274696e67206672616d6520696429384172676f6e73506572426c6f636b0100184000000000000000000000000000000000087501205468652063757272656e74207363616c656420626c6f636b20726577617264732e2049742077696c6c2061646a757374206261736564206f6e20746865206172676f6e206d6f76656d656e7420617761792066726f6d2070726963651c2074617267657424426c6f636b4665657301001840000000000000000000000000000000000001190401710118585374617274696e674172676f6e73506572426c6f636b184020a107000000000000000000000000000488204e756d626572206f66206172676f6e73206d696e7465642070657220626c6f636b7c5374617274696e674f776e657273686970546f6b656e73506572426c6f636b184020a1070000000000000000000000000004b0204e756d626572206f66206f776e65727368697020746f6b656e73206d696e7465642070657220626c6f636b44496e6372656d656e74616c47726f7774688907a0e8030000000000000000000000000000b400000000000000404b4c0000000000000000000000000004f4205468652067726f777468207061746820666f7220626f7468206f776e65727368697020616e64206172676f6e73206265666f72652068616c76696e673048616c76696e675469636b733020200b20000000000004dc204e756d626572206f66207469636b7320666f722068616c76696e67206f66206f776e65727368697020736861726520726577617264734448616c76696e67426567696e5469636b733020105c0c000000000004050120546865207469636b206e756d626572206174207768696368207468652068616c76696e6720626567696e7320666f72206f776e65727368697020746f6b656e73484d696e65725061796f757450657263656e74e04000008bbd0689680a0000000000000000042d012050657263656e742061732061206e756d626572206f7574206f6620313030206f662074686520626c6f636b20726577617264207468617420676f657320746f20746865206d696e65722e018d0713104d696e7401104d696e74205c50656e64696e674d696e745574786f734279496e64657800010402309107040008610120426974636f696e205554584f7320746861742068617665206265656e207375626d697474656420666f72206d696e74696e672c206b657965642062792061206d6f6e6f746f6e696320717565756520696e64657820736f5901207061796f7574732063616e207072657365727665204649464f206f72646572207768696c652065616368206672616d6520776f726b73207468726f7567682061206669786564207061796f757420636f686f72742e5c50656e64696e674d696e745574786f49644c6f6f6b75700101040230950704000859012052657665727365206c6f6f6b75702066726f6d20626974636f696e205554584f20696420746f20616c6c20717565756564206d696e7420696e646963657320666f72206469726563742072656d6f76616c20616e643c20636c69656e74206c6f6f6b75702e604e65787450656e64696e674d696e745574786f496e64657801003020000000000000000004110120546865206e657874206d6f6e6f746f6e696320717565756520696e64657820746f2061737369676e20746f20612070656e64696e6720626974636f696e206d696e742e5450656e64696e674d696e7451756575655374617465010099070c00000008610120517565756520626f6f6b6b656570696e6720666f722070656e64696e6720626974636f696e206d696e74732c20696e636c7564696e672074686520626f756e646564207061796f757420737461727420616e64207468656c2063757272656e74206672616d65207363616e20637572736f722e544d696e7465644d696e696e674d6963726f676f6e73010018400000000000000000000000000000000004c02054686520746f74616c20616d6f756e74206f66206d6963726f676f6e73206d696e74656420666f72206d696e696e67584d696e746564426974636f696e4d6963726f676f6e7301001840000000000000000000000000000000000455012054686520746f74616c20616d6f756e74206f6620426974636f696e206d6963726f676f6e73206d696e7465642e2043616e6e6f742065786365656420604d696e7465644d696e696e674d6963726f676f6e73602e4c4d696e696e674d696e74506572436f686f727401009d0704000445012054686520616d6f756e74206f66206172676f6e73206d696e74656420706572206d696e696e6720636f686f7274202869652c2067726f75706564206279207374617274696e67206672616d65206964293c426c6f636b4d696e74416374696f6e0100a107d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011d0401890114584d617850656e64696e674d696e74735065725574786f10103200000004410120546865206d6178696d756d206e756d626572206f6620717565756564206d696e7420656e747269657320612073696e676c6520626974636f696e205554584f206d617920616363756d756c6174652e784d617850656e64696e674d696e745061796f757457696e646f7753697a651010e803000004410120546865206d6178696d756d206e756d626572206f662071756575656420626974636f696e206d696e74732074686174206d61792072656365697665207061796f75747320696e2061206672616d652e604d61784d696e74486973746f7279546f4d61696e7461696e10100a00000004b420546865206d6178696d756d206e756d626572206f66206d696e7420686973746f7269657320746f206b656570444d6178506f737369626c654d696e6572731010a005000004e820546865206d6178696d756d206e756d626572206f66206d696e65727320746861742063616e206265207061696420696e2061206672616d652e80426974636f696e4d696e745061796f757450657263656e745065724672616d65a907040a043d0120546865206d6178696d756d207368617265206f6620612071756575656420626974636f696e206d696e742074686174206d6179206265207061696420696e20612073696e676c65206672616d652e01ad07142042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200b107040010b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602052657365727665730101040200c10704000ca4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f6014486f6c64730101040200cd070400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a65730101040200d9070400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e01210401990110484578697374656e7469616c4465706f73697418401027000000000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000010f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602c4d617852657365727665731010000000000c0d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f60284d6178467265657a657310100200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01ed0715244f776e65727368697001244f776e6572736869701c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200b107040010b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602052657365727665730101040200c10704000ca4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f6014486f6c64730101040200cd070400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a65730101040200d9070400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e01290401c10110484578697374656e7469616c4465706f73697418401027000000000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000010f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602c4d617852657365727665731010000000000c0d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f60284d6178467265657a657310100200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01f107161c54785061757365011c54785061757365042c50617573656443616c6c7300010402c90190040004b42054686520736574206f662063616c6c73207468617420617265206578706c696369746c79207061757365642e012d0401c50104284d61784e616d654c656e1010000100000c2501204d6178696d756d206c656e67746820666f722070616c6c6574206e616d6520616e642063616c6c206e616d65205343414c4520656e636f64656420737472696e67206e616d65732e00a820544f4f204c4f4e47204e414d45532057494c4c2042452054524541544544204153205041555345442e01f50717485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e740c444e6578744665654d756c7469706c6965720100e040000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100f9070400003c54785061796d656e744372656469740000fd0704000cf02054686520604f6e4368617267655472616e73616374696f6e602073746f726573207468652077697468647261776e2074782066656520686572652e00350120557365206077697468647261775f74786665656020616e64206072656d61696e696e675f74786665656020746f206163636573732066726f6d206f757473696465207468652063726174652e0001d10104604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00181c5574696c6974790001310401d501044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01050819105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01390401d901000109081a205472656173757279012054726561737572792c6043757272656e744672616d655661756c744361706974616c00000d0804000cc020546865207661756c74206361706974616c206c6f636b656420666f72207468652063757272656e74206672616d652e004d01205061796f75742075736573207468697320746f20736565207768696368207661756c747320616e6420626f6e64206c6f7473206172652070617274696369706174696e6720696e20746865206672616d652e8c43757272656e744672616d654172676f6e6f74426f6e645061727469636970616e74730000310804000cf020546865204172676f6e6f7420626f6e64207061727469636970616e7473206c6f636b656420666f72207468652063757272656e74206672616d652e004101205061796f75742075736573207468697320746f20736565207768696368204172676f6e6f7420626f6e64206c6f7473206172652070617274696369706174696e6720696e20746865206672616d652e344e657874426f6e644c6f744964010030200000000000000000045820546865206e65787420626f6e64206c6f742069642e2c426f6e644c6f74427949640001040530410804000490205468652073746f72656420737461746520666f72206561636820626f6e64206c6f742e4c426f6e644c6f7449647342794163636f756e740001080505890690040004b02054686520626f6e64206c6f742069647320746861742062656c6f6e6720746f20616e206163636f756e742e80456e63756d6265726564426f6e644d6963726f676f6e7342794163636f756e74010104050018400000000000000000000000000000000018510120457861637420747265617375727920626f6e64206261636b696e6720726573657276656420666f722063726f7373636861696e206d696e74696e6720617574686f726974696573206279206163636f756e742e005d01205468697320697320616e206578616374206d6963726f676f6e20636c61696d2c206e6f742061206d6972726f72206f6620746865206163636f756e742773206163746976652077686f6c652d626f6e64206c6f74732e750120426f6e64206c6f7473207374617920636f6172736520626563617573652070617274696369706174696f6e206f6e6c79206d6f76657320696e2077686f6c6520626f6e64732c207768696c6520656e63756d6272616e63652063616e65012072656d61696e206672616374696f6e616c2061667465722061206275726e2e20546865206b657920696e76617269616e74206973207468617420746865206e6f6e2d72656c656173696e672068656c642062616c616e63656c20616c7761797320636f76657273207468697320616d6f756e742e6850656e64696e67426f6e6452656c656173657342794672616d6501010405304d08040004a420426f6e64206c6f747320746f2072656c656173652061742074686520676976656e206672616d652e7450656e64696e67426f6e6452656c656173655265747279437572736f72000030040004f820546865206f6c64657374206672616d652074686174207374696c6c2068617320626f6e64206c6f747320746f2072657472792072656c656173696e672e3c426f6e644c6f747342795661756c740101040510510804000c902054686520616363657074656420626f6e64206c6f747320666f722061207661756c742e004501204c6f747320617265206b65707420696e2064657363656e64696e6720626f6e64206f726465722c207468656e206c6f7765722060626f6e645f6c6f745f69646020666972737420666f7220746965732e3c4172676f6e6f74426f6e644c6f7473010035080400045501205468652061637469766520746f70204172676f6e6f7420626f6e64206c6f7473206b65707420696e20617363656e64696e6720626f6e64206f726465722c207468656e206c6f776572206964732066697273742e5c546f74616c4163746976654172676f6e6f74426f6e6473010010100000000004f02054686520746f74616c206e756d626572206f6620616374697665204172676f6e6f7420626f6e647320696e2074686520616374697665207365742e013d0401dd012c5c4d61785472656173757279436f6e7472696275746f727310106400000004390120546865206d6178696d756d206e756d626572206f6620616363657074656420626f6e64206c6f747320696e2061207661756c74277320616363657074656420626f6e642d6c6f74206c6973742e6c4d696e696d756d4172676f6e73506572436f6e7472696275746f72184000e1f50500000000000000000000000004a020546865206d696e696d756d2077686f6c652d626f6e6420707572636861736520616d6f756e742e604d61784163746976654172676f6e6f74426f6e644c6f74731010e803000004c020546865206d6178696d756d206e756d626572206f6620616374697665204172676f6e6f7420626f6e64206c6f74732e904d61784172676f6e6f74426f6e64656450657263656e744f6643697263756c6174696f6ea9070428041d0120546865206d6178696d756d2070657263656e74206f66206f776e6572736869702d746f6b656e2063697263756c6174696f6e20746861742063616e20626520626f6e6465642e2050616c6c657449641507206c7164506f6f6c730401012054726561737572792070616c6c65742069642072657461696e656420696e206d6574616461746120666f72206163636f756e742064657269766174696f6e2e5c547265617375727952657365727665734163636f756e7400806d6f646c6c7164506f6f6c7374726561737572792d7265736572766500000000043101204163636f756e74207468617420686f6c647320747265617375727920726573657276657320666f7220636c61696d7320616e6420726573657276652d66756e646564207061796f7574732e6850657263656e74466f7254726561737572795265736572766573a907041404e02050657263656e74206f66207468652062696420706f6f6c20726573657276656420666f722074726561737572792072657365727665732e6450657263656e74466f724172676f6e6f74426f6e64506f6f6ca907040a0439012050657263656e74206f66207468652066756c6c2062696420706f6f6c207061696420746f204172676f6e6f7420626f6e6473206265666f7265207661756c7420646973747269627574696f6e2e404d61785661756c7473506572506f6f6c101064000000045d0120546865206d6178696d756d206e756d626572206f66207661756c747320746861742063616e20706172746963697061746520696e206f6e65206672616d652773206c6f636b6564207661756c74206361706974616c2e644d617850656e64696e67556e6c6f636b735065724672616d651010e803000004490120546865206d6178696d756d206e756d626572206f6620626f6e64206c6f74732077686f73652072656c656173652064656c6179206d6179206d617475726520696e20612073696e676c65206672616d652e5c54726561737572794578697444656c61794672616d657330200a00000000000000041d0120546865206e756d626572206f66206672616d657320612072656c656173696e6720626f6e64206c6f742072656d61696e732068656c64206265666f72652072656c656173652e0155081f28466565436f6e74726f6c000001e90100015908204c4f7065726174696f6e616c4163636f756e7473014c4f7065726174696f6e616c4163636f756e7473144c4f7065726174696f6e616c4163636f756e747300010402005d0804000405012052656769737465726564206f7065726174696f6e616c206163636f756e7473206b6579656420627920746865207072696d617279206163636f756e742069642e784f7065726174696f6e616c4163636f756e7442795375624163636f756e7400010402000004000411012052657665727365206c6f6f6b7570206f6620616e79206c696e6b6564206163636f756e7420746f20697473206f7065726174696f6e616c206163636f756e742069642e7849734f7065726174696f6e616c4163636f756e74496e766974654f6e6c7901002004011ccc2057686574686572206f7065726174696f6e616c2d6163636f756e742061636365737320697320696e766974652d6f6e6c792e003d01205768656e20656e61626c65642c20726567697374726174696f6e20726571756972657320616e20757073747265616d20696e7669746520616e64207661756c74206372656174696f6e20706c75732901206d696e696e672d736c6f742062696464696e672072656d61696e207265737472696374656420746f2072656769737465726564206f7065726174696f6e616c206163636f756e74732e006901204578697374696e67206c6976652072617720636861696e20737065637320646f206e6f7420636f6e7461696e2074686973206b65792c20736f207468652064656661756c742072656d61696e7320696e766974652d6f6e6c79d020756e6c657373206120646576656c6f706d656e7420636861696e206f766572726964657320697420696e2067656e657369732e1c526577617264730100610808000004d020436f6e666967757265642072657761726420616d6f756e747320666f72206f7065726174696f6e616c206163636f756e74732e88456e637279707465645365727665724279446f776e73747265616d4163636f756e74000104020065080400042901204f706171756520656e6372797074656420757073747265616d20736572766572207061796c6f6164206b657965642062792074686520646f776e73747265616d206163636f756e742e01490401f5013470426974636f696e4c6f636b53697a65466f72416363657373436f6465184000f2052a010000000000000000000000086501204164646974696f6e616c206172676f6e20616d6f756e7420286261736520756e697473292072657175697265642070657220666f6c6c6f772d6f6e2061636365737320636f646520616674657220616e206163636f756e7454206265636f6d6573206f7065726174696f6e616c2e784f7065726174696f6e616c43657274696669636174696f6e52657761726418400065cd1d0000000000000000000000000415012044656661756c74207265776172642070616964207768656e20616e206163636f756e74206265636f6d6573206f7065726174696f6e616c6c79206365727469666965642e8c4f7065726174696f6e616c43657274696669636174696f6e426f6e7573526577617264184000f2052a0100000000000000000000000415012044656661756c7420626f6e7573207265776172642070616964206576657279206f7065726174696f6e616c2063657274696669636174696f6e207468726573686f6c642e9c4f7065726174696f6e616c43657274696669636174696f6e73506572426f6e7573526577617264101005000000040101204e756d626572206f66206f7065726174696f6e616c2063657274696669636174696f6e732072657175697265642070657220626f6e7573207265776172642e5c4d6178417661696c61626c65416363657373436f64657310100300000004e8204d6178696d756d206e756d626572206f6620617661696c61626c652061636365737320636f64657320616c6c6f776564206174206f6e63652e544d6178456e637279707465645365727665724c656e101000010000041501204d6178696d756d206e756d626572206f6620656e63727970746564207365727665722062797465732073746f72656420706572206e6574776f726b206163636f756e742e584d696e696d756d556e69737761705472616e73666572184080b2e60e00000000000000000000000004d8204d696e696d756d20556e6973776170207472616e7366657220616d6f756e7420726571756972656420746f2072656769737465722e384d696e696d756d426974636f696e18400065cd1d00000000000000000000000004b4204d696e696d756d20626974636f696e20616d6f756e7420726571756972656420746f2072656769737465722e304d696e696d756d426f6e6473184000c2eb0b00000000000000000000000004a8204d696e696d756d20626f6e6420616d6f756e7420726571756972656420746f2072656769737465722e844f7065726174696f6e616c4d696e696d756d556e69737761705472616e736665721840005ed0b2000000000000000000000000043901204d696e696d756d20746f74616c20556e6973776170207472616e7366657220616d6f756e7420726571756972656420666f72206f7065726174696f6e616c2063657274696669636174696f6e2e944f7065726174696f6e616c4d696e696d756d5661756c7453656375726974697a6174696f6e18400094357700000000000000000000000004f4204d696e696d756d207661756c742073656375726974697a6174696f6e20726571756972656420746f206265636f6d65206f7065726174696f6e616c2e644d696e696e675365617473466f724f7065726174696f6e616c10100200000004b4204d696e696e6720736561747320726571756972656420746f206265636f6d65206f7065726174696f6e616c2e604d696e696e675365617473506572416363657373436f6465101005000000082501204d696e696e672073656174732072657175697265642070657220666f6c6c6f772d6f6e2061636365737320636f646520616674657220616e206163636f756e74206265636f6d657334206f7065726174696f6e616c2e0169082240457468657265756d56657269666965720140457468657265756d56657269666965724054496e697469616c436865636b706f696e74526f6f740100348000000000000000000000000000000000000000000000000000000000000000000480204c617465737420696d706f7274656420636865636b706f696e7420726f6f74604c617465737446696e616c697a6564426c6f636b526f6f740100348000000000000000000000000000000000000000000000000000000000000000000494204c617465737420696d706f727465642066696e616c697a656420626c6f636b20726f6f745046696e616c697a6564426561636f6e537461746500010406346d080400049420426561636f6e2073746174652062792066696e616c697a656420626c6f636b20726f6f746446696e616c697a6564426561636f6e5374617465496e646578010010100000000004cc2046696e616c697a656420486561646572733a2043757272656e7420706f736974696f6e20696e2072696e67206275666665726c46696e616c697a6564426561636f6e53746174654d617070696e67010104061034800000000000000000000000000000000000000000000000000000000000000000041d012046696e616c697a656420486561646572733a204d617070696e67206f662072696e672062756666657220696e64657820746f2061207072756e696e672063616e64696461746558457865637574696f6e486561646572416e63686f72730001040634710804000405012052657461696e656420657865637574696f6e2d6c617965722068656164657220616e63686f727320627920657865637574696f6e20626c6f636b20686173682e8c457865637574696f6e486561646572416e63686f72734279426c6f636b4e756d626572000104068d0271080400182901204f7264657265642072657461696e656420657865637574696f6e2d6c6179657220616e63686f7273206b6579656420627920657865637574696f6e20626c6f636b206e756d6265722e00710120546865206b657920697320746865206269672d656e6469616e20657865637574696f6e20626c6f636b206e756d62657220736f20636c69656e74732063616e20737461727420617420612074617267657420657865637574696f6e690120626c6f636b206e756d62657220616e64207363616e20666f727761726420746f207468652066697273742072657461696e656420616e63686f72206174206f72206166746572207468617420626c6f636b20776974686f757475012077616c6b696e672065766572792072657461696e65642066696e616c697a656420626561636f6e20726f6f742e2060457865637574696f6e486561646572416e63686f7273602072656d61696e73207468652063616e6f6e6963616c6420686173682d6b657965642070726f6f66206c6f6f6b75702e7846696e616c697a6564457865637574696f6e486561646572416e63686f72000104063434040004550120417474616368656420657865637574696f6e2d6c6179657220616e63686f72206861736820666f7220656163682072657461696e65642066696e616c697a656420626561636f6e2068656164657220726f6f742e904c6174657374457865637574696f6e486561646572416e63686f72426c6f636b48617368000034040004cc204c61746573742072657461696e656420657865637574696f6e2d6c6179657220616e63686f7220626c6f636b20686173682e3856616c696461746f7273526f6f74010034800000000000000000000000000000000000000000000000000000000000000000004c466f726b56657273696f6e5363686564756c650000a104040004590120466f726b2d76657273696f6e207363686564756c65207573656420666f722073796e632d636f6d6d6974746565207369676e696e6720646f6d61696e7320616e6420626561636f6e2073746174652070617468732e5043757272656e7453796e63436f6d6d697474656501007508550300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004882053796e6320636f6d6d697474656520666f722063757272656e7420706572696f64444e65787453796e63436f6d6d6974746565010075085503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047c2053796e6320636f6d6d697474656520666f72206e65787420706572696f647c4c617465737453796e63436f6d6d6974746565557064617465506572696f6401003020000000000000000004110120546865206c61737420706572696f6420776865726520746865206e6578742073796e6320636f6d6d697474656520776173207570646174656420666f7220667265652e344f7065726174696e674d6f646501000102040004a8205468652063757272656e74206f7065726174696e67206d6f6465206f66207468652070616c6c65742e30426561636f6e50726573657401009908040004450120436861696e2d636f6e6669677572656420626561636f6e2070726573657420657870656374656420627920636c69656e74732074686174207375626d697420766572696669657220757064617465732e016d0401fd01044c4672656548656164657273496e74657276616c101020000000040101204d696e696d756d20676170206265747765656e2066696e616c697a6564206865616465727320666f7220616e2075706461746520746f20626520667265652e019d08234843726f7373636861696e5472616e73666572014843726f7373636861696e5472616e736665725c60436861696e436f6e6669674279536f75726365436861696e000104020902c904040004c420436f6e66696720616363657074656420666f72206561636820737570706f7274656420736f7572636520636861696e2e644761746577617953746174654279536f75726365436861696e0001040209022902040004fc204c61746573742070726f76656e206761746577617920616374697669747920736e617073686f7420666f72206561636820736f7572636520636861696e2e744761746577617953796e6350617573654279536f75726365436861696e00010402090221020400044501205061757365207374617465207265636f72646564207768656e20612063616e6f6e6963616c20676174657761792061637469766974792063616e6e6f74206265206170706c69656420736166656c792e5c5472616e73666572546f74616c7342794163636f756e740101040200a108110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000421012043756d756c617469766520696e626f756e6420616e64206f7574626f756e64207472616e7366657220746f74616c7320666f722065616368206c6f63616c206163636f756e742ecc436f756e63696c417070726f76616c437572736f72427944657374696e6174696f6e436861696e416e644163636f756e7449640001080202a508300400045901204c617465737420636f756e63696c20617070726f76616c207175657565206e6f6e6365207369676e65642062792074686973206163636f756e7420666f72206f6e652064657374696e6174696f6e20636861696e2eac436f756e63696c5369676e6572427944657374696e6174696f6e436861696e416e644163636f756e7449640001080202a5081102040004290120546865207265676973746572656420636f756e63696c207369676e657220666f722065616368206163636f756e74206f6e20656163682064657374696e6174696f6e20636861696e2ec850656e64696e67436f756e63696c5369676e6572427944657374696e6174696f6e436861696e416e644163636f756e7449640001080202a5081102040004710120412073746167656420636f756e63696c207369676e657220726f746174696f6e20666f7220746865206e65787420636f756e63696c2061637469766174696f6e206f6e20656163682064657374696e6174696f6e20636861696e2eb4416374697665476c6f62616c49737375616e6365436f756e63696c427944657374696e6174696f6e436861696e000104020902340400043501205468652061637469766520476c6f62616c2049737375616e636520436f756e63696c206861736820696e20666f72636520666f7220656163682064657374696e6174696f6e20636861696e2edc43757272656e745472616e736665724f75744d6963726f676f6e735065724172676f6e6f74427944657374696e6174696f6e436861696e000104020902180400045d0120436f6e736572766174697665207472616e736665722d6f757420636f6e76657273696f6e20726174652063757272656e746c792071756f74656420666f7220656163682064657374696e6174696f6e20636861696e2ee050726576696f75735472616e736665724f75744d6963726f676f6e735065724172676f6e6f74427944657374696e6174696f6e436861696e00010402090218040008690120496d6d6564696174656c792070726576696f7573207472616e736665722d6f757420636f6e76657273696f6e2072617465207374696c6c206163636570746564207768696c652074686520666c6f6f722072617463686574738c20757077617264206163726f737320636f756e63696c207472616e736974696f6e732e6c476c6f62616c49737375616e6365436f756e63696c4279486173680001040234a908040004650120486973746f726963616c20476c6f62616c2049737375616e636520436f756e63696c20736e617073686f7473206b65796564206279207468656972207369676e65722d6f72646572656420636f756e63696c20686173682ea44c6174657374517565756564436f756e63696c48617368427944657374696e6174696f6e436861696e000104020902340400086d0120546865206c61746573742071756575656420636f756e63696c206861736820746861742073686f756c6420676f7665726e20746865206e65787420717565756520656e747279206f6e20656163682064657374696e6174696f6e1c20636861696e2ed45472616e736665724f757451756f74654d6963726f676f6e735065724172676f6e6f74427944657374696e6174696f6e436861696e0001040209021804000855012054686520636f6e736572766174697665207472616e736665722d6f75742071756f746520666c6f6f72207468617420746865206e657874206e65776c79206f70656e6564207472616e736665722073686f756c649020736e617073686f74206f6e20656163682064657374696e6174696f6e20636861696e2ebc4e657874436f756e63696c417070726f76616c51756575654e6f6e6365427944657374696e6174696f6e436861696e0101040209023020000000000000000004310120546865206e657874206f7574626f756e6420617070726f76616c2d7175657565206e6f6e636520746f2061737369676e206f6e20656163682064657374696e6174696f6e20636861696e2eb8436f756e63696c417070726f76616c5175657565427944657374696e6174696f6e436861696e416e644e6f6e63650001080205c108c508040004210120546865206f726465726564206f7574626f756e6420636f756e63696c20617070726f76616c20717565756520666f7220656163682064657374696e6174696f6e20636861696e2e684d696e74696e67417574686f72697469657342795369676e6572000104021102d9080400042101204c6f63616c204d696e74696e6720417574686f72697479207265636f726473206b657965642062792074686569722064657374696e6174696f6e207369676e696e67206b65792eb84d696e696d756d4d696e74696e67417574686f7269747956616c7565427944657374696e6174696f6e436861696e010104020902184010270000000000000000000000000000085101205065722d636861696e206f7665727269646520666f7220746865206d696e696d756d206e6f726d616c697a6564206d6963726f676f6e2076616c756520726571756972656420746f20726567697374657220614c204d696e74696e6720417574686f726974792ef04d696e74696e67417574686f7269747941637469766174696f6e52657061796d656e7450726963696e67427944657374696e6174696f6e436861696e000104020902d1040400085d012050726963696e6720696e70757473207573656420746f2072657061792072656c617965727320666f72204d696e74696e6720417574686f726974792061637469766174696f6e2062617463686573206f6e20656163684c2064657374696e6174696f6e20636861696e2e984e6578745472616e736665724f75744e6f6e6365427953656e64696e674163636f756e74496401010402003020000000000000000004dc204e657874206f7574626f756e64207472616e73666572206e6f6e636520666f7220656163682073656e64696e67206163636f756e742e3c5472616e736665724f7574427949640001040234e5080400048c204f7574626f756e64207472616e7366657273206279207472616e736665722069642e9c50656e64696e67436f6c6c61746572616c697a6174696f6e52657175657374734279436861696e0101040209020109040004050120436f6c6c61746572616c697a6174696f6e207265717565737473207374696c6c206f70656e206f6e20656163682064657374696e6174696f6e20636861696e2eb44e6f6e5465726d696e616c5472616e736665724f7574436f756e74427944657374696e6174696f6e436861696e010104020902101000000000042101204e756d626572206f66206e6f6e2d7465726d696e616c207472616e736665722d6f7574207265717565737473206f6e20656163682064657374696e6174696f6e20636861696e2ebc50656e64696e675472616e736665724f757443697263756c6174696f6e427944657374696e6174696f6e436861696e0101040209020d0980000000000000000000000000000000000000000000000000000000000000000004c42050656e64696e67206f7574626f756e64207072696e636970616c2062792064657374696e6174696f6e20636861696e2e01c504010502344c457468657265756d4275726e4163636f756e7400806d6f646c78636861696e7472006275726e0000000000000000000000000000000445012043616e6f6e6963616c20457468657265756d206275726e2d6163636f756e74696e67206163636f756e7420726570726573656e74696e672066756e6473206d6f76656420746f20457468657265756d2e704d6178416374697669746965735065725265636569707450726f6f66101010000000043d01204d6178696d756d206e756d626572206f66206f726465726564206761746577617920616374697669746965732074686174206d6179207368617265206f6e6520726563656970742070726f6f662e704d61785265636569707450726f6f667350657245787472696e73696310100a000000043d01204d6178696d756d206e756d626572206f662070726f76656e20726563656970742070726f6f66732074686174206d617920626520737570706c69656420696e206f6e652065787472696e7369632e444d6178436f756e63696c4d656d62657273101064000000042101204d6178696d756d206e756d626572206f66206d656d62657273207468652061637469766520476c6f62616c2049737375616e636520436f756e63696c206d61792063617272792e604d61785175657565417070726f76616c7350657243616c6c101020000000046101204d6178696d756d206e756d626572206f6620636f6e746967756f757320717565756520617070726f76616c73206f6e6520636f756e63696c206d656d626572206d6179207375626d697420696e206f6e652063616c6c2e845472616e736665724f757456616c6964697479457468657265756d426c6f636b733020401901000000000008210120457468657265756d2d626c6f636b2077696e646f7720616464656420746f20746865206c617465737420766572696669656420626c6f636b207768656e206f70656e696e67206138207472616e73666572206f75742e844d61785665726966696564457865637574696f6e426c6f636b4167655469636b7330203c00000000000000084101204d6178696d756d206167652c20696e207469636b732c206f662074686520766572696669656420457468657265756d20657865637574696f6e20616e63686f72207573656420746f206f70656e206138207472616e73666572206f75742ea45472616e736665724f75744d696e74696e67417574686f726974795469704261736973506f696e747310100a000000043501204d696e74696e6720617574686f72697479207469702072617465206170706c69656420746f207472616e736665722d6f757420726571756573747320696e20626173697320706f696e74732e784d696e5472616e73666572436f6c6c61746572616c496e6372656d656e74184010270000000000000000000000000000085d01204d696e696d756d206e6f726d616c697a656420636f6c6c61746572616c20696e6372656d656e7420616363657074656420666f72206f6e65207472616e7366657220756e6c6573732074686520696e6372656d656e74a820636f6d706c65746573207468652072656d61696e696e6720756e636f766572656420616d6f756e742eac44656661756c744d696e696d756d4d696e74696e67417574686f726974794d6963726f676f6e56616c75651840102700000000000000000000000000000859012044656661756c74206d696e696d756d206e6f726d616c697a6564206d6963726f676f6e2076616c756520726571756972656420746f2072656769737465722061204d696e74696e6720417574686f72697479206f6e5c206f6e652064657374696e6174696f6e20636861696e2ea44d617850656e64696e675472616e736665724f75747350657244657374696e6174696f6e436861696e101064000000046101204d6178696d756d206e756d626572206f66206e6f6e2d7465726d696e616c207472616e736665722d6f757420726571756573747320747261636b656420666f72206f6e652064657374696e6174696f6e20636861696e2e54436f756e63696c526f746174696f6e4672616d657330200a00000000000000085101204d696e696d756d2072656d61696e696e67206672616d6520636f6d6d69746d656e74207265717569726564207768656e2072656164696e67207661756c7420636f6d6d697474656420636f6c6c61746572616c050120636170616369747920666f7220636f756e63696c20776569676874696e6720616e64204d696e74696e6720417574686f7269747920636f6c6c61746572616c2e806d61785f70726f6f665f657865637574696f6e5f6865616465725f6465707468101040000000044501204d6178696d756d20657865637574696f6e2068656164657273206361727269656420696e206f6e6520726563656970742070726f6f662773207461726765742d746f2d616e63686f7220636861696e2e011109241509042c34417574686f72697a6543616c6c1d099048436865636b4e6f6e5a65726f53656e64657221099040436865636b5370656356657273696f6e25091038436865636b547856657273696f6e29091030436865636b47656e657369732d093438436865636b4d6f7274616c69747931093428436865636b4e6f6e63653909902c436865636b5765696768743d0990604368617267655472616e73616374696f6e5061796d656e7441099044436865636b4d657461646174614861736845095109345765696768745265636c61696d4d09905509\"\n}\n","{\n \"specName\": \"argon\",\n \"implName\": \"argon\",\n \"authoringVersion\": 1,\n \"specVersion\": 156,\n \"implVersion\": 10,\n \"apis\": [\n [\"0xd2bc9897eed08f15\", 3],\n [\"0x11de59f9923f03d8\", 1],\n [\"0x5e4dc2ce83c23f09\", 1],\n [\"0x40fe3ad401f8959a\", 6],\n [\"0xbc9d89904f5b923f\", 1],\n [\"0xf3ff14d5ab527059\", 3],\n [\"0xab3c0572291feb8b\", 2],\n [\"0xe6683faaa563317a\", 2],\n [\"0xed99c5acb25eedf5\", 3],\n [\"0x51c97e4020145cb0\", 1],\n [\"0xfbc577b9d747efd6\", 1],\n [\"0xccd9de6396c899ca\", 1],\n [\"0x05dd9be92cc17d28\", 3],\n [\"0xdf6acb689907609b\", 5],\n [\"0xf78b278be53f454c\", 2],\n [\"0x0090f9d890bb0bb2\", 1],\n [\"0xbab599c4f0d362c6\", 1],\n [\"0x37e397fc7c91f5e4\", 2],\n [\"0x37c8bb1350a9a2a8\", 4],\n [\"0x61571683e6d7a7c8\", 1],\n [\"0xfff0fb031985f8a1\", 2]\n ],\n \"transactionVersion\": 5,\n \"systemVersion\": 1,\n \"stateVersion\": 1\n}\n","{\n \"mainnet\": \"0xee11bf2ff8838fcb0832c09085c5319a08ba6111c225ecd899fe659872d9d45d\",\n \"testnet\": \"0x66dc4e5ff85faddb0311b768eb73a58d9a00c65f06056ffaa370a1b1354d7411\"\n}\n","import { ArgonClient } from './index';\n\nexport interface IArgonCpiSnapshot {\n // The target price of the argon as a fixed point number (18 decimals)\n argonUsdTargetPrice: bigint;\n // The current price of the argon as a fixed point number (18 decimals)\n argonUsdPrice: bigint;\n // The block hash in which the cpi was finalized\n finalizedBlock: Uint8Array;\n tick: bigint;\n}\n\n/**\n * The WageProtector class is used to protect wages from inflation by using the current Argon Price Index to adjust the\n * baseAmount to current conditions. This ensures that the wage is always stable and does not lose or gain value based on\n * demand for the argon or fiat monetary supply changes.\n */\nexport class WageProtector {\n constructor(public latestCpi: IArgonCpiSnapshot) {}\n\n /**\n * Converts the base wage to the current wage using the latest CPI snapshot\n *\n * @param baseWage The base wage to convert\n * @returns The protected wage\n */\n public getProtectedWage(baseWage: bigint): bigint {\n return (baseWage * this.latestCpi.argonUsdTargetPrice) / this.latestCpi.argonUsdPrice;\n }\n\n /**\n * Subscribes to the current CPI and calls the callback function whenever the CPI changes\n * @param client The ArgonClient to use\n * @param callback The callback function to call when the CPI changes\n * @returns An object with an unsubscribe function that can be called to stop the subscription\n */\n public static async subscribe(\n client: ArgonClient,\n callback: (cpi: WageProtector) => void,\n ): Promise<{\n unsubscribe: () => void;\n }> {\n const unsubscribe = await client.query.priceIndex.current(async cpi => {\n if (cpi.isNone) {\n return;\n }\n const finalizedBlock = await client.rpc.chain.getFinalizedHead();\n\n callback(\n new WageProtector({\n argonUsdTargetPrice: cpi.value.argonUsdTargetPrice.toBigInt(),\n argonUsdPrice: cpi.value.argonUsdPrice.toBigInt(),\n finalizedBlock: new Uint8Array(finalizedBlock),\n tick: cpi.value.tick.toBigInt(),\n }),\n );\n });\n return { unsubscribe };\n }\n\n /**\n * Creates a new WageProtector instance by subscribing to the current CPI and waiting for the first value\n * @param client The ArgonClient to use\n */\n public static async create(client: ArgonClient): Promise<WageProtector> {\n return new Promise<WageProtector>(async (resolve, reject) => {\n try {\n const { unsubscribe } = await WageProtector.subscribe(client, x => {\n resolve(x);\n unsubscribe();\n });\n } catch (e) {\n reject(e);\n }\n });\n }\n}\n","import BigNumber from 'bignumber.js';\nimport type { ArgonClient } from './index';\nimport { EventRecord } from '@polkadot/types/interfaces/system';\n\nexport const MICROGONS_PER_ARGON = 1_000_000;\ntype IDispatchErrorLike = {\n isModule: boolean;\n asModule: Parameters<ArgonClient['registry']['findMetaError']>[0];\n toString(): string;\n};\n\nexport function formatArgons(microgons: bigint | number): string {\n if (microgons === undefined || microgons === null) return 'na';\n const isNegative = microgons < 0;\n let format = BigNumber(microgons.toString())\n .abs()\n .div(MICROGONS_PER_ARGON)\n .toFormat(2, BigNumber.ROUND_FLOOR);\n if (format.endsWith('.00')) {\n format = format.slice(0, -3);\n }\n return `${isNegative ? '-' : ''}₳${format}`;\n}\n\nexport async function gettersToObject<T>(obj: T): Promise<T> {\n if (obj === null || obj === undefined || typeof obj !== 'object') return obj;\n\n const keys = [];\n\n for (const key in obj) {\n keys.push(key);\n }\n\n if (Symbol.iterator in obj) {\n const iterableToArray = [];\n // @ts-expect-error - it should iterate by virtue of Symbol.iterator\n for (const item of obj) {\n iterableToArray.push(await gettersToObject(item));\n }\n return iterableToArray as T;\n }\n\n const result = {} as any;\n for (const key of keys) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, key);\n // Skip functions\n if (descriptor && typeof descriptor.value === 'function') {\n continue;\n }\n const value = descriptor && descriptor.get ? descriptor.get.call(obj) : obj[key as keyof T];\n if (typeof value === 'function') continue;\n\n result[key] = await gettersToObject(value);\n }\n return result as T;\n}\n\nexport function dispatchErrorToString(client: ArgonClient, error: IDispatchErrorLike) {\n let message = error.toString();\n if (error.isModule) {\n const decoded = client.registry.findMetaError(error.asModule);\n const { docs, name, section } = decoded;\n message = `${section}.${name}: ${docs.join(' ')}`;\n }\n return message;\n}\n\nexport function isOutdatedTransactionError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes('Invalid Transaction: Transaction is outdated') ||\n message.includes('InvalidTransaction::Stale')\n );\n}\n\nexport const TxSubmissionErrorCode = {\n Dropped: 'TxSubmission.Dropped',\n Invalid: 'TxSubmission.Invalid',\n Usurped: 'TxSubmission.Usurped',\n} as const;\n\nexport type TxSubmissionErrorCode =\n (typeof TxSubmissionErrorCode)[keyof typeof TxSubmissionErrorCode];\n\nexport class TxSubmissionError extends Error {\n constructor(\n public readonly errorCode: TxSubmissionErrorCode,\n message: string,\n ) {\n super(message);\n this.name = 'TxSubmissionError';\n }\n}\n\nexport function isTxSubmissionError(\n error: unknown,\n ...codes: TxSubmissionErrorCode[]\n): error is TxSubmissionError {\n if (!(error instanceof TxSubmissionError)) {\n return false;\n }\n\n return codes.length === 0 || codes.includes(error.errorCode);\n}\n\n// ExtrinsicError\nexport class ExtrinsicError extends Error {\n constructor(\n public readonly errorCode: string,\n public readonly details?: string,\n public readonly batchInterruptedIndex?: number,\n public readonly txFee: bigint = 0n,\n ) {\n super(errorCode);\n }\n\n public override toString() {\n if (this.batchInterruptedIndex !== undefined) {\n return `${this.errorCode} ${this.details ?? ''} (Batch interrupted at index ${this.batchInterruptedIndex})`;\n }\n return `${this.errorCode} ${this.details ?? ''}`;\n }\n}\n\nexport function dispatchErrorToExtrinsicError(\n client: ArgonClient,\n error: IDispatchErrorLike,\n batchInterruptedIndex?: number,\n txFee?: bigint,\n) {\n if (error.isModule) {\n const decoded = client.registry.findMetaError(error.asModule);\n const { docs, name, section } = decoded;\n return new ExtrinsicError(`${section}.${name}`, docs.join(' '), batchInterruptedIndex, txFee);\n }\n return new ExtrinsicError(error.toString(), undefined, batchInterruptedIndex, txFee);\n}\n\n/**\n * Check for an extrinsic success event in the given events. Helpful to validate the result of an extrinsic inclusion in a block (it will be included even if it fails)\n * @param events The events to check\n * @param client The client to use\n * @returns A promise that resolves if the extrinsic was successful, and rejects if it failed\n */\nexport function checkForExtrinsicSuccess(\n events: EventRecord[],\n client: ArgonClient,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n for (const { event } of events) {\n if (client.events.system.ExtrinsicSuccess.is(event)) {\n resolve();\n } else if (client.events.system.ExtrinsicFailed.is(event)) {\n // extract the data for this event\n const [dispatchError] = event.data;\n let errorInfo = dispatchError.toString();\n\n if (dispatchError.isModule) {\n const decoded = client.registry.findMetaError(dispatchError.asModule);\n errorInfo = `${decoded.section}.${decoded.name}`;\n }\n\n reject(new Error(`${event.section}.${event.method}:: ExtrinsicFailed:: ${errorInfo}`));\n }\n }\n });\n}\n\n/**\n * Return a bigint value using a canonical field first, then named fallback fields on the same source object.\n * Helpful when reading runtime records that may use older field names across spec versions.\n * @param value The preferred bigint-like value, usually from the current field name\n * @param source The object to read fallback fields from\n * @param fallbackFields The fallback field names to check in order\n * @param fallback The value to return if no preferred or fallback field is present\n * @returns The preferred or fallback value converted to bigint\n */\nexport function getBigIntFallback<T extends object>(\n value: IBigIntLike | undefined,\n source: T,\n fallbackFields: readonly string[],\n fallback = 0n,\n): bigint {\n if (typeof value === 'bigint') return value;\n if (value !== undefined) return value.toBigInt();\n\n const record = source as Record<string, IBigIntLike | undefined>;\n\n for (const fieldName of fallbackFields) {\n const field = record[fieldName];\n if (typeof field === 'bigint') return field;\n if (field !== undefined) return field.toBigInt();\n }\n\n return fallback;\n}\n\ntype IBigIntLike = bigint | { toBigInt(): bigint };\n","import { ArgonClient, GenericEvent, SpRuntimeDispatchError, u8aEq } from './index';\nimport {\n dispatchErrorToExtrinsicError,\n ExtrinsicError,\n TxSubmissionError,\n TxSubmissionErrorCode,\n} from './utils';\nimport type { ISubmittableResult } from '@polkadot/types/types/extrinsic';\nimport { DispatchError } from '@polkadot/types/interfaces';\n\nexport type ITxProgressCallback = (progressToInBlock: number, result?: TxResult) => void;\n\ntype IBlockInclusion = {\n blockHash: Uint8Array;\n blockNumber?: number;\n extrinsicIndex: number;\n events: GenericEvent[];\n};\n\ntype IPendingInBlock = Omit<IBlockInclusion, 'blockNumber'>;\n\nexport class TxResult {\n #isBroadcast = false;\n #submissionError?: Error;\n #pendingInBlock?: IPendingInBlock;\n\n set isBroadcast(value: boolean) {\n this.#isBroadcast = value;\n this.updateProgress();\n }\n\n get isBroadcast(): boolean {\n return this.#isBroadcast;\n }\n\n set submissionError(value: Error) {\n if (value) {\n this.#submissionError = value;\n this.finalizedReject(value);\n this.inBlockReject(value);\n this.updateProgress();\n }\n }\n\n get submissionError(): Error | undefined {\n return this.#submissionError;\n }\n\n public waitForFinalizedBlock: Promise<Uint8Array>;\n public waitForInFirstBlock: Promise<Uint8Array>;\n public events: GenericEvent[] = [];\n\n public extrinsicError: ExtrinsicError | Error | undefined;\n public extrinsicIndex: number | undefined;\n\n public txProgressCallback?: ITxProgressCallback;\n /**\n * The index of the batch that was interrupted, if any.\n */\n public batchInterruptedIndex?: number;\n public blockHash?: Uint8Array;\n public blockNumber?: number;\n /**\n * The final fee paid for the transaction, including the fee tip.\n */\n public finalFee?: bigint;\n /**\n * The fee tip paid for the transaction.\n */\n public finalFeeTip?: bigint;\n\n public txProgress = 0;\n public isFinalized = false;\n\n protected finalizedResolve!: (block: Uint8Array) => void;\n protected finalizedReject!: (error: ExtrinsicError | Error) => void;\n protected inBlockResolve!: (block: Uint8Array) => void;\n protected inBlockReject!: (error: ExtrinsicError | Error) => void;\n\n constructor(\n protected readonly client: ArgonClient,\n public extrinsic: {\n signedHash: string;\n method: any;\n submittedTime: Date;\n submittedAtBlockNumber: number;\n accountAddress: string;\n nonce: number;\n },\n ) {\n this.waitForFinalizedBlock = new Promise((resolve, reject) => {\n this.finalizedResolve = resolve;\n this.finalizedReject = reject;\n });\n this.waitForInFirstBlock = new Promise((resolve, reject) => {\n this.inBlockResolve = resolve;\n this.inBlockReject = reject;\n });\n // drown reject\n this.waitForFinalizedBlock.catch(() => null);\n this.waitForInFirstBlock.catch(() => null);\n }\n\n public async setSeenInBlock(block: IBlockInclusion): Promise<void> {\n if (block.blockNumber === undefined) {\n this.#pendingInBlock = {\n blockHash: block.blockHash,\n extrinsicIndex: block.extrinsicIndex,\n events: block.events,\n };\n return;\n }\n\n if (\n this.blockHash &&\n this.blockNumber === block.blockNumber &&\n this.extrinsicIndex === block.extrinsicIndex &&\n u8aEq(this.blockHash, block.blockHash)\n ) {\n this.#pendingInBlock = undefined;\n return;\n }\n\n this.#pendingInBlock = undefined;\n this.parseEvents(block.events);\n this.blockHash = block.blockHash;\n this.blockNumber = block.blockNumber;\n this.extrinsicIndex = block.extrinsicIndex;\n this.updateProgress();\n if (this.extrinsicError) {\n this.inBlockReject(this.extrinsicError);\n } else {\n this.inBlockResolve(block.blockHash);\n }\n }\n\n public async setFinalized() {\n const pendingInBlock = this.#pendingInBlock;\n if (pendingInBlock) {\n await this.publishSeenInBlock(pendingInBlock);\n } else if (this.blockHash && this.blockNumber === undefined) {\n if (this.extrinsicIndex === undefined) {\n throw new Error('Cannot finalize transaction before extrinsic index is known');\n }\n\n await this.publishSeenInBlock({\n blockHash: this.blockHash,\n extrinsicIndex: this.extrinsicIndex,\n events: this.events,\n });\n }\n\n this.isFinalized = true;\n this.updateProgress();\n\n let error = this.extrinsicError ?? this.submissionError;\n if (!error && !this.blockHash) {\n error = new Error('Cannot finalize transaction before it is included in a block');\n }\n\n if (error) {\n this.finalizedReject(error);\n this.inBlockReject(error);\n } else {\n this.finalizedResolve(this.blockHash!);\n this.inBlockResolve(this.blockHash!);\n }\n }\n\n public onSubscriptionResult(result: ISubmittableResult) {\n const { events, status, isFinalized, txIndex } = result;\n const extrinsicEvents = events.map(x => x.event);\n\n if (status.isBroadcast) {\n this.isBroadcast = true;\n if (result.internalError) this.submissionError = result.internalError;\n }\n if (status.isInBlock) {\n try {\n const pendingInBlock = createPendingInBlock(\n Uint8Array.from(status.asInBlock),\n txIndex,\n extrinsicEvents,\n );\n this.#pendingInBlock = pendingInBlock;\n\n void this.publishSeenInBlock(pendingInBlock).catch(error => {\n if (!isMissingBlockHeaderError(error)) {\n this.submissionError = error as Error;\n }\n });\n } catch (error) {\n this.submissionError = error as Error;\n }\n }\n if (status.isUsurped) {\n this.#pendingInBlock = undefined;\n this.submissionError = new TxSubmissionError(\n TxSubmissionErrorCode.Usurped,\n `Transaction was usurped by ${status.asUsurped.toHex()}.`,\n );\n }\n if (status.isDropped) {\n this.#pendingInBlock = undefined;\n this.submissionError = new TxSubmissionError(\n TxSubmissionErrorCode.Dropped,\n 'Transaction was dropped before it was included in a block.',\n );\n }\n if (status.isInvalid) {\n this.#pendingInBlock = undefined;\n this.submissionError = new TxSubmissionError(\n TxSubmissionErrorCode.Invalid,\n 'Transaction was rejected as invalid by the node.',\n );\n }\n if (isFinalized) {\n try {\n this.#pendingInBlock = createPendingInBlock(\n Uint8Array.from(status.asFinalized),\n txIndex ?? this.#pendingInBlock?.extrinsicIndex ?? this.extrinsicIndex,\n extrinsicEvents.length ? extrinsicEvents : this.events,\n );\n } catch (error) {\n this.submissionError = error as Error;\n return;\n }\n\n void this.setFinalized().catch(error => {\n this.submissionError = error as Error;\n });\n }\n }\n\n private async publishSeenInBlock(block: IPendingInBlock) {\n const pendingInBlock = this.#pendingInBlock;\n if (\n !pendingInBlock ||\n pendingInBlock.extrinsicIndex !== block.extrinsicIndex ||\n !u8aEq(pendingInBlock.blockHash, block.blockHash)\n ) {\n return;\n }\n\n const blockNumber = await this.client.rpc.chain\n .getHeader(block.blockHash)\n .then(h => h.number.toNumber());\n\n const currentPendingInBlock = this.#pendingInBlock;\n if (\n !currentPendingInBlock ||\n currentPendingInBlock.extrinsicIndex !== block.extrinsicIndex ||\n !u8aEq(currentPendingInBlock.blockHash, block.blockHash)\n ) {\n return;\n }\n\n await this.setSeenInBlock({\n ...block,\n blockNumber,\n });\n }\n\n private updateProgress() {\n if (this.isFinalized || this.submissionError) {\n this.txProgress = 100;\n } else if (this.blockNumber) {\n const elapsedBlocks = this.blockNumber - this.extrinsic.submittedAtBlockNumber;\n const FINALIZATION_BLOCKS = 5;\n const remainingPercent = Math.max(0, FINALIZATION_BLOCKS - elapsedBlocks) * 20;\n const percent = 100 - remainingPercent;\n this.txProgress = Math.min(percent, 99);\n } else if (this.extrinsic.submittedAtBlockNumber) {\n this.txProgress = 10;\n }\n this.txProgressCallback?.(this.txProgress);\n }\n\n private parseEvents(events: GenericEvent[]) {\n let encounteredError: SpRuntimeDispatchError | undefined;\n for (const event of events) {\n if (this.client.events.system.ExtrinsicFailed.is(event)) {\n const { dispatchError } = event.data;\n encounteredError ??= dispatchError;\n }\n if (this.client.events.utility.BatchInterrupted.is(event)) {\n const { index, error } = event.data;\n this.batchInterruptedIndex = index.toNumber();\n encounteredError = error;\n }\n if (this.client.events.transactionPayment.TransactionFeePaid.is(event)) {\n const { actualFee, tip } = event.data;\n this.finalFee = actualFee.toBigInt();\n this.finalFeeTip = tip.toBigInt();\n }\n }\n if (encounteredError) {\n this.extrinsicError = dispatchErrorToExtrinsicError(\n this.client,\n encounteredError as unknown as DispatchError,\n this.batchInterruptedIndex,\n this.finalFee,\n );\n } else {\n this.extrinsicError = undefined;\n }\n this.events = events;\n }\n}\n\nfunction createPendingInBlock(\n blockHash: Uint8Array,\n extrinsicIndex: number | undefined,\n events: GenericEvent[],\n): IPendingInBlock {\n if (extrinsicIndex === undefined) {\n throw new Error('Cannot publish transaction block state before extrinsic index is known');\n }\n\n return {\n blockHash,\n extrinsicIndex,\n events,\n };\n}\n\nfunction isMissingBlockHeaderError(error: unknown) {\n return String(error).includes('Unable to retrieve header and parent from supplied hash');\n}\n","import { waitForLoad } from './index';\nimport type { ArgonClient } from './index';\nimport type { SubmittableExtrinsic } from '@polkadot/api/promise/types';\nimport type { SignerOptions } from '@polkadot/api/types';\nimport type { KeyringPair } from '@polkadot/keyring/types';\nimport { ITxProgressCallback, TxResult } from './TxResult';\n\nexport type TxSigningAccount =\n | KeyringPair\n | { address: string; signer: NonNullable<SignerOptions['signer']> };\n\nexport type ISubmittableOptions = Partial<Omit<SignerOptions, 'signer'>> & {\n tip?: bigint;\n logResults?: boolean;\n useLatestNonce?: boolean;\n txProgressCallback?: ITxProgressCallback;\n disableAutomaticTxTracking?: boolean;\n};\n\nexport class TxSubmitter {\n public readonly address: string;\n\n constructor(\n public readonly client: ArgonClient,\n public tx: SubmittableExtrinsic,\n public readonly account: TxSigningAccount,\n ) {\n this.address = account.address;\n }\n\n public async feeEstimate(tip?: bigint): Promise<bigint> {\n const { partialFee } = await this.tx.paymentInfo(this.address, { tip });\n return partialFee.toBigInt();\n }\n\n public async canAfford(\n options: {\n tip?: bigint;\n unavailableBalance?: bigint;\n includeExistentialDeposit?: boolean;\n } = {},\n ): Promise<{ canAfford: boolean; availableBalance: bigint; txFee: bigint }> {\n const { tip, unavailableBalance } = options;\n const account = await this.client.query.system.account(this.address);\n let availableBalance = account.data.free.toBigInt();\n const userBalance = availableBalance;\n if (unavailableBalance) {\n availableBalance -= unavailableBalance;\n }\n const existentialDeposit = options.includeExistentialDeposit\n ? this.client.consts.balances.existentialDeposit.toBigInt()\n : 0n;\n const fees = await this.feeEstimate(tip);\n const totalCharge = fees + (tip ?? 0n);\n const canAfford = availableBalance >= totalCharge + existentialDeposit;\n return { canAfford, availableBalance: userBalance, txFee: fees };\n }\n\n public async sign(options: ISubmittableOptions = {}): Promise<SubmittableExtrinsic> {\n const { useLatestNonce, ...apiOptions } = options;\n await waitForLoad();\n if (useLatestNonce && apiOptions.nonce === undefined) {\n apiOptions.nonce = await this.client.rpc.system.accountNextIndex(this.address);\n }\n\n if ('signer' in this.account) {\n return await this.tx.signAsync(this.address, { ...apiOptions, signer: this.account.signer });\n }\n\n return await this.tx.signAsync(this.account, apiOptions);\n }\n\n public async submitSigned(\n signedTx: SubmittableExtrinsic,\n options: ISubmittableOptions = {},\n ): Promise<TxResult> {\n const blockHeight = await this.client.rpc.chain.getHeader().then(h => h.number.toNumber());\n if (options.logResults) {\n this.logRequest();\n }\n const txHash = signedTx.hash.toHex();\n const result = new TxResult(this.client, {\n signedHash: txHash,\n method: signedTx.method.toHuman(),\n accountAddress: this.address,\n submittedTime: new Date(),\n submittedAtBlockNumber: blockHeight,\n nonce: signedTx.nonce.toNumber(),\n });\n result.txProgressCallback = options.txProgressCallback;\n if (options.disableAutomaticTxTracking !== true) {\n await signedTx.send(result.onSubscriptionResult.bind(result));\n } else {\n try {\n await signedTx.send();\n result.isBroadcast = true;\n } catch (error) {\n result.submissionError = error as Error;\n }\n }\n return result;\n }\n\n public async submit(options: ISubmittableOptions = {}): Promise<TxResult> {\n const signedTx = await this.sign(options);\n return await this.submitSigned(signedTx, options);\n }\n\n private logRequest() {\n let toHuman = (this.tx.toHuman() as any).method;\n const txString = [];\n let api = formatCall(toHuman);\n const args: any[] = [];\n if (api === 'proxy.proxy') {\n toHuman = toHuman.args.call;\n txString.push('Proxy');\n api = formatCall(toHuman);\n }\n if (api.startsWith('utility.batch')) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n const calls = toHuman.args.calls.map(formatCall).join(', ');\n txString.push(`Batch[${calls}]`);\n } else {\n txString.push(api);\n args.push(toHuman.args);\n }\n args.unshift(txString.join('->'));\n console.log('Submitting transaction from %s:', this.address, ...args);\n }\n}\n\nfunction formatCall(call: any): string {\n return `${call.section}.${call.method}`;\n}\n","import { Keyring, KeyringPair, mnemonicGenerate } from './index';\n\nexport function keyringFromSuri(\n suri: string,\n cryptoType: 'sr25519' | 'ed25519' = 'sr25519',\n): KeyringPair {\n return new Keyring({ type: cryptoType }).createFromUri(suri);\n}\n\nexport function createKeyringPair(opts: { cryptoType?: 'sr25519' | 'ed25519' }): KeyringPair {\n const { cryptoType } = opts;\n const seed = mnemonicGenerate();\n return keyringFromSuri(seed, cryptoType);\n}\n","import { getOfflineRegistry, type ArgonPrimitivesDigestsFrameInfo, type Header } from './index';\n\nexport function getTickFromHeader(header: Header): number | undefined {\n for (const x of header.digest.logs) {\n if (x.isPreRuntime) {\n const [engineId, data] = x.asPreRuntime;\n if (engineId.toString() === 'aura') {\n return getOfflineRegistry().createType('u64', data).toNumber();\n }\n }\n }\n return undefined;\n}\n\nexport function getAuthorFromHeader(header: Header): string | undefined {\n for (const x of header.digest.logs) {\n if (x.isPreRuntime) {\n const [engineId, data] = x.asPreRuntime;\n if (engineId.toString() === 'pow_') {\n return getOfflineRegistry().createType('AccountId32', data).toHuman();\n }\n }\n }\n return undefined;\n}\n\nexport function getFrameInfoFromHeader(\n header: Header,\n): { isNewFrame: boolean; frameId: number; frameRewardTicksRemaining: number } | undefined {\n for (const x of header.digest.logs) {\n if (x.isConsensus) {\n const [engineId, data] = x.asConsensus;\n if (engineId.toString() === 'fram') {\n const decoded: ArgonPrimitivesDigestsFrameInfo = getOfflineRegistry().createType(\n 'ArgonPrimitivesDigestsFrameInfo',\n data,\n );\n return {\n isNewFrame: decoded.isNewFrame.toPrimitive(),\n frameId: decoded.frameId.toNumber(),\n frameRewardTicksRemaining: decoded.frameRewardTicksRemaining.toNumber(),\n };\n }\n }\n }\n return undefined;\n}\n","import {\n type ArgonClient,\n type ArgonPrimitivesVault,\n FIXED_U128_DECIMALS,\n formatArgons,\n fromFixedNumber,\n MICROGONS_PER_ARGON,\n PERMILL_DECIMALS,\n toFixedNumber,\n TxSubmitter,\n} from './index';\nimport BigNumber from 'bignumber.js';\nimport bs58check from 'bs58check';\nimport { hexToU8a } from '@polkadot/util';\nimport { TxResult } from './TxResult';\nimport type { ISubmittableOptions, TxSigningAccount } from './TxSubmitter';\nimport type { PriceIndex } from './PriceIndex';\nimport { ApiDecoration } from '@polkadot/api/types';\nimport type {\n bool,\n BTreeMap,\n Bytes,\n Compact,\n Option,\n Struct,\n u128,\n u64,\n} from '@polkadot/types-codec';\nimport type { AccountId32 } from '@polkadot/types/interfaces/runtime';\nimport type { ITuple } from '@polkadot/types-codec/types';\nimport { ArgonPrimitivesVaultVaultTerms } from '@polkadot/types/lookup';\n\ninterface ArgonPrimitivesVaultV144 extends Struct {\n readonly operatorAccountId: AccountId32;\n readonly securitization: Compact<u128>;\n readonly argonsLocked: Compact<u128>;\n readonly argonsPendingActivation: Compact<u128>;\n readonly argonsScheduledForRelease: BTreeMap<u64, u128>;\n readonly securitizationRatio: Compact<u128>;\n readonly isClosed: bool;\n readonly terms: ArgonPrimitivesVaultVaultTerms;\n readonly pendingTerms: Option<ITuple<[u64, ArgonPrimitivesVaultVaultTerms]>>;\n readonly openedTick: Compact<u64>;\n}\n\nexport class Vault {\n public securitization!: bigint;\n public securitizationLocked!: bigint;\n public securitizationPendingActivation!: bigint;\n /**\n * Map of bitcoin height to amount of securitization released at that height\n */\n public securitizationReleaseSchedule: Map<number, bigint>;\n public terms!: ITerms;\n public operatorAccountId!: string;\n public isClosed!: boolean;\n public vaultId: number;\n public pendingTerms?: ITerms;\n public pendingTermsChangeTick?: number;\n public openedDate: Date;\n public openedTick: number;\n public securitizationRatio!: number;\n\n public lockedSatoshis!: number;\n public securitizedSatoshis!: number;\n public name?: string;\n public lastNameChangeTick?: number;\n public delegateAccountId?: string;\n\n constructor(\n id: number,\n vault: ArgonPrimitivesVault,\n public tickDuration: number,\n ) {\n this.vaultId = id;\n this.openedTick = vault.openedTick.toNumber();\n this.openedDate = new Date(this.openedTick * this.tickDuration);\n this.securitizationReleaseSchedule = new Map();\n this.load(vault);\n }\n\n public load(vault: ArgonPrimitivesVault | ArgonPrimitivesVaultV144): void {\n this.securitization = vault.securitization.toBigInt();\n this.securitizationRatio = fromFixedNumber(\n vault.securitizationRatio.toBigInt(),\n FIXED_U128_DECIMALS,\n ).toNumber();\n this.securitizationReleaseSchedule.clear();\n let schedule: BTreeMap<u64, u128>;\n if ('argonsLocked' in vault) {\n // spec 143 compatibility - don't bother with ratio as it was forced to 1:1\n this.securitizationLocked = vault.argonsLocked.toBigInt();\n this.securitizationPendingActivation = vault.argonsPendingActivation.toBigInt();\n schedule = vault.argonsScheduledForRelease;\n } else {\n this.securitizationLocked = vault.securitizationLocked.toBigInt();\n this.securitizationPendingActivation = vault.securitizationPendingActivation.toBigInt();\n schedule = vault.securitizationReleaseSchedule;\n }\n if (schedule.size > 0) {\n for (const [bitcoinHeight, amount] of schedule.entries()) {\n this.securitizationReleaseSchedule.set(bitcoinHeight.toNumber(), amount.toBigInt());\n }\n }\n const currentBonusSharingPercent =\n 'treasuryBonusProfitSharing' in vault.terms\n ? vault.terms.treasuryBonusProfitSharing\n : undefined;\n this.terms = {\n bitcoinAnnualPercentRate: fromFixedNumber(\n vault.terms.bitcoinAnnualPercentRate.toBigInt(),\n FIXED_U128_DECIMALS,\n ),\n bitcoinBaseFee: vault.terms.bitcoinBaseFee.toBigInt(),\n treasuryProfitSharing: fromFixedNumber(\n vault.terms.treasuryProfitSharing.toBigInt(),\n PERMILL_DECIMALS,\n ),\n treasuryBonusProfitSharing: fromFixedNumber(\n currentBonusSharingPercent?.toBigInt() ?? 0n,\n PERMILL_DECIMALS,\n ),\n };\n if ('lockedSatoshis' in vault) {\n this.lockedSatoshis = vault.lockedSatoshis.toNumber();\n this.securitizedSatoshis = vault.securitizedSatoshis.toNumber();\n } else {\n this.lockedSatoshis = 0;\n this.securitizedSatoshis = 0;\n }\n\n this.operatorAccountId = vault.operatorAccountId.toString();\n this.isClosed = vault.isClosed.valueOf();\n this.pendingTerms = undefined;\n this.pendingTermsChangeTick = undefined;\n this.name = undefined;\n this.lastNameChangeTick = undefined;\n this.delegateAccountId = undefined;\n if (vault.pendingTerms.isSome) {\n const [tickApply, terms] = vault.pendingTerms.value;\n const pendingBonusSharingPercent =\n 'treasuryBonusProfitSharing' in terms ? terms.treasuryBonusProfitSharing : undefined;\n this.pendingTermsChangeTick = tickApply.toNumber();\n this.pendingTerms = {\n bitcoinAnnualPercentRate: fromFixedNumber(\n terms.bitcoinAnnualPercentRate.toBigInt(),\n FIXED_U128_DECIMALS,\n ),\n bitcoinBaseFee: terms.bitcoinBaseFee.toBigInt(),\n treasuryProfitSharing: fromFixedNumber(\n terms.treasuryProfitSharing.toBigInt(),\n PERMILL_DECIMALS,\n ),\n treasuryBonusProfitSharing: fromFixedNumber(\n pendingBonusSharingPercent?.toBigInt() ?? 0n,\n PERMILL_DECIMALS,\n ),\n };\n }\n if ('name' in vault && vault.name.isSome) {\n this.name = decodeVaultName(vault.name.unwrap());\n }\n if ('lastNameChangeTick' in vault && vault.lastNameChangeTick.isSome) {\n this.lastNameChangeTick = vault.lastNameChangeTick.unwrap().toNumber();\n }\n const legacyDelegateAccount = (\n vault as {\n bitcoinLockDelegateAccount?: Option<AccountId32>;\n }\n ).bitcoinLockDelegateAccount;\n if (legacyDelegateAccount?.isSome) {\n this.delegateAccountId = legacyDelegateAccount.unwrap().toHuman();\n }\n if ('delegateAccountId' in vault && vault.delegateAccountId.isSome) {\n this.delegateAccountId = vault.delegateAccountId.unwrap().toHuman();\n }\n }\n\n public availableBitcoinSpace(): bigint {\n const availableSecuritization = this.availableSecuritization();\n const microgons = BigNumber(availableSecuritization).div(this.securitizationRatioBN());\n return bigNumberToBigInt(microgons);\n }\n\n public availableSecuritization(): bigint {\n return this.securitization - this.securitizationLocked;\n }\n\n public availableBondSpace(\n priceIndex: PriceIndex,\n bondLots?: Iterable<{ activeBonds: number }>,\n bondFullCapacityPerFrame?: boolean,\n ): bigint {\n if (this.securitizedSatoshis <= 0) return 0n;\n\n const microgonsPerBond = BigInt(MICROGONS_PER_ARGON);\n const totalBondCapacityMicrogons = priceIndex.getSatoshiPriceInTargetMicrogons(\n BigInt(this.securitizedSatoshis),\n );\n const capacityMicrogons = bondFullCapacityPerFrame\n ? totalBondCapacityMicrogons\n : totalBondCapacityMicrogons / 10n;\n const bondCapacity = Number(capacityMicrogons / microgonsPerBond);\n const activeBonds = [...(bondLots ?? [])].reduce(\n (sum, bondLot) => sum + bondLot.activeBonds,\n 0,\n );\n const availableBonds = activeBonds < bondCapacity ? bondCapacity - activeBonds : 0;\n\n return BigInt(availableBonds) * microgonsPerBond;\n }\n\n public getRelockCapacity(): bigint {\n return [...this.securitizationReleaseSchedule.values()].reduce((acc, val) => acc + val, 0n);\n }\n\n public securitizationRatioBN(): BigNumber {\n return new BigNumber(this.securitizationRatio);\n }\n\n public activatedSecuritization(): bigint {\n return this.securitizationLocked - this.securitizationPendingActivation;\n }\n\n /**\n * Returns the amount of securitization available to match per treasury pool\n */\n public activatedSecuritizationPerSlot(): bigint {\n const activated = this.activatedSecuritization();\n return activated / 10n;\n }\n\n public calculateBitcoinFee(amount: bigint): bigint {\n const feeBn = this.terms.bitcoinAnnualPercentRate\n .multipliedBy(amount)\n .integerValue(BigNumber.ROUND_CEIL);\n return BigInt(feeBn.toString()) + this.terms.bitcoinBaseFee;\n }\n\n public static async get(\n client: ArgonClient | ApiDecoration<'promise'>,\n vaultId: number,\n tickDurationMillis?: number,\n ): Promise<Vault> {\n const rawVault = await client.query.vaults.vaultsById(vaultId);\n if (rawVault.isNone) {\n throw new Error(`Vault with id ${vaultId} not found`);\n }\n const tickDuration =\n tickDurationMillis ??\n (await client.query.ticks.genesisTicker().then(x => x.tickDurationMillis.toNumber()))!;\n return new Vault(vaultId, rawVault.unwrap(), tickDuration);\n }\n\n public static async create(\n client: ArgonClient,\n txSigner: TxSigningAccount,\n args: {\n securitization: bigint | number;\n securitizationRatio: number;\n annualPercentRate: number;\n baseFee: bigint | number;\n bitcoinXpub: string;\n delegateAccountId?: string;\n name?: string;\n treasuryProfitSharing: number;\n treasuryBonusProfitSharing: number;\n doNotExceedBalance?: bigint;\n } & ISubmittableOptions,\n config: { tickDurationMillis?: number } = {},\n ): Promise<{ getVault(): Promise<Vault>; txResult: TxResult }> {\n const {\n securitization,\n securitizationRatio,\n annualPercentRate,\n baseFee,\n bitcoinXpub,\n delegateAccountId,\n name,\n tip,\n doNotExceedBalance,\n } = args;\n let xpubBytes = hexToU8a(bitcoinXpub);\n if (xpubBytes.length !== 78) {\n if (\n bitcoinXpub.startsWith('xpub') ||\n bitcoinXpub.startsWith('tpub') ||\n bitcoinXpub.startsWith('zpub')\n ) {\n const bytes = bs58check.decode(bitcoinXpub);\n if (bytes.length !== 78) {\n throw new Error('Invalid Bitcoin xpub key length, must be 78 bytes');\n }\n xpubBytes = bytes;\n }\n }\n if (securitizationRatio < 1 || securitizationRatio > 2) {\n throw new Error('Securitization ratio must be between 1 and 2');\n }\n const encodedName = encodeVaultName(name);\n const vaultParams = {\n terms: {\n // convert to fixed u128\n bitcoinAnnualPercentRate: toFixedNumber(annualPercentRate, FIXED_U128_DECIMALS),\n bitcoinBaseFee: BigInt(baseFee),\n treasuryProfitSharing: toFixedNumber(args.treasuryProfitSharing, PERMILL_DECIMALS),\n treasuryBonusProfitSharing: toFixedNumber(\n args.treasuryBonusProfitSharing,\n PERMILL_DECIMALS,\n ),\n },\n securitizationRatio: toFixedNumber(securitizationRatio, FIXED_U128_DECIMALS),\n securitization: BigInt(securitization),\n bitcoinXpubkey: xpubBytes,\n delegateAccountId: delegateAccountId ?? null,\n name: encodedName,\n };\n const tx = new TxSubmitter(client, client.tx.vaults.create(vaultParams), txSigner);\n if (doNotExceedBalance) {\n const finalTip = tip ?? 0n;\n let txFee = await tx.feeEstimate(finalTip);\n while (txFee + finalTip + vaultParams.securitization > doNotExceedBalance) {\n vaultParams.securitization = doNotExceedBalance - txFee - finalTip;\n tx.tx = client.tx.vaults.create(vaultParams);\n txFee = await tx.feeEstimate(finalTip);\n }\n }\n const canAfford = await tx.canAfford({ tip, unavailableBalance: BigInt(securitization) });\n if (!canAfford.canAfford) {\n throw new Error(\n `Insufficient balance to create vault. Required: ${formatArgons(securitization)}, Available: ${formatArgons(canAfford.availableBalance)}`,\n );\n }\n\n const result = await tx.submit({\n ...args,\n useLatestNonce: true,\n });\n\n async function getVault(): Promise<Vault> {\n await result.waitForFinalizedBlock;\n let vaultId: number | undefined;\n for (const event of result.events) {\n if (client.events.vaults.VaultCreated.is(event)) {\n vaultId = event.data.vaultId.toNumber();\n break;\n }\n }\n if (vaultId === undefined) {\n throw new Error('Vault creation failed, no VaultCreated event found');\n }\n return Vault.get(client, vaultId, config.tickDurationMillis);\n }\n return { getVault, txResult: result };\n }\n\n public static async setName(\n client: ArgonClient,\n txSigner: TxSigningAccount,\n args: {\n name?: string | null;\n } & ISubmittableOptions,\n ): Promise<TxResult> {\n const tx = new TxSubmitter(\n client,\n client.tx.vaults.setName(encodeVaultName(args.name)),\n txSigner,\n );\n\n return tx.submit({\n ...args,\n useLatestNonce: true,\n });\n }\n}\n\nexport interface ITerms {\n readonly bitcoinAnnualPercentRate: BigNumber;\n readonly bitcoinBaseFee: bigint;\n readonly treasuryProfitSharing: BigNumber;\n readonly treasuryBonusProfitSharing: BigNumber;\n}\nfunction bigNumberToBigInt(bn: BigNumber): bigint {\n return BigInt(bn.integerValue(BigNumber.ROUND_DOWN).toString());\n}\n\nfunction decodeVaultName(name: Bytes): string {\n return new TextDecoder().decode(Uint8Array.from(name));\n}\n\nfunction encodeVaultName(name?: string | null): string | null {\n if (name === undefined || name === null) {\n return null;\n }\n if (!/^[A-Z][A-Za-z0-9]{0,17}$/.test(name)) {\n throw new Error(\n 'Vault name must start with a capital letter and contain at most 18 alphanumeric characters',\n );\n }\n return name;\n}\n","import BigNumber from 'bignumber.js';\n\nexport function toFixedNumber(\n value: string | number | BigNumber, // accept string to avoid early precision loss\n decimals: number,\n): bigint {\n const factor = new BigNumber(10).pow(decimals);\n const bn = new BigNumber(value);\n // truncate toward 0; use ROUND_FLOOR if you really need floor for positives\n const int = bn.times(factor).integerValue(BigNumber.ROUND_DOWN);\n return BigInt(int.toFixed(0));\n}\n\nexport function fromFixedNumber(value: bigint, decimals: number = FIXED_U128_DECIMALS): BigNumber {\n const factor = new BigNumber(10).pow(decimals);\n const bn = new BigNumber(value.toString());\n return bn.div(factor);\n}\n\nexport const FIXED_U128_DECIMALS = 18;\nexport const PERMILL_DECIMALS = 6;\n","import {\n ArgonClient,\n ArgonPrimitivesBitcoinBitcoinNetwork,\n ArgonPrimitivesBitcoinUtxoRef,\n getBigIntFallback,\n} from './index';\nimport { GenericEvent } from '@polkadot/types';\nimport type { SubmittableExtrinsic } from '@polkadot/api/promise/types';\nimport type { ISubmittableOptions, TxSigningAccount } from './TxSubmitter';\nimport { TxSubmitter } from './TxSubmitter';\nimport { TxResult } from './TxResult';\nimport { u8aToHex } from '@polkadot/util';\nimport { ApiDecoration } from '@polkadot/api/types';\nimport { PriceIndex } from './PriceIndex';\nimport { bool, Option } from '@polkadot/types-codec';\nimport type { AccountId32 } from '@polkadot/types/interfaces/runtime';\nimport type { ITuple } from '@polkadot/types-codec/types';\nimport type { u128, u64, Vec } from '@polkadot/types-codec';\nimport { formatArgons } from './utils';\nimport type { Vault } from './Vault';\nimport BigNumber from 'bignumber.js';\n\nexport const SATS_PER_BTC = 100_000_000n;\n\ntype IQueryableClient = ArgonClient | ApiDecoration<'promise'>;\ntype PendingMintQueries =\n | Pick<IQueryableClient['query']['mint'], 'pendingMintUtxoIdLookup' | 'pendingMintUtxosByIndex'>\n | {\n pendingMintUtxos: () => Promise<Vec<ITuple<[u64, AccountId32, u128]>>>;\n };\ntype PendingMintQueryableClient = {\n query: {\n mint: PendingMintQueries;\n };\n};\ntype UtxoRefLike =\n | ArgonPrimitivesBitcoinUtxoRef\n | { txid: string | Uint8Array; outputIndex: number };\n\ntype UtxoRefOption = { unwrap: () => ArgonPrimitivesBitcoinUtxoRef };\n\nfunction normalizeUtxoRef(utxoRef: UtxoRefLike): {\n txid: string;\n outputIndex: number;\n} {\n let txid = utxoRef.txid;\n if (typeof txid === 'object' && 'toHex' in txid) {\n txid = txid.toHex();\n } else if (typeof txid !== 'string') {\n txid = u8aToHex(txid);\n }\n let outputIndex = utxoRef.outputIndex;\n if (typeof outputIndex !== 'number') {\n outputIndex = outputIndex.toNumber();\n }\n return { txid, outputIndex };\n}\n\nexport class BitcoinLock implements IBitcoinLock {\n public utxoId: number;\n public p2wshScriptHashHex: string;\n public vaultId: number;\n public lockedTargetPrice: bigint;\n public liquidityPromised: bigint;\n public ownerAccount: string;\n public satoshis: bigint;\n public utxoSatoshis?: bigint;\n public vaultPubkey: string;\n public securityFees: bigint;\n public vaultClaimPubkey: string;\n public ownerPubkey: string;\n public vaultXpubSources: {\n parentFingerprint: Uint8Array;\n cosignHdIndex: number;\n claimHdIndex: number;\n };\n public vaultClaimHeight: number;\n public openClaimHeight: number;\n public createdAtHeight: number;\n public isFunded: boolean;\n public createdAtArgonBlock: number;\n public fundHoldExtensionsByBitcoinExpirationHeight: Record<number, bigint>;\n public couponFeesPaid: bigint;\n\n constructor(data: IBitcoinLock) {\n this.utxoId = data.utxoId;\n this.p2wshScriptHashHex = data.p2wshScriptHashHex;\n this.vaultId = data.vaultId;\n this.lockedTargetPrice = data.lockedTargetPrice;\n this.liquidityPromised = data.liquidityPromised;\n this.ownerAccount = data.ownerAccount;\n this.satoshis = data.satoshis;\n this.utxoSatoshis = data.utxoSatoshis;\n this.vaultPubkey = data.vaultPubkey;\n this.securityFees = data.securityFees;\n this.vaultClaimPubkey = data.vaultClaimPubkey;\n this.ownerPubkey = data.ownerPubkey;\n this.vaultXpubSources = data.vaultXpubSources;\n this.vaultClaimHeight = data.vaultClaimHeight;\n this.openClaimHeight = data.openClaimHeight;\n this.createdAtHeight = data.createdAtHeight;\n this.isFunded = data.isFunded;\n this.fundHoldExtensionsByBitcoinExpirationHeight =\n data.fundHoldExtensionsByBitcoinExpirationHeight;\n this.createdAtArgonBlock = data.createdAtArgonBlock;\n this.couponFeesPaid = data.couponFeesPaid ?? 0n;\n }\n\n /**\n * Gets the UTXO reference by ID.\n * @param client - client at the block height to query the UTXO reference at a specific point in time.\n * @return An object containing the transaction ID and output index, or undefined if not found.\n * @return.txid - The Bitcoin transaction ID of the UTXO.\n * @return.vout - The output index of the UTXO in the transaction.\n * @return.bitcoinTxid - The Bitcoin transaction ID of the UTXO formatted in little endian\n */\n public async getFundingUtxoRef(\n client: IQueryableClient,\n ): Promise<{ txid: string; vout: number; bitcoinTxid: string } | undefined> {\n let refRaw: Option<ArgonPrimitivesBitcoinUtxoRef>;\n if (\n 'utxoIdToRef' in client.query.bitcoinUtxos &&\n typeof client.query.bitcoinUtxos.utxoIdToRef === 'function'\n ) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n refRaw = await client.query.bitcoinUtxos.utxoIdToRef(this.utxoId);\n } else {\n refRaw = await client.query.bitcoinUtxos.utxoIdToFundingUtxoRef(this.utxoId);\n }\n if (!refRaw || refRaw.isNone) {\n return;\n }\n const ref = refRaw.unwrap();\n\n const txid = u8aToHex(ref.txid);\n const bitcoinTxid = u8aToHex(ref.txid.slice().reverse());\n const vout = ref.outputIndex.toNumber();\n return { txid, vout, bitcoinTxid };\n }\n\n public async findPendingMints(client: PendingMintQueryableClient): Promise<bigint[]> {\n const { mint } = client.query;\n\n if ('pendingMintUtxoIdLookup' in mint) {\n const mintsPending: bigint[] = [];\n const pendingMintIndices = await mint.pendingMintUtxoIdLookup(this.utxoId);\n\n for (const pendingMintIndex of pendingMintIndices) {\n const pendingMint = await mint.pendingMintUtxosByIndex(pendingMintIndex);\n if (pendingMint.isSome) {\n mintsPending.push(pendingMint.unwrap().remainingAmount.toBigInt());\n }\n }\n return mintsPending;\n }\n\n const mintsPending: bigint[] = [];\n const pendingMint = await mint.pendingMintUtxos();\n for (const [utxoId, , amount] of pendingMint) {\n if (utxoId.toNumber() === this.utxoId) {\n mintsPending.push(amount.toBigInt());\n }\n }\n return mintsPending;\n }\n\n public async calculateRatchetingCosts(\n client: IQueryableClient,\n priceIndex: PriceIndex,\n vault: Vault,\n microgonsAtTargetPerBtc?: bigint,\n ): Promise<{ burnAmount: bigint; ratchetingFee: bigint }> {\n const { createdAtHeight, vaultClaimHeight, lockedTargetPrice, satoshis } = this;\n const currentTargetPrice =\n microgonsAtTargetPerBtc !== undefined\n ? (microgonsAtTargetPerBtc * satoshis) / SATS_PER_BTC\n : priceIndex.getSatoshiPriceInTargetMicrogons(satoshis);\n\n let ratchetingFee = vault.terms.bitcoinBaseFee;\n let burnAmount = 0n;\n\n // ratchet up\n if (currentTargetPrice > lockedTargetPrice) {\n const diffTargetAmount = currentTargetPrice - lockedTargetPrice;\n const amountToMint = BitcoinLock.calculateRedemptionAmount(priceIndex, diffTargetAmount);\n const bitcoinFee = vault.calculateBitcoinFee(amountToMint);\n const percentageFee = bitcoinFee - vault.terms.bitcoinBaseFee;\n\n const currentBitcoinHeight = await client.query.bitcoinUtxos\n .confirmedBitcoinBlockTip()\n .then(x => x.unwrap().blockHeight.toNumber());\n const fullTerm = Math.max(1, vaultClaimHeight - createdAtHeight);\n const elapsedBlocks = Math.max(0, currentBitcoinHeight - createdAtHeight);\n const cappedRemainingBlocks = Math.max(0, fullTerm - elapsedBlocks);\n const proratedFee = (percentageFee * BigInt(cappedRemainingBlocks)) / BigInt(fullTerm);\n ratchetingFee = vault.terms.bitcoinBaseFee + proratedFee;\n } else {\n burnAmount = BitcoinLock.calculateRedemptionAmount(priceIndex, currentTargetPrice);\n }\n\n return {\n ratchetingFee,\n burnAmount,\n };\n }\n\n public async ratchet(\n args: {\n client: ArgonClient;\n priceIndex: PriceIndex;\n txSigner: TxSigningAccount;\n vault: Vault;\n microgonsAtTargetPerBtc?: bigint;\n } & ISubmittableOptions,\n ): Promise<{\n txResult: TxResult;\n getRatchetResult: () => Promise<{\n securityFee: bigint;\n txFee: bigint;\n lockedTargetPrice: bigint;\n liquidityPromised: bigint;\n pendingMint: bigint;\n burned: bigint;\n blockHeight: number;\n bitcoinBlockHeight: number;\n }>;\n }> {\n const { priceIndex, txSigner, tip = 0n, vault, client, microgonsAtTargetPerBtc } = args;\n\n const ratchetingCosts = await this.calculateRatchetingCosts(\n client,\n priceIndex,\n vault,\n microgonsAtTargetPerBtc,\n );\n const tx = client.tx.bitcoinLocks.ratchet(this.utxoId, { V1: { microgonsAtTargetPerBtc } });\n const txSubmitter = new TxSubmitter(client, tx, txSigner);\n const canAfford = await txSubmitter.canAfford({\n tip,\n unavailableBalance: BigInt(ratchetingCosts.burnAmount + ratchetingCosts.ratchetingFee),\n });\n if (!canAfford.canAfford) {\n throw new Error(\n `Insufficient funds to ratchet lock. Available: ${formatArgons(canAfford.availableBalance)}, Required: ${formatArgons(\n ratchetingCosts.burnAmount + ratchetingCosts.ratchetingFee,\n )}`,\n );\n }\n\n const txResult = await txSubmitter.submit(args);\n\n const getRatchetResult = async () => {\n const blockHash = await txResult.waitForFinalizedBlock;\n const ratchetEvent = txResult.events.find(x =>\n client.events.bitcoinLocks.BitcoinLockRatcheted.is(x),\n );\n if (!ratchetEvent) {\n throw new Error(`Ratchet event not found in transaction events`);\n }\n const api = await client.at(blockHash);\n const bitcoinBlockHeight = await api.query.bitcoinUtxos\n .confirmedBitcoinBlockTip()\n .then(x => x.unwrap().blockHeight.toNumber());\n const {\n amountBurned,\n liquidityPromised: liquidityPromisedRaw,\n newTargetPrice: newTargetPriceRaw,\n oldTargetPrice: oldTargetPriceRaw,\n securityFee,\n } = ratchetEvent.data;\n\n const liquidityPromised = liquidityPromisedRaw.toBigInt();\n const newTargetPrice = newTargetPriceRaw.toBigInt();\n const oldTargetPrice = oldTargetPriceRaw.toBigInt();\n const pendingMint =\n newTargetPrice > oldTargetPrice\n ? BitcoinLock.calculateRedemptionAmount(priceIndex, newTargetPrice - oldTargetPrice)\n : liquidityPromised;\n\n return {\n txFee: txResult.finalFee ?? 0n,\n blockHeight: txResult.blockNumber!,\n bitcoinBlockHeight,\n pendingMint,\n liquidityPromised,\n lockedTargetPrice: newTargetPrice,\n burned: amountBurned.toBigInt(),\n securityFee: securityFee.toBigInt(),\n };\n };\n\n return {\n txResult,\n getRatchetResult,\n };\n }\n\n public calculateRedemptionAmount(priceIndex: PriceIndex): bigint {\n return BitcoinLock.calculateRedemptionAmountFromSatoshis(\n priceIndex,\n this.satoshis,\n this.lockedTargetPrice,\n );\n }\n\n public async requestRelease(\n args: {\n client: ArgonClient;\n priceIndex: PriceIndex;\n releaseRequest: IReleaseRequest;\n txSigner: TxSigningAccount;\n } & ISubmittableOptions,\n ): Promise<TxResult> {\n const {\n priceIndex,\n releaseRequest: { bitcoinNetworkFee, toScriptPubkey },\n txSigner,\n tip = 0n,\n client,\n } = args;\n\n if (!toScriptPubkey.startsWith('0x')) {\n throw new Error('toScriptPubkey must be a hex string starting with 0x');\n }\n\n const submitter = new TxSubmitter(\n client,\n client.tx.bitcoinLocks.requestRelease(this.utxoId, toScriptPubkey, bitcoinNetworkFee),\n txSigner,\n );\n\n const redemptionAmount = this.calculateRedemptionAmount(priceIndex);\n\n const canAfford = await submitter.canAfford({\n tip,\n unavailableBalance: BigInt(redemptionAmount),\n });\n\n if (!canAfford.canAfford) {\n throw new Error(\n `Insufficient funds to release lock. Available: ${formatArgons(canAfford.availableBalance)}, Required: ${formatArgons(redemptionAmount + canAfford.txFee + tip)}`,\n );\n }\n return submitter.submit({\n logResults: true,\n ...args,\n });\n }\n\n public async getReleaseRequest(\n client: IQueryableClient,\n ): Promise<IReleaseRequestDetails | undefined> {\n const requestMaybe = await client.query.bitcoinLocks.lockReleaseRequestsByUtxoId(this.utxoId);\n if (!requestMaybe.isSome) {\n return undefined;\n }\n const request = requestMaybe.unwrap();\n return {\n toScriptPubkey: request.toScriptPubkey.toHex(),\n bitcoinNetworkFee: request.bitcoinNetworkFee.toBigInt(),\n dueFrame: request.cosignDueFrame.toNumber(),\n vaultId: request.vaultId.toNumber(),\n redemptionAmount: getBigIntFallback(request.redemptionAmount, request, ['redemptionPrice']),\n };\n }\n\n /**\n * Finds the cosign signature for a vault lock by UTXO ID. Optionally waits for the signature\n * @param client - The Argon client with rpc access\n * @param finalizedStateOnly - If true, only checks finalized state\n * @param waitForSignatureMillis - Optional timeout in milliseconds to wait for the signature. If -1, waits indefinitely.\n */\n public async findVaultCosignSignature(\n client: ArgonClient,\n finalizedStateOnly = false,\n waitForSignatureMillis?: number,\n ): Promise<{ blockHeight: number; signature: Uint8Array } | undefined> {\n let queryClient = client as IQueryableClient;\n if (finalizedStateOnly) {\n const finalizedHead = await client.rpc.chain.getFinalizedHead();\n queryClient = await client.at(finalizedHead);\n }\n const releaseHeight = await queryClient.query.bitcoinLocks.lockReleaseCosignHeightById(\n this.utxoId,\n );\n if (releaseHeight.isSome) {\n const releaseHeightValue = releaseHeight.unwrap().toNumber();\n const signature = await this.getVaultCosignSignature(client, releaseHeightValue);\n if (signature) {\n return { blockHeight: releaseHeightValue, signature };\n }\n }\n\n if (!waitForSignatureMillis) {\n return undefined;\n }\n\n return await new Promise(async (resolve, reject) => {\n let timeout: NodeJS.Timeout | undefined;\n const unsub = await client.rpc.chain.subscribeNewHeads(header => {\n const atHeight = header.number.toNumber();\n this.getVaultCosignSignature(client, atHeight)\n .then(signature => {\n if (signature) {\n unsub?.();\n clearTimeout(timeout);\n resolve({ signature, blockHeight: atHeight });\n }\n })\n .catch(err => {\n console.error(`Error checking for cosign signature at height ${atHeight}:`, err);\n });\n });\n if (waitForSignatureMillis !== -1) {\n timeout = setTimeout(() => {\n unsub?.();\n reject(new Error(`Timeout waiting for cosign signature for UTXO ID ${this.utxoId}`));\n }, waitForSignatureMillis);\n }\n });\n }\n\n public async getVaultCosignSignature(\n client: ArgonClient,\n atHeight: number,\n ): Promise<Uint8Array | undefined> {\n const blockHash = await BitcoinLock.blockHashAtHeight(client, atHeight);\n if (!blockHash) {\n console.warn(`Block hash not found for height ${atHeight}`);\n return undefined;\n }\n\n const blockEvents = await client.at(blockHash).then(api => api.query.system.events());\n for (const event of blockEvents) {\n if (client.events.bitcoinLocks.BitcoinUtxoCosigned.is(event.event)) {\n const { utxoId: id, signature } = event.event.data;\n if (id.toNumber() === this.utxoId) {\n return new Uint8Array(signature);\n }\n }\n }\n return undefined;\n }\n\n public static async getUtxoIdFromEvents(client: IQueryableClient, events: GenericEvent[]) {\n for (const event of events) {\n if (client.events.bitcoinLocks.BitcoinLockCreated.is(event)) {\n return event.data.utxoId.toNumber();\n }\n }\n return undefined;\n }\n\n public static calculateRedemptionAmountFromSatoshis(\n priceIndex: PriceIndex,\n satoshis: bigint,\n lockedTargetPrice?: bigint,\n ): bigint {\n const btcMicrogonsAtTarget = priceIndex.getSatoshiPriceInTargetMicrogons(satoshis);\n return this.calculateRedemptionAmount(priceIndex, btcMicrogonsAtTarget, lockedTargetPrice);\n }\n\n public static calculateRedemptionAmount(\n priceIndex: PriceIndex,\n btcMicrogonsAtTarget: bigint,\n maxMicrogonsAtTarget?: bigint,\n ): bigint {\n let price = btcMicrogonsAtTarget;\n if (maxMicrogonsAtTarget !== undefined && maxMicrogonsAtTarget < btcMicrogonsAtTarget) {\n price = maxMicrogonsAtTarget;\n }\n\n const multiplierBn = this.redemptionMultiplierBn(priceIndex);\n\n return BigInt(\n new BigNumber(price.toString())\n .times(multiplierBn)\n .integerValue(BigNumber.ROUND_DOWN)\n .toFixed(0),\n );\n }\n\n private static redemptionMultiplierBn(priceIndex: PriceIndex): BigNumber {\n const r = priceIndex.rValue;\n\n if (r.gte(1)) {\n // Case 1: no penalty\n return new BigNumber(1);\n } else if (r.gte(0.9)) {\n // Case 2: quadratic curve\n // Formula: 20r² - 38r + 19\n return new BigNumber(20).times(r.pow(2)).minus(new BigNumber(38).times(r)).plus(19);\n } else if (r.gte(0.01)) {\n // Case 3: rational linear formula\n // Formula: (0.5618r + 0.3944) / r\n return new BigNumber(0.5618).times(r).plus(0.3944).div(r);\n } else {\n // Case 4: extreme deviation\n // Formula: (1 / r) * (0.576r + 0.4)\n return new BigNumber(1).div(r).times(new BigNumber(0.576).times(r).plus(0.4));\n }\n }\n\n public static async getConfig(client: IQueryableClient): Promise<IBitcoinLockConfig> {\n const bitcoinNetwork = await client.query.bitcoinUtxos.bitcoinNetwork();\n return {\n lockReleaseCosignDeadlineFrames:\n client.consts.bitcoinLocks.lockReleaseCosignDeadlineFrames.toNumber(),\n pendingConfirmationExpirationBlocks:\n client.consts.bitcoinUtxos.maxPendingConfirmationBlocks.toNumber(),\n tickDurationMillis: await client.query.ticks\n .genesisTicker()\n .then(x => x.tickDurationMillis.toNumber()),\n bitcoinNetwork,\n lockSatoshiAllowedVariance:\n client.consts.bitcoinUtxos.maximumSatoshiThresholdFromExpected?.toNumber() ?? 10_000,\n };\n }\n\n public static async getBitcoinConfirmedBlockHeight(client: IQueryableClient): Promise<number> {\n return await client.query.bitcoinUtxos\n .confirmedBitcoinBlockTip()\n .then(x => x.value?.blockHeight.toNumber() ?? 0);\n }\n\n public static async submitVaultSignature(\n args: {\n client: ArgonClient;\n utxoId: number;\n vaultSignature: Uint8Array;\n txSigner: TxSigningAccount;\n } & ISubmittableOptions,\n ): Promise<TxResult> {\n const { utxoId, vaultSignature, txSigner, client } = args;\n if (!vaultSignature || vaultSignature.byteLength < 70 || vaultSignature.byteLength > 73) {\n throw new Error(\n `Invalid vault signature length: ${vaultSignature.byteLength}. Must be 70-73 bytes.`,\n );\n }\n const signature = u8aToHex(vaultSignature);\n const tx = client.tx.bitcoinLocks.cosignRelease(utxoId, signature);\n const submitter = new TxSubmitter(client, tx, txSigner);\n\n return await submitter.submit(args);\n }\n\n public static async createIncreaseSecuritizationTx(\n args: {\n utxoId: number;\n client: ArgonClient;\n newSatoshis: bigint;\n } & ISubmittableOptions,\n ): Promise<SubmittableExtrinsic | undefined> {\n const { client, newSatoshis, utxoId } = args;\n const txBuilder = client.tx.bitcoinLocks.increaseSecuritization;\n if (!txBuilder?.meta) {\n return undefined;\n }\n return txBuilder(utxoId, newSatoshis);\n }\n\n public static async createFundWithUtxoCandidateTx(\n args: {\n client: ArgonClient;\n utxoId: number;\n utxoRef: UtxoRefLike;\n } & ISubmittableOptions,\n ): Promise<SubmittableExtrinsic | undefined> {\n const { client, utxoId, utxoRef } = args;\n const txBuilder = client.tx.bitcoinUtxos?.fundWithUtxoCandidate;\n if (!txBuilder?.meta) {\n return undefined;\n }\n return txBuilder(utxoId, normalizeUtxoRef(utxoRef));\n }\n\n public static async createOrphanedUtxoReleaseRequestTx(\n args: {\n client: ArgonClient;\n utxoRef: UtxoRefLike;\n releaseRequest: IReleaseRequest;\n } & ISubmittableOptions,\n ): Promise<SubmittableExtrinsic | undefined> {\n const {\n client,\n utxoRef,\n releaseRequest: { bitcoinNetworkFee, toScriptPubkey },\n } = args;\n\n if (!toScriptPubkey.startsWith('0x')) {\n throw new Error('toScriptPubkey must be a hex string starting with 0x');\n }\n\n const txBuilder = client.tx.bitcoinLocks.requestOrphanedUtxoRelease;\n if (!txBuilder?.meta) {\n return undefined;\n }\n\n return txBuilder(normalizeUtxoRef(utxoRef), toScriptPubkey, bitcoinNetworkFee);\n }\n\n public static async createOrphanedUtxoCosignTx(\n args: {\n client: ArgonClient;\n orphanOwner: string;\n utxoRef: UtxoRefLike;\n vaultSignature: Uint8Array;\n } & ISubmittableOptions,\n ): Promise<SubmittableExtrinsic | undefined> {\n const { client, orphanOwner, utxoRef, vaultSignature } = args;\n if (!vaultSignature || vaultSignature.byteLength < 70 || vaultSignature.byteLength > 73) {\n throw new Error(\n `Invalid vault signature length: ${vaultSignature.byteLength}. Must be 70-73 bytes.`,\n );\n }\n if (!client.tx.bitcoinLocks.cosignOrphanedUtxoRelease?.meta) {\n return undefined;\n }\n const signature = u8aToHex(vaultSignature);\n return client.tx.bitcoinLocks.cosignOrphanedUtxoRelease(\n orphanOwner,\n normalizeUtxoRef(utxoRef),\n signature,\n );\n }\n\n public static async get(\n client: IQueryableClient,\n utxoId: number,\n ): Promise<BitcoinLock | undefined> {\n const utxoRaw = await client.query.bitcoinLocks.locksByUtxoId(utxoId);\n if (!utxoRaw.isSome) {\n return;\n }\n const utxo = utxoRaw.unwrap();\n const p2shBytesPrefix = '0020';\n const wscriptHash = utxo.utxoScriptPubkey.asP2wsh.wscriptHash.toHex().replace('0x', '');\n const p2wshScriptHashHex = `0x${p2shBytesPrefix}${wscriptHash}`;\n const vaultId = utxo.vaultId.toNumber();\n const lockedTargetPrice = getBigIntFallback(utxo.lockedTargetPrice, utxo, [\n 'lockedMarketRate',\n 'peggedPrice',\n ]);\n const liquidityPromised = utxo.liquidityPromised.toBigInt();\n const ownerAccount = utxo.ownerAccount.toHuman();\n const satoshis = utxo.satoshis.toBigInt();\n const utxoSatoshis = utxo.utxoSatoshis?.isSome ? utxo.utxoSatoshis.value.toBigInt() : undefined;\n const vaultPubkey = utxo.vaultPubkey.toHex();\n const vaultClaimPubkey = utxo.vaultClaimPubkey.toHex();\n const ownerPubkey = utxo.ownerPubkey.toHex();\n const [fingerprint, cosign_hd_index, claim_hd_index] = utxo.vaultXpubSources;\n const vaultXpubSources = {\n parentFingerprint: new Uint8Array(fingerprint),\n cosignHdIndex: cosign_hd_index.toNumber(),\n claimHdIndex: claim_hd_index.toNumber(),\n };\n\n const createdAtArgonBlock = utxo.createdAtArgonBlock?.toNumber() ?? 0;\n const securityFees = utxo.securityFees.toBigInt();\n const vaultClaimHeight = utxo.vaultClaimHeight.toNumber();\n const openClaimHeight = utxo.openClaimHeight.toNumber();\n const createdAtHeight = utxo.createdAtHeight.toNumber();\n const isFunded = ((utxo as { isVerified?: bool })?.isVerified ?? utxo.isFunded).toJSON();\n const fundHoldExtensionsByBitcoinExpirationHeight = Object.fromEntries(\n [...utxo.fundHoldExtensions.entries()].map(([x, y]) => [x.toNumber(), y.toBigInt()]),\n );\n const couponFeesPaid = utxo.couponPaidFees?.toBigInt() ?? 0n;\n\n return new BitcoinLock({\n utxoId,\n p2wshScriptHashHex,\n vaultId,\n lockedTargetPrice,\n liquidityPromised,\n ownerAccount,\n satoshis,\n utxoSatoshis,\n vaultPubkey,\n vaultClaimPubkey,\n ownerPubkey,\n vaultXpubSources,\n vaultClaimHeight,\n openClaimHeight,\n createdAtHeight,\n securityFees,\n isFunded,\n couponFeesPaid,\n fundHoldExtensionsByBitcoinExpirationHeight,\n createdAtArgonBlock,\n });\n }\n\n public static async blockHashAtHeight(\n client: ArgonClient,\n atHeight: number,\n ): Promise<string | undefined> {\n for (let i = 0; i < 10; i++) {\n const currentHeight = await client.query.system.number().then(x => x.toNumber());\n if (atHeight > currentHeight) {\n console.warn(\n `Requested block height ${atHeight} is greater than current height ${currentHeight}. Retrying...`,\n );\n await new Promise(resolve => setTimeout(resolve, 1000)); // wait 1 second before retrying\n continue;\n }\n const hash = await client.rpc.chain.getBlockHash(atHeight).then(x => x.toHex());\n if (hash === '0x0000000000000000000000000000000000000000000000000000000000000000') {\n console.warn(`Block hash not found for height ${atHeight}. Retrying...`);\n await new Promise(resolve => setTimeout(resolve, 1000)); // wait 1 second before retrying\n continue;\n }\n return hash;\n }\n return undefined;\n }\n\n public static async createInitializeTx(args: {\n client: ArgonClient;\n vault: Vault;\n priceIndex: PriceIndex;\n ownerBitcoinPubkey: Uint8Array;\n satoshis: bigint;\n txSigner: TxSigningAccount;\n reducedBalanceBy?: bigint;\n microgonsAtTargetPerBtc?: bigint;\n tip?: bigint;\n initializeForAccountId?: string;\n }) {\n const {\n vault,\n priceIndex,\n txSigner,\n satoshis,\n tip = 0n,\n ownerBitcoinPubkey,\n client,\n microgonsAtTargetPerBtc = null,\n initializeForAccountId,\n } = args;\n if (ownerBitcoinPubkey.length !== 33) {\n throw new Error(\n `Invalid Bitcoin key length: ${ownerBitcoinPubkey.length}. Must be a compressed pukey (33 bytes).`,\n );\n }\n\n let tx: SubmittableExtrinsic;\n if (initializeForAccountId) {\n tx = client.tx.bitcoinLocks.initializeFor(\n initializeForAccountId,\n vault.vaultId,\n satoshis,\n ownerBitcoinPubkey,\n {\n V1: {\n microgonsAtTargetPerBtc,\n },\n },\n );\n } else {\n tx = client.tx.bitcoinLocks.initialize(vault.vaultId, satoshis, ownerBitcoinPubkey, {\n V1: {\n microgonsAtTargetPerBtc,\n },\n });\n }\n const submitter = new TxSubmitter(client, tx, txSigner);\n const targetPrice =\n microgonsAtTargetPerBtc !== null\n ? (microgonsAtTargetPerBtc * satoshis) / SATS_PER_BTC\n : priceIndex.getSatoshiPriceInTargetMicrogons(satoshis);\n const unlockAmount = this.calculateRedemptionAmount(priceIndex, targetPrice);\n const isVaultOwner = txSigner.address === vault.operatorAccountId;\n const securityFee = isVaultOwner ? 0n : vault.calculateBitcoinFee(unlockAmount);\n\n const { canAfford, availableBalance, txFee } = await submitter.canAfford({\n tip,\n unavailableBalance: securityFee + (args.reducedBalanceBy ?? 0n),\n includeExistentialDeposit: true,\n });\n return {\n tx,\n securityFee,\n txFee,\n canAfford,\n availableBalance,\n txFeePlusTip: txFee + tip,\n };\n }\n\n public static async initialize(\n args: {\n client: ArgonClient;\n vault: Vault;\n priceIndex: PriceIndex;\n ownerBitcoinPubkey: Uint8Array;\n txSigner: TxSigningAccount;\n satoshis: bigint;\n } & ISubmittableOptions,\n ): Promise<{\n getLock(): Promise<{ lock: BitcoinLock; createdAtHeight: number }>;\n txResult: TxResult;\n securityFee: bigint;\n }> {\n const { txSigner, client } = args;\n\n const { tx, securityFee, canAfford, txFeePlusTip } = await this.createInitializeTx(args);\n if (!canAfford) {\n throw new Error(\n `Insufficient funds to initialize bitcoin lock. Required security fee: ${formatArgons(securityFee)}, Tx fee plus tip: ${formatArgons(txFeePlusTip)}`,\n );\n }\n const submitter = new TxSubmitter(client, tx, txSigner);\n const txResult = await submitter.submit({ logResults: true, ...args });\n\n return {\n getLock: () => this.getBitcoinLockFromTxResult(client, txResult),\n txResult,\n securityFee,\n };\n }\n\n public static async getBitcoinLockFromTxResult(\n client: IQueryableClient,\n txResult: TxResult,\n ): Promise<{\n lock: BitcoinLock;\n createdAtHeight: number;\n txResult: TxResult;\n }> {\n await txResult.waitForFinalizedBlock;\n const blockHeight = txResult.blockNumber!;\n const utxoId = (await this.getUtxoIdFromEvents(client, txResult.events)) ?? 0;\n if (utxoId === 0) {\n throw new Error('Bitcoin lock creation failed, no UTXO ID found in transaction events');\n }\n const lock = await this.get(client, utxoId);\n if (!lock) {\n throw new Error(`Lock with ID ${utxoId} not found after initialization`);\n }\n return { lock, createdAtHeight: blockHeight, txResult };\n }\n\n public static satoshisRequiredForRedemptionAmount(\n priceIndex: PriceIndex,\n redemptionAmount: bigint,\n ): bigint {\n if (redemptionAmount <= 0n) return 0n;\n\n const multiplierBn = this.redemptionMultiplierBn(priceIndex);\n const targetMicrogonsPerBtc = priceIndex.getSatoshiPriceInTargetMicrogons(SATS_PER_BTC);\n let requiredTargetMicrogons = BigInt(\n new BigNumber(redemptionAmount.toString())\n .div(multiplierBn)\n .integerValue(BigNumber.ROUND_CEIL)\n .toFixed(0),\n );\n\n while (this.calculateRedemptionAmount(priceIndex, requiredTargetMicrogons) < redemptionAmount) {\n requiredTargetMicrogons += 1n;\n }\n\n let satoshis = BigInt(\n new BigNumber(requiredTargetMicrogons.toString())\n .times(SATS_PER_BTC.toString())\n .div(targetMicrogonsPerBtc.toString())\n .integerValue(BigNumber.ROUND_CEIL)\n .toFixed(0),\n );\n\n // The forward path floors target microgons from sats, then floors the redemption amount.\n // Verify the computed sats satisfy both boundaries, then step down to the minimal sat count.\n while (this.calculateRedemptionAmountFromSatoshis(priceIndex, satoshis) < redemptionAmount) {\n satoshis += 1n;\n }\n while (\n satoshis > 0n &&\n this.calculateRedemptionAmountFromSatoshis(priceIndex, satoshis - 1n) >= redemptionAmount\n ) {\n satoshis -= 1n;\n }\n\n return satoshis;\n }\n}\n\nexport interface IBitcoinLockConfig {\n lockReleaseCosignDeadlineFrames: number;\n pendingConfirmationExpirationBlocks: number;\n tickDurationMillis: number;\n bitcoinNetwork: ArgonPrimitivesBitcoinBitcoinNetwork;\n lockSatoshiAllowedVariance: number;\n}\nexport interface IReleaseRequest {\n toScriptPubkey: string;\n bitcoinNetworkFee: bigint;\n}\n\nexport interface IReleaseRequestDetails extends IReleaseRequest {\n dueFrame: number;\n vaultId: number;\n redemptionAmount: bigint;\n}\n\nexport interface IBitcoinLock {\n utxoId: number;\n p2wshScriptHashHex: string;\n vaultId: number;\n lockedTargetPrice: bigint;\n liquidityPromised: bigint;\n ownerAccount: string;\n satoshis: bigint;\n utxoSatoshis?: bigint;\n vaultPubkey: string;\n securityFees: bigint;\n couponFeesPaid: bigint;\n vaultClaimPubkey: string;\n ownerPubkey: string;\n vaultXpubSources: {\n parentFingerprint: Uint8Array;\n cosignHdIndex: number;\n claimHdIndex: number;\n };\n vaultClaimHeight: number;\n openClaimHeight: number;\n createdAtHeight: number;\n isFunded: boolean;\n createdAtArgonBlock: number;\n fundHoldExtensionsByBitcoinExpirationHeight: Record<number, bigint>;\n}\n","import type { ArgonClient } from './index';\nimport { FIXED_U128_DECIMALS, fromFixedNumber } from './convert';\nimport { MICROGONS_PER_ARGON } from './utils';\nimport BigNumber from 'bignumber.js';\nimport { ApiDecoration } from '@polkadot/api/types';\n\nconst SATS_PER_BTC = 100_000_000n;\n\nexport class PriceIndex {\n btcUsdPrice?: BigNumber;\n argonotUsdPrice?: BigNumber;\n argonUsdPrice?: BigNumber;\n argonUsdTargetPrice?: BigNumber;\n argonTimeWeightedAverageLiquidity?: BigNumber;\n lastUpdatedTick?: number;\n\n async load(client: ArgonClient | ApiDecoration<'promise'>): Promise<this> {\n const current = await client.query.priceIndex.current();\n if (!current.isSome) {\n this.argonUsdPrice = undefined;\n this.argonotUsdPrice = undefined;\n this.btcUsdPrice = undefined;\n this.argonUsdTargetPrice = undefined;\n this.argonTimeWeightedAverageLiquidity = undefined;\n this.lastUpdatedTick = undefined;\n return this;\n }\n const value = current.unwrap();\n\n this.btcUsdPrice = fromFixedNumber(value.btcUsdPrice.toBigInt(), FIXED_U128_DECIMALS);\n this.argonotUsdPrice = fromFixedNumber(value.argonotUsdPrice.toBigInt(), FIXED_U128_DECIMALS);\n this.argonUsdPrice = fromFixedNumber(value.argonUsdPrice.toBigInt(), FIXED_U128_DECIMALS);\n this.argonUsdTargetPrice = fromFixedNumber(\n value.argonUsdTargetPrice.toBigInt(),\n FIXED_U128_DECIMALS,\n );\n this.argonTimeWeightedAverageLiquidity = fromFixedNumber(\n value.argonTimeWeightedAverageLiquidity.toBigInt(),\n FIXED_U128_DECIMALS,\n );\n this.lastUpdatedTick = value.tick.toNumber();\n return this;\n }\n\n getSatoshiPriceInMarketMicrogons(satoshis: bigint | number): bigint {\n if (this.btcUsdPrice === undefined || this.argonUsdPrice === undefined) {\n throw new Error('PriceIndex not loaded');\n }\n\n const satoshiCents = this.btcUsdPrice.multipliedBy(satoshis).dividedBy(SATS_PER_BTC);\n\n const microgons = satoshiCents.multipliedBy(MICROGONS_PER_ARGON).dividedBy(this.argonUsdPrice);\n return BigInt(microgons.integerValue(BigNumber.ROUND_DOWN).toString());\n }\n\n getSatoshiPriceInTargetMicrogons(satoshis: bigint | number): bigint {\n if (this.btcUsdPrice === undefined || this.argonUsdTargetPrice === undefined) {\n throw new Error('PriceIndex not loaded');\n }\n\n const satoshiCents = this.btcUsdPrice.multipliedBy(satoshis).dividedBy(SATS_PER_BTC);\n\n const microgons = satoshiCents\n .multipliedBy(MICROGONS_PER_ARGON)\n .dividedBy(this.argonUsdTargetPrice);\n return BigInt(microgons.integerValue(BigNumber.ROUND_DOWN).toString());\n }\n\n get rValue(): BigNumber {\n if (this.argonUsdTargetPrice === undefined || this.argonUsdPrice === undefined) {\n throw new Error('PriceIndex not loaded');\n }\n return this.argonUsdPrice.div(this.argonUsdTargetPrice);\n }\n\n get argonCpi(): BigNumber {\n if (this.argonUsdTargetPrice === undefined || this.argonUsdPrice === undefined) {\n throw new Error('PriceIndex not loaded');\n }\n const ratio = this.argonUsdTargetPrice.div(this.argonUsdPrice);\n return ratio.minus(1);\n }\n}\n","import type { Abi, Hex } from 'viem';\nimport {\n ArgonTokenEvents,\n ArgonotTokenEvents,\n CanonicalMintableBurnableERC20Events,\n ICanonicalTokenEvents,\n MINTING_GATEWAY_RUNTIME_DECIMALS,\n MINTING_GATEWAY_RUNTIME_TO_ERC20_SCALE,\n MINTING_GATEWAY_TOKEN_DECIMALS,\n MINTING_GATEWAY_UPDATE_KINDS,\n MintingGatewayEvents,\n ProxyAdminEvents,\n TransparentUpgradeableProxyEvents,\n argonTokenAbi,\n argonTokenArtifact as rawArgonTokenArtifact,\n argonotTokenAbi,\n argonotTokenArtifact as rawArgonotTokenArtifact,\n canonicalMintableBurnableErc20Abi,\n encodeMintingGatewayCouncilSnapshot,\n encodeMintingGatewayGlobalIssuanceCouncilRotateTarget,\n encodeMintingGatewayMintingAuthorityActivationTarget,\n encodeMintingGatewayMintingAuthorityDeactivateTarget,\n hashMintingGatewayActivateMintingAuthority,\n hashMintingGatewayActivateMintingAuthorityApproval,\n hashMintingGatewayGatewayUpdateApproval,\n hashMintingGatewayGlobalIssuanceCouncil,\n hashMintingGatewayMintingAuthority,\n hashMintingGatewayMintingAuthorization as rawHashMintingGatewayMintingAuthorization,\n hashMintingGatewayRotateGlobalIssuanceCouncil,\n hashMintingGatewayRotateGlobalIssuanceCouncilApproval,\n hashMintingGatewayTransferOutOfArgonRequest as rawHashMintingGatewayTransferOutOfArgonRequest,\n iCanonicalTokenAbi,\n mintingGatewayAbi,\n mintingGatewayArtifact as rawMintingGatewayArtifact,\n proxyAdminAbi,\n proxyAdminArtifact as rawProxyAdminArtifact,\n transparentUpgradeableProxyAbi,\n transparentUpgradeableProxyArtifact as rawTransparentUpgradeableProxyArtifact,\n} from '@argonprotocol/ethereum-contracts';\n\nexport type * from '@argonprotocol/ethereum-contracts';\n\nexport type EvmContractArtifact = {\n abi: Abi;\n bytecode: Hex;\n};\n\nexport const argonTokenArtifact = rawArgonTokenArtifact as EvmContractArtifact;\nexport const argonotTokenArtifact = rawArgonotTokenArtifact as EvmContractArtifact;\nexport const mintingGatewayArtifact = rawMintingGatewayArtifact as EvmContractArtifact;\nexport const proxyAdminArtifact = rawProxyAdminArtifact as EvmContractArtifact;\nexport const transparentUpgradeableProxyArtifact =\n rawTransparentUpgradeableProxyArtifact as EvmContractArtifact;\n\nexport type MintingGatewayTransferOutOfArgonRequest = Parameters<\n typeof rawHashMintingGatewayTransferOutOfArgonRequest\n>[0];\n\nexport function hashMintingGatewayTransferOutOfArgonRequest(\n request: MintingGatewayTransferOutOfArgonRequest,\n) {\n return rawHashMintingGatewayTransferOutOfArgonRequest(request);\n}\n\nexport function hashMintingGatewayMintingAuthorization(\n gateway: Parameters<typeof rawHashMintingGatewayMintingAuthorization>[0],\n authorization: Omit<\n Parameters<typeof rawHashMintingGatewayMintingAuthorization>[1],\n 'request'\n > & {\n request: MintingGatewayTransferOutOfArgonRequest;\n },\n) {\n return rawHashMintingGatewayMintingAuthorization(gateway, authorization);\n}\n\nexport {\n ArgonTokenEvents,\n ArgonotTokenEvents,\n CanonicalMintableBurnableERC20Events,\n ICanonicalTokenEvents,\n MINTING_GATEWAY_RUNTIME_DECIMALS,\n MINTING_GATEWAY_RUNTIME_TO_ERC20_SCALE,\n MINTING_GATEWAY_TOKEN_DECIMALS,\n MINTING_GATEWAY_UPDATE_KINDS,\n MintingGatewayEvents,\n ProxyAdminEvents,\n TransparentUpgradeableProxyEvents,\n argonTokenAbi,\n argonotTokenAbi,\n canonicalMintableBurnableErc20Abi,\n encodeMintingGatewayCouncilSnapshot,\n encodeMintingGatewayGlobalIssuanceCouncilRotateTarget,\n encodeMintingGatewayMintingAuthorityActivationTarget,\n encodeMintingGatewayMintingAuthorityDeactivateTarget,\n hashMintingGatewayActivateMintingAuthority,\n hashMintingGatewayActivateMintingAuthorityApproval,\n hashMintingGatewayGatewayUpdateApproval,\n hashMintingGatewayGlobalIssuanceCouncil,\n hashMintingGatewayMintingAuthority,\n hashMintingGatewayRotateGlobalIssuanceCouncil,\n hashMintingGatewayRotateGlobalIssuanceCouncilApproval,\n iCanonicalTokenAbi,\n mintingGatewayAbi,\n proxyAdminAbi,\n transparentUpgradeableProxyAbi,\n};\n","{\n \"_format\": \"hh3-artifact-1\",\n \"contractName\": \"ArgonToken\",\n \"sourceName\": \"contracts/ArgonToken.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"gateway\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"ECDSAInvalidSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"length\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ECDSAInvalidSignatureLength\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"ECDSAInvalidSignatureS\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientAllowance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"balance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientBalance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"approver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidApprover\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidReceiver\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSpender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC2612ExpiredSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signer\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC2612InvalidSigner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"currentNonce\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InvalidAccountNonce\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"gateway\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"InvalidGateway\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidShortString\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"caller\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OnlyGateway\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"str\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"StringTooLong\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [],\n \"name\": \"EIP712DomainChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DOMAIN_SEPARATOR\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"burnFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"eip712Domain\",\n \"outputs\": [\n {\n \"internalType\": \"bytes1\",\n \"name\": \"fields\",\n \"type\": \"bytes1\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"version\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"verifyingContract\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"salt\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"extensions\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"gateway\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"nonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"permit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x610180604052348015610010575f5ffd5b506040516114c63803806114c683398101604081905261002f9161022a565b6040518060400160405280600581526020016420b933b7b760d91b8152506040518060400160405280600481526020016320a923a760e11b815250828280604051806040016040528060018152602001603160f81b8152508585816003908161009891906102fa565b5060046100a582826102fa565b506100b5915083905060056101bb565b610120526100c48160066101bb565b61014052815160208084019190912060e052815190820120610100524660a05261015060e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b038116158061017857506001600160a01b0381163b155b156101a557604051628ecbc360e51b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b03166101605250610410915050565b5f6020835110156101d6576101cf836101ed565b90506101e7565b816101e184826102fa565b5060ff90505b92915050565b5f5f829050601f81511115610217578260405163305a27a960e01b815260040161019c91906103b8565b8051610222826103ed565b179392505050565b5f6020828403121561023a575f5ffd5b81516001600160a01b0381168114610250575f5ffd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061027f57607f821691505b60208210810361029d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156102f557828211156102f557805f5260205f20601f840160051c60208510156102ce57505f5b90810190601f840160051c035f5b818110156102f1575f838201556001016102dc565b5050505b505050565b81516001600160401b0381111561031357610313610257565b61032781610321845461026b565b846102a3565b6020601f821160018114610359575f83156103425750848201515b5f19600385901b1c1916600184901b1784556103b1565b5f84815260208120601f198516915b828110156103885787850151825560209485019460019092019101610368565b50848210156103a557868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561029d575f1960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516101605161104d6104795f395f81816101450152818161038401526103e201525f61089801525f61086b01525f6107ac01525f61078401525f6106df01525f61070901525f610733015261104d5ff3fe608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c806370a082311161009357806395d89b411161006357806395d89b4114610239578063a9059cbb14610241578063d505accf14610254578063dd62ed3e14610267575f5ffd5b806370a08231146101d057806379cc6790146101f85780637ecebe001461020b57806384b0196e1461021e575f5ffd5b806323b872dd116100ce57806323b872dd14610191578063313ce567146101a45780633644e515146101b357806340c10f19146101bb575f5ffd5b806306fdde03146100ff578063095ea7b31461011d578063116191b61461014057806318160ddd1461017f575b5f5ffd5b61010761029f565b6040516101149190610dc9565b60405180910390f35b61013061012b366004610dfd565b61032f565b6040519015158152602001610114565b6101677f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610114565b6002545b604051908152602001610114565b61013061019f366004610e25565b610348565b60405160128152602001610114565b61018361036b565b6101ce6101c9366004610dfd565b610379565b005b6101836101de366004610e5f565b6001600160a01b03165f9081526020819052604090205490565b6101ce610206366004610dfd565b6103d7565b610183610219366004610e5f565b610437565b610226610454565b6040516101149796959493929190610e78565b610107610496565b61013061024f366004610dfd565b6104a5565b6101ce610262366004610f0e565b6104b2565b610183610275366004610f7b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546102ae90610fac565b80601f01602080910402602001604051908101604052809291908181526020018280546102da90610fac565b80156103255780601f106102fc57610100808354040283529160200191610325565b820191905f5260205f20905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b5f3361033c8185856105e8565b60019150505b92915050565b5f336103558582856105fa565b610360858585610676565b506001949350505050565b5f6103746106d3565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103c957604051634ca65edb60e11b81523360048201526024015b60405180910390fd5b6103d382826107fc565b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461042257604051634ca65edb60e11b81523360048201526024016103c0565b61042d8233836105fa565b6103d38282610830565b6001600160a01b0381165f90815260076020526040812054610342565b5f6060805f5f5f6060610465610864565b61046d610891565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102ae90610fac565b5f3361033c818585610676565b834211156104d65760405163313c898160e11b8152600481018590526024016103c0565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886105218c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61057b826108be565b90505f61058a828787876108ea565b9050896001600160a01b0316816001600160a01b0316146105d1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016103c0565b6105dc8a8a8a6105e8565b50505050505050505050565b6105f58383836001610916565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610670578181101561066257604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103c0565b61067084848484035f610916565b50505050565b6001600160a01b03831661069f57604051634b637e8f60e11b81525f60048201526024016103c0565b6001600160a01b0382166106c85760405163ec442f0560e01b81525f60048201526024016103c0565b6105f58383836109e8565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561072b57507f000000000000000000000000000000000000000000000000000000000000000046145b1561075557507f000000000000000000000000000000000000000000000000000000000000000090565b610374604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166108255760405163ec442f0560e01b81525f60048201526024016103c0565b6103d35f83836109e8565b6001600160a01b03821661085957604051634b637e8f60e11b81525f60048201526024016103c0565b6103d3825f836109e8565b60606103747f00000000000000000000000000000000000000000000000000000000000000006005610b0e565b60606103747f00000000000000000000000000000000000000000000000000000000000000006006610b0e565b5f6103426108ca6106d3565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f6108fa88888888610bb7565b92509250925061090a8282610c7f565b50909695505050505050565b6001600160a01b03841661093f5760405163e602df0560e01b81525f60048201526024016103c0565b6001600160a01b03831661096857604051634a1406b160e11b81525f60048201526024016103c0565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561067057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109da91815260200190565b60405180910390a350505050565b6001600160a01b038316610a12578060025f828254610a079190610fe4565b90915550610a829050565b6001600160a01b0383165f9081526020819052604090205481811015610a645760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103c0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610a9e57600280548290039055610abc565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0191815260200190565b60405180910390a3505050565b606060ff8314610b2857610b2183610d37565b9050610342565b818054610b3490610fac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090610fac565b8015610bab5780601f10610b8257610100808354040283529160200191610bab565b820191905f5260205f20905b815481529060010190602001808311610b8e57829003601f168201915b50505050509050610342565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610bf057505f91506003905082610c75565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610c41573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c6c57505f925060019150829050610c75565b92505f91508190505b9450945094915050565b5f826003811115610c9257610c92611003565b03610c9b575050565b6001826003811115610caf57610caf611003565b03610ccd5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ce157610ce1611003565b03610d025760405163fce698f760e01b8152600481018290526024016103c0565b6003826003811115610d1657610d16611003565b036103d3576040516335e2f38360e21b8152600481018290526024016103c0565b60605f610d4383610d74565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561034257604051632cd44ac360e21b815260040160405180910390fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610ddb6020830184610d9b565b9392505050565b80356001600160a01b0381168114610df8575f5ffd5b919050565b5f5f60408385031215610e0e575f5ffd5b610e1783610de2565b946020939093013593505050565b5f5f5f60608486031215610e37575f5ffd5b610e4084610de2565b9250610e4e60208501610de2565b929592945050506040919091013590565b5f60208284031215610e6f575f5ffd5b610ddb82610de2565b60ff60f81b8816815260e060208201525f610e9660e0830189610d9b565b8281036040840152610ea88189610d9b565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015610efd578351835260209384019390920191600101610edf565b50909b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a031215610f24575f5ffd5b610f2d88610de2565b9650610f3b60208901610de2565b95506040880135945060608801359350608088013560ff81168114610f5e575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610f8c575f5ffd5b610f9583610de2565b9150610fa360208401610de2565b90509250929050565b600181811c90821680610fc057607f821691505b602082108103610fde57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561034257634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220d85934bd5cd2b7cf394a709cc65749b23a8dc5a166ec28e0f61ff06755d34dde64736f6c63430008230033\",\n \"deployedBytecode\": \"0x608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c806370a082311161009357806395d89b411161006357806395d89b4114610239578063a9059cbb14610241578063d505accf14610254578063dd62ed3e14610267575f5ffd5b806370a08231146101d057806379cc6790146101f85780637ecebe001461020b57806384b0196e1461021e575f5ffd5b806323b872dd116100ce57806323b872dd14610191578063313ce567146101a45780633644e515146101b357806340c10f19146101bb575f5ffd5b806306fdde03146100ff578063095ea7b31461011d578063116191b61461014057806318160ddd1461017f575b5f5ffd5b61010761029f565b6040516101149190610dc9565b60405180910390f35b61013061012b366004610dfd565b61032f565b6040519015158152602001610114565b6101677f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610114565b6002545b604051908152602001610114565b61013061019f366004610e25565b610348565b60405160128152602001610114565b61018361036b565b6101ce6101c9366004610dfd565b610379565b005b6101836101de366004610e5f565b6001600160a01b03165f9081526020819052604090205490565b6101ce610206366004610dfd565b6103d7565b610183610219366004610e5f565b610437565b610226610454565b6040516101149796959493929190610e78565b610107610496565b61013061024f366004610dfd565b6104a5565b6101ce610262366004610f0e565b6104b2565b610183610275366004610f7b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546102ae90610fac565b80601f01602080910402602001604051908101604052809291908181526020018280546102da90610fac565b80156103255780601f106102fc57610100808354040283529160200191610325565b820191905f5260205f20905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b5f3361033c8185856105e8565b60019150505b92915050565b5f336103558582856105fa565b610360858585610676565b506001949350505050565b5f6103746106d3565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103c957604051634ca65edb60e11b81523360048201526024015b60405180910390fd5b6103d382826107fc565b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461042257604051634ca65edb60e11b81523360048201526024016103c0565b61042d8233836105fa565b6103d38282610830565b6001600160a01b0381165f90815260076020526040812054610342565b5f6060805f5f5f6060610465610864565b61046d610891565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102ae90610fac565b5f3361033c818585610676565b834211156104d65760405163313c898160e11b8152600481018590526024016103c0565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886105218c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61057b826108be565b90505f61058a828787876108ea565b9050896001600160a01b0316816001600160a01b0316146105d1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016103c0565b6105dc8a8a8a6105e8565b50505050505050505050565b6105f58383836001610916565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610670578181101561066257604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103c0565b61067084848484035f610916565b50505050565b6001600160a01b03831661069f57604051634b637e8f60e11b81525f60048201526024016103c0565b6001600160a01b0382166106c85760405163ec442f0560e01b81525f60048201526024016103c0565b6105f58383836109e8565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561072b57507f000000000000000000000000000000000000000000000000000000000000000046145b1561075557507f000000000000000000000000000000000000000000000000000000000000000090565b610374604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166108255760405163ec442f0560e01b81525f60048201526024016103c0565b6103d35f83836109e8565b6001600160a01b03821661085957604051634b637e8f60e11b81525f60048201526024016103c0565b6103d3825f836109e8565b60606103747f00000000000000000000000000000000000000000000000000000000000000006005610b0e565b60606103747f00000000000000000000000000000000000000000000000000000000000000006006610b0e565b5f6103426108ca6106d3565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f6108fa88888888610bb7565b92509250925061090a8282610c7f565b50909695505050505050565b6001600160a01b03841661093f5760405163e602df0560e01b81525f60048201526024016103c0565b6001600160a01b03831661096857604051634a1406b160e11b81525f60048201526024016103c0565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561067057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109da91815260200190565b60405180910390a350505050565b6001600160a01b038316610a12578060025f828254610a079190610fe4565b90915550610a829050565b6001600160a01b0383165f9081526020819052604090205481811015610a645760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103c0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610a9e57600280548290039055610abc565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0191815260200190565b60405180910390a3505050565b606060ff8314610b2857610b2183610d37565b9050610342565b818054610b3490610fac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090610fac565b8015610bab5780601f10610b8257610100808354040283529160200191610bab565b820191905f5260205f20905b815481529060010190602001808311610b8e57829003601f168201915b50505050509050610342565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610bf057505f91506003905082610c75565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610c41573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c6c57505f925060019150829050610c75565b92505f91508190505b9450945094915050565b5f826003811115610c9257610c92611003565b03610c9b575050565b6001826003811115610caf57610caf611003565b03610ccd5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ce157610ce1611003565b03610d025760405163fce698f760e01b8152600481018290526024016103c0565b6003826003811115610d1657610d16611003565b036103d3576040516335e2f38360e21b8152600481018290526024016103c0565b60605f610d4383610d74565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561034257604051632cd44ac360e21b815260040160405180910390fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610ddb6020830184610d9b565b9392505050565b80356001600160a01b0381168114610df8575f5ffd5b919050565b5f5f60408385031215610e0e575f5ffd5b610e1783610de2565b946020939093013593505050565b5f5f5f60608486031215610e37575f5ffd5b610e4084610de2565b9250610e4e60208501610de2565b929592945050506040919091013590565b5f60208284031215610e6f575f5ffd5b610ddb82610de2565b60ff60f81b8816815260e060208201525f610e9660e0830189610d9b565b8281036040840152610ea88189610d9b565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015610efd578351835260209384019390920191600101610edf565b50909b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a031215610f24575f5ffd5b610f2d88610de2565b9650610f3b60208901610de2565b95506040880135945060608801359350608088013560ff81168114610f5e575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610f8c575f5ffd5b610f9583610de2565b9150610fa360208401610de2565b90509250929050565b600181811c90821680610fc057607f821691505b602082108103610fde57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561034257634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220d85934bd5cd2b7cf394a709cc65749b23a8dc5a166ec28e0f61ff06755d34dde64736f6c63430008230033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {},\n \"immutableReferences\": {\n \"6252\": [\n {\n \"length\": 32,\n \"start\": 1843\n }\n ],\n \"6254\": [\n {\n \"length\": 32,\n \"start\": 1801\n }\n ],\n \"6256\": [\n {\n \"length\": 32,\n \"start\": 1759\n }\n ],\n \"6258\": [\n {\n \"length\": 32,\n \"start\": 1924\n }\n ],\n \"6260\": [\n {\n \"length\": 32,\n \"start\": 1964\n }\n ],\n \"6263\": [\n {\n \"length\": 32,\n \"start\": 2155\n }\n ],\n \"6266\": [\n {\n \"length\": 32,\n \"start\": 2200\n }\n ],\n \"10253\": [\n {\n \"length\": 32,\n \"start\": 325\n },\n {\n \"length\": 32,\n \"start\": 900\n },\n {\n \"length\": 32,\n \"start\": 994\n }\n ]\n },\n \"inputSourceName\": \"project/contracts/ArgonToken.sol\",\n \"buildInfoId\": \"solc-0_8_35-beb8df952405ec55b2bc54201ffcd6097ae4e14a\"\n}","{\n \"_format\": \"hh3-artifact-1\",\n \"contractName\": \"ArgonotToken\",\n \"sourceName\": \"contracts/ArgonotToken.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"gateway\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"ECDSAInvalidSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"length\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ECDSAInvalidSignatureLength\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"ECDSAInvalidSignatureS\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientAllowance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"balance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientBalance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"approver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidApprover\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidReceiver\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSpender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC2612ExpiredSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signer\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC2612InvalidSigner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"currentNonce\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InvalidAccountNonce\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"gateway\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"InvalidGateway\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidShortString\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"caller\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OnlyGateway\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"str\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"StringTooLong\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [],\n \"name\": \"EIP712DomainChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DOMAIN_SEPARATOR\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"burnFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"eip712Domain\",\n \"outputs\": [\n {\n \"internalType\": \"bytes1\",\n \"name\": \"fields\",\n \"type\": \"bytes1\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"version\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"verifyingContract\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"salt\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"extensions\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"gateway\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"nonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"permit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x610180604052348015610010575f5ffd5b506040516114ca3803806114ca83398101604081905261002f9161022e565b60405180604001604052806007815260200166105c99dbdb9bdd60ca1b81525060405180604001604052806006815260200165105491d393d560d21b815250828280604051806040016040528060018152602001603160f81b8152508585816003908161009c91906102fe565b5060046100a982826102fe565b506100b9915083905060056101bf565b610120526100c88160066101bf565b61014052815160208084019190912060e052815190820120610100524660a05261015460e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b038116158061017c57506001600160a01b0381163b155b156101a957604051628ecbc360e51b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b03166101605250610414915050565b5f6020835110156101da576101d3836101f1565b90506101eb565b816101e584826102fe565b5060ff90505b92915050565b5f5f829050601f8151111561021b578260405163305a27a960e01b81526004016101a091906103bc565b8051610226826103f1565b179392505050565b5f6020828403121561023e575f5ffd5b81516001600160a01b0381168114610254575f5ffd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061028357607f821691505b6020821081036102a157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156102f957828211156102f957805f5260205f20601f840160051c60208510156102d257505f5b90810190601f840160051c035f5b818110156102f5575f838201556001016102e0565b5050505b505050565b81516001600160401b038111156103175761031761025b565b61032b81610325845461026f565b846102a7565b6020601f82116001811461035d575f83156103465750848201515b5f19600385901b1c1916600184901b1784556103b5565b5f84815260208120601f198516915b8281101561038c578785015182556020948501946001909201910161036c565b50848210156103a957868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102a1575f1960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516101605161104d61047d5f395f81816101450152818161038401526103e201525f61089801525f61086b01525f6107ac01525f61078401525f6106df01525f61070901525f610733015261104d5ff3fe608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c806370a082311161009357806395d89b411161006357806395d89b4114610239578063a9059cbb14610241578063d505accf14610254578063dd62ed3e14610267575f5ffd5b806370a08231146101d057806379cc6790146101f85780637ecebe001461020b57806384b0196e1461021e575f5ffd5b806323b872dd116100ce57806323b872dd14610191578063313ce567146101a45780633644e515146101b357806340c10f19146101bb575f5ffd5b806306fdde03146100ff578063095ea7b31461011d578063116191b61461014057806318160ddd1461017f575b5f5ffd5b61010761029f565b6040516101149190610dc9565b60405180910390f35b61013061012b366004610dfd565b61032f565b6040519015158152602001610114565b6101677f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610114565b6002545b604051908152602001610114565b61013061019f366004610e25565b610348565b60405160128152602001610114565b61018361036b565b6101ce6101c9366004610dfd565b610379565b005b6101836101de366004610e5f565b6001600160a01b03165f9081526020819052604090205490565b6101ce610206366004610dfd565b6103d7565b610183610219366004610e5f565b610437565b610226610454565b6040516101149796959493929190610e78565b610107610496565b61013061024f366004610dfd565b6104a5565b6101ce610262366004610f0e565b6104b2565b610183610275366004610f7b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546102ae90610fac565b80601f01602080910402602001604051908101604052809291908181526020018280546102da90610fac565b80156103255780601f106102fc57610100808354040283529160200191610325565b820191905f5260205f20905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b5f3361033c8185856105e8565b60019150505b92915050565b5f336103558582856105fa565b610360858585610676565b506001949350505050565b5f6103746106d3565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103c957604051634ca65edb60e11b81523360048201526024015b60405180910390fd5b6103d382826107fc565b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461042257604051634ca65edb60e11b81523360048201526024016103c0565b61042d8233836105fa565b6103d38282610830565b6001600160a01b0381165f90815260076020526040812054610342565b5f6060805f5f5f6060610465610864565b61046d610891565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102ae90610fac565b5f3361033c818585610676565b834211156104d65760405163313c898160e11b8152600481018590526024016103c0565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886105218c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61057b826108be565b90505f61058a828787876108ea565b9050896001600160a01b0316816001600160a01b0316146105d1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016103c0565b6105dc8a8a8a6105e8565b50505050505050505050565b6105f58383836001610916565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610670578181101561066257604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103c0565b61067084848484035f610916565b50505050565b6001600160a01b03831661069f57604051634b637e8f60e11b81525f60048201526024016103c0565b6001600160a01b0382166106c85760405163ec442f0560e01b81525f60048201526024016103c0565b6105f58383836109e8565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561072b57507f000000000000000000000000000000000000000000000000000000000000000046145b1561075557507f000000000000000000000000000000000000000000000000000000000000000090565b610374604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166108255760405163ec442f0560e01b81525f60048201526024016103c0565b6103d35f83836109e8565b6001600160a01b03821661085957604051634b637e8f60e11b81525f60048201526024016103c0565b6103d3825f836109e8565b60606103747f00000000000000000000000000000000000000000000000000000000000000006005610b0e565b60606103747f00000000000000000000000000000000000000000000000000000000000000006006610b0e565b5f6103426108ca6106d3565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f6108fa88888888610bb7565b92509250925061090a8282610c7f565b50909695505050505050565b6001600160a01b03841661093f5760405163e602df0560e01b81525f60048201526024016103c0565b6001600160a01b03831661096857604051634a1406b160e11b81525f60048201526024016103c0565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561067057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109da91815260200190565b60405180910390a350505050565b6001600160a01b038316610a12578060025f828254610a079190610fe4565b90915550610a829050565b6001600160a01b0383165f9081526020819052604090205481811015610a645760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103c0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610a9e57600280548290039055610abc565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0191815260200190565b60405180910390a3505050565b606060ff8314610b2857610b2183610d37565b9050610342565b818054610b3490610fac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090610fac565b8015610bab5780601f10610b8257610100808354040283529160200191610bab565b820191905f5260205f20905b815481529060010190602001808311610b8e57829003601f168201915b50505050509050610342565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610bf057505f91506003905082610c75565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610c41573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c6c57505f925060019150829050610c75565b92505f91508190505b9450945094915050565b5f826003811115610c9257610c92611003565b03610c9b575050565b6001826003811115610caf57610caf611003565b03610ccd5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ce157610ce1611003565b03610d025760405163fce698f760e01b8152600481018290526024016103c0565b6003826003811115610d1657610d16611003565b036103d3576040516335e2f38360e21b8152600481018290526024016103c0565b60605f610d4383610d74565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561034257604051632cd44ac360e21b815260040160405180910390fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610ddb6020830184610d9b565b9392505050565b80356001600160a01b0381168114610df8575f5ffd5b919050565b5f5f60408385031215610e0e575f5ffd5b610e1783610de2565b946020939093013593505050565b5f5f5f60608486031215610e37575f5ffd5b610e4084610de2565b9250610e4e60208501610de2565b929592945050506040919091013590565b5f60208284031215610e6f575f5ffd5b610ddb82610de2565b60ff60f81b8816815260e060208201525f610e9660e0830189610d9b565b8281036040840152610ea88189610d9b565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015610efd578351835260209384019390920191600101610edf565b50909b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a031215610f24575f5ffd5b610f2d88610de2565b9650610f3b60208901610de2565b95506040880135945060608801359350608088013560ff81168114610f5e575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610f8c575f5ffd5b610f9583610de2565b9150610fa360208401610de2565b90509250929050565b600181811c90821680610fc057607f821691505b602082108103610fde57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561034257634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220a3276167a60dc36c592042d07732eea9655ac58439d35808227b8582ad099a0064736f6c63430008230033\",\n \"deployedBytecode\": \"0x608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c806370a082311161009357806395d89b411161006357806395d89b4114610239578063a9059cbb14610241578063d505accf14610254578063dd62ed3e14610267575f5ffd5b806370a08231146101d057806379cc6790146101f85780637ecebe001461020b57806384b0196e1461021e575f5ffd5b806323b872dd116100ce57806323b872dd14610191578063313ce567146101a45780633644e515146101b357806340c10f19146101bb575f5ffd5b806306fdde03146100ff578063095ea7b31461011d578063116191b61461014057806318160ddd1461017f575b5f5ffd5b61010761029f565b6040516101149190610dc9565b60405180910390f35b61013061012b366004610dfd565b61032f565b6040519015158152602001610114565b6101677f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610114565b6002545b604051908152602001610114565b61013061019f366004610e25565b610348565b60405160128152602001610114565b61018361036b565b6101ce6101c9366004610dfd565b610379565b005b6101836101de366004610e5f565b6001600160a01b03165f9081526020819052604090205490565b6101ce610206366004610dfd565b6103d7565b610183610219366004610e5f565b610437565b610226610454565b6040516101149796959493929190610e78565b610107610496565b61013061024f366004610dfd565b6104a5565b6101ce610262366004610f0e565b6104b2565b610183610275366004610f7b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546102ae90610fac565b80601f01602080910402602001604051908101604052809291908181526020018280546102da90610fac565b80156103255780601f106102fc57610100808354040283529160200191610325565b820191905f5260205f20905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b5f3361033c8185856105e8565b60019150505b92915050565b5f336103558582856105fa565b610360858585610676565b506001949350505050565b5f6103746106d3565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103c957604051634ca65edb60e11b81523360048201526024015b60405180910390fd5b6103d382826107fc565b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461042257604051634ca65edb60e11b81523360048201526024016103c0565b61042d8233836105fa565b6103d38282610830565b6001600160a01b0381165f90815260076020526040812054610342565b5f6060805f5f5f6060610465610864565b61046d610891565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102ae90610fac565b5f3361033c818585610676565b834211156104d65760405163313c898160e11b8152600481018590526024016103c0565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886105218c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61057b826108be565b90505f61058a828787876108ea565b9050896001600160a01b0316816001600160a01b0316146105d1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016103c0565b6105dc8a8a8a6105e8565b50505050505050505050565b6105f58383836001610916565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610670578181101561066257604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103c0565b61067084848484035f610916565b50505050565b6001600160a01b03831661069f57604051634b637e8f60e11b81525f60048201526024016103c0565b6001600160a01b0382166106c85760405163ec442f0560e01b81525f60048201526024016103c0565b6105f58383836109e8565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561072b57507f000000000000000000000000000000000000000000000000000000000000000046145b1561075557507f000000000000000000000000000000000000000000000000000000000000000090565b610374604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166108255760405163ec442f0560e01b81525f60048201526024016103c0565b6103d35f83836109e8565b6001600160a01b03821661085957604051634b637e8f60e11b81525f60048201526024016103c0565b6103d3825f836109e8565b60606103747f00000000000000000000000000000000000000000000000000000000000000006005610b0e565b60606103747f00000000000000000000000000000000000000000000000000000000000000006006610b0e565b5f6103426108ca6106d3565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f6108fa88888888610bb7565b92509250925061090a8282610c7f565b50909695505050505050565b6001600160a01b03841661093f5760405163e602df0560e01b81525f60048201526024016103c0565b6001600160a01b03831661096857604051634a1406b160e11b81525f60048201526024016103c0565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561067057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109da91815260200190565b60405180910390a350505050565b6001600160a01b038316610a12578060025f828254610a079190610fe4565b90915550610a829050565b6001600160a01b0383165f9081526020819052604090205481811015610a645760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103c0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610a9e57600280548290039055610abc565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0191815260200190565b60405180910390a3505050565b606060ff8314610b2857610b2183610d37565b9050610342565b818054610b3490610fac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090610fac565b8015610bab5780601f10610b8257610100808354040283529160200191610bab565b820191905f5260205f20905b815481529060010190602001808311610b8e57829003601f168201915b50505050509050610342565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610bf057505f91506003905082610c75565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610c41573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c6c57505f925060019150829050610c75565b92505f91508190505b9450945094915050565b5f826003811115610c9257610c92611003565b03610c9b575050565b6001826003811115610caf57610caf611003565b03610ccd5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ce157610ce1611003565b03610d025760405163fce698f760e01b8152600481018290526024016103c0565b6003826003811115610d1657610d16611003565b036103d3576040516335e2f38360e21b8152600481018290526024016103c0565b60605f610d4383610d74565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561034257604051632cd44ac360e21b815260040160405180910390fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610ddb6020830184610d9b565b9392505050565b80356001600160a01b0381168114610df8575f5ffd5b919050565b5f5f60408385031215610e0e575f5ffd5b610e1783610de2565b946020939093013593505050565b5f5f5f60608486031215610e37575f5ffd5b610e4084610de2565b9250610e4e60208501610de2565b929592945050506040919091013590565b5f60208284031215610e6f575f5ffd5b610ddb82610de2565b60ff60f81b8816815260e060208201525f610e9660e0830189610d9b565b8281036040840152610ea88189610d9b565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015610efd578351835260209384019390920191600101610edf565b50909b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a031215610f24575f5ffd5b610f2d88610de2565b9650610f3b60208901610de2565b95506040880135945060608801359350608088013560ff81168114610f5e575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610f8c575f5ffd5b610f9583610de2565b9150610fa360208401610de2565b90509250929050565b600181811c90821680610fc057607f821691505b602082108103610fde57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561034257634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220a3276167a60dc36c592042d07732eea9655ac58439d35808227b8582ad099a0064736f6c63430008230033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {},\n \"immutableReferences\": {\n \"6252\": [\n {\n \"length\": 32,\n \"start\": 1843\n }\n ],\n \"6254\": [\n {\n \"length\": 32,\n \"start\": 1801\n }\n ],\n \"6256\": [\n {\n \"length\": 32,\n \"start\": 1759\n }\n ],\n \"6258\": [\n {\n \"length\": 32,\n \"start\": 1924\n }\n ],\n \"6260\": [\n {\n \"length\": 32,\n \"start\": 1964\n }\n ],\n \"6263\": [\n {\n \"length\": 32,\n \"start\": 2155\n }\n ],\n \"6266\": [\n {\n \"length\": 32,\n \"start\": 2200\n }\n ],\n \"10253\": [\n {\n \"length\": 32,\n \"start\": 325\n },\n {\n \"length\": 32,\n \"start\": 900\n },\n {\n \"length\": 32,\n \"start\": 994\n }\n ]\n },\n \"inputSourceName\": \"project/contracts/ArgonotToken.sol\",\n \"buildInfoId\": \"solc-0_8_35-beb8df952405ec55b2bc54201ffcd6097ae4e14a\"\n}","{\n \"_format\": \"hh3-artifact-1\",\n \"contractName\": \"MintingGateway\",\n \"sourceName\": \"contracts/MintingGateway.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"argonTokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"argonotTokenAddress\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"ArrayLengthMismatch\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ECDSAInvalidSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"length\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ECDSAInvalidSignatureLength\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"ECDSAInvalidSignatureS\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"EnforcedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExpectedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"GlobalIssuanceCouncilNotBootstrapped\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"GlobalIssuanceCouncilQuorumNotMet\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"authorized\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"required\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InsufficientAuthorizedCollateral\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"expected\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"provided\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"InvalidChainId\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"expected\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"provided\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"InvalidCurrentCouncilSnapshot\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InvalidGlobalIssuanceCouncilMember\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidMicrogonCollateralForArgonotPayout\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"InvalidMintingAuthority\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"expected\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"provided\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"InvalidQueueNonce\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"expected\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"provided\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InvalidSignatureCount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidSignatureOrder\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxRate\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"providedRate\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"InvalidTransferOutRate\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"kind\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"InvalidUpdateKind\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"MigrationAlreadyCompleted\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"MintingAuthorityAlreadyActive\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"MintingAuthorityTransferCapacityExceeded\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"caller\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotGuardianOrOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"RuntimeAmountOverflow\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"maxAllowed\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"provided\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TooManyGatewayUpdates\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"maxAllowed\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"provided\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TooManyMintingAuthorizations\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"transferId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"TransferOutOfArgonAlreadyFinalized\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"currentBlock\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"validUntilBlock\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TransferOutOfArgonExpired\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"currentBlock\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"validUntilBlock\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TransferOutOfArgonNotExpired\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"UnsupportedToken\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroAdminSafe\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroAmount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroGuardian\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroMicrogonsPerArgonot\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ZeroRecipient\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroSigningKey\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"councilHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"GlobalIssuanceCouncilBootstrapped\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousCouncilHash\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"councilHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"GlobalIssuanceCouncilForceUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"councilHash\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"approvalHash\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"relayerArgonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"gatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonApprovalsNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonCirculation\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonotCirculation\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.GatewayActivityState\",\n \"name\": \"gatewayState\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"GlobalIssuanceCouncilRotated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousGuardian\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newGuardian\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"GuardianUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"argonRecipientCount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"argonTotalAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"argonotRecipientCount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"argonotTotalAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"MigrationCompleted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"microgonCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"micronotCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint32\",\n \"name\": \"coactivationCount\",\n \"type\": \"uint32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint32\",\n \"name\": \"sharedSignatureCount\",\n \"type\": \"uint32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"approvalHash\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"relayerArgonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"gatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonApprovalsNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonCirculation\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonotCirculation\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.GatewayActivityState\",\n \"name\": \"gatewayState\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"MintingAuthorityActivated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"microgonCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"micronotCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"approvalHash\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"relayerArgonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"gatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonApprovalsNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonCirculation\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonotCirculation\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.GatewayActivityState\",\n \"name\": \"gatewayState\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"MintingAuthorityDeactivated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"transferId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"gatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonApprovalsNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonCirculation\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonotCirculation\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.GatewayActivityState\",\n \"name\": \"gatewayState\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"TransferOutOfArgonCanceled\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"transferId\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"amount\",\n \"type\": \"uint128\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"microgonCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"micronotCollateral\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.MintingAuthorityCollateral[]\",\n \"name\": \"mintingCollateral\",\n \"type\": \"tuple[]\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"gatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonApprovalsNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonCirculation\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonotCirculation\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.GatewayActivityState\",\n \"name\": \"gatewayState\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"TransferOutOfArgonFinalized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"amount\",\n \"type\": \"uint128\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"argonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"gatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonApprovalsNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonCirculation\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"argonotCirculation\",\n \"type\": \"uint128\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct MintingGateway.GatewayActivityState\",\n \"name\": \"gatewayState\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"TransferToArgonStarted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"ACTIVITY_HASH_VERSION\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MAX_GATEWAY_UPDATES_PER_BATCH\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MAX_MINTING_AUTHORIZATIONS_PER_TRANSFER\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"RUNTIME_DECIMALS\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"RUNTIME_TO_ERC20_SCALE\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"TOKEN_DECIMALS\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"locatorIndex\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"activityBlockLocators\",\n \"outputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"blockNumber\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"startGatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"endGatewayActivityNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"activityRoot\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"activityBlockLocatorsMappingSlot\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"slot\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"signers\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"weights\",\n \"type\": \"uint256[]\"\n }\n ],\n \"internalType\": \"struct MintingGateway.CouncilSnapshot\",\n \"name\": \"currentCouncil\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"queueNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"enum MintingGateway.GatewayUpdateKind\",\n \"name\": \"kind\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"payload\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"signatures\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct MintingGateway.GatewayUpdate[]\",\n \"name\": \"updates\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"relayerArgonAccountId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"applyGatewayUpdates\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"argonApprovalsHash\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"argonApprovalsNonce\",\n \"outputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"\",\n \"type\": \"uint64\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"argonCirculation\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"argonToken\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"argonotCirculation\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"argonotToken\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"argonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonTransferNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"chainId\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"microgonsPerArgonot\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"validUntilBlock\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"amount\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"mintingAuthorityTip\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct MintingGateway.TransferOutOfArgonRequest\",\n \"name\": \"request\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"cancelTransferOutOfArgon\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"argonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"argonTransferNonce\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"chainId\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"microgonsPerArgonot\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"validUntilBlock\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"amount\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"mintingAuthorityTip\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct MintingGateway.TransferOutOfArgonRequest\",\n \"name\": \"request\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"microgonCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"micronotCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"internalType\": \"struct MintingGateway.MintingAuthorization[]\",\n \"name\": \"authorizations\",\n \"type\": \"tuple[]\"\n }\n ],\n \"internalType\": \"struct MintingGateway.TransferOutOfArgonProof\",\n \"name\": \"proof\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"finalizeTransferOutOfArgon\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"transferId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"finalizedTransferOutOfArgonIds\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"isFinalized\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"signers\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"weights\",\n \"type\": \"uint256[]\"\n }\n ],\n \"internalType\": \"struct MintingGateway.CouncilSnapshot\",\n \"name\": \"nextCouncil\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"nextMicrogonsPerArgonot\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"forceUpdateActiveCouncil\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"gatewayActivityNonce\",\n \"outputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"\",\n \"type\": \"uint64\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"globalIssuanceCouncil\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"totalWeight\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"memberCount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"councilHash\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"epochMicrogonsPerArgonot\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"guardian\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"adminSafe\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"guardianAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"councilHash\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"councilMemberCount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"councilTotalWeight\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"initialMicrogonsPerArgonot\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"latestActivityBlockLocatorIndex\",\n \"outputs\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"\",\n \"type\": \"uint64\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxTransferOutMicrogonsPerArgonot\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"recipients\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amounts\",\n \"type\": \"uint256[]\"\n }\n ],\n \"internalType\": \"struct MintingGateway.MigrationAssetDistribution\",\n \"name\": \"argonMigration\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"recipients\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amounts\",\n \"type\": \"uint256[]\"\n }\n ],\n \"internalType\": \"struct MintingGateway.MigrationAssetDistribution\",\n \"name\": \"argonotMigration\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"migrate\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"migrationCompleted\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"signingKey\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"mintingAuthorityCollateralRemaining\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"microgonCollateral\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"micronotCollateral\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"guardianAddress\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setGuardian\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"amount\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"argonAccountId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"startTransferToArgon\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"amount\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"toTokenAmount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60c060405234801561000f575f5ffd5b50604051614c61380380614c6183398101604081905261002e9161011d565b6001600160a01b03808316608052811660a052610049610050565b505061014e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a05760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100ff5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b0381168114610118575f5ffd5b919050565b5f5f6040838503121561012e575f5ffd5b61013783610102565b915061014560208401610102565b90509250929050565b60805160a051614ab36101ae5f395f8181610325015281816113bd0152818161147f01528181611d6d0152611dff01525f818161046d01528181610c30015281816110f90152818161137a01528181611d3c0152611dc20152614ab35ff3fe608060405234801561000f575f5ffd5b506004361061021e575f3560e01c80636e2c77691161012a5780638da5cb5b116100b4578063d68d631111610079578063d68d631114610529578063e52580a61461053c578063ecec10a4146105b9578063f1982c67146105cc578063f2fde38b146105d3575f5ffd5b80638da5cb5b146104aa578063905d031f146104b2578063a3eb896114610505578063beabb5911461050e578063c017c90214610516575f5ffd5b80637c9afa67116100fa5780637c9afa671461043e57806380a126211461046057806383a4d591146104685780638456cb591461048f5780638a0dac4a14610497575f5ffd5b80636e2c7769146104085780636e888c461461041b578063715018a61461042e57806378d350e014610436575f5ffd5b80632ef29f3b116101ab578063452a93201161017b578063452a9320146103c757806359b23872146103d95780635b7f415c146103e15780635c975abb146103e95780635cadf6e814610400575f5ffd5b80632ef29f3b1461036757806331677980146103885780633f4ba83a146103ac578063422ad8f6146103b4575f5ffd5b806318a8f1f0116101f157806318a8f1f0146102945780631a5d93fd146102a75780631c1eeae1146102ef5780631e07f89e146103205780632ceeddf51461035f575f5ffd5b8063014c72f61461022257806309af0e3c14610237578063138f87811461026757806316dd172d1461027a575b5f5ffd5b610235610230366004613dea565b6105e6565b005b60085461024a906001600160801b031681565b6040516001600160801b0390911681526020015b60405180910390f35b610235610275366004613e45565b61071d565b610282600181565b60405160ff909116815260200161025e565b6102356102a2366004613eae565b610f41565b6004546005546006546007546102c6939291906001600160801b031684565b604080519485526020850193909352918301526001600160801b0316606082015260800161025e565b5f5461030890600160a01b90046001600160401b031681565b6040516001600160401b03909116815260200161025e565b6103477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025e565b61024a6110f3565b61037a610375366004613f1b565b611181565b60405190815260200161025e565b60035461039c90600160401b900460ff1681565b604051901515815260200161025e565b6102356111b2565b6102356103c2366004613f34565b6111c4565b5f54610347906001600160a01b031681565b61037a61131f565b610282601281565b5f516020614a5e5f395f51905f525460ff1661039c565b61037a601981565b600154610308906001600160401b031681565b610235610429366004613f4f565b611339565b610235611468565b61024a611479565b61039c61044c366004613fb2565b600a6020525f908152604090205460ff1681565b61037a606481565b6103477f000000000000000000000000000000000000000000000000000000000000000081565b6102356114d9565b6102356104a5366004613fc9565b611534565b6103476115b2565b6104e56104c0366004613fc9565b60096020525f90815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b0393841681529290911660208301520161025e565b61037a60025481565b610282600681565b610235610524366004613fe2565b6115e0565b600354610308906001600160401b031681565b61058461054a36600461403d565b600b6020525f9081526040902080546001909101546001600160401b0380831692600160401b8104821692600160801b9091049091169084565b60405161025e94939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b6102356105c7366004614063565b6117fa565b600b61037a565b6102356105e1366004613fc9565b611a90565b6105ee611acd565b806001600160801b03165f0361061757604051632440a7dd60e01b815260040160405180910390fd5b5f808061069d6106278680614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250610665925050506020880188614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250899250611aff915050565b6040805160808101825260045481526005546020820152600654918101919091526007546001600160801b0316606082015292955090935091506106e384848488611c1d565b8381604001517f33e53e90d61fdc868629a6234670f92c4445196f3f98ebd71935bbc76c7d915360405160405180910390a3505050505050565b610725611c6e565b61072e82611c9e565b61074661074160e0840160c08501613fc9565b611d08565b610757610100830160e08401613f1b565b6001600160801b03165f0361077f57604051631f2a200560e01b815260040160405180910390fd5b601961078b8280614102565b905011156107c757601961079f8280614102565b60405163e126b42160e01b815260048101939093526024830152506044015b60405180910390fd5b6107d760c0830160a0840161403d565b6001600160401b031643111561082357436107f860c0840160a0850161403d565b604051635728c7dd60e11b815260048101929092526001600160401b031660248201526044016107be565b5f61082d83611e5d565b905061083881611f67565b6108486080840160608501613f1b565b6001600160801b03165f0361087057604051632440a7dd60e01b815260040160405180910390fd5b6008546001600160801b03168061088d6080860160608701613f1b565b6001600160801b031611156108d957806108ad6080860160608701613f1b565b6040516343082d3360e01b81526001600160801b039283166004820152911660248201526044016107be565b5f8080806108e78780614102565b90506001600160401b0381111561090057610900614147565b60405190808252806020026020018201604052801561094957816020015b604080516060810182525f80825260208083018290529282015282525f1990920191018161091e5790505b5090505f5b6109588880614102565b9050811015610c25573661096c8980614102565b8381811061097c5761097c61415b565b905060200281019061098e919061416f565b90505f610a016109ef6109bd8d6109a86020870187613f1b565b6109b86040880160208901613f1b565b611f99565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b6109fc604085018561418d565b612026565b9050846001600160a01b0316816001600160a01b031611610a35576040516309cf9e4960e11b815260040160405180910390fd5b6001600160a01b0381165f90815260096020908152604090912090610a5c90840184613f1b565b81546001600160801b0391821691161080610a9c5750610a826040840160208501613f1b565b81546001600160801b03918216600160801b909104909116105b15610ac5576040516364fc3cd160e11b81526001600160a01b03831660048201526024016107be565b610ad26020840184613f1b565b815482905f90610aec9084906001600160801b03166141e3565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550826020016020810190610b239190613f1b565b81548290601090610b45908490600160801b90046001600160801b03166141e3565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550825f016020810190610b7b9190613f1b565b610b859089614202565b9750610b976040840160208501613f1b565b610ba19088614202565b96506040518060600160405280836001600160a01b03168152602001845f016020810190610bcf9190613f1b565b6001600160801b03168152602001846020016020810190610bf09190613f1b565b6001600160801b0316815250858581518110610c0e57610c0e61415b565b60209081029190910101525093505060010161094e565b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610c6060e08a0160c08b01613fc9565b6001600160a01b031603610d2e575f610c7b6006600a6142fc565b610c8b60808b0160608c01613f1b565b6001600160801b0316856001600160801b0316610ca8919061430a565b610cb29190614321565b90505f610cc8826001600160801b038816614340565b9050610cdb6101008b0160e08c01613f1b565b6001600160801b0316811015610d275780610cfd6101008c0160e08d01613f1b565b60405162f9825560e61b815260048101929092526001600160801b031660248201526044016107be565b5050610dbd565b6001600160801b03841615610d5657604051630994a0f360e11b815260040160405180910390fd5b610d67610100890160e08a01613f1b565b6001600160801b0316836001600160801b03161015610dbd5782610d926101008a0160e08b01613f1b565b60405162f9825560e61b81526001600160801b039283166004820152911660248201526044016107be565b610ddb865f908152600a60205260409020805460ff19166001179055565b610deb60e0890160c08a01613fc9565b6001600160a01b03166340c10f19610e0960a08b0160808c01613fc9565b610e1d6103756101008d0160e08e01613f1b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015610e60575f5ffd5b505af1158015610e72573d5f5f3e3d5ffd5b50505f8054909250610e9f9150610e9a90600160a01b90046001600160401b03166001614353565b612050565b9050610ed881610ed389610eb960e08e0160c08f01613fc9565b8d60e0016020810190610ecc9190613f1b565b87876120c5565b6121a0565b7f64d79900ed82270f744ae62db527f4e328e336d8b51e77bc72601391fe779d0687610f0a60e08c0160c08d01613fc9565b610f1b6101008d0160e08e01613f1b565b8585604051610f2e959493929190614424565b60405180910390a1505050505050505050565b610f49611c6e565b610f5287611d08565b856001600160801b03165f03610f7b57604051631f2a200560e01b815260040160405180910390fd5b5f610f8587611181565b60405163d505accf60e01b8152336004820152306024820152604481018290526064810187905260ff8616608482015260a4810185905260c481018490529091506001600160a01b0389169063d505accf9060e4015f604051808303815f87803b158015610ff1575f5ffd5b505af1158015611003573d5f5f3e3d5ffd5b505060405163079cc67960e41b8152336004820152602481018490526001600160a01b038b1692506379cc679091506044015f604051808303815f87803b15801561104c575f5ffd5b505af115801561105e573d5f5f3e3d5ffd5b50505f80549092506110869150610e9a90600160a01b90046001600160401b03166001614353565b905061109981610ed3338c8c8c87612461565b886001600160a01b0316336001600160a01b03167f3ab970a848f33363427e47cfbd7a627af0c6e72757f150137e38cef3cee24d938a8a856040516110e09392919061446c565b60405180910390a3505050505050505050565b5f61117c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611153573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111779190614490565b6124f8565b905090565b5f61118e600660126144a7565b61119990600a6142fc565b6111ac906001600160801b03841661430a565b92915050565b6111ba611acd565b6111c2612548565b565b6111cc611c6e565b6111d581611c9e565b6111e861074160e0830160c08401613fc9565b6111f9610100820160e08301613f1b565b6001600160801b03165f0361122157604051631f2a200560e01b815260040160405180910390fd5b61123160c0820160a0830161403d565b6001600160401b0316431161127c574361125160c0830160a0840161403d565b6040516374276dcf60e11b815260048101929092526001600160401b031660248201526044016107be565b5f61128682611e5d565b905061129181611f67565b6112af815f908152600a60205260409020805460ff19166001179055565b5f80546112d190610e9a90600160a01b90046001600160401b03166001614353565b90506112e181610ed384846125a7565b7f3cb8789e9bf6f532eec2bc8ffee9b622fc0d6e6daefb7fb6bb2e2f7b2d62e45282826040516113129291906144c0565b60405180910390a1505050565b61132b600660126144a7565b61133690600a6142fc565b81565b611341611acd565b611349611c6e565b600354600160401b900460ff161561137457604051633dbff3b560e01b815260040160405180910390fd5b5f6113b57f00000000000000000000000000000000000000000000000000000000000000006113a38580614102565b6113b06020880188614102565b612631565b90505f6113e67f00000000000000000000000000000000000000000000000000000000000000006113a38580614102565b6003805460ff60401b1916600160401b17905590507fc255ddc45163282f24909556f7475ab4ec8eb1d51763b25a4560cee9f43d06456114268580614102565b9050836114338680614102565b60405161145a94939250869093845260208401929092526040830152606082015260800190565b60405180910390a150505050565b611470611acd565b6111c25f612770565b5f61117c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611153573d5f5f3e3d5ffd5b5f546001600160a01b0316331480159061150c57506114f66115b2565b6001600160a01b0316336001600160a01b031614155b1561152c5760405163354de03160e21b81523360048201526024016107be565b6111c26127e0565b61153c611acd565b6001600160a01b0381166115635760405163a91f6a8960e01b815260040160405180910390fd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f064d28d3d3071c5cbc271a261c10c2f0f0d9e319390397101aa0eb23c6bad9099190a35050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b5f6115e9612828565b805490915060ff600160401b82041615906001600160401b03165f8115801561160f5750825b90505f826001600160401b0316600114801561162a5750303b155b905081158015611638575080155b156116565760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561168057845460ff60401b1916600160401b1785555b6001600160a01b038b166116a7576040516314030c0360e11b815260040160405180910390fd5b6001600160a01b038a166116ce5760405163a91f6a8960e01b815260040160405180910390fd5b8815806116d9575087155b806116e2575086155b156117025760405163665c282b60e01b81525f60048201526024016107be565b856001600160801b03165f0361172b57604051632440a7dd60e01b815260040160405180910390fd5b6117348b612850565b61173c612861565b5f80546001600160a01b0319166001600160a01b038c1617905561176289888a89611c1d565b600880546001600160801b0319166001600160801b03881617905560405189907fac3566d46c25f65b48d269870da4b9349704c79de13ad49b115532834d7e7ed1905f90a283156117ed57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b611802611c6e565b606482111561182e5760405163384b869360e21b815260646004820152602481018390526044016107be565b60065461184e57604051632c1dfd4f60e11b815260040160405180910390fd5b5f61185885612869565b6002549091505f8061186a8787612a2b565b90925090505f8615611886576118816001886144d4565b611888565b5f5b90505f5b87811015611a8457368989838181106118a7576118a761415b565b90506020028101906118b991906144e7565b60018054919250838514915f916118d9916001600160401b031690614353565b90506001600160401b0381166118f2602085018561403d565b6001600160401b03161461193a578061190e602085018561403d565b604051635efa452960e11b81526001600160401b039283166004820152911660248201526044016107be565b5f61194a848b604001518b612cd6565b905061195884828c86612e4c565b600261196a604086016020870161450f565b600281111561197b5761197b6144fb565b036119925761198b84828d612eb4565b9850611a75565b5f6119a3604086016020870161450f565b60028111156119b4576119b46144fb565b036119ce576119c484828d612ffb565b909a509850611a75565b60016119e0604086016020870161450f565b60028111156119f1576119f16144fb565b03611a355761198b84828a8881518110611a0d57611a0d61415b565b60200260200101518a8981518110611a2757611a2761415b565b60200260200101518f6131a9565b611a45604085016020860161450f565b6002811115611a5657611a566144fb565b60405163b99607f960e01b815260ff90911660048201526024016107be565b5050505080600101905061188c565b50505050505050505050565b611a98611acd565b6001600160a01b038116611ac157604051631e4fbdf760e01b81525f60048201526024016107be565b611aca81612770565b50565b33611ad66115b2565b6001600160a01b0316146111c25760405163118cdaa760e01b81523360048201526024016107be565b5f5f5f85515f03611b255760405163665c282b60e01b81525f60048201526024016107be565b8451865114611b475760405163512509d360e11b815260040160405180910390fd5b5f805b8751811015611c01575f888281518110611b6657611b6661415b565b602002602001015190505f888381518110611b8357611b8361415b565b602002602001015190505f6001600160a01b0316826001600160a01b03161480611bab575080155b80611bc85750836001600160a01b0316826001600160a01b031611155b15611be95760405163665c282b60e01b8152600481018490526024016107be565b611bf38187614340565b955090925050600101611b4a565b5086519150611c1187878761340c565b93505093509350939050565b60408051608081018252848152602081018490529081018590526001600160801b039091166060909101819052600492909255600555600691909155600780546001600160801b0319169091179055565b5f516020614a5e5f395f51905f525460ff16156111c25760405163d93c066560e01b815260040160405180910390fd5b466001600160401b038116611cb9606084016040850161403d565b6001600160401b031614611d045780611cd8606084016040850161403d565b6040516332e3634d60e21b81526001600160401b039283166004820152911660248201526044016107be565b5050565b6001600160a01b038116611d3a57604051635f8b555b60e11b81526001600160a01b03821660048201526024016107be565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580611d9757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b15611dc057604051635f8b555b60e11b81526001600160a01b03821660048201526024016107be565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614158015611e3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15611aca57604051635f8b555b60e11b81526001600160a01b03821660048201526024016107be565b5f8135611e70604084016020850161403d565b611e80606085016040860161403d565b611e906080860160608701613f1b565b611ea060a0870160808801613fc9565b611eb060c0880160a0890161403d565b611ec060e0890160c08a01613fc9565b611ed16101008a0160e08b01613f1b565b611ee36101208b016101008c01613f1b565b60408051602081019a909a526001600160401b03988916908a015295871660608901526001600160801b0394851660808901526001600160a01b0393841660a08901529590911660c08701521660e085015291821661010084015216610120820152610140015b604051602081830303815290604052805190602001209050919050565b5f818152600a602052604090205460ff1615611aca57604051632910aca360e01b8152600481018290526024016107be565b5f7f28bf99522b0d2f26a76cdeda71578156383bbae91175ca503165cfdbbd1ff34a4630611fc687611e5d565b6040805160208101959095528401929092526001600160a01b0316606083015260808201526001600160801b0380851660a0830152831660c082015260e0015b6040516020818303038152906040528051906020012090505b9392505050565b5f5f5f5f612035878787613422565b9250925092506120458282613469565b509095945050505050565b604080516080810182525f808252602082018190529181018290526060810191909152604080516080810182526001600160401b03808516825260015416602082015290810161209e6110f3565b6001600160801b031681526020016120b4611479565b6001600160801b0316905292915050565b5f7f6bf7256f4c4f60df0bd918b509bf742c125b14ab72c967f949c0c3e504d4d62560014630898989896040516020016120ff919061452d565b6040516020818303038152906040528051906020012061211e8a613521565b60408051602081019a909a5260ff9098169789019790975260608801959095526001600160a01b03938416608088015260a08701929092529190911660c08501526001600160801b031660e0840152610100830152610120820152610140015b6040516020818303038152906040528051906020012090505b95945050505050565b81515f80546001600160401b03808416600160a01b0267ffffffffffffffff60a01b199092169190911782556003544392911690036122cf576003805467ffffffffffffffff19166001179055604080516080810182526001600160401b03838116825284166020820181905291810191909152606081016122225f86613533565b905260015f52600b602090815281517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf80549284015160408501516001600160401b03908116600160801b0267ffffffffffffffff60801b19928216600160401b026001600160801b031990961694909116939093179390931792909216179055606001517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d05550505050565b6003546001600160401b039081165f908152600b602052604090208054909183811691160361233657805467ffffffffffffffff60801b1916600160801b6001600160401b03851602178155600181015461232a9085613533565b60019091015550505050565b6003545f9061234f906001600160401b03166001614353565b6003805467ffffffffffffffff19166001600160401b0383811691909117909155604080516080808201835287841682528884166020808401829052838501919091528351918201845287548086168352600160401b8104861691830191909152600160801b9004909316918301919091526001850154606080840191909152929350918201906123e9906123e390613555565b88613533565b90526001600160401b039182165f908152600b60209081526040918290208351815492850151938501518616600160801b0267ffffffffffffffff60801b19948716600160401b026001600160801b031990941691909616179190911791909116929092178255606001516001909101555050505050565b5f7ff1cdefdf363279c2a6d861bb708536f5c8470b6fb59f43e01f67bb3f168e7b1f60014630898989896124948a613521565b60408051602081019a909a5260ff9098169789019790975260608801959095526001600160a01b03938416608088015291831660a08701529190911660c08501526001600160801b031660e08401526101008301526101208201526101400161217e565b5f80612506600660126144a7565b61251190600a6142fc565b61251b9084614321565b90506001600160801b038111156111ac57604051639940a77560e01b8152600481018290526024016107be565b6125506135ad565b5f516020614a5e5f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b5f7febf24d41f9ef23280fd74eb80f9ce85e35b83fb7cf6aa2c52a07c20f981978c660014630866125d787613521565b60408051602081019790975260ff9095169486019490945260608501929092526001600160a01b0316608084015260a083015260c082015260e0015b60405160208183030381529060405280519060200120905092915050565b5f8382146126525760405163512509d360e11b815260040160405180910390fd5b5f5b84811015612766575f86868381811061266f5761266f61415b565b90506020020160208101906126849190613fc9565b90505f8585848181106126995761269961415b565b60200291909101359150506001600160a01b0382166126ce57604051633bca2f5160e21b8152600481018490526024016107be565b805f036126ee57604051631f2a200560e01b815260040160405180910390fd5b6040516340c10f1960e01b81526001600160a01b038381166004830152602482018390528a16906340c10f19906044015f604051808303815f87803b158015612735575f5ffd5b505af1158015612747573d5f5f3e3d5ffd5b5050505080846127579190614340565b93505050806001019050612654565b5095945050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6127e8611c6e565b5f516020614a5e5f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612589565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006111ac565b6128586135dc565b611aca81613601565b6111c26135dc565b6128986040518060a0016040528060608152602001606081526020015f81526020015f81526020015f81525090565b5f80806129296128a88680614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506128e6925050506020880188614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250506007546001600160801b03169150611aff9050565b9250925092506004600201548314158061294557506004548214155b8061295257506005548114155b1561297e57600654604051633b21437560e21b81526004810191909152602481018490526044016107be565b6040805160a08101909152806129948780614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050908252506020908101906129d990880188614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050908252506020810194909452604084019290925260609092019190915292915050565b606080826001600160401b03811115612a4657612a46614147565b604051908082528060200260200182016040528015612a6f578160200160208202803683370190505b509150826001600160401b03811115612a8a57612a8a614147565b604051908082528060200260200182016040528015612ab3578160200160208202803683370190505b5090508215612ccf575f836001600160401b03811115612ad557612ad5614147565b604051908082528060200260200182016040528015612afe578160200160208202803683370190505b5090505f8080612b0f6001886144d4565b90505f5b87811015612cc9575f898983818110612b2e57612b2e61415b565b9050602002810190612b4091906144e7565b612b5190604081019060200161450f565b90506001816002811115612b6757612b676144fb565b03612ba65781868663ffffffff1681518110612b8557612b8561415b565b63ffffffff90921660209283029190910190910152612ba38561453f565b94505b5f80826002811115612bba57612bba6144fb565b1480612bc557508383145b905080612bd3575050612cc1565b8a8a84818110612be557612be561415b565b9050602002810190612bf791906144e7565b612c05906060810190614102565b612c10915086614563565b94508563ffffffff165f03612c26575050612cc1565b5f5b8663ffffffff16811015612cb7575f888281518110612c4957612c4961415b565b602002602001015163ffffffff169050878b8281518110612c6c57612c6c61415b565b602002602001019063ffffffff16908163ffffffff1681525050868a8281518110612c9957612c9961415b565b63ffffffff9092166020928302919091019091015250600101612c28565b505f95505f945050505b600101612b13565b50505050505b9250929050565b5f6001612ce9604086016020870161450f565b6002811115612cfa57612cfa6144fb565b03612d49575f612d0d604086018661418d565b810190612d1a91906145d7565b9050612d41612d2c602087018761403d565b85835f01518460200151856040015188613609565b91505061201f565b6002612d5b604086016020870161450f565b6002811115612d6c57612d6c6144fb565b03612de1575f612d7f604086018661418d565b810190612d8c9190614642565b9050612d41612d9e602087018761403d565b825186906002906001600160a01b03168551604080516001600160a01b039092166020830152016040516020818303038152906040528051906020012088613639565b5f612df2604086016020870161450f565b6002811115612e0357612e036144fb565b03611a35575f612e16604086018661418d565b810190612e23919061470d565b9050612d41612e35602087018761403d565b8251805160209182015191850151889290886136ec565b5f612e5d604086016020870161450f565b6002811115612e6e57612e6e6144fb565b14158015612e7a575080155b612eae57612eae83612e8f6060870187614102565b612e9891614843565b845160208601516060870151608088015161371f565b50505050565b5f80612ec3604086018661418d565b810190612ed09190614642565b80519091506001600160a01b0316612efb5760405163611b32ab60e01b815260040160405180910390fd5b80516001600160a01b039081165f9081526009602090815260408083208054865190951684529083209290925590916001600160801b0380821692600160801b9092041690612f4c9089018961403d565b6001805467ffffffffffffffff19166001600160401b0392831617815560028990555f80549092612f8b92610e9a92600160a01b900490911690614353565b9050612fa281610ed3875f015186868d8d88613764565b845f01516001600160a01b03167f0b4ee788c9bfc3c405fb19e3f6137bf14a218c0dbc53c13a6ed07a225d360ebc84848b8b86604051612fe6959493929190614903565b60405180910390a25095979650505050505050565b61302a6040518060a0016040528060608152602001606081526020015f81526020015f81526020015f81525090565b5f80613039604087018761418d565b810190613046919061470d565b905080602001516001600160801b03165f0361307557604051632440a7dd60e01b815260040160405180910390fd5b5f5f5f613094845f01515f0151855f0151602001518660200151611aff565b8093508194508295505050506130b08383838760200151611c1d565b602084810151600880546001600160801b0319166001600160801b039092169190911790556130e1908a018a61403d565b6001805467ffffffffffffffff19166001600160401b0392831617815560028a90555f8054909261312092610e9a92600160a01b900490911690614353565b905061313281610ed3868c8c86613802565b7fee5f0b6612e124988e865e18a4c4b0ec70d2f263708bb1e17f6de867fb1fe1c2848a8a846040516131679493929190614937565b60405180910390a1506040805160a08101825285515181529451602090810151908601528401929092526060830152608082015291508390505b935093915050565b5f806131b8604088018861418d565b8101906131c591906145d7565b60408101519091506001600160a01b03166131f35760405163611b32ab60e01b815260040160405180910390fd5b80516001600160801b0316158015613216575060208101516001600160801b0316155b15613245576040808201519051632edcd91760e21b81526001600160a01b0390911660048201526024016107be565b63ffffffff8516158061325c575063ffffffff8416155b1561328b576040808201519051632edcd91760e21b81526001600160a01b0390911660048201526024016107be565b6040808201516001600160a01b03165f90815260096020522080546001600160801b03161515806132cc57508054600160801b90046001600160801b031615155b156132fb57604080830151905163cb96603760e01b81526001600160a01b0390911660048201526024016107be565b60408051808201825283516001600160801b0390811682526020808601518216818401908152868501516001600160a01b03165f9081526009835294909420925193518216600160801b029390911692909217905561335c9089018961403d565b6001805467ffffffffffffffff19166001600160401b0392831617815560028990555f8054909261339b92610e9a92600160a01b900490911690614353565b90506133bc81610ed38560400151865f015187602001518c8c8f8d8a61389e565b82604001516001600160a01b03167f9023f1e3e253ad361005d72868d790c37ca6f53a03d522ebc93dca42154e15bf845f015185602001518a8a8d8b88604051612fe69796959493929190614959565b5f838383604051602001612006939291906149a1565b5f80806041849003613456578435602086013560408701355f1a61344889828585613973565b955095509550505050613460565b505f915060029050825b93509350939050565b5f82600381111561347c5761347c6144fb565b03613485575050565b6001826003811115613499576134996144fb565b036134b75760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156134cb576134cb6144fb565b036134ec5760405163fce698f760e01b8152600481018290526024016107be565b6003826003811115613500576135006144fb565b03611d04576040516335e2f38360e21b8152600481018290526024016107be565b5f81604051602001611f4a9190614a37565b6040805160016020820152908101839052606081018290525f90608001612613565b5f6001825f0151836020015184604001518560600151604051602001611f4a95949392919060ff9590951685526001600160401b03938416602086015291831660408501529091166060830152608082015260a00190565b5f516020614a5e5f395f51905f525460ff166111c257604051638dfc202b60e01b815260040160405180910390fd5b6135e4613a3b565b6111c257604051631afcd79f60e31b815260040160405180910390fd5b611a986135dc565b5f61362c878760016001600160a01b0387166136268a8a8a613a54565b87613639565b90505b9695505050505050565b5f7f41936771719a172aa959076ca6aafb826eaf332dd0c9e7860901c398ef42da0546308989896002811115613671576136716144fb565b6040805160208101979097528601949094526001600160a01b0390921660608501526001600160401b0316608084015260a083015260ff1660c082015260e0810185905261010081018490526101208101839052610140015b6040516020818303038152906040528051906020012090509695505050505050565b5f5f6136f986868661340c565b905061371388885f8461370d8b8b8b613ab0565b88613639565b98975050505050505050565b5f5f61372d88888888613b1b565b9150915061373d82828686613cb1565b61375a5760405163079842ab60e41b815260040160405180910390fd5b5050505050505050565b5f7f8b2b1e5653cf18a7cb85828eebc4ac1e6c7093911ffb66bda4277640f68267f6600146308a8a8a8a8a6137988b613521565b60408051602081019b909b5260ff909916988a019890985260608901969096526001600160a01b0394851660808901529390921660a08701526001600160801b0390811660c08701521660e0850152610100840152610120830152610140820152610160016136ca565b5f7fd6c5d8b75d4c96100cc12b870b8e28bb0b07402bf67c8141d16c2c673af8bb5e6001463088888861383489613521565b60408051602081019990995260ff9097169688019690965260608701949094526001600160a01b03909216608086015260a085015260c084015260e0830152610100820152610120016040516020818303038152906040528051906020012090505b949350505050565b5f7ff81bcebf1f8da13ff1db236962ed82c8762b74f56aeb5a1bd1677ef0db43dbbe600146308c8c8c8c8c8c8c6138d48d613521565b60408051602081019d909d5260ff909b169a8c019a909a5260608b01989098526001600160a01b0396871660808b01529590941660a08901526001600160801b0392831660c0890152911660e087015263ffffffff908116610100870152166101208501526101408401526101608301526101808201526101a00160405160208183030381529060405280519060200120905098975050505050505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156139ac57505f91506003905082613a31565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156139fd573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116613a2857505f925060019150829050613a31565b92505f91508190505b9450945094915050565b5f613a44612828565b54600160401b900460ff16919050565b5f7f1cd7f89e34f6154d6f8387a08ffafc689e347b8d5809913b07c58a42995dff664630613a83878787613d12565b6040805160208101959095528401929092526001600160a01b03166060830152608082015260a001612006565b5f7f82ce6440aa5dde11f3613892819b630b62342bacf93e16a292d5c8783aafa4c34630613adf87878761340c565b6040805160208101959095528401929092526001600160a01b0316606083015260808201526001600160801b03831660a082015260c001612006565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c859052603c8120819081905f805b8851811015613ca4575f613b7d848b8481518110613b7057613b7061415b565b6020026020010151613d48565b9050846001600160a01b0316816001600160a01b031611613bb1576040516309cf9e4960e11b815260040160405180910390fd5b885183108015613beb5750806001600160a01b0316898481518110613bd857613bd861415b565b60200260200101516001600160a01b0316105b15613c0057613bf983614a45565b9250613bb1565b8851831480613c3a5750806001600160a01b0316898481518110613c2657613c2661415b565b60200260200101516001600160a01b031614155b15613c5b5760405163665c282b60e01b8152600481018390526024016107be565b613c6487614a45565b9650878381518110613c7857613c7861415b565b602002602001015186613c8b9190614340565b9550935083613c9983614a45565b925050600101613b50565b5050505094509492505050565b5f80613cbd86846144d4565b9050613cca84605a61430a565b613cd586606461430a565b10613ce4576001915050613896565b6002811115801561362f5750613cfb84605061430a565b613d0686606461430a565b10159695505050505050565b604080516001600160801b0380861660208301528416918101919091526001600160a01b03821660608201525f90608001612006565b5f5f5f5f613d568686613d70565b925092509250613d668282613469565b5090949350505050565b5f5f5f8351604103613da7576020840151604085015160608601515f1a613d9988828585613973565b955095509550505050613db2565b505081515f91506002905b9250925092565b5f60408284031215613dc9575f5ffd5b50919050565b80356001600160801b0381168114613de5575f5ffd5b919050565b5f5f60408385031215613dfb575f5ffd5b82356001600160401b03811115613e10575f5ffd5b613e1c85828601613db9565b925050613e2b60208401613dcf565b90509250929050565b5f6101208284031215613dc9575f5ffd5b5f5f6101408385031215613e57575f5ffd5b613e618484613e34565b91506101208301356001600160401b03811115613e7c575f5ffd5b830160208186031215613e8d575f5ffd5b809150509250929050565b80356001600160a01b0381168114613de5575f5ffd5b5f5f5f5f5f5f5f60e0888a031215613ec4575f5ffd5b613ecd88613e98565b9650613edb60208901613dcf565b95506040880135945060608801359350608088013560ff81168114613efe575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f60208284031215613f2b575f5ffd5b61201f82613dcf565b5f6101208284031215613f45575f5ffd5b61201f8383613e34565b5f5f60408385031215613f60575f5ffd5b82356001600160401b03811115613f75575f5ffd5b613f8185828601613db9565b92505060208301356001600160401b03811115613f9c575f5ffd5b613fa885828601613db9565b9150509250929050565b5f60208284031215613fc2575f5ffd5b5035919050565b5f60208284031215613fd9575f5ffd5b61201f82613e98565b5f5f5f5f5f5f60c08789031215613ff7575f5ffd5b61400087613e98565b955061400e60208801613e98565b945060408701359350606087013592506080870135915061403160a08801613dcf565b90509295509295509295565b5f6020828403121561404d575f5ffd5b81356001600160401b038116811461201f575f5ffd5b5f5f5f5f60608587031215614076575f5ffd5b84356001600160401b0381111561408b575f5ffd5b61409787828801613db9565b94505060208501356001600160401b038111156140b2575f5ffd5b8501601f810187136140c2575f5ffd5b80356001600160401b038111156140d7575f5ffd5b8760208260051b84010111156140eb575f5ffd5b949760209190910196509394604001359392505050565b5f5f8335601e19843603018112614117575f5ffd5b8301803591506001600160401b03821115614130575f5ffd5b6020019150600581901b3603821315612ccf575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614183575f5ffd5b9190910192915050565b5f5f8335601e198436030181126141a2575f5ffd5b8301803591506001600160401b038211156141bb575f5ffd5b602001915036819003821315612ccf575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160801b0382811682821603908111156111ac576111ac6141cf565b6001600160801b0381811683821601908111156111ac576111ac6141cf565b6001815b60018411156131a157808504811115614240576142406141cf565b600184161561424e57908102905b60019390931c928002614225565b5f8261426a575060016111ac565b8161427657505f6111ac565b816001811461428c5760028114614296576142b2565b60019150506111ac565b60ff8411156142a7576142a76141cf565b50506001821b6111ac565b5060208310610133831016604e8410600b84101617156142d5575081810a6111ac565b6142e15f198484614221565b805f19048211156142f4576142f46141cf565b029392505050565b5f61201f60ff84168361425c565b80820281158282048414176111ac576111ac6141cf565b5f8261433b57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156111ac576111ac6141cf565b6001600160401b0381811683821601908111156111ac576111ac6141cf565b5f8151808452602084019350602083015f5b828110156143d057815180516001600160a01b031687526020808201516001600160801b03908116828a0152604092830151169188019190915260609096019590910190600101614384565b5093949350505050565b6001600160401b0381511682526001600160401b0360208201511660208301526001600160801b0360408201511660408301526001600160801b0360608201511660608301525050565b8581526001600160a01b03851660208201526001600160801b0384166040820152610100606082018190525f9061445d90830185614372565b905061362f60808301846143da565b6001600160801b03841681526020810183905260c0810161389660408301846143da565b5f602082840312156144a0575f5ffd5b5051919050565b60ff82811682821603908111156111ac576111ac6141cf565b82815260a0810161201f60208301846143da565b818103818111156111ac576111ac6141cf565b5f8235607e19833603018112614183575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b5f6020828403121561451f575f5ffd5b81356003811061201f575f5ffd5b602081525f61201f6020830184614372565b5f63ffffffff821663ffffffff810361455a5761455a6141cf565b60010192915050565b63ffffffff81811683821601908111156111ac576111ac6141cf565b604080519081016001600160401b03811182821017156145a1576145a1614147565b60405290565b604051601f8201601f191681016001600160401b03811182821017156145cf576145cf614147565b604052919050565b5f60608284031280156145e8575f5ffd5b50604051606081016001600160401b038111828210171561460b5761460b614147565b60405261461783613dcf565b815261462560208401613dcf565b602082015261463660408401613e98565b60408201529392505050565b5f6020828403128015614653575f5ffd5b50604051602081016001600160401b038111828210171561467657614676614147565b60405261468283613e98565b81529392505050565b5f6001600160401b038211156146a3576146a3614147565b5060051b60200190565b5f82601f8301126146bc575f5ffd5b81356146cf6146ca8261468b565b6145a7565b8082825260208201915060208360051b8601019250858311156146f0575f5ffd5b602085015b838110156127665780358352602092830192016146f5565b5f6020828403121561471d575f5ffd5b81356001600160401b03811115614732575f5ffd5b820160408185031215614743575f5ffd5b61474b61457f565b81356001600160401b03811115614760575f5ffd5b820160408187031215614771575f5ffd5b61477961457f565b81356001600160401b0381111561478e575f5ffd5b8201601f8101881361479e575f5ffd5b80356147ac6146ca8261468b565b8082825260208201915060208360051b85010192508a8311156147cd575f5ffd5b6020840193505b828410156147f6576147e584613e98565b8252602093840193909101906147d4565b845250505060208201356001600160401b03811115614813575f5ffd5b61481f888285016146ad565b602083015250808352505061483660208301613dcf565b6020820152949350505050565b5f6148506146ca8461468b565b8381526020810190600585901b84013681111561486b575f5ffd5b845b818110156120455780356001600160401b0381111561488a575f5ffd5b860136601f82011261489a575f5ffd5b80356001600160401b038111156148b3576148b3614147565b6148c6601f8201601f19166020016145a7565b8181523660208385010111156148da575f5ffd5b816020840160208301375f6020838301015280875250505060208401935060208101905061486d565b6001600160801b038681168252851660208201526040810184905260608101839052610100810161362f60808301846143da565b848152602081018490526040810183905260e0810161219760608301846143da565b6001600160801b0388811682528716602082015263ffffffff8681166040830152851660608201526080810184905260a08101839052610140810161371360c08301846143da565b606080825284519082018190525f9060208601906080840190835b818110156149e35783516001600160a01b03168352602093840193909201916001016149bc565b5050838103602080860191909152865180835291810192508601905f5b81811015614a1e578251845260209384019390920191600101614a00565b5050506001600160801b03841660408401529050613896565b608081016111ac82846143da565b5f60018201614a5657614a566141cf565b506001019056fecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a264697066735822122024a774fd8e8bc6d7f1582a18acbcf68e3fdb1554db5ab94ea537d713ba6d6b0664736f6c63430008230033\",\n \"deployedBytecode\": \"0x608060405234801561000f575f5ffd5b506004361061021e575f3560e01c80636e2c77691161012a5780638da5cb5b116100b4578063d68d631111610079578063d68d631114610529578063e52580a61461053c578063ecec10a4146105b9578063f1982c67146105cc578063f2fde38b146105d3575f5ffd5b80638da5cb5b146104aa578063905d031f146104b2578063a3eb896114610505578063beabb5911461050e578063c017c90214610516575f5ffd5b80637c9afa67116100fa5780637c9afa671461043e57806380a126211461046057806383a4d591146104685780638456cb591461048f5780638a0dac4a14610497575f5ffd5b80636e2c7769146104085780636e888c461461041b578063715018a61461042e57806378d350e014610436575f5ffd5b80632ef29f3b116101ab578063452a93201161017b578063452a9320146103c757806359b23872146103d95780635b7f415c146103e15780635c975abb146103e95780635cadf6e814610400575f5ffd5b80632ef29f3b1461036757806331677980146103885780633f4ba83a146103ac578063422ad8f6146103b4575f5ffd5b806318a8f1f0116101f157806318a8f1f0146102945780631a5d93fd146102a75780631c1eeae1146102ef5780631e07f89e146103205780632ceeddf51461035f575f5ffd5b8063014c72f61461022257806309af0e3c14610237578063138f87811461026757806316dd172d1461027a575b5f5ffd5b610235610230366004613dea565b6105e6565b005b60085461024a906001600160801b031681565b6040516001600160801b0390911681526020015b60405180910390f35b610235610275366004613e45565b61071d565b610282600181565b60405160ff909116815260200161025e565b6102356102a2366004613eae565b610f41565b6004546005546006546007546102c6939291906001600160801b031684565b604080519485526020850193909352918301526001600160801b0316606082015260800161025e565b5f5461030890600160a01b90046001600160401b031681565b6040516001600160401b03909116815260200161025e565b6103477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025e565b61024a6110f3565b61037a610375366004613f1b565b611181565b60405190815260200161025e565b60035461039c90600160401b900460ff1681565b604051901515815260200161025e565b6102356111b2565b6102356103c2366004613f34565b6111c4565b5f54610347906001600160a01b031681565b61037a61131f565b610282601281565b5f516020614a5e5f395f51905f525460ff1661039c565b61037a601981565b600154610308906001600160401b031681565b610235610429366004613f4f565b611339565b610235611468565b61024a611479565b61039c61044c366004613fb2565b600a6020525f908152604090205460ff1681565b61037a606481565b6103477f000000000000000000000000000000000000000000000000000000000000000081565b6102356114d9565b6102356104a5366004613fc9565b611534565b6103476115b2565b6104e56104c0366004613fc9565b60096020525f90815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b0393841681529290911660208301520161025e565b61037a60025481565b610282600681565b610235610524366004613fe2565b6115e0565b600354610308906001600160401b031681565b61058461054a36600461403d565b600b6020525f9081526040902080546001909101546001600160401b0380831692600160401b8104821692600160801b9091049091169084565b60405161025e94939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b6102356105c7366004614063565b6117fa565b600b61037a565b6102356105e1366004613fc9565b611a90565b6105ee611acd565b806001600160801b03165f0361061757604051632440a7dd60e01b815260040160405180910390fd5b5f808061069d6106278680614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250610665925050506020880188614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250899250611aff915050565b6040805160808101825260045481526005546020820152600654918101919091526007546001600160801b0316606082015292955090935091506106e384848488611c1d565b8381604001517f33e53e90d61fdc868629a6234670f92c4445196f3f98ebd71935bbc76c7d915360405160405180910390a3505050505050565b610725611c6e565b61072e82611c9e565b61074661074160e0840160c08501613fc9565b611d08565b610757610100830160e08401613f1b565b6001600160801b03165f0361077f57604051631f2a200560e01b815260040160405180910390fd5b601961078b8280614102565b905011156107c757601961079f8280614102565b60405163e126b42160e01b815260048101939093526024830152506044015b60405180910390fd5b6107d760c0830160a0840161403d565b6001600160401b031643111561082357436107f860c0840160a0850161403d565b604051635728c7dd60e11b815260048101929092526001600160401b031660248201526044016107be565b5f61082d83611e5d565b905061083881611f67565b6108486080840160608501613f1b565b6001600160801b03165f0361087057604051632440a7dd60e01b815260040160405180910390fd5b6008546001600160801b03168061088d6080860160608701613f1b565b6001600160801b031611156108d957806108ad6080860160608701613f1b565b6040516343082d3360e01b81526001600160801b039283166004820152911660248201526044016107be565b5f8080806108e78780614102565b90506001600160401b0381111561090057610900614147565b60405190808252806020026020018201604052801561094957816020015b604080516060810182525f80825260208083018290529282015282525f1990920191018161091e5790505b5090505f5b6109588880614102565b9050811015610c25573661096c8980614102565b8381811061097c5761097c61415b565b905060200281019061098e919061416f565b90505f610a016109ef6109bd8d6109a86020870187613f1b565b6109b86040880160208901613f1b565b611f99565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b6109fc604085018561418d565b612026565b9050846001600160a01b0316816001600160a01b031611610a35576040516309cf9e4960e11b815260040160405180910390fd5b6001600160a01b0381165f90815260096020908152604090912090610a5c90840184613f1b565b81546001600160801b0391821691161080610a9c5750610a826040840160208501613f1b565b81546001600160801b03918216600160801b909104909116105b15610ac5576040516364fc3cd160e11b81526001600160a01b03831660048201526024016107be565b610ad26020840184613f1b565b815482905f90610aec9084906001600160801b03166141e3565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550826020016020810190610b239190613f1b565b81548290601090610b45908490600160801b90046001600160801b03166141e3565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550825f016020810190610b7b9190613f1b565b610b859089614202565b9750610b976040840160208501613f1b565b610ba19088614202565b96506040518060600160405280836001600160a01b03168152602001845f016020810190610bcf9190613f1b565b6001600160801b03168152602001846020016020810190610bf09190613f1b565b6001600160801b0316815250858581518110610c0e57610c0e61415b565b60209081029190910101525093505060010161094e565b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610c6060e08a0160c08b01613fc9565b6001600160a01b031603610d2e575f610c7b6006600a6142fc565b610c8b60808b0160608c01613f1b565b6001600160801b0316856001600160801b0316610ca8919061430a565b610cb29190614321565b90505f610cc8826001600160801b038816614340565b9050610cdb6101008b0160e08c01613f1b565b6001600160801b0316811015610d275780610cfd6101008c0160e08d01613f1b565b60405162f9825560e61b815260048101929092526001600160801b031660248201526044016107be565b5050610dbd565b6001600160801b03841615610d5657604051630994a0f360e11b815260040160405180910390fd5b610d67610100890160e08a01613f1b565b6001600160801b0316836001600160801b03161015610dbd5782610d926101008a0160e08b01613f1b565b60405162f9825560e61b81526001600160801b039283166004820152911660248201526044016107be565b610ddb865f908152600a60205260409020805460ff19166001179055565b610deb60e0890160c08a01613fc9565b6001600160a01b03166340c10f19610e0960a08b0160808c01613fc9565b610e1d6103756101008d0160e08e01613f1b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015610e60575f5ffd5b505af1158015610e72573d5f5f3e3d5ffd5b50505f8054909250610e9f9150610e9a90600160a01b90046001600160401b03166001614353565b612050565b9050610ed881610ed389610eb960e08e0160c08f01613fc9565b8d60e0016020810190610ecc9190613f1b565b87876120c5565b6121a0565b7f64d79900ed82270f744ae62db527f4e328e336d8b51e77bc72601391fe779d0687610f0a60e08c0160c08d01613fc9565b610f1b6101008d0160e08e01613f1b565b8585604051610f2e959493929190614424565b60405180910390a1505050505050505050565b610f49611c6e565b610f5287611d08565b856001600160801b03165f03610f7b57604051631f2a200560e01b815260040160405180910390fd5b5f610f8587611181565b60405163d505accf60e01b8152336004820152306024820152604481018290526064810187905260ff8616608482015260a4810185905260c481018490529091506001600160a01b0389169063d505accf9060e4015f604051808303815f87803b158015610ff1575f5ffd5b505af1158015611003573d5f5f3e3d5ffd5b505060405163079cc67960e41b8152336004820152602481018490526001600160a01b038b1692506379cc679091506044015f604051808303815f87803b15801561104c575f5ffd5b505af115801561105e573d5f5f3e3d5ffd5b50505f80549092506110869150610e9a90600160a01b90046001600160401b03166001614353565b905061109981610ed3338c8c8c87612461565b886001600160a01b0316336001600160a01b03167f3ab970a848f33363427e47cfbd7a627af0c6e72757f150137e38cef3cee24d938a8a856040516110e09392919061446c565b60405180910390a3505050505050505050565b5f61117c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611153573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111779190614490565b6124f8565b905090565b5f61118e600660126144a7565b61119990600a6142fc565b6111ac906001600160801b03841661430a565b92915050565b6111ba611acd565b6111c2612548565b565b6111cc611c6e565b6111d581611c9e565b6111e861074160e0830160c08401613fc9565b6111f9610100820160e08301613f1b565b6001600160801b03165f0361122157604051631f2a200560e01b815260040160405180910390fd5b61123160c0820160a0830161403d565b6001600160401b0316431161127c574361125160c0830160a0840161403d565b6040516374276dcf60e11b815260048101929092526001600160401b031660248201526044016107be565b5f61128682611e5d565b905061129181611f67565b6112af815f908152600a60205260409020805460ff19166001179055565b5f80546112d190610e9a90600160a01b90046001600160401b03166001614353565b90506112e181610ed384846125a7565b7f3cb8789e9bf6f532eec2bc8ffee9b622fc0d6e6daefb7fb6bb2e2f7b2d62e45282826040516113129291906144c0565b60405180910390a1505050565b61132b600660126144a7565b61133690600a6142fc565b81565b611341611acd565b611349611c6e565b600354600160401b900460ff161561137457604051633dbff3b560e01b815260040160405180910390fd5b5f6113b57f00000000000000000000000000000000000000000000000000000000000000006113a38580614102565b6113b06020880188614102565b612631565b90505f6113e67f00000000000000000000000000000000000000000000000000000000000000006113a38580614102565b6003805460ff60401b1916600160401b17905590507fc255ddc45163282f24909556f7475ab4ec8eb1d51763b25a4560cee9f43d06456114268580614102565b9050836114338680614102565b60405161145a94939250869093845260208401929092526040830152606082015260800190565b60405180910390a150505050565b611470611acd565b6111c25f612770565b5f61117c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611153573d5f5f3e3d5ffd5b5f546001600160a01b0316331480159061150c57506114f66115b2565b6001600160a01b0316336001600160a01b031614155b1561152c5760405163354de03160e21b81523360048201526024016107be565b6111c26127e0565b61153c611acd565b6001600160a01b0381166115635760405163a91f6a8960e01b815260040160405180910390fd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f064d28d3d3071c5cbc271a261c10c2f0f0d9e319390397101aa0eb23c6bad9099190a35050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b5f6115e9612828565b805490915060ff600160401b82041615906001600160401b03165f8115801561160f5750825b90505f826001600160401b0316600114801561162a5750303b155b905081158015611638575080155b156116565760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561168057845460ff60401b1916600160401b1785555b6001600160a01b038b166116a7576040516314030c0360e11b815260040160405180910390fd5b6001600160a01b038a166116ce5760405163a91f6a8960e01b815260040160405180910390fd5b8815806116d9575087155b806116e2575086155b156117025760405163665c282b60e01b81525f60048201526024016107be565b856001600160801b03165f0361172b57604051632440a7dd60e01b815260040160405180910390fd5b6117348b612850565b61173c612861565b5f80546001600160a01b0319166001600160a01b038c1617905561176289888a89611c1d565b600880546001600160801b0319166001600160801b03881617905560405189907fac3566d46c25f65b48d269870da4b9349704c79de13ad49b115532834d7e7ed1905f90a283156117ed57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b611802611c6e565b606482111561182e5760405163384b869360e21b815260646004820152602481018390526044016107be565b60065461184e57604051632c1dfd4f60e11b815260040160405180910390fd5b5f61185885612869565b6002549091505f8061186a8787612a2b565b90925090505f8615611886576118816001886144d4565b611888565b5f5b90505f5b87811015611a8457368989838181106118a7576118a761415b565b90506020028101906118b991906144e7565b60018054919250838514915f916118d9916001600160401b031690614353565b90506001600160401b0381166118f2602085018561403d565b6001600160401b03161461193a578061190e602085018561403d565b604051635efa452960e11b81526001600160401b039283166004820152911660248201526044016107be565b5f61194a848b604001518b612cd6565b905061195884828c86612e4c565b600261196a604086016020870161450f565b600281111561197b5761197b6144fb565b036119925761198b84828d612eb4565b9850611a75565b5f6119a3604086016020870161450f565b60028111156119b4576119b46144fb565b036119ce576119c484828d612ffb565b909a509850611a75565b60016119e0604086016020870161450f565b60028111156119f1576119f16144fb565b03611a355761198b84828a8881518110611a0d57611a0d61415b565b60200260200101518a8981518110611a2757611a2761415b565b60200260200101518f6131a9565b611a45604085016020860161450f565b6002811115611a5657611a566144fb565b60405163b99607f960e01b815260ff90911660048201526024016107be565b5050505080600101905061188c565b50505050505050505050565b611a98611acd565b6001600160a01b038116611ac157604051631e4fbdf760e01b81525f60048201526024016107be565b611aca81612770565b50565b33611ad66115b2565b6001600160a01b0316146111c25760405163118cdaa760e01b81523360048201526024016107be565b5f5f5f85515f03611b255760405163665c282b60e01b81525f60048201526024016107be565b8451865114611b475760405163512509d360e11b815260040160405180910390fd5b5f805b8751811015611c01575f888281518110611b6657611b6661415b565b602002602001015190505f888381518110611b8357611b8361415b565b602002602001015190505f6001600160a01b0316826001600160a01b03161480611bab575080155b80611bc85750836001600160a01b0316826001600160a01b031611155b15611be95760405163665c282b60e01b8152600481018490526024016107be565b611bf38187614340565b955090925050600101611b4a565b5086519150611c1187878761340c565b93505093509350939050565b60408051608081018252848152602081018490529081018590526001600160801b039091166060909101819052600492909255600555600691909155600780546001600160801b0319169091179055565b5f516020614a5e5f395f51905f525460ff16156111c25760405163d93c066560e01b815260040160405180910390fd5b466001600160401b038116611cb9606084016040850161403d565b6001600160401b031614611d045780611cd8606084016040850161403d565b6040516332e3634d60e21b81526001600160401b039283166004820152911660248201526044016107be565b5050565b6001600160a01b038116611d3a57604051635f8b555b60e11b81526001600160a01b03821660048201526024016107be565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580611d9757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b15611dc057604051635f8b555b60e11b81526001600160a01b03821660048201526024016107be565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614158015611e3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15611aca57604051635f8b555b60e11b81526001600160a01b03821660048201526024016107be565b5f8135611e70604084016020850161403d565b611e80606085016040860161403d565b611e906080860160608701613f1b565b611ea060a0870160808801613fc9565b611eb060c0880160a0890161403d565b611ec060e0890160c08a01613fc9565b611ed16101008a0160e08b01613f1b565b611ee36101208b016101008c01613f1b565b60408051602081019a909a526001600160401b03988916908a015295871660608901526001600160801b0394851660808901526001600160a01b0393841660a08901529590911660c08701521660e085015291821661010084015216610120820152610140015b604051602081830303815290604052805190602001209050919050565b5f818152600a602052604090205460ff1615611aca57604051632910aca360e01b8152600481018290526024016107be565b5f7f28bf99522b0d2f26a76cdeda71578156383bbae91175ca503165cfdbbd1ff34a4630611fc687611e5d565b6040805160208101959095528401929092526001600160a01b0316606083015260808201526001600160801b0380851660a0830152831660c082015260e0015b6040516020818303038152906040528051906020012090505b9392505050565b5f5f5f5f612035878787613422565b9250925092506120458282613469565b509095945050505050565b604080516080810182525f808252602082018190529181018290526060810191909152604080516080810182526001600160401b03808516825260015416602082015290810161209e6110f3565b6001600160801b031681526020016120b4611479565b6001600160801b0316905292915050565b5f7f6bf7256f4c4f60df0bd918b509bf742c125b14ab72c967f949c0c3e504d4d62560014630898989896040516020016120ff919061452d565b6040516020818303038152906040528051906020012061211e8a613521565b60408051602081019a909a5260ff9098169789019790975260608801959095526001600160a01b03938416608088015260a08701929092529190911660c08501526001600160801b031660e0840152610100830152610120820152610140015b6040516020818303038152906040528051906020012090505b95945050505050565b81515f80546001600160401b03808416600160a01b0267ffffffffffffffff60a01b199092169190911782556003544392911690036122cf576003805467ffffffffffffffff19166001179055604080516080810182526001600160401b03838116825284166020820181905291810191909152606081016122225f86613533565b905260015f52600b602090815281517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf80549284015160408501516001600160401b03908116600160801b0267ffffffffffffffff60801b19928216600160401b026001600160801b031990961694909116939093179390931792909216179055606001517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d05550505050565b6003546001600160401b039081165f908152600b602052604090208054909183811691160361233657805467ffffffffffffffff60801b1916600160801b6001600160401b03851602178155600181015461232a9085613533565b60019091015550505050565b6003545f9061234f906001600160401b03166001614353565b6003805467ffffffffffffffff19166001600160401b0383811691909117909155604080516080808201835287841682528884166020808401829052838501919091528351918201845287548086168352600160401b8104861691830191909152600160801b9004909316918301919091526001850154606080840191909152929350918201906123e9906123e390613555565b88613533565b90526001600160401b039182165f908152600b60209081526040918290208351815492850151938501518616600160801b0267ffffffffffffffff60801b19948716600160401b026001600160801b031990941691909616179190911791909116929092178255606001516001909101555050505050565b5f7ff1cdefdf363279c2a6d861bb708536f5c8470b6fb59f43e01f67bb3f168e7b1f60014630898989896124948a613521565b60408051602081019a909a5260ff9098169789019790975260608801959095526001600160a01b03938416608088015291831660a08701529190911660c08501526001600160801b031660e08401526101008301526101208201526101400161217e565b5f80612506600660126144a7565b61251190600a6142fc565b61251b9084614321565b90506001600160801b038111156111ac57604051639940a77560e01b8152600481018290526024016107be565b6125506135ad565b5f516020614a5e5f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b5f7febf24d41f9ef23280fd74eb80f9ce85e35b83fb7cf6aa2c52a07c20f981978c660014630866125d787613521565b60408051602081019790975260ff9095169486019490945260608501929092526001600160a01b0316608084015260a083015260c082015260e0015b60405160208183030381529060405280519060200120905092915050565b5f8382146126525760405163512509d360e11b815260040160405180910390fd5b5f5b84811015612766575f86868381811061266f5761266f61415b565b90506020020160208101906126849190613fc9565b90505f8585848181106126995761269961415b565b60200291909101359150506001600160a01b0382166126ce57604051633bca2f5160e21b8152600481018490526024016107be565b805f036126ee57604051631f2a200560e01b815260040160405180910390fd5b6040516340c10f1960e01b81526001600160a01b038381166004830152602482018390528a16906340c10f19906044015f604051808303815f87803b158015612735575f5ffd5b505af1158015612747573d5f5f3e3d5ffd5b5050505080846127579190614340565b93505050806001019050612654565b5095945050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6127e8611c6e565b5f516020614a5e5f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612589565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006111ac565b6128586135dc565b611aca81613601565b6111c26135dc565b6128986040518060a0016040528060608152602001606081526020015f81526020015f81526020015f81525090565b5f80806129296128a88680614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506128e6925050506020880188614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250506007546001600160801b03169150611aff9050565b9250925092506004600201548314158061294557506004548214155b8061295257506005548114155b1561297e57600654604051633b21437560e21b81526004810191909152602481018490526044016107be565b6040805160a08101909152806129948780614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050908252506020908101906129d990880188614102565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050908252506020810194909452604084019290925260609092019190915292915050565b606080826001600160401b03811115612a4657612a46614147565b604051908082528060200260200182016040528015612a6f578160200160208202803683370190505b509150826001600160401b03811115612a8a57612a8a614147565b604051908082528060200260200182016040528015612ab3578160200160208202803683370190505b5090508215612ccf575f836001600160401b03811115612ad557612ad5614147565b604051908082528060200260200182016040528015612afe578160200160208202803683370190505b5090505f8080612b0f6001886144d4565b90505f5b87811015612cc9575f898983818110612b2e57612b2e61415b565b9050602002810190612b4091906144e7565b612b5190604081019060200161450f565b90506001816002811115612b6757612b676144fb565b03612ba65781868663ffffffff1681518110612b8557612b8561415b565b63ffffffff90921660209283029190910190910152612ba38561453f565b94505b5f80826002811115612bba57612bba6144fb565b1480612bc557508383145b905080612bd3575050612cc1565b8a8a84818110612be557612be561415b565b9050602002810190612bf791906144e7565b612c05906060810190614102565b612c10915086614563565b94508563ffffffff165f03612c26575050612cc1565b5f5b8663ffffffff16811015612cb7575f888281518110612c4957612c4961415b565b602002602001015163ffffffff169050878b8281518110612c6c57612c6c61415b565b602002602001019063ffffffff16908163ffffffff1681525050868a8281518110612c9957612c9961415b565b63ffffffff9092166020928302919091019091015250600101612c28565b505f95505f945050505b600101612b13565b50505050505b9250929050565b5f6001612ce9604086016020870161450f565b6002811115612cfa57612cfa6144fb565b03612d49575f612d0d604086018661418d565b810190612d1a91906145d7565b9050612d41612d2c602087018761403d565b85835f01518460200151856040015188613609565b91505061201f565b6002612d5b604086016020870161450f565b6002811115612d6c57612d6c6144fb565b03612de1575f612d7f604086018661418d565b810190612d8c9190614642565b9050612d41612d9e602087018761403d565b825186906002906001600160a01b03168551604080516001600160a01b039092166020830152016040516020818303038152906040528051906020012088613639565b5f612df2604086016020870161450f565b6002811115612e0357612e036144fb565b03611a35575f612e16604086018661418d565b810190612e23919061470d565b9050612d41612e35602087018761403d565b8251805160209182015191850151889290886136ec565b5f612e5d604086016020870161450f565b6002811115612e6e57612e6e6144fb565b14158015612e7a575080155b612eae57612eae83612e8f6060870187614102565b612e9891614843565b845160208601516060870151608088015161371f565b50505050565b5f80612ec3604086018661418d565b810190612ed09190614642565b80519091506001600160a01b0316612efb5760405163611b32ab60e01b815260040160405180910390fd5b80516001600160a01b039081165f9081526009602090815260408083208054865190951684529083209290925590916001600160801b0380821692600160801b9092041690612f4c9089018961403d565b6001805467ffffffffffffffff19166001600160401b0392831617815560028990555f80549092612f8b92610e9a92600160a01b900490911690614353565b9050612fa281610ed3875f015186868d8d88613764565b845f01516001600160a01b03167f0b4ee788c9bfc3c405fb19e3f6137bf14a218c0dbc53c13a6ed07a225d360ebc84848b8b86604051612fe6959493929190614903565b60405180910390a25095979650505050505050565b61302a6040518060a0016040528060608152602001606081526020015f81526020015f81526020015f81525090565b5f80613039604087018761418d565b810190613046919061470d565b905080602001516001600160801b03165f0361307557604051632440a7dd60e01b815260040160405180910390fd5b5f5f5f613094845f01515f0151855f0151602001518660200151611aff565b8093508194508295505050506130b08383838760200151611c1d565b602084810151600880546001600160801b0319166001600160801b039092169190911790556130e1908a018a61403d565b6001805467ffffffffffffffff19166001600160401b0392831617815560028a90555f8054909261312092610e9a92600160a01b900490911690614353565b905061313281610ed3868c8c86613802565b7fee5f0b6612e124988e865e18a4c4b0ec70d2f263708bb1e17f6de867fb1fe1c2848a8a846040516131679493929190614937565b60405180910390a1506040805160a08101825285515181529451602090810151908601528401929092526060830152608082015291508390505b935093915050565b5f806131b8604088018861418d565b8101906131c591906145d7565b60408101519091506001600160a01b03166131f35760405163611b32ab60e01b815260040160405180910390fd5b80516001600160801b0316158015613216575060208101516001600160801b0316155b15613245576040808201519051632edcd91760e21b81526001600160a01b0390911660048201526024016107be565b63ffffffff8516158061325c575063ffffffff8416155b1561328b576040808201519051632edcd91760e21b81526001600160a01b0390911660048201526024016107be565b6040808201516001600160a01b03165f90815260096020522080546001600160801b03161515806132cc57508054600160801b90046001600160801b031615155b156132fb57604080830151905163cb96603760e01b81526001600160a01b0390911660048201526024016107be565b60408051808201825283516001600160801b0390811682526020808601518216818401908152868501516001600160a01b03165f9081526009835294909420925193518216600160801b029390911692909217905561335c9089018961403d565b6001805467ffffffffffffffff19166001600160401b0392831617815560028990555f8054909261339b92610e9a92600160a01b900490911690614353565b90506133bc81610ed38560400151865f015187602001518c8c8f8d8a61389e565b82604001516001600160a01b03167f9023f1e3e253ad361005d72868d790c37ca6f53a03d522ebc93dca42154e15bf845f015185602001518a8a8d8b88604051612fe69796959493929190614959565b5f838383604051602001612006939291906149a1565b5f80806041849003613456578435602086013560408701355f1a61344889828585613973565b955095509550505050613460565b505f915060029050825b93509350939050565b5f82600381111561347c5761347c6144fb565b03613485575050565b6001826003811115613499576134996144fb565b036134b75760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156134cb576134cb6144fb565b036134ec5760405163fce698f760e01b8152600481018290526024016107be565b6003826003811115613500576135006144fb565b03611d04576040516335e2f38360e21b8152600481018290526024016107be565b5f81604051602001611f4a9190614a37565b6040805160016020820152908101839052606081018290525f90608001612613565b5f6001825f0151836020015184604001518560600151604051602001611f4a95949392919060ff9590951685526001600160401b03938416602086015291831660408501529091166060830152608082015260a00190565b5f516020614a5e5f395f51905f525460ff166111c257604051638dfc202b60e01b815260040160405180910390fd5b6135e4613a3b565b6111c257604051631afcd79f60e31b815260040160405180910390fd5b611a986135dc565b5f61362c878760016001600160a01b0387166136268a8a8a613a54565b87613639565b90505b9695505050505050565b5f7f41936771719a172aa959076ca6aafb826eaf332dd0c9e7860901c398ef42da0546308989896002811115613671576136716144fb565b6040805160208101979097528601949094526001600160a01b0390921660608501526001600160401b0316608084015260a083015260ff1660c082015260e0810185905261010081018490526101208101839052610140015b6040516020818303038152906040528051906020012090509695505050505050565b5f5f6136f986868661340c565b905061371388885f8461370d8b8b8b613ab0565b88613639565b98975050505050505050565b5f5f61372d88888888613b1b565b9150915061373d82828686613cb1565b61375a5760405163079842ab60e41b815260040160405180910390fd5b5050505050505050565b5f7f8b2b1e5653cf18a7cb85828eebc4ac1e6c7093911ffb66bda4277640f68267f6600146308a8a8a8a8a6137988b613521565b60408051602081019b909b5260ff909916988a019890985260608901969096526001600160a01b0394851660808901529390921660a08701526001600160801b0390811660c08701521660e0850152610100840152610120830152610140820152610160016136ca565b5f7fd6c5d8b75d4c96100cc12b870b8e28bb0b07402bf67c8141d16c2c673af8bb5e6001463088888861383489613521565b60408051602081019990995260ff9097169688019690965260608701949094526001600160a01b03909216608086015260a085015260c084015260e0830152610100820152610120016040516020818303038152906040528051906020012090505b949350505050565b5f7ff81bcebf1f8da13ff1db236962ed82c8762b74f56aeb5a1bd1677ef0db43dbbe600146308c8c8c8c8c8c8c6138d48d613521565b60408051602081019d909d5260ff909b169a8c019a909a5260608b01989098526001600160a01b0396871660808b01529590941660a08901526001600160801b0392831660c0890152911660e087015263ffffffff908116610100870152166101208501526101408401526101608301526101808201526101a00160405160208183030381529060405280519060200120905098975050505050505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156139ac57505f91506003905082613a31565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156139fd573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116613a2857505f925060019150829050613a31565b92505f91508190505b9450945094915050565b5f613a44612828565b54600160401b900460ff16919050565b5f7f1cd7f89e34f6154d6f8387a08ffafc689e347b8d5809913b07c58a42995dff664630613a83878787613d12565b6040805160208101959095528401929092526001600160a01b03166060830152608082015260a001612006565b5f7f82ce6440aa5dde11f3613892819b630b62342bacf93e16a292d5c8783aafa4c34630613adf87878761340c565b6040805160208101959095528401929092526001600160a01b0316606083015260808201526001600160801b03831660a082015260c001612006565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c859052603c8120819081905f805b8851811015613ca4575f613b7d848b8481518110613b7057613b7061415b565b6020026020010151613d48565b9050846001600160a01b0316816001600160a01b031611613bb1576040516309cf9e4960e11b815260040160405180910390fd5b885183108015613beb5750806001600160a01b0316898481518110613bd857613bd861415b565b60200260200101516001600160a01b0316105b15613c0057613bf983614a45565b9250613bb1565b8851831480613c3a5750806001600160a01b0316898481518110613c2657613c2661415b565b60200260200101516001600160a01b031614155b15613c5b5760405163665c282b60e01b8152600481018390526024016107be565b613c6487614a45565b9650878381518110613c7857613c7861415b565b602002602001015186613c8b9190614340565b9550935083613c9983614a45565b925050600101613b50565b5050505094509492505050565b5f80613cbd86846144d4565b9050613cca84605a61430a565b613cd586606461430a565b10613ce4576001915050613896565b6002811115801561362f5750613cfb84605061430a565b613d0686606461430a565b10159695505050505050565b604080516001600160801b0380861660208301528416918101919091526001600160a01b03821660608201525f90608001612006565b5f5f5f5f613d568686613d70565b925092509250613d668282613469565b5090949350505050565b5f5f5f8351604103613da7576020840151604085015160608601515f1a613d9988828585613973565b955095509550505050613db2565b505081515f91506002905b9250925092565b5f60408284031215613dc9575f5ffd5b50919050565b80356001600160801b0381168114613de5575f5ffd5b919050565b5f5f60408385031215613dfb575f5ffd5b82356001600160401b03811115613e10575f5ffd5b613e1c85828601613db9565b925050613e2b60208401613dcf565b90509250929050565b5f6101208284031215613dc9575f5ffd5b5f5f6101408385031215613e57575f5ffd5b613e618484613e34565b91506101208301356001600160401b03811115613e7c575f5ffd5b830160208186031215613e8d575f5ffd5b809150509250929050565b80356001600160a01b0381168114613de5575f5ffd5b5f5f5f5f5f5f5f60e0888a031215613ec4575f5ffd5b613ecd88613e98565b9650613edb60208901613dcf565b95506040880135945060608801359350608088013560ff81168114613efe575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f60208284031215613f2b575f5ffd5b61201f82613dcf565b5f6101208284031215613f45575f5ffd5b61201f8383613e34565b5f5f60408385031215613f60575f5ffd5b82356001600160401b03811115613f75575f5ffd5b613f8185828601613db9565b92505060208301356001600160401b03811115613f9c575f5ffd5b613fa885828601613db9565b9150509250929050565b5f60208284031215613fc2575f5ffd5b5035919050565b5f60208284031215613fd9575f5ffd5b61201f82613e98565b5f5f5f5f5f5f60c08789031215613ff7575f5ffd5b61400087613e98565b955061400e60208801613e98565b945060408701359350606087013592506080870135915061403160a08801613dcf565b90509295509295509295565b5f6020828403121561404d575f5ffd5b81356001600160401b038116811461201f575f5ffd5b5f5f5f5f60608587031215614076575f5ffd5b84356001600160401b0381111561408b575f5ffd5b61409787828801613db9565b94505060208501356001600160401b038111156140b2575f5ffd5b8501601f810187136140c2575f5ffd5b80356001600160401b038111156140d7575f5ffd5b8760208260051b84010111156140eb575f5ffd5b949760209190910196509394604001359392505050565b5f5f8335601e19843603018112614117575f5ffd5b8301803591506001600160401b03821115614130575f5ffd5b6020019150600581901b3603821315612ccf575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614183575f5ffd5b9190910192915050565b5f5f8335601e198436030181126141a2575f5ffd5b8301803591506001600160401b038211156141bb575f5ffd5b602001915036819003821315612ccf575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160801b0382811682821603908111156111ac576111ac6141cf565b6001600160801b0381811683821601908111156111ac576111ac6141cf565b6001815b60018411156131a157808504811115614240576142406141cf565b600184161561424e57908102905b60019390931c928002614225565b5f8261426a575060016111ac565b8161427657505f6111ac565b816001811461428c5760028114614296576142b2565b60019150506111ac565b60ff8411156142a7576142a76141cf565b50506001821b6111ac565b5060208310610133831016604e8410600b84101617156142d5575081810a6111ac565b6142e15f198484614221565b805f19048211156142f4576142f46141cf565b029392505050565b5f61201f60ff84168361425c565b80820281158282048414176111ac576111ac6141cf565b5f8261433b57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156111ac576111ac6141cf565b6001600160401b0381811683821601908111156111ac576111ac6141cf565b5f8151808452602084019350602083015f5b828110156143d057815180516001600160a01b031687526020808201516001600160801b03908116828a0152604092830151169188019190915260609096019590910190600101614384565b5093949350505050565b6001600160401b0381511682526001600160401b0360208201511660208301526001600160801b0360408201511660408301526001600160801b0360608201511660608301525050565b8581526001600160a01b03851660208201526001600160801b0384166040820152610100606082018190525f9061445d90830185614372565b905061362f60808301846143da565b6001600160801b03841681526020810183905260c0810161389660408301846143da565b5f602082840312156144a0575f5ffd5b5051919050565b60ff82811682821603908111156111ac576111ac6141cf565b82815260a0810161201f60208301846143da565b818103818111156111ac576111ac6141cf565b5f8235607e19833603018112614183575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b5f6020828403121561451f575f5ffd5b81356003811061201f575f5ffd5b602081525f61201f6020830184614372565b5f63ffffffff821663ffffffff810361455a5761455a6141cf565b60010192915050565b63ffffffff81811683821601908111156111ac576111ac6141cf565b604080519081016001600160401b03811182821017156145a1576145a1614147565b60405290565b604051601f8201601f191681016001600160401b03811182821017156145cf576145cf614147565b604052919050565b5f60608284031280156145e8575f5ffd5b50604051606081016001600160401b038111828210171561460b5761460b614147565b60405261461783613dcf565b815261462560208401613dcf565b602082015261463660408401613e98565b60408201529392505050565b5f6020828403128015614653575f5ffd5b50604051602081016001600160401b038111828210171561467657614676614147565b60405261468283613e98565b81529392505050565b5f6001600160401b038211156146a3576146a3614147565b5060051b60200190565b5f82601f8301126146bc575f5ffd5b81356146cf6146ca8261468b565b6145a7565b8082825260208201915060208360051b8601019250858311156146f0575f5ffd5b602085015b838110156127665780358352602092830192016146f5565b5f6020828403121561471d575f5ffd5b81356001600160401b03811115614732575f5ffd5b820160408185031215614743575f5ffd5b61474b61457f565b81356001600160401b03811115614760575f5ffd5b820160408187031215614771575f5ffd5b61477961457f565b81356001600160401b0381111561478e575f5ffd5b8201601f8101881361479e575f5ffd5b80356147ac6146ca8261468b565b8082825260208201915060208360051b85010192508a8311156147cd575f5ffd5b6020840193505b828410156147f6576147e584613e98565b8252602093840193909101906147d4565b845250505060208201356001600160401b03811115614813575f5ffd5b61481f888285016146ad565b602083015250808352505061483660208301613dcf565b6020820152949350505050565b5f6148506146ca8461468b565b8381526020810190600585901b84013681111561486b575f5ffd5b845b818110156120455780356001600160401b0381111561488a575f5ffd5b860136601f82011261489a575f5ffd5b80356001600160401b038111156148b3576148b3614147565b6148c6601f8201601f19166020016145a7565b8181523660208385010111156148da575f5ffd5b816020840160208301375f6020838301015280875250505060208401935060208101905061486d565b6001600160801b038681168252851660208201526040810184905260608101839052610100810161362f60808301846143da565b848152602081018490526040810183905260e0810161219760608301846143da565b6001600160801b0388811682528716602082015263ffffffff8681166040830152851660608201526080810184905260a08101839052610140810161371360c08301846143da565b606080825284519082018190525f9060208601906080840190835b818110156149e35783516001600160a01b03168352602093840193909201916001016149bc565b5050838103602080860191909152865180835291810192508601905f5b81811015614a1e578251845260209384019390920191600101614a00565b5050506001600160801b03841660408401529050613896565b608081016111ac82846143da565b5f60018201614a5657614a566141cf565b506001019056fecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a264697066735822122024a774fd8e8bc6d7f1582a18acbcf68e3fdb1554db5ab94ea537d713ba6d6b0664736f6c63430008230033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {},\n \"immutableReferences\": {\n \"10452\": [\n {\n \"length\": 32,\n \"start\": 1133\n },\n {\n \"length\": 32,\n \"start\": 3120\n },\n {\n \"length\": 32,\n \"start\": 4345\n },\n {\n \"length\": 32,\n \"start\": 4986\n },\n {\n \"length\": 32,\n \"start\": 7484\n },\n {\n \"length\": 32,\n \"start\": 7618\n }\n ],\n \"10455\": [\n {\n \"length\": 32,\n \"start\": 805\n },\n {\n \"length\": 32,\n \"start\": 5053\n },\n {\n \"length\": 32,\n \"start\": 5247\n },\n {\n \"length\": 32,\n \"start\": 7533\n },\n {\n \"length\": 32,\n \"start\": 7679\n }\n ]\n },\n \"inputSourceName\": \"project/contracts/MintingGateway.sol\",\n \"buildInfoId\": \"solc-0_8_35-beb8df952405ec55b2bc54201ffcd6097ae4e14a\"\n}","{\n \"_format\": \"hh3-artifact-1\",\n \"contractName\": \"ProxyAdmin\",\n \"sourceName\": \"contracts/ProxyArtifacts.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"initialOwner\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"UPGRADE_INTERFACE_VERSION\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract ITransparentUpgradeableProxy\",\n \"name\": \"proxy\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x6080604052348015600e575f5ffd5b506040516104e83803806104e8833981016040819052602b9160b6565b80806001600160a01b038116605957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6060816067565b50505060e1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6020828403121560c5575f5ffd5b81516001600160a01b038116811460da575f5ffd5b9392505050565b6103fa806100ee5f395ff3fe608060405260043610610049575f3560e01c8063715018a61461004d5780638da5cb5b146100635780639623609d1461008e578063ad3cb1cc146100a1578063f2fde38b146100de575b5f5ffd5b348015610058575f5ffd5b506100616100fd565b005b34801561006e575f5ffd5b505f546040516001600160a01b0390911681526020015b60405180910390f35b61006161009c366004610260565b610110565b3480156100ac575f5ffd5b506100d1604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100859190610365565b3480156100e9575f5ffd5b506100616100f836600461037e565b61017b565b6101056101bd565b61010e5f6101e9565b565b6101186101bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906101489086908690600401610399565b5f604051808303818588803b15801561015f575f5ffd5b505af1158015610171573d5f5f3e3d5ffd5b5050505050505050565b6101836101bd565b6001600160a01b0381166101b157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6101ba816101e9565b50565b5f546001600160a01b0316331461010e5760405163118cdaa760e01b81523360048201526024016101a8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101ba575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610272575f5ffd5b833561027d81610238565b9250602084013561028d81610238565b9150604084013567ffffffffffffffff8111156102a8575f5ffd5b8401601f810186136102b8575f5ffd5b803567ffffffffffffffff8111156102d2576102d261024c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103015761030161024c565b604052818152828201602001881015610318575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6103776020830184610337565b9392505050565b5f6020828403121561038e575f5ffd5b813561037781610238565b6001600160a01b03831681526040602082018190525f906103bc90830184610337565b94935050505056fea2646970667358221220096ef5373ffbb308f5aaba93487a526eb7720bc0709046bc95ce238dee72824464736f6c63430008230033\",\n \"deployedBytecode\": \"0x608060405260043610610049575f3560e01c8063715018a61461004d5780638da5cb5b146100635780639623609d1461008e578063ad3cb1cc146100a1578063f2fde38b146100de575b5f5ffd5b348015610058575f5ffd5b506100616100fd565b005b34801561006e575f5ffd5b505f546040516001600160a01b0390911681526020015b60405180910390f35b61006161009c366004610260565b610110565b3480156100ac575f5ffd5b506100d1604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100859190610365565b3480156100e9575f5ffd5b506100616100f836600461037e565b61017b565b6101056101bd565b61010e5f6101e9565b565b6101186101bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906101489086908690600401610399565b5f604051808303818588803b15801561015f575f5ffd5b505af1158015610171573d5f5f3e3d5ffd5b5050505050505050565b6101836101bd565b6001600160a01b0381166101b157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6101ba816101e9565b50565b5f546001600160a01b0316331461010e5760405163118cdaa760e01b81523360048201526024016101a8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101ba575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610272575f5ffd5b833561027d81610238565b9250602084013561028d81610238565b9150604084013567ffffffffffffffff8111156102a8575f5ffd5b8401601f810186136102b8575f5ffd5b803567ffffffffffffffff8111156102d2576102d261024c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103015761030161024c565b604052818152828201602001881015610318575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6103776020830184610337565b9392505050565b5f6020828403121561038e575f5ffd5b813561037781610238565b6001600160a01b03831681526040602082018190525f906103bc90830184610337565b94935050505056fea2646970667358221220096ef5373ffbb308f5aaba93487a526eb7720bc0709046bc95ce238dee72824464736f6c63430008230033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {},\n \"immutableReferences\": {},\n \"inputSourceName\": \"project/contracts/ProxyArtifacts.sol\",\n \"buildInfoId\": \"solc-0_8_35-beb8df952405ec55b2bc54201ffcd6097ae4e14a\"\n}","{\n \"_format\": \"hh3-artifact-1\",\n \"contractName\": \"TransparentUpgradeableProxy\",\n \"sourceName\": \"contracts/ProxyArtifacts.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"logic\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"initialOwner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"admin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC1967InvalidAdmin\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC1967InvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ERC1967NonPayable\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ERC1967ProxyUninitialized\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"FailedCall\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ProxyDeniedAdminAccess\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"previousAdmin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n }\n ],\n \"bytecode\": \"0x60a0604052604051610d7d380380610d7d8339810160408190526100229161036c565b82828282818051610046576040516330a289cf60e21b815260040160405180910390fd5b61005082826100b1565b50508160405161005f90610330565b6001600160a01b039091168152602001604051809103905ff080158015610088573d5f5f3e3d5ffd5b506001600160a01b03166080526100a66100a160805190565b61010f565b50505050505061043d565b6100ba8261017c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610103576100fe82826101fa565b505050565b61010b61029b565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61014e5f516020610d5d5f395f51905f52546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1610179816102bc565b50565b806001600160a01b03163b5f036101b657604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f61020784846102f9565b905080801561022857505f3d118061022857505f846001600160a01b03163b115b1561023d5761023561030c565b915050610295565b801561026757604051639996b31560e01b81526001600160a01b03851660048201526024016101ad565b3d1561027a57610275610325565b610293565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102ba5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b0381166102e557604051633173bdd160e11b81525f60048201526024016101ad565b805f516020610d5d5f395f51905f526101d9565b5f5f5f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b6104e68061087783390190565b80516001600160a01b0381168114610353575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f6060848603121561037e575f5ffd5b6103878461033d565b92506103956020850161033d565b60408501519092506001600160401b038111156103b0575f5ffd5b8401601f810186136103c0575f5ffd5b80516001600160401b038111156103d9576103d9610358565b604051601f8201601f19908116603f011681016001600160401b038111828210171561040757610407610358565b60405281815282820160200188101561041e575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b6080516104236104545f395f601001526104235ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007a575f356001600160e01b03191663278f794360e11b14610070576040516334ad5dbb60e21b815260040160405180910390fd5b610078610082565b565b6100786100b0565b5f8061009136600481846102e1565b81019061009e919061031c565b915091506100ac82826100c0565b5050565b6100786100bb61011a565b610151565b6100c98261016f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156101125761010d82826101ea565b505050565b6100ac61028b565b5f61014c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e80801561016b573d5ff35b3d5ffd5b806001600160a01b03163b5f036101a957604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f6101f784846102aa565b905080801561021857505f3d118061021857505f846001600160a01b03163b115b1561022d576102256102bd565b915050610285565b801561025757604051639996b31560e01b81526001600160a01b03851660048201526024016101a0565b3d1561026a576102656102d6565b610283565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156100785760405163b398979f60e01b815260040160405180910390fd5b5f5f5f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f5f858511156102ef575f5ffd5b838611156102fb575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561032d575f5ffd5b82356001600160a01b0381168114610343575f5ffd5b9150602083013567ffffffffffffffff81111561035e575f5ffd5b8301601f8101851361036e575f5ffd5b803567ffffffffffffffff81111561038857610388610308565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103b7576103b7610308565b6040528181528282016020018710156103ce575f5ffd5b816020840160208301375f60208383010152809350505050925092905056fea2646970667358221220c6da87eea7b69da543d36ac7b83458efe061c9b7c29bf1c22b91b8a9cf8c0cab64736f6c634300082300336080604052348015600e575f5ffd5b506040516104e63803806104e6833981016040819052602b9160b4565b806001600160a01b038116605857604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b605f816065565b505060df565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6020828403121560c3575f5ffd5b81516001600160a01b038116811460d8575f5ffd5b9392505050565b6103fa806100ec5f395ff3fe608060405260043610610049575f3560e01c8063715018a61461004d5780638da5cb5b146100635780639623609d1461008e578063ad3cb1cc146100a1578063f2fde38b146100de575b5f5ffd5b348015610058575f5ffd5b506100616100fd565b005b34801561006e575f5ffd5b505f546040516001600160a01b0390911681526020015b60405180910390f35b61006161009c366004610260565b610110565b3480156100ac575f5ffd5b506100d1604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100859190610365565b3480156100e9575f5ffd5b506100616100f836600461037e565b61017b565b6101056101bd565b61010e5f6101e9565b565b6101186101bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906101489086908690600401610399565b5f604051808303818588803b15801561015f575f5ffd5b505af1158015610171573d5f5f3e3d5ffd5b5050505050505050565b6101836101bd565b6001600160a01b0381166101b157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6101ba816101e9565b50565b5f546001600160a01b0316331461010e5760405163118cdaa760e01b81523360048201526024016101a8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101ba575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610272575f5ffd5b833561027d81610238565b9250602084013561028d81610238565b9150604084013567ffffffffffffffff8111156102a8575f5ffd5b8401601f810186136102b8575f5ffd5b803567ffffffffffffffff8111156102d2576102d261024c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103015761030161024c565b604052818152828201602001881015610318575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6103776020830184610337565b9392505050565b5f6020828403121561038e575f5ffd5b813561037781610238565b6001600160a01b03831681526040602082018190525f906103bc90830184610337565b94935050505056fea264697066735822122061b7d945b272496e3ce5c522b8dbecb68e8abd611b1db3dd20a954a93ec3c53664736f6c63430008230033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\",\n \"deployedBytecode\": \"0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007a575f356001600160e01b03191663278f794360e11b14610070576040516334ad5dbb60e21b815260040160405180910390fd5b610078610082565b565b6100786100b0565b5f8061009136600481846102e1565b81019061009e919061031c565b915091506100ac82826100c0565b5050565b6100786100bb61011a565b610151565b6100c98261016f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156101125761010d82826101ea565b505050565b6100ac61028b565b5f61014c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e80801561016b573d5ff35b3d5ffd5b806001600160a01b03163b5f036101a957604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f6101f784846102aa565b905080801561021857505f3d118061021857505f846001600160a01b03163b115b1561022d576102256102bd565b915050610285565b801561025757604051639996b31560e01b81526001600160a01b03851660048201526024016101a0565b3d1561026a576102656102d6565b610283565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156100785760405163b398979f60e01b815260040160405180910390fd5b5f5f5f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f5f858511156102ef575f5ffd5b838611156102fb575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561032d575f5ffd5b82356001600160a01b0381168114610343575f5ffd5b9150602083013567ffffffffffffffff81111561035e575f5ffd5b8301601f8101851361036e575f5ffd5b803567ffffffffffffffff81111561038857610388610308565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103b7576103b7610308565b6040528181528282016020018710156103ce575f5ffd5b816020840160208301375f60208383010152809350505050925092905056fea2646970667358221220c6da87eea7b69da543d36ac7b83458efe061c9b7c29bf1c22b91b8a9cf8c0cab64736f6c63430008230033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {},\n \"immutableReferences\": {\n \"1213\": [\n {\n \"length\": 32,\n \"start\": 16\n }\n ]\n },\n \"inputSourceName\": \"project/contracts/ProxyArtifacts.sol\",\n \"buildInfoId\": \"solc-0_8_35-beb8df952405ec55b2bc54201ffcd6097ae4e14a\"\n}","//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ArgonToken\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const argonTokenAbi = [\n {\n type: 'constructor',\n inputs: [{ name: 'gateway', internalType: 'address', type: 'address' }],\n stateMutability: 'nonpayable',\n },\n { type: 'error', inputs: [], name: 'ECDSAInvalidSignature' },\n {\n type: 'error',\n inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }],\n name: 'ECDSAInvalidSignatureLength',\n },\n {\n type: 'error',\n inputs: [{ name: 's', internalType: 'bytes32', type: 'bytes32' }],\n name: 'ECDSAInvalidSignatureS',\n },\n {\n type: 'error',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'allowance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientAllowance',\n },\n {\n type: 'error',\n inputs: [\n { name: 'sender', internalType: 'address', type: 'address' },\n { name: 'balance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientBalance',\n },\n {\n type: 'error',\n inputs: [{ name: 'approver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidApprover',\n },\n {\n type: 'error',\n inputs: [{ name: 'receiver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidReceiver',\n },\n {\n type: 'error',\n inputs: [{ name: 'sender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSender',\n },\n {\n type: 'error',\n inputs: [{ name: 'spender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSpender',\n },\n {\n type: 'error',\n inputs: [{ name: 'deadline', internalType: 'uint256', type: 'uint256' }],\n name: 'ERC2612ExpiredSignature',\n },\n {\n type: 'error',\n inputs: [\n { name: 'signer', internalType: 'address', type: 'address' },\n { name: 'owner', internalType: 'address', type: 'address' },\n ],\n name: 'ERC2612InvalidSigner',\n },\n {\n type: 'error',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'currentNonce', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'InvalidAccountNonce',\n },\n {\n type: 'error',\n inputs: [{ name: 'gateway', internalType: 'address', type: 'address' }],\n name: 'InvalidGateway',\n },\n { type: 'error', inputs: [], name: 'InvalidShortString' },\n {\n type: 'error',\n inputs: [{ name: 'caller', internalType: 'address', type: 'address' }],\n name: 'OnlyGateway',\n },\n {\n type: 'error',\n inputs: [{ name: 'str', internalType: 'string', type: 'string' }],\n name: 'StringTooLong',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address', indexed: true },\n { name: 'spender', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Approval',\n },\n { type: 'event', anonymous: false, inputs: [], name: 'EIP712DomainChanged' },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Transfer',\n },\n {\n type: 'function',\n inputs: [],\n name: 'DOMAIN_SEPARATOR',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n ],\n name: 'allowance',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'burnFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'decimals',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'eip712Domain',\n outputs: [\n { name: 'fields', internalType: 'bytes1', type: 'bytes1' },\n { name: 'name', internalType: 'string', type: 'string' },\n { name: 'version', internalType: 'string', type: 'string' },\n { name: 'chainId', internalType: 'uint256', type: 'uint256' },\n { name: 'verifyingContract', internalType: 'address', type: 'address' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n { name: 'extensions', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'gateway',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'mint',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'name',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'nonces',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'v', internalType: 'uint8', type: 'uint8' },\n { name: 'r', internalType: 'bytes32', type: 'bytes32' },\n { name: 's', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'permit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'symbol',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'totalSupply',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transferFrom',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ArgonotToken\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const argonotTokenAbi = [\n {\n type: 'constructor',\n inputs: [{ name: 'gateway', internalType: 'address', type: 'address' }],\n stateMutability: 'nonpayable',\n },\n { type: 'error', inputs: [], name: 'ECDSAInvalidSignature' },\n {\n type: 'error',\n inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }],\n name: 'ECDSAInvalidSignatureLength',\n },\n {\n type: 'error',\n inputs: [{ name: 's', internalType: 'bytes32', type: 'bytes32' }],\n name: 'ECDSAInvalidSignatureS',\n },\n {\n type: 'error',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'allowance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientAllowance',\n },\n {\n type: 'error',\n inputs: [\n { name: 'sender', internalType: 'address', type: 'address' },\n { name: 'balance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientBalance',\n },\n {\n type: 'error',\n inputs: [{ name: 'approver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidApprover',\n },\n {\n type: 'error',\n inputs: [{ name: 'receiver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidReceiver',\n },\n {\n type: 'error',\n inputs: [{ name: 'sender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSender',\n },\n {\n type: 'error',\n inputs: [{ name: 'spender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSpender',\n },\n {\n type: 'error',\n inputs: [{ name: 'deadline', internalType: 'uint256', type: 'uint256' }],\n name: 'ERC2612ExpiredSignature',\n },\n {\n type: 'error',\n inputs: [\n { name: 'signer', internalType: 'address', type: 'address' },\n { name: 'owner', internalType: 'address', type: 'address' },\n ],\n name: 'ERC2612InvalidSigner',\n },\n {\n type: 'error',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'currentNonce', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'InvalidAccountNonce',\n },\n {\n type: 'error',\n inputs: [{ name: 'gateway', internalType: 'address', type: 'address' }],\n name: 'InvalidGateway',\n },\n { type: 'error', inputs: [], name: 'InvalidShortString' },\n {\n type: 'error',\n inputs: [{ name: 'caller', internalType: 'address', type: 'address' }],\n name: 'OnlyGateway',\n },\n {\n type: 'error',\n inputs: [{ name: 'str', internalType: 'string', type: 'string' }],\n name: 'StringTooLong',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address', indexed: true },\n { name: 'spender', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Approval',\n },\n { type: 'event', anonymous: false, inputs: [], name: 'EIP712DomainChanged' },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Transfer',\n },\n {\n type: 'function',\n inputs: [],\n name: 'DOMAIN_SEPARATOR',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n ],\n name: 'allowance',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'burnFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'decimals',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'eip712Domain',\n outputs: [\n { name: 'fields', internalType: 'bytes1', type: 'bytes1' },\n { name: 'name', internalType: 'string', type: 'string' },\n { name: 'version', internalType: 'string', type: 'string' },\n { name: 'chainId', internalType: 'uint256', type: 'uint256' },\n { name: 'verifyingContract', internalType: 'address', type: 'address' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n { name: 'extensions', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'gateway',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'mint',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'name',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'nonces',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'v', internalType: 'uint8', type: 'uint8' },\n { name: 'r', internalType: 'bytes32', type: 'bytes32' },\n { name: 's', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'permit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'symbol',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'totalSupply',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transferFrom',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// CanonicalMintableBurnableERC20\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const canonicalMintableBurnableErc20Abi = [\n { type: 'error', inputs: [], name: 'ECDSAInvalidSignature' },\n {\n type: 'error',\n inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }],\n name: 'ECDSAInvalidSignatureLength',\n },\n {\n type: 'error',\n inputs: [{ name: 's', internalType: 'bytes32', type: 'bytes32' }],\n name: 'ECDSAInvalidSignatureS',\n },\n {\n type: 'error',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'allowance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientAllowance',\n },\n {\n type: 'error',\n inputs: [\n { name: 'sender', internalType: 'address', type: 'address' },\n { name: 'balance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientBalance',\n },\n {\n type: 'error',\n inputs: [{ name: 'approver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidApprover',\n },\n {\n type: 'error',\n inputs: [{ name: 'receiver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidReceiver',\n },\n {\n type: 'error',\n inputs: [{ name: 'sender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSender',\n },\n {\n type: 'error',\n inputs: [{ name: 'spender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSpender',\n },\n {\n type: 'error',\n inputs: [{ name: 'deadline', internalType: 'uint256', type: 'uint256' }],\n name: 'ERC2612ExpiredSignature',\n },\n {\n type: 'error',\n inputs: [\n { name: 'signer', internalType: 'address', type: 'address' },\n { name: 'owner', internalType: 'address', type: 'address' },\n ],\n name: 'ERC2612InvalidSigner',\n },\n {\n type: 'error',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'currentNonce', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'InvalidAccountNonce',\n },\n {\n type: 'error',\n inputs: [{ name: 'gateway', internalType: 'address', type: 'address' }],\n name: 'InvalidGateway',\n },\n { type: 'error', inputs: [], name: 'InvalidShortString' },\n {\n type: 'error',\n inputs: [{ name: 'caller', internalType: 'address', type: 'address' }],\n name: 'OnlyGateway',\n },\n {\n type: 'error',\n inputs: [{ name: 'str', internalType: 'string', type: 'string' }],\n name: 'StringTooLong',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address', indexed: true },\n { name: 'spender', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Approval',\n },\n { type: 'event', anonymous: false, inputs: [], name: 'EIP712DomainChanged' },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Transfer',\n },\n {\n type: 'function',\n inputs: [],\n name: 'DOMAIN_SEPARATOR',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n ],\n name: 'allowance',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'burnFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'decimals',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'eip712Domain',\n outputs: [\n { name: 'fields', internalType: 'bytes1', type: 'bytes1' },\n { name: 'name', internalType: 'string', type: 'string' },\n { name: 'version', internalType: 'string', type: 'string' },\n { name: 'chainId', internalType: 'uint256', type: 'uint256' },\n { name: 'verifyingContract', internalType: 'address', type: 'address' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n { name: 'extensions', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'gateway',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'mint',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'name',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'nonces',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'v', internalType: 'uint8', type: 'uint8' },\n { name: 'r', internalType: 'bytes32', type: 'bytes32' },\n { name: 's', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'permit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'symbol',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'totalSupply',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transferFrom',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ICanonicalToken\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const iCanonicalTokenAbi = [\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address', indexed: true },\n { name: 'spender', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Approval',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Transfer',\n },\n {\n type: 'function',\n inputs: [],\n name: 'DOMAIN_SEPARATOR',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n ],\n name: 'allowance',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'burnFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'decimals',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'mint',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'nonces',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'v', internalType: 'uint8', type: 'uint8' },\n { name: 'r', internalType: 'bytes32', type: 'bytes32' },\n { name: 's', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'permit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'totalSupply',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transferFrom',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// MintingGateway\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const mintingGatewayAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'argonTokenAddress', internalType: 'address', type: 'address' },\n { name: 'argonotTokenAddress', internalType: 'address', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n { type: 'error', inputs: [], name: 'ArrayLengthMismatch' },\n { type: 'error', inputs: [], name: 'ECDSAInvalidSignature' },\n {\n type: 'error',\n inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }],\n name: 'ECDSAInvalidSignatureLength',\n },\n {\n type: 'error',\n inputs: [{ name: 's', internalType: 'bytes32', type: 'bytes32' }],\n name: 'ECDSAInvalidSignatureS',\n },\n { type: 'error', inputs: [], name: 'EnforcedPause' },\n { type: 'error', inputs: [], name: 'ExpectedPause' },\n { type: 'error', inputs: [], name: 'GlobalIssuanceCouncilNotBootstrapped' },\n { type: 'error', inputs: [], name: 'GlobalIssuanceCouncilQuorumNotMet' },\n {\n type: 'error',\n inputs: [\n { name: 'authorized', internalType: 'uint256', type: 'uint256' },\n { name: 'required', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'InsufficientAuthorizedCollateral',\n },\n {\n type: 'error',\n inputs: [\n { name: 'expected', internalType: 'uint64', type: 'uint64' },\n { name: 'provided', internalType: 'uint64', type: 'uint64' },\n ],\n name: 'InvalidChainId',\n },\n {\n type: 'error',\n inputs: [\n { name: 'expected', internalType: 'bytes32', type: 'bytes32' },\n { name: 'provided', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'InvalidCurrentCouncilSnapshot',\n },\n {\n type: 'error',\n inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256' }],\n name: 'InvalidGlobalIssuanceCouncilMember',\n },\n { type: 'error', inputs: [], name: 'InvalidInitialization' },\n { type: 'error', inputs: [], name: 'InvalidMicrogonCollateralForArgonotPayout' },\n {\n type: 'error',\n inputs: [{ name: 'signingKey', internalType: 'address', type: 'address' }],\n name: 'InvalidMintingAuthority',\n },\n {\n type: 'error',\n inputs: [\n { name: 'expected', internalType: 'uint64', type: 'uint64' },\n { name: 'provided', internalType: 'uint64', type: 'uint64' },\n ],\n name: 'InvalidQueueNonce',\n },\n {\n type: 'error',\n inputs: [\n { name: 'expected', internalType: 'uint256', type: 'uint256' },\n { name: 'provided', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'InvalidSignatureCount',\n },\n { type: 'error', inputs: [], name: 'InvalidSignatureOrder' },\n {\n type: 'error',\n inputs: [\n { name: 'maxRate', internalType: 'uint128', type: 'uint128' },\n { name: 'providedRate', internalType: 'uint128', type: 'uint128' },\n ],\n name: 'InvalidTransferOutRate',\n },\n {\n type: 'error',\n inputs: [{ name: 'kind', internalType: 'uint8', type: 'uint8' }],\n name: 'InvalidUpdateKind',\n },\n { type: 'error', inputs: [], name: 'MigrationAlreadyCompleted' },\n {\n type: 'error',\n inputs: [{ name: 'signingKey', internalType: 'address', type: 'address' }],\n name: 'MintingAuthorityAlreadyActive',\n },\n {\n type: 'error',\n inputs: [{ name: 'signingKey', internalType: 'address', type: 'address' }],\n name: 'MintingAuthorityTransferCapacityExceeded',\n },\n {\n type: 'error',\n inputs: [{ name: 'caller', internalType: 'address', type: 'address' }],\n name: 'NotGuardianOrOwner',\n },\n { type: 'error', inputs: [], name: 'NotInitializing' },\n {\n type: 'error',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'OwnableInvalidOwner',\n },\n {\n type: 'error',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'OwnableUnauthorizedAccount',\n },\n {\n type: 'error',\n inputs: [{ name: 'amount', internalType: 'uint256', type: 'uint256' }],\n name: 'RuntimeAmountOverflow',\n },\n {\n type: 'error',\n inputs: [\n { name: 'maxAllowed', internalType: 'uint256', type: 'uint256' },\n { name: 'provided', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TooManyGatewayUpdates',\n },\n {\n type: 'error',\n inputs: [\n { name: 'maxAllowed', internalType: 'uint256', type: 'uint256' },\n { name: 'provided', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TooManyMintingAuthorizations',\n },\n {\n type: 'error',\n inputs: [{ name: 'transferId', internalType: 'bytes32', type: 'bytes32' }],\n name: 'TransferOutOfArgonAlreadyFinalized',\n },\n {\n type: 'error',\n inputs: [\n { name: 'currentBlock', internalType: 'uint256', type: 'uint256' },\n { name: 'validUntilBlock', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TransferOutOfArgonExpired',\n },\n {\n type: 'error',\n inputs: [\n { name: 'currentBlock', internalType: 'uint256', type: 'uint256' },\n { name: 'validUntilBlock', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TransferOutOfArgonNotExpired',\n },\n {\n type: 'error',\n inputs: [{ name: 'token', internalType: 'address', type: 'address' }],\n name: 'UnsupportedToken',\n },\n { type: 'error', inputs: [], name: 'ZeroAdminSafe' },\n { type: 'error', inputs: [], name: 'ZeroAmount' },\n { type: 'error', inputs: [], name: 'ZeroGuardian' },\n { type: 'error', inputs: [], name: 'ZeroMicrogonsPerArgonot' },\n {\n type: 'error',\n inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256' }],\n name: 'ZeroRecipient',\n },\n { type: 'error', inputs: [], name: 'ZeroSigningKey' },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'councilHash', internalType: 'bytes32', type: 'bytes32', indexed: true }],\n name: 'GlobalIssuanceCouncilBootstrapped',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousCouncilHash', internalType: 'bytes32', type: 'bytes32', indexed: true },\n { name: 'councilHash', internalType: 'bytes32', type: 'bytes32', indexed: true },\n ],\n name: 'GlobalIssuanceCouncilForceUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'councilHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n { name: 'approvalHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n { name: 'relayerArgonAccountId', internalType: 'bytes32', type: 'bytes32', indexed: false },\n {\n name: 'gatewayState',\n internalType: 'struct MintingGateway.GatewayActivityState',\n type: 'tuple',\n components: [\n { name: 'gatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonApprovalsNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonCirculation', internalType: 'uint128', type: 'uint128' },\n { name: 'argonotCirculation', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n ],\n name: 'GlobalIssuanceCouncilRotated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousGuardian', internalType: 'address', type: 'address', indexed: true },\n { name: 'newGuardian', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'GuardianUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'version', internalType: 'uint64', type: 'uint64', indexed: false }],\n name: 'Initialized',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'argonRecipientCount', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'argonTotalAmount', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'argonotRecipientCount', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'argonotTotalAmount', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'MigrationCompleted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'signingKey', internalType: 'address', type: 'address', indexed: true },\n { name: 'microgonCollateral', internalType: 'uint128', type: 'uint128', indexed: false },\n { name: 'micronotCollateral', internalType: 'uint128', type: 'uint128', indexed: false },\n { name: 'coactivationCount', internalType: 'uint32', type: 'uint32', indexed: false },\n { name: 'sharedSignatureCount', internalType: 'uint32', type: 'uint32', indexed: false },\n { name: 'approvalHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n { name: 'relayerArgonAccountId', internalType: 'bytes32', type: 'bytes32', indexed: false },\n {\n name: 'gatewayState',\n internalType: 'struct MintingGateway.GatewayActivityState',\n type: 'tuple',\n components: [\n { name: 'gatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonApprovalsNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonCirculation', internalType: 'uint128', type: 'uint128' },\n { name: 'argonotCirculation', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n ],\n name: 'MintingAuthorityActivated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'signingKey', internalType: 'address', type: 'address', indexed: true },\n { name: 'microgonCollateral', internalType: 'uint128', type: 'uint128', indexed: false },\n { name: 'micronotCollateral', internalType: 'uint128', type: 'uint128', indexed: false },\n { name: 'approvalHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n { name: 'relayerArgonAccountId', internalType: 'bytes32', type: 'bytes32', indexed: false },\n {\n name: 'gatewayState',\n internalType: 'struct MintingGateway.GatewayActivityState',\n type: 'tuple',\n components: [\n { name: 'gatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonApprovalsNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonCirculation', internalType: 'uint128', type: 'uint128' },\n { name: 'argonotCirculation', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n ],\n name: 'MintingAuthorityDeactivated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'account', internalType: 'address', type: 'address', indexed: false }],\n name: 'Paused',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'transferId', internalType: 'bytes32', type: 'bytes32', indexed: false },\n {\n name: 'gatewayState',\n internalType: 'struct MintingGateway.GatewayActivityState',\n type: 'tuple',\n components: [\n { name: 'gatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonApprovalsNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonCirculation', internalType: 'uint128', type: 'uint128' },\n { name: 'argonotCirculation', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n ],\n name: 'TransferOutOfArgonCanceled',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'transferId', internalType: 'bytes32', type: 'bytes32', indexed: false },\n { name: 'token', internalType: 'address', type: 'address', indexed: false },\n { name: 'amount', internalType: 'uint128', type: 'uint128', indexed: false },\n {\n name: 'mintingCollateral',\n internalType: 'struct MintingGateway.MintingAuthorityCollateral[]',\n type: 'tuple[]',\n components: [\n { name: 'signingKey', internalType: 'address', type: 'address' },\n { name: 'microgonCollateral', internalType: 'uint128', type: 'uint128' },\n { name: 'micronotCollateral', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n {\n name: 'gatewayState',\n internalType: 'struct MintingGateway.GatewayActivityState',\n type: 'tuple',\n components: [\n { name: 'gatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonApprovalsNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonCirculation', internalType: 'uint128', type: 'uint128' },\n { name: 'argonotCirculation', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n ],\n name: 'TransferOutOfArgonFinalized',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'token', internalType: 'address', type: 'address', indexed: true },\n { name: 'amount', internalType: 'uint128', type: 'uint128', indexed: false },\n { name: 'argonAccountId', internalType: 'bytes32', type: 'bytes32', indexed: false },\n {\n name: 'gatewayState',\n internalType: 'struct MintingGateway.GatewayActivityState',\n type: 'tuple',\n components: [\n { name: 'gatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonApprovalsNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'argonCirculation', internalType: 'uint128', type: 'uint128' },\n { name: 'argonotCirculation', internalType: 'uint128', type: 'uint128' },\n ],\n indexed: false,\n },\n ],\n name: 'TransferToArgonStarted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'account', internalType: 'address', type: 'address', indexed: false }],\n name: 'Unpaused',\n },\n {\n type: 'function',\n inputs: [],\n name: 'ACTIVITY_HASH_VERSION',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAX_GATEWAY_UPDATES_PER_BATCH',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAX_MINTING_AUTHORIZATIONS_PER_TRANSFER',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'RUNTIME_DECIMALS',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'RUNTIME_TO_ERC20_SCALE',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'TOKEN_DECIMALS',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'locatorIndex', internalType: 'uint64', type: 'uint64' }],\n name: 'activityBlockLocators',\n outputs: [\n { name: 'blockNumber', internalType: 'uint64', type: 'uint64' },\n { name: 'startGatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'endGatewayActivityNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'activityRoot', internalType: 'bytes32', type: 'bytes32' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'activityBlockLocatorsMappingSlot',\n outputs: [{ name: 'slot', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'currentCouncil',\n internalType: 'struct MintingGateway.CouncilSnapshot',\n type: 'tuple',\n components: [\n { name: 'signers', internalType: 'address[]', type: 'address[]' },\n { name: 'weights', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n },\n {\n name: 'updates',\n internalType: 'struct MintingGateway.GatewayUpdate[]',\n type: 'tuple[]',\n components: [\n { name: 'queueNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'kind', internalType: 'enum MintingGateway.GatewayUpdateKind', type: 'uint8' },\n { name: 'payload', internalType: 'bytes', type: 'bytes' },\n { name: 'signatures', internalType: 'bytes[]', type: 'bytes[]' },\n ],\n },\n { name: 'relayerArgonAccountId', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'applyGatewayUpdates',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'argonApprovalsHash',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'argonApprovalsNonce',\n outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'argonCirculation',\n outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'argonToken',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'argonotCirculation',\n outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'argonotToken',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'request',\n internalType: 'struct MintingGateway.TransferOutOfArgonRequest',\n type: 'tuple',\n components: [\n { name: 'argonAccountId', internalType: 'bytes32', type: 'bytes32' },\n { name: 'argonTransferNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'chainId', internalType: 'uint64', type: 'uint64' },\n { name: 'microgonsPerArgonot', internalType: 'uint128', type: 'uint128' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n { name: 'validUntilBlock', internalType: 'uint64', type: 'uint64' },\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint128', type: 'uint128' },\n { name: 'mintingAuthorityTip', internalType: 'uint128', type: 'uint128' },\n ],\n },\n ],\n name: 'cancelTransferOutOfArgon',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'request',\n internalType: 'struct MintingGateway.TransferOutOfArgonRequest',\n type: 'tuple',\n components: [\n { name: 'argonAccountId', internalType: 'bytes32', type: 'bytes32' },\n { name: 'argonTransferNonce', internalType: 'uint64', type: 'uint64' },\n { name: 'chainId', internalType: 'uint64', type: 'uint64' },\n { name: 'microgonsPerArgonot', internalType: 'uint128', type: 'uint128' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n { name: 'validUntilBlock', internalType: 'uint64', type: 'uint64' },\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint128', type: 'uint128' },\n { name: 'mintingAuthorityTip', internalType: 'uint128', type: 'uint128' },\n ],\n },\n {\n name: 'proof',\n internalType: 'struct MintingGateway.TransferOutOfArgonProof',\n type: 'tuple',\n components: [\n {\n name: 'authorizations',\n internalType: 'struct MintingGateway.MintingAuthorization[]',\n type: 'tuple[]',\n components: [\n { name: 'microgonCollateral', internalType: 'uint128', type: 'uint128' },\n { name: 'micronotCollateral', internalType: 'uint128', type: 'uint128' },\n { name: 'signature', internalType: 'bytes', type: 'bytes' },\n ],\n },\n ],\n },\n ],\n name: 'finalizeTransferOutOfArgon',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'transferId', internalType: 'bytes32', type: 'bytes32' }],\n name: 'finalizedTransferOutOfArgonIds',\n outputs: [{ name: 'isFinalized', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'nextCouncil',\n internalType: 'struct MintingGateway.CouncilSnapshot',\n type: 'tuple',\n components: [\n { name: 'signers', internalType: 'address[]', type: 'address[]' },\n { name: 'weights', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n },\n { name: 'nextMicrogonsPerArgonot', internalType: 'uint128', type: 'uint128' },\n ],\n name: 'forceUpdateActiveCouncil',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'gatewayActivityNonce',\n outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'globalIssuanceCouncil',\n outputs: [\n { name: 'totalWeight', internalType: 'uint256', type: 'uint256' },\n { name: 'memberCount', internalType: 'uint256', type: 'uint256' },\n { name: 'councilHash', internalType: 'bytes32', type: 'bytes32' },\n { name: 'epochMicrogonsPerArgonot', internalType: 'uint128', type: 'uint128' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'guardian',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'adminSafe', internalType: 'address', type: 'address' },\n { name: 'guardianAddress', internalType: 'address', type: 'address' },\n { name: 'councilHash', internalType: 'bytes32', type: 'bytes32' },\n { name: 'councilMemberCount', internalType: 'uint256', type: 'uint256' },\n { name: 'councilTotalWeight', internalType: 'uint256', type: 'uint256' },\n { name: 'initialMicrogonsPerArgonot', internalType: 'uint128', type: 'uint128' },\n ],\n name: 'initialize',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'latestActivityBlockLocatorIndex',\n outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'maxTransferOutMicrogonsPerArgonot',\n outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'argonMigration',\n internalType: 'struct MintingGateway.MigrationAssetDistribution',\n type: 'tuple',\n components: [\n { name: 'recipients', internalType: 'address[]', type: 'address[]' },\n { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n },\n {\n name: 'argonotMigration',\n internalType: 'struct MintingGateway.MigrationAssetDistribution',\n type: 'tuple',\n components: [\n { name: 'recipients', internalType: 'address[]', type: 'address[]' },\n { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n },\n ],\n name: 'migrate',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'migrationCompleted',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'signingKey', internalType: 'address', type: 'address' }],\n name: 'mintingAuthorityCollateralRemaining',\n outputs: [\n { name: 'microgonCollateral', internalType: 'uint128', type: 'uint128' },\n { name: 'micronotCollateral', internalType: 'uint128', type: 'uint128' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n { type: 'function', inputs: [], name: 'pause', outputs: [], stateMutability: 'nonpayable' },\n {\n type: 'function',\n inputs: [],\n name: 'paused',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'guardianAddress', internalType: 'address', type: 'address' }],\n name: 'setGuardian',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint128', type: 'uint128' },\n { name: 'argonAccountId', internalType: 'bytes32', type: 'bytes32' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'v', internalType: 'uint8', type: 'uint8' },\n { name: 'r', internalType: 'bytes32', type: 'bytes32' },\n { name: 's', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'startTransferToArgon',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'amount', internalType: 'uint128', type: 'uint128' }],\n name: 'toTokenAmount',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n { type: 'function', inputs: [], name: 'unpause', outputs: [], stateMutability: 'nonpayable' },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ProxyAdmin\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const proxyAdminAbi = [\n {\n type: 'constructor',\n inputs: [{ name: 'initialOwner', internalType: 'address', type: 'address' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'error',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'OwnableInvalidOwner',\n },\n {\n type: 'error',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'OwnableUnauthorizedAccount',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'function',\n inputs: [],\n name: 'UPGRADE_INTERFACE_VERSION',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'proxy', internalType: 'contract ITransparentUpgradeableProxy', type: 'address' },\n { name: 'implementation', internalType: 'address', type: 'address' },\n { name: 'data', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'upgradeAndCall',\n outputs: [],\n stateMutability: 'payable',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// TransparentUpgradeableProxy\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const transparentUpgradeableProxyAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'logic', internalType: 'address', type: 'address' },\n { name: 'initialOwner', internalType: 'address', type: 'address' },\n { name: 'data', internalType: 'bytes', type: 'bytes' },\n ],\n stateMutability: 'payable',\n },\n {\n type: 'error',\n inputs: [{ name: 'target', internalType: 'address', type: 'address' }],\n name: 'AddressEmptyCode',\n },\n {\n type: 'error',\n inputs: [{ name: 'admin', internalType: 'address', type: 'address' }],\n name: 'ERC1967InvalidAdmin',\n },\n {\n type: 'error',\n inputs: [{ name: 'implementation', internalType: 'address', type: 'address' }],\n name: 'ERC1967InvalidImplementation',\n },\n { type: 'error', inputs: [], name: 'ERC1967NonPayable' },\n { type: 'error', inputs: [], name: 'ERC1967ProxyUninitialized' },\n { type: 'error', inputs: [], name: 'FailedCall' },\n { type: 'error', inputs: [], name: 'ProxyDeniedAdminAccess' },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },\n { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },\n ],\n name: 'AdminChanged',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],\n name: 'Upgraded',\n },\n { type: 'fallback', stateMutability: 'payable' },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// EventMetadataConstants\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nimport type { Hex } from 'viem';\n\nexport type ArgonTokenApproval = {\n owner: Hex;\n spender: Hex;\n value: bigint;\n};\n\nexport type ArgonTokenEIP712DomainChanged = {};\n\nexport type ArgonTokenTransfer = {\n from: Hex;\n to: Hex;\n value: bigint;\n};\n\nexport type ArgonotTokenApproval = {\n owner: Hex;\n spender: Hex;\n value: bigint;\n};\n\nexport type ArgonotTokenEIP712DomainChanged = {};\n\nexport type ArgonotTokenTransfer = {\n from: Hex;\n to: Hex;\n value: bigint;\n};\n\nexport type CanonicalMintableBurnableERC20Approval = {\n owner: Hex;\n spender: Hex;\n value: bigint;\n};\n\nexport type CanonicalMintableBurnableERC20EIP712DomainChanged = {};\n\nexport type CanonicalMintableBurnableERC20Transfer = {\n from: Hex;\n to: Hex;\n value: bigint;\n};\n\nexport type ICanonicalTokenApproval = {\n owner: Hex;\n spender: Hex;\n value: bigint;\n};\n\nexport type ICanonicalTokenTransfer = {\n from: Hex;\n to: Hex;\n value: bigint;\n};\n\nexport type MintingGatewayGlobalIssuanceCouncilBootstrapped = {\n councilHash: Hex;\n};\n\nexport type MintingGatewayGlobalIssuanceCouncilForceUpdated = {\n previousCouncilHash: Hex;\n councilHash: Hex;\n};\n\nexport type MintingGatewayActivityState = {\n gatewayActivityNonce: bigint;\n argonApprovalsNonce: bigint;\n argonCirculation: bigint;\n argonotCirculation: bigint;\n};\n\nexport type MintingGatewayGlobalIssuanceCouncilRotated = {\n councilHash: Hex;\n approvalHash: Hex;\n relayerArgonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\n\nexport type MintingGatewayGuardianUpdated = {\n previousGuardian: Hex;\n newGuardian: Hex;\n};\n\nexport type MintingGatewayInitialized = {\n version: bigint;\n};\n\nexport type MintingGatewayMigrationCompleted = {\n argonRecipientCount: bigint;\n argonTotalAmount: bigint;\n argonotRecipientCount: bigint;\n argonotTotalAmount: bigint;\n};\n\nexport type MintingGatewayMintingAuthorityActivated = {\n signingKey: Hex;\n microgonCollateral: bigint;\n micronotCollateral: bigint;\n coactivationCount: bigint;\n sharedSignatureCount: bigint;\n approvalHash: Hex;\n relayerArgonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\n\nexport type MintingGatewayMintingAuthorityDeactivated = {\n signingKey: Hex;\n microgonCollateral: bigint;\n micronotCollateral: bigint;\n approvalHash: Hex;\n relayerArgonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\n\nexport type MintingGatewayOwnershipTransferred = {\n previousOwner: Hex;\n newOwner: Hex;\n};\n\nexport type MintingGatewayPaused = {\n account: Hex;\n};\n\nexport type MintingGatewayTransferOutOfArgonCanceled = {\n transferId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\n\nexport type MintingGatewayMintingAuthorityCollateral = {\n signingKey: Hex;\n microgonCollateral: bigint;\n micronotCollateral: bigint;\n};\n\nexport type MintingGatewayTransferOutOfArgonFinalized = {\n transferId: Hex;\n token: Hex;\n amount: bigint;\n mintingCollateral: readonly MintingGatewayMintingAuthorityCollateral[];\n gatewayState: MintingGatewayActivityState;\n};\n\nexport type MintingGatewayTransferToArgonStarted = {\n from: Hex;\n token: Hex;\n amount: bigint;\n argonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\n\nexport type MintingGatewayUnpaused = {\n account: Hex;\n};\n\nexport type ProxyAdminOwnershipTransferred = {\n previousOwner: Hex;\n newOwner: Hex;\n};\n\nexport type TransparentUpgradeableProxyAdminChanged = {\n previousAdmin: Hex;\n newAdmin: Hex;\n};\n\nexport type TransparentUpgradeableProxyUpgraded = {\n implementation: Hex;\n};\n\nexport const ArgonTokenEvents = {\n Approval: {\n name: 'Approval',\n topic: '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925',\n },\n EIP712DomainChanged: {\n name: 'EIP712DomainChanged',\n topic: '0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31',\n },\n Transfer: {\n name: 'Transfer',\n topic: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n },\n} as const;\n\nexport const ArgonotTokenEvents = {\n Approval: {\n name: 'Approval',\n topic: '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925',\n },\n EIP712DomainChanged: {\n name: 'EIP712DomainChanged',\n topic: '0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31',\n },\n Transfer: {\n name: 'Transfer',\n topic: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n },\n} as const;\n\nexport const CanonicalMintableBurnableERC20Events = {\n Approval: {\n name: 'Approval',\n topic: '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925',\n },\n EIP712DomainChanged: {\n name: 'EIP712DomainChanged',\n topic: '0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31',\n },\n Transfer: {\n name: 'Transfer',\n topic: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n },\n} as const;\n\nexport const ICanonicalTokenEvents = {\n Approval: {\n name: 'Approval',\n topic: '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925',\n },\n Transfer: {\n name: 'Transfer',\n topic: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n },\n} as const;\n\nexport const MintingGatewayEvents = {\n GlobalIssuanceCouncilBootstrapped: {\n name: 'GlobalIssuanceCouncilBootstrapped',\n topic: '0xac3566d46c25f65b48d269870da4b9349704c79de13ad49b115532834d7e7ed1',\n },\n GlobalIssuanceCouncilForceUpdated: {\n name: 'GlobalIssuanceCouncilForceUpdated',\n topic: '0x33e53e90d61fdc868629a6234670f92c4445196f3f98ebd71935bbc76c7d9153',\n },\n GlobalIssuanceCouncilRotated: {\n name: 'GlobalIssuanceCouncilRotated',\n topic: '0xee5f0b6612e124988e865e18a4c4b0ec70d2f263708bb1e17f6de867fb1fe1c2',\n },\n GuardianUpdated: {\n name: 'GuardianUpdated',\n topic: '0x064d28d3d3071c5cbc271a261c10c2f0f0d9e319390397101aa0eb23c6bad909',\n },\n Initialized: {\n name: 'Initialized',\n topic: '0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2',\n },\n MigrationCompleted: {\n name: 'MigrationCompleted',\n topic: '0xc255ddc45163282f24909556f7475ab4ec8eb1d51763b25a4560cee9f43d0645',\n },\n MintingAuthorityActivated: {\n name: 'MintingAuthorityActivated',\n topic: '0x9023f1e3e253ad361005d72868d790c37ca6f53a03d522ebc93dca42154e15bf',\n },\n MintingAuthorityDeactivated: {\n name: 'MintingAuthorityDeactivated',\n topic: '0x0b4ee788c9bfc3c405fb19e3f6137bf14a218c0dbc53c13a6ed07a225d360ebc',\n },\n OwnershipTransferred: {\n name: 'OwnershipTransferred',\n topic: '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0',\n },\n Paused: {\n name: 'Paused',\n topic: '0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258',\n },\n TransferOutOfArgonCanceled: {\n name: 'TransferOutOfArgonCanceled',\n topic: '0x3cb8789e9bf6f532eec2bc8ffee9b622fc0d6e6daefb7fb6bb2e2f7b2d62e452',\n },\n TransferOutOfArgonFinalized: {\n name: 'TransferOutOfArgonFinalized',\n topic: '0x64d79900ed82270f744ae62db527f4e328e336d8b51e77bc72601391fe779d06',\n },\n TransferToArgonStarted: {\n name: 'TransferToArgonStarted',\n topic: '0x3ab970a848f33363427e47cfbd7a627af0c6e72757f150137e38cef3cee24d93',\n },\n Unpaused: {\n name: 'Unpaused',\n topic: '0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa',\n },\n} as const;\n\nexport const ProxyAdminEvents = {\n OwnershipTransferred: {\n name: 'OwnershipTransferred',\n topic: '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0',\n },\n} as const;\n\nexport const TransparentUpgradeableProxyEvents = {\n AdminChanged: {\n name: 'AdminChanged',\n topic: '0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f',\n },\n Upgraded: {\n name: 'Upgraded',\n topic: '0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b',\n },\n} as const;\n","import type { Address, ContractFunctionArgs, Hex } from 'viem';\nimport { encodeAbiParameters, keccak256, stringToHex } from 'viem';\nimport type {\n MintingGatewayActivityState,\n MintingGatewayMintingAuthorityCollateral,\n} from './generated.js';\nimport { mintingGatewayAbi } from './generated.js';\n\nexport const MINTING_GATEWAY_UPDATE_KINDS = {\n globalIssuanceCouncilRotate: 0,\n mintingAuthorityActivate: 1,\n mintingAuthorityDeactivate: 2,\n} as const;\n\nexport type MintingGatewayHashContext = {\n chainId: bigint;\n gatewayAddress: Address;\n};\nexport type MintingGatewayActivityBlockLocator = {\n blockNumber: bigint;\n startGatewayActivityNonce: bigint;\n endGatewayActivityNonce: bigint;\n activityRoot: Hex;\n};\n\ntype ApplyGatewayUpdatesArgs = ContractFunctionArgs<\n typeof mintingGatewayAbi,\n 'nonpayable',\n 'applyGatewayUpdates'\n>;\ntype FinalizeTransferOutOfArgonArgs = ContractFunctionArgs<\n typeof mintingGatewayAbi,\n 'nonpayable',\n 'finalizeTransferOutOfArgon'\n>;\ntype MigrateArgs = ContractFunctionArgs<typeof mintingGatewayAbi, 'nonpayable', 'migrate'>;\nexport type MintingGatewayCouncilSnapshot = ApplyGatewayUpdatesArgs[0];\nexport type MintingGatewayGatewayUpdate = ApplyGatewayUpdatesArgs[1][number];\nexport type MintingGatewayTransferOutOfArgonRequest = FinalizeTransferOutOfArgonArgs[0];\nexport type MintingGatewayTransferOutOfArgonProof = FinalizeTransferOutOfArgonArgs[1];\nexport type MintingGatewayMintingAuthorization =\n MintingGatewayTransferOutOfArgonProof['authorizations'][number];\nexport type MintingGatewayMigrationAssetDistribution = MigrateArgs[0];\nexport type MintingGatewayGlobalIssuanceCouncilRotateTarget = {\n council: MintingGatewayCouncilSnapshot;\n epochMicrogonsPerArgonot: bigint;\n};\nexport type MintingGatewayGlobalIssuanceCouncilHashArgs = MintingGatewayCouncilSnapshot & {\n epochMicrogonsPerArgonot: bigint;\n};\n\nexport type MintingGatewayMintingAuthorityActivationTarget = {\n microgonCollateral: bigint;\n micronotCollateral: bigint;\n signingKey: Address;\n};\n\nexport type MintingGatewayMintingAuthorityDeactivateTarget = {\n signingKey: Address;\n};\ntype GlobalIssuanceCouncilRotatedActivityHashArgs = {\n councilHash: Hex;\n approvalHash: Hex;\n relayerArgonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\ntype MintingAuthorityActivatedActivityHashArgs = {\n signingKey: Address;\n microgonCollateral: bigint;\n micronotCollateral: bigint;\n coactivationCount: number | bigint;\n sharedSignatureCount: number | bigint;\n approvalHash: Hex;\n relayerArgonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\ntype MintingAuthorityDeactivatedActivityHashArgs = {\n signingKey: Address;\n microgonCollateral: bigint;\n micronotCollateral: bigint;\n approvalHash: Hex;\n relayerArgonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\ntype TransferToArgonStartedActivityHashArgs = {\n from: Address;\n token: Address;\n amount: bigint;\n argonAccountId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\ntype TransferOutOfArgonCanceledActivityHashArgs = {\n transferId: Hex;\n gatewayState: MintingGatewayActivityState;\n};\ntype TransferOutOfArgonFinalizedActivityHashArgs = {\n transferId: Hex;\n token: Address;\n amount: bigint;\n mintingCollateral: MintingGatewayMintingAuthorityCollateral[];\n gatewayState: MintingGatewayActivityState;\n};\n\ntype ActivateMintingAuthorityApprovalArgs = {\n queueNonce: bigint;\n approvingCouncilHash: Hex;\n previousUpdateHash: Hex;\n target: MintingGatewayMintingAuthorityActivationTarget;\n};\n\ntype RotateGlobalIssuanceCouncilApprovalArgs = {\n queueNonce: bigint;\n approvingCouncilHash: Hex;\n previousUpdateHash: Hex;\n target: MintingGatewayGlobalIssuanceCouncilRotateTarget;\n};\n\ntype MintingAuthorizationHashArgs = {\n request: MintingGatewayTransferOutOfArgonRequest;\n microgonCollateral: MintingGatewayMintingAuthorization['microgonCollateral'];\n micronotCollateral: MintingGatewayMintingAuthorization['micronotCollateral'];\n};\n\ntype GatewayUpdateApprovalArgs = {\n queueNonce: bigint;\n approvingCouncilHash: Hex;\n kind: (typeof MINTING_GATEWAY_UPDATE_KINDS)[keyof typeof MINTING_GATEWAY_UPDATE_KINDS];\n targetId: Hex;\n targetPayloadHash: Hex;\n previousUpdateHash: Hex;\n};\n\nconst COUNCIL_SNAPSHOT_PARAMETERS = [\n { name: 'signers', type: 'address[]' },\n { name: 'weights', type: 'uint256[]' },\n] as const;\nconst GATEWAY_ACTIVITY_STATE_PARAMETERS = [\n { name: 'gatewayActivityNonce', type: 'uint64' },\n { name: 'argonApprovalsNonce', type: 'uint64' },\n { name: 'argonCirculation', type: 'uint128' },\n { name: 'argonotCirculation', type: 'uint128' },\n] as const;\nconst MINTING_AUTHORITY_COLLATERAL_PARAMETERS = [\n { name: 'signingKey', type: 'address' },\n { name: 'microgonCollateral', type: 'uint128' },\n { name: 'micronotCollateral', type: 'uint128' },\n] as const;\n\nconst GLOBAL_ISSUANCE_COUNCIL_ROTATE_TARGET_PARAMETERS = [\n {\n type: 'tuple',\n components: [\n {\n name: 'council',\n type: 'tuple',\n components: COUNCIL_SNAPSHOT_PARAMETERS,\n },\n { name: 'epochMicrogonsPerArgonot', type: 'uint128' },\n ],\n },\n] as const;\n\nconst ACTIVATION_TARGET_PARAMETERS = [\n {\n type: 'tuple',\n components: [\n { name: 'microgonCollateral', type: 'uint128' },\n { name: 'micronotCollateral', type: 'uint128' },\n { name: 'signingKey', type: 'address' },\n ],\n },\n] as const;\n\nconst DEACTIVATION_TARGET_PARAMETERS = [\n {\n type: 'tuple',\n components: [{ name: 'signingKey', type: 'address' }],\n },\n] as const;\n\nconst GATEWAY_UPDATE_APPROVAL_PARAMETERS = [\n { type: 'bytes32' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'uint64' },\n { type: 'bytes32' },\n { type: 'uint8' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\n\nconst MINTING_AUTHORITY_HASH_PARAMETERS = [\n { type: 'uint128' },\n { type: 'uint128' },\n { type: 'address' },\n] as const;\n\nconst MINTING_AUTHORITY_ACTIVATION_PARAMETERS = [\n { type: 'bytes32' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'bytes32' },\n] as const;\n\nconst GLOBAL_ISSUANCE_COUNCIL_ROTATION_PARAMETERS = [\n { type: 'bytes32' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'bytes32' },\n { type: 'uint128' },\n] as const;\n\nfunction signingKeyTargetId(signingKey: Address): Hex {\n return `0x${signingKey.slice(2).padStart(64, '0').toLowerCase()}`;\n}\n\nconst TRANSFER_OUT_OF_ARGON_REQUEST_PARAMETERS = [\n { type: 'bytes32' },\n { type: 'uint64' },\n { type: 'uint64' },\n { type: 'uint128' },\n { type: 'address' },\n { type: 'uint64' },\n { type: 'address' },\n { type: 'uint128' },\n { type: 'uint128' },\n] as const;\n\nconst MINTING_AUTHORIZATION_PARAMETERS = [\n { type: 'bytes32' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'bytes32' },\n { type: 'uint128' },\n { type: 'uint128' },\n] as const;\nconst GATEWAY_ACTIVITY_HASH_PARAMETERS = [\n { type: 'bytes32' },\n { type: 'uint8' },\n { type: 'uint256' },\n { type: 'address' },\n] as const;\nconst GLOBAL_ISSUANCE_COUNCIL_ROTATED_ACTIVITY_PARAMETERS = [\n ...GATEWAY_ACTIVITY_HASH_PARAMETERS,\n { type: 'bytes32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\nconst MINTING_AUTHORITY_ACTIVATED_ACTIVITY_PARAMETERS = [\n ...GATEWAY_ACTIVITY_HASH_PARAMETERS,\n { type: 'address' },\n { type: 'uint128' },\n { type: 'uint128' },\n { type: 'uint32' },\n { type: 'uint32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\nconst MINTING_AUTHORITY_DEACTIVATED_ACTIVITY_PARAMETERS = [\n ...GATEWAY_ACTIVITY_HASH_PARAMETERS,\n { type: 'address' },\n { type: 'uint128' },\n { type: 'uint128' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\nconst TRANSFER_TO_ARGON_STARTED_ACTIVITY_PARAMETERS = [\n ...GATEWAY_ACTIVITY_HASH_PARAMETERS,\n { type: 'address' },\n { type: 'address' },\n { type: 'uint128' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\nconst TRANSFER_OUT_OF_ARGON_CANCELED_ACTIVITY_PARAMETERS = [\n ...GATEWAY_ACTIVITY_HASH_PARAMETERS,\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\nconst TRANSFER_OUT_OF_ARGON_FINALIZED_ACTIVITY_PARAMETERS = [\n ...GATEWAY_ACTIVITY_HASH_PARAMETERS,\n { type: 'bytes32' },\n { type: 'address' },\n { type: 'uint128' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n] as const;\n\nconst GLOBAL_ISSUANCE_COUNCIL_ROTATION_TAG = keccak256(\n stringToHex('ARGON_GLOBAL_ISSUANCE_COUNCIL_ROTATION'),\n);\nconst MINTING_AUTHORITY_ACTIVATION_TAG = keccak256(\n stringToHex('ARGON_MINTING_AUTHORITY_ACTIVATION'),\n);\nconst GATEWAY_UPDATE_APPROVAL_TAG = keccak256(stringToHex('ARGON_GATEWAY_UPDATE_APPROVAL'));\nconst TRANSFER_OUT_OF_ARGON_AUTHORIZATION_TAG = keccak256(\n stringToHex('ARGON_TRANSFER_OUT_OF_ARGON_AUTHORIZATION'),\n);\nconst GLOBAL_ISSUANCE_COUNCIL_ROTATED_ACTIVITY_TAG = keccak256(\n stringToHex('ARGON_GLOBAL_ISSUANCE_COUNCIL_ROTATED_ACTIVITY'),\n);\nconst MINTING_AUTHORITY_ACTIVATED_ACTIVITY_TAG = keccak256(\n stringToHex('ARGON_MINTING_AUTHORITY_ACTIVATED_ACTIVITY'),\n);\nconst MINTING_AUTHORITY_DEACTIVATED_ACTIVITY_TAG = keccak256(\n stringToHex('ARGON_MINTING_AUTHORITY_DEACTIVATED_ACTIVITY'),\n);\nconst TRANSFER_TO_ARGON_STARTED_ACTIVITY_TAG = keccak256(\n stringToHex('ARGON_TRANSFER_TO_ARGON_STARTED_ACTIVITY'),\n);\nconst TRANSFER_OUT_OF_ARGON_CANCELED_ACTIVITY_TAG = keccak256(\n stringToHex('ARGON_TRANSFER_OUT_OF_ARGON_CANCELED_ACTIVITY'),\n);\nconst TRANSFER_OUT_OF_ARGON_FINALIZED_ACTIVITY_TAG = keccak256(\n stringToHex('ARGON_TRANSFER_OUT_OF_ARGON_FINALIZED_ACTIVITY'),\n);\nexport const MINTING_GATEWAY_ACTIVITY_HASH_VERSION = 1;\n\nexport function encodeMintingGatewayCouncilSnapshot(snapshot: MintingGatewayCouncilSnapshot): Hex {\n return encodeAbiParameters(\n [{ type: 'tuple', components: COUNCIL_SNAPSHOT_PARAMETERS }],\n [snapshot],\n );\n}\n\nexport function encodeMintingGatewayGlobalIssuanceCouncilRotateTarget(\n target: MintingGatewayGlobalIssuanceCouncilRotateTarget,\n): Hex {\n return encodeAbiParameters(GLOBAL_ISSUANCE_COUNCIL_ROTATE_TARGET_PARAMETERS, [target]);\n}\n\nexport function encodeMintingGatewayMintingAuthorityActivationTarget(\n target: MintingGatewayMintingAuthorityActivationTarget,\n): Hex {\n return encodeAbiParameters(ACTIVATION_TARGET_PARAMETERS, [target]);\n}\n\nexport function encodeMintingGatewayMintingAuthorityDeactivateTarget(\n target: MintingGatewayMintingAuthorityDeactivateTarget,\n): Hex {\n return encodeAbiParameters(DEACTIVATION_TARGET_PARAMETERS, [target]);\n}\n\nexport function hashMintingGatewayGlobalIssuanceCouncil(\n council: MintingGatewayGlobalIssuanceCouncilHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(\n [{ type: 'address[]' }, { type: 'uint256[]' }, { type: 'uint128' }],\n [council.signers, council.weights, council.epochMicrogonsPerArgonot],\n ),\n );\n}\n\nexport function hashMintingGatewayMintingAuthority(\n target: MintingGatewayMintingAuthorityActivationTarget,\n): Hex {\n return keccak256(\n encodeAbiParameters(MINTING_AUTHORITY_HASH_PARAMETERS, [\n target.microgonCollateral,\n target.micronotCollateral,\n target.signingKey,\n ]),\n );\n}\n\nexport function hashMintingGatewayActivateMintingAuthorityApproval(\n context: MintingGatewayHashContext,\n args: ActivateMintingAuthorityApprovalArgs,\n): Hex {\n return hashMintingGatewayGatewayUpdateApproval(context, {\n queueNonce: args.queueNonce,\n approvingCouncilHash: args.approvingCouncilHash,\n kind: MINTING_GATEWAY_UPDATE_KINDS.mintingAuthorityActivate,\n targetId: signingKeyTargetId(args.target.signingKey),\n targetPayloadHash: hashMintingGatewayActivateMintingAuthority(context, args.target),\n previousUpdateHash: args.previousUpdateHash,\n });\n}\n\nexport function hashMintingGatewayRotateGlobalIssuanceCouncilApproval(\n context: MintingGatewayHashContext,\n args: RotateGlobalIssuanceCouncilApprovalArgs,\n): Hex {\n const nextCouncilHash = hashMintingGatewayGlobalIssuanceCouncil({\n ...args.target.council,\n epochMicrogonsPerArgonot: args.target.epochMicrogonsPerArgonot,\n });\n\n return hashMintingGatewayGatewayUpdateApproval(context, {\n queueNonce: args.queueNonce,\n approvingCouncilHash: args.approvingCouncilHash,\n kind: MINTING_GATEWAY_UPDATE_KINDS.globalIssuanceCouncilRotate,\n targetId: nextCouncilHash,\n targetPayloadHash: hashMintingGatewayRotateGlobalIssuanceCouncil(context, args.target),\n previousUpdateHash: args.previousUpdateHash,\n });\n}\n\nexport function hashMintingGatewayActivateMintingAuthority(\n context: MintingGatewayHashContext,\n target: MintingGatewayMintingAuthorityActivationTarget,\n): Hex {\n return keccak256(\n encodeAbiParameters(MINTING_AUTHORITY_ACTIVATION_PARAMETERS, [\n MINTING_AUTHORITY_ACTIVATION_TAG,\n context.chainId,\n context.gatewayAddress,\n hashMintingGatewayMintingAuthority(target),\n ]),\n );\n}\n\nexport function hashMintingGatewayRotateGlobalIssuanceCouncil(\n context: MintingGatewayHashContext,\n target: MintingGatewayGlobalIssuanceCouncilRotateTarget,\n): Hex {\n return keccak256(\n encodeAbiParameters(GLOBAL_ISSUANCE_COUNCIL_ROTATION_PARAMETERS, [\n GLOBAL_ISSUANCE_COUNCIL_ROTATION_TAG,\n context.chainId,\n context.gatewayAddress,\n hashMintingGatewayGlobalIssuanceCouncil({\n ...target.council,\n epochMicrogonsPerArgonot: target.epochMicrogonsPerArgonot,\n }),\n target.epochMicrogonsPerArgonot,\n ]),\n );\n}\n\nexport function hashMintingGatewayGatewayUpdateApproval(\n context: MintingGatewayHashContext,\n args: GatewayUpdateApprovalArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(GATEWAY_UPDATE_APPROVAL_PARAMETERS, [\n GATEWAY_UPDATE_APPROVAL_TAG,\n context.chainId,\n context.gatewayAddress,\n args.queueNonce,\n args.approvingCouncilHash,\n args.kind,\n args.targetId,\n args.targetPayloadHash,\n args.previousUpdateHash,\n ]),\n );\n}\n\nexport function hashMintingGatewayTransferOutOfArgonRequest(\n request: MintingGatewayTransferOutOfArgonRequest,\n): Hex {\n return keccak256(\n encodeAbiParameters(TRANSFER_OUT_OF_ARGON_REQUEST_PARAMETERS, [\n request.argonAccountId,\n request.argonTransferNonce,\n request.chainId,\n request.microgonsPerArgonot,\n request.recipient,\n request.validUntilBlock,\n request.token,\n request.amount,\n request.mintingAuthorityTip,\n ]),\n );\n}\n\nexport function hashMintingGatewayMintingAuthorization(\n context: MintingGatewayHashContext,\n args: MintingAuthorizationHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(MINTING_AUTHORIZATION_PARAMETERS, [\n TRANSFER_OUT_OF_ARGON_AUTHORIZATION_TAG,\n context.chainId,\n context.gatewayAddress,\n hashMintingGatewayTransferOutOfArgonRequest(args.request),\n args.microgonCollateral,\n args.micronotCollateral,\n ]),\n );\n}\n\nexport function hashMintingGatewayActivityState(gatewayState: MintingGatewayActivityState): Hex {\n return keccak256(\n encodeAbiParameters(\n [{ type: 'tuple', components: GATEWAY_ACTIVITY_STATE_PARAMETERS }],\n [gatewayState],\n ),\n );\n}\n\nexport function appendMintingGatewayActivityRoot(currentRoot: Hex, activityHash: Hex): Hex {\n return keccak256(\n encodeAbiParameters(\n [{ type: 'uint8' }, { type: 'bytes32' }, { type: 'bytes32' }],\n [MINTING_GATEWAY_ACTIVITY_HASH_VERSION, currentRoot, activityHash],\n ),\n );\n}\n\nexport function hashMintingGatewayActivityBlockLocator(\n locator: MintingGatewayActivityBlockLocator,\n): Hex {\n return keccak256(\n encodeAbiParameters(\n [\n { type: 'uint8' },\n { type: 'uint64' },\n { type: 'uint64' },\n { type: 'uint64' },\n { type: 'bytes32' },\n ],\n [\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n locator.blockNumber,\n locator.startGatewayActivityNonce,\n locator.endGatewayActivityNonce,\n locator.activityRoot,\n ],\n ),\n );\n}\n\nexport function hashMintingGatewayGlobalIssuanceCouncilRotatedActivity(\n context: MintingGatewayHashContext,\n args: GlobalIssuanceCouncilRotatedActivityHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(GLOBAL_ISSUANCE_COUNCIL_ROTATED_ACTIVITY_PARAMETERS, [\n GLOBAL_ISSUANCE_COUNCIL_ROTATED_ACTIVITY_TAG,\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n context.chainId,\n context.gatewayAddress,\n args.councilHash,\n args.approvalHash,\n args.relayerArgonAccountId,\n hashMintingGatewayActivityState(args.gatewayState),\n ]),\n );\n}\n\nexport function hashMintingGatewayMintingAuthorityActivatedActivity(\n context: MintingGatewayHashContext,\n args: MintingAuthorityActivatedActivityHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(MINTING_AUTHORITY_ACTIVATED_ACTIVITY_PARAMETERS, [\n MINTING_AUTHORITY_ACTIVATED_ACTIVITY_TAG,\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n context.chainId,\n context.gatewayAddress,\n args.signingKey,\n args.microgonCollateral,\n args.micronotCollateral,\n Number(args.coactivationCount),\n Number(args.sharedSignatureCount),\n args.approvalHash,\n args.relayerArgonAccountId,\n hashMintingGatewayActivityState(args.gatewayState),\n ]),\n );\n}\n\nexport function hashMintingGatewayMintingAuthorityDeactivatedActivity(\n context: MintingGatewayHashContext,\n args: MintingAuthorityDeactivatedActivityHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(MINTING_AUTHORITY_DEACTIVATED_ACTIVITY_PARAMETERS, [\n MINTING_AUTHORITY_DEACTIVATED_ACTIVITY_TAG,\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n context.chainId,\n context.gatewayAddress,\n args.signingKey,\n args.microgonCollateral,\n args.micronotCollateral,\n args.approvalHash,\n args.relayerArgonAccountId,\n hashMintingGatewayActivityState(args.gatewayState),\n ]),\n );\n}\n\nexport function hashMintingGatewayTransferToArgonStartedActivity(\n context: MintingGatewayHashContext,\n args: TransferToArgonStartedActivityHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(TRANSFER_TO_ARGON_STARTED_ACTIVITY_PARAMETERS, [\n TRANSFER_TO_ARGON_STARTED_ACTIVITY_TAG,\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n context.chainId,\n context.gatewayAddress,\n args.from,\n args.token,\n args.amount,\n args.argonAccountId,\n hashMintingGatewayActivityState(args.gatewayState),\n ]),\n );\n}\n\nexport function hashMintingGatewayTransferOutOfArgonCanceledActivity(\n context: MintingGatewayHashContext,\n args: TransferOutOfArgonCanceledActivityHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(TRANSFER_OUT_OF_ARGON_CANCELED_ACTIVITY_PARAMETERS, [\n TRANSFER_OUT_OF_ARGON_CANCELED_ACTIVITY_TAG,\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n context.chainId,\n context.gatewayAddress,\n args.transferId,\n hashMintingGatewayActivityState(args.gatewayState),\n ]),\n );\n}\n\nexport function hashMintingGatewayTransferOutOfArgonFinalizedActivity(\n context: MintingGatewayHashContext,\n args: TransferOutOfArgonFinalizedActivityHashArgs,\n): Hex {\n return keccak256(\n encodeAbiParameters(TRANSFER_OUT_OF_ARGON_FINALIZED_ACTIVITY_PARAMETERS, [\n TRANSFER_OUT_OF_ARGON_FINALIZED_ACTIVITY_TAG,\n MINTING_GATEWAY_ACTIVITY_HASH_VERSION,\n context.chainId,\n context.gatewayAddress,\n args.transferId,\n args.token,\n args.amount,\n keccak256(\n encodeAbiParameters(\n [{ type: 'tuple[]', components: MINTING_AUTHORITY_COLLATERAL_PARAMETERS }],\n [args.mintingCollateral],\n ),\n ),\n hashMintingGatewayActivityState(args.gatewayState),\n ]),\n );\n}\n","import argonTokenArtifact from './artifacts/contracts/ArgonToken.sol/ArgonToken.json' with { type: 'json' };\nimport argonotTokenArtifact from './artifacts/contracts/ArgonotToken.sol/ArgonotToken.json' with { type: 'json' };\nimport mintingGatewayArtifact from './artifacts/contracts/MintingGateway.sol/MintingGateway.json' with { type: 'json' };\nimport proxyAdminArtifact from './artifacts/contracts/ProxyArtifacts.sol/ProxyAdmin.json' with { type: 'json' };\nimport transparentUpgradeableProxyArtifact from './artifacts/contracts/ProxyArtifacts.sol/TransparentUpgradeableProxy.json' with { type: 'json' };\n\nexport const MINTING_GATEWAY_RUNTIME_DECIMALS = 6;\nexport const MINTING_GATEWAY_TOKEN_DECIMALS = 18;\nexport const MINTING_GATEWAY_RUNTIME_TO_ERC20_SCALE =\n 10n ** BigInt(MINTING_GATEWAY_TOKEN_DECIMALS - MINTING_GATEWAY_RUNTIME_DECIMALS);\n\nexport * from './generated.js';\nexport * from './hashing.js';\n\nexport {\n argonTokenArtifact,\n argonotTokenArtifact,\n mintingGatewayArtifact,\n proxyAdminArtifact,\n transparentUpgradeableProxyArtifact,\n};\n","import { BlockHeader, createBlockHeaderFromRPC, type JSONRPCBlock } from '@ethereumjs/block';\nimport { createMerkleProof, createMPT, verifyMPTWithMerkleProof } from '@ethereumjs/mpt';\nimport type { IArgonQueryable } from './index';\nimport { bytesToHex, type Hex, hexToBytes, toHex, toRlp } from 'viem';\nimport {\n type EthereumExecutionClient,\n type EthereumExecutionSource,\n type EthereumReceipt,\n getExecutionClient,\n retryWhileExecutionRpcIndexing,\n} from './EthereumExecution';\n\ntype EthGetBlockByHashRpc = {\n Method: 'eth_getBlockByHash';\n Parameters: [Hex, true];\n ReturnType: JSONRPCBlock;\n};\ntype EthGetBlockByNumberRpc = {\n Method: 'eth_getBlockByNumber';\n Parameters: [Hex, true];\n ReturnType: JSONRPCBlock;\n};\n\nexport type ArgonFinalizedExecutionHeader = {\n blockHash: Hex;\n blockNumber: bigint;\n};\n\nexport class ArgonFinalizedExecutionHeaderPathError extends Error {}\n\nexport type EthereumEventLocator = {\n txHash: Hex;\n logIndexes?: number[];\n receipt?: EthereumReceipt;\n};\n\nexport type EthereumEventLocatorBlock = EthereumEventLocator[];\n\nexport type EthereumEventLog = Pick<EthereumReceipt['logs'][number], 'address' | 'data'> & {\n topics: Hex[];\n};\n\ntype LoadedEthereumEventLocator = {\n receipt: EthereumReceipt;\n requestedLogs: EthereumReceipt['logs'];\n};\n\nexport type EthereumEventProof = {\n executionBlockProof: {\n anchorBlockHash: Hex;\n targetToAnchorHeaderChain: { rlp: Hex }[];\n };\n blocks: {\n targetBlockNumber: number;\n receiptLogs: {\n transactionIndex: number;\n eventLog: EthereumEventLog;\n }[];\n receiptProof: {\n nodes: Hex[];\n receipts: {\n transactionIndex: number;\n nodeIndexes: number[];\n }[];\n };\n }[];\n};\n\ntype EthereumEventProofBlock = EthereumEventProof['blocks'][number];\ntype EthereumReceiptProof = EthereumEventProofBlock['receiptProof'];\ntype EthereumReceiptLog = EthereumEventProofBlock['receiptLogs'][number];\ntype EthereumCombinedReceiptProofReceipt = EthereumReceiptProof['receipts'][number];\n\nexport function encodeReceiptTrieKey(transactionIndex: number): Uint8Array {\n return transactionIndex === 0 ? Uint8Array.from([0x80]) : toRlp(toHex(transactionIndex), 'bytes');\n}\n\nexport function encodeEthereumReceiptForProof(receipt: EthereumReceipt): Uint8Array {\n const payload = toRlp(\n [\n receipt.root ?? (receipt.status === 'success' ? '0x1' : '0x'),\n toHex(receipt.cumulativeGasUsed),\n receipt.logsBloom,\n receipt.logs.map(log => [log.address, [...log.topics], log.data]),\n ],\n 'bytes',\n );\n\n switch (receipt.type) {\n case 'legacy':\n return payload;\n case 'eip2930':\n return Uint8Array.from([...hexToBytes('0x01'), ...payload]);\n case 'eip1559':\n return Uint8Array.from([...hexToBytes('0x02'), ...payload]);\n case 'eip4844':\n return Uint8Array.from([...hexToBytes('0x03'), ...payload]);\n case 'eip7702':\n return Uint8Array.from([...hexToBytes('0x04'), ...payload]);\n default:\n throw new Error(`Unsupported Ethereum receipt type ${String(receipt.type)}`);\n }\n}\n\nexport async function buildEthereumEventProof(\n executionSource: EthereumExecutionSource,\n argonFinalizedExecutionHeader: ArgonFinalizedExecutionHeader,\n locatorBlocks: EthereumEventLocatorBlock[],\n): Promise<EthereumEventProof> {\n if (locatorBlocks.length === 0) {\n throw new Error('At least one Ethereum event locator is required');\n }\n\n const executionClient = getExecutionClient(executionSource);\n const blocksWithHeaders = await Promise.all(\n locatorBlocks.map(async (locatorBlock, index) => {\n if (locatorBlock.length === 0) {\n throw new Error(`Ethereum event locator block ${index} is empty`);\n }\n\n const loadedLocators = await loadEthereumEventLocators(executionClient, locatorBlock);\n const firstLocator = loadedLocators[0];\n const blockHash = firstLocator.receipt.blockHash;\n\n for (const locator of loadedLocators.slice(1)) {\n if (locator.receipt.blockHash.toLowerCase() !== blockHash.toLowerCase()) {\n throw new Error(`Ethereum event locator block ${index} spans multiple execution blocks`);\n }\n }\n\n const targetHeader = await loadExecutionHeader(executionClient, blockHash);\n if (argonFinalizedExecutionHeader.blockNumber < targetHeader.number) {\n throw new Error(\n `Argon finalized execution header ${argonFinalizedExecutionHeader.blockHash} is behind target block ${blockHash}; wait for relayer sync`,\n );\n }\n return {\n blockHash,\n locators: loadedLocators,\n targetHeader,\n };\n }),\n );\n\n if (blocksWithHeaders.length === 0) {\n throw new Error('At least one Ethereum event locator is required');\n }\n\n blocksWithHeaders.sort((a, b) => Number(a.targetHeader.number - b.targetHeader.number));\n const furthestTargetBlock = blocksWithHeaders[0];\n\n const targetToArgonFinalizedHeaderChain = await buildExecutionHeaderChain(\n executionClient,\n furthestTargetBlock.targetHeader,\n argonFinalizedExecutionHeader,\n );\n\n const blocks: EthereumEventProof['blocks'] = [];\n for (const { blockHash, locators, targetHeader } of blocksWithHeaders) {\n if (targetHeader.number === argonFinalizedExecutionHeader.blockNumber) {\n if (blockHash.toLowerCase() !== argonFinalizedExecutionHeader.blockHash.toLowerCase()) {\n throw new ArgonFinalizedExecutionHeaderPathError(\n `Target block ${blockHash} is not the Argon finalized execution header ${argonFinalizedExecutionHeader.blockHash}`,\n );\n }\n } else {\n const sharedTargetHeaderOnArgonFinalizedChain =\n targetToArgonFinalizedHeaderChain[\n Number(targetHeader.number - furthestTargetBlock.targetHeader.number)\n ];\n if (\n !sharedTargetHeaderOnArgonFinalizedChain ||\n sharedTargetHeaderOnArgonFinalizedChain.blockHash.toLowerCase() !== blockHash.toLowerCase()\n ) {\n throw new ArgonFinalizedExecutionHeaderPathError(\n `Target block ${blockHash} is not on the shared execution header chain to Argon finalized execution header ${argonFinalizedExecutionHeader.blockHash}`,\n );\n }\n }\n\n const receiptLogs: EthereumReceiptLog[] = [];\n const transactionIndexes: number[] = [];\n const seenTransactionIndexes = new Set<number>();\n\n for (const { receipt, requestedLogs } of locators) {\n if (!seenTransactionIndexes.has(receipt.transactionIndex)) {\n seenTransactionIndexes.add(receipt.transactionIndex);\n transactionIndexes.push(receipt.transactionIndex);\n }\n\n for (const log of requestedLogs) {\n receiptLogs.push({\n transactionIndex: receipt.transactionIndex,\n eventLog: {\n address: log.address,\n topics: [...log.topics],\n data: log.data,\n },\n });\n }\n }\n\n const receiptProof = await buildCombinedReceiptProof(\n executionClient,\n blockHash,\n transactionIndexes,\n bytesToHex(targetHeader.receiptTrie),\n );\n\n blocks.push({\n targetBlockNumber: Number(targetHeader.number),\n receiptProof,\n receiptLogs,\n });\n }\n\n return {\n executionBlockProof: {\n anchorBlockHash: argonFinalizedExecutionHeader.blockHash,\n targetToAnchorHeaderChain: targetToArgonFinalizedHeaderChain.map(({ rlp }) => ({ rlp })),\n },\n blocks,\n };\n}\n\nexport async function getLatestArgonFinalizedExecutionHeader(\n client: IArgonQueryable,\n): Promise<ArgonFinalizedExecutionHeader> {\n const verifierQuery = client.query.ethereumVerifier;\n const latestArgonFinalizedExecutionHeaderHash =\n await verifierQuery.latestExecutionHeaderAnchorBlockHash();\n\n if (latestArgonFinalizedExecutionHeaderHash.isNone) {\n throw new Error('No Argon finalized execution header is available yet; wait for relayer sync');\n }\n\n const blockHash = latestArgonFinalizedExecutionHeaderHash.unwrap().toHex();\n const argonFinalizedExecutionHeaderEntry = await verifierQuery.executionHeaderAnchors(blockHash);\n\n if (argonFinalizedExecutionHeaderEntry.isNone) {\n throw new Error(`Argon finalized execution header ${blockHash} is missing`);\n }\n\n return {\n blockHash,\n blockNumber: argonFinalizedExecutionHeaderEntry.unwrap().blockNumber.toBigInt(),\n };\n}\n\nexport async function waitForArgonFinalizedExecutionHeader(\n client: IArgonQueryable,\n targetBlockNumber: bigint,\n options: { pollMs?: number; timeoutMs?: number } = {},\n): Promise<ArgonFinalizedExecutionHeader> {\n const pollMs = options.pollMs ?? 3_000;\n const timeoutMs = options.timeoutMs ?? 5 * 60_000;\n const startedAt = Date.now();\n let lastError: Error | undefined;\n\n while (Date.now() - startedAt < timeoutMs) {\n try {\n const argonFinalizedExecutionHeader = await getLatestArgonFinalizedExecutionHeader(client);\n if (argonFinalizedExecutionHeader.blockNumber >= targetBlockNumber) {\n return argonFinalizedExecutionHeader;\n }\n } catch (error) {\n if (!(error instanceof Error)) {\n throw error;\n }\n lastError = error;\n }\n\n await new Promise(resolve => setTimeout(resolve, pollMs));\n }\n\n throw (\n lastError ??\n new Error(\n `Argon finalized execution header did not reach block ${targetBlockNumber} within ${Math.floor(timeoutMs / 1000)}s`,\n )\n );\n}\n\nasync function loadEthereumEventLocators(\n executionClient: EthereumExecutionClient,\n locators: EthereumEventLocator[],\n) {\n return await retryWhileExecutionRpcIndexing(() => {\n return Promise.all(\n locators.map(async ({ txHash, logIndexes, receipt }) => {\n receipt ??= await executionClient.getTransactionReceipt({ hash: txHash });\n const requestedLogIndexes = logIndexes ?? [0];\n if (requestedLogIndexes.length === 0) {\n throw new Error(`At least one log index is required for receipt ${txHash}`);\n }\n\n const requestedLogs = requestedLogIndexes.map(index => {\n const matchingLog =\n receipt.logs.find(log => log.logIndex != null && Number(log.logIndex) === index) ??\n receipt.logs[index];\n if (!matchingLog) {\n throw new Error(`Missing log ${index} in receipt ${receipt.transactionHash}`);\n }\n\n return matchingLog;\n });\n\n return {\n receipt,\n requestedLogs,\n } satisfies LoadedEthereumEventLocator;\n }),\n );\n });\n}\n\nexport async function loadExecutionHeader(\n executionClient: EthereumExecutionClient,\n blockTag: Hex | bigint,\n) {\n const blockData = await retryWhileExecutionRpcIndexing(() =>\n typeof blockTag === 'string'\n ? executionClient.request<EthGetBlockByHashRpc>({\n method: 'eth_getBlockByHash',\n params: [blockTag, true],\n })\n : executionClient.request<EthGetBlockByNumberRpc>({\n method: 'eth_getBlockByNumber',\n params: [toHex(blockTag), true],\n }),\n );\n const header = createBlockHeaderFromRPC(blockData);\n\n if (\n typeof blockTag === 'string' &&\n bytesToHex(header.hash()).toLowerCase() !== blockTag.toLowerCase()\n ) {\n throw new Error(`Execution header hash mismatch for block ${blockTag}`);\n }\n\n return header;\n}\n\nexport async function buildExecutionHeaderChain(\n executionClient: EthereumExecutionClient,\n targetHeader: BlockHeader,\n argonFinalizedExecutionHeader: ArgonFinalizedExecutionHeader,\n): Promise<{ blockHash: Hex; rlp: Hex }[]> {\n const targetBlockHash = bytesToHex(targetHeader.hash());\n\n if (targetHeader.number === argonFinalizedExecutionHeader.blockNumber) {\n if (targetBlockHash.toLowerCase() !== argonFinalizedExecutionHeader.blockHash.toLowerCase()) {\n throw new ArgonFinalizedExecutionHeaderPathError(\n `Target block ${targetBlockHash} is not the Argon finalized execution header ${argonFinalizedExecutionHeader.blockHash}`,\n );\n }\n\n return [];\n }\n\n const headers: { blockHash: Hex; rlp: Hex }[] = [];\n let header = await loadExecutionHeader(executionClient, argonFinalizedExecutionHeader.blockHash);\n\n if (header.number !== argonFinalizedExecutionHeader.blockNumber) {\n throw new Error(\n `Execution header ${argonFinalizedExecutionHeader.blockHash} is not block ${argonFinalizedExecutionHeader.blockNumber}`,\n );\n }\n\n while (header.number > targetHeader.number) {\n header = await loadExecutionHeader(executionClient, bytesToHex(header.parentHash));\n headers.push({\n blockHash: bytesToHex(header.hash()),\n rlp: bytesToHex(header.serialize()),\n });\n }\n\n if (\n header.number !== targetHeader.number ||\n bytesToHex(header.hash()).toLowerCase() !== targetBlockHash.toLowerCase()\n ) {\n throw new ArgonFinalizedExecutionHeaderPathError(\n `Target block ${targetBlockHash} is not on the shared execution header chain to Argon finalized execution header ${argonFinalizedExecutionHeader.blockHash}`,\n );\n }\n\n return headers.reverse();\n}\n\nasync function buildCombinedReceiptProof(\n executionClient: EthereumExecutionClient,\n blockHash: Hex,\n transactionIndexes: number[],\n receiptsRoot: Hex,\n): Promise<EthereumReceiptProof> {\n const { receipts } = await retryWhileExecutionRpcIndexing(async () => {\n const block = await executionClient.getBlock({ blockHash });\n const receipts = await Promise.all(\n block.transactions.map(hash => executionClient.getTransactionReceipt({ hash })),\n );\n\n return { receipts };\n });\n\n const trie = await createMPT();\n\n for (const receipt of receipts) {\n await trie.put(\n encodeReceiptTrieKey(receipt.transactionIndex),\n encodeEthereumReceiptForProof(receipt),\n );\n }\n\n if (bytesToHex(trie.root()).toLowerCase() !== receiptsRoot.toLowerCase()) {\n throw new Error(`Receipt trie root mismatch for block ${blockHash}`);\n }\n\n const nodeIndexesByHex = new Map<Hex, number>();\n const sharedNodes: Hex[] = [];\n const proofReceipts = await Promise.all(\n transactionIndexes.map(async transactionIndex => {\n const key = encodeReceiptTrieKey(transactionIndex);\n const proof = await createMerkleProof(trie, key);\n const verifiedReceipt = await verifyMPTWithMerkleProof(trie, trie.root(), key, proof);\n\n if (!verifiedReceipt) {\n throw new Error(\n `Receipt proof verification failed for transaction index ${transactionIndex}`,\n );\n }\n\n return {\n transactionIndex,\n nodeIndexes: proof.map(node => {\n const hexNode = bytesToHex(node);\n const existingIndex = nodeIndexesByHex.get(hexNode);\n if (existingIndex !== undefined) {\n return existingIndex;\n }\n\n const nextIndex = sharedNodes.length;\n sharedNodes.push(hexNode);\n nodeIndexesByHex.set(hexNode, nextIndex);\n return nextIndex;\n }),\n } satisfies EthereumCombinedReceiptProofReceipt;\n }),\n );\n\n return {\n nodes: sharedNodes,\n receipts: proofReceipts,\n };\n}\n","import { createPublicClient, http } from 'viem';\n\nexport type EthereumReceipt = Awaited<\n ReturnType<ReturnType<typeof createPublicClient>['getTransactionReceipt']>\n>;\nexport type EthereumExecutionClient = ReturnType<typeof createPublicClient>;\n\nexport type EthereumExecutionSource = {\n executionRpcUrl?: string;\n executionClient?: EthereumExecutionClient;\n};\n\nconst executionClientsByUrl = new Map<string, EthereumExecutionClient>();\n\nexport function getExecutionClient(source: EthereumExecutionSource): EthereumExecutionClient {\n if (source.executionClient) {\n return source.executionClient;\n }\n if (source.executionRpcUrl) {\n const cached = executionClientsByUrl.get(source.executionRpcUrl);\n if (cached) {\n return cached;\n }\n\n const client = createPublicClient({ transport: http(source.executionRpcUrl) });\n executionClientsByUrl.set(source.executionRpcUrl, client);\n return client;\n }\n\n throw new Error('Ethereum event proof requires an execution client or execution RPC URL');\n}\n\nfunction getExecutionRpcErrorText(error: unknown): string {\n if (error instanceof Error) {\n return [\n error.message,\n 'details' in error && typeof error.details === 'string' ? error.details : undefined,\n ]\n .filter(Boolean)\n .join(' ');\n }\n\n return String(error);\n}\n\n// Dev/test execution RPCs can expose a fresh block before their receipt/log indexes catch up.\n// When that happens, recent reads may fail transiently with \"indexing is in progress\".\nexport async function retryWhileExecutionRpcIndexing<TResult>(\n request: () => Promise<TResult>,\n): Promise<TResult> {\n const startedAt = Date.now();\n let lastError: Error | undefined;\n\n while (Date.now() - startedAt < 30_000) {\n try {\n return await request();\n } catch (error) {\n const errorText = getExecutionRpcErrorText(error);\n if (!errorText.includes('indexing is in progress')) {\n throw error;\n }\n\n lastError = error instanceof Error ? error : new Error(errorText);\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n }\n\n throw lastError ?? new Error('Timed out waiting for execution RPC indexing');\n}\n","import {\n mintingGatewayAbi,\n MintingGatewayEvents,\n type MintingGatewayGlobalIssuanceCouncilRotated,\n type MintingGatewayMintingAuthorityActivated,\n type MintingGatewayMintingAuthorityDeactivated,\n type MintingGatewayTransferOutOfArgonCanceled,\n type MintingGatewayTransferOutOfArgonFinalized,\n type MintingGatewayTransferToArgonStarted,\n} from './EvmContracts';\nimport { decodeEventLog, getAddress, type Hex } from 'viem';\nimport type { EthereumEventLog } from './EthereumProof';\n\ntype DecodedEthereumGatewayActivity =\n | ({\n kind: typeof MintingGatewayEvents.GlobalIssuanceCouncilRotated.name;\n } & MintingGatewayGlobalIssuanceCouncilRotated)\n | ({\n kind: typeof MintingGatewayEvents.MintingAuthorityActivated.name;\n } & MintingGatewayMintingAuthorityActivated)\n | ({\n kind: typeof MintingGatewayEvents.MintingAuthorityDeactivated.name;\n } & MintingGatewayMintingAuthorityDeactivated)\n | ({\n kind: typeof MintingGatewayEvents.TransferOutOfArgonCanceled.name;\n } & MintingGatewayTransferOutOfArgonCanceled)\n | ({\n kind: typeof MintingGatewayEvents.TransferOutOfArgonFinalized.name;\n } & MintingGatewayTransferOutOfArgonFinalized)\n | ({\n kind: typeof MintingGatewayEvents.TransferToArgonStarted.name;\n } & MintingGatewayTransferToArgonStarted);\n\nexport type EthereumGatewayActivity = DecodedEthereumGatewayActivity & {\n txHash: Hex;\n transactionIndex: number;\n logIndex: number;\n blockHash: Hex;\n blockNumber: bigint;\n};\n\nconst gatewayActivityEvents = [\n MintingGatewayEvents.GlobalIssuanceCouncilRotated,\n MintingGatewayEvents.MintingAuthorityActivated,\n MintingGatewayEvents.MintingAuthorityDeactivated,\n MintingGatewayEvents.TransferOutOfArgonCanceled,\n MintingGatewayEvents.TransferOutOfArgonFinalized,\n MintingGatewayEvents.TransferToArgonStarted,\n] as const;\n\nexport function findEthereumTransferToArgonStartedLogIndexes(\n receipt: { transactionHash: Hex; logs: { address: Hex; topics: Hex[] }[] },\n gatewayAddress: Hex,\n): number[] {\n const normalizedGatewayAddress = getAddress(gatewayAddress).toLowerCase();\n const indexes = receipt.logs.flatMap((log, index) =>\n log.address.toLowerCase() === normalizedGatewayAddress &&\n log.topics[0]?.toLowerCase() === MintingGatewayEvents.TransferToArgonStarted.topic\n ? [index]\n : [],\n );\n\n if (indexes.length === 0) {\n throw new Error(\n `Ethereum receipt ${receipt.transactionHash} did not emit TransferToArgonStarted from gateway ${gatewayAddress}`,\n );\n }\n\n return indexes;\n}\n\nexport function decodeEthereumTransferToArgonStartedLog(\n log: Pick<EthereumEventLog, 'topics' | 'data'>,\n): MintingGatewayTransferToArgonStarted {\n const decoded = decodeEthereumGatewayActivityLog(log);\n if (decoded.kind !== MintingGatewayEvents.TransferToArgonStarted.name) {\n throw new Error(\n `Expected ${MintingGatewayEvents.TransferToArgonStarted.name} gateway activity log`,\n );\n }\n\n const { kind: _kind, ...transfer } = decoded;\n return transfer;\n}\n\nexport function decodeEthereumGatewayActivityLog(\n log: Pick<EthereumEventLog, 'topics' | 'data'>,\n): DecodedEthereumGatewayActivity {\n const topic = log.topics[0]?.toLowerCase();\n if (!topic) {\n throw new Error('Gateway activity log is missing an event signature topic');\n }\n\n const event = gatewayActivityEvents.find(candidate => candidate.topic === topic);\n if (!event) {\n throw new Error(`Unsupported gateway activity event topic ${topic}`);\n }\n\n const { args } = decodeEventLog({\n abi: mintingGatewayAbi,\n eventName: event.name,\n topics: log.topics as [Hex, ...Hex[]],\n data: log.data,\n strict: true,\n });\n\n return {\n kind: event.name,\n ...args,\n } as DecodedEthereumGatewayActivity;\n}\n","import { mintingGatewayAbi } from './EvmContracts';\nimport type { ArgonClient, IArgonQueryable } from './index';\nimport { getAddress, type Hex, toHex } from 'viem';\nimport {\n decodeEthereumGatewayActivityLog,\n type EthereumGatewayActivity,\n} from './EthereumGatewayActivity';\nimport {\n ArgonFinalizedExecutionHeaderPathError,\n buildExecutionHeaderChain,\n buildEthereumEventProof,\n type ArgonFinalizedExecutionHeader,\n type EthereumEventLocator,\n type EthereumEventLocatorBlock,\n type EthereumEventProof,\n getLatestArgonFinalizedExecutionHeader,\n loadExecutionHeader,\n} from './EthereumProof';\nimport {\n getExecutionClient,\n type EthereumExecutionClient,\n type EthereumExecutionSource,\n retryWhileExecutionRpcIndexing,\n} from './EthereumExecution';\n\nexport type EthereumGatewayActivityProofPayload = {\n previousGatewayActivityNonce: bigint;\n proof: EthereumEventProof;\n gatewayActivityNonceRange: {\n start: bigint;\n end: bigint;\n };\n executionBlockNumberRange: {\n start: bigint;\n end: bigint;\n };\n activities: EthereumGatewayActivity[];\n};\n\nexport type DiscoveredGatewayActivities = Pick<\n EthereumGatewayActivityProofPayload,\n 'previousGatewayActivityNonce' | 'activities'\n>;\n\ntype MintingGatewayActivityBlockLocator = {\n blockNumber: bigint;\n startGatewayActivityNonce: bigint;\n endGatewayActivityNonce: bigint;\n activityRoot?: Hex;\n};\n\ntype GatewayActivityProofChunk = {\n activities: EthereumGatewayActivity[];\n locatorBlock: EthereumEventLocatorBlock;\n};\n\ntype GatewayProofBounds = {\n activitiesPerReceiptProof: number;\n receiptProofsPerExtrinsic: number;\n sharedHeaderDepth: number;\n};\n\ntype ArgonFinalizedExecutionHeaderPlan = {\n argonFinalizedExecutionHeader: ArgonFinalizedExecutionHeader;\n earliestTargetHeader: Awaited<ReturnType<typeof loadExecutionHeader>>;\n targetToArgonFinalizedHeaderChain: Awaited<ReturnType<typeof buildExecutionHeaderChain>>;\n};\n\ntype EthereumBlockLog = Awaited<ReturnType<EthereumExecutionClient['getLogs']>>[number];\n\nconst activityBlockLocatorAbi = [\n {\n inputs: [{ name: '', type: 'uint64' }],\n name: 'activityBlockLocators',\n outputs: [\n { name: 'blockNumber', type: 'uint64' },\n { name: 'startGatewayActivityNonce', type: 'uint64' },\n { name: 'endGatewayActivityNonce', type: 'uint64' },\n { name: 'activityRoot', type: 'bytes32' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\nconst legacyActivityBlockLocatorAbi = [\n {\n inputs: [{ name: '', type: 'uint64' }],\n name: 'activityBlockLocators',\n outputs: [\n { name: 'blockNumber', type: 'uint64' },\n { name: 'startGatewayActivityNonce', type: 'uint64' },\n { name: 'endGatewayActivityNonce', type: 'uint64' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\nexport async function buildGatewayActivityProofPayload(\n client: IArgonQueryable & Pick<ArgonClient, 'consts'>,\n options: EthereumExecutionSource & {\n gatewayAddress: Hex;\n throughExecutionBlockNumber?: bigint;\n },\n): Promise<EthereumGatewayActivityProofPayload | null> {\n const bounds = getGatewayProofBounds(client);\n const discovered = await discoverGatewayActivities(client, options);\n if (!discovered) {\n return null;\n }\n\n const executionClient = getExecutionClient(options);\n const proofChunks = chunkGatewayActivitiesForProof(\n discovered.activities,\n bounds.activitiesPerReceiptProof,\n );\n const argonFinalizedExecutionHeaderPlan = await selectArgonFinalizedExecutionHeader(\n client,\n executionClient,\n proofChunks[0],\n bounds.sharedHeaderDepth,\n );\n if (!argonFinalizedExecutionHeaderPlan) {\n return null;\n }\n\n const acceptedProofChunks = await collectProofChunksForArgonFinalizedExecutionHeader(\n executionClient,\n proofChunks,\n argonFinalizedExecutionHeaderPlan,\n bounds.receiptProofsPerExtrinsic,\n );\n if (acceptedProofChunks.length === 0) {\n return null;\n }\n\n const acceptedActivities = acceptedProofChunks.flatMap(({ activities }) => activities);\n const proof = await buildEthereumEventProof(\n options,\n argonFinalizedExecutionHeaderPlan.argonFinalizedExecutionHeader,\n acceptedProofChunks.map(({ locatorBlock }) => locatorBlock),\n );\n\n return {\n previousGatewayActivityNonce: discovered.previousGatewayActivityNonce,\n proof,\n gatewayActivityNonceRange: {\n start: acceptedActivities[0].gatewayState.gatewayActivityNonce,\n end: acceptedActivities.at(-1)!.gatewayState.gatewayActivityNonce,\n },\n executionBlockNumberRange: {\n start: acceptedActivities[0].blockNumber,\n end: acceptedActivities.at(-1)!.blockNumber,\n },\n activities: acceptedActivities,\n };\n}\n\nasync function loadActivityBlockLocator(\n executionClient: EthereumExecutionClient,\n gatewayAddress: Hex,\n locatorIndex: bigint,\n cache: Map<bigint, MintingGatewayActivityBlockLocator>,\n): Promise<MintingGatewayActivityBlockLocator> {\n const cached = cache.get(locatorIndex);\n if (cached) {\n return cached;\n }\n\n let locator: readonly [bigint, bigint, bigint, Hex];\n\n try {\n locator = await executionClient.readContract({\n abi: activityBlockLocatorAbi,\n address: gatewayAddress,\n functionName: 'activityBlockLocators',\n args: [locatorIndex],\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (\n !message.includes('out of bounds') &&\n !message.includes('Decode') &&\n !message.includes('decode')\n ) {\n throw error;\n }\n\n const legacyLocator = await executionClient.readContract({\n abi: legacyActivityBlockLocatorAbi,\n address: gatewayAddress,\n functionName: 'activityBlockLocators',\n args: [locatorIndex],\n });\n const [blockNumber, startGatewayActivityNonce, endGatewayActivityNonce] = legacyLocator;\n const loaded: MintingGatewayActivityBlockLocator = {\n blockNumber,\n startGatewayActivityNonce,\n endGatewayActivityNonce,\n };\n cache.set(locatorIndex, loaded);\n return loaded;\n }\n\n const [blockNumber, startGatewayActivityNonce, endGatewayActivityNonce, activityRoot] = locator;\n const loaded: MintingGatewayActivityBlockLocator = {\n blockNumber,\n startGatewayActivityNonce,\n endGatewayActivityNonce,\n activityRoot,\n };\n cache.set(locatorIndex, loaded);\n return loaded;\n}\n\nasync function findFirstUncoveredActivityBlockLocatorIndex(\n executionClient: EthereumExecutionClient,\n gatewayAddress: Hex,\n latestLocatorIndex: bigint,\n previousGatewayActivityNonce: bigint,\n cache: Map<bigint, MintingGatewayActivityBlockLocator>,\n): Promise<bigint | null> {\n let low = 1n;\n let high = latestLocatorIndex;\n let firstUncoveredIndex: bigint | null = null;\n\n while (low <= high) {\n const middle = (low + high) / 2n;\n const locator = await loadActivityBlockLocator(executionClient, gatewayAddress, middle, cache);\n\n if (locator.endGatewayActivityNonce > previousGatewayActivityNonce) {\n firstUncoveredIndex = middle;\n high = middle - 1n;\n continue;\n }\n\n low = middle + 1n;\n }\n\n return firstUncoveredIndex;\n}\n\nexport async function discoverGatewayActivities(\n client: IArgonQueryable,\n options: EthereumExecutionSource & {\n gatewayAddress: Hex;\n throughExecutionBlockNumber?: bigint;\n },\n): Promise<DiscoveredGatewayActivities | null> {\n const executionClient = getExecutionClient(options);\n const gatewayAddress = getAddress(options.gatewayAddress);\n const latestLocatorIndex = await executionClient.readContract({\n abi: mintingGatewayAbi,\n address: gatewayAddress,\n functionName: 'latestActivityBlockLocatorIndex',\n });\n if (latestLocatorIndex === 0n) {\n return null;\n }\n\n const currentGatewayState =\n await client.query.crosschainTransfer.gatewayStateBySourceChain('Ethereum');\n const previousGatewayActivityNonce = currentGatewayState.isSome\n ? currentGatewayState.unwrap().gatewayActivityNonce.toBigInt()\n : 0n;\n const locatorCache = new Map<bigint, MintingGatewayActivityBlockLocator>();\n const firstLocatorIndex = await findFirstUncoveredActivityBlockLocatorIndex(\n executionClient,\n gatewayAddress,\n latestLocatorIndex,\n previousGatewayActivityNonce,\n locatorCache,\n );\n if (!firstLocatorIndex) {\n return null;\n }\n\n const activities: EthereumGatewayActivity[] = [];\n let expectedGatewayActivityNonce = previousGatewayActivityNonce + 1n;\n\n for (\n let locatorIndex = firstLocatorIndex;\n locatorIndex <= latestLocatorIndex;\n locatorIndex += 1n\n ) {\n const locator = await loadActivityBlockLocator(\n executionClient,\n gatewayAddress,\n locatorIndex,\n locatorCache,\n );\n if (\n options.throughExecutionBlockNumber !== undefined &&\n locator.blockNumber > options.throughExecutionBlockNumber\n ) {\n break;\n }\n if (locator.endGatewayActivityNonce < expectedGatewayActivityNonce) {\n continue;\n }\n\n const blockActivities = await loadGatewayActivitiesForLocator(\n executionClient,\n gatewayAddress,\n locator,\n expectedGatewayActivityNonce,\n );\n activities.push(...blockActivities);\n expectedGatewayActivityNonce = locator.endGatewayActivityNonce + 1n;\n }\n\n if (activities.length === 0) {\n return null;\n }\n\n return {\n previousGatewayActivityNonce,\n activities,\n };\n}\n\nasync function loadGatewayActivitiesForLocator(\n executionClient: EthereumExecutionClient,\n gatewayAddress: Hex,\n locator: MintingGatewayActivityBlockLocator,\n expectedGatewayActivityNonce: bigint,\n): Promise<EthereumGatewayActivity[]> {\n const blockLogs = await retryWhileExecutionRpcIndexing(() =>\n executionClient.getLogs({\n address: gatewayAddress,\n fromBlock: locator.blockNumber,\n toBlock: locator.blockNumber,\n }),\n );\n const activities = blockLogs\n .flatMap(log => {\n try {\n return [toEthereumGatewayActivity(log)];\n } catch {\n return [];\n }\n })\n .sort((left, right) =>\n left.gatewayState.gatewayActivityNonce < right.gatewayState.gatewayActivityNonce ? -1 : 1,\n );\n const remainingActivities = activities.filter(\n activity =>\n activity.gatewayState.gatewayActivityNonce >= expectedGatewayActivityNonce &&\n activity.gatewayState.gatewayActivityNonce <= locator.endGatewayActivityNonce,\n );\n if (\n remainingActivities.length === 0 ||\n remainingActivities[0].gatewayState.gatewayActivityNonce !== expectedGatewayActivityNonce\n ) {\n throw new Error(`Gateway block ${locator.blockNumber} contains uncovered gateway activity`);\n }\n\n let previousNonce = expectedGatewayActivityNonce - 1n;\n for (const activity of remainingActivities) {\n if (activity.gatewayState.gatewayActivityNonce !== previousNonce + 1n) {\n throw new Error(\n `Gateway block ${locator.blockNumber} contains a gap in gateway activity coverage`,\n );\n }\n previousNonce = activity.gatewayState.gatewayActivityNonce;\n }\n\n if (previousNonce !== locator.endGatewayActivityNonce) {\n throw new Error(`Gateway block ${locator.blockNumber} contains uncovered gateway activity`);\n }\n\n return remainingActivities;\n}\n\nfunction toEthereumGatewayActivity(log: EthereumBlockLog): EthereumGatewayActivity {\n if (\n !log.transactionHash ||\n log.transactionIndex == null ||\n log.logIndex == null ||\n !log.blockHash ||\n log.blockNumber == null\n ) {\n throw new Error('Execution log is missing indexed receipt metadata');\n }\n\n return {\n txHash: log.transactionHash,\n transactionIndex: Number(log.transactionIndex),\n logIndex: Number(log.logIndex),\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n ...decodeEthereumGatewayActivityLog(log),\n };\n}\n\nfunction chunkGatewayActivitiesForProof(\n activities: EthereumGatewayActivity[],\n maxActivitiesPerReceiptProof: number,\n): GatewayActivityProofChunk[] {\n const chunks: GatewayActivityProofChunk[] = [];\n let currentBlockHash: Hex | undefined;\n let currentBlockActivities: EthereumGatewayActivity[] = [];\n\n const flushBlock = () => {\n if (!currentBlockHash || currentBlockActivities.length === 0) {\n return;\n }\n\n for (\n let start = 0;\n start < currentBlockActivities.length;\n start += maxActivitiesPerReceiptProof\n ) {\n const chunkActivities = currentBlockActivities.slice(\n start,\n start + maxActivitiesPerReceiptProof,\n );\n const locatorsByReceipt = new Map<Hex, EthereumEventLocator>();\n\n for (const activity of chunkActivities) {\n const existing = locatorsByReceipt.get(activity.txHash);\n if (existing) {\n existing.logIndexes!.push(activity.logIndex);\n continue;\n }\n\n locatorsByReceipt.set(activity.txHash, {\n txHash: activity.txHash,\n logIndexes: [activity.logIndex],\n });\n }\n\n chunks.push({\n activities: chunkActivities,\n locatorBlock: [...locatorsByReceipt.values()],\n });\n }\n };\n\n for (const activity of activities) {\n if (currentBlockHash && activity.blockHash.toLowerCase() !== currentBlockHash.toLowerCase()) {\n flushBlock();\n currentBlockActivities = [];\n }\n\n currentBlockHash = activity.blockHash;\n currentBlockActivities.push(activity);\n }\n\n flushBlock();\n return chunks;\n}\n\nfunction getGatewayProofBounds(client: Pick<ArgonClient, 'consts'>): GatewayProofBounds {\n const activitiesPerReceiptProof =\n client.consts.crosschainTransfer.maxActivitiesPerReceiptProof.toNumber();\n if (!Number.isInteger(activitiesPerReceiptProof) || activitiesPerReceiptProof < 1) {\n throw new Error('Gateway proof requires maxActivitiesPerReceiptProof to be a positive integer');\n }\n\n const receiptProofsPerExtrinsic =\n client.consts.crosschainTransfer.maxReceiptProofsPerExtrinsic.toNumber();\n if (!Number.isInteger(receiptProofsPerExtrinsic) || receiptProofsPerExtrinsic < 1) {\n throw new Error('Gateway proof requires maxReceiptProofsPerExtrinsic to be a positive integer');\n }\n\n return {\n activitiesPerReceiptProof,\n receiptProofsPerExtrinsic,\n sharedHeaderDepth: client.consts.crosschainTransfer.maxProofExecutionHeaderDepth.toNumber(),\n };\n}\n\nasync function selectArgonFinalizedExecutionHeader(\n client: IArgonQueryable,\n executionClient: EthereumExecutionClient,\n earliestProofChunk: GatewayActivityProofChunk,\n sharedHeaderDepth: number,\n): Promise<ArgonFinalizedExecutionHeaderPlan | null> {\n const earliestBlockHash = earliestProofChunk.activities[0].blockHash;\n const earliestBlockNumber = earliestProofChunk.activities[0].blockNumber;\n const earliestTargetHeader = await loadExecutionHeader(executionClient, earliestBlockHash);\n const latestArgonFinalizedExecutionHeader = await getLatestArgonFinalizedExecutionHeader(client);\n\n if (earliestBlockNumber > latestArgonFinalizedExecutionHeader.blockNumber) {\n return null;\n }\n\n const maxArgonFinalizedExecutionHeaderBlockNumber =\n earliestBlockNumber + BigInt(sharedHeaderDepth);\n\n if (\n latestArgonFinalizedExecutionHeader.blockNumber <= maxArgonFinalizedExecutionHeaderBlockNumber\n ) {\n try {\n return {\n argonFinalizedExecutionHeader: latestArgonFinalizedExecutionHeader,\n earliestTargetHeader,\n targetToArgonFinalizedHeaderChain: await buildExecutionHeaderChain(\n executionClient,\n earliestTargetHeader,\n latestArgonFinalizedExecutionHeader,\n ),\n };\n } catch (error) {\n if (!(error instanceof ArgonFinalizedExecutionHeaderPathError)) {\n throw error;\n }\n }\n }\n\n const scannedArgonFinalizedExecutionHeader =\n await loadRetainedExecutionHeaderAnchorAtOrAfterBlock(client, earliestBlockNumber);\n if (\n scannedArgonFinalizedExecutionHeader &&\n scannedArgonFinalizedExecutionHeader.blockNumber <= maxArgonFinalizedExecutionHeaderBlockNumber\n ) {\n return {\n argonFinalizedExecutionHeader: scannedArgonFinalizedExecutionHeader,\n earliestTargetHeader,\n targetToArgonFinalizedHeaderChain: await buildExecutionHeaderChain(\n executionClient,\n earliestTargetHeader,\n scannedArgonFinalizedExecutionHeader,\n ),\n };\n }\n\n throw new Error(\n 'Oldest uncovered gateway activity exceeds the Argon finalized execution-header window',\n );\n}\n\nexport async function loadRetainedExecutionHeaderAnchorAtOrAfterBlock(\n client: IArgonQueryable,\n earliestBlockNumber: bigint,\n): Promise<ArgonFinalizedExecutionHeader | null> {\n // The runtime stores this index under `block_number.to_be_bytes()`, so a fixed-width hex key\n // preserves the same big-endian ordering here. We first try the exact block number, then seek\n // to the first later retained key when that exact anchor is not present.\n const scanBlockNumberKey = toHex(earliestBlockNumber, { size: 8 });\n const executionHeaderAnchorsByBlockNumber =\n client.query.ethereumVerifier.executionHeaderAnchorsByBlockNumber;\n const exactAnchor = await executionHeaderAnchorsByBlockNumber(scanBlockNumberKey);\n const matchingEntry = exactAnchor.isSome\n ? exactAnchor\n : (\n await executionHeaderAnchorsByBlockNumber.entriesPaged({\n args: [],\n pageSize: 1,\n startKey: executionHeaderAnchorsByBlockNumber.key(scanBlockNumberKey),\n })\n )[0]?.[1];\n const scannedAnchor = matchingEntry?.isSome ? matchingEntry.unwrap() : null;\n\n if (!scannedAnchor) {\n return null;\n }\n\n return {\n blockHash: scannedAnchor.blockHash.toHex(),\n blockNumber: scannedAnchor.blockNumber.toBigInt(),\n };\n}\n\nasync function collectProofChunksForArgonFinalizedExecutionHeader(\n executionClient: EthereumExecutionClient,\n proofChunks: GatewayActivityProofChunk[],\n plan: ArgonFinalizedExecutionHeaderPlan,\n receiptProofsPerExtrinsic: number,\n): Promise<GatewayActivityProofChunk[]> {\n const acceptedProofChunks: GatewayActivityProofChunk[] = [];\n const loadedTargetHeaders = [\n {\n blockHash: proofChunks[0].activities[0].blockHash,\n targetHeader: plan.earliestTargetHeader,\n },\n ];\n\n for (const proofChunk of proofChunks) {\n if (acceptedProofChunks.length === receiptProofsPerExtrinsic) {\n break;\n }\n\n const blockHash = proofChunk.activities[0].blockHash;\n const blockNumber = proofChunk.activities[0].blockNumber;\n\n if (blockNumber > plan.argonFinalizedExecutionHeader.blockNumber) {\n break;\n }\n\n let targetHeader = loadedTargetHeaders.find(\n loadedHeader => loadedHeader.blockHash.toLowerCase() === blockHash.toLowerCase(),\n )?.targetHeader;\n if (!targetHeader) {\n targetHeader = await loadExecutionHeader(executionClient, blockHash);\n loadedTargetHeaders.push({ blockHash, targetHeader });\n }\n\n if (targetHeader.number === plan.argonFinalizedExecutionHeader.blockNumber) {\n if (blockHash.toLowerCase() !== plan.argonFinalizedExecutionHeader.blockHash.toLowerCase()) {\n break;\n }\n } else {\n const expectedTargetHeaderOnArgonFinalizedChain =\n plan.targetToArgonFinalizedHeaderChain[\n Number(targetHeader.number - plan.earliestTargetHeader.number)\n ];\n if (\n !expectedTargetHeaderOnArgonFinalizedChain ||\n expectedTargetHeaderOnArgonFinalizedChain.blockHash.toLowerCase() !==\n blockHash.toLowerCase()\n ) {\n break;\n }\n }\n\n acceptedProofChunks.push(proofChunk);\n }\n\n return acceptedProofChunks;\n}\n","import camelcaseKeys from 'camelcase-keys';\nimport { type Hex } from 'viem';\nimport type {\n EthereumBeaconConfigSpecResponse,\n EthereumBeaconGenesisResponse,\n EthereumLightClientBootstrapResponse,\n} from './EthereumBeaconTypes';\nimport { buildExecutionHeaderProof, getBeaconJson } from './EthereumBeaconApi';\nimport {\n discoverGatewayActivities,\n loadRetainedExecutionHeaderAnchorAtOrAfterBlock,\n} from './EthereumGatewayActivityProof';\nimport { getExecutionClient, type EthereumExecutionSource } from './EthereumExecution';\nimport type { ArgonClient, IArgonQueryable } from './index';\n\nexport type EthereumExecutionHeaderBackfillPayload = {\n targetExecutionBlockNumber: bigint;\n expectedBeaconRoot: Hex;\n header: {\n slot: string;\n proposerIndex: string;\n parentRoot: Hex;\n stateRoot: Hex;\n bodyRoot: Hex;\n };\n executionHeaderProof: ReturnType<typeof buildExecutionHeaderProof>;\n executionBlockNumber: bigint;\n executionBlockHash: Hex;\n};\n\ntype EthereumBeaconHeadersResponse = {\n data: Array<{\n root: Hex;\n }>;\n};\n\nexport async function buildGatewayExecutionHeaderBackfill(\n client: IArgonQueryable & Pick<ArgonClient, 'consts'>,\n options: EthereumExecutionSource & {\n beaconApiUrl: string;\n gatewayAddress: Hex;\n throughExecutionBlockNumber?: bigint;\n targetExecutionBlockNumber?: bigint;\n },\n): Promise<EthereumExecutionHeaderBackfillPayload | null> {\n const targetExecutionBlockNumber =\n options.targetExecutionBlockNumber ??\n (await discoverGatewayActivities(client, options))?.activities[0]?.blockNumber;\n if (targetExecutionBlockNumber == null) {\n return null;\n }\n\n const maxProofExecutionHeaderDepth =\n client.consts.crosschainTransfer.maxProofExecutionHeaderDepth.toNumber();\n if (!Number.isInteger(maxProofExecutionHeaderDepth) || maxProofExecutionHeaderDepth < 0) {\n throw new Error(\n 'Gateway backfill requires maxProofExecutionHeaderDepth to be a non-negative integer',\n );\n }\n\n const retainedAnchor = await loadRetainedExecutionHeaderAnchorAtOrAfterBlock(\n client,\n targetExecutionBlockNumber,\n );\n if (\n retainedAnchor &&\n retainedAnchor.blockNumber <= targetExecutionBlockNumber + BigInt(maxProofExecutionHeaderDepth)\n ) {\n return null;\n }\n\n const latestFinalizedBlockRoot = (await client.query.ethereumVerifier.latestFinalizedBlockRoot())\n .toHex()\n .toLowerCase() as Hex;\n const finalizedState =\n await client.query.ethereumVerifier.finalizedBeaconState(latestFinalizedBlockRoot);\n if (finalizedState.isNone) {\n return null;\n }\n const finalizedStateValue = finalizedState.unwrap();\n\n const executionClient = getExecutionClient(options);\n const [spec, genesis, targetExecutionHeader] = await Promise.all([\n getBeaconJson<EthereumBeaconConfigSpecResponse>(options.beaconApiUrl, '/eth/v1/config/spec'),\n getBeaconJson<EthereumBeaconGenesisResponse>(options.beaconApiUrl, '/eth/v1/beacon/genesis'),\n executionClient.getBlock({ blockNumber: targetExecutionBlockNumber }),\n ]);\n const slotsPerEpoch = BigInt(spec.data.SLOTS_PER_EPOCH);\n const secondsPerSlot = BigInt(spec.data.SECONDS_PER_SLOT);\n if (slotsPerEpoch <= 0n) {\n throw new Error('Beacon API returned an invalid SLOTS_PER_EPOCH value');\n }\n if (secondsPerSlot <= 0n) {\n throw new Error('Beacon API returned an invalid SECONDS_PER_SLOT value');\n }\n\n const latestFinalizedSlot = finalizedStateValue.slot.toBigInt();\n const beaconGenesisTime = BigInt(genesis.data.genesis_time);\n let scanSlot =\n targetExecutionHeader.timestamp <= beaconGenesisTime\n ? 0n\n : (targetExecutionHeader.timestamp - beaconGenesisTime) / secondsPerSlot;\n\n if (scanSlot >= slotsPerEpoch) {\n scanSlot -= slotsPerEpoch;\n } else {\n scanSlot = 0n;\n }\n if (scanSlot > latestFinalizedSlot) {\n scanSlot = latestFinalizedSlot;\n }\n const maxScanSlot =\n scanSlot + slotsPerEpoch * 8n < latestFinalizedSlot\n ? scanSlot + slotsPerEpoch * 8n\n : latestFinalizedSlot;\n\n while (scanSlot <= maxScanSlot) {\n let headers: EthereumBeaconHeadersResponse = { data: [] };\n try {\n headers = await getBeaconJson<EthereumBeaconHeadersResponse>(\n options.beaconApiUrl,\n `/eth/v1/beacon/headers?slot=${scanSlot}`,\n );\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (\n !message.includes(`/eth/v1/beacon/headers?slot=${scanSlot}`) ||\n !message.includes(': 404')\n ) {\n throw error;\n }\n }\n\n const checkpointHeader = headers.data[0];\n\n if (checkpointHeader) {\n try {\n const bootstrap = await getBeaconJson<EthereumLightClientBootstrapResponse>(\n options.beaconApiUrl,\n `/eth/v1/beacon/light_client/bootstrap/${checkpointHeader.root}`,\n );\n const executionBlockNumber = BigInt(bootstrap.data.header.execution.block_number);\n\n if (executionBlockNumber >= targetExecutionBlockNumber) {\n return {\n targetExecutionBlockNumber,\n expectedBeaconRoot: checkpointHeader.root.toLowerCase() as Hex,\n header: camelcaseKeys(\n bootstrap.data.header.beacon,\n ) as EthereumExecutionHeaderBackfillPayload['header'],\n executionHeaderProof: buildExecutionHeaderProof(bootstrap.data.header),\n executionBlockNumber,\n executionBlockHash: bootstrap.data.header.execution.block_hash.toLowerCase() as Hex,\n };\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (\n !message.includes('/eth/v1/beacon/light_client/bootstrap/') ||\n !message.includes(': 404')\n ) {\n throw error;\n }\n }\n }\n\n scanSlot += 1n;\n }\n\n throw new Error(\n `Unable to find a historical light-client bootstrap near execution block ${targetExecutionBlockNumber} using ${options.beaconApiUrl}; try a beacon API that exposes historical /eth/v1/beacon/light_client/bootstrap roots`,\n );\n}\n\nexport async function buildGatewayExecutionHeaderBackfills(\n client: IArgonQueryable & Pick<ArgonClient, 'consts'>,\n options: EthereumExecutionSource & {\n beaconApiUrl: string;\n gatewayAddress: Hex;\n throughExecutionBlockNumber?: bigint;\n },\n): Promise<EthereumExecutionHeaderBackfillPayload[]> {\n const discovered = await discoverGatewayActivities(client, options);\n if (!discovered) {\n return [];\n }\n\n const maxProofExecutionHeaderDepth =\n client.consts.crosschainTransfer.maxProofExecutionHeaderDepth.toNumber();\n if (!Number.isInteger(maxProofExecutionHeaderDepth) || maxProofExecutionHeaderDepth < 0) {\n throw new Error(\n 'Gateway backfill requires maxProofExecutionHeaderDepth to be a non-negative integer',\n );\n }\n\n const seenTargetBlocks = new Set<bigint>();\n const targetExecutionBlockNumbers: bigint[] = [];\n for (const activity of discovered.activities) {\n if (seenTargetBlocks.has(activity.blockNumber)) {\n continue;\n }\n seenTargetBlocks.add(activity.blockNumber);\n targetExecutionBlockNumbers.push(activity.blockNumber);\n }\n\n const payloads: EthereumExecutionHeaderBackfillPayload[] = [];\n let coveringExecutionBlockNumber: bigint | null = null;\n\n for (const targetExecutionBlockNumber of targetExecutionBlockNumbers) {\n if (\n coveringExecutionBlockNumber !== null &&\n coveringExecutionBlockNumber >= targetExecutionBlockNumber &&\n coveringExecutionBlockNumber <=\n targetExecutionBlockNumber + BigInt(maxProofExecutionHeaderDepth)\n ) {\n continue;\n }\n\n const retainedAnchor = await loadRetainedExecutionHeaderAnchorAtOrAfterBlock(\n client,\n targetExecutionBlockNumber,\n );\n if (\n retainedAnchor &&\n retainedAnchor.blockNumber <=\n targetExecutionBlockNumber + BigInt(maxProofExecutionHeaderDepth)\n ) {\n coveringExecutionBlockNumber = retainedAnchor.blockNumber;\n continue;\n }\n\n const payload = await buildGatewayExecutionHeaderBackfill(client, {\n ...options,\n targetExecutionBlockNumber,\n });\n if (!payload) {\n throw new Error(\n `Unable to build a gateway execution-header backfill for execution block ${targetExecutionBlockNumber}`,\n );\n }\n\n payloads.push(payload);\n coveringExecutionBlockNumber = payload.executionBlockNumber;\n }\n\n return payloads;\n}\n","import { type Hex } from 'viem';\nimport type { EthereumLightClientHeader } from './EthereumBeaconTypes';\n\nexport function buildExecutionHeaderProof(finalizedHeader: EthereumLightClientHeader) {\n return {\n executionHeader: buildExecutionPayloadHeader(finalizedHeader.execution),\n executionBranch: finalizedHeader.execution_branch.map(witness => witness.toLowerCase() as Hex),\n };\n}\n\nexport async function getBeaconJson<T>(beaconApiUrl: string, path: string): Promise<T> {\n const response = await fetch(\n new URL(path, beaconApiUrl.endsWith('/') ? beaconApiUrl : `${beaconApiUrl}/`),\n );\n\n if (!response.ok) {\n throw new Error(\n `Beacon API request failed for ${path}: ${response.status} ${response.statusText}`,\n );\n }\n\n return (await response.json()) as T;\n}\n\nfunction buildExecutionPayloadHeader(header: EthereumLightClientHeader['execution']) {\n const executionHeader = {\n parentHash: header.parent_hash,\n feeRecipient: header.fee_recipient,\n stateRoot: header.state_root,\n receiptsRoot: header.receipts_root,\n logsBloom: header.logs_bloom,\n prevRandao: header.prev_randao,\n blockNumber: header.block_number,\n gasLimit: header.gas_limit,\n gasUsed: header.gas_used,\n timestamp: header.timestamp,\n extraData: header.extra_data,\n baseFeePerGas: header.base_fee_per_gas,\n blockHash: header.block_hash,\n transactionsRoot: header.transactions_root,\n withdrawalsRoot: header.withdrawals_root,\n };\n\n if (header.blob_gas_used && header.excess_blob_gas) {\n return {\n Deneb: {\n ...executionHeader,\n blobGasUsed: header.blob_gas_used,\n excessBlobGas: header.excess_blob_gas,\n },\n };\n }\n\n return { Capella: executionHeader };\n}\n","import camelcaseKeys from 'camelcase-keys';\nimport type { SubmittableExtrinsic } from '@polkadot/api/promise/types';\nimport type {\n EthereumBeaconConfigSpecResponse,\n EthereumBeaconGenesisResponse,\n EthereumBeaconHeaderDetailsResponse,\n EthereumLightClientBootstrapResponse,\n EthereumLightClientUpdate,\n EthereumLightClientUpdatesResponse,\n} from './EthereumBeaconTypes';\nimport { buildExecutionHeaderProof, getBeaconJson } from './EthereumBeaconApi';\nimport type { ArgonClient } from './index';\nimport { type Hex, hexToBytes } from 'viem';\n\ntype BeaconPreset = 'mainnet' | 'minimal';\ntype BeaconNetworkParams = {\n epochsPerSyncCommitteePeriod: bigint;\n preset: BeaconPreset;\n slotsPerEpoch: bigint;\n slotsPerHistoricalRoot: bigint;\n};\ntype EthereumBeaconSyncState =\n | {\n isBootstrapped: false;\n hasNextSyncCommittee: boolean;\n latestFinalizedBlockRoot: string;\n latestSyncCommitteeUpdatePeriod: bigint;\n headerInterval: bigint;\n }\n | {\n isBootstrapped: true;\n hasNextSyncCommittee: boolean;\n latestFinalizedBlockRoot: string;\n latestFinalizedSlot: bigint;\n nextRecommendedFinalizedSlot: bigint;\n latestSyncCommitteeUpdatePeriod: bigint;\n headerInterval: bigint;\n };\n\nconst lightClientUpdateRetryIntervalMs = 500;\nconst lightClientUpdateRetryTimeoutMs = 30_000;\nconst expectedBeaconPresetPromises = new WeakMap<ArgonClient, Promise<BeaconPreset | undefined>>();\nconst beaconNetworkParamsPromises = new Map<string, Promise<BeaconNetworkParams>>();\n\nexport async function getEthereumBeaconSyncBootstrapTx(\n client: ArgonClient,\n beaconApiUrl: string,\n): Promise<SubmittableExtrinsic> {\n const expectedPreset = await getExpectedBeaconPreset(client);\n const [genesis, spec] = await Promise.all([\n getBeaconJson<EthereumBeaconGenesisResponse>(beaconApiUrl, '/eth/v1/beacon/genesis'),\n getBeaconJson<EthereumBeaconConfigSpecResponse>(beaconApiUrl, '/eth/v1/config/spec'),\n ]);\n const specData = spec.data;\n parseBeaconNetworkParams(specData, expectedPreset);\n const startedAt = Date.now();\n let lastError: Error | undefined;\n let bootstrap: EthereumLightClientBootstrapResponse | undefined;\n\n while (Date.now() - startedAt < lightClientUpdateRetryTimeoutMs) {\n try {\n const finalizedHeader = await getBeaconJson<EthereumBeaconHeaderDetailsResponse>(\n beaconApiUrl,\n '/eth/v1/beacon/headers/finalized',\n );\n bootstrap = await getBeaconJson<EthereumLightClientBootstrapResponse>(\n beaconApiUrl,\n `/eth/v1/beacon/light_client/bootstrap/${finalizedHeader.data.root}`,\n );\n lastError = undefined;\n break;\n } catch (error) {\n if (!(error instanceof Error)) {\n throw error;\n }\n lastError = error;\n await new Promise(resolve => setTimeout(resolve, lightClientUpdateRetryIntervalMs));\n }\n }\n\n if (!bootstrap) {\n throw (\n lastError ??\n new Error('Unable to fetch ethereum beacon bootstrap before the retry timeout elapsed')\n );\n }\n\n return client.tx.ethereumVerifier.forceCheckpoint(\n {\n header: camelcaseKeys(bootstrap.data.header.beacon),\n currentSyncCommittee: camelcaseKeys(bootstrap.data.current_sync_committee),\n currentSyncCommitteeBranch: bootstrap.data.current_sync_committee_branch,\n validatorsRoot: genesis.data.genesis_validators_root,\n executionHeaderProof: buildExecutionHeaderProof(bootstrap.data.header),\n },\n {\n genesis: {\n version: genesis.data.genesis_fork_version,\n epoch: 0n,\n },\n altair: buildFork(specData, 'ALTAIR'),\n bellatrix: buildFork(specData, 'BELLATRIX'),\n capella: buildFork(specData, 'CAPELLA'),\n deneb: buildFork(specData, 'DENEB'),\n electra: buildFork(specData, 'ELECTRA'),\n fulu: buildFork(specData, 'FULU'),\n },\n );\n}\n\nexport async function getNextEthereumBeaconSyncTxs(\n client: ArgonClient,\n beaconApiUrl: string,\n): Promise<SubmittableExtrinsic[]> {\n const state = await getEthereumBeaconSyncState(client);\n\n if (!state.isBootstrapped) {\n return [];\n }\n\n const expectedPreset = await getExpectedBeaconPreset(client);\n const beaconNetworkParams = await getBeaconNetworkParams(beaconApiUrl, expectedPreset);\n const storedPeriod = computePeriod(state.latestFinalizedSlot, beaconNetworkParams);\n const maxBridgeableFinalizedSlot =\n state.latestFinalizedSlot + beaconNetworkParams.slotsPerHistoricalRoot;\n const txs: SubmittableExtrinsic[] = [];\n const startedAt = Date.now();\n\n while (Date.now() - startedAt < lightClientUpdateRetryTimeoutMs) {\n let finalityUpdate: EthereumLightClientUpdate;\n\n try {\n finalityUpdate = (\n await getBeaconJson<{ data: EthereumLightClientUpdate }>(\n beaconApiUrl,\n '/eth/v1/beacon/light_client/finality_update',\n )\n ).data;\n } catch (error) {\n if (!isRetryableBeaconLightClientError(error)) {\n throw error;\n }\n\n await new Promise(resolve => setTimeout(resolve, lightClientUpdateRetryIntervalMs));\n continue;\n }\n\n const missingNextSyncCommittee = !state.hasNextSyncCommittee;\n const finalityFinalizedSlot = BigInt(finalityUpdate.finalized_header.beacon.slot);\n const finalityFinalizedPeriod = computePeriod(finalityFinalizedSlot, beaconNetworkParams);\n const requiredCommitteePeriod = getRequiredCommitteePeriod({\n storedPeriod,\n missingNextSyncCommittee,\n latestSyncCommitteeUpdatePeriod: state.latestSyncCommitteeUpdatePeriod,\n finalityFinalizedPeriod,\n });\n const needsCommitteeData = requiredCommitteePeriod !== undefined;\n const finalityCarriesRequiredCommittee = updateCarriesCommitteeForPeriod(\n finalityUpdate,\n requiredCommitteePeriod,\n beaconNetworkParams,\n );\n const finalityIsBridgeable = finalityFinalizedSlot <= maxBridgeableFinalizedSlot;\n const needsCurrentPeriodUpdate = needsCommitteeData && !finalityCarriesRequiredCommittee;\n const needsPeriodUpdate = needsCurrentPeriodUpdate || !finalityIsBridgeable;\n let submitUpdate: EthereumLightClientUpdate | undefined;\n\n if (finalityIsBridgeable && !needsCurrentPeriodUpdate) {\n submitUpdate = finalityUpdate;\n }\n\n if (needsPeriodUpdate) {\n let periodUpdates: EthereumLightClientUpdatesResponse;\n const periodUpdateStartPeriod = requiredCommitteePeriod ?? storedPeriod;\n\n try {\n periodUpdates = await getBeaconJson<EthereumLightClientUpdatesResponse>(\n beaconApiUrl,\n `/eth/v1/beacon/light_client/updates?count=1&start_period=${periodUpdateStartPeriod}`,\n );\n } catch (error) {\n if (!isRetryableBeaconLightClientError(error)) {\n throw error;\n }\n\n await new Promise(resolve => setTimeout(resolve, lightClientUpdateRetryIntervalMs));\n continue;\n }\n\n const periodUpdate = periodUpdates[0]?.data;\n const periodUpdateFinalizedSlot = periodUpdate\n ? BigInt(periodUpdate.finalized_header.beacon.slot)\n : undefined;\n const hasBridgeablePeriodUpdate =\n periodUpdateFinalizedSlot !== undefined &&\n periodUpdateFinalizedSlot <= maxBridgeableFinalizedSlot;\n let periodUpdateHasRequiredCommittee = !needsCommitteeData;\n\n if (periodUpdate && needsCommitteeData) {\n periodUpdateHasRequiredCommittee = updateCarriesCommitteeForPeriod(\n periodUpdate,\n requiredCommitteePeriod,\n beaconNetworkParams,\n );\n }\n\n if (periodUpdate && hasBridgeablePeriodUpdate && periodUpdateHasRequiredCommittee) {\n submitUpdate = periodUpdate;\n }\n }\n\n if (needsCurrentPeriodUpdate && !submitUpdate) {\n return [];\n }\n\n if (needsPeriodUpdate && !submitUpdate) {\n await new Promise(resolve => setTimeout(resolve, lightClientUpdateRetryIntervalMs));\n continue;\n }\n\n // make sure the update we choose has a supermajority of sync committee participants\n if (\n submitUpdate &&\n !hasSyncCommitteeSupermajority(submitUpdate.sync_aggregate.sync_committee_bits)\n ) {\n await new Promise(resolve => setTimeout(resolve, lightClientUpdateRetryIntervalMs));\n continue;\n }\n\n if (submitUpdate) {\n const finalizedSlot = BigInt(submitUpdate.finalized_header.beacon.slot);\n const attestedSlot = BigInt(submitUpdate.attested_header.beacon.slot);\n\n const finalizedPeriod = computePeriod(finalizedSlot, beaconNetworkParams);\n const attestedPeriod = computePeriod(attestedSlot, beaconNetworkParams);\n\n const isNewerThanStoredFinalized = finalizedSlot > state.latestFinalizedSlot;\n const hasReachedNextFinalizedWindow = finalizedSlot >= state.nextRecommendedFinalizedSlot;\n const canAdvanceFinalized = isNewerThanStoredFinalized && hasReachedNextFinalizedWindow;\n const advancesSyncCommitteePeriod = finalizedPeriod > state.latestSyncCommitteeUpdatePeriod;\n const canUseNextSyncCommittee = missingNextSyncCommittee || advancesSyncCommitteePeriod;\n const includesNextSyncCommittee =\n hasNextSyncCommitteeUpdate(submitUpdate) && canUseNextSyncCommittee;\n const fillsMissingNextSyncCommittee =\n missingNextSyncCommittee && includesNextSyncCommittee && attestedPeriod === storedPeriod;\n const advancesKnownSyncCommitteePeriod =\n !missingNextSyncCommittee && includesNextSyncCommittee;\n\n if (\n canAdvanceFinalized ||\n fillsMissingNextSyncCommittee ||\n advancesKnownSyncCommitteePeriod\n ) {\n const nextSyncCommitteeUpdate = includesNextSyncCommittee\n ? {\n nextSyncCommitteeUpdate: {\n nextSyncCommittee: camelcaseKeys(submitUpdate.next_sync_committee!),\n nextSyncCommitteeBranch: submitUpdate.next_sync_committee_branch!,\n },\n }\n : {};\n txs.push(\n client.tx.ethereumVerifier.submit({\n attestedHeader: camelcaseKeys(submitUpdate.attested_header.beacon),\n syncAggregate: camelcaseKeys(submitUpdate.sync_aggregate),\n signatureSlot: submitUpdate.signature_slot,\n ...nextSyncCommitteeUpdate,\n finalizedHeader: camelcaseKeys(submitUpdate.finalized_header.beacon),\n finalityBranch: submitUpdate.finality_branch,\n executionHeaderProof: buildExecutionHeaderProof(submitUpdate.finalized_header),\n }),\n );\n }\n }\n\n break;\n }\n\n return txs;\n}\n\nexport async function getEthereumBeaconSyncState(\n client: ArgonClient,\n): Promise<EthereumBeaconSyncState> {\n const latestFinalizedBlockRoot = (await client.query.ethereumVerifier.latestFinalizedBlockRoot())\n .toHex()\n .toLowerCase();\n const finalizedState =\n await client.query.ethereumVerifier.finalizedBeaconState(latestFinalizedBlockRoot);\n const latestSyncCommitteeUpdatePeriod = (\n await client.query.ethereumVerifier.latestSyncCommitteeUpdatePeriod()\n ).toBigInt();\n const headerInterval = client.consts.ethereumVerifier.freeHeadersInterval.toBigInt();\n const hasNextSyncCommittee = !(\n await client.query.ethereumVerifier.nextSyncCommittee.size()\n ).isZero();\n\n if (finalizedState.isNone) {\n return {\n isBootstrapped: false,\n hasNextSyncCommittee,\n latestFinalizedBlockRoot,\n latestSyncCommitteeUpdatePeriod,\n headerInterval,\n };\n }\n\n const latestFinalizedSlot = finalizedState.unwrap().slot.toBigInt();\n\n return {\n isBootstrapped: true,\n hasNextSyncCommittee,\n latestFinalizedBlockRoot,\n latestFinalizedSlot,\n nextRecommendedFinalizedSlot: latestFinalizedSlot + headerInterval,\n latestSyncCommitteeUpdatePeriod,\n headerInterval,\n };\n}\n\nfunction buildFork(spec: Record<string, string>, name: string) {\n const version = spec[`${name}_FORK_VERSION`];\n const epoch = spec[`${name}_FORK_EPOCH`];\n\n if (!version) throw new Error(`Missing beacon spec value for ${name}_FORK_VERSION`);\n if (!epoch) throw new Error(`Missing beacon spec value for ${name}_FORK_EPOCH`);\n\n return {\n version,\n epoch: BigInt(epoch),\n };\n}\n\nfunction hasNextSyncCommitteeUpdate(\n update?: Pick<EthereumLightClientUpdate, 'next_sync_committee' | 'next_sync_committee_branch'>,\n): boolean {\n return !!update?.next_sync_committee && !!update?.next_sync_committee_branch;\n}\n\nfunction getRequiredCommitteePeriod({\n storedPeriod,\n missingNextSyncCommittee,\n latestSyncCommitteeUpdatePeriod,\n finalityFinalizedPeriod,\n}: {\n storedPeriod: bigint;\n missingNextSyncCommittee: boolean;\n latestSyncCommitteeUpdatePeriod: bigint;\n finalityFinalizedPeriod: bigint;\n}): bigint | undefined {\n if (missingNextSyncCommittee) {\n return storedPeriod;\n }\n\n if (finalityFinalizedPeriod > latestSyncCommitteeUpdatePeriod) {\n return latestSyncCommitteeUpdatePeriod + 1n;\n }\n\n return undefined;\n}\n\nfunction updateCarriesCommitteeForPeriod(\n update: EthereumLightClientUpdate | undefined,\n requiredCommitteePeriod: bigint | undefined,\n beaconNetworkParams: BeaconNetworkParams,\n): boolean {\n if (!update || requiredCommitteePeriod === undefined || !hasNextSyncCommitteeUpdate(update)) {\n return false;\n }\n\n const attestedPeriod = computePeriod(\n BigInt(update.attested_header.beacon.slot),\n beaconNetworkParams,\n );\n const finalizedPeriod = computePeriod(\n BigInt(update.finalized_header.beacon.slot),\n beaconNetworkParams,\n );\n\n return attestedPeriod === requiredCommitteePeriod && finalizedPeriod === requiredCommitteePeriod;\n}\n\nfunction detectBeaconPreset(spec: Record<string, string>): BeaconPreset {\n return spec.SLOTS_PER_HISTORICAL_ROOT === '64' ? 'minimal' : 'mainnet';\n}\n\nasync function getBeaconNetworkParams(\n beaconApiUrl: string,\n expectedPreset?: BeaconPreset,\n): Promise<BeaconNetworkParams> {\n let paramsPromise = beaconNetworkParamsPromises.get(beaconApiUrl);\n\n if (!paramsPromise) {\n paramsPromise = getBeaconJson<EthereumBeaconConfigSpecResponse>(\n beaconApiUrl,\n '/eth/v1/config/spec',\n ).then(({ data }) => parseBeaconNetworkParams(data));\n beaconNetworkParamsPromises.set(beaconApiUrl, paramsPromise);\n }\n\n const beaconNetworkParams = await paramsPromise;\n\n if (expectedPreset && beaconNetworkParams.preset !== expectedPreset) {\n throw new Error(\n `Beacon preset mismatch: chain expects ${expectedPreset}, but endpoint reports ${beaconNetworkParams.preset}`,\n );\n }\n\n return beaconNetworkParams;\n}\n\nfunction parseBeaconNetworkParams(\n spec: Record<string, string>,\n expectedPreset?: BeaconPreset,\n): BeaconNetworkParams {\n const slotsPerEpoch = spec.SLOTS_PER_EPOCH;\n const epochsPerSyncCommitteePeriod = spec.EPOCHS_PER_SYNC_COMMITTEE_PERIOD;\n const slotsPerHistoricalRoot = spec.SLOTS_PER_HISTORICAL_ROOT;\n\n if (!slotsPerEpoch) {\n throw new Error('Missing beacon spec value for SLOTS_PER_EPOCH');\n }\n if (!epochsPerSyncCommitteePeriod) {\n throw new Error('Missing beacon spec value for EPOCHS_PER_SYNC_COMMITTEE_PERIOD');\n }\n if (!slotsPerHistoricalRoot) {\n throw new Error('Missing beacon spec value for SLOTS_PER_HISTORICAL_ROOT');\n }\n\n const preset = detectBeaconPreset(spec);\n\n if (expectedPreset && preset !== expectedPreset) {\n throw new Error(\n `Beacon preset mismatch: chain expects ${expectedPreset}, but endpoint reports ${preset}`,\n );\n }\n\n return {\n preset,\n slotsPerEpoch: BigInt(slotsPerEpoch),\n epochsPerSyncCommitteePeriod: BigInt(epochsPerSyncCommitteePeriod),\n slotsPerHistoricalRoot: BigInt(slotsPerHistoricalRoot),\n };\n}\n\nasync function getExpectedBeaconPreset(client: ArgonClient): Promise<BeaconPreset | undefined> {\n let presetPromise = expectedBeaconPresetPromises.get(client);\n\n if (!presetPromise) {\n const beaconPresetQuery = (\n client.query.ethereumVerifier as {\n beaconPreset?: () => Promise<{\n isMainnet: boolean;\n isMinimal: boolean;\n toString(): string;\n }>;\n }\n ).beaconPreset;\n\n if (!beaconPresetQuery) {\n return;\n }\n\n presetPromise = beaconPresetQuery.call(client.query.ethereumVerifier).then(preset => {\n if (preset.isMainnet) {\n return 'mainnet';\n }\n if (preset.isMinimal) {\n return 'minimal';\n }\n\n throw new Error(`Unknown ethereum verifier beacon preset: ${preset.toString()}`);\n });\n expectedBeaconPresetPromises.set(client, presetPromise);\n }\n\n try {\n return await presetPromise;\n } catch (error) {\n expectedBeaconPresetPromises.delete(client);\n throw error;\n }\n}\n\nfunction computePeriod(slot: bigint, beaconNetworkParams: BeaconNetworkParams) {\n return (\n slot / beaconNetworkParams.slotsPerEpoch / beaconNetworkParams.epochsPerSyncCommitteePeriod\n );\n}\n\nfunction hasSyncCommitteeSupermajority(syncCommitteeBits: string) {\n const bytes = hexToBytes(syncCommitteeBits as Hex);\n const totalBits = bytes.length * 8;\n const participants = bytes.reduce((total, byte) => {\n let count = 0;\n\n for (let value = byte; value > 0; value >>= 1) {\n count += value & 1;\n }\n\n return total + count;\n }, 0);\n\n return participants * 3 >= totalBits * 2;\n}\n\nfunction isRetryableBeaconLightClientError(error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n\n return (\n message.includes('/eth/v1/beacon/light_client/') &&\n (message.includes(': 404') || message.includes(': 500'))\n );\n}\n"]}