@decaf-ts/integrations 0.3.7 → 0.3.9
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/integrations.cjs +3 -3
- package/dist/integrations.js +3 -3
- package/lib/cjs/graph/engine/constants.cjs +58 -0
- package/lib/cjs/graph/engine/decorators.cjs +4 -0
- package/lib/cjs/graph/engine/errors/GraphCycleError.cjs +20 -0
- package/lib/cjs/graph/engine/errors/GraphExecutionError.cjs +27 -0
- package/lib/cjs/graph/engine/errors/GraphInputError.cjs +20 -0
- package/lib/cjs/graph/engine/errors/GraphLoopLimitError.cjs +20 -0
- package/lib/cjs/graph/engine/errors/GraphPinningError.cjs +20 -0
- package/lib/cjs/graph/engine/errors/GraphPortError.cjs +20 -0
- package/lib/cjs/graph/engine/errors/GraphStoreError.cjs +20 -0
- package/lib/cjs/graph/engine/errors/GraphTopologyError.cjs +20 -0
- package/lib/cjs/graph/{errors → engine/errors}/index.cjs +2 -2
- package/lib/cjs/graph/engine/events/GraphExecutionEvent.cjs +4 -0
- package/lib/cjs/graph/engine/events/GraphExecutionEventEmitter.cjs +40 -0
- package/lib/cjs/graph/engine/events/GraphExecutionEventFactory.cjs +37 -0
- package/lib/cjs/graph/engine/events/GraphExecutionObserver.cjs +4 -0
- package/lib/cjs/graph/{events → engine/events}/index.cjs +2 -2
- package/lib/cjs/graph/engine/execution/CodeSandboxEvaluator.cjs +4 -0
- package/lib/cjs/graph/engine/execution/GraphExecutionContext.cjs +79 -0
- package/lib/cjs/graph/engine/execution/GraphExecutionEngine.cjs +408 -0
- package/lib/cjs/graph/engine/execution/GraphExecutionFrame.cjs +32 -0
- package/lib/cjs/graph/engine/execution/GraphExecutionResult.cjs +30 -0
- package/lib/cjs/graph/engine/execution/GraphNodeExecutor.cjs +4 -0
- package/lib/cjs/graph/engine/execution/SwitchGraphNodeExecutor.cjs +103 -0
- package/lib/cjs/graph/{execution → engine/execution}/index.cjs +2 -2
- package/lib/cjs/graph/engine/index.cjs +84 -0
- package/lib/cjs/graph/engine/loops/ConditionExpressionEvaluator.cjs +87 -0
- package/lib/cjs/graph/engine/loops/ForeachGraphNodeExecutor.cjs +85 -0
- package/lib/cjs/graph/engine/loops/GraphConditionEvaluator.cjs +85 -0
- package/lib/cjs/graph/engine/loops/GraphLoopExecutionContext.cjs +16 -0
- package/lib/cjs/graph/engine/loops/UntilGraphNodeExecutor.cjs +77 -0
- package/lib/cjs/graph/engine/loops/WhileGraphNodeExecutor.cjs +78 -0
- package/lib/cjs/graph/{loops → engine/loops}/index.cjs +2 -2
- package/lib/cjs/graph/engine/pinning/GraphPinningDependencyResolver.cjs +28 -0
- package/lib/cjs/graph/engine/pinning/GraphPinningMetadata.cjs +20 -0
- package/lib/cjs/graph/engine/pinning/GraphPinningPolicy.cjs +34 -0
- package/lib/cjs/graph/engine/pinning/GraphPinningService.cjs +191 -0
- package/lib/cjs/graph/{pinning → engine/pinning}/index.cjs +2 -2
- package/lib/cjs/graph/engine/planning/GraphExecutionPlan.cjs +4 -0
- package/lib/cjs/graph/engine/planning/GraphExecutionPlanEdge.cjs +4 -0
- package/lib/cjs/graph/engine/planning/GraphExecutionPlanLayer.cjs +4 -0
- package/lib/cjs/graph/engine/planning/GraphExecutionPlanNode.cjs +4 -0
- package/lib/cjs/graph/engine/planning/GraphExecutionPlanner.cjs +197 -0
- package/lib/cjs/graph/engine/planning/GraphRelationResolver.cjs +172 -0
- package/lib/cjs/graph/engine/planning/GraphTopology.cjs +57 -0
- package/lib/cjs/graph/{planning → engine/planning}/index.cjs +2 -2
- package/lib/cjs/graph/engine/registry/GraphNodeExecutorRegistry.cjs +44 -0
- package/lib/cjs/graph/engine/registry/GraphNodeExecutorResolver.cjs +27 -0
- package/lib/cjs/graph/{registry → engine/registry}/index.cjs +2 -2
- package/lib/cjs/graph/engine/snapshots/GraphExecutionSnapshotMapper.cjs +53 -0
- package/lib/cjs/graph/{snapshots → engine/snapshots}/index.cjs +2 -2
- package/lib/cjs/graph/engine/store/GraphCachedValue.cjs +4 -0
- package/lib/cjs/graph/engine/store/GraphValueKey.cjs +4 -0
- package/lib/cjs/graph/engine/store/GraphValueStore.cjs +76 -0
- package/lib/cjs/graph/engine/store/GraphValueStoreAdapter.cjs +4 -0
- package/lib/cjs/graph/engine/store/InMemoryGraphValueStoreAdapter.cjs +69 -0
- package/lib/cjs/graph/{store → engine/store}/index.cjs +2 -2
- package/lib/cjs/graph/engine/types.cjs +4 -0
- package/lib/cjs/graph/engine/validation/GraphDefinitionValidator.cjs +33 -0
- package/lib/cjs/graph/engine/validation/GraphPortSchemaResolver.cjs +58 -0
- package/lib/cjs/graph/engine/validation/GraphValueValidator.cjs +52 -0
- package/lib/cjs/graph/{validation → engine/validation}/index.cjs +2 -2
- package/lib/cjs/graph/index.cjs +10 -60
- package/lib/cjs/graph/shared/constants.cjs +44 -0
- package/lib/cjs/graph/shared/index.cjs +38 -0
- package/lib/cjs/graph/{nodes → shared/nodes}/agent.cjs +2 -2
- package/lib/cjs/graph/shared/nodes/base.cjs +35 -0
- package/lib/cjs/graph/shared/nodes/category-styles.cjs +38 -0
- package/lib/cjs/graph/shared/nodes/flow-control.cjs +464 -0
- package/lib/cjs/graph/{nodes → shared/nodes}/index.cjs +2 -2
- package/lib/cjs/graph/shared/nodes/triggers.cjs +250 -0
- package/lib/cjs/graph/shared/types.cjs +4 -0
- package/lib/cjs/index.cjs +3 -3
- package/lib/cjs/nest/index.cjs +2 -3
- package/lib/esm/graph/engine/constants.js +62 -0
- package/lib/esm/graph/engine/decorators.js +2 -0
- package/lib/esm/graph/engine/errors/GraphCycleError.js +15 -0
- package/lib/esm/graph/engine/errors/GraphExecutionError.js +22 -0
- package/lib/esm/graph/engine/errors/GraphInputError.js +15 -0
- package/lib/esm/graph/engine/errors/GraphLoopLimitError.js +15 -0
- package/lib/esm/graph/engine/errors/GraphPinningError.js +15 -0
- package/lib/esm/graph/engine/errors/GraphPortError.js +15 -0
- package/lib/esm/graph/engine/errors/GraphStoreError.js +15 -0
- package/lib/esm/graph/engine/errors/GraphTopologyError.js +15 -0
- package/lib/esm/graph/engine/errors/index.js +14 -0
- package/lib/esm/graph/engine/events/GraphExecutionEvent.js +2 -0
- package/lib/esm/graph/engine/events/GraphExecutionEventEmitter.js +35 -0
- package/lib/esm/graph/engine/events/GraphExecutionEventFactory.js +32 -0
- package/lib/esm/graph/engine/events/GraphExecutionObserver.js +2 -0
- package/lib/esm/graph/engine/events/index.js +10 -0
- package/lib/esm/graph/engine/execution/CodeSandboxEvaluator.js +18 -0
- package/lib/esm/graph/engine/execution/GraphExecutionContext.js +74 -0
- package/lib/esm/graph/engine/execution/GraphExecutionEngine.js +403 -0
- package/lib/esm/graph/engine/execution/GraphExecutionFrame.js +27 -0
- package/lib/esm/graph/engine/execution/GraphExecutionResult.js +26 -0
- package/lib/esm/graph/engine/execution/GraphNodeExecutor.js +2 -0
- package/lib/esm/graph/engine/execution/SwitchGraphNodeExecutor.js +98 -0
- package/lib/esm/graph/engine/execution/index.js +13 -0
- package/lib/esm/graph/engine/index.js +67 -0
- package/lib/esm/graph/engine/loops/ConditionExpressionEvaluator.js +82 -0
- package/lib/esm/graph/engine/loops/ForeachGraphNodeExecutor.js +80 -0
- package/lib/esm/graph/engine/loops/GraphConditionEvaluator.js +80 -0
- package/lib/esm/graph/engine/loops/GraphLoopExecutionContext.js +11 -0
- package/lib/esm/graph/engine/loops/UntilGraphNodeExecutor.js +72 -0
- package/lib/esm/graph/engine/loops/WhileGraphNodeExecutor.js +73 -0
- package/lib/esm/graph/engine/loops/index.js +12 -0
- package/lib/esm/graph/engine/pinning/GraphPinningDependencyResolver.js +23 -0
- package/lib/esm/graph/engine/pinning/GraphPinningMetadata.js +15 -0
- package/lib/esm/graph/engine/pinning/GraphPinningPolicy.js +29 -0
- package/lib/esm/graph/engine/pinning/GraphPinningService.js +186 -0
- package/lib/esm/graph/engine/pinning/index.js +10 -0
- package/lib/esm/graph/engine/planning/GraphExecutionPlan.js +2 -0
- package/lib/esm/graph/engine/planning/GraphExecutionPlanEdge.js +7 -0
- package/lib/esm/graph/engine/planning/GraphExecutionPlanLayer.js +2 -0
- package/lib/esm/graph/engine/planning/GraphExecutionPlanNode.js +2 -0
- package/lib/esm/graph/engine/planning/GraphExecutionPlanner.js +192 -0
- package/lib/esm/graph/engine/planning/GraphRelationResolver.js +167 -0
- package/lib/esm/graph/engine/planning/GraphTopology.js +52 -0
- package/lib/esm/graph/engine/planning/index.js +13 -0
- package/lib/esm/graph/engine/registry/GraphNodeExecutorRegistry.js +39 -0
- package/lib/esm/graph/engine/registry/GraphNodeExecutorResolver.js +22 -0
- package/lib/esm/graph/engine/registry/index.js +8 -0
- package/lib/esm/graph/engine/snapshots/GraphExecutionSnapshotMapper.js +48 -0
- package/lib/esm/graph/engine/snapshots/index.js +7 -0
- package/lib/esm/graph/engine/store/GraphCachedValue.js +2 -0
- package/lib/esm/graph/engine/store/GraphValueKey.js +7 -0
- package/lib/esm/graph/engine/store/GraphValueStore.js +71 -0
- package/lib/esm/graph/engine/store/GraphValueStoreAdapter.js +2 -0
- package/lib/esm/graph/engine/store/InMemoryGraphValueStoreAdapter.js +64 -0
- package/lib/esm/graph/engine/store/index.js +11 -0
- package/lib/esm/graph/engine/types.js +2 -0
- package/lib/esm/graph/engine/validation/GraphDefinitionValidator.js +28 -0
- package/lib/esm/graph/engine/validation/GraphPortSchemaResolver.js +53 -0
- package/lib/esm/graph/engine/validation/GraphValueValidator.js +47 -0
- package/lib/esm/graph/engine/validation/index.js +9 -0
- package/lib/esm/graph/index.js +9 -59
- package/lib/esm/graph/shared/constants.js +56 -0
- package/lib/esm/graph/shared/index.js +19 -0
- package/lib/esm/graph/shared/nodes/agent.js +101 -0
- package/lib/esm/graph/shared/nodes/base.js +30 -0
- package/lib/esm/graph/shared/nodes/category-styles.js +34 -0
- package/lib/esm/graph/shared/nodes/flow-control.js +455 -0
- package/lib/esm/graph/shared/nodes/index.js +18 -0
- package/lib/esm/graph/shared/nodes/triggers.js +241 -0
- package/lib/esm/graph/shared/types.js +2 -0
- package/lib/esm/index.js +3 -3
- package/lib/esm/nest/index.js +1 -2
- package/lib/types/graph/engine/constants.d.cts +59 -0
- package/lib/types/graph/engine/constants.d.mts +59 -0
- package/lib/types/graph/{execution → engine/execution}/GraphExecutionResult.d.cts +1 -1
- package/lib/types/graph/{execution → engine/execution}/GraphExecutionResult.d.mts +1 -1
- package/lib/types/graph/engine/index.d.cts +61 -0
- package/lib/types/graph/engine/index.d.mts +61 -0
- package/lib/types/graph/{loops → engine/loops}/ConditionExpressionEvaluator.d.cts +1 -1
- package/lib/types/graph/{loops → engine/loops}/ConditionExpressionEvaluator.d.mts +1 -1
- package/lib/types/graph/{loops → engine/loops}/GraphConditionEvaluator.d.cts +2 -1
- package/lib/types/graph/{loops → engine/loops}/GraphConditionEvaluator.d.mts +2 -1
- package/lib/types/graph/{types.d.cts → engine/types.d.cts} +8 -116
- package/lib/types/graph/{types.d.mts → engine/types.d.mts} +8 -116
- package/lib/types/graph/index.d.cts +8 -53
- package/lib/types/graph/index.d.mts +8 -53
- package/lib/types/graph/shared/constants.d.cts +53 -0
- package/lib/types/graph/shared/constants.d.mts +53 -0
- package/lib/types/graph/shared/index.d.cts +18 -0
- package/lib/types/graph/shared/index.d.mts +18 -0
- package/lib/types/graph/shared/types.d.cts +121 -0
- package/lib/types/graph/shared/types.d.mts +121 -0
- package/lib/types/index.d.cts +2 -2
- package/lib/types/index.d.mts +2 -2
- package/lib/types/nest/index.d.cts +0 -1
- package/lib/types/nest/index.d.mts +0 -1
- package/package.json +25 -3
- package/lib/cjs/graph/constants.cjs +0 -94
- package/lib/cjs/graph/decorators.cjs +0 -4
- package/lib/cjs/graph/errors/GraphCycleError.cjs +0 -20
- package/lib/cjs/graph/errors/GraphExecutionError.cjs +0 -27
- package/lib/cjs/graph/errors/GraphInputError.cjs +0 -20
- package/lib/cjs/graph/errors/GraphLoopLimitError.cjs +0 -20
- package/lib/cjs/graph/errors/GraphPinningError.cjs +0 -20
- package/lib/cjs/graph/errors/GraphPortError.cjs +0 -20
- package/lib/cjs/graph/errors/GraphStoreError.cjs +0 -20
- package/lib/cjs/graph/errors/GraphTopologyError.cjs +0 -20
- package/lib/cjs/graph/events/GraphExecutionEvent.cjs +0 -4
- package/lib/cjs/graph/events/GraphExecutionEventEmitter.cjs +0 -40
- package/lib/cjs/graph/events/GraphExecutionEventFactory.cjs +0 -37
- package/lib/cjs/graph/events/GraphExecutionObserver.cjs +0 -4
- package/lib/cjs/graph/execution/CodeSandboxEvaluator.cjs +0 -4
- package/lib/cjs/graph/execution/GraphExecutionContext.cjs +0 -79
- package/lib/cjs/graph/execution/GraphExecutionEngine.cjs +0 -407
- package/lib/cjs/graph/execution/GraphExecutionFrame.cjs +0 -32
- package/lib/cjs/graph/execution/GraphExecutionResult.cjs +0 -30
- package/lib/cjs/graph/execution/GraphNodeExecutor.cjs +0 -4
- package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +0 -103
- package/lib/cjs/graph/loops/ConditionExpressionEvaluator.cjs +0 -87
- package/lib/cjs/graph/loops/ForeachGraphNodeExecutor.cjs +0 -84
- package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs +0 -85
- package/lib/cjs/graph/loops/GraphLoopExecutionContext.cjs +0 -16
- package/lib/cjs/graph/loops/UntilGraphNodeExecutor.cjs +0 -76
- package/lib/cjs/graph/loops/WhileGraphNodeExecutor.cjs +0 -77
- package/lib/cjs/graph/nodes/base.cjs +0 -35
- package/lib/cjs/graph/nodes/category-styles.cjs +0 -38
- package/lib/cjs/graph/nodes/flow-control.cjs +0 -464
- package/lib/cjs/graph/nodes/triggers.cjs +0 -250
- package/lib/cjs/graph/pinning/GraphPinningDependencyResolver.cjs +0 -28
- package/lib/cjs/graph/pinning/GraphPinningMetadata.cjs +0 -20
- package/lib/cjs/graph/pinning/GraphPinningPolicy.cjs +0 -34
- package/lib/cjs/graph/pinning/GraphPinningService.cjs +0 -191
- package/lib/cjs/graph/planning/GraphExecutionPlan.cjs +0 -4
- package/lib/cjs/graph/planning/GraphExecutionPlanEdge.cjs +0 -4
- package/lib/cjs/graph/planning/GraphExecutionPlanLayer.cjs +0 -4
- package/lib/cjs/graph/planning/GraphExecutionPlanNode.cjs +0 -4
- package/lib/cjs/graph/planning/GraphExecutionPlanner.cjs +0 -197
- package/lib/cjs/graph/planning/GraphRelationResolver.cjs +0 -172
- package/lib/cjs/graph/planning/GraphTopology.cjs +0 -57
- package/lib/cjs/graph/registry/GraphNodeExecutorRegistry.cjs +0 -44
- package/lib/cjs/graph/registry/GraphNodeExecutorResolver.cjs +0 -27
- package/lib/cjs/graph/snapshots/GraphExecutionSnapshotMapper.cjs +0 -53
- package/lib/cjs/graph/store/GraphCachedValue.cjs +0 -4
- package/lib/cjs/graph/store/GraphValueKey.cjs +0 -4
- package/lib/cjs/graph/store/GraphValueStore.cjs +0 -76
- package/lib/cjs/graph/store/GraphValueStoreAdapter.cjs +0 -4
- package/lib/cjs/graph/store/InMemoryGraphValueStoreAdapter.cjs +0 -69
- package/lib/cjs/graph/types.cjs +0 -4
- package/lib/cjs/graph/validation/GraphDefinitionValidator.cjs +0 -33
- package/lib/cjs/graph/validation/GraphPortSchemaResolver.cjs +0 -58
- package/lib/cjs/graph/validation/GraphValueValidator.cjs +0 -52
- package/lib/esm/graph/constants.js +0 -106
- package/lib/esm/graph/decorators.js +0 -2
- package/lib/esm/graph/errors/GraphCycleError.js +0 -15
- package/lib/esm/graph/errors/GraphExecutionError.js +0 -22
- package/lib/esm/graph/errors/GraphInputError.js +0 -15
- package/lib/esm/graph/errors/GraphLoopLimitError.js +0 -15
- package/lib/esm/graph/errors/GraphPinningError.js +0 -15
- package/lib/esm/graph/errors/GraphPortError.js +0 -15
- package/lib/esm/graph/errors/GraphStoreError.js +0 -15
- package/lib/esm/graph/errors/GraphTopologyError.js +0 -15
- package/lib/esm/graph/errors/index.js +0 -14
- package/lib/esm/graph/events/GraphExecutionEvent.js +0 -2
- package/lib/esm/graph/events/GraphExecutionEventEmitter.js +0 -35
- package/lib/esm/graph/events/GraphExecutionEventFactory.js +0 -32
- package/lib/esm/graph/events/GraphExecutionObserver.js +0 -2
- package/lib/esm/graph/events/index.js +0 -10
- package/lib/esm/graph/execution/CodeSandboxEvaluator.js +0 -18
- package/lib/esm/graph/execution/GraphExecutionContext.js +0 -74
- package/lib/esm/graph/execution/GraphExecutionEngine.js +0 -402
- package/lib/esm/graph/execution/GraphExecutionFrame.js +0 -27
- package/lib/esm/graph/execution/GraphExecutionResult.js +0 -26
- package/lib/esm/graph/execution/GraphNodeExecutor.js +0 -2
- package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +0 -98
- package/lib/esm/graph/execution/index.js +0 -13
- package/lib/esm/graph/loops/ConditionExpressionEvaluator.js +0 -82
- package/lib/esm/graph/loops/ForeachGraphNodeExecutor.js +0 -79
- package/lib/esm/graph/loops/GraphConditionEvaluator.js +0 -80
- package/lib/esm/graph/loops/GraphLoopExecutionContext.js +0 -11
- package/lib/esm/graph/loops/UntilGraphNodeExecutor.js +0 -71
- package/lib/esm/graph/loops/WhileGraphNodeExecutor.js +0 -72
- package/lib/esm/graph/loops/index.js +0 -12
- package/lib/esm/graph/nodes/agent.js +0 -101
- package/lib/esm/graph/nodes/base.js +0 -30
- package/lib/esm/graph/nodes/category-styles.js +0 -34
- package/lib/esm/graph/nodes/flow-control.js +0 -455
- package/lib/esm/graph/nodes/index.js +0 -18
- package/lib/esm/graph/nodes/triggers.js +0 -241
- package/lib/esm/graph/pinning/GraphPinningDependencyResolver.js +0 -23
- package/lib/esm/graph/pinning/GraphPinningMetadata.js +0 -15
- package/lib/esm/graph/pinning/GraphPinningPolicy.js +0 -29
- package/lib/esm/graph/pinning/GraphPinningService.js +0 -186
- package/lib/esm/graph/pinning/index.js +0 -10
- package/lib/esm/graph/planning/GraphExecutionPlan.js +0 -2
- package/lib/esm/graph/planning/GraphExecutionPlanEdge.js +0 -7
- package/lib/esm/graph/planning/GraphExecutionPlanLayer.js +0 -2
- package/lib/esm/graph/planning/GraphExecutionPlanNode.js +0 -2
- package/lib/esm/graph/planning/GraphExecutionPlanner.js +0 -192
- package/lib/esm/graph/planning/GraphRelationResolver.js +0 -167
- package/lib/esm/graph/planning/GraphTopology.js +0 -52
- package/lib/esm/graph/planning/index.js +0 -13
- package/lib/esm/graph/registry/GraphNodeExecutorRegistry.js +0 -39
- package/lib/esm/graph/registry/GraphNodeExecutorResolver.js +0 -22
- package/lib/esm/graph/registry/index.js +0 -8
- package/lib/esm/graph/snapshots/GraphExecutionSnapshotMapper.js +0 -48
- package/lib/esm/graph/snapshots/index.js +0 -7
- package/lib/esm/graph/store/GraphCachedValue.js +0 -2
- package/lib/esm/graph/store/GraphValueKey.js +0 -7
- package/lib/esm/graph/store/GraphValueStore.js +0 -71
- package/lib/esm/graph/store/GraphValueStoreAdapter.js +0 -2
- package/lib/esm/graph/store/InMemoryGraphValueStoreAdapter.js +0 -64
- package/lib/esm/graph/store/index.js +0 -11
- package/lib/esm/graph/types.js +0 -2
- package/lib/esm/graph/validation/GraphDefinitionValidator.js +0 -28
- package/lib/esm/graph/validation/GraphPortSchemaResolver.js +0 -53
- package/lib/esm/graph/validation/GraphValueValidator.js +0 -47
- package/lib/esm/graph/validation/index.js +0 -9
- package/lib/types/graph/constants.d.cts +0 -101
- package/lib/types/graph/constants.d.mts +0 -101
- /package/lib/types/graph/{decorators.d.cts → engine/decorators.d.cts} +0 -0
- /package/lib/types/graph/{decorators.d.mts → engine/decorators.d.mts} +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphCycleError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphCycleError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphExecutionError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphExecutionError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphInputError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphInputError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphLoopLimitError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphLoopLimitError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphPinningError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphPinningError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphPortError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphPortError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphStoreError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphStoreError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphTopologyError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphTopologyError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/index.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/index.d.mts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionEvent.d.cts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionEvent.d.mts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionEventEmitter.d.cts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionEventEmitter.d.mts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionEventFactory.d.cts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionEventFactory.d.mts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionObserver.d.cts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionObserver.d.mts +0 -0
- /package/lib/types/graph/{events → engine/events}/index.d.cts +0 -0
- /package/lib/types/graph/{events → engine/events}/index.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/CodeSandboxEvaluator.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/CodeSandboxEvaluator.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphExecutionContext.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphExecutionContext.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphExecutionEngine.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphExecutionEngine.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphExecutionFrame.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphExecutionFrame.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphNodeExecutor.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphNodeExecutor.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/SwitchGraphNodeExecutor.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/SwitchGraphNodeExecutor.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/index.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/index.d.mts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/ForeachGraphNodeExecutor.d.cts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/ForeachGraphNodeExecutor.d.mts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/GraphLoopExecutionContext.d.cts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/GraphLoopExecutionContext.d.mts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/UntilGraphNodeExecutor.d.cts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/UntilGraphNodeExecutor.d.mts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/WhileGraphNodeExecutor.d.cts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/WhileGraphNodeExecutor.d.mts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/index.d.cts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/index.d.mts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningDependencyResolver.d.cts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningDependencyResolver.d.mts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningMetadata.d.cts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningMetadata.d.mts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningPolicy.d.cts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningPolicy.d.mts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningService.d.cts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningService.d.mts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/index.d.cts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/index.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlan.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlan.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanEdge.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanEdge.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanLayer.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanLayer.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanNode.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanNode.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanner.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanner.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphRelationResolver.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphRelationResolver.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphTopology.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphTopology.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/index.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/index.d.mts +0 -0
- /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorRegistry.d.cts +0 -0
- /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorRegistry.d.mts +0 -0
- /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorResolver.d.cts +0 -0
- /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorResolver.d.mts +0 -0
- /package/lib/types/graph/{registry → engine/registry}/index.d.cts +0 -0
- /package/lib/types/graph/{registry → engine/registry}/index.d.mts +0 -0
- /package/lib/types/graph/{snapshots → engine/snapshots}/GraphExecutionSnapshotMapper.d.cts +0 -0
- /package/lib/types/graph/{snapshots → engine/snapshots}/GraphExecutionSnapshotMapper.d.mts +0 -0
- /package/lib/types/graph/{snapshots → engine/snapshots}/index.d.cts +0 -0
- /package/lib/types/graph/{snapshots → engine/snapshots}/index.d.mts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphCachedValue.d.cts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphCachedValue.d.mts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphValueKey.d.cts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphValueKey.d.mts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphValueStore.d.cts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphValueStore.d.mts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphValueStoreAdapter.d.cts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphValueStoreAdapter.d.mts +0 -0
- /package/lib/types/graph/{store → engine/store}/InMemoryGraphValueStoreAdapter.d.cts +0 -0
- /package/lib/types/graph/{store → engine/store}/InMemoryGraphValueStoreAdapter.d.mts +0 -0
- /package/lib/types/graph/{store → engine/store}/index.d.cts +0 -0
- /package/lib/types/graph/{store → engine/store}/index.d.mts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/GraphDefinitionValidator.d.cts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/GraphDefinitionValidator.d.mts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/GraphPortSchemaResolver.d.cts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/GraphPortSchemaResolver.d.mts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/GraphValueValidator.d.cts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/GraphValueValidator.d.mts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/index.d.cts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/index.d.mts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/agent.d.cts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/agent.d.mts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/base.d.cts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/base.d.mts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/category-styles.d.cts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/category-styles.d.mts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/flow-control.d.cts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/flow-control.d.mts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/index.d.cts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/index.d.mts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/triggers.d.cts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/triggers.d.mts +0 -0
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GraphPinningService = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* @module integrations/graph/pinning/GraphPinningService
|
|
6
|
-
* @summary Service for pinning and unpinning graph node values.
|
|
7
|
-
* @description Computes stable fingerprints, pins/unpins nodes and their upstream dependencies, reads pinned values, and emits pinning events. Pinning is all-or-nothing: if any upstream dependency is not pinnable, the operation fails.
|
|
8
|
-
*/
|
|
9
|
-
const constants_js_1 = require("./../constants.cjs");
|
|
10
|
-
const GraphPinningError_js_1 = require("./../errors/GraphPinningError.cjs");
|
|
11
|
-
const GraphTopology_js_1 = require("./../planning/GraphTopology.cjs");
|
|
12
|
-
/**
|
|
13
|
-
* Service that manages pinning and unpinning of graph node values.
|
|
14
|
-
*/
|
|
15
|
-
class GraphPinningService {
|
|
16
|
-
constructor(store, policy, dependencyResolver) {
|
|
17
|
-
this.store = store;
|
|
18
|
-
this.policy = policy;
|
|
19
|
-
this.dependencyResolver = dependencyResolver;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Pins a node and all its upstream dependencies.
|
|
23
|
-
*
|
|
24
|
-
* @throws {GraphPinningError} when the node or any dependency is not pinnable.
|
|
25
|
-
*/
|
|
26
|
-
async pinNode(options) {
|
|
27
|
-
const plan = options.plan;
|
|
28
|
-
const includeDependencies = options.includeDependencies ?? true;
|
|
29
|
-
const pinSet = includeDependencies
|
|
30
|
-
? this.dependencyResolver.getPinSet(plan, options.nodeId)
|
|
31
|
-
: new Set([options.nodeId]);
|
|
32
|
-
// Validate all-or-nothing
|
|
33
|
-
for (const nodeId of pinSet) {
|
|
34
|
-
const node = plan.nodes.find((n) => n.id === nodeId);
|
|
35
|
-
if (!node) {
|
|
36
|
-
throw new GraphPinningError_js_1.GraphPinningError(`Node '${nodeId}' not found in plan`);
|
|
37
|
-
}
|
|
38
|
-
if (!this.policy.canPin(node)) {
|
|
39
|
-
throw new GraphPinningError_js_1.GraphPinningError(`Node '${nodeId}' is not pinnable`, { nodeId });
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
// Pin dependencies first, then the selected node
|
|
43
|
-
const ordered = this.topologicalOrder(plan, pinSet);
|
|
44
|
-
for (const nodeId of ordered) {
|
|
45
|
-
const node = plan.nodes.find((n) => n.id === nodeId);
|
|
46
|
-
const result = options.result.nodeResults[nodeId];
|
|
47
|
-
if (!result || !result.outputs) {
|
|
48
|
-
throw new GraphPinningError_js_1.GraphPinningError(`Node '${nodeId}' has no completed output to pin`);
|
|
49
|
-
}
|
|
50
|
-
const inputs = result.inputs ?? {};
|
|
51
|
-
const depFingerprints = this.dependencyFingerprints(plan, nodeId, options.result);
|
|
52
|
-
const key = this.createValueKey(options.workflow, node, inputs, depFingerprints, options.namespace);
|
|
53
|
-
const now = new Date().toISOString();
|
|
54
|
-
const cached = {
|
|
55
|
-
key,
|
|
56
|
-
outputs: result.outputs,
|
|
57
|
-
pinned: true,
|
|
58
|
-
createdAt: now,
|
|
59
|
-
updatedAt: now,
|
|
60
|
-
metadata: { ...options.result.metadata, nodeId },
|
|
61
|
-
};
|
|
62
|
-
await this.store.writeCached(key, cached);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Unpins a single node (does not unpin dependents in v1).
|
|
67
|
-
*/
|
|
68
|
-
async unpinNode(options) {
|
|
69
|
-
const key = {
|
|
70
|
-
workflowId: options.workflow.name,
|
|
71
|
-
nodeId: options.nodeId,
|
|
72
|
-
fingerprint: options.fingerprint,
|
|
73
|
-
namespace: options.namespace,
|
|
74
|
-
};
|
|
75
|
-
await this.store.deleteCached(key);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Reads a pinned value for a node, returning `undefined` when no valid
|
|
79
|
-
* pinned value exists.
|
|
80
|
-
*/
|
|
81
|
-
async readPinnedValue(workflow, node, inputs, dependencyFingerprints, namespace) {
|
|
82
|
-
const key = this.createValueKey(workflow, node, inputs, dependencyFingerprints, namespace);
|
|
83
|
-
const cached = await this.store.readCached(key);
|
|
84
|
-
if (cached && cached.pinned) {
|
|
85
|
-
if (cached.expiresAt && new Date(cached.expiresAt) < new Date()) {
|
|
86
|
-
return undefined;
|
|
87
|
-
}
|
|
88
|
-
return cached;
|
|
89
|
-
}
|
|
90
|
-
return undefined;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Creates a stable value key for a node.
|
|
94
|
-
*/
|
|
95
|
-
createValueKey(workflow, node, inputs, dependencyFingerprints, namespace) {
|
|
96
|
-
return {
|
|
97
|
-
workflowId: workflow.name,
|
|
98
|
-
nodeId: node.id,
|
|
99
|
-
fingerprint: this.computeFingerprint(workflow, node, inputs, dependencyFingerprints),
|
|
100
|
-
namespace,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Computes a stable fingerprint for a node's inputs and dependencies.
|
|
105
|
-
*/
|
|
106
|
-
computeFingerprint(workflow, node, inputs, dependencyFingerprints) {
|
|
107
|
-
const data = {
|
|
108
|
-
workflowId: workflow.name,
|
|
109
|
-
nodeId: node.id,
|
|
110
|
-
nodeKind: node.kind,
|
|
111
|
-
nodeDefinitionVersion: node.definition?.graph?.metadata?.version,
|
|
112
|
-
inputs: this.stableSerialize(inputs),
|
|
113
|
-
dependencyFingerprints: this.stableSerialize(dependencyFingerprints),
|
|
114
|
-
};
|
|
115
|
-
const json = this.stableSerialize(data);
|
|
116
|
-
// Use a deterministic non-cryptographic hash that works in both browser
|
|
117
|
-
// and Node environments without requiring `node:crypto`.
|
|
118
|
-
return this.simpleHash(json);
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Returns a topological ordering of the given node set.
|
|
122
|
-
*/
|
|
123
|
-
topologicalOrder(plan, nodeSet) {
|
|
124
|
-
const result = [];
|
|
125
|
-
const visited = new Set();
|
|
126
|
-
const visit = (nodeId) => {
|
|
127
|
-
if (visited.has(nodeId))
|
|
128
|
-
return;
|
|
129
|
-
visited.add(nodeId);
|
|
130
|
-
const deps = GraphTopology_js_1.GraphTopology.upstreamNodes(nodeId, plan.incomingByNode, false);
|
|
131
|
-
for (const dep of deps) {
|
|
132
|
-
if (nodeSet.has(dep))
|
|
133
|
-
visit(dep);
|
|
134
|
-
}
|
|
135
|
-
result.push(nodeId);
|
|
136
|
-
};
|
|
137
|
-
for (const nodeId of nodeSet)
|
|
138
|
-
visit(nodeId);
|
|
139
|
-
return result;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Computes fingerprints for all upstream dependencies of a node.
|
|
143
|
-
*/
|
|
144
|
-
dependencyFingerprints(plan, nodeId, result) {
|
|
145
|
-
const deps = this.dependencyResolver.getDependencies(plan, nodeId);
|
|
146
|
-
const fingerprints = {};
|
|
147
|
-
for (const dep of deps) {
|
|
148
|
-
const node = plan.nodes.find((n) => n.id === dep);
|
|
149
|
-
if (node) {
|
|
150
|
-
const depResult = result.nodeResults[dep];
|
|
151
|
-
const inputs = depResult?.inputs ?? {};
|
|
152
|
-
const nestedDeps = this.dependencyFingerprints(plan, dep, result);
|
|
153
|
-
fingerprints[dep] = this.computeFingerprint(plan.workflow, node, inputs, nestedDeps);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return fingerprints;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Serializes a value with recursively sorted keys for stable hashing.
|
|
160
|
-
*/
|
|
161
|
-
stableSerialize(value) {
|
|
162
|
-
if (value === null || typeof value !== "object") {
|
|
163
|
-
return JSON.stringify(value);
|
|
164
|
-
}
|
|
165
|
-
if (Array.isArray(value)) {
|
|
166
|
-
return `[${value.map((v) => this.stableSerialize(v)).join(",")}]`;
|
|
167
|
-
}
|
|
168
|
-
const keys = Object.keys(value).sort();
|
|
169
|
-
const pairs = keys.map((k) => `${JSON.stringify(k)}:${this.stableSerialize(value[k])}`);
|
|
170
|
-
return `{${pairs.join(",")}}`;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Simple non-cryptographic hash for browser environments where
|
|
174
|
-
* `node:crypto` is unavailable. Produces a deterministic hex-like string
|
|
175
|
-
* from the input. This is NOT cryptographically secure but is sufficient
|
|
176
|
-
* for fingerprint-based cache keys.
|
|
177
|
-
*/
|
|
178
|
-
simpleHash(str) {
|
|
179
|
-
let hash = 0;
|
|
180
|
-
for (let i = 0; i < str.length; i++) {
|
|
181
|
-
const char = str.charCodeAt(i);
|
|
182
|
-
hash = (hash << 5) - hash + char;
|
|
183
|
-
hash |= 0;
|
|
184
|
-
}
|
|
185
|
-
return `fp_${Math.abs(hash).toString(16).padStart(8, "0")}_${str.length}`;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
exports.GraphPinningService = GraphPinningService;
|
|
189
|
-
void constants_js_1.GRAPH_PINNING_METADATA_KEY;
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhQaW5uaW5nU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ncmFwaC9waW5uaW5nL0dyYXBoUGlubmluZ1NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSwwQkFBcUI7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHlDQUFvQztBQUdoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLHVDQUFrQztBQWUxRDs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsWUFDbUIsS0FBc0IsRUFDdEIsTUFBMEIsRUFDMUIsa0JBQWtEO1FBRmxELFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQW9CO1FBQzFCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBZ0M7SUFDbEUsQ0FBQztJQUVKOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQTRCO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUEwQixDQUFDO1FBQ2hELE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQztRQUVoRSxNQUFNLE1BQU0sR0FBRyxtQkFBbUI7WUFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDekQsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFOUIsMEJBQTBCO1FBQzFCLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtB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QU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDcEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFFLEtBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3pFLENBQUM7UUFDRixPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFVBQVUsQ0FBQyxHQUFXO1FBQzVCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ1osQ0FBQztRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM1RSxDQUFDO0NBQ0Y7QUFFRCxLQUFLLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9waW5uaW5nL0dyYXBoUGlubmluZ1NlcnZpY2VcbiAqIEBzdW1tYXJ5IFNlcnZpY2UgZm9yIHBpbm5pbmcgYW5kIHVucGlubmluZyBncmFwaCBub2RlIHZhbHVlcy5cbiAqIEBkZXNjcmlwdGlvbiBDb21wdXRlcyBzdGFibGUgZmluZ2VycHJpbnRzLCBwaW5zL3VucGlucyBub2RlcyBhbmQgdGhlaXIgdXBzdHJlYW0gZGVwZW5kZW5jaWVzLCByZWFkcyBwaW5uZWQgdmFsdWVzLCBhbmQgZW1pdHMgcGlubmluZyBldmVudHMuIFBpbm5pbmcgaXMgYWxsLW9yLW5vdGhpbmc6IGlmIGFueSB1cHN0cmVhbSBkZXBlbmRlbmN5IGlzIG5vdCBwaW5uYWJsZSwgdGhlIG9wZXJhdGlvbiBmYWlscy5cbiAqL1xuaW1wb3J0IHsgR1JBUEhfUElOTklOR19NRVRBREFUQV9LRVkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBHcmFwaFBpbm5pbmdFcnJvciB9IGZyb20gXCIuLi9lcnJvcnMvR3JhcGhQaW5uaW5nRXJyb3JcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25QbGFuIH0gZnJvbSBcIi4uL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhblwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvblBsYW5Ob2RlIH0gZnJvbSBcIi4uL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhbk5vZGVcIjtcbmltcG9ydCB7IEdyYXBoVG9wb2xvZ3kgfSBmcm9tIFwiLi4vcGxhbm5pbmcvR3JhcGhUb3BvbG9neVwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaFZhbHVlU3RvcmUgfSBmcm9tIFwiLi4vc3RvcmUvR3JhcGhWYWx1ZVN0b3JlXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoVmFsdWVLZXkgfSBmcm9tIFwiLi4vc3RvcmUvR3JhcGhWYWx1ZUtleVwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaENhY2hlZFZhbHVlIH0gZnJvbSBcIi4uL3N0b3JlL0dyYXBoQ2FjaGVkVmFsdWVcIjtcbmltcG9ydCB0eXBlIHtcbiAgR3JhcGhFeGVjdXRpb25SZXN1bHQsXG4gIEdyYXBoRXhlY3V0aW9uVmFsdWVzLFxuICBHcmFwaFBpbk5vZGVPcHRpb25zLFxuICBHcmFwaFVucGluTm9kZU9wdGlvbnMsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbiB9IGZyb20gXCJAZGVjYWYtdHMvdWktZGVjb3JhdG9ycy9ncmFwaFwiO1xuXG5pbXBvcnQgdHlwZSB7IEdyYXBoUGlubmluZ1BvbGljeSB9IGZyb20gXCIuL0dyYXBoUGlubmluZ1BvbGljeVwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaFBpbm5pbmdEZXBlbmRlbmN5UmVzb2x2ZXIgfSBmcm9tIFwiLi9HcmFwaFBpbm5pbmdEZXBlbmRlbmN5UmVzb2x2ZXJcIjtcblxuLyoqXG4gKiBTZXJ2aWNlIHRoYXQgbWFuYWdlcyBwaW5uaW5nIGFuZCB1bnBpbm5pbmcgb2YgZ3JhcGggbm9kZSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaFBpbm5pbmdTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZTogR3JhcGhWYWx1ZVN0b3JlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9saWN5OiBHcmFwaFBpbm5pbmdQb2xpY3ksXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXBlbmRlbmN5UmVzb2x2ZXI6IEdyYXBoUGlubmluZ0RlcGVuZGVuY3lSZXNvbHZlclxuICApIHt9XG5cbiAgLyoqXG4gICAqIFBpbnMgYSBub2RlIGFuZCBhbGwgaXRzIHVwc3RyZWFtIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQHRocm93cyB7R3JhcGhQaW5uaW5nRXJyb3J9IHdoZW4gdGhlIG5vZGUgb3IgYW55IGRlcGVuZGVuY3kgaXMgbm90IHBpbm5hYmxlLlxuICAgKi9cbiAgYXN5bmMgcGluTm9kZShvcHRpb25zOiBHcmFwaFBpbk5vZGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGxhbiA9IG9wdGlvbnMucGxhbiBhcyBHcmFwaEV4ZWN1dGlvblBsYW47XG4gICAgY29uc3QgaW5jbHVkZURlcGVuZGVuY2llcyA9IG9wdGlvbnMuaW5jbHVkZURlcGVuZGVuY2llcyA/PyB0cnVlO1xuXG4gICAgY29uc3QgcGluU2V0ID0gaW5jbHVkZURlcGVuZGVuY2llc1xuICAgICAgPyB0aGlzLmRlcGVuZGVuY3lSZXNvbHZlci5nZXRQaW5TZXQocGxhbiwgb3B0aW9ucy5ub2RlSWQpXG4gICAgICA6IG5ldyBTZXQoW29wdGlvbnMubm9kZUlkXSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBhbGwtb3Itbm90aGluZ1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIG9mIHBpblNldCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHBsYW4ubm9kZXMuZmluZCgobikgPT4gbi5pZCA9PT0gbm9kZUlkKTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgR3JhcGhQaW5uaW5nRXJyb3IoYE5vZGUgJyR7bm9kZUlkfScgbm90IGZvdW5kIGluIHBsYW5gKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5wb2xpY3kuY2FuUGluKG5vZGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBHcmFwaFBpbm5pbmdFcnJvcihcbiAgICAgICAgICBgTm9kZSAnJHtub2RlSWR9JyBpcyBub3QgcGlubmFibGVgLFxuICAgICAgICAgIHsgbm9kZUlkIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQaW4gZGVwZW5kZW5jaWVzIGZpcnN0LCB0aGVuIHRoZSBzZWxlY3RlZCBub2RlXG4gICAgY29uc3Qgb3JkZXJlZCA9IHRoaXMudG9wb2xvZ2ljYWxPcmRlcihwbGFuLCBwaW5TZXQpO1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIG9mIG9yZGVyZWQpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBwbGFuLm5vZGVzLmZpbmQoKG4pID0+IG4uaWQgPT09IG5vZGVJZCkhO1xuICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9ucy5yZXN1bHQubm9kZVJlc3VsdHNbbm9kZUlkXTtcbiAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQub3V0cHV0cykge1xuICAgICAgICB0aHJvdyBuZXcgR3JhcGhQaW5uaW5nRXJyb3IoXG4gICAgICAgICAgYE5vZGUgJyR7bm9kZUlkfScgaGFzIG5vIGNvbXBsZXRlZCBvdXRwdXQgdG8gcGluYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5wdXRzID0gcmVzdWx0LmlucHV0cyA/PyB7fTtcbiAgICAgIGNvbnN0IGRlcEZpbmdlcnByaW50cyA9IHRoaXMuZGVwZW5kZW5jeUZpbmdlcnByaW50cyhwbGFuLCBub2RlSWQsIG9wdGlvbnMucmVzdWx0KTtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY3JlYXRlVmFsdWVLZXkob3B0aW9ucy53b3JrZmxvdywgbm9kZSwgaW5wdXRzLCBkZXBGaW5nZXJwcmludHMsIG9wdGlvbnMubmFtZXNwYWNlKTtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGNhY2hlZDogR3JhcGhDYWNoZWRWYWx1ZSA9IHtcbiAgICAgICAga2V5LFxuICAgICAgICBvdXRwdXRzOiByZXN1bHQub3V0cHV0cyxcbiAgICAgICAgcGlubmVkOiB0cnVlLFxuICAgICAgICBjcmVhdGVkQXQ6IG5vdyxcbiAgICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgICAgIG1ldGFkYXRhOiB7IC4uLm9wdGlvbnMucmVzdWx0Lm1ldGFkYXRhLCBub2RlSWQgfSxcbiAgICAgIH07XG4gICAgICBhd2FpdCB0aGlzLnN0b3JlLndyaXRlQ2FjaGVkKGtleSwgY2FjaGVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5waW5zIGEgc2luZ2xlIG5vZGUgKGRvZXMgbm90IHVucGluIGRlcGVuZGVudHMgaW4gdjEpLlxuICAgKi9cbiAgYXN5bmMgdW5waW5Ob2RlKG9wdGlvbnM6IEdyYXBoVW5waW5Ob2RlT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGtleTogR3JhcGhWYWx1ZUtleSA9IHtcbiAgICAgIHdvcmtmbG93SWQ6IG9wdGlvbnMud29ya2Zsb3cubmFtZSxcbiAgICAgIG5vZGVJZDogb3B0aW9ucy5ub2RlSWQsXG4gICAgICBmaW5nZXJwcmludDogb3B0aW9ucy5maW5nZXJwcmludCxcbiAgICAgIG5hbWVzcGFjZTogb3B0aW9ucy5uYW1lc3BhY2UsXG4gICAgfTtcbiAgICBhd2FpdCB0aGlzLnN0b3JlLmRlbGV0ZUNhY2hlZChrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGEgcGlubmVkIHZhbHVlIGZvciBhIG5vZGUsIHJldHVybmluZyBgdW5kZWZpbmVkYCB3aGVuIG5vIHZhbGlkXG4gICAqIHBpbm5lZCB2YWx1ZSBleGlzdHMuXG4gICAqL1xuICBhc3luYyByZWFkUGlubmVkVmFsdWUoXG4gICAgd29ya2Zsb3c6IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uLFxuICAgIG5vZGU6IEdyYXBoRXhlY3V0aW9uUGxhbk5vZGUsXG4gICAgaW5wdXRzOiBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgICBkZXBlbmRlbmN5RmluZ2VycHJpbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIG5hbWVzcGFjZT86IHN0cmluZ1xuICApOiBQcm9taXNlPEdyYXBoQ2FjaGVkVmFsdWUgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNyZWF0ZVZhbHVlS2V5KHdvcmtmbG93LCBub2RlLCBpbnB1dHMsIGRlcGVuZGVuY3lGaW5nZXJwcmludHMsIG5hbWVzcGFjZSk7XG4gICAgY29uc3QgY2FjaGVkID0gYXdhaXQgdGhpcy5zdG9yZS5yZWFkQ2FjaGVkKGtleSk7XG4gICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQucGlubmVkKSB7XG4gICAgICBpZiAoY2FjaGVkLmV4cGlyZXNBdCAmJiBuZXcgRGF0ZShjYWNoZWQuZXhwaXJlc0F0KSA8IG5ldyBEYXRlKCkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHN0YWJsZSB2YWx1ZSBrZXkgZm9yIGEgbm9kZS5cbiAgICovXG4gIGNyZWF0ZVZhbHVlS2V5KFxuICAgIHdvcmtmbG93OiBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbixcbiAgICBub2RlOiBHcmFwaEV4ZWN1dGlvblBsYW5Ob2RlLFxuICAgIGlucHV0czogR3JhcGhFeGVjdXRpb25WYWx1ZXMsXG4gICAgZGVwZW5kZW5jeUZpbmdlcnByaW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBuYW1lc3BhY2U/OiBzdHJpbmdcbiAgKTogR3JhcGhWYWx1ZUtleSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdvcmtmbG93SWQ6IHdvcmtmbG93Lm5hbWUsXG4gICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICBmaW5nZXJwcmludDogdGhpcy5jb21wdXRlRmluZ2VycHJpbnQod29ya2Zsb3csIG5vZGUsIGlucHV0cywgZGVwZW5kZW5jeUZpbmdlcnByaW50cyksXG4gICAgICBuYW1lc3BhY2UsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyBhIHN0YWJsZSBmaW5nZXJwcmludCBmb3IgYSBub2RlJ3MgaW5wdXRzIGFuZCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBjb21wdXRlRmluZ2VycHJpbnQoXG4gICAgd29ya2Zsb3c6IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uLFxuICAgIG5vZGU6IEdyYXBoRXhlY3V0aW9uUGxhbk5vZGUsXG4gICAgaW5wdXRzOiBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgICBkZXBlbmRlbmN5RmluZ2VycHJpbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHdvcmtmbG93SWQ6IHdvcmtmbG93Lm5hbWUsXG4gICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICBub2RlS2luZDogbm9kZS5raW5kLFxuICAgICAgbm9kZURlZmluaXRpb25WZXJzaW9uOiAobm9kZS5kZWZpbml0aW9uIGFzIGFueSk/LmdyYXBoPy5tZXRhZGF0YT8udmVyc2lvbixcbiAgICAgIGlucHV0czogdGhpcy5zdGFibGVTZXJpYWxpemUoaW5wdXRzKSxcbiAgICAgIGRlcGVuZGVuY3lGaW5nZXJwcmludHM6IHRoaXMuc3RhYmxlU2VyaWFsaXplKGRlcGVuZGVuY3lGaW5nZXJwcmludHMpLFxuICAgIH07XG4gICAgY29uc3QganNvbiA9IHRoaXMuc3RhYmxlU2VyaWFsaXplKGRhdGEpO1xuICAgIC8vIFVzZSBhIGRldGVybWluaXN0aWMgbm9uLWNyeXB0b2dyYXBoaWMgaGFzaCB0aGF0IHdvcmtzIGluIGJvdGggYnJvd3NlclxuICAgIC8vIGFuZCBOb2RlIGVudmlyb25tZW50cyB3aXRob3V0IHJlcXVpcmluZyBgbm9kZTpjcnlwdG9gLlxuICAgIHJldHVybiB0aGlzLnNpbXBsZUhhc2goanNvbik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHRvcG9sb2dpY2FsIG9yZGVyaW5nIG9mIHRoZSBnaXZlbiBub2RlIHNldC5cbiAgICovXG4gIHByaXZhdGUgdG9wb2xvZ2ljYWxPcmRlcihcbiAgICBwbGFuOiBHcmFwaEV4ZWN1dGlvblBsYW4sXG4gICAgbm9kZVNldDogU2V0PHN0cmluZz5cbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdmlzaXQgPSAobm9kZUlkOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh2aXNpdGVkLmhhcyhub2RlSWQpKSByZXR1cm47XG4gICAgICB2aXNpdGVkLmFkZChub2RlSWQpO1xuICAgICAgY29uc3QgZGVwcyA9IEdyYXBoVG9wb2xvZ3kudXBzdHJlYW1Ob2Rlcyhub2RlSWQsIHBsYW4uaW5jb21pbmdCeU5vZGUsIGZhbHNlKTtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcHMpIHtcbiAgICAgICAgaWYgKG5vZGVTZXQuaGFzKGRlcCkpIHZpc2l0KGRlcCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChub2RlSWQpO1xuICAgIH07XG4gICAgZm9yIChjb25zdCBub2RlSWQgb2Ygbm9kZVNldCkgdmlzaXQobm9kZUlkKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIGZpbmdlcnByaW50cyBmb3IgYWxsIHVwc3RyZWFtIGRlcGVuZGVuY2llcyBvZiBhIG5vZGUuXG4gICAqL1xuICBwcml2YXRlIGRlcGVuZGVuY3lGaW5nZXJwcmludHMoXG4gICAgcGxhbjogR3JhcGhFeGVjdXRpb25QbGFuLFxuICAgIG5vZGVJZDogc3RyaW5nLFxuICAgIHJlc3VsdDogR3JhcGhFeGVjdXRpb25SZXN1bHRcbiAgKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgZGVwcyA9IHRoaXMuZGVwZW5kZW5jeVJlc29sdmVyLmdldERlcGVuZGVuY2llcyhwbGFuLCBub2RlSWQpO1xuICAgIGNvbnN0IGZpbmdlcnByaW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcHMpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBwbGFuLm5vZGVzLmZpbmQoKG4pID0+IG4uaWQgPT09IGRlcCk7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBjb25zdCBkZXBSZXN1bHQgPSByZXN1bHQubm9kZVJlc3VsdHNbZGVwXTtcbiAgICAgICAgY29uc3QgaW5wdXRzID0gZGVwUmVzdWx0Py5pbnB1dHMgPz8ge307XG4gICAgICAgIGNvbnN0IG5lc3RlZERlcHMgPSB0aGlzLmRlcGVuZGVuY3lGaW5nZXJwcmludHMocGxhbiwgZGVwLCByZXN1bHQpO1xuICAgICAgICBmaW5nZXJwcmludHNbZGVwXSA9IHRoaXMuY29tcHV0ZUZpbmdlcnByaW50KHBsYW4ud29ya2Zsb3csIG5vZGUsIGlucHV0cywgbmVzdGVkRGVwcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaW5nZXJwcmludHM7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIHZhbHVlIHdpdGggcmVjdXJzaXZlbHkgc29ydGVkIGtleXMgZm9yIHN0YWJsZSBoYXNoaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGFibGVTZXJpYWxpemUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGBbJHt2YWx1ZS5tYXAoKHYpID0+IHRoaXMuc3RhYmxlU2VyaWFsaXplKHYpKS5qb2luKFwiLFwiKX1dYDtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCk7XG4gICAgY29uc3QgcGFpcnMgPSBrZXlzLm1hcChcbiAgICAgIChrKSA9PiBgJHtKU09OLnN0cmluZ2lmeShrKX06JHt0aGlzLnN0YWJsZVNlcmlhbGl6ZSgodmFsdWUgYXMgYW55KVtrXSl9YFxuICAgICk7XG4gICAgcmV0dXJuIGB7JHtwYWlycy5qb2luKFwiLFwiKX19YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW1wbGUgbm9uLWNyeXB0b2dyYXBoaWMgaGFzaCBmb3IgYnJvd3NlciBlbnZpcm9ubWVudHMgd2hlcmVcbiAgICogYG5vZGU6Y3J5cHRvYCBpcyB1bmF2YWlsYWJsZS4gUHJvZHVjZXMgYSBkZXRlcm1pbmlzdGljIGhleC1saWtlIHN0cmluZ1xuICAgKiBmcm9tIHRoZSBpbnB1dC4gVGhpcyBpcyBOT1QgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIGJ1dCBpcyBzdWZmaWNpZW50XG4gICAqIGZvciBmaW5nZXJwcmludC1iYXNlZCBjYWNoZSBrZXlzLlxuICAgKi9cbiAgcHJpdmF0ZSBzaW1wbGVIYXNoKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgaGFzaCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xuICAgICAgaGFzaCB8PSAwO1xuICAgIH1cbiAgICByZXR1cm4gYGZwXyR7TWF0aC5hYnMoaGFzaCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIFwiMFwiKX1fJHtzdHIubGVuZ3RofWA7XG4gIH1cbn1cblxudm9pZCBHUkFQSF9QSU5OSU5HX01FVEFEQVRBX0tFWTtcbiJdfQ==
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhQaW5uaW5nU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkdyYXBoUGlubmluZ1NlcnZpY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7R0FJRztBQUNILG9EQUErRDtBQUMvRCwyRUFBcUU7QUFDckUscUVBQStEO0FBQy9EOztHQUVHO0FBQ0gsTUFBYSxtQkFBbUI7SUFDNUIsWUFBWSxLQUFLLEVBQUUsTUFBTSxFQUFFLGtCQUFrQjtRQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7SUFDakQsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU87UUFDakIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUMxQixNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsbUJBQW1CO1lBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3pELENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLDBCQUEwQjtRQUMxQixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDUixNQUFNLElBQUksd0NBQWlCLENBQUMs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QUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEYsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNsQyxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsR0FBRztRQUNWLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM5RSxDQUFDO0NBQ0o7QUE1S0Qsa0RBNEtDO0FBQ0QsS0FBSyx5Q0FBMEIsQ0FBQztBQUNoQyw4eG1CQUE4eG1CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9waW5uaW5nL0dyYXBoUGlubmluZ1NlcnZpY2VcbiAqIEBzdW1tYXJ5IFNlcnZpY2UgZm9yIHBpbm5pbmcgYW5kIHVucGlubmluZyBncmFwaCBub2RlIHZhbHVlcy5cbiAqIEBkZXNjcmlwdGlvbiBDb21wdXRlcyBzdGFibGUgZmluZ2VycHJpbnRzLCBwaW5zL3VucGlucyBub2RlcyBhbmQgdGhlaXIgdXBzdHJlYW0gZGVwZW5kZW5jaWVzLCByZWFkcyBwaW5uZWQgdmFsdWVzLCBhbmQgZW1pdHMgcGlubmluZyBldmVudHMuIFBpbm5pbmcgaXMgYWxsLW9yLW5vdGhpbmc6IGlmIGFueSB1cHN0cmVhbSBkZXBlbmRlbmN5IGlzIG5vdCBwaW5uYWJsZSwgdGhlIG9wZXJhdGlvbiBmYWlscy5cbiAqL1xuaW1wb3J0IHsgR1JBUEhfUElOTklOR19NRVRBREFUQV9LRVkgfSBmcm9tIFwiLi8uLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEdyYXBoUGlubmluZ0Vycm9yIH0gZnJvbSBcIi4vLi4vZXJyb3JzL0dyYXBoUGlubmluZ0Vycm9yLmpzXCI7XG5pbXBvcnQgeyBHcmFwaFRvcG9sb2d5IH0gZnJvbSBcIi4vLi4vcGxhbm5pbmcvR3JhcGhUb3BvbG9neS5qc1wiO1xuLyoqXG4gKiBTZXJ2aWNlIHRoYXQgbWFuYWdlcyBwaW5uaW5nIGFuZCB1bnBpbm5pbmcgb2YgZ3JhcGggbm9kZSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaFBpbm5pbmdTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihzdG9yZSwgcG9saWN5LCBkZXBlbmRlbmN5UmVzb2x2ZXIpIHtcbiAgICAgICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgICAgICB0aGlzLnBvbGljeSA9IHBvbGljeTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmN5UmVzb2x2ZXIgPSBkZXBlbmRlbmN5UmVzb2x2ZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBpbnMgYSBub2RlIGFuZCBhbGwgaXRzIHVwc3RyZWFtIGRlcGVuZGVuY2llcy5cbiAgICAgKlxuICAgICAqIEB0aHJvd3Mge0dyYXBoUGlubmluZ0Vycm9yfSB3aGVuIHRoZSBub2RlIG9yIGFueSBkZXBlbmRlbmN5IGlzIG5vdCBwaW5uYWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyBwaW5Ob2RlKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcGxhbiA9IG9wdGlvbnMucGxhbjtcbiAgICAgICAgY29uc3QgaW5jbHVkZURlcGVuZGVuY2llcyA9IG9wdGlvbnMuaW5jbHVkZURlcGVuZGVuY2llcyA/PyB0cnVlO1xuICAgICAgICBjb25zdCBwaW5TZXQgPSBpbmNsdWRlRGVwZW5kZW5jaWVzXG4gICAgICAgICAgICA/IHRoaXMuZGVwZW5kZW5jeVJlc29sdmVyLmdldFBpblNldChwbGFuLCBvcHRpb25zLm5vZGVJZClcbiAgICAgICAgICAgIDogbmV3IFNldChbb3B0aW9ucy5ub2RlSWRdKTtcbiAgICAgICAgLy8gVmFsaWRhdGUgYWxsLW9yLW5vdGhpbmdcbiAgICAgICAgZm9yIChjb25zdCBub2RlSWQgb2YgcGluU2V0KSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gcGxhbi5ub2Rlcy5maW5kKChuKSA9PiBuLmlkID09PSBub2RlSWQpO1xuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEdyYXBoUGlubmluZ0Vycm9yKGBOb2RlICcke25vZGVJZH0nIG5vdCBmb3VuZCBpbiBwbGFuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9saWN5LmNhblBpbihub2RlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBHcmFwaFBpbm5pbmdFcnJvcihgTm9kZSAnJHtub2RlSWR9JyBpcyBub3QgcGlubmFibGVgLCB7IG5vZGVJZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBQaW4gZGVwZW5kZW5jaWVzIGZpcnN0LCB0aGVuIHRoZSBzZWxlY3RlZCBub2RlXG4gICAgICAgIGNvbnN0IG9yZGVyZWQgPSB0aGlzLnRvcG9sb2dpY2FsT3JkZXIocGxhbiwgcGluU2V0KTtcbiAgICAgICAgZm9yIChjb25zdCBub2RlSWQgb2Ygb3JkZXJlZCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHBsYW4ubm9kZXMuZmluZCgobikgPT4gbi5pZCA9PT0gbm9kZUlkKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9wdGlvbnMucmVzdWx0Lm5vZGVSZXN1bHRzW25vZGVJZF07XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0Lm91dHB1dHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgR3JhcGhQaW5uaW5nRXJyb3IoYE5vZGUgJyR7bm9kZUlkfScgaGFzIG5vIGNvbXBsZXRlZCBvdXRwdXQgdG8gcGluYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnB1dHMgPSByZXN1bHQuaW5wdXRzID8/IHt9O1xuICAgICAgICAgICAgY29uc3QgZGVwRmluZ2VycHJpbnRzID0gdGhpcy5kZXBlbmRlbmN5RmluZ2VycHJpbnRzKHBsYW4sIG5vZGVJZCwgb3B0aW9ucy5yZXN1bHQpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5jcmVhdGVWYWx1ZUtleShvcHRpb25zLndvcmtmbG93LCBub2RlLCBpbnB1dHMsIGRlcEZpbmdlcnByaW50cywgb3B0aW9ucy5uYW1lc3BhY2UpO1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0ge1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBvdXRwdXRzOiByZXN1bHQub3V0cHV0cyxcbiAgICAgICAgICAgICAgICBwaW5uZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICAgICAgICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHsgLi4ub3B0aW9ucy5yZXN1bHQubWV0YWRhdGEsIG5vZGVJZCB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmUud3JpdGVDYWNoZWQoa2V5LCBjYWNoZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVucGlucyBhIHNpbmdsZSBub2RlIChkb2VzIG5vdCB1bnBpbiBkZXBlbmRlbnRzIGluIHYxKS5cbiAgICAgKi9cbiAgICBhc3luYyB1bnBpbk5vZGUob3B0aW9ucykge1xuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd0lkOiBvcHRpb25zLndvcmtmbG93Lm5hbWUsXG4gICAgICAgICAgICBub2RlSWQ6IG9wdGlvbnMubm9kZUlkLFxuICAgICAgICAgICAgZmluZ2VycHJpbnQ6IG9wdGlvbnMuZmluZ2VycHJpbnQsXG4gICAgICAgICAgICBuYW1lc3BhY2U6IG9wdGlvbnMubmFtZXNwYWNlLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JlLmRlbGV0ZUNhY2hlZChrZXkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkcyBhIHBpbm5lZCB2YWx1ZSBmb3IgYSBub2RlLCByZXR1cm5pbmcgYHVuZGVmaW5lZGAgd2hlbiBubyB2YWxpZFxuICAgICAqIHBpbm5lZCB2YWx1ZSBleGlzdHMuXG4gICAgICovXG4gICAgYXN5bmMgcmVhZFBpbm5lZFZhbHVlKHdvcmtmbG93LCBub2RlLCBpbnB1dHMsIGRlcGVuZGVuY3lGaW5nZXJwcmludHMsIG5hbWVzcGFjZSkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmNyZWF0ZVZhbHVlS2V5KHdvcmtmbG93LCBub2RlLCBpbnB1dHMsIGRlcGVuZGVuY3lGaW5nZXJwcmludHMsIG5hbWVzcGFjZSk7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IHRoaXMuc3RvcmUucmVhZENhY2hlZChrZXkpO1xuICAgICAgICBpZiAoY2FjaGVkICYmIGNhY2hlZC5waW5uZWQpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZWQuZXhwaXJlc0F0ICYmIG5ldyBEYXRlKGNhY2hlZC5leHBpcmVzQXQpIDwgbmV3IERhdGUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzdGFibGUgdmFsdWUga2V5IGZvciBhIG5vZGUuXG4gICAgICovXG4gICAgY3JlYXRlVmFsdWVLZXkod29ya2Zsb3csIG5vZGUsIGlucHV0cywgZGVwZW5kZW5jeUZpbmdlcnByaW50cywgbmFtZXNwYWNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3b3JrZmxvd0lkOiB3b3JrZmxvdy5uYW1lLFxuICAgICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgICAgZmluZ2VycHJpbnQ6IHRoaXMuY29tcHV0ZUZpbmdlcnByaW50KHdvcmtmbG93LCBub2RlLCBpbnB1dHMsIGRlcGVuZGVuY3lGaW5nZXJwcmludHMpLFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyBhIHN0YWJsZSBmaW5nZXJwcmludCBmb3IgYSBub2RlJ3MgaW5wdXRzIGFuZCBkZXBlbmRlbmNpZXMuXG4gICAgICovXG4gICAgY29tcHV0ZUZpbmdlcnByaW50KHdvcmtmbG93LCBub2RlLCBpbnB1dHMsIGRlcGVuZGVuY3lGaW5nZXJwcmludHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93SWQ6IHdvcmtmbG93Lm5hbWUsXG4gICAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgICBub2RlS2luZDogbm9kZS5raW5kLFxuICAgICAgICAgICAgbm9kZURlZmluaXRpb25WZXJzaW9uOiBub2RlLmRlZmluaXRpb24/LmdyYXBoPy5tZXRhZGF0YT8udmVyc2lvbixcbiAgICAgICAgICAgIGlucHV0czogdGhpcy5zdGFibGVTZXJpYWxpemUoaW5wdXRzKSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lGaW5nZXJwcmludHM6IHRoaXMuc3RhYmxlU2VyaWFsaXplKGRlcGVuZGVuY3lGaW5nZXJwcmludHMpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy5zdGFibGVTZXJpYWxpemUoZGF0YSk7XG4gICAgICAgIC8vIFVzZSBhIGRldGVybWluaXN0aWMgbm9uLWNyeXB0b2dyYXBoaWMgaGFzaCB0aGF0IHdvcmtzIGluIGJvdGggYnJvd3NlclxuICAgICAgICAvLyBhbmQgTm9kZSBlbnZpcm9ubWVudHMgd2l0aG91dCByZXF1aXJpbmcgYG5vZGU6Y3J5cHRvYC5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2ltcGxlSGFzaChqc29uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHRvcG9sb2dpY2FsIG9yZGVyaW5nIG9mIHRoZSBnaXZlbiBub2RlIHNldC5cbiAgICAgKi9cbiAgICB0b3BvbG9naWNhbE9yZGVyKHBsYW4sIG5vZGVTZXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IHZpc2l0ID0gKG5vZGVJZCkgPT4ge1xuICAgICAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKG5vZGVJZCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmlzaXRlZC5hZGQobm9kZUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGRlcHMgPSBHcmFwaFRvcG9sb2d5LnVwc3RyZWFtTm9kZXMobm9kZUlkLCBwbGFuLmluY29taW5nQnlOb2RlLCBmYWxzZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBkZXBzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVTZXQuaGFzKGRlcCkpXG4gICAgICAgICAgICAgICAgICAgIHZpc2l0KGRlcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChub2RlSWQpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGVJZCBvZiBub2RlU2V0KVxuICAgICAgICAgICAgdmlzaXQobm9kZUlkKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgZmluZ2VycHJpbnRzIGZvciBhbGwgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIG9mIGEgbm9kZS5cbiAgICAgKi9cbiAgICBkZXBlbmRlbmN5RmluZ2VycHJpbnRzKHBsYW4sIG5vZGVJZCwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGRlcHMgPSB0aGlzLmRlcGVuZGVuY3lSZXNvbHZlci5nZXREZXBlbmRlbmNpZXMocGxhbiwgbm9kZUlkKTtcbiAgICAgICAgY29uc3QgZmluZ2VycHJpbnRzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBwbGFuLm5vZGVzLmZpbmQoKG4pID0+IG4uaWQgPT09IGRlcCk7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcFJlc3VsdCA9IHJlc3VsdC5ub2RlUmVzdWx0c1tkZXBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0cyA9IGRlcFJlc3VsdD8uaW5wdXRzID8/IHt9O1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZERlcHMgPSB0aGlzLmRlcGVuZGVuY3lGaW5nZXJwcmludHMocGxhbiwgZGVwLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgIGZpbmdlcnByaW50c1tkZXBdID0gdGhpcy5jb21wdXRlRmluZ2VycHJpbnQocGxhbi53b3JrZmxvdywgbm9kZSwgaW5wdXRzLCBuZXN0ZWREZXBzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluZ2VycHJpbnRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVzIGEgdmFsdWUgd2l0aCByZWN1cnNpdmVseSBzb3J0ZWQga2V5cyBmb3Igc3RhYmxlIGhhc2hpbmcuXG4gICAgICovXG4gICAgc3RhYmxlU2VyaWFsaXplKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gYFske3ZhbHVlLm1hcCgodikgPT4gdGhpcy5zdGFibGVTZXJpYWxpemUodikpLmpvaW4oXCIsXCIpfV1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpO1xuICAgICAgICBjb25zdCBwYWlycyA9IGtleXMubWFwKChrKSA9PiBgJHtKU09OLnN0cmluZ2lmeShrKX06JHt0aGlzLnN0YWJsZVNlcmlhbGl6ZSh2YWx1ZVtrXSl9YCk7XG4gICAgICAgIHJldHVybiBgeyR7cGFpcnMuam9pbihcIixcIil9fWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBsZSBub24tY3J5cHRvZ3JhcGhpYyBoYXNoIGZvciBicm93c2VyIGVudmlyb25tZW50cyB3aGVyZVxuICAgICAqIGBub2RlOmNyeXB0b2AgaXMgdW5hdmFpbGFibGUuIFByb2R1Y2VzIGEgZGV0ZXJtaW5pc3RpYyBoZXgtbGlrZSBzdHJpbmdcbiAgICAgKiBmcm9tIHRoZSBpbnB1dC4gVGhpcyBpcyBOT1QgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIGJ1dCBpcyBzdWZmaWNpZW50XG4gICAgICogZm9yIGZpbmdlcnByaW50LWJhc2VkIGNhY2hlIGtleXMuXG4gICAgICovXG4gICAgc2ltcGxlSGFzaChzdHIpIHtcbiAgICAgICAgbGV0IGhhc2ggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaGFzaCA9IChoYXNoIDw8IDUpIC0gaGFzaCArIGNoYXI7XG4gICAgICAgICAgICBoYXNoIHw9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBmcF8ke01hdGguYWJzKGhhc2gpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCBcIjBcIil9XyR7c3RyLmxlbmd0aH1gO1xuICAgIH1cbn1cbnZvaWQgR1JBUEhfUElOTklOR19NRVRBREFUQV9LRVk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSM0poY0doUWFXNXVhVzVuVTJWeWRtbGpaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMM055WXk5bmNtRndhQzl3YVc1dWFXNW5MMGR5WVhCb1VHbHVibWx1WjFObGNuWnBZMlV1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRTdPenM3UjBGSlJ6dEJRVU5JTEU5QlFVOHNSVUZCUlN3d1FrRkJNRUlzUlVGQlJTd3dRa0ZCY1VJN1FVRkRNVVFzVDBGQlR5eEZRVUZGTEdsQ1FVRnBRaXhGUVVGRkxIbERRVUZ2UXp0QlFVZG9SU3hQUVVGUExFVkJRVVVzWVVGQllTeEZRVUZGTEhWRFFVRnJRenRCUVdVeFJEczdSMEZGUnp0QlFVTklMRTFCUVUwc1QwRkJUeXh0UWtGQmJVSTdTVUZET1VJc1dVRkRiVUlzUzBGQmMwSXNSVUZEZEVJc1RVRkJNRUlzUlVGRE1VSXNhMEpCUVd0RU8xRkJSbXhFTEZWQlFVc3NSMEZCVEN4TFFVRkxMRU5CUVdsQ08xRkJRM1JDTEZkQlFVMHNSMEZCVGl4TlFVRk5MRU5CUVc5Q08xRkJRekZDTEhWQ1FVRnJRaXhIUVVGc1FpeHJRa0ZCYTBJc1EwRkJaME03U1VGRGJFVXNRMEZCUXp0SlFVVktPenM3TzA5QlNVYzdTVUZEU0N4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFOUJRVFJDTzFGQlEzaERMRTFCUVUwc1NVRkJTU3hIUVVGSExFOUJRVThzUTBGQlF5eEpRVUV3UWl4RFFVRkRPMUZCUTJoRUxFMUJRVTBzYlVKQlFXMUNMRWRCUVVjc1QwRkJUeXhEUVVGRExHMUNRVUZ0UWl4SlFVRkpMRWxCUVVrc1EwRkJRenRSUVVWb1JTeE5RVUZOTEUxQlFVMHNSMEZCUnl4dFFrRkJiVUk3V1VGRGFFTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTTdXVUZEZWtRc1EwRkJReXhEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRk9VSXNNRUpCUVRCQ08xRkJRekZDTEV0QlFVc3NUVUZCVFN4TlFVRk5MRWxCUVVrc1RVRkJUU3hGUVVGRkxFTkJRVU03V1VGRE5VSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEV0QlFVc3NUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRja1FzU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMmRDUVVOV0xFMUJRVTBzU1VGQlNTeHBRa0ZCYVVJc1EwRkJReXhUUVVGVExFMUJRVTBzY1VKQlFYRkNMRU5CUVVNc1EwRkJRenRaUVVOd1JTeERRVUZETzFsQlEwUXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNN1owSkJRemxDTEUxQlFVMHNTVUZCU1N4cFFrRkJhVUlzUTBGRGVrSXNVMEZCVXl4TlFVRk5MRzFDUVVGdFFpeEZRVU5zUXl4RlFVRkZMRTFCUVUwc1JVRkJSU3hEUVVOWUxFTkJRVU03V1VGRFNpeERRVUZETzFGQlEwZ3NRMEZCUXp0UlFVVkVMR2xFUVVGcFJEdFJRVU5xUkN4TlFVRk5MRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzFGQlEzQkVMRXRCUVVzc1RVRkJUU3hOUVVGTkxFbEJRVWtzVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZETjBJc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1RVRkJUU3hEUVVGRkxFTkJRVU03V1VGRGRFUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRiRVFzU1VGQlNTeERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dG5Ra0ZETDBJc1RVRkJUU3hKUVVGSkxHbENRVUZwUWl4RFFVTjZRaXhUUVVGVExFMUJRVTBzYTBOQlFXdERMRU5CUTJ4RUxFTkJRVU03V1VGRFNpeERRVUZETzFsQlEwUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1RVRkJUU3hEUVVGRExFMUJRVTBzU1VGQlNTeEZRVUZGTEVOQlFVTTdXVUZEYmtNc1RVRkJUU3hsUVVGbExFZEJRVWNzU1VGQlNTeERRVUZETEhOQ1FVRnpRaXhEUVVGRExFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRMnhHTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zVDBGQlR5eERRVUZETEZGQlFWRXNSVUZCUlN4SlFVRkpMRVZCUVVVc1RVRkJUU3hGUVVGRkxHVkJRV1VzUlVGQlJTeFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1dVRkRjRWNzVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dFpRVU55UXl4TlFVRk5MRTFCUVUwc1IwRkJjVUk3WjBKQlF5OUNMRWRCUVVjN1owSkJRMGdzVDBGQlR5eEZRVUZGTEUxQlFVMHNRMEZCUXl4UFFVRlBPMmRDUVVOMlFpeE5RVUZOTEVWQlFVVXNTVUZCU1R0blFrRkRXaXhUUVVGVExFVkJRVVVzUjBGQlJ6dG5Ra0ZEWkN4VFFVRlRMRVZCUVVVc1IwRkJSenRuUWtGRFpDeFJRVUZSTEVWQlFVVXNSVUZCUlN4SFFVRkhMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zVVVGQlVTeEZRVUZGTEUxQlFVMHNSVUZCUlR0aFFVTnFSQ3hEUVVGRE8xbEJRMFlzVFVGQlRTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdVVUZETlVNc1EwRkJRenRKUVVOSUxFTkJRVU03U1VGRlJEczdUMEZGUnp0SlFVTklMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zVDBGQk9FSTdVVUZETlVNc1RVRkJUU3hIUVVGSExFZEJRV3RDTzFsQlEzcENMRlZCUVZVc1JVRkJSU3hQUVVGUExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVazdXVUZEYWtNc1RVRkJUU3hGUVVGRkxFOUJRVThzUTBGQlF5eE5RVUZOTzFsQlEzUkNMRmRCUVZjc1JVRkJSU3hQUVVGUExFTkJRVU1zVjBGQlZ6dFpRVU5vUXl4VFFVRlRMRVZCUVVVc1QwRkJUeXhEUVVGRExGTkJRVk03VTBGRE4wSXNRMEZCUXp0UlFVTkdMRTFCUVUwc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRja01zUTBGQlF6dEpRVVZFT3pzN1QwRkhSenRKUVVOSUxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlEyNUNMRkZCUVdsRExFVkJRMnBETEVsQlFUUkNMRVZCUXpWQ0xFMUJRVFJDTEVWQlF6VkNMSE5DUVVFNFF5eEZRVU01UXl4VFFVRnJRanRSUVVWc1FpeE5RVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExGRkJRVkVzUlVGQlJTeEpRVUZKTEVWQlFVVXNUVUZCVFN4RlFVRkZMSE5DUVVGelFpeEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUXpOR0xFMUJRVTBzVFVGQlRTeEhRVUZITEUxQlFVMHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYUVRc1NVRkJTU3hOUVVGTkxFbEJRVWtzVFVGQlRTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMWxCUXpWQ0xFbEJRVWtzVFVGQlRTeERRVUZETEZOQlFWTXNTVUZCU1N4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1JVRkJSU3hEUVVGRE8yZENRVU5vUlN4UFFVRlBMRk5CUVZNc1EwRkJRenRaUVVOdVFpeERRVUZETzFsQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1VVRkRhRUlzUTBGQlF6dFJRVU5FTEU5QlFVOHNVMEZCVXl4RFFVRkRPMGxCUTI1Q0xFTkJRVU03U1VGRlJEczdUMEZGUnp0SlFVTklMR05CUVdNc1EwRkRXaXhSUVVGcFF5eEZRVU5xUXl4SlFVRTBRaXhGUVVNMVFpeE5RVUUwUWl4RlFVTTFRaXh6UWtGQk9FTXNSVUZET1VNc1UwRkJhMEk3VVVGRmJFSXNUMEZCVHp0WlFVTk1MRlZCUVZVc1JVRkJSU3hSUVVGUkxFTkJRVU1zU1VGQlNUdFpRVU42UWl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFVkJRVVU3V1VGRFppeFhRVUZYTEVWQlFVVXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEZGQlFWRXNSVUZCUlN4SlFVRkpMRVZCUVVVc1RVRkJUU3hGUVVGRkxITkNRVUZ6UWl4RFFVRkRPMWxCUTNCR0xGTkJRVk03VTBGRFZpeERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVkVPenRQUVVWSE8wbEJRMGdzYTBKQlFXdENMRU5CUTJoQ0xGRkJRV2xETEVWQlEycERMRWxCUVRSQ0xFVkJRelZDTEUxQlFUUkNMRVZCUXpWQ0xITkNRVUU0UXp0UlFVVTVReXhOUVVGTkxFbEJRVWtzUjBGQlJ6dFpRVU5ZTEZWQlFWVXNSVUZCUlN4UlFVRlJMRU5CUVVNc1NVRkJTVHRaUVVONlFpeE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRVZCUVVVN1dVRkRaaXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEVsQlFVazdXVUZEYmtJc2NVSkJRWEZDTEVWQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVd0Q0xFVkJRVVVzUzBGQlN5eEZRVUZGTEZGQlFWRXNSVUZCUlN4UFFVRlBPMWxCUTNwRkxFMUJRVTBzUlVGQlJTeEpRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkRMRTFCUVUwc1EwRkJRenRaUVVOd1F5eHpRa0ZCYzBJc1JVRkJSU3hKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEhOQ1FVRnpRaXhEUVVGRE8xTkJRM0pGTEVOQlFVTTdVVUZEUml4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTNoRExIZEZRVUYzUlR0UlFVTjRSU3g1UkVGQmVVUTdVVUZEZWtRc1QwRkJUeXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXk5Q0xFTkJRVU03U1VGRlJEczdUMEZGUnp0SlFVTkxMR2RDUVVGblFpeERRVU4wUWl4SlFVRjNRaXhGUVVONFFpeFBRVUZ2UWp0UlFVVndRaXhOUVVGTkxFMUJRVTBzUjBGQllTeEZRVUZGTEVOQlFVTTdVVUZETlVJc1RVRkJUU3hQUVVGUExFZEJRVWNzU1VGQlNTeEhRVUZITEVWQlFWVXNRMEZCUXp0UlFVTnNReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEUxQlFXTXNSVUZCUlN4RlFVRkZPMWxCUXk5Q0xFbEJRVWtzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNN1owSkJRVVVzVDBGQlR6dFpRVU5vUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFsQlEzQkNMRTFCUVUwc1NVRkJTU3hIUVVGSExHRkJRV0VzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhqUVVGakxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdXVUZETjBVc1MwRkJTeXhOUVVGTkxFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXp0blFrRkRka0lzU1VGQlNTeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJRenR2UWtGQlJTeExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRia01zUTBGQlF6dFpRVU5FTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRGRFSXNRMEZCUXl4RFFVRkRPMUZCUTBZc1MwRkJTeXhOUVVGTkxFMUJRVTBzU1VGQlNTeFBRVUZQTzFsQlFVVXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRelZETEU5QlFVOHNUVUZCVFN4RFFVRkRPMGxCUTJoQ0xFTkJRVU03U1VGRlJEczdUMEZGUnp0SlFVTkxMSE5DUVVGelFpeERRVU0xUWl4SlFVRjNRaXhGUVVONFFpeE5RVUZqTEVWQlEyUXNUVUZCTkVJN1VVRkZOVUlzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEdWQlFXVXNRMEZCUXl4SlFVRkpMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRGJrVXNUVUZCVFN4WlFVRlpMRWRCUVRKQ0xFVkJRVVVzUTBGQlF6dFJRVU5vUkN4TFFVRkxMRTFCUVUwc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETzFsQlEzWkNMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMnhFTEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNN1owSkJRMVFzVFVGQlRTeFRRVUZUTEVkQlFVY3NUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZETVVNc1RVRkJUU3hOUVVGTkxFZEJRVWNzVTBGQlV5eEZRVUZGTEUxQlFVMHNTVUZCU1N4RlFVRkZMRU5CUVVNN1owSkJRM1pETEUxQlFVMHNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4SlFVRkpMRVZCUVVVc1IwRkJSeXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzJkQ1FVTnNSU3haUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeFZRVUZWTEVOQlFVTXNRMEZCUXp0WlFVTjJSaXhEUVVGRE8xRkJRMGdzUTBGQlF6dFJRVU5FTEU5QlFVOHNXVUZCV1N4RFFVRkRPMGxCUTNSQ0xFTkJRVU03U1VGRlJEczdUMEZGUnp0SlFVTkxMR1ZCUVdVc1EwRkJReXhMUVVGak8xRkJRM0JETEVsQlFVa3NTMEZCU3l4TFFVRkxMRWxCUVVrc1NVRkJTU3hQUVVGUExFdEJRVXNzUzBGQlN5eFJRVUZSTEVWQlFVVXNRMEZCUXp0WlFVTm9SQ3hQUVVGUExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRMMElzUTBGQlF6dFJRVU5FTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlEzcENMRTlCUVU4c1NVRkJTU3hMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTTdVVUZEY0VVc1EwRkJRenRSUVVORUxFMUJRVTBzU1VGQlNTeEhRVUZITEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZEZGtNc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZEY0VJc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkZMRXRCUVdFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlEzcEZMRU5CUVVNN1VVRkRSaXhQUVVGUExFbEJRVWtzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTkxMRlZCUVZVc1EwRkJReXhIUVVGWE8xRkJRelZDTEVsQlFVa3NTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOaUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNN1dVRkRjRU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU12UWl4SlFVRkpMRWRCUVVjc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRenRaUVVOcVF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTFvc1EwRkJRenRSUVVORUxFOUJRVThzVFVGQlRTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExGRkJRVkVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRKUVVNMVJTeERRVUZETzBOQlEwWTdRVUZGUkN4TFFVRkxMREJDUVVFd1FpeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCQWJXOWtkV3hsSUdsdWRHVm5jbUYwYVc5dWN5OW5jbUZ3YUM5d2FXNXVhVzVuTDBkeVlYQm9VR2x1Ym1sdVoxTmxjblpwWTJWY2JpQXFJRUJ6ZFcxdFlYSjVJRk5sY25acFkyVWdabTl5SUhCcGJtNXBibWNnWVc1a0lIVnVjR2x1Ym1sdVp5Qm5jbUZ3YUNCdWIyUmxJSFpoYkhWbGN5NWNiaUFxSUVCa1pYTmpjbWx3ZEdsdmJpQkRiMjF3ZFhSbGN5QnpkR0ZpYkdVZ1ptbHVaMlZ5Y0hKcGJuUnpMQ0J3YVc1ekwzVnVjR2x1Y3lCdWIyUmxjeUJoYm1RZ2RHaGxhWElnZFhCemRISmxZVzBnWkdWd1pXNWtaVzVqYVdWekxDQnlaV0ZrY3lCd2FXNXVaV1FnZG1Gc2RXVnpMQ0JoYm1RZ1pXMXBkSE1nY0dsdWJtbHVaeUJsZG1WdWRITXVJRkJwYm01cGJtY2dhWE1nWVd4c0xXOXlMVzV2ZEdocGJtYzZJR2xtSUdGdWVTQjFjSE4wY21WaGJTQmtaWEJsYm1SbGJtTjVJR2x6SUc1dmRDQndhVzV1WVdKc1pTd2dkR2hsSUc5d1pYSmhkR2x2YmlCbVlXbHNjeTVjYmlBcUwxeHVhVzF3YjNKMElIc2dSMUpCVUVoZlVFbE9Ua2xPUjE5TlJWUkJSRUZVUVY5TFJWa2dmU0JtY205dElGd2lMaTR2WTI5dWMzUmhiblJ6WENJN1hHNXBiWEJ2Y25RZ2V5QkhjbUZ3YUZCcGJtNXBibWRGY25KdmNpQjlJR1p5YjIwZ1hDSXVMaTlsY25KdmNuTXZSM0poY0doUWFXNXVhVzVuUlhKeWIzSmNJanRjYm1sdGNHOXlkQ0IwZVhCbElIc2dSM0poY0doRmVHVmpkWFJwYjI1UWJHRnVJSDBnWm5KdmJTQmNJaTR1TDNCc1lXNXVhVzVuTDBkeVlYQm9SWGhsWTNWMGFXOXVVR3hoYmx3aU8xeHVhVzF3YjNKMElIUjVjR1VnZXlCSGNtRndhRVY0WldOMWRHbHZibEJzWVc1T2IyUmxJSDBnWm5KdmJTQmNJaTR1TDNCc1lXNXVhVzVuTDBkeVlYQm9SWGhsWTNWMGFXOXVVR3hoYms1dlpHVmNJanRjYm1sdGNHOXlkQ0I3SUVkeVlYQm9WRzl3YjJ4dloza2dmU0JtY205dElGd2lMaTR2Y0d4aGJtNXBibWN2UjNKaGNHaFViM0J2Ykc5bmVWd2lPMXh1YVcxd2IzSjBJSFI1Y0dVZ2V5QkhjbUZ3YUZaaGJIVmxVM1J2Y21VZ2ZTQm1jbTl0SUZ3aUxpNHZjM1J2Y21VdlIzSmhjR2hXWVd4MVpWTjBiM0psWENJN1hHNXBiWEJ2Y25RZ2RIbHdaU0I3SUVkeVlYQm9WbUZzZFdWTFpYa2dmU0JtY205dElGd2lMaTR2YzNSdmNtVXZSM0poY0doV1lXeDFaVXRsZVZ3aU8xeHVhVzF3YjNKMElIUjVjR1VnZXlCSGNtRndhRU5oWTJobFpGWmhiSFZsSUgwZ1puSnZiU0JjSWk0dUwzTjBiM0psTDBkeVlYQm9RMkZqYUdWa1ZtRnNkV1ZjSWp0Y2JtbHRjRzl5ZENCMGVYQmxJSHRjYmlBZ1IzSmhjR2hGZUdWamRYUnBiMjVTWlhOMWJIUXNYRzRnSUVkeVlYQm9SWGhsWTNWMGFXOXVWbUZzZFdWekxGeHVJQ0JIY21Gd2FGQnBiazV2WkdWUGNIUnBiMjV6TEZ4dUlDQkhjbUZ3YUZWdWNHbHVUbTlrWlU5d2RHbHZibk1zWEc1OUlHWnliMjBnWENJdUxpOTBlWEJsYzF3aU8xeHVhVzF3YjNKMElIUjVjR1VnZXlCSGNtRndhRmR2Y210bWJHOTNSR1ZtYVc1cGRHbHZiaUI5SUdaeWIyMGdYQ0pBWkdWallXWXRkSE12ZFdrdFpHVmpiM0poZEc5eWN5OW5jbUZ3YUZ3aU8xeHVYRzVwYlhCdmNuUWdkSGx3WlNCN0lFZHlZWEJvVUdsdWJtbHVaMUJ2YkdsamVTQjlJR1p5YjIwZ1hDSXVMMGR5WVhCb1VHbHVibWx1WjFCdmJHbGplVndpTzF4dWFXMXdiM0owSUhSNWNHVWdleUJIY21Gd2FGQnBibTVwYm1kRVpYQmxibVJsYm1ONVVtVnpiMngyWlhJZ2ZTQm1jbTl0SUZ3aUxpOUhjbUZ3YUZCcGJtNXBibWRFWlhCbGJtUmxibU41VW1WemIyeDJaWEpjSWp0Y2JseHVMeW9xWEc0Z0tpQlRaWEoyYVdObElIUm9ZWFFnYldGdVlXZGxjeUJ3YVc1dWFXNW5JR0Z1WkNCMWJuQnBibTVwYm1jZ2IyWWdaM0poY0dnZ2JtOWtaU0IyWVd4MVpYTXVYRzRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJIY21Gd2FGQnBibTVwYm1kVFpYSjJhV05sSUh0Y2JpQWdZMjl1YzNSeWRXTjBiM0lvWEc0Z0lDQWdjSEpwZG1GMFpTQnlaV0ZrYjI1c2VTQnpkRzl5WlRvZ1IzSmhjR2hXWVd4MVpWTjBiM0psTEZ4dUlDQWdJSEJ5YVhaaGRHVWdjbVZoWkc5dWJIa2djRzlzYVdONU9pQkhjbUZ3YUZCcGJtNXBibWRRYjJ4cFkza3NYRzRnSUNBZ2NISnBkbUYwWlNCeVpXRmtiMjVzZVNCa1pYQmxibVJsYm1ONVVtVnpiMngyWlhJNklFZHlZWEJvVUdsdWJtbHVaMFJsY0dWdVpHVnVZM2xTWlhOdmJIWmxjbHh1SUNBcElIdDlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGQnBibk1nWVNCdWIyUmxJR0Z1WkNCaGJHd2dhWFJ6SUhWd2MzUnlaV0Z0SUdSbGNHVnVaR1Z1WTJsbGN5NWNiaUFnSUNwY2JpQWdJQ29nUUhSb2NtOTNjeUI3UjNKaGNHaFFhVzV1YVc1blJYSnliM0o5SUhkb1pXNGdkR2hsSUc1dlpHVWdiM0lnWVc1NUlHUmxjR1Z1WkdWdVkza2dhWE1nYm05MElIQnBibTVoWW14bExseHVJQ0FnS2k5Y2JpQWdZWE41Ym1NZ2NHbHVUbTlrWlNodmNIUnBiMjV6T2lCSGNtRndhRkJwYms1dlpHVlBjSFJwYjI1ektUb2dVSEp2YldselpUeDJiMmxrUGlCN1hHNGdJQ0FnWTI5dWMzUWdjR3hoYmlBOUlHOXdkR2x2Ym5NdWNHeGhiaUJoY3lCSGNtRndhRVY0WldOMWRHbHZibEJzWVc0N1hHNGdJQ0FnWTI5dWMzUWdhVzVqYkhWa1pVUmxjR1Z1WkdWdVkybGxjeUE5SUc5d2RHbHZibk11YVc1amJIVmtaVVJsY0dWdVpHVnVZMmxsY3lBL1B5QjBjblZsTzF4dVhHNGdJQ0FnWTI5dWMzUWdjR2x1VTJWMElEMGdhVzVqYkhWa1pVUmxjR1Z1WkdWdVkybGxjMXh1SUNBZ0lDQWdQeUIwYUdsekxtUmxjR1Z1WkdWdVkzbFNaWE52YkhabGNpNW5aWFJRYVc1VFpYUW9jR3hoYml3Z2IzQjBhVzl1Y3k1dWIyUmxTV1FwWEc0Z0lDQWdJQ0E2SUc1bGR5QlRaWFFvVzI5d2RHbHZibk11Ym05a1pVbGtYU2s3WEc1Y2JpQWdJQ0F2THlCV1lXeHBaR0YwWlNCaGJHd3RiM0l0Ym05MGFHbHVaMXh1SUNBZ0lHWnZjaUFvWTI5dWMzUWdibTlrWlVsa0lHOW1JSEJwYmxObGRDa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2JtOWtaU0E5SUhCc1lXNHVibTlrWlhNdVptbHVaQ2dvYmlrZ1BUNGdiaTVwWkNBOVBUMGdibTlrWlVsa0tUdGNiaUFnSUNBZ0lHbG1JQ2doYm05a1pTa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUjNKaGNHaFFhVzV1YVc1blJYSnliM0lvWUU1dlpHVWdKeVI3Ym05a1pVbGtmU2NnYm05MElHWnZkVzVrSUdsdUlIQnNZVzVnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDZ2hkR2hwY3k1d2IyeHBZM2t1WTJGdVVHbHVLRzV2WkdVcEtTQjdYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJIY21Gd2FGQnBibTVwYm1kRmNuSnZjaWhjYmlBZ0lDQWdJQ0FnSUNCZ1RtOWtaU0FuSkh0dWIyUmxTV1I5SnlCcGN5QnViM1FnY0dsdWJtRmliR1ZnTEZ4dUlDQWdJQ0FnSUNBZ0lIc2dibTlrWlVsa0lIMWNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJRYVc0Z1pHVndaVzVrWlc1amFXVnpJR1pwY25OMExDQjBhR1Z1SUhSb1pTQnpaV3hsWTNSbFpDQnViMlJsWEc0Z0lDQWdZMjl1YzNRZ2IzSmtaWEpsWkNBOUlIUm9hWE11ZEc5d2IyeHZaMmxqWVd4UGNtUmxjaWh3YkdGdUxDQndhVzVUWlhRcE8xeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2JtOWtaVWxrSUc5bUlHOXlaR1Z5WldRcElIdGNiaUFnSUNBZ0lHTnZibk4wSUc1dlpHVWdQU0J3YkdGdUxtNXZaR1Z6TG1acGJtUW9LRzRwSUQwK0lHNHVhV1FnUFQwOUlHNXZaR1ZKWkNraE8xeHVJQ0FnSUNBZ1kyOXVjM1FnY21WemRXeDBJRDBnYjNCMGFXOXVjeTV5WlhOMWJIUXVibTlrWlZKbGMzVnNkSE5iYm05a1pVbGtYVHRjYmlBZ0lDQWdJR2xtSUNnaGNtVnpkV3gwSUh4OElDRnlaWE4xYkhRdWIzVjBjSFYwY3lrZ2UxeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSM0poY0doUWFXNXVhVzVuUlhKeWIzSW9YRzRnSUNBZ0lDQWdJQ0FnWUU1dlpHVWdKeVI3Ym05a1pVbGtmU2NnYUdGeklHNXZJR052YlhCc1pYUmxaQ0J2ZFhSd2RYUWdkRzhnY0dsdVlGeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdZMjl1YzNRZ2FXNXdkWFJ6SUQwZ2NtVnpkV3gwTG1sdWNIVjBjeUEvUHlCN2ZUdGNiaUFnSUNBZ0lHTnZibk4wSUdSbGNFWnBibWRsY25CeWFXNTBjeUE5SUhSb2FYTXVaR1Z3Wlc1a1pXNWplVVpwYm1kbGNuQnlhVzUwY3lod2JHRnVMQ0J1YjJSbFNXUXNJRzl3ZEdsdmJuTXVjbVZ6ZFd4MEtUdGNiaUFnSUNBZ0lHTnZibk4wSUd0bGVTQTlJSFJvYVhNdVkzSmxZWFJsVm1Gc2RXVkxaWGtvYjNCMGFXOXVjeTUzYjNKclpteHZkeXdnYm05a1pTd2dhVzV3ZFhSekxDQmtaWEJHYVc1blpYSndjbWx1ZEhNc0lHOXdkR2x2Ym5NdWJtRnRaWE53WVdObEtUdGNiaUFnSUNBZ0lHTnZibk4wSUc1dmR5QTlJRzVsZHlCRVlYUmxLQ2t1ZEc5SlUwOVRkSEpwYm1jb0tUdGNiaUFnSUNBZ0lHTnZibk4wSUdOaFkyaGxaRG9nUjNKaGNHaERZV05vWldSV1lXeDFaU0E5SUh0Y2JpQWdJQ0FnSUNBZ2EyVjVMRnh1SUNBZ0lDQWdJQ0J2ZFhSd2RYUnpPaUJ5WlhOMWJIUXViM1YwY0hWMGN5eGNiaUFnSUNBZ0lDQWdjR2x1Ym1Wa09pQjBjblZsTEZ4dUlDQWdJQ0FnSUNCamNtVmhkR1ZrUVhRNklHNXZkeXhjYmlBZ0lDQWdJQ0FnZFhCa1lYUmxaRUYwT2lCdWIzY3NYRzRnSUNBZ0lDQWdJRzFsZEdGa1lYUmhPaUI3SUM0dUxtOXdkR2x2Ym5NdWNtVnpkV3gwTG0xbGRHRmtZWFJoTENCdWIyUmxTV1FnZlN4Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCaGQyRnBkQ0IwYUdsekxuTjBiM0psTG5keWFYUmxRMkZqYUdWa0tHdGxlU3dnWTJGamFHVmtLVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVlc1d2FXNXpJR0VnYzJsdVoyeGxJRzV2WkdVZ0tHUnZaWE1nYm05MElIVnVjR2x1SUdSbGNHVnVaR1Z1ZEhNZ2FXNGdkakVwTGx4dUlDQWdLaTljYmlBZ1lYTjVibU1nZFc1d2FXNU9iMlJsS0c5d2RHbHZibk02SUVkeVlYQm9WVzV3YVc1T2IyUmxUM0IwYVc5dWN5azZJRkJ5YjIxcGMyVThkbTlwWkQ0Z2UxeHVJQ0FnSUdOdmJuTjBJR3RsZVRvZ1IzSmhjR2hXWVd4MVpVdGxlU0E5SUh0Y2JpQWdJQ0FnSUhkdmNtdG1iRzkzU1dRNklHOXdkR2x2Ym5NdWQyOXlhMlpzYjNjdWJtRnRaU3hjYmlBZ0lDQWdJRzV2WkdWSlpEb2diM0IwYVc5dWN5NXViMlJsU1dRc1hHNGdJQ0FnSUNCbWFXNW5aWEp3Y21sdWREb2diM0IwYVc5dWN5NW1hVzVuWlhKd2NtbHVkQ3hjYmlBZ0lDQWdJRzVoYldWemNHRmpaVG9nYjNCMGFXOXVjeTV1WVcxbGMzQmhZMlVzWEc0Z0lDQWdmVHRjYmlBZ0lDQmhkMkZwZENCMGFHbHpMbk4wYjNKbExtUmxiR1YwWlVOaFkyaGxaQ2hyWlhrcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsWVdSeklHRWdjR2x1Ym1Wa0lIWmhiSFZsSUdadmNpQmhJRzV2WkdVc0lISmxkSFZ5Ym1sdVp5QmdkVzVrWldacGJtVmtZQ0IzYUdWdUlHNXZJSFpoYkdsa1hHNGdJQ0FxSUhCcGJtNWxaQ0IyWVd4MVpTQmxlR2x6ZEhNdVhHNGdJQ0FxTDF4dUlDQmhjM2x1WXlCeVpXRmtVR2x1Ym1Wa1ZtRnNkV1VvWEc0Z0lDQWdkMjl5YTJac2IzYzZJRWR5WVhCb1YyOXlhMlpzYjNkRVpXWnBibWwwYVc5dUxGeHVJQ0FnSUc1dlpHVTZJRWR5WVhCb1JYaGxZM1YwYVc5dVVHeGhiazV2WkdVc1hHNGdJQ0FnYVc1d2RYUnpPaUJIY21Gd2FFVjRaV04xZEdsdmJsWmhiSFZsY3l4Y2JpQWdJQ0JrWlhCbGJtUmxibU41Um1sdVoyVnljSEpwYm5Sek9pQlNaV052Y21ROGMzUnlhVzVuTENCemRISnBibWMrTEZ4dUlDQWdJRzVoYldWemNHRmpaVDg2SUhOMGNtbHVaMXh1SUNBcE9pQlFjbTl0YVhObFBFZHlZWEJvUTJGamFHVmtWbUZzZFdVZ2ZDQjFibVJsWm1sdVpXUStJSHRjYmlBZ0lDQmpiMjV6ZENCclpYa2dQU0IwYUdsekxtTnlaV0YwWlZaaGJIVmxTMlY1S0hkdmNtdG1iRzkzTENCdWIyUmxMQ0JwYm5CMWRITXNJR1JsY0dWdVpHVnVZM2xHYVc1blpYSndjbWx1ZEhNc0lHNWhiV1Z6Y0dGalpTazdYRzRnSUNBZ1kyOXVjM1FnWTJGamFHVmtJRDBnWVhkaGFYUWdkR2hwY3k1emRHOXlaUzV5WldGa1EyRmphR1ZrS0d0bGVTazdYRzRnSUNBZ2FXWWdLR05oWTJobFpDQW1KaUJqWVdOb1pXUXVjR2x1Ym1Wa0tTQjdYRzRnSUNBZ0lDQnBaaUFvWTJGamFHVmtMbVY0Y0dseVpYTkJkQ0FtSmlCdVpYY2dSR0YwWlNoallXTm9aV1F1Wlhod2FYSmxjMEYwS1NBOElHNWxkeUJFWVhSbEtDa3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEpsZEhWeWJpQmpZV05vWldRN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjFibVJsWm1sdVpXUTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxjeUJoSUhOMFlXSnNaU0IyWVd4MVpTQnJaWGtnWm05eUlHRWdibTlrWlM1Y2JpQWdJQ292WEc0Z0lHTnlaV0YwWlZaaGJIVmxTMlY1S0Z4dUlDQWdJSGR2Y210bWJHOTNPaUJIY21Gd2FGZHZjbXRtYkc5M1JHVm1hVzVwZEdsdmJpeGNiaUFnSUNCdWIyUmxPaUJIY21Gd2FFVjRaV04xZEdsdmJsQnNZVzVPYjJSbExGeHVJQ0FnSUdsdWNIVjBjem9nUjNKaGNHaEZlR1ZqZFhScGIyNVdZV3gxWlhNc1hHNGdJQ0FnWkdWd1pXNWtaVzVqZVVacGJtZGxjbkJ5YVc1MGN6b2dVbVZqYjNKa1BITjBjbWx1Wnl3Z2MzUnlhVzVuUGl4Y2JpQWdJQ0J1WVcxbGMzQmhZMlUvT2lCemRISnBibWRjYmlBZ0tUb2dSM0poY0doV1lXeDFaVXRsZVNCN1hHNGdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJSGR2Y210bWJHOTNTV1E2SUhkdmNtdG1iRzkzTG01aGJXVXNYRzRnSUNBZ0lDQnViMlJsU1dRNklHNXZaR1V1YVdRc1hHNGdJQ0FnSUNCbWFXNW5aWEp3Y21sdWREb2dkR2hwY3k1amIyMXdkWFJsUm1sdVoyVnljSEpwYm5Rb2QyOXlhMlpzYjNjc0lHNXZaR1VzSUdsdWNIVjBjeXdnWkdWd1pXNWtaVzVqZVVacGJtZGxjbkJ5YVc1MGN5a3NYRzRnSUNBZ0lDQnVZVzFsYzNCaFkyVXNYRzRnSUNBZ2ZUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEYjIxd2RYUmxjeUJoSUhOMFlXSnNaU0JtYVc1blpYSndjbWx1ZENCbWIzSWdZU0J1YjJSbEozTWdhVzV3ZFhSeklHRnVaQ0JrWlhCbGJtUmxibU5wWlhNdVhHNGdJQ0FxTDF4dUlDQmpiMjF3ZFhSbFJtbHVaMlZ5Y0hKcGJuUW9YRzRnSUNBZ2QyOXlhMlpzYjNjNklFZHlZWEJvVjI5eWEyWnNiM2RFWldacGJtbDBhVzl1TEZ4dUlDQWdJRzV2WkdVNklFZHlZWEJvUlhobFkzVjBhVzl1VUd4aGJrNXZaR1VzWEc0Z0lDQWdhVzV3ZFhSek9pQkhjbUZ3YUVWNFpXTjFkR2x2YmxaaGJIVmxjeXhjYmlBZ0lDQmtaWEJsYm1SbGJtTjVSbWx1WjJWeWNISnBiblJ6T2lCU1pXTnZjbVE4YzNSeWFXNW5MQ0J6ZEhKcGJtYytYRzRnSUNrNklITjBjbWx1WnlCN1hHNGdJQ0FnWTI5dWMzUWdaR0YwWVNBOUlIdGNiaUFnSUNBZ0lIZHZjbXRtYkc5M1NXUTZJSGR2Y210bWJHOTNMbTVoYldVc1hHNGdJQ0FnSUNCdWIyUmxTV1E2SUc1dlpHVXVhV1FzWEc0Z0lDQWdJQ0J1YjJSbFMybHVaRG9nYm05a1pTNXJhVzVrTEZ4dUlDQWdJQ0FnYm05a1pVUmxabWx1YVhScGIyNVdaWEp6YVc5dU9pQW9ibTlrWlM1a1pXWnBibWwwYVc5dUlHRnpJR0Z1ZVNrL0xtZHlZWEJvUHk1dFpYUmhaR0YwWVQ4dWRtVnljMmx2Yml4Y2JpQWdJQ0FnSUdsdWNIVjBjem9nZEdocGN5NXpkR0ZpYkdWVFpYSnBZV3hwZW1Vb2FXNXdkWFJ6S1N4Y2JpQWdJQ0FnSUdSbGNHVnVaR1Z1WTNsR2FXNW5aWEp3Y21sdWRITTZJSFJvYVhNdWMzUmhZbXhsVTJWeWFXRnNhWHBsS0dSbGNHVnVaR1Z1WTNsR2FXNW5aWEp3Y21sdWRITXBMRnh1SUNBZ0lIMDdYRzRnSUNBZ1kyOXVjM1FnYW5OdmJpQTlJSFJvYVhNdWMzUmhZbXhsVTJWeWFXRnNhWHBsS0dSaGRHRXBPMXh1SUNBZ0lDOHZJRlZ6WlNCaElHUmxkR1Z5YldsdWFYTjBhV01nYm05dUxXTnllWEIwYjJkeVlYQm9hV01nYUdGemFDQjBhR0YwSUhkdmNtdHpJR2x1SUdKdmRHZ2dZbkp2ZDNObGNseHVJQ0FnSUM4dklHRnVaQ0JPYjJSbElHVnVkbWx5YjI1dFpXNTBjeUIzYVhSb2IzVjBJSEpsY1hWcGNtbHVaeUJnYm05a1pUcGpjbmx3ZEc5Z0xseHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuTnBiWEJzWlVoaGMyZ29hbk52YmlrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QmhJSFJ2Y0c5c2IyZHBZMkZzSUc5eVpHVnlhVzVuSUc5bUlIUm9aU0JuYVhabGJpQnViMlJsSUhObGRDNWNiaUFnSUNvdlhHNGdJSEJ5YVhaaGRHVWdkRzl3YjJ4dloybGpZV3hQY21SbGNpaGNiaUFnSUNCd2JHRnVPaUJIY21Gd2FFVjRaV04xZEdsdmJsQnNZVzRzWEc0Z0lDQWdibTlrWlZObGREb2dVMlYwUEhOMGNtbHVaejVjYmlBZ0tUb2djM1J5YVc1blcxMGdlMXh1SUNBZ0lHTnZibk4wSUhKbGMzVnNkRG9nYzNSeWFXNW5XMTBnUFNCYlhUdGNiaUFnSUNCamIyNXpkQ0IyYVhOcGRHVmtJRDBnYm1WM0lGTmxkRHh6ZEhKcGJtYytLQ2s3WEc0Z0lDQWdZMjl1YzNRZ2RtbHphWFFnUFNBb2JtOWtaVWxrT2lCemRISnBibWNwSUQwK0lIdGNiaUFnSUNBZ0lHbG1JQ2gyYVhOcGRHVmtMbWhoY3lodWIyUmxTV1FwS1NCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0IyYVhOcGRHVmtMbUZrWkNodWIyUmxTV1FwTzF4dUlDQWdJQ0FnWTI5dWMzUWdaR1Z3Y3lBOUlFZHlZWEJvVkc5d2IyeHZaM2t1ZFhCemRISmxZVzFPYjJSbGN5aHViMlJsU1dRc0lIQnNZVzR1YVc1amIyMXBibWRDZVU1dlpHVXNJR1poYkhObEtUdGNiaUFnSUNBZ0lHWnZjaUFvWTI5dWMzUWdaR1Z3SUc5bUlHUmxjSE1wSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLRzV2WkdWVFpYUXVhR0Z6S0dSbGNDa3BJSFpwYzJsMEtHUmxjQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhOMWJIUXVjSFZ6YUNodWIyUmxTV1FwTzF4dUlDQWdJSDA3WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0J1YjJSbFNXUWdiMllnYm05a1pWTmxkQ2tnZG1semFYUW9ibTlrWlVsa0tUdGNiaUFnSUNCeVpYUjFjbTRnY21WemRXeDBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOdmJYQjFkR1Z6SUdacGJtZGxjbkJ5YVc1MGN5Qm1iM0lnWVd4c0lIVndjM1J5WldGdElHUmxjR1Z1WkdWdVkybGxjeUJ2WmlCaElHNXZaR1V1WEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUdSbGNHVnVaR1Z1WTNsR2FXNW5aWEp3Y21sdWRITW9YRzRnSUNBZ2NHeGhiam9nUjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1TEZ4dUlDQWdJRzV2WkdWSlpEb2djM1J5YVc1bkxGeHVJQ0FnSUhKbGMzVnNkRG9nUjNKaGNHaEZlR1ZqZFhScGIyNVNaWE4xYkhSY2JpQWdLVG9nVW1WamIzSmtQSE4wY21sdVp5d2djM1J5YVc1blBpQjdYRzRnSUNBZ1kyOXVjM1FnWkdWd2N5QTlJSFJvYVhNdVpHVndaVzVrWlc1amVWSmxjMjlzZG1WeUxtZGxkRVJsY0dWdVpHVnVZMmxsY3lod2JHRnVMQ0J1YjJSbFNXUXBPMXh1SUNBZ0lHTnZibk4wSUdacGJtZGxjbkJ5YVc1MGN6b2dVbVZqYjNKa1BITjBjbWx1Wnl3Z2MzUnlhVzVuUGlBOUlIdDlPMXh1SUNBZ0lHWnZjaUFvWTI5dWMzUWdaR1Z3SUc5bUlHUmxjSE1wSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJRzV2WkdVZ1BTQndiR0Z1TG01dlpHVnpMbVpwYm1Rb0tHNHBJRDArSUc0dWFXUWdQVDA5SUdSbGNDazdYRzRnSUNBZ0lDQnBaaUFvYm05a1pTa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmtaWEJTWlhOMWJIUWdQU0J5WlhOMWJIUXVibTlrWlZKbGMzVnNkSE5iWkdWd1hUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FXNXdkWFJ6SUQwZ1pHVndVbVZ6ZFd4MFB5NXBibkIxZEhNZ1B6OGdlMzA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzVsYzNSbFpFUmxjSE1nUFNCMGFHbHpMbVJsY0dWdVpHVnVZM2xHYVc1blpYSndjbWx1ZEhNb2NHeGhiaXdnWkdWd0xDQnlaWE4xYkhRcE8xeHVJQ0FnSUNBZ0lDQm1hVzVuWlhKd2NtbHVkSE5iWkdWd1hTQTlJSFJvYVhNdVkyOXRjSFYwWlVacGJtZGxjbkJ5YVc1MEtIQnNZVzR1ZDI5eWEyWnNiM2NzSUc1dlpHVXNJR2x1Y0hWMGN5d2dibVZ6ZEdWa1JHVndjeWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCbWFXNW5aWEp3Y21sdWRITTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVTJWeWFXRnNhWHBsY3lCaElIWmhiSFZsSUhkcGRHZ2djbVZqZFhKemFYWmxiSGtnYzI5eWRHVmtJR3RsZVhNZ1ptOXlJSE4wWVdKc1pTQm9ZWE5vYVc1bkxseHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQnpkR0ZpYkdWVFpYSnBZV3hwZW1Vb2RtRnNkV1U2SUhWdWEyNXZkMjRwT2lCemRISnBibWNnZTF4dUlDQWdJR2xtSUNoMllXeDFaU0E5UFQwZ2JuVnNiQ0I4ZkNCMGVYQmxiMllnZG1Gc2RXVWdJVDA5SUZ3aWIySnFaV04wWENJcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCS1UwOU9Mbk4wY21sdVoybG1lU2gyWVd4MVpTazdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0haaGJIVmxLU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJR0JiSkh0MllXeDFaUzV0WVhBb0tIWXBJRDArSUhSb2FYTXVjM1JoWW14bFUyVnlhV0ZzYVhwbEtIWXBLUzVxYjJsdUtGd2lMRndpS1gxZFlEdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdhMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLSFpoYkhWbEtTNXpiM0owS0NrN1hHNGdJQ0FnWTI5dWMzUWdjR0ZwY25NZ1BTQnJaWGx6TG0xaGNDaGNiaUFnSUNBZ0lDaHJLU0E5UGlCZ0pIdEtVMDlPTG5OMGNtbHVaMmxtZVNocktYMDZKSHQwYUdsekxuTjBZV0pzWlZObGNtbGhiR2w2WlNnb2RtRnNkV1VnWVhNZ1lXNTVLVnRyWFNsOVlGeHVJQ0FnSUNrN1hHNGdJQ0FnY21WMGRYSnVJR0I3Skh0d1lXbHljeTVxYjJsdUtGd2lMRndpS1gxOVlEdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJUYVcxd2JHVWdibTl1TFdOeWVYQjBiMmR5WVhCb2FXTWdhR0Z6YUNCbWIzSWdZbkp2ZDNObGNpQmxiblpwY205dWJXVnVkSE1nZDJobGNtVmNiaUFnSUNvZ1lHNXZaR1U2WTNKNWNIUnZZQ0JwY3lCMWJtRjJZV2xzWVdKc1pTNGdVSEp2WkhWalpYTWdZU0JrWlhSbGNtMXBibWx6ZEdsaklHaGxlQzFzYVd0bElITjBjbWx1WjF4dUlDQWdLaUJtY205dElIUm9aU0JwYm5CMWRDNGdWR2hwY3lCcGN5Qk9UMVFnWTNKNWNIUnZaM0poY0docFkyRnNiSGtnYzJWamRYSmxJR0oxZENCcGN5QnpkV1ptYVdOcFpXNTBYRzRnSUNBcUlHWnZjaUJtYVc1blpYSndjbWx1ZEMxaVlYTmxaQ0JqWVdOb1pTQnJaWGx6TGx4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCemFXMXdiR1ZJWVhOb0tITjBjam9nYzNSeWFXNW5LVG9nYzNSeWFXNW5JSHRjYmlBZ0lDQnNaWFFnYUdGemFDQTlJREE3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J6ZEhJdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHTm9ZWElnUFNCemRISXVZMmhoY2tOdlpHVkJkQ2hwS1R0Y2JpQWdJQ0FnSUdoaGMyZ2dQU0FvYUdGemFDQThQQ0ExS1NBdElHaGhjMmdnS3lCamFHRnlPMXh1SUNBZ0lDQWdhR0Z6YUNCOFBTQXdPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnWUdad1h5UjdUV0YwYUM1aFluTW9hR0Z6YUNrdWRHOVRkSEpwYm1jb01UWXBMbkJoWkZOMFlYSjBLRGdzSUZ3aU1Gd2lLWDFmSkh0emRISXViR1Z1WjNSb2ZXQTdYRzRnSUgxY2JuMWNibHh1ZG05cFpDQkhVa0ZRU0Y5UVNVNU9TVTVIWDAxRlZFRkVRVlJCWDB0RldUdGNiaUpkZlE9PSJdfQ==
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dyYXBoL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9wbGFubmluZy9HcmFwaEV4ZWN1dGlvblBsYW5cbiAqIEBzdW1tYXJ5IFRoZSBjb21wbGV0ZSBleGVjdXRpb24gcGxhbiBmb3IgYSB3b3JrZmxvdy5cbiAqIEBkZXNjcmlwdGlvbiBDb250YWlucyByZXNvbHZlZCBub2RlcywgZWRnZXMsIHRvcG9sb2dpY2FsIGxheWVycywgYW5kIGluY29taW5nL291dGdvaW5nIG1hcHMuXG4gKi9cbmltcG9ydCB0eXBlIHsgR3JhcGhXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25QbGFuTm9kZSB9IGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uUGxhbk5vZGVcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25QbGFuRWRnZSB9IGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uUGxhbkVkZ2VcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXIgfSBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblBsYW5MYXllclwiO1xuXG4vKipcbiAqIFRoZSByZXNvbHZlZCBleGVjdXRpb24gcGxhbiBmb3IgYSBzaW5nbGUgd29ya2Zsb3cuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhFeGVjdXRpb25QbGFuIHtcbiAgd29ya2Zsb3c6IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uO1xuICB3b3JrZmxvd0lkOiBzdHJpbmc7XG4gIG5vZGVzOiBHcmFwaEV4ZWN1dGlvblBsYW5Ob2RlW107XG4gIGVkZ2VzOiBHcmFwaEV4ZWN1dGlvblBsYW5FZGdlW107XG4gIGxheWVyczogR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXJbXTtcbiAgaW5jb21pbmdCeU5vZGU6IE1hcDxzdHJpbmcsIEdyYXBoRXhlY3V0aW9uUGxhbkVkZ2VbXT47XG4gIG91dGdvaW5nQnlOb2RlOiBNYXA8c3RyaW5nLCBHcmFwaEV4ZWN1dGlvblBsYW5FZGdlW10+O1xufVxuIl19
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiR3JhcGhFeGVjdXRpb25QbGFuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsOCtDQUE4K0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSM0poY0doRmVHVmpkWFJwYjI1UWJHRnVMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2TGk0dkxpNHZjM0pqTDJkeVlYQm9MM0JzWVc1dWFXNW5MMGR5WVhCb1JYaGxZM1YwYVc5dVVHeGhiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCQWJXOWtkV3hsSUdsdWRHVm5jbUYwYVc5dWN5OW5jbUZ3YUM5d2JHRnVibWx1Wnk5SGNtRndhRVY0WldOMWRHbHZibEJzWVc1Y2JpQXFJRUJ6ZFcxdFlYSjVJRlJvWlNCamIyMXdiR1YwWlNCbGVHVmpkWFJwYjI0Z2NHeGhiaUJtYjNJZ1lTQjNiM0pyWm14dmR5NWNiaUFxSUVCa1pYTmpjbWx3ZEdsdmJpQkRiMjUwWVdsdWN5QnlaWE52YkhabFpDQnViMlJsY3l3Z1pXUm5aWE1zSUhSdmNHOXNiMmRwWTJGc0lHeGhlV1Z5Y3l3Z1lXNWtJR2x1WTI5dGFXNW5MMjkxZEdkdmFXNW5JRzFoY0hNdVhHNGdLaTljYm1sdGNHOXlkQ0IwZVhCbElIc2dSM0poY0doWGIzSnJabXh2ZDBSbFptbHVhWFJwYjI0Z2ZTQm1jbTl0SUZ3aVFHUmxZMkZtTFhSekwzVnBMV1JsWTI5eVlYUnZjbk12WjNKaGNHaGNJanRjYm1sdGNHOXlkQ0IwZVhCbElIc2dSM0poY0doRmVHVmpkWFJwYjI1UWJHRnVUbTlrWlNCOUlHWnliMjBnWENJdUwwZHlZWEJvUlhobFkzVjBhVzl1VUd4aGJrNXZaR1ZjSWp0Y2JtbHRjRzl5ZENCMGVYQmxJSHNnUjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1UldSblpTQjlJR1p5YjIwZ1hDSXVMMGR5WVhCb1JYaGxZM1YwYVc5dVVHeGhia1ZrWjJWY0lqdGNibWx0Y0c5eWRDQjBlWEJsSUhzZ1IzSmhjR2hGZUdWamRYUnBiMjVRYkdGdVRHRjVaWElnZlNCbWNtOXRJRndpTGk5SGNtRndhRVY0WldOMWRHbHZibEJzWVc1TVlYbGxjbHdpTzF4dVhHNHZLaXBjYmlBcUlGUm9aU0J5WlhOdmJIWmxaQ0JsZUdWamRYUnBiMjRnY0d4aGJpQm1iM0lnWVNCemFXNW5iR1VnZDI5eWEyWnNiM2N1WEc0Z0tpOWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdSM0poY0doRmVHVmpkWFJwYjI1UWJHRnVJSHRjYmlBZ2QyOXlhMlpzYjNjNklFZHlZWEJvVjI5eWEyWnNiM2RFWldacGJtbDBhVzl1TzF4dUlDQjNiM0pyWm14dmQwbGtPaUJ6ZEhKcGJtYzdYRzRnSUc1dlpHVnpPaUJIY21Gd2FFVjRaV04xZEdsdmJsQnNZVzVPYjJSbFcxMDdYRzRnSUdWa1oyVnpPaUJIY21Gd2FFVjRaV04xZEdsdmJsQnNZVzVGWkdkbFcxMDdYRzRnSUd4aGVXVnljem9nUjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1VEdGNVpYSmJYVHRjYmlBZ2FXNWpiMjFwYm1kQ2VVNXZaR1U2SUUxaGNEeHpkSEpwYm1jc0lFZHlZWEJvUlhobFkzVjBhVzl1VUd4aGJrVmtaMlZiWFQ0N1hHNGdJRzkxZEdkdmFXNW5RbmxPYjJSbE9pQk5ZWEE4YzNSeWFXNW5MQ0JIY21Gd2FFVjRaV04xZEdsdmJsQnNZVzVGWkdkbFcxMCtPMXh1ZlZ4dUlsMTkiXX0=
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuRWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ncmFwaC9wbGFubmluZy9HcmFwaEV4ZWN1dGlvblBsYW5FZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhbkVkZ2VcbiAqIEBzdW1tYXJ5IFBsYW4gZWRnZSB0eXBlIGZvciB0aGUgZXhlY3V0aW9uIHBsYW4uXG4gKiBAZGVzY3JpcHRpb24gUmVwcmVzZW50cyBhIGRpcmVjdGVkIHZhbHVlIHJvdXRlIGJldHdlZW4gdHdvIGVuZHBvaW50cyAobm9kZS10by1ub2RlIG9yIG5vZGUtdG8td29ya2Zsb3ctYm91bmRhcnkpLlxuICovXG5cbi8qKlxuICogQW4gZWRnZSBpbiB0aGUgZXhlY3V0aW9uIHBsYW4gcmVwcmVzZW50aW5nIGEgdmFsdWUgcm91dGUgZnJvbSBhIHNvdXJjZVxuICogcG9ydCB0byBhIHRhcmdldCBwb3J0LlxuICpcbiAqIGBzb3VyY2VOb2RlSWRgIG9yIGB0YXJnZXROb2RlSWRgIG1heSBiZSB7QGxpbmsgR1JBUEhfV09SS0ZMT1dfQk9VTkRBUll9IHdoZW5cbiAqIHRoZSBlZGdlIGNvbm5lY3RzIHRvIHRoZSB3b3JrZmxvdyBib3VuZGFyeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaEV4ZWN1dGlvblBsYW5FZGdlIHtcbiAgaWQ6IHN0cmluZztcbiAgc291cmNlTm9kZUlkOiBzdHJpbmc7XG4gIHNvdXJjZVBvcnQ6IHN0cmluZztcbiAgdGFyZ2V0Tm9kZUlkOiBzdHJpbmc7XG4gIHRhcmdldFBvcnQ6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG4iXX0=
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuRWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkdyYXBoRXhlY3V0aW9uUGxhbkVkZ2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxrdUNBQWt1QyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvcGxhbm5pbmcvR3JhcGhFeGVjdXRpb25QbGFuRWRnZVxuICogQHN1bW1hcnkgUGxhbiBlZGdlIHR5cGUgZm9yIHRoZSBleGVjdXRpb24gcGxhbi5cbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIGEgZGlyZWN0ZWQgdmFsdWUgcm91dGUgYmV0d2VlbiB0d28gZW5kcG9pbnRzIChub2RlLXRvLW5vZGUgb3Igbm9kZS10by13b3JrZmxvdy1ib3VuZGFyeSkuXG4gKi9cbmV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVIzSmhjR2hGZUdWamRYUnBiMjVRYkdGdVJXUm5aUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMM055WXk5bmNtRndhQzl3YkdGdWJtbHVaeTlIY21Gd2FFVjRaV04xZEdsdmJsQnNZVzVGWkdkbExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCT3pzN08wZEJTVWNpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVCdGIyUjFiR1VnYVc1MFpXZHlZWFJwYjI1ekwyZHlZWEJvTDNCc1lXNXVhVzVuTDBkeVlYQm9SWGhsWTNWMGFXOXVVR3hoYmtWa1oyVmNiaUFxSUVCemRXMXRZWEo1SUZCc1lXNGdaV1JuWlNCMGVYQmxJR1p2Y2lCMGFHVWdaWGhsWTNWMGFXOXVJSEJzWVc0dVhHNGdLaUJBWkdWelkzSnBjSFJwYjI0Z1VtVndjbVZ6Wlc1MGN5QmhJR1JwY21WamRHVmtJSFpoYkhWbElISnZkWFJsSUdKbGRIZGxaVzRnZEhkdklHVnVaSEJ2YVc1MGN5QW9ibTlrWlMxMGJ5MXViMlJsSUc5eUlHNXZaR1V0ZEc4dGQyOXlhMlpzYjNjdFltOTFibVJoY25rcExseHVJQ292WEc1Y2JpOHFLbHh1SUNvZ1FXNGdaV1JuWlNCcGJpQjBhR1VnWlhobFkzVjBhVzl1SUhCc1lXNGdjbVZ3Y21WelpXNTBhVzVuSUdFZ2RtRnNkV1VnY205MWRHVWdabkp2YlNCaElITnZkWEpqWlZ4dUlDb2djRzl5ZENCMGJ5QmhJSFJoY21kbGRDQndiM0owTGx4dUlDcGNiaUFxSUdCemIzVnlZMlZPYjJSbFNXUmdJRzl5SUdCMFlYSm5aWFJPYjJSbFNXUmdJRzFoZVNCaVpTQjdRR3hwYm1zZ1IxSkJVRWhmVjA5U1MwWk1UMWRmUWs5VlRrUkJVbGw5SUhkb1pXNWNiaUFxSUhSb1pTQmxaR2RsSUdOdmJtNWxZM1J6SUhSdklIUm9aU0IzYjNKclpteHZkeUJpYjNWdVpHRnllUzVjYmlBcUwxeHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkhjbUZ3YUVWNFpXTjFkR2x2YmxCc1lXNUZaR2RsSUh0Y2JpQWdhV1E2SUhOMGNtbHVaenRjYmlBZ2MyOTFjbU5sVG05a1pVbGtPaUJ6ZEhKcGJtYzdYRzRnSUhOdmRYSmpaVkJ2Y25RNklITjBjbWx1Wnp0Y2JpQWdkR0Z5WjJWMFRtOWtaVWxrT2lCemRISnBibWM3WEc0Z0lIUmhjbWRsZEZCdmNuUTZJSE4wY21sdVp6dGNiaUFnYkdGaVpXdy9PaUJ6ZEhKcGJtYzdYRzRnSUcxbGRHRmtZWFJoUHpvZ1VtVmpiM0prUEhOMGNtbHVaeXdnZFc1cmJtOTNiajQ3WEc1OVhHNGlYWDA9Il19
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ3JhcGgvcGxhbm5pbmcvR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvcGxhbm5pbmcvR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXJcbiAqIEBzdW1tYXJ5IEEgbGF5ZXIgb2Ygbm9kZXMgdGhhdCBjYW4gZXhlY3V0ZSBpbiBwYXJhbGxlbC5cbiAqIEBkZXNjcmlwdGlvbiBQcm9kdWNlZCBieSB0aGUgdG9wb2xvZ2ljYWwgcGxhbm5lcjsgYWxsIG5vZGVzIGluIGEgbGF5ZXIgaGF2ZSBubyBkZXBlbmRlbmNpZXMgb24gZWFjaCBvdGhlci5cbiAqL1xuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvblBsYW5Ob2RlIH0gZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25QbGFuTm9kZVwiO1xuXG4vKipcbiAqIEEgdG9wb2xvZ2ljYWwgbGF5ZXIgb2Ygbm9kZXMgdGhhdCBtYXkgZXhlY3V0ZSBpbiBwYXJhbGxlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaEV4ZWN1dGlvblBsYW5MYXllciB7XG4gIGluZGV4OiBudW1iZXI7XG4gIG5vZGVzOiBHcmFwaEV4ZWN1dGlvblBsYW5Ob2RlW107XG59XG4iXX0=
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJHcmFwaEV4ZWN1dGlvblBsYW5MYXllci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDg3QkFBODdCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1VEdGNVpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTh1TGk4dUxpOXpjbU12WjNKaGNHZ3ZjR3hoYm01cGJtY3ZSM0poY0doRmVHVmpkWFJwYjI1UWJHRnVUR0Y1WlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRRzF2WkhWc1pTQnBiblJsWjNKaGRHbHZibk12WjNKaGNHZ3ZjR3hoYm01cGJtY3ZSM0poY0doRmVHVmpkWFJwYjI1UWJHRnVUR0Y1WlhKY2JpQXFJRUJ6ZFcxdFlYSjVJRUVnYkdGNVpYSWdiMllnYm05a1pYTWdkR2hoZENCallXNGdaWGhsWTNWMFpTQnBiaUJ3WVhKaGJHeGxiQzVjYmlBcUlFQmtaWE5qY21sd2RHbHZiaUJRY205a2RXTmxaQ0JpZVNCMGFHVWdkRzl3YjJ4dloybGpZV3dnY0d4aGJtNWxjanNnWVd4c0lHNXZaR1Z6SUdsdUlHRWdiR0Y1WlhJZ2FHRjJaU0J1YnlCa1pYQmxibVJsYm1OcFpYTWdiMjRnWldGamFDQnZkR2hsY2k1Y2JpQXFMMXh1YVcxd2IzSjBJSFI1Y0dVZ2V5QkhjbUZ3YUVWNFpXTjFkR2x2YmxCc1lXNU9iMlJsSUgwZ1puSnZiU0JjSWk0dlIzSmhjR2hGZUdWamRYUnBiMjVRYkdGdVRtOWtaVndpTzF4dVhHNHZLaXBjYmlBcUlFRWdkRzl3YjJ4dloybGpZV3dnYkdGNVpYSWdiMllnYm05a1pYTWdkR2hoZENCdFlYa2daWGhsWTNWMFpTQnBiaUJ3WVhKaGJHeGxiQzVjYmlBcUwxeHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkhjbUZ3YUVWNFpXTjFkR2x2YmxCc1lXNU1ZWGxsY2lCN1hHNGdJR2x1WkdWNE9pQnVkVzFpWlhJN1hHNGdJRzV2WkdWek9pQkhjbUZ3YUVWNFpXTjFkR2x2YmxCc1lXNU9iMlJsVzEwN1hHNTlYRzRpWFgwPSJdfQ==
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ncmFwaC9wbGFubmluZy9HcmFwaEV4ZWN1dGlvblBsYW5Ob2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhbk5vZGVcbiAqIEBzdW1tYXJ5IFBsYW4gbm9kZSB0eXBlIGZvciB0aGUgZXhlY3V0aW9uIHBsYW4uXG4gKiBAZGVzY3JpcHRpb24gUmVwcmVzZW50cyBhIHNpbmdsZSBub2RlIHJlc29sdmVkIGZyb20gYSB3b3JrZmxvdyBkZWZpbml0aW9uLCByZWFkeSBmb3IgZXhlY3V0aW9uLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIEdyYXBoTm9kZURlZmluaXRpb24sXG4gIEdyYXBoV29ya2Zsb3dOb2RlTWV0YWRhdGEsXG59IGZyb20gXCJAZGVjYWYtdHMvdWktZGVjb3JhdG9ycy9ncmFwaFwiO1xuXG4vKipcbiAqIEEgbm9kZSBpbiB0aGUgZXhlY3V0aW9uIHBsYW4sIGRlcml2ZWQgZnJvbSBhIHdvcmtmbG93J3Mgbm9kZSBtZXRhZGF0YSBhbmRcbiAqIGl0cyByZXNvbHZlZCBncmFwaCBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoRXhlY3V0aW9uUGxhbk5vZGUge1xuICBpZDogc3RyaW5nO1xuICBraW5kOiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBzb3VyY2U6IEdyYXBoV29ya2Zsb3dOb2RlTWV0YWRhdGE7XG4gIGRlZmluaXRpb246IEdyYXBoTm9kZURlZmluaXRpb247XG4gIGlucHV0UG9ydHM6IHN0cmluZ1tdO1xuICBvdXRwdXRQb3J0czogc3RyaW5nW107XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG4iXX0=
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkdyYXBoRXhlY3V0aW9uUGxhbk5vZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwwdUNBQTB1QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVIzSmhjR2hGZUdWamRYUnBiMjVRYkdGdVRtOWtaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMM055WXk5bmNtRndhQzl3YkdGdWJtbHVaeTlIY21Gd2FFVjRaV04xZEdsdmJsQnNZVzVPYjJSbExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRUJ0YjJSMWJHVWdhVzUwWldkeVlYUnBiMjV6TDJkeVlYQm9MM0JzWVc1dWFXNW5MMGR5WVhCb1JYaGxZM1YwYVc5dVVHeGhiazV2WkdWY2JpQXFJRUJ6ZFcxdFlYSjVJRkJzWVc0Z2JtOWtaU0IwZVhCbElHWnZjaUIwYUdVZ1pYaGxZM1YwYVc5dUlIQnNZVzR1WEc0Z0tpQkFaR1Z6WTNKcGNIUnBiMjRnVW1Wd2NtVnpaVzUwY3lCaElITnBibWRzWlNCdWIyUmxJSEpsYzI5c2RtVmtJR1p5YjIwZ1lTQjNiM0pyWm14dmR5QmtaV1pwYm1sMGFXOXVMQ0J5WldGa2VTQm1iM0lnWlhobFkzVjBhVzl1TGx4dUlDb3ZYRzVwYlhCdmNuUWdkSGx3WlNCN1hHNGdJRWR5WVhCb1RtOWtaVVJsWm1sdWFYUnBiMjRzWEc0Z0lFZHlZWEJvVjI5eWEyWnNiM2RPYjJSbFRXVjBZV1JoZEdFc1hHNTlJR1p5YjIwZ1hDSkFaR1ZqWVdZdGRITXZkV2t0WkdWamIzSmhkRzl5Y3k5bmNtRndhRndpTzF4dVhHNHZLaXBjYmlBcUlFRWdibTlrWlNCcGJpQjBhR1VnWlhobFkzVjBhVzl1SUhCc1lXNHNJR1JsY21sMlpXUWdabkp2YlNCaElIZHZjbXRtYkc5M0ozTWdibTlrWlNCdFpYUmhaR0YwWVNCaGJtUmNiaUFxSUdsMGN5QnlaWE52YkhabFpDQm5jbUZ3YUNCa1pXWnBibWwwYVc5dUxseHVJQ292WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVkeVlYQm9SWGhsWTNWMGFXOXVVR3hoYms1dlpHVWdlMXh1SUNCcFpEb2djM1J5YVc1bk8xeHVJQ0JyYVc1a09pQnpkSEpwYm1jN1hHNGdJR3hoWW1Wc1B6b2djM1J5YVc1bk8xeHVJQ0J6YjNWeVkyVTZJRWR5WVhCb1YyOXlhMlpzYjNkT2IyUmxUV1YwWVdSaGRHRTdYRzRnSUdSbFptbHVhWFJwYjI0NklFZHlZWEJvVG05a1pVUmxabWx1YVhScGIyNDdYRzRnSUdsdWNIVjBVRzl5ZEhNNklITjBjbWx1WjF0ZE8xeHVJQ0J2ZFhSd2RYUlFiM0owY3pvZ2MzUnlhVzVuVzEwN1hHNGdJRzFsZEdGa1lYUmhQem9nVW1WamIzSmtQSE4wY21sdVp5d2dkVzVyYm05M2JqNDdYRzU5WEc0aVhYMD0iXX0=
|