@super-protocol/swarm-contracts-sdk 0.0.1-beta.1
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/LICENSE +66 -0
- package/README.md +52 -0
- package/dist/cjs/analytics/Analytics.d.ts +17 -0
- package/dist/cjs/analytics/Analytics.js +84 -0
- package/dist/cjs/analytics/AnalyticsError.d.ts +7 -0
- package/dist/cjs/analytics/AnalyticsError.js +12 -0
- package/dist/cjs/analytics/eventProviders/BrowserEventProvider.d.ts +19 -0
- package/dist/cjs/analytics/eventProviders/BrowserEventProvider.js +38 -0
- package/dist/cjs/analytics/eventProviders/EventProvider.d.ts +24 -0
- package/dist/cjs/analytics/eventProviders/EventProvider.js +25 -0
- package/dist/cjs/analytics/eventProviders/NodeEventProvider.d.ts +22 -0
- package/dist/cjs/analytics/eventProviders/NodeEventProvider.js +56 -0
- package/dist/cjs/analytics/transports/AxiosTransport.d.ts +4 -0
- package/dist/cjs/analytics/transports/AxiosTransport.js +60 -0
- package/dist/cjs/analytics/transports/FetchTransport.d.ts +4 -0
- package/dist/cjs/analytics/transports/FetchTransport.js +31 -0
- package/dist/cjs/analytics/types.d.ts +26 -0
- package/dist/cjs/analytics/types.js +3 -0
- package/dist/cjs/certificates/binary-splitter.d.ts +27 -0
- package/dist/cjs/certificates/binary-splitter.js +279 -0
- package/dist/cjs/certificates/crl.d.ts +6 -0
- package/dist/cjs/certificates/crl.js +66 -0
- package/dist/cjs/certificates/generator.d.ts +38 -0
- package/dist/cjs/certificates/generator.js +262 -0
- package/dist/cjs/certificates/helper.d.ts +29 -0
- package/dist/cjs/certificates/helper.js +216 -0
- package/dist/cjs/certificates/index.d.ts +5 -0
- package/dist/cjs/certificates/index.js +22 -0
- package/dist/cjs/certificates/ocsp.d.ts +14 -0
- package/dist/cjs/certificates/ocsp.js +320 -0
- package/dist/cjs/certificates/serializer.d.ts +13 -0
- package/dist/cjs/certificates/serializer.js +142 -0
- package/dist/cjs/certificates/setup-crypto.d.ts +3 -0
- package/dist/cjs/certificates/setup-crypto.js +48 -0
- package/dist/cjs/certificates/types.d.ts +122 -0
- package/dist/cjs/certificates/types.js +10 -0
- package/dist/cjs/config.d.ts +3 -0
- package/dist/cjs/config.js +7 -0
- package/dist/cjs/connectors/BaseConnector.d.ts +52 -0
- package/dist/cjs/connectors/BaseConnector.js +61 -0
- package/dist/cjs/connectors/BlockchainConnector.d.ts +78 -0
- package/dist/cjs/connectors/BlockchainConnector.js +325 -0
- package/dist/cjs/connectors/BlockchainEventsListener.d.ts +33 -0
- package/dist/cjs/connectors/BlockchainEventsListener.js +283 -0
- package/dist/cjs/connectors/index.d.ts +2 -0
- package/dist/cjs/connectors/index.js +11 -0
- package/dist/cjs/constants.d.ts +48 -0
- package/dist/cjs/constants.js +683 -0
- package/dist/cjs/contracts/SuperProtocolToken.d.ts +300 -0
- package/dist/cjs/contracts/SuperProtocolToken.js +3 -0
- package/dist/cjs/contracts/SuperProtocolToken__factory.d.ts +393 -0
- package/dist/cjs/contracts/SuperProtocolToken__factory.js +521 -0
- package/dist/cjs/contracts/typechain-types/common.d.ts +50 -0
- package/dist/cjs/contracts/typechain-types/common.js +3 -0
- package/dist/cjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/App__factory.d.ts +3340 -0
- package/dist/cjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/App__factory.js +4335 -0
- package/dist/cjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/index.d.ts +1 -0
- package/dist/cjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/index.js +10 -0
- package/dist/cjs/contracts/typechain-types/factories/hardhat-diamond-abi/index.d.ts +1 -0
- package/dist/cjs/contracts/typechain-types/factories/hardhat-diamond-abi/index.js +32 -0
- package/dist/cjs/contracts/typechain-types/factories/index.d.ts +1 -0
- package/dist/cjs/contracts/typechain-types/factories/index.js +32 -0
- package/dist/cjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/App.d.ts +2299 -0
- package/dist/cjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/App.js +3 -0
- package/dist/cjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/index.d.ts +1 -0
- package/dist/cjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/index.js +3 -0
- package/dist/cjs/contracts/typechain-types/hardhat-diamond-abi/index.d.ts +2 -0
- package/dist/cjs/contracts/typechain-types/hardhat-diamond-abi/index.js +3 -0
- package/dist/cjs/contracts/typechain-types/index.d.ts +5 -0
- package/dist/cjs/contracts/typechain-types/index.js +34 -0
- package/dist/cjs/crypto/Crypto.d.ts +70 -0
- package/dist/cjs/crypto/Crypto.js +137 -0
- package/dist/cjs/crypto/index.d.ts +4 -0
- package/dist/cjs/crypto/index.js +37 -0
- package/dist/cjs/crypto/nodejs/AES.d.ts +25 -0
- package/dist/cjs/crypto/nodejs/AES.js +105 -0
- package/dist/cjs/crypto/nodejs/ARIA.d.ts +23 -0
- package/dist/cjs/crypto/nodejs/ARIA.js +77 -0
- package/dist/cjs/crypto/nodejs/ECIES.d.ts +10 -0
- package/dist/cjs/crypto/nodejs/ECIES.js +107 -0
- package/dist/cjs/crypto/nodejs/NativeCrypto.d.ts +46 -0
- package/dist/cjs/crypto/nodejs/NativeCrypto.js +154 -0
- package/dist/cjs/crypto/nodejs/RSA-Hybrid.d.ts +15 -0
- package/dist/cjs/crypto/nodejs/RSA-Hybrid.js +94 -0
- package/dist/cjs/crypto/types.d.ts +10 -0
- package/dist/cjs/crypto/types.js +3 -0
- package/dist/cjs/crypto/utils.d.ts +15 -0
- package/dist/cjs/crypto/utils.js +94 -0
- package/dist/cjs/crypto/utils.spec.d.ts +1 -0
- package/dist/cjs/crypto/utils.spec.js +221 -0
- package/dist/cjs/errors/base.error.d.ts +3 -0
- package/dist/cjs/errors/base.error.js +19 -0
- package/dist/cjs/errors/index.d.ts +3 -0
- package/dist/cjs/errors/index.js +10 -0
- package/dist/cjs/errors/insufficient-funds.error.d.ts +19 -0
- package/dist/cjs/errors/insufficient-funds.error.js +57 -0
- package/dist/cjs/errors/not-found.error.d.ts +3 -0
- package/dist/cjs/errors/not-found.error.js +8 -0
- package/dist/cjs/errors/utils.d.ts +2 -0
- package/dist/cjs/errors/utils.js +30 -0
- package/dist/cjs/index.d.ts +58 -0
- package/dist/cjs/index.js +119 -0
- package/dist/cjs/logger.d.ts +7 -0
- package/dist/cjs/logger.js +12 -0
- package/dist/cjs/models/EtlModel.d.ts +34 -0
- package/dist/cjs/models/EtlModel.js +125 -0
- package/dist/cjs/models/index.d.ts +1 -0
- package/dist/cjs/models/index.js +9 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/polyfills.d.ts +4 -0
- package/dist/cjs/polyfills.js +8 -0
- package/dist/cjs/proto/AmdSevSnp.d.ts +194 -0
- package/dist/cjs/proto/AmdSevSnp.js +358 -0
- package/dist/cjs/proto/Compression.d.ts +43 -0
- package/dist/cjs/proto/Compression.js +133 -0
- package/dist/cjs/proto/Hash.d.ts +37 -0
- package/dist/cjs/proto/Hash.js +104 -0
- package/dist/cjs/proto/Nvtrust.d.ts +116 -0
- package/dist/cjs/proto/Nvtrust.js +159 -0
- package/dist/cjs/proto/OrderReport.d.ts +730 -0
- package/dist/cjs/proto/OrderReport.js +466 -0
- package/dist/cjs/proto/TRI.d.ts +215 -0
- package/dist/cjs/proto/TRI.js +318 -0
- package/dist/cjs/providers/storage/ChunksDownloadDecorator.d.ts +36 -0
- package/dist/cjs/providers/storage/ChunksDownloadDecorator.js +145 -0
- package/dist/cjs/providers/storage/IStorageProvider.d.ts +15 -0
- package/dist/cjs/providers/storage/IStorageProvider.js +3 -0
- package/dist/cjs/providers/storage/S3StorageProvider.d.ts +26 -0
- package/dist/cjs/providers/storage/S3StorageProvider.js +210 -0
- package/dist/cjs/providers/storage/StorageAdapter.d.ts +62 -0
- package/dist/cjs/providers/storage/StorageAdapter.js +300 -0
- package/dist/cjs/providers/storage/StorageContentWriter.d.ts +46 -0
- package/dist/cjs/providers/storage/StorageContentWriter.js +168 -0
- package/dist/cjs/providers/storage/StorageKeyValueAdapter.d.ts +26 -0
- package/dist/cjs/providers/storage/StorageKeyValueAdapter.js +139 -0
- package/dist/cjs/providers/storage/StorageMetadataReader.d.ts +20 -0
- package/dist/cjs/providers/storage/StorageMetadataReader.js +56 -0
- package/dist/cjs/providers/storage/StorjAdapter.d.ts +20 -0
- package/dist/cjs/providers/storage/StorjAdapter.js +60 -0
- package/dist/cjs/providers/storage/StorjCredentialsManager.d.ts +24 -0
- package/dist/cjs/providers/storage/StorjCredentialsManager.js +114 -0
- package/dist/cjs/providers/storage/StorjStorageProvider.d.ts +29 -0
- package/dist/cjs/providers/storage/StorjStorageProvider.js +146 -0
- package/dist/cjs/providers/storage/fs-storage-provider.d.ts +19 -0
- package/dist/cjs/providers/storage/fs-storage-provider.js +162 -0
- package/dist/cjs/providers/storage/getStorageProvider.d.ts +4 -0
- package/dist/cjs/providers/storage/getStorageProvider.js +23 -0
- package/dist/cjs/providers/storage/parseStorageCredentials.d.ts +4 -0
- package/dist/cjs/providers/storage/parseStorageCredentials.js +21 -0
- package/dist/cjs/providers/storage/types.d.ts +29 -0
- package/dist/cjs/providers/storage/types.js +3 -0
- package/dist/cjs/staticModels/Deposits.d.ts +85 -0
- package/dist/cjs/staticModels/Deposits.js +268 -0
- package/dist/cjs/staticModels/Diamond.d.ts +6 -0
- package/dist/cjs/staticModels/Diamond.js +22 -0
- package/dist/cjs/staticModels/ModelPackager.d.ts +18 -0
- package/dist/cjs/staticModels/ModelPackager.js +49 -0
- package/dist/cjs/staticModels/ProviderRewards.d.ts +5 -0
- package/dist/cjs/staticModels/ProviderRewards.js +81 -0
- package/dist/cjs/staticModels/StaticModel.d.ts +6 -0
- package/dist/cjs/staticModels/StaticModel.js +43 -0
- package/dist/cjs/staticModels/Superpro.d.ts +18 -0
- package/dist/cjs/staticModels/Superpro.js +47 -0
- package/dist/cjs/staticModels/SuperproToken.d.ts +113 -0
- package/dist/cjs/staticModels/SuperproToken.js +333 -0
- package/dist/cjs/store.d.ts +17 -0
- package/dist/cjs/store.js +19 -0
- package/dist/cjs/tee/OrderReportService.d.ts +9 -0
- package/dist/cjs/tee/OrderReportService.js +104 -0
- package/dist/cjs/tee/QuoteParser.d.ts +82 -0
- package/dist/cjs/tee/QuoteParser.js +410 -0
- package/dist/cjs/tee/TeeCertificateService.d.ts +20 -0
- package/dist/cjs/tee/TeeCertificateService.js +143 -0
- package/dist/cjs/tee/TeeSignatureVerifier.d.ts +24 -0
- package/dist/cjs/tee/TeeSignatureVerifier.js +118 -0
- package/dist/cjs/tee/errors.d.ts +11 -0
- package/dist/cjs/tee/errors.js +20 -0
- package/dist/cjs/tee/helpers.d.ts +14 -0
- package/dist/cjs/tee/helpers.js +115 -0
- package/dist/cjs/tee/interface.d.ts +63 -0
- package/dist/cjs/tee/interface.js +3 -0
- package/dist/cjs/tee/statuses.d.ts +14 -0
- package/dist/cjs/tee/statuses.js +20 -0
- package/dist/cjs/tee/types.d.ts +126 -0
- package/dist/cjs/tee/types.js +34 -0
- package/dist/cjs/types/Compressor.d.ts +5 -0
- package/dist/cjs/types/Compressor.js +3 -0
- package/dist/cjs/types/Consensus.d.ts +52 -0
- package/dist/cjs/types/Consensus.js +11 -0
- package/dist/cjs/types/DepositInfo.d.ts +6 -0
- package/dist/cjs/types/DepositInfo.js +3 -0
- package/dist/cjs/types/DistributedSecretStorage.d.ts +68 -0
- package/dist/cjs/types/DistributedSecretStorage.js +3 -0
- package/dist/cjs/types/EtlModel.d.ts +2 -0
- package/dist/cjs/types/EtlModel.js +3 -0
- package/dist/cjs/types/Events.d.ts +34 -0
- package/dist/cjs/types/Events.js +3 -0
- package/dist/cjs/types/HardwareInfo.d.ts +10 -0
- package/dist/cjs/types/HardwareInfo.js +3 -0
- package/dist/cjs/types/Marks.d.ts +9 -0
- package/dist/cjs/types/Marks.js +10 -0
- package/dist/cjs/types/Offer.d.ts +76 -0
- package/dist/cjs/types/Offer.js +32 -0
- package/dist/cjs/types/OfferVersion.d.ts +30 -0
- package/dist/cjs/types/OfferVersion.js +9 -0
- package/dist/cjs/types/OptionInfo.d.ts +8 -0
- package/dist/cjs/types/OptionInfo.js +3 -0
- package/dist/cjs/types/Order.d.ts +144 -0
- package/dist/cjs/types/Order.js +100 -0
- package/dist/cjs/types/OrderUsage.d.ts +28 -0
- package/dist/cjs/types/OrderUsage.js +3 -0
- package/dist/cjs/types/Origins.d.ts +6 -0
- package/dist/cjs/types/Origins.js +3 -0
- package/dist/cjs/types/Provider.d.ts +7 -0
- package/dist/cjs/types/Provider.js +3 -0
- package/dist/cjs/types/ProviderRewards.d.ts +5 -0
- package/dist/cjs/types/ProviderRewards.js +3 -0
- package/dist/cjs/types/ResourceLoader.d.ts +28 -0
- package/dist/cjs/types/ResourceLoader.js +3 -0
- package/dist/cjs/types/SlotInfo.d.ts +7 -0
- package/dist/cjs/types/SlotInfo.js +3 -0
- package/dist/cjs/types/SlotUsage.d.ts +11 -0
- package/dist/cjs/types/SlotUsage.js +9 -0
- package/dist/cjs/types/Superpro.d.ts +9 -0
- package/dist/cjs/types/Superpro.js +14 -0
- package/dist/cjs/types/TeeOfferInfo.d.ts +38 -0
- package/dist/cjs/types/TeeOfferInfo.js +3 -0
- package/dist/cjs/types/TeeOfferOption.d.ts +13 -0
- package/dist/cjs/types/TeeOfferOption.js +3 -0
- package/dist/cjs/types/TeeOfferSlot.d.ts +8 -0
- package/dist/cjs/types/TeeOfferSlot.js +3 -0
- package/dist/cjs/types/ValueOfferSlot.d.ts +18 -0
- package/dist/cjs/types/ValueOfferSlot.js +3 -0
- package/dist/cjs/types/Web3.d.ts +30 -0
- package/dist/cjs/types/Web3.js +3 -0
- package/dist/cjs/types/blockchainConnector/StorageAccess.d.ts +8 -0
- package/dist/cjs/types/blockchainConnector/StorageAccess.js +3 -0
- package/dist/cjs/types/index.d.ts +25 -0
- package/dist/cjs/types/index.js +42 -0
- package/dist/cjs/types/storage/StorageAccess.d.ts +7 -0
- package/dist/cjs/types/storage/StorageAccess.js +3 -0
- package/dist/cjs/types/storage/StorageFileAccess.d.ts +5 -0
- package/dist/cjs/types/storage/StorageFileAccess.js +3 -0
- package/dist/cjs/types/storage/StorageObject.d.ts +8 -0
- package/dist/cjs/types/storage/StorageObject.js +3 -0
- package/dist/cjs/utils/CryptoKeysTransformer.d.ts +42 -0
- package/dist/cjs/utils/CryptoKeysTransformer.js +247 -0
- package/dist/cjs/utils/Monitoring.d.ts +11 -0
- package/dist/cjs/utils/Monitoring.js +51 -0
- package/dist/cjs/utils/NonceTracker.d.ts +20 -0
- package/dist/cjs/utils/NonceTracker.js +82 -0
- package/dist/cjs/utils/PubSub.d.ts +9 -0
- package/dist/cjs/utils/PubSub.js +35 -0
- package/dist/cjs/utils/TxManager.d.ts +28 -0
- package/dist/cjs/utils/TxManager.js +285 -0
- package/dist/cjs/utils/cache/index.d.ts +2 -0
- package/dist/cjs/utils/cache/index.js +21 -0
- package/dist/cjs/utils/cache/memory.d.ts +19 -0
- package/dist/cjs/utils/cache/memory.js +66 -0
- package/dist/cjs/utils/cache/memory.spec.d.ts +1 -0
- package/dist/cjs/utils/cache/memory.spec.js +91 -0
- package/dist/cjs/utils/cache/types.d.ts +17 -0
- package/dist/cjs/utils/cache/types.js +3 -0
- package/dist/cjs/utils/compressors/GzipCompressor.d.ts +8 -0
- package/dist/cjs/utils/compressors/GzipCompressor.js +22 -0
- package/dist/cjs/utils/compressors/UncompressedCompressor.d.ts +8 -0
- package/dist/cjs/utils/compressors/UncompressedCompressor.js +17 -0
- package/dist/cjs/utils/compressors/index.d.ts +2 -0
- package/dist/cjs/utils/compressors/index.js +19 -0
- package/dist/cjs/utils/helper.d.ts +87 -0
- package/dist/cjs/utils/helper.js +576 -0
- package/dist/cjs/utils/helpers/calculateObjectHash.d.ts +8 -0
- package/dist/cjs/utils/helpers/calculateObjectHash.js +25 -0
- package/dist/cjs/utils/helpers/getRawRpc.d.ts +2 -0
- package/dist/cjs/utils/helpers/getRawRpc.js +19 -0
- package/dist/cjs/utils/helpers/getStreamChunks.d.ts +9 -0
- package/dist/cjs/utils/helpers/getStreamChunks.js +35 -0
- package/dist/cjs/utils/helpers/index.d.ts +5 -0
- package/dist/cjs/utils/helpers/index.js +22 -0
- package/dist/cjs/utils/helpers/promise.d.ts +2 -0
- package/dist/cjs/utils/helpers/promise.js +10 -0
- package/dist/cjs/utils/helpers/streamToBuffer.d.ts +4 -0
- package/dist/cjs/utils/helpers/streamToBuffer.js +13 -0
- package/dist/cjs/utils/helpers/tryWithInterval.d.ts +13 -0
- package/dist/cjs/utils/helpers/tryWithInterval.js +39 -0
- package/dist/cjs/utils/rent-calculator/index.d.ts +2 -0
- package/dist/cjs/utils/rent-calculator/index.js +19 -0
- package/dist/cjs/utils/rent-calculator/rent-calculator.d.ts +14 -0
- package/dist/cjs/utils/rent-calculator/rent-calculator.js +114 -0
- package/dist/cjs/utils/rent-calculator/types.d.ts +14 -0
- package/dist/cjs/utils/rent-calculator/types.js +3 -0
- package/dist/cjs/utils/resourceLoaders/BaseResourceLoader.d.ts +10 -0
- package/dist/cjs/utils/resourceLoaders/BaseResourceLoader.js +14 -0
- package/dist/cjs/utils/resourceLoaders/StorageProviderLoader.d.ts +18 -0
- package/dist/cjs/utils/resourceLoaders/StorageProviderLoader.js +60 -0
- package/dist/cjs/utils/resourceLoaders/UrlResourceLoader.d.ts +9 -0
- package/dist/cjs/utils/resourceLoaders/UrlResourceLoader.js +51 -0
- package/dist/cjs/utils/resourceLoaders/getResourceLoader.d.ts +5 -0
- package/dist/cjs/utils/resourceLoaders/getResourceLoader.js +15 -0
- package/dist/cjs/utils/resourceLoaders/index.d.ts +1 -0
- package/dist/cjs/utils/resourceLoaders/index.js +18 -0
- package/dist/cjs/utils/schema-utils/index.d.ts +2 -0
- package/dist/cjs/utils/schema-utils/index.js +9 -0
- package/dist/cjs/utils/schema-utils/serializer.d.ts +3 -0
- package/dist/cjs/utils/schema-utils/serializer.js +31 -0
- package/dist/cjs/utils/schema-utils/validator.d.ts +7 -0
- package/dist/cjs/utils/schema-utils/validator.js +49 -0
- package/dist/cjs/utils/tcb.d.ts +2 -0
- package/dist/cjs/utils/tcb.js +13 -0
- package/dist/cjs/utils/tokens/get-tokens-info.d.ts +8 -0
- package/dist/cjs/utils/tokens/get-tokens-info.js +32 -0
- package/dist/cjs/utils/tokens/index.d.ts +1 -0
- package/dist/cjs/utils/tokens/index.js +18 -0
- package/dist/cjs/utils/types.d.ts +13 -0
- package/dist/cjs/utils/types.js +3 -0
- package/dist/mjs/analytics/Analytics.d.ts +17 -0
- package/dist/mjs/analytics/Analytics.js +78 -0
- package/dist/mjs/analytics/AnalyticsError.d.ts +7 -0
- package/dist/mjs/analytics/AnalyticsError.js +8 -0
- package/dist/mjs/analytics/eventProviders/BrowserEventProvider.d.ts +19 -0
- package/dist/mjs/analytics/eventProviders/BrowserEventProvider.js +32 -0
- package/dist/mjs/analytics/eventProviders/EventProvider.d.ts +24 -0
- package/dist/mjs/analytics/eventProviders/EventProvider.js +22 -0
- package/dist/mjs/analytics/eventProviders/NodeEventProvider.d.ts +22 -0
- package/dist/mjs/analytics/eventProviders/NodeEventProvider.js +50 -0
- package/dist/mjs/analytics/transports/AxiosTransport.d.ts +4 -0
- package/dist/mjs/analytics/transports/AxiosTransport.js +31 -0
- package/dist/mjs/analytics/transports/FetchTransport.d.ts +4 -0
- package/dist/mjs/analytics/transports/FetchTransport.js +28 -0
- package/dist/mjs/analytics/types.d.ts +26 -0
- package/dist/mjs/analytics/types.js +2 -0
- package/dist/mjs/certificates/binary-splitter.d.ts +27 -0
- package/dist/mjs/certificates/binary-splitter.js +275 -0
- package/dist/mjs/certificates/crl.d.ts +6 -0
- package/dist/mjs/certificates/crl.js +39 -0
- package/dist/mjs/certificates/generator.d.ts +38 -0
- package/dist/mjs/certificates/generator.js +255 -0
- package/dist/mjs/certificates/helper.d.ts +29 -0
- package/dist/mjs/certificates/helper.js +186 -0
- package/dist/mjs/certificates/index.d.ts +5 -0
- package/dist/mjs/certificates/index.js +6 -0
- package/dist/mjs/certificates/ocsp.d.ts +14 -0
- package/dist/mjs/certificates/ocsp.js +290 -0
- package/dist/mjs/certificates/serializer.d.ts +13 -0
- package/dist/mjs/certificates/serializer.js +135 -0
- package/dist/mjs/certificates/setup-crypto.d.ts +3 -0
- package/dist/mjs/certificates/setup-crypto.js +22 -0
- package/dist/mjs/certificates/types.d.ts +122 -0
- package/dist/mjs/certificates/types.js +7 -0
- package/dist/mjs/config.d.ts +3 -0
- package/dist/mjs/config.js +4 -0
- package/dist/mjs/connectors/BaseConnector.d.ts +52 -0
- package/dist/mjs/connectors/BaseConnector.js +54 -0
- package/dist/mjs/connectors/BlockchainConnector.d.ts +78 -0
- package/dist/mjs/connectors/BlockchainConnector.js +320 -0
- package/dist/mjs/connectors/BlockchainEventsListener.d.ts +33 -0
- package/dist/mjs/connectors/BlockchainEventsListener.js +254 -0
- package/dist/mjs/connectors/index.d.ts +2 -0
- package/dist/mjs/connectors/index.js +3 -0
- package/dist/mjs/constants.d.ts +48 -0
- package/dist/mjs/constants.js +680 -0
- package/dist/mjs/contracts/SuperProtocolToken.d.ts +300 -0
- package/dist/mjs/contracts/SuperProtocolToken.js +2 -0
- package/dist/mjs/contracts/SuperProtocolToken__factory.d.ts +393 -0
- package/dist/mjs/contracts/SuperProtocolToken__factory.js +517 -0
- package/dist/mjs/contracts/typechain-types/common.d.ts +50 -0
- package/dist/mjs/contracts/typechain-types/common.js +2 -0
- package/dist/mjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/App__factory.d.ts +3340 -0
- package/dist/mjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/App__factory.js +4331 -0
- package/dist/mjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/index.d.ts +1 -0
- package/dist/mjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/index.js +6 -0
- package/dist/mjs/contracts/typechain-types/factories/hardhat-diamond-abi/index.d.ts +1 -0
- package/dist/mjs/contracts/typechain-types/factories/hardhat-diamond-abi/index.js +6 -0
- package/dist/mjs/contracts/typechain-types/factories/index.d.ts +1 -0
- package/dist/mjs/contracts/typechain-types/factories/index.js +6 -0
- package/dist/mjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/App.d.ts +2299 -0
- package/dist/mjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/App.js +2 -0
- package/dist/mjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/index.d.ts +1 -0
- package/dist/mjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/index.js +2 -0
- package/dist/mjs/contracts/typechain-types/hardhat-diamond-abi/index.d.ts +2 -0
- package/dist/mjs/contracts/typechain-types/hardhat-diamond-abi/index.js +2 -0
- package/dist/mjs/contracts/typechain-types/index.d.ts +5 -0
- package/dist/mjs/contracts/typechain-types/index.js +7 -0
- package/dist/mjs/crypto/Crypto.d.ts +70 -0
- package/dist/mjs/crypto/Crypto.js +132 -0
- package/dist/mjs/crypto/index.d.ts +4 -0
- package/dist/mjs/crypto/index.js +5 -0
- package/dist/mjs/crypto/nodejs/AES.d.ts +25 -0
- package/dist/mjs/crypto/nodejs/AES.js +77 -0
- package/dist/mjs/crypto/nodejs/ARIA.d.ts +23 -0
- package/dist/mjs/crypto/nodejs/ARIA.js +72 -0
- package/dist/mjs/crypto/nodejs/ECIES.d.ts +10 -0
- package/dist/mjs/crypto/nodejs/ECIES.js +82 -0
- package/dist/mjs/crypto/nodejs/NativeCrypto.d.ts +46 -0
- package/dist/mjs/crypto/nodejs/NativeCrypto.js +152 -0
- package/dist/mjs/crypto/nodejs/RSA-Hybrid.d.ts +15 -0
- package/dist/mjs/crypto/nodejs/RSA-Hybrid.js +89 -0
- package/dist/mjs/crypto/types.d.ts +10 -0
- package/dist/mjs/crypto/types.js +2 -0
- package/dist/mjs/crypto/utils.d.ts +15 -0
- package/dist/mjs/crypto/utils.js +81 -0
- package/dist/mjs/crypto/utils.spec.d.ts +1 -0
- package/dist/mjs/crypto/utils.spec.js +219 -0
- package/dist/mjs/errors/base.error.d.ts +3 -0
- package/dist/mjs/errors/base.error.js +15 -0
- package/dist/mjs/errors/index.d.ts +3 -0
- package/dist/mjs/errors/index.js +4 -0
- package/dist/mjs/errors/insufficient-funds.error.d.ts +19 -0
- package/dist/mjs/errors/insufficient-funds.error.js +53 -0
- package/dist/mjs/errors/not-found.error.d.ts +3 -0
- package/dist/mjs/errors/not-found.error.js +4 -0
- package/dist/mjs/errors/utils.d.ts +2 -0
- package/dist/mjs/errors/utils.js +22 -0
- package/dist/mjs/index.d.ts +58 -0
- package/dist/mjs/index.js +53 -0
- package/dist/mjs/logger.d.ts +7 -0
- package/dist/mjs/logger.js +7 -0
- package/dist/mjs/models/EtlModel.d.ts +34 -0
- package/dist/mjs/models/EtlModel.js +96 -0
- package/dist/mjs/models/index.d.ts +1 -0
- package/dist/mjs/models/index.js +2 -0
- package/dist/mjs/package.json +1 -0
- package/dist/mjs/polyfills.d.ts +4 -0
- package/dist/mjs/polyfills.js +8 -0
- package/dist/mjs/proto/AmdSevSnp.d.ts +194 -0
- package/dist/mjs/proto/AmdSevSnp.js +348 -0
- package/dist/mjs/proto/Compression.d.ts +43 -0
- package/dist/mjs/proto/Compression.js +125 -0
- package/dist/mjs/proto/Hash.d.ts +37 -0
- package/dist/mjs/proto/Hash.js +98 -0
- package/dist/mjs/proto/Nvtrust.d.ts +116 -0
- package/dist/mjs/proto/Nvtrust.js +153 -0
- package/dist/mjs/proto/OrderReport.d.ts +730 -0
- package/dist/mjs/proto/OrderReport.js +460 -0
- package/dist/mjs/proto/TRI.d.ts +215 -0
- package/dist/mjs/proto/TRI.js +312 -0
- package/dist/mjs/providers/storage/ChunksDownloadDecorator.d.ts +36 -0
- package/dist/mjs/providers/storage/ChunksDownloadDecorator.js +139 -0
- package/dist/mjs/providers/storage/IStorageProvider.d.ts +15 -0
- package/dist/mjs/providers/storage/IStorageProvider.js +2 -0
- package/dist/mjs/providers/storage/S3StorageProvider.d.ts +26 -0
- package/dist/mjs/providers/storage/S3StorageProvider.js +203 -0
- package/dist/mjs/providers/storage/StorageAdapter.d.ts +62 -0
- package/dist/mjs/providers/storage/StorageAdapter.js +270 -0
- package/dist/mjs/providers/storage/StorageContentWriter.d.ts +46 -0
- package/dist/mjs/providers/storage/StorageContentWriter.js +161 -0
- package/dist/mjs/providers/storage/StorageKeyValueAdapter.d.ts +26 -0
- package/dist/mjs/providers/storage/StorageKeyValueAdapter.js +133 -0
- package/dist/mjs/providers/storage/StorageMetadataReader.d.ts +20 -0
- package/dist/mjs/providers/storage/StorageMetadataReader.js +50 -0
- package/dist/mjs/providers/storage/StorjAdapter.d.ts +20 -0
- package/dist/mjs/providers/storage/StorjAdapter.js +54 -0
- package/dist/mjs/providers/storage/StorjCredentialsManager.d.ts +24 -0
- package/dist/mjs/providers/storage/StorjCredentialsManager.js +84 -0
- package/dist/mjs/providers/storage/StorjStorageProvider.d.ts +29 -0
- package/dist/mjs/providers/storage/StorjStorageProvider.js +140 -0
- package/dist/mjs/providers/storage/fs-storage-provider.d.ts +19 -0
- package/dist/mjs/providers/storage/fs-storage-provider.js +132 -0
- package/dist/mjs/providers/storage/getStorageProvider.d.ts +4 -0
- package/dist/mjs/providers/storage/getStorageProvider.js +18 -0
- package/dist/mjs/providers/storage/parseStorageCredentials.d.ts +4 -0
- package/dist/mjs/providers/storage/parseStorageCredentials.js +17 -0
- package/dist/mjs/providers/storage/types.d.ts +29 -0
- package/dist/mjs/providers/storage/types.js +2 -0
- package/dist/mjs/staticModels/Deposits.d.ts +85 -0
- package/dist/mjs/staticModels/Deposits.js +263 -0
- package/dist/mjs/staticModels/Diamond.d.ts +6 -0
- package/dist/mjs/staticModels/Diamond.js +17 -0
- package/dist/mjs/staticModels/ModelPackager.d.ts +18 -0
- package/dist/mjs/staticModels/ModelPackager.js +45 -0
- package/dist/mjs/staticModels/ProviderRewards.d.ts +5 -0
- package/dist/mjs/staticModels/ProviderRewards.js +76 -0
- package/dist/mjs/staticModels/StaticModel.d.ts +6 -0
- package/dist/mjs/staticModels/StaticModel.js +38 -0
- package/dist/mjs/staticModels/Superpro.d.ts +18 -0
- package/dist/mjs/staticModels/Superpro.js +45 -0
- package/dist/mjs/staticModels/SuperproToken.d.ts +113 -0
- package/dist/mjs/staticModels/SuperproToken.js +328 -0
- package/dist/mjs/store.d.ts +17 -0
- package/dist/mjs/store.js +17 -0
- package/dist/mjs/tee/OrderReportService.d.ts +9 -0
- package/dist/mjs/tee/OrderReportService.js +97 -0
- package/dist/mjs/tee/QuoteParser.d.ts +82 -0
- package/dist/mjs/tee/QuoteParser.js +381 -0
- package/dist/mjs/tee/TeeCertificateService.d.ts +20 -0
- package/dist/mjs/tee/TeeCertificateService.js +139 -0
- package/dist/mjs/tee/TeeSignatureVerifier.d.ts +24 -0
- package/dist/mjs/tee/TeeSignatureVerifier.js +111 -0
- package/dist/mjs/tee/errors.d.ts +11 -0
- package/dist/mjs/tee/errors.js +12 -0
- package/dist/mjs/tee/helpers.d.ts +14 -0
- package/dist/mjs/tee/helpers.js +110 -0
- package/dist/mjs/tee/interface.d.ts +63 -0
- package/dist/mjs/tee/interface.js +2 -0
- package/dist/mjs/tee/statuses.d.ts +14 -0
- package/dist/mjs/tee/statuses.js +17 -0
- package/dist/mjs/tee/types.d.ts +126 -0
- package/dist/mjs/tee/types.js +28 -0
- package/dist/mjs/types/Compressor.d.ts +5 -0
- package/dist/mjs/types/Compressor.js +2 -0
- package/dist/mjs/types/Consensus.d.ts +52 -0
- package/dist/mjs/types/Consensus.js +8 -0
- package/dist/mjs/types/DepositInfo.d.ts +6 -0
- package/dist/mjs/types/DepositInfo.js +2 -0
- package/dist/mjs/types/DistributedSecretStorage.d.ts +68 -0
- package/dist/mjs/types/DistributedSecretStorage.js +2 -0
- package/dist/mjs/types/EtlModel.d.ts +2 -0
- package/dist/mjs/types/EtlModel.js +2 -0
- package/dist/mjs/types/Events.d.ts +34 -0
- package/dist/mjs/types/Events.js +2 -0
- package/dist/mjs/types/HardwareInfo.d.ts +10 -0
- package/dist/mjs/types/HardwareInfo.js +2 -0
- package/dist/mjs/types/Marks.d.ts +9 -0
- package/dist/mjs/types/Marks.js +7 -0
- package/dist/mjs/types/Offer.d.ts +76 -0
- package/dist/mjs/types/Offer.js +29 -0
- package/dist/mjs/types/OfferVersion.d.ts +30 -0
- package/dist/mjs/types/OfferVersion.js +6 -0
- package/dist/mjs/types/OptionInfo.d.ts +8 -0
- package/dist/mjs/types/OptionInfo.js +2 -0
- package/dist/mjs/types/Order.d.ts +144 -0
- package/dist/mjs/types/Order.js +91 -0
- package/dist/mjs/types/OrderUsage.d.ts +28 -0
- package/dist/mjs/types/OrderUsage.js +2 -0
- package/dist/mjs/types/Origins.d.ts +6 -0
- package/dist/mjs/types/Origins.js +2 -0
- package/dist/mjs/types/Provider.d.ts +7 -0
- package/dist/mjs/types/Provider.js +2 -0
- package/dist/mjs/types/ProviderRewards.d.ts +5 -0
- package/dist/mjs/types/ProviderRewards.js +2 -0
- package/dist/mjs/types/ResourceLoader.d.ts +28 -0
- package/dist/mjs/types/ResourceLoader.js +2 -0
- package/dist/mjs/types/SlotInfo.d.ts +7 -0
- package/dist/mjs/types/SlotInfo.js +2 -0
- package/dist/mjs/types/SlotUsage.d.ts +11 -0
- package/dist/mjs/types/SlotUsage.js +6 -0
- package/dist/mjs/types/Superpro.d.ts +9 -0
- package/dist/mjs/types/Superpro.js +11 -0
- package/dist/mjs/types/TeeOfferInfo.d.ts +38 -0
- package/dist/mjs/types/TeeOfferInfo.js +2 -0
- package/dist/mjs/types/TeeOfferOption.d.ts +13 -0
- package/dist/mjs/types/TeeOfferOption.js +2 -0
- package/dist/mjs/types/TeeOfferSlot.d.ts +8 -0
- package/dist/mjs/types/TeeOfferSlot.js +2 -0
- package/dist/mjs/types/ValueOfferSlot.d.ts +18 -0
- package/dist/mjs/types/ValueOfferSlot.js +2 -0
- package/dist/mjs/types/Web3.d.ts +30 -0
- package/dist/mjs/types/Web3.js +2 -0
- package/dist/mjs/types/blockchainConnector/StorageAccess.d.ts +8 -0
- package/dist/mjs/types/blockchainConnector/StorageAccess.js +2 -0
- package/dist/mjs/types/index.d.ts +25 -0
- package/dist/mjs/types/index.js +26 -0
- package/dist/mjs/types/storage/StorageAccess.d.ts +7 -0
- package/dist/mjs/types/storage/StorageAccess.js +2 -0
- package/dist/mjs/types/storage/StorageFileAccess.d.ts +5 -0
- package/dist/mjs/types/storage/StorageFileAccess.js +2 -0
- package/dist/mjs/types/storage/StorageObject.d.ts +8 -0
- package/dist/mjs/types/storage/StorageObject.js +2 -0
- package/dist/mjs/utils/CryptoKeysTransformer.d.ts +42 -0
- package/dist/mjs/utils/CryptoKeysTransformer.js +240 -0
- package/dist/mjs/utils/Monitoring.d.ts +11 -0
- package/dist/mjs/utils/Monitoring.js +44 -0
- package/dist/mjs/utils/NonceTracker.d.ts +20 -0
- package/dist/mjs/utils/NonceTracker.js +77 -0
- package/dist/mjs/utils/PubSub.d.ts +9 -0
- package/dist/mjs/utils/PubSub.js +32 -0
- package/dist/mjs/utils/TxManager.d.ts +28 -0
- package/dist/mjs/utils/TxManager.js +278 -0
- package/dist/mjs/utils/cache/index.d.ts +2 -0
- package/dist/mjs/utils/cache/index.js +3 -0
- package/dist/mjs/utils/cache/memory.d.ts +19 -0
- package/dist/mjs/utils/cache/memory.js +61 -0
- package/dist/mjs/utils/cache/memory.spec.d.ts +1 -0
- package/dist/mjs/utils/cache/memory.spec.js +89 -0
- package/dist/mjs/utils/cache/types.d.ts +17 -0
- package/dist/mjs/utils/cache/types.js +2 -0
- package/dist/mjs/utils/compressors/GzipCompressor.d.ts +8 -0
- package/dist/mjs/utils/compressors/GzipCompressor.js +15 -0
- package/dist/mjs/utils/compressors/UncompressedCompressor.d.ts +8 -0
- package/dist/mjs/utils/compressors/UncompressedCompressor.js +13 -0
- package/dist/mjs/utils/compressors/index.d.ts +2 -0
- package/dist/mjs/utils/compressors/index.js +3 -0
- package/dist/mjs/utils/helper.d.ts +87 -0
- package/dist/mjs/utils/helper.js +526 -0
- package/dist/mjs/utils/helpers/calculateObjectHash.d.ts +8 -0
- package/dist/mjs/utils/helpers/calculateObjectHash.js +18 -0
- package/dist/mjs/utils/helpers/getRawRpc.d.ts +2 -0
- package/dist/mjs/utils/helpers/getRawRpc.js +15 -0
- package/dist/mjs/utils/helpers/getStreamChunks.d.ts +9 -0
- package/dist/mjs/utils/helpers/getStreamChunks.js +31 -0
- package/dist/mjs/utils/helpers/index.d.ts +5 -0
- package/dist/mjs/utils/helpers/index.js +6 -0
- package/dist/mjs/utils/helpers/promise.d.ts +2 -0
- package/dist/mjs/utils/helpers/promise.js +5 -0
- package/dist/mjs/utils/helpers/streamToBuffer.d.ts +4 -0
- package/dist/mjs/utils/helpers/streamToBuffer.js +9 -0
- package/dist/mjs/utils/helpers/tryWithInterval.d.ts +13 -0
- package/dist/mjs/utils/helpers/tryWithInterval.js +35 -0
- package/dist/mjs/utils/rent-calculator/index.d.ts +2 -0
- package/dist/mjs/utils/rent-calculator/index.js +3 -0
- package/dist/mjs/utils/rent-calculator/rent-calculator.d.ts +14 -0
- package/dist/mjs/utils/rent-calculator/rent-calculator.js +110 -0
- package/dist/mjs/utils/rent-calculator/types.d.ts +14 -0
- package/dist/mjs/utils/rent-calculator/types.js +2 -0
- package/dist/mjs/utils/resourceLoaders/BaseResourceLoader.d.ts +10 -0
- package/dist/mjs/utils/resourceLoaders/BaseResourceLoader.js +10 -0
- package/dist/mjs/utils/resourceLoaders/StorageProviderLoader.d.ts +18 -0
- package/dist/mjs/utils/resourceLoaders/StorageProviderLoader.js +53 -0
- package/dist/mjs/utils/resourceLoaders/UrlResourceLoader.d.ts +9 -0
- package/dist/mjs/utils/resourceLoaders/UrlResourceLoader.js +44 -0
- package/dist/mjs/utils/resourceLoaders/getResourceLoader.d.ts +5 -0
- package/dist/mjs/utils/resourceLoaders/getResourceLoader.js +11 -0
- package/dist/mjs/utils/resourceLoaders/index.d.ts +1 -0
- package/dist/mjs/utils/resourceLoaders/index.js +2 -0
- package/dist/mjs/utils/schema-utils/index.d.ts +2 -0
- package/dist/mjs/utils/schema-utils/index.js +3 -0
- package/dist/mjs/utils/schema-utils/serializer.d.ts +3 -0
- package/dist/mjs/utils/schema-utils/serializer.js +26 -0
- package/dist/mjs/utils/schema-utils/validator.d.ts +7 -0
- package/dist/mjs/utils/schema-utils/validator.js +45 -0
- package/dist/mjs/utils/tcb.d.ts +2 -0
- package/dist/mjs/utils/tcb.js +9 -0
- package/dist/mjs/utils/tokens/get-tokens-info.d.ts +8 -0
- package/dist/mjs/utils/tokens/get-tokens-info.js +25 -0
- package/dist/mjs/utils/tokens/index.d.ts +1 -0
- package/dist/mjs/utils/tokens/index.js +2 -0
- package/dist/mjs/utils/types.d.ts +13 -0
- package/dist/mjs/utils/types.js +2 -0
- package/package.json +103 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import { BaseConnector } from './BaseConnector.js';
|
|
3
|
+
import { WebSocketProvider } from 'ethers';
|
|
4
|
+
import { SuperProtocolToken__factory } from '../contracts/SuperProtocolToken__factory.js';
|
|
5
|
+
import { App__factory } from '../contracts/typechain-types/index.js';
|
|
6
|
+
// TODO: remove this dependencies
|
|
7
|
+
import store from '../store.js';
|
|
8
|
+
import Superpro from '../staticModels/Superpro.js';
|
|
9
|
+
import SuperproToken from '../staticModels/SuperproToken.js';
|
|
10
|
+
import * as uuid from 'uuid';
|
|
11
|
+
export default class BlockchainEventsListener extends BaseConnector {
|
|
12
|
+
// Singleton
|
|
13
|
+
static instance;
|
|
14
|
+
isSubscribingBlocked = false;
|
|
15
|
+
reconnectAttemptCount = 0;
|
|
16
|
+
constructor() {
|
|
17
|
+
super();
|
|
18
|
+
}
|
|
19
|
+
static getInstance() {
|
|
20
|
+
if (!BlockchainEventsListener.instance) {
|
|
21
|
+
BlockchainEventsListener.instance = new BlockchainEventsListener();
|
|
22
|
+
}
|
|
23
|
+
return BlockchainEventsListener.instance;
|
|
24
|
+
}
|
|
25
|
+
subscriptions = new Map();
|
|
26
|
+
subscribeEvent(params) {
|
|
27
|
+
if (!this.initialized) {
|
|
28
|
+
throw Error(`${BlockchainEventsListener.name} instance should be initialized before`);
|
|
29
|
+
}
|
|
30
|
+
if (this.isSubscribingBlocked) {
|
|
31
|
+
throw Error(`${BlockchainEventsListener.name} instance should be initialized before`);
|
|
32
|
+
}
|
|
33
|
+
const contract = params.contract ?? this.getContract();
|
|
34
|
+
const contractTarget = contract.target.toString();
|
|
35
|
+
const key = uuid.v4();
|
|
36
|
+
this.logger.trace({
|
|
37
|
+
event: params.event,
|
|
38
|
+
key,
|
|
39
|
+
}, `created subscription`);
|
|
40
|
+
const unsubscribeAndRemove = async () => {
|
|
41
|
+
this.logger.trace(`Unsubscribing ${key} for event "${params.event}"...`);
|
|
42
|
+
const contractSubsciptions = this.subscriptions.get(contractTarget);
|
|
43
|
+
await contractSubsciptions.contract.removeListener(params.event, params.onData);
|
|
44
|
+
contractSubsciptions.subscriptions.delete(key);
|
|
45
|
+
};
|
|
46
|
+
contract
|
|
47
|
+
.addListener(params.event, params.onData)
|
|
48
|
+
.then(() => {
|
|
49
|
+
this.logger.trace({ event: params.event, key }, `subscription is ready`);
|
|
50
|
+
if (!this.subscriptions.has(contractTarget)) {
|
|
51
|
+
this.subscriptions.set(contractTarget, {
|
|
52
|
+
contract: contract,
|
|
53
|
+
subscriptions: new Map(),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
this.subscriptions.get(contractTarget).subscriptions.set(key, {
|
|
57
|
+
onData: params.onData,
|
|
58
|
+
onError: params.onError,
|
|
59
|
+
unsubscribeAndRemove,
|
|
60
|
+
event: params.event,
|
|
61
|
+
});
|
|
62
|
+
})
|
|
63
|
+
.catch((err) => {
|
|
64
|
+
void Promise.resolve(params.onError(err)).catch((onErrorError) => {
|
|
65
|
+
this.logger.error({ err: onErrorError }, 'Subscription error handler failed');
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
return unsubscribeAndRemove;
|
|
69
|
+
}
|
|
70
|
+
async resubscribe() {
|
|
71
|
+
if (!this.subscriptions.size) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
if (!this.initialized) {
|
|
75
|
+
throw Error(`${BlockchainEventsListener.name} instance should be initialized before`);
|
|
76
|
+
}
|
|
77
|
+
const events = [];
|
|
78
|
+
for (const [, contractSubscriptions] of this.subscriptions) {
|
|
79
|
+
const contract = contractSubscriptions.contract.connect(store.wssProvider);
|
|
80
|
+
contractSubscriptions.contract = contract;
|
|
81
|
+
for (const [, item] of contractSubscriptions.subscriptions) {
|
|
82
|
+
try {
|
|
83
|
+
await item.unsubscribeAndRemove();
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
this.logger.error({ err }, 'Failed to unsubscribe');
|
|
87
|
+
}
|
|
88
|
+
events.push({ ..._.omit(item, ['unsubscribeAndRemove']), contract });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (events.length) {
|
|
92
|
+
try {
|
|
93
|
+
await Promise.all(events.map((event) => this.subscribeEvent(event)));
|
|
94
|
+
this.logger.trace(`${events.length} subscriptions were resubscribed`);
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
this.logger.error({ err }, 'Something went wrong on resubscribing');
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
async unsubscribeAll() {
|
|
104
|
+
if (this.isSubscribingBlocked) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
this.isSubscribingBlocked = true;
|
|
108
|
+
const promises = [];
|
|
109
|
+
try {
|
|
110
|
+
for (const [, contractSubscriptions] of this.subscriptions) {
|
|
111
|
+
for (const [id, item] of contractSubscriptions.subscriptions) {
|
|
112
|
+
promises.push({
|
|
113
|
+
unsubscribe: item.unsubscribeAndRemove(),
|
|
114
|
+
id,
|
|
115
|
+
event: item.event,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const result = await Promise.allSettled(promises);
|
|
120
|
+
result.forEach((item, index) => {
|
|
121
|
+
const data = promises[index];
|
|
122
|
+
if (item.status === 'rejected') {
|
|
123
|
+
this.logger.warn(`Error on ${data.id} unsubscribe "${data.event}" event`);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
this.logger.trace(`Unsubscribe ${data.id} for event "${data.event}" has been completed`);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
this.logger.error({ err }, 'Something went wrong on unsubscribing');
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
for (const [, contractSubscriptions] of this.subscriptions) {
|
|
137
|
+
contractSubscriptions.subscriptions.clear();
|
|
138
|
+
}
|
|
139
|
+
this.subscriptions.clear();
|
|
140
|
+
this.isSubscribingBlocked = false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Function for connecting to blockchain using web socket
|
|
145
|
+
* Needs to run this function before using events
|
|
146
|
+
*/
|
|
147
|
+
async initialize(config) {
|
|
148
|
+
if (this.initialized) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
this.logger.trace(config, 'Initializing');
|
|
152
|
+
const reconnectOptions = Object.assign({
|
|
153
|
+
autoReconnect: true,
|
|
154
|
+
delay: 20000,
|
|
155
|
+
maxAttempts: 5000,
|
|
156
|
+
}, config.reconnect);
|
|
157
|
+
this.logger.info(`Initializing events listener with reconnect options: ${JSON.stringify(reconnectOptions)}`);
|
|
158
|
+
const provider = new WebSocketProvider(config.blockchainUrl);
|
|
159
|
+
try {
|
|
160
|
+
await new Promise((resolve, reject) => {
|
|
161
|
+
const timeoutId = setTimeout(() => {
|
|
162
|
+
reject(new Error("Timeout waiting for Events listener's readiness"));
|
|
163
|
+
}, reconnectOptions.delay ?? 5000);
|
|
164
|
+
const ws = provider.websocket;
|
|
165
|
+
const onOpen = () => {
|
|
166
|
+
clearTimeout(timeoutId);
|
|
167
|
+
this.logger.info('Events listener ready');
|
|
168
|
+
ws.removeEventListener('open', onOpen);
|
|
169
|
+
resolve();
|
|
170
|
+
};
|
|
171
|
+
ws.addEventListener('open', onOpen);
|
|
172
|
+
ws.addEventListener('error', (event) => {
|
|
173
|
+
this.logger.error({
|
|
174
|
+
err: event?.message ?? event,
|
|
175
|
+
msg: 'Events listener error',
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
ws.addEventListener('close', async (event) => {
|
|
179
|
+
if (event.code === 1000) {
|
|
180
|
+
this.logger.debug('The connection successfully completed');
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
this.logger.error({
|
|
184
|
+
err: {
|
|
185
|
+
reason: event.reason,
|
|
186
|
+
code: event.code,
|
|
187
|
+
wasClean: event.wasClean,
|
|
188
|
+
},
|
|
189
|
+
msg: 'Events listener disconnect',
|
|
190
|
+
});
|
|
191
|
+
if (!this.isInReconnectProcess()) {
|
|
192
|
+
await this.tryReconnect(config, reconnectOptions);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
await provider.destroy();
|
|
199
|
+
throw err;
|
|
200
|
+
}
|
|
201
|
+
store.wssProvider = provider;
|
|
202
|
+
this.contract = App__factory.connect(config.contractAddress, provider);
|
|
203
|
+
Superpro.address = config.contractAddress;
|
|
204
|
+
let tokenAddress = this.tokenAddress;
|
|
205
|
+
if (!tokenAddress) {
|
|
206
|
+
tokenAddress = await Superpro.getPrimaryTokenAddress(this.contract);
|
|
207
|
+
SuperproToken.addressWss = tokenAddress;
|
|
208
|
+
this.tokenAddress = tokenAddress;
|
|
209
|
+
}
|
|
210
|
+
this.tokenContract = SuperProtocolToken__factory.connect(tokenAddress, provider);
|
|
211
|
+
this.initialized = true;
|
|
212
|
+
this.reconnectAttemptCount = 0;
|
|
213
|
+
this.logger.trace('Initialized');
|
|
214
|
+
}
|
|
215
|
+
isInReconnectProcess() {
|
|
216
|
+
return this.reconnectAttemptCount > 0;
|
|
217
|
+
}
|
|
218
|
+
async tryReconnect(config, reconnectOptions) {
|
|
219
|
+
if (!reconnectOptions.autoReconnect) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
while (this.reconnectAttemptCount < reconnectOptions.maxAttempts) {
|
|
223
|
+
this.reconnectAttemptCount++;
|
|
224
|
+
this.logger.info(`Events listener reconnecting... attempt ${this.reconnectAttemptCount}/${reconnectOptions.maxAttempts}`);
|
|
225
|
+
await new Promise((res) => setTimeout(res, reconnectOptions.delay));
|
|
226
|
+
try {
|
|
227
|
+
this.initialized = false;
|
|
228
|
+
await this.initialize(config);
|
|
229
|
+
const result = await this.resubscribe();
|
|
230
|
+
if (!result) {
|
|
231
|
+
this.logger.error("Subscriptions have not been activated well on the Events listener's reconnection");
|
|
232
|
+
}
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
this.logger.error({ err, msg: 'Events listener reconnect failed' });
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
this.logger.error(`Max reconnect attempts reached (${reconnectOptions.maxAttempts})`);
|
|
240
|
+
}
|
|
241
|
+
async shutdown() {
|
|
242
|
+
const provider = store.wssProvider;
|
|
243
|
+
if (provider) {
|
|
244
|
+
const result = await this.unsubscribeAll();
|
|
245
|
+
if (!result) {
|
|
246
|
+
this.logger.warn('UnsubscribeAll could not be done well');
|
|
247
|
+
}
|
|
248
|
+
await provider.destroy();
|
|
249
|
+
}
|
|
250
|
+
store.wssProvider = undefined;
|
|
251
|
+
super.shutdown();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2tjaGFpbkV2ZW50c0xpc3RlbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nvbm5lY3RvcnMvQmxvY2tjaGFpbkV2ZW50c0xpc3RlbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLG9CQUFvQixDQUFDO0FBQzdFLE9BQU8sRUFBMEIsaUJBQWlCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3JFLGlDQUFpQztBQUNqQyxPQUFPLEtBQUssTUFBTSxhQUFhLENBQUM7QUFDaEMsT0FBTyxRQUFRLE1BQU0sNkJBQTZCLENBQUM7QUFDbkQsT0FBTyxhQUFhLE1BQU0sa0NBQWtDLENBQUM7QUFDN0QsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFjN0IsTUFBTSxDQUFDLE9BQU8sT0FBTyx3QkFBeUIsU0FBUSxhQUFhO0lBQ2pFLFlBQVk7SUFDSixNQUFNLENBQUMsUUFBUSxDQUEyQjtJQUMxQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDN0IscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0lBRWxDO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVc7UUFDaEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLHdCQUF3QixDQUFDLFFBQVEsR0FBRyxJQUFJLHdCQUF3QixFQUFFLENBQUM7UUFDckUsQ0FBQztRQUVELE9BQU8sd0JBQXdCLENBQUMsUUFBUSxDQUFDO0lBQzNDLENBQUM7SUFFZ0IsYUFBYSxHQUFHLElBQUksR0FBRyxFQUdyQyxDQUFDO0lBRUosY0FBYyxDQUFDLE1B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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { default as BlockchainConnector } from './BlockchainConnector.js';
|
|
2
|
+
export { default as BlockchainEventsListener } from './BlockchainEventsListener.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29ubmVjdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxJQUFJLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sSUFBSSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDIn0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Hash } from '@super-protocol/dto-js';
|
|
2
|
+
export declare const defaultBlockchainUrl = "http://127.0.0.1:8545";
|
|
3
|
+
export declare const defaultGasLimit: bigint;
|
|
4
|
+
export declare const defaultGasPrice: bigint;
|
|
5
|
+
export declare const defaultGasLimitMultiplier = 1.2;
|
|
6
|
+
export declare const defaultMaxFeePerGasMultiplier = 2;
|
|
7
|
+
export declare const defaultMaxPriorityFeePerGasMultiplier = 1.5;
|
|
8
|
+
export declare const txConcurrency = 10;
|
|
9
|
+
export declare const txIntervalMs = 34;
|
|
10
|
+
export declare const ONE_DAY: number;
|
|
11
|
+
export declare const ONE_HOUR: number;
|
|
12
|
+
export declare const FIVE_MINUTES: number;
|
|
13
|
+
export declare const BLOCK_SIZE_TO_FETCH_TRANSACTION = 500;
|
|
14
|
+
export declare const POLYGON_MATIC_EVENT_PATH = "0x0000000000000000000000000000000000001010";
|
|
15
|
+
export declare const BLOCKCHAIN_CALL_RETRY_ATTEMPTS = 20;
|
|
16
|
+
export declare const BLOCKCHAIN_CALL_RETRY_INTERVAL = 3000;
|
|
17
|
+
export declare const TRANSACTION_RETRY_ATTEMPTS = 3;
|
|
18
|
+
export declare const BLOCKCHAIN_BATCH_REQUEST_TIMEOUT = 10000;
|
|
19
|
+
export declare const MAX_RPC_BATCH_SIZE = 1000;
|
|
20
|
+
export declare const POLYGON_MAIN_CHAIN_ID = 137;
|
|
21
|
+
export declare const POLYGON_AMOY_CHAIN_ID = 80002;
|
|
22
|
+
export declare const POLYGON_AMOY_GASSTATION_URL = "https://gasstation.polygon.technology/amoy";
|
|
23
|
+
export declare const POLYGON_MAIN_GASSTATION_URL = "https://gasstation.polygon.technology/v2";
|
|
24
|
+
export declare const OCSP_URL = "https://ocsp.certs.superprotocol.com/v1/ocsp";
|
|
25
|
+
export declare const AMOY_TX_COST_LIMIT: bigint;
|
|
26
|
+
export declare const AMOY_TX_GAS_LIMIT: bigint;
|
|
27
|
+
export declare const DEFAULT_OFFER_VERSION = 0;
|
|
28
|
+
export declare const HTTPS_PORT = 443;
|
|
29
|
+
export declare const ZERO_HASH: Hash;
|
|
30
|
+
export declare const ZERO32_HEX = "0x0000000000000000000000000000000000000000000000000000000000000000";
|
|
31
|
+
export declare const TEE_LOADER_TRUSTED_MRSIGNER = "4a5cb479b8a30fa3821b88aa29bad04788ea006a9e09925bf3ec36398fc9d64b";
|
|
32
|
+
export declare const TEE_PKI_TRUSTED_MRSIGNER = "34ea7ca88034fe80f209e97cd0f8442f7ba621eb2a5f60393ab05871ae6b979d";
|
|
33
|
+
export declare const OPBNB_MAIN_CHAIN_ID = 204;
|
|
34
|
+
export declare const OPBNB_TEST_CHAIN_ID = 5611;
|
|
35
|
+
export declare const OPBNB_TX_GAS_LIMIT: bigint;
|
|
36
|
+
export declare const OPBNB_MAX_PRIORITY_FEE_PER_GAS: bigint;
|
|
37
|
+
export declare const TEE_LOADER_TRUSTED_CERTIFICATE = "-----BEGIN CERTIFICATE-----\nMIIEJTCCAo2gAwIBAgIUGvcNLMGAOGK/UWfDl1PDc8v6qTYwDQYJKoZIhvcNAQEL\nBQAwMDEWMBQGA1UEAwwNU3VwZXJQcm90b2NvbDEWMBQGA1UECgwNU3VwZXJQcm90\nb2NvbDAeFw0yNDA5MDQwOTA4MDZaFw0zNDA5MDIwOTA4MDZaMDAxFjAUBgNVBAMM\nDVN1cGVyUHJvdG9jb2wxFjAUBgNVBAoMDVN1cGVyUHJvdG9jb2wwggGgMA0GCSqG\nSIb3DQEBAQUAA4IBjQAwggGIAoIBgQDL326V3vj04Plbjyuhngxu4qTUGju0Yh8Q\n6i3X7GVZAoMMFpFAOD4s4aE+lGYZsX+zi32tQa/EGePKX4+2kvImTH54FPq5tMRv\n/hJt2CKo+O1ddXR5RVigFkdKZP1gWSVwnVhYPBjE6bSySH/CbkgGlKcYy4unaZzw\nXKr6/FbMQ94XNssfpBZ0b/1OzmYkcndRpYbV9biVIx/d5Vz0FHClru2lelREuPZO\nxfzCAJtBVDX5BgugJ1Lodlznu+wgZHpPEd6qZolakNpcFXx3PD1p6RMZp2T38h62\nMjVtpf0EnyzsinH19id/2rCZZ7ME7VyY6jCb0x3pMw8SRXG/Np3L6szItZsasmho\nnodbkQ9igVBbZwEU53VDNLhqMve39JdCkHdOcFLJ4jP7w6jAf5oB3v/28IjlGjyP\nRGycNT9PeY2RvmkDg7BjqrGiudHf1GYdPPcZpFl6Yr76l89HfcBUyUl2ynKb6pBU\njhO1qrNwj7I4d0ZMPa8xO6JFDv7WLz0CAQOjOTA3MAkGA1UdEwQCMAAwCwYDVR0P\nBAQDAgeAMB0GA1UdDgQWBBQiTjvWXxnyck2wUpWfEC7UTab/hjANBgkqhkiG9w0B\nAQsFAAOCAYEAt3/TnuC2ieDLBFx/QEme9OsiqX4wdfU1zBNnL6ECG5J9WXqS08p7\nqkBXV9mbPGwHy1nGhLy3BKgGHZj6+Wv19CKRwGNFkcweqJexzFxbYHyikBTL5n9o\nvL+A3M0PU2iZAyayKpY62TXTxwIDHDOTETTCtubqwnNHkoFYKRz7P075mYg1SJFe\n+cfssv0/IBvdZ8p34JB5hibAkKkZn9SSa6CAFmFG5L5ps9kXumJEti+HPU8fbBdA\nogoTFEQGzYIFNgu7IZ5/PQgNeSPxQFJqRMJYWkBSD/+uOCh3G5cJ2Oe+rwtR5BL3\nuqR6T7QVrRzzDWy0mzo2GYACilBYoGMiXXqxuZB5XHsNobAvZLVbn5wpPyOChvT+\nR5GssD2vxtyGKL++xi9z1x+Yu48RAd9wSNgF8ZOzoGnvDZAyOQlCV5CgwJvHKvI/\n2ONVNHPSXgVgj5ZBi+MXoDVKumEfABtovfwAgU2sXF3m7c7++1Zav5h+tNjmjJ3/\n1kFRhndoOxr4\n-----END CERTIFICATE-----";
|
|
38
|
+
export declare const OID_CUSTOM_EXTENSION_ORDER_REPORT = "1.3.6.1.3.8888.2";
|
|
39
|
+
export declare const OID_CUSTOM_EXTENSION_ORDER_REPORT_HARDWARE_CONTEXT = "1.3.6.1.3.8888.2.1";
|
|
40
|
+
export declare const OID_CUSTOM_EXTENSION_ORDER_REPORT_SIGNATURE_KEY_HASH = "1.3.6.1.3.8888.2.2";
|
|
41
|
+
export declare const OID_CUSTOM_EXTENSION_ORDER_REPORT_WORKLOAD_INFO_HASH = "1.3.6.1.3.8888.2.3";
|
|
42
|
+
export declare const OID_CUSTOM_EXTENSION_USER_DATA = "1.3.6.1.3.8888.2.4";
|
|
43
|
+
export declare const OID_AUTHORITY_INFORMATION_ACCESS_EXTENSION = "1.3.6.1.5.5.7.1.1";
|
|
44
|
+
export declare const OID_CRL_DISTRIBUTION_POINTS = "2.5.29.31";
|
|
45
|
+
export declare const OID_OCSP_ACCESS_METHOD = "1.3.6.1.5.5.7.48.1";
|
|
46
|
+
export declare const OID_OCSP_ISSUER_ACCESS_METHOD = "1.3.6.1.5.5.7.48.2";
|
|
47
|
+
export declare const OID_OCSP_NONCE = "1.3.6.1.5.5.7.48.1.2";
|
|
48
|
+
export declare const SUPERPROTOCOL_CA = "-----BEGIN CERTIFICATE-----\n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\nSUNBVEUtLS0tLQpNSUlFOGpDQ0JKaWdBd0lCQWdJVWZ3Nm44NU9Ob2FkQjh1TmVN\nd0ZtWS9iZWlRVXdDZ1lJS29aSXpqMEVBd0l3CmNERWlNQ0FHQTFVRUF3d1pTVzUw\nWld3Z1UwZFlJRkJEU3lCUWJHRjBabTl5YlNCRFFURWFNQmdHQTFVRUNnd1IKU1c1\nMFpXd2dRMjl5Y0c5eVlYUnBiMjR4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhK\naE1Rc3dDUVlEVlFRSQpEQUpEUVRFTE1Ba0dBMVVFQmhNQ1ZWTXdIaGNOTWpNd016\nQTVNVGN3TVRFMFdoY05NekF3TXpBNU1UY3dNVEUwCldqQndNU0l3SUFZRFZRUURE\nQmxKYm5SbGJDQlRSMWdnVUVOTElFTmxjblJwWm1sallYUmxNUm93R0FZRFZRUUsK\nREJGSmJuUmxiQ0JEYjNKd2IzSmhkR2x2YmpFVU1CSUdBMVVFQnd3TFUyRnVkR0Vn\nUTJ4aGNtRXhDekFKQmdOVgpCQWdNQWtOQk1Rc3dDUVlEVlFRR0V3SlZVekJaTUJN\nR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCRk83CmlveHJwNFBoOXNwTXE2\nbDRKc05YSVVCeE9jR21rREFXNDJrZ3NBOWwvS3ZFNkRJRmpyLzF3UTdMcjRQdUln\nUEsKV2F3aHBrUnJYaDZadk5uWFpCZWpnZ01PTUlJRENqQWZCZ05WSFNNRUdEQVdn\nQlNWYjEzTnZSdmg2VUJKeWRUMApNODRCVnd2ZVZEQnJCZ05WSFI4RVpEQmlNR0Nn\nWHFCY2hscG9kSFJ3Y3pvdkwyRndhUzUwY25WemRHVmtjMlZ5CmRtbGpaWE11YVc1\nMFpXd3VZMjl0TDNObmVDOWpaWEowYVdacFkyRjBhVzl1TDNZMEwzQmphMk55YkQ5\nallUMXcKYkdGMFptOXliU1psYm1OdlpHbHVaejFrWlhJd0hRWURWUjBPQkJZRUZI\nZ2FucEY0VXV2SmpCZ2VEQmgvM0xvbAoxU3dwTUE0R0ExVWREd0VCL3dRRUF3SUd3\nREFNQmdOVkhSTUJBZjhFQWpBQU1JSUNPd1lKS29aSWh2aE5BUTBCCkJJSUNMREND\nQWlnd0hnWUtLb1pJaHZoTkFRMEJBUVFRUDVwUHZoK0VwcVMxSkpRdGVXN0JrREND\nQVdVR0NpcUcKU0liNFRRRU5BUUl3Z2dGVk1CQUdDeXFHU0liNFRRRU5BUUlCQWdF\nSE1CQUdDeXFHU0liNFRRRU5BUUlDQWdFSgpNQkFHQ3lxR1NJYjRUUUVOQVFJREFn\nRURNQkFHQ3lxR1NJYjRUUUVOQVFJRUFnRURNQkVHQ3lxR1NJYjRUUUVOCkFRSUZB\nZ0lBL3pBUkJnc3Foa2lHK0UwQkRRRUNCZ0lDQVA4d0VBWUxLb1pJaHZoTkFRMEJB\nZ2NDQVFBd0VBWUwKS29aSWh2aE5BUTBCQWdnQ0FRQXdFQVlMS29aSWh2aE5BUTBC\nQWdrQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWdvQwpBUUF3RUFZTEtvWklodmhOQVEw\nQkFnc0NBUUF3RUFZTEtvWklodmhOQVEwQkFnd0NBUUF3RUFZTEtvWklodmhOCkFR\nMEJBZzBDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZzRDQVFBd0VBWUxLb1pJaHZoTkFR\nMEJBZzhDQVFBd0VBWUwKS29aSWh2aE5BUTBCQWhBQ0FRQXdFQVlMS29aSWh2aE5B\nUTBCQWhFQ0FRMHdId1lMS29aSWh2aE5BUTBCQWhJRQpFQWNKQXdQLy93QUFBQUFB\nQUFBQUFBQXdFQVlLS29aSWh2aE5BUTBCQXdRQ0FBQXdGQVlLS29aSWh2aE5BUTBC\nCkJBUUdNR0JxQUFBQU1BOEdDaXFHU0liNFRRRU5BUVVLQVFFd0hnWUtLb1pJaHZo\nTkFRMEJCZ1FRVnZnMnVWdHYKMU1rM0xTYU9mSjRWSkRCRUJnb3Foa2lHK0UwQkRR\nRUhNRFl3RUFZTEtvWklodmhOQVEwQkJ3RUJBZjh3RUFZTApLb1pJaHZoTkFRMEJC\nd0lCQWY4d0VBWUxLb1pJaHZoTkFRMEJCd01CQWY4d0NnWUlLb1pJemowRUF3SURT\nQUF3ClJRSWhBSWVacWV6bGxETEZjcEFYVmlrellqVVFvOEtGVllqY05SOU14TXFh\nMHRjaUFpQUgvcGYzZ3VKMEhpTVkKWUN4QTRFZGZWcGVBZ3p3WnEweEpuNlNRN2tV\nK3BBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJ\nRklDQVRFLS0tLS0KTUlJQ2xqQ0NBajJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5K\nMVBRenpnRlhDOTVVTUFvR0NDcUdTTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVs\ndWRHVnNJRk5IV0NCU2IyOTBJRU5CTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIz\nSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJn\nTlZCQWdNQWtOQk1Rc3cKQ1FZRFZRUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdN\nVEJhRncwek16QTFNakV4TURVd01UQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1Zz\nSUZOSFdDQlFRMHNnVUd4aGRHWnZjbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1Zz\nCklFTnZjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRF\nTE1Ba0dBMVVFQ0F3Q1EwRXgKQ3pBSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpq\nMENBUVlJS29aSXpqMERBUWNEUWdBRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3\nMkV5REdnVzVyWEN0eDJ0VlRMcTZoS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1U\nbEpsCmVUbWkyV1l6M3FPQnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAw\naWZPRHRKVlN2MUFiT1NjR3JEQlMKQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhS\nd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFX\nNTBaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZn\nUVVsVzlkCnpiMGI0ZWxBU2NuVTlEUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURB\nZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lE\nUndBd1JBSWdYc1ZraTB3K2k2VllHVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQx\nYWk1Y0NJQ1liMVNBbUQ1eGtmVFZwdm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBO\nKwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNB\nVEUtLS0tLQpNSUlDanpDQ0FqU2dBd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlR\nR3prbkJxd3dDZ1lJS29aSXpqMEVBd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3\nZ1UwZFlJRkp2YjNRZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNt\nRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNB\nd0NRMEV4Q3pBSgpCZ05WQkFZVEFsVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hE\nVFE1TVRJek1USXpOVGsxT1Zvd2FERWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZ\nSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5\ndU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBF\neEN6QUpCZ05WQkFZVApBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFR\nY0RRZ0FFQzZuRXdNRElZWk9qL2lQV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZK\nZlZua1k0dTNJamtEWVlMME14TzRtcXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IK\ndXpDQnVEQWZCZ05WSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NH\nckRCU0JnTlZIUjhFU3pCSgpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1s\nallYUmxjeTUwY25WemRHVmtjMlZ5ZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRH\nVnNVMGRZVW05dmRFTkJMbVJsY2pBZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3\nU1YKVXI5UUd6a25CcXd3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIv\nd1FJTUFZQkFmOENBUUV3Q2dZSQpLb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtS\nK1M5Q2lTRGNOb293THVQUkxzV0dmL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhv\nTXMrWG81by9zWDZPOVFXeEhSQXZaVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBD\nRVJUSUZJQ0FURS0tLS0tCgAwDQYJKoZIhvcNAQELBQADggEBAGHbT1NQEW0t5uYp\nmskVka8DDrgVEM8She2htuRXNeeTpaImsFWQhQeSqlK/yc3NH2/+RfGGu4UT/zgS\n4T/oLc8HosQFZxkvcESz1YKtSqHYhfuavlDuR6K0/RS6wy1dADvA6X3b57dJ81EP\nZ/dda6qpPxXBiwhpfcFJtpiP0tIYhS6LJgFnSAdEE9G1HwYUrCYsjQ2LCgBQDqYB\n9AWDmUBh8SSdRQzYJfmHG8LTXox/8mD9Hq8HPhzEzSFwu/Yy+KZX9uxEw0vPvmVI\nbalDQD+0bddS+Jvj4ELLmKRk/yX51Lqx6YYr0rSX7t9RaI9F9muzzQ4mWzWA6ief\nYwF1StA=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n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\nfR9Jbk3FLW/LY+BFJaQKnnGIIAAAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRob\nHB0eHwUAYg4AAC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlFOHpDQ0JK\naWdBd0lCQWdJVVFaT1NWSy8vQlZkVkJXeUIwaHM4dURoTkc2Z3dDZ1lJS29aSXpq\nMEVBd0l3CmNERWlNQ0FHQTFVRUF3d1pTVzUwWld3Z1UwZFlJRkJEU3lCUWJHRjBa\nbTl5YlNCRFFURWFNQmdHQTFVRUNnd1IKU1c1MFpXd2dRMjl5Y0c5eVlYUnBiMjR4\nRkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1Rc3dDUVlEVlFRSQpEQUpEUVRF\nTE1Ba0dBMVVFQmhNQ1ZWTXdIaGNOTWpVd056QTVNVFV3T1RBd1doY05Nekl3TnpB\nNU1UVXdPVEF3CldqQndNU0l3SUFZRFZRUUREQmxKYm5SbGJDQlRSMWdnVUVOTElF\nTmxjblJwWm1sallYUmxNUm93R0FZRFZRUUsKREJGSmJuUmxiQ0JEYjNKd2IzSmhk\nR2x2YmpFVU1CSUdBMVVFQnd3TFUyRnVkR0VnUTJ4aGNtRXhDekFKQmdOVgpCQWdN\nQWtOQk1Rc3dDUVlEVlFRR0V3SlZVekJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5\nQXdFSEEwSUFCRFFBCkZNa2lVR1Z4S2luMnpIODB2MkMvbXpGQ0N1MnV0VHBOdE1V\nTzhjMUJ6U1F1ZlZ0YjYyT2JFMUhOUVNvZmE4Q3IKdXVLeWJ0VHBRT3BaakZXQkFh\nS2pnZ01PTUlJRENqQWZCZ05WSFNNRUdEQVdnQlNWYjEzTnZSdmg2VUJKeWRUMApN\nODRCVnd2ZVZEQnJCZ05WSFI4RVpEQmlNR0NnWHFCY2hscG9kSFJ3Y3pvdkwyRndh\nUzUwY25WemRHVmtjMlZ5CmRtbGpaWE11YVc1MFpXd3VZMjl0TDNObmVDOWpaWEow\nYVdacFkyRjBhVzl1TDNZMEwzQmphMk55YkQ5allUMXcKYkdGMFptOXliU1psYm1O\ndlpHbHVaejFrWlhJd0hRWURWUjBPQkJZRUZPUHdhb25yYnpPZks0My8vZ3Y5M0Fm\nQgpiMGNZTUE0R0ExVWREd0VCL3dRRUF3SUd3REFNQmdOVkhSTUJBZjhFQWpBQU1J\nSUNPd1lKS29aSWh2aE5BUTBCCkJJSUNMRENDQWlnd0hnWUtLb1pJaHZoTkFRMEJB\nUVFRM3cvN014Q2Vwbkt2V2Q2WXhZb0VJVENDQVdVR0NpcUcKU0liNFRRRU5BUUl3\nZ2dGVk1CQUdDeXFHU0liNFRRRU5BUUlCQWdFTE1CQUdDeXFHU0liNFRRRU5BUUlD\nQWdFTApNQkFHQ3lxR1NJYjRUUUVOQVFJREFnRURNQkFHQ3lxR1NJYjRUUUVOQVFJ\nRUFnRURNQkVHQ3lxR1NJYjRUUUVOCkFRSUZBZ0lBL3pBUkJnc3Foa2lHK0UwQkRR\nRUNCZ0lDQVA4d0VBWUxLb1pJaHZoTkFRMEJBZ2NDQVFBd0VBWUwKS29aSWh2aE5B\nUTBCQWdnQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWdrQ0FRQXdFQVlMS29aSWh2aE5B\nUTBCQWdvQwpBUUF3RUFZTEtvWklodmhOQVEwQkFnc0NBUUF3RUFZTEtvWklodmhO\nQVEwQkFnd0NBUUF3RUFZTEtvWklodmhOCkFRMEJBZzBDQVFBd0VBWUxLb1pJaHZo\nTkFRMEJBZzRDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZzhDQVFBd0VBWUwKS29aSWh2\naE5BUTBCQWhBQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWhFQ0FRMHdId1lMS29aSWh2\naE5BUTBCQWhJRQpFQXNMQXdQLy93QUFBQUFBQUFBQUFBQXdFQVlLS29aSWh2aE5B\nUTBCQXdRQ0FBQXdGQVlLS29aSWh2aE5BUTBCCkJBUUdNR0JxQUFBQU1BOEdDaXFH\nU0liNFRRRU5BUVVLQVFFd0hnWUtLb1pJaHZoTkFRMEJCZ1FRcDZtY096M0EKdDRB\nSVRmdk84R1Y3cHpCRUJnb3Foa2lHK0UwQkRRRUhNRFl3RUFZTEtvWklodmhOQVEw\nQkJ3RUJBZjh3RUFZTApLb1pJaHZoTkFRMEJCd0lCQWY4d0VBWUxLb1pJaHZoTkFR\nMEJCd01CQWY4d0NnWUlLb1pJemowRUF3SURTUUF3ClJnSWhBTEVtR1U2VldkdG5n\nYTZiTG5yaksrWEdWczlMVERSRkZURTRpcy9qU05tQkFpRUExY21KNUpkV0VIYlEK\nL2dyWVJ2L3c4MytTQmpidTJKQWcxR0dJNTJmSjFUUT0KLS0tLS1FTkQgQ0VSVElG\nSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2xqQ0NB\najJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVVTUFvR0NDcUdT\nTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NCU2IyOTBJRU5C\nTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJqRVVNQklHQTFV\nRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3cKQ1FZRFZR\nUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFNakV4TURVd01U\nQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNnVUd4aGRHWnZj\nbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21GMGFXOXVNUlF3\nRWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXgKQ3pB\nSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdB\nRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0eDJ0VlRMcTZo\nS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6M3FPQnV6Q0J1\nREFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlMK\nQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJs\nY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwwbHVkR1ZzVTBk\nWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0ZWxBU2NuVTlE\nUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1B\nWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1ZraTB3K2k2VllH\nVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNBbUQ1eGtmVFZw\ndm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBDRVJUSUZJQ0FU\nRS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDanpDQ0FqU2dB\nd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJS29aSXpqMEVB\nd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNRZ1EwRXhHakFZ\nQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0\nVFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpCZ05WQkFZVEFs\nVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpOVGsxT1Zvd2FE\nRWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZC\nQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUw\nWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZVApBbFZUTUZr\nd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdNRElZWk9qL2lQ\nV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtEWVlMME14TzRt\ncXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05WSFNNRUdEQVdn\nQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhFU3pCSgpNRWVn\nUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25WemRHVmtjMlZ5\nZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRFTkJMbVJsY2pB\nZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25CcXd3RGdZRFZS\nMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUV3Q2dZSQpL\nb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293THVQUkxzV0dm\nL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZPOVFXeEhSQXZa\nVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgAwDQYJ\nKoZIhvcNAQELBQADggEBADk76T9z80TGctAh/LvBX8LMCLZVb/F2nw7mQy9Q7N1w\n6fo7TRV0XV6/yvctv3eB0oly0ybcuBZmARkokKAy47Sl6EhO16t2/mpp3CYx7+5A\n+Rx5Mupwtziwa6IXfPa3Ml+e99HMXv8CBSbEP6NiMvxNJPXbncjdWI6T+EWYnB9O\nn7HcKweXpk3sPBPvm7Tyq0n3Q7+3rM5JaPr6O4+ksVG/TepqHoYF+KG9AdJyzv6v\n69HeBsvyBfQ1BhX8vqAKJDxbML0eYzDWZ6tDqMuJ/CdqTGJ97d0YISTJ2eRTmXiP\njm1g0H4p0FUGuDItBX7q+mkfWkTBgl1fR0ovP0YaWvk=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIU9zCCFJ2gAwIBAgIQalc8WjxqJTTVPaingMIxCzAKBggqhkjOPQQDAjB2MSIw\nIAYDVQQDExlTdXBlclByb3RvY29sIFRFRSBSb290IENBMQswCQYDVQQGEwJVUzEL\nMAkGA1UECBMCTlkxETAPBgNVBAcTCE5ldyBZb3JrMRYwFAYDVQQKEw1TdXBlclBy\nb3RvY29sMQswCQYDVQQLEwJJVDAeFw0yNTA3MjExNDU2MjNaFw0zNTA4MDEwMDAw\nMDBaMHYxIjAgBgNVBAMTGVN1cGVyUHJvdG9jb2wgVEVFIFJvb3QgQ0ExCzAJBgNV\nBAYTAlVTMQswCQYDVQQIEwJOWTERMA8GA1UEBxMITmV3IFlvcmsxFjAUBgNVBAoT\nDVN1cGVyUHJvdG9jb2wxCzAJBgNVBAsTAklUMFYwEAYHKoZIzj0CAQYFK4EEAAoD\nQgAEcSLjZBu+UoiuppY25rr77/iOeGC/PTrfDxvdgZVxEjdPMZLteyr7RVCXTOC4\nSyqAWpls0hwpq/uiozkz8Lirn6OCEw4wghMKMA8GA1UdEwEB/wQFMAMBAf8wDgYD\nVR0PAQH/BAQDAgKkMB8GA1UdIwQYMBaAFEGXfB2GhA+ajUWA8F9dN5w9CwSSMB0G\nA1UdDgQWBBRBl3wdhoQPmo1FgPBfXTecPQsEkjAUBggrBgEDxTgBAQQIc2d4LWRj\nYXAwghKPBgsGCSqGSIb4TYo5BgSCEn4DAAIAAAAAAAsAEACTmnIz95xMqZQKDbOV\nfwYHwuAeEM7bIyMk8VaVVsIMaAAAAAALEA8O//8AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAOcAAAAAAAAAg090avZ3FKII\nEzhH7K4PGXPW5VTSomOCmLCnduwrcNUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAADTqfKiANP6A8gnpfND4RC97piHrKl9gOTqwWHGua5edAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAABZt5Bjk2qaoB9n1ypfgAKYfKmQ66l3bkA9OpEGY3IL0AAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKEAAAaKO6ieLwSeouEySO5KL1fDuAIllB\nuOEBLQtYDMgLUJLuwbsbimEqwlyoGrXdrA/hC7WFI71Me568kMoAz7kB77dAjZv2\nT83/USoIQTTLTZ+kcZqLMigsqNeJHh5uBLsF5uqzPNwBDeJF1nIi/MaV+qcGve37\nEu8XoSCGSOCjb2gLEA8O//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAVAAAAAAAAAOcAAAAAAAAAeP6M/QEJWg8Qiv9cQGJLk2EtbCi3\nPhqNKBecnd8OBoYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIxPV3XX\nllA+lhN/d8aKgpoAVqyN7XAUCwgbCUSQxXv/AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQALAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANWq0gba\nZ0iNLGHsRl9vWJK1s51EREhaa5246jLZcL3NAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAArkN01FJ5vTX8xsD4zCyuu9jkUA276SlrfE9PttOJ2vf2ljC3d\n1oyCUyIPv+8dfR9Jbk3FLW/LY+BFJaQKnnGIIAAAAQIDBAUGBwgJCgsMDQ4PEBES\nExQVFhcYGRobHB0eHwUAYg4AAC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpN\nSUlFOHpDQ0JKaWdBd0lCQWdJVVFaT1NWSy8vQlZkVkJXeUIwaHM4dURoTkc2Z3dD\nZ1lJS29aSXpqMEVBd0l3CmNERWlNQ0FHQTFVRUF3d1pTVzUwWld3Z1UwZFlJRkJE\nU3lCUWJHRjBabTl5YlNCRFFURWFNQmdHQTFVRUNnd1IKU1c1MFpXd2dRMjl5Y0c5\neVlYUnBiMjR4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1Rc3dDUVlEVlFR\nSQpEQUpEUVRFTE1Ba0dBMVVFQmhNQ1ZWTXdIaGNOTWpVd056QTVNVFV3T1RBd1do\nY05Nekl3TnpBNU1UVXdPVEF3CldqQndNU0l3SUFZRFZRUUREQmxKYm5SbGJDQlRS\nMWdnVUVOTElFTmxjblJwWm1sallYUmxNUm93R0FZRFZRUUsKREJGSmJuUmxiQ0JE\nYjNKd2IzSmhkR2x2YmpFVU1CSUdBMVVFQnd3TFUyRnVkR0VnUTJ4aGNtRXhDekFK\nQmdOVgpCQWdNQWtOQk1Rc3dDUVlEVlFRR0V3SlZVekJaTUJNR0J5cUdTTTQ5QWdF\nR0NDcUdTTTQ5QXdFSEEwSUFCRFFBCkZNa2lVR1Z4S2luMnpIODB2MkMvbXpGQ0N1\nMnV0VHBOdE1VTzhjMUJ6U1F1ZlZ0YjYyT2JFMUhOUVNvZmE4Q3IKdXVLeWJ0VHBR\nT3BaakZXQkFhS2pnZ01PTUlJRENqQWZCZ05WSFNNRUdEQVdnQlNWYjEzTnZSdmg2\nVUJKeWRUMApNODRCVnd2ZVZEQnJCZ05WSFI4RVpEQmlNR0NnWHFCY2hscG9kSFJ3\nY3pvdkwyRndhUzUwY25WemRHVmtjMlZ5CmRtbGpaWE11YVc1MFpXd3VZMjl0TDNO\nbmVDOWpaWEowYVdacFkyRjBhVzl1TDNZMEwzQmphMk55YkQ5allUMXcKYkdGMFpt\nOXliU1psYm1OdlpHbHVaejFrWlhJd0hRWURWUjBPQkJZRUZPUHdhb25yYnpPZks0\nMy8vZ3Y5M0FmQgpiMGNZTUE0R0ExVWREd0VCL3dRRUF3SUd3REFNQmdOVkhSTUJB\nZjhFQWpBQU1JSUNPd1lKS29aSWh2aE5BUTBCCkJJSUNMRENDQWlnd0hnWUtLb1pJ\naHZoTkFRMEJBUVFRM3cvN014Q2Vwbkt2V2Q2WXhZb0VJVENDQVdVR0NpcUcKU0li\nNFRRRU5BUUl3Z2dGVk1CQUdDeXFHU0liNFRRRU5BUUlCQWdFTE1CQUdDeXFHU0li\nNFRRRU5BUUlDQWdFTApNQkFHQ3lxR1NJYjRUUUVOQVFJREFnRURNQkFHQ3lxR1NJ\nYjRUUUVOQVFJRUFnRURNQkVHQ3lxR1NJYjRUUUVOCkFRSUZBZ0lBL3pBUkJnc3Fo\na2lHK0UwQkRRRUNCZ0lDQVA4d0VBWUxLb1pJaHZoTkFRMEJBZ2NDQVFBd0VBWUwK\nS29aSWh2aE5BUTBCQWdnQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWdrQ0FRQXdFQVlM\nS29aSWh2aE5BUTBCQWdvQwpBUUF3RUFZTEtvWklodmhOQVEwQkFnc0NBUUF3RUFZ\nTEtvWklodmhOQVEwQkFnd0NBUUF3RUFZTEtvWklodmhOCkFRMEJBZzBDQVFBd0VB\nWUxLb1pJaHZoTkFRMEJBZzRDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZzhDQVFBd0VB\nWUwKS29aSWh2aE5BUTBCQWhBQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWhFQ0FRMHdI\nd1lMS29aSWh2aE5BUTBCQWhJRQpFQXNMQXdQLy93QUFBQUFBQUFBQUFBQXdFQVlL\nS29aSWh2aE5BUTBCQXdRQ0FBQXdGQVlLS29aSWh2aE5BUTBCCkJBUUdNR0JxQUFB\nQU1BOEdDaXFHU0liNFRRRU5BUVVLQVFFd0hnWUtLb1pJaHZoTkFRMEJCZ1FRcDZt\nY096M0EKdDRBSVRmdk84R1Y3cHpCRUJnb3Foa2lHK0UwQkRRRUhNRFl3RUFZTEtv\nWklodmhOQVEwQkJ3RUJBZjh3RUFZTApLb1pJaHZoTkFRMEJCd0lCQWY4d0VBWUxL\nb1pJaHZoTkFRMEJCd01CQWY4d0NnWUlLb1pJemowRUF3SURTUUF3ClJnSWhBTEVt\nR1U2VldkdG5nYTZiTG5yaksrWEdWczlMVERSRkZURTRpcy9qU05tQkFpRUExY21K\nNUpkV0VIYlEKL2dyWVJ2L3c4MytTQmpidTJKQWcxR0dJNTJmSjFUUT0KLS0tLS1F\nTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0K\nTUlJQ2xqQ0NBajJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVV\nTUFvR0NDcUdTTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NC\nU2IyOTBJRU5CTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJq\nRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1R\nc3cKQ1FZRFZRUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFN\nakV4TURVd01UQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNn\nVUd4aGRHWnZjbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21G\nMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3\nQ1EwRXgKQ3pBSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpq\nMERBUWNEUWdBRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0\neDJ0VlRMcTZoS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6\nM3FPQnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFi\nT1NjR3JEQlMKQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25S\ncFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEww\nbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0\nZWxBU2NuVTlEUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRF\nd0VCL3dRSU1BWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1Zr\naTB3K2k2VllHVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNB\nbUQ1eGtmVFZwdm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBD\nRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlD\nanpDQ0FqU2dBd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJ\nS29aSXpqMEVBd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNR\nZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0Vn\nWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpC\nZ05WQkFZVEFsVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpO\nVGsxT1Zvd2FERWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4\nR2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFR\nSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZ\nVApBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdN\nRElZWk9qL2lQV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtE\nWVlMME14TzRtcXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05W\nSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhF\nU3pCSgpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25W\nemRHVmtjMlZ5ZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRF\nTkJMbVJsY2pBZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25C\ncXd3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENB\nUUV3Q2dZSQpLb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293\nTHVQUkxzV0dmL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZP\nOVFXeEhSQXZaVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0t\nLS0tCgAwCgYIKoZIzj0EAwIDSAAwRQIgDTaE8oMgfCSqhbOeqnn6FD2ypLS4arzW\nth/G0VQ3e40CIQCEcpjpdAP63KCipYLE1UEmHJOBOvcKNjevt/2O9DkwXA==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n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\n8GsvLa47wxM2A3uBCtoioBO+IAAAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRob\nHB0eHwUAYg4AAC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlFOHpDQ0JK\naWdBd0lCQWdJVVFaT1NWSy8vQlZkVkJXeUIwaHM4dURoTkc2Z3dDZ1lJS29aSXpq\nMEVBd0l3CmNERWlNQ0FHQTFVRUF3d1pTVzUwWld3Z1UwZFlJRkJEU3lCUWJHRjBa\nbTl5YlNCRFFURWFNQmdHQTFVRUNnd1IKU1c1MFpXd2dRMjl5Y0c5eVlYUnBiMjR4\nRkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1Rc3dDUVlEVlFRSQpEQUpEUVRF\nTE1Ba0dBMVVFQmhNQ1ZWTXdIaGNOTWpVd056QTVNVFV3T1RBd1doY05Nekl3TnpB\nNU1UVXdPVEF3CldqQndNU0l3SUFZRFZRUUREQmxKYm5SbGJDQlRSMWdnVUVOTElF\nTmxjblJwWm1sallYUmxNUm93R0FZRFZRUUsKREJGSmJuUmxiQ0JEYjNKd2IzSmhk\nR2x2YmpFVU1CSUdBMVVFQnd3TFUyRnVkR0VnUTJ4aGNtRXhDekFKQmdOVgpCQWdN\nQWtOQk1Rc3dDUVlEVlFRR0V3SlZVekJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5\nQXdFSEEwSUFCRFFBCkZNa2lVR1Z4S2luMnpIODB2MkMvbXpGQ0N1MnV0VHBOdE1V\nTzhjMUJ6U1F1ZlZ0YjYyT2JFMUhOUVNvZmE4Q3IKdXVLeWJ0VHBRT3BaakZXQkFh\nS2pnZ01PTUlJRENqQWZCZ05WSFNNRUdEQVdnQlNWYjEzTnZSdmg2VUJKeWRUMApN\nODRCVnd2ZVZEQnJCZ05WSFI4RVpEQmlNR0NnWHFCY2hscG9kSFJ3Y3pvdkwyRndh\nUzUwY25WemRHVmtjMlZ5CmRtbGpaWE11YVc1MFpXd3VZMjl0TDNObmVDOWpaWEow\nYVdacFkyRjBhVzl1TDNZMEwzQmphMk55YkQ5allUMXcKYkdGMFptOXliU1psYm1O\ndlpHbHVaejFrWlhJd0hRWURWUjBPQkJZRUZPUHdhb25yYnpPZks0My8vZ3Y5M0Fm\nQgpiMGNZTUE0R0ExVWREd0VCL3dRRUF3SUd3REFNQmdOVkhSTUJBZjhFQWpBQU1J\nSUNPd1lKS29aSWh2aE5BUTBCCkJJSUNMRENDQWlnd0hnWUtLb1pJaHZoTkFRMEJB\nUVFRM3cvN014Q2Vwbkt2V2Q2WXhZb0VJVENDQVdVR0NpcUcKU0liNFRRRU5BUUl3\nZ2dGVk1CQUdDeXFHU0liNFRRRU5BUUlCQWdFTE1CQUdDeXFHU0liNFRRRU5BUUlD\nQWdFTApNQkFHQ3lxR1NJYjRUUUVOQVFJREFnRURNQkFHQ3lxR1NJYjRUUUVOQVFJ\nRUFnRURNQkVHQ3lxR1NJYjRUUUVOCkFRSUZBZ0lBL3pBUkJnc3Foa2lHK0UwQkRR\nRUNCZ0lDQVA4d0VBWUxLb1pJaHZoTkFRMEJBZ2NDQVFBd0VBWUwKS29aSWh2aE5B\nUTBCQWdnQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWdrQ0FRQXdFQVlMS29aSWh2aE5B\nUTBCQWdvQwpBUUF3RUFZTEtvWklodmhOQVEwQkFnc0NBUUF3RUFZTEtvWklodmhO\nQVEwQkFnd0NBUUF3RUFZTEtvWklodmhOCkFRMEJBZzBDQVFBd0VBWUxLb1pJaHZo\nTkFRMEJBZzRDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZzhDQVFBd0VBWUwKS29aSWh2\naE5BUTBCQWhBQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWhFQ0FRMHdId1lMS29aSWh2\naE5BUTBCQWhJRQpFQXNMQXdQLy93QUFBQUFBQUFBQUFBQXdFQVlLS29aSWh2aE5B\nUTBCQXdRQ0FBQXdGQVlLS29aSWh2aE5BUTBCCkJBUUdNR0JxQUFBQU1BOEdDaXFH\nU0liNFRRRU5BUVVLQVFFd0hnWUtLb1pJaHZoTkFRMEJCZ1FRcDZtY096M0EKdDRB\nSVRmdk84R1Y3cHpCRUJnb3Foa2lHK0UwQkRRRUhNRFl3RUFZTEtvWklodmhOQVEw\nQkJ3RUJBZjh3RUFZTApLb1pJaHZoTkFRMEJCd0lCQWY4d0VBWUxLb1pJaHZoTkFR\nMEJCd01CQWY4d0NnWUlLb1pJemowRUF3SURTUUF3ClJnSWhBTEVtR1U2VldkdG5n\nYTZiTG5yaksrWEdWczlMVERSRkZURTRpcy9qU05tQkFpRUExY21KNUpkV0VIYlEK\nL2dyWVJ2L3c4MytTQmpidTJKQWcxR0dJNTJmSjFUUT0KLS0tLS1FTkQgQ0VSVElG\nSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2xqQ0NB\najJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVVTUFvR0NDcUdT\nTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NCU2IyOTBJRU5C\nTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJqRVVNQklHQTFV\nRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3cKQ1FZRFZR\nUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFNakV4TURVd01U\nQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNnVUd4aGRHWnZj\nbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21GMGFXOXVNUlF3\nRWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXgKQ3pB\nSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdB\nRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0eDJ0VlRMcTZo\nS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6M3FPQnV6Q0J1\nREFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlMK\nQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJs\nY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwwbHVkR1ZzVTBk\nWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0ZWxBU2NuVTlE\nUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1B\nWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1ZraTB3K2k2VllH\nVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNBbUQ1eGtmVFZw\ndm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBDRVJUSUZJQ0FU\nRS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDanpDQ0FqU2dB\nd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJS29aSXpqMEVB\nd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNRZ1EwRXhHakFZ\nQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0\nVFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpCZ05WQkFZVEFs\nVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpOVGsxT1Zvd2FE\nRWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZC\nQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUw\nWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZVApBbFZUTUZr\nd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdNRElZWk9qL2lQ\nV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtEWVlMME14TzRt\ncXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05WSFNNRUdEQVdn\nQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhFU3pCSgpNRWVn\nUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25WemRHVmtjMlZ5\nZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRFTkJMbVJsY2pB\nZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25CcXd3RGdZRFZS\nMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUV3Q2dZSQpL\nb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293THVQUkxzV0dm\nL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZPOVFXeEhSQXZa\nVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgAwDQYJ\nKoZIhvcNAQELBQADggEBAKkOQGvOjQQ7w2BeSxqLXo5vLLESx3ksJMRVBF6UMlHg\nmYwC6cuWeZxSaJBcBn+XR1n03BL5XteH34GowIw4/chAPDOMtLDkLQiObCQxhvlA\nqQNhJAP1B1bdYaHMPunc1zVq0G3MeHPjKEnLGQgX+VeIHxJOwpZ1IMGuHJcjYoSK\nEaHjNdoGCSllzGTGUBmda6qHNwgz+X8IZ8AktDH/gQxPHmmuoWWMchz2Bg2cSBLX\n1bLkn2WBr3rl5HgEwiestcaNC8vllrMUfd16HZSuMypr13NLYEQUGoVSMv6QJRAl\nfuKNqVE955sVTjAUfJu0fK/lYhoJEXhBXWdvamurRhQ=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIU+DCCFJ2gAwIBAgIQRbz9C1DdJRlVO8NiDEpfyjAKBggqhkjOPQQDAjB2MSIw\nIAYDVQQDExlTdXBlclByb3RvY29sIFRFRSBSb290IENBMQswCQYDVQQGEwJVUzEL\nMAkGA1UECBMCTlkxETAPBgNVBAcTCE5ldyBZb3JrMRYwFAYDVQQKEw1TdXBlclBy\nb3RvY29sMQswCQYDVQQLEwJJVDAeFw0yNjAxMjcxNjQ3MzZaFw0zNTA4MDEwMDAw\nMDBaMHYxIjAgBgNVBAMTGVN1cGVyUHJvdG9jb2wgVEVFIFJvb3QgQ0ExCzAJBgNV\nBAYTAlVTMQswCQYDVQQIEwJOWTERMA8GA1UEBxMITmV3IFlvcmsxFjAUBgNVBAoT\nDVN1cGVyUHJvdG9jb2wxCzAJBgNVBAsTAklUMFYwEAYHKoZIzj0CAQYFK4EEAAoD\nQgAEZ8KD9tyLV88CeWfb4OD0bPw29PoCe56JAAEizCE4TEUJCp5T8/ZAPk3yidKE\njgKvZoOWCr7fvLoYm+fKo8dbIqOCEw4wghMKMA8GA1UdEwEB/wQFMAMBAf8wDgYD\nVR0PAQH/BAQDAgKkMB8GA1UdIwQYMBaAFHuJOB4jlKmDy39BxxZ2Ab1yQ2f4MB0G\nA1UdDgQWBBR7iTgeI5Spg8t/QccWdgG9ckNn+DAUBggrBgEDxTgBAQQIc2d4LWRj\nYXAwghKPBgsGCSqGSIb4TYo5BgSCEn4DAAIAAAAAAAsAEACTmnIz95xMqZQKDbOV\nfwYHwuAeEM7bIyMk8VaVVsIMaAAAAAALEA8O//8AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAOcAAAAAAAAAg090avZ3FKII\nEzhH7K4PGXPW5VTSomOCmLCnduwrcNUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAADTqfKiANP6A8gnpfND4RC97piHrKl9gOTqwWHGua5edAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAACqHRvGLw/OscC7fDHwP91HqU/m9hO3OgvHsxT19gs5rAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKEAAAoA0mYNwFZN0ZW5PnETOGILkP3Rc2\nSAt6CnZEumjJ2U+101xh4i81AxkLzsTnRjAGiM9Fgti/zHGDQFRN8Luud7dAjZv2\nT83/USoIQTTLTZ+kcZqLMigsqNeJHh5uBLsF5uqzPNwBDeJF1nIi/MaV+qcGve37\nEu8XoSCGSOCjb2gLEA8O//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAVAAAAAAAAAOcAAAAAAAAAeP6M/QEJWg8Qiv9cQGJLk2EtbCi3\nPhqNKBecnd8OBoYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIxPV3XX\nllA+lhN/d8aKgpoAVqyN7XAUCwgbCUSQxXv/AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQALAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANWq0gba\nZ0iNLGHsRl9vWJK1s51EREhaa5246jLZcL3NAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAA3fXcIoELQsMOS5WsIpabpR3dqI698Zc2N9WDpDbs1ms2RRbMd\n3x1b/40tUiZT8GsvLa47wxM2A3uBCtoioBO+IAAAAQIDBAUGBwgJCgsMDQ4PEBES\nExQVFhcYGRobHB0eHwUAYg4AAC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpN\nSUlFOHpDQ0JKaWdBd0lCQWdJVVFaT1NWSy8vQlZkVkJXeUIwaHM4dURoTkc2Z3dD\nZ1lJS29aSXpqMEVBd0l3CmNERWlNQ0FHQTFVRUF3d1pTVzUwWld3Z1UwZFlJRkJE\nU3lCUWJHRjBabTl5YlNCRFFURWFNQmdHQTFVRUNnd1IKU1c1MFpXd2dRMjl5Y0c5\neVlYUnBiMjR4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1Rc3dDUVlEVlFR\nSQpEQUpEUVRFTE1Ba0dBMVVFQmhNQ1ZWTXdIaGNOTWpVd056QTVNVFV3T1RBd1do\nY05Nekl3TnpBNU1UVXdPVEF3CldqQndNU0l3SUFZRFZRUUREQmxKYm5SbGJDQlRS\nMWdnVUVOTElFTmxjblJwWm1sallYUmxNUm93R0FZRFZRUUsKREJGSmJuUmxiQ0JE\nYjNKd2IzSmhkR2x2YmpFVU1CSUdBMVVFQnd3TFUyRnVkR0VnUTJ4aGNtRXhDekFK\nQmdOVgpCQWdNQWtOQk1Rc3dDUVlEVlFRR0V3SlZVekJaTUJNR0J5cUdTTTQ5QWdF\nR0NDcUdTTTQ5QXdFSEEwSUFCRFFBCkZNa2lVR1Z4S2luMnpIODB2MkMvbXpGQ0N1\nMnV0VHBOdE1VTzhjMUJ6U1F1ZlZ0YjYyT2JFMUhOUVNvZmE4Q3IKdXVLeWJ0VHBR\nT3BaakZXQkFhS2pnZ01PTUlJRENqQWZCZ05WSFNNRUdEQVdnQlNWYjEzTnZSdmg2\nVUJKeWRUMApNODRCVnd2ZVZEQnJCZ05WSFI4RVpEQmlNR0NnWHFCY2hscG9kSFJ3\nY3pvdkwyRndhUzUwY25WemRHVmtjMlZ5CmRtbGpaWE11YVc1MFpXd3VZMjl0TDNO\nbmVDOWpaWEowYVdacFkyRjBhVzl1TDNZMEwzQmphMk55YkQ5allUMXcKYkdGMFpt\nOXliU1psYm1OdlpHbHVaejFrWlhJd0hRWURWUjBPQkJZRUZPUHdhb25yYnpPZks0\nMy8vZ3Y5M0FmQgpiMGNZTUE0R0ExVWREd0VCL3dRRUF3SUd3REFNQmdOVkhSTUJB\nZjhFQWpBQU1JSUNPd1lKS29aSWh2aE5BUTBCCkJJSUNMRENDQWlnd0hnWUtLb1pJ\naHZoTkFRMEJBUVFRM3cvN014Q2Vwbkt2V2Q2WXhZb0VJVENDQVdVR0NpcUcKU0li\nNFRRRU5BUUl3Z2dGVk1CQUdDeXFHU0liNFRRRU5BUUlCQWdFTE1CQUdDeXFHU0li\nNFRRRU5BUUlDQWdFTApNQkFHQ3lxR1NJYjRUUUVOQVFJREFnRURNQkFHQ3lxR1NJ\nYjRUUUVOQVFJRUFnRURNQkVHQ3lxR1NJYjRUUUVOCkFRSUZBZ0lBL3pBUkJnc3Fo\na2lHK0UwQkRRRUNCZ0lDQVA4d0VBWUxLb1pJaHZoTkFRMEJBZ2NDQVFBd0VBWUwK\nS29aSWh2aE5BUTBCQWdnQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWdrQ0FRQXdFQVlM\nS29aSWh2aE5BUTBCQWdvQwpBUUF3RUFZTEtvWklodmhOQVEwQkFnc0NBUUF3RUFZ\nTEtvWklodmhOQVEwQkFnd0NBUUF3RUFZTEtvWklodmhOCkFRMEJBZzBDQVFBd0VB\nWUxLb1pJaHZoTkFRMEJBZzRDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZzhDQVFBd0VB\nWUwKS29aSWh2aE5BUTBCQWhBQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWhFQ0FRMHdI\nd1lMS29aSWh2aE5BUTBCQWhJRQpFQXNMQXdQLy93QUFBQUFBQUFBQUFBQXdFQVlL\nS29aSWh2aE5BUTBCQXdRQ0FBQXdGQVlLS29aSWh2aE5BUTBCCkJBUUdNR0JxQUFB\nQU1BOEdDaXFHU0liNFRRRU5BUVVLQVFFd0hnWUtLb1pJaHZoTkFRMEJCZ1FRcDZt\nY096M0EKdDRBSVRmdk84R1Y3cHpCRUJnb3Foa2lHK0UwQkRRRUhNRFl3RUFZTEtv\nWklodmhOQVEwQkJ3RUJBZjh3RUFZTApLb1pJaHZoTkFRMEJCd0lCQWY4d0VBWUxL\nb1pJaHZoTkFRMEJCd01CQWY4d0NnWUlLb1pJemowRUF3SURTUUF3ClJnSWhBTEVt\nR1U2VldkdG5nYTZiTG5yaksrWEdWczlMVERSRkZURTRpcy9qU05tQkFpRUExY21K\nNUpkV0VIYlEKL2dyWVJ2L3c4MytTQmpidTJKQWcxR0dJNTJmSjFUUT0KLS0tLS1F\nTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0K\nTUlJQ2xqQ0NBajJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVV\nTUFvR0NDcUdTTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NC\nU2IyOTBJRU5CTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJq\nRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1R\nc3cKQ1FZRFZRUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFN\nakV4TURVd01UQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNn\nVUd4aGRHWnZjbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21G\nMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3\nQ1EwRXgKQ3pBSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpq\nMERBUWNEUWdBRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0\neDJ0VlRMcTZoS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6\nM3FPQnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFi\nT1NjR3JEQlMKQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25S\ncFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEww\nbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0\nZWxBU2NuVTlEUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRF\nd0VCL3dRSU1BWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1Zr\naTB3K2k2VllHVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNB\nbUQ1eGtmVFZwdm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBD\nRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlD\nanpDQ0FqU2dBd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJ\nS29aSXpqMEVBd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNR\nZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0Vn\nWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpC\nZ05WQkFZVEFsVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpO\nVGsxT1Zvd2FERWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4\nR2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFR\nSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZ\nVApBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdN\nRElZWk9qL2lQV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtE\nWVlMME14TzRtcXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05W\nSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhF\nU3pCSgpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25W\nemRHVmtjMlZ5ZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRF\nTkJMbVJsY2pBZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25C\ncXd3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENB\nUUV3Q2dZSQpLb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293\nTHVQUkxzV0dmL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZP\nOVFXeEhSQXZaVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0t\nLS0tCgAwCgYIKoZIzj0EAwIDSQAwRgIhAIG+llexy99ev7jQOzPqyBv1vUElktwH\n2CbYVLfZ2a0zAiEA4ydsqi6DfZiUnPJiHlCFj3LpaNQa/W/hfrBqdAtkabs=\n-----END CERTIFICATE-----";
|