@decaf-ts/for-fabric 0.5.7 → 0.7.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/dist/for-fabric.cjs +2 -3797
- package/dist/for-fabric.cjs.map +1 -0
- package/dist/for-fabric.js +2 -3901
- package/dist/for-fabric.js.map +1 -0
- package/lib/cjs/bin/cli.cjs +9 -0
- package/lib/cjs/bin/cli.js.map +1 -0
- package/lib/cjs/cli-module.cjs +479 -0
- package/lib/cjs/cli-module.js.map +1 -0
- package/lib/cjs/cli-utils.cjs +309 -0
- package/lib/cjs/cli-utils.js.map +1 -0
- package/lib/cjs/client/FabricClientAdapter.cjs +1362 -0
- package/lib/cjs/client/FabricClientAdapter.js.map +1 -0
- package/lib/cjs/client/FabricClientDispatch.cjs +290 -0
- package/lib/cjs/client/FabricClientDispatch.js.map +1 -0
- package/lib/cjs/client/FabricClientPaginator.cjs +21 -0
- package/lib/cjs/client/FabricClientPaginator.js.map +1 -0
- package/lib/cjs/client/FabricClientRepository.cjs +259 -0
- package/lib/cjs/client/FabricClientRepository.js.map +1 -0
- package/lib/cjs/client/FabricClientStatement.cjs +451 -0
- package/lib/cjs/client/FabricClientStatement.js.map +1 -0
- package/lib/cjs/client/collections/generation.cjs +113 -0
- package/lib/cjs/client/collections/generation.js.map +1 -0
- package/lib/{client/indexes → cjs/client/collections}/index.cjs +1 -1
- package/lib/cjs/client/collections/index.js.map +1 -0
- package/lib/cjs/client/constants.cjs +16 -0
- package/lib/cjs/client/constants.js.map +1 -0
- package/lib/cjs/client/crypto.cjs +368 -0
- package/lib/cjs/client/crypto.js.map +1 -0
- package/lib/{esm/client/erc20/FabricERC20ClientRepository.d.ts → cjs/client/erc20/FabricERC20ClientRepository.cjs} +139 -30
- package/lib/cjs/client/erc20/FabricERC20ClientRepository.js.map +1 -0
- package/lib/{client → cjs/client}/erc20/index.cjs +1 -1
- package/lib/cjs/client/erc20/index.js.map +1 -0
- package/lib/cjs/client/fabric-fs.cjs +234 -0
- package/lib/cjs/client/fabric-fs.js.map +1 -0
- package/lib/cjs/client/fabric-hsm.cjs +165 -0
- package/lib/cjs/client/fabric-hsm.js.map +1 -0
- package/lib/cjs/client/ids/id-extraction.cjs +30 -0
- package/lib/cjs/client/ids/id-extraction.js.map +1 -0
- package/lib/{client → cjs/client}/ids/index.cjs +1 -1
- package/lib/cjs/client/ids/index.js.map +1 -0
- package/lib/{client → cjs/client}/index.cjs +1 -1
- package/lib/cjs/client/index.js.map +1 -0
- package/lib/cjs/client/indexes/generation.cjs +95 -0
- package/lib/cjs/client/indexes/generation.js.map +1 -0
- package/lib/{client/collections → cjs/client/indexes}/index.cjs +1 -1
- package/lib/cjs/client/indexes/index.js.map +1 -0
- package/lib/{esm/client/logging.d.ts → cjs/client/logging.cjs} +51 -9
- package/lib/cjs/client/logging.js.map +1 -0
- package/lib/cjs/client/services/FabricEnrollmentService.cjs +363 -0
- package/lib/cjs/client/services/FabricEnrollmentService.js.map +1 -0
- package/lib/cjs/client/services/FabricIdentityService.cjs +324 -0
- package/lib/cjs/client/services/FabricIdentityService.js.map +1 -0
- package/lib/cjs/client/services/RegistrationRequestBuilder.cjs +91 -0
- package/lib/cjs/client/services/RegistrationRequestBuilder.js.map +1 -0
- package/lib/{esm/client/services/constants.d.ts → cjs/client/services/constants.cjs} +10 -5
- package/lib/cjs/client/services/constants.js.map +1 -0
- package/lib/cjs/client/services/index.cjs +21 -0
- package/lib/cjs/client/services/index.js.map +1 -0
- package/lib/cjs/client/types.cjs +3 -0
- package/lib/cjs/client/types.js.map +1 -0
- package/lib/cjs/client/utils.cjs +262 -0
- package/lib/cjs/client/utils.js.map +1 -0
- package/lib/{contract → cjs/contract}/Address.cjs +1 -1
- package/lib/cjs/contract/Address.js.map +1 -0
- package/lib/{contract → cjs/contract}/AddressContract.cjs +1 -1
- package/lib/cjs/contract/AddressContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/AuditContract.cjs +1 -1
- package/lib/cjs/contract/AuditContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/BatchContract.cjs +1 -1
- package/lib/cjs/contract/BatchContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/MarketContract.cjs +1 -1
- package/lib/cjs/contract/MarketContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherAuditContract.cjs +1 -1
- package/lib/cjs/contract/OtherAuditContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherBatchContract.cjs +1 -1
- package/lib/cjs/contract/OtherBatchContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherMarketContract.cjs +1 -1
- package/lib/cjs/contract/OtherMarketContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherProductContract.cjs +1 -1
- package/lib/cjs/contract/OtherProductContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherProductImageContract.cjs +1 -1
- package/lib/cjs/contract/OtherProductImageContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherProductSharedContract.cjs +1 -1
- package/lib/cjs/contract/OtherProductSharedContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherProductStrengthContract.cjs +1 -1
- package/lib/cjs/contract/OtherProductStrengthContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/Product.cjs +1 -1
- package/lib/cjs/contract/Product.js.map +1 -0
- package/lib/{contract → cjs/contract}/ProductContract.cjs +1 -1
- package/lib/cjs/contract/ProductContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/ProductStrengthContract.cjs +1 -1
- package/lib/cjs/contract/ProductStrengthContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/SegregatedPrivateDocumentContract.cjs +1 -1
- package/lib/cjs/contract/SegregatedPrivateDocumentContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/SegregatedSharedDocumentContract.cjs +1 -1
- package/lib/cjs/contract/SegregatedSharedDocumentContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/User.cjs +1 -1
- package/lib/cjs/contract/User.js.map +1 -0
- package/lib/{contract → cjs/contract}/UserContract.cjs +1 -1
- package/lib/cjs/contract/UserContract.js.map +1 -0
- package/lib/cjs/contract/index.cjs +36 -0
- package/lib/cjs/contract/index.js.map +1 -0
- package/lib/cjs/contract/logging-context.cjs +77 -0
- package/lib/cjs/contract/logging-context.js.map +1 -0
- package/lib/cjs/contract/models/Audit.cjs +106 -0
- package/lib/cjs/contract/models/Audit.js.map +1 -0
- package/lib/{contract → cjs/contract}/models/BaseIdentifiedModel.cjs +1 -1
- package/lib/cjs/contract/models/BaseIdentifiedModel.js.map +1 -0
- package/lib/{contract → cjs/contract}/models/BaseModel.cjs +1 -1
- package/lib/cjs/contract/models/BaseModel.js.map +1 -0
- package/lib/cjs/contract/models/Batch.cjs +174 -0
- package/lib/cjs/contract/models/Batch.js.map +1 -0
- package/lib/cjs/contract/models/GtinOwner.cjs +59 -0
- package/lib/cjs/contract/models/GtinOwner.js.map +1 -0
- package/lib/cjs/contract/models/History.cjs +75 -0
- package/lib/cjs/contract/models/History.js.map +1 -0
- package/lib/cjs/contract/models/Leaflet.cjs +95 -0
- package/lib/cjs/contract/models/Leaflet.js.map +1 -0
- package/lib/cjs/contract/models/LeafletFile.cjs +58 -0
- package/lib/cjs/contract/models/LeafletFile.js.map +1 -0
- package/lib/cjs/contract/models/Market.cjs +75 -0
- package/lib/cjs/contract/models/Market.js.map +1 -0
- package/lib/cjs/contract/models/OtherAudit.cjs +118 -0
- package/lib/cjs/contract/models/OtherAudit.js.map +1 -0
- package/lib/cjs/contract/models/OtherBatchShared.cjs +127 -0
- package/lib/cjs/contract/models/OtherBatchShared.js.map +1 -0
- package/lib/cjs/contract/models/OtherLeaflet.cjs +115 -0
- package/lib/cjs/contract/models/OtherLeaflet.js.map +1 -0
- package/lib/cjs/contract/models/OtherLeafletFile.cjs +65 -0
- package/lib/cjs/contract/models/OtherLeafletFile.js.map +1 -0
- package/lib/cjs/contract/models/OtherMarket.cjs +84 -0
- package/lib/cjs/contract/models/OtherMarket.js.map +1 -0
- package/lib/cjs/contract/models/OtherProduct.cjs +77 -0
- package/lib/cjs/contract/models/OtherProduct.js.map +1 -0
- package/lib/cjs/contract/models/OtherProductImage.cjs +59 -0
- package/lib/cjs/contract/models/OtherProductImage.js.map +1 -0
- package/lib/cjs/contract/models/OtherProductShared.cjs +99 -0
- package/lib/cjs/contract/models/OtherProductShared.js.map +1 -0
- package/lib/cjs/contract/models/OtherProductStrength.cjs +87 -0
- package/lib/cjs/contract/models/OtherProductStrength.js.map +1 -0
- package/lib/cjs/contract/models/Product.cjs +78 -0
- package/lib/cjs/contract/models/Product.js.map +1 -0
- package/lib/cjs/contract/models/ProductStrength.cjs +78 -0
- package/lib/cjs/contract/models/ProductStrength.js.map +1 -0
- package/lib/{contract → cjs/contract}/models/SegregatedDocument.cjs +1 -1
- package/lib/cjs/contract/models/SegregatedDocument.js.map +1 -0
- package/lib/cjs/contract/models/constants.cjs +30 -0
- package/lib/cjs/contract/models/constants.js.map +1 -0
- package/lib/cjs/contract/models/decorators-private.cjs +158 -0
- package/lib/cjs/contract/models/decorators-private.js.map +1 -0
- package/lib/cjs/contract/models/decorators.cjs +182 -0
- package/lib/cjs/contract/models/decorators.js.map +1 -0
- package/lib/cjs/contract/models/gtin.cjs +88 -0
- package/lib/cjs/contract/models/gtin.js.map +1 -0
- package/lib/cjs/contract/models/history-dec.cjs +83 -0
- package/lib/cjs/contract/models/history-dec.js.map +1 -0
- package/lib/cjs/contracts/ContractAdapter.cjs +1193 -0
- package/lib/cjs/contracts/ContractAdapter.js.map +1 -0
- package/lib/cjs/contracts/ContractContext.cjs +157 -0
- package/lib/cjs/contracts/ContractContext.js.map +1 -0
- package/lib/cjs/contracts/FabricContractDispatch.cjs +79 -0
- package/lib/cjs/contracts/FabricContractDispatch.js.map +1 -0
- package/lib/{esm/contracts/FabricContractPaginator.d.ts → cjs/contracts/FabricContractPaginator.cjs} +77 -9
- package/lib/cjs/contracts/FabricContractPaginator.js.map +1 -0
- package/lib/cjs/contracts/FabricContractRepository.cjs +322 -0
- package/lib/cjs/contracts/FabricContractRepository.js.map +1 -0
- package/lib/{esm/contracts/FabricContractRepositoryObservableHandler.d.ts → cjs/contracts/FabricContractRepositoryObservableHandler.cjs} +42 -8
- package/lib/cjs/contracts/FabricContractRepositoryObservableHandler.js.map +1 -0
- package/lib/cjs/contracts/FabricContractSequence.cjs +338 -0
- package/lib/cjs/contracts/FabricContractSequence.js.map +1 -0
- package/lib/cjs/contracts/FabricContractStatement.cjs +180 -0
- package/lib/cjs/contracts/FabricContractStatement.js.map +1 -0
- package/lib/cjs/contracts/MigrationContract.cjs +147 -0
- package/lib/cjs/contracts/MigrationContract.js.map +1 -0
- package/lib/{contracts → cjs/contracts}/PrivateSequence.cjs +1 -1
- package/lib/cjs/contracts/PrivateSequence.js.map +1 -0
- package/lib/cjs/contracts/auth/decorators.cjs +84 -0
- package/lib/cjs/contracts/auth/decorators.js.map +1 -0
- package/lib/{contracts → cjs/contracts}/auth/index.cjs +1 -1
- package/lib/cjs/contracts/auth/index.js.map +1 -0
- package/lib/cjs/contracts/crud/crud-contract.cjs +416 -0
- package/lib/cjs/contracts/crud/crud-contract.js.map +1 -0
- package/lib/{contracts → cjs/contracts}/crud/index.cjs +1 -1
- package/lib/cjs/contracts/crud/index.js.map +1 -0
- package/lib/cjs/contracts/crud/serialized-crud-contract.cjs +284 -0
- package/lib/cjs/contracts/crud/serialized-crud-contract.js.map +1 -0
- package/lib/cjs/contracts/erc20/erc20contract.cjs +581 -0
- package/lib/cjs/contracts/erc20/erc20contract.js.map +1 -0
- package/lib/cjs/contracts/erc20/index.cjs +21 -0
- package/lib/cjs/contracts/erc20/index.js.map +1 -0
- package/lib/cjs/contracts/erc20/models.cjs +209 -0
- package/lib/cjs/contracts/erc20/models.js.map +1 -0
- package/lib/{contracts → cjs/contracts}/index.cjs +1 -1
- package/lib/cjs/contracts/index.js.map +1 -0
- package/lib/cjs/contracts/logging.cjs +118 -0
- package/lib/cjs/contracts/logging.js.map +1 -0
- package/lib/cjs/contracts/overrides.cjs +8 -0
- package/lib/cjs/contracts/overrides.js.map +1 -0
- package/lib/cjs/contracts/types.cjs +3 -0
- package/lib/cjs/contracts/types.js.map +1 -0
- package/lib/cjs/contracts/uuid.cjs +75 -0
- package/lib/cjs/contracts/uuid.js.map +1 -0
- package/lib/{index.cjs → cjs/index.cjs} +1 -1
- package/lib/cjs/index.js.map +1 -0
- package/lib/{shared/ClientSerializer.d.ts → cjs/shared/ClientSerializer.cjs} +35 -6
- package/lib/cjs/shared/ClientSerializer.js.map +1 -0
- package/lib/cjs/shared/DeterministicSerializer.cjs +106 -0
- package/lib/cjs/shared/DeterministicSerializer.js.map +1 -0
- package/lib/cjs/shared/SimpleDeterministicSerializer.cjs +69 -0
- package/lib/cjs/shared/SimpleDeterministicSerializer.js.map +1 -0
- package/lib/{shared/constants.d.ts → cjs/shared/constants.cjs} +18 -12
- package/lib/cjs/shared/constants.js.map +1 -0
- package/lib/cjs/shared/decorators.cjs +595 -0
- package/lib/cjs/shared/decorators.js.map +1 -0
- package/lib/{shared/erc20/erc20-constants.d.ts → cjs/shared/erc20/erc20-constants.cjs} +9 -4
- package/lib/cjs/shared/erc20/erc20-constants.js.map +1 -0
- package/lib/{shared → cjs/shared}/erc20/index.cjs +1 -1
- package/lib/cjs/shared/erc20/index.js.map +1 -0
- package/lib/cjs/shared/errors.cjs +190 -0
- package/lib/cjs/shared/errors.js.map +1 -0
- package/lib/{shared/events.d.ts → cjs/shared/events.cjs} +21 -7
- package/lib/cjs/shared/events.js.map +1 -0
- package/lib/cjs/shared/fabric-types.cjs +3 -0
- package/lib/cjs/shared/fabric-types.js.map +1 -0
- package/lib/{shared → cjs/shared}/index.cjs +1 -1
- package/lib/cjs/shared/index.js.map +1 -0
- package/lib/cjs/shared/interfaces/Checkable.cjs +3 -0
- package/lib/cjs/shared/interfaces/Checkable.js.map +1 -0
- package/lib/{shared → cjs/shared}/interfaces/index.cjs +1 -1
- package/lib/cjs/shared/interfaces/index.js.map +1 -0
- package/lib/cjs/shared/math.cjs +66 -0
- package/lib/cjs/shared/math.js.map +1 -0
- package/lib/{shared → cjs/shared}/model/FabricBaseModel.cjs +1 -1
- package/lib/cjs/shared/model/FabricBaseModel.js.map +1 -0
- package/lib/{shared → cjs/shared}/model/FabricIdentifiedBaseModel.cjs +1 -1
- package/lib/cjs/shared/model/FabricIdentifiedBaseModel.js.map +1 -0
- package/lib/cjs/shared/model/Identity.cjs +71 -0
- package/lib/cjs/shared/model/Identity.js.map +1 -0
- package/lib/cjs/shared/model/IdentityCredentials.cjs +66 -0
- package/lib/cjs/shared/model/IdentityCredentials.js.map +1 -0
- package/lib/cjs/shared/model/index.cjs +21 -0
- package/lib/cjs/shared/model/index.js.map +1 -0
- package/lib/cjs/shared/overrides/Model.cjs +4 -0
- package/lib/cjs/shared/overrides/Model.js.map +1 -0
- package/lib/{shared → cjs/shared}/overrides/index.cjs +1 -1
- package/lib/cjs/shared/overrides/index.js.map +1 -0
- package/lib/cjs/shared/overrides/overrides.cjs +93 -0
- package/lib/cjs/shared/overrides/overrides.js.map +1 -0
- package/lib/cjs/shared/types.cjs +3 -0
- package/lib/cjs/shared/types.js.map +1 -0
- package/lib/cjs/version.cjs +8 -0
- package/lib/cjs/version.js.map +1 -0
- package/lib/esm/bin/cli.js +1 -1
- package/lib/esm/bin/cli.js.map +1 -0
- package/lib/esm/cli-module.js +1 -1
- package/lib/esm/cli-module.js.map +1 -0
- package/lib/esm/cli-utils.js +1 -1
- package/lib/esm/cli-utils.js.map +1 -0
- package/lib/esm/client/FabricClientAdapter.js +1 -1
- package/lib/esm/client/FabricClientAdapter.js.map +1 -0
- package/lib/esm/client/FabricClientDispatch.js +1 -1
- package/lib/esm/client/FabricClientDispatch.js.map +1 -0
- package/lib/esm/client/FabricClientPaginator.js +1 -1
- package/lib/esm/client/FabricClientPaginator.js.map +1 -0
- package/lib/esm/client/FabricClientRepository.js +1 -1
- package/lib/esm/client/FabricClientRepository.js.map +1 -0
- package/lib/esm/client/FabricClientStatement.js +1 -1
- package/lib/esm/client/FabricClientStatement.js.map +1 -0
- package/lib/esm/client/collections/generation.js +1 -1
- package/lib/esm/client/collections/generation.js.map +1 -0
- package/lib/esm/client/collections/index.js +1 -1
- package/lib/esm/client/collections/index.js.map +1 -0
- package/lib/esm/client/constants.js +1 -1
- package/lib/esm/client/constants.js.map +1 -0
- package/lib/esm/client/crypto.js +1 -1
- package/lib/esm/client/crypto.js.map +1 -0
- package/lib/esm/client/erc20/FabricERC20ClientRepository.js +1 -1
- package/lib/esm/client/erc20/FabricERC20ClientRepository.js.map +1 -0
- package/lib/esm/client/erc20/index.js +1 -1
- package/lib/esm/client/erc20/index.js.map +1 -0
- package/lib/esm/client/fabric-fs.js +1 -1
- package/lib/esm/client/fabric-fs.js.map +1 -0
- package/lib/esm/client/fabric-hsm.js +1 -1
- package/lib/esm/client/fabric-hsm.js.map +1 -0
- package/lib/esm/client/ids/id-extraction.js +1 -1
- package/lib/esm/client/ids/id-extraction.js.map +1 -0
- package/lib/esm/client/ids/index.js +1 -1
- package/lib/esm/client/ids/index.js.map +1 -0
- package/lib/esm/client/index.js +1 -1
- package/lib/esm/client/index.js.map +1 -0
- package/lib/esm/client/indexes/generation.js +1 -1
- package/lib/esm/client/indexes/generation.js.map +1 -0
- package/lib/esm/client/indexes/index.js +1 -1
- package/lib/esm/client/indexes/index.js.map +1 -0
- package/lib/esm/client/logging.js +1 -1
- package/lib/esm/client/logging.js.map +1 -0
- package/lib/esm/client/services/FabricEnrollmentService.js +1 -1
- package/lib/esm/client/services/FabricEnrollmentService.js.map +1 -0
- package/lib/esm/client/services/FabricIdentityService.js +1 -1
- package/lib/esm/client/services/FabricIdentityService.js.map +1 -0
- package/lib/esm/client/services/RegistrationRequestBuilder.js +1 -1
- package/lib/esm/client/services/RegistrationRequestBuilder.js.map +1 -0
- package/lib/esm/client/services/constants.js +1 -1
- package/lib/esm/client/services/constants.js.map +1 -0
- package/lib/esm/client/services/index.js +1 -1
- package/lib/esm/client/services/index.js.map +1 -0
- package/lib/esm/client/types.js +1 -1
- package/lib/esm/client/types.js.map +1 -0
- package/lib/esm/client/utils.js +1 -1
- package/lib/esm/client/utils.js.map +1 -0
- package/lib/esm/contract/Address.js +1 -1
- package/lib/esm/contract/Address.js.map +1 -0
- package/lib/esm/contract/AddressContract.js +1 -1
- package/lib/esm/contract/AddressContract.js.map +1 -0
- package/lib/esm/contract/AuditContract.js +1 -1
- package/lib/esm/contract/AuditContract.js.map +1 -0
- package/lib/esm/contract/BatchContract.js +1 -1
- package/lib/esm/contract/BatchContract.js.map +1 -0
- package/lib/esm/contract/MarketContract.js +1 -1
- package/lib/esm/contract/MarketContract.js.map +1 -0
- package/lib/esm/contract/OtherAuditContract.js +1 -1
- package/lib/esm/contract/OtherAuditContract.js.map +1 -0
- package/lib/esm/contract/OtherBatchContract.js +1 -1
- package/lib/esm/contract/OtherBatchContract.js.map +1 -0
- package/lib/esm/contract/OtherMarketContract.js +1 -1
- package/lib/esm/contract/OtherMarketContract.js.map +1 -0
- package/lib/esm/contract/OtherProductContract.js +1 -1
- package/lib/esm/contract/OtherProductContract.js.map +1 -0
- package/lib/esm/contract/OtherProductImageContract.js +1 -1
- package/lib/esm/contract/OtherProductImageContract.js.map +1 -0
- package/lib/esm/contract/OtherProductSharedContract.js +1 -1
- package/lib/esm/contract/OtherProductSharedContract.js.map +1 -0
- package/lib/esm/contract/OtherProductStrengthContract.js +1 -1
- package/lib/esm/contract/OtherProductStrengthContract.js.map +1 -0
- package/lib/esm/contract/Product.js +1 -1
- package/lib/esm/contract/Product.js.map +1 -0
- package/lib/esm/contract/ProductContract.js +1 -1
- package/lib/esm/contract/ProductContract.js.map +1 -0
- package/lib/esm/contract/ProductStrengthContract.js +1 -1
- package/lib/esm/contract/ProductStrengthContract.js.map +1 -0
- package/lib/esm/contract/SegregatedPrivateDocumentContract.js +1 -1
- package/lib/esm/contract/SegregatedPrivateDocumentContract.js.map +1 -0
- package/lib/esm/contract/SegregatedSharedDocumentContract.js +1 -1
- package/lib/esm/contract/SegregatedSharedDocumentContract.js.map +1 -0
- package/lib/esm/contract/User.js +1 -1
- package/lib/esm/contract/User.js.map +1 -0
- package/lib/esm/contract/UserContract.js +1 -1
- package/lib/esm/contract/UserContract.js.map +1 -0
- package/lib/esm/contract/index.js +1 -1
- package/lib/esm/contract/index.js.map +1 -0
- package/lib/esm/contract/logging-context.js +1 -1
- package/lib/esm/contract/logging-context.js.map +1 -0
- package/lib/esm/contract/models/Audit.js +1 -1
- package/lib/esm/contract/models/Audit.js.map +1 -0
- package/lib/esm/contract/models/BaseIdentifiedModel.js +1 -1
- package/lib/esm/contract/models/BaseIdentifiedModel.js.map +1 -0
- package/lib/esm/contract/models/BaseModel.js +1 -1
- package/lib/esm/contract/models/BaseModel.js.map +1 -0
- package/lib/esm/contract/models/Batch.js +1 -1
- package/lib/esm/contract/models/Batch.js.map +1 -0
- package/lib/esm/contract/models/GtinOwner.js +1 -1
- package/lib/esm/contract/models/GtinOwner.js.map +1 -0
- package/lib/esm/contract/models/History.js +1 -1
- package/lib/esm/contract/models/History.js.map +1 -0
- package/lib/esm/contract/models/Leaflet.js +1 -1
- package/lib/esm/contract/models/Leaflet.js.map +1 -0
- package/lib/esm/contract/models/LeafletFile.js +1 -1
- package/lib/esm/contract/models/LeafletFile.js.map +1 -0
- package/lib/esm/contract/models/Market.js +1 -1
- package/lib/esm/contract/models/Market.js.map +1 -0
- package/lib/esm/contract/models/OtherAudit.js +1 -1
- package/lib/esm/contract/models/OtherAudit.js.map +1 -0
- package/lib/esm/contract/models/OtherBatchShared.js +1 -1
- package/lib/esm/contract/models/OtherBatchShared.js.map +1 -0
- package/lib/esm/contract/models/OtherLeaflet.js +1 -1
- package/lib/esm/contract/models/OtherLeaflet.js.map +1 -0
- package/lib/esm/contract/models/OtherLeafletFile.js +1 -1
- package/lib/esm/contract/models/OtherLeafletFile.js.map +1 -0
- package/lib/esm/contract/models/OtherMarket.js +1 -1
- package/lib/esm/contract/models/OtherMarket.js.map +1 -0
- package/lib/esm/contract/models/OtherProduct.js +1 -1
- package/lib/esm/contract/models/OtherProduct.js.map +1 -0
- package/lib/esm/contract/models/OtherProductImage.js +1 -1
- package/lib/esm/contract/models/OtherProductImage.js.map +1 -0
- package/lib/esm/contract/models/OtherProductShared.js +1 -1
- package/lib/esm/contract/models/OtherProductShared.js.map +1 -0
- package/lib/esm/contract/models/OtherProductStrength.js +1 -1
- package/lib/esm/contract/models/OtherProductStrength.js.map +1 -0
- package/lib/esm/contract/models/Product.js +1 -1
- package/lib/esm/contract/models/Product.js.map +1 -0
- package/lib/esm/contract/models/ProductStrength.js +1 -1
- package/lib/esm/contract/models/ProductStrength.js.map +1 -0
- package/lib/esm/contract/models/SegregatedDocument.js +1 -1
- package/lib/esm/contract/models/SegregatedDocument.js.map +1 -0
- package/lib/esm/contract/models/constants.js +1 -1
- package/lib/esm/contract/models/constants.js.map +1 -0
- package/lib/esm/contract/models/decorators-private.js +1 -1
- package/lib/esm/contract/models/decorators-private.js.map +1 -0
- package/lib/esm/contract/models/decorators.js +1 -1
- package/lib/esm/contract/models/decorators.js.map +1 -0
- package/lib/esm/contract/models/gtin.js +1 -1
- package/lib/esm/contract/models/gtin.js.map +1 -0
- package/lib/esm/contract/models/history-dec.js +1 -1
- package/lib/esm/contract/models/history-dec.js.map +1 -0
- package/lib/esm/contracts/ContractAdapter.js +1 -1
- package/lib/esm/contracts/ContractAdapter.js.map +1 -0
- package/lib/esm/contracts/ContractContext.js +1 -1
- package/lib/esm/contracts/ContractContext.js.map +1 -0
- package/lib/esm/contracts/FabricContractDispatch.js +1 -1
- package/lib/esm/contracts/FabricContractDispatch.js.map +1 -0
- package/lib/esm/contracts/FabricContractPaginator.js +1 -1
- package/lib/esm/contracts/FabricContractPaginator.js.map +1 -0
- package/lib/esm/contracts/FabricContractRepository.js +1 -1
- package/lib/esm/contracts/FabricContractRepository.js.map +1 -0
- package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +1 -1
- package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js.map +1 -0
- package/lib/esm/contracts/FabricContractSequence.js +1 -1
- package/lib/esm/contracts/FabricContractSequence.js.map +1 -0
- package/lib/esm/contracts/FabricContractStatement.js +1 -1
- package/lib/esm/contracts/FabricContractStatement.js.map +1 -0
- package/lib/esm/contracts/MigrationContract.js +1 -1
- package/lib/esm/contracts/MigrationContract.js.map +1 -0
- package/lib/esm/contracts/PrivateSequence.js +1 -1
- package/lib/esm/contracts/PrivateSequence.js.map +1 -0
- package/lib/esm/contracts/auth/decorators.js +1 -1
- package/lib/esm/contracts/auth/decorators.js.map +1 -0
- package/lib/esm/contracts/auth/index.js +1 -1
- package/lib/esm/contracts/auth/index.js.map +1 -0
- package/lib/esm/contracts/crud/crud-contract.js +1 -1
- package/lib/esm/contracts/crud/crud-contract.js.map +1 -0
- package/lib/esm/contracts/crud/index.js +1 -1
- package/lib/esm/contracts/crud/index.js.map +1 -0
- package/lib/esm/contracts/crud/serialized-crud-contract.js +1 -1
- package/lib/esm/contracts/crud/serialized-crud-contract.js.map +1 -0
- package/lib/esm/contracts/erc20/erc20contract.js +1 -1
- package/lib/esm/contracts/erc20/erc20contract.js.map +1 -0
- package/lib/esm/contracts/erc20/index.js +1 -1
- package/lib/esm/contracts/erc20/index.js.map +1 -0
- package/lib/esm/contracts/erc20/models.js +1 -1
- package/lib/esm/contracts/erc20/models.js.map +1 -0
- package/lib/esm/contracts/index.js +1 -1
- package/lib/esm/contracts/index.js.map +1 -0
- package/lib/esm/contracts/logging.js +1 -1
- package/lib/esm/contracts/logging.js.map +1 -0
- package/lib/esm/contracts/overrides.js +1 -1
- package/lib/esm/contracts/overrides.js.map +1 -0
- package/lib/esm/contracts/types.js +1 -1
- package/lib/esm/contracts/types.js.map +1 -0
- package/lib/esm/contracts/uuid.js +1 -1
- package/lib/esm/contracts/uuid.js.map +1 -0
- package/lib/esm/index.js +1 -1
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/shared/ClientSerializer.js +1 -1
- package/lib/esm/shared/ClientSerializer.js.map +1 -0
- package/lib/esm/shared/DeterministicSerializer.js +1 -1
- package/lib/esm/shared/DeterministicSerializer.js.map +1 -0
- package/lib/esm/shared/SimpleDeterministicSerializer.js +1 -1
- package/lib/esm/shared/SimpleDeterministicSerializer.js.map +1 -0
- package/lib/esm/shared/constants.js +1 -1
- package/lib/esm/shared/constants.js.map +1 -0
- package/lib/esm/shared/decorators.js +1 -1
- package/lib/esm/shared/decorators.js.map +1 -0
- package/lib/esm/shared/erc20/erc20-constants.js +1 -1
- package/lib/esm/shared/erc20/erc20-constants.js.map +1 -0
- package/lib/esm/shared/erc20/index.js +1 -1
- package/lib/esm/shared/erc20/index.js.map +1 -0
- package/lib/esm/shared/errors.js +1 -1
- package/lib/esm/shared/errors.js.map +1 -0
- package/lib/esm/shared/events.js +1 -1
- package/lib/esm/shared/events.js.map +1 -0
- package/lib/esm/shared/fabric-types.js +1 -1
- package/lib/esm/shared/fabric-types.js.map +1 -0
- package/lib/esm/shared/index.js +1 -1
- package/lib/esm/shared/index.js.map +1 -0
- package/lib/esm/shared/interfaces/Checkable.js +1 -1
- package/lib/esm/shared/interfaces/Checkable.js.map +1 -0
- package/lib/esm/shared/interfaces/index.js +1 -1
- package/lib/esm/shared/interfaces/index.js.map +1 -0
- package/lib/esm/shared/math.js +1 -1
- package/lib/esm/shared/math.js.map +1 -0
- package/lib/esm/shared/model/FabricBaseModel.js +1 -1
- package/lib/esm/shared/model/FabricBaseModel.js.map +1 -0
- package/lib/esm/shared/model/FabricIdentifiedBaseModel.js +1 -1
- package/lib/esm/shared/model/FabricIdentifiedBaseModel.js.map +1 -0
- package/lib/esm/shared/model/Identity.js +1 -1
- package/lib/esm/shared/model/Identity.js.map +1 -0
- package/lib/esm/shared/model/IdentityCredentials.js +1 -1
- package/lib/esm/shared/model/IdentityCredentials.js.map +1 -0
- package/lib/esm/shared/model/index.js +1 -1
- package/lib/esm/shared/model/index.js.map +1 -0
- package/lib/esm/shared/overrides/Model.js +1 -1
- package/lib/esm/shared/overrides/Model.js.map +1 -0
- package/lib/esm/shared/overrides/index.js +1 -1
- package/lib/esm/shared/overrides/index.js.map +1 -0
- package/lib/esm/shared/overrides/overrides.js +1 -1
- package/lib/esm/shared/overrides/overrides.js.map +1 -0
- package/lib/esm/shared/types.js +1 -1
- package/lib/esm/shared/types.js.map +1 -0
- package/lib/esm/version.js +2 -2
- package/lib/esm/version.js.map +1 -0
- package/lib/{esm → types}/version.d.ts +1 -1
- package/package.json +22 -18
- package/lib/bin/cli.cjs +0 -9
- package/lib/cli-module.cjs +0 -479
- package/lib/cli-utils.cjs +0 -309
- package/lib/client/FabricClientAdapter.cjs +0 -1362
- package/lib/client/FabricClientDispatch.cjs +0 -290
- package/lib/client/FabricClientPaginator.cjs +0 -21
- package/lib/client/FabricClientRepository.cjs +0 -259
- package/lib/client/FabricClientStatement.cjs +0 -451
- package/lib/client/collections/generation.cjs +0 -113
- package/lib/client/constants.cjs +0 -16
- package/lib/client/crypto.cjs +0 -368
- package/lib/client/erc20/FabricERC20ClientRepository.cjs +0 -363
- package/lib/client/fabric-fs.cjs +0 -234
- package/lib/client/fabric-hsm.cjs +0 -165
- package/lib/client/ids/id-extraction.cjs +0 -30
- package/lib/client/indexes/generation.cjs +0 -95
- package/lib/client/logging.cjs +0 -102
- package/lib/client/services/FabricEnrollmentService.cjs +0 -363
- package/lib/client/services/FabricIdentityService.cjs +0 -324
- package/lib/client/services/RegistrationRequestBuilder.cjs +0 -91
- package/lib/client/services/constants.cjs +0 -20
- package/lib/client/services/index.cjs +0 -21
- package/lib/client/types.cjs +0 -3
- package/lib/client/utils.cjs +0 -262
- package/lib/contract/index.cjs +0 -36
- package/lib/contract/logging-context.cjs +0 -77
- package/lib/contract/models/Audit.cjs +0 -106
- package/lib/contract/models/Batch.cjs +0 -174
- package/lib/contract/models/GtinOwner.cjs +0 -59
- package/lib/contract/models/History.cjs +0 -75
- package/lib/contract/models/Leaflet.cjs +0 -95
- package/lib/contract/models/LeafletFile.cjs +0 -58
- package/lib/contract/models/Market.cjs +0 -75
- package/lib/contract/models/OtherAudit.cjs +0 -118
- package/lib/contract/models/OtherBatchShared.cjs +0 -127
- package/lib/contract/models/OtherLeaflet.cjs +0 -115
- package/lib/contract/models/OtherLeafletFile.cjs +0 -65
- package/lib/contract/models/OtherMarket.cjs +0 -84
- package/lib/contract/models/OtherProduct.cjs +0 -77
- package/lib/contract/models/OtherProductImage.cjs +0 -59
- package/lib/contract/models/OtherProductShared.cjs +0 -99
- package/lib/contract/models/OtherProductStrength.cjs +0 -87
- package/lib/contract/models/Product.cjs +0 -78
- package/lib/contract/models/ProductStrength.cjs +0 -78
- package/lib/contract/models/constants.cjs +0 -30
- package/lib/contract/models/decorators-private.cjs +0 -158
- package/lib/contract/models/decorators.cjs +0 -182
- package/lib/contract/models/gtin.cjs +0 -88
- package/lib/contract/models/history-dec.cjs +0 -83
- package/lib/contracts/ContractAdapter.cjs +0 -1193
- package/lib/contracts/ContractContext.cjs +0 -157
- package/lib/contracts/FabricContractDispatch.cjs +0 -79
- package/lib/contracts/FabricContractPaginator.cjs +0 -173
- package/lib/contracts/FabricContractRepository.cjs +0 -322
- package/lib/contracts/FabricContractRepositoryObservableHandler.cjs +0 -96
- package/lib/contracts/FabricContractSequence.cjs +0 -338
- package/lib/contracts/FabricContractStatement.cjs +0 -180
- package/lib/contracts/MigrationContract.cjs +0 -147
- package/lib/contracts/auth/decorators.cjs +0 -84
- package/lib/contracts/crud/crud-contract.cjs +0 -416
- package/lib/contracts/crud/serialized-crud-contract.cjs +0 -284
- package/lib/contracts/erc20/erc20contract.cjs +0 -581
- package/lib/contracts/erc20/index.cjs +0 -21
- package/lib/contracts/erc20/models.cjs +0 -209
- package/lib/contracts/logging.cjs +0 -118
- package/lib/contracts/overrides.cjs +0 -8
- package/lib/contracts/types.cjs +0 -3
- package/lib/contracts/uuid.cjs +0 -75
- package/lib/esm/bin/cli.d.ts +0 -1
- package/lib/esm/cli-module.d.ts +0 -3
- package/lib/esm/cli-utils.d.ts +0 -21
- package/lib/esm/client/FabricClientAdapter.d.ts +0 -404
- package/lib/esm/client/FabricClientDispatch.d.ts +0 -133
- package/lib/esm/client/FabricClientPaginator.d.ts +0 -12
- package/lib/esm/client/FabricClientRepository.d.ts +0 -71
- package/lib/esm/client/FabricClientStatement.d.ts +0 -64
- package/lib/esm/client/collections/generation.d.ts +0 -46
- package/lib/esm/client/collections/index.d.ts +0 -1
- package/lib/esm/client/constants.d.ts +0 -2
- package/lib/esm/client/crypto.d.ts +0 -107
- package/lib/esm/client/erc20/index.d.ts +0 -1
- package/lib/esm/client/fabric-fs.d.ts +0 -92
- package/lib/esm/client/fabric-hsm.d.ts +0 -24
- package/lib/esm/client/ids/id-extraction.d.ts +0 -4
- package/lib/esm/client/ids/index.d.ts +0 -1
- package/lib/esm/client/index.d.ts +0 -23
- package/lib/esm/client/indexes/generation.d.ts +0 -10
- package/lib/esm/client/indexes/index.d.ts +0 -1
- package/lib/esm/client/services/FabricEnrollmentService.d.ts +0 -176
- package/lib/esm/client/services/FabricIdentityService.d.ts +0 -98
- package/lib/esm/client/services/RegistrationRequestBuilder.d.ts +0 -19
- package/lib/esm/client/services/index.d.ts +0 -4
- package/lib/esm/client/types.d.ts +0 -20
- package/lib/esm/client/utils.d.ts +0 -71
- package/lib/esm/contract/Address.d.ts +0 -13
- package/lib/esm/contract/AddressContract.d.ts +0 -5
- package/lib/esm/contract/AuditContract.d.ts +0 -5
- package/lib/esm/contract/BatchContract.d.ts +0 -5
- package/lib/esm/contract/MarketContract.d.ts +0 -5
- package/lib/esm/contract/OtherAuditContract.d.ts +0 -5
- package/lib/esm/contract/OtherBatchContract.d.ts +0 -5
- package/lib/esm/contract/OtherMarketContract.d.ts +0 -5
- package/lib/esm/contract/OtherProductContract.d.ts +0 -5
- package/lib/esm/contract/OtherProductImageContract.d.ts +0 -5
- package/lib/esm/contract/OtherProductSharedContract.d.ts +0 -5
- package/lib/esm/contract/OtherProductStrengthContract.d.ts +0 -5
- package/lib/esm/contract/Product.d.ts +0 -7
- package/lib/esm/contract/ProductContract.d.ts +0 -5
- package/lib/esm/contract/ProductStrengthContract.d.ts +0 -5
- package/lib/esm/contract/SegregatedPrivateDocumentContract.d.ts +0 -5
- package/lib/esm/contract/SegregatedSharedDocumentContract.d.ts +0 -5
- package/lib/esm/contract/User.d.ts +0 -7
- package/lib/esm/contract/UserContract.d.ts +0 -5
- package/lib/esm/contract/index.d.ts +0 -2
- package/lib/esm/contract/logging-context.d.ts +0 -8
- package/lib/esm/contract/models/Audit.d.ts +0 -13
- package/lib/esm/contract/models/BaseIdentifiedModel.d.ts +0 -7
- package/lib/esm/contract/models/BaseModel.d.ts +0 -7
- package/lib/esm/contract/models/Batch.d.ts +0 -18
- package/lib/esm/contract/models/GtinOwner.d.ts +0 -8
- package/lib/esm/contract/models/History.d.ts +0 -9
- package/lib/esm/contract/models/Leaflet.d.ts +0 -12
- package/lib/esm/contract/models/LeafletFile.d.ts +0 -9
- package/lib/esm/contract/models/Market.d.ts +0 -12
- package/lib/esm/contract/models/OtherAudit.d.ts +0 -15
- package/lib/esm/contract/models/OtherBatchShared.d.ts +0 -18
- package/lib/esm/contract/models/OtherLeaflet.d.ts +0 -16
- package/lib/esm/contract/models/OtherLeafletFile.d.ts +0 -10
- package/lib/esm/contract/models/OtherMarket.d.ts +0 -13
- package/lib/esm/contract/models/OtherProduct.d.ts +0 -12
- package/lib/esm/contract/models/OtherProductImage.d.ts +0 -9
- package/lib/esm/contract/models/OtherProductShared.d.ts +0 -18
- package/lib/esm/contract/models/OtherProductStrength.d.ts +0 -12
- package/lib/esm/contract/models/Product.d.ts +0 -15
- package/lib/esm/contract/models/ProductStrength.d.ts +0 -11
- package/lib/esm/contract/models/SegregatedDocument.d.ts +0 -18
- package/lib/esm/contract/models/constants.d.ts +0 -24
- package/lib/esm/contract/models/decorators-private.d.ts +0 -16
- package/lib/esm/contract/models/decorators.d.ts +0 -28
- package/lib/esm/contract/models/gtin.d.ts +0 -8
- package/lib/esm/contract/models/history-dec.d.ts +0 -6
- package/lib/esm/contracts/ContractAdapter.d.ts +0 -287
- package/lib/esm/contracts/ContractContext.d.ts +0 -89
- package/lib/esm/contracts/FabricContractDispatch.d.ts +0 -7
- package/lib/esm/contracts/FabricContractRepository.d.ts +0 -119
- package/lib/esm/contracts/FabricContractSequence.d.ts +0 -87
- package/lib/esm/contracts/FabricContractStatement.d.ts +0 -36
- package/lib/esm/contracts/MigrationContract.d.ts +0 -22
- package/lib/esm/contracts/PrivateSequence.d.ts +0 -15
- package/lib/esm/contracts/auth/decorators.d.ts +0 -6
- package/lib/esm/contracts/auth/index.d.ts +0 -1
- package/lib/esm/contracts/crud/crud-contract.d.ts +0 -199
- package/lib/esm/contracts/crud/index.d.ts +0 -2
- package/lib/esm/contracts/crud/serialized-crud-contract.d.ts +0 -42
- package/lib/esm/contracts/erc20/erc20contract.d.ts +0 -152
- package/lib/esm/contracts/erc20/index.d.ts +0 -2
- package/lib/esm/contracts/erc20/models.d.ts +0 -114
- package/lib/esm/contracts/index.d.ts +0 -19
- package/lib/esm/contracts/logging.d.ts +0 -54
- package/lib/esm/contracts/types.d.ts +0 -38
- package/lib/esm/contracts/uuid.d.ts +0 -2
- package/lib/esm/shared/overrides/overrides.d.ts +0 -1
- package/lib/index.d.ts +0 -8
- package/lib/shared/ClientSerializer.cjs +0 -81
- package/lib/shared/DeterministicSerializer.cjs +0 -106
- package/lib/shared/DeterministicSerializer.d.ts +0 -47
- package/lib/shared/SimpleDeterministicSerializer.cjs +0 -69
- package/lib/shared/SimpleDeterministicSerializer.d.ts +0 -7
- package/lib/shared/constants.cjs +0 -41
- package/lib/shared/decorators.cjs +0 -595
- package/lib/shared/decorators.d.ts +0 -81
- package/lib/shared/erc20/erc20-constants.cjs +0 -30
- package/lib/shared/erc20/index.d.ts +0 -1
- package/lib/shared/errors.cjs +0 -190
- package/lib/shared/errors.d.ts +0 -140
- package/lib/shared/events.cjs +0 -51
- package/lib/shared/fabric-types.cjs +0 -3
- package/lib/shared/fabric-types.d.ts +0 -32
- package/lib/shared/index.d.ts +0 -20
- package/lib/shared/interfaces/Checkable.cjs +0 -3
- package/lib/shared/interfaces/Checkable.d.ts +0 -23
- package/lib/shared/interfaces/index.d.ts +0 -1
- package/lib/shared/math.cjs +0 -66
- package/lib/shared/math.d.ts +0 -34
- package/lib/shared/model/FabricBaseModel.d.ts +0 -7
- package/lib/shared/model/FabricIdentifiedBaseModel.d.ts +0 -7
- package/lib/shared/model/Identity.cjs +0 -71
- package/lib/shared/model/Identity.d.ts +0 -42
- package/lib/shared/model/IdentityCredentials.cjs +0 -66
- package/lib/shared/model/IdentityCredentials.d.ts +0 -41
- package/lib/shared/model/index.cjs +0 -21
- package/lib/shared/model/index.d.ts +0 -4
- package/lib/shared/overrides/Model.cjs +0 -4
- package/lib/shared/overrides/Model.d.ts +0 -22
- package/lib/shared/overrides/index.d.ts +0 -2
- package/lib/shared/overrides/overrides.cjs +0 -93
- package/lib/shared/overrides/overrides.d.ts +0 -1
- package/lib/shared/types.cjs +0 -3
- package/lib/shared/types.d.ts +0 -125
- package/lib/version.cjs +0 -8
- package/lib/version.d.ts +0 -2
- /package/lib/{bin → types/bin}/cli.d.ts +0 -0
- /package/lib/{cli-module.d.ts → types/cli-module.d.ts} +0 -0
- /package/lib/{cli-utils.d.ts → types/cli-utils.d.ts} +0 -0
- /package/lib/{client → types/client}/FabricClientAdapter.d.ts +0 -0
- /package/lib/{client → types/client}/FabricClientDispatch.d.ts +0 -0
- /package/lib/{client → types/client}/FabricClientPaginator.d.ts +0 -0
- /package/lib/{client → types/client}/FabricClientRepository.d.ts +0 -0
- /package/lib/{client → types/client}/FabricClientStatement.d.ts +0 -0
- /package/lib/{client → types/client}/collections/generation.d.ts +0 -0
- /package/lib/{client → types/client}/collections/index.d.ts +0 -0
- /package/lib/{client → types/client}/constants.d.ts +0 -0
- /package/lib/{client → types/client}/crypto.d.ts +0 -0
- /package/lib/{client → types/client}/erc20/FabricERC20ClientRepository.d.ts +0 -0
- /package/lib/{client → types/client}/erc20/index.d.ts +0 -0
- /package/lib/{client → types/client}/fabric-fs.d.ts +0 -0
- /package/lib/{client → types/client}/fabric-hsm.d.ts +0 -0
- /package/lib/{client → types/client}/ids/id-extraction.d.ts +0 -0
- /package/lib/{client → types/client}/ids/index.d.ts +0 -0
- /package/lib/{client → types/client}/index.d.ts +0 -0
- /package/lib/{client → types/client}/indexes/generation.d.ts +0 -0
- /package/lib/{client → types/client}/indexes/index.d.ts +0 -0
- /package/lib/{client → types/client}/logging.d.ts +0 -0
- /package/lib/{client → types/client}/services/FabricEnrollmentService.d.ts +0 -0
- /package/lib/{client → types/client}/services/FabricIdentityService.d.ts +0 -0
- /package/lib/{client → types/client}/services/RegistrationRequestBuilder.d.ts +0 -0
- /package/lib/{client → types/client}/services/constants.d.ts +0 -0
- /package/lib/{client → types/client}/services/index.d.ts +0 -0
- /package/lib/{client → types/client}/types.d.ts +0 -0
- /package/lib/{client → types/client}/utils.d.ts +0 -0
- /package/lib/{contract → types/contract}/Address.d.ts +0 -0
- /package/lib/{contract → types/contract}/AddressContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/AuditContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/BatchContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/MarketContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherAuditContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherBatchContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherMarketContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherProductContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherProductImageContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherProductSharedContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherProductStrengthContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/Product.d.ts +0 -0
- /package/lib/{contract → types/contract}/ProductContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/ProductStrengthContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/SegregatedPrivateDocumentContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/SegregatedSharedDocumentContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/User.d.ts +0 -0
- /package/lib/{contract → types/contract}/UserContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/index.d.ts +0 -0
- /package/lib/{contract → types/contract}/logging-context.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/Audit.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/BaseIdentifiedModel.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/BaseModel.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/Batch.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/GtinOwner.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/History.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/Leaflet.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/LeafletFile.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/Market.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherAudit.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherBatchShared.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherLeaflet.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherLeafletFile.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherMarket.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherProduct.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherProductImage.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherProductShared.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherProductStrength.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/Product.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/ProductStrength.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/SegregatedDocument.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/constants.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/decorators-private.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/decorators.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/gtin.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/history-dec.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/ContractAdapter.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/ContractContext.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/FabricContractDispatch.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/FabricContractPaginator.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/FabricContractRepository.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/FabricContractRepositoryObservableHandler.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/FabricContractSequence.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/FabricContractStatement.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/MigrationContract.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/PrivateSequence.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/auth/decorators.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/auth/index.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/crud/crud-contract.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/crud/index.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/crud/serialized-crud-contract.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/erc20/erc20contract.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/erc20/index.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/erc20/models.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/index.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/logging.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/overrides.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/types.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/uuid.d.ts +0 -0
- /package/lib/{esm → types}/index.d.ts +0 -0
- /package/lib/{esm → types}/shared/ClientSerializer.d.ts +0 -0
- /package/lib/{esm → types}/shared/DeterministicSerializer.d.ts +0 -0
- /package/lib/{esm → types}/shared/SimpleDeterministicSerializer.d.ts +0 -0
- /package/lib/{esm → types}/shared/constants.d.ts +0 -0
- /package/lib/{esm → types}/shared/decorators.d.ts +0 -0
- /package/lib/{esm → types}/shared/erc20/erc20-constants.d.ts +0 -0
- /package/lib/{esm → types}/shared/erc20/index.d.ts +0 -0
- /package/lib/{esm → types}/shared/errors.d.ts +0 -0
- /package/lib/{esm → types}/shared/events.d.ts +0 -0
- /package/lib/{esm → types}/shared/fabric-types.d.ts +0 -0
- /package/lib/{esm → types}/shared/index.d.ts +0 -0
- /package/lib/{esm → types}/shared/interfaces/Checkable.d.ts +0 -0
- /package/lib/{esm → types}/shared/interfaces/index.d.ts +0 -0
- /package/lib/{esm → types}/shared/math.d.ts +0 -0
- /package/lib/{esm → types}/shared/model/FabricBaseModel.d.ts +0 -0
- /package/lib/{esm → types}/shared/model/FabricIdentifiedBaseModel.d.ts +0 -0
- /package/lib/{esm → types}/shared/model/Identity.d.ts +0 -0
- /package/lib/{esm → types}/shared/model/IdentityCredentials.d.ts +0 -0
- /package/lib/{esm → types}/shared/model/index.d.ts +0 -0
- /package/lib/{esm → types}/shared/overrides/Model.d.ts +0 -0
- /package/lib/{esm → types}/shared/overrides/index.d.ts +0 -0
- /package/lib/{esm/contracts → types/shared/overrides}/overrides.d.ts +0 -0
- /package/lib/{esm → types}/shared/types.d.ts +0 -0
|
@@ -1,451 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FabricClientStatement = void 0;
|
|
4
|
-
const core_1 = require("@decaf-ts/core");
|
|
5
|
-
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
6
|
-
const for_couchdb_1 = require("@decaf-ts/for-couchdb");
|
|
7
|
-
const logging_1 = require("@decaf-ts/logging");
|
|
8
|
-
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
9
|
-
const decoration_1 = require("@decaf-ts/decoration");
|
|
10
|
-
const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
11
|
-
function nextLexicographicString(value) {
|
|
12
|
-
if (!value)
|
|
13
|
-
return "\u0000";
|
|
14
|
-
const chars = Array.from(value);
|
|
15
|
-
for (let i = chars.length - 1; i >= 0; i -= 1) {
|
|
16
|
-
const code = chars[i].codePointAt(0);
|
|
17
|
-
if (code === undefined)
|
|
18
|
-
continue;
|
|
19
|
-
if (code < 0x10ffff) {
|
|
20
|
-
chars[i] = String.fromCodePoint(code + 1);
|
|
21
|
-
return chars.slice(0, i + 1).join("");
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return `${value}\u0000`;
|
|
25
|
-
}
|
|
26
|
-
function prefixRange(prefix) {
|
|
27
|
-
return {
|
|
28
|
-
start: prefix,
|
|
29
|
-
end: nextLexicographicString(prefix),
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
class FabricClientStatement extends core_1.Statement {
|
|
33
|
-
constructor(adapter, overrides) {
|
|
34
|
-
super(adapter, overrides);
|
|
35
|
-
}
|
|
36
|
-
squash(ctx) {
|
|
37
|
-
const squashed = super.squash(ctx);
|
|
38
|
-
if (!squashed)
|
|
39
|
-
return squashed;
|
|
40
|
-
const { method, params, args } = squashed;
|
|
41
|
-
const { direction, limit } = params;
|
|
42
|
-
switch (method) {
|
|
43
|
-
case core_1.PreparedStatementKeys.FIND:
|
|
44
|
-
break;
|
|
45
|
-
case core_1.PreparedStatementKeys.PAGE:
|
|
46
|
-
args.push(direction, limit);
|
|
47
|
-
break;
|
|
48
|
-
case core_1.PreparedStatementKeys.FIND_BY:
|
|
49
|
-
break;
|
|
50
|
-
case core_1.PreparedStatementKeys.LIST_BY:
|
|
51
|
-
args.push(direction);
|
|
52
|
-
break;
|
|
53
|
-
case core_1.PreparedStatementKeys.PAGE_BY:
|
|
54
|
-
args.push(direction, limit);
|
|
55
|
-
break;
|
|
56
|
-
case core_1.PreparedStatementKeys.FIND_ONE_BY:
|
|
57
|
-
break;
|
|
58
|
-
default:
|
|
59
|
-
throw new db_decorators_1.InternalError(`Unsupported method ${method}`);
|
|
60
|
-
}
|
|
61
|
-
return squashed;
|
|
62
|
-
}
|
|
63
|
-
async executePrepared(...argz) {
|
|
64
|
-
const repo = core_1.Repository.forModel(this.fromSelector, this.adapter.alias);
|
|
65
|
-
const { method, args } = this.prepared;
|
|
66
|
-
return repo.statement(method, ...args, ...argz);
|
|
67
|
-
}
|
|
68
|
-
async prepare(ctx) {
|
|
69
|
-
ctx =
|
|
70
|
-
ctx ||
|
|
71
|
-
(await this.adapter.context(core_1.PersistenceKeys.QUERY, this.overrides || {}, this.fromSelector));
|
|
72
|
-
if (this.isSimpleQuery() &&
|
|
73
|
-
ctx.get("forcePrepareSimpleQueries")) {
|
|
74
|
-
const squashed = this.squash(ctx);
|
|
75
|
-
if (squashed) {
|
|
76
|
-
this.prepared = squashed;
|
|
77
|
-
return this;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
const args = [];
|
|
81
|
-
const params = {};
|
|
82
|
-
const prepared = {
|
|
83
|
-
class: this.fromSelector,
|
|
84
|
-
args,
|
|
85
|
-
params,
|
|
86
|
-
};
|
|
87
|
-
const method = [core_1.QueryClause.FIND_BY];
|
|
88
|
-
if (this.whereCondition) {
|
|
89
|
-
const parsed = this.prepareCondition(this.whereCondition, ctx);
|
|
90
|
-
method.push(parsed.method);
|
|
91
|
-
if (parsed.args && parsed.args.length)
|
|
92
|
-
args.push(...parsed.args);
|
|
93
|
-
}
|
|
94
|
-
if (this.selectSelector)
|
|
95
|
-
method.push(core_1.QueryClause.SELECT, this.selectSelector.join(` ${core_1.QueryClause.AND.toLowerCase()} `));
|
|
96
|
-
if (this.orderBySelectors?.length) {
|
|
97
|
-
method.push(core_1.QueryClause.ORDER_BY, this.orderBySelectors[0][0]);
|
|
98
|
-
args.push(this.orderBySelectors[0][1]);
|
|
99
|
-
}
|
|
100
|
-
prepared.method = (0, logging_1.toCamelCase)(method.join(" "));
|
|
101
|
-
prepared.params = params;
|
|
102
|
-
this.prepared = prepared;
|
|
103
|
-
return this;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* @description Processes a record from CouchDB/Fabric
|
|
107
|
-
* @summary Extracts the ID from a CouchDB document and reverts it to a model instance
|
|
108
|
-
*/
|
|
109
|
-
processRecord(record, ctx) {
|
|
110
|
-
const pkAttr = decorator_validation_1.Model.pk(this.fromSelector);
|
|
111
|
-
const type = decoration_1.Metadata.get(this.fromSelector, decoration_1.Metadata.key(db_decorators_1.DBKeys.ID, pkAttr))?.type;
|
|
112
|
-
if (record[for_couchdb_1.CouchDBKeys.ID]) {
|
|
113
|
-
const [, ...keyArgs] = record[for_couchdb_1.CouchDBKeys.ID].split(for_couchdb_1.CouchDBKeys.SEPARATOR);
|
|
114
|
-
const id = keyArgs.join("_");
|
|
115
|
-
record[pkAttr] = core_1.Sequence.parseValue(type, id);
|
|
116
|
-
}
|
|
117
|
-
return super.processRecord(record, ctx);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* @description Executes a raw Mango query
|
|
121
|
-
* @summary Sends a raw Mango query to Fabric and processes the results
|
|
122
|
-
*/
|
|
123
|
-
async raw(rawInput, ...args) {
|
|
124
|
-
const { ctx } = this.logCtx(args, this.raw);
|
|
125
|
-
const aggregator = rawInput?.aggregateInfo;
|
|
126
|
-
if (rawInput?.aggregate && aggregator) {
|
|
127
|
-
return this.executeAggregate(aggregator, ctx);
|
|
128
|
-
}
|
|
129
|
-
const results = await this.adapter.raw(rawInput, true, this.fromSelector, ctx);
|
|
130
|
-
if (!this.selectSelector) {
|
|
131
|
-
const processed = results.map((r) => this.processRecord(r, ctx));
|
|
132
|
-
if (!ctx.getOrUndefined("afterQueryHandlers")) {
|
|
133
|
-
return processed;
|
|
134
|
-
}
|
|
135
|
-
return (await this.applyAfterHandlersToResult(processed, ctx));
|
|
136
|
-
}
|
|
137
|
-
return results;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* @description Builds a CouchDB Mango query from the statement
|
|
141
|
-
* @summary Converts the statement's conditions, selectors, and options into a CouchDB Mango query
|
|
142
|
-
*/
|
|
143
|
-
build() {
|
|
144
|
-
const log = this.log.for(this.build);
|
|
145
|
-
const aggregateQuery = this.buildAggregateQuery();
|
|
146
|
-
if (aggregateQuery)
|
|
147
|
-
return aggregateQuery;
|
|
148
|
-
const selectors = {};
|
|
149
|
-
selectors[for_couchdb_1.CouchDBKeys.TABLE] = {};
|
|
150
|
-
selectors[for_couchdb_1.CouchDBKeys.TABLE] = decorator_validation_1.Model.tableName(this.fromSelector);
|
|
151
|
-
const query = { selector: selectors };
|
|
152
|
-
if (this.selectSelector)
|
|
153
|
-
query.fields = this.selectSelector;
|
|
154
|
-
if (this.whereCondition) {
|
|
155
|
-
const condition = this.parseCondition(core_1.Condition.and(this.whereCondition, core_1.Condition.attribute(for_couchdb_1.CouchDBKeys.TABLE).eq(query.selector[for_couchdb_1.CouchDBKeys.TABLE]))).selector;
|
|
156
|
-
const selectorKeys = Object.keys(condition);
|
|
157
|
-
if (selectorKeys.length === 1 &&
|
|
158
|
-
Object.values(for_couchdb_1.CouchDBGroupOperator).indexOf(selectorKeys[0]) !== -1)
|
|
159
|
-
switch (selectorKeys[0]) {
|
|
160
|
-
case for_couchdb_1.CouchDBGroupOperator.AND:
|
|
161
|
-
condition[for_couchdb_1.CouchDBGroupOperator.AND] = [
|
|
162
|
-
...Object.values(condition[for_couchdb_1.CouchDBGroupOperator.AND]).reduce((accum, val) => {
|
|
163
|
-
const keys = Object.keys(val);
|
|
164
|
-
if (keys.length !== 1)
|
|
165
|
-
throw new Error("Too many keys in query selector. should be one");
|
|
166
|
-
const k = keys[0];
|
|
167
|
-
if (k === for_couchdb_1.CouchDBGroupOperator.AND)
|
|
168
|
-
accum.push(...val[k]);
|
|
169
|
-
else
|
|
170
|
-
accum.push(val);
|
|
171
|
-
return accum;
|
|
172
|
-
}, []),
|
|
173
|
-
];
|
|
174
|
-
query.selector = condition;
|
|
175
|
-
break;
|
|
176
|
-
case for_couchdb_1.CouchDBGroupOperator.OR: {
|
|
177
|
-
const s = {};
|
|
178
|
-
s[for_couchdb_1.CouchDBGroupOperator.AND] = [
|
|
179
|
-
condition,
|
|
180
|
-
...Object.entries(query.selector).map(([key, val]) => {
|
|
181
|
-
const result = {};
|
|
182
|
-
result[key] = val;
|
|
183
|
-
return result;
|
|
184
|
-
}),
|
|
185
|
-
];
|
|
186
|
-
query.selector = s;
|
|
187
|
-
break;
|
|
188
|
-
}
|
|
189
|
-
default:
|
|
190
|
-
throw new Error("This should be impossible");
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
Object.entries(condition).forEach(([key, val]) => {
|
|
194
|
-
if (query.selector[key])
|
|
195
|
-
log.warn(`A ${key} query param is about to be overridden: ${query.selector[key]} by ${val}`);
|
|
196
|
-
query.selector[key] = val;
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
if (this.orderBySelectors?.length) {
|
|
201
|
-
query.sort = query.sort || [];
|
|
202
|
-
query.selector = query.selector || {};
|
|
203
|
-
for (const [selectorKey, direction] of this.orderBySelectors) {
|
|
204
|
-
const selector = selectorKey;
|
|
205
|
-
const rec = {};
|
|
206
|
-
rec[selector] = direction;
|
|
207
|
-
query.sort.push(rec);
|
|
208
|
-
if (!query.selector[selector]) {
|
|
209
|
-
query.selector[selector] = {};
|
|
210
|
-
query.selector[selector][for_couchdb_1.CouchDBOperator.BIGGER] =
|
|
211
|
-
null;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
if (this.limitSelector) {
|
|
216
|
-
query.limit = this.limitSelector;
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
log.warn(`No limit selector defined. Using default couchdb limit of ${for_couchdb_1.CouchDBQueryLimit}`);
|
|
220
|
-
query.limit = for_couchdb_1.CouchDBQueryLimit;
|
|
221
|
-
}
|
|
222
|
-
if (this.offsetSelector)
|
|
223
|
-
query.skip = this.offsetSelector;
|
|
224
|
-
return query;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* @description Parses a condition into a CouchDB Mango query selector
|
|
228
|
-
* @summary Converts a Condition object into a CouchDB Mango query selector structure
|
|
229
|
-
*/
|
|
230
|
-
parseCondition(condition) {
|
|
231
|
-
function merge(op, obj1, obj2) {
|
|
232
|
-
const result = { selector: {} };
|
|
233
|
-
result.selector[op] = [obj1, obj2];
|
|
234
|
-
return result;
|
|
235
|
-
}
|
|
236
|
-
const { attr1, operator, comparison } = condition;
|
|
237
|
-
if (operator === core_1.Operator.STARTS_WITH) {
|
|
238
|
-
if (typeof attr1 !== "string")
|
|
239
|
-
throw new core_1.QueryError("STARTS_WITH requires an attribute name");
|
|
240
|
-
if (typeof comparison !== "string")
|
|
241
|
-
throw new core_1.QueryError("STARTS_WITH requires a string comparison");
|
|
242
|
-
const range = prefixRange(comparison);
|
|
243
|
-
const selector = {};
|
|
244
|
-
selector[attr1] = {};
|
|
245
|
-
selector[attr1][for_couchdb_1.CouchDBOperator.BIGGER_EQ] = range.start;
|
|
246
|
-
selector[attr1][for_couchdb_1.CouchDBOperator.SMALLER] = range.end;
|
|
247
|
-
return { selector };
|
|
248
|
-
}
|
|
249
|
-
if (operator === core_1.Operator.ENDS_WITH) {
|
|
250
|
-
if (typeof attr1 !== "string")
|
|
251
|
-
throw new core_1.QueryError("ENDS_WITH requires an attribute name");
|
|
252
|
-
if (typeof comparison !== "string")
|
|
253
|
-
throw new core_1.QueryError("ENDS_WITH requires a string comparison");
|
|
254
|
-
const selector = {};
|
|
255
|
-
selector[attr1] = {
|
|
256
|
-
[for_couchdb_1.CouchDBOperator.REGEXP]: `${escapeRegExp(comparison)}$`,
|
|
257
|
-
};
|
|
258
|
-
return { selector };
|
|
259
|
-
}
|
|
260
|
-
if (operator === core_1.Operator.BETWEEN) {
|
|
261
|
-
const attr = attr1;
|
|
262
|
-
if (!Array.isArray(comparison) || comparison.length !== 2)
|
|
263
|
-
throw new core_1.QueryError("BETWEEN operator requires [min, max] comparison");
|
|
264
|
-
const [min, max] = comparison;
|
|
265
|
-
const opBetween = {};
|
|
266
|
-
opBetween[attr] = {};
|
|
267
|
-
opBetween[attr][(0, for_couchdb_1.translateOperators)(core_1.Operator.BIGGER_EQ)] = min;
|
|
268
|
-
opBetween[attr][(0, for_couchdb_1.translateOperators)(core_1.Operator.SMALLER_EQ)] = max;
|
|
269
|
-
return { selector: opBetween };
|
|
270
|
-
}
|
|
271
|
-
let op = {};
|
|
272
|
-
if ([core_1.GroupOperator.AND, core_1.GroupOperator.OR, core_1.Operator.NOT].indexOf(operator) === -1) {
|
|
273
|
-
op[attr1] = {};
|
|
274
|
-
op[attr1][(0, for_couchdb_1.translateOperators)(operator)] =
|
|
275
|
-
comparison;
|
|
276
|
-
}
|
|
277
|
-
else if (operator === core_1.Operator.NOT) {
|
|
278
|
-
op = this.parseCondition(attr1).selector;
|
|
279
|
-
op[(0, for_couchdb_1.translateOperators)(core_1.Operator.NOT)] = {};
|
|
280
|
-
op[(0, for_couchdb_1.translateOperators)(core_1.Operator.NOT)][attr1.attr1] = comparison;
|
|
281
|
-
}
|
|
282
|
-
else {
|
|
283
|
-
const op1 = this.parseCondition(attr1).selector;
|
|
284
|
-
const op2 = this.parseCondition(comparison).selector;
|
|
285
|
-
op = merge((0, for_couchdb_1.translateOperators)(operator), op1, op2).selector;
|
|
286
|
-
}
|
|
287
|
-
return { selector: op };
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* @description Builds an aggregate query if aggregation is requested
|
|
291
|
-
* @summary Checks for aggregate operations and returns a special MangoQuery for them
|
|
292
|
-
*/
|
|
293
|
-
buildAggregateQuery() {
|
|
294
|
-
if (!this.fromSelector)
|
|
295
|
-
return undefined;
|
|
296
|
-
if (this.avgSelector) {
|
|
297
|
-
const attribute = String(this.avgSelector);
|
|
298
|
-
const sumInfo = this.createAggregateDescriptor("sum", attribute);
|
|
299
|
-
const countInfo = this.createAggregateDescriptor("count", attribute);
|
|
300
|
-
if (!sumInfo || !countInfo)
|
|
301
|
-
throw new core_1.QueryError(`Avg operation requires sum and count views for attribute ${attribute}`);
|
|
302
|
-
return this.createAggregateQuery({
|
|
303
|
-
kind: "avg",
|
|
304
|
-
attribute,
|
|
305
|
-
sumDescriptor: sumInfo.descriptor,
|
|
306
|
-
countDescriptor: countInfo.descriptor,
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
if (typeof this.countDistinctSelector !== "undefined") {
|
|
310
|
-
const attribute = this.countDistinctSelector == null
|
|
311
|
-
? undefined
|
|
312
|
-
: String(this.countDistinctSelector);
|
|
313
|
-
const info = this.createAggregateDescriptor("distinct", attribute);
|
|
314
|
-
if (info) {
|
|
315
|
-
info.countDistinct = true;
|
|
316
|
-
return this.createAggregateQuery(info);
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
const aggregatorUsed = typeof this.countSelector !== "undefined" ||
|
|
320
|
-
typeof this.countDistinctSelector !== "undefined" ||
|
|
321
|
-
!!this.minSelector ||
|
|
322
|
-
!!this.maxSelector ||
|
|
323
|
-
!!this.sumSelector ||
|
|
324
|
-
!!this.distinctSelector;
|
|
325
|
-
const aggregatorChecks = [
|
|
326
|
-
[
|
|
327
|
-
"count",
|
|
328
|
-
(this.countSelector ?? undefined),
|
|
329
|
-
],
|
|
330
|
-
["max", this.maxSelector],
|
|
331
|
-
["min", this.minSelector],
|
|
332
|
-
["sum", this.sumSelector],
|
|
333
|
-
["distinct", this.distinctSelector],
|
|
334
|
-
];
|
|
335
|
-
for (const [kind, selector] of aggregatorChecks) {
|
|
336
|
-
const attribute = selector ? String(selector) : undefined;
|
|
337
|
-
const info = this.createAggregateDescriptor(kind, attribute);
|
|
338
|
-
if (info)
|
|
339
|
-
return this.createAggregateQuery(info);
|
|
340
|
-
}
|
|
341
|
-
if (aggregatorUsed) {
|
|
342
|
-
throw new core_1.QueryError(`No CouchDB view metadata found for table ${decorator_validation_1.Model.tableName(this.fromSelector)} aggregator`);
|
|
343
|
-
}
|
|
344
|
-
return undefined;
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* @description Creates an aggregate descriptor for a view-based aggregation
|
|
348
|
-
*/
|
|
349
|
-
createAggregateDescriptor(kind, attribute) {
|
|
350
|
-
if (!this.fromSelector)
|
|
351
|
-
return undefined;
|
|
352
|
-
const metas = (0, for_couchdb_1.findViewMetadata)(this.fromSelector, kind, attribute);
|
|
353
|
-
if (!metas.length)
|
|
354
|
-
return undefined;
|
|
355
|
-
const meta = metas[0];
|
|
356
|
-
const tableName = decorator_validation_1.Model.tableName(this.fromSelector);
|
|
357
|
-
const viewName = (0, for_couchdb_1.generateViewName)(tableName, meta.attribute, kind, meta);
|
|
358
|
-
const ddoc = meta.ddoc || (0, for_couchdb_1.generateDesignDocName)(tableName, viewName);
|
|
359
|
-
const options = {
|
|
360
|
-
reduce: meta.reduce !== undefined ? true : !meta.returnDocs,
|
|
361
|
-
};
|
|
362
|
-
if (kind === "distinct" || kind === "groupBy")
|
|
363
|
-
options.group = true;
|
|
364
|
-
return {
|
|
365
|
-
kind,
|
|
366
|
-
meta,
|
|
367
|
-
descriptor: {
|
|
368
|
-
ddoc,
|
|
369
|
-
view: viewName,
|
|
370
|
-
options,
|
|
371
|
-
},
|
|
372
|
-
};
|
|
373
|
-
}
|
|
374
|
-
/**
|
|
375
|
-
* @description Creates the special aggregate MangoQuery marker
|
|
376
|
-
*/
|
|
377
|
-
createAggregateQuery(info) {
|
|
378
|
-
return {
|
|
379
|
-
selector: {},
|
|
380
|
-
aggregate: true,
|
|
381
|
-
aggregateInfo: info,
|
|
382
|
-
};
|
|
383
|
-
}
|
|
384
|
-
/**
|
|
385
|
-
* @description Gets the adapter cast to FabricClientAdapter for view access
|
|
386
|
-
*/
|
|
387
|
-
getFabricAdapter() {
|
|
388
|
-
return this.adapter;
|
|
389
|
-
}
|
|
390
|
-
/**
|
|
391
|
-
* @description Executes an aggregate query via adapter's view method
|
|
392
|
-
*/
|
|
393
|
-
async executeAggregate(info, ctx) {
|
|
394
|
-
if (!this.isViewAggregate(info)) {
|
|
395
|
-
return this.handleAverage(info, ctx);
|
|
396
|
-
}
|
|
397
|
-
const fabricAdapter = this.getFabricAdapter();
|
|
398
|
-
const viewInfo = info;
|
|
399
|
-
const response = await fabricAdapter.view(viewInfo.descriptor.ddoc, viewInfo.descriptor.view, viewInfo.descriptor.options, ctx);
|
|
400
|
-
return this.processViewResponse(info, response);
|
|
401
|
-
}
|
|
402
|
-
/**
|
|
403
|
-
* @description Handles average calculation from sum and count views
|
|
404
|
-
*/
|
|
405
|
-
async handleAverage(info, ctx) {
|
|
406
|
-
if (info.kind !== "avg")
|
|
407
|
-
throw new core_1.QueryError("Average descriptor is not valid");
|
|
408
|
-
const fabricAdapter = this.getFabricAdapter();
|
|
409
|
-
const [sumDesc, countDesc] = [info.sumDescriptor, info.countDescriptor];
|
|
410
|
-
const [sumResponse, countResponse] = await Promise.all([
|
|
411
|
-
fabricAdapter.view(sumDesc.ddoc, sumDesc.view, sumDesc.options, ctx),
|
|
412
|
-
fabricAdapter.view(countDesc.ddoc, countDesc.view, countDesc.options, ctx),
|
|
413
|
-
]);
|
|
414
|
-
const sum = sumResponse.rows?.[0]?.value ?? 0;
|
|
415
|
-
const count = countResponse.rows?.[0]?.value ?? 0;
|
|
416
|
-
if (!count)
|
|
417
|
-
return 0;
|
|
418
|
-
return (sum / count);
|
|
419
|
-
}
|
|
420
|
-
/**
|
|
421
|
-
* @description Processes the view response based on aggregate kind
|
|
422
|
-
*/
|
|
423
|
-
processViewResponse(info, response) {
|
|
424
|
-
if (info.kind === "avg")
|
|
425
|
-
throw new core_1.QueryError("Average results should be handled before processing rows");
|
|
426
|
-
const rows = response.rows || [];
|
|
427
|
-
const viewInfo = info;
|
|
428
|
-
const meta = viewInfo.meta;
|
|
429
|
-
if (viewInfo.countDistinct) {
|
|
430
|
-
return (rows.length || 0);
|
|
431
|
-
}
|
|
432
|
-
if (viewInfo.kind === "distinct" || viewInfo.kind === "groupBy") {
|
|
433
|
-
return rows.map((row) => row.key ?? row.value);
|
|
434
|
-
}
|
|
435
|
-
if (meta.returnDocs) {
|
|
436
|
-
return rows.map((row) => row.value ?? row.doc ?? row);
|
|
437
|
-
}
|
|
438
|
-
if (!rows.length) {
|
|
439
|
-
return (viewInfo.kind === "count" ? 0 : null);
|
|
440
|
-
}
|
|
441
|
-
return (rows[0].value ?? rows[0].key ?? null);
|
|
442
|
-
}
|
|
443
|
-
/**
|
|
444
|
-
* @description Type guard to check if info is a view-based aggregate
|
|
445
|
-
*/
|
|
446
|
-
isViewAggregate(info) {
|
|
447
|
-
return info.kind !== "avg";
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
exports.FabricClientStatement = FabricClientStatement;
|
|
451
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ2xpZW50U3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9GYWJyaWNDbGllbnRTdGF0ZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBbUJ3QjtBQUN4Qix5RUFBdUQ7QUFFdkQsdURBYytCO0FBRS9CLCtDQUFnRDtBQUNoRCwyREFBZ0U7QUFDaEUscURBQWdEO0FBc0JoRCxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQWEsRUFBVSxFQUFFLENBQzdDLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFL0MsU0FBUyx1QkFBdUIsQ0FBQyxLQUFhO0lBQzVDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDNUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxJQUFJLEtBQUssU0FBUztZQUFFLFNBQVM7UUFDakMsSUFBSSxJQUFJLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFDcEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQztBQUMxQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsTUFBYztJQUNqQyxPQUFPO1FBQ0wsS0FBSyxFQUFFLE1BQU07UUFDYixHQUFHLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxDQUFDO0tBQ3JDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBYSxxQkFBMEMsU0FBUSxnQkFLOUQ7SUFDQyxZQUFZLE9BQTRCLEVBQUUsU0FBaUM7UUFDekUsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRWtCLE1BQU0sQ0FDdkIsR0FBK0I7UUFFL0IsTUFBTSxRQUFRLEdBQXFDLEtBQUssQ0FBQyxNQUFNLENBQzdELEdBQVksQ0FDYixDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUUvQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFDMUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDcEMsUUFBUSxNQUFNLEVBQUUsQ0FBQztZQUNmLEtBQUssNEJBQXFCLENBQUMsSUFBSTtnQkFDN0IsTUFBTTtZQUNSLEtBQUssNEJBQXFCLENBQUMsSUFBSTtnQkFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLE1BQU07WUFDUixLQUFLLDRCQUFxQixDQUFDLE9BQU87Z0JBQ2hDLE1BQU07WUFDUixLQUFLLDRCQUFxQixDQUFDLE9BQU87Z0JBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU07WUFDUixLQUFLLDRCQUFxQixDQUFDLE9BQU87Z0JBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixNQUFNO1lBQ1IsS0FBSyw0QkFBcUIsQ0FBQyxXQUFXO2dCQUNwQyxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLDZCQUFhLENBQUMsc0JBQXNCLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFa0IsS0FBSyxDQUFDLGVBQWUsQ0FDdEMsR0FBRyxJQUFvRDtRQUV2RCxNQUFNLElBQUksR0FBRyxpQkFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBa0MsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVRLEtBQUssQ0FBQyxPQUFPLENBQ3BCLEdBQWdDO1FBRWhDLEdBQUc7WUFDRCxHQUFHO2dCQUNILENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDekIsc0JBQWUsQ0FBQyxLQUFLLEVBQ3JCLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxFQUNwQixJQUFJLENBQUMsWUFBWSxDQUNsQixDQUFDLENBQUM7UUFFTCxJQUNFLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbkIsR0FBa0MsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsRUFDcEUsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBaUMsQ0FBQyxDQUFDO1lBQ2hFLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLElBQUksR0FBd0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFRLEVBQVMsQ0FBQztRQUU5QixNQUFNLFFBQVEsR0FBMkI7WUFDdkMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3hCLElBQUk7WUFDSixNQUFNO1NBQ0EsQ0FBQztRQUVULE1BQU0sTUFBTSxHQUFhLENBQUMsa0JBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFZLENBQUMsQ0FBQztZQUN4RSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQixJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNO2dCQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUksTUFBTSxDQUFDLElBQTRCLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYztZQUNyQixNQUFNLENBQUMsSUFBSSxDQUNULGtCQUFXLENBQUMsTUFBTSxFQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FDL0QsQ0FBQztRQUNKLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVyxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFRLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFBLHFCQUFXLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hELFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNnQixhQUFhLENBQzlCLE1BQVcsRUFDWCxHQUErQjtRQUUvQixNQUFNLE1BQU0sR0FBRyw0QkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0MsTUFBTSxJQUFJLEdBQUcscUJBQVEsQ0FBQyxHQUFHLENBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHFCQUFRLENBQUMsR0FBRyxDQUFDLHNCQUFNLENBQUMsRUFBRSxFQUFFLE1BQWdCLENBQUMsQ0FDMUMsRUFBRSxJQUFJLENBQUM7UUFFUixJQUFJLE1BQU0sQ0FBQyx5QkFBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMseUJBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMseUJBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxlQUFRLENBQUMsVUFBVSxDQUFDLElBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ00sS0FBSyxDQUFDLEdBQUcsQ0FBSSxRQUFvQixFQUFFLEdBQUcsSUFBVztRQUN4RCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sVUFBVSxHQUFJLFFBQWdCLEVBQUUsYUFBYSxDQUFDO1FBQ3BELElBQUssUUFBZ0IsRUFBRSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUksVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBVSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUMzQyxRQUFRLEVBQ1IsSUFBSSxFQUNKLElBQUksQ0FBQyxZQUFZLEVBQ2pCLEdBQUcsQ0FDSixDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztnQkFDOUMsT0FBTyxTQUF5QixDQUFDO1lBQ25DLENBQUM7WUFDRCxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFNLENBQUM7UUFDdEUsQ0FBQztRQUNELE9BQU8sT0FBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDZ0IsS0FBSztRQUN0QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDbEQsSUFBSSxjQUFjO1lBQUUsT0FBTyxjQUFjLENBQUM7UUFDMUMsTUFBTSxTQUFTLEdBQWtCLEVBQUUsQ0FBQztRQUNwQyxTQUFTLENBQUMseUJBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEMsU0FBUyxDQUFDLHlCQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsNEJBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sS0FBSyxHQUFlLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ2xELElBQUksSUFBSSxDQUFDLGNBQWM7WUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUEwQixDQUFDO1FBRXhFLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sU0FBUyxHQUFrQixJQUFJLENBQUMsY0FBYyxDQUNsRCxnQkFBUyxDQUFDLEdBQUcsQ0FDWCxJQUFJLENBQUMsY0FBYyxFQUNuQixnQkFBUyxDQUFDLFNBQVMsQ0FBSSx5QkFBVyxDQUFDLEtBQWdCLENBQUMsQ0FBQyxFQUFFLENBQ3JELEtBQUssQ0FBQyxRQUFRLENBQUMseUJBQVcsQ0FBQyxLQUFLLENBQUMsQ0FDbEMsQ0FDRixDQUNGLENBQUMsUUFBUSxDQUFDO1lBQ1gsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQW9CLENBQUM7WUFDL0QsSUFDRSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0NBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUVuRSxRQUFRLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN4QixLQUFLLGtDQUFvQixDQUFDLEdBQUc7d0JBQzNCLFNBQVMsQ0FBQyxrQ0FBb0IsQ0FBQyxHQUFHLENBQUMsR0FBRzs0QkFDcEMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNkLFNBQVMsQ0FBQyxrQ0FBb0IsQ0FBQyxHQUFHLENBQWtCLENBQ3JELENBQUMsTUFBTSxDQUFDLENBQUMsS0FBc0IsRUFBRSxHQUFRLEVBQUUsRUFBRTtnQ0FDNUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7b0NBQ25CLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0RBQWdELENBQ2pELENBQUM7Z0NBQ0osTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNsQixJQUFJLENBQUMsS0FBSyxrQ0FBb0IsQ0FBQyxHQUFHO29DQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUksR0FBRyxDQUFDLENBQUMsQ0FBVyxDQUFDLENBQUM7O29DQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUNyQixPQUFPLEtBQUssQ0FBQzs0QkFDZixDQUFDLEVBQUUsRUFBRSxDQUFDO3lCQUNQLENBQUM7d0JBQ0YsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7d0JBQzNCLE1BQU07b0JBQ1IsS0FBSyxrQ0FBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM3QixNQUFNLENBQUMsR0FBcUIsRUFBRSxDQUFDO3dCQUMvQixDQUFDLENBQUMsa0NBQW9CLENBQUMsR0FBRyxDQUFDLEdBQUc7NEJBQzVCLFNBQVM7NEJBQ1QsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO2dDQUNuRCxNQUFNLE1BQU0sR0FBcUIsRUFBRSxDQUFDO2dDQUNwQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO2dDQUNsQixPQUFPLE1BQU0sQ0FBQzs0QkFDaEIsQ0FBQyxDQUFDO3lCQUNILENBQUM7d0JBQ0YsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7d0JBQ25CLE1BQU07b0JBQ1IsQ0FBQztvQkFDRDt3QkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7Z0JBQ2pELENBQUM7aUJBQ0UsQ0FBQztnQkFDSixNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7b0JBQy9DLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7d0JBQ3JCLEdBQUcsQ0FBQyxJQUFJLENBQ04sS0FBSyxHQUFHLDJDQUEyQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUNuRixDQUFDO29CQUNKLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUM1QixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDbEMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUssRUFBb0IsQ0FBQztZQUN6RCxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzdELE1BQU0sUUFBUSxHQUFHLFdBQXFCLENBQUM7Z0JBQ3ZDLE1BQU0sR0FBRyxHQUFtQyxFQUFFLENBQUM7Z0JBQy9DLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUEyQixDQUFDO2dCQUMzQyxLQUFLLENBQUMsSUFBeUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBbUIsQ0FBQztvQkFDOUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQW1CLENBQUMsNkJBQWUsQ0FBQyxNQUFNLENBQUM7d0JBQ2pFLElBQUksQ0FBQztnQkFDVCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsSUFBSSxDQUNOLDZEQUE2RCwrQkFBaUIsRUFBRSxDQUNqRixDQUFDO1lBQ0YsS0FBSyxDQUFDLEtBQUssR0FBRywrQkFBaUIsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUUxRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDZ0IsY0FBYyxDQUFDLFNBQXVCO1FBQ3ZELFNBQVMsS0FBSyxDQUNaLEVBQWlCLEVBQ2pCLElBQW1CLEVBQ25CLElBQW1CO1lBRW5CLE1BQU0sTUFBTSxHQUFlLEVBQUUsUUFBUSxFQUFFLEVBQW1CLEVBQUUsQ0FBQztZQUM3RCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25DLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxTQUl2QyxDQUFDO1FBRUYsSUFBSSxRQUFRLEtBQUssZUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFDM0IsTUFBTSxJQUFJLGlCQUFVLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUNqRSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVE7Z0JBQ2hDLE1BQU0sSUFBSSxpQkFBVSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7WUFDbkUsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sUUFBUSxHQUFrQixFQUFtQixDQUFDO1lBQ3BELFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFtQixDQUFDO1lBQ3JDLFFBQVEsQ0FBQyxLQUFLLENBQW1CLENBQUMsNkJBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzNFLFFBQVEsQ0FBQyxLQUFLLENBQW1CLENBQUMsNkJBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxRQUFRLEtBQUssZUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFDM0IsTUFBTSxJQUFJLGlCQUFVLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUMvRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVE7Z0JBQ2hDLE1BQU0sSUFBSSxpQkFBVSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7WUFDakUsTUFBTSxRQUFRLEdBQWtCLEVBQW1CLENBQUM7WUFDcEQsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHO2dCQUNoQixDQUFDLDZCQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUc7YUFDeEMsQ0FBQztZQUNuQixPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksUUFBUSxLQUFLLGVBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksR0FBRyxLQUFlLENBQUM7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUN2RCxNQUFNLElBQUksaUJBQVUsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBQzlCLE1BQU0sU0FBUyxHQUFrQixFQUFtQixDQUFDO1lBQ3JELFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFtQixDQUFDO1lBQ3JDLFNBQVMsQ0FBQyxJQUFJLENBQW1CLENBQ2hDLElBQUEsZ0NBQWtCLEVBQUMsZUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUN2QyxHQUFHLEdBQUcsQ0FBQztZQUNQLFNBQVMsQ0FBQyxJQUFJLENBQW1CLENBQ2hDLElBQUEsZ0NBQWtCLEVBQUMsZUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUN4QyxHQUFHLEdBQUcsQ0FBQztZQUNSLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUVELElBQUksRUFBRSxHQUFrQixFQUFtQixDQUFDO1FBQzVDLElBQ0UsQ0FBQyxvQkFBYSxDQUFDLEdBQUcsRUFBRSxvQkFBYSxDQUFDLEVBQUUsRUFBRSxlQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUN6RCxRQUF5QixDQUMxQixLQUFLLENBQUMsQ0FBQyxFQUNSLENBQUM7WUFDRCxFQUFFLENBQUMsS0FBZSxDQUFDLEdBQUcsRUFBbUIsQ0FBQztZQUN6QyxFQUFFLENBQUMsS0FBZSxDQUFtQixDQUFDLElBQUEsZ0NBQWtCLEVBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2xFLFVBQVUsQ0FBQztRQUNmLENBQUM7YUFBTSxJQUFJLFFBQVEsS0FBSyxlQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDckMsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBcUIsQ0FBQyxDQUFDLFFBQXlCLENBQUM7WUFDMUUsRUFBRSxDQUFDLElBQUEsZ0NBQWtCLEVBQUMsZUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBbUIsQ0FBQztZQUMxRCxFQUFFLENBQUMsSUFBQSxnQ0FBa0IsRUFBQyxlQUFRLENBQUMsR0FBRyxDQUFDLENBQW1CLENBQ3BELEtBQXNDLENBQUMsS0FBSyxDQUM5QyxHQUFHLFVBQVUsQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUNyRSxNQUFNLEdBQUcsR0FBUSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQTBCLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDMUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFBLGdDQUFrQixFQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDOUQsQ0FBQztRQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDakUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUztnQkFDeEIsTUFBTSxJQUFJLGlCQUFVLENBQ2xCLDREQUE0RCxTQUFTLEVBQUUsQ0FDeEUsQ0FBQztZQUNKLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO2dCQUMvQixJQUFJLEVBQUUsS0FBSztnQkFDWCxTQUFTO2dCQUNULGFBQWEsRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDakMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxVQUFVO2FBQ3RDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3RELE1BQU0sU0FBUyxHQUNiLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxJQUFJO2dCQUNoQyxDQUFDLENBQUMsU0FBUztnQkFDWCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDbkUsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDMUIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLGNBQWMsR0FDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFdBQVc7WUFDekMsT0FBTyxJQUFJLENBQUMscUJBQXFCLEtBQUssV0FBVztZQUNqRCxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVztZQUNsQixDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBRTFCLE1BQU0sZ0JBQWdCLEdBQXFEO1lBQ3pFO2dCQUNFLE9BQU87Z0JBQ1AsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBa0M7YUFDbkU7WUFDRCxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3pCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDekIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN6QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDcEMsQ0FBQztRQUVGLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2hELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDMUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3RCxJQUFJLElBQUk7Z0JBQUUsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLGlCQUFVLENBQ2xCLDRDQUE0Qyw0QkFBSyxDQUFDLFNBQVMsQ0FDekQsSUFBSSxDQUFDLFlBQVksQ0FDbEIsYUFBYSxDQUNmLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0sseUJBQXlCLENBQy9CLElBQWMsRUFDZCxTQUFrQjtRQUVsQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFBLDhCQUFnQixFQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLFNBQVMsR0FBRyw0QkFBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBQSw4QkFBZ0IsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFBLG1DQUFxQixFQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRSxNQUFNLE9BQU8sR0FBd0I7WUFDbkMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVU7U0FDNUQsQ0FBQztRQUNGLElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLEtBQUssU0FBUztZQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3BFLE9BQU87WUFDTCxJQUFJO1lBQ0osSUFBSTtZQUNKLFVBQVUsRUFBRTtnQkFDVixJQUFJO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLE9BQU87YUFDUjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxvQkFBb0IsQ0FDMUIsSUFBeUI7UUFFekIsT0FBTztZQUNMLFFBQVEsRUFBRSxFQUFFO1lBQ1osU0FBUyxFQUFFLElBQUk7WUFDZixhQUFhLEVBQUUsSUFBSTtTQUNvRCxDQUFDO0lBQzVFLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQjtRQUN0QixPQUFPLElBQUksQ0FBQyxPQUE4QixDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDNUIsSUFBeUIsRUFDekIsR0FBK0I7UUFFL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUF3RCxDQUFDO1FBQzFFLE1BQU0sUUFBUSxHQUFHLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FDdkMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQ3hCLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUN4QixRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFDM0IsR0FBRyxDQUNKLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBSSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGFBQWEsQ0FDekIsSUFBeUIsRUFDekIsR0FBK0I7UUFFL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUs7WUFDckIsTUFBTSxJQUFJLGlCQUFVLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUMxRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEUsTUFBTSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDckQsYUFBYSxDQUFDLElBQUksQ0FDaEIsT0FBTyxDQUFDLElBQUksRUFDWixPQUFPLENBQUMsSUFBSSxFQUNaLE9BQU8sQ0FBQyxPQUFPLEVBQ2YsR0FBRyxDQUNKO1lBQ0QsYUFBYSxDQUFDLElBQUksQ0FDaEIsU0FBUyxDQUFDLElBQUksRUFDZCxTQUFTLENBQUMsSUFBSSxFQUNkLFNBQVMsQ0FBQyxPQUFPLEVBQ2pCLEdBQUcsQ0FDSjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQzlDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxDQUFpQixDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFpQixDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNLLG1CQUFtQixDQUN6QixJQUF5QixFQUN6QixRQUFzQjtRQUV0QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSztZQUNyQixNQUFNLElBQUksaUJBQVUsQ0FDbEIsMERBQTBELENBQzNELENBQUM7UUFDSixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUF3RCxDQUFDO1FBQzFFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFpQixDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQWlCLENBQUM7UUFDakUsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBaUIsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFpQixDQUFDO1FBQ2hFLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBaUIsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQ3JCLElBQXlCO1FBRXpCLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBeGlCRCxzREF3aUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWRhcHRlckZsYWdzLFxuICBDb25kaXRpb24sXG4gIENvbnRleHQsXG4gIEdyb3VwT3BlcmF0b3IsXG4gIE1heWJlQ29udGV4dHVhbEFyZyxcbiAgT3BlcmF0b3IsXG4gIE9yZGVyRGlyZWN0aW9uLFxuICBQZXJzaXN0ZW5jZUtleXMsXG4gIFByZXBhcmVkU3RhdGVtZW50LFxuICBQcmVwYXJlZFN0YXRlbWVudEtleXMsXG4gIFF1ZXJ5Q2xhdXNlLFxuICBRdWVyeUVycm9yLFxuICBSZXBvc2l0b3J5LFxuICBTZWxlY3RTZWxlY3RvcixcbiAgU2VxdWVuY2UsXG4gIFN0YXRlbWVudCxcbiAgU3RhdGVtZW50RXhlY3V0b3IsXG4gIFZpZXdLaW5kLFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgRmFicmljQ2xpZW50QWRhcHRlciB9IGZyb20gXCIuL0ZhYnJpY0NsaWVudEFkYXB0ZXJcIjtcbmltcG9ydCB7XG4gIENvdWNoREJLZXlzLFxuICBDb3VjaERCT3BlcmF0b3IsXG4gIENvdWNoREJHcm91cE9wZXJhdG9yLFxuICBDb3VjaERCUXVlcnlMaW1pdCxcbiAgTWFuZ29RdWVyeSxcbiAgTWFuZ29PcGVyYXRvcixcbiAgTWFuZ29TZWxlY3RvcixcbiAgdHJhbnNsYXRlT3BlcmF0b3JzLFxuICBnZW5lcmF0ZURlc2lnbkRvY05hbWUsXG4gIGdlbmVyYXRlVmlld05hbWUsXG4gIGZpbmRWaWV3TWV0YWRhdGEsXG4gIENvdWNoREJWaWV3TWV0YWRhdGEsXG4gIFZpZXdSZXNwb25zZSxcbn0gZnJvbSBcIkBkZWNhZi10cy9mb3ItY291Y2hkYlwiO1xuaW1wb3J0IHsgRmFicmljQ2xpZW50RmxhZ3MgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgdG9DYW1lbENhc2UgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IERCS2V5cywgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcblxudHlwZSBGYWJyaWNWaWV3RGVzY3JpcHRvciA9IHtcbiAgZGRvYzogc3RyaW5nO1xuICB2aWV3OiBzdHJpbmc7XG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuXG50eXBlIEZhYnJpY0FnZ3JlZ2F0ZUluZm8gPVxuICB8IHtcbiAgICAgIGtpbmQ6IFZpZXdLaW5kO1xuICAgICAgbWV0YTogQ291Y2hEQlZpZXdNZXRhZGF0YTtcbiAgICAgIGRlc2NyaXB0b3I6IEZhYnJpY1ZpZXdEZXNjcmlwdG9yO1xuICAgICAgY291bnREaXN0aW5jdD86IGJvb2xlYW47XG4gICAgfVxuICB8IHtcbiAgICAgIGtpbmQ6IFwiYXZnXCI7XG4gICAgICBhdHRyaWJ1dGU6IHN0cmluZztcbiAgICAgIHN1bURlc2NyaXB0b3I6IEZhYnJpY1ZpZXdEZXNjcmlwdG9yO1xuICAgICAgY291bnREZXNjcmlwdG9yOiBGYWJyaWNWaWV3RGVzY3JpcHRvcjtcbiAgICB9O1xuXG5jb25zdCBlc2NhcGVSZWdFeHAgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PlxuICB2YWx1ZS5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7XG5cbmZ1bmN0aW9uIG5leHRMZXhpY29ncmFwaGljU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gXCJcXHUwMDAwXCI7XG4gIGNvbnN0IGNoYXJzID0gQXJyYXkuZnJvbSh2YWx1ZSk7XG4gIGZvciAobGV0IGkgPSBjaGFycy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyc1tpXS5jb2RlUG9pbnRBdCgwKTtcbiAgICBpZiAoY29kZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICBpZiAoY29kZSA8IDB4MTBmZmZmKSB7XG4gICAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGUgKyAxKTtcbiAgICAgIHJldHVybiBjaGFycy5zbGljZSgwLCBpICsgMSkuam9pbihcIlwiKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGAke3ZhbHVlfVxcdTAwMDBgO1xufVxuXG5mdW5jdGlvbiBwcmVmaXhSYW5nZShwcmVmaXg6IHN0cmluZykge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBwcmVmaXgsXG4gICAgZW5kOiBuZXh0TGV4aWNvZ3JhcGhpY1N0cmluZyhwcmVmaXgpLFxuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgRmFicmljQ2xpZW50U3RhdGVtZW50PE0gZXh0ZW5kcyBNb2RlbCwgUj4gZXh0ZW5kcyBTdGF0ZW1lbnQ8XG4gIE0sXG4gIEZhYnJpY0NsaWVudEFkYXB0ZXIsXG4gIFIsXG4gIE1hbmdvUXVlcnlcbj4ge1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyOiBGYWJyaWNDbGllbnRBZGFwdGVyLCBvdmVycmlkZXM/OiBQYXJ0aWFsPEFkYXB0ZXJGbGFncz4pIHtcbiAgICBzdXBlcihhZGFwdGVyLCBvdmVycmlkZXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNxdWFzaChcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+XG4gICk6IFByZXBhcmVkU3RhdGVtZW50PGFueT4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNxdWFzaGVkOiBQcmVwYXJlZFN0YXRlbWVudDxNPiB8IHVuZGVmaW5lZCA9IHN1cGVyLnNxdWFzaChcbiAgICAgIGN0eCBhcyBuZXZlclxuICAgICk7XG4gICAgaWYgKCFzcXVhc2hlZCkgcmV0dXJuIHNxdWFzaGVkO1xuXG4gICAgY29uc3QgeyBtZXRob2QsIHBhcmFtcywgYXJncyB9ID0gc3F1YXNoZWQ7XG4gICAgY29uc3QgeyBkaXJlY3Rpb24sIGxpbWl0IH0gPSBwYXJhbXM7XG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkQ6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRTpcbiAgICAgICAgYXJncy5wdXNoKGRpcmVjdGlvbiwgbGltaXQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkRfQlk6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuTElTVF9CWTpcbiAgICAgICAgYXJncy5wdXNoKGRpcmVjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRV9CWTpcbiAgICAgICAgYXJncy5wdXNoKGRpcmVjdGlvbiwgbGltaXQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkRfT05FX0JZOlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBVbnN1cHBvcnRlZCBtZXRob2QgJHttZXRob2R9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNxdWFzaGVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGV4ZWN1dGVQcmVwYXJlZChcbiAgICAuLi5hcmd6OiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8Uj4ge1xuICAgIGNvbnN0IHJlcG8gPSBSZXBvc2l0b3J5LmZvck1vZGVsKHRoaXMuZnJvbVNlbGVjdG9yLCB0aGlzLmFkYXB0ZXIuYWxpYXMpO1xuICAgIGNvbnN0IHsgbWV0aG9kLCBhcmdzIH0gPSB0aGlzLnByZXBhcmVkIGFzIFByZXBhcmVkU3RhdGVtZW50PGFueT47XG4gICAgcmV0dXJuIHJlcG8uc3RhdGVtZW50KG1ldGhvZCwgLi4uYXJncywgLi4uYXJneik7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBwcmVwYXJlKFxuICAgIGN0eD86IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+XG4gICk6IFByb21pc2U8U3RhdGVtZW50RXhlY3V0b3I8TSwgUj4+IHtcbiAgICBjdHggPVxuICAgICAgY3R4IHx8XG4gICAgICAoYXdhaXQgdGhpcy5hZGFwdGVyLmNvbnRleHQoXG4gICAgICAgIFBlcnNpc3RlbmNlS2V5cy5RVUVSWSxcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHwge30sXG4gICAgICAgIHRoaXMuZnJvbVNlbGVjdG9yXG4gICAgICApKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuaXNTaW1wbGVRdWVyeSgpICYmXG4gICAgICAoY3R4IGFzIENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+KS5nZXQoXCJmb3JjZVByZXBhcmVTaW1wbGVRdWVyaWVzXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCBzcXVhc2hlZCA9IHRoaXMuc3F1YXNoKGN0eCBhcyBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPik7XG4gICAgICBpZiAoc3F1YXNoZWQpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlZCA9IHNxdWFzaGVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXJnczogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdO1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge30gYXMgYW55O1xuXG4gICAgY29uc3QgcHJlcGFyZWQ6IFByZXBhcmVkU3RhdGVtZW50PGFueT4gPSB7XG4gICAgICBjbGFzczogdGhpcy5mcm9tU2VsZWN0b3IsXG4gICAgICBhcmdzLFxuICAgICAgcGFyYW1zLFxuICAgIH0gYXMgYW55O1xuXG4gICAgY29uc3QgbWV0aG9kOiBzdHJpbmdbXSA9IFtRdWVyeUNsYXVzZS5GSU5EX0JZXTtcblxuICAgIGlmICh0aGlzLndoZXJlQ29uZGl0aW9uKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnByZXBhcmVDb25kaXRpb24odGhpcy53aGVyZUNvbmRpdGlvbiwgY3R4IGFzIG5ldmVyKTtcbiAgICAgIG1ldGhvZC5wdXNoKHBhcnNlZC5tZXRob2QpO1xuICAgICAgaWYgKHBhcnNlZC5hcmdzICYmIHBhcnNlZC5hcmdzLmxlbmd0aClcbiAgICAgICAgYXJncy5wdXNoKC4uLihwYXJzZWQuYXJncyBhcyAoc3RyaW5nIHwgbnVtYmVyKVtdKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdFNlbGVjdG9yKVxuICAgICAgbWV0aG9kLnB1c2goXG4gICAgICAgIFF1ZXJ5Q2xhdXNlLlNFTEVDVCxcbiAgICAgICAgdGhpcy5zZWxlY3RTZWxlY3Rvci5qb2luKGAgJHtRdWVyeUNsYXVzZS5BTkQudG9Mb3dlckNhc2UoKX0gYClcbiAgICAgICk7XG4gICAgaWYgKHRoaXMub3JkZXJCeVNlbGVjdG9ycz8ubGVuZ3RoKSB7XG4gICAgICBtZXRob2QucHVzaChRdWVyeUNsYXVzZS5PUkRFUl9CWSwgdGhpcy5vcmRlckJ5U2VsZWN0b3JzWzBdWzBdIGFzIHN0cmluZyk7XG4gICAgICBhcmdzLnB1c2godGhpcy5vcmRlckJ5U2VsZWN0b3JzWzBdWzFdIGFzIGFueSk7XG4gICAgfVxuICAgIHByZXBhcmVkLm1ldGhvZCA9IHRvQ2FtZWxDYXNlKG1ldGhvZC5qb2luKFwiIFwiKSk7XG4gICAgcHJlcGFyZWQucGFyYW1zID0gcGFyYW1zO1xuICAgIHRoaXMucHJlcGFyZWQgPSBwcmVwYXJlZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJvY2Vzc2VzIGEgcmVjb3JkIGZyb20gQ291Y2hEQi9GYWJyaWNcbiAgICogQHN1bW1hcnkgRXh0cmFjdHMgdGhlIElEIGZyb20gYSBDb3VjaERCIGRvY3VtZW50IGFuZCByZXZlcnRzIGl0IHRvIGEgbW9kZWwgaW5zdGFuY2VcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBwcm9jZXNzUmVjb3JkKFxuICAgIHJlY29yZDogYW55LFxuICAgIGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz5cbiAgKTogTSB7XG4gICAgY29uc3QgcGtBdHRyID0gTW9kZWwucGsodGhpcy5mcm9tU2VsZWN0b3IpO1xuICAgIGNvbnN0IHR5cGUgPSBNZXRhZGF0YS5nZXQoXG4gICAgICB0aGlzLmZyb21TZWxlY3RvcixcbiAgICAgIE1ldGFkYXRhLmtleShEQktleXMuSUQsIHBrQXR0ciBhcyBzdHJpbmcpXG4gICAgKT8udHlwZTtcblxuICAgIGlmIChyZWNvcmRbQ291Y2hEQktleXMuSURdKSB7XG4gICAgICBjb25zdCBbLCAuLi5rZXlBcmdzXSA9IHJlY29yZFtDb3VjaERCS2V5cy5JRF0uc3BsaXQoQ291Y2hEQktleXMuU0VQQVJBVE9SKTtcbiAgICAgIGNvbnN0IGlkID0ga2V5QXJncy5qb2luKFwiX1wiKTtcbiAgICAgIHJlY29yZFtwa0F0dHJdID0gU2VxdWVuY2UucGFyc2VWYWx1ZSh0eXBlIGFzIGFueSwgaWQpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5wcm9jZXNzUmVjb3JkKHJlY29yZCwgY3R4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSByYXcgTWFuZ28gcXVlcnlcbiAgICogQHN1bW1hcnkgU2VuZHMgYSByYXcgTWFuZ28gcXVlcnkgdG8gRmFicmljIGFuZCBwcm9jZXNzZXMgdGhlIHJlc3VsdHNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHJhdzxSPihyYXdJbnB1dDogTWFuZ29RdWVyeSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFI+IHtcbiAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yYXcpO1xuICAgIGNvbnN0IGFnZ3JlZ2F0b3IgPSAocmF3SW5wdXQgYXMgYW55KT8uYWdncmVnYXRlSW5mbztcbiAgICBpZiAoKHJhd0lucHV0IGFzIGFueSk/LmFnZ3JlZ2F0ZSAmJiBhZ2dyZWdhdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlQWdncmVnYXRlPFI+KGFnZ3JlZ2F0b3IsIGN0eCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdHM6IGFueVtdID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJhdyhcbiAgICAgIHJhd0lucHV0LFxuICAgICAgdHJ1ZSxcbiAgICAgIHRoaXMuZnJvbVNlbGVjdG9yLFxuICAgICAgY3R4XG4gICAgKTtcblxuICAgIGlmICghdGhpcy5zZWxlY3RTZWxlY3Rvcikge1xuICAgICAgY29uc3QgcHJvY2Vzc2VkID0gcmVzdWx0cy5tYXAoKHIpID0+IHRoaXMucHJvY2Vzc1JlY29yZChyLCBjdHgpKTtcbiAgICAgIGlmICghY3R4LmdldE9yVW5kZWZpbmVkKFwiYWZ0ZXJRdWVyeUhhbmRsZXJzXCIpKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzZWQgYXMgdW5rbm93biBhcyBSO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmFwcGx5QWZ0ZXJIYW5kbGVyc1RvUmVzdWx0KHByb2Nlc3NlZCwgY3R4KSkgYXMgUjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHMgYXMgUjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQnVpbGRzIGEgQ291Y2hEQiBNYW5nbyBxdWVyeSBmcm9tIHRoZSBzdGF0ZW1lbnRcbiAgICogQHN1bW1hcnkgQ29udmVydHMgdGhlIHN0YXRlbWVudCdzIGNvbmRpdGlvbnMsIHNlbGVjdG9ycywgYW5kIG9wdGlvbnMgaW50byBhIENvdWNoREIgTWFuZ28gcXVlcnlcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBidWlsZCgpOiBNYW5nb1F1ZXJ5IHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5idWlsZCk7XG4gICAgY29uc3QgYWdncmVnYXRlUXVlcnkgPSB0aGlzLmJ1aWxkQWdncmVnYXRlUXVlcnkoKTtcbiAgICBpZiAoYWdncmVnYXRlUXVlcnkpIHJldHVybiBhZ2dyZWdhdGVRdWVyeTtcbiAgICBjb25zdCBzZWxlY3RvcnM6IE1hbmdvU2VsZWN0b3IgPSB7fTtcbiAgICBzZWxlY3RvcnNbQ291Y2hEQktleXMuVEFCTEVdID0ge307XG4gICAgc2VsZWN0b3JzW0NvdWNoREJLZXlzLlRBQkxFXSA9IE1vZGVsLnRhYmxlTmFtZSh0aGlzLmZyb21TZWxlY3Rvcik7XG4gICAgY29uc3QgcXVlcnk6IE1hbmdvUXVlcnkgPSB7IHNlbGVjdG9yOiBzZWxlY3RvcnMgfTtcbiAgICBpZiAodGhpcy5zZWxlY3RTZWxlY3RvcikgcXVlcnkuZmllbGRzID0gdGhpcy5zZWxlY3RTZWxlY3RvciBhcyBzdHJpbmdbXTtcblxuICAgIGlmICh0aGlzLndoZXJlQ29uZGl0aW9uKSB7XG4gICAgICBjb25zdCBjb25kaXRpb246IE1hbmdvU2VsZWN0b3IgPSB0aGlzLnBhcnNlQ29uZGl0aW9uKFxuICAgICAgICBDb25kaXRpb24uYW5kKFxuICAgICAgICAgIHRoaXMud2hlcmVDb25kaXRpb24sXG4gICAgICAgICAgQ29uZGl0aW9uLmF0dHJpYnV0ZTxNPihDb3VjaERCS2V5cy5UQUJMRSBhcyBrZXlvZiBNKS5lcShcbiAgICAgICAgICAgIHF1ZXJ5LnNlbGVjdG9yW0NvdWNoREJLZXlzLlRBQkxFXVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKS5zZWxlY3RvcjtcbiAgICAgIGNvbnN0IHNlbGVjdG9yS2V5cyA9IE9iamVjdC5rZXlzKGNvbmRpdGlvbikgYXMgTWFuZ29PcGVyYXRvcltdO1xuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RvcktleXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIE9iamVjdC52YWx1ZXMoQ291Y2hEQkdyb3VwT3BlcmF0b3IpLmluZGV4T2Yoc2VsZWN0b3JLZXlzWzBdKSAhPT0gLTFcbiAgICAgIClcbiAgICAgICAgc3dpdGNoIChzZWxlY3RvcktleXNbMF0pIHtcbiAgICAgICAgICBjYXNlIENvdWNoREJHcm91cE9wZXJhdG9yLkFORDpcbiAgICAgICAgICAgIGNvbmRpdGlvbltDb3VjaERCR3JvdXBPcGVyYXRvci5BTkRdID0gW1xuICAgICAgICAgICAgICAuLi5PYmplY3QudmFsdWVzKFxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbltDb3VjaERCR3JvdXBPcGVyYXRvci5BTkRdIGFzIE1hbmdvU2VsZWN0b3JcbiAgICAgICAgICAgICAgKS5yZWR1Y2UoKGFjY3VtOiBNYW5nb1NlbGVjdG9yW10sIHZhbDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIlRvbyBtYW55IGtleXMgaW4gcXVlcnkgc2VsZWN0b3IuIHNob3VsZCBiZSBvbmVcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBrID0ga2V5c1swXTtcbiAgICAgICAgICAgICAgICBpZiAoayA9PT0gQ291Y2hEQkdyb3VwT3BlcmF0b3IuQU5EKVxuICAgICAgICAgICAgICAgICAgYWNjdW0ucHVzaCguLi4odmFsW2tdIGFzIGFueVtdKSk7XG4gICAgICAgICAgICAgICAgZWxzZSBhY2N1bS5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICAgICAgICB9LCBbXSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcXVlcnkuc2VsZWN0b3IgPSBjb25kaXRpb247XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIENvdWNoREJHcm91cE9wZXJhdG9yLk9SOiB7XG4gICAgICAgICAgICBjb25zdCBzOiBSZWNvcmQ8YW55LCBhbnk+ID0ge307XG4gICAgICAgICAgICBzW0NvdWNoREJHcm91cE9wZXJhdG9yLkFORF0gPSBbXG4gICAgICAgICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgICAgICAgLi4uT2JqZWN0LmVudHJpZXMocXVlcnkuc2VsZWN0b3IpLm1hcCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPGFueSwgYW55PiA9IHt9O1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHF1ZXJ5LnNlbGVjdG9yID0gcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZVwiKTtcbiAgICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbmRpdGlvbikuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICAgIGlmIChxdWVyeS5zZWxlY3RvcltrZXldKVxuICAgICAgICAgICAgbG9nLndhcm4oXG4gICAgICAgICAgICAgIGBBICR7a2V5fSBxdWVyeSBwYXJhbSBpcyBhYm91dCB0byBiZSBvdmVycmlkZGVuOiAke3F1ZXJ5LnNlbGVjdG9yW2tleV19IGJ5ICR7dmFsfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcXVlcnkuc2VsZWN0b3Jba2V5XSA9IHZhbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3JkZXJCeVNlbGVjdG9ycz8ubGVuZ3RoKSB7XG4gICAgICBxdWVyeS5zb3J0ID0gcXVlcnkuc29ydCB8fCBbXTtcbiAgICAgIHF1ZXJ5LnNlbGVjdG9yID0gcXVlcnkuc2VsZWN0b3IgfHwgKHt9IGFzIE1hbmdvU2VsZWN0b3IpO1xuICAgICAgZm9yIChjb25zdCBbc2VsZWN0b3JLZXksIGRpcmVjdGlvbl0gb2YgdGhpcy5vcmRlckJ5U2VsZWN0b3JzKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gc2VsZWN0b3JLZXkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCByZWM6IFJlY29yZDxzdHJpbmcsIE9yZGVyRGlyZWN0aW9uPiA9IHt9O1xuICAgICAgICByZWNbc2VsZWN0b3JdID0gZGlyZWN0aW9uIGFzIE9yZGVyRGlyZWN0aW9uO1xuICAgICAgICAocXVlcnkuc29ydCBhcyBSZWNvcmQ8c3RyaW5nLCBPcmRlckRpcmVjdGlvbj5bXSkucHVzaChyZWMpO1xuICAgICAgICBpZiAoIXF1ZXJ5LnNlbGVjdG9yW3NlbGVjdG9yXSkge1xuICAgICAgICAgIHF1ZXJ5LnNlbGVjdG9yW3NlbGVjdG9yXSA9IHt9IGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgICAgICAgKHF1ZXJ5LnNlbGVjdG9yW3NlbGVjdG9yXSBhcyBNYW5nb1NlbGVjdG9yKVtDb3VjaERCT3BlcmF0b3IuQklHR0VSXSA9XG4gICAgICAgICAgICBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGltaXRTZWxlY3Rvcikge1xuICAgICAgcXVlcnkubGltaXQgPSB0aGlzLmxpbWl0U2VsZWN0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBgTm8gbGltaXQgc2VsZWN0b3IgZGVmaW5lZC4gVXNpbmcgZGVmYXVsdCBjb3VjaGRiIGxpbWl0IG9mICR7Q291Y2hEQlF1ZXJ5TGltaXR9YFxuICAgICAgKTtcbiAgICAgIHF1ZXJ5LmxpbWl0ID0gQ291Y2hEQlF1ZXJ5TGltaXQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub2Zmc2V0U2VsZWN0b3IpIHF1ZXJ5LnNraXAgPSB0aGlzLm9mZnNldFNlbGVjdG9yO1xuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYSBjb25kaXRpb24gaW50byBhIENvdWNoREIgTWFuZ28gcXVlcnkgc2VsZWN0b3JcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYSBDb25kaXRpb24gb2JqZWN0IGludG8gYSBDb3VjaERCIE1hbmdvIHF1ZXJ5IHNlbGVjdG9yIHN0cnVjdHVyZVxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHBhcnNlQ29uZGl0aW9uKGNvbmRpdGlvbjogQ29uZGl0aW9uPE0+KTogTWFuZ29RdWVyeSB7XG4gICAgZnVuY3Rpb24gbWVyZ2UoXG4gICAgICBvcDogTWFuZ29PcGVyYXRvcixcbiAgICAgIG9iajE6IE1hbmdvU2VsZWN0b3IsXG4gICAgICBvYmoyOiBNYW5nb1NlbGVjdG9yXG4gICAgKTogTWFuZ29RdWVyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IE1hbmdvUXVlcnkgPSB7IHNlbGVjdG9yOiB7fSBhcyBNYW5nb1NlbGVjdG9yIH07XG4gICAgICByZXN1bHQuc2VsZWN0b3Jbb3BdID0gW29iajEsIG9iajJdO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGF0dHIxLCBvcGVyYXRvciwgY29tcGFyaXNvbiB9ID0gY29uZGl0aW9uIGFzIHVua25vd24gYXMge1xuICAgICAgYXR0cjE6IHN0cmluZyB8IENvbmRpdGlvbjxNPjtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvciB8IEdyb3VwT3BlcmF0b3I7XG4gICAgICBjb21wYXJpc29uOiBhbnk7XG4gICAgfTtcblxuICAgIGlmIChvcGVyYXRvciA9PT0gT3BlcmF0b3IuU1RBUlRTX1dJVEgpIHtcbiAgICAgIGlmICh0eXBlb2YgYXR0cjEgIT09IFwic3RyaW5nXCIpXG4gICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFwiU1RBUlRTX1dJVEggcmVxdWlyZXMgYW4gYXR0cmlidXRlIG5hbWVcIik7XG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmlzb24gIT09IFwic3RyaW5nXCIpXG4gICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFwiU1RBUlRTX1dJVEggcmVxdWlyZXMgYSBzdHJpbmcgY29tcGFyaXNvblwiKTtcbiAgICAgIGNvbnN0IHJhbmdlID0gcHJlZml4UmFuZ2UoY29tcGFyaXNvbik7XG4gICAgICBjb25zdCBzZWxlY3RvcjogTWFuZ29TZWxlY3RvciA9IHt9IGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgICBzZWxlY3RvclthdHRyMV0gPSB7fSBhcyBNYW5nb1NlbGVjdG9yO1xuICAgICAgKHNlbGVjdG9yW2F0dHIxXSBhcyBNYW5nb1NlbGVjdG9yKVtDb3VjaERCT3BlcmF0b3IuQklHR0VSX0VRXSA9IHJhbmdlLnN0YXJ0O1xuICAgICAgKHNlbGVjdG9yW2F0dHIxXSBhcyBNYW5nb1NlbGVjdG9yKVtDb3VjaERCT3BlcmF0b3IuU01BTExFUl0gPSByYW5nZS5lbmQ7XG4gICAgICByZXR1cm4geyBzZWxlY3RvciB9O1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRvciA9PT0gT3BlcmF0b3IuRU5EU19XSVRIKSB7XG4gICAgICBpZiAodHlwZW9mIGF0dHIxICE9PSBcInN0cmluZ1wiKVxuICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcIkVORFNfV0lUSCByZXF1aXJlcyBhbiBhdHRyaWJ1dGUgbmFtZVwiKTtcbiAgICAgIGlmICh0eXBlb2YgY29tcGFyaXNvbiAhPT0gXCJzdHJpbmdcIilcbiAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXCJFTkRTX1dJVEggcmVxdWlyZXMgYSBzdHJpbmcgY29tcGFyaXNvblwiKTtcbiAgICAgIGNvbnN0IHNlbGVjdG9yOiBNYW5nb1NlbGVjdG9yID0ge30gYXMgTWFuZ29TZWxlY3RvcjtcbiAgICAgIHNlbGVjdG9yW2F0dHIxXSA9IHtcbiAgICAgICAgW0NvdWNoREJPcGVyYXRvci5SRUdFWFBdOiBgJHtlc2NhcGVSZWdFeHAoY29tcGFyaXNvbil9JGAsXG4gICAgICB9IGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgICByZXR1cm4geyBzZWxlY3RvciB9O1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRvciA9PT0gT3BlcmF0b3IuQkVUV0VFTikge1xuICAgICAgY29uc3QgYXR0ciA9IGF0dHIxIGFzIHN0cmluZztcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb21wYXJpc29uKSB8fCBjb21wYXJpc29uLmxlbmd0aCAhPT0gMilcbiAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXCJCRVRXRUVOIG9wZXJhdG9yIHJlcXVpcmVzIFttaW4sIG1heF0gY29tcGFyaXNvblwiKTtcbiAgICAgIGNvbnN0IFttaW4sIG1heF0gPSBjb21wYXJpc29uO1xuICAgICAgY29uc3Qgb3BCZXR3ZWVuOiBNYW5nb1NlbGVjdG9yID0ge30gYXMgTWFuZ29TZWxlY3RvcjtcbiAgICAgIG9wQmV0d2VlblthdHRyXSA9IHt9IGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgICAob3BCZXR3ZWVuW2F0dHJdIGFzIE1hbmdvU2VsZWN0b3IpW1xuICAgICAgICB0cmFuc2xhdGVPcGVyYXRvcnMoT3BlcmF0b3IuQklHR0VSX0VRKVxuICAgICAgXSA9IG1pbjtcbiAgICAgIChvcEJldHdlZW5bYXR0cl0gYXMgTWFuZ29TZWxlY3RvcilbXG4gICAgICAgIHRyYW5zbGF0ZU9wZXJhdG9ycyhPcGVyYXRvci5TTUFMTEVSX0VRKVxuICAgICAgXSA9IG1heDtcbiAgICAgIHJldHVybiB7IHNlbGVjdG9yOiBvcEJldHdlZW4gfTtcbiAgICB9XG5cbiAgICBsZXQgb3A6IE1hbmdvU2VsZWN0b3IgPSB7fSBhcyBNYW5nb1NlbGVjdG9yO1xuICAgIGlmIChcbiAgICAgIFtHcm91cE9wZXJhdG9yLkFORCwgR3JvdXBPcGVyYXRvci5PUiwgT3BlcmF0b3IuTk9UXS5pbmRleE9mKFxuICAgICAgICBvcGVyYXRvciBhcyBHcm91cE9wZXJhdG9yXG4gICAgICApID09PSAtMVxuICAgICkge1xuICAgICAgb3BbYXR0cjEgYXMgc3RyaW5nXSA9IHt9IGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgICAob3BbYXR0cjEgYXMgc3RyaW5nXSBhcyBNYW5nb1NlbGVjdG9yKVt0cmFuc2xhdGVPcGVyYXRvcnMob3BlcmF0b3IpXSA9XG4gICAgICAgIGNvbXBhcmlzb247XG4gICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gT3BlcmF0b3IuTk9UKSB7XG4gICAgICBvcCA9IHRoaXMucGFyc2VDb25kaXRpb24oYXR0cjEgYXMgQ29uZGl0aW9uPE0+KS5zZWxlY3RvciBhcyBNYW5nb1NlbGVjdG9yO1xuICAgICAgb3BbdHJhbnNsYXRlT3BlcmF0b3JzKE9wZXJhdG9yLk5PVCldID0ge30gYXMgTWFuZ29TZWxlY3RvcjtcbiAgICAgIChvcFt0cmFuc2xhdGVPcGVyYXRvcnMoT3BlcmF0b3IuTk9UKV0gYXMgTWFuZ29TZWxlY3RvcilbXG4gICAgICAgIChhdHRyMSBhcyB1bmtub3duIGFzIHsgYXR0cjE6IHN0cmluZyB9KS5hdHRyMVxuICAgICAgXSA9IGNvbXBhcmlzb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9wMTogYW55ID0gdGhpcy5wYXJzZUNvbmRpdGlvbihhdHRyMSBhcyBDb25kaXRpb248TT4pLnNlbGVjdG9yO1xuICAgICAgY29uc3Qgb3AyOiBhbnkgPSB0aGlzLnBhcnNlQ29uZGl0aW9uKGNvbXBhcmlzb24gYXMgQ29uZGl0aW9uPE0+KS5zZWxlY3RvcjtcbiAgICAgIG9wID0gbWVyZ2UodHJhbnNsYXRlT3BlcmF0b3JzKG9wZXJhdG9yKSwgb3AxLCBvcDIpLnNlbGVjdG9yO1xuICAgIH1cblxuICAgIHJldHVybiB7IHNlbGVjdG9yOiBvcCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBCdWlsZHMgYW4gYWdncmVnYXRlIHF1ZXJ5IGlmIGFnZ3JlZ2F0aW9uIGlzIHJlcXVlc3RlZFxuICAgKiBAc3VtbWFyeSBDaGVja3MgZm9yIGFnZ3JlZ2F0ZSBvcGVyYXRpb25zIGFuZCByZXR1cm5zIGEgc3BlY2lhbCBNYW5nb1F1ZXJ5IGZvciB0aGVtXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQWdncmVnYXRlUXVlcnkoKTogTWFuZ29RdWVyeSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLmZyb21TZWxlY3RvcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5hdmdTZWxlY3Rvcikge1xuICAgICAgY29uc3QgYXR0cmlidXRlID0gU3RyaW5nKHRoaXMuYXZnU2VsZWN0b3IpO1xuICAgICAgY29uc3Qgc3VtSW5mbyA9IHRoaXMuY3JlYXRlQWdncmVnYXRlRGVzY3JpcHRvcihcInN1bVwiLCBhdHRyaWJ1dGUpO1xuICAgICAgY29uc3QgY291bnRJbmZvID0gdGhpcy5jcmVhdGVBZ2dyZWdhdGVEZXNjcmlwdG9yKFwiY291bnRcIiwgYXR0cmlidXRlKTtcbiAgICAgIGlmICghc3VtSW5mbyB8fCAhY291bnRJbmZvKVxuICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgICBgQXZnIG9wZXJhdGlvbiByZXF1aXJlcyBzdW0gYW5kIGNvdW50IHZpZXdzIGZvciBhdHRyaWJ1dGUgJHthdHRyaWJ1dGV9YFxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQWdncmVnYXRlUXVlcnkoe1xuICAgICAgICBraW5kOiBcImF2Z1wiLFxuICAgICAgICBhdHRyaWJ1dGUsXG4gICAgICAgIHN1bURlc2NyaXB0b3I6IHN1bUluZm8uZGVzY3JpcHRvcixcbiAgICAgICAgY291bnREZXNjcmlwdG9yOiBjb3VudEluZm8uZGVzY3JpcHRvcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5jb3VudERpc3RpbmN0U2VsZWN0b3IgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9XG4gICAgICAgIHRoaXMuY291bnREaXN0aW5jdFNlbGVjdG9yID09IG51bGxcbiAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgIDogU3RyaW5nKHRoaXMuY291bnREaXN0aW5jdFNlbGVjdG9yKTtcbiAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmNyZWF0ZUFnZ3JlZ2F0ZURlc2NyaXB0b3IoXCJkaXN0aW5jdFwiLCBhdHRyaWJ1dGUpO1xuICAgICAgaWYgKGluZm8pIHtcbiAgICAgICAgaW5mby5jb3VudERpc3RpbmN0ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQWdncmVnYXRlUXVlcnkoaW5mbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWdncmVnYXRvclVzZWQgPVxuICAgICAgdHlwZW9mIHRoaXMuY291bnRTZWxlY3RvciAhPT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgdHlwZW9mIHRoaXMuY291bnREaXN0aW5jdFNlbGVjdG9yICE9PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAhIXRoaXMubWluU2VsZWN0b3IgfHxcbiAgICAgICEhdGhpcy5tYXhTZWxlY3RvciB8fFxuICAgICAgISF0aGlzLnN1bVNlbGVjdG9yIHx8XG4gICAgICAhIXRoaXMuZGlzdGluY3RTZWxlY3RvcjtcblxuICAgIGNvbnN0IGFnZ3JlZ2F0b3JDaGVja3M6IEFycmF5PFtWaWV3S2luZCwgU2VsZWN0U2VsZWN0b3I8TT4gfCB1bmRlZmluZWRdPiA9IFtcbiAgICAgIFtcbiAgICAgICAgXCJjb3VudFwiLFxuICAgICAgICAodGhpcy5jb3VudFNlbGVjdG9yID8/IHVuZGVmaW5lZCkgYXMgU2VsZWN0U2VsZWN0b3I8TT4gfCB1bmRlZmluZWQsXG4gICAgICBdLFxuICAgICAgW1wibWF4XCIsIHRoaXMubWF4U2VsZWN0b3JdLFxuICAgICAgW1wibWluXCIsIHRoaXMubWluU2VsZWN0b3JdLFxuICAgICAgW1wic3VtXCIsIHRoaXMuc3VtU2VsZWN0b3JdLFxuICAgICAgW1wiZGlzdGluY3RcIiwgdGhpcy5kaXN0aW5jdFNlbGVjdG9yXSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBba2luZCwgc2VsZWN0b3JdIG9mIGFnZ3JlZ2F0b3JDaGVja3MpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHNlbGVjdG9yID8gU3RyaW5nKHNlbGVjdG9yKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmNyZWF0ZUFnZ3JlZ2F0ZURlc2NyaXB0b3Ioa2luZCwgYXR0cmlidXRlKTtcbiAgICAgIGlmIChpbmZvKSByZXR1cm4gdGhpcy5jcmVhdGVBZ2dyZWdhdGVRdWVyeShpbmZvKTtcbiAgICB9XG5cbiAgICBpZiAoYWdncmVnYXRvclVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICBgTm8gQ291Y2hEQiB2aWV3IG1ldGFkYXRhIGZvdW5kIGZvciB0YWJsZSAke01vZGVsLnRhYmxlTmFtZShcbiAgICAgICAgICB0aGlzLmZyb21TZWxlY3RvclxuICAgICAgICApfSBhZ2dyZWdhdG9yYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBhZ2dyZWdhdGUgZGVzY3JpcHRvciBmb3IgYSB2aWV3LWJhc2VkIGFnZ3JlZ2F0aW9uXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFnZ3JlZ2F0ZURlc2NyaXB0b3IoXG4gICAga2luZDogVmlld0tpbmQsXG4gICAgYXR0cmlidXRlPzogc3RyaW5nXG4gICk6IEV4dHJhY3Q8RmFicmljQWdncmVnYXRlSW5mbywgeyBraW5kOiBWaWV3S2luZCB9PiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLmZyb21TZWxlY3RvcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBtZXRhcyA9IGZpbmRWaWV3TWV0YWRhdGEodGhpcy5mcm9tU2VsZWN0b3IsIGtpbmQsIGF0dHJpYnV0ZSk7XG4gICAgaWYgKCFtZXRhcy5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbWV0YSA9IG1ldGFzWzBdO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZSh0aGlzLmZyb21TZWxlY3Rvcik7XG4gICAgY29uc3Qgdmlld05hbWUgPSBnZW5lcmF0ZVZpZXdOYW1lKHRhYmxlTmFtZSwgbWV0YS5hdHRyaWJ1dGUsIGtpbmQsIG1ldGEpO1xuICAgIGNvbnN0IGRkb2MgPSBtZXRhLmRkb2MgfHwgZ2VuZXJhdGVEZXNpZ25Eb2NOYW1lKHRhYmxlTmFtZSwgdmlld05hbWUpO1xuICAgIGNvbnN0IG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICByZWR1Y2U6IG1ldGEucmVkdWNlICE9PSB1bmRlZmluZWQgPyB0cnVlIDogIW1ldGEucmV0dXJuRG9jcyxcbiAgICB9O1xuICAgIGlmIChraW5kID09PSBcImRpc3RpbmN0XCIgfHwga2luZCA9PT0gXCJncm91cEJ5XCIpIG9wdGlvbnMuZ3JvdXAgPSB0cnVlO1xuICAgIHJldHVybiB7XG4gICAgICBraW5kLFxuICAgICAgbWV0YSxcbiAgICAgIGRlc2NyaXB0b3I6IHtcbiAgICAgICAgZGRvYyxcbiAgICAgICAgdmlldzogdmlld05hbWUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgdGhlIHNwZWNpYWwgYWdncmVnYXRlIE1hbmdvUXVlcnkgbWFya2VyXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFnZ3JlZ2F0ZVF1ZXJ5KFxuICAgIGluZm86IEZhYnJpY0FnZ3JlZ2F0ZUluZm9cbiAgKTogTWFuZ29RdWVyeSAmIHsgYWdncmVnYXRlOiB0cnVlOyBhZ2dyZWdhdGVJbmZvOiBGYWJyaWNBZ2dyZWdhdGVJbmZvIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBzZWxlY3Rvcjoge30sXG4gICAgICBhZ2dyZWdhdGU6IHRydWUsXG4gICAgICBhZ2dyZWdhdGVJbmZvOiBpbmZvLFxuICAgIH0gYXMgTWFuZ29RdWVyeSAmIHsgYWdncmVnYXRlOiB0cnVlOyBhZ2dyZWdhdGVJbmZvOiBGYWJyaWNBZ2dyZWdhdGVJbmZvIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGFkYXB0ZXIgY2FzdCB0byBGYWJyaWNDbGllbnRBZGFwdGVyIGZvciB2aWV3IGFjY2Vzc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRGYWJyaWNBZGFwdGVyKCk6IEZhYnJpY0NsaWVudEFkYXB0ZXIge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIgYXMgRmFicmljQ2xpZW50QWRhcHRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYW4gYWdncmVnYXRlIHF1ZXJ5IHZpYSBhZGFwdGVyJ3MgdmlldyBtZXRob2RcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUFnZ3JlZ2F0ZTxSPihcbiAgICBpbmZvOiBGYWJyaWNBZ2dyZWdhdGVJbmZvLFxuICAgIGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz5cbiAgKTogUHJvbWlzZTxSPiB7XG4gICAgaWYgKCF0aGlzLmlzVmlld0FnZ3JlZ2F0ZShpbmZvKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQXZlcmFnZTxSPihpbmZvLCBjdHgpO1xuICAgIH1cbiAgICBjb25zdCBmYWJyaWNBZGFwdGVyID0gdGhpcy5nZXRGYWJyaWNBZGFwdGVyKCk7XG4gICAgY29uc3Qgdmlld0luZm8gPSBpbmZvIGFzIEV4dHJhY3Q8RmFicmljQWdncmVnYXRlSW5mbywgeyBraW5kOiBWaWV3S2luZCB9PjtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZhYnJpY0FkYXB0ZXIudmlldzxWaWV3UmVzcG9uc2U+KFxuICAgICAgdmlld0luZm8uZGVzY3JpcHRvci5kZG9jLFxuICAgICAgdmlld0luZm8uZGVzY3JpcHRvci52aWV3LFxuICAgICAgdmlld0luZm8uZGVzY3JpcHRvci5vcHRpb25zLFxuICAgICAgY3R4XG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmlld1Jlc3BvbnNlPFI+KGluZm8sIHJlc3BvbnNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBhdmVyYWdlIGNhbGN1bGF0aW9uIGZyb20gc3VtIGFuZCBjb3VudCB2aWV3c1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVBdmVyYWdlPFI+KFxuICAgIGluZm86IEZhYnJpY0FnZ3JlZ2F0ZUluZm8sXG4gICAgY3R4OiBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPlxuICApOiBQcm9taXNlPFI+IHtcbiAgICBpZiAoaW5mby5raW5kICE9PSBcImF2Z1wiKVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXCJBdmVyYWdlIGRlc2NyaXB0b3IgaXMgbm90IHZhbGlkXCIpO1xuICAgIGNvbnN0IGZhYnJpY0FkYXB0ZXIgPSB0aGlzLmdldEZhYnJpY0FkYXB0ZXIoKTtcbiAgICBjb25zdCBbc3VtRGVzYywgY291bnREZXNjXSA9IFtpbmZvLnN1bURlc2NyaXB0b3IsIGluZm8uY291bnREZXNjcmlwdG9yXTtcbiAgICBjb25zdCBbc3VtUmVzcG9uc2UsIGNvdW50UmVzcG9uc2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgZmFicmljQWRhcHRlci52aWV3PFZpZXdSZXNwb25zZT4oXG4gICAgICAgIHN1bURlc2MuZGRvYyxcbiAgICAgICAgc3VtRGVzYy52aWV3LFxuICAgICAgICBzdW1EZXNjLm9wdGlvbnMsXG4gICAgICAgIGN0eFxuICAgICAgKSxcbiAgICAgIGZhYnJpY0FkYXB0ZXIudmlldzxWaWV3UmVzcG9uc2U+KFxuICAgICAgICBjb3VudERlc2MuZGRvYyxcbiAgICAgICAgY291bnREZXNjLnZpZXcsXG4gICAgICAgIGNvdW50RGVzYy5vcHRpb25zLFxuICAgICAgICBjdHhcbiAgICAgICksXG4gICAgXSk7XG4gICAgY29uc3Qgc3VtID0gc3VtUmVzcG9uc2Uucm93cz8uWzBdPy52YWx1ZSA/PyAwO1xuICAgIGNvbnN0IGNvdW50ID0gY291bnRSZXNwb25zZS5yb3dzPy5bMF0/LnZhbHVlID8/IDA7XG4gICAgaWYgKCFjb3VudCkgcmV0dXJuIDAgYXMgdW5rbm93biBhcyBSO1xuICAgIHJldHVybiAoc3VtIC8gY291bnQpIGFzIHVua25vd24gYXMgUjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJvY2Vzc2VzIHRoZSB2aWV3IHJlc3BvbnNlIGJhc2VkIG9uIGFnZ3JlZ2F0ZSBraW5kXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NWaWV3UmVzcG9uc2U8Uj4oXG4gICAgaW5mbzogRmFicmljQWdncmVnYXRlSW5mbyxcbiAgICByZXNwb25zZTogVmlld1Jlc3BvbnNlXG4gICk6IFIge1xuICAgIGlmIChpbmZvLmtpbmQgPT09IFwiYXZnXCIpXG4gICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgXCJBdmVyYWdlIHJlc3VsdHMgc2hvdWxkIGJlIGhhbmRsZWQgYmVmb3JlIHByb2Nlc3Npbmcgcm93c1wiXG4gICAgICApO1xuICAgIGNvbnN0IHJvd3MgPSByZXNwb25zZS5yb3dzIHx8IFtdO1xuICAgIGNvbnN0IHZpZXdJbmZvID0gaW5mbyBhcyBFeHRyYWN0PEZhYnJpY0FnZ3JlZ2F0ZUluZm8sIHsga2luZDogVmlld0tpbmQgfT47XG4gICAgY29uc3QgbWV0YSA9IHZpZXdJbmZvLm1ldGE7XG4gICAgaWYgKHZpZXdJbmZvLmNvdW50RGlzdGluY3QpIHtcbiAgICAgIHJldHVybiAocm93cy5sZW5ndGggfHwgMCkgYXMgdW5rbm93biBhcyBSO1xuICAgIH1cbiAgICBpZiAodmlld0luZm8ua2luZCA9PT0gXCJkaXN0aW5jdFwiIHx8IHZpZXdJbmZvLmtpbmQgPT09IFwiZ3JvdXBCeVwiKSB7XG4gICAgICByZXR1cm4gcm93cy5tYXAoKHJvdykgPT4gcm93LmtleSA/PyByb3cudmFsdWUpIGFzIHVua25vd24gYXMgUjtcbiAgICB9XG4gICAgaWYgKG1ldGEucmV0dXJuRG9jcykge1xuICAgICAgcmV0dXJuIHJvd3MubWFwKChyb3cpID0+IHJvdy52YWx1ZSA/PyByb3cuZG9jID8/IHJvdykgYXMgdW5rbm93biBhcyBSO1xuICAgIH1cbiAgICBpZiAoIXJvd3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gKHZpZXdJbmZvLmtpbmQgPT09IFwiY291bnRcIiA/IDAgOiBudWxsKSBhcyB1bmtub3duIGFzIFI7XG4gICAgfVxuICAgIHJldHVybiAocm93c1swXS52YWx1ZSA/PyByb3dzWzBdLmtleSA/PyBudWxsKSBhcyB1bmtub3duIGFzIFI7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgaW5mbyBpcyBhIHZpZXctYmFzZWQgYWdncmVnYXRlXG4gICAqL1xuICBwcml2YXRlIGlzVmlld0FnZ3JlZ2F0ZShcbiAgICBpbmZvOiBGYWJyaWNBZ2dyZWdhdGVJbmZvXG4gICk6IGluZm8gaXMgRXh0cmFjdDxGYWJyaWNBZ2dyZWdhdGVJbmZvLCB7IGtpbmQ6IFZpZXdLaW5kIH0+IHtcbiAgICByZXR1cm4gaW5mby5raW5kICE9PSBcImF2Z1wiO1xuICB9XG59XG4iXX0=
|