@decaf-ts/integrations 0.3.5 → 0.3.7
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 +1608 -7
- package/dist/integrations.js +1841 -5
- package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +13 -5
- package/lib/cjs/graph/nodes/base.cjs +35 -0
- package/lib/cjs/graph/nodes/flow-control.cjs +31 -3
- package/lib/cjs/graph/nodes/index.cjs +3 -2
- package/lib/cjs/graph/types.cjs +2 -2
- package/lib/cjs/index.cjs +6 -5
- package/lib/cjs/namespaces/index.cjs +26 -0
- package/lib/cjs/namespaces/models/authorization-model.cjs +12 -0
- package/lib/cjs/namespaces/models/effective-permission.model.cjs +95 -0
- package/lib/cjs/namespaces/models/group-membership.model.cjs +66 -0
- package/lib/cjs/namespaces/models/group.model.cjs +74 -0
- package/lib/cjs/namespaces/models/index.cjs +39 -0
- package/lib/cjs/namespaces/models/inheritance-block.model.cjs +76 -0
- package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +66 -0
- package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +73 -0
- package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +64 -0
- package/lib/cjs/namespaces/models/org-unit.model.cjs +102 -0
- package/lib/cjs/namespaces/models/permission.model.cjs +64 -0
- package/lib/cjs/namespaces/models/principal.model.cjs +77 -0
- package/lib/cjs/namespaces/models/protected-resource.model.cjs +99 -0
- package/lib/cjs/namespaces/models/resource-grant.model.cjs +88 -0
- package/lib/cjs/namespaces/models/role-assignment.model.cjs +98 -0
- package/lib/cjs/namespaces/models/role-permission.model.cjs +55 -0
- package/lib/cjs/namespaces/models/role.model.cjs +84 -0
- package/lib/cjs/namespaces/models/storage-binding.model.cjs +85 -0
- package/lib/cjs/namespaces/models/tenant-membership.model.cjs +67 -0
- package/lib/cjs/namespaces/models/tenant-profile.model.cjs +64 -0
- package/lib/cjs/namespaces/models/tenant.model.cjs +88 -0
- package/lib/cjs/namespaces/models/user.model.cjs +75 -0
- package/lib/cjs/namespaces/org-based-authorization-system.cjs +286 -0
- package/lib/cjs/namespaces/org-based-authorization-system.models.cjs +968 -0
- package/lib/cjs/namespaces/org-based-authorization-system.services.cjs +1046 -0
- package/lib/cjs/namespaces/services/authz.service.cjs +76 -0
- package/lib/cjs/namespaces/services/bootstrap.service.cjs +112 -0
- package/lib/cjs/namespaces/services/effective-permission.service.cjs +150 -0
- package/lib/cjs/namespaces/services/group-membership.service.cjs +42 -0
- package/lib/cjs/namespaces/services/group.service.cjs +30 -0
- package/lib/cjs/namespaces/services/index.cjs +42 -0
- package/lib/cjs/namespaces/services/inheritance-block.service.cjs +32 -0
- package/lib/cjs/namespaces/services/org-unit-closure.service.cjs +55 -0
- package/lib/cjs/namespaces/services/org-unit-membership.service.cjs +34 -0
- package/lib/cjs/namespaces/services/org-unit-profile.service.cjs +23 -0
- package/lib/cjs/namespaces/services/org-unit.service.cjs +160 -0
- package/lib/cjs/namespaces/services/permission.service.cjs +29 -0
- package/lib/cjs/namespaces/services/principal.service.cjs +35 -0
- package/lib/cjs/namespaces/services/protected-resource.service.cjs +43 -0
- package/lib/cjs/namespaces/services/resource-grant.service.cjs +45 -0
- package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs +24 -0
- package/lib/cjs/namespaces/services/role-assignment.service.cjs +41 -0
- package/lib/cjs/namespaces/services/role-permission.service.cjs +51 -0
- package/lib/cjs/namespaces/services/role.service.cjs +45 -0
- package/lib/cjs/namespaces/services/storage-binding.service.cjs +39 -0
- package/lib/cjs/namespaces/services/system-management.service.cjs +102 -0
- package/lib/cjs/namespaces/services/tenant-membership.service.cjs +33 -0
- package/lib/cjs/namespaces/services/tenant-profile.service.cjs +28 -0
- package/lib/cjs/namespaces/services/tenant.service.cjs +36 -0
- package/lib/cjs/namespaces/services/user.service.cjs +32 -0
- package/lib/cjs/namespaces/types.cjs +67 -0
- package/lib/cjs/namespaces/utils.cjs +161 -0
- package/lib/cjs/nest/authService.cjs +5 -2
- package/lib/cjs/nest/graph/GraphExecutionController.cjs +153 -0
- package/lib/cjs/nest/graph/GraphExecutionModule.cjs +84 -0
- package/lib/cjs/nest/graph/GraphExecutionResultModel.cjs +82 -0
- package/lib/cjs/nest/graph/GraphExecutionResultRepository.cjs +66 -0
- package/lib/cjs/nest/graph/GraphExecutorRegistryFactory.cjs +35 -0
- package/lib/cjs/nest/graph/index.cjs +28 -0
- package/lib/cjs/nest/index.cjs +3 -2
- package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +12 -4
- package/lib/esm/graph/nodes/base.js +30 -0
- package/lib/esm/graph/nodes/flow-control.js +31 -3
- package/lib/esm/graph/nodes/index.js +2 -1
- package/lib/esm/graph/types.js +1 -1
- package/lib/esm/index.js +5 -4
- package/lib/esm/namespaces/index.js +9 -0
- package/lib/esm/namespaces/models/authorization-model.js +7 -0
- package/lib/esm/namespaces/models/effective-permission.model.js +86 -0
- package/lib/esm/namespaces/models/group-membership.model.js +57 -0
- package/lib/esm/namespaces/models/group.model.js +65 -0
- package/lib/esm/namespaces/models/index.js +22 -0
- package/lib/esm/namespaces/models/inheritance-block.model.js +67 -0
- package/lib/esm/namespaces/models/org-unit-closure.model.js +57 -0
- package/lib/esm/namespaces/models/org-unit-membership.model.js +64 -0
- package/lib/esm/namespaces/models/org-unit-profile.model.js +55 -0
- package/lib/esm/namespaces/models/org-unit.model.js +93 -0
- package/lib/esm/namespaces/models/permission.model.js +55 -0
- package/lib/esm/namespaces/models/principal.model.js +68 -0
- package/lib/esm/namespaces/models/protected-resource.model.js +90 -0
- package/lib/esm/namespaces/models/resource-grant.model.js +79 -0
- package/lib/esm/namespaces/models/role-assignment.model.js +89 -0
- package/lib/esm/namespaces/models/role-permission.model.js +46 -0
- package/lib/esm/namespaces/models/role.model.js +75 -0
- package/lib/esm/namespaces/models/storage-binding.model.js +76 -0
- package/lib/esm/namespaces/models/tenant-membership.model.js +58 -0
- package/lib/esm/namespaces/models/tenant-profile.model.js +55 -0
- package/lib/esm/namespaces/models/tenant.model.js +79 -0
- package/lib/esm/namespaces/models/user.model.js +66 -0
- package/lib/esm/namespaces/org-based-authorization-system.js +283 -0
- package/lib/esm/namespaces/org-based-authorization-system.models.js +958 -0
- package/lib/esm/namespaces/org-based-authorization-system.services.js +1014 -0
- package/lib/esm/namespaces/services/authz.service.js +71 -0
- package/lib/esm/namespaces/services/bootstrap.service.js +102 -0
- package/lib/esm/namespaces/services/effective-permission.service.js +140 -0
- package/lib/esm/namespaces/services/group-membership.service.js +37 -0
- package/lib/esm/namespaces/services/group.service.js +25 -0
- package/lib/esm/namespaces/services/index.js +25 -0
- package/lib/esm/namespaces/services/inheritance-block.service.js +27 -0
- package/lib/esm/namespaces/services/org-unit-closure.service.js +50 -0
- package/lib/esm/namespaces/services/org-unit-membership.service.js +29 -0
- package/lib/esm/namespaces/services/org-unit-profile.service.js +18 -0
- package/lib/esm/namespaces/services/org-unit.service.js +150 -0
- package/lib/esm/namespaces/services/permission.service.js +24 -0
- package/lib/esm/namespaces/services/principal.service.js +30 -0
- package/lib/esm/namespaces/services/protected-resource.service.js +38 -0
- package/lib/esm/namespaces/services/resource-grant.service.js +40 -0
- package/lib/esm/namespaces/services/resource-lifecycle.service.js +19 -0
- package/lib/esm/namespaces/services/role-assignment.service.js +36 -0
- package/lib/esm/namespaces/services/role-permission.service.js +46 -0
- package/lib/esm/namespaces/services/role.service.js +40 -0
- package/lib/esm/namespaces/services/storage-binding.service.js +34 -0
- package/lib/esm/namespaces/services/system-management.service.js +92 -0
- package/lib/esm/namespaces/services/tenant-membership.service.js +28 -0
- package/lib/esm/namespaces/services/tenant-profile.service.js +23 -0
- package/lib/esm/namespaces/services/tenant.service.js +31 -0
- package/lib/esm/namespaces/services/user.service.js +27 -0
- package/lib/esm/namespaces/types.js +71 -0
- package/lib/esm/namespaces/utils.js +143 -0
- package/lib/esm/nest/authService.js +4 -1
- package/lib/esm/nest/graph/GraphExecutionController.js +144 -0
- package/lib/esm/nest/graph/GraphExecutionModule.js +76 -0
- package/lib/esm/nest/graph/GraphExecutionResultModel.js +73 -0
- package/lib/esm/nest/graph/GraphExecutionResultRepository.js +60 -0
- package/lib/esm/nest/graph/GraphExecutorRegistryFactory.js +31 -0
- package/lib/esm/nest/graph/index.js +11 -0
- package/lib/esm/nest/index.js +2 -1
- package/lib/types/graph/nodes/base.d.cts +28 -0
- package/lib/types/graph/nodes/base.d.mts +28 -0
- package/lib/types/graph/nodes/flow-control.d.cts +9 -1
- package/lib/types/graph/nodes/flow-control.d.mts +9 -1
- package/lib/types/graph/nodes/index.d.cts +1 -0
- package/lib/types/graph/nodes/index.d.mts +1 -0
- package/lib/types/graph/types.d.cts +15 -1
- package/lib/types/graph/types.d.mts +15 -1
- package/lib/types/index.d.cts +3 -2
- package/lib/types/index.d.mts +3 -2
- package/lib/types/namespaces/index.d.cts +8 -0
- package/lib/types/namespaces/index.d.mts +8 -0
- package/lib/types/namespaces/models/authorization-model.d.cts +4 -0
- package/lib/types/namespaces/models/authorization-model.d.mts +4 -0
- package/lib/types/namespaces/models/effective-permission.model.d.cts +18 -0
- package/lib/types/namespaces/models/effective-permission.model.d.mts +18 -0
- package/lib/types/namespaces/models/group-membership.model.d.cts +13 -0
- package/lib/types/namespaces/models/group-membership.model.d.mts +13 -0
- package/lib/types/namespaces/models/group.model.d.cts +15 -0
- package/lib/types/namespaces/models/group.model.d.mts +15 -0
- package/lib/types/namespaces/models/index.d.cts +21 -0
- package/lib/types/namespaces/models/index.d.mts +21 -0
- package/lib/types/namespaces/models/inheritance-block.model.d.cts +15 -0
- package/lib/types/namespaces/models/inheritance-block.model.d.mts +15 -0
- package/lib/types/namespaces/models/org-unit-closure.model.d.cts +12 -0
- package/lib/types/namespaces/models/org-unit-closure.model.d.mts +12 -0
- package/lib/types/namespaces/models/org-unit-membership.model.d.cts +15 -0
- package/lib/types/namespaces/models/org-unit-membership.model.d.mts +15 -0
- package/lib/types/namespaces/models/org-unit-profile.model.d.cts +11 -0
- package/lib/types/namespaces/models/org-unit-profile.model.d.mts +11 -0
- package/lib/types/namespaces/models/org-unit.model.d.cts +23 -0
- package/lib/types/namespaces/models/org-unit.model.d.mts +23 -0
- package/lib/types/namespaces/models/permission.model.d.cts +11 -0
- package/lib/types/namespaces/models/permission.model.d.mts +11 -0
- package/lib/types/namespaces/models/principal.model.d.cts +16 -0
- package/lib/types/namespaces/models/principal.model.d.mts +16 -0
- package/lib/types/namespaces/models/protected-resource.model.d.cts +21 -0
- package/lib/types/namespaces/models/protected-resource.model.d.mts +21 -0
- package/lib/types/namespaces/models/resource-grant.model.d.cts +18 -0
- package/lib/types/namespaces/models/resource-grant.model.d.mts +18 -0
- package/lib/types/namespaces/models/role-assignment.model.d.cts +20 -0
- package/lib/types/namespaces/models/role-assignment.model.d.mts +20 -0
- package/lib/types/namespaces/models/role-permission.model.d.cts +10 -0
- package/lib/types/namespaces/models/role-permission.model.d.mts +10 -0
- package/lib/types/namespaces/models/role.model.d.cts +17 -0
- package/lib/types/namespaces/models/role.model.d.mts +17 -0
- package/lib/types/namespaces/models/storage-binding.model.d.cts +15 -0
- package/lib/types/namespaces/models/storage-binding.model.d.mts +15 -0
- package/lib/types/namespaces/models/tenant-membership.model.d.cts +13 -0
- package/lib/types/namespaces/models/tenant-membership.model.d.mts +13 -0
- package/lib/types/namespaces/models/tenant-profile.model.d.cts +11 -0
- package/lib/types/namespaces/models/tenant-profile.model.d.mts +11 -0
- package/lib/types/namespaces/models/tenant.model.d.cts +19 -0
- package/lib/types/namespaces/models/tenant.model.d.mts +19 -0
- package/lib/types/namespaces/models/user.model.d.cts +14 -0
- package/lib/types/namespaces/models/user.model.d.mts +14 -0
- package/lib/types/namespaces/org-based-authorization-system.d.cts +299 -0
- package/lib/types/namespaces/org-based-authorization-system.d.mts +299 -0
- package/lib/types/namespaces/org-based-authorization-system.models.d.cts +212 -0
- package/lib/types/namespaces/org-based-authorization-system.models.d.mts +212 -0
- package/lib/types/namespaces/org-based-authorization-system.services.d.cts +217 -0
- package/lib/types/namespaces/org-based-authorization-system.services.d.mts +217 -0
- package/lib/types/namespaces/services/authz.service.d.cts +10 -0
- package/lib/types/namespaces/services/authz.service.d.mts +10 -0
- package/lib/types/namespaces/services/bootstrap.service.d.cts +21 -0
- package/lib/types/namespaces/services/bootstrap.service.d.mts +21 -0
- package/lib/types/namespaces/services/effective-permission.service.d.cts +13 -0
- package/lib/types/namespaces/services/effective-permission.service.d.mts +13 -0
- package/lib/types/namespaces/services/group-membership.service.d.cts +10 -0
- package/lib/types/namespaces/services/group-membership.service.d.mts +10 -0
- package/lib/types/namespaces/services/group.service.d.cts +9 -0
- package/lib/types/namespaces/services/group.service.d.mts +9 -0
- package/lib/types/namespaces/services/index.d.cts +24 -0
- package/lib/types/namespaces/services/index.d.mts +24 -0
- package/lib/types/namespaces/services/inheritance-block.service.d.cts +10 -0
- package/lib/types/namespaces/services/inheritance-block.service.d.mts +10 -0
- package/lib/types/namespaces/services/org-unit-closure.service.d.cts +11 -0
- package/lib/types/namespaces/services/org-unit-closure.service.d.mts +11 -0
- package/lib/types/namespaces/services/org-unit-membership.service.d.cts +11 -0
- package/lib/types/namespaces/services/org-unit-membership.service.d.mts +11 -0
- package/lib/types/namespaces/services/org-unit-profile.service.d.cts +7 -0
- package/lib/types/namespaces/services/org-unit-profile.service.d.mts +7 -0
- package/lib/types/namespaces/services/org-unit.service.d.cts +18 -0
- package/lib/types/namespaces/services/org-unit.service.d.mts +18 -0
- package/lib/types/namespaces/services/permission.service.d.cts +10 -0
- package/lib/types/namespaces/services/permission.service.d.mts +10 -0
- package/lib/types/namespaces/services/principal.service.d.cts +11 -0
- package/lib/types/namespaces/services/principal.service.d.mts +11 -0
- package/lib/types/namespaces/services/protected-resource.service.d.cts +13 -0
- package/lib/types/namespaces/services/protected-resource.service.d.mts +13 -0
- package/lib/types/namespaces/services/resource-grant.service.d.cts +12 -0
- package/lib/types/namespaces/services/resource-grant.service.d.mts +12 -0
- package/lib/types/namespaces/services/resource-lifecycle.service.d.cts +10 -0
- package/lib/types/namespaces/services/resource-lifecycle.service.d.mts +10 -0
- package/lib/types/namespaces/services/role-assignment.service.d.cts +12 -0
- package/lib/types/namespaces/services/role-assignment.service.d.mts +12 -0
- package/lib/types/namespaces/services/role-permission.service.d.cts +12 -0
- package/lib/types/namespaces/services/role-permission.service.d.mts +12 -0
- package/lib/types/namespaces/services/role.service.d.cts +12 -0
- package/lib/types/namespaces/services/role.service.d.mts +12 -0
- package/lib/types/namespaces/services/storage-binding.service.d.cts +12 -0
- package/lib/types/namespaces/services/storage-binding.service.d.mts +12 -0
- package/lib/types/namespaces/services/system-management.service.d.cts +14 -0
- package/lib/types/namespaces/services/system-management.service.d.mts +14 -0
- package/lib/types/namespaces/services/tenant-membership.service.d.cts +11 -0
- package/lib/types/namespaces/services/tenant-membership.service.d.mts +11 -0
- package/lib/types/namespaces/services/tenant-profile.service.d.cts +8 -0
- package/lib/types/namespaces/services/tenant-profile.service.d.mts +8 -0
- package/lib/types/namespaces/services/tenant.service.d.cts +12 -0
- package/lib/types/namespaces/services/tenant.service.d.mts +12 -0
- package/lib/types/namespaces/services/user.service.d.cts +11 -0
- package/lib/types/namespaces/services/user.service.d.mts +11 -0
- package/lib/types/namespaces/types.d.cts +230 -0
- package/lib/types/namespaces/types.d.mts +230 -0
- package/lib/types/namespaces/utils.d.cts +68 -0
- package/lib/types/namespaces/utils.d.mts +68 -0
- package/lib/types/nest/authService.d.cts +1 -0
- package/lib/types/nest/authService.d.mts +1 -0
- package/lib/types/nest/graph/GraphExecutionController.d.cts +62 -0
- package/lib/types/nest/graph/GraphExecutionController.d.mts +62 -0
- package/lib/types/nest/graph/GraphExecutionModule.d.cts +39 -0
- package/lib/types/nest/graph/GraphExecutionModule.d.mts +39 -0
- package/lib/types/nest/graph/GraphExecutionResultModel.d.cts +46 -0
- package/lib/types/nest/graph/GraphExecutionResultModel.d.mts +46 -0
- package/lib/types/nest/graph/GraphExecutionResultRepository.d.cts +38 -0
- package/lib/types/nest/graph/GraphExecutionResultRepository.d.mts +38 -0
- package/lib/types/nest/graph/GraphExecutorRegistryFactory.d.cts +17 -0
- package/lib/types/nest/graph/GraphExecutorRegistryFactory.d.mts +17 -0
- package/lib/types/nest/graph/index.d.cts +10 -0
- package/lib/types/nest/graph/index.d.mts +10 -0
- package/lib/types/nest/index.d.cts +1 -0
- package/lib/types/nest/index.d.mts +1 -0
- package/package.json +16 -5
- package/sql/001_constraints.sql +11 -0
- package/sql/002_rls.sql +20 -0
- package/sql/003_indexes.sql +2 -0
|
@@ -0,0 +1,1046 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SystemManagementService = exports.BootstrapService = exports.StorageBindingService = exports.ResourceLifecycleService = exports.ResourceGrantService = exports.ProtectedResourceService = exports.EffectivePermissionService = exports.RoleAssignmentService = exports.RolePermissionService = exports.RoleService = exports.PermissionService = exports.GroupMembershipService = exports.GroupService = exports.OrgUnitMembershipService = exports.TenantMembershipService = exports.PrincipalService = exports.UserService = exports.OrgUnitService = exports.TenantService = exports.InheritanceBlockService = exports.OrgUnitClosureService = exports.OrgUnitProfileService = exports.TenantProfileService = void 0;
|
|
4
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
7
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
8
|
+
else
|
|
9
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
10
|
+
if (d = decorators[i])
|
|
11
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
12
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
13
|
+
};
|
|
14
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
15
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
16
|
+
return Reflect.metadata(k, v);
|
|
17
|
+
};
|
|
18
|
+
const org_based_authorization_system_js_1 = require("./org-based-authorization-system.cjs");
|
|
19
|
+
const org_based_authorization_system_models_1 = require("./org-based-authorization-system.models");
|
|
20
|
+
const nowIso = () => new Date();
|
|
21
|
+
const asArray = (value) => value ?? [];
|
|
22
|
+
const sameTenant = (rowTenant, tenantId) => (0, org_based_authorization_system_js_1.relationId)(rowTenant) === tenantId;
|
|
23
|
+
const relationMatch = (value, target) => (target ? (0, org_based_authorization_system_js_1.relationId)(value) === target : false);
|
|
24
|
+
const lowerSlug = (value) => value
|
|
25
|
+
.trim()
|
|
26
|
+
.toLowerCase()
|
|
27
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
28
|
+
.replace(/^-+|-+$/g, "") || "item";
|
|
29
|
+
async function deleteManyById(service, rows, ...args) {
|
|
30
|
+
for (const row of rows) {
|
|
31
|
+
await service.deleteById(row.id, ...args);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
class TenantProfileService extends org_based_authorization_system_js_1.BaseModelService {
|
|
35
|
+
constructor() {
|
|
36
|
+
super(org_based_authorization_system_models_1.TenantProfile);
|
|
37
|
+
}
|
|
38
|
+
async createProfile(tenantId, profileKey, metadata, ...args) {
|
|
39
|
+
return this.createOne({
|
|
40
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
41
|
+
tenant: tenantId,
|
|
42
|
+
profileKey,
|
|
43
|
+
metadata,
|
|
44
|
+
}, ...args);
|
|
45
|
+
}
|
|
46
|
+
async listForTenant(tenantId, ...args) {
|
|
47
|
+
return (await this.listAll(...args)).filter((profile) => relationMatch(profile.tenant, tenantId));
|
|
48
|
+
}
|
|
49
|
+
async deleteForTenant(tenantId, ...args) {
|
|
50
|
+
await deleteManyById(this, await this.listForTenant(tenantId, ...args), ...args);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.TenantProfileService = TenantProfileService;
|
|
54
|
+
class OrgUnitProfileService extends org_based_authorization_system_js_1.BaseModelService {
|
|
55
|
+
constructor() {
|
|
56
|
+
super(org_based_authorization_system_models_1.OrgUnitProfile);
|
|
57
|
+
}
|
|
58
|
+
async createProfile(orgUnitId, profileKey, metadata, ...args) {
|
|
59
|
+
return this.createOne({
|
|
60
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
61
|
+
orgUnit: orgUnitId,
|
|
62
|
+
profileKey,
|
|
63
|
+
metadata,
|
|
64
|
+
}, ...args);
|
|
65
|
+
}
|
|
66
|
+
async listForOrgUnit(orgUnitId, ...args) {
|
|
67
|
+
return (await this.listAll(...args)).filter((profile) => relationMatch(profile.orgUnit, orgUnitId));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.OrgUnitProfileService = OrgUnitProfileService;
|
|
71
|
+
class OrgUnitClosureService extends org_based_authorization_system_js_1.BaseModelService {
|
|
72
|
+
constructor() {
|
|
73
|
+
super(org_based_authorization_system_models_1.OrgUnitClosure);
|
|
74
|
+
}
|
|
75
|
+
async listAncestors(tenantId, orgUnitId, ...args) {
|
|
76
|
+
return (await this.listAll(...args))
|
|
77
|
+
.filter((row) => sameTenant(row.tenant, tenantId) &&
|
|
78
|
+
relationMatch(row.descendant, orgUnitId))
|
|
79
|
+
.sort((left, right) => left.depth - right.depth);
|
|
80
|
+
}
|
|
81
|
+
async listDescendants(tenantId, orgUnitId, ...args) {
|
|
82
|
+
return (await this.listAll(...args))
|
|
83
|
+
.filter((row) => sameTenant(row.tenant, tenantId) &&
|
|
84
|
+
relationMatch(row.ancestor, orgUnitId))
|
|
85
|
+
.sort((left, right) => left.depth - right.depth);
|
|
86
|
+
}
|
|
87
|
+
async isAncestorOf(tenantId, ancestorOrgUnitId, descendantOrgUnitId, ...args) {
|
|
88
|
+
return (await this.listAncestors(tenantId, descendantOrgUnitId, ...args)).some((row) => relationMatch(row.ancestor, ancestorOrgUnitId));
|
|
89
|
+
}
|
|
90
|
+
async createSelfLink(tenantId, orgUnitId, ...args) {
|
|
91
|
+
return this.createOne({
|
|
92
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
93
|
+
tenant: tenantId,
|
|
94
|
+
ancestor: orgUnitId,
|
|
95
|
+
descendant: orgUnitId,
|
|
96
|
+
depth: 0,
|
|
97
|
+
}, ...args);
|
|
98
|
+
}
|
|
99
|
+
async insertAncestorLinksForNewChild(tenantId, parentOrgUnitId, childOrgUnitId, ...args) {
|
|
100
|
+
const ancestorLinks = await this.listAncestors(tenantId, parentOrgUnitId, ...args);
|
|
101
|
+
await Promise.all(ancestorLinks.map((link) => this.createOne({
|
|
102
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
103
|
+
tenant: tenantId,
|
|
104
|
+
ancestor: link.ancestor,
|
|
105
|
+
descendant: childOrgUnitId,
|
|
106
|
+
depth: link.depth + 1,
|
|
107
|
+
}, ...args)));
|
|
108
|
+
}
|
|
109
|
+
async deleteLinksForSubtree(tenantId, orgUnitId, ...args) {
|
|
110
|
+
const subtree = await this.listDescendants(tenantId, orgUnitId, ...args);
|
|
111
|
+
const descendantIds = new Set([
|
|
112
|
+
orgUnitId,
|
|
113
|
+
...subtree.map((row) => (0, org_based_authorization_system_js_1.relationId)(row.descendant)),
|
|
114
|
+
]);
|
|
115
|
+
const ancestorIds = new Set([
|
|
116
|
+
orgUnitId,
|
|
117
|
+
...subtree.map((row) => (0, org_based_authorization_system_js_1.relationId)(row.ancestor)),
|
|
118
|
+
]);
|
|
119
|
+
const rows = (await this.listAll(...args)).filter((row) => sameTenant(row.tenant, tenantId) &&
|
|
120
|
+
(descendantIds.has((0, org_based_authorization_system_js_1.relationId)(row.descendant)) ||
|
|
121
|
+
ancestorIds.has((0, org_based_authorization_system_js_1.relationId)(row.ancestor))));
|
|
122
|
+
await deleteManyById(this, rows, ...args);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.OrgUnitClosureService = OrgUnitClosureService;
|
|
126
|
+
class InheritanceBlockService extends org_based_authorization_system_js_1.BaseModelService {
|
|
127
|
+
constructor() {
|
|
128
|
+
super(org_based_authorization_system_models_1.InheritanceBlock);
|
|
129
|
+
}
|
|
130
|
+
async blockCategory(tenantId, orgUnitId, permissionCategory, blockedFromAncestorId, reason, ...args) {
|
|
131
|
+
return this.createOne({
|
|
132
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
133
|
+
tenant: tenantId,
|
|
134
|
+
orgUnit: orgUnitId,
|
|
135
|
+
blockedFromAncestor: blockedFromAncestorId,
|
|
136
|
+
permissionCategory,
|
|
137
|
+
reason,
|
|
138
|
+
}, ...args);
|
|
139
|
+
}
|
|
140
|
+
async unblockCategory(blockId, ...args) {
|
|
141
|
+
await this.deleteById(blockId, ...args);
|
|
142
|
+
}
|
|
143
|
+
async listForOrgUnit(tenantId, orgUnitId, ...args) {
|
|
144
|
+
return (await this.listAll(...args)).filter((block) => sameTenant(block.tenant, tenantId) && relationMatch(block.orgUnit, orgUnitId));
|
|
145
|
+
}
|
|
146
|
+
async categoryBlockedForAncestor(tenantId, orgUnitId, ancestorOrgUnitId, category, ...args) {
|
|
147
|
+
return (await this.listForOrgUnit(tenantId, orgUnitId, ...args)).some((block) => block.permissionCategory === category &&
|
|
148
|
+
(!block.blockedFromAncestor ||
|
|
149
|
+
relationMatch(block.blockedFromAncestor, ancestorOrgUnitId)));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
exports.InheritanceBlockService = InheritanceBlockService;
|
|
153
|
+
class TenantService extends org_based_authorization_system_js_1.BaseModelService {
|
|
154
|
+
constructor() {
|
|
155
|
+
super(org_based_authorization_system_models_1.Tenant);
|
|
156
|
+
}
|
|
157
|
+
async createTenant(input, ...args) {
|
|
158
|
+
return this.createOne({
|
|
159
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
160
|
+
slug: input.slug,
|
|
161
|
+
name: input.name,
|
|
162
|
+
isolationTier: input.isolationTier ?? org_based_authorization_system_js_1.IsolationTier.Pooled,
|
|
163
|
+
}, ...args);
|
|
164
|
+
}
|
|
165
|
+
async getBySlug(slug, ...args) {
|
|
166
|
+
return this.findOneBy("slug", slug, ...args);
|
|
167
|
+
}
|
|
168
|
+
async renameTenant(tenantId, name, ...args) {
|
|
169
|
+
return this.updateOne(tenantId, { name }, ...args);
|
|
170
|
+
}
|
|
171
|
+
async changeSlug(tenantId, slug, ...args) {
|
|
172
|
+
return this.updateOne(tenantId, { slug }, ...args);
|
|
173
|
+
}
|
|
174
|
+
async setIsolationTier(tenantId, isolationTier, ...args) {
|
|
175
|
+
return this.updateOne(tenantId, { isolationTier }, ...args);
|
|
176
|
+
}
|
|
177
|
+
async deleteTenantControlled(tenantId, ...args) {
|
|
178
|
+
await this.deleteById(tenantId, ...args);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.TenantService = TenantService;
|
|
182
|
+
class OrgUnitService extends org_based_authorization_system_js_1.BaseModelService {
|
|
183
|
+
constructor() {
|
|
184
|
+
super(org_based_authorization_system_models_1.OrgUnit);
|
|
185
|
+
}
|
|
186
|
+
orgUnitPath(parentPath, name) {
|
|
187
|
+
const segment = lowerSlug(name);
|
|
188
|
+
return parentPath ? `${parentPath.replace(/\/+$/, "")}/${segment}` : `/${segment}`;
|
|
189
|
+
}
|
|
190
|
+
async createProfileIfNeeded(orgUnitId, profileKey, profileMetadata, ...args) {
|
|
191
|
+
if (!profileKey)
|
|
192
|
+
return;
|
|
193
|
+
const profileService = new OrgUnitProfileService();
|
|
194
|
+
await profileService.createProfile(orgUnitId, profileKey, profileMetadata, ...args);
|
|
195
|
+
}
|
|
196
|
+
async createRoot(tenantId, name, metadata, profileKey, profileMetadata, ...args) {
|
|
197
|
+
const orgUnit = await this.createOne({
|
|
198
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
199
|
+
tenant: tenantId,
|
|
200
|
+
name,
|
|
201
|
+
path: this.orgUnitPath(undefined, name),
|
|
202
|
+
metadata,
|
|
203
|
+
}, ...args);
|
|
204
|
+
await this.createProfileIfNeeded(orgUnit.id, profileKey, profileMetadata, ...args);
|
|
205
|
+
const closureService = new OrgUnitClosureService();
|
|
206
|
+
await closureService.createSelfLink(tenantId, orgUnit.id, ...args);
|
|
207
|
+
return orgUnit;
|
|
208
|
+
}
|
|
209
|
+
async createChild(input, ...args) {
|
|
210
|
+
const parent = input.parentOrgUnitId
|
|
211
|
+
? await this.getById(input.parentOrgUnitId, ...args)
|
|
212
|
+
: undefined;
|
|
213
|
+
const orgUnit = await this.createOne({
|
|
214
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
215
|
+
tenant: input.tenantId,
|
|
216
|
+
parent: parent?.id ?? input.parentOrgUnitId,
|
|
217
|
+
name: input.name,
|
|
218
|
+
path: this.orgUnitPath(parent?.path, input.name),
|
|
219
|
+
metadata: input.metadata,
|
|
220
|
+
}, ...args);
|
|
221
|
+
await this.createProfileIfNeeded(orgUnit.id, input.profileKey, input.profileMetadata, ...args);
|
|
222
|
+
const closureService = new OrgUnitClosureService();
|
|
223
|
+
await closureService.createSelfLink(input.tenantId, orgUnit.id, ...args);
|
|
224
|
+
if (input.parentOrgUnitId) {
|
|
225
|
+
await closureService.insertAncestorLinksForNewChild(input.tenantId, input.parentOrgUnitId, orgUnit.id, ...args);
|
|
226
|
+
}
|
|
227
|
+
return orgUnit;
|
|
228
|
+
}
|
|
229
|
+
async listChildren(parentOrgUnitId, ...args) {
|
|
230
|
+
return (await this.listAll(...args)).filter((orgUnit) => relationMatch(orgUnit.parent, parentOrgUnitId));
|
|
231
|
+
}
|
|
232
|
+
async listTenantOrgUnits(tenantId, ...args) {
|
|
233
|
+
return (await this.listAll(...args)).filter((orgUnit) => sameTenant(orgUnit.tenant, tenantId));
|
|
234
|
+
}
|
|
235
|
+
async listDescendantOrgUnits(tenantId, orgUnitId, includeSelf = false, ...args) {
|
|
236
|
+
const closureService = new OrgUnitClosureService();
|
|
237
|
+
const descendants = await closureService.listDescendants(tenantId, orgUnitId, ...args);
|
|
238
|
+
const ids = new Set(descendants.map((row) => (0, org_based_authorization_system_js_1.relationId)(row.descendant)));
|
|
239
|
+
if (includeSelf)
|
|
240
|
+
ids.add(orgUnitId);
|
|
241
|
+
return (await this.listTenantOrgUnits(tenantId, ...args)).filter((orgUnit) => ids.has(orgUnit.id));
|
|
242
|
+
}
|
|
243
|
+
async listAncestorOrgUnits(tenantId, orgUnitId, includeSelf = false, ...args) {
|
|
244
|
+
const closureService = new OrgUnitClosureService();
|
|
245
|
+
const ancestors = await closureService.listAncestors(tenantId, orgUnitId, ...args);
|
|
246
|
+
const ids = new Set(ancestors.map((row) => (0, org_based_authorization_system_js_1.relationId)(row.ancestor)));
|
|
247
|
+
if (includeSelf)
|
|
248
|
+
ids.add(orgUnitId);
|
|
249
|
+
return (await this.listTenantOrgUnits(tenantId, ...args)).filter((orgUnit) => ids.has(orgUnit.id));
|
|
250
|
+
}
|
|
251
|
+
async renameOrgUnit(orgUnitId, name, ...args) {
|
|
252
|
+
const existing = await this.getById(orgUnitId, ...args);
|
|
253
|
+
return this.updateOne(orgUnitId, { name, path: this.orgUnitPath(undefined, name) }, ...args).then(async (updated) => {
|
|
254
|
+
updated.path = existing.parent ? this.orgUnitPath(undefined, name) : this.orgUnitPath(undefined, name);
|
|
255
|
+
return updated;
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
async moveOrgUnit(tenantId, orgUnitId, newParentOrgUnitId, ...args) {
|
|
259
|
+
const newParent = await this.getById(newParentOrgUnitId, ...args);
|
|
260
|
+
const existing = await this.getById(orgUnitId, ...args);
|
|
261
|
+
const updated = await this.updateOne(orgUnitId, {
|
|
262
|
+
parent: newParent.id,
|
|
263
|
+
path: this.orgUnitPath(newParent.path, existing.name),
|
|
264
|
+
}, ...args);
|
|
265
|
+
await this.rebuildTenantClosure(tenantId, ...args);
|
|
266
|
+
return updated;
|
|
267
|
+
}
|
|
268
|
+
async rebuildTenantClosure(tenantId, ...args) {
|
|
269
|
+
const closureService = new OrgUnitClosureService();
|
|
270
|
+
const existingLinks = await closureService.listAll(...args);
|
|
271
|
+
await deleteManyById(closureService, existingLinks.filter((row) => sameTenant(row.tenant, tenantId)), ...args);
|
|
272
|
+
const orgUnits = (await this.listTenantOrgUnits(tenantId, ...args)).sort((left, right) => {
|
|
273
|
+
const leftDepth = left.path.split("/").filter(Boolean).length;
|
|
274
|
+
const rightDepth = right.path.split("/").filter(Boolean).length;
|
|
275
|
+
return leftDepth - rightDepth;
|
|
276
|
+
});
|
|
277
|
+
for (const orgUnit of orgUnits) {
|
|
278
|
+
await closureService.createSelfLink(tenantId, orgUnit.id, ...args);
|
|
279
|
+
if (orgUnit.parent) {
|
|
280
|
+
await closureService.insertAncestorLinksForNewChild(tenantId, (0, org_based_authorization_system_js_1.relationId)(orgUnit.parent), orgUnit.id, ...args);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
async deleteOrgUnitTree(tenantId, orgUnitId, ...args) {
|
|
285
|
+
const closureService = new OrgUnitClosureService();
|
|
286
|
+
const descendants = await this.listDescendantOrgUnits(tenantId, orgUnitId, true, ...args);
|
|
287
|
+
const descendantIds = new Set(descendants.map((orgUnit) => orgUnit.id));
|
|
288
|
+
const orgUnits = (await this.listTenantOrgUnits(tenantId, ...args)).filter((orgUnit) => descendantIds.has(orgUnit.id));
|
|
289
|
+
await deleteManyById(this, orgUnits, ...args);
|
|
290
|
+
await closureService.deleteLinksForSubtree(tenantId, orgUnitId, ...args);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
exports.OrgUnitService = OrgUnitService;
|
|
294
|
+
__decorate([
|
|
295
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
296
|
+
__metadata("design:type", Function),
|
|
297
|
+
__metadata("design:paramtypes", [String, String, Object, String, Object, Object]),
|
|
298
|
+
__metadata("design:returntype", Promise)
|
|
299
|
+
], OrgUnitService.prototype, "createRoot", null);
|
|
300
|
+
__decorate([
|
|
301
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
302
|
+
__metadata("design:type", Function),
|
|
303
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
304
|
+
__metadata("design:returntype", Promise)
|
|
305
|
+
], OrgUnitService.prototype, "createChild", null);
|
|
306
|
+
__decorate([
|
|
307
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
308
|
+
__metadata("design:type", Function),
|
|
309
|
+
__metadata("design:paramtypes", [String, String, String, Object]),
|
|
310
|
+
__metadata("design:returntype", Promise)
|
|
311
|
+
], OrgUnitService.prototype, "moveOrgUnit", null);
|
|
312
|
+
__decorate([
|
|
313
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
314
|
+
__metadata("design:type", Function),
|
|
315
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
316
|
+
__metadata("design:returntype", Promise)
|
|
317
|
+
], OrgUnitService.prototype, "rebuildTenantClosure", null);
|
|
318
|
+
__decorate([
|
|
319
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
320
|
+
__metadata("design:type", Function),
|
|
321
|
+
__metadata("design:paramtypes", [String, String, Object]),
|
|
322
|
+
__metadata("design:returntype", Promise)
|
|
323
|
+
], OrgUnitService.prototype, "deleteOrgUnitTree", null);
|
|
324
|
+
class UserService extends org_based_authorization_system_js_1.BaseModelService {
|
|
325
|
+
constructor() {
|
|
326
|
+
super(org_based_authorization_system_models_1.User);
|
|
327
|
+
}
|
|
328
|
+
async createUser(input, ...args) {
|
|
329
|
+
return this.createOne({
|
|
330
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
331
|
+
email: input.email,
|
|
332
|
+
phone: input.phone,
|
|
333
|
+
displayName: input.displayName,
|
|
334
|
+
}, ...args);
|
|
335
|
+
}
|
|
336
|
+
async getByEmail(email, ...args) {
|
|
337
|
+
return (await this.listAll(...args)).find((user) => user.email === email);
|
|
338
|
+
}
|
|
339
|
+
async updateDisplayName(userId, displayName, ...args) {
|
|
340
|
+
return this.updateOne(userId, { displayName }, ...args);
|
|
341
|
+
}
|
|
342
|
+
async updateEmail(userId, email, ...args) {
|
|
343
|
+
return this.updateOne(userId, { email }, ...args);
|
|
344
|
+
}
|
|
345
|
+
async updatePhone(userId, phone, ...args) {
|
|
346
|
+
return this.updateOne(userId, { phone }, ...args);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
exports.UserService = UserService;
|
|
350
|
+
class PrincipalService extends org_based_authorization_system_js_1.BaseModelService {
|
|
351
|
+
constructor() {
|
|
352
|
+
super(org_based_authorization_system_models_1.Principal);
|
|
353
|
+
}
|
|
354
|
+
async createPrincipal(tenantId, kind, subjectId, ...args) {
|
|
355
|
+
return this.createOne({
|
|
356
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
357
|
+
tenant: tenantId,
|
|
358
|
+
kind,
|
|
359
|
+
subjectId,
|
|
360
|
+
}, ...args);
|
|
361
|
+
}
|
|
362
|
+
async getForSubject(tenantId, kind, subjectId, ...args) {
|
|
363
|
+
return (await this.listAll(...args)).find((principal) => sameTenant(principal.tenant, tenantId) &&
|
|
364
|
+
principal.kind === kind &&
|
|
365
|
+
principal.subjectId === subjectId);
|
|
366
|
+
}
|
|
367
|
+
async getOrCreateForSubject(tenantId, kind, subjectId, ...args) {
|
|
368
|
+
return ((await this.getForSubject(tenantId, kind, subjectId, ...args)) ??
|
|
369
|
+
(await this.createPrincipal(tenantId, kind, subjectId, ...args)));
|
|
370
|
+
}
|
|
371
|
+
async getUserPrincipal(tenantId, userId, ...args) {
|
|
372
|
+
return this.getOrCreateForSubject(tenantId, org_based_authorization_system_js_1.PrincipalKind.User, userId, ...args);
|
|
373
|
+
}
|
|
374
|
+
async getGroupPrincipal(tenantId, groupId, ...args) {
|
|
375
|
+
return this.getOrCreateForSubject(tenantId, org_based_authorization_system_js_1.PrincipalKind.Group, groupId, ...args);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
exports.PrincipalService = PrincipalService;
|
|
379
|
+
class TenantMembershipService extends org_based_authorization_system_js_1.BaseModelService {
|
|
380
|
+
constructor() {
|
|
381
|
+
super(org_based_authorization_system_models_1.TenantMembership);
|
|
382
|
+
}
|
|
383
|
+
async addUserToTenant(tenantId, userId, status = org_based_authorization_system_js_1.MembershipStatus.Active, ...args) {
|
|
384
|
+
return this.createOne({
|
|
385
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
386
|
+
tenant: tenantId,
|
|
387
|
+
user: userId,
|
|
388
|
+
status,
|
|
389
|
+
}, ...args);
|
|
390
|
+
}
|
|
391
|
+
async setStatus(membershipId, status, ...args) {
|
|
392
|
+
return this.updateOne(membershipId, { status }, ...args);
|
|
393
|
+
}
|
|
394
|
+
async listUserTenants(userId, ...args) {
|
|
395
|
+
return (await this.listAll(...args)).filter((membership) => relationMatch(membership.user, userId));
|
|
396
|
+
}
|
|
397
|
+
async listTenantUsers(tenantId, ...args) {
|
|
398
|
+
return (await this.listAll(...args)).filter((membership) => sameTenant(membership.tenant, tenantId));
|
|
399
|
+
}
|
|
400
|
+
async removeUserFromTenant(membershipId, ...args) {
|
|
401
|
+
await this.deleteById(membershipId, ...args);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
exports.TenantMembershipService = TenantMembershipService;
|
|
405
|
+
class OrgUnitMembershipService extends org_based_authorization_system_js_1.BaseModelService {
|
|
406
|
+
constructor() {
|
|
407
|
+
super(org_based_authorization_system_models_1.OrgUnitMembership);
|
|
408
|
+
}
|
|
409
|
+
async addUserToOrgUnit(tenantId, orgUnitId, userId, status = org_based_authorization_system_js_1.MembershipStatus.Active, ...args) {
|
|
410
|
+
return this.createOne({
|
|
411
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
412
|
+
tenant: tenantId,
|
|
413
|
+
orgUnit: orgUnitId,
|
|
414
|
+
user: userId,
|
|
415
|
+
status,
|
|
416
|
+
}, ...args);
|
|
417
|
+
}
|
|
418
|
+
async setStatus(membershipId, status, ...args) {
|
|
419
|
+
return this.updateOne(membershipId, { status }, ...args);
|
|
420
|
+
}
|
|
421
|
+
async listUserOrgUnits(userId, ...args) {
|
|
422
|
+
return (await this.listAll(...args)).filter((membership) => relationMatch(membership.user, userId));
|
|
423
|
+
}
|
|
424
|
+
async listOrgUnitUsers(orgUnitId, ...args) {
|
|
425
|
+
return (await this.listAll(...args)).filter((membership) => relationMatch(membership.orgUnit, orgUnitId));
|
|
426
|
+
}
|
|
427
|
+
async removeUserFromOrgUnit(membershipId, ...args) {
|
|
428
|
+
await this.deleteById(membershipId, ...args);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
exports.OrgUnitMembershipService = OrgUnitMembershipService;
|
|
432
|
+
class GroupService extends org_based_authorization_system_js_1.BaseModelService {
|
|
433
|
+
constructor() {
|
|
434
|
+
super(org_based_authorization_system_models_1.Group);
|
|
435
|
+
}
|
|
436
|
+
async createGroup(tenantId, name, orgUnitId, metadata, ...args) {
|
|
437
|
+
return this.createOne({
|
|
438
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
439
|
+
tenant: tenantId,
|
|
440
|
+
orgUnit: orgUnitId,
|
|
441
|
+
name,
|
|
442
|
+
metadata,
|
|
443
|
+
}, ...args);
|
|
444
|
+
}
|
|
445
|
+
async renameGroup(groupId, name, ...args) {
|
|
446
|
+
return this.updateOne(groupId, { name }, ...args);
|
|
447
|
+
}
|
|
448
|
+
async moveGroupToOrgUnit(groupId, orgUnitId, ...args) {
|
|
449
|
+
return this.updateOne(groupId, { orgUnit: orgUnitId }, ...args);
|
|
450
|
+
}
|
|
451
|
+
async listTenantGroups(tenantId, ...args) {
|
|
452
|
+
return (await this.listAll(...args)).filter((group) => sameTenant(group.tenant, tenantId));
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
exports.GroupService = GroupService;
|
|
456
|
+
class GroupMembershipService extends org_based_authorization_system_js_1.BaseModelService {
|
|
457
|
+
constructor() {
|
|
458
|
+
super(org_based_authorization_system_models_1.GroupMembership);
|
|
459
|
+
}
|
|
460
|
+
async addPrincipalToGroup(tenantId, groupId, principalId, metadata, ...args) {
|
|
461
|
+
return this.createOne({
|
|
462
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
463
|
+
tenant: tenantId,
|
|
464
|
+
group: groupId,
|
|
465
|
+
principal: principalId,
|
|
466
|
+
metadata,
|
|
467
|
+
}, ...args);
|
|
468
|
+
}
|
|
469
|
+
async listGroupMembers(groupId, ...args) {
|
|
470
|
+
return (await this.listAll(...args)).filter((membership) => relationMatch(membership.group, groupId));
|
|
471
|
+
}
|
|
472
|
+
async listPrincipalGroups(principalId, ...args) {
|
|
473
|
+
return (await this.listAll(...args)).filter((membership) => relationMatch(membership.principal, principalId));
|
|
474
|
+
}
|
|
475
|
+
async removePrincipalFromGroup(membershipId, ...args) {
|
|
476
|
+
await this.deleteById(membershipId, ...args);
|
|
477
|
+
}
|
|
478
|
+
async resolveGroupPrincipalIdsForPrincipal(principalId, ...args) {
|
|
479
|
+
const principalService = new PrincipalService();
|
|
480
|
+
const memberships = await this.listPrincipalGroups(principalId, ...args);
|
|
481
|
+
const principals = await Promise.all(memberships.map(async (membership) => {
|
|
482
|
+
const tenantId = (0, org_based_authorization_system_js_1.relationId)(membership.tenant);
|
|
483
|
+
const groupId = (0, org_based_authorization_system_js_1.relationId)(membership.group);
|
|
484
|
+
const principal = await principalService.getGroupPrincipal(tenantId, groupId, ...args);
|
|
485
|
+
return principal.id;
|
|
486
|
+
}));
|
|
487
|
+
return principals;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
exports.GroupMembershipService = GroupMembershipService;
|
|
491
|
+
class PermissionService extends org_based_authorization_system_js_1.BaseModelService {
|
|
492
|
+
constructor() {
|
|
493
|
+
super(org_based_authorization_system_models_1.Permission);
|
|
494
|
+
}
|
|
495
|
+
async createPermission(input, ...args) {
|
|
496
|
+
return this.createOne({
|
|
497
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
498
|
+
key: input.key,
|
|
499
|
+
category: input.category,
|
|
500
|
+
description: input.description,
|
|
501
|
+
}, ...args);
|
|
502
|
+
}
|
|
503
|
+
async getByKey(key, ...args) {
|
|
504
|
+
return (await this.listAll(...args)).find((permission) => permission.key === key);
|
|
505
|
+
}
|
|
506
|
+
async listByCategory(category, ...args) {
|
|
507
|
+
return (await this.listAll(...args)).filter((permission) => permission.category === category);
|
|
508
|
+
}
|
|
509
|
+
async updateDescription(permissionId, description, ...args) {
|
|
510
|
+
return this.updateOne(permissionId, { description }, ...args);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
exports.PermissionService = PermissionService;
|
|
514
|
+
class RoleService extends org_based_authorization_system_js_1.BaseModelService {
|
|
515
|
+
constructor() {
|
|
516
|
+
super(org_based_authorization_system_models_1.Role);
|
|
517
|
+
}
|
|
518
|
+
async createRole(input, ...args) {
|
|
519
|
+
return this.createOne({
|
|
520
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
521
|
+
tenant: input.tenantId,
|
|
522
|
+
key: input.key,
|
|
523
|
+
name: input.name,
|
|
524
|
+
description: input.description,
|
|
525
|
+
metadata: input.metadata,
|
|
526
|
+
}, ...args);
|
|
527
|
+
}
|
|
528
|
+
async getSystemRoleByKey(key, ...args) {
|
|
529
|
+
const role = (await this.listAll(...args)).find((candidate) => !candidate.tenant && candidate.key === key);
|
|
530
|
+
if (!role) {
|
|
531
|
+
throw new Error(`Role "${key}" not found`);
|
|
532
|
+
}
|
|
533
|
+
return role;
|
|
534
|
+
}
|
|
535
|
+
async getTenantRoleByKey(tenantId, key, ...args) {
|
|
536
|
+
const role = (await this.listAll(...args)).find((candidate) => sameTenant(candidate.tenant, tenantId) && candidate.key === key);
|
|
537
|
+
if (!role) {
|
|
538
|
+
throw new Error(`Role "${key}" not found for tenant ${tenantId}`);
|
|
539
|
+
}
|
|
540
|
+
return role;
|
|
541
|
+
}
|
|
542
|
+
async renameRole(roleId, name, ...args) {
|
|
543
|
+
return this.updateOne(roleId, { name }, ...args);
|
|
544
|
+
}
|
|
545
|
+
async updateRoleMetadata(roleId, metadata, ...args) {
|
|
546
|
+
return this.updateOne(roleId, { metadata }, ...args);
|
|
547
|
+
}
|
|
548
|
+
async listTenantRoles(tenantId, includeSystem = false, ...args) {
|
|
549
|
+
return (await this.listAll(...args)).filter((role) => includeSystem ? !role.tenant || sameTenant(role.tenant, tenantId) : sameTenant(role.tenant, tenantId));
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
exports.RoleService = RoleService;
|
|
553
|
+
class RolePermissionService extends org_based_authorization_system_js_1.BaseModelService {
|
|
554
|
+
constructor() {
|
|
555
|
+
super(org_based_authorization_system_models_1.RolePermission);
|
|
556
|
+
}
|
|
557
|
+
async addPermissionToRole(roleId, permissionId, ...args) {
|
|
558
|
+
return this.createOne({
|
|
559
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
560
|
+
role: roleId,
|
|
561
|
+
permission: permissionId,
|
|
562
|
+
}, ...args);
|
|
563
|
+
}
|
|
564
|
+
async addPermissionKeyToRole(roleId, permissionKey, ...args) {
|
|
565
|
+
const permission = await new PermissionService().getByKey(permissionKey, ...args);
|
|
566
|
+
return this.addPermissionToRole(roleId, permission.id, ...args);
|
|
567
|
+
}
|
|
568
|
+
async removePermissionFromRole(rolePermissionId, ...args) {
|
|
569
|
+
await this.deleteById(rolePermissionId, ...args);
|
|
570
|
+
}
|
|
571
|
+
async listRolePermissions(roleId, ...args) {
|
|
572
|
+
return (await this.listAll(...args)).filter((rolePermission) => relationMatch(rolePermission.role, roleId));
|
|
573
|
+
}
|
|
574
|
+
async listPermissionRoles(permissionId, ...args) {
|
|
575
|
+
return (await this.listAll(...args)).filter((rolePermission) => relationMatch(rolePermission.permission, permissionId));
|
|
576
|
+
}
|
|
577
|
+
async replaceRolePermissions(roleId, permissionIds, ...args) {
|
|
578
|
+
const existing = await this.listRolePermissions(roleId, ...args);
|
|
579
|
+
await deleteManyById(this, existing, ...args);
|
|
580
|
+
const created = await Promise.all(permissionIds.map((permissionId) => this.addPermissionToRole(roleId, permissionId, ...args)));
|
|
581
|
+
return created;
|
|
582
|
+
}
|
|
583
|
+
async createRoleWithPermissions(input, permissionKeys, ...args) {
|
|
584
|
+
const role = await new RoleService().createRole(input, ...args);
|
|
585
|
+
for (const permissionKey of permissionKeys) {
|
|
586
|
+
await this.addPermissionKeyToRole(role.id, permissionKey, ...args);
|
|
587
|
+
}
|
|
588
|
+
return role;
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
exports.RolePermissionService = RolePermissionService;
|
|
592
|
+
__decorate([
|
|
593
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
594
|
+
__metadata("design:type", Function),
|
|
595
|
+
__metadata("design:paramtypes", [String, Array, Object]),
|
|
596
|
+
__metadata("design:returntype", Promise)
|
|
597
|
+
], RolePermissionService.prototype, "replaceRolePermissions", null);
|
|
598
|
+
__decorate([
|
|
599
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
600
|
+
__metadata("design:type", Function),
|
|
601
|
+
__metadata("design:paramtypes", [Object, Array, Object]),
|
|
602
|
+
__metadata("design:returntype", Promise)
|
|
603
|
+
], RolePermissionService.prototype, "createRoleWithPermissions", null);
|
|
604
|
+
class RoleAssignmentService extends org_based_authorization_system_js_1.BaseModelService {
|
|
605
|
+
constructor() {
|
|
606
|
+
super(org_based_authorization_system_models_1.RoleAssignment);
|
|
607
|
+
}
|
|
608
|
+
async assignRole(input, ...args) {
|
|
609
|
+
return this.createOne({
|
|
610
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
611
|
+
tenant: input.tenantId,
|
|
612
|
+
principal: input.principalId,
|
|
613
|
+
role: input.roleId,
|
|
614
|
+
scopeKind: input.scopeKind,
|
|
615
|
+
scopeId: input.scopeId,
|
|
616
|
+
inheritDown: input.inheritDown ?? false,
|
|
617
|
+
startsAt: input.startsAt,
|
|
618
|
+
expiresAt: input.expiresAt,
|
|
619
|
+
conditions: input.conditions,
|
|
620
|
+
}, ...args);
|
|
621
|
+
}
|
|
622
|
+
async revokeAssignment(assignmentId, ...args) {
|
|
623
|
+
await this.deleteById(assignmentId, ...args);
|
|
624
|
+
}
|
|
625
|
+
async listPrincipalAssignments(tenantId, principalId, ...args) {
|
|
626
|
+
return (await this.listAll(...args)).filter((assignment) => sameTenant(assignment.tenant, tenantId) &&
|
|
627
|
+
relationMatch(assignment.principal, principalId));
|
|
628
|
+
}
|
|
629
|
+
async listRoleAssignments(roleId, ...args) {
|
|
630
|
+
return (await this.listAll(...args)).filter((assignment) => relationMatch(assignment.role, roleId));
|
|
631
|
+
}
|
|
632
|
+
async listTenantAssignments(tenantId, ...args) {
|
|
633
|
+
return (await this.listAll(...args)).filter((assignment) => sameTenant(assignment.tenant, tenantId));
|
|
634
|
+
}
|
|
635
|
+
async updateAssignmentWindow(assignmentId, startsAt, expiresAt, ...args) {
|
|
636
|
+
return this.updateOne(assignmentId, { startsAt, expiresAt }, ...args);
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
exports.RoleAssignmentService = RoleAssignmentService;
|
|
640
|
+
class EffectivePermissionService extends org_based_authorization_system_js_1.BaseModelService {
|
|
641
|
+
constructor() {
|
|
642
|
+
super(org_based_authorization_system_models_1.EffectivePermission);
|
|
643
|
+
}
|
|
644
|
+
async listForPrincipal(tenantId, principalId, ...args) {
|
|
645
|
+
return (await this.listAll(...args)).filter((permission) => sameTenant(permission.tenant, tenantId) &&
|
|
646
|
+
relationMatch(permission.principal, principalId));
|
|
647
|
+
}
|
|
648
|
+
async listForScope(tenantId, scopeKind, scopeId, ...args) {
|
|
649
|
+
return (await this.listAll(...args)).filter((permission) => sameTenant(permission.tenant, tenantId) &&
|
|
650
|
+
permission.scopeKind === scopeKind &&
|
|
651
|
+
permission.scopeId === scopeId);
|
|
652
|
+
}
|
|
653
|
+
async hasPermission(tenantId, principalId, permissionKey, scopeKind, scopeId, at, ...args) {
|
|
654
|
+
return (await this.listForPrincipal(tenantId, principalId, ...args)).some((permission) => permission.permissionKey === permissionKey &&
|
|
655
|
+
permission.scopeKind === scopeKind &&
|
|
656
|
+
permission.scopeId === scopeId &&
|
|
657
|
+
(!permission.startsAt || !at || permission.startsAt <= at) &&
|
|
658
|
+
(!permission.expiresAt || !at || permission.expiresAt >= at));
|
|
659
|
+
}
|
|
660
|
+
async deleteForPrincipal(tenantId, principalId, ...args) {
|
|
661
|
+
await deleteManyById(this, await this.listForPrincipal(tenantId, principalId, ...args), ...args);
|
|
662
|
+
}
|
|
663
|
+
async deleteForTenant(tenantId, ...args) {
|
|
664
|
+
await deleteManyById(this, (await this.listAll(...args)).filter((permission) => sameTenant(permission.tenant, tenantId)), ...args);
|
|
665
|
+
}
|
|
666
|
+
async rebuildForPrincipal(tenantId, principalId, ...args) {
|
|
667
|
+
await this.deleteForPrincipal(tenantId, principalId, ...args);
|
|
668
|
+
const roleAssignmentService = new RoleAssignmentService();
|
|
669
|
+
const rolePermissionService = new RolePermissionService();
|
|
670
|
+
const permissionService = new PermissionService();
|
|
671
|
+
const groupMembershipService = new GroupMembershipService();
|
|
672
|
+
const principalService = new PrincipalService();
|
|
673
|
+
const orgUnitClosureService = new OrgUnitClosureService();
|
|
674
|
+
const inheritanceBlockService = new InheritanceBlockService();
|
|
675
|
+
const materialized = [];
|
|
676
|
+
const sourceAssignments = await roleAssignmentService.listPrincipalAssignments(tenantId, principalId, ...args);
|
|
677
|
+
const groupMemberships = await groupMembershipService.listPrincipalGroups(principalId, ...args);
|
|
678
|
+
const groupAssignments = (await Promise.all(groupMemberships.map(async (membership) => {
|
|
679
|
+
const groupPrincipal = await principalService.getGroupPrincipal((0, org_based_authorization_system_js_1.relationId)(membership.tenant), (0, org_based_authorization_system_js_1.relationId)(membership.group), ...args);
|
|
680
|
+
return roleAssignmentService.listPrincipalAssignments(tenantId, groupPrincipal.id, ...args);
|
|
681
|
+
}))).flat();
|
|
682
|
+
const assignments = [...sourceAssignments, ...groupAssignments];
|
|
683
|
+
for (const assignment of assignments) {
|
|
684
|
+
const rolePermissions = await rolePermissionService.listRolePermissions((0, org_based_authorization_system_js_1.relationId)(assignment.role), ...args);
|
|
685
|
+
const permissions = await Promise.all(rolePermissions.map(async (rolePermission) => {
|
|
686
|
+
const permission = await permissionService.findOneBy("id", (0, org_based_authorization_system_js_1.relationId)(rolePermission.permission), ...args);
|
|
687
|
+
return permission;
|
|
688
|
+
}));
|
|
689
|
+
for (const permission of permissions) {
|
|
690
|
+
if (!permission)
|
|
691
|
+
continue;
|
|
692
|
+
const scopeKind = assignment.scopeKind;
|
|
693
|
+
const scopeId = assignment.scopeId;
|
|
694
|
+
const scopes = [];
|
|
695
|
+
if (scopeKind === org_based_authorization_system_js_1.ScopeKind.Tenant) {
|
|
696
|
+
scopes.push({ scopeKind, scopeId: tenantId });
|
|
697
|
+
}
|
|
698
|
+
else if (scopeKind === org_based_authorization_system_js_1.ScopeKind.Resource) {
|
|
699
|
+
scopes.push({ scopeKind, scopeId });
|
|
700
|
+
}
|
|
701
|
+
else if (scopeKind === org_based_authorization_system_js_1.ScopeKind.OrgUnit && !assignment.inheritDown) {
|
|
702
|
+
scopes.push({ scopeKind, scopeId });
|
|
703
|
+
}
|
|
704
|
+
else if (scopeKind === org_based_authorization_system_js_1.ScopeKind.OrgUnit && assignment.inheritDown) {
|
|
705
|
+
const descendants = await orgUnitClosureService.listDescendants(tenantId, scopeId, ...args);
|
|
706
|
+
scopes.push(...descendants.map((row) => ({
|
|
707
|
+
scopeKind,
|
|
708
|
+
scopeId: (0, org_based_authorization_system_js_1.relationId)(row.descendant),
|
|
709
|
+
})));
|
|
710
|
+
}
|
|
711
|
+
for (const scoped of scopes) {
|
|
712
|
+
if (scopeKind === org_based_authorization_system_js_1.ScopeKind.OrgUnit &&
|
|
713
|
+
assignment.inheritDown &&
|
|
714
|
+
scoped.scopeId !== scopeId &&
|
|
715
|
+
(await inheritanceBlockService.categoryBlockedForAncestor(tenantId, scoped.scopeId, scopeId, permission.category, ...args))) {
|
|
716
|
+
continue;
|
|
717
|
+
}
|
|
718
|
+
materialized.push({
|
|
719
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
720
|
+
tenantId,
|
|
721
|
+
principalId,
|
|
722
|
+
permissionKey: permission.key,
|
|
723
|
+
scopeKind: scoped.scopeKind,
|
|
724
|
+
scopeId: scoped.scopeId,
|
|
725
|
+
sourceKind: "role_assignment",
|
|
726
|
+
sourceId: assignment.id,
|
|
727
|
+
startsAt: assignment.startsAt,
|
|
728
|
+
expiresAt: assignment.expiresAt,
|
|
729
|
+
});
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
const created = await Promise.all(materialized.map((permission) => this.createOne({
|
|
734
|
+
id: permission.id,
|
|
735
|
+
tenant: permission.tenantId,
|
|
736
|
+
principal: permission.principalId,
|
|
737
|
+
permissionKey: permission.permissionKey,
|
|
738
|
+
scopeKind: permission.scopeKind,
|
|
739
|
+
scopeId: permission.scopeId,
|
|
740
|
+
sourceKind: permission.sourceKind,
|
|
741
|
+
sourceId: permission.sourceId,
|
|
742
|
+
startsAt: permission.startsAt,
|
|
743
|
+
expiresAt: permission.expiresAt,
|
|
744
|
+
}, ...args)));
|
|
745
|
+
return created;
|
|
746
|
+
}
|
|
747
|
+
async rebuildForTenant(tenantId, ...args) {
|
|
748
|
+
const principals = (await new PrincipalService().listAll(...args)).filter((principal) => sameTenant(principal.tenant, tenantId));
|
|
749
|
+
for (const principal of principals) {
|
|
750
|
+
await this.rebuildForPrincipal(tenantId, principal.id, ...args);
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
exports.EffectivePermissionService = EffectivePermissionService;
|
|
755
|
+
__decorate([
|
|
756
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
757
|
+
__metadata("design:type", Function),
|
|
758
|
+
__metadata("design:paramtypes", [String, String, Object]),
|
|
759
|
+
__metadata("design:returntype", Promise)
|
|
760
|
+
], EffectivePermissionService.prototype, "rebuildForPrincipal", null);
|
|
761
|
+
__decorate([
|
|
762
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
763
|
+
__metadata("design:type", Function),
|
|
764
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
765
|
+
__metadata("design:returntype", Promise)
|
|
766
|
+
], EffectivePermissionService.prototype, "rebuildForTenant", null);
|
|
767
|
+
class ProtectedResourceService extends org_based_authorization_system_js_1.BaseModelService {
|
|
768
|
+
constructor() {
|
|
769
|
+
super(org_based_authorization_system_models_1.ProtectedResource);
|
|
770
|
+
}
|
|
771
|
+
async registerResource(input, ...args) {
|
|
772
|
+
return this.createOne({
|
|
773
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
774
|
+
tenant: input.tenantId,
|
|
775
|
+
orgUnit: input.orgUnitId,
|
|
776
|
+
resourceType: input.resourceType,
|
|
777
|
+
resourceId: input.resourceId,
|
|
778
|
+
visibility: input.visibility,
|
|
779
|
+
owner: input.ownerPrincipalId,
|
|
780
|
+
sensitivity: input.sensitivity,
|
|
781
|
+
metadata: input.metadata,
|
|
782
|
+
}, ...args);
|
|
783
|
+
}
|
|
784
|
+
async getByDomainResource(tenantId, resourceType, resourceId, ...args) {
|
|
785
|
+
return (await this.listAll(...args)).find((resource) => sameTenant(resource.tenant, tenantId) &&
|
|
786
|
+
resource.resourceType === resourceType &&
|
|
787
|
+
resource.resourceId === resourceId);
|
|
788
|
+
}
|
|
789
|
+
async moveResourceToOrgUnit(protectedResourceId, orgUnitId, ...args) {
|
|
790
|
+
return this.updateOne(protectedResourceId, { orgUnit: orgUnitId }, ...args);
|
|
791
|
+
}
|
|
792
|
+
async setVisibility(protectedResourceId, visibility, ...args) {
|
|
793
|
+
return this.updateOne(protectedResourceId, { visibility }, ...args);
|
|
794
|
+
}
|
|
795
|
+
async transferOwnership(protectedResourceId, ownerPrincipalId, ...args) {
|
|
796
|
+
return this.updateOne(protectedResourceId, { owner: ownerPrincipalId }, ...args);
|
|
797
|
+
}
|
|
798
|
+
async listOrgUnitResources(orgUnitId, ...args) {
|
|
799
|
+
return (await this.listAll(...args)).filter((resource) => relationMatch(resource.orgUnit, orgUnitId));
|
|
800
|
+
}
|
|
801
|
+
async listTenantResources(tenantId, ...args) {
|
|
802
|
+
return (await this.listAll(...args)).filter((resource) => sameTenant(resource.tenant, tenantId));
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
exports.ProtectedResourceService = ProtectedResourceService;
|
|
806
|
+
class ResourceGrantService extends org_based_authorization_system_js_1.BaseModelService {
|
|
807
|
+
constructor() {
|
|
808
|
+
super(org_based_authorization_system_models_1.ResourceGrant);
|
|
809
|
+
}
|
|
810
|
+
async grantResource(input, ...args) {
|
|
811
|
+
return this.createOne({
|
|
812
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
813
|
+
tenant: input.tenantId,
|
|
814
|
+
resource: input.resourceId,
|
|
815
|
+
principal: input.principalId,
|
|
816
|
+
permissionKey: input.permissionKey,
|
|
817
|
+
startsAt: input.startsAt,
|
|
818
|
+
expiresAt: input.expiresAt,
|
|
819
|
+
conditions: input.conditions,
|
|
820
|
+
createdBy: input.createdByPrincipalId,
|
|
821
|
+
}, ...args);
|
|
822
|
+
}
|
|
823
|
+
async revokeGrant(grantId, ...args) {
|
|
824
|
+
await this.deleteById(grantId, ...args);
|
|
825
|
+
}
|
|
826
|
+
async listResourceGrants(protectedResourceId, ...args) {
|
|
827
|
+
return (await this.listAll(...args)).filter((grant) => relationMatch(grant.resource, protectedResourceId));
|
|
828
|
+
}
|
|
829
|
+
async listPrincipalGrants(tenantId, principalId, ...args) {
|
|
830
|
+
return (await this.listAll(...args)).filter((grant) => sameTenant(grant.tenant, tenantId) && relationMatch(grant.principal, principalId));
|
|
831
|
+
}
|
|
832
|
+
async hasGrant(tenantId, principalId, protectedResourceId, permissionKey, at, ...args) {
|
|
833
|
+
return (await this.listPrincipalGrants(tenantId, principalId, ...args)).some((grant) => relationMatch(grant.resource, protectedResourceId) &&
|
|
834
|
+
grant.permissionKey === permissionKey &&
|
|
835
|
+
(!grant.startsAt || !at || grant.startsAt <= at) &&
|
|
836
|
+
(!grant.expiresAt || !at || grant.expiresAt >= at));
|
|
837
|
+
}
|
|
838
|
+
async deleteAllForResource(protectedResourceId, ...args) {
|
|
839
|
+
await deleteManyById(this, await this.listResourceGrants(protectedResourceId, ...args), ...args);
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
exports.ResourceGrantService = ResourceGrantService;
|
|
843
|
+
class ResourceLifecycleService {
|
|
844
|
+
async unregisterResource(protectedResourceId, ...args) {
|
|
845
|
+
await new ResourceGrantService().deleteAllForResource(protectedResourceId, ...args);
|
|
846
|
+
await new ProtectedResourceService().deleteById(protectedResourceId, ...args);
|
|
847
|
+
}
|
|
848
|
+
async resolveResourceScope(protectedResourceId, ...args) {
|
|
849
|
+
const resource = await new ProtectedResourceService().getById(protectedResourceId, ...args);
|
|
850
|
+
return {
|
|
851
|
+
tenantId: (0, org_based_authorization_system_js_1.relationId)(resource.tenant),
|
|
852
|
+
orgUnitId: (0, org_based_authorization_system_js_1.relationId)(resource.orgUnit),
|
|
853
|
+
visibility: resource.visibility,
|
|
854
|
+
ownerPrincipalId: resource.owner ? (0, org_based_authorization_system_js_1.relationId)(resource.owner) : undefined,
|
|
855
|
+
};
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
exports.ResourceLifecycleService = ResourceLifecycleService;
|
|
859
|
+
class StorageBindingService extends org_based_authorization_system_js_1.BaseModelService {
|
|
860
|
+
constructor() {
|
|
861
|
+
super(org_based_authorization_system_models_1.StorageBinding);
|
|
862
|
+
}
|
|
863
|
+
async createBinding(input, ...args) {
|
|
864
|
+
return this.createOne({
|
|
865
|
+
id: (0, org_based_authorization_system_js_1.id)(),
|
|
866
|
+
tenant: input.tenantId,
|
|
867
|
+
storageKind: input.storageKind,
|
|
868
|
+
bindingKind: input.bindingKind,
|
|
869
|
+
bindingKey: input.bindingKey,
|
|
870
|
+
region: input.region,
|
|
871
|
+
config: input.config,
|
|
872
|
+
}, ...args);
|
|
873
|
+
}
|
|
874
|
+
async listTenantBindings(tenantId, ...args) {
|
|
875
|
+
return (await this.listAll(...args)).filter((binding) => sameTenant(binding.tenant, tenantId));
|
|
876
|
+
}
|
|
877
|
+
async getBinding(tenantId, storageKind, ...args) {
|
|
878
|
+
return (await this.listTenantBindings(tenantId, ...args)).find((binding) => binding.storageKind === storageKind);
|
|
879
|
+
}
|
|
880
|
+
async setBindingConfig(bindingId, config, ...args) {
|
|
881
|
+
return this.updateOne(bindingId, { config }, ...args);
|
|
882
|
+
}
|
|
883
|
+
async promoteToDedicated(bindingId, bindingKey, region, config, ...args) {
|
|
884
|
+
return this.updateOne(bindingId, { bindingKind: org_based_authorization_system_js_1.StorageBindingKind.Dedicated, bindingKey, region, config }, ...args);
|
|
885
|
+
}
|
|
886
|
+
async setShared(bindingId, bindingKey, region, config, ...args) {
|
|
887
|
+
return this.updateOne(bindingId, { bindingKind: org_based_authorization_system_js_1.StorageBindingKind.Shared, bindingKey, region, config }, ...args);
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
exports.StorageBindingService = StorageBindingService;
|
|
891
|
+
class BootstrapService {
|
|
892
|
+
constructor() {
|
|
893
|
+
this.tenantService = new TenantService();
|
|
894
|
+
this.tenantProfileService = new TenantProfileService();
|
|
895
|
+
this.orgUnitService = new OrgUnitService();
|
|
896
|
+
this.orgUnitProfileService = new OrgUnitProfileService();
|
|
897
|
+
this.userService = new UserService();
|
|
898
|
+
this.membershipService = new TenantMembershipService();
|
|
899
|
+
this.principalService = new PrincipalService();
|
|
900
|
+
this.permissionService = new PermissionService();
|
|
901
|
+
this.roleService = new RoleService();
|
|
902
|
+
this.rolePermissionService = new RolePermissionService();
|
|
903
|
+
this.roleAssignmentService = new RoleAssignmentService();
|
|
904
|
+
this.effectivePermissionService = new EffectivePermissionService();
|
|
905
|
+
}
|
|
906
|
+
async bootstrapTenantFromTemplate(template, ...args) {
|
|
907
|
+
const tenant = await this.tenantService.createTenant(template.tenant, ...args);
|
|
908
|
+
if (template.tenant.profileKey) {
|
|
909
|
+
await this.tenantProfileService.createProfile(tenant.id, template.tenant.profileKey, template.tenant.profileMetadata, ...args);
|
|
910
|
+
}
|
|
911
|
+
const createOrgTree = async (parentId, orgUnit) => {
|
|
912
|
+
const created = parentId === undefined
|
|
913
|
+
? await this.orgUnitService.createRoot(tenant.id, orgUnit.name, orgUnit.metadata, orgUnit.profileKey, orgUnit.metadata, ...args)
|
|
914
|
+
: await this.orgUnitService.createChild({
|
|
915
|
+
tenantId: tenant.id,
|
|
916
|
+
parentOrgUnitId: parentId,
|
|
917
|
+
name: orgUnit.name,
|
|
918
|
+
metadata: orgUnit.metadata,
|
|
919
|
+
profileKey: orgUnit.profileKey,
|
|
920
|
+
profileMetadata: orgUnit.metadata,
|
|
921
|
+
}, ...args);
|
|
922
|
+
for (const child of orgUnit.children ?? []) {
|
|
923
|
+
await createOrgTree(created.id, child);
|
|
924
|
+
}
|
|
925
|
+
return created;
|
|
926
|
+
};
|
|
927
|
+
const rootOrgUnit = await createOrgTree(undefined, template.rootOrgUnit);
|
|
928
|
+
const owner = await this.userService.createUser(template.ownerUser, ...args);
|
|
929
|
+
await this.membershipService.addUserToTenant(tenant.id, owner.id, org_based_authorization_system_js_1.MembershipStatus.Active, ...args);
|
|
930
|
+
const ownerPrincipal = await this.principalService.getUserPrincipal(tenant.id, owner.id, ...args);
|
|
931
|
+
for (const permission of template.permissions) {
|
|
932
|
+
await this.permissionService.createPermission(permission, ...args);
|
|
933
|
+
}
|
|
934
|
+
for (const role of template.roles) {
|
|
935
|
+
const createdRole = await this.roleService.createRole({
|
|
936
|
+
tenantId: tenant.id,
|
|
937
|
+
key: role.key,
|
|
938
|
+
name: role.name,
|
|
939
|
+
description: role.description,
|
|
940
|
+
}, ...args);
|
|
941
|
+
for (const permissionKey of role.permissionKeys) {
|
|
942
|
+
await this.rolePermissionService.addPermissionKeyToRole(createdRole.id, permissionKey, ...args);
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
const ownerRole = await this.roleService.getTenantRoleByKey(tenant.id, template.ownerRoleKey, ...args);
|
|
946
|
+
await this.roleAssignmentService.assignRole({
|
|
947
|
+
tenantId: tenant.id,
|
|
948
|
+
principalId: ownerPrincipal.id,
|
|
949
|
+
roleId: ownerRole.id,
|
|
950
|
+
scopeKind: org_based_authorization_system_js_1.ScopeKind.OrgUnit,
|
|
951
|
+
scopeId: rootOrgUnit.id,
|
|
952
|
+
inheritDown: true,
|
|
953
|
+
}, ...args);
|
|
954
|
+
await this.effectivePermissionService.rebuildForPrincipal(tenant.id, ownerPrincipal.id, ...args);
|
|
955
|
+
return {
|
|
956
|
+
tenantId: tenant.id,
|
|
957
|
+
rootOrgUnitId: rootOrgUnit.id,
|
|
958
|
+
ownerUserId: owner.id,
|
|
959
|
+
ownerPrincipalId: ownerPrincipal.id,
|
|
960
|
+
};
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
exports.BootstrapService = BootstrapService;
|
|
964
|
+
__decorate([
|
|
965
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
966
|
+
__metadata("design:type", Function),
|
|
967
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
968
|
+
__metadata("design:returntype", Promise)
|
|
969
|
+
], BootstrapService.prototype, "bootstrapTenantFromTemplate", null);
|
|
970
|
+
class SystemManagementService {
|
|
971
|
+
constructor() {
|
|
972
|
+
this.membershipService = new TenantMembershipService();
|
|
973
|
+
this.orgMembershipService = new OrgUnitMembershipService();
|
|
974
|
+
this.principalService = new PrincipalService();
|
|
975
|
+
this.roleService = new RoleService();
|
|
976
|
+
this.roleAssignmentService = new RoleAssignmentService();
|
|
977
|
+
this.effectivePermissionService = new EffectivePermissionService();
|
|
978
|
+
}
|
|
979
|
+
async onboardUserToTenantAndOrgUnit(tenantId, userId, orgUnitId, roleKey, ...args) {
|
|
980
|
+
await this.membershipService.addUserToTenant(tenantId, userId, org_based_authorization_system_js_1.MembershipStatus.Active, ...args);
|
|
981
|
+
await this.orgMembershipService.addUserToOrgUnit(tenantId, orgUnitId, userId, org_based_authorization_system_js_1.MembershipStatus.Active, ...args);
|
|
982
|
+
const principal = await this.principalService.getUserPrincipal(tenantId, userId, ...args);
|
|
983
|
+
const role = await this.roleService.getTenantRoleByKey(tenantId, roleKey, ...args);
|
|
984
|
+
await this.roleAssignmentService.assignRole({
|
|
985
|
+
tenantId,
|
|
986
|
+
principalId: principal.id,
|
|
987
|
+
roleId: role.id,
|
|
988
|
+
scopeKind: org_based_authorization_system_js_1.ScopeKind.OrgUnit,
|
|
989
|
+
scopeId: orgUnitId,
|
|
990
|
+
inheritDown: true,
|
|
991
|
+
}, ...args);
|
|
992
|
+
await this.effectivePermissionService.rebuildForPrincipal(tenantId, principal.id, ...args);
|
|
993
|
+
return { principalId: principal.id };
|
|
994
|
+
}
|
|
995
|
+
async changeUserOrgRole(tenantId, principalId, orgUnitId, roleKey, inheritDown, ...args) {
|
|
996
|
+
const role = await this.roleService.getTenantRoleByKey(tenantId, roleKey, ...args);
|
|
997
|
+
const currentAssignments = await this.roleAssignmentService.listPrincipalAssignments(tenantId, principalId, ...args);
|
|
998
|
+
for (const assignment of currentAssignments.filter((row) => row.scopeKind === org_based_authorization_system_js_1.ScopeKind.OrgUnit && row.scopeId === orgUnitId)) {
|
|
999
|
+
await this.roleAssignmentService.revokeAssignment(assignment.id, ...args);
|
|
1000
|
+
}
|
|
1001
|
+
await this.roleAssignmentService.assignRole({
|
|
1002
|
+
tenantId,
|
|
1003
|
+
principalId,
|
|
1004
|
+
roleId: role.id,
|
|
1005
|
+
scopeKind: org_based_authorization_system_js_1.ScopeKind.OrgUnit,
|
|
1006
|
+
scopeId: orgUnitId,
|
|
1007
|
+
inheritDown,
|
|
1008
|
+
}, ...args);
|
|
1009
|
+
await this.effectivePermissionService.rebuildForPrincipal(tenantId, principalId, ...args);
|
|
1010
|
+
}
|
|
1011
|
+
async suspendUserInTenant(tenantMembershipId, tenantId, principalId, ...args) {
|
|
1012
|
+
await this.membershipService.setStatus(tenantMembershipId, org_based_authorization_system_js_1.MembershipStatus.Suspended, ...args);
|
|
1013
|
+
await this.effectivePermissionService.deleteForPrincipal(tenantId, principalId, ...args);
|
|
1014
|
+
}
|
|
1015
|
+
async reactivateUserInTenant(tenantMembershipId, tenantId, principalId, ...args) {
|
|
1016
|
+
await this.membershipService.setStatus(tenantMembershipId, org_based_authorization_system_js_1.MembershipStatus.Active, ...args);
|
|
1017
|
+
await this.effectivePermissionService.rebuildForPrincipal(tenantId, principalId, ...args);
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
exports.SystemManagementService = SystemManagementService;
|
|
1021
|
+
__decorate([
|
|
1022
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
1023
|
+
__metadata("design:type", Function),
|
|
1024
|
+
__metadata("design:paramtypes", [String, String, String, String, Object]),
|
|
1025
|
+
__metadata("design:returntype", Promise)
|
|
1026
|
+
], SystemManagementService.prototype, "onboardUserToTenantAndOrgUnit", null);
|
|
1027
|
+
__decorate([
|
|
1028
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
1029
|
+
__metadata("design:type", Function),
|
|
1030
|
+
__metadata("design:paramtypes", [String, String, String, String, Boolean, Object]),
|
|
1031
|
+
__metadata("design:returntype", Promise)
|
|
1032
|
+
], SystemManagementService.prototype, "changeUserOrgRole", null);
|
|
1033
|
+
__decorate([
|
|
1034
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
1035
|
+
__metadata("design:type", Function),
|
|
1036
|
+
__metadata("design:paramtypes", [String, String, String, Object]),
|
|
1037
|
+
__metadata("design:returntype", Promise)
|
|
1038
|
+
], SystemManagementService.prototype, "suspendUserInTenant", null);
|
|
1039
|
+
__decorate([
|
|
1040
|
+
(0, org_based_authorization_system_js_1.transactional)(),
|
|
1041
|
+
__metadata("design:type", Function),
|
|
1042
|
+
__metadata("design:paramtypes", [String, String, String, Object]),
|
|
1043
|
+
__metadata("design:returntype", Promise)
|
|
1044
|
+
], SystemManagementService.prototype, "reactivateUserInTenant", null);
|
|
1045
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWJhc2VkLWF1dGhvcml6YXRpb24tc3lzdGVtLnNlcnZpY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25hbWVzcGFjZXMvb3JnLWJhc2VkLWF1dGhvcml6YXRpb24tc3lzdGVtLnNlcnZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGdCQUFnQixFQUVoQixhQUFhLEVBRWIsU0FBUyxFQUNULGtCQUFrQixFQUVsQixFQUFFLEVBQ0YsVUFBVSxFQUNWLGFBQWEsR0FDZCw0Q0FBeUM7QUFnQjFDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsS0FBSyxFQUNMLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGFBQWEsRUFDYixJQUFJLEVBQ0osY0FBYyxFQUNkLGNBQWMsRUFDZCxjQUFjLEVBQ2QsTUFBTSxFQUNOLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsSUFBSSxHQUNMLE1BQU0seUNBQXlDLENBQUM7QUFFakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNoQyxNQUFNLE9BQU8sR0FBRyxDQUFJLEtBQXNCLEVBQU8sRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDaEUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxTQUFrQixFQUFFLFFBQWdCLEVBQVcsRUFBRSxDQUNuRSxVQUFVLENBQUMsU0FBb0MsQ0FBQyxLQUFLLFFBQVEsQ0FBQztBQUNoRSxNQUFNLGFBQWEsR0FBRyxDQUNwQixLQUFjLEVBQ2QsTUFBMEIsRUFDakIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBZ0MsQ0FBQyxLQUFLLE1BQU0sQ0FB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QUFXO1FBRWQsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUNwQyxrQkFBa0IsRUFDbEIsZ0JBQWdCLENBQUMsU0FBUyxFQUMxQixHQUFHLElBQUksQ0FDUixDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFHSyxBQUFOLEtBQUssQ0FBQyxzQkFBc0IsQ0FDMUIsa0JBQTBCLEVBQzFCLFFBQWdCLEVBQ2hCLFdBQW1CLEVBQ25CLEdBQUcsSUFBVztRQUVkLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM3RixNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDNUYsQ0FBQztDQUNGO0FBM0ZPO0lBREwsYUFBYSxFQUFFOzs7OzRFQStCZjtBQUdLO0lBREwsYUFBYSxFQUFFOzs7O2dFQWdDZjtBQUdLO0lBREwsYUFBYSxFQUFFOzs7O2tFQWFmO0FBR0s7SUFETCxhQUFhLEVBQUU7Ozs7cUVBU2YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlTW9kZWxTZXJ2aWNlLFxuICBJc29sYXRpb25UaWVyLFxuICBNZW1iZXJzaGlwU3RhdHVzLFxuICBQZXJtaXNzaW9uQ2F0ZWdvcnksXG4gIFByaW5jaXBhbEtpbmQsXG4gIFJlc291cmNlVmlzaWJpbGl0eSxcbiAgU2NvcGVLaW5kLFxuICBTdG9yYWdlQmluZGluZ0tpbmQsXG4gIFN0b3JhZ2VLaW5kLFxuICBpZCxcbiAgcmVsYXRpb25JZCxcbiAgdHJhbnNhY3Rpb25hbCxcbn0gZnJvbSBcIi4vb3JnLWJhc2VkLWF1dGhvcml6YXRpb24tc3lzdGVtXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFzc2lnblJvbGVJbnB1dCxcbiAgQm9vdHN0cmFwT3JnVW5pdCxcbiAgQm9vdHN0cmFwVGVtcGxhdGUsXG4gIENhbkFjY2Vzc0lucHV0LFxuICBDcmVhdGVPcmdVbml0SW5wdXQsXG4gIENyZWF0ZVBlcm1pc3Npb25JbnB1dCxcbiAgQ3JlYXRlUm9sZUlucHV0LFxuICBDcmVhdGVTdG9yYWdlQmluZGluZ0lucHV0LFxuICBDcmVhdGVUZW5hbnRJbnB1dCxcbiAgQ3JlYXRlVXNlcklucHV0LFxuICBFZmZlY3RpdmVQZXJtaXNzaW9uU25hcHNob3QsXG4gIEdyYW50UmVzb3VyY2VJbnB1dCxcbiAgUmVnaXN0ZXJSZXNvdXJjZUlucHV0LFxufSBmcm9tIFwiLi9vcmctYmFzZWQtYXV0aG9yaXphdGlvbi1zeXN0ZW1cIjtcbmltcG9ydCB7XG4gIEVmZmVjdGl2ZVBlcm1pc3Npb24sXG4gIEdyb3VwLFxuICBHcm91cE1lbWJlcnNoaXAsXG4gIEluaGVyaXRhbmNlQmxvY2ssXG4gIE9yZ1VuaXQsXG4gIE9yZ1VuaXRDbG9zdXJlLFxuICBPcmdVbml0TWVtYmVyc2hpcCxcbiAgT3JnVW5pdFByb2ZpbGUsXG4gIFBlcm1pc3Npb24sXG4gIFByb3RlY3RlZFJlc291cmNlLFxuICBQcmluY2lwYWwsXG4gIFJlc291cmNlR3JhbnQsXG4gIFJvbGUsXG4gIFJvbGVBc3NpZ25tZW50LFxuICBSb2xlUGVybWlzc2lvbixcbiAgU3RvcmFnZUJpbmRpbmcsXG4gIFRlbmFudCxcbiAgVGVuYW50TWVtYmVyc2hpcCxcbiAgVGVuYW50UHJvZmlsZSxcbiAgVXNlcixcbn0gZnJvbSBcIi4vb3JnLWJhc2VkLWF1dGhvcml6YXRpb24tc3lzdGVtLm1vZGVsc1wiO1xuXG5jb25zdCBub3dJc28gPSAoKSA9PiBuZXcgRGF0ZSgpO1xuY29uc3QgYXNBcnJheSA9IDxUPih2YWx1ZTogVFtdIHwgdW5kZWZpbmVkKTogVFtdID0+IHZhbHVlID8/IFtdO1xuY29uc3Qgc2FtZVRlbmFudCA9IChyb3dUZW5hbnQ6IHVua25vd24sIHRlbmFudElkOiBzdHJpbmcpOiBib29sZWFuID0+XG4gIHJlbGF0aW9uSWQocm93VGVuYW50IGFzIHsgaWQ6IHN0cmluZyB9IHwgc3RyaW5nKSA9PT0gdGVuYW50SWQ7XG5jb25zdCByZWxhdGlvbk1hdGNoID0gKFxuICB2YWx1ZTogdW5rbm93bixcbiAgdGFyZ2V0OiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gPT4gKHRhcmdldCA/IHJlbGF0aW9uSWQodmFsdWUgYXMgeyBpZDogc3RyaW5nIH0gfCBzdHJpbmcpID09PSB0YXJnZXQgOiBmYWxzZSk7XG5jb25zdCBsb3dlclNsdWcgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PlxuICB2YWx1ZVxuICAgIC50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csIFwiLVwiKVxuICAgIC5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpIHx8IFwiaXRlbVwiO1xuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVNYW55QnlJZChcbiAgc2VydmljZTogQmFzZU1vZGVsU2VydmljZTxhbnk+LFxuICByb3dzOiBBcnJheTx7IGlkOiBzdHJpbmcgfT4sXG4gIC4uLmFyZ3M6IGFueVtdXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgIGF3YWl0IHNlcnZpY2UuZGVsZXRlQnlJZChyb3cuaWQsIC4uLmFyZ3MpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW5hbnRQcm9maWxlU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8VGVuYW50UHJvZmlsZT4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihUZW5hbnRQcm9maWxlKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVByb2ZpbGUoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwcm9maWxlS2V5OiBzdHJpbmcsXG4gICAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFRlbmFudFByb2ZpbGU+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoXG4gICAgICB7XG4gICAgICAgIGlkOiBpZCgpLFxuICAgICAgICB0ZW5hbnQ6IHRlbmFudElkLFxuICAgICAgICBwcm9maWxlS2V5LFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RGb3JUZW5hbnQodGVuYW50SWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFRlbmFudFByb2ZpbGVbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHByb2ZpbGUpID0+XG4gICAgICByZWxhdGlvbk1hdGNoKHByb2ZpbGUudGVuYW50LCB0ZW5hbnRJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRm9yVGVuYW50KHRlbmFudElkOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZGVsZXRlTWFueUJ5SWQodGhpcywgYXdhaXQgdGhpcy5saXN0Rm9yVGVuYW50KHRlbmFudElkLCAuLi5hcmdzKSwgLi4uYXJncyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9yZ1VuaXRQcm9maWxlU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8T3JnVW5pdFByb2ZpbGU+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoT3JnVW5pdFByb2ZpbGUpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlUHJvZmlsZShcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICBwcm9maWxlS2V5OiBzdHJpbmcsXG4gICAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE9yZ1VuaXRQcm9maWxlPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgb3JnVW5pdDogb3JnVW5pdElkLFxuICAgICAgICBwcm9maWxlS2V5LFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RGb3JPcmdVbml0KG9yZ1VuaXRJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8T3JnVW5pdFByb2ZpbGVbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHByb2ZpbGUpID0+XG4gICAgICByZWxhdGlvbk1hdGNoKHByb2ZpbGUub3JnVW5pdCwgb3JnVW5pdElkKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9yZ1VuaXRDbG9zdXJlU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8T3JnVW5pdENsb3N1cmU+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoT3JnVW5pdENsb3N1cmUpO1xuICB9XG5cbiAgYXN5bmMgbGlzdEFuY2VzdG9ycyhcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8T3JnVW5pdENsb3N1cmVbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHJvdykgPT5cbiAgICAgICAgICBzYW1lVGVuYW50KHJvdy50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICAgIHJlbGF0aW9uTWF0Y2gocm93LmRlc2NlbmRhbnQsIG9yZ1VuaXRJZClcbiAgICAgIClcbiAgICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5kZXB0aCAtIHJpZ2h0LmRlcHRoKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3REZXNjZW5kYW50cyhcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8T3JnVW5pdENsb3N1cmVbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHJvdykgPT5cbiAgICAgICAgICBzYW1lVGVuYW50KHJvdy50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICAgIHJlbGF0aW9uTWF0Y2gocm93LmFuY2VzdG9yLCBvcmdVbml0SWQpXG4gICAgICApXG4gICAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQuZGVwdGggLSByaWdodC5kZXB0aCk7XG4gIH1cblxuICBhc3luYyBpc0FuY2VzdG9yT2YoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBhbmNlc3Rvck9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIGRlc2NlbmRhbnRPcmdVbml0SWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFuY2VzdG9ycyh0ZW5hbnRJZCwgZGVzY2VuZGFudE9yZ1VuaXRJZCwgLi4uYXJncykpLnNvbWUoXG4gICAgICAocm93KSA9PiByZWxhdGlvbk1hdGNoKHJvdy5hbmNlc3RvciwgYW5jZXN0b3JPcmdVbml0SWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlbGZMaW5rKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgb3JnVW5pdElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxPcmdVbml0Q2xvc3VyZT4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZShcbiAgICAgIHtcbiAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgIGFuY2VzdG9yOiBvcmdVbml0SWQsXG4gICAgICAgIGRlc2NlbmRhbnQ6IG9yZ1VuaXRJZCxcbiAgICAgICAgZGVwdGg6IDAsXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyBpbnNlcnRBbmNlc3RvckxpbmtzRm9yTmV3Q2hpbGQoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwYXJlbnRPcmdVbml0SWQ6IHN0cmluZyxcbiAgICBjaGlsZE9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFuY2VzdG9yTGlua3MgPSBhd2FpdCB0aGlzLmxpc3RBbmNlc3RvcnModGVuYW50SWQsIHBhcmVudE9yZ1VuaXRJZCwgLi4uYXJncyk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBhbmNlc3RvckxpbmtzLm1hcCgobGluaykgPT5cbiAgICAgICAgdGhpcy5jcmVhdGVPbmUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICB0ZW5hbnQ6IHRlbmFudElkLFxuICAgICAgICAgICAgYW5jZXN0b3I6IGxpbmsuYW5jZXN0b3IsXG4gICAgICAgICAgICBkZXNjZW5kYW50OiBjaGlsZE9yZ1VuaXRJZCxcbiAgICAgICAgICAgIGRlcHRoOiBsaW5rLmRlcHRoICsgMSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBkZWxldGVMaW5rc0ZvclN1YnRyZWUoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdWJ0cmVlID0gYXdhaXQgdGhpcy5saXN0RGVzY2VuZGFudHModGVuYW50SWQsIG9yZ1VuaXRJZCwgLi4uYXJncyk7XG4gICAgY29uc3QgZGVzY2VuZGFudElkcyA9IG5ldyBTZXQoW1xuICAgICAgb3JnVW5pdElkLFxuICAgICAgLi4uc3VidHJlZS5tYXAoKHJvdykgPT4gcmVsYXRpb25JZChyb3cuZGVzY2VuZGFudCkpLFxuICAgIF0pO1xuICAgIGNvbnN0IGFuY2VzdG9ySWRzID0gbmV3IFNldChbXG4gICAgICBvcmdVbml0SWQsXG4gICAgICAuLi5zdWJ0cmVlLm1hcCgocm93KSA9PiByZWxhdGlvbklkKHJvdy5hbmNlc3RvcikpLFxuICAgIF0pO1xuICAgIGNvbnN0IHJvd3MgPSAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoXG4gICAgICAocm93KSA9PlxuICAgICAgICBzYW1lVGVuYW50KHJvdy50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICAoZGVzY2VuZGFudElkcy5oYXMocmVsYXRpb25JZChyb3cuZGVzY2VuZGFudCkpIHx8XG4gICAgICAgICAgYW5jZXN0b3JJZHMuaGFzKHJlbGF0aW9uSWQocm93LmFuY2VzdG9yKSkpXG4gICAgKTtcbiAgICBhd2FpdCBkZWxldGVNYW55QnlJZCh0aGlzLCByb3dzLCAuLi5hcmdzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5oZXJpdGFuY2VCbG9ja1NlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPEluaGVyaXRhbmNlQmxvY2s+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoSW5oZXJpdGFuY2VCbG9jayk7XG4gIH1cblxuICBhc3luYyBibG9ja0NhdGVnb3J5KFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgb3JnVW5pdElkOiBzdHJpbmcsXG4gICAgcGVybWlzc2lvbkNhdGVnb3J5OiBQZXJtaXNzaW9uQ2F0ZWdvcnksXG4gICAgYmxvY2tlZEZyb21BbmNlc3RvcklkPzogc3RyaW5nLFxuICAgIHJlYXNvbj86IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEluaGVyaXRhbmNlQmxvY2s+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoXG4gICAgICB7XG4gICAgICAgIGlkOiBpZCgpLFxuICAgICAgICB0ZW5hbnQ6IHRlbmFudElkLFxuICAgICAgICBvcmdVbml0OiBvcmdVbml0SWQsXG4gICAgICAgIGJsb2NrZWRGcm9tQW5jZXN0b3I6IGJsb2NrZWRGcm9tQW5jZXN0b3JJZCxcbiAgICAgICAgcGVybWlzc2lvbkNhdGVnb3J5LFxuICAgICAgICByZWFzb24sXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyB1bmJsb2NrQ2F0ZWdvcnkoYmxvY2tJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGVsZXRlQnlJZChibG9ja0lkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RGb3JPcmdVbml0KFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgb3JnVW5pdElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxJbmhlcml0YW5jZUJsb2NrW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKFxuICAgICAgKGJsb2NrKSA9PlxuICAgICAgICBzYW1lVGVuYW50KGJsb2NrLnRlbmFudCwgdGVuYW50SWQpICYmIHJlbGF0aW9uTWF0Y2goYmxvY2sub3JnVW5pdCwgb3JnVW5pdElkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBjYXRlZ29yeUJsb2NrZWRGb3JBbmNlc3RvcihcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIGFuY2VzdG9yT3JnVW5pdElkOiBzdHJpbmcsXG4gICAgY2F0ZWdvcnk6IFBlcm1pc3Npb25DYXRlZ29yeSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEZvck9yZ1VuaXQodGVuYW50SWQsIG9yZ1VuaXRJZCwgLi4uYXJncykpLnNvbWUoXG4gICAgICAoYmxvY2spID0+XG4gICAgICAgIGJsb2NrLnBlcm1pc3Npb25DYXRlZ29yeSA9PT0gY2F0ZWdvcnkgJiZcbiAgICAgICAgKCFibG9jay5ibG9ja2VkRnJvbUFuY2VzdG9yIHx8XG4gICAgICAgICAgcmVsYXRpb25NYXRjaChibG9jay5ibG9ja2VkRnJvbUFuY2VzdG9yLCBhbmNlc3Rvck9yZ1VuaXRJZCkpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVuYW50U2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8VGVuYW50PiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFRlbmFudCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVUZW5hbnQoaW5wdXQ6IENyZWF0ZVRlbmFudElucHV0LCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8VGVuYW50PiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgc2x1ZzogaW5wdXQuc2x1ZyxcbiAgICAgICAgbmFtZTogaW5wdXQubmFtZSxcbiAgICAgICAgaXNvbGF0aW9uVGllcjogaW5wdXQuaXNvbGF0aW9uVGllciA/PyBJc29sYXRpb25UaWVyLlBvb2xlZCxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldEJ5U2x1ZyhzbHVnOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxUZW5hbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5maW5kT25lQnkoXCJzbHVnXCIsIHNsdWcgYXMgbmV2ZXIsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgcmVuYW1lVGVuYW50KHRlbmFudElkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFRlbmFudD4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZSh0ZW5hbnRJZCwgeyBuYW1lIH0sIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgY2hhbmdlU2x1Zyh0ZW5hbnRJZDogc3RyaW5nLCBzbHVnOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxUZW5hbnQ+IHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUodGVuYW50SWQsIHsgc2x1ZyB9LCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIHNldElzb2xhdGlvblRpZXIoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBpc29sYXRpb25UaWVyOiBJc29sYXRpb25UaWVyLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8VGVuYW50PiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKHRlbmFudElkLCB7IGlzb2xhdGlvblRpZXIgfSwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBkZWxldGVUZW5hbnRDb250cm9sbGVkKHRlbmFudElkOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5kZWxldGVCeUlkKHRlbmFudElkLCAuLi5hcmdzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3JnVW5pdFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPE9yZ1VuaXQ+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoT3JnVW5pdCk7XG4gIH1cblxuICBwcml2YXRlIG9yZ1VuaXRQYXRoKHBhcmVudFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCwgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWdtZW50ID0gbG93ZXJTbHVnKG5hbWUpO1xuICAgIHJldHVybiBwYXJlbnRQYXRoID8gYCR7cGFyZW50UGF0aC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpfS8ke3NlZ21lbnR9YCA6IGAvJHtzZWdtZW50fWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZVByb2ZpbGVJZk5lZWRlZChcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICBwcm9maWxlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcHJvZmlsZU1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXByb2ZpbGVLZXkpIHJldHVybjtcbiAgICBjb25zdCBwcm9maWxlU2VydmljZSA9IG5ldyBPcmdVbml0UHJvZmlsZVNlcnZpY2UoKTtcbiAgICBhd2FpdCBwcm9maWxlU2VydmljZS5jcmVhdGVQcm9maWxlKG9yZ1VuaXRJZCwgcHJvZmlsZUtleSwgcHJvZmlsZU1ldGFkYXRhLCAuLi5hcmdzKTtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgY3JlYXRlUm9vdChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHByb2ZpbGVLZXk/OiBzdHJpbmcsXG4gICAgcHJvZmlsZU1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxPcmdVbml0PiB7XG4gICAgY29uc3Qgb3JnVW5pdCA9IGF3YWl0IHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgdGVuYW50OiB0ZW5hbnRJZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcGF0aDogdGhpcy5vcmdVbml0UGF0aCh1bmRlZmluZWQsIG5hbWUpLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVByb2ZpbGVJZk5lZWRlZChvcmdVbml0LmlkLCBwcm9maWxlS2V5LCBwcm9maWxlTWV0YWRhdGEsIC4uLmFyZ3MpO1xuICAgIGNvbnN0IGNsb3N1cmVTZXJ2aWNlID0gbmV3IE9yZ1VuaXRDbG9zdXJlU2VydmljZSgpO1xuICAgIGF3YWl0IGNsb3N1cmVTZXJ2aWNlLmNyZWF0ZVNlbGZMaW5rKHRlbmFudElkLCBvcmdVbml0LmlkLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gb3JnVW5pdDtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgY3JlYXRlQ2hpbGQoaW5wdXQ6IENyZWF0ZU9yZ1VuaXRJbnB1dCwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE9yZ1VuaXQ+IHtcbiAgICBjb25zdCBwYXJlbnQgPSBpbnB1dC5wYXJlbnRPcmdVbml0SWRcbiAgICAgID8gYXdhaXQgdGhpcy5nZXRCeUlkKGlucHV0LnBhcmVudE9yZ1VuaXRJZCwgLi4uYXJncylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IG9yZ1VuaXQgPSBhd2FpdCB0aGlzLmNyZWF0ZU9uZShcbiAgICAgIHtcbiAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgIHRlbmFudDogaW5wdXQudGVuYW50SWQsXG4gICAgICAgIHBhcmVudDogcGFyZW50Py5pZCA/PyBpbnB1dC5wYXJlbnRPcmdVbml0SWQsXG4gICAgICAgIG5hbWU6IGlucHV0Lm5hbWUsXG4gICAgICAgIHBhdGg6IHRoaXMub3JnVW5pdFBhdGgocGFyZW50Py5wYXRoLCBpbnB1dC5uYW1lKSxcbiAgICAgICAgbWV0YWRhdGE6IGlucHV0Lm1ldGFkYXRhLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlUHJvZmlsZUlmTmVlZGVkKFxuICAgICAgb3JnVW5pdC5pZCxcbiAgICAgIGlucHV0LnByb2ZpbGVLZXksXG4gICAgICBpbnB1dC5wcm9maWxlTWV0YWRhdGEsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBjb25zdCBjbG9zdXJlU2VydmljZSA9IG5ldyBPcmdVbml0Q2xvc3VyZVNlcnZpY2UoKTtcbiAgICBhd2FpdCBjbG9zdXJlU2VydmljZS5jcmVhdGVTZWxmTGluayhpbnB1dC50ZW5hbnRJZCwgb3JnVW5pdC5pZCwgLi4uYXJncyk7XG4gICAgaWYgKGlucHV0LnBhcmVudE9yZ1VuaXRJZCkge1xuICAgICAgYXdhaXQgY2xvc3VyZVNlcnZpY2UuaW5zZXJ0QW5jZXN0b3JMaW5rc0Zvck5ld0NoaWxkKFxuICAgICAgICBpbnB1dC50ZW5hbnRJZCxcbiAgICAgICAgaW5wdXQucGFyZW50T3JnVW5pdElkLFxuICAgICAgICBvcmdVbml0LmlkLFxuICAgICAgICAuLi5hcmdzXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb3JnVW5pdDtcbiAgfVxuXG4gIGFzeW5jIGxpc3RDaGlsZHJlbihwYXJlbnRPcmdVbml0SWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE9yZ1VuaXRbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKG9yZ1VuaXQpID0+XG4gICAgICByZWxhdGlvbk1hdGNoKG9yZ1VuaXQucGFyZW50LCBwYXJlbnRPcmdVbml0SWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RUZW5hbnRPcmdVbml0cyh0ZW5hbnRJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8T3JnVW5pdFtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigob3JnVW5pdCkgPT5cbiAgICAgIHNhbWVUZW5hbnQob3JnVW5pdC50ZW5hbnQsIHRlbmFudElkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBsaXN0RGVzY2VuZGFudE9yZ1VuaXRzKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgb3JnVW5pdElkOiBzdHJpbmcsXG4gICAgaW5jbHVkZVNlbGYgPSBmYWxzZSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE9yZ1VuaXRbXT4ge1xuICAgIGNvbnN0IGNsb3N1cmVTZXJ2aWNlID0gbmV3IE9yZ1VuaXRDbG9zdXJlU2VydmljZSgpO1xuICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gYXdhaXQgY2xvc3VyZVNlcnZpY2UubGlzdERlc2NlbmRhbnRzKHRlbmFudElkLCBvcmdVbml0SWQsIC4uLmFyZ3MpO1xuICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQoZGVzY2VuZGFudHMubWFwKChyb3cpID0+IHJlbGF0aW9uSWQocm93LmRlc2NlbmRhbnQpKSk7XG4gICAgaWYgKGluY2x1ZGVTZWxmKSBpZHMuYWRkKG9yZ1VuaXRJZCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RUZW5hbnRPcmdVbml0cyh0ZW5hbnRJZCwgLi4uYXJncykpLmZpbHRlcigob3JnVW5pdCkgPT5cbiAgICAgIGlkcy5oYXMob3JnVW5pdC5pZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbGlzdEFuY2VzdG9yT3JnVW5pdHMoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICBpbmNsdWRlU2VsZiA9IGZhbHNlLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8T3JnVW5pdFtdPiB7XG4gICAgY29uc3QgY2xvc3VyZVNlcnZpY2UgPSBuZXcgT3JnVW5pdENsb3N1cmVTZXJ2aWNlKCk7XG4gICAgY29uc3QgYW5jZXN0b3JzID0gYXdhaXQgY2xvc3VyZVNlcnZpY2UubGlzdEFuY2VzdG9ycyh0ZW5hbnRJZCwgb3JnVW5pdElkLCAuLi5hcmdzKTtcbiAgICBjb25zdCBpZHMgPSBuZXcgU2V0KGFuY2VzdG9ycy5tYXAoKHJvdykgPT4gcmVsYXRpb25JZChyb3cuYW5jZXN0b3IpKSk7XG4gICAgaWYgKGluY2x1ZGVTZWxmKSBpZHMuYWRkKG9yZ1VuaXRJZCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RUZW5hbnRPcmdVbml0cyh0ZW5hbnRJZCwgLi4uYXJncykpLmZpbHRlcigob3JnVW5pdCkgPT5cbiAgICAgIGlkcy5oYXMob3JnVW5pdC5pZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVuYW1lT3JnVW5pdChvcmdVbml0SWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8T3JnVW5pdD4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5nZXRCeUlkKG9yZ1VuaXRJZCwgLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKG9yZ1VuaXRJZCwgeyBuYW1lLCBwYXRoOiB0aGlzLm9yZ1VuaXRQYXRoKHVuZGVmaW5lZCwgbmFtZSkgfSwgLi4uYXJncykudGhlbihcbiAgICAgIGFzeW5jICh1cGRhdGVkKSA9PiB7XG4gICAgICAgIHVwZGF0ZWQucGF0aCA9IGV4aXN0aW5nLnBhcmVudCA/IHRoaXMub3JnVW5pdFBhdGgodW5kZWZpbmVkLCBuYW1lKSA6IHRoaXMub3JnVW5pdFBhdGgodW5kZWZpbmVkLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgbW92ZU9yZ1VuaXQoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICBuZXdQYXJlbnRPcmdVbml0SWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE9yZ1VuaXQ+IHtcbiAgICBjb25zdCBuZXdQYXJlbnQgPSBhd2FpdCB0aGlzLmdldEJ5SWQobmV3UGFyZW50T3JnVW5pdElkLCAuLi5hcmdzKTtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZ2V0QnlJZChvcmdVbml0SWQsIC4uLmFyZ3MpO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZU9uZShcbiAgICAgIG9yZ1VuaXRJZCxcbiAgICAgIHtcbiAgICAgICAgcGFyZW50OiBuZXdQYXJlbnQuaWQsXG4gICAgICAgIHBhdGg6IHRoaXMub3JnVW5pdFBhdGgobmV3UGFyZW50LnBhdGgsIGV4aXN0aW5nLm5hbWUpLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGF3YWl0IHRoaXMucmVidWlsZFRlbmFudENsb3N1cmUodGVuYW50SWQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB1cGRhdGVkO1xuICB9XG5cbiAgQHRyYW5zYWN0aW9uYWwoKVxuICBhc3luYyByZWJ1aWxkVGVuYW50Q2xvc3VyZSh0ZW5hbnRJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNsb3N1cmVTZXJ2aWNlID0gbmV3IE9yZ1VuaXRDbG9zdXJlU2VydmljZSgpO1xuICAgIGNvbnN0IGV4aXN0aW5nTGlua3MgPSBhd2FpdCBjbG9zdXJlU2VydmljZS5saXN0QWxsKC4uLmFyZ3MpO1xuICAgIGF3YWl0IGRlbGV0ZU1hbnlCeUlkKFxuICAgICAgY2xvc3VyZVNlcnZpY2UsXG4gICAgICBleGlzdGluZ0xpbmtzLmZpbHRlcigocm93KSA9PiBzYW1lVGVuYW50KHJvdy50ZW5hbnQsIHRlbmFudElkKSksXG4gICAgICAuLi5hcmdzXG4gICAgKTtcblxuICAgIGNvbnN0IG9yZ1VuaXRzID0gKGF3YWl0IHRoaXMubGlzdFRlbmFudE9yZ1VuaXRzKHRlbmFudElkLCAuLi5hcmdzKSkuc29ydCgobGVmdCwgcmlnaHQpID0+IHtcbiAgICAgIGNvbnN0IGxlZnREZXB0aCA9IGxlZnQucGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtcbiAgICAgIGNvbnN0IHJpZ2h0RGVwdGggPSByaWdodC5wYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlZnREZXB0aCAtIHJpZ2h0RGVwdGg7XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IG9yZ1VuaXQgb2Ygb3JnVW5pdHMpIHtcbiAgICAgIGF3YWl0IGNsb3N1cmVTZXJ2aWNlLmNyZWF0ZVNlbGZMaW5rKHRlbmFudElkLCBvcmdVbml0LmlkLCAuLi5hcmdzKTtcbiAgICAgIGlmIChvcmdVbml0LnBhcmVudCkge1xuICAgICAgICBhd2FpdCBjbG9zdXJlU2VydmljZS5pbnNlcnRBbmNlc3RvckxpbmtzRm9yTmV3Q2hpbGQoXG4gICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgcmVsYXRpb25JZChvcmdVbml0LnBhcmVudCksXG4gICAgICAgICAgb3JnVW5pdC5pZCxcbiAgICAgICAgICAuLi5hcmdzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHRyYW5zYWN0aW9uYWwoKVxuICBhc3luYyBkZWxldGVPcmdVbml0VHJlZSh0ZW5hbnRJZDogc3RyaW5nLCBvcmdVbml0SWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjbG9zdXJlU2VydmljZSA9IG5ldyBPcmdVbml0Q2xvc3VyZVNlcnZpY2UoKTtcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IGF3YWl0IHRoaXMubGlzdERlc2NlbmRhbnRPcmdVbml0cyh0ZW5hbnRJZCwgb3JnVW5pdElkLCB0cnVlLCAuLi5hcmdzKTtcbiAgICBjb25zdCBkZXNjZW5kYW50SWRzID0gbmV3IFNldChkZXNjZW5kYW50cy5tYXAoKG9yZ1VuaXQpID0+IG9yZ1VuaXQuaWQpKTtcbiAgICBjb25zdCBvcmdVbml0cyA9IChhd2FpdCB0aGlzLmxpc3RUZW5hbnRPcmdVbml0cyh0ZW5hbnRJZCwgLi4uYXJncykpLmZpbHRlcigob3JnVW5pdCkgPT5cbiAgICAgIGRlc2NlbmRhbnRJZHMuaGFzKG9yZ1VuaXQuaWQpXG4gICAgKTtcbiAgICBhd2FpdCBkZWxldGVNYW55QnlJZCh0aGlzLCBvcmdVbml0cywgLi4uYXJncyk7XG4gICAgYXdhaXQgY2xvc3VyZVNlcnZpY2UuZGVsZXRlTGlua3NGb3JTdWJ0cmVlKHRlbmFudElkLCBvcmdVbml0SWQsIC4uLmFyZ3MpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8VXNlcj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihVc2VyKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVVzZXIoaW5wdXQ6IENyZWF0ZVVzZXJJbnB1dCwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFVzZXI+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoXG4gICAgICB7XG4gICAgICAgIGlkOiBpZCgpLFxuICAgICAgICBlbWFpbDogaW5wdXQuZW1haWwsXG4gICAgICAgIHBob25lOiBpbnB1dC5waG9uZSxcbiAgICAgICAgZGlzcGxheU5hbWU6IGlucHV0LmRpc3BsYXlOYW1lLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0QnlFbWFpbChlbWFpbDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8VXNlcj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maW5kKCh1c2VyKSA9PiB1c2VyLmVtYWlsID09PSBlbWFpbCkgYXMgVXNlcjtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURpc3BsYXlOYW1lKHVzZXJJZDogc3RyaW5nLCBkaXNwbGF5TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8VXNlcj4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZSh1c2VySWQsIHsgZGlzcGxheU5hbWUgfSwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVFbWFpbChcbiAgICB1c2VySWQ6IHN0cmluZyxcbiAgICBlbWFpbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8VXNlcj4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZSh1c2VySWQsIHsgZW1haWwgfSwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVQaG9uZShcbiAgICB1c2VySWQ6IHN0cmluZyxcbiAgICBwaG9uZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8VXNlcj4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZSh1c2VySWQsIHsgcGhvbmUgfSwgLi4uYXJncyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByaW5jaXBhbFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPFByaW5jaXBhbD4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihQcmluY2lwYWwpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlUHJpbmNpcGFsKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAga2luZDogUHJpbmNpcGFsS2luZCxcbiAgICBzdWJqZWN0SWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFByaW5jaXBhbD4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZShcbiAgICAgIHtcbiAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgIGtpbmQsXG4gICAgICAgIHN1YmplY3RJZCxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZvclN1YmplY3QoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBraW5kOiBQcmluY2lwYWxLaW5kLFxuICAgIHN1YmplY3RJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UHJpbmNpcGFsIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbmQoXG4gICAgICAocHJpbmNpcGFsKSA9PlxuICAgICAgICBzYW1lVGVuYW50KHByaW5jaXBhbC50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICBwcmluY2lwYWwua2luZCA9PT0ga2luZCAmJlxuICAgICAgICBwcmluY2lwYWwuc3ViamVjdElkID09PSBzdWJqZWN0SWRcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0T3JDcmVhdGVGb3JTdWJqZWN0KFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAga2luZDogUHJpbmNpcGFsS2luZCxcbiAgICBzdWJqZWN0SWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFByaW5jaXBhbD4ge1xuICAgIHJldHVybiAoXG4gICAgICAoYXdhaXQgdGhpcy5nZXRGb3JTdWJqZWN0KHRlbmFudElkLCBraW5kLCBzdWJqZWN0SWQsIC4uLmFyZ3MpKSA/P1xuICAgICAgKGF3YWl0IHRoaXMuY3JlYXRlUHJpbmNpcGFsKHRlbmFudElkLCBraW5kLCBzdWJqZWN0SWQsIC4uLmFyZ3MpKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRVc2VyUHJpbmNpcGFsKHRlbmFudElkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8UHJpbmNpcGFsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVGb3JTdWJqZWN0KHRlbmFudElkLCBQcmluY2lwYWxLaW5kLlVzZXIsIHVzZXJJZCwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBnZXRHcm91cFByaW5jaXBhbCh0ZW5hbnRJZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxQcmluY2lwYWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRPckNyZWF0ZUZvclN1YmplY3QodGVuYW50SWQsIFByaW5jaXBhbEtpbmQuR3JvdXAsIGdyb3VwSWQsIC4uLmFyZ3MpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW5hbnRNZW1iZXJzaGlwU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8VGVuYW50TWVtYmVyc2hpcD4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihUZW5hbnRNZW1iZXJzaGlwKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFVzZXJUb1RlbmFudChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICAgIHN0YXR1czogTWVtYmVyc2hpcFN0YXR1cyA9IE1lbWJlcnNoaXBTdGF0dXMuQWN0aXZlLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8VGVuYW50TWVtYmVyc2hpcD4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZShcbiAgICAgIHtcbiAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgc2V0U3RhdHVzKFxuICAgIG1lbWJlcnNoaXBJZDogc3RyaW5nLFxuICAgIHN0YXR1czogTWVtYmVyc2hpcFN0YXR1cyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFRlbmFudE1lbWJlcnNoaXA+IHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUobWVtYmVyc2hpcElkLCB7IHN0YXR1cyB9LCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RVc2VyVGVuYW50cyh1c2VySWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFRlbmFudE1lbWJlcnNoaXBbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKG1lbWJlcnNoaXApID0+XG4gICAgICByZWxhdGlvbk1hdGNoKG1lbWJlcnNoaXAudXNlciwgdXNlcklkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBsaXN0VGVuYW50VXNlcnModGVuYW50SWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFRlbmFudE1lbWJlcnNoaXBbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKG1lbWJlcnNoaXApID0+XG4gICAgICBzYW1lVGVuYW50KG1lbWJlcnNoaXAudGVuYW50LCB0ZW5hbnRJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlVXNlckZyb21UZW5hbnQobWVtYmVyc2hpcElkOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5kZWxldGVCeUlkKG1lbWJlcnNoaXBJZCwgLi4uYXJncyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9yZ1VuaXRNZW1iZXJzaGlwU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8T3JnVW5pdE1lbWJlcnNoaXA+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoT3JnVW5pdE1lbWJlcnNoaXApO1xuICB9XG5cbiAgYXN5bmMgYWRkVXNlclRvT3JnVW5pdChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICAgIHN0YXR1czogTWVtYmVyc2hpcFN0YXR1cyA9IE1lbWJlcnNoaXBTdGF0dXMuQWN0aXZlLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8T3JnVW5pdE1lbWJlcnNoaXA+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoXG4gICAgICB7XG4gICAgICAgIGlkOiBpZCgpLFxuICAgICAgICB0ZW5hbnQ6IHRlbmFudElkLFxuICAgICAgICBvcmdVbml0OiBvcmdVbml0SWQsXG4gICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgc2V0U3RhdHVzKFxuICAgIG1lbWJlcnNoaXBJZDogc3RyaW5nLFxuICAgIHN0YXR1czogTWVtYmVyc2hpcFN0YXR1cyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE9yZ1VuaXRNZW1iZXJzaGlwPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKG1lbWJlcnNoaXBJZCwgeyBzdGF0dXMgfSwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBsaXN0VXNlck9yZ1VuaXRzKHVzZXJJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8T3JnVW5pdE1lbWJlcnNoaXBbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKG1lbWJlcnNoaXApID0+XG4gICAgICByZWxhdGlvbk1hdGNoKG1lbWJlcnNoaXAudXNlciwgdXNlcklkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBsaXN0T3JnVW5pdFVzZXJzKG9yZ1VuaXRJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8T3JnVW5pdE1lbWJlcnNoaXBbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKG1lbWJlcnNoaXApID0+XG4gICAgICByZWxhdGlvbk1hdGNoKG1lbWJlcnNoaXAub3JnVW5pdCwgb3JnVW5pdElkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyByZW1vdmVVc2VyRnJvbU9yZ1VuaXQobWVtYmVyc2hpcElkOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5kZWxldGVCeUlkKG1lbWJlcnNoaXBJZCwgLi4uYXJncyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyb3VwU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8R3JvdXA+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoR3JvdXApO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlR3JvdXAoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb3JnVW5pdElkPzogc3RyaW5nLFxuICAgIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxHcm91cD4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZShcbiAgICAgIHtcbiAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgIG9yZ1VuaXQ6IG9yZ1VuaXRJZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyByZW5hbWVHcm91cChncm91cElkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPEdyb3VwPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKGdyb3VwSWQsIHsgbmFtZSB9LCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIG1vdmVHcm91cFRvT3JnVW5pdChcbiAgICBncm91cElkOiBzdHJpbmcsXG4gICAgb3JnVW5pdElkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxHcm91cD4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShncm91cElkLCB7IG9yZ1VuaXQ6IG9yZ1VuaXRJZCB9LCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RUZW5hbnRHcm91cHModGVuYW50SWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPEdyb3VwW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChncm91cCkgPT4gc2FtZVRlbmFudChncm91cC50ZW5hbnQsIHRlbmFudElkKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyb3VwTWVtYmVyc2hpcFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPEdyb3VwTWVtYmVyc2hpcD4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihHcm91cE1lbWJlcnNoaXApO1xuICB9XG5cbiAgYXN5bmMgYWRkUHJpbmNpcGFsVG9Hcm91cChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIGdyb3VwSWQ6IHN0cmluZyxcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICAgIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxHcm91cE1lbWJlcnNoaXA+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoXG4gICAgICB7XG4gICAgICAgIGlkOiBpZCgpLFxuICAgICAgICB0ZW5hbnQ6IHRlbmFudElkLFxuICAgICAgICBncm91cDogZ3JvdXBJZCxcbiAgICAgICAgcHJpbmNpcGFsOiBwcmluY2lwYWxJZCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyBsaXN0R3JvdXBNZW1iZXJzKGdyb3VwSWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPEdyb3VwTWVtYmVyc2hpcFtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigobWVtYmVyc2hpcCkgPT5cbiAgICAgIHJlbGF0aW9uTWF0Y2gobWVtYmVyc2hpcC5ncm91cCwgZ3JvdXBJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbGlzdFByaW5jaXBhbEdyb3VwcyhwcmluY2lwYWxJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8R3JvdXBNZW1iZXJzaGlwW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChtZW1iZXJzaGlwKSA9PlxuICAgICAgcmVsYXRpb25NYXRjaChtZW1iZXJzaGlwLnByaW5jaXBhbCwgcHJpbmNpcGFsSWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVByaW5jaXBhbEZyb21Hcm91cChtZW1iZXJzaGlwSWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZUJ5SWQobWVtYmVyc2hpcElkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIHJlc29sdmVHcm91cFByaW5jaXBhbElkc0ZvclByaW5jaXBhbChcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBwcmluY2lwYWxTZXJ2aWNlID0gbmV3IFByaW5jaXBhbFNlcnZpY2UoKTtcbiAgICBjb25zdCBtZW1iZXJzaGlwcyA9IGF3YWl0IHRoaXMubGlzdFByaW5jaXBhbEdyb3VwcyhwcmluY2lwYWxJZCwgLi4uYXJncyk7XG4gICAgY29uc3QgcHJpbmNpcGFscyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbWVtYmVyc2hpcHMubWFwKGFzeW5jIChtZW1iZXJzaGlwKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlbmFudElkID0gcmVsYXRpb25JZChtZW1iZXJzaGlwLnRlbmFudCk7XG4gICAgICAgIGNvbnN0IGdyb3VwSWQgPSByZWxhdGlvbklkKG1lbWJlcnNoaXAuZ3JvdXApO1xuICAgICAgICBjb25zdCBwcmluY2lwYWwgPSBhd2FpdCBwcmluY2lwYWxTZXJ2aWNlLmdldEdyb3VwUHJpbmNpcGFsKHRlbmFudElkLCBncm91cElkLCAuLi5hcmdzKTtcbiAgICAgICAgcmV0dXJuIHByaW5jaXBhbC5pZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gcHJpbmNpcGFscztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPFBlcm1pc3Npb24+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoUGVybWlzc2lvbik7XG4gIH1cblxuICBhc3luYyBjcmVhdGVQZXJtaXNzaW9uKFxuICAgIGlucHV0OiBDcmVhdGVQZXJtaXNzaW9uSW5wdXQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxQZXJtaXNzaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAga2V5OiBpbnB1dC5rZXksXG4gICAgICAgIGNhdGVnb3J5OiBpbnB1dC5jYXRlZ29yeSxcbiAgICAgICAgZGVzY3JpcHRpb246IGlucHV0LmRlc2NyaXB0aW9uLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0QnlLZXkoa2V5OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxQZXJtaXNzaW9uPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbmQoKHBlcm1pc3Npb24pID0+IHBlcm1pc3Npb24ua2V5ID09PSBrZXkpIGFzIFBlcm1pc3Npb247XG4gIH1cblxuICBhc3luYyBsaXN0QnlDYXRlZ29yeShjYXRlZ29yeTogUGVybWlzc2lvbkNhdGVnb3J5LCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8UGVybWlzc2lvbltdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigocGVybWlzc2lvbikgPT4gcGVybWlzc2lvbi5jYXRlZ29yeSA9PT0gY2F0ZWdvcnkpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGVzY3JpcHRpb24oXG4gICAgcGVybWlzc2lvbklkOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFBlcm1pc3Npb24+IHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUocGVybWlzc2lvbklkLCB7IGRlc2NyaXB0aW9uIH0sIC4uLmFyZ3MpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSb2xlU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8Um9sZT4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihSb2xlKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVJvbGUoaW5wdXQ6IENyZWF0ZVJvbGVJbnB1dCwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFJvbGU+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoXG4gICAgICB7XG4gICAgICAgIGlkOiBpZCgpLFxuICAgICAgICB0ZW5hbnQ6IGlucHV0LnRlbmFudElkLFxuICAgICAgICBrZXk6IGlucHV0LmtleSxcbiAgICAgICAgbmFtZTogaW5wdXQubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGlucHV0LmRlc2NyaXB0aW9uLFxuICAgICAgICBtZXRhZGF0YTogaW5wdXQubWV0YWRhdGEsXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRTeXN0ZW1Sb2xlQnlLZXkoa2V5OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSb2xlPiB7XG4gICAgY29uc3Qgcm9sZSA9IChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbmQoXG4gICAgICAoY2FuZGlkYXRlKSA9PiAhY2FuZGlkYXRlLnRlbmFudCAmJiBjYW5kaWRhdGUua2V5ID09PSBrZXlcbiAgICApO1xuICAgIGlmICghcm9sZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSb2xlIFwiJHtrZXl9XCIgbm90IGZvdW5kYCk7XG4gICAgfVxuICAgIHJldHVybiByb2xlO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGVuYW50Um9sZUJ5S2V5KHRlbmFudElkOiBzdHJpbmcsIGtleTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8Um9sZT4ge1xuICAgIGNvbnN0IHJvbGUgPSAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maW5kKFxuICAgICAgKGNhbmRpZGF0ZSkgPT4gc2FtZVRlbmFudChjYW5kaWRhdGUudGVuYW50LCB0ZW5hbnRJZCkgJiYgY2FuZGlkYXRlLmtleSA9PT0ga2V5XG4gICAgKTtcbiAgICBpZiAoIXJvbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUm9sZSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBmb3IgdGVuYW50ICR7dGVuYW50SWR9YCk7XG4gICAgfVxuICAgIHJldHVybiByb2xlO1xuICB9XG5cbiAgYXN5bmMgcmVuYW1lUm9sZShyb2xlSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8Um9sZT4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShyb2xlSWQsIHsgbmFtZSB9LCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVJvbGVNZXRhZGF0YShcbiAgICByb2xlSWQ6IHN0cmluZyxcbiAgICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSb2xlPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKHJvbGVJZCwgeyBtZXRhZGF0YSB9LCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RUZW5hbnRSb2xlcyhcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIGluY2x1ZGVTeXN0ZW0gPSBmYWxzZSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJvbGVbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHJvbGUpID0+XG4gICAgICBpbmNsdWRlU3lzdGVtID8gIXJvbGUudGVuYW50IHx8IHNhbWVUZW5hbnQocm9sZS50ZW5hbnQsIHRlbmFudElkKSA6IHNhbWVUZW5hbnQocm9sZS50ZW5hbnQsIHRlbmFudElkKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJvbGVQZXJtaXNzaW9uU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8Um9sZVBlcm1pc3Npb24+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoUm9sZVBlcm1pc3Npb24pO1xuICB9XG5cbiAgYXN5bmMgYWRkUGVybWlzc2lvblRvUm9sZShcbiAgICByb2xlSWQ6IHN0cmluZyxcbiAgICBwZXJtaXNzaW9uSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJvbGVQZXJtaXNzaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgcm9sZTogcm9sZUlkLFxuICAgICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uSWQsXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyBhZGRQZXJtaXNzaW9uS2V5VG9Sb2xlKFxuICAgIHJvbGVJZDogc3RyaW5nLFxuICAgIHBlcm1pc3Npb25LZXk6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJvbGVQZXJtaXNzaW9uPiB7XG4gICAgY29uc3QgcGVybWlzc2lvbiA9IGF3YWl0IG5ldyBQZXJtaXNzaW9uU2VydmljZSgpLmdldEJ5S2V5KHBlcm1pc3Npb25LZXksIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkZFBlcm1pc3Npb25Ub1JvbGUocm9sZUlkLCBwZXJtaXNzaW9uLmlkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBlcm1pc3Npb25Gcm9tUm9sZShyb2xlUGVybWlzc2lvbklkOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5kZWxldGVCeUlkKHJvbGVQZXJtaXNzaW9uSWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgbGlzdFJvbGVQZXJtaXNzaW9ucyhyb2xlSWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFJvbGVQZXJtaXNzaW9uW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChyb2xlUGVybWlzc2lvbikgPT5cbiAgICAgIHJlbGF0aW9uTWF0Y2gocm9sZVBlcm1pc3Npb24ucm9sZSwgcm9sZUlkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBsaXN0UGVybWlzc2lvblJvbGVzKHBlcm1pc3Npb25JZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8Um9sZVBlcm1pc3Npb25bXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHJvbGVQZXJtaXNzaW9uKSA9PlxuICAgICAgcmVsYXRpb25NYXRjaChyb2xlUGVybWlzc2lvbi5wZXJtaXNzaW9uLCBwZXJtaXNzaW9uSWQpXG4gICAgKTtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgcmVwbGFjZVJvbGVQZXJtaXNzaW9ucyhcbiAgICByb2xlSWQ6IHN0cmluZyxcbiAgICBwZXJtaXNzaW9uSWRzOiBzdHJpbmdbXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJvbGVQZXJtaXNzaW9uW10+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMubGlzdFJvbGVQZXJtaXNzaW9ucyhyb2xlSWQsIC4uLmFyZ3MpO1xuICAgIGF3YWl0IGRlbGV0ZU1hbnlCeUlkKHRoaXMsIGV4aXN0aW5nLCAuLi5hcmdzKTtcbiAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwZXJtaXNzaW9uSWRzLm1hcCgocGVybWlzc2lvbklkKSA9PlxuICAgICAgICB0aGlzLmFkZFBlcm1pc3Npb25Ub1JvbGUocm9sZUlkLCBwZXJtaXNzaW9uSWQsIC4uLmFyZ3MpXG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgY3JlYXRlUm9sZVdpdGhQZXJtaXNzaW9ucyhcbiAgICBpbnB1dDogQ3JlYXRlUm9sZUlucHV0LFxuICAgIHBlcm1pc3Npb25LZXlzOiBzdHJpbmdbXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJvbGU+IHtcbiAgICBjb25zdCByb2xlID0gYXdhaXQgbmV3IFJvbGVTZXJ2aWNlKCkuY3JlYXRlUm9sZShpbnB1dCwgLi4uYXJncyk7XG4gICAgZm9yIChjb25zdCBwZXJtaXNzaW9uS2V5IG9mIHBlcm1pc3Npb25LZXlzKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZFBlcm1pc3Npb25LZXlUb1JvbGUocm9sZS5pZCwgcGVybWlzc2lvbktleSwgLi4uYXJncyk7XG4gICAgfVxuICAgIHJldHVybiByb2xlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSb2xlQXNzaWdubWVudFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPFJvbGVBc3NpZ25tZW50PiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFJvbGVBc3NpZ25tZW50KTtcbiAgfVxuXG4gIGFzeW5jIGFzc2lnblJvbGUoaW5wdXQ6IEFzc2lnblJvbGVJbnB1dCwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFJvbGVBc3NpZ25tZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgdGVuYW50OiBpbnB1dC50ZW5hbnRJZCxcbiAgICAgICAgcHJpbmNpcGFsOiBpbnB1dC5wcmluY2lwYWxJZCxcbiAgICAgICAgcm9sZTogaW5wdXQucm9sZUlkLFxuICAgICAgICBzY29wZUtpbmQ6IGlucHV0LnNjb3BlS2luZCxcbiAgICAgICAgc2NvcGVJZDogaW5wdXQuc2NvcGVJZCxcbiAgICAgICAgaW5oZXJpdERvd246IGlucHV0LmluaGVyaXREb3duID8/IGZhbHNlLFxuICAgICAgICBzdGFydHNBdDogaW5wdXQuc3RhcnRzQXQsXG4gICAgICAgIGV4cGlyZXNBdDogaW5wdXQuZXhwaXJlc0F0LFxuICAgICAgICBjb25kaXRpb25zOiBpbnB1dC5jb25kaXRpb25zLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmV2b2tlQXNzaWdubWVudChhc3NpZ25tZW50SWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZUJ5SWQoYXNzaWdubWVudElkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RQcmluY2lwYWxBc3NpZ25tZW50cyhcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIHByaW5jaXBhbElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSb2xlQXNzaWdubWVudFtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcihcbiAgICAgIChhc3NpZ25tZW50KSA9PlxuICAgICAgICBzYW1lVGVuYW50KGFzc2lnbm1lbnQudGVuYW50LCB0ZW5hbnRJZCkgJiZcbiAgICAgICAgcmVsYXRpb25NYXRjaChhc3NpZ25tZW50LnByaW5jaXBhbCwgcHJpbmNpcGFsSWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RSb2xlQXNzaWdubWVudHMocm9sZUlkOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSb2xlQXNzaWdubWVudFtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigoYXNzaWdubWVudCkgPT5cbiAgICAgIHJlbGF0aW9uTWF0Y2goYXNzaWdubWVudC5yb2xlLCByb2xlSWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RUZW5hbnRBc3NpZ25tZW50cyhcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8Um9sZUFzc2lnbm1lbnRbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKGFzc2lnbm1lbnQpID0+XG4gICAgICBzYW1lVGVuYW50KGFzc2lnbm1lbnQudGVuYW50LCB0ZW5hbnRJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXNzaWdubWVudFdpbmRvdyhcbiAgICBhc3NpZ25tZW50SWQ6IHN0cmluZyxcbiAgICBzdGFydHNBdDogRGF0ZSB8IHVuZGVmaW5lZCxcbiAgICBleHBpcmVzQXQ6IERhdGUgfCB1bmRlZmluZWQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSb2xlQXNzaWdubWVudD4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShhc3NpZ25tZW50SWQsIHsgc3RhcnRzQXQsIGV4cGlyZXNBdCB9LCAuLi5hcmdzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWZmZWN0aXZlUGVybWlzc2lvblNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPEVmZmVjdGl2ZVBlcm1pc3Npb24+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoRWZmZWN0aXZlUGVybWlzc2lvbik7XG4gIH1cblxuICBhc3luYyBsaXN0Rm9yUHJpbmNpcGFsKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgcHJpbmNpcGFsSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEVmZmVjdGl2ZVBlcm1pc3Npb25bXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoXG4gICAgICAocGVybWlzc2lvbikgPT5cbiAgICAgICAgc2FtZVRlbmFudChwZXJtaXNzaW9uLnRlbmFudCwgdGVuYW50SWQpICYmXG4gICAgICAgIHJlbGF0aW9uTWF0Y2gocGVybWlzc2lvbi5wcmluY2lwYWwsIHByaW5jaXBhbElkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBsaXN0Rm9yU2NvcGUoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBzY29wZUtpbmQ6IFNjb3BlS2luZCxcbiAgICBzY29wZUlkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxFZmZlY3RpdmVQZXJtaXNzaW9uW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKFxuICAgICAgKHBlcm1pc3Npb24pID0+XG4gICAgICAgIHNhbWVUZW5hbnQocGVybWlzc2lvbi50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICBwZXJtaXNzaW9uLnNjb3BlS2luZCA9PT0gc2NvcGVLaW5kICYmXG4gICAgICAgIHBlcm1pc3Npb24uc2NvcGVJZCA9PT0gc2NvcGVJZFxuICAgICk7XG4gIH1cblxuICBhc3luYyBoYXNQZXJtaXNzaW9uKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgcHJpbmNpcGFsSWQ6IHN0cmluZyxcbiAgICBwZXJtaXNzaW9uS2V5OiBzdHJpbmcsXG4gICAgc2NvcGVLaW5kOiBTY29wZUtpbmQsXG4gICAgc2NvcGVJZDogc3RyaW5nLFxuICAgIGF0PzogRGF0ZSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEZvclByaW5jaXBhbCh0ZW5hbnRJZCwgcHJpbmNpcGFsSWQsIC4uLmFyZ3MpKS5zb21lKFxuICAgICAgKHBlcm1pc3Npb24pID0+XG4gICAgICAgIHBlcm1pc3Npb24ucGVybWlzc2lvbktleSA9PT0gcGVybWlzc2lvbktleSAmJlxuICAgICAgICBwZXJtaXNzaW9uLnNjb3BlS2luZCA9PT0gc2NvcGVLaW5kICYmXG4gICAgICAgIHBlcm1pc3Npb24uc2NvcGVJZCA9PT0gc2NvcGVJZCAmJlxuICAgICAgICAoIXBlcm1pc3Npb24uc3RhcnRzQXQgfHwgIWF0IHx8IHBlcm1pc3Npb24uc3RhcnRzQXQgPD0gYXQpICYmXG4gICAgICAgICghcGVybWlzc2lvbi5leHBpcmVzQXQgfHwgIWF0IHx8IHBlcm1pc3Npb24uZXhwaXJlc0F0ID49IGF0KVxuICAgICk7XG4gIH1cblxuICBhc3luYyBkZWxldGVGb3JQcmluY2lwYWwodGVuYW50SWQ6IHN0cmluZywgcHJpbmNpcGFsSWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBkZWxldGVNYW55QnlJZCh0aGlzLCBhd2FpdCB0aGlzLmxpc3RGb3JQcmluY2lwYWwodGVuYW50SWQsIHByaW5jaXBhbElkLCAuLi5hcmdzKSwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBkZWxldGVGb3JUZW5hbnQodGVuYW50SWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBkZWxldGVNYW55QnlJZChcbiAgICAgIHRoaXMsXG4gICAgICAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHBlcm1pc3Npb24pID0+IHNhbWVUZW5hbnQocGVybWlzc2lvbi50ZW5hbnQsIHRlbmFudElkKSksXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgcmVidWlsZEZvclByaW5jaXBhbChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIHByaW5jaXBhbElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxFZmZlY3RpdmVQZXJtaXNzaW9uW10+IHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZUZvclByaW5jaXBhbCh0ZW5hbnRJZCwgcHJpbmNpcGFsSWQsIC4uLmFyZ3MpO1xuXG4gICAgY29uc3Qgcm9sZUFzc2lnbm1lbnRTZXJ2aWNlID0gbmV3IFJvbGVBc3NpZ25tZW50U2VydmljZSgpO1xuICAgIGNvbnN0IHJvbGVQZXJtaXNzaW9uU2VydmljZSA9IG5ldyBSb2xlUGVybWlzc2lvblNlcnZpY2UoKTtcbiAgICBjb25zdCBwZXJtaXNzaW9uU2VydmljZSA9IG5ldyBQZXJtaXNzaW9uU2VydmljZSgpO1xuICAgIGNvbnN0IGdyb3VwTWVtYmVyc2hpcFNlcnZpY2UgPSBuZXcgR3JvdXBNZW1iZXJzaGlwU2VydmljZSgpO1xuICAgIGNvbnN0IHByaW5jaXBhbFNlcnZpY2UgPSBuZXcgUHJpbmNpcGFsU2VydmljZSgpO1xuICAgIGNvbnN0IG9yZ1VuaXRDbG9zdXJlU2VydmljZSA9IG5ldyBPcmdVbml0Q2xvc3VyZVNlcnZpY2UoKTtcbiAgICBjb25zdCBpbmhlcml0YW5jZUJsb2NrU2VydmljZSA9IG5ldyBJbmhlcml0YW5jZUJsb2NrU2VydmljZSgpO1xuXG4gICAgY29uc3QgbWF0ZXJpYWxpemVkOiBFZmZlY3RpdmVQZXJtaXNzaW9uU25hcHNob3RbXSA9IFtdO1xuICAgIGNvbnN0IHNvdXJjZUFzc2lnbm1lbnRzID0gYXdhaXQgcm9sZUFzc2lnbm1lbnRTZXJ2aWNlLmxpc3RQcmluY2lwYWxBc3NpZ25tZW50cyhcbiAgICAgIHRlbmFudElkLFxuICAgICAgcHJpbmNpcGFsSWQsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBjb25zdCBncm91cE1lbWJlcnNoaXBzID0gYXdhaXQgZ3JvdXBNZW1iZXJzaGlwU2VydmljZS5saXN0UHJpbmNpcGFsR3JvdXBzKFxuICAgICAgcHJpbmNpcGFsSWQsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBjb25zdCBncm91cEFzc2lnbm1lbnRzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGdyb3VwTWVtYmVyc2hpcHMubWFwKGFzeW5jIChtZW1iZXJzaGlwKSA9PiB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBQcmluY2lwYWwgPSBhd2FpdCBwcmluY2lwYWxTZXJ2aWNlLmdldEdyb3VwUHJpbmNpcGFsKFxuICAgICAgICAgICAgcmVsYXRpb25JZChtZW1iZXJzaGlwLnRlbmFudCksXG4gICAgICAgICAgICByZWxhdGlvbklkKG1lbWJlcnNoaXAuZ3JvdXApLFxuICAgICAgICAgICAgLi4uYXJnc1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHJvbGVBc3NpZ25tZW50U2VydmljZS5saXN0UHJpbmNpcGFsQXNzaWdubWVudHMoXG4gICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgIGdyb3VwUHJpbmNpcGFsLmlkLFxuICAgICAgICAgICAgLi4uYXJnc1xuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKS5mbGF0KCk7XG5cbiAgICBjb25zdCBhc3NpZ25tZW50cyA9IFsuLi5zb3VyY2VBc3NpZ25tZW50cywgLi4uZ3JvdXBBc3NpZ25tZW50c107XG4gICAgZm9yIChjb25zdCBhc3NpZ25tZW50IG9mIGFzc2lnbm1lbnRzKSB7XG4gICAgICBjb25zdCByb2xlUGVybWlzc2lvbnMgPSBhd2FpdCByb2xlUGVybWlzc2lvblNlcnZpY2UubGlzdFJvbGVQZXJtaXNzaW9ucyhcbiAgICAgICAgcmVsYXRpb25JZChhc3NpZ25tZW50LnJvbGUpLFxuICAgICAgICAuLi5hcmdzXG4gICAgICApO1xuICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcm9sZVBlcm1pc3Npb25zLm1hcChhc3luYyAocm9sZVBlcm1pc3Npb24pID0+IHtcbiAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uID0gYXdhaXQgcGVybWlzc2lvblNlcnZpY2UuZmluZE9uZUJ5KFxuICAgICAgICAgICAgXCJpZFwiLFxuICAgICAgICAgICAgcmVsYXRpb25JZChyb2xlUGVybWlzc2lvbi5wZXJtaXNzaW9uKSBhcyBuZXZlcixcbiAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBwZXJtaXNzaW9uO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgcGVybWlzc2lvbiBvZiBwZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoIXBlcm1pc3Npb24pIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBzY29wZUtpbmQgPSBhc3NpZ25tZW50LnNjb3BlS2luZDtcbiAgICAgICAgY29uc3Qgc2NvcGVJZCA9IGFzc2lnbm1lbnQuc2NvcGVJZDtcbiAgICAgICAgY29uc3Qgc2NvcGVzOiBBcnJheTx7IHNjb3BlS2luZDogU2NvcGVLaW5kOyBzY29wZUlkOiBzdHJpbmcgfT4gPSBbXTtcbiAgICAgICAgaWYgKHNjb3BlS2luZCA9PT0gU2NvcGVLaW5kLlRlbmFudCkge1xuICAgICAgICAgIHNjb3Blcy5wdXNoKHsgc2NvcGVLaW5kLCBzY29wZUlkOiB0ZW5hbnRJZCB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChzY29wZUtpbmQgPT09IFNjb3BlS2luZC5SZXNvdXJjZSkge1xuICAgICAgICAgIHNjb3Blcy5wdXNoKHsgc2NvcGVLaW5kLCBzY29wZUlkIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHNjb3BlS2luZCA9PT0gU2NvcGVLaW5kLk9yZ1VuaXQgJiYgIWFzc2lnbm1lbnQuaW5oZXJpdERvd24pIHtcbiAgICAgICAgICBzY29wZXMucHVzaCh7IHNjb3BlS2luZCwgc2NvcGVJZCB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChzY29wZUtpbmQgPT09IFNjb3BlS2luZC5PcmdVbml0ICYmIGFzc2lnbm1lbnQuaW5oZXJpdERvd24pIHtcbiAgICAgICAgICBjb25zdCBkZXNjZW5kYW50cyA9IGF3YWl0IG9yZ1VuaXRDbG9zdXJlU2VydmljZS5saXN0RGVzY2VuZGFudHMoXG4gICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgIHNjb3BlSWQsXG4gICAgICAgICAgICAuLi5hcmdzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzY29wZXMucHVzaCguLi5kZXNjZW5kYW50cy5tYXAoKHJvdykgPT4gKHtcbiAgICAgICAgICAgIHNjb3BlS2luZCxcbiAgICAgICAgICAgIHNjb3BlSWQ6IHJlbGF0aW9uSWQocm93LmRlc2NlbmRhbnQpLFxuICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlZCBvZiBzY29wZXMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzY29wZUtpbmQgPT09IFNjb3BlS2luZC5PcmdVbml0ICYmXG4gICAgICAgICAgICBhc3NpZ25tZW50LmluaGVyaXREb3duICYmXG4gICAgICAgICAgICBzY29wZWQuc2NvcGVJZCAhPT0gc2NvcGVJZCAmJlxuICAgICAgICAgICAgKGF3YWl0IGluaGVyaXRhbmNlQmxvY2tTZXJ2aWNlLmNhdGVnb3J5QmxvY2tlZEZvckFuY2VzdG9yKFxuICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgc2NvcGVkLnNjb3BlSWQsXG4gICAgICAgICAgICAgIHNjb3BlSWQsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb24uY2F0ZWdvcnksXG4gICAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICAgICkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWF0ZXJpYWxpemVkLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgIHByaW5jaXBhbElkLFxuICAgICAgICAgICAgcGVybWlzc2lvbktleTogcGVybWlzc2lvbi5rZXksXG4gICAgICAgICAgICBzY29wZUtpbmQ6IHNjb3BlZC5zY29wZUtpbmQsXG4gICAgICAgICAgICBzY29wZUlkOiBzY29wZWQuc2NvcGVJZCxcbiAgICAgICAgICAgIHNvdXJjZUtpbmQ6IFwicm9sZV9hc3NpZ25tZW50XCIsXG4gICAgICAgICAgICBzb3VyY2VJZDogYXNzaWdubWVudC5pZCxcbiAgICAgICAgICAgIHN0YXJ0c0F0OiBhc3NpZ25tZW50LnN0YXJ0c0F0LFxuICAgICAgICAgICAgZXhwaXJlc0F0OiBhc3NpZ25tZW50LmV4cGlyZXNBdCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1hdGVyaWFsaXplZC5tYXAoKHBlcm1pc3Npb24pID0+XG4gICAgICAgIHRoaXMuY3JlYXRlT25lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBwZXJtaXNzaW9uLmlkLFxuICAgICAgICAgICAgdGVuYW50OiBwZXJtaXNzaW9uLnRlbmFudElkLFxuICAgICAgICAgICAgcHJpbmNpcGFsOiBwZXJtaXNzaW9uLnByaW5jaXBhbElkLFxuICAgICAgICAgICAgcGVybWlzc2lvbktleTogcGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5LFxuICAgICAgICAgICAgc2NvcGVLaW5kOiBwZXJtaXNzaW9uLnNjb3BlS2luZCxcbiAgICAgICAgICAgIHNjb3BlSWQ6IHBlcm1pc3Npb24uc2NvcGVJZCxcbiAgICAgICAgICAgIHNvdXJjZUtpbmQ6IHBlcm1pc3Npb24uc291cmNlS2luZCxcbiAgICAgICAgICAgIHNvdXJjZUlkOiBwZXJtaXNzaW9uLnNvdXJjZUlkLFxuICAgICAgICAgICAgc3RhcnRzQXQ6IHBlcm1pc3Npb24uc3RhcnRzQXQsXG4gICAgICAgICAgICBleHBpcmVzQXQ6IHBlcm1pc3Npb24uZXhwaXJlc0F0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYXJnc1xuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgcmVidWlsZEZvclRlbmFudCh0ZW5hbnRJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByaW5jaXBhbHMgPSAoYXdhaXQgbmV3IFByaW5jaXBhbFNlcnZpY2UoKS5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHByaW5jaXBhbCkgPT5cbiAgICAgIHNhbWVUZW5hbnQocHJpbmNpcGFsLnRlbmFudCwgdGVuYW50SWQpXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IHByaW5jaXBhbCBvZiBwcmluY2lwYWxzKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlYnVpbGRGb3JQcmluY2lwYWwodGVuYW50SWQsIHByaW5jaXBhbC5pZCwgLi4uYXJncyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm90ZWN0ZWRSZXNvdXJjZVNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPFByb3RlY3RlZFJlc291cmNlPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFByb3RlY3RlZFJlc291cmNlKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyUmVzb3VyY2UoXG4gICAgaW5wdXQ6IFJlZ2lzdGVyUmVzb3VyY2VJbnB1dCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFByb3RlY3RlZFJlc291cmNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgdGVuYW50OiBpbnB1dC50ZW5hbnRJZCxcbiAgICAgICAgb3JnVW5pdDogaW5wdXQub3JnVW5pdElkLFxuICAgICAgICByZXNvdXJjZVR5cGU6IGlucHV0LnJlc291cmNlVHlwZSxcbiAgICAgICAgcmVzb3VyY2VJZDogaW5wdXQucmVzb3VyY2VJZCxcbiAgICAgICAgdmlzaWJpbGl0eTogaW5wdXQudmlzaWJpbGl0eSxcbiAgICAgICAgb3duZXI6IGlucHV0Lm93bmVyUHJpbmNpcGFsSWQsXG4gICAgICAgIHNlbnNpdGl2aXR5OiBpbnB1dC5zZW5zaXRpdml0eSxcbiAgICAgICAgbWV0YWRhdGE6IGlucHV0Lm1ldGFkYXRhLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0QnlEb21haW5SZXNvdXJjZShcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIHJlc291cmNlVHlwZTogc3RyaW5nLFxuICAgIHJlc291cmNlSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFByb3RlY3RlZFJlc291cmNlIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbmQoXG4gICAgICAocmVzb3VyY2UpID0+XG4gICAgICAgIHNhbWVUZW5hbnQocmVzb3VyY2UudGVuYW50LCB0ZW5hbnRJZCkgJiZcbiAgICAgICAgcmVzb3VyY2UucmVzb3VyY2VUeXBlID09PSByZXNvdXJjZVR5cGUgJiZcbiAgICAgICAgcmVzb3VyY2UucmVzb3VyY2VJZCA9PT0gcmVzb3VyY2VJZFxuICAgICk7XG4gIH1cblxuICBhc3luYyBtb3ZlUmVzb3VyY2VUb09yZ1VuaXQoXG4gICAgcHJvdGVjdGVkUmVzb3VyY2VJZDogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UHJvdGVjdGVkUmVzb3VyY2U+IHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUocHJvdGVjdGVkUmVzb3VyY2VJZCwgeyBvcmdVbml0OiBvcmdVbml0SWQgfSwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBzZXRWaXNpYmlsaXR5KFxuICAgIHByb3RlY3RlZFJlc291cmNlSWQ6IHN0cmluZyxcbiAgICB2aXNpYmlsaXR5OiBSZXNvdXJjZVZpc2liaWxpdHksXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxQcm90ZWN0ZWRSZXNvdXJjZT4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShwcm90ZWN0ZWRSZXNvdXJjZUlkLCB7IHZpc2liaWxpdHkgfSwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyB0cmFuc2Zlck93bmVyc2hpcChcbiAgICBwcm90ZWN0ZWRSZXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgb3duZXJQcmluY2lwYWxJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UHJvdGVjdGVkUmVzb3VyY2U+IHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUocHJvdGVjdGVkUmVzb3VyY2VJZCwgeyBvd25lcjogb3duZXJQcmluY2lwYWxJZCB9LCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RPcmdVbml0UmVzb3VyY2VzKG9yZ1VuaXRJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8UHJvdGVjdGVkUmVzb3VyY2VbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHJlc291cmNlKSA9PlxuICAgICAgcmVsYXRpb25NYXRjaChyZXNvdXJjZS5vcmdVbml0LCBvcmdVbml0SWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RUZW5hbnRSZXNvdXJjZXModGVuYW50SWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFByb3RlY3RlZFJlc291cmNlW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChyZXNvdXJjZSkgPT4gc2FtZVRlbmFudChyZXNvdXJjZS50ZW5hbnQsIHRlbmFudElkKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlc291cmNlR3JhbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZTxSZXNvdXJjZUdyYW50PiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFJlc291cmNlR3JhbnQpO1xuICB9XG5cbiAgYXN5bmMgZ3JhbnRSZXNvdXJjZShpbnB1dDogR3JhbnRSZXNvdXJjZUlucHV0LCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8UmVzb3VyY2VHcmFudD4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZShcbiAgICAgIHtcbiAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgIHRlbmFudDogaW5wdXQudGVuYW50SWQsXG4gICAgICAgIHJlc291cmNlOiBpbnB1dC5yZXNvdXJjZUlkLFxuICAgICAgICBwcmluY2lwYWw6IGlucHV0LnByaW5jaXBhbElkLFxuICAgICAgICBwZXJtaXNzaW9uS2V5OiBpbnB1dC5wZXJtaXNzaW9uS2V5LFxuICAgICAgICBzdGFydHNBdDogaW5wdXQuc3RhcnRzQXQsXG4gICAgICAgIGV4cGlyZXNBdDogaW5wdXQuZXhwaXJlc0F0LFxuICAgICAgICBjb25kaXRpb25zOiBpbnB1dC5jb25kaXRpb25zLFxuICAgICAgICBjcmVhdGVkQnk6IGlucHV0LmNyZWF0ZWRCeVByaW5jaXBhbElkLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmV2b2tlR3JhbnQoZ3JhbnRJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGVsZXRlQnlJZChncmFudElkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RSZXNvdXJjZUdyYW50cyhwcm90ZWN0ZWRSZXNvdXJjZUlkOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSZXNvdXJjZUdyYW50W10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChncmFudCkgPT5cbiAgICAgIHJlbGF0aW9uTWF0Y2goZ3JhbnQucmVzb3VyY2UsIHByb3RlY3RlZFJlc291cmNlSWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RQcmluY2lwYWxHcmFudHMoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVzb3VyY2VHcmFudFtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcihcbiAgICAgIChncmFudCkgPT4gc2FtZVRlbmFudChncmFudC50ZW5hbnQsIHRlbmFudElkKSAmJiByZWxhdGlvbk1hdGNoKGdyYW50LnByaW5jaXBhbCwgcHJpbmNpcGFsSWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGhhc0dyYW50KFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgcHJpbmNpcGFsSWQ6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWRSZXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgcGVybWlzc2lvbktleTogc3RyaW5nLFxuICAgIGF0PzogRGF0ZSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdFByaW5jaXBhbEdyYW50cyh0ZW5hbnRJZCwgcHJpbmNpcGFsSWQsIC4uLmFyZ3MpKS5zb21lKFxuICAgICAgKGdyYW50KSA9PlxuICAgICAgICByZWxhdGlvbk1hdGNoKGdyYW50LnJlc291cmNlLCBwcm90ZWN0ZWRSZXNvdXJjZUlkKSAmJlxuICAgICAgICBncmFudC5wZXJtaXNzaW9uS2V5ID09PSBwZXJtaXNzaW9uS2V5ICYmXG4gICAgICAgICghZ3JhbnQuc3RhcnRzQXQgfHwgIWF0IHx8IGdyYW50LnN0YXJ0c0F0IDw9IGF0KSAmJlxuICAgICAgICAoIWdyYW50LmV4cGlyZXNBdCB8fCAhYXQgfHwgZ3JhbnQuZXhwaXJlc0F0ID49IGF0KVxuICAgICk7XG4gIH1cblxuICBhc3luYyBkZWxldGVBbGxGb3JSZXNvdXJjZShcbiAgICBwcm90ZWN0ZWRSZXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZGVsZXRlTWFueUJ5SWQoXG4gICAgICB0aGlzLFxuICAgICAgYXdhaXQgdGhpcy5saXN0UmVzb3VyY2VHcmFudHMocHJvdGVjdGVkUmVzb3VyY2VJZCwgLi4uYXJncyksXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VMaWZlY3ljbGVTZXJ2aWNlIHtcbiAgYXN5bmMgdW5yZWdpc3RlclJlc291cmNlKHByb3RlY3RlZFJlc291cmNlSWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBuZXcgUmVzb3VyY2VHcmFudFNlcnZpY2UoKS5kZWxldGVBbGxGb3JSZXNvdXJjZShwcm90ZWN0ZWRSZXNvdXJjZUlkLCAuLi5hcmdzKTtcbiAgICBhd2FpdCBuZXcgUHJvdGVjdGVkUmVzb3VyY2VTZXJ2aWNlKCkuZGVsZXRlQnlJZChwcm90ZWN0ZWRSZXNvdXJjZUlkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIHJlc29sdmVSZXNvdXJjZVNjb3BlKFxuICAgIHByb3RlY3RlZFJlc291cmNlSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHtcbiAgICB0ZW5hbnRJZDogc3RyaW5nO1xuICAgIG9yZ1VuaXRJZDogc3RyaW5nO1xuICAgIHZpc2liaWxpdHk6IFJlc291cmNlVmlzaWJpbGl0eTtcbiAgICBvd25lclByaW5jaXBhbElkPzogc3RyaW5nO1xuICB9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBhd2FpdCBuZXcgUHJvdGVjdGVkUmVzb3VyY2VTZXJ2aWNlKCkuZ2V0QnlJZChwcm90ZWN0ZWRSZXNvdXJjZUlkLCAuLi5hcmdzKTtcbiAgICByZXR1cm4ge1xuICAgICAgdGVuYW50SWQ6IHJlbGF0aW9uSWQocmVzb3VyY2UudGVuYW50KSxcbiAgICAgIG9yZ1VuaXRJZDogcmVsYXRpb25JZChyZXNvdXJjZS5vcmdVbml0KSxcbiAgICAgIHZpc2liaWxpdHk6IHJlc291cmNlLnZpc2liaWxpdHksXG4gICAgICBvd25lclByaW5jaXBhbElkOiByZXNvdXJjZS5vd25lciA/IHJlbGF0aW9uSWQocmVzb3VyY2Uub3duZXIpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VCaW5kaW5nU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8U3RvcmFnZUJpbmRpbmc+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoU3RvcmFnZUJpbmRpbmcpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQmluZGluZyhpbnB1dDogQ3JlYXRlU3RvcmFnZUJpbmRpbmdJbnB1dCwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFN0b3JhZ2VCaW5kaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgdGVuYW50OiBpbnB1dC50ZW5hbnRJZCxcbiAgICAgICAgc3RvcmFnZUtpbmQ6IGlucHV0LnN0b3JhZ2VLaW5kLFxuICAgICAgICBiaW5kaW5nS2luZDogaW5wdXQuYmluZGluZ0tpbmQsXG4gICAgICAgIGJpbmRpbmdLZXk6IGlucHV0LmJpbmRpbmdLZXksXG4gICAgICAgIHJlZ2lvbjogaW5wdXQucmVnaW9uLFxuICAgICAgICBjb25maWc6IGlucHV0LmNvbmZpZyxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RUZW5hbnRCaW5kaW5ncyh0ZW5hbnRJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8U3RvcmFnZUJpbmRpbmdbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKGJpbmRpbmcpID0+IHNhbWVUZW5hbnQoYmluZGluZy50ZW5hbnQsIHRlbmFudElkKSk7XG4gIH1cblxuICBhc3luYyBnZXRCaW5kaW5nKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgc3RvcmFnZUtpbmQ6IFN0b3JhZ2VLaW5kLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8U3RvcmFnZUJpbmRpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdFRlbmFudEJpbmRpbmdzKHRlbmFudElkLCAuLi5hcmdzKSkuZmluZChcbiAgICAgIChiaW5kaW5nKSA9PiBiaW5kaW5nLnN0b3JhZ2VLaW5kID09PSBzdG9yYWdlS2luZFxuICAgICk7XG4gIH1cblxuICBhc3luYyBzZXRCaW5kaW5nQ29uZmlnKFxuICAgIGJpbmRpbmdJZDogc3RyaW5nLFxuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxTdG9yYWdlQmluZGluZz4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShiaW5kaW5nSWQsIHsgY29uZmlnIH0sIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgcHJvbW90ZVRvRGVkaWNhdGVkKFxuICAgIGJpbmRpbmdJZDogc3RyaW5nLFxuICAgIGJpbmRpbmdLZXk6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFN0b3JhZ2VCaW5kaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKFxuICAgICAgYmluZGluZ0lkLFxuICAgICAgeyBiaW5kaW5nS2luZDogU3RvcmFnZUJpbmRpbmdLaW5kLkRlZGljYXRlZCwgYmluZGluZ0tleSwgcmVnaW9uLCBjb25maWcgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgc2V0U2hhcmVkKFxuICAgIGJpbmRpbmdJZDogc3RyaW5nLFxuICAgIGJpbmRpbmdLZXk6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFN0b3JhZ2VCaW5kaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKFxuICAgICAgYmluZGluZ0lkLFxuICAgICAgeyBiaW5kaW5nS2luZDogU3RvcmFnZUJpbmRpbmdLaW5kLlNoYXJlZCwgYmluZGluZ0tleSwgcmVnaW9uLCBjb25maWcgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb290c3RyYXBTZXJ2aWNlIHtcbiAgcHJpdmF0ZSB0ZW5hbnRTZXJ2aWNlID0gbmV3IFRlbmFudFNlcnZpY2UoKTtcbiAgcHJpdmF0ZSB0ZW5hbnRQcm9maWxlU2VydmljZSA9IG5ldyBUZW5hbnRQcm9maWxlU2VydmljZSgpO1xuICBwcml2YXRlIG9yZ1VuaXRTZXJ2aWNlID0gbmV3IE9yZ1VuaXRTZXJ2aWNlKCk7XG4gIHByaXZhdGUgb3JnVW5pdFByb2ZpbGVTZXJ2aWNlID0gbmV3IE9yZ1VuaXRQcm9maWxlU2VydmljZSgpO1xuICBwcml2YXRlIHVzZXJTZXJ2aWNlID0gbmV3IFVzZXJTZXJ2aWNlKCk7XG4gIHByaXZhdGUgbWVtYmVyc2hpcFNlcnZpY2UgPSBuZXcgVGVuYW50TWVtYmVyc2hpcFNlcnZpY2UoKTtcbiAgcHJpdmF0ZSBwcmluY2lwYWxTZXJ2aWNlID0gbmV3IFByaW5jaXBhbFNlcnZpY2UoKTtcbiAgcHJpdmF0ZSBwZXJtaXNzaW9uU2VydmljZSA9IG5ldyBQZXJtaXNzaW9uU2VydmljZSgpO1xuICBwcml2YXRlIHJvbGVTZXJ2aWNlID0gbmV3IFJvbGVTZXJ2aWNlKCk7XG4gIHByaXZhdGUgcm9sZVBlcm1pc3Npb25TZXJ2aWNlID0gbmV3IFJvbGVQZXJtaXNzaW9uU2VydmljZSgpO1xuICBwcml2YXRlIHJvbGVBc3NpZ25tZW50U2VydmljZSA9IG5ldyBSb2xlQXNzaWdubWVudFNlcnZpY2UoKTtcbiAgcHJpdmF0ZSBlZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZSA9IG5ldyBFZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZSgpO1xuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgYm9vdHN0cmFwVGVuYW50RnJvbVRlbXBsYXRlKFxuICAgIHRlbXBsYXRlOiBCb290c3RyYXBUZW1wbGF0ZSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHtcbiAgICB0ZW5hbnRJZDogc3RyaW5nO1xuICAgIHJvb3RPcmdVbml0SWQ6IHN0cmluZztcbiAgICBvd25lclVzZXJJZDogc3RyaW5nO1xuICAgIG93bmVyUHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgfT4ge1xuICAgIGNvbnN0IHRlbmFudCA9IGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5jcmVhdGVUZW5hbnQodGVtcGxhdGUudGVuYW50LCAuLi5hcmdzKTtcbiAgICBpZiAodGVtcGxhdGUudGVuYW50LnByb2ZpbGVLZXkpIHtcbiAgICAgIGF3YWl0IHRoaXMudGVuYW50UHJvZmlsZVNlcnZpY2UuY3JlYXRlUHJvZmlsZShcbiAgICAgICAgdGVuYW50LmlkLFxuICAgICAgICB0ZW1wbGF0ZS50ZW5hbnQucHJvZmlsZUtleSxcbiAgICAgICAgdGVtcGxhdGUudGVuYW50LnByb2ZpbGVNZXRhZGF0YSxcbiAgICAgICAgLi4uYXJnc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVPcmdUcmVlID0gYXN5bmMgKFxuICAgICAgcGFyZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgIG9yZ1VuaXQ6IEJvb3RzdHJhcE9yZ1VuaXRcbiAgICApOiBQcm9taXNlPE9yZ1VuaXQ+ID0+IHtcbiAgICAgIGNvbnN0IGNyZWF0ZWQgPVxuICAgICAgICBwYXJlbnRJZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLm9yZ1VuaXRTZXJ2aWNlLmNyZWF0ZVJvb3QoXG4gICAgICAgICAgICAgIHRlbmFudC5pZCxcbiAgICAgICAgICAgICAgb3JnVW5pdC5uYW1lLFxuICAgICAgICAgICAgICBvcmdVbml0Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICBvcmdVbml0LnByb2ZpbGVLZXksXG4gICAgICAgICAgICAgIG9yZ1VuaXQubWV0YWRhdGEsXG4gICAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGF3YWl0IHRoaXMub3JnVW5pdFNlcnZpY2UuY3JlYXRlQ2hpbGQoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZDogdGVuYW50LmlkLFxuICAgICAgICAgICAgICAgIHBhcmVudE9yZ1VuaXRJZDogcGFyZW50SWQsXG4gICAgICAgICAgICAgICAgbmFtZTogb3JnVW5pdC5uYW1lLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcmdVbml0Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIHByb2ZpbGVLZXk6IG9yZ1VuaXQucHJvZmlsZUtleSxcbiAgICAgICAgICAgICAgICBwcm9maWxlTWV0YWRhdGE6IG9yZ1VuaXQubWV0YWRhdGEsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG9yZ1VuaXQuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JnVHJlZShjcmVhdGVkLmlkLCBjaGlsZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9O1xuXG4gICAgY29uc3Qgcm9vdE9yZ1VuaXQgPSBhd2FpdCBjcmVhdGVPcmdUcmVlKHVuZGVmaW5lZCwgdGVtcGxhdGUucm9vdE9yZ1VuaXQpO1xuICAgIGNvbnN0IG93bmVyID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS5jcmVhdGVVc2VyKHRlbXBsYXRlLm93bmVyVXNlciwgLi4uYXJncyk7XG4gICAgYXdhaXQgdGhpcy5tZW1iZXJzaGlwU2VydmljZS5hZGRVc2VyVG9UZW5hbnQodGVuYW50LmlkLCBvd25lci5pZCwgTWVtYmVyc2hpcFN0YXR1cy5BY3RpdmUsIC4uLmFyZ3MpO1xuICAgIGNvbnN0IG93bmVyUHJpbmNpcGFsID0gYXdhaXQgdGhpcy5wcmluY2lwYWxTZXJ2aWNlLmdldFVzZXJQcmluY2lwYWwodGVuYW50LmlkLCBvd25lci5pZCwgLi4uYXJncyk7XG5cbiAgICBmb3IgKGNvbnN0IHBlcm1pc3Npb24gb2YgdGVtcGxhdGUucGVybWlzc2lvbnMpIHtcbiAgICAgIGF3YWl0IHRoaXMucGVybWlzc2lvblNlcnZpY2UuY3JlYXRlUGVybWlzc2lvbihwZXJtaXNzaW9uLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJvbGUgb2YgdGVtcGxhdGUucm9sZXMpIHtcbiAgICAgIGNvbnN0IGNyZWF0ZWRSb2xlID0gYXdhaXQgdGhpcy5yb2xlU2VydmljZS5jcmVhdGVSb2xlKFxuICAgICAgICB7XG4gICAgICAgICAgdGVuYW50SWQ6IHRlbmFudC5pZCxcbiAgICAgICAgICBrZXk6IHJvbGUua2V5LFxuICAgICAgICAgIG5hbWU6IHJvbGUubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogcm9sZS5kZXNjcmlwdGlvbixcbiAgICAgICAgfSxcbiAgICAgICAgLi4uYXJnc1xuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgcGVybWlzc2lvbktleSBvZiByb2xlLnBlcm1pc3Npb25LZXlzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9sZVBlcm1pc3Npb25TZXJ2aWNlLmFkZFBlcm1pc3Npb25LZXlUb1JvbGUoXG4gICAgICAgICAgY3JlYXRlZFJvbGUuaWQsXG4gICAgICAgICAgcGVybWlzc2lvbktleSxcbiAgICAgICAgICAuLi5hcmdzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3duZXJSb2xlID0gYXdhaXQgdGhpcy5yb2xlU2VydmljZS5nZXRUZW5hbnRSb2xlQnlLZXkoXG4gICAgICB0ZW5hbnQuaWQsXG4gICAgICB0ZW1wbGF0ZS5vd25lclJvbGVLZXksXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLnJvbGVBc3NpZ25tZW50U2VydmljZS5hc3NpZ25Sb2xlKFxuICAgICAge1xuICAgICAgICB0ZW5hbnRJZDogdGVuYW50LmlkLFxuICAgICAgICBwcmluY2lwYWxJZDogb3duZXJQcmluY2lwYWwuaWQsXG4gICAgICAgIHJvbGVJZDogb3duZXJSb2xlLmlkLFxuICAgICAgICBzY29wZUtpbmQ6IFNjb3BlS2luZC5PcmdVbml0LFxuICAgICAgICBzY29wZUlkOiByb290T3JnVW5pdC5pZCxcbiAgICAgICAgaW5oZXJpdERvd246IHRydWUsXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgYXdhaXQgdGhpcy5lZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZS5yZWJ1aWxkRm9yUHJpbmNpcGFsKHRlbmFudC5pZCwgb3duZXJQcmluY2lwYWwuaWQsIC4uLmFyZ3MpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlbmFudElkOiB0ZW5hbnQuaWQsXG4gICAgICByb290T3JnVW5pdElkOiByb290T3JnVW5pdC5pZCxcbiAgICAgIG93bmVyVXNlcklkOiBvd25lci5pZCxcbiAgICAgIG93bmVyUHJpbmNpcGFsSWQ6IG93bmVyUHJpbmNpcGFsLmlkLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBtZW1iZXJzaGlwU2VydmljZSA9IG5ldyBUZW5hbnRNZW1iZXJzaGlwU2VydmljZSgpO1xuICBwcml2YXRlIG9yZ01lbWJlcnNoaXBTZXJ2aWNlID0gbmV3IE9yZ1VuaXRNZW1iZXJzaGlwU2VydmljZSgpO1xuICBwcml2YXRlIHByaW5jaXBhbFNlcnZpY2UgPSBuZXcgUHJpbmNpcGFsU2VydmljZSgpO1xuICBwcml2YXRlIHJvbGVTZXJ2aWNlID0gbmV3IFJvbGVTZXJ2aWNlKCk7XG4gIHByaXZhdGUgcm9sZUFzc2lnbm1lbnRTZXJ2aWNlID0gbmV3IFJvbGVBc3NpZ25tZW50U2VydmljZSgpO1xuICBwcml2YXRlIGVmZmVjdGl2ZVBlcm1pc3Npb25TZXJ2aWNlID0gbmV3IEVmZmVjdGl2ZVBlcm1pc3Npb25TZXJ2aWNlKCk7XG5cbiAgQHRyYW5zYWN0aW9uYWwoKVxuICBhc3luYyBvbmJvYXJkVXNlclRvVGVuYW50QW5kT3JnVW5pdChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIHJvbGVLZXk6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHsgcHJpbmNpcGFsSWQ6IHN0cmluZyB9PiB7XG4gICAgYXdhaXQgdGhpcy5tZW1iZXJzaGlwU2VydmljZS5hZGRVc2VyVG9UZW5hbnQodGVuYW50SWQsIHVzZXJJZCwgTWVtYmVyc2hpcFN0YXR1cy5BY3RpdmUsIC4uLmFyZ3MpO1xuICAgIGF3YWl0IHRoaXMub3JnTWVtYmVyc2hpcFNlcnZpY2UuYWRkVXNlclRvT3JnVW5pdChcbiAgICAgIHRlbmFudElkLFxuICAgICAgb3JnVW5pdElkLFxuICAgICAgdXNlcklkLFxuICAgICAgTWVtYmVyc2hpcFN0YXR1cy5BY3RpdmUsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBjb25zdCBwcmluY2lwYWwgPSBhd2FpdCB0aGlzLnByaW5jaXBhbFNlcnZpY2UuZ2V0VXNlclByaW5jaXBhbCh0ZW5hbnRJZCwgdXNlcklkLCAuLi5hcmdzKTtcbiAgICBjb25zdCByb2xlID0gYXdhaXQgdGhpcy5yb2xlU2VydmljZS5nZXRUZW5hbnRSb2xlQnlLZXkodGVuYW50SWQsIHJvbGVLZXksIC4uLmFyZ3MpO1xuICAgIGF3YWl0IHRoaXMucm9sZUFzc2lnbm1lbnRTZXJ2aWNlLmFzc2lnblJvbGUoXG4gICAgICB7XG4gICAgICAgIHRlbmFudElkLFxuICAgICAgICBwcmluY2lwYWxJZDogcHJpbmNpcGFsLmlkLFxuICAgICAgICByb2xlSWQ6IHJvbGUuaWQsXG4gICAgICAgIHNjb3BlS2luZDogU2NvcGVLaW5kLk9yZ1VuaXQsXG4gICAgICAgIHNjb3BlSWQ6IG9yZ1VuaXRJZCxcbiAgICAgICAgaW5oZXJpdERvd246IHRydWUsXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgYXdhaXQgdGhpcy5lZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZS5yZWJ1aWxkRm9yUHJpbmNpcGFsKHRlbmFudElkLCBwcmluY2lwYWwuaWQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB7IHByaW5jaXBhbElkOiBwcmluY2lwYWwuaWQgfTtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgY2hhbmdlVXNlck9yZ1JvbGUoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIHJvbGVLZXk6IHN0cmluZyxcbiAgICBpbmhlcml0RG93bjogYm9vbGVhbixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb2xlID0gYXdhaXQgdGhpcy5yb2xlU2VydmljZS5nZXRUZW5hbnRSb2xlQnlLZXkodGVuYW50SWQsIHJvbGVLZXksIC4uLmFyZ3MpO1xuICAgIGNvbnN0IGN1cnJlbnRBc3NpZ25tZW50cyA9IGF3YWl0IHRoaXMucm9sZUFzc2lnbm1lbnRTZXJ2aWNlLmxpc3RQcmluY2lwYWxBc3NpZ25tZW50cyhcbiAgICAgIHRlbmFudElkLFxuICAgICAgcHJpbmNpcGFsSWQsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGFzc2lnbm1lbnQgb2YgY3VycmVudEFzc2lnbm1lbnRzLmZpbHRlcihcbiAgICAgIChyb3cpID0+IHJvdy5zY29wZUtpbmQgPT09IFNjb3BlS2luZC5PcmdVbml0ICYmIHJvdy5zY29wZUlkID09PSBvcmdVbml0SWRcbiAgICApKSB7XG4gICAgICBhd2FpdCB0aGlzLnJvbGVBc3NpZ25tZW50U2VydmljZS5yZXZva2VBc3NpZ25tZW50KGFzc2lnbm1lbnQuaWQsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJvbGVBc3NpZ25tZW50U2VydmljZS5hc3NpZ25Sb2xlKFxuICAgICAge1xuICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgcHJpbmNpcGFsSWQsXG4gICAgICAgIHJvbGVJZDogcm9sZS5pZCxcbiAgICAgICAgc2NvcGVLaW5kOiBTY29wZUtpbmQuT3JnVW5pdCxcbiAgICAgICAgc2NvcGVJZDogb3JnVW5pdElkLFxuICAgICAgICBpbmhlcml0RG93bixcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmVmZmVjdGl2ZVBlcm1pc3Npb25TZXJ2aWNlLnJlYnVpbGRGb3JQcmluY2lwYWwodGVuYW50SWQsIHByaW5jaXBhbElkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgc3VzcGVuZFVzZXJJblRlbmFudChcbiAgICB0ZW5hbnRNZW1iZXJzaGlwSWQ6IHN0cmluZyxcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIHByaW5jaXBhbElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5tZW1iZXJzaGlwU2VydmljZS5zZXRTdGF0dXMoXG4gICAgICB0ZW5hbnRNZW1iZXJzaGlwSWQsXG4gICAgICBNZW1iZXJzaGlwU3RhdHVzLlN1c3BlbmRlZCxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZWZmZWN0aXZlUGVybWlzc2lvblNlcnZpY2UuZGVsZXRlRm9yUHJpbmNpcGFsKHRlbmFudElkLCBwcmluY2lwYWxJZCwgLi4uYXJncyk7XG4gIH1cblxuICBAdHJhbnNhY3Rpb25hbCgpXG4gIGFzeW5jIHJlYWN0aXZhdGVVc2VySW5UZW5hbnQoXG4gICAgdGVuYW50TWVtYmVyc2hpcElkOiBzdHJpbmcsXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubWVtYmVyc2hpcFNlcnZpY2Uuc2V0U3RhdHVzKHRlbmFudE1lbWJlcnNoaXBJZCwgTWVtYmVyc2hpcFN0YXR1cy5BY3RpdmUsIC4uLmFyZ3MpO1xuICAgIGF3YWl0IHRoaXMuZWZmZWN0aXZlUGVybWlzc2lvblNlcnZpY2UucmVidWlsZEZvclByaW5jaXBhbCh0ZW5hbnRJZCwgcHJpbmNpcGFsSWQsIC4uLmFyZ3MpO1xuICB9XG59XG4iXX0=
|
|
1046
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWJhc2VkLWF1dGhvcml6YXRpb24tc3lzdGVtLnNlcnZpY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib3JnLWJhc2VkLWF1dGhvcml6YXRpb24tc3lzdGVtLnNlcnZpY2VzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUk7SUFDakYsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3SCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssVUFBVTtRQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDOztRQUMxSCxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFF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QVMsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0RSwwdTJIQUEwdTJIIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbmltcG9ydCB7IEJhc2VNb2RlbFNlcnZpY2UsIElzb2xhdGlvblRpZXIsIE1lbWJlcnNoaXBTdGF0dXMsIFByaW5jaXBhbEtpbmQsIFNjb3BlS2luZCwgU3RvcmFnZUJpbmRpbmdLaW5kLCBpZCwgcmVsYXRpb25JZCwgdHJhbnNhY3Rpb25hbCwgfSBmcm9tIFwiLi9vcmctYmFzZWQtYXV0aG9yaXphdGlvbi1zeXN0ZW0uanNcIjtcbmltcG9ydCB7IEVmZmVjdGl2ZVBlcm1pc3Npb24sIEdyb3VwLCBHcm91cE1lbWJlcnNoaXAsIEluaGVyaXRhbmNlQmxvY2ssIE9yZ1VuaXQsIE9yZ1VuaXRDbG9zdXJlLCBPcmdVbml0TWVtYmVyc2hpcCwgT3JnVW5pdFByb2ZpbGUsIFBlcm1pc3Npb24sIFByb3RlY3RlZFJlc291cmNlLCBQcmluY2lwYWwsIFJlc291cmNlR3JhbnQsIFJvbGUsIFJvbGVBc3NpZ25tZW50LCBSb2xlUGVybWlzc2lvbiwgU3RvcmFnZUJpbmRpbmcsIFRlbmFudCwgVGVuYW50TWVtYmVyc2hpcCwgVGVuYW50UHJvZmlsZSwgVXNlciwgfSBmcm9tIFwiLi9vcmctYmFzZWQtYXV0aG9yaXphdGlvbi1zeXN0ZW0ubW9kZWxzXCI7XG5jb25zdCBub3dJc28gPSAoKSA9PiBuZXcgRGF0ZSgpO1xuY29uc3QgYXNBcnJheSA9ICh2YWx1ZSkgPT4gdmFsdWUgPz8gW107XG5jb25zdCBzYW1lVGVuYW50ID0gKHJvd1RlbmFudCwgdGVuYW50SWQpID0+IHJlbGF0aW9uSWQocm93VGVuYW50KSA9PT0gdGVuYW50SWQ7XG5jb25zdCByZWxhdGlvbk1hdGNoID0gKHZhbHVlLCB0YXJnZXQpID0+ICh0YXJnZXQgPyByZWxhdGlvbklkKHZhbHVlKSA9PT0gdGFyZ2V0IDogZmFsc2UpO1xuY29uc3QgbG93ZXJTbHVnID0gKHZhbHVlKSA9PiB2YWx1ZVxuICAgIC50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csIFwiLVwiKVxuICAgIC5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpIHx8IFwiaXRlbVwiO1xuYXN5bmMgZnVuY3Rpb24gZGVsZXRlTWFueUJ5SWQoc2VydmljZSwgcm93cywgLi4uYXJncykge1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgYXdhaXQgc2VydmljZS5kZWxldGVCeUlkKHJvdy5pZCwgLi4uYXJncyk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFRlbmFudFByb2ZpbGVTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFRlbmFudFByb2ZpbGUpO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVQcm9maWxlKHRlbmFudElkLCBwcm9maWxlS2V5LCBtZXRhZGF0YSwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoe1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICB0ZW5hbnQ6IHRlbmFudElkLFxuICAgICAgICAgICAgcHJvZmlsZUtleSxcbiAgICAgICAgICAgIG1ldGFkYXRhLFxuICAgICAgICB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgbGlzdEZvclRlbmFudCh0ZW5hbnRJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChwcm9maWxlKSA9PiByZWxhdGlvbk1hdGNoKHByb2ZpbGUudGVuYW50LCB0ZW5hbnRJZCkpO1xuICAgIH1cbiAgICBhc3luYyBkZWxldGVGb3JUZW5hbnQodGVuYW50SWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgYXdhaXQgZGVsZXRlTWFueUJ5SWQodGhpcywgYXdhaXQgdGhpcy5saXN0Rm9yVGVuYW50KHRlbmFudElkLCAuLi5hcmdzKSwgLi4uYXJncyk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9yZ1VuaXRQcm9maWxlU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihPcmdVbml0UHJvZmlsZSk7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZVByb2ZpbGUob3JnVW5pdElkLCBwcm9maWxlS2V5LCBtZXRhZGF0YSwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoe1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICBvcmdVbml0OiBvcmdVbml0SWQsXG4gICAgICAgICAgICBwcm9maWxlS2V5LFxuICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIH0sIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0Rm9yT3JnVW5pdChvcmdVbml0SWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigocHJvZmlsZSkgPT4gcmVsYXRpb25NYXRjaChwcm9maWxlLm9yZ1VuaXQsIG9yZ1VuaXRJZCkpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBPcmdVbml0Q2xvc3VyZVNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoT3JnVW5pdENsb3N1cmUpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0QW5jZXN0b3JzKHRlbmFudElkLCBvcmdVbml0SWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpXG4gICAgICAgICAgICAuZmlsdGVyKChyb3cpID0+IHNhbWVUZW5hbnQocm93LnRlbmFudCwgdGVuYW50SWQpICYmXG4gICAgICAgICAgICByZWxhdGlvbk1hdGNoKHJvdy5kZXNjZW5kYW50LCBvcmdVbml0SWQpKVxuICAgICAgICAgICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LmRlcHRoIC0gcmlnaHQuZGVwdGgpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0RGVzY2VuZGFudHModGVuYW50SWQsIG9yZ1VuaXRJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHJvdykgPT4gc2FtZVRlbmFudChyb3cudGVuYW50LCB0ZW5hbnRJZCkgJiZcbiAgICAgICAgICAgIHJlbGF0aW9uTWF0Y2gocm93LmFuY2VzdG9yLCBvcmdVbml0SWQpKVxuICAgICAgICAgICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LmRlcHRoIC0gcmlnaHQuZGVwdGgpO1xuICAgIH1cbiAgICBhc3luYyBpc0FuY2VzdG9yT2YodGVuYW50SWQsIGFuY2VzdG9yT3JnVW5pdElkLCBkZXNjZW5kYW50T3JnVW5pdElkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QW5jZXN0b3JzKHRlbmFudElkLCBkZXNjZW5kYW50T3JnVW5pdElkLCAuLi5hcmdzKSkuc29tZSgocm93KSA9PiByZWxhdGlvbk1hdGNoKHJvdy5hbmNlc3RvciwgYW5jZXN0b3JPcmdVbml0SWQpKTtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlU2VsZkxpbmsodGVuYW50SWQsIG9yZ1VuaXRJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoe1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICB0ZW5hbnQ6IHRlbmFudElkLFxuICAgICAgICAgICAgYW5jZXN0b3I6IG9yZ1VuaXRJZCxcbiAgICAgICAgICAgIGRlc2NlbmRhbnQ6IG9yZ1VuaXRJZCxcbiAgICAgICAgICAgIGRlcHRoOiAwLFxuICAgICAgICB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgaW5zZXJ0QW5jZXN0b3JMaW5rc0Zvck5ld0NoaWxkKHRlbmFudElkLCBwYXJlbnRPcmdVbml0SWQsIGNoaWxkT3JnVW5pdElkLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGFuY2VzdG9yTGlua3MgPSBhd2FpdCB0aGlzLmxpc3RBbmNlc3RvcnModGVuYW50SWQsIHBhcmVudE9yZ1VuaXRJZCwgLi4uYXJncyk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGFuY2VzdG9yTGlua3MubWFwKChsaW5rKSA9PiB0aGlzLmNyZWF0ZU9uZSh7XG4gICAgICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgICAgICBhbmNlc3RvcjogbGluay5hbmNlc3RvcixcbiAgICAgICAgICAgIGRlc2NlbmRhbnQ6IGNoaWxkT3JnVW5pdElkLFxuICAgICAgICAgICAgZGVwdGg6IGxpbmsuZGVwdGggKyAxLFxuICAgICAgICB9LCAuLi5hcmdzKSkpO1xuICAgIH1cbiAgICBhc3luYyBkZWxldGVMaW5rc0ZvclN1YnRyZWUodGVuYW50SWQsIG9yZ1VuaXRJZCwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBzdWJ0cmVlID0gYXdhaXQgdGhpcy5saXN0RGVzY2VuZGFudHModGVuYW50SWQsIG9yZ1VuaXRJZCwgLi4uYXJncyk7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRJZHMgPSBuZXcgU2V0KFtcbiAgICAgICAgICAgIG9yZ1VuaXRJZCxcbiAgICAgICAgICAgIC4uLnN1YnRyZWUubWFwKChyb3cpID0+IHJlbGF0aW9uSWQocm93LmRlc2NlbmRhbnQpKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IGFuY2VzdG9ySWRzID0gbmV3IFNldChbXG4gICAgICAgICAgICBvcmdVbml0SWQsXG4gICAgICAgICAgICAuLi5zdWJ0cmVlLm1hcCgocm93KSA9PiByZWxhdGlvbklkKHJvdy5hbmNlc3RvcikpLFxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigocm93KSA9PiBzYW1lVGVuYW50KHJvdy50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICAgICAgKGRlc2NlbmRhbnRJZHMuaGFzKHJlbGF0aW9uSWQocm93LmRlc2NlbmRhbnQpKSB8fFxuICAgICAgICAgICAgICAgIGFuY2VzdG9ySWRzLmhhcyhyZWxhdGlvbklkKHJvdy5hbmNlc3RvcikpKSk7XG4gICAgICAgIGF3YWl0IGRlbGV0ZU1hbnlCeUlkKHRoaXMsIHJvd3MsIC4uLmFyZ3MpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBJbmhlcml0YW5jZUJsb2NrU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihJbmhlcml0YW5jZUJsb2NrKTtcbiAgICB9XG4gICAgYXN5bmMgYmxvY2tDYXRlZ29yeSh0ZW5hbnRJZCwgb3JnVW5pdElkLCBwZXJtaXNzaW9uQ2F0ZWdvcnksIGJsb2NrZWRGcm9tQW5jZXN0b3JJZCwgcmVhc29uLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZSh7XG4gICAgICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgICAgICBvcmdVbml0OiBvcmdVbml0SWQsXG4gICAgICAgICAgICBibG9ja2VkRnJvbUFuY2VzdG9yOiBibG9ja2VkRnJvbUFuY2VzdG9ySWQsXG4gICAgICAgICAgICBwZXJtaXNzaW9uQ2F0ZWdvcnksXG4gICAgICAgICAgICByZWFzb24sXG4gICAgICAgIH0sIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyB1bmJsb2NrQ2F0ZWdvcnkoYmxvY2tJZCwgLi4uYXJncykge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUJ5SWQoYmxvY2tJZCwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RGb3JPcmdVbml0KHRlbmFudElkLCBvcmdVbml0SWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigoYmxvY2spID0+IHNhbWVUZW5hbnQoYmxvY2sudGVuYW50LCB0ZW5hbnRJZCkgJiYgcmVsYXRpb25NYXRjaChibG9jay5vcmdVbml0LCBvcmdVbml0SWQpKTtcbiAgICB9XG4gICAgYXN5bmMgY2F0ZWdvcnlCbG9ja2VkRm9yQW5jZXN0b3IodGVuYW50SWQsIG9yZ1VuaXRJZCwgYW5jZXN0b3JPcmdVbml0SWQsIGNhdGVnb3J5LCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0Rm9yT3JnVW5pdCh0ZW5hbnRJZCwgb3JnVW5pdElkLCAuLi5hcmdzKSkuc29tZSgoYmxvY2spID0+IGJsb2NrLnBlcm1pc3Npb25DYXRlZ29yeSA9PT0gY2F0ZWdvcnkgJiZcbiAgICAgICAgICAgICghYmxvY2suYmxvY2tlZEZyb21BbmNlc3RvciB8fFxuICAgICAgICAgICAgICAgIHJlbGF0aW9uTWF0Y2goYmxvY2suYmxvY2tlZEZyb21BbmNlc3RvciwgYW5jZXN0b3JPcmdVbml0SWQpKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFRlbmFudFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoVGVuYW50KTtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlVGVuYW50KGlucHV0LCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZSh7XG4gICAgICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgICAgIHNsdWc6IGlucHV0LnNsdWcsXG4gICAgICAgICAgICBuYW1lOiBpbnB1dC5uYW1lLFxuICAgICAgICAgICAgaXNvbGF0aW9uVGllcjogaW5wdXQuaXNvbGF0aW9uVGllciA/PyBJc29sYXRpb25UaWVyLlBvb2xlZCxcbiAgICAgICAgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGdldEJ5U2x1ZyhzbHVnLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRPbmVCeShcInNsdWdcIiwgc2x1ZywgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHJlbmFtZVRlbmFudCh0ZW5hbnRJZCwgbmFtZSwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUodGVuYW50SWQsIHsgbmFtZSB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgY2hhbmdlU2x1Zyh0ZW5hbnRJZCwgc2x1ZywgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUodGVuYW50SWQsIHsgc2x1ZyB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgc2V0SXNvbGF0aW9uVGllcih0ZW5hbnRJZCwgaXNvbGF0aW9uVGllciwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUodGVuYW50SWQsIHsgaXNvbGF0aW9uVGllciB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlVGVuYW50Q29udHJvbGxlZCh0ZW5hbnRJZCwgLi4uYXJncykge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUJ5SWQodGVuYW50SWQsIC4uLmFyZ3MpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBPcmdVbml0U2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihPcmdVbml0KTtcbiAgICB9XG4gICAgb3JnVW5pdFBhdGgocGFyZW50UGF0aCwgbmFtZSkge1xuICAgICAgICBjb25zdCBzZWdtZW50ID0gbG93ZXJTbHVnKG5hbWUpO1xuICAgICAgICByZXR1cm4gcGFyZW50UGF0aCA/IGAke3BhcmVudFBhdGgucmVwbGFjZSgvXFwvKyQvLCBcIlwiKX0vJHtzZWdtZW50fWAgOiBgLyR7c2VnbWVudH1gO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVQcm9maWxlSWZOZWVkZWQob3JnVW5pdElkLCBwcm9maWxlS2V5LCBwcm9maWxlTWV0YWRhdGEsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKCFwcm9maWxlS2V5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwcm9maWxlU2VydmljZSA9IG5ldyBPcmdVbml0UHJvZmlsZVNlcnZpY2UoKTtcbiAgICAgICAgYXdhaXQgcHJvZmlsZVNlcnZpY2UuY3JlYXRlUHJvZmlsZShvcmdVbml0SWQsIHByb2ZpbGVLZXksIHByb2ZpbGVNZXRhZGF0YSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZVJvb3QodGVuYW50SWQsIG5hbWUsIG1ldGFkYXRhLCBwcm9maWxlS2V5LCBwcm9maWxlTWV0YWRhdGEsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3JnVW5pdCA9IGF3YWl0IHRoaXMuY3JlYXRlT25lKHtcbiAgICAgICAgICAgIGlkOiBpZCgpLFxuICAgICAgICAgICAgdGVuYW50OiB0ZW5hbnRJZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBwYXRoOiB0aGlzLm9yZ1VuaXRQYXRoKHVuZGVmaW5lZCwgbmFtZSksXG4gICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgfSwgLi4uYXJncyk7XG4gICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlUHJvZmlsZUlmTmVlZGVkKG9yZ1VuaXQuaWQsIHByb2ZpbGVLZXksIHByb2ZpbGVNZXRhZGF0YSwgLi4uYXJncyk7XG4gICAgICAgIGNvbnN0IGNsb3N1cmVTZXJ2aWNlID0gbmV3IE9yZ1VuaXRDbG9zdXJlU2VydmljZSgpO1xuICAgICAgICBhd2FpdCBjbG9zdXJlU2VydmljZS5jcmVhdGVTZWxmTGluayh0ZW5hbnRJZCwgb3JnVW5pdC5pZCwgLi4uYXJncyk7XG4gICAgICAgIHJldHVybiBvcmdVbml0O1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVDaGlsZChpbnB1dCwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBpbnB1dC5wYXJlbnRPcmdVbml0SWRcbiAgICAgICAgICAgID8gYXdhaXQgdGhpcy5nZXRCeUlkKGlucHV0LnBhcmVudE9yZ1VuaXRJZCwgLi4uYXJncylcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBvcmdVbml0ID0gYXdhaXQgdGhpcy5jcmVhdGVPbmUoe1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICB0ZW5hbnQ6IGlucHV0LnRlbmFudElkLFxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnQ/LmlkID8/IGlucHV0LnBhcmVudE9yZ1VuaXRJZCxcbiAgICAgICAgICAgIG5hbWU6IGlucHV0Lm5hbWUsXG4gICAgICAgICAgICBwYXRoOiB0aGlzLm9yZ1VuaXRQYXRoKHBhcmVudD8ucGF0aCwgaW5wdXQubmFtZSksXG4gICAgICAgICAgICBtZXRhZGF0YTogaW5wdXQubWV0YWRhdGEsXG4gICAgICAgIH0sIC4uLmFyZ3MpO1xuICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZVByb2ZpbGVJZk5lZWRlZChvcmdVbml0LmlkLCBpbnB1dC5wcm9maWxlS2V5LCBpbnB1dC5wcm9maWxlTWV0YWRhdGEsIC4uLmFyZ3MpO1xuICAgICAgICBjb25zdCBjbG9zdXJlU2VydmljZSA9IG5ldyBPcmdVbml0Q2xvc3VyZVNlcnZpY2UoKTtcbiAgICAgICAgYXdhaXQgY2xvc3VyZVNlcnZpY2UuY3JlYXRlU2VsZkxpbmsoaW5wdXQudGVuYW50SWQsIG9yZ1VuaXQuaWQsIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoaW5wdXQucGFyZW50T3JnVW5pdElkKSB7XG4gICAgICAgICAgICBhd2FpdCBjbG9zdXJlU2VydmljZS5pbnNlcnRBbmNlc3RvckxpbmtzRm9yTmV3Q2hpbGQoaW5wdXQudGVuYW50SWQsIGlucHV0LnBhcmVudE9yZ1VuaXRJZCwgb3JnVW5pdC5pZCwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9yZ1VuaXQ7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RDaGlsZHJlbihwYXJlbnRPcmdVbml0SWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigob3JnVW5pdCkgPT4gcmVsYXRpb25NYXRjaChvcmdVbml0LnBhcmVudCwgcGFyZW50T3JnVW5pdElkKSk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RUZW5hbnRPcmdVbml0cyh0ZW5hbnRJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChvcmdVbml0KSA9PiBzYW1lVGVuYW50KG9yZ1VuaXQudGVuYW50LCB0ZW5hbnRJZCkpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0RGVzY2VuZGFudE9yZ1VuaXRzKHRlbmFudElkLCBvcmdVbml0SWQsIGluY2x1ZGVTZWxmID0gZmFsc2UsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY2xvc3VyZVNlcnZpY2UgPSBuZXcgT3JnVW5pdENsb3N1cmVTZXJ2aWNlKCk7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gYXdhaXQgY2xvc3VyZVNlcnZpY2UubGlzdERlc2NlbmRhbnRzKHRlbmFudElkLCBvcmdVbml0SWQsIC4uLmFyZ3MpO1xuICAgICAgICBjb25zdCBpZHMgPSBuZXcgU2V0KGRlc2NlbmRhbnRzLm1hcCgocm93KSA9PiByZWxhdGlvbklkKHJvdy5kZXNjZW5kYW50KSkpO1xuICAgICAgICBpZiAoaW5jbHVkZVNlbGYpXG4gICAgICAgICAgICBpZHMuYWRkKG9yZ1VuaXRJZCk7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0VGVuYW50T3JnVW5pdHModGVuYW50SWQsIC4uLmFyZ3MpKS5maWx0ZXIoKG9yZ1VuaXQpID0+IGlkcy5oYXMob3JnVW5pdC5pZCkpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0QW5jZXN0b3JPcmdVbml0cyh0ZW5hbnRJZCwgb3JnVW5pdElkLCBpbmNsdWRlU2VsZiA9IGZhbHNlLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGNsb3N1cmVTZXJ2aWNlID0gbmV3IE9yZ1VuaXRDbG9zdXJlU2VydmljZSgpO1xuICAgICAgICBjb25zdCBhbmNlc3RvcnMgPSBhd2FpdCBjbG9zdXJlU2VydmljZS5saXN0QW5jZXN0b3JzKHRlbmFudElkLCBvcmdVbml0SWQsIC4uLmFyZ3MpO1xuICAgICAgICBjb25zdCBpZHMgPSBuZXcgU2V0KGFuY2VzdG9ycy5tYXAoKHJvdykgPT4gcmVsYXRpb25JZChyb3cuYW5jZXN0b3IpKSk7XG4gICAgICAgIGlmIChpbmNsdWRlU2VsZilcbiAgICAgICAgICAgIGlkcy5hZGQob3JnVW5pdElkKTtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RUZW5hbnRPcmdVbml0cyh0ZW5hbnRJZCwgLi4uYXJncykpLmZpbHRlcigob3JnVW5pdCkgPT4gaWRzLmhhcyhvcmdVbml0LmlkKSk7XG4gICAgfVxuICAgIGFzeW5jIHJlbmFtZU9yZ1VuaXQob3JnVW5pdElkLCBuYW1lLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5nZXRCeUlkKG9yZ1VuaXRJZCwgLi4uYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShvcmdVbml0SWQsIHsgbmFtZSwgcGF0aDogdGhpcy5vcmdVbml0UGF0aCh1bmRlZmluZWQsIG5hbWUpIH0sIC4uLmFyZ3MpLnRoZW4oYXN5bmMgKHVwZGF0ZWQpID0+IHtcbiAgICAgICAgICAgIHVwZGF0ZWQucGF0aCA9IGV4aXN0aW5nLnBhcmVudCA/IHRoaXMub3JnVW5pdFBhdGgodW5kZWZpbmVkLCBuYW1lKSA6IHRoaXMub3JnVW5pdFBhdGgodW5kZWZpbmVkLCBuYW1lKTtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgbW92ZU9yZ1VuaXQodGVuYW50SWQsIG9yZ1VuaXRJZCwgbmV3UGFyZW50T3JnVW5pdElkLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG5ld1BhcmVudCA9IGF3YWl0IHRoaXMuZ2V0QnlJZChuZXdQYXJlbnRPcmdVbml0SWQsIC4uLmFyZ3MpO1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZ2V0QnlJZChvcmdVbml0SWQsIC4uLmFyZ3MpO1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdGhpcy51cGRhdGVPbmUob3JnVW5pdElkLCB7XG4gICAgICAgICAgICBwYXJlbnQ6IG5ld1BhcmVudC5pZCxcbiAgICAgICAgICAgIHBhdGg6IHRoaXMub3JnVW5pdFBhdGgobmV3UGFyZW50LnBhdGgsIGV4aXN0aW5nLm5hbWUpLFxuICAgICAgICB9LCAuLi5hcmdzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWJ1aWxkVGVuYW50Q2xvc3VyZSh0ZW5hbnRJZCwgLi4uYXJncyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH1cbiAgICBhc3luYyByZWJ1aWxkVGVuYW50Q2xvc3VyZSh0ZW5hbnRJZCwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBjbG9zdXJlU2VydmljZSA9IG5ldyBPcmdVbml0Q2xvc3VyZVNlcnZpY2UoKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdMaW5rcyA9IGF3YWl0IGNsb3N1cmVTZXJ2aWNlLmxpc3RBbGwoLi4uYXJncyk7XG4gICAgICAgIGF3YWl0IGRlbGV0ZU1hbnlCeUlkKGNsb3N1cmVTZXJ2aWNlLCBleGlzdGluZ0xpbmtzLmZpbHRlcigocm93KSA9PiBzYW1lVGVuYW50KHJvdy50ZW5hbnQsIHRlbmFudElkKSksIC4uLmFyZ3MpO1xuICAgICAgICBjb25zdCBvcmdVbml0cyA9IChhd2FpdCB0aGlzLmxpc3RUZW5hbnRPcmdVbml0cyh0ZW5hbnRJZCwgLi4uYXJncykpLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0RGVwdGggPSBsZWZ0LnBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCByaWdodERlcHRoID0gcmlnaHQucGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBsZWZ0RGVwdGggLSByaWdodERlcHRoO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChjb25zdCBvcmdVbml0IG9mIG9yZ1VuaXRzKSB7XG4gICAgICAgICAgICBhd2FpdCBjbG9zdXJlU2VydmljZS5jcmVhdGVTZWxmTGluayh0ZW5hbnRJZCwgb3JnVW5pdC5pZCwgLi4uYXJncyk7XG4gICAgICAgICAgICBpZiAob3JnVW5pdC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjbG9zdXJlU2VydmljZS5pbnNlcnRBbmNlc3RvckxpbmtzRm9yTmV3Q2hpbGQodGVuYW50SWQsIHJlbGF0aW9uSWQob3JnVW5pdC5wYXJlbnQpLCBvcmdVbml0LmlkLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBkZWxldGVPcmdVbml0VHJlZSh0ZW5hbnRJZCwgb3JnVW5pdElkLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGNsb3N1cmVTZXJ2aWNlID0gbmV3IE9yZ1VuaXRDbG9zdXJlU2VydmljZSgpO1xuICAgICAgICBjb25zdCBkZXNjZW5kYW50cyA9IGF3YWl0IHRoaXMubGlzdERlc2NlbmRhbnRPcmdVbml0cyh0ZW5hbnRJZCwgb3JnVW5pdElkLCB0cnVlLCAuLi5hcmdzKTtcbiAgICAgICAgY29uc3QgZGVzY2VuZGFudElkcyA9IG5ldyBTZXQoZGVzY2VuZGFudHMubWFwKChvcmdVbml0KSA9PiBvcmdVbml0LmlkKSk7XG4gICAgICAgIGNvbnN0IG9yZ1VuaXRzID0gKGF3YWl0IHRoaXMubGlzdFRlbmFudE9yZ1VuaXRzKHRlbmFudElkLCAuLi5hcmdzKSkuZmlsdGVyKChvcmdVbml0KSA9PiBkZXNjZW5kYW50SWRzLmhhcyhvcmdVbml0LmlkKSk7XG4gICAgICAgIGF3YWl0IGRlbGV0ZU1hbnlCeUlkKHRoaXMsIG9yZ1VuaXRzLCAuLi5hcmdzKTtcbiAgICAgICAgYXdhaXQgY2xvc3VyZVNlcnZpY2UuZGVsZXRlTGlua3NGb3JTdWJ0cmVlKHRlbmFudElkLCBvcmdVbml0SWQsIC4uLmFyZ3MpO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIHRyYW5zYWN0aW9uYWwoKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRnVuY3Rpb24pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbU3RyaW5nLCBTdHJpbmcsIE9iamVjdCwgU3RyaW5nLCBPYmplY3QsIE9iamVjdF0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCBQcm9taXNlKVxuXSwgT3JnVW5pdFNlcnZpY2UucHJvdG90eXBlLCBcImNyZWF0ZVJvb3RcIiwgbnVsbCk7XG5fX2RlY29yYXRlKFtcbiAgICB0cmFuc2FjdGlvbmFsKCksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdCwgT2JqZWN0XSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIFByb21pc2UpXG5dLCBPcmdVbml0U2VydmljZS5wcm90b3R5cGUsIFwiY3JlYXRlQ2hpbGRcIiwgbnVsbCk7XG5fX2RlY29yYXRlKFtcbiAgICB0cmFuc2FjdGlvbmFsKCksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW1N0cmluZywgU3RyaW5nLCBTdHJpbmcsIE9iamVjdF0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCBQcm9taXNlKVxuXSwgT3JnVW5pdFNlcnZpY2UucHJvdG90eXBlLCBcIm1vdmVPcmdVbml0XCIsIG51bGwpO1xuX19kZWNvcmF0ZShbXG4gICAgdHJhbnNhY3Rpb25hbCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtTdHJpbmcsIE9iamVjdF0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCBQcm9taXNlKVxuXSwgT3JnVW5pdFNlcnZpY2UucHJvdG90eXBlLCBcInJlYnVpbGRUZW5hbnRDbG9zdXJlXCIsIG51bGwpO1xuX19kZWNvcmF0ZShbXG4gICAgdHJhbnNhY3Rpb25hbCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtTdHJpbmcsIFN0cmluZywgT2JqZWN0XSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIFByb21pc2UpXG5dLCBPcmdVbml0U2VydmljZS5wcm90b3R5cGUsIFwiZGVsZXRlT3JnVW5pdFRyZWVcIiwgbnVsbCk7XG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoVXNlcik7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZVVzZXIoaW5wdXQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKHtcbiAgICAgICAgICAgIGlkOiBpZCgpLFxuICAgICAgICAgICAgZW1haWw6IGlucHV0LmVtYWlsLFxuICAgICAgICAgICAgcGhvbmU6IGlucHV0LnBob25lLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGlucHV0LmRpc3BsYXlOYW1lLFxuICAgICAgICB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0QnlFbWFpbChlbWFpbCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmluZCgodXNlcikgPT4gdXNlci5lbWFpbCA9PT0gZW1haWwpO1xuICAgIH1cbiAgICBhc3luYyB1cGRhdGVEaXNwbGF5TmFtZSh1c2VySWQsIGRpc3BsYXlOYW1lLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZSh1c2VySWQsIHsgZGlzcGxheU5hbWUgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHVwZGF0ZUVtYWlsKHVzZXJJZCwgZW1haWwsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKHVzZXJJZCwgeyBlbWFpbCB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlUGhvbmUodXNlcklkLCBwaG9uZSwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUodXNlcklkLCB7IHBob25lIH0sIC4uLmFyZ3MpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQcmluY2lwYWxTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFByaW5jaXBhbCk7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZVByaW5jaXBhbCh0ZW5hbnRJZCwga2luZCwgc3ViamVjdElkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZSh7XG4gICAgICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgc3ViamVjdElkLFxuICAgICAgICB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Rm9yU3ViamVjdCh0ZW5hbnRJZCwga2luZCwgc3ViamVjdElkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maW5kKChwcmluY2lwYWwpID0+IHNhbWVUZW5hbnQocHJpbmNpcGFsLnRlbmFudCwgdGVuYW50SWQpICYmXG4gICAgICAgICAgICBwcmluY2lwYWwua2luZCA9PT0ga2luZCAmJlxuICAgICAgICAgICAgcHJpbmNpcGFsLnN1YmplY3RJZCA9PT0gc3ViamVjdElkKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0T3JDcmVhdGVGb3JTdWJqZWN0KHRlbmFudElkLCBraW5kLCBzdWJqZWN0SWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuICgoYXdhaXQgdGhpcy5nZXRGb3JTdWJqZWN0KHRlbmFudElkLCBraW5kLCBzdWJqZWN0SWQsIC4uLmFyZ3MpKSA/P1xuICAgICAgICAgICAgKGF3YWl0IHRoaXMuY3JlYXRlUHJpbmNpcGFsKHRlbmFudElkLCBraW5kLCBzdWJqZWN0SWQsIC4uLmFyZ3MpKSk7XG4gICAgfVxuICAgIGFzeW5jIGdldFVzZXJQcmluY2lwYWwodGVuYW50SWQsIHVzZXJJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPckNyZWF0ZUZvclN1YmplY3QodGVuYW50SWQsIFByaW5jaXBhbEtpbmQuVXNlciwgdXNlcklkLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0R3JvdXBQcmluY2lwYWwodGVuYW50SWQsIGdyb3VwSWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVGb3JTdWJqZWN0KHRlbmFudElkLCBQcmluY2lwYWxLaW5kLkdyb3VwLCBncm91cElkLCAuLi5hcmdzKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgVGVuYW50TWVtYmVyc2hpcFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoVGVuYW50TWVtYmVyc2hpcCk7XG4gICAgfVxuICAgIGFzeW5jIGFkZFVzZXJUb1RlbmFudCh0ZW5hbnRJZCwgdXNlcklkLCBzdGF0dXMgPSBNZW1iZXJzaGlwU3RhdHVzLkFjdGl2ZSwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoe1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICB0ZW5hbnQ6IHRlbmFudElkLFxuICAgICAgICAgICAgdXNlcjogdXNlcklkLFxuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgc2V0U3RhdHVzKG1lbWJlcnNoaXBJZCwgc3RhdHVzLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShtZW1iZXJzaGlwSWQsIHsgc3RhdHVzIH0sIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0VXNlclRlbmFudHModXNlcklkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKG1lbWJlcnNoaXApID0+IHJlbGF0aW9uTWF0Y2gobWVtYmVyc2hpcC51c2VyLCB1c2VySWQpKTtcbiAgICB9XG4gICAgYXN5bmMgbGlzdFRlbmFudFVzZXJzKHRlbmFudElkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKG1lbWJlcnNoaXApID0+IHNhbWVUZW5hbnQobWVtYmVyc2hpcC50ZW5hbnQsIHRlbmFudElkKSk7XG4gICAgfVxuICAgIGFzeW5jIHJlbW92ZVVzZXJGcm9tVGVuYW50KG1lbWJlcnNoaXBJZCwgLi4uYXJncykge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUJ5SWQobWVtYmVyc2hpcElkLCAuLi5hcmdzKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgT3JnVW5pdE1lbWJlcnNoaXBTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKE9yZ1VuaXRNZW1iZXJzaGlwKTtcbiAgICB9XG4gICAgYXN5bmMgYWRkVXNlclRvT3JnVW5pdCh0ZW5hbnRJZCwgb3JnVW5pdElkLCB1c2VySWQsIHN0YXR1cyA9IE1lbWJlcnNoaXBTdGF0dXMuQWN0aXZlLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZSh7XG4gICAgICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgICAgICBvcmdVbml0OiBvcmdVbml0SWQsXG4gICAgICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgIH0sIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBzZXRTdGF0dXMobWVtYmVyc2hpcElkLCBzdGF0dXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKG1lbWJlcnNoaXBJZCwgeyBzdGF0dXMgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RVc2VyT3JnVW5pdHModXNlcklkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKG1lbWJlcnNoaXApID0+IHJlbGF0aW9uTWF0Y2gobWVtYmVyc2hpcC51c2VyLCB1c2VySWQpKTtcbiAgICB9XG4gICAgYXN5bmMgbGlzdE9yZ1VuaXRVc2VycyhvcmdVbml0SWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigobWVtYmVyc2hpcCkgPT4gcmVsYXRpb25NYXRjaChtZW1iZXJzaGlwLm9yZ1VuaXQsIG9yZ1VuaXRJZCkpO1xuICAgIH1cbiAgICBhc3luYyByZW1vdmVVc2VyRnJvbU9yZ1VuaXQobWVtYmVyc2hpcElkLCAuLi5hcmdzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQnlJZChtZW1iZXJzaGlwSWQsIC4uLmFyZ3MpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBHcm91cFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoR3JvdXApO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVHcm91cCh0ZW5hbnRJZCwgbmFtZSwgb3JnVW5pdElkLCBtZXRhZGF0YSwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoe1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICB0ZW5hbnQ6IHRlbmFudElkLFxuICAgICAgICAgICAgb3JnVW5pdDogb3JnVW5pdElkLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIG1ldGFkYXRhLFxuICAgICAgICB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgcmVuYW1lR3JvdXAoZ3JvdXBJZCwgbmFtZSwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUoZ3JvdXBJZCwgeyBuYW1lIH0sIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBtb3ZlR3JvdXBUb09yZ1VuaXQoZ3JvdXBJZCwgb3JnVW5pdElkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShncm91cElkLCB7IG9yZ1VuaXQ6IG9yZ1VuaXRJZCB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgbGlzdFRlbmFudEdyb3Vwcyh0ZW5hbnRJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChncm91cCkgPT4gc2FtZVRlbmFudChncm91cC50ZW5hbnQsIHRlbmFudElkKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEdyb3VwTWVtYmVyc2hpcFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoR3JvdXBNZW1iZXJzaGlwKTtcbiAgICB9XG4gICAgYXN5bmMgYWRkUHJpbmNpcGFsVG9Hcm91cCh0ZW5hbnRJZCwgZ3JvdXBJZCwgcHJpbmNpcGFsSWQsIG1ldGFkYXRhLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZSh7XG4gICAgICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgICAgICBncm91cDogZ3JvdXBJZCxcbiAgICAgICAgICAgIHByaW5jaXBhbDogcHJpbmNpcGFsSWQsXG4gICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RHcm91cE1lbWJlcnMoZ3JvdXBJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChtZW1iZXJzaGlwKSA9PiByZWxhdGlvbk1hdGNoKG1lbWJlcnNoaXAuZ3JvdXAsIGdyb3VwSWQpKTtcbiAgICB9XG4gICAgYXN5bmMgbGlzdFByaW5jaXBhbEdyb3VwcyhwcmluY2lwYWxJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChtZW1iZXJzaGlwKSA9PiByZWxhdGlvbk1hdGNoKG1lbWJlcnNoaXAucHJpbmNpcGFsLCBwcmluY2lwYWxJZCkpO1xuICAgIH1cbiAgICBhc3luYyByZW1vdmVQcmluY2lwYWxGcm9tR3JvdXAobWVtYmVyc2hpcElkLCAuLi5hcmdzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQnlJZChtZW1iZXJzaGlwSWQsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyByZXNvbHZlR3JvdXBQcmluY2lwYWxJZHNGb3JQcmluY2lwYWwocHJpbmNpcGFsSWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgcHJpbmNpcGFsU2VydmljZSA9IG5ldyBQcmluY2lwYWxTZXJ2aWNlKCk7XG4gICAgICAgIGNvbnN0IG1lbWJlcnNoaXBzID0gYXdhaXQgdGhpcy5saXN0UHJpbmNpcGFsR3JvdXBzKHByaW5jaXBhbElkLCAuLi5hcmdzKTtcbiAgICAgICAgY29uc3QgcHJpbmNpcGFscyA9IGF3YWl0IFByb21pc2UuYWxsKG1lbWJlcnNoaXBzLm1hcChhc3luYyAobWVtYmVyc2hpcCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVuYW50SWQgPSByZWxhdGlvbklkKG1lbWJlcnNoaXAudGVuYW50KTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSWQgPSByZWxhdGlvbklkKG1lbWJlcnNoaXAuZ3JvdXApO1xuICAgICAgICAgICAgY29uc3QgcHJpbmNpcGFsID0gYXdhaXQgcHJpbmNpcGFsU2VydmljZS5nZXRHcm91cFByaW5jaXBhbCh0ZW5hbnRJZCwgZ3JvdXBJZCwgLi4uYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gcHJpbmNpcGFsLmlkO1xuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBwcmluY2lwYWxzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihQZXJtaXNzaW9uKTtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlUGVybWlzc2lvbihpbnB1dCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoe1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICBrZXk6IGlucHV0LmtleSxcbiAgICAgICAgICAgIGNhdGVnb3J5OiBpbnB1dC5jYXRlZ29yeSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpbnB1dC5kZXNjcmlwdGlvbixcbiAgICAgICAgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGdldEJ5S2V5KGtleSwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmluZCgocGVybWlzc2lvbikgPT4gcGVybWlzc2lvbi5rZXkgPT09IGtleSk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RCeUNhdGVnb3J5KGNhdGVnb3J5LCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHBlcm1pc3Npb24pID0+IHBlcm1pc3Npb24uY2F0ZWdvcnkgPT09IGNhdGVnb3J5KTtcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlRGVzY3JpcHRpb24ocGVybWlzc2lvbklkLCBkZXNjcmlwdGlvbiwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUocGVybWlzc2lvbklkLCB7IGRlc2NyaXB0aW9uIH0sIC4uLmFyZ3MpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBSb2xlU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihSb2xlKTtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlUm9sZShpbnB1dCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoe1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICB0ZW5hbnQ6IGlucHV0LnRlbmFudElkLFxuICAgICAgICAgICAga2V5OiBpbnB1dC5rZXksXG4gICAgICAgICAgICBuYW1lOiBpbnB1dC5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGlucHV0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgbWV0YWRhdGE6IGlucHV0Lm1ldGFkYXRhLFxuICAgICAgICB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0U3lzdGVtUm9sZUJ5S2V5KGtleSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCByb2xlID0gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmluZCgoY2FuZGlkYXRlKSA9PiAhY2FuZGlkYXRlLnRlbmFudCAmJiBjYW5kaWRhdGUua2V5ID09PSBrZXkpO1xuICAgICAgICBpZiAoIXJvbGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUm9sZSBcIiR7a2V5fVwiIG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb2xlO1xuICAgIH1cbiAgICBhc3luYyBnZXRUZW5hbnRSb2xlQnlLZXkodGVuYW50SWQsIGtleSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCByb2xlID0gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmluZCgoY2FuZGlkYXRlKSA9PiBzYW1lVGVuYW50KGNhbmRpZGF0ZS50ZW5hbnQsIHRlbmFudElkKSAmJiBjYW5kaWRhdGUua2V5ID09PSBrZXkpO1xuICAgICAgICBpZiAoIXJvbGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUm9sZSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBmb3IgdGVuYW50ICR7dGVuYW50SWR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvbGU7XG4gICAgfVxuICAgIGFzeW5jIHJlbmFtZVJvbGUocm9sZUlkLCBuYW1lLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShyb2xlSWQsIHsgbmFtZSB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlUm9sZU1ldGFkYXRhKHJvbGVJZCwgbWV0YWRhdGEsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKHJvbGVJZCwgeyBtZXRhZGF0YSB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgbGlzdFRlbmFudFJvbGVzKHRlbmFudElkLCBpbmNsdWRlU3lzdGVtID0gZmFsc2UsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigocm9sZSkgPT4gaW5jbHVkZVN5c3RlbSA/ICFyb2xlLnRlbmFudCB8fCBzYW1lVGVuYW50KHJvbGUudGVuYW50LCB0ZW5hbnRJZCkgOiBzYW1lVGVuYW50KHJvbGUudGVuYW50LCB0ZW5hbnRJZCkpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBSb2xlUGVybWlzc2lvblNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoUm9sZVBlcm1pc3Npb24pO1xuICAgIH1cbiAgICBhc3luYyBhZGRQZXJtaXNzaW9uVG9Sb2xlKHJvbGVJZCwgcGVybWlzc2lvbklkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZSh7XG4gICAgICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgICAgIHJvbGU6IHJvbGVJZCxcbiAgICAgICAgICAgIHBlcm1pc3Npb246IHBlcm1pc3Npb25JZCxcbiAgICAgICAgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGFkZFBlcm1pc3Npb25LZXlUb1JvbGUocm9sZUlkLCBwZXJtaXNzaW9uS2V5LCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBhd2FpdCBuZXcgUGVybWlzc2lvblNlcnZpY2UoKS5nZXRCeUtleShwZXJtaXNzaW9uS2V5LCAuLi5hcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUGVybWlzc2lvblRvUm9sZShyb2xlSWQsIHBlcm1pc3Npb24uaWQsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyByZW1vdmVQZXJtaXNzaW9uRnJvbVJvbGUocm9sZVBlcm1pc3Npb25JZCwgLi4uYXJncykge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUJ5SWQocm9sZVBlcm1pc3Npb25JZCwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RSb2xlUGVybWlzc2lvbnMocm9sZUlkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHJvbGVQZXJtaXNzaW9uKSA9PiByZWxhdGlvbk1hdGNoKHJvbGVQZXJtaXNzaW9uLnJvbGUsIHJvbGVJZCkpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0UGVybWlzc2lvblJvbGVzKHBlcm1pc3Npb25JZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChyb2xlUGVybWlzc2lvbikgPT4gcmVsYXRpb25NYXRjaChyb2xlUGVybWlzc2lvbi5wZXJtaXNzaW9uLCBwZXJtaXNzaW9uSWQpKTtcbiAgICB9XG4gICAgYXN5bmMgcmVwbGFjZVJvbGVQZXJtaXNzaW9ucyhyb2xlSWQsIHBlcm1pc3Npb25JZHMsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLmxpc3RSb2xlUGVybWlzc2lvbnMocm9sZUlkLCAuLi5hcmdzKTtcbiAgICAgICAgYXdhaXQgZGVsZXRlTWFueUJ5SWQodGhpcywgZXhpc3RpbmcsIC4uLmFyZ3MpO1xuICAgICAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgUHJvbWlzZS5hbGwocGVybWlzc2lvbklkcy5tYXAoKHBlcm1pc3Npb25JZCkgPT4gdGhpcy5hZGRQZXJtaXNzaW9uVG9Sb2xlKHJvbGVJZCwgcGVybWlzc2lvbklkLCAuLi5hcmdzKSkpO1xuICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlUm9sZVdpdGhQZXJtaXNzaW9ucyhpbnB1dCwgcGVybWlzc2lvbktleXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgcm9sZSA9IGF3YWl0IG5ldyBSb2xlU2VydmljZSgpLmNyZWF0ZVJvbGUoaW5wdXQsIC4uLmFyZ3MpO1xuICAgICAgICBmb3IgKGNvbnN0IHBlcm1pc3Npb25LZXkgb2YgcGVybWlzc2lvbktleXMpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUGVybWlzc2lvbktleVRvUm9sZShyb2xlLmlkLCBwZXJtaXNzaW9uS2V5LCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm9sZTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICB0cmFuc2FjdGlvbmFsKCksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW1N0cmluZywgQXJyYXksIE9iamVjdF0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCBQcm9taXNlKVxuXSwgUm9sZVBlcm1pc3Npb25TZXJ2aWNlLnByb3RvdHlwZSwgXCJyZXBsYWNlUm9sZVBlcm1pc3Npb25zXCIsIG51bGwpO1xuX19kZWNvcmF0ZShbXG4gICAgdHJhbnNhY3Rpb25hbCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3QsIEFycmF5LCBPYmplY3RdKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnJldHVybnR5cGVcIiwgUHJvbWlzZSlcbl0sIFJvbGVQZXJtaXNzaW9uU2VydmljZS5wcm90b3R5cGUsIFwiY3JlYXRlUm9sZVdpdGhQZXJtaXNzaW9uc1wiLCBudWxsKTtcbmV4cG9ydCBjbGFzcyBSb2xlQXNzaWdubWVudFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoUm9sZUFzc2lnbm1lbnQpO1xuICAgIH1cbiAgICBhc3luYyBhc3NpZ25Sb2xlKGlucHV0LCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZSh7XG4gICAgICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgICAgIHRlbmFudDogaW5wdXQudGVuYW50SWQsXG4gICAgICAgICAgICBwcmluY2lwYWw6IGlucHV0LnByaW5jaXBhbElkLFxuICAgICAgICAgICAgcm9sZTogaW5wdXQucm9sZUlkLFxuICAgICAgICAgICAgc2NvcGVLaW5kOiBpbnB1dC5zY29wZUtpbmQsXG4gICAgICAgICAgICBzY29wZUlkOiBpbnB1dC5zY29wZUlkLFxuICAgICAgICAgICAgaW5oZXJpdERvd246IGlucHV0LmluaGVyaXREb3duID8/IGZhbHNlLFxuICAgICAgICAgICAgc3RhcnRzQXQ6IGlucHV0LnN0YXJ0c0F0LFxuICAgICAgICAgICAgZXhwaXJlc0F0OiBpbnB1dC5leHBpcmVzQXQsXG4gICAgICAgICAgICBjb25kaXRpb25zOiBpbnB1dC5jb25kaXRpb25zLFxuICAgICAgICB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgcmV2b2tlQXNzaWdubWVudChhc3NpZ25tZW50SWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVCeUlkKGFzc2lnbm1lbnRJZCwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RQcmluY2lwYWxBc3NpZ25tZW50cyh0ZW5hbnRJZCwgcHJpbmNpcGFsSWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigoYXNzaWdubWVudCkgPT4gc2FtZVRlbmFudChhc3NpZ25tZW50LnRlbmFudCwgdGVuYW50SWQpICYmXG4gICAgICAgICAgICByZWxhdGlvbk1hdGNoKGFzc2lnbm1lbnQucHJpbmNpcGFsLCBwcmluY2lwYWxJZCkpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0Um9sZUFzc2lnbm1lbnRzKHJvbGVJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChhc3NpZ25tZW50KSA9PiByZWxhdGlvbk1hdGNoKGFzc2lnbm1lbnQucm9sZSwgcm9sZUlkKSk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RUZW5hbnRBc3NpZ25tZW50cyh0ZW5hbnRJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChhc3NpZ25tZW50KSA9PiBzYW1lVGVuYW50KGFzc2lnbm1lbnQudGVuYW50LCB0ZW5hbnRJZCkpO1xuICAgIH1cbiAgICBhc3luYyB1cGRhdGVBc3NpZ25tZW50V2luZG93KGFzc2lnbm1lbnRJZCwgc3RhcnRzQXQsIGV4cGlyZXNBdCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUoYXNzaWdubWVudElkLCB7IHN0YXJ0c0F0LCBleHBpcmVzQXQgfSwgLi4uYXJncyk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEVmZmVjdGl2ZVBlcm1pc3Npb25TZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKEVmZmVjdGl2ZVBlcm1pc3Npb24pO1xuICAgIH1cbiAgICBhc3luYyBsaXN0Rm9yUHJpbmNpcGFsKHRlbmFudElkLCBwcmluY2lwYWxJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChwZXJtaXNzaW9uKSA9PiBzYW1lVGVuYW50KHBlcm1pc3Npb24udGVuYW50LCB0ZW5hbnRJZCkgJiZcbiAgICAgICAgICAgIHJlbGF0aW9uTWF0Y2gocGVybWlzc2lvbi5wcmluY2lwYWwsIHByaW5jaXBhbElkKSk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RGb3JTY29wZSh0ZW5hbnRJZCwgc2NvcGVLaW5kLCBzY29wZUlkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHBlcm1pc3Npb24pID0+IHNhbWVUZW5hbnQocGVybWlzc2lvbi50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICAgICAgcGVybWlzc2lvbi5zY29wZUtpbmQgPT09IHNjb3BlS2luZCAmJlxuICAgICAgICAgICAgcGVybWlzc2lvbi5zY29wZUlkID09PSBzY29wZUlkKTtcbiAgICB9XG4gICAgYXN5bmMgaGFzUGVybWlzc2lvbih0ZW5hbnRJZCwgcHJpbmNpcGFsSWQsIHBlcm1pc3Npb25LZXksIHNjb3BlS2luZCwgc2NvcGVJZCwgYXQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RGb3JQcmluY2lwYWwodGVuYW50SWQsIHByaW5jaXBhbElkLCAuLi5hcmdzKSkuc29tZSgocGVybWlzc2lvbikgPT4gcGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5ID09PSBwZXJtaXNzaW9uS2V5ICYmXG4gICAgICAgICAgICBwZXJtaXNzaW9uLnNjb3BlS2luZCA9PT0gc2NvcGVLaW5kICYmXG4gICAgICAgICAgICBwZXJtaXNzaW9uLnNjb3BlSWQgPT09IHNjb3BlSWQgJiZcbiAgICAgICAgICAgICghcGVybWlzc2lvbi5zdGFydHNBdCB8fCAhYXQgfHwgcGVybWlzc2lvbi5zdGFydHNBdCA8PSBhdCkgJiZcbiAgICAgICAgICAgICghcGVybWlzc2lvbi5leHBpcmVzQXQgfHwgIWF0IHx8IHBlcm1pc3Npb24uZXhwaXJlc0F0ID49IGF0KSk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZUZvclByaW5jaXBhbCh0ZW5hbnRJZCwgcHJpbmNpcGFsSWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgYXdhaXQgZGVsZXRlTWFueUJ5SWQodGhpcywgYXdhaXQgdGhpcy5saXN0Rm9yUHJpbmNpcGFsKHRlbmFudElkLCBwcmluY2lwYWxJZCwgLi4uYXJncyksIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBkZWxldGVGb3JUZW5hbnQodGVuYW50SWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgYXdhaXQgZGVsZXRlTWFueUJ5SWQodGhpcywgKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChwZXJtaXNzaW9uKSA9PiBzYW1lVGVuYW50KHBlcm1pc3Npb24udGVuYW50LCB0ZW5hbnRJZCkpLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgcmVidWlsZEZvclByaW5jaXBhbCh0ZW5hbnRJZCwgcHJpbmNpcGFsSWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVGb3JQcmluY2lwYWwodGVuYW50SWQsIHByaW5jaXBhbElkLCAuLi5hcmdzKTtcbiAgICAgICAgY29uc3Qgcm9sZUFzc2lnbm1lbnRTZXJ2aWNlID0gbmV3IFJvbGVBc3NpZ25tZW50U2VydmljZSgpO1xuICAgICAgICBjb25zdCByb2xlUGVybWlzc2lvblNlcnZpY2UgPSBuZXcgUm9sZVBlcm1pc3Npb25TZXJ2aWNlKCk7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25TZXJ2aWNlID0gbmV3IFBlcm1pc3Npb25TZXJ2aWNlKCk7XG4gICAgICAgIGNvbnN0IGdyb3VwTWVtYmVyc2hpcFNlcnZpY2UgPSBuZXcgR3JvdXBNZW1iZXJzaGlwU2VydmljZSgpO1xuICAgICAgICBjb25zdCBwcmluY2lwYWxTZXJ2aWNlID0gbmV3IFByaW5jaXBhbFNlcnZpY2UoKTtcbiAgICAgICAgY29uc3Qgb3JnVW5pdENsb3N1cmVTZXJ2aWNlID0gbmV3IE9yZ1VuaXRDbG9zdXJlU2VydmljZSgpO1xuICAgICAgICBjb25zdCBpbmhlcml0YW5jZUJsb2NrU2VydmljZSA9IG5ldyBJbmhlcml0YW5jZUJsb2NrU2VydmljZSgpO1xuICAgICAgICBjb25zdCBtYXRlcmlhbGl6ZWQgPSBbXTtcbiAgICAgICAgY29uc3Qgc291cmNlQXNzaWdubWVudHMgPSBhd2FpdCByb2xlQXNzaWdubWVudFNlcnZpY2UubGlzdFByaW5jaXBhbEFzc2lnbm1lbnRzKHRlbmFudElkLCBwcmluY2lwYWxJZCwgLi4uYXJncyk7XG4gICAgICAgIGNvbnN0IGdyb3VwTWVtYmVyc2hpcHMgPSBhd2FpdCBncm91cE1lbWJlcnNoaXBTZXJ2aWNlLmxpc3RQcmluY2lwYWxHcm91cHMocHJpbmNpcGFsSWQsIC4uLmFyZ3MpO1xuICAgICAgICBjb25zdCBncm91cEFzc2lnbm1lbnRzID0gKGF3YWl0IFByb21pc2UuYWxsKGdyb3VwTWVtYmVyc2hpcHMubWFwKGFzeW5jIChtZW1iZXJzaGlwKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cFByaW5jaXBhbCA9IGF3YWl0IHByaW5jaXBhbFNlcnZpY2UuZ2V0R3JvdXBQcmluY2lwYWwocmVsYXRpb25JZChtZW1iZXJzaGlwLnRlbmFudCksIHJlbGF0aW9uSWQobWVtYmVyc2hpcC5ncm91cCksIC4uLmFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIHJvbGVBc3NpZ25tZW50U2VydmljZS5saXN0UHJpbmNpcGFsQXNzaWdubWVudHModGVuYW50SWQsIGdyb3VwUHJpbmNpcGFsLmlkLCAuLi5hcmdzKTtcbiAgICAgICAgfSkpKS5mbGF0KCk7XG4gICAgICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gWy4uLnNvdXJjZUFzc2lnbm1lbnRzLCAuLi5ncm91cEFzc2lnbm1lbnRzXTtcbiAgICAgICAgZm9yIChjb25zdCBhc3NpZ25tZW50IG9mIGFzc2lnbm1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCByb2xlUGVybWlzc2lvbnMgPSBhd2FpdCByb2xlUGVybWlzc2lvblNlcnZpY2UubGlzdFJvbGVQZXJtaXNzaW9ucyhyZWxhdGlvbklkKGFzc2lnbm1lbnQucm9sZSksIC4uLmFyZ3MpO1xuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBhd2FpdCBQcm9taXNlLmFsbChyb2xlUGVybWlzc2lvbnMubWFwKGFzeW5jIChyb2xlUGVybWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBhd2FpdCBwZXJtaXNzaW9uU2VydmljZS5maW5kT25lQnkoXCJpZFwiLCByZWxhdGlvbklkKHJvbGVQZXJtaXNzaW9uLnBlcm1pc3Npb24pLCAuLi5hcmdzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVybWlzc2lvbjtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGVybWlzc2lvbiBvZiBwZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgICAgIGlmICghcGVybWlzc2lvbilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVLaW5kID0gYXNzaWdubWVudC5zY29wZUtpbmQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVJZCA9IGFzc2lnbm1lbnQuc2NvcGVJZDtcbiAgICAgICAgICAgICAgICBjb25zdCBzY29wZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGVLaW5kID09PSBTY29wZUtpbmQuVGVuYW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3Blcy5wdXNoKHsgc2NvcGVLaW5kLCBzY29wZUlkOiB0ZW5hbnRJZCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NvcGVLaW5kID09PSBTY29wZUtpbmQuUmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzLnB1c2goeyBzY29wZUtpbmQsIHNjb3BlSWQgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjb3BlS2luZCA9PT0gU2NvcGVLaW5kLk9yZ1VuaXQgJiYgIWFzc2lnbm1lbnQuaW5oZXJpdERvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzLnB1c2goeyBzY29wZUtpbmQsIHNjb3BlSWQgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjb3BlS2luZCA9PT0gU2NvcGVLaW5kLk9yZ1VuaXQgJiYgYXNzaWdubWVudC5pbmhlcml0RG93bikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjZW5kYW50cyA9IGF3YWl0IG9yZ1VuaXRDbG9zdXJlU2VydmljZS5saXN0RGVzY2VuZGFudHModGVuYW50SWQsIHNjb3BlSWQsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZXMucHVzaCguLi5kZXNjZW5kYW50cy5tYXAoKHJvdykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlS2luZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlSWQ6IHJlbGF0aW9uSWQocm93LmRlc2NlbmRhbnQpLFxuICAgICAgICAgICAgICAgICAgICB9KSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNjb3BlZCBvZiBzY29wZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlS2luZCA9PT0gU2NvcGVLaW5kLk9yZ1VuaXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQuaW5oZXJpdERvd24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlZC5zY29wZUlkICE9PSBzY29wZUlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoYXdhaXQgaW5oZXJpdGFuY2VCbG9ja1NlcnZpY2UuY2F0ZWdvcnlCbG9ja2VkRm9yQW5jZXN0b3IodGVuYW50SWQsIHNjb3BlZC5zY29wZUlkLCBzY29wZUlkLCBwZXJtaXNzaW9uLmNhdGVnb3J5LCAuLi5hcmdzKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmluY2lwYWxJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25LZXk6IHBlcm1pc3Npb24ua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVLaW5kOiBzY29wZWQuc2NvcGVLaW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVJZDogc2NvcGVkLnNjb3BlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VLaW5kOiBcInJvbGVfYXNzaWdubWVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSWQ6IGFzc2lnbm1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydHNBdDogYXNzaWdubWVudC5zdGFydHNBdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZXNBdDogYXNzaWdubWVudC5leHBpcmVzQXQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgUHJvbWlzZS5hbGwobWF0ZXJpYWxpemVkLm1hcCgocGVybWlzc2lvbikgPT4gdGhpcy5jcmVhdGVPbmUoe1xuICAgICAgICAgICAgaWQ6IHBlcm1pc3Npb24uaWQsXG4gICAgICAgICAgICB0ZW5hbnQ6IHBlcm1pc3Npb24udGVuYW50SWQsXG4gICAgICAgICAgICBwcmluY2lwYWw6IHBlcm1pc3Npb24ucHJpbmNpcGFsSWQsXG4gICAgICAgICAgICBwZXJtaXNzaW9uS2V5OiBwZXJtaXNzaW9uLnBlcm1pc3Npb25LZXksXG4gICAgICAgICAgICBzY29wZUtpbmQ6IHBlcm1pc3Npb24uc2NvcGVLaW5kLFxuICAgICAgICAgICAgc2NvcGVJZDogcGVybWlzc2lvbi5zY29wZUlkLFxuICAgICAgICAgICAgc291cmNlS2luZDogcGVybWlzc2lvbi5zb3VyY2VLaW5kLFxuICAgICAgICAgICAgc291cmNlSWQ6IHBlcm1pc3Npb24uc291cmNlSWQsXG4gICAgICAgICAgICBzdGFydHNBdDogcGVybWlzc2lvbi5zdGFydHNBdCxcbiAgICAgICAgICAgIGV4cGlyZXNBdDogcGVybWlzc2lvbi5leHBpcmVzQXQsXG4gICAgICAgIH0sIC4uLmFyZ3MpKSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH1cbiAgICBhc3luYyByZWJ1aWxkRm9yVGVuYW50KHRlbmFudElkLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHByaW5jaXBhbHMgPSAoYXdhaXQgbmV3IFByaW5jaXBhbFNlcnZpY2UoKS5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHByaW5jaXBhbCkgPT4gc2FtZVRlbmFudChwcmluY2lwYWwudGVuYW50LCB0ZW5hbnRJZCkpO1xuICAgICAgICBmb3IgKGNvbnN0IHByaW5jaXBhbCBvZiBwcmluY2lwYWxzKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlYnVpbGRGb3JQcmluY2lwYWwodGVuYW50SWQsIHByaW5jaXBhbC5pZCwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICB0cmFuc2FjdGlvbmFsKCksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW1N0cmluZywgU3RyaW5nLCBPYmplY3RdKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnJldHVybnR5cGVcIiwgUHJvbWlzZSlcbl0sIEVmZmVjdGl2ZVBlcm1pc3Npb25TZXJ2aWNlLnByb3RvdHlwZSwgXCJyZWJ1aWxkRm9yUHJpbmNpcGFsXCIsIG51bGwpO1xuX19kZWNvcmF0ZShbXG4gICAgdHJhbnNhY3Rpb25hbCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtTdHJpbmcsIE9iamVjdF0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCBQcm9taXNlKVxuXSwgRWZmZWN0aXZlUGVybWlzc2lvblNlcnZpY2UucHJvdG90eXBlLCBcInJlYnVpbGRGb3JUZW5hbnRcIiwgbnVsbCk7XG5leHBvcnQgY2xhc3MgUHJvdGVjdGVkUmVzb3VyY2VTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFByb3RlY3RlZFJlc291cmNlKTtcbiAgICB9XG4gICAgYXN5bmMgcmVnaXN0ZXJSZXNvdXJjZShpbnB1dCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoe1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICB0ZW5hbnQ6IGlucHV0LnRlbmFudElkLFxuICAgICAgICAgICAgb3JnVW5pdDogaW5wdXQub3JnVW5pdElkLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiBpbnB1dC5yZXNvdXJjZVR5cGUsXG4gICAgICAgICAgICByZXNvdXJjZUlkOiBpbnB1dC5yZXNvdXJjZUlkLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogaW5wdXQudmlzaWJpbGl0eSxcbiAgICAgICAgICAgIG93bmVyOiBpbnB1dC5vd25lclByaW5jaXBhbElkLFxuICAgICAgICAgICAgc2Vuc2l0aXZpdHk6IGlucHV0LnNlbnNpdGl2aXR5LFxuICAgICAgICAgICAgbWV0YWRhdGE6IGlucHV0Lm1ldGFkYXRhLFxuICAgICAgICB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0QnlEb21haW5SZXNvdXJjZSh0ZW5hbnRJZCwgcmVzb3VyY2VUeXBlLCByZXNvdXJjZUlkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maW5kKChyZXNvdXJjZSkgPT4gc2FtZVRlbmFudChyZXNvdXJjZS50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICAgICAgcmVzb3VyY2UucmVzb3VyY2VUeXBlID09PSByZXNvdXJjZVR5cGUgJiZcbiAgICAgICAgICAgIHJlc291cmNlLnJlc291cmNlSWQgPT09IHJlc291cmNlSWQpO1xuICAgIH1cbiAgICBhc3luYyBtb3ZlUmVzb3VyY2VUb09yZ1VuaXQocHJvdGVjdGVkUmVzb3VyY2VJZCwgb3JnVW5pdElkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShwcm90ZWN0ZWRSZXNvdXJjZUlkLCB7IG9yZ1VuaXQ6IG9yZ1VuaXRJZCB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgc2V0VmlzaWJpbGl0eShwcm90ZWN0ZWRSZXNvdXJjZUlkLCB2aXNpYmlsaXR5LCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShwcm90ZWN0ZWRSZXNvdXJjZUlkLCB7IHZpc2liaWxpdHkgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHRyYW5zZmVyT3duZXJzaGlwKHByb3RlY3RlZFJlc291cmNlSWQsIG93bmVyUHJpbmNpcGFsSWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKHByb3RlY3RlZFJlc291cmNlSWQsIHsgb3duZXI6IG93bmVyUHJpbmNpcGFsSWQgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RPcmdVbml0UmVzb3VyY2VzKG9yZ1VuaXRJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChyZXNvdXJjZSkgPT4gcmVsYXRpb25NYXRjaChyZXNvdXJjZS5vcmdVbml0LCBvcmdVbml0SWQpKTtcbiAgICB9XG4gICAgYXN5bmMgbGlzdFRlbmFudFJlc291cmNlcyh0ZW5hbnRJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChyZXNvdXJjZSkgPT4gc2FtZVRlbmFudChyZXNvdXJjZS50ZW5hbnQsIHRlbmFudElkKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFJlc291cmNlR3JhbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFJlc291cmNlR3JhbnQpO1xuICAgIH1cbiAgICBhc3luYyBncmFudFJlc291cmNlKGlucHV0LCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZSh7XG4gICAgICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgICAgIHRlbmFudDogaW5wdXQudGVuYW50SWQsXG4gICAgICAgICAgICByZXNvdXJjZTogaW5wdXQucmVzb3VyY2VJZCxcbiAgICAgICAgICAgIHByaW5jaXBhbDogaW5wdXQucHJpbmNpcGFsSWQsXG4gICAgICAgICAgICBwZXJtaXNzaW9uS2V5OiBpbnB1dC5wZXJtaXNzaW9uS2V5LFxuICAgICAgICAgICAgc3RhcnRzQXQ6IGlucHV0LnN0YXJ0c0F0LFxuICAgICAgICAgICAgZXhwaXJlc0F0OiBpbnB1dC5leHBpcmVzQXQsXG4gICAgICAgICAgICBjb25kaXRpb25zOiBpbnB1dC5jb25kaXRpb25zLFxuICAgICAgICAgICAgY3JlYXRlZEJ5OiBpbnB1dC5jcmVhdGVkQnlQcmluY2lwYWxJZCxcbiAgICAgICAgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHJldm9rZUdyYW50KGdyYW50SWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVCeUlkKGdyYW50SWQsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0UmVzb3VyY2VHcmFudHMocHJvdGVjdGVkUmVzb3VyY2VJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChncmFudCkgPT4gcmVsYXRpb25NYXRjaChncmFudC5yZXNvdXJjZSwgcHJvdGVjdGVkUmVzb3VyY2VJZCkpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0UHJpbmNpcGFsR3JhbnRzKHRlbmFudElkLCBwcmluY2lwYWxJZCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChncmFudCkgPT4gc2FtZVRlbmFudChncmFudC50ZW5hbnQsIHRlbmFudElkKSAmJiByZWxhdGlvbk1hdGNoKGdyYW50LnByaW5jaXBhbCwgcHJpbmNpcGFsSWQpKTtcbiAgICB9XG4gICAgYXN5bmMgaGFzR3JhbnQodGVuYW50SWQsIHByaW5jaXBhbElkLCBwcm90ZWN0ZWRSZXNvdXJjZUlkLCBwZXJtaXNzaW9uS2V5LCBhdCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdFByaW5jaXBhbEdyYW50cyh0ZW5hbnRJZCwgcHJpbmNpcGFsSWQsIC4uLmFyZ3MpKS5zb21lKChncmFudCkgPT4gcmVsYXRpb25NYXRjaChncmFudC5yZXNvdXJjZSwgcHJvdGVjdGVkUmVzb3VyY2VJZCkgJiZcbiAgICAgICAgICAgIGdyYW50LnBlcm1pc3Npb25LZXkgPT09IHBlcm1pc3Npb25LZXkgJiZcbiAgICAgICAgICAgICghZ3JhbnQuc3RhcnRzQXQgfHwgIWF0IHx8IGdyYW50LnN0YXJ0c0F0IDw9IGF0KSAmJlxuICAgICAgICAgICAgKCFncmFudC5leHBpcmVzQXQgfHwgIWF0IHx8IGdyYW50LmV4cGlyZXNBdCA+PSBhdCkpO1xuICAgIH1cbiAgICBhc3luYyBkZWxldGVBbGxGb3JSZXNvdXJjZShwcm90ZWN0ZWRSZXNvdXJjZUlkLCAuLi5hcmdzKSB7XG4gICAgICAgIGF3YWl0IGRlbGV0ZU1hbnlCeUlkKHRoaXMsIGF3YWl0IHRoaXMubGlzdFJlc291cmNlR3JhbnRzKHByb3RlY3RlZFJlc291cmNlSWQsIC4uLmFyZ3MpLCAuLi5hcmdzKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgUmVzb3VyY2VMaWZlY3ljbGVTZXJ2aWNlIHtcbiAgICBhc3luYyB1bnJlZ2lzdGVyUmVzb3VyY2UocHJvdGVjdGVkUmVzb3VyY2VJZCwgLi4uYXJncykge1xuICAgICAgICBhd2FpdCBuZXcgUmVzb3VyY2VHcmFudFNlcnZpY2UoKS5kZWxldGVBbGxGb3JSZXNvdXJjZShwcm90ZWN0ZWRSZXNvdXJjZUlkLCAuLi5hcmdzKTtcbiAgICAgICAgYXdhaXQgbmV3IFByb3RlY3RlZFJlc291cmNlU2VydmljZSgpLmRlbGV0ZUJ5SWQocHJvdGVjdGVkUmVzb3VyY2VJZCwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHJlc29sdmVSZXNvdXJjZVNjb3BlKHByb3RlY3RlZFJlc291cmNlSWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBhd2FpdCBuZXcgUHJvdGVjdGVkUmVzb3VyY2VTZXJ2aWNlKCkuZ2V0QnlJZChwcm90ZWN0ZWRSZXNvdXJjZUlkLCAuLi5hcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRlbmFudElkOiByZWxhdGlvbklkKHJlc291cmNlLnRlbmFudCksXG4gICAgICAgICAgICBvcmdVbml0SWQ6IHJlbGF0aW9uSWQocmVzb3VyY2Uub3JnVW5pdCksXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiByZXNvdXJjZS52aXNpYmlsaXR5LFxuICAgICAgICAgICAgb3duZXJQcmluY2lwYWxJZDogcmVzb3VyY2Uub3duZXIgPyByZWxhdGlvbklkKHJlc291cmNlLm93bmVyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgU3RvcmFnZUJpbmRpbmdTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFN0b3JhZ2VCaW5kaW5nKTtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlQmluZGluZyhpbnB1dCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoe1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICB0ZW5hbnQ6IGlucHV0LnRlbmFudElkLFxuICAgICAgICAgICAgc3RvcmFnZUtpbmQ6IGlucHV0LnN0b3JhZ2VLaW5kLFxuICAgICAgICAgICAgYmluZGluZ0tpbmQ6IGlucHV0LmJpbmRpbmdLaW5kLFxuICAgICAgICAgICAgYmluZGluZ0tleTogaW5wdXQuYmluZGluZ0tleSxcbiAgICAgICAgICAgIHJlZ2lvbjogaW5wdXQucmVnaW9uLFxuICAgICAgICAgICAgY29uZmlnOiBpbnB1dC5jb25maWcsXG4gICAgICAgIH0sIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0VGVuYW50QmluZGluZ3ModGVuYW50SWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigoYmluZGluZykgPT4gc2FtZVRlbmFudChiaW5kaW5nLnRlbmFudCwgdGVuYW50SWQpKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0QmluZGluZyh0ZW5hbnRJZCwgc3RvcmFnZUtpbmQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RUZW5hbnRCaW5kaW5ncyh0ZW5hbnRJZCwgLi4uYXJncykpLmZpbmQoKGJpbmRpbmcpID0+IGJpbmRpbmcuc3RvcmFnZUtpbmQgPT09IHN0b3JhZ2VLaW5kKTtcbiAgICB9XG4gICAgYXN5bmMgc2V0QmluZGluZ0NvbmZpZyhiaW5kaW5nSWQsIGNvbmZpZywgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUoYmluZGluZ0lkLCB7IGNvbmZpZyB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgcHJvbW90ZVRvRGVkaWNhdGVkKGJpbmRpbmdJZCwgYmluZGluZ0tleSwgcmVnaW9uLCBjb25maWcsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKGJpbmRpbmdJZCwgeyBiaW5kaW5nS2luZDogU3RvcmFnZUJpbmRpbmdLaW5kLkRlZGljYXRlZCwgYmluZGluZ0tleSwgcmVnaW9uLCBjb25maWcgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHNldFNoYXJlZChiaW5kaW5nSWQsIGJpbmRpbmdLZXksIHJlZ2lvbiwgY29uZmlnLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShiaW5kaW5nSWQsIHsgYmluZGluZ0tpbmQ6IFN0b3JhZ2VCaW5kaW5nS2luZC5TaGFyZWQsIGJpbmRpbmdLZXksIHJlZ2lvbiwgY29uZmlnIH0sIC4uLmFyZ3MpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBCb290c3RyYXBTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50ZW5hbnRTZXJ2aWNlID0gbmV3IFRlbmFudFNlcnZpY2UoKTtcbiAgICAgICAgdGhpcy50ZW5hbnRQcm9maWxlU2VydmljZSA9IG5ldyBUZW5hbnRQcm9maWxlU2VydmljZSgpO1xuICAgICAgICB0aGlzLm9yZ1VuaXRTZXJ2aWNlID0gbmV3IE9yZ1VuaXRTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMub3JnVW5pdFByb2ZpbGVTZXJ2aWNlID0gbmV3IE9yZ1VuaXRQcm9maWxlU2VydmljZSgpO1xuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlID0gbmV3IFVzZXJTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMubWVtYmVyc2hpcFNlcnZpY2UgPSBuZXcgVGVuYW50TWVtYmVyc2hpcFNlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5wcmluY2lwYWxTZXJ2aWNlID0gbmV3IFByaW5jaXBhbFNlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZSA9IG5ldyBQZXJtaXNzaW9uU2VydmljZSgpO1xuICAgICAgICB0aGlzLnJvbGVTZXJ2aWNlID0gbmV3IFJvbGVTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMucm9sZVBlcm1pc3Npb25TZXJ2aWNlID0gbmV3IFJvbGVQZXJtaXNzaW9uU2VydmljZSgpO1xuICAgICAgICB0aGlzLnJvbGVBc3NpZ25tZW50U2VydmljZSA9IG5ldyBSb2xlQXNzaWdubWVudFNlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5lZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZSA9IG5ldyBFZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZSgpO1xuICAgIH1cbiAgICBhc3luYyBib290c3RyYXBUZW5hbnRGcm9tVGVtcGxhdGUodGVtcGxhdGUsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgdGVuYW50ID0gYXdhaXQgdGhpcy50ZW5hbnRTZXJ2aWNlLmNyZWF0ZVRlbmFudCh0ZW1wbGF0ZS50ZW5hbnQsIC4uLmFyZ3MpO1xuICAgICAgICBpZiAodGVtcGxhdGUudGVuYW50LnByb2ZpbGVLZXkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudGVuYW50UHJvZmlsZVNlcnZpY2UuY3JlYXRlUHJvZmlsZSh0ZW5hbnQuaWQsIHRlbXBsYXRlLnRlbmFudC5wcm9maWxlS2V5LCB0ZW1wbGF0ZS50ZW5hbnQucHJvZmlsZU1ldGFkYXRhLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVhdGVPcmdUcmVlID0gYXN5bmMgKHBhcmVudElkLCBvcmdVbml0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkID0gcGFyZW50SWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gYXdhaXQgdGhpcy5vcmdVbml0U2VydmljZS5jcmVhdGVSb290KHRlbmFudC5pZCwgb3JnVW5pdC5uYW1lLCBvcmdVbml0Lm1ldGFkYXRhLCBvcmdVbml0LnByb2ZpbGVLZXksIG9yZ1VuaXQubWV0YWRhdGEsIC4uLmFyZ3MpXG4gICAgICAgICAgICAgICAgOiBhd2FpdCB0aGlzLm9yZ1VuaXRTZXJ2aWNlLmNyZWF0ZUNoaWxkKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQ6IHRlbmFudC5pZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50T3JnVW5pdElkOiBwYXJlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogb3JnVW5pdC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogb3JnVW5pdC5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcHJvZmlsZUtleTogb3JnVW5pdC5wcm9maWxlS2V5LFxuICAgICAgICAgICAgICAgICAgICBwcm9maWxlTWV0YWRhdGE6IG9yZ1VuaXQubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgfSwgLi4uYXJncyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG9yZ1VuaXQuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjcmVhdGVPcmdUcmVlKGNyZWF0ZWQuaWQsIGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByb290T3JnVW5pdCA9IGF3YWl0IGNyZWF0ZU9yZ1RyZWUodW5kZWZpbmVkLCB0ZW1wbGF0ZS5yb290T3JnVW5pdCk7XG4gICAgICAgIGNvbnN0IG93bmVyID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS5jcmVhdGVVc2VyKHRlbXBsYXRlLm93bmVyVXNlciwgLi4uYXJncyk7XG4gICAgICAgIGF3YWl0IHRoaXMubWVtYmVyc2hpcFNlcnZpY2UuYWRkVXNlclRvVGVuYW50KHRlbmFudC5pZCwgb3duZXIuaWQsIE1lbWJlcnNoaXBTdGF0dXMuQWN0aXZlLCAuLi5hcmdzKTtcbiAgICAgICAgY29uc3Qgb3duZXJQcmluY2lwYWwgPSBhd2FpdCB0aGlzLnByaW5jaXBhbFNlcnZpY2UuZ2V0VXNlclByaW5jaXBhbCh0ZW5hbnQuaWQsIG93bmVyLmlkLCAuLi5hcmdzKTtcbiAgICAgICAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIHRlbXBsYXRlLnBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmNyZWF0ZVBlcm1pc3Npb24ocGVybWlzc2lvbiwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByb2xlIG9mIHRlbXBsYXRlLnJvbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUm9sZSA9IGF3YWl0IHRoaXMucm9sZVNlcnZpY2UuY3JlYXRlUm9sZSh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQ6IHRlbmFudC5pZCxcbiAgICAgICAgICAgICAgICBrZXk6IHJvbGUua2V5LFxuICAgICAgICAgICAgICAgIG5hbWU6IHJvbGUubmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcm9sZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIH0sIC4uLmFyZ3MpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwZXJtaXNzaW9uS2V5IG9mIHJvbGUucGVybWlzc2lvbktleXMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJvbGVQZXJtaXNzaW9uU2VydmljZS5hZGRQZXJtaXNzaW9uS2V5VG9Sb2xlKGNyZWF0ZWRSb2xlLmlkLCBwZXJtaXNzaW9uS2V5LCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvd25lclJvbGUgPSBhd2FpdCB0aGlzLnJvbGVTZXJ2aWNlLmdldFRlbmFudFJvbGVCeUtleSh0ZW5hbnQuaWQsIHRlbXBsYXRlLm93bmVyUm9sZUtleSwgLi4uYXJncyk7XG4gICAgICAgIGF3YWl0IHRoaXMucm9sZUFzc2lnbm1lbnRTZXJ2aWNlLmFzc2lnblJvbGUoe1xuICAgICAgICAgICAgdGVuYW50SWQ6IHRlbmFudC5pZCxcbiAgICAgICAgICAgIHByaW5jaXBhbElkOiBvd25lclByaW5jaXBhbC5pZCxcbiAgICAgICAgICAgIHJvbGVJZDogb3duZXJSb2xlLmlkLFxuICAgICAgICAgICAgc2NvcGVLaW5kOiBTY29wZUtpbmQuT3JnVW5pdCxcbiAgICAgICAgICAgIHNjb3BlSWQ6IHJvb3RPcmdVbml0LmlkLFxuICAgICAgICAgICAgaW5oZXJpdERvd246IHRydWUsXG4gICAgICAgIH0sIC4uLmFyZ3MpO1xuICAgICAgICBhd2FpdCB0aGlzLmVmZmVjdGl2ZVBlcm1pc3Npb25TZXJ2aWNlLnJlYnVpbGRGb3JQcmluY2lwYWwodGVuYW50LmlkLCBvd25lclByaW5jaXBhbC5pZCwgLi4uYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZW5hbnRJZDogdGVuYW50LmlkLFxuICAgICAgICAgICAgcm9vdE9yZ1VuaXRJZDogcm9vdE9yZ1VuaXQuaWQsXG4gICAgICAgICAgICBvd25lclVzZXJJZDogb3duZXIuaWQsXG4gICAgICAgICAgICBvd25lclByaW5jaXBhbElkOiBvd25lclByaW5jaXBhbC5pZCxcbiAgICAgICAgfTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICB0cmFuc2FjdGlvbmFsKCksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdCwgT2JqZWN0XSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIFByb21pc2UpXG5dLCBCb290c3RyYXBTZXJ2aWNlLnByb3RvdHlwZSwgXCJib290c3RyYXBUZW5hbnRGcm9tVGVtcGxhdGVcIiwgbnVsbCk7XG5leHBvcnQgY2xhc3MgU3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1lbWJlcnNoaXBTZXJ2aWNlID0gbmV3IFRlbmFudE1lbWJlcnNoaXBTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMub3JnTWVtYmVyc2hpcFNlcnZpY2UgPSBuZXcgT3JnVW5pdE1lbWJlcnNoaXBTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMucHJpbmNpcGFsU2VydmljZSA9IG5ldyBQcmluY2lwYWxTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMucm9sZVNlcnZpY2UgPSBuZXcgUm9sZVNlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5yb2xlQXNzaWdubWVudFNlcnZpY2UgPSBuZXcgUm9sZUFzc2lnbm1lbnRTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuZWZmZWN0aXZlUGVybWlzc2lvblNlcnZpY2UgPSBuZXcgRWZmZWN0aXZlUGVybWlzc2lvblNlcnZpY2UoKTtcbiAgICB9XG4gICAgYXN5bmMgb25ib2FyZFVzZXJUb1RlbmFudEFuZE9yZ1VuaXQodGVuYW50SWQsIHVzZXJJZCwgb3JnVW5pdElkLCByb2xlS2V5LCAuLi5hcmdzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubWVtYmVyc2hpcFNlcnZpY2UuYWRkVXNlclRvVGVuYW50KHRlbmFudElkLCB1c2VySWQsIE1lbWJlcnNoaXBTdGF0dXMuQWN0aXZlLCAuLi5hcmdzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcmdNZW1iZXJzaGlwU2VydmljZS5hZGRVc2VyVG9PcmdVbml0KHRlbmFudElkLCBvcmdVbml0SWQsIHVzZXJJZCwgTWVtYmVyc2hpcFN0YXR1cy5BY3RpdmUsIC4uLmFyZ3MpO1xuICAgICAgICBjb25zdCBwcmluY2lwYWwgPSBhd2FpdCB0aGlzLnByaW5jaXBhbFNlcnZpY2UuZ2V0VXNlclByaW5jaXBhbCh0ZW5hbnRJZCwgdXNlcklkLCAuLi5hcmdzKTtcbiAgICAgICAgY29uc3Qgcm9sZSA9IGF3YWl0IHRoaXMucm9sZVNlcnZpY2UuZ2V0VGVuYW50Um9sZUJ5S2V5KHRlbmFudElkLCByb2xlS2V5LCAuLi5hcmdzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5yb2xlQXNzaWdubWVudFNlcnZpY2UuYXNzaWduUm9sZSh7XG4gICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgIHByaW5jaXBhbElkOiBwcmluY2lwYWwuaWQsXG4gICAgICAgICAgICByb2xlSWQ6IHJvbGUuaWQsXG4gICAgICAgICAgICBzY29wZUtpbmQ6IFNjb3BlS2luZC5PcmdVbml0LFxuICAgICAgICAgICAgc2NvcGVJZDogb3JnVW5pdElkLFxuICAgICAgICAgICAgaW5oZXJpdERvd246IHRydWUsXG4gICAgICAgIH0sIC4uLmFyZ3MpO1xuICAgICAgICBhd2FpdCB0aGlzLmVmZmVjdGl2ZVBlcm1pc3Npb25TZXJ2aWNlLnJlYnVpbGRGb3JQcmluY2lwYWwodGVuYW50SWQsIHByaW5jaXBhbC5pZCwgLi4uYXJncyk7XG4gICAgICAgIHJldHVybiB7IHByaW5jaXBhbElkOiBwcmluY2lwYWwuaWQgfTtcbiAgICB9XG4gICAgYXN5bmMgY2hhbmdlVXNlck9yZ1JvbGUodGVuYW50SWQsIHByaW5jaXBhbElkLCBvcmdVbml0SWQsIHJvbGVLZXksIGluaGVyaXREb3duLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHJvbGUgPSBhd2FpdCB0aGlzLnJvbGVTZXJ2aWNlLmdldFRlbmFudFJvbGVCeUtleSh0ZW5hbnRJZCwgcm9sZUtleSwgLi4uYXJncyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBc3NpZ25tZW50cyA9IGF3YWl0IHRoaXMucm9sZUFzc2lnbm1lbnRTZXJ2aWNlLmxpc3RQcmluY2lwYWxBc3NpZ25tZW50cyh0ZW5hbnRJZCwgcHJpbmNpcGFsSWQsIC4uLmFyZ3MpO1xuICAgICAgICBmb3IgKGNvbnN0IGFzc2lnbm1lbnQgb2YgY3VycmVudEFzc2lnbm1lbnRzLmZpbHRlcigocm93KSA9PiByb3cuc2NvcGVLaW5kID09PSBTY29wZUtpbmQuT3JnVW5pdCAmJiByb3cuc2NvcGVJZCA9PT0gb3JnVW5pdElkKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yb2xlQXNzaWdubWVudFNlcnZpY2UucmV2b2tlQXNzaWdubWVudChhc3NpZ25tZW50LmlkLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJvbGVBc3NpZ25tZW50U2VydmljZS5hc3NpZ25Sb2xlKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJpbmNpcGFsSWQsXG4gICAgICAgICAgICByb2xlSWQ6IHJvbGUuaWQsXG4gICAgICAgICAgICBzY29wZUtpbmQ6IFNjb3BlS2luZC5PcmdVbml0LFxuICAgICAgICAgICAgc2NvcGVJZDogb3JnVW5pdElkLFxuICAgICAgICAgICAgaW5oZXJpdERvd24sXG4gICAgICAgIH0sIC4uLmFyZ3MpO1xuICAgICAgICBhd2FpdCB0aGlzLmVmZmVjdGl2ZVBlcm1pc3Npb25TZXJ2aWNlLnJlYnVpbGRGb3JQcmluY2lwYWwodGVuYW50SWQsIHByaW5jaXBhbElkLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgc3VzcGVuZFVzZXJJblRlbmFudCh0ZW5hbnRNZW1iZXJzaGlwSWQsIHRlbmFudElkLCBwcmluY2lwYWxJZCwgLi4uYXJncykge1xuICAgICAgICBhd2FpdCB0aGlzLm1lbWJlcnNoaXBTZXJ2aWNlLnNldFN0YXR1cyh0ZW5hbnRNZW1iZXJzaGlwSWQsIE1lbWJlcnNoaXBTdGF0dXMuU3VzcGVuZGVkLCAuLi5hcmdzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5lZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZS5kZWxldGVGb3JQcmluY2lwYWwodGVuYW50SWQsIHByaW5jaXBhbElkLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhY3RpdmF0ZVVzZXJJblRlbmFudCh0ZW5hbnRNZW1iZXJzaGlwSWQsIHRlbmFudElkLCBwcmluY2lwYWxJZCwgLi4uYXJncykge1xuICAgICAgICBhd2FpdCB0aGlzLm1lbWJlcnNoaXBTZXJ2aWNlLnNldFN0YXR1cyh0ZW5hbnRNZW1iZXJzaGlwSWQsIE1lbWJlcnNoaXBTdGF0dXMuQWN0aXZlLCAuLi5hcmdzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5lZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZS5yZWJ1aWxkRm9yUHJpbmNpcGFsKHRlbmFudElkLCBwcmluY2lwYWxJZCwgLi4uYXJncyk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgdHJhbnNhY3Rpb25hbCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtTdHJpbmcsIFN0cmluZywgU3RyaW5nLCBTdHJpbmcsIE9iamVjdF0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCBQcm9taXNlKVxuXSwgU3lzdGVtTWFuYWdlbWVudFNlcnZpY2UucHJvdG90eXBlLCBcIm9uYm9hcmRVc2VyVG9UZW5hbnRBbmRPcmdVbml0XCIsIG51bGwpO1xuX19kZWNvcmF0ZShbXG4gICAgdHJhbnNhY3Rpb25hbCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtTdHJpbmcsIFN0cmluZywgU3RyaW5nLCBTdHJpbmcsIEJvb2xlYW4sIE9iamVjdF0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCBQcm9taXNlKVxuXSwgU3lzdGVtTWFuYWdlbWVudFNlcnZpY2UucHJvdG90eXBlLCBcImNoYW5nZVVzZXJPcmdSb2xlXCIsIG51bGwpO1xuX19kZWNvcmF0ZShbXG4gICAgdHJhbnNhY3Rpb25hbCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtTdHJpbmcsIFN0cmluZywgU3RyaW5nLCBPYmplY3RdKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnJldHVybnR5cGVcIiwgUHJvbWlzZSlcbl0sIFN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnByb3RvdHlwZSwgXCJzdXNwZW5kVXNlckluVGVuYW50XCIsIG51bGwpO1xuX19kZWNvcmF0ZShbXG4gICAgdHJhbnNhY3Rpb25hbCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtTdHJpbmcsIFN0cmluZywgU3RyaW5nLCBPYmplY3RdKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnJldHVybnR5cGVcIiwgUHJvbWlzZSlcbl0sIFN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnByb3RvdHlwZSwgXCJyZWFjdGl2YXRlVXNlckluVGVuYW50XCIsIG51bGwpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYjNKbkxXSmhjMlZrTFdGMWRHaHZjbWw2WVhScGIyNHRjM2x6ZEdWdExuTmxjblpwWTJWekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZMaTR2YzNKakwyNWhiV1Z6Y0dGalpYTXZiM0puTFdKaGMyVmtMV0YxZEdodmNtbDZZWFJwYjI0dGMzbHpkR1Z0TG5ObGNuWnBZMlZ6TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3p0QlFVRkJMRTlCUVU4c1JVRkRUQ3huUWtGQlowSXNSVUZEYUVJc1lVRkJZU3hGUVVOaUxHZENRVUZuUWl4RlFVVm9RaXhoUVVGaExFVkJSV0lzVTBGQlV5eEZRVU5VTEd0Q1FVRnJRaXhGUVVWc1FpeEZRVUZGTEVWQlEwWXNWVUZCVlN4RlFVTldMR0ZCUVdFc1IwRkRaQ3cwUTBGQmVVTTdRVUZuUWpGRExFOUJRVThzUlVGRFRDeHRRa0ZCYlVJc1JVRkRia0lzUzBGQlN5eEZRVU5NTEdWQlFXVXNSVUZEWml4blFrRkJaMElzUlVGRGFFSXNUMEZCVHl4RlFVTlFMR05CUVdNc1JVRkRaQ3hwUWtGQmFVSXNSVUZEYWtJc1kwRkJZeXhGUVVOa0xGVkJRVlVzUlVGRFZpeHBRa0ZCYVVJc1JVRkRha0lzVTBGQlV5eEZRVU5VTEdGQlFXRXNSVUZEWWl4SlFVRkpMRVZCUTBvc1kwRkJZeXhGUVVOa0xHTkJRV01zUlVGRFpDeGpRVUZqTEVWQlEyUXNUVUZCVFN4RlFVTk9MR2RDUVVGblFpeEZRVU5vUWl4aFFVRmhMRVZCUTJJc1NVRkJTU3hIUVVOTUxFMUJRVTBzZVVOQlFYbERMRU5CUVVNN1FVRkZha1FzVFVGQlRTeE5RVUZOTEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF6dEJRVU5vUXl4TlFVRk5MRTlCUVU4c1IwRkJSeXhEUVVGSkxFdEJRWE5DTEVWQlFVOHNSVUZCUlN4RFFVRkRMRXRCUVVzc1NVRkJTU3hGUVVGRkxFTkJRVU03UVVGRGFFVXNUVUZCVFN4VlFVRlZMRWRCUVVjc1EwRkJReXhUUVVGclFpeEZRVUZGTEZGQlFXZENMRVZCUVZjc1JVRkJSU3hEUVVOdVJTeFZRVUZWTEVOQlFVTXNVMEZCYjBNc1EwRkJReXhMUVVGTExGRkJRVkVzUTBGQlF6dEJRVU5vUlN4TlFVRk5MR0ZCUVdFc1IwRkJSeXhEUVVOd1FpeExRVUZqTEVWQlEyUXNUVUZCTUVJc1JVRkRha0lzUlVGQlJTeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zUzBGQlowTXNRMEZCUXl4TFFVRkxMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEZWtZc1RVRkJUU3hUUVVGVExFZEJRVWNzUTBGQlF5eExRVUZoTEVWQlFWVXNSVUZCUlN4RFFVTXhReXhMUVVGTE8wdEJRMFlzU1VGQlNTeEZRVUZGTzB0QlEwNHNWMEZCVnl4RlFVRkZPMHRCUTJJc1QwRkJUeXhEUVVGRExHRkJRV0VzUlVGQlJTeEhRVUZITEVOQlFVTTdTMEZETTBJc1QwRkJUeXhEUVVGRExGVkJRVlVzUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNN1FVRkZka01zUzBGQlN5eFZRVUZWTEdOQlFXTXNRMEZETTBJc1QwRkJPRUlzUlVGRE9VSXNTVUZCTWtJc1JVRkRNMElzUjBGQlJ5eEpRVUZYTzBsQlJXUXNTMEZCU3l4TlFVRk5MRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU4yUWl4TlFVRk5MRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRelZETEVOQlFVTTdRVUZEU0N4RFFVRkRPMEZCUlVRc1RVRkJUU3hQUVVGUExHOUNRVUZ4UWl4VFFVRlJMR2RDUVVFclFqdEpRVU4yUlR0UlFVTkZMRXRCUVVzc1EwRkJReXhoUVVGaExFTkJRVU1zUTBGQlF6dEpRVU4yUWl4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExHRkJRV0VzUTBGRGFrSXNVVUZCWjBJc1JVRkRhRUlzVlVGQmEwSXNSVUZEYkVJc1VVRkJhME1zUlVGRGJFTXNSMEZCUnl4SlFVRlhPMUZCUldRc1QwRkJUeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVU51UWp0WlFVTkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVU3V1VGRFVpeE5RVUZOTEVWQlFVVXNVVUZCVVR0WlFVTm9RaXhWUVVGVk8xbEJRMVlzVVVGQlVUdFRRVU5VTEVWQlEwUXNSMEZCUnl4SlFVRkpMRU5CUTFJc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNZVUZCWVN4RFFVRkRMRkZCUVdkQ0xFVkJRVVVzUjBGQlJ5eEpRVUZYTzFGQlEyeEVMRTlCUVU4c1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRU5CUTNSRUxHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZMRkZCUVZFc1EwRkJReXhEUVVONFF5eERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU1zVVVGQlowSXNSVUZCUlN4SFFVRkhMRWxCUVZjN1VVRkRjRVFzVFVGQlRTeGpRVUZqTEVOQlFVTXNTVUZCU1N4RlFVRkZMRTFCUVUwc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEyNUdMRU5CUVVNN1EwRkRSanRCUVVWRUxFMUJRVTBzVDBGQlR5eHhRa0ZCYzBJc1UwRkJVU3huUWtGQlowTTdTVUZEZWtVN1VVRkRSU3hMUVVGTExFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTTdTVUZEZUVJc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eGhRVUZoTEVOQlEycENMRk5CUVdsQ0xFVkJRMnBDTEZWQlFXdENMRVZCUTJ4Q0xGRkJRV3RETEVWQlEyeERMRWRCUVVjc1NVRkJWenRSUVVWa0xFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZEYmtJN1dVRkRSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTzFsQlExSXNUMEZCVHl4RlFVRkZMRk5CUVZNN1dVRkRiRUlzVlVGQlZUdFpRVU5XTEZGQlFWRTdVMEZEVkN4RlFVTkVMRWRCUVVjc1NVRkJTU3hEUVVOU0xFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMR05CUVdNc1EwRkJReXhUUVVGcFFpeEZRVUZGTEVkQlFVY3NTVUZCVnp0UlFVTndSQ3hQUVVGUExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSU3hEUVVOMFJDeGhRVUZoTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGRE1VTXNRMEZCUXp0SlFVTktMRU5CUVVNN1EwRkRSanRCUVVWRUxFMUJRVTBzVDBGQlR5eHhRa0ZCYzBJc1UwRkJVU3huUWtGQlowTTdTVUZEZWtVN1VVRkRSU3hMUVVGTExFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTTdTVUZEZUVJc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eGhRVUZoTEVOQlEycENMRkZCUVdkQ0xFVkJRMmhDTEZOQlFXbENMRVZCUTJwQ0xFZEJRVWNzU1VGQlZ6dFJRVVZrTEU5QlFVOHNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0aFFVTnFReXhOUVVGTkxFTkJRMHdzUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVTk9MRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeEZRVUZGTEZGQlFWRXNRMEZCUXp0WlFVTm9ReXhoUVVGaExFTkJRVU1zUjBGQlJ5eERRVUZETEZWQlFWVXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkRNME03WVVGRFFTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1MwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEpRVU55UkN4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGRGJrSXNVVUZCWjBJc1JVRkRhRUlzVTBGQmFVSXNSVUZEYWtJc1IwRkJSeXhKUVVGWE8xRkJSV1FzVDBGQlR5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzJGQlEycERMRTFCUVUwc1EwRkRUQ3hEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlEwNHNWVUZCVlN4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFVkJRVVVzVVVGQlVTeERRVUZETzFsQlEyaERMR0ZCUVdFc1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVTjZRenRoUVVOQkxFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4TFFVRkxMRVZCUVVVc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wbEJRM0pFTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVOb1FpeFJRVUZuUWl4RlFVTm9RaXhwUWtGQmVVSXNSVUZEZWtJc2JVSkJRVEpDTEVWQlF6TkNMRWRCUVVjc1NVRkJWenRSUVVWa0xFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1VVRkJVU3hGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlF6VkZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1JVRkJSU3hwUWtGQmFVSXNRMEZCUXl4RFFVTjRSQ3hEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4alFVRmpMRU5CUTJ4Q0xGRkJRV2RDTEVWQlEyaENMRk5CUVdsQ0xFVkJRMnBDTEVkQlFVY3NTVUZCVnp0UlFVVmtMRTlCUVU4c1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGRGJrSTdXVUZEUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRk8xbEJRMUlzVFVGQlRTeEZRVUZGTEZGQlFWRTdXVUZEYUVJc1VVRkJVU3hGUVVGRkxGTkJRVk03V1VGRGJrSXNWVUZCVlN4RlFVRkZMRk5CUVZNN1dVRkRja0lzUzBGQlN5eEZRVUZGTEVOQlFVTTdVMEZEVkN4RlFVTkVMRWRCUVVjc1NVRkJTU3hEUVVOU0xFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRGhDUVVFNFFpeERRVU5zUXl4UlFVRm5RaXhGUVVOb1FpeGxRVUYxUWl4RlFVTjJRaXhqUVVGelFpeEZRVU4wUWl4SFFVRkhMRWxCUVZjN1VVRkZaQ3hOUVVGTkxHRkJRV0VzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1VVRkJVU3hGUVVGRkxHVkJRV1VzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTI1R0xFMUJRVTBzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZEWml4aFFVRmhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZEZWtJc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGRFdqdFpRVU5GTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVN1dVRkRVaXhOUVVGTkxFVkJRVVVzVVVGQlVUdFpRVU5vUWl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkU3V1VGRGRrSXNWVUZCVlN4RlFVRkZMR05CUVdNN1dVRkRNVUlzUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJRenRUUVVOMFFpeEZRVU5FTEVkQlFVY3NTVUZCU1N4RFFVTlNMRU5CUTBZc1EwRkRSaXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4eFFrRkJjVUlzUTBGRGVrSXNVVUZCWjBJc1JVRkRhRUlzVTBGQmFVSXNSVUZEYWtJc1IwRkJSeXhKUVVGWE8xRkJSV1FzVFVGQlRTeFBRVUZQTEVkQlFVY3NUVUZCVFN4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExGRkJRVkVzUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVONlJTeE5RVUZOTEdGQlFXRXNSMEZCUnl4SlFVRkpMRWRCUVVjc1EwRkJRenRaUVVNMVFpeFRRVUZUTzFsQlExUXNSMEZCUnl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzFOQlEzQkVMRU5CUVVNc1EwRkJRenRSUVVOSUxFMUJRVTBzVjBGQlZ5eEhRVUZITEVsQlFVa3NSMEZCUnl4RFFVRkRPMWxCUXpGQ0xGTkJRVk03V1VGRFZDeEhRVUZITEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03VTBGRGJFUXNRMEZCUXl4RFFVRkRPMUZCUTBnc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZETDBNc1EwRkJReXhIUVVGSExFVkJRVVVzUlVGQlJTeERRVU5PTEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRkxGRkJRVkVzUTBGQlF6dFpRVU5vUXl4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRuUWtGRE5VTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkRMME1zUTBGQlF6dFJRVU5HTEUxQlFVMHNZMEZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTTFReXhEUVVGRE8wTkJRMFk3UVVGRlJDeE5RVUZOTEU5QlFVOHNkVUpCUVhkQ0xGTkJRVkVzWjBKQlFXdERPMGxCUXpkRk8xRkJRMFVzUzBGQlN5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU03U1VGRE1VSXNRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhoUVVGaExFTkJRMnBDTEZGQlFXZENMRVZCUTJoQ0xGTkJRV2xDTEVWQlEycENMR3RDUVVGelF5eEZRVU4wUXl4eFFrRkJPRUlzUlVGRE9VSXNUVUZCWlN4RlFVTm1MRWRCUVVjc1NVRkJWenRSUVVWa0xFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZEYmtJN1dVRkRSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTzFsQlExSXNUVUZCVFN4RlFVRkZMRkZCUVZFN1dVRkRhRUlzVDBGQlR5eEZRVUZGTEZOQlFWTTdXVUZEYkVJc2JVSkJRVzFDTEVWQlFVVXNjVUpCUVhGQ08xbEJRekZETEd0Q1FVRnJRanRaUVVOc1FpeE5RVUZOTzFOQlExQXNSVUZEUkN4SFFVRkhMRWxCUVVrc1EwRkRVaXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1QwRkJaU3hGUVVGRkxFZEJRVWNzU1VGQlZ6dFJRVU51UkN4TlFVRk5MRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkRNVU1zUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4alFVRmpMRU5CUTJ4Q0xGRkJRV2RDTEVWQlEyaENMRk5CUVdsQ0xFVkJRMnBDTEVkQlFVY3NTVUZCVnp0UlFVVmtMRTlCUVU4c1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGRGVrTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1JVRkJSU3hEUVVOU0xGVkJRVlVzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRkZCUVZFc1EwRkJReXhKUVVGSkxHRkJRV0VzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVOb1JpeERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXd3UWtGQk1FSXNRMEZET1VJc1VVRkJaMElzUlVGRGFFSXNVMEZCYVVJc1JVRkRha0lzYVVKQlFYbENMRVZCUTNwQ0xGRkJRVFJDTEVWQlF6VkNMRWRCUVVjc1NVRkJWenRSUVVWa0xFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1VVRkJVU3hGUVVGRkxGTkJRVk1zUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVOdVJTeERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRU5CUTFJc1MwRkJTeXhEUVVGRExHdENRVUZyUWl4TFFVRkxMRkZCUVZFN1dVRkRja01zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4dFFrRkJiVUk3WjBKQlEzcENMR0ZCUVdFc1EwRkJReXhMUVVGTExFTkJRVU1zYlVKQlFXMUNMRVZCUVVVc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXl4RFFVTnFSU3hEUVVGRE8wbEJRMG9zUTBGQlF6dERRVU5HTzBGQlJVUXNUVUZCVFN4UFFVRlBMR0ZCUVdNc1UwRkJVU3huUWtGQmQwSTdTVUZEZWtRN1VVRkRSU3hMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZEYUVJc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eFpRVUZaTEVOQlFVTXNTMEZCZDBJc1JVRkJSU3hIUVVGSExFbEJRVmM3VVVGRGVrUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVOdVFqdFpRVU5GTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVN1dVRkRVaXhKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVazdXVUZEYUVJc1NVRkJTU3hGUVVGRkxFdEJRVXNzUTBGQlF5eEpRVUZKTzFsQlEyaENMR0ZCUVdFc1JVRkJSU3hMUVVGTExFTkJRVU1zWVVGQllTeEpRVUZKTEdGQlFXRXNRMEZCUXl4TlFVRk5PMU5CUXpORUxFVkJRMFFzUjBGQlJ5eEpRVUZKTEVOQlExSXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFWa3NSVUZCUlN4SFFVRkhMRWxCUVZjN1VVRkRNVU1zVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGaExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTjRSQ3hEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRm5RaXhGUVVGRkxFbEJRVmtzUlVGQlJTeEhRVUZITEVsQlFWYzdVVUZETDBRc1QwRkJUeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEY2tRc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eFZRVUZWTEVOQlFVTXNVVUZCWjBJc1JVRkJSU3hKUVVGWkxFVkJRVVVzUjBGQlJ5eEpRVUZYTzFGQlF6ZEVMRTlCUVU4c1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eFJRVUZSTEVWQlFVVXNSVUZCUlN4SlFVRkpMRVZCUVVVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEzSkVMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zWjBKQlFXZENMRU5CUTNCQ0xGRkJRV2RDTEVWQlEyaENMR0ZCUVRSQ0xFVkJRelZDTEVkQlFVY3NTVUZCVnp0UlFVVmtMRTlCUVU4c1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eFJRVUZSTEVWQlFVVXNSVUZCUlN4aFFVRmhMRVZCUVVVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlF6bEVMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1VVRkJaMElzUlVGQlJTeEhRVUZITEVsQlFWYzdVVUZETTBRc1RVRkJUU3hKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEZGQlFWRXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRek5ETEVOQlFVTTdRMEZEUmp0QlFVVkVMRTFCUVUwc1QwRkJUeXhqUVVGbExGTkJRVkVzWjBKQlFYbENPMGxCUXpORU8xRkJRMFVzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMGxCUTJwQ0xFTkJRVU03U1VGRlR5eFhRVUZYTEVOQlFVTXNWVUZCT0VJc1JVRkJSU3hKUVVGWk8xRkJRemxFTEUxQlFVMHNUMEZCVHl4SFFVRkhMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU5vUXl4UFFVRlBMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU55Uml4RFFVRkRPMGxCUlU4c1MwRkJTeXhEUVVGRExIRkNRVUZ4UWl4RFFVTnFReXhUUVVGcFFpeEZRVU5xUWl4VlFVRTRRaXhGUVVNNVFpeGxRVUZ2UkN4RlFVTndSQ3hIUVVGSExFbEJRVmM3VVVGRlpDeEpRVUZKTEVOQlFVTXNWVUZCVlR0WlFVRkZMRTlCUVU4N1VVRkRlRUlzVFVGQlRTeGpRVUZqTEVkQlFVY3NTVUZCU1N4eFFrRkJjVUlzUlVGQlJTeERRVUZETzFGQlEyNUVMRTFCUVUwc1kwRkJZeXhEUVVGRExHRkJRV0VzUTBGQlF5eFRRVUZUTEVWQlFVVXNWVUZCVlN4RlFVRkZMR1ZCUVdVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEzUkdMRU5CUVVNN1NVRkhTeXhCUVVGT0xFdEJRVXNzUTBGQlF5eFZRVUZWTEVOQlEyUXNVVUZCWjBJc1JVRkRhRUlzU1VGQldTeEZRVU5hTEZGQlFXdERMRVZCUTJ4RExGVkJRVzFDTEVWQlEyNUNMR1ZCUVhsRExFVkJRM3BETEVkQlFVY3NTVUZCVnp0UlFVVmtMRTFCUVUwc1QwRkJUeXhIUVVGSExFMUJRVTBzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZEYkVNN1dVRkRSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTzFsQlExSXNUVUZCVFN4RlFVRkZMRkZCUVZFN1dVRkRhRUlzU1VGQlNUdFpRVU5LTEVsQlFVa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExGTkJRVk1zUlVGQlJTeEpRVUZKTEVOQlFVTTdXVUZEZGtNc1VVRkJVVHRUUVVOVUxFVkJRMFFzUjBGQlJ5eEpRVUZKTEVOQlExSXNRMEZCUXp0UlFVTkdMRTFCUVUwc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFVkJRVVVzVlVGQlZTeEZRVUZGTEdWQlFXVXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMjVHTEUxQlFVMHNZMEZCWXl4SFFVRkhMRWxCUVVrc2NVSkJRWEZDTEVWQlFVVXNRMEZCUXp0UlFVTnVSQ3hOUVVGTkxHTkJRV01zUTBGQlF5eGpRVUZqTEVOQlFVTXNVVUZCVVN4RlFVRkZMRTlCUVU4c1EwRkJReXhGUVVGRkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTnVSU3hQUVVGUExFOUJRVThzUTBGQlF6dEpRVU5xUWl4RFFVRkRPMGxCUjBzc1FVRkJUaXhMUVVGTExFTkJRVU1zVjBGQlZ5eERRVUZETEV0QlFYbENMRVZCUVVVc1IwRkJSeXhKUVVGWE8xRkJRM3BFTEUxQlFVMHNUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJReXhsUVVGbE8xbEJRMnhETEVOQlFVTXNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEdWQlFXVXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJRenRaUVVOd1JDeERRVUZETEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTJRc1RVRkJUU3hQUVVGUExFZEJRVWNzVFVGQlRTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVTnNRenRaUVVORkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVTdXVUZEVWl4TlFVRk5MRVZCUVVVc1MwRkJTeXhEUVVGRExGRkJRVkU3V1VGRGRFSXNUVUZCVFN4RlFVRkZMRTFCUVUwc1JVRkJSU3hGUVVGRkxFbEJRVWtzUzBGQlN5eERRVUZETEdWQlFXVTdXVUZETTBNc1NVRkJTU3hGUVVGRkxFdEJRVXNzUTBGQlF5eEpRVUZKTzFsQlEyaENMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF6dFpRVU5vUkN4UlFVRlJMRVZCUVVVc1MwRkJTeXhEUVVGRExGRkJRVkU3VTBGRGVrSXNSVUZEUkN4SFFVRkhMRWxCUVVrc1EwRkRVaXhEUVVGRE8xRkJRMFlzVFVGQlRTeEpRVUZKTEVOQlFVTXNjVUpCUVhGQ0xFTkJRemxDTEU5QlFVOHNRMEZCUXl4RlFVRkZMRVZCUTFZc1MwRkJTeXhEUVVGRExGVkJRVlVzUlVGRGFFSXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1JVRkRja0lzUjBGQlJ5eEpRVUZKTEVOQlExSXNRMEZCUXp0UlFVTkdMRTFCUVUwc1kwRkJZeXhIUVVGSExFbEJRVWtzY1VKQlFYRkNMRVZCUVVVc1EwRkJRenRSUVVOdVJDeE5RVUZOTEdOQlFXTXNRMEZCUXl4alFVRmpMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUlVGQlJTeFBRVUZQTEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRGVrVXNTVUZCU1N4TFFVRkxMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03V1VGRE1VSXNUVUZCVFN4alFVRmpMRU5CUVVNc09FSkJRVGhDTEVOQlEycEVMRXRCUVVzc1EwRkJReXhSUVVGUkxFVkJRMlFzUzBGQlN5eERRVUZETEdWQlFXVXNSVUZEY2tJc1QwRkJUeXhEUVVGRExFVkJRVVVzUlVGRFZpeEhRVUZITEVsQlFVa3NRMEZEVWl4RFFVRkRPMUZCUTBvc1EwRkJRenRSUVVORUxFOUJRVThzVDBGQlR5eERRVUZETzBsQlEycENMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEdWQlFYVkNMRVZCUVVVc1IwRkJSeXhKUVVGWE8xRkJRM2hFTEU5QlFVOHNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEVOQlEzUkVMR0ZCUVdFc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZGTEdWQlFXVXNRMEZCUXl4RFFVTXZReXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eFJRVUZuUWl4RlFVRkZMRWRCUVVjc1NVRkJWenRSUVVOMlJDeFBRVUZQTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeERRVU4wUkN4VlFVRlZMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeFJRVUZSTEVOQlFVTXNRMEZEY2tNc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNjMEpCUVhOQ0xFTkJRekZDTEZGQlFXZENMRVZCUTJoQ0xGTkJRV2xDTEVWQlEycENMRmRCUVZjc1IwRkJSeXhMUVVGTExFVkJRMjVDTEVkQlFVY3NTVUZCVnp0UlFVVmtMRTFCUVUwc1kwRkJZeXhIUVVGSExFbEJRVWtzY1VKQlFYRkNMRVZCUVVVc1EwRkJRenRSUVVOdVJDeE5RVUZOTEZkQlFWY3NSMEZCUnl4TlFVRk5MR05CUVdNc1EwRkJReXhsUVVGbExFTkJRVU1zVVVGQlVTeEZRVUZGTEZOQlFWTXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRM1pHTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1IwRkJSeXhEUVVGRExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRekZGTEVsQlFVa3NWMEZCVnp0WlFVRkZMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdVVUZEY0VNc1QwRkJUeXhEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGRkJRVkVzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zVDBGQlR5eEZRVUZGTEVWQlFVVXNRMEZETTBVc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUTNCQ0xFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRzlDUVVGdlFpeERRVU40UWl4UlFVRm5RaXhGUVVOb1FpeFRRVUZwUWl4RlFVTnFRaXhYUVVGWExFZEJRVWNzUzBGQlN5eEZRVU51UWl4SFFVRkhMRWxCUVZjN1VVRkZaQ3hOUVVGTkxHTkJRV01zUjBGQlJ5eEpRVUZKTEhGQ1FVRnhRaXhGUVVGRkxFTkJRVU03VVVGRGJrUXNUVUZCVFN4VFFVRlRMRWRCUVVjc1RVRkJUU3hqUVVGakxFTkJRVU1zWVVGQllTeERRVUZETEZGQlFWRXNSVUZCUlN4VFFVRlRMRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU51Uml4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFZEJRVWNzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU4wUlN4SlFVRkpMRmRCUVZjN1dVRkJSU3hIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNCRExFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRU5CUXpORkxFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVOd1FpeERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhoUVVGaExFTkJRVU1zVTBGQmFVSXNSVUZCUlN4SlFVRlpMRVZCUVVVc1IwRkJSeXhKUVVGWE8xRkJRMnBGTEUxQlFVMHNVVUZCVVN4SFFVRkhMRTFCUVUwc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVONFJDeFBRVUZQTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1UwRkJVeXhGUVVGRkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExGTkJRVk1zUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVU12Uml4TFFVRkxMRVZCUVVVc1QwRkJUeXhGUVVGRkxFVkJRVVU3V1VGRGFFSXNUMEZCVHl4RFFVRkRMRWxCUVVrc1IwRkJSeXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExGTkJRVk1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eFRRVUZUTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRka2NzVDBGQlR5eFBRVUZQTEVOQlFVTTdVVUZEYWtJc1EwRkJReXhEUVVOR0xFTkJRVU03U1VGRFNpeERRVUZETzBsQlIwc3NRVUZCVGl4TFFVRkxMRU5CUVVNc1YwRkJWeXhEUVVObUxGRkJRV2RDTEVWQlEyaENMRk5CUVdsQ0xFVkJRMnBDTEd0Q1FVRXdRaXhGUVVNeFFpeEhRVUZITEVsQlFWYzdVVUZGWkN4TlFVRk5MRk5CUVZNc1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNhMEpCUVd0Q0xFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTnNSU3hOUVVGTkxGRkJRVkVzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1UwRkJVeXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEZUVRc1RVRkJUU3hQUVVGUExFZEJRVWNzVFVGQlRTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVTnNReXhUUVVGVExFVkJRMVE3V1VGRFJTeE5RVUZOTEVWQlFVVXNVMEZCVXl4RFFVRkRMRVZCUVVVN1dVRkRjRUlzU1VGQlNTeEZRVUZGTEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUlVGQlJTeFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRPMU5CUTNSRUxFVkJRMFFzUjBGQlJ5eEpRVUZKTEVOQlExSXNRMEZCUXp0UlFVTkdMRTFCUVUwc1NVRkJTU3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEyNUVMRTlCUVU4c1QwRkJUeXhEUVVGRE8wbEJRMnBDTEVOQlFVTTdTVUZIU3l4QlFVRk9MRXRCUVVzc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4UlFVRm5RaXhGUVVGRkxFZEJRVWNzU1VGQlZ6dFJRVU42UkN4TlFVRk5MR05CUVdNc1IwRkJSeXhKUVVGSkxIRkNRVUZ4UWl4RlFVRkZMRU5CUVVNN1VVRkRia1FzVFVGQlRTeGhRVUZoTEVkQlFVY3NUVUZCVFN4alFVRmpMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZETlVRc1RVRkJUU3hqUVVGakxFTkJRMnhDTEdOQlFXTXNSVUZEWkN4aFFVRmhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUlVGQlJTeFJRVUZSTEVOQlFVTXNRMEZCUXl4RlFVTXZSQ3hIUVVGSExFbEJRVWtzUTBGRFVpeERRVUZETzFGQlJVWXNUVUZCVFN4UlFVRlJMRWRCUVVjc1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhSUVVGUkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVWQlFVVXNSVUZCUlR0WlFVTjJSaXhOUVVGTkxGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRE8xbEJRemxFTEUxQlFVMHNWVUZCVlN4SFFVRkhMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdXVUZEYUVVc1QwRkJUeXhUUVVGVExFZEJRVWNzVlVGQlZTeERRVUZETzFGQlEyaERMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVWdzUzBGQlN5eE5RVUZOTEU5QlFVOHNTVUZCU1N4UlFVRlJMRVZCUVVVc1EwRkJRenRaUVVNdlFpeE5RVUZOTEdOQlFXTXNRMEZCUXl4alFVRmpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFOUJRVThzUTBGQlF5eEZRVUZGTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVOdVJTeEpRVUZKTEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRuUWtGRGJrSXNUVUZCVFN4alFVRmpMRU5CUVVNc09FSkJRVGhDTEVOQlEycEVMRkZCUVZFc1JVRkRVaXhWUVVGVkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4RlFVTXhRaXhQUVVGUExFTkJRVU1zUlVGQlJTeEZRVU5XTEVkQlFVY3NTVUZCU1N4RFFVTlNMRU5CUVVNN1dVRkRTaXhEUVVGRE8xRkJRMGdzUTBGQlF6dEpRVU5JTEVOQlFVTTdTVUZIU3l4QlFVRk9MRXRCUVVzc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4UlFVRm5RaXhGUVVGRkxGTkJRV2xDTEVWQlFVVXNSMEZCUnl4SlFVRlhPMUZCUTNwRkxFMUJRVTBzWTBGQll5eEhRVUZITEVsQlFVa3NjVUpCUVhGQ0xFVkJRVVVzUTBGQlF6dFJRVU51UkN4TlFVRk5MRmRCUVZjc1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhSUVVGUkxFVkJRVVVzVTBGQlV5eEZRVUZGTEVsQlFVa3NSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRekZHTEUxQlFVMHNZVUZCWVN4SFFVRkhMRWxCUVVrc1IwRkJSeXhEUVVGRExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNoRkxFMUJRVTBzVVVGQlVTeEhRVUZITEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSU3hEUVVOeVJpeGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGRE9VSXNRMEZCUXp0UlFVTkdMRTFCUVUwc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeFJRVUZSTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVNNVF5eE5RVUZOTEdOQlFXTXNRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eFJRVUZSTEVWQlFVVXNVMEZCVXl4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRE0wVXNRMEZCUXp0RFFVTkdPMEZCTlV0UE8wbEJSRXdzWVVGQllTeEZRVUZGT3pzN08yZEVRWFZDWmp0QlFVZExPMGxCUkV3c1lVRkJZU3hGUVVGRk96czdPMmxFUVdsRFpqdEJRWFZFU3p0SlFVUk1MR0ZCUVdFc1JVRkJSVHM3T3p0cFJFRnRRbVk3UVVGSFN6dEpRVVJNTEdGQlFXRXNSVUZCUlRzN096c3dSRUV5UW1ZN1FVRkhTenRKUVVSTUxHRkJRV0VzUlVGQlJUczdPenQxUkVGVlpqdEJRVWRJTEUxQlFVMHNUMEZCVHl4WFFVRlpMRk5CUVZFc1owSkJRWE5DTzBsQlEzSkVPMUZCUTBVc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEyUXNRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhWUVVGVkxFTkJRVU1zUzBGQmMwSXNSVUZCUlN4SFFVRkhMRWxCUVZjN1VVRkRja1FzVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVTnVRanRaUVVORkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVTdXVUZEVWl4TFFVRkxMRVZCUVVVc1MwRkJTeXhEUVVGRExFdEJRVXM3V1VGRGJFSXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhMUVVGTE8xbEJRMnhDTEZkQlFWY3NSVUZCUlN4TFFVRkxMRU5CUVVNc1YwRkJWenRUUVVNdlFpeEZRVU5FTEVkQlFVY3NTVUZCU1N4RFFVTlNMRU5CUVVNN1NVRkRTaXhEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEZWQlFWVXNRMEZCUXl4TFFVRmhMRVZCUVVVc1IwRkJSeXhKUVVGWE8xRkJRelZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1MwRkJTeXhMUVVGTExFTkJRVk1zUTBGQlF6dEpRVU53Uml4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRTFCUVdNc1JVRkJSU3hYUVVGdFFpeEZRVUZGTEVkQlFVY3NTVUZCVnp0UlFVTjZSU3hQUVVGUExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1YwRkJWeXhGUVVGRkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXhSQ3hEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEZkQlFWY3NRMEZEWml4TlFVRmpMRVZCUTJRc1MwRkJlVUlzUlVGRGVrSXNSMEZCUnl4SlFVRlhPMUZCUldRc1QwRkJUeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEY0VRc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eFhRVUZYTEVOQlEyWXNUVUZCWXl4RlFVTmtMRXRCUVhsQ0xFVkJRM3BDTEVkQlFVY3NTVUZCVnp0UlFVVmtMRTlCUVU4c1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4TFFVRkxMRVZCUVVVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEzQkVMRU5CUVVNN1EwRkRSanRCUVVWRUxFMUJRVTBzVDBGQlR5eG5Ra0ZCYVVJc1UwRkJVU3huUWtGQk1rSTdTVUZETDBRN1VVRkRSU3hMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdTVUZEYmtJc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlEyNUNMRkZCUVdkQ0xFVkJRMmhDTEVsQlFXMUNMRVZCUTI1Q0xGTkJRV2xDTEVWQlEycENMRWRCUVVjc1NVRkJWenRSUVVWa0xFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZEYmtJN1dVRkRSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTzFsQlExSXNUVUZCVFN4RlFVRkZMRkZCUVZFN1dVRkRhRUlzU1VGQlNUdFpRVU5LTEZOQlFWTTdVMEZEVml4RlFVTkVMRWRCUVVjc1NVRkJTU3hEUVVOU0xFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMR0ZCUVdFc1EwRkRha0lzVVVGQlowSXNSVUZEYUVJc1NVRkJiVUlzUlVGRGJrSXNVMEZCYVVJc1JVRkRha0lzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUMEZCVHl4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVOMlF5eERRVUZETEZOQlFWTXNSVUZCUlN4RlFVRkZMRU5CUTFvc1ZVRkJWU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVWQlFVVXNVVUZCVVN4RFFVRkRPMWxCUTNSRExGTkJRVk1zUTBGQlF5eEpRVUZKTEV0QlFVc3NTVUZCU1R0WlFVTjJRaXhUUVVGVExFTkJRVU1zVTBGQlV5eExRVUZMTEZOQlFWTXNRMEZEY0VNc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNjVUpCUVhGQ0xFTkJRM3BDTEZGQlFXZENMRVZCUTJoQ0xFbEJRVzFDTEVWQlEyNUNMRk5CUVdsQ0xFVkJRMnBDTEVkQlFVY3NTVUZCVnp0UlFVVmtMRTlCUVU4c1EwRkRUQ3hEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hGUVVGRkxGTkJRVk1zUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXpsRUxFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkRMRkZCUVZFc1JVRkJSU3hKUVVGSkxFVkJRVVVzVTBGQlV5eEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkRha1VzUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNVVUZCWjBJc1JVRkJSU3hOUVVGakxFVkJRVVVzUjBGQlJ5eEpRVUZYTzFGQlEzSkZMRTlCUVU4c1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRkZCUVZFc1JVRkJSU3hoUVVGaExFTkJRVU1zU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMjVHTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNVVUZCWjBJc1JVRkJSU3hQUVVGbExFVkJRVVVzUjBGQlJ5eEpRVUZYTzFGQlEzWkZMRTlCUVU4c1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRkZCUVZFc1JVRkJSU3hoUVVGaExFTkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRM0pHTEVOQlFVTTdRMEZEUmp0QlFVVkVMRTFCUVUwc1QwRkJUeXgxUWtGQmQwSXNVMEZCVVN4blFrRkJhME03U1VGRE4wVTdVVUZEUlN4TFFVRkxMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXp0SlFVTXhRaXhEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEdWQlFXVXNRMEZEYmtJc1VVRkJaMElzUlVGRGFFSXNUVUZCWXl4RlFVTmtMRk5CUVRKQ0xHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1JVRkRiRVFzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVOdVFqdFpRVU5GTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVN1dVRkRVaXhOUVVGTkxFVkJRVVVzVVVGQlVUdFpRVU5vUWl4SlFVRkpMRVZCUVVVc1RVRkJUVHRaUVVOYUxFMUJRVTA3VTBGRFVDeEZRVU5FTEVkQlFVY3NTVUZCU1N4RFFVTlNMRU5CUVVNN1NVRkRTaXhEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEZOQlFWTXNRMEZEWWl4WlFVRnZRaXhGUVVOd1FpeE5RVUYzUWl4RlFVTjRRaXhIUVVGSExFbEJRVmM3VVVGRlpDeFBRVUZQTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1dVRkJXU3hGUVVGRkxFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNelJDeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhOUVVGakxFVkJRVVVzUjBGQlJ5eEpRVUZYTzFGQlEyeEVMRTlCUVU4c1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEZWQlFWVXNSVUZCUlN4RlFVRkZMRU5CUTNwRUxHRkJRV0VzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVOMlF5eERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU1zVVVGQlowSXNSVUZCUlN4SFFVRkhMRWxCUVZjN1VVRkRjRVFzVDBGQlR5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFVkJRVVVzUTBGRGVrUXNWVUZCVlN4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFVkJRVVVzVVVGQlVTeERRVUZETEVOQlEzaERMRU5CUVVNN1NVRkRTaXhEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExGbEJRVzlDTEVWQlFVVXNSMEZCUnl4SlFVRlhPMUZCUXpkRUxFMUJRVTBzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4WlFVRlpMRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU12UXl4RFFVRkRPME5CUTBZN1FVRkZSQ3hOUVVGTkxFOUJRVThzZDBKQlFYbENMRk5CUVZFc1owSkJRVzFETzBsQlF5OUZPMUZCUTBVc1MwRkJTeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN1NVRkRNMElzUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4blFrRkJaMElzUTBGRGNFSXNVVUZCWjBJc1JVRkRhRUlzVTBGQmFVSXNSVUZEYWtJc1RVRkJZeXhGUVVOa0xGTkJRVEpDTEdkQ1FVRm5RaXhEUVVGRExFMUJRVTBzUlVGRGJFUXNSMEZCUnl4SlFVRlhPMUZCUldRc1QwRkJUeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVU51UWp0WlFVTkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVU3V1VGRFVpeE5RVUZOTEVWQlFVVXNVVUZCVVR0WlFVTm9RaXhQUVVGUExFVkJRVVVzVTBGQlV6dFpRVU5zUWl4SlFVRkpMRVZCUVVVc1RVRkJUVHRaUVVOYUxFMUJRVTA3VTBGRFVDeEZRVU5FTEVkQlFVY3NTVUZCU1N4RFFVTlNMRU5CUVVNN1NVRkRTaXhEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEZOQlFWTXNRMEZEWWl4WlFVRnZRaXhGUVVOd1FpeE5RVUYzUWl4RlFVTjRRaXhIUVVGSExFbEJRVmM3VVVGRlpDeFBRVUZQTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1dVRkJXU3hGUVVGRkxFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNelJDeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFXTXNSVUZCUlN4SFFVRkhMRWxCUVZjN1VVRkRia1FzVDBGQlR5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFVkJRVVVzUTBGRGVrUXNZVUZCWVN4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlEzWkRMRU5CUVVNN1NVRkRTaXhEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExGTkJRV2xDTEVWQlFVVXNSMEZCUnl4SlFVRlhPMUZCUTNSRUxFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRM3BFTEdGQlFXRXNRMEZCUXl4VlFVRlZMRU5CUVVNc1QwRkJUeXhGUVVGRkxGTkJRVk1zUTBGQlF5eERRVU0zUXl4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhaUVVGdlFpeEZRVUZGTEVkQlFVY3NTVUZCVnp0UlFVTTVSQ3hOUVVGTkxFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNXVUZCV1N4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGREwwTXNRMEZCUXp0RFFVTkdPMEZCUlVRc1RVRkJUU3hQUVVGUExGbEJRV0VzVTBGQlVTeG5Ra0ZCZFVJN1NVRkRka1E3VVVGRFJTeExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1NVRkRaaXhEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEZkQlFWY3NRMEZEWml4UlFVRm5RaXhGUVVOb1FpeEpRVUZaTEVWQlExb3NVMEZCYTBJc1JVRkRiRUlzVVVGQmEwTXNSVUZEYkVNc1IwRkJSeXhKUVVGWE8xRkJSV1FzVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVTnVRanRaUVVORkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVTdXVUZEVWl4TlFVRk5MRVZCUVVVc1VVRkJVVHRaUVVOb1FpeFBRVUZQTEVWQlFVVXNVMEZCVXp0WlFVTnNRaXhKUVVGSk8xbEJRMG9zVVVGQlVUdFRRVU5VTEVWQlEwUXNSMEZCUnl4SlFVRkpMRU5CUTFJc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTlCUVdVc1JVRkJSU3hKUVVGWkxFVkJRVVVzUjBGQlJ5eEpRVUZYTzFGQlF6ZEVMRTlCUVU4c1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eFBRVUZQTEVWQlFVVXNSVUZCUlN4SlFVRkpMRVZCUVVVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEzQkVMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zYTBKQlFXdENMRU5CUTNSQ0xFOUJRV1VzUlVGRFppeFRRVUUyUWl4RlFVTTNRaXhIUVVGSExFbEJRVmM3VVVGRlpDeFBRVUZQTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFVkJRVVVzVDBGQlR5eEZRVUZGTEZOQlFWTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGJFVXNRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4UlFVRm5RaXhGUVVGRkxFZEJRVWNzU1VGQlZ6dFJRVU55UkN4UFFVRlBMRU5CUVVNc1RVRkJUU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkROMFlzUTBGQlF6dERRVU5HTzBGQlJVUXNUVUZCVFN4UFFVRlBMSE5DUVVGMVFpeFRRVUZSTEdkQ1FVRnBRenRKUVVNelJUdFJRVU5GTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJRenRKUVVONlFpeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRzFDUVVGdFFpeERRVU4yUWl4UlFVRm5RaXhGUVVOb1FpeFBRVUZsTEVWQlEyWXNWMEZCYlVJc1JVRkRia0lzVVVGQmEwTXNSVUZEYkVNc1IwRkJSeXhKUVVGWE8xRkJSV1FzVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVTnVRanRaUVVORkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVTdXVUZEVWl4TlFVRk5MRVZCUVVVc1VVRkJVVHRaUVVOb1FpeExRVUZMTEVWQlFVVXNUMEZCVHp0WlFVTmtMRk5CUVZNc1JVRkJSU3hYUVVGWE8xbEJRM1JDTEZGQlFWRTdVMEZEVkN4RlFVTkVMRWRCUVVjc1NVRkJTU3hEUVVOU0xFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMR2RDUVVGblFpeERRVUZETEU5QlFXVXNSVUZCUlN4SFFVRkhMRWxCUVZjN1VVRkRjRVFzVDBGQlR5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFVkJRVVVzUTBGRGVrUXNZVUZCWVN4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTExFVkJRVVVzVDBGQlR5eERRVUZETEVOQlEzcERMRU5CUVVNN1NVRkRTaXhEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEcxQ1FVRnRRaXhEUVVGRExGZEJRVzFDTEVWQlFVVXNSMEZCUnl4SlFVRlhPMUZCUXpORUxFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRM3BFTEdGQlFXRXNRMEZCUXl4VlFVRlZMRU5CUVVNc1UwRkJVeXhGUVVGRkxGZEJRVmNzUTBGQlF5eERRVU5xUkN4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eDNRa0ZCZDBJc1EwRkJReXhaUVVGdlFpeEZRVUZGTEVkQlFVY3NTVUZCVnp0UlFVTnFSU3hOUVVGTkxFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNXVUZCV1N4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGREwwTXNRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXh2UTBGQmIwTXNRMEZEZUVNc1YwRkJiVUlzUlVGRGJrSXNSMEZCUnl4SlFVRlhPMUZCUldRc1RVRkJUU3huUWtGQlowSXNSMEZCUnl4SlFVRkpMR2RDUVVGblFpeEZRVUZGTEVOQlFVTTdVVUZEYUVRc1RVRkJUU3hYUVVGWExFZEJRVWNzVFVGQlRTeEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zVjBGQlZ5eEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRla1VzVFVGQlRTeFZRVUZWTEVkQlFVY3NUVUZCVFN4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVOc1F5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1JVRkJSU3hWUVVGVkxFVkJRVVVzUlVGQlJUdFpRVU51UXl4TlFVRk5MRkZCUVZFc1IwRkJSeXhWUVVGVkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMWxCUXk5RExFMUJRVTBzVDBGQlR5eEhRVUZITEZWQlFWVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03V1VGRE4wTXNUVUZCVFN4VFFVRlRMRWRCUVVjc1RVRkJUU3huUWtGQlowSXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eFJRVUZSTEVWQlFVVXNUMEZCVHl4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRGRrWXNUMEZCVHl4VFFVRlRMRU5CUVVNc1JVRkJSU3hEUVVGRE8xRkJRM1JDTEVOQlFVTXNRMEZCUXl4RFFVTklMRU5CUVVNN1VVRkRSaXhQUVVGUExGVkJRVlVzUTBGQlF6dEpRVU53UWl4RFFVRkRPME5CUTBZN1FVRkZSQ3hOUVVGTkxFOUJRVThzYVVKQlFXdENMRk5CUVZFc1owSkJRVFJDTzBsQlEycEZPMUZCUTBVc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzBsQlEzQkNMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zWjBKQlFXZENMRU5CUTNCQ0xFdEJRVFJDTEVWQlF6VkNMRWRCUVVjc1NVRkJWenRSUVVWa0xFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZEYmtJN1dVRkRSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTzFsQlExSXNSMEZCUnl4RlFVRkZMRXRCUVVzc1EwRkJReXhIUVVGSE8xbEJRMlFzVVVGQlVTeEZRVUZGTEV0QlFVc3NRMEZCUXl4UlFVRlJPMWxCUTNoQ0xGZEJRVmNzUlVGQlJTeExRVUZMTEVOQlFVTXNWMEZCVnp0VFFVTXZRaXhGUVVORUxFZEJRVWNzU1VGQlNTeERRVU5TTEVOQlFVTTdTVUZEU2l4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZYTEVWQlFVVXNSMEZCUnl4SlFVRlhPMUZCUTNoRExFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NTMEZCU3l4SFFVRkhMRU5CUVdVc1EwRkJRenRKUVVOc1J5eERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMR05CUVdNc1EwRkJReXhSUVVFMFFpeEZRVUZGTEVkQlFVY3NTVUZCVnp0UlFVTXZSQ3hQUVVGUExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4VlFVRlZMRVZCUVVVc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eFJRVUZSTEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVNN1NVRkRhRWNzUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4cFFrRkJhVUlzUTBGRGNrSXNXVUZCYjBJc1JVRkRjRUlzVjBGQkswSXNSVUZETDBJc1IwRkJSeXhKUVVGWE8xRkJSV1FzVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRmxCUVZrc1JVRkJSU3hGUVVGRkxGZEJRVmNzUlVGQlJTeEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkRhRVVzUTBGQlF6dERRVU5HTzBGQlJVUXNUVUZCVFN4UFFVRlBMRmRCUVZrc1UwRkJVU3huUWtGQmMwSTdTVUZEY2tRN1VVRkRSU3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEWkN4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eExRVUZ6UWl4RlFVRkZMRWRCUVVjc1NVRkJWenRSUVVOeVJDeFBRVUZQTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUTI1Q08xbEJRMFVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlR0WlFVTlNMRTFCUVUwc1JVRkJSU3hMUVVGTExFTkJRVU1zVVVGQlVUdFpRVU4wUWl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFZEJRVWM3V1VGRFpDeEpRVUZKTEVWQlFVVXNTMEZCU3l4RFFVRkRMRWxCUVVrN1dVRkRhRUlzVjBGQlZ5eEZRVUZGTEV0QlFVc3NRMEZCUXl4WFFVRlhPMWxCUXpsQ0xGRkJRVkVzUlVGQlJTeExRVUZMTEVOQlFVTXNVVUZCVVR0VFFVTjZRaXhGUVVORUxFZEJRVWNzU1VGQlNTeERRVU5TTEVOQlFVTTdTVUZEU2l4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRWRCUVZjc1JVRkJSU3hIUVVGSExFbEJRVmM3VVVGRGJFUXNUVUZCVFN4SlFVRkpMRWRCUVVjc1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGRE4wTXNRMEZCUXl4VFFVRlRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNTVUZCU1N4VFFVRlRMRU5CUVVNc1IwRkJSeXhMUVVGTExFZEJRVWNzUTBGRE1VUXNRMEZCUXp0UlFVTkdMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFpRVU5XTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc1UwRkJVeXhIUVVGSExHRkJRV0VzUTBGQlF5eERRVUZETzFGQlF6ZERMRU5CUVVNN1VVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNVVUZCWjBJc1JVRkJSU3hIUVVGWExFVkJRVVVzUjBGQlJ5eEpRVUZYTzFGQlEzQkZMRTFCUVUwc1NVRkJTU3hIUVVGSExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlF6ZERMRU5CUVVNc1UwRkJVeXhGUVVGRkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hSUVVGUkxFTkJRVU1zU1VGQlNTeFRRVUZUTEVOQlFVTXNSMEZCUnl4TFFVRkxMRWRCUVVjc1EwRkRMMFVzUTBGQlF6dFJRVU5HTEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRaUVVOV0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNVMEZCVXl4SFFVRkhMREJDUVVFd1FpeFJRVUZSTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNCRkxFTkJRVU03VVVGRFJDeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTmtMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFXTXNSVUZCUlN4SlFVRlpMRVZCUVVVc1IwRkJSeXhKUVVGWE8xRkJRek5FTEU5QlFVOHNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlJTeEpRVUZKTEVWQlFVVXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMjVFTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc2EwSkJRV3RDTEVOQlEzUkNMRTFCUVdNc1JVRkRaQ3hSUVVFMlF5eEZRVU0zUXl4SFFVRkhMRWxCUVZjN1VVRkZaQ3hQUVVGUExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1VVRkJVU3hGUVVGRkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTjJSQ3hEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEdWQlFXVXNRMEZEYmtJc1VVRkJaMElzUlVGRGFFSXNZVUZCWVN4SFFVRkhMRXRCUVVzc1JVRkRja0lzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUMEZCVHl4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZEYmtRc1lVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRWxCUVVrc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRkZCUVZFc1EwRkJReXhEUVVOMFJ5eERRVUZETzBsQlEwb3NRMEZCUXp0RFFVTkdPMEZCUlVRc1RVRkJUU3hQUVVGUExIRkNRVUZ6UWl4VFFVRlJMR2RDUVVGblF6dEpRVU42UlR0UlFVTkZMRXRCUVVzc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF6dEpRVU40UWl4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExHMUNRVUZ0UWl4RFFVTjJRaXhOUVVGakxFVkJRMlFzV1VGQmIwSXNSVUZEY0VJc1IwRkJSeXhKUVVGWE8xRkJSV1FzVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVTnVRanRaUVVORkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVTdXVUZEVWl4SlFVRkpMRVZCUVVVc1RVRkJUVHRaUVVOYUxGVkJRVlVzUlVGQlJTeFpRVUZaTzFOQlEzcENMRVZCUTBRc1IwRkJSeXhKUVVGSkxFTkJRMUlzUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc2MwSkJRWE5DTEVOQlF6RkNMRTFCUVdNc1JVRkRaQ3hoUVVGeFFpeEZRVU55UWl4SFFVRkhMRWxCUVZjN1VVRkZaQ3hOUVVGTkxGVkJRVlVzUjBGQlJ5eE5RVUZOTEVsQlFVa3NhVUpCUVdsQ0xFVkJRVVVzUTBGQlF5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRGJFWXNUMEZCVHl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNUVUZCVFN4RlFVRkZMRlZCUVZVc1EwRkJReXhGUVVGRkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTnNSU3hEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEhkQ1FVRjNRaXhEUVVGRExHZENRVUYzUWl4RlFVRkZMRWRCUVVjc1NVRkJWenRSUVVOeVJTeE5RVUZOTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOdVJDeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRzFDUVVGdFFpeERRVUZETEUxQlFXTXNSVUZCUlN4SFFVRkhMRWxCUVZjN1VVRkRkRVFzVDBGQlR5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1kwRkJZeXhGUVVGRkxFVkJRVVVzUTBGRE4wUXNZVUZCWVN4RFFVRkRMR05CUVdNc1EwRkJReXhKUVVGSkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlF6TkRMRU5CUVVNN1NVRkRTaXhEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEcxQ1FVRnRRaXhEUVVGRExGbEJRVzlDTEVWQlFVVXNSMEZCUnl4SlFVRlhPMUZCUXpWRUxFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMR05CUVdNc1JVRkJSU3hGUVVGRkxFTkJRemRFTEdGQlFXRXNRMEZCUXl4alFVRmpMRU5CUVVNc1ZVRkJWU3hGUVVGRkxGbEJRVmtzUTBGQlF5eERRVU4yUkN4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVkTExFRkJRVTRzUzBGQlN5eERRVUZETEhOQ1FVRnpRaXhEUVVNeFFpeE5RVUZqTEVWQlEyUXNZVUZCZFVJc1JVRkRka0lzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1RVRkJUU3hKUVVGSkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEYWtVc1RVRkJUU3hqUVVGakxFTkJRVU1zU1VGQlNTeEZRVUZGTEZGQlFWRXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRemxETEUxQlFVMHNUMEZCVHl4SFFVRkhMRTFCUVUwc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGREwwSXNZVUZCWVN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExGbEJRVmtzUlVGQlJTeEZRVUZGTEVOQlEycERMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4TlFVRk5MRVZCUVVVc1dVRkJXU3hGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEVOQlEzaEVMRU5CUTBZc1EwRkJRenRSUVVOR0xFOUJRVThzVDBGQlR5eERRVUZETzBsQlEycENMRU5CUVVNN1NVRkhTeXhCUVVGT0xFdEJRVXNzUTBGQlF5eDVRa0ZCZVVJc1EwRkROMElzUzBGQmMwSXNSVUZEZEVJc1kwRkJkMElzUlVGRGVFSXNSMEZCUnl4SlFVRlhPMUZCUldRc1RVRkJUU3hKUVVGSkxFZEJRVWNzVFVGQlRTeEpRVUZKTEZkQlFWY3NSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTm9SU3hMUVVGTExFMUJRVTBzWVVGQllTeEpRVUZKTEdOQlFXTXNSVUZCUlN4RFFVRkRPMWxCUXpORExFMUJRVTBzU1VGQlNTeERRVUZETEhOQ1FVRnpRaXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVXNZVUZCWVN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRGNrVXNRMEZCUXp0UlFVTkVMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dERRVU5HTzBGQk0wSlBPMGxCUkV3c1lVRkJZU3hGUVVGRk96czdPMjFGUVdObU8wRkJSMHM3U1VGRVRDeGhRVUZoTEVWQlFVVTdPenM3YzBWQlYyWTdRVUZIU0N4TlFVRk5MRTlCUVU4c2NVSkJRWE5DTEZOQlFWRXNaMEpCUVdkRE8wbEJRM3BGTzFGQlEwVXNTMEZCU3l4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRE8wbEJRM2hDTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc1ZVRkJWU3hEUVVGRExFdEJRWE5DTEVWQlFVVXNSMEZCUnl4SlFVRlhPMUZCUTNKRUxFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZEYmtJN1dVRkRSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTzFsQlExSXNUVUZCVFN4RlFVRkZMRXRCUVVzc1EwRkJReXhSUVVGUk8xbEJRM1JDTEZOQlFWTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1YwRkJWenRaUVVNMVFpeEpRVUZKTEVWQlFVVXNTMEZCU3l4RFFVRkRMRTFCUVUwN1dVRkRiRUlzVTBGQlV5eEZRVUZGTEV0QlFVc3NRMEZCUXl4VFFVRlRPMWxCUXpGQ0xFOUJRVThzUlVGQlJTeExRVUZMTEVOQlFVTXNUMEZCVHp0WlFVTjBRaXhYUVVGWExFVkJRVVVzUzBGQlN5eERRVUZETEZkQlFWY3NTVUZCU1N4TFFVRkxPMWxCUTNaRExGRkJRVkVzUlVGQlJTeExRVUZMTEVOQlFVTXNVVUZCVVR0WlFVTjRRaXhUUVVGVExFVkJRVVVzUzBGQlN5eERRVUZETEZOQlFWTTdXVUZETVVJc1ZVRkJWU3hGUVVGRkxFdEJRVXNzUTBGQlF5eFZRVUZWTzFOQlF6ZENMRVZCUTBRc1IwRkJSeXhKUVVGSkxFTkJRMUlzUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNXVUZCYjBJc1JVRkJSU3hIUVVGSExFbEJRVmM3VVVGRGVrUXNUVUZCVFN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExGbEJRVmtzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXk5RExFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNkMEpCUVhkQ0xFTkJRelZDTEZGQlFXZENMRVZCUTJoQ0xGZEJRVzFDTEVWQlEyNUNMRWRCUVVjc1NVRkJWenRSUVVWa0xFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZEZWtNc1EwRkJReXhWUVVGVkxFVkJRVVVzUlVGQlJTeERRVU5pTEZWQlFWVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hGUVVGRkxGRkJRVkVzUTBGQlF6dFpRVU4yUXl4aFFVRmhMRU5CUVVNc1ZVRkJWU3hEUVVGRExGTkJRVk1zUlVGQlJTeFhRVUZYTEVOQlFVTXNRMEZEYmtRc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zVFVGQll5eEZRVUZGTEVkQlFVY3NTVUZCVnp0UlFVTjBSQ3hQUVVGUExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4VlFVRlZMRVZCUVVVc1JVRkJSU3hEUVVONlJDeGhRVUZoTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGRGRrTXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zY1VKQlFYRkNMRU5CUTNwQ0xGRkJRV2RDTEVWQlEyaENMRWRCUVVjc1NVRkJWenRSUVVWa0xFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRM3BFTEZWQlFWVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hGUVVGRkxGRkJRVkVzUTBGQlF5eERRVU40UXl4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eHpRa0ZCYzBJc1EwRkRNVUlzV1VGQmIwSXNSVUZEY0VJc1VVRkJNRUlzUlVGRE1VSXNVMEZCTWtJc1JVRkRNMElzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExGbEJRVmtzUlVGQlJTeEZRVUZGTEZGQlFWRXNSVUZCUlN4VFFVRlRMRVZCUVVVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEzaEZMRU5CUVVNN1EwRkRSanRCUVVWRUxFMUJRVTBzVDBGQlR5d3dRa0ZCTWtJc1UwRkJVU3huUWtGQmNVTTdTVUZEYmtZN1VVRkRSU3hMUVVGTExFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1EwRkJRenRKUVVNM1FpeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMR2RDUVVGblFpeERRVU53UWl4UlFVRm5RaXhGUVVOb1FpeFhRVUZ0UWl4RlFVTnVRaXhIUVVGSExFbEJRVmM3VVVGRlpDeFBRVUZQTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUTNwRExFTkJRVU1zVlVGQlZTeEZRVUZGTEVWQlFVVXNRMEZEWWl4VlFVRlZMRU5CUVVNc1ZVRkJWU3hEUVVGRExFMUJRVTBzUlVGQlJTeFJRVUZSTEVOQlFVTTdXVUZEZGtNc1lVRkJZU3hEUVVGRExGVkJRVlVzUTBGQlF5eFRRVUZUTEVWQlFVVXNWMEZCVnl4RFFVRkRMRU5CUTI1RUxFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRmxCUVZrc1EwRkRhRUlzVVVGQlowSXNSVUZEYUVJc1UwRkJiMElzUlVGRGNFSXNUMEZCWlN4RlFVTm1MRWRCUVVjc1NVRkJWenRSUVVWa0xFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZEZWtNc1EwRkJReXhWUVVGVkxFVkJRVVVzUlVGQlJTeERRVU5pTEZWQlFWVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hGUVVGRkxGRkJRVkVzUTBGQlF6dFpRVU4yUXl4VlFVRlZMRU5CUVVNc1UwRkJVeXhMUVVGTExGTkJRVk03V1VGRGJFTXNWVUZCVlN4RFFVRkRMRTlCUVU4c1MwRkJTeXhQUVVGUExFTkJRMnBETEVOQlFVTTdTVUZEU2l4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExHRkJRV0VzUTBGRGFrSXNVVUZCWjBJc1JVRkRhRUlzVjBGQmJVSXNSVUZEYmtJc1lVRkJjVUlzUlVGRGNrSXNVMEZCYjBJc1JVRkRjRUlzVDBGQlpTeEZRVU5tTEVWQlFWTXNSVUZEVkN4SFFVRkhMRWxCUVZjN1VVRkZaQ3hQUVVGUExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVVVGQlVTeEZRVUZGTEZkQlFWY3NSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVU4yUlN4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRMklzVlVGQlZTeERRVUZETEdGQlFXRXNTMEZCU3l4aFFVRmhPMWxCUXpGRExGVkJRVlVzUTBGQlF5eFRRVUZUTEV0QlFVc3NVMEZCVXp0WlFVTnNReXhWUVVGVkxFTkJRVU1zVDBGQlR5eExRVUZMTEU5QlFVODdXVUZET1VJc1EwRkJReXhEUVVGRExGVkJRVlVzUTBGQlF5eFJRVUZSTEVsQlFVa3NRMEZCUXl4RlFVRkZMRWxCUVVrc1ZVRkJWU3hEUVVGRExGRkJRVkVzU1VGQlNTeEZRVUZGTEVOQlFVTTdXVUZETVVRc1EwRkJReXhEUVVGRExGVkJRVlVzUTBGQlF5eFRRVUZUTEVsQlFVa3NRMEZCUXl4RlFVRkZMRWxCUVVrc1ZVRkJWU3hEUVVGRExGTkJRVk1zU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZETDBRc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVVVGQlowSXNSVUZCUlN4WFFVRnRRaXhGUVVGRkxFZEJRVWNzU1VGQlZ6dFJRVU0xUlN4TlFVRk5MR05CUVdNc1EwRkJReXhKUVVGSkxFVkJRVVVzVFVGQlRTeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVVVGQlVTeEZRVUZGTEZkQlFWY3NSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEYmtjc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNVVUZCWjBJc1JVRkJSU3hIUVVGSExFbEJRVmM3VVVGRGNFUXNUVUZCVFN4alFVRmpMRU5CUTJ4Q0xFbEJRVWtzUlVGRFNpeERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hSUVVGUkxFTkJRVU1zUTBGQlF5eEZRVU0zUml4SFFVRkhMRWxCUVVrc1EwRkRVaXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVWRMTEVGQlFVNHNTMEZCU3l4RFFVRkRMRzFDUVVGdFFpeERRVU4yUWl4UlFVRm5RaXhGUVVOb1FpeFhRVUZ0UWl4RlFVTnVRaXhIUVVGSExFbEJRVmM3VVVGRlpDeE5RVUZOTEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eFJRVUZSTEVWQlFVVXNWMEZCVnl4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRk9VUXNUVUZCVFN4eFFrRkJjVUlzUjBGQlJ5eEpRVUZKTEhGQ1FVRnhRaXhGUVVGRkxFTkJRVU03VVVGRE1VUXNUVUZCVFN4eFFrRkJjVUlzUjBGQlJ5eEpRVUZKTEhGQ1FVRnhRaXhGUVVGRkxFTkJRVU03VVVGRE1VUXNUVUZCVFN4cFFrRkJhVUlzUjBGQlJ5eEpRVUZKTEdsQ1FVRnBRaXhGUVVGRkxFTkJRVU03VVVGRGJFUXNUVUZCVFN4elFrRkJjMElzUjBGQlJ5eEpRVUZKTEhOQ1FVRnpRaXhGUVVGRkxFTkJRVU03VVVGRE5VUXNUVUZCVFN4blFrRkJaMElzUjBGQlJ5eEpRVUZKTEdkQ1FVRm5RaXhGUVVGRkxFTkJRVU03VVVGRGFFUXNUVUZCVFN4eFFrRkJjVUlzUjBGQlJ5eEpRVUZKTEhGQ1FVRnhRaXhGUVVGRkxFTkJRVU03VVVGRE1VUXNUVUZCVFN4MVFrRkJkVUlzUjBGQlJ5eEpRVUZKTEhWQ1FVRjFRaXhGUVVGRkxFTkJRVU03VVVGRk9VUXNUVUZCVFN4WlFVRlpMRWRCUVd0RExFVkJRVVVzUTBGQlF6dFJRVU4yUkN4TlFVRk5MR2xDUVVGcFFpeEhRVUZITEUxQlFVMHNjVUpCUVhGQ0xFTkJRVU1zZDBKQlFYZENMRU5CUXpWRkxGRkJRVkVzUlVGRFVpeFhRVUZYTEVWQlExZ3NSMEZCUnl4SlFVRkpMRU5CUTFJc1EwRkJRenRSUVVOR0xFMUJRVTBzWjBKQlFXZENMRWRCUVVjc1RVRkJUU3h6UWtGQmMwSXNRMEZCUXl4dFFrRkJiVUlzUTBGRGRrVXNWMEZCVnl4RlFVTllMRWRCUVVjc1NVRkJTU3hEUVVOU0xFTkJRVU03VVVGRFJpeE5RVUZOTEdkQ1FVRm5RaXhIUVVGSExFTkJRM1pDTEUxQlFVMHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkRaaXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhGUVVGRkxGVkJRVlVzUlVGQlJTeEZRVUZGTzFsQlEzaERMRTFCUVUwc1kwRkJZeXhIUVVGSExFMUJRVTBzWjBKQlFXZENMRU5CUVVNc2FVSkJRV2xDTEVOQlF6ZEVMRlZCUVZVc1EwRkJReXhWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlF6ZENMRlZCUVZVc1EwRkJReXhWUVVGVkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlF6VkNMRWRCUVVjc1NVRkJTU3hEUVVOU0xFTkJRVU03V1VGRFJpeFBRVUZQTEhGQ1FVRnhRaXhEUVVGRExIZENRVUYzUWl4RFFVTnVSQ3hSUVVGUkxFVkJRMUlzWTBGQll5eERRVUZETEVWQlFVVXNSVUZEYWtJc1IwRkJSeXhKUVVGSkxFTkJRMUlzUTBGQlF6dFJRVU5LTEVOQlFVTXNRMEZCUXl4RFFVTklMRU5CUTBZc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVVZVTEUxQlFVMHNWMEZCVnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhwUWtGQmFVSXNSVUZCUlN4SFFVRkhMR2RDUVVGblFpeERRVUZETEVOQlFVTTdVVUZEYUVVc1MwRkJTeXhOUVVGTkxGVkJRVlVzU1VGQlNTeFhRVUZYTEVWQlFVVXNRMEZCUXp0WlFVTnlReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eE5RVUZOTEhGQ1FVRnhRaXhEUVVGRExHMUNRVUZ0UWl4RFFVTnlSU3hWUVVGVkxFTkJRVU1zVlVGQlZTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVTXpRaXhIUVVGSExFbEJRVWtzUTBGRFVpeERRVUZETzFsQlEwWXNUVUZCVFN4WFFVRlhMRWRCUVVjc1RVRkJUU3hQUVVGUExFTkJRVU1zUjBGQlJ5eERRVU51UXl4bFFVRmxMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlJTeGpRVUZqTEVWQlFVVXNSVUZCUlR0blFrRkRNME1zVFVGQlRTeFZRVUZWTEVkQlFVY3NUVUZCVFN4cFFrRkJhVUlzUTBGQlF5eFRRVUZUTEVOQlEyeEVMRWxCUVVrc1JVRkRTaXhWUVVGVkxFTkJRVU1zWTBGQll5eERRVUZETEZWQlFWVXNRMEZCVlN4RlFVTTVReXhIUVVGSExFbEJRVWtzUTBGRFVpeERRVUZETzJkQ1FVTkdMRTlCUVU4c1ZVRkJWU3hEUVVGRE8xbEJRM0JDTEVOQlFVTXNRMEZCUXl4RFFVTklMRU5CUVVNN1dVRkRSaXhMUVVGTExFMUJRVTBzVlVGQlZTeEpRVUZKTEZkQlFWY3NSVUZCUlN4RFFVRkRPMmRDUVVOeVF5eEpRVUZKTEVOQlFVTXNWVUZCVlR0dlFrRkJSU3hUUVVGVE8yZENRVU14UWl4TlFVRk5MRk5CUVZNc1IwRkJSeXhWUVVGVkxFTkJRVU1zVTBGQlV5eERRVUZETzJkQ1FVTjJReXhOUVVGTkxFOUJRVThzUjBGQlJ5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRPMmRDUVVOdVF5eE5RVUZOTEUxQlFVMHNSMEZCY1VRc1JVRkJSU3hEUVVGRE8yZENRVU53UlN4SlFVRkpMRk5CUVZNc1MwRkJTeXhUUVVGVExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTI1RExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxGRkJRVkVzUlVGQlJTeERRVUZETEVOQlFVTTdaMEpCUTJoRUxFTkJRVU03Y1VKQlFVMHNTVUZCU1N4VFFVRlRMRXRCUVVzc1UwRkJVeXhEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETzI5Q1FVTTFReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hEUVVGRExFTkJRVU03WjBKQlEzUkRMRU5CUVVNN2NVSkJRVTBzU1VGQlNTeFRRVUZUTEV0QlFVc3NVMEZCVXl4RFFVRkRMRTlCUVU4c1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXp0dlFrRkRkRVVzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRk5CUVZNc1JVRkJSU3hQUVVGUExFVkJRVVVzUTBGQlF5eERRVUZETzJkQ1FVTjBReXhEUVVGRE8zRkNRVUZOTEVsQlFVa3NVMEZCVXl4TFFVRkxMRk5CUVZNc1EwRkJReXhQUVVGUExFbEJRVWtzVlVGQlZTeERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRPMjlDUVVOeVJTeE5RVUZOTEZkQlFWY3NSMEZCUnl4TlFVRk5MSEZDUVVGeFFpeERRVUZETEdWQlFXVXNRMEZETjBRc1VVRkJVU3hGUVVOU0xFOUJRVThzUlVGRFVDeEhRVUZITEVsQlFVa3NRMEZEVWl4RFFVRkRPMjlDUVVOR0xFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPM2RDUVVOMlF5eFRRVUZUTzNkQ1FVTlVMRTlCUVU4c1JVRkJSU3hWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEZWQlFWVXNRMEZCUXp0eFFrRkRjRU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRVQ3hEUVVGRE8yZENRVVZFTEV0QlFVc3NUVUZCVFN4TlFVRk5MRWxCUVVrc1RVRkJUU3hGUVVGRkxFTkJRVU03YjBKQlF6VkNMRWxCUTBVc1UwRkJVeXhMUVVGTExGTkJRVk1zUTBGQlF5eFBRVUZQTzNkQ1FVTXZRaXhWUVVGVkxFTkJRVU1zVjBGQlZ6dDNRa0ZEZEVJc1RVRkJUU3hEUVVGRExFOUJRVThzUzBGQlN5eFBRVUZQTzNkQ1FVTXhRaXhEUVVGRExFMUJRVTBzZFVKQlFYVkNMRU5CUVVNc01FSkJRVEJDTEVOQlEzWkVMRkZCUVZFc1JVRkRVaXhOUVVGTkxFTkJRVU1zVDBGQlR5eEZRVU5rTEU5QlFVOHNSVUZEVUN4VlFVRlZMRU5CUVVNc1VVRkJVU3hGUVVOdVFpeEhRVUZITEVsQlFVa3NRMEZEVWl4RFFVRkRMRVZCUTBZc1EwRkJRenQzUWtGRFJDeFRRVUZUTzI5Q1FVTllMRU5CUVVNN2IwSkJRMFFzV1VGQldTeERRVUZETEVsQlFVa3NRMEZCUXp0M1FrRkRhRUlzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlR0M1FrRkRVaXhSUVVGUk8zZENRVU5TTEZkQlFWYzdkMEpCUTFnc1lVRkJZU3hGUVVGRkxGVkJRVlVzUTBGQlF5eEhRVUZITzNkQ1FVTTNRaXhUUVVGVExFVkJRVVVzVFVGQlRTeERRVUZETEZOQlFWTTdkMEpCUXpOQ0xFOUJRVThzUlVGQlJTeE5RVUZOTEVOQlFVTXNUMEZCVHp0M1FrRkRka0lzVlVGQlZTeEZRVUZGTEdsQ1FVRnBRanQzUWtGRE4wSXNVVUZCVVN4RlFVRkZMRlZCUVZVc1EwRkJReXhGUVVGRk8zZENRVU4yUWl4UlFVRlJMRVZCUVVVc1ZVRkJWU3hEUVVGRExGRkJRVkU3ZDBKQlF6ZENMRk5CUVZNc1JVRkJSU3hWUVVGVkxFTkJRVU1zVTBGQlV6dHhRa0ZEYUVNc1EwRkJReXhEUVVGRE8yZENRVU5NTEVOQlFVTTdXVUZEU0N4RFFVRkRPMUZCUTBnc1EwRkJRenRSUVVWRUxFMUJRVTBzVDBGQlR5eEhRVUZITEUxQlFVMHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkRMMElzV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRemxDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUTFvN1dVRkRSU3hGUVVGRkxFVkJRVVVzVlVGQlZTeERRVUZETEVWQlFVVTdXVUZEYWtJc1RVRkJUU3hGUVVGRkxGVkJRVlVzUTBGQlF5eFJRVUZSTzFsQlF6TkNMRk5CUVZNc1JVRkJSU3hWUVVGVkxFTkJRVU1zVjBGQlZ6dFpRVU5xUXl4aFFVRmhMRVZCUVVVc1ZVRkJWU3hEUVVGRExHRkJRV0U3V1VGRGRrTXNVMEZCVXl4RlFVRkZMRlZCUVZVc1EwRkJReXhUUVVGVE8xbEJReTlDTEU5QlFVOHNSVUZCUlN4VlFVRlZMRU5CUVVNc1QwRkJUenRaUVVNelFpeFZRVUZWTEVWQlFVVXNWVUZCVlN4RFFVRkRMRlZCUVZVN1dVRkRha01zVVVGQlVTeEZRVUZGTEZWQlFWVXNRMEZCUXl4UlFVRlJPMWxCUXpkQ0xGRkJRVkVzUlVGQlJTeFZRVUZWTEVOQlFVTXNVVUZCVVR0WlFVTTNRaXhUUVVGVExFVkJRVVVzVlVGQlZTeERRVUZETEZOQlFWTTdVMEZEYUVNc1JVRkRSQ3hIUVVGSExFbEJRVWtzUTBGRFVpeERRVU5HTEVOQlEwWXNRMEZCUXp0UlFVTkdMRTlCUVU4c1QwRkJUeXhEUVVGRE8wbEJRMnBDTEVOQlFVTTdTVUZIU3l4QlFVRk9MRXRCUVVzc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4UlFVRm5RaXhGUVVGRkxFZEJRVWNzU1VGQlZ6dFJRVU55UkN4TlFVRk5MRlZCUVZVc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeG5Ra0ZCWjBJc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVWQlFVVXNRMEZEZEVZc1ZVRkJWU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUTNaRExFTkJRVU03VVVGRFJpeExRVUZMTEUxQlFVMHNVMEZCVXl4SlFVRkpMRlZCUVZVc1JVRkJSU3hEUVVGRE8xbEJRMjVETEUxQlFVMHNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeERRVUZETEZGQlFWRXNSVUZCUlN4VFFVRlRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEYkVVc1EwRkJRenRKUVVOSUxFTkJRVU03UTBGRFJqdEJRUzlKVHp0SlFVUk1MR0ZCUVdFc1JVRkJSVHM3T3p0eFJVRnhTV1k3UVVGSFN6dEpRVVJNTEdGQlFXRXNSVUZCUlRzN096dHJSVUZSWmp0QlFVZElMRTFCUVUwc1QwRkJUeXgzUWtGQmVVSXNVMEZCVVN4blFrRkJiVU03U1VGREwwVTdVVUZEUlN4TFFVRkxMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXp0SlFVTXpRaXhEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEdkQ1FVRm5RaXhEUVVOd1FpeExRVUUwUWl4RlFVTTFRaXhIUVVGSExFbEJRVmM3VVVGRlpDeFBRVUZQTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUTI1Q08xbEJRMFVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlR0WlFVTlNMRTFCUVUwc1JVRkJSU3hMUVVGTExFTkJRVU1zVVVGQlVUdFpRVU4wUWl4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRExGTkJRVk03V1VGRGVFSXNXVUZCV1N4RlFVRkZMRXRCUVVzc1EwRkJReXhaUVVGWk8xbEJRMmhETEZWQlFWVXNSVUZCUlN4TFFVRkxMRU5CUVVNc1ZVRkJWVHRaUVVNMVFpeFZRVUZWTEVWQlFVVXNTMEZCU3l4RFFVRkRMRlZCUVZVN1dVRkROVUlzUzBGQlN5eEZRVUZGTEV0QlFVc3NRMEZCUXl4blFrRkJaMEk3V1VGRE4wSXNWMEZCVnl4RlFVRkZMRXRCUVVzc1EwRkJReXhYUVVGWE8xbEJRemxDTEZGQlFWRXNSVUZCUlN4TFFVRkxMRU5CUVVNc1VVRkJVVHRUUVVONlFpeEZRVU5FTEVkQlFVY3NTVUZCU1N4RFFVTlNMRU5CUVVNN1NVRkRTaXhEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEcxQ1FVRnRRaXhEUVVOMlFpeFJRVUZuUWl4RlFVTm9RaXhaUVVGdlFpeEZRVU53UWl4VlFVRnJRaXhGUVVOc1FpeEhRVUZITEVsQlFWYzdVVUZGWkN4UFFVRlBMRU5CUVVNc1RVRkJUU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRM1pETEVOQlFVTXNVVUZCVVN4RlFVRkZMRVZCUVVVc1EwRkRXQ3hWUVVGVkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSVUZCUlN4UlFVRlJMRU5CUVVNN1dVRkRja01zVVVGQlVTeERRVUZETEZsQlFWa3NTMEZCU3l4WlFVRlpPMWxCUTNSRExGRkJRVkVzUTBGQlF5eFZRVUZWTEV0QlFVc3NWVUZCVlN4RFFVTnlReXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4eFFrRkJjVUlzUTBGRGVrSXNiVUpCUVRKQ0xFVkJRek5DTEZOQlFXbENMRVZCUTJwQ0xFZEJRVWNzU1VGQlZ6dFJRVVZrTEU5QlFVOHNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXh0UWtGQmJVSXNSVUZCUlN4RlFVRkZMRTlCUVU4c1JVRkJSU3hUUVVGVExFVkJRVVVzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpsRkxFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNZVUZCWVN4RFFVTnFRaXh0UWtGQk1rSXNSVUZETTBJc1ZVRkJPRUlzUlVGRE9VSXNSMEZCUnl4SlFVRlhPMUZCUldRc1QwRkJUeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEcxQ1FVRnRRaXhGUVVGRkxFVkJRVVVzVlVGQlZTeEZRVUZGTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOMFJTeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMR2xDUVVGcFFpeERRVU55UWl4dFFrRkJNa0lzUlVGRE0wSXNaMEpCUVc5RExFVkJRM0JETEVkQlFVY3NTVUZCVnp0UlFVVmtMRTlCUVU4c1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eHRRa0ZCYlVJc1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlJTeG5Ra0ZCWjBJc1JVRkJSU3hGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEYmtZc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhUUVVGcFFpeEZRVUZGTEVkQlFVY3NTVUZCVnp0UlFVTXhSQ3hQUVVGUExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJSU3hEUVVOMlJDeGhRVUZoTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGRE0wTXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1VVRkJaMElzUlVGQlJTeEhRVUZITEVsQlFWYzdVVUZEZUVRc1QwRkJUeXhEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNVVUZCVVN4RlFVRkZMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMjVITEVOQlFVTTdRMEZEUmp0QlFVVkVMRTFCUVUwc1QwRkJUeXh2UWtGQmNVSXNVMEZCVVN4blFrRkJLMEk3U1VGRGRrVTdVVUZEUlN4TFFVRkxMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU03U1VGRGRrSXNRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhoUVVGaExFTkJRVU1zUzBGQmVVSXNSVUZCUlN4SFFVRkhMRWxCUVZjN1VVRkRNMFFzVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVTnVRanRaUVVORkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVTdXVUZEVWl4TlFVRk5MRVZCUVVVc1MwRkJTeXhEUVVGRExGRkJRVkU3V1VGRGRFSXNVVUZCVVN4RlFVRkZMRXRCUVVzc1EwRkJReXhWUVVGVk8xbEJRekZDTEZOQlFWTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1YwRkJWenRaUVVNMVFpeGhRVUZoTEVWQlFVVXNTMEZCU3l4RFFVRkRMR0ZCUVdFN1dVRkRiRU1zVVVGQlVTeEZRVUZGTEV0QlFVc3NRMEZCUXl4UlFVRlJPMWxCUTNoQ0xGTkJRVk1zUlVGQlJTeExRVUZMTEVOQlFVTXNVMEZCVXp0WlFVTXhRaXhWUVVGVkxFVkJRVVVzUzBGQlN5eERRVUZETEZWQlFWVTdXVUZETlVJc1UwRkJVeXhGUVVGRkxFdEJRVXNzUTBGQlF5eHZRa0ZCYjBJN1UwRkRkRU1zUlVGRFJDeEhRVUZITEVsQlFVa3NRMEZEVWl4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eFhRVUZYTEVOQlFVTXNUMEZCWlN4RlFVRkZMRWRCUVVjc1NVRkJWenRSUVVNdlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdTVUZETVVNc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXh0UWtGQk1rSXNSVUZCUlN4SFFVRkhMRWxCUVZjN1VVRkRiRVVzVDBGQlR5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVVzUTBGRGNFUXNZVUZCWVN4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFVkJRVVVzYlVKQlFXMUNMRU5CUVVNc1EwRkRia1FzUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc2JVSkJRVzFDTEVOQlEzWkNMRkZCUVdkQ0xFVkJRMmhDTEZkQlFXMUNMRVZCUTI1Q0xFZEJRVWNzU1VGQlZ6dFJRVVZrTEU5QlFVOHNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkRla01zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEZRVUZGTEZGQlFWRXNRMEZCUXl4SlFVRkpMR0ZCUVdFc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eEZRVUZGTEZkQlFWY3NRMEZCUXl4RFFVTTNSaXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUTFvc1VVRkJaMElzUlVGRGFFSXNWMEZCYlVJc1JVRkRia0lzYlVKQlFUSkNMRVZCUXpOQ0xHRkJRWEZDTEVWQlEzSkNMRVZCUVZNc1JVRkRWQ3hIUVVGSExFbEJRVmM3VVVGRlpDeFBRVUZQTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNVVUZCVVN4RlFVRkZMRmRCUVZjc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVTXhSU3hEUVVGRExFdEJRVXNzUlVGQlJTeEZRVUZGTEVOQlExSXNZVUZCWVN4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFVkJRVVVzYlVKQlFXMUNMRU5CUVVNN1dVRkRiRVFzUzBGQlN5eERRVUZETEdGQlFXRXNTMEZCU3l4aFFVRmhPMWxCUTNKRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4SlFVRkpMRU5CUVVNc1JVRkJSU3hKUVVGSkxFdEJRVXNzUTBGQlF5eFJRVUZSTEVsQlFVa3NSVUZCUlN4RFFVRkRPMWxCUTJoRUxFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hKUVVGSkxFdEJRVXNzUTBGQlF5eFRRVUZUTEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUTNKRUxFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRzlDUVVGdlFpeERRVU40UWl4dFFrRkJNa0lzUlVGRE0wSXNSMEZCUnl4SlFVRlhPMUZCUldRc1RVRkJUU3hqUVVGakxFTkJRMnhDTEVsQlFVa3NSVUZEU2l4TlFVRk5MRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4dFFrRkJiVUlzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4RlFVTXpSQ3hIUVVGSExFbEJRVWtzUTBGRFVpeERRVUZETzBsQlEwb3NRMEZCUXp0RFFVTkdPMEZCUlVRc1RVRkJUU3hQUVVGUExIZENRVUYzUWp0SlFVTnVReXhMUVVGTExFTkJRVU1zYTBKQlFXdENMRU5CUVVNc2JVSkJRVEpDTEVWQlFVVXNSMEZCUnl4SlFVRlhPMUZCUTJ4RkxFMUJRVTBzU1VGQlNTeHZRa0ZCYjBJc1JVRkJSU3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRzFDUVVGdFFpeEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRjRVlzVFVGQlRTeEpRVUZKTEhkQ1FVRjNRaXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEcxQ1FVRnRRaXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEYUVZc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eHZRa0ZCYjBJc1EwRkRlRUlzYlVKQlFUSkNMRVZCUXpOQ0xFZEJRVWNzU1VGQlZ6dFJRVTlrTEUxQlFVMHNVVUZCVVN4SFFVRkhMRTFCUVUwc1NVRkJTU3gzUWtGQmQwSXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXh0UWtGQmJVSXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRelZHTEU5QlFVODdXVUZEVEN4UlFVRlJMRVZCUVVVc1ZVRkJWU3hEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTTdXVUZEY2tNc1UwRkJVeXhGUVVGRkxGVkJRVlVzUTBGQlF5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRPMWxCUTNaRExGVkJRVlVzUlVGQlJTeFJRVUZSTEVOQlFVTXNWVUZCVlR0WlFVTXZRaXhuUWtGQlowSXNSVUZCUlN4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eFZRVUZWTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTzFOQlF6RkZMRU5CUVVNN1NVRkRTaXhEUVVGRE8wTkJRMFk3UVVGRlJDeE5RVUZOTEU5QlFVOHNjVUpCUVhOQ0xGTkJRVkVzWjBKQlFXZERPMGxCUTNwRk8xRkJRMFVzUzBGQlN5eERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMGxCUTNoQ0xFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNZVUZCWVN4RFFVRkRMRXRCUVdkRExFVkJRVVVzUjBGQlJ5eEpRVUZYTzFGQlEyeEZMRTlCUVU4c1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGRGJrSTdXVUZEUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRk8xbEJRMUlzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4UlFVRlJPMWxCUTNSQ0xGZEJRVmNzUlVGQlJTeExRVUZMTEVOQlFVTXNWMEZCVnp0WlFVTTVRaXhYUVVGWExFVkJRVVVzUzBGQlN5eERRVUZETEZkQlFWYzdXVUZET1VJc1ZVRkJWU3hGUVVGRkxFdEJRVXNzUTBGQlF5eFZRVUZWTzFsQlF6VkNMRTFCUVUwc1JVRkJSU3hMUVVGTExFTkJRVU1zVFVGQlRUdFpRVU53UWl4TlFVRk5MRVZCUVVVc1MwRkJTeXhEUVVGRExFMUJRVTA3VTBGRGNrSXNSVUZEUkN4SFFVRkhMRWxCUVVrc1EwRkRVaXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eFJRVUZuUWl4RlFVRkZMRWRCUVVjc1NVRkJWenRSUVVOMlJDeFBRVUZQTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRkxGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEYWtjc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eFZRVUZWTEVOQlEyUXNVVUZCWjBJc1JVRkRhRUlzVjBGQmQwSXNSVUZEZUVJc1IwRkJSeXhKUVVGWE8xRkJSV1FzVDBGQlR5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEZGQlFWRXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVU0xUkN4RFFVRkRMRTlCUVU4c1JVRkJSU3hGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NTMEZCU3l4WFFVRlhMRU5CUTJwRUxFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMR2RDUVVGblFpeERRVU53UWl4VFFVRnBRaXhGUVVOcVFpeE5RVUV5UXl4RlFVTXpReXhIUVVGSExFbEJRVmM3VVVGRlpDeFBRVUZQTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1UwRkJVeXhGUVVGRkxFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVONFJDeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMR3RDUVVGclFpeERRVU4wUWl4VFFVRnBRaXhGUVVOcVFpeFZRVUZyUWl4RlFVTnNRaXhOUVVGakxFVkJRMlFzVFVGQlowTXNSVUZEYUVNc1IwRkJSeXhKUVVGWE8xRkJSV1FzVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVTnVRaXhUUVVGVExFVkJRMVFzUlVGQlJTeFhRVUZYTEVWQlFVVXNhMEpCUVd0Q0xFTkJRVU1zVTBGQlV5eEZRVUZGTEZWQlFWVXNSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFVkJRM3BGTEVkQlFVY3NTVUZCU1N4RFFVTlNMRU5CUVVNN1NVRkRTaXhEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEZOQlFWTXNRMEZEWWl4VFFVRnBRaXhGUVVOcVFpeFZRVUZyUWl4RlFVTnNRaXhOUVVGakxFVkJRMlFzVFVGQlowTXNSVUZEYUVNc1IwRkJSeXhKUVVGWE8xRkJSV1FzVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVTnVRaXhUUVVGVExFVkJRMVFzUlVGQlJTeFhRVUZYTEVWQlFVVXNhMEpCUVd0Q0xFTkJRVU1zVFVGQlRTeEZRVUZGTEZWQlFWVXNSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFVkJRM1JGTEVkQlFVY3NTVUZCU1N4RFFVTlNMRU5CUVVNN1NVRkRTaXhEUVVGRE8wTkJRMFk3UVVGRlJDeE5RVUZOTEU5QlFVOHNaMEpCUVdkQ08wbEJRVGRDTzFGQlExVXNhMEpCUVdFc1IwRkJSeXhKUVVGSkxHRkJRV0VzUlVGQlJTeERRVUZETzFGQlEzQkRMSGxDUVVGdlFpeEhRVUZITEVsQlFVa3NiMEpCUVc5Q0xFVkJRVVVzUTBGQlF6dFJRVU5zUkN4dFFrRkJZeXhIUVVGSExFbEJRVWtzWTBGQll5eEZRVUZGTEVOQlFVTTdVVUZEZEVNc01FSkJRWEZDTEVkQlFVY3NTVUZCU1N4eFFrRkJjVUlzUlVGQlJTeERRVUZETzFGQlEzQkVMR2RDUVVGWExFZEJRVWNzU1VGQlNTeFhRVUZYTEVWQlFVVXNRMEZCUXp0UlFVTm9ReXh6UWtGQmFVSXNSMEZCUnl4SlFVRkpMSFZDUVVGMVFpeEZRVUZGTEVOQlFVTTdVVUZEYkVRc2NVSkJRV2RDTEVkQlFVY3NTVUZCU1N4blFrRkJaMElzUlVGQlJTeERRVUZETzFGQlF6RkRMSE5DUVVGcFFpeEhRVUZITEVsQlFVa3NhVUpCUVdsQ0xFVkJRVVVzUTBGQlF6dFJRVU0xUXl4blFrRkJWeXhIUVVGSExFbEJRVWtzVjBGQlZ5eEZRVUZGTEVOQlFVTTdVVUZEYUVNc01FSkJRWEZDTEVkQlFVY3NTVUZCU1N4eFFrRkJjVUlzUlVGQlJTeERRVUZETzFGQlEzQkVMREJDUVVGeFFpeEhRVUZITEVsQlFVa3NjVUpCUVhGQ0xFVkJRVVVzUTBGQlF6dFJRVU53UkN3clFrRkJNRUlzUjBGQlJ5eEpRVUZKTERCQ1FVRXdRaXhGUVVGRkxFTkJRVU03U1VFd1IzaEZMRU5CUVVNN1NVRjJSMDhzUVVGQlRpeExRVUZMTEVOQlFVTXNNa0pCUVRKQ0xFTkJReTlDTEZGQlFUSkNMRVZCUXpOQ0xFZEJRVWNzU1VGQlZ6dFJRVTlrTEUxQlFVMHNUVUZCVFN4SFFVRkhMRTFCUVUwc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlF5OUZMRWxCUVVrc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0WlFVTXZRaXhOUVVGTkxFbEJRVWtzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhoUVVGaExFTkJRek5ETEUxQlFVMHNRMEZCUXl4RlFVRkZMRVZCUTFRc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF5eFZRVUZWTEVWQlF6RkNMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zWlVGQlpTeEZRVU12UWl4SFFVRkhMRWxCUVVrc1EwRkRVaXhEUVVGRE8xRkJRMG9zUTBGQlF6dFJRVVZFTEUxQlFVMHNZVUZCWVN4SFFVRkhMRXRCUVVzc1JVRkRla0lzVVVGQk5FSXNSVUZETlVJc1QwRkJlVUlzUlVGRFVDeEZRVUZGTzFsQlEzQkNMRTFCUVUwc1QwRkJUeXhIUVVOWUxGRkJRVkVzUzBGQlN5eFRRVUZUTzJkQ1FVTndRaXhEUVVGRExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRlZCUVZVc1EwRkRiRU1zVFVGQlRTeERRVUZETEVWQlFVVXNSVUZEVkN4UFFVRlBMRU5CUVVNc1NVRkJTU3hGUVVOYUxFOUJRVThzUTBGQlF5eFJRVUZSTEVWQlEyaENMRTlCUVU4c1EwRkJReXhWUVVGVkxFVkJRMnhDTEU5QlFVOHNRMEZCUXl4UlFVRlJMRVZCUTJoQ0xFZEJRVWNzU1VGQlNTeERRVU5TTzJkQ1FVTklMRU5CUVVNc1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNWMEZCVnl4RFFVTnVRenR2UWtGRFJTeFJRVUZSTEVWQlFVVXNUVUZCVFN4RFFVRkRMRVZCUVVVN2IwSkJRMjVDTEdWQlFXVXNSVUZCUlN4UlFVRlJPMjlDUVVONlFpeEpRVUZKTEVWQlFVVXNUMEZCVHl4RFFVRkRMRWxCUVVrN2IwSkJRMnhDTEZGQlFWRXNSVUZCUlN4UFFVRlBMRU5CUVVNc1VVRkJVVHR2UWtGRE1VSXNWVUZCVlN4RlFVRkZMRTlCUVU4c1EwRkJReXhWUVVGVk8yOUNRVU01UWl4bFFVRmxMRVZCUVVVc1QwRkJUeXhEUVVGRExGRkJRVkU3YVVKQlEyeERMRVZCUTBRc1IwRkJSeXhKUVVGSkxFTkJRMUlzUTBGQlF6dFpRVU5TTEV0QlFVc3NUVUZCVFN4TFFVRkxMRWxCUVVrc1QwRkJUeXhEUVVGRExGRkJRVkVzU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZCUXp0blFrRkRNME1zVFVGQlRTeGhRVUZoTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFpRVU42UXl4RFFVRkRPMWxCUTBRc1QwRkJUeXhQUVVGUExFTkJRVU03VVVGRGFrSXNRMEZCUXl4RFFVRkRPMUZCUlVZc1RVRkJUU3hYUVVGWExFZEJRVWNzVFVGQlRTeGhRVUZoTEVOQlFVTXNVMEZCVXl4RlFVRkZMRkZCUVZFc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dFJRVU42UlN4TlFVRk5MRXRCUVVzc1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNWVUZCVlN4RFFVRkRMRkZCUVZFc1EwRkJReXhUUVVGVExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTTNSU3hOUVVGTkxFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhsUVVGbExFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNSVUZCUlN4TFFVRkxMRU5CUVVNc1JVRkJSU3hGUVVGRkxHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEzQkhMRTFCUVUwc1kwRkJZeXhIUVVGSExFMUJRVTBzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJSV3hITEV0QlFVc3NUVUZCVFN4VlFVRlZMRWxCUVVrc1VVRkJVU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETzFsQlF6bERMRTFCUVUwc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMR2RDUVVGblFpeERRVUZETEZWQlFWVXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRM0pGTEVOQlFVTTdVVUZGUkN4TFFVRkxMRTFCUVUwc1NVRkJTU3hKUVVGSkxGRkJRVkVzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXp0WlFVTnNReXhOUVVGTkxGZEJRVmNzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1ZVRkJWU3hEUVVOdVJEdG5Ra0ZEUlN4UlFVRlJMRVZCUVVVc1RVRkJUU3hEUVVGRExFVkJRVVU3WjBKQlEyNUNMRWRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zUjBGQlJ6dG5Ra0ZEWWl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFbEJRVWs3WjBKQlEyWXNWMEZCVnl4RlFVRkZMRWxCUVVrc1EwRkJReXhYUVVGWE8yRkJRemxDTEVWQlEwUXNSMEZCUnl4SlFVRkpMRU5CUTFJc1EwRkJRenRaUVVOR0xFdEJRVXNzVFVGQlRTeGhRVUZoTEVsQlFVa3NTVUZCU1N4RFFVRkRMR05CUVdNc1JVRkJSU3hEUVVGRE8yZENRVU5vUkN4TlFVRk5MRWxCUVVrc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4elFrRkJjMElzUTBGRGNrUXNWMEZCVnl4RFFVRkRMRVZCUVVVc1JVRkRaQ3hoUVVGaExFVkJRMklzUjBGQlJ5eEpRVUZKTEVOQlExSXNRMEZCUXp0WlFVTktMRU5CUVVNN1VVRkRTQ3hEUVVGRE8xRkJSVVFzVFVGQlRTeFRRVUZUTEVkQlFVY3NUVUZCVFN4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExHdENRVUZyUWl4RFFVTjZSQ3hOUVVGTkxFTkJRVU1zUlVGQlJTeEZRVU5VTEZGQlFWRXNRMEZCUXl4WlFVRlpMRVZCUTNKQ0xFZEJRVWNzU1VGQlNTeERRVU5TTEVOQlFVTTdVVUZEUml4TlFVRk5MRWxCUVVrc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4VlFVRlZMRU5CUTNwRE8xbEJRMFVzVVVGQlVTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RlFVRkZPMWxCUTI1Q0xGZEJRVmNzUlVGQlJTeGpRVUZqTEVOQlFVTXNSVUZCUlR0WlFVTTVRaXhOUVVGTkxFVkJRVVVzVTBGQlV5eERRVUZETEVWQlFVVTdXVUZEY0VJc1UwRkJVeXhGUVVGRkxGTkJRVk1zUTBGQlF5eFBRVUZQTzFsQlF6VkNMRTlCUVU4c1JVRkJSU3hYUVVGWExFTkJRVU1zUlVGQlJUdFpRVU4yUWl4WFFVRlhMRVZCUVVVc1NVRkJTVHRUUVVOc1FpeEZRVU5FTEVkQlFVY3NTVUZCU1N4RFFVTlNMRU5CUVVNN1VVRkRSaXhOUVVGTkxFbEJRVWtzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxHTkJRV01zUTBGQlF5eEZRVUZGTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVWcVJ5eFBRVUZQTzFsQlEwd3NVVUZCVVN4RlFVRkZMRTFCUVUwc1EwRkJReXhGUVVGRk8xbEJRMjVDTEdGQlFXRXNSVUZCUlN4WFFVRlhMRU5CUVVNc1JVRkJSVHRaUVVNM1FpeFhRVUZYTEVWQlFVVXNTMEZCU3l4RFFVRkRMRVZCUVVVN1dVRkRja0lzWjBKQlFXZENMRVZCUVVVc1kwRkJZeXhEUVVGRExFVkJRVVU3VTBGRGNFTXNRMEZCUXp0SlFVTktMRU5CUVVNN1EwRkRSanRCUVhaSFR6dEpRVVJNTEdGQlFXRXNSVUZCUlRzN096dHRSVUYxUjJZN1FVRkhTQ3hOUVVGTkxFOUJRVThzZFVKQlFYVkNPMGxCUVhCRE8xRkJRMVVzYzBKQlFXbENMRWRCUVVjc1NVRkJTU3gxUWtGQmRVSXNSVUZCUlN4RFFVRkRPMUZCUTJ4RUxIbENRVUZ2UWl4SFFVRkhMRWxCUVVrc2QwSkJRWGRDTEVWQlFVVXNRMEZCUXp0UlFVTjBSQ3h4UWtGQlowSXNSMEZCUnl4SlFVRkpMR2RDUVVGblFpeEZRVUZGTEVOQlFVTTdVVUZETVVNc1owSkJRVmNzUjBGQlJ5eEpRVUZKTEZkQlFWY3NSVUZCUlN4RFFVRkRPMUZCUTJoRExEQkNRVUZ4UWl4SFFVRkhMRWxCUVVrc2NVSkJRWEZDTEVWQlFVVXNRMEZCUXp0UlFVTndSQ3dyUWtGQk1FSXNSMEZCUnl4SlFVRkpMREJDUVVFd1FpeEZRVUZGTEVOQlFVTTdTVUU0Um5oRkxFTkJRVU03U1VFelJrOHNRVUZCVGl4TFFVRkxMRU5CUVVNc05rSkJRVFpDTEVOQlEycERMRkZCUVdkQ0xFVkJRMmhDTEUxQlFXTXNSVUZEWkN4VFFVRnBRaXhGUVVOcVFpeFBRVUZsTEVWQlEyWXNSMEZCUnl4SlFVRlhPMUZCUldRc1RVRkJUU3hKUVVGSkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1pVRkJaU3hEUVVGRExGRkJRVkVzUlVGQlJTeE5RVUZOTEVWQlFVVXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRha2NzVFVGQlRTeEpRVUZKTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zWjBKQlFXZENMRU5CUXpsRExGRkJRVkVzUlVGRFVpeFRRVUZUTEVWQlExUXNUVUZCVFN4RlFVTk9MR2RDUVVGblFpeERRVUZETEUxQlFVMHNSVUZEZGtJc1IwRkJSeXhKUVVGSkxFTkJRMUlzUTBGQlF6dFJRVU5HTEUxQlFVMHNVMEZCVXl4SFFVRkhMRTFCUVUwc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMR2RDUVVGblFpeERRVUZETEZGQlFWRXNSVUZCUlN4TlFVRk5MRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU14Uml4TlFVRk5MRWxCUVVrc1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVVVGQlVTeEZRVUZGTEU5QlFVOHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMjVHTEUxQlFVMHNTVUZCU1N4RFFVRkRMSEZDUVVGeFFpeERRVUZETEZWQlFWVXNRMEZEZWtNN1dVRkRSU3hSUVVGUk8xbEJRMUlzVjBGQlZ5eEZRVUZGTEZOQlFWTXNRMEZCUXl4RlFVRkZPMWxCUTNwQ0xFMUJRVTBzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlR0WlFVTm1MRk5CUVZNc1JVRkJSU3hUUVVGVExFTkJRVU1zVDBGQlR6dFpRVU0xUWl4UFFVRlBMRVZCUVVVc1UwRkJVenRaUVVOc1FpeFhRVUZYTEVWQlFVVXNTVUZCU1R0VFFVTnNRaXhGUVVORUxFZEJRVWNzU1VGQlNTeERRVU5TTEVOQlFVTTdVVUZEUml4TlFVRk5MRWxCUVVrc1EwRkJReXd3UWtGQk1FSXNRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eFJRVUZSTEVWQlFVVXNVMEZCVXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlF6TkdMRTlCUVU4c1JVRkJSU3hYUVVGWExFVkJRVVVzVTBGQlV5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRPMGxCUTNaRExFTkJRVU03U1VGSFN5eEJRVUZPTEV0QlFVc3NRMEZCUXl4cFFrRkJhVUlzUTBGRGNrSXNVVUZCWjBJc1JVRkRhRUlzVjBGQmJVSXNSVUZEYmtJc1UwRkJhVUlzUlVGRGFrSXNUMEZCWlN4RlFVTm1MRmRCUVc5Q0xFVkJRM0JDTEVkQlFVY3NTVUZCVnp0UlFVVmtMRTFCUVUwc1NVRkJTU3hIUVVGSExFMUJRVTBzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eFJRVUZSTEVWQlFVVXNUMEZCVHl4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRGJrWXNUVUZCVFN4clFrRkJhMElzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eDNRa0ZCZDBJc1EwRkRiRVlzVVVGQlVTeEZRVU5TTEZkQlFWY3NSVUZEV0N4SFFVRkhMRWxCUVVrc1EwRkRVaXhEUVVGRE8xRkJRMFlzUzBGQlN5eE5RVUZOTEZWQlFWVXNTVUZCU1N4clFrRkJhMElzUTBGQlF5eE5RVUZOTEVOQlEyaEVMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4TFFVRkxMRk5CUVZNc1EwRkJReXhQUVVGUExFbEJRVWtzUjBGQlJ5eERRVUZETEU5QlFVOHNTMEZCU3l4VFFVRlRMRU5CUXpGRkxFVkJRVVVzUTBGQlF6dFpRVU5HTEUxQlFVMHNTVUZCU1N4RFFVRkRMSEZDUVVGeFFpeERRVUZETEdkQ1FVRm5RaXhEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVNMVJTeERRVUZETzFGQlEwUXNUVUZCVFN4SlFVRkpMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTXNWVUZCVlN4RFFVTjZRenRaUVVORkxGRkJRVkU3V1VGRFVpeFhRVUZYTzFsQlExZ3NUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRk8xbEJRMllzVTBGQlV5eEZRVUZGTEZOQlFWTXNRMEZCUXl4UFFVRlBPMWxCUXpWQ0xFOUJRVThzUlVGQlJTeFRRVUZUTzFsQlEyeENMRmRCUVZjN1UwRkRXaXhGUVVORUxFZEJRVWNzU1VGQlNTeERRVU5TTEVOQlFVTTdVVUZEUml4TlFVRk5MRWxCUVVrc1EwRkJReXd3UWtGQk1FSXNRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eFJRVUZSTEVWQlFVVXNWMEZCVnl4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRE5VWXNRMEZCUXp0SlFVZExMRUZCUVU0c1MwRkJTeXhEUVVGRExHMUNRVUZ0UWl4RFFVTjJRaXhyUWtGQk1FSXNSVUZETVVJc1VVRkJaMElzUlVGRGFFSXNWMEZCYlVJc1JVRkRia0lzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUVUZCVFN4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNVMEZCVXl4RFFVTndReXhyUWtGQmEwSXNSVUZEYkVJc1owSkJRV2RDTEVOQlFVTXNVMEZCVXl4RlFVTXhRaXhIUVVGSExFbEJRVWtzUTBGRFVpeERRVUZETzFGQlEwWXNUVUZCVFN4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVVVGQlVTeEZRVUZGTEZkQlFWY3NSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRek5HTEVOQlFVTTdTVUZIU3l4QlFVRk9MRXRCUVVzc1EwRkJReXh6UWtGQmMwSXNRMEZETVVJc2EwSkJRVEJDTEVWQlF6RkNMRkZCUVdkQ0xFVkJRMmhDTEZkQlFXMUNMRVZCUTI1Q0xFZEJRVWNzU1VGQlZ6dFJRVVZrTEUxQlFVMHNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVUZETEZOQlFWTXNRMEZCUXl4clFrRkJhMElzUlVGQlJTeG5Ra0ZCWjBJc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTTNSaXhOUVVGTkxFbEJRVWtzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4UlFVRlJMRVZCUVVVc1YwRkJWeXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdTVUZETlVZc1EwRkJRenREUVVOR08wRkJNMFpQTzBsQlJFd3NZVUZCWVN4RlFVRkZPenM3T3pSRlFTdENaanRCUVVkTE8wbEJSRXdzWVVGQllTeEZRVUZGT3pzN08yZEZRV2REWmp0QlFVZExPMGxCUkV3c1lVRkJZU3hGUVVGRk96czdPMnRGUVdGbU8wRkJSMHM3U1VGRVRDeGhRVUZoTEVWQlFVVTdPenM3Y1VWQlUyWWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdlMXh1SUNCQ1lYTmxUVzlrWld4VFpYSjJhV05sTEZ4dUlDQkpjMjlzWVhScGIyNVVhV1Z5TEZ4dUlDQk5aVzFpWlhKemFHbHdVM1JoZEhWekxGeHVJQ0JRWlhKdGFYTnphVzl1UTJGMFpXZHZjbmtzWEc0Z0lGQnlhVzVqYVhCaGJFdHBibVFzWEc0Z0lGSmxjMjkxY21ObFZtbHphV0pwYkdsMGVTeGNiaUFnVTJOdmNHVkxhVzVrTEZ4dUlDQlRkRzl5WVdkbFFtbHVaR2x1WjB0cGJtUXNYRzRnSUZOMGIzSmhaMlZMYVc1a0xGeHVJQ0JwWkN4Y2JpQWdjbVZzWVhScGIyNUpaQ3hjYmlBZ2RISmhibk5oWTNScGIyNWhiQ3hjYm4wZ1puSnZiU0JjSWk0dmIzSm5MV0poYzJWa0xXRjFkR2h2Y21sNllYUnBiMjR0YzNsemRHVnRYQ0k3WEc1cGJYQnZjblFnZEhsd1pTQjdYRzRnSUVGemMybG5ibEp2YkdWSmJuQjFkQ3hjYmlBZ1FtOXZkSE4wY21Gd1QzSm5WVzVwZEN4Y2JpQWdRbTl2ZEhOMGNtRndWR1Z0Y0d4aGRHVXNYRzRnSUVOaGJrRmpZMlZ6YzBsdWNIVjBMRnh1SUNCRGNtVmhkR1ZQY21kVmJtbDBTVzV3ZFhRc1hHNGdJRU55WldGMFpWQmxjbTFwYzNOcGIyNUpibkIxZEN4Y2JpQWdRM0psWVhSbFVtOXNaVWx1Y0hWMExGeHVJQ0JEY21WaGRHVlRkRzl5WVdkbFFtbHVaR2x1WjBsdWNIVjBMRnh1SUNCRGNtVmhkR1ZVWlc1aGJuUkpibkIxZEN4Y2JpQWdRM0psWVhSbFZYTmxja2x1Y0hWMExGeHVJQ0JGWm1abFkzUnBkbVZRWlhKdGFYTnphVzl1VTI1aGNITm9iM1FzWEc0Z0lFZHlZVzUwVW1WemIzVnlZMlZKYm5CMWRDeGNiaUFnVW1WbmFYTjBaWEpTWlhOdmRYSmpaVWx1Y0hWMExGeHVmU0JtY205dElGd2lMaTl2Y21jdFltRnpaV1F0WVhWMGFHOXlhWHBoZEdsdmJpMXplWE4wWlcxY0lqdGNibWx0Y0c5eWRDQjdYRzRnSUVWbVptVmpkR2wyWlZCbGNtMXBjM05wYjI0c1hHNGdJRWR5YjNWd0xGeHVJQ0JIY205MWNFMWxiV0psY25Ob2FYQXNYRzRnSUVsdWFHVnlhWFJoYm1ObFFteHZZMnNzWEc0Z0lFOXlaMVZ1YVhRc1hHNGdJRTl5WjFWdWFYUkRiRzl6ZFhKbExGeHVJQ0JQY21kVmJtbDBUV1Z0WW1WeWMyaHBjQ3hjYmlBZ1QzSm5WVzVwZEZCeWIyWnBiR1VzWEc0Z0lGQmxjbTFwYzNOcGIyNHNYRzRnSUZCeWIzUmxZM1JsWkZKbGMyOTFjbU5sTEZ4dUlDQlFjbWx1WTJsd1lXd3NYRzRnSUZKbGMyOTFjbU5sUjNKaGJuUXNYRzRnSUZKdmJHVXNYRzRnSUZKdmJHVkJjM05wWjI1dFpXNTBMRnh1SUNCU2IyeGxVR1Z5YldsemMybHZiaXhjYmlBZ1UzUnZjbUZuWlVKcGJtUnBibWNzWEc0Z0lGUmxibUZ1ZEN4Y2JpQWdWR1Z1WVc1MFRXVnRZbVZ5YzJocGNDeGNiaUFnVkdWdVlXNTBVSEp2Wm1sc1pTeGNiaUFnVlhObGNpeGNibjBnWm5KdmJTQmNJaTR2YjNKbkxXSmhjMlZrTFdGMWRHaHZjbWw2WVhScGIyNHRjM2x6ZEdWdExtMXZaR1ZzYzF3aU8xeHVYRzVqYjI1emRDQnViM2RKYzI4Z1BTQW9LU0E5UGlCdVpYY2dSR0YwWlNncE8xeHVZMjl1YzNRZ1lYTkJjbkpoZVNBOUlEeFVQaWgyWVd4MVpUb2dWRnRkSUh3Z2RXNWtaV1pwYm1Wa0tUb2dWRnRkSUQwK0lIWmhiSFZsSUQ4L0lGdGRPMXh1WTI5dWMzUWdjMkZ0WlZSbGJtRnVkQ0E5SUNoeWIzZFVaVzVoYm5RNklIVnVhMjV2ZDI0c0lIUmxibUZ1ZEVsa09pQnpkSEpwYm1jcE9pQmliMjlzWldGdUlEMCtYRzRnSUhKbGJHRjBhVzl1U1dRb2NtOTNWR1Z1WVc1MElHRnpJSHNnYVdRNklITjBjbWx1WnlCOUlId2djM1J5YVc1bktTQTlQVDBnZEdWdVlXNTBTV1E3WEc1amIyNXpkQ0J5Wld4aGRHbHZiazFoZEdOb0lEMGdLRnh1SUNCMllXeDFaVG9nZFc1cmJtOTNiaXhjYmlBZ2RHRnlaMlYwT2lCemRISnBibWNnZkNCMWJtUmxabWx1WldSY2JpazZJR0p2YjJ4bFlXNGdQVDRnS0hSaGNtZGxkQ0EvSUhKbGJHRjBhVzl1U1dRb2RtRnNkV1VnWVhNZ2V5QnBaRG9nYzNSeWFXNW5JSDBnZkNCemRISnBibWNwSUQwOVBTQjBZWEpuWlhRZ09pQm1ZV3h6WlNrN1hHNWpiMjV6ZENCc2IzZGxjbE5zZFdjZ1BTQW9kbUZzZFdVNklITjBjbWx1WnlrNklITjBjbWx1WnlBOVBseHVJQ0IyWVd4MVpWeHVJQ0FnSUM1MGNtbHRLQ2xjYmlBZ0lDQXVkRzlNYjNkbGNrTmhjMlVvS1Z4dUlDQWdJQzV5WlhCc1lXTmxLQzliWG1FdGVqQXRPVjByTDJjc0lGd2lMVndpS1Z4dUlDQWdJQzV5WlhCc1lXTmxLQzllTFN0OExTc2tMMmNzSUZ3aVhDSXBJSHg4SUZ3aWFYUmxiVndpTzF4dVhHNWhjM2x1WXlCbWRXNWpkR2x2YmlCa1pXeGxkR1ZOWVc1NVFubEpaQ2hjYmlBZ2MyVnlkbWxqWlRvZ1FtRnpaVTF2WkdWc1UyVnlkbWxqWlR4aGJuaytMRnh1SUNCeWIzZHpPaUJCY25KaGVUeDdJR2xrT2lCemRISnBibWNnZlQ0c1hHNGdJQzR1TG1GeVozTTZJR0Z1ZVZ0ZFhHNHBPaUJRY205dGFYTmxQSFp2YVdRK0lIdGNiaUFnWm05eUlDaGpiMjV6ZENCeWIzY2diMllnY205M2N5a2dlMXh1SUNBZ0lHRjNZV2wwSUhObGNuWnBZMlV1WkdWc1pYUmxRbmxKWkNoeWIzY3VhV1FzSUM0dUxtRnlaM01wTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJVWlc1aGJuUlFjbTltYVd4bFUyVnlkbWxqWlNCbGVIUmxibVJ6SUVKaGMyVk5iMlJsYkZObGNuWnBZMlU4VkdWdVlXNTBVSEp2Wm1sc1pUNGdlMXh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmlBZ0lDQnpkWEJsY2loVVpXNWhiblJRY205bWFXeGxLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR055WldGMFpWQnliMlpwYkdVb1hHNGdJQ0FnZEdWdVlXNTBTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQndjbTltYVd4bFMyVjVPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2JXVjBZV1JoZEdFL09pQlNaV052Y21ROGMzUnlhVzVuTENCMWJtdHViM2R1UGl4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEZSbGJtRnVkRkJ5YjJacGJHVStJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVqY21WaGRHVlBibVVvWEc0Z0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUdsa09pQnBaQ2dwTEZ4dUlDQWdJQ0FnSUNCMFpXNWhiblE2SUhSbGJtRnVkRWxrTEZ4dUlDQWdJQ0FnSUNCd2NtOW1hV3hsUzJWNUxGeHVJQ0FnSUNBZ0lDQnRaWFJoWkdGMFlTeGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ0lDQXVMaTVoY21kelhHNGdJQ0FnS1R0Y2JpQWdmVnh1WEc0Z0lHRnplVzVqSUd4cGMzUkdiM0pVWlc1aGJuUW9kR1Z1WVc1MFNXUTZJSE4wY21sdVp5d2dMaTR1WVhKbmN6b2dZVzU1VzEwcE9pQlFjbTl0YVhObFBGUmxibUZ1ZEZCeWIyWnBiR1ZiWFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUFvWVhkaGFYUWdkR2hwY3k1c2FYTjBRV3hzS0M0dUxtRnlaM01wS1M1bWFXeDBaWElvS0hCeWIyWnBiR1VwSUQwK1hHNGdJQ0FnSUNCeVpXeGhkR2x2YmsxaGRHTm9LSEJ5YjJacGJHVXVkR1Z1WVc1MExDQjBaVzVoYm5SSlpDbGNiaUFnSUNBcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ1pHVnNaWFJsUm05eVZHVnVZVzUwS0hSbGJtRnVkRWxrT2lCemRISnBibWNzSUM0dUxtRnlaM002SUdGdWVWdGRLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQjdYRzRnSUNBZ1lYZGhhWFFnWkdWc1pYUmxUV0Z1ZVVKNVNXUW9kR2hwY3l3Z1lYZGhhWFFnZEdocGN5NXNhWE4wUm05eVZHVnVZVzUwS0hSbGJtRnVkRWxrTENBdUxpNWhjbWR6S1N3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUU5eVoxVnVhWFJRY205bWFXeGxVMlZ5ZG1salpTQmxlSFJsYm1SeklFSmhjMlZOYjJSbGJGTmxjblpwWTJVOFQzSm5WVzVwZEZCeWIyWnBiR1UrSUh0Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNGdJQ0FnYzNWd1pYSW9UM0puVlc1cGRGQnliMlpwYkdVcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ1kzSmxZWFJsVUhKdlptbHNaU2hjYmlBZ0lDQnZjbWRWYm1sMFNXUTZJSE4wY21sdVp5eGNiaUFnSUNCd2NtOW1hV3hsUzJWNU9pQnpkSEpwYm1jc1hHNGdJQ0FnYldWMFlXUmhkR0UvT2lCU1pXTnZjbVE4YzNSeWFXNW5MQ0IxYm10dWIzZHVQaXhjYmlBZ0lDQXVMaTVoY21kek9pQmhibmxiWFZ4dUlDQXBPaUJRY205dGFYTmxQRTl5WjFWdWFYUlFjbTltYVd4bFBpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZM0psWVhSbFQyNWxLRnh1SUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0JwWkRvZ2FXUW9LU3hjYmlBZ0lDQWdJQ0FnYjNKblZXNXBkRG9nYjNKblZXNXBkRWxrTEZ4dUlDQWdJQ0FnSUNCd2NtOW1hV3hsUzJWNUxGeHVJQ0FnSUNBZ0lDQnRaWFJoWkdGMFlTeGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ0lDQXVMaTVoY21kelhHNGdJQ0FnS1R0Y2JpQWdmVnh1WEc0Z0lHRnplVzVqSUd4cGMzUkdiM0pQY21kVmJtbDBLRzl5WjFWdWFYUkpaRG9nYzNSeWFXNW5MQ0F1TGk1aGNtZHpPaUJoYm5sYlhTazZJRkJ5YjIxcGMyVThUM0puVlc1cGRGQnliMlpwYkdWYlhUNGdlMXh1SUNBZ0lISmxkSFZ5YmlBb1lYZGhhWFFnZEdocGN5NXNhWE4wUVd4c0tDNHVMbUZ5WjNNcEtTNW1hV3gwWlhJb0tIQnliMlpwYkdVcElEMCtYRzRnSUNBZ0lDQnlaV3hoZEdsdmJrMWhkR05vS0hCeWIyWnBiR1V1YjNKblZXNXBkQ3dnYjNKblZXNXBkRWxrS1Z4dUlDQWdJQ2s3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdOc1lYTnpJRTl5WjFWdWFYUkRiRzl6ZFhKbFUyVnlkbWxqWlNCbGVIUmxibVJ6SUVKaGMyVk5iMlJsYkZObGNuWnBZMlU4VDNKblZXNXBkRU5zYjNOMWNtVStJSHRjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc0Z0lDQWdjM1Z3WlhJb1QzSm5WVzVwZEVOc2IzTjFjbVVwTzF4dUlDQjlYRzVjYmlBZ1lYTjVibU1nYkdsemRFRnVZMlZ6ZEc5eWN5aGNiaUFnSUNCMFpXNWhiblJKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJRzl5WjFWdWFYUkpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lDNHVMbUZ5WjNNNklHRnVlVnRkWEc0Z0lDazZJRkJ5YjIxcGMyVThUM0puVlc1cGRFTnNiM04xY21WYlhUNGdlMXh1SUNBZ0lISmxkSFZ5YmlBb1lYZGhhWFFnZEdocGN5NXNhWE4wUVd4c0tDNHVMbUZ5WjNNcEtWeHVJQ0FnSUNBZ0xtWnBiSFJsY2loY2JpQWdJQ0FnSUNBZ0tISnZkeWtnUFQ1Y2JpQWdJQ0FnSUNBZ0lDQnpZVzFsVkdWdVlXNTBLSEp2ZHk1MFpXNWhiblFzSUhSbGJtRnVkRWxrS1NBbUpseHVJQ0FnSUNBZ0lDQWdJSEpsYkdGMGFXOXVUV0YwWTJnb2NtOTNMbVJsYzJObGJtUmhiblFzSUc5eVoxVnVhWFJKWkNsY2JpQWdJQ0FnSUNsY2JpQWdJQ0FnSUM1emIzSjBLQ2hzWldaMExDQnlhV2RvZENrZ1BUNGdiR1ZtZEM1a1pYQjBhQ0F0SUhKcFoyaDBMbVJsY0hSb0tUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklHeHBjM1JFWlhOalpXNWtZVzUwY3loY2JpQWdJQ0IwWlc1aGJuUkpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lHOXlaMVZ1YVhSSlpEb2djM1J5YVc1bkxGeHVJQ0FnSUM0dUxtRnlaM002SUdGdWVWdGRYRzRnSUNrNklGQnliMjFwYzJVOFQzSm5WVzVwZEVOc2IzTjFjbVZiWFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUFvWVhkaGFYUWdkR2hwY3k1c2FYTjBRV3hzS0M0dUxtRnlaM01wS1Z4dUlDQWdJQ0FnTG1acGJIUmxjaWhjYmlBZ0lDQWdJQ0FnS0hKdmR5a2dQVDVjYmlBZ0lDQWdJQ0FnSUNCellXMWxWR1Z1WVc1MEtISnZkeTUwWlc1aGJuUXNJSFJsYm1GdWRFbGtLU0FtSmx4dUlDQWdJQ0FnSUNBZ0lISmxiR0YwYVc5dVRXRjBZMmdvY205M0xtRnVZMlZ6ZEc5eUxDQnZjbWRWYm1sMFNXUXBYRzRnSUNBZ0lDQXBYRzRnSUNBZ0lDQXVjMjl5ZENnb2JHVm1kQ3dnY21sbmFIUXBJRDArSUd4bFpuUXVaR1Z3ZEdnZ0xTQnlhV2RvZEM1a1pYQjBhQ2s3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJwYzBGdVkyVnpkRzl5VDJZb1hHNGdJQ0FnZEdWdVlXNTBTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQmhibU5sYzNSdmNrOXlaMVZ1YVhSSlpEb2djM1J5YVc1bkxGeHVJQ0FnSUdSbGMyTmxibVJoYm5SUGNtZFZibWwwU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEdKdmIyeGxZVzQrSUh0Y2JpQWdJQ0J5WlhSMWNtNGdLR0YzWVdsMElIUm9hWE11YkdsemRFRnVZMlZ6ZEc5eWN5aDBaVzVoYm5SSlpDd2daR1Z6WTJWdVpHRnVkRTl5WjFWdWFYUkpaQ3dnTGk0dVlYSm5jeWtwTG5OdmJXVW9YRzRnSUNBZ0lDQW9jbTkzS1NBOVBpQnlaV3hoZEdsdmJrMWhkR05vS0hKdmR5NWhibU5sYzNSdmNpd2dZVzVqWlhOMGIzSlBjbWRWYm1sMFNXUXBYRzRnSUNBZ0tUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklHTnlaV0YwWlZObGJHWk1hVzVyS0Z4dUlDQWdJSFJsYm1GdWRFbGtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2IzSm5WVzVwZEVsa09pQnpkSEpwYm1jc1hHNGdJQ0FnTGk0dVlYSm5jem9nWVc1NVcxMWNiaUFnS1RvZ1VISnZiV2x6WlR4UGNtZFZibWwwUTJ4dmMzVnlaVDRnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1OeVpXRjBaVTl1WlNoY2JpQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ2FXUTZJR2xrS0Nrc1hHNGdJQ0FnSUNBZ0lIUmxibUZ1ZERvZ2RHVnVZVzUwU1dRc1hHNGdJQ0FnSUNBZ0lHRnVZMlZ6ZEc5eU9pQnZjbWRWYm1sMFNXUXNYRzRnSUNBZ0lDQWdJR1JsYzJObGJtUmhiblE2SUc5eVoxVnVhWFJKWkN4Y2JpQWdJQ0FnSUNBZ1pHVndkR2c2SURBc1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0xpNHVZWEpuYzF4dUlDQWdJQ2s3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJwYm5ObGNuUkJibU5sYzNSdmNreHBibXR6Um05eVRtVjNRMmhwYkdRb1hHNGdJQ0FnZEdWdVlXNTBTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQndZWEpsYm5SUGNtZFZibWwwU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0JqYUdsc1pFOXlaMVZ1YVhSSlpEb2djM1J5YVc1bkxGeHVJQ0FnSUM0dUxtRnlaM002SUdGdWVWdGRYRzRnSUNrNklGQnliMjFwYzJVOGRtOXBaRDRnZTF4dUlDQWdJR052Ym5OMElHRnVZMlZ6ZEc5eVRHbHVhM01nUFNCaGQyRnBkQ0IwYUdsekxteHBjM1JCYm1ObGMzUnZjbk1vZEdWdVlXNTBTV1FzSUhCaGNtVnVkRTl5WjFWdWFYUkpaQ3dnTGk0dVlYSm5jeWs3WEc0Z0lDQWdZWGRoYVhRZ1VISnZiV2x6WlM1aGJHd29YRzRnSUNBZ0lDQmhibU5sYzNSdmNreHBibXR6TG0xaGNDZ29iR2x1YXlrZ1BUNWNiaUFnSUNBZ0lDQWdkR2hwY3k1amNtVmhkR1ZQYm1Vb1hHNGdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXUTZJR2xrS0Nrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwWlc1aGJuUTZJSFJsYm1GdWRFbGtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1lXNWpaWE4wYjNJNklHeHBibXN1WVc1alpYTjBiM0lzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmtaWE5qWlc1a1lXNTBPaUJqYUdsc1pFOXlaMVZ1YVhSSlpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUdSbGNIUm9PaUJzYVc1ckxtUmxjSFJvSUNzZ01TeGNiaUFnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDNHVMbUZ5WjNOY2JpQWdJQ0FnSUNBZ0tWeHVJQ0FnSUNBZ0tWeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCa1pXeGxkR1ZNYVc1cmMwWnZjbE4xWW5SeVpXVW9YRzRnSUNBZ2RHVnVZVzUwU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0J2Y21kVmJtbDBTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQXVMaTVoY21kek9pQmhibmxiWFZ4dUlDQXBPaUJRY205dGFYTmxQSFp2YVdRK0lIdGNiaUFnSUNCamIyNXpkQ0J6ZFdKMGNtVmxJRDBnWVhkaGFYUWdkR2hwY3k1c2FYTjBSR1Z6WTJWdVpHRnVkSE1vZEdWdVlXNTBTV1FzSUc5eVoxVnVhWFJKWkN3Z0xpNHVZWEpuY3lrN1hHNGdJQ0FnWTI5dWMzUWdaR1Z6WTJWdVpHRnVkRWxrY3lBOUlHNWxkeUJUWlhRb1cxeHVJQ0FnSUNBZ2IzSm5WVzVwZEVsa0xGeHVJQ0FnSUNBZ0xpNHVjM1ZpZEhKbFpTNXRZWEFvS0hKdmR5a2dQVDRnY21Wc1lYUnBiMjVKWkNoeWIzY3VaR1Z6WTJWdVpHRnVkQ2twTEZ4dUlDQWdJRjBwTzF4dUlDQWdJR052Ym5OMElHRnVZMlZ6ZEc5eVNXUnpJRDBnYm1WM0lGTmxkQ2hiWEc0Z0lDQWdJQ0J2Y21kVmJtbDBTV1FzWEc0Z0lDQWdJQ0F1TGk1emRXSjBjbVZsTG0xaGNDZ29jbTkzS1NBOVBpQnlaV3hoZEdsdmJrbGtLSEp2ZHk1aGJtTmxjM1J2Y2lrcExGeHVJQ0FnSUYwcE8xeHVJQ0FnSUdOdmJuTjBJSEp2ZDNNZ1BTQW9ZWGRoYVhRZ2RHaHBjeTVzYVhOMFFXeHNLQzR1TG1GeVozTXBLUzVtYVd4MFpYSW9YRzRnSUNBZ0lDQW9jbTkzS1NBOVBseHVJQ0FnSUNBZ0lDQnpZVzFsVkdWdVlXNTBLSEp2ZHk1MFpXNWhiblFzSUhSbGJtRnVkRWxrS1NBbUpseHVJQ0FnSUNBZ0lDQW9aR1Z6WTJWdVpHRnVkRWxrY3k1b1lYTW9jbVZzWVhScGIyNUpaQ2h5YjNjdVpHVnpZMlZ1WkdGdWRDa3BJSHg4WEc0Z0lDQWdJQ0FnSUNBZ1lXNWpaWE4wYjNKSlpITXVhR0Z6S0hKbGJHRjBhVzl1U1dRb2NtOTNMbUZ1WTJWemRHOXlLU2twWEc0Z0lDQWdLVHRjYmlBZ0lDQmhkMkZwZENCa1pXeGxkR1ZOWVc1NVFubEpaQ2gwYUdsekxDQnliM2R6TENBdUxpNWhjbWR6S1R0Y2JpQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyeGhjM01nU1c1b1pYSnBkR0Z1WTJWQ2JHOWphMU5sY25acFkyVWdaWGgwWlc1a2N5QkNZWE5sVFc5a1pXeFRaWEoyYVdObFBFbHVhR1Z5YVhSaGJtTmxRbXh2WTJzK0lIdGNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzRnSUNBZ2MzVndaWElvU1c1b1pYSnBkR0Z1WTJWQ2JHOWpheWs3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJpYkc5amEwTmhkR1ZuYjNKNUtGeHVJQ0FnSUhSbGJtRnVkRWxrT2lCemRISnBibWNzWEc0Z0lDQWdiM0puVlc1cGRFbGtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2NHVnliV2x6YzJsdmJrTmhkR1ZuYjNKNU9pQlFaWEp0YVhOemFXOXVRMkYwWldkdmNua3NYRzRnSUNBZ1lteHZZMnRsWkVaeWIyMUJibU5sYzNSdmNrbGtQem9nYzNSeWFXNW5MRnh1SUNBZ0lISmxZWE52Ymo4NklITjBjbWx1Wnl4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEVsdWFHVnlhWFJoYm1ObFFteHZZMnMrSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amNtVmhkR1ZQYm1Vb1hHNGdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lHbGtPaUJwWkNncExGeHVJQ0FnSUNBZ0lDQjBaVzVoYm5RNklIUmxibUZ1ZEVsa0xGeHVJQ0FnSUNBZ0lDQnZjbWRWYm1sME9pQnZjbWRWYm1sMFNXUXNYRzRnSUNBZ0lDQWdJR0pzYjJOclpXUkdjbTl0UVc1alpYTjBiM0k2SUdKc2IyTnJaV1JHY205dFFXNWpaWE4wYjNKSlpDeGNiaUFnSUNBZ0lDQWdjR1Z5YldsemMybHZia05oZEdWbmIzSjVMRnh1SUNBZ0lDQWdJQ0J5WldGemIyNHNYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdMaTR1WVhKbmMxeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCMWJtSnNiMk5yUTJGMFpXZHZjbmtvWW14dlkydEpaRG9nYzNSeWFXNW5MQ0F1TGk1aGNtZHpPaUJoYm5sYlhTazZJRkJ5YjIxcGMyVThkbTlwWkQ0Z2UxeHVJQ0FnSUdGM1lXbDBJSFJvYVhNdVpHVnNaWFJsUW5sSlpDaGliRzlqYTBsa0xDQXVMaTVoY21kektUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklHeHBjM1JHYjNKUGNtZFZibWwwS0Z4dUlDQWdJSFJsYm1GdWRFbGtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2IzSm5WVzVwZEVsa09pQnpkSEpwYm1jc1hHNGdJQ0FnTGk0dVlYSm5jem9nWVc1NVcxMWNiaUFnS1RvZ1VISnZiV2x6WlR4SmJtaGxjbWwwWVc1alpVSnNiMk5yVzEwK0lIdGNiaUFnSUNCeVpYUjFjbTRnS0dGM1lXbDBJSFJvYVhNdWJHbHpkRUZzYkNndUxpNWhjbWR6S1NrdVptbHNkR1Z5S0Z4dUlDQWdJQ0FnS0dKc2IyTnJLU0E5UGx4dUlDQWdJQ0FnSUNCellXMWxWR1Z1WVc1MEtHSnNiMk5yTG5SbGJtRnVkQ3dnZEdWdVlXNTBTV1FwSUNZbUlISmxiR0YwYVc5dVRXRjBZMmdvWW14dlkyc3ViM0puVlc1cGRDd2diM0puVlc1cGRFbGtLVnh1SUNBZ0lDazdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QmpZWFJsWjI5eWVVSnNiMk5yWldSR2IzSkJibU5sYzNSdmNpaGNiaUFnSUNCMFpXNWhiblJKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJRzl5WjFWdWFYUkpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lHRnVZMlZ6ZEc5eVQzSm5WVzVwZEVsa09pQnpkSEpwYm1jc1hHNGdJQ0FnWTJGMFpXZHZjbms2SUZCbGNtMXBjM05wYjI1RFlYUmxaMjl5ZVN4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEdKdmIyeGxZVzQrSUh0Y2JpQWdJQ0J5WlhSMWNtNGdLR0YzWVdsMElIUm9hWE11YkdsemRFWnZjazl5WjFWdWFYUW9kR1Z1WVc1MFNXUXNJRzl5WjFWdWFYUkpaQ3dnTGk0dVlYSm5jeWtwTG5OdmJXVW9YRzRnSUNBZ0lDQW9ZbXh2WTJzcElEMCtYRzRnSUNBZ0lDQWdJR0pzYjJOckxuQmxjbTFwYzNOcGIyNURZWFJsWjI5eWVTQTlQVDBnWTJGMFpXZHZjbmtnSmlaY2JpQWdJQ0FnSUNBZ0tDRmliRzlqYXk1aWJHOWphMlZrUm5KdmJVRnVZMlZ6ZEc5eUlIeDhYRzRnSUNBZ0lDQWdJQ0FnY21Wc1lYUnBiMjVOWVhSamFDaGliRzlqYXk1aWJHOWphMlZrUm5KdmJVRnVZMlZ6ZEc5eUxDQmhibU5sYzNSdmNrOXlaMVZ1YVhSSlpDa3BYRzRnSUNBZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1ZHVnVZVzUwVTJWeWRtbGpaU0JsZUhSbGJtUnpJRUpoYzJWTmIyUmxiRk5sY25acFkyVThWR1Z1WVc1MFBpQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtDa2dlMXh1SUNBZ0lITjFjR1Z5S0ZSbGJtRnVkQ2s3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJqY21WaGRHVlVaVzVoYm5Rb2FXNXdkWFE2SUVOeVpXRjBaVlJsYm1GdWRFbHVjSFYwTENBdUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4VkdWdVlXNTBQaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WTNKbFlYUmxUMjVsS0Z4dUlDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNCcFpEb2dhV1FvS1N4Y2JpQWdJQ0FnSUNBZ2MyeDFaem9nYVc1d2RYUXVjMngxWnl4Y2JpQWdJQ0FnSUNBZ2JtRnRaVG9nYVc1d2RYUXVibUZ0WlN4Y2JpQWdJQ0FnSUNBZ2FYTnZiR0YwYVc5dVZHbGxjam9nYVc1d2RYUXVhWE52YkdGMGFXOXVWR2xsY2lBL1B5QkpjMjlzWVhScGIyNVVhV1Z5TGxCdmIyeGxaQ3hjYmlBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0F1TGk1aGNtZHpYRzRnSUNBZ0tUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklHZGxkRUo1VTJ4MVp5aHpiSFZuT2lCemRISnBibWNzSUM0dUxtRnlaM002SUdGdWVWdGRLVG9nVUhKdmJXbHpaVHhVWlc1aGJuUStJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVtYVc1a1QyNWxRbmtvWENKemJIVm5YQ0lzSUhOc2RXY2dZWE1nYm1WMlpYSXNJQzR1TG1GeVozTXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdjbVZ1WVcxbFZHVnVZVzUwS0hSbGJtRnVkRWxrT2lCemRISnBibWNzSUc1aGJXVTZJSE4wY21sdVp5d2dMaTR1WVhKbmN6b2dZVzU1VzEwcE9pQlFjbTl0YVhObFBGUmxibUZ1ZEQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuVndaR0YwWlU5dVpTaDBaVzVoYm5SSlpDd2dleUJ1WVcxbElIMHNJQzR1TG1GeVozTXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdZMmhoYm1kbFUyeDFaeWgwWlc1aGJuUkpaRG9nYzNSeWFXNW5MQ0J6YkhWbk9pQnpkSEpwYm1jc0lDNHVMbUZ5WjNNNklHRnVlVnRkS1RvZ1VISnZiV2x6WlR4VVpXNWhiblErSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1MWNHUmhkR1ZQYm1Vb2RHVnVZVzUwU1dRc0lIc2djMngxWnlCOUxDQXVMaTVoY21kektUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklITmxkRWx6YjJ4aGRHbHZibFJwWlhJb1hHNGdJQ0FnZEdWdVlXNTBTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQnBjMjlzWVhScGIyNVVhV1Z5T2lCSmMyOXNZWFJwYjI1VWFXVnlMRnh1SUNBZ0lDNHVMbUZ5WjNNNklHRnVlVnRkWEc0Z0lDazZJRkJ5YjIxcGMyVThWR1Z1WVc1MFBpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVkWEJrWVhSbFQyNWxLSFJsYm1GdWRFbGtMQ0I3SUdsemIyeGhkR2x2YmxScFpYSWdmU3dnTGk0dVlYSm5jeWs3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJrWld4bGRHVlVaVzVoYm5SRGIyNTBjbTlzYkdWa0tIUmxibUZ1ZEVsa09pQnpkSEpwYm1jc0lDNHVMbUZ5WjNNNklHRnVlVnRkS1RvZ1VISnZiV2x6WlR4MmIybGtQaUI3WEc0Z0lDQWdZWGRoYVhRZ2RHaHBjeTVrWld4bGRHVkNlVWxrS0hSbGJtRnVkRWxrTENBdUxpNWhjbWR6S1R0Y2JpQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyeGhjM01nVDNKblZXNXBkRk5sY25acFkyVWdaWGgwWlc1a2N5QkNZWE5sVFc5a1pXeFRaWEoyYVdObFBFOXlaMVZ1YVhRK0lIdGNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzRnSUNBZ2MzVndaWElvVDNKblZXNXBkQ2s3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUc5eVoxVnVhWFJRWVhSb0tIQmhjbVZ1ZEZCaGRHZzZJSE4wY21sdVp5QjhJSFZ1WkdWbWFXNWxaQ3dnYm1GdFpUb2djM1J5YVc1bktUb2djM1J5YVc1bklIdGNiaUFnSUNCamIyNXpkQ0J6WldkdFpXNTBJRDBnYkc5M1pYSlRiSFZuS0c1aGJXVXBPMXh1SUNBZ0lISmxkSFZ5YmlCd1lYSmxiblJRWVhSb0lEOGdZQ1I3Y0dGeVpXNTBVR0YwYUM1eVpYQnNZV05sS0M5Y1hDOHJKQzhzSUZ3aVhDSXBmUzhrZTNObFoyMWxiblI5WUNBNklHQXZKSHR6WldkdFpXNTBmV0E3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUdGemVXNWpJR055WldGMFpWQnliMlpwYkdWSlprNWxaV1JsWkNoY2JpQWdJQ0J2Y21kVmJtbDBTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQndjbTltYVd4bFMyVjVPaUJ6ZEhKcGJtY2dmQ0IxYm1SbFptbHVaV1FzWEc0Z0lDQWdjSEp2Wm1sc1pVMWxkR0ZrWVhSaE9pQlNaV052Y21ROGMzUnlhVzVuTENCMWJtdHViM2R1UGlCOElIVnVaR1ZtYVc1bFpDeGNiaUFnSUNBdUxpNWhjbWR6T2lCaGJubGJYVnh1SUNBcE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdJQ0JwWmlBb0lYQnliMlpwYkdWTFpYa3BJSEpsZEhWeWJqdGNiaUFnSUNCamIyNXpkQ0J3Y205bWFXeGxVMlZ5ZG1salpTQTlJRzVsZHlCUGNtZFZibWwwVUhKdlptbHNaVk5sY25acFkyVW9LVHRjYmlBZ0lDQmhkMkZwZENCd2NtOW1hV3hsVTJWeWRtbGpaUzVqY21WaGRHVlFjbTltYVd4bEtHOXlaMVZ1YVhSSlpDd2djSEp2Wm1sc1pVdGxlU3dnY0hKdlptbHNaVTFsZEdGa1lYUmhMQ0F1TGk1aGNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUVCMGNtRnVjMkZqZEdsdmJtRnNLQ2xjYmlBZ1lYTjVibU1nWTNKbFlYUmxVbTl2ZENoY2JpQWdJQ0IwWlc1aGJuUkpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lHNWhiV1U2SUhOMGNtbHVaeXhjYmlBZ0lDQnRaWFJoWkdGMFlUODZJRkpsWTI5eVpEeHpkSEpwYm1jc0lIVnVhMjV2ZDI0K0xGeHVJQ0FnSUhCeWIyWnBiR1ZMWlhrL09pQnpkSEpwYm1jc1hHNGdJQ0FnY0hKdlptbHNaVTFsZEdGa1lYUmhQem9nVW1WamIzSmtQSE4wY21sdVp5d2dkVzVyYm05M2JqNHNYRzRnSUNBZ0xpNHVZWEpuY3pvZ1lXNTVXMTFjYmlBZ0tUb2dVSEp2YldselpUeFBjbWRWYm1sMFBpQjdYRzRnSUNBZ1kyOXVjM1FnYjNKblZXNXBkQ0E5SUdGM1lXbDBJSFJvYVhNdVkzSmxZWFJsVDI1bEtGeHVJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQnBaRG9nYVdRb0tTeGNiaUFnSUNBZ0lDQWdkR1Z1WVc1ME9pQjBaVzVoYm5SSlpDeGNiaUFnSUNBZ0lDQWdibUZ0WlN4Y2JpQWdJQ0FnSUNBZ2NHRjBhRG9nZEdocGN5NXZjbWRWYm1sMFVHRjBhQ2gxYm1SbFptbHVaV1FzSUc1aGJXVXBMRnh1SUNBZ0lDQWdJQ0J0WlhSaFpHRjBZU3hjYmlBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0F1TGk1aGNtZHpYRzRnSUNBZ0tUdGNiaUFnSUNCaGQyRnBkQ0IwYUdsekxtTnlaV0YwWlZCeWIyWnBiR1ZKWms1bFpXUmxaQ2h2Y21kVmJtbDBMbWxrTENCd2NtOW1hV3hsUzJWNUxDQndjbTltYVd4bFRXVjBZV1JoZEdFc0lDNHVMbUZ5WjNNcE8xeHVJQ0FnSUdOdmJuTjBJR05zYjNOMWNtVlRaWEoyYVdObElEMGdibVYzSUU5eVoxVnVhWFJEYkc5emRYSmxVMlZ5ZG1salpTZ3BPMXh1SUNBZ0lHRjNZV2wwSUdOc2IzTjFjbVZUWlhKMmFXTmxMbU55WldGMFpWTmxiR1pNYVc1cktIUmxibUZ1ZEVsa0xDQnZjbWRWYm1sMExtbGtMQ0F1TGk1aGNtZHpLVHRjYmlBZ0lDQnlaWFIxY200Z2IzSm5WVzVwZER0Y2JpQWdmVnh1WEc0Z0lFQjBjbUZ1YzJGamRHbHZibUZzS0NsY2JpQWdZWE41Ym1NZ1kzSmxZWFJsUTJocGJHUW9hVzV3ZFhRNklFTnlaV0YwWlU5eVoxVnVhWFJKYm5CMWRDd2dMaTR1WVhKbmN6b2dZVzU1VzEwcE9pQlFjbTl0YVhObFBFOXlaMVZ1YVhRK0lIdGNiaUFnSUNCamIyNXpkQ0J3WVhKbGJuUWdQU0JwYm5CMWRDNXdZWEpsYm5SUGNtZFZibWwwU1dSY2JpQWdJQ0FnSUQ4Z1lYZGhhWFFnZEdocGN5NW5aWFJDZVVsa0tHbHVjSFYwTG5CaGNtVnVkRTl5WjFWdWFYUkpaQ3dnTGk0dVlYSm5jeWxjYmlBZ0lDQWdJRG9nZFc1a1pXWnBibVZrTzF4dUlDQWdJR052Ym5OMElHOXlaMVZ1YVhRZ1BTQmhkMkZwZENCMGFHbHpMbU55WldGMFpVOXVaU2hjYmlBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnYVdRNklHbGtLQ2tzWEc0Z0lDQWdJQ0FnSUhSbGJtRnVkRG9nYVc1d2RYUXVkR1Z1WVc1MFNXUXNYRzRnSUNBZ0lDQWdJSEJoY21WdWREb2djR0Z5Wlc1MFB5NXBaQ0EvUHlCcGJuQjFkQzV3WVhKbGJuUlBjbWRWYm1sMFNXUXNYRzRnSUNBZ0lDQWdJRzVoYldVNklHbHVjSFYwTG01aGJXVXNYRzRnSUNBZ0lDQWdJSEJoZEdnNklIUm9hWE11YjNKblZXNXBkRkJoZEdnb2NHRnlaVzUwUHk1d1lYUm9MQ0JwYm5CMWRDNXVZVzFsS1N4Y2JpQWdJQ0FnSUNBZ2JXVjBZV1JoZEdFNklHbHVjSFYwTG0xbGRHRmtZWFJoTEZ4dUlDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUM0dUxtRnlaM05jYmlBZ0lDQXBPMXh1SUNBZ0lHRjNZV2wwSUhSb2FYTXVZM0psWVhSbFVISnZabWxzWlVsbVRtVmxaR1ZrS0Z4dUlDQWdJQ0FnYjNKblZXNXBkQzVwWkN4Y2JpQWdJQ0FnSUdsdWNIVjBMbkJ5YjJacGJHVkxaWGtzWEc0Z0lDQWdJQ0JwYm5CMWRDNXdjbTltYVd4bFRXVjBZV1JoZEdFc1hHNGdJQ0FnSUNBdUxpNWhjbWR6WEc0Z0lDQWdLVHRjYmlBZ0lDQmpiMjV6ZENCamJHOXpkWEpsVTJWeWRtbGpaU0E5SUc1bGR5QlBjbWRWYm1sMFEyeHZjM1Z5WlZObGNuWnBZMlVvS1R0Y2JpQWdJQ0JoZDJGcGRDQmpiRzl6ZFhKbFUyVnlkbWxqWlM1amNtVmhkR1ZUWld4bVRHbHVheWhwYm5CMWRDNTBaVzVoYm5SSlpDd2diM0puVlc1cGRDNXBaQ3dnTGk0dVlYSm5jeWs3WEc0Z0lDQWdhV1lnS0dsdWNIVjBMbkJoY21WdWRFOXlaMVZ1YVhSSlpDa2dlMXh1SUNBZ0lDQWdZWGRoYVhRZ1kyeHZjM1Z5WlZObGNuWnBZMlV1YVc1elpYSjBRVzVqWlhOMGIzSk1hVzVyYzBadmNrNWxkME5vYVd4a0tGeHVJQ0FnSUNBZ0lDQnBibkIxZEM1MFpXNWhiblJKWkN4Y2JpQWdJQ0FnSUNBZ2FXNXdkWFF1Y0dGeVpXNTBUM0puVlc1cGRFbGtMRnh1SUNBZ0lDQWdJQ0J2Y21kVmJtbDBMbWxrTEZ4dUlDQWdJQ0FnSUNBdUxpNWhjbWR6WEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2IzSm5WVzVwZER0Y2JpQWdmVnh1WEc0Z0lHRnplVzVqSUd4cGMzUkRhR2xzWkhKbGJpaHdZWEpsYm5SUGNtZFZibWwwU1dRNklITjBjbWx1Wnl3Z0xpNHVZWEpuY3pvZ1lXNTVXMTBwT2lCUWNtOXRhWE5sUEU5eVoxVnVhWFJiWFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUFvWVhkaGFYUWdkR2hwY3k1c2FYTjBRV3hzS0M0dUxtRnlaM01wS1M1bWFXeDBaWElvS0c5eVoxVnVhWFFwSUQwK1hHNGdJQ0FnSUNCeVpXeGhkR2x2YmsxaGRHTm9LRzl5WjFWdWFYUXVjR0Z5Wlc1MExDQndZWEpsYm5SUGNtZFZibWwwU1dRcFhHNGdJQ0FnS1R0Y2JpQWdmVnh1WEc0Z0lHRnplVzVqSUd4cGMzUlVaVzVoYm5SUGNtZFZibWwwY3loMFpXNWhiblJKWkRvZ2MzUnlhVzVuTENBdUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4VDNKblZXNXBkRnRkUGlCN1hHNGdJQ0FnY21WMGRYSnVJQ2hoZDJGcGRDQjBhR2x6TG14cGMzUkJiR3dvTGk0dVlYSm5jeWtwTG1acGJIUmxjaWdvYjNKblZXNXBkQ2tnUFQ1Y2JpQWdJQ0FnSUhOaGJXVlVaVzVoYm5Rb2IzSm5WVzVwZEM1MFpXNWhiblFzSUhSbGJtRnVkRWxrS1Z4dUlDQWdJQ2s3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJzYVhOMFJHVnpZMlZ1WkdGdWRFOXlaMVZ1YVhSektGeHVJQ0FnSUhSbGJtRnVkRWxrT2lCemRISnBibWNzWEc0Z0lDQWdiM0puVlc1cGRFbGtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2FXNWpiSFZrWlZObGJHWWdQU0JtWVd4elpTeGNiaUFnSUNBdUxpNWhjbWR6T2lCaGJubGJYVnh1SUNBcE9pQlFjbTl0YVhObFBFOXlaMVZ1YVhSYlhUNGdlMXh1SUNBZ0lHTnZibk4wSUdOc2IzTjFjbVZUWlhKMmFXTmxJRDBnYm1WM0lFOXlaMVZ1YVhSRGJHOXpkWEpsVTJWeWRtbGpaU2dwTzF4dUlDQWdJR052Ym5OMElHUmxjMk5sYm1SaGJuUnpJRDBnWVhkaGFYUWdZMnh2YzNWeVpWTmxjblpwWTJVdWJHbHpkRVJsYzJObGJtUmhiblJ6S0hSbGJtRnVkRWxrTENCdmNtZFZibWwwU1dRc0lDNHVMbUZ5WjNNcE8xeHVJQ0FnSUdOdmJuTjBJR2xrY3lBOUlHNWxkeUJUWlhRb1pHVnpZMlZ1WkdGdWRITXViV0Z3S0NoeWIzY3BJRDArSUhKbGJHRjBhVzl1U1dRb2NtOTNMbVJsYzJObGJtUmhiblFwS1NrN1hHNGdJQ0FnYVdZZ0tHbHVZMngxWkdWVFpXeG1LU0JwWkhNdVlXUmtLRzl5WjFWdWFYUkpaQ2s3WEc0Z0lDQWdjbVYwZFhKdUlDaGhkMkZwZENCMGFHbHpMbXhwYzNSVVpXNWhiblJQY21kVmJtbDBjeWgwWlc1aGJuUkpaQ3dnTGk0dVlYSm5jeWtwTG1acGJIUmxjaWdvYjNKblZXNXBkQ2tnUFQ1Y2JpQWdJQ0FnSUdsa2N5NW9ZWE1vYjNKblZXNXBkQzVwWkNsY2JpQWdJQ0FwTzF4dUlDQjlYRzVjYmlBZ1lYTjVibU1nYkdsemRFRnVZMlZ6ZEc5eVQzSm5WVzVwZEhNb1hHNGdJQ0FnZEdWdVlXNTBTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQnZjbWRWYm1sMFNXUTZJSE4wY21sdVp5eGNiaUFnSUNCcGJtTnNkV1JsVTJWc1ppQTlJR1poYkhObExGeHVJQ0FnSUM0dUxtRnlaM002SUdGdWVWdGRYRzRnSUNrNklGQnliMjFwYzJVOFQzSm5WVzVwZEZ0ZFBpQjdYRzRnSUNBZ1kyOXVjM1FnWTJ4dmMzVnlaVk5sY25acFkyVWdQU0J1WlhjZ1QzSm5WVzVwZEVOc2IzTjFjbVZUWlhKMmFXTmxLQ2s3WEc0Z0lDQWdZMjl1YzNRZ1lXNWpaWE4wYjNKeklEMGdZWGRoYVhRZ1kyeHZjM1Z5WlZObGNuWnBZMlV1YkdsemRFRnVZMlZ6ZEc5eWN5aDBaVzVoYm5SSlpDd2diM0puVlc1cGRFbGtMQ0F1TGk1aGNtZHpLVHRjYmlBZ0lDQmpiMjV6ZENCcFpITWdQU0J1WlhjZ1UyVjBLR0Z1WTJWemRHOXljeTV0WVhBb0tISnZkeWtnUFQ0Z2NtVnNZWFJwYjI1SlpDaHliM2N1WVc1alpYTjBiM0lwS1NrN1hHNGdJQ0FnYVdZZ0tHbHVZMngxWkdWVFpXeG1LU0JwWkhNdVlXUmtLRzl5WjFWdWFYUkpaQ2s3WEc0Z0lDQWdjbVYwZFhKdUlDaGhkMkZwZENCMGFHbHpMbXhwYzNSVVpXNWhiblJQY21kVmJtbDBjeWgwWlc1aGJuUkpaQ3dnTGk0dVlYSm5jeWtwTG1acGJIUmxjaWdvYjNKblZXNXBkQ2tnUFQ1Y2JpQWdJQ0FnSUdsa2N5NW9ZWE1vYjNKblZXNXBkQzVwWkNsY2JpQWdJQ0FwTzF4dUlDQjlYRzVjYmlBZ1lYTjVibU1nY21WdVlXMWxUM0puVlc1cGRDaHZjbWRWYm1sMFNXUTZJSE4wY21sdVp5d2dibUZ0WlRvZ2MzUnlhVzVuTENBdUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4VDNKblZXNXBkRDRnZTF4dUlDQWdJR052Ym5OMElHVjRhWE4wYVc1bklEMGdZWGRoYVhRZ2RHaHBjeTVuWlhSQ2VVbGtLRzl5WjFWdWFYUkpaQ3dnTGk0dVlYSm5jeWs3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11ZFhCa1lYUmxUMjVsS0c5eVoxVnVhWFJKWkN3Z2V5QnVZVzFsTENCd1lYUm9PaUIwYUdsekxtOXlaMVZ1YVhSUVlYUm9LSFZ1WkdWbWFXNWxaQ3dnYm1GdFpTa2dmU3dnTGk0dVlYSm5jeWt1ZEdobGJpaGNiaUFnSUNBZ0lHRnplVzVqSUNoMWNHUmhkR1ZrS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSFZ3WkdGMFpXUXVjR0YwYUNBOUlHVjRhWE4wYVc1bkxuQmhjbVZ1ZENBL0lIUm9hWE11YjNKblZXNXBkRkJoZEdnb2RXNWtaV1pwYm1Wa0xDQnVZVzFsS1NBNklIUm9hWE11YjNKblZXNXBkRkJoZEdnb2RXNWtaV1pwYm1Wa0xDQnVZVzFsS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWd1pHRjBaV1E3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVYRzRnSUVCMGNtRnVjMkZqZEdsdmJtRnNLQ2xjYmlBZ1lYTjVibU1nYlc5MlpVOXlaMVZ1YVhRb1hHNGdJQ0FnZEdWdVlXNTBTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQnZjbWRWYm1sMFNXUTZJSE4wY21sdVp5eGNiaUFnSUNCdVpYZFFZWEpsYm5SUGNtZFZibWwwU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEU5eVoxVnVhWFErSUh0Y2JpQWdJQ0JqYjI1emRDQnVaWGRRWVhKbGJuUWdQU0JoZDJGcGRDQjBhR2x6TG1kbGRFSjVTV1FvYm1WM1VHRnlaVzUwVDNKblZXNXBkRWxrTENBdUxpNWhjbWR6S1R0Y2JpQWdJQ0JqYjI1emRDQmxlR2x6ZEdsdVp5QTlJR0YzWVdsMElIUm9hWE11WjJWMFFubEpaQ2h2Y21kVmJtbDBTV1FzSUM0dUxtRnlaM01wTzF4dUlDQWdJR052Ym5OMElIVndaR0YwWldRZ1BTQmhkMkZwZENCMGFHbHpMblZ3WkdGMFpVOXVaU2hjYmlBZ0lDQWdJRzl5WjFWdWFYUkpaQ3hjYmlBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnY0dGeVpXNTBPaUJ1WlhkUVlYSmxiblF1YVdRc1hHNGdJQ0FnSUNBZ0lIQmhkR2c2SUhSb2FYTXViM0puVlc1cGRGQmhkR2dvYm1WM1VHRnlaVzUwTG5CaGRHZ3NJR1Y0YVhOMGFXNW5MbTVoYldVcExGeHVJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDNHVMbUZ5WjNOY2JpQWdJQ0FwTzF4dUlDQWdJR0YzWVdsMElIUm9hWE11Y21WaWRXbHNaRlJsYm1GdWRFTnNiM04xY21Vb2RHVnVZVzUwU1dRc0lDNHVMbUZ5WjNNcE8xeHVJQ0FnSUhKbGRIVnliaUIxY0dSaGRHVmtPMXh1SUNCOVhHNWNiaUFnUUhSeVlXNXpZV04wYVc5dVlXd29LVnh1SUNCaGMzbHVZeUJ5WldKMWFXeGtWR1Z1WVc1MFEyeHZjM1Z5WlNoMFpXNWhiblJKWkRvZ2MzUnlhVzVuTENBdUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4ZG05cFpENGdlMXh1SUNBZ0lHTnZibk4wSUdOc2IzTjFjbVZUWlhKMmFXTmxJRDBnYm1WM0lFOXlaMVZ1YVhSRGJHOXpkWEpsVTJWeWRtbGpaU2dwTzF4dUlDQWdJR052Ym5OMElHVjRhWE4wYVc1blRHbHVhM01nUFNCaGQyRnBkQ0JqYkc5emRYSmxVMlZ5ZG1salpTNXNhWE4wUVd4c0tDNHVMbUZ5WjNNcE8xeHVJQ0FnSUdGM1lXbDBJR1JsYkdWMFpVMWhibmxDZVVsa0tGeHVJQ0FnSUNBZ1kyeHZjM1Z5WlZObGNuWnBZMlVzWEc0Z0lDQWdJQ0JsZUdsemRHbHVaMHhwYm10ekxtWnBiSFJsY2lnb2NtOTNLU0E5UGlCellXMWxWR1Z1WVc1MEtISnZkeTUwWlc1aGJuUXNJSFJsYm1GdWRFbGtLU2tzWEc0Z0lDQWdJQ0F1TGk1aGNtZHpYRzRnSUNBZ0tUdGNibHh1SUNBZ0lHTnZibk4wSUc5eVoxVnVhWFJ6SUQwZ0tHRjNZV2wwSUhSb2FYTXViR2x6ZEZSbGJtRnVkRTl5WjFWdWFYUnpLSFJsYm1GdWRFbGtMQ0F1TGk1aGNtZHpLU2t1YzI5eWRDZ29iR1ZtZEN3Z2NtbG5hSFFwSUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUd4bFpuUkVaWEIwYUNBOUlHeGxablF1Y0dGMGFDNXpjR3hwZENoY0lpOWNJaWt1Wm1sc2RHVnlLRUp2YjJ4bFlXNHBMbXhsYm1kMGFEdGNiaUFnSUNBZ0lHTnZibk4wSUhKcFoyaDBSR1Z3ZEdnZ1BTQnlhV2RvZEM1d1lYUm9Mbk53YkdsMEtGd2lMMXdpS1M1bWFXeDBaWElvUW05dmJHVmhiaWt1YkdWdVozUm9PMXh1SUNBZ0lDQWdjbVYwZFhKdUlHeGxablJFWlhCMGFDQXRJSEpwWjJoMFJHVndkR2c3WEc0Z0lDQWdmU2s3WEc1Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUc5eVoxVnVhWFFnYjJZZ2IzSm5WVzVwZEhNcElIdGNiaUFnSUNBZ0lHRjNZV2wwSUdOc2IzTjFjbVZUWlhKMmFXTmxMbU55WldGMFpWTmxiR1pNYVc1cktIUmxibUZ1ZEVsa0xDQnZjbWRWYm1sMExtbGtMQ0F1TGk1aGNtZHpLVHRjYmlBZ0lDQWdJR2xtSUNodmNtZFZibWwwTG5CaGNtVnVkQ2tnZTF4dUlDQWdJQ0FnSUNCaGQyRnBkQ0JqYkc5emRYSmxVMlZ5ZG1salpTNXBibk5sY25SQmJtTmxjM1J2Y2t4cGJtdHpSbTl5VG1WM1EyaHBiR1FvWEc0Z0lDQWdJQ0FnSUNBZ2RHVnVZVzUwU1dRc1hHNGdJQ0FnSUNBZ0lDQWdjbVZzWVhScGIyNUpaQ2h2Y21kVmJtbDBMbkJoY21WdWRDa3NYRzRnSUNBZ0lDQWdJQ0FnYjNKblZXNXBkQzVwWkN4Y2JpQWdJQ0FnSUNBZ0lDQXVMaTVoY21kelhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdRSFJ5WVc1ellXTjBhVzl1WVd3b0tWeHVJQ0JoYzNsdVl5QmtaV3hsZEdWUGNtZFZibWwwVkhKbFpTaDBaVzVoYm5SSlpEb2djM1J5YVc1bkxDQnZjbWRWYm1sMFNXUTZJSE4wY21sdVp5d2dMaTR1WVhKbmN6b2dZVzU1VzEwcE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdJQ0JqYjI1emRDQmpiRzl6ZFhKbFUyVnlkbWxqWlNBOUlHNWxkeUJQY21kVmJtbDBRMnh2YzNWeVpWTmxjblpwWTJVb0tUdGNiaUFnSUNCamIyNXpkQ0JrWlhOalpXNWtZVzUwY3lBOUlHRjNZV2wwSUhSb2FYTXViR2x6ZEVSbGMyTmxibVJoYm5SUGNtZFZibWwwY3loMFpXNWhiblJKWkN3Z2IzSm5WVzVwZEVsa0xDQjBjblZsTENBdUxpNWhjbWR6S1R0Y2JpQWdJQ0JqYjI1emRDQmtaWE5qWlc1a1lXNTBTV1J6SUQwZ2JtVjNJRk5sZENoa1pYTmpaVzVrWVc1MGN5NXRZWEFvS0c5eVoxVnVhWFFwSUQwK0lHOXlaMVZ1YVhRdWFXUXBLVHRjYmlBZ0lDQmpiMjV6ZENCdmNtZFZibWwwY3lBOUlDaGhkMkZwZENCMGFHbHpMbXhwYzNSVVpXNWhiblJQY21kVmJtbDBjeWgwWlc1aGJuUkpaQ3dnTGk0dVlYSm5jeWtwTG1acGJIUmxjaWdvYjNKblZXNXBkQ2tnUFQ1Y2JpQWdJQ0FnSUdSbGMyTmxibVJoYm5SSlpITXVhR0Z6S0c5eVoxVnVhWFF1YVdRcFhHNGdJQ0FnS1R0Y2JpQWdJQ0JoZDJGcGRDQmtaV3hsZEdWTllXNTVRbmxKWkNoMGFHbHpMQ0J2Y21kVmJtbDBjeXdnTGk0dVlYSm5jeWs3WEc0Z0lDQWdZWGRoYVhRZ1kyeHZjM1Z5WlZObGNuWnBZMlV1WkdWc1pYUmxUR2x1YTNOR2IzSlRkV0owY21WbEtIUmxibUZ1ZEVsa0xDQnZjbWRWYm1sMFNXUXNJQzR1TG1GeVozTXBPMXh1SUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlZjMlZ5VTJWeWRtbGpaU0JsZUhSbGJtUnpJRUpoYzJWTmIyUmxiRk5sY25acFkyVThWWE5sY2o0Z2UxeHVJQ0JqYjI1emRISjFZM1J2Y2lncElIdGNiaUFnSUNCemRYQmxjaWhWYzJWeUtUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklHTnlaV0YwWlZWelpYSW9hVzV3ZFhRNklFTnlaV0YwWlZWelpYSkpibkIxZEN3Z0xpNHVZWEpuY3pvZ1lXNTVXMTBwT2lCUWNtOXRhWE5sUEZWelpYSStJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVqY21WaGRHVlBibVVvWEc0Z0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUdsa09pQnBaQ2dwTEZ4dUlDQWdJQ0FnSUNCbGJXRnBiRG9nYVc1d2RYUXVaVzFoYVd3c1hHNGdJQ0FnSUNBZ0lIQm9iMjVsT2lCcGJuQjFkQzV3YUc5dVpTeGNiaUFnSUNBZ0lDQWdaR2x6Y0d4aGVVNWhiV1U2SUdsdWNIVjBMbVJwYzNCc1lYbE9ZVzFsTEZ4dUlDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUM0dUxtRnlaM05jYmlBZ0lDQXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdaMlYwUW5sRmJXRnBiQ2hsYldGcGJEb2djM1J5YVc1bkxDQXVMaTVoY21kek9pQmhibmxiWFNrNklGQnliMjFwYzJVOFZYTmxjajRnZTF4dUlDQWdJSEpsZEhWeWJpQW9ZWGRoYVhRZ2RHaHBjeTVzYVhOMFFXeHNLQzR1TG1GeVozTXBLUzVtYVc1a0tDaDFjMlZ5S1NBOVBpQjFjMlZ5TG1WdFlXbHNJRDA5UFNCbGJXRnBiQ2tnWVhNZ1ZYTmxjanRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJSFZ3WkdGMFpVUnBjM0JzWVhsT1lXMWxLSFZ6WlhKSlpEb2djM1J5YVc1bkxDQmthWE53YkdGNVRtRnRaVG9nYzNSeWFXNW5MQ0F1TGk1aGNtZHpPaUJoYm5sYlhTazZJRkJ5YjIxcGMyVThWWE5sY2o0Z2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuVndaR0YwWlU5dVpTaDFjMlZ5U1dRc0lIc2daR2x6Y0d4aGVVNWhiV1VnZlN3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCMWNHUmhkR1ZGYldGcGJDaGNiaUFnSUNCMWMyVnlTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQmxiV0ZwYkRvZ2MzUnlhVzVuSUh3Z2RXNWtaV1pwYm1Wa0xGeHVJQ0FnSUM0dUxtRnlaM002SUdGdWVWdGRYRzRnSUNrNklGQnliMjFwYzJVOFZYTmxjajRnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5Wd1pHRjBaVTl1WlNoMWMyVnlTV1FzSUhzZ1pXMWhhV3dnZlN3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCMWNHUmhkR1ZRYUc5dVpTaGNiaUFnSUNCMWMyVnlTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQndhRzl1WlRvZ2MzUnlhVzVuSUh3Z2RXNWtaV1pwYm1Wa0xGeHVJQ0FnSUM0dUxtRnlaM002SUdGdWVWdGRYRzRnSUNrNklGQnliMjFwYzJVOFZYTmxjajRnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5Wd1pHRjBaVTl1WlNoMWMyVnlTV1FzSUhzZ2NHaHZibVVnZlN3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUZCeWFXNWphWEJoYkZObGNuWnBZMlVnWlhoMFpXNWtjeUJDWVhObFRXOWtaV3hUWlhKMmFXTmxQRkJ5YVc1amFYQmhiRDRnZTF4dUlDQmpiMjV6ZEhKMVkzUnZjaWdwSUh0Y2JpQWdJQ0J6ZFhCbGNpaFFjbWx1WTJsd1lXd3BPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdZM0psWVhSbFVISnBibU5wY0dGc0tGeHVJQ0FnSUhSbGJtRnVkRWxrT2lCemRISnBibWNzWEc0Z0lDQWdhMmx1WkRvZ1VISnBibU5wY0dGc1MybHVaQ3hjYmlBZ0lDQnpkV0pxWldOMFNXUTZJSE4wY21sdVp5eGNiaUFnSUNBdUxpNWhjbWR6T2lCaGJubGJYVnh1SUNBcE9pQlFjbTl0YVhObFBGQnlhVzVqYVhCaGJENGdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbU55WldGMFpVOXVaU2hjYmlBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnYVdRNklHbGtLQ2tzWEc0Z0lDQWdJQ0FnSUhSbGJtRnVkRG9nZEdWdVlXNTBTV1FzWEc0Z0lDQWdJQ0FnSUd0cGJtUXNYRzRnSUNBZ0lDQWdJSE4xWW1wbFkzUkpaQ3hjYmlBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0F1TGk1aGNtZHpYRzRnSUNBZ0tUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklHZGxkRVp2Y2xOMVltcGxZM1FvWEc0Z0lDQWdkR1Z1WVc1MFNXUTZJSE4wY21sdVp5eGNiaUFnSUNCcmFXNWtPaUJRY21sdVkybHdZV3hMYVc1a0xGeHVJQ0FnSUhOMVltcGxZM1JKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJQzR1TG1GeVozTTZJR0Z1ZVZ0ZFhHNGdJQ2s2SUZCeWIyMXBjMlU4VUhKcGJtTnBjR0ZzSUh3Z2RXNWtaV1pwYm1Wa1BpQjdYRzRnSUNBZ2NtVjBkWEp1SUNoaGQyRnBkQ0IwYUdsekxteHBjM1JCYkd3b0xpNHVZWEpuY3lrcExtWnBibVFvWEc0Z0lDQWdJQ0FvY0hKcGJtTnBjR0ZzS1NBOVBseHVJQ0FnSUNBZ0lDQnpZVzFsVkdWdVlXNTBLSEJ5YVc1amFYQmhiQzUwWlc1aGJuUXNJSFJsYm1GdWRFbGtLU0FtSmx4dUlDQWdJQ0FnSUNCd2NtbHVZMmx3WVd3dWEybHVaQ0E5UFQwZ2EybHVaQ0FtSmx4dUlDQWdJQ0FnSUNCd2NtbHVZMmx3WVd3dWMzVmlhbVZqZEVsa0lEMDlQU0J6ZFdKcVpXTjBTV1JjYmlBZ0lDQXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdaMlYwVDNKRGNtVmhkR1ZHYjNKVGRXSnFaV04wS0Z4dUlDQWdJSFJsYm1GdWRFbGtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2EybHVaRG9nVUhKcGJtTnBjR0ZzUzJsdVpDeGNiaUFnSUNCemRXSnFaV04wU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEZCeWFXNWphWEJoYkQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUFvWEc0Z0lDQWdJQ0FvWVhkaGFYUWdkR2hwY3k1blpYUkdiM0pUZFdKcVpXTjBLSFJsYm1GdWRFbGtMQ0JyYVc1a0xDQnpkV0pxWldOMFNXUXNJQzR1TG1GeVozTXBLU0EvUDF4dUlDQWdJQ0FnS0dGM1lXbDBJSFJvYVhNdVkzSmxZWFJsVUhKcGJtTnBjR0ZzS0hSbGJtRnVkRWxrTENCcmFXNWtMQ0J6ZFdKcVpXTjBTV1FzSUM0dUxtRnlaM01wS1Z4dUlDQWdJQ2s3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJuWlhSVmMyVnlVSEpwYm1OcGNHRnNLSFJsYm1GdWRFbGtPaUJ6ZEhKcGJtY3NJSFZ6WlhKSlpEb2djM1J5YVc1bkxDQXVMaTVoY21kek9pQmhibmxiWFNrNklGQnliMjFwYzJVOFVISnBibU5wY0dGc1BpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaMlYwVDNKRGNtVmhkR1ZHYjNKVGRXSnFaV04wS0hSbGJtRnVkRWxrTENCUWNtbHVZMmx3WVd4TGFXNWtMbFZ6WlhJc0lIVnpaWEpKWkN3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCblpYUkhjbTkxY0ZCeWFXNWphWEJoYkNoMFpXNWhiblJKWkRvZ2MzUnlhVzVuTENCbmNtOTFjRWxrT2lCemRISnBibWNzSUM0dUxtRnlaM002SUdGdWVWdGRLVG9nVUhKdmJXbHpaVHhRY21sdVkybHdZV3crSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1blpYUlBja055WldGMFpVWnZjbE4xWW1wbFkzUW9kR1Z1WVc1MFNXUXNJRkJ5YVc1amFYQmhiRXRwYm1RdVIzSnZkWEFzSUdkeWIzVndTV1FzSUM0dUxtRnlaM01wTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJVWlc1aGJuUk5aVzFpWlhKemFHbHdVMlZ5ZG1salpTQmxlSFJsYm1SeklFSmhjMlZOYjJSbGJGTmxjblpwWTJVOFZHVnVZVzUwVFdWdFltVnljMmhwY0Q0Z2UxeHVJQ0JqYjI1emRISjFZM1J2Y2lncElIdGNiaUFnSUNCemRYQmxjaWhVWlc1aGJuUk5aVzFpWlhKemFHbHdLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR0ZrWkZWelpYSlViMVJsYm1GdWRDaGNiaUFnSUNCMFpXNWhiblJKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJSFZ6WlhKSlpEb2djM1J5YVc1bkxGeHVJQ0FnSUhOMFlYUjFjem9nVFdWdFltVnljMmhwY0ZOMFlYUjFjeUE5SUUxbGJXSmxjbk5vYVhCVGRHRjBkWE11UVdOMGFYWmxMRnh1SUNBZ0lDNHVMbUZ5WjNNNklHRnVlVnRkWEc0Z0lDazZJRkJ5YjIxcGMyVThWR1Z1WVc1MFRXVnRZbVZ5YzJocGNENGdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbU55WldGMFpVOXVaU2hjYmlBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnYVdRNklHbGtLQ2tzWEc0Z0lDQWdJQ0FnSUhSbGJtRnVkRG9nZEdWdVlXNTBTV1FzWEc0Z0lDQWdJQ0FnSUhWelpYSTZJSFZ6WlhKSlpDeGNiaUFnSUNBZ0lDQWdjM1JoZEhWekxGeHVJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDNHVMbUZ5WjNOY2JpQWdJQ0FwTzF4dUlDQjlYRzVjYmlBZ1lYTjVibU1nYzJWMFUzUmhkSFZ6S0Z4dUlDQWdJRzFsYldKbGNuTm9hWEJKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJSE4wWVhSMWN6b2dUV1Z0WW1WeWMyaHBjRk4wWVhSMWN5eGNiaUFnSUNBdUxpNWhjbWR6T2lCaGJubGJYVnh1SUNBcE9pQlFjbTl0YVhObFBGUmxibUZ1ZEUxbGJXSmxjbk5vYVhBK0lIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NTFjR1JoZEdWUGJtVW9iV1Z0WW1WeWMyaHBjRWxrTENCN0lITjBZWFIxY3lCOUxDQXVMaTVoY21kektUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklHeHBjM1JWYzJWeVZHVnVZVzUwY3loMWMyVnlTV1E2SUhOMGNtbHVaeXdnTGk0dVlYSm5jem9nWVc1NVcxMHBPaUJRY205dGFYTmxQRlJsYm1GdWRFMWxiV0psY25Ob2FYQmJYVDRnZTF4dUlDQWdJSEpsZEhWeWJpQW9ZWGRoYVhRZ2RHaHBjeTVzYVhOMFFXeHNLQzR1TG1GeVozTXBLUzVtYVd4MFpYSW9LRzFsYldKbGNuTm9hWEFwSUQwK1hHNGdJQ0FnSUNCeVpXeGhkR2x2YmsxaGRHTm9LRzFsYldKbGNuTm9hWEF1ZFhObGNpd2dkWE5sY2tsa0tWeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCc2FYTjBWR1Z1WVc1MFZYTmxjbk1vZEdWdVlXNTBTV1E2SUhOMGNtbHVaeXdnTGk0dVlYSm5jem9nWVc1NVcxMHBPaUJRY205dGFYTmxQRlJsYm1GdWRFMWxiV0psY25Ob2FYQmJYVDRnZTF4dUlDQWdJSEpsZEhWeWJpQW9ZWGRoYVhRZ2RHaHBjeTVzYVhOMFFXeHNLQzR1TG1GeVozTXBLUzVtYVd4MFpYSW9LRzFsYldKbGNuTm9hWEFwSUQwK1hHNGdJQ0FnSUNCellXMWxWR1Z1WVc1MEtHMWxiV0psY25Ob2FYQXVkR1Z1WVc1MExDQjBaVzVoYm5SSlpDbGNiaUFnSUNBcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ2NtVnRiM1psVlhObGNrWnliMjFVWlc1aGJuUW9iV1Z0WW1WeWMyaHBjRWxrT2lCemRISnBibWNzSUM0dUxtRnlaM002SUdGdWVWdGRLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQjdYRzRnSUNBZ1lYZGhhWFFnZEdocGN5NWtaV3hsZEdWQ2VVbGtLRzFsYldKbGNuTm9hWEJKWkN3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUU5eVoxVnVhWFJOWlcxaVpYSnphR2x3VTJWeWRtbGpaU0JsZUhSbGJtUnpJRUpoYzJWTmIyUmxiRk5sY25acFkyVThUM0puVlc1cGRFMWxiV0psY25Ob2FYQStJSHRjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc0Z0lDQWdjM1Z3WlhJb1QzSm5WVzVwZEUxbGJXSmxjbk5vYVhBcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ1lXUmtWWE5sY2xSdlQzSm5WVzVwZENoY2JpQWdJQ0IwWlc1aGJuUkpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lHOXlaMVZ1YVhSSlpEb2djM1J5YVc1bkxGeHVJQ0FnSUhWelpYSkpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lITjBZWFIxY3pvZ1RXVnRZbVZ5YzJocGNGTjBZWFIxY3lBOUlFMWxiV0psY25Ob2FYQlRkR0YwZFhNdVFXTjBhWFpsTEZ4dUlDQWdJQzR1TG1GeVozTTZJR0Z1ZVZ0ZFhHNGdJQ2s2SUZCeWIyMXBjMlU4VDNKblZXNXBkRTFsYldKbGNuTm9hWEErSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amNtVmhkR1ZQYm1Vb1hHNGdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lHbGtPaUJwWkNncExGeHVJQ0FnSUNBZ0lDQjBaVzVoYm5RNklIUmxibUZ1ZEVsa0xGeHVJQ0FnSUNBZ0lDQnZjbWRWYm1sME9pQnZjbWRWYm1sMFNXUXNYRzRnSUNBZ0lDQWdJSFZ6WlhJNklIVnpaWEpKWkN4Y2JpQWdJQ0FnSUNBZ2MzUmhkSFZ6TEZ4dUlDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUM0dUxtRnlaM05jYmlBZ0lDQXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdjMlYwVTNSaGRIVnpLRnh1SUNBZ0lHMWxiV0psY25Ob2FYQkpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lITjBZWFIxY3pvZ1RXVnRZbVZ5YzJocGNGTjBZWFIxY3l4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEU5eVoxVnVhWFJOWlcxaVpYSnphR2x3UGlCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWRYQmtZWFJsVDI1bEtHMWxiV0psY25Ob2FYQkpaQ3dnZXlCemRHRjBkWE1nZlN3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCc2FYTjBWWE5sY2s5eVoxVnVhWFJ6S0hWelpYSkpaRG9nYzNSeWFXNW5MQ0F1TGk1aGNtZHpPaUJoYm5sYlhTazZJRkJ5YjIxcGMyVThUM0puVlc1cGRFMWxiV0psY25Ob2FYQmJYVDRnZTF4dUlDQWdJSEpsZEhWeWJpQW9ZWGRoYVhRZ2RHaHBjeTVzYVhOMFFXeHNLQzR1TG1GeVozTXBLUzVtYVd4MFpYSW9LRzFsYldKbGNuTm9hWEFwSUQwK1hHNGdJQ0FnSUNCeVpXeGhkR2x2YmsxaGRHTm9LRzFsYldKbGNuTm9hWEF1ZFhObGNpd2dkWE5sY2tsa0tWeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCc2FYTjBUM0puVlc1cGRGVnpaWEp6S0c5eVoxVnVhWFJKWkRvZ2MzUnlhVzVuTENBdUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4VDNKblZXNXBkRTFsYldKbGNuTm9hWEJiWFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUFvWVhkaGFYUWdkR2hwY3k1c2FYTjBRV3hzS0M0dUxtRnlaM01wS1M1bWFXeDBaWElvS0cxbGJXSmxjbk5vYVhBcElEMCtYRzRnSUNBZ0lDQnlaV3hoZEdsdmJrMWhkR05vS0cxbGJXSmxjbk5vYVhBdWIzSm5WVzVwZEN3Z2IzSm5WVzVwZEVsa0tWeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCeVpXMXZkbVZWYzJWeVJuSnZiVTl5WjFWdWFYUW9iV1Z0WW1WeWMyaHBjRWxrT2lCemRISnBibWNzSUM0dUxtRnlaM002SUdGdWVWdGRLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQjdYRzRnSUNBZ1lYZGhhWFFnZEdocGN5NWtaV3hsZEdWQ2VVbGtLRzFsYldKbGNuTm9hWEJKWkN3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUVkeWIzVndVMlZ5ZG1salpTQmxlSFJsYm1SeklFSmhjMlZOYjJSbGJGTmxjblpwWTJVOFIzSnZkWEErSUh0Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNGdJQ0FnYzNWd1pYSW9SM0p2ZFhBcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ1kzSmxZWFJsUjNKdmRYQW9YRzRnSUNBZ2RHVnVZVzUwU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0J1WVcxbE9pQnpkSEpwYm1jc1hHNGdJQ0FnYjNKblZXNXBkRWxrUHpvZ2MzUnlhVzVuTEZ4dUlDQWdJRzFsZEdGa1lYUmhQem9nVW1WamIzSmtQSE4wY21sdVp5d2dkVzVyYm05M2JqNHNYRzRnSUNBZ0xpNHVZWEpuY3pvZ1lXNTVXMTFjYmlBZ0tUb2dVSEp2YldselpUeEhjbTkxY0Q0Z2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnlaV0YwWlU5dVpTaGNiaUFnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdhV1E2SUdsa0tDa3NYRzRnSUNBZ0lDQWdJSFJsYm1GdWREb2dkR1Z1WVc1MFNXUXNYRzRnSUNBZ0lDQWdJRzl5WjFWdWFYUTZJRzl5WjFWdWFYUkpaQ3hjYmlBZ0lDQWdJQ0FnYm1GdFpTeGNiaUFnSUNBZ0lDQWdiV1YwWVdSaGRHRXNYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdMaTR1WVhKbmMxeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCeVpXNWhiV1ZIY205MWNDaG5jbTkxY0Vsa09pQnpkSEpwYm1jc0lHNWhiV1U2SUhOMGNtbHVaeXdnTGk0dVlYSm5jem9nWVc1NVcxMHBPaUJRY205dGFYTmxQRWR5YjNWd1BpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVkWEJrWVhSbFQyNWxLR2R5YjNWd1NXUXNJSHNnYm1GdFpTQjlMQ0F1TGk1aGNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJRzF2ZG1WSGNtOTFjRlJ2VDNKblZXNXBkQ2hjYmlBZ0lDQm5jbTkxY0Vsa09pQnpkSEpwYm1jc1hHNGdJQ0FnYjNKblZXNXBkRWxrT2lCemRISnBibWNnZkNCMWJtUmxabWx1WldRc1hHNGdJQ0FnTGk0dVlYSm5jem9nWVc1NVcxMWNiaUFnS1RvZ1VISnZiV2x6WlR4SGNtOTFjRDRnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5Wd1pHRjBaVTl1WlNobmNtOTFjRWxrTENCN0lHOXlaMVZ1YVhRNklHOXlaMVZ1YVhSSlpDQjlMQ0F1TGk1aGNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR3hwYzNSVVpXNWhiblJIY205MWNITW9kR1Z1WVc1MFNXUTZJSE4wY21sdVp5d2dMaTR1WVhKbmN6b2dZVzU1VzEwcE9pQlFjbTl0YVhObFBFZHliM1Z3VzEwK0lIdGNiaUFnSUNCeVpYUjFjbTRnS0dGM1lXbDBJSFJvYVhNdWJHbHpkRUZzYkNndUxpNWhjbWR6S1NrdVptbHNkR1Z5S0NobmNtOTFjQ2tnUFQ0Z2MyRnRaVlJsYm1GdWRDaG5jbTkxY0M1MFpXNWhiblFzSUhSbGJtRnVkRWxrS1NrN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUVkeWIzVndUV1Z0WW1WeWMyaHBjRk5sY25acFkyVWdaWGgwWlc1a2N5QkNZWE5sVFc5a1pXeFRaWEoyYVdObFBFZHliM1Z3VFdWdFltVnljMmhwY0Q0Z2UxeHVJQ0JqYjI1emRISjFZM1J2Y2lncElIdGNiaUFnSUNCemRYQmxjaWhIY205MWNFMWxiV0psY25Ob2FYQXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdZV1JrVUhKcGJtTnBjR0ZzVkc5SGNtOTFjQ2hjYmlBZ0lDQjBaVzVoYm5SSlpEb2djM1J5YVc1bkxGeHVJQ0FnSUdkeWIzVndTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQndjbWx1WTJsd1lXeEpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lHMWxkR0ZrWVhSaFB6b2dVbVZqYjNKa1BITjBjbWx1Wnl3Z2RXNXJibTkzYmo0c1hHNGdJQ0FnTGk0dVlYSm5jem9nWVc1NVcxMWNiaUFnS1RvZ1VISnZiV2x6WlR4SGNtOTFjRTFsYldKbGNuTm9hWEErSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amNtVmhkR1ZQYm1Vb1hHNGdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lHbGtPaUJwWkNncExGeHVJQ0FnSUNBZ0lDQjBaVzVoYm5RNklIUmxibUZ1ZEVsa0xGeHVJQ0FnSUNBZ0lDQm5jbTkxY0RvZ1ozSnZkWEJKWkN4Y2JpQWdJQ0FnSUNBZ2NISnBibU5wY0dGc09pQndjbWx1WTJsd1lXeEpaQ3hjYmlBZ0lDQWdJQ0FnYldWMFlXUmhkR0VzWEc0Z0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnTGk0dVlYSm5jMXh1SUNBZ0lDazdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QnNhWE4wUjNKdmRYQk5aVzFpWlhKektHZHliM1Z3U1dRNklITjBjbWx1Wnl3Z0xpNHVZWEpuY3pvZ1lXNTVXMTBwT2lCUWNtOXRhWE5sUEVkeWIzVndUV1Z0WW1WeWMyaHBjRnRkUGlCN1hHNGdJQ0FnY21WMGRYSnVJQ2hoZDJGcGRDQjBhR2x6TG14cGMzUkJiR3dvTGk0dVlYSm5jeWtwTG1acGJIUmxjaWdvYldWdFltVnljMmhwY0NrZ1BUNWNiaUFnSUNBZ0lISmxiR0YwYVc5dVRXRjBZMmdvYldWdFltVnljMmhwY0M1bmNtOTFjQ3dnWjNKdmRYQkpaQ2xjYmlBZ0lDQXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdiR2x6ZEZCeWFXNWphWEJoYkVkeWIzVndjeWh3Y21sdVkybHdZV3hKWkRvZ2MzUnlhVzVuTENBdUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4UjNKdmRYQk5aVzFpWlhKemFHbHdXMTArSUh0Y2JpQWdJQ0J5WlhSMWNtNGdLR0YzWVdsMElIUm9hWE11YkdsemRFRnNiQ2d1TGk1aGNtZHpLU2t1Wm1sc2RHVnlLQ2h0WlcxaVpYSnphR2x3S1NBOVBseHVJQ0FnSUNBZ2NtVnNZWFJwYjI1TllYUmphQ2h0WlcxaVpYSnphR2x3TG5CeWFXNWphWEJoYkN3Z2NISnBibU5wY0dGc1NXUXBYRzRnSUNBZ0tUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklISmxiVzkyWlZCeWFXNWphWEJoYkVaeWIyMUhjbTkxY0NodFpXMWlaWEp6YUdsd1NXUTZJSE4wY21sdVp5d2dMaTR1WVhKbmN6b2dZVzU1VzEwcE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdJQ0JoZDJGcGRDQjBhR2x6TG1SbGJHVjBaVUo1U1dRb2JXVnRZbVZ5YzJocGNFbGtMQ0F1TGk1aGNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJSEpsYzI5c2RtVkhjbTkxY0ZCeWFXNWphWEJoYkVsa2MwWnZjbEJ5YVc1amFYQmhiQ2hjYmlBZ0lDQndjbWx1WTJsd1lXeEpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lDNHVMbUZ5WjNNNklHRnVlVnRkWEc0Z0lDazZJRkJ5YjIxcGMyVThjM1J5YVc1blcxMCtJSHRjYmlBZ0lDQmpiMjV6ZENCd2NtbHVZMmx3WVd4VFpYSjJhV05sSUQwZ2JtVjNJRkJ5YVc1amFYQmhiRk5sY25acFkyVW9LVHRjYmlBZ0lDQmpiMjV6ZENCdFpXMWlaWEp6YUdsd2N5QTlJR0YzWVdsMElIUm9hWE11YkdsemRGQnlhVzVqYVhCaGJFZHliM1Z3Y3lod2NtbHVZMmx3WVd4SlpDd2dMaTR1WVhKbmN5azdYRzRnSUNBZ1kyOXVjM1FnY0hKcGJtTnBjR0ZzY3lBOUlHRjNZV2wwSUZCeWIyMXBjMlV1WVd4c0tGeHVJQ0FnSUNBZ2JXVnRZbVZ5YzJocGNITXViV0Z3S0dGemVXNWpJQ2h0WlcxaVpYSnphR2x3S1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElIUmxibUZ1ZEVsa0lEMGdjbVZzWVhScGIyNUpaQ2h0WlcxaVpYSnphR2x3TG5SbGJtRnVkQ2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR2R5YjNWd1NXUWdQU0J5Wld4aGRHbHZia2xrS0cxbGJXSmxjbk5vYVhBdVozSnZkWEFwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3Y21sdVkybHdZV3dnUFNCaGQyRnBkQ0J3Y21sdVkybHdZV3hUWlhKMmFXTmxMbWRsZEVkeWIzVndVSEpwYm1OcGNHRnNLSFJsYm1GdWRFbGtMQ0JuY205MWNFbGtMQ0F1TGk1aGNtZHpLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSEJ5YVc1amFYQmhiQzVwWkR0Y2JpQWdJQ0FnSUgwcFhHNGdJQ0FnS1R0Y2JpQWdJQ0J5WlhSMWNtNGdjSEpwYm1OcGNHRnNjenRjYmlBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWTJ4aGMzTWdVR1Z5YldsemMybHZibE5sY25acFkyVWdaWGgwWlc1a2N5QkNZWE5sVFc5a1pXeFRaWEoyYVdObFBGQmxjbTFwYzNOcGIyNCtJSHRjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc0Z0lDQWdjM1Z3WlhJb1VHVnliV2x6YzJsdmJpazdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QmpjbVZoZEdWUVpYSnRhWE56YVc5dUtGeHVJQ0FnSUdsdWNIVjBPaUJEY21WaGRHVlFaWEp0YVhOemFXOXVTVzV3ZFhRc1hHNGdJQ0FnTGk0dVlYSm5jem9nWVc1NVcxMWNiaUFnS1RvZ1VISnZiV2x6WlR4UVpYSnRhWE56YVc5dVBpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZM0psWVhSbFQyNWxLRnh1SUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0JwWkRvZ2FXUW9LU3hjYmlBZ0lDQWdJQ0FnYTJWNU9pQnBibkIxZEM1clpYa3NYRzRnSUNBZ0lDQWdJR05oZEdWbmIzSjVPaUJwYm5CMWRDNWpZWFJsWjI5eWVTeGNiaUFnSUNBZ0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUdsdWNIVjBMbVJsYzJOeWFYQjBhVzl1TEZ4dUlDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUM0dUxtRnlaM05jYmlBZ0lDQXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdaMlYwUW5sTFpYa29hMlY1T2lCemRISnBibWNzSUM0dUxtRnlaM002SUdGdWVWdGRLVG9nVUhKdmJXbHpaVHhRWlhKdGFYTnphVzl1UGlCN1hHNGdJQ0FnY21WMGRYSnVJQ2hoZDJGcGRDQjBhR2x6TG14cGMzUkJiR3dvTGk0dVlYSm5jeWtwTG1acGJtUW9LSEJsY20xcGMzTnBiMjRwSUQwK0lIQmxjbTFwYzNOcGIyNHVhMlY1SUQwOVBTQnJaWGtwSUdGeklGQmxjbTFwYzNOcGIyNDdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QnNhWE4wUW5sRFlYUmxaMjl5ZVNoallYUmxaMjl5ZVRvZ1VHVnliV2x6YzJsdmJrTmhkR1ZuYjNKNUxDQXVMaTVoY21kek9pQmhibmxiWFNrNklGQnliMjFwYzJVOFVHVnliV2x6YzJsdmJsdGRQaUI3WEc0Z0lDQWdjbVYwZFhKdUlDaGhkMkZwZENCMGFHbHpMbXhwYzNSQmJHd29MaTR1WVhKbmN5a3BMbVpwYkhSbGNpZ29jR1Z5YldsemMybHZiaWtnUFQ0Z2NHVnliV2x6YzJsdmJpNWpZWFJsWjI5eWVTQTlQVDBnWTJGMFpXZHZjbmtwTzF4dUlDQjlYRzVjYmlBZ1lYTjVibU1nZFhCa1lYUmxSR1Z6WTNKcGNIUnBiMjRvWEc0Z0lDQWdjR1Z5YldsemMybHZia2xrT2lCemRISnBibWNzWEc0Z0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUhOMGNtbHVaeUI4SUhWdVpHVm1hVzVsWkN4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEZCbGNtMXBjM05wYjI0K0lIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NTFjR1JoZEdWUGJtVW9jR1Z5YldsemMybHZia2xrTENCN0lHUmxjMk55YVhCMGFXOXVJSDBzSUM0dUxtRnlaM01wTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJTYjJ4bFUyVnlkbWxqWlNCbGVIUmxibVJ6SUVKaGMyVk5iMlJsYkZObGNuWnBZMlU4VW05c1pUNGdlMXh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmlBZ0lDQnpkWEJsY2loU2IyeGxLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR055WldGMFpWSnZiR1VvYVc1d2RYUTZJRU55WldGMFpWSnZiR1ZKYm5CMWRDd2dMaTR1WVhKbmN6b2dZVzU1VzEwcE9pQlFjbTl0YVhObFBGSnZiR1UrSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amNtVmhkR1ZQYm1Vb1hHNGdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lHbGtPaUJwWkNncExGeHVJQ0FnSUNBZ0lDQjBaVzVoYm5RNklHbHVjSFYwTG5SbGJtRnVkRWxrTEZ4dUlDQWdJQ0FnSUNCclpYazZJR2x1Y0hWMExtdGxlU3hjYmlBZ0lDQWdJQ0FnYm1GdFpUb2dhVzV3ZFhRdWJtRnRaU3hjYmlBZ0lDQWdJQ0FnWkdWelkzSnBjSFJwYjI0NklHbHVjSFYwTG1SbGMyTnlhWEIwYVc5dUxGeHVJQ0FnSUNBZ0lDQnRaWFJoWkdGMFlUb2dhVzV3ZFhRdWJXVjBZV1JoZEdFc1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0xpNHVZWEpuYzF4dUlDQWdJQ2s3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJuWlhSVGVYTjBaVzFTYjJ4bFFubExaWGtvYTJWNU9pQnpkSEpwYm1jc0lDNHVMbUZ5WjNNNklHRnVlVnRkS1RvZ1VISnZiV2x6WlR4U2IyeGxQaUI3WEc0Z0lDQWdZMjl1YzNRZ2NtOXNaU0E5SUNoaGQyRnBkQ0IwYUdsekxteHBjM1JCYkd3b0xpNHVZWEpuY3lrcExtWnBibVFvWEc0Z0lDQWdJQ0FvWTJGdVpHbGtZWFJsS1NBOVBpQWhZMkZ1Wkdsa1lYUmxMblJsYm1GdWRDQW1KaUJqWVc1a2FXUmhkR1V1YTJWNUlEMDlQU0JyWlhsY2JpQWdJQ0FwTzF4dUlDQWdJR2xtSUNnaGNtOXNaU2tnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JTYjJ4bElGd2lKSHRyWlhsOVhDSWdibTkwSUdadmRXNWtZQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCeWIyeGxPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdaMlYwVkdWdVlXNTBVbTlzWlVKNVMyVjVLSFJsYm1GdWRFbGtPaUJ6ZEhKcGJtY3NJR3RsZVRvZ2MzUnlhVzVuTENBdUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4VW05c1pUNGdlMXh1SUNBZ0lHTnZibk4wSUhKdmJHVWdQU0FvWVhkaGFYUWdkR2hwY3k1c2FYTjBRV3hzS0M0dUxtRnlaM01wS1M1bWFXNWtLRnh1SUNBZ0lDQWdLR05oYm1ScFpHRjBaU2tnUFQ0Z2MyRnRaVlJsYm1GdWRDaGpZVzVrYVdSaGRHVXVkR1Z1WVc1MExDQjBaVzVoYm5SSlpDa2dKaVlnWTJGdVpHbGtZWFJsTG10bGVTQTlQVDBnYTJWNVhHNGdJQ0FnS1R0Y2JpQWdJQ0JwWmlBb0lYSnZiR1VwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnVW05c1pTQmNJaVI3YTJWNWZWd2lJRzV2ZENCbWIzVnVaQ0JtYjNJZ2RHVnVZVzUwSUNSN2RHVnVZVzUwU1dSOVlDazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5YjJ4bE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ2NtVnVZVzFsVW05c1pTaHliMnhsU1dRNklITjBjbWx1Wnl3Z2JtRnRaVG9nYzNSeWFXNW5MQ0F1TGk1aGNtZHpPaUJoYm5sYlhTazZJRkJ5YjIxcGMyVThVbTlzWlQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuVndaR0YwWlU5dVpTaHliMnhsU1dRc0lIc2dibUZ0WlNCOUxDQXVMaTVoY21kektUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklIVndaR0YwWlZKdmJHVk5aWFJoWkdGMFlTaGNiaUFnSUNCeWIyeGxTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQnRaWFJoWkdGMFlUb2dVbVZqYjNKa1BITjBjbWx1Wnl3Z2RXNXJibTkzYmo0Z2ZDQjFibVJsWm1sdVpXUXNYRzRnSUNBZ0xpNHVZWEpuY3pvZ1lXNTVXMTFjYmlBZ0tUb2dVSEp2YldselpUeFNiMnhsUGlCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWRYQmtZWFJsVDI1bEtISnZiR1ZKWkN3Z2V5QnRaWFJoWkdGMFlTQjlMQ0F1TGk1aGNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR3hwYzNSVVpXNWhiblJTYjJ4bGN5aGNiaUFnSUNCMFpXNWhiblJKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJR2x1WTJ4MVpHVlRlWE4wWlcwZ1BTQm1ZV3h6WlN4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEZKdmJHVmJYVDRnZTF4dUlDQWdJSEpsZEhWeWJpQW9ZWGRoYVhRZ2RHaHBjeTVzYVhOMFFXeHNLQzR1TG1GeVozTXBLUzVtYVd4MFpYSW9LSEp2YkdVcElEMCtYRzRnSUNBZ0lDQnBibU5zZFdSbFUzbHpkR1Z0SUQ4Z0lYSnZiR1V1ZEdWdVlXNTBJSHg4SUhOaGJXVlVaVzVoYm5Rb2NtOXNaUzUwWlc1aGJuUXNJSFJsYm1GdWRFbGtLU0E2SUhOaGJXVlVaVzVoYm5Rb2NtOXNaUzUwWlc1aGJuUXNJSFJsYm1GdWRFbGtLVnh1SUNBZ0lDazdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR05zWVhOeklGSnZiR1ZRWlhKdGFYTnphVzl1VTJWeWRtbGpaU0JsZUhSbGJtUnpJRUpoYzJWTmIyUmxiRk5sY25acFkyVThVbTlzWlZCbGNtMXBjM05wYjI0K0lIdGNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzRnSUNBZ2MzVndaWElvVW05c1pWQmxjbTFwYzNOcGIyNHBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdZV1JrVUdWeWJXbHpjMmx2YmxSdlVtOXNaU2hjYmlBZ0lDQnliMnhsU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0J3WlhKdGFYTnphVzl1U1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEZKdmJHVlFaWEp0YVhOemFXOXVQaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WTNKbFlYUmxUMjVsS0Z4dUlDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNCcFpEb2dhV1FvS1N4Y2JpQWdJQ0FnSUNBZ2NtOXNaVG9nY205c1pVbGtMRnh1SUNBZ0lDQWdJQ0J3WlhKdGFYTnphVzl1T2lCd1pYSnRhWE56YVc5dVNXUXNYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdMaTR1WVhKbmMxeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCaFpHUlFaWEp0YVhOemFXOXVTMlY1Vkc5U2IyeGxLRnh1SUNBZ0lISnZiR1ZKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJSEJsY20xcGMzTnBiMjVMWlhrNklITjBjbWx1Wnl4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEZKdmJHVlFaWEp0YVhOemFXOXVQaUI3WEc0Z0lDQWdZMjl1YzNRZ2NHVnliV2x6YzJsdmJpQTlJR0YzWVdsMElHNWxkeUJRWlhKdGFYTnphVzl1VTJWeWRtbGpaU2dwTG1kbGRFSjVTMlY1S0hCbGNtMXBjM05wYjI1TFpYa3NJQzR1TG1GeVozTXBPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbUZrWkZCbGNtMXBjM05wYjI1VWIxSnZiR1VvY205c1pVbGtMQ0J3WlhKdGFYTnphVzl1TG1sa0xDQXVMaTVoY21kektUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklISmxiVzkyWlZCbGNtMXBjM05wYjI1R2NtOXRVbTlzWlNoeWIyeGxVR1Z5YldsemMybHZia2xrT2lCemRISnBibWNzSUM0dUxtRnlaM002SUdGdWVWdGRLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQjdYRzRnSUNBZ1lYZGhhWFFnZEdocGN5NWtaV3hsZEdWQ2VVbGtLSEp2YkdWUVpYSnRhWE56YVc5dVNXUXNJQzR1TG1GeVozTXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdiR2x6ZEZKdmJHVlFaWEp0YVhOemFXOXVjeWh5YjJ4bFNXUTZJSE4wY21sdVp5d2dMaTR1WVhKbmN6b2dZVzU1VzEwcE9pQlFjbTl0YVhObFBGSnZiR1ZRWlhKdGFYTnphVzl1VzEwK0lIdGNiaUFnSUNCeVpYUjFjbTRnS0dGM1lXbDBJSFJvYVhNdWJHbHpkRUZzYkNndUxpNWhjbWR6S1NrdVptbHNkR1Z5S0NoeWIyeGxVR1Z5YldsemMybHZiaWtnUFQ1Y2JpQWdJQ0FnSUhKbGJHRjBhVzl1VFdGMFkyZ29jbTlzWlZCbGNtMXBjM05wYjI0dWNtOXNaU3dnY205c1pVbGtLVnh1SUNBZ0lDazdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QnNhWE4wVUdWeWJXbHpjMmx2YmxKdmJHVnpLSEJsY20xcGMzTnBiMjVKWkRvZ2MzUnlhVzVuTENBdUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4VW05c1pWQmxjbTFwYzNOcGIyNWJYVDRnZTF4dUlDQWdJSEpsZEhWeWJpQW9ZWGRoYVhRZ2RHaHBjeTVzYVhOMFFXeHNLQzR1TG1GeVozTXBLUzVtYVd4MFpYSW9LSEp2YkdWUVpYSnRhWE56YVc5dUtTQTlQbHh1SUNBZ0lDQWdjbVZzWVhScGIyNU5ZWFJqYUNoeWIyeGxVR1Z5YldsemMybHZiaTV3WlhKdGFYTnphVzl1TENCd1pYSnRhWE56YVc5dVNXUXBYRzRnSUNBZ0tUdGNiaUFnZlZ4dVhHNGdJRUIwY21GdWMyRmpkR2x2Ym1Gc0tDbGNiaUFnWVhONWJtTWdjbVZ3YkdGalpWSnZiR1ZRWlhKdGFYTnphVzl1Y3loY2JpQWdJQ0J5YjJ4bFNXUTZJSE4wY21sdVp5eGNiaUFnSUNCd1pYSnRhWE56YVc5dVNXUnpPaUJ6ZEhKcGJtZGJYU3hjYmlBZ0lDQXVMaTVoY21kek9pQmhibmxiWFZ4dUlDQXBPaUJRY205dGFYTmxQRkp2YkdWUVpYSnRhWE56YVc5dVcxMCtJSHRjYmlBZ0lDQmpiMjV6ZENCbGVHbHpkR2x1WnlBOUlHRjNZV2wwSUhSb2FYTXViR2x6ZEZKdmJHVlFaWEp0YVhOemFXOXVjeWh5YjJ4bFNXUXNJQzR1TG1GeVozTXBPMXh1SUNBZ0lHRjNZV2wwSUdSbGJHVjBaVTFoYm5sQ2VVbGtLSFJvYVhNc0lHVjRhWE4wYVc1bkxDQXVMaTVoY21kektUdGNiaUFnSUNCamIyNXpkQ0JqY21WaGRHVmtJRDBnWVhkaGFYUWdVSEp2YldselpTNWhiR3dvWEc0Z0lDQWdJQ0J3WlhKdGFYTnphVzl1U1dSekxtMWhjQ2dvY0dWeWJXbHpjMmx2Ymtsa0tTQTlQbHh1SUNBZ0lDQWdJQ0IwYUdsekxtRmtaRkJsY20xcGMzTnBiMjVVYjFKdmJHVW9jbTlzWlVsa0xDQndaWEp0YVhOemFXOXVTV1FzSUM0dUxtRnlaM01wWEc0Z0lDQWdJQ0FwWEc0Z0lDQWdLVHRjYmlBZ0lDQnlaWFIxY200Z1kzSmxZWFJsWkR0Y2JpQWdmVnh1WEc0Z0lFQjBjbUZ1YzJGamRHbHZibUZzS0NsY2JpQWdZWE41Ym1NZ1kzSmxZWFJsVW05c1pWZHBkR2hRWlhKdGFYTnphVzl1Y3loY2JpQWdJQ0JwYm5CMWREb2dRM0psWVhSbFVtOXNaVWx1Y0hWMExGeHVJQ0FnSUhCbGNtMXBjM05wYjI1TFpYbHpPaUJ6ZEhKcGJtZGJYU3hjYmlBZ0lDQXVMaTVoY21kek9pQmhibmxiWFZ4dUlDQXBPaUJRY205dGFYTmxQRkp2YkdVK0lIdGNiaUFnSUNCamIyNXpkQ0J5YjJ4bElEMGdZWGRoYVhRZ2JtVjNJRkp2YkdWVFpYSjJhV05sS0NrdVkzSmxZWFJsVW05c1pTaHBibkIxZEN3Z0xpNHVZWEpuY3lrN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCd1pYSnRhWE56YVc5dVMyVjVJRzltSUhCbGNtMXBjM05wYjI1TFpYbHpLU0I3WEc0Z0lDQWdJQ0JoZDJGcGRDQjBhR2x6TG1Ga1pGQmxjbTFwYzNOcGIyNUxaWGxVYjFKdmJHVW9jbTlzWlM1cFpDd2djR1Z5YldsemMybHZia3RsZVN3Z0xpNHVZWEpuY3lrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnliMnhsTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJTYjJ4bFFYTnphV2R1YldWdWRGTmxjblpwWTJVZ1pYaDBaVzVrY3lCQ1lYTmxUVzlrWld4VFpYSjJhV05sUEZKdmJHVkJjM05wWjI1dFpXNTBQaUI3WEc0Z0lHTnZibk4wY25WamRHOXlLQ2tnZTF4dUlDQWdJSE4xY0dWeUtGSnZiR1ZCYzNOcFoyNXRaVzUwS1R0Y2JpQWdmVnh1WEc0Z0lHRnplVzVqSUdGemMybG5ibEp2YkdVb2FXNXdkWFE2SUVGemMybG5ibEp2YkdWSmJuQjFkQ3dnTGk0dVlYSm5jem9nWVc1NVcxMHBPaUJRY205dGFYTmxQRkp2YkdWQmMzTnBaMjV0Wlc1MFBpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZM0psWVhSbFQyNWxLRnh1SUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0JwWkRvZ2FXUW9LU3hjYmlBZ0lDQWdJQ0FnZEdWdVlXNTBPaUJwYm5CMWRDNTBaVzVoYm5SSlpDeGNiaUFnSUNBZ0lDQWdjSEpwYm1OcGNHRnNPaUJwYm5CMWRDNXdjbWx1WTJsd1lXeEpaQ3hjYmlBZ0lDQWdJQ0FnY205c1pUb2dhVzV3ZFhRdWNtOXNaVWxrTEZ4dUlDQWdJQ0FnSUNCelkyOXdaVXRwYm1RNklHbHVjSFYwTG5OamIzQmxTMmx1WkN4Y2JpQWdJQ0FnSUNBZ2MyTnZjR1ZKWkRvZ2FXNXdkWFF1YzJOdmNHVkpaQ3hjYmlBZ0lDQWdJQ0FnYVc1b1pYSnBkRVJ2ZDI0NklHbHVjSFYwTG1sdWFHVnlhWFJFYjNkdUlEOC9JR1poYkhObExGeHVJQ0FnSUNBZ0lDQnpkR0Z5ZEhOQmREb2dhVzV3ZFhRdWMzUmhjblJ6UVhRc1hHNGdJQ0FnSUNBZ0lHVjRjR2x5WlhOQmREb2dhVzV3ZFhRdVpYaHdhWEpsYzBGMExGeHVJQ0FnSUNBZ0lDQmpiMjVrYVhScGIyNXpPaUJwYm5CMWRDNWpiMjVrYVhScGIyNXpMRnh1SUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQzR1TG1GeVozTmNiaUFnSUNBcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ2NtVjJiMnRsUVhOemFXZHViV1Z1ZENoaGMzTnBaMjV0Wlc1MFNXUTZJSE4wY21sdVp5d2dMaTR1WVhKbmN6b2dZVzU1VzEwcE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdJQ0JoZDJGcGRDQjBhR2x6TG1SbGJHVjBaVUo1U1dRb1lYTnphV2R1YldWdWRFbGtMQ0F1TGk1aGNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR3hwYzNSUWNtbHVZMmx3WVd4QmMzTnBaMjV0Wlc1MGN5aGNiaUFnSUNCMFpXNWhiblJKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJSEJ5YVc1amFYQmhiRWxrT2lCemRISnBibWNzWEc0Z0lDQWdMaTR1WVhKbmN6b2dZVzU1VzExY2JpQWdLVG9nVUhKdmJXbHpaVHhTYjJ4bFFYTnphV2R1YldWdWRGdGRQaUI3WEc0Z0lDQWdjbVYwZFhKdUlDaGhkMkZwZENCMGFHbHpMbXhwYzNSQmJHd29MaTR1WVhKbmN5a3BMbVpwYkhSbGNpaGNiaUFnSUNBZ0lDaGhjM05wWjI1dFpXNTBLU0E5UGx4dUlDQWdJQ0FnSUNCellXMWxWR1Z1WVc1MEtHRnpjMmxuYm0xbGJuUXVkR1Z1WVc1MExDQjBaVzVoYm5SSlpDa2dKaVpjYmlBZ0lDQWdJQ0FnY21Wc1lYUnBiMjVOWVhSamFDaGhjM05wWjI1dFpXNTBMbkJ5YVc1amFYQmhiQ3dnY0hKcGJtTnBjR0ZzU1dRcFhHNGdJQ0FnS1R0Y2JpQWdmVnh1WEc0Z0lHRnplVzVqSUd4cGMzUlNiMnhsUVhOemFXZHViV1Z1ZEhNb2NtOXNaVWxrT2lCemRISnBibWNzSUM0dUxtRnlaM002SUdGdWVWdGRLVG9nVUhKdmJXbHpaVHhTYjJ4bFFYTnphV2R1YldWdWRGdGRQaUI3WEc0Z0lDQWdjbVYwZFhKdUlDaGhkMkZwZENCMGFHbHpMbXhwYzNSQmJHd29MaTR1WVhKbmN5a3BMbVpwYkhSbGNpZ29ZWE56YVdkdWJXVnVkQ2tnUFQ1Y2JpQWdJQ0FnSUhKbGJHRjBhVzl1VFdGMFkyZ29ZWE56YVdkdWJXVnVkQzV5YjJ4bExDQnliMnhsU1dRcFhHNGdJQ0FnS1R0Y2JpQWdmVnh1WEc0Z0lHRnplVzVqSUd4cGMzUlVaVzVoYm5SQmMzTnBaMjV0Wlc1MGN5aGNiaUFnSUNCMFpXNWhiblJKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJQzR1TG1GeVozTTZJR0Z1ZVZ0ZFhHNGdJQ2s2SUZCeWIyMXBjMlU4VW05c1pVRnpjMmxuYm0xbGJuUmJYVDRnZTF4dUlDQWdJSEpsZEhWeWJpQW9ZWGRoYVhRZ2RHaHBjeTVzYVhOMFFXeHNLQzR1TG1GeVozTXBLUzVtYVd4MFpYSW9LR0Z6YzJsbmJtMWxiblFwSUQwK1hHNGdJQ0FnSUNCellXMWxWR1Z1WVc1MEtHRnpjMmxuYm0xbGJuUXVkR1Z1WVc1MExDQjBaVzVoYm5SSlpDbGNiaUFnSUNBcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ2RYQmtZWFJsUVhOemFXZHViV1Z1ZEZkcGJtUnZkeWhjYmlBZ0lDQmhjM05wWjI1dFpXNTBTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQnpkR0Z5ZEhOQmREb2dSR0YwWlNCOElIVnVaR1ZtYVc1bFpDeGNiaUFnSUNCbGVIQnBjbVZ6UVhRNklFUmhkR1VnZkNCMWJtUmxabWx1WldRc1hHNGdJQ0FnTGk0dVlYSm5jem9nWVc1NVcxMWNiaUFnS1RvZ1VISnZiV2x6WlR4U2IyeGxRWE56YVdkdWJXVnVkRDRnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5Wd1pHRjBaVTl1WlNoaGMzTnBaMjV0Wlc1MFNXUXNJSHNnYzNSaGNuUnpRWFFzSUdWNGNHbHlaWE5CZENCOUxDQXVMaTVoY21kektUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1JXWm1aV04wYVhabFVHVnliV2x6YzJsdmJsTmxjblpwWTJVZ1pYaDBaVzVrY3lCQ1lYTmxUVzlrWld4VFpYSjJhV05sUEVWbVptVmpkR2wyWlZCbGNtMXBjM05wYjI0K0lIdGNiaUFnWTI5dWMzUnlkV04wYjNJb0tTQjdYRzRnSUNBZ2MzVndaWElvUldabVpXTjBhWFpsVUdWeWJXbHpjMmx2YmlrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCc2FYTjBSbTl5VUhKcGJtTnBjR0ZzS0Z4dUlDQWdJSFJsYm1GdWRFbGtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2NISnBibU5wY0dGc1NXUTZJSE4wY21sdVp5eGNiaUFnSUNBdUxpNWhjbWR6T2lCaGJubGJYVnh1SUNBcE9pQlFjbTl0YVhObFBFVm1abVZqZEdsMlpWQmxjbTFwYzNOcGIyNWJYVDRnZTF4dUlDQWdJSEpsZEhWeWJpQW9ZWGRoYVhRZ2RHaHBjeTVzYVhOMFFXeHNLQzR1TG1GeVozTXBLUzVtYVd4MFpYSW9YRzRnSUNBZ0lDQW9jR1Z5YldsemMybHZiaWtnUFQ1Y2JpQWdJQ0FnSUNBZ2MyRnRaVlJsYm1GdWRDaHdaWEp0YVhOemFXOXVMblJsYm1GdWRDd2dkR1Z1WVc1MFNXUXBJQ1ltWEc0Z0lDQWdJQ0FnSUhKbGJHRjBhVzl1VFdGMFkyZ29jR1Z5YldsemMybHZiaTV3Y21sdVkybHdZV3dzSUhCeWFXNWphWEJoYkVsa0tWeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCc2FYTjBSbTl5VTJOdmNHVW9YRzRnSUNBZ2RHVnVZVzUwU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0J6WTI5d1pVdHBibVE2SUZOamIzQmxTMmx1WkN4Y2JpQWdJQ0J6WTI5d1pVbGtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ0xpNHVZWEpuY3pvZ1lXNTVXMTFjYmlBZ0tUb2dVSEp2YldselpUeEZabVpsWTNScGRtVlFaWEp0YVhOemFXOXVXMTArSUh0Y2JpQWdJQ0J5WlhSMWNtNGdLR0YzWVdsMElIUm9hWE11YkdsemRFRnNiQ2d1TGk1aGNtZHpLU2t1Wm1sc2RHVnlLRnh1SUNBZ0lDQWdLSEJsY20xcGMzTnBiMjRwSUQwK1hHNGdJQ0FnSUNBZ0lITmhiV1ZVWlc1aGJuUW9jR1Z5YldsemMybHZiaTUwWlc1aGJuUXNJSFJsYm1GdWRFbGtLU0FtSmx4dUlDQWdJQ0FnSUNCd1pYSnRhWE56YVc5dUxuTmpiM0JsUzJsdVpDQTlQVDBnYzJOdmNHVkxhVzVrSUNZbVhHNGdJQ0FnSUNBZ0lIQmxjbTFwYzNOcGIyNHVjMk52Y0dWSlpDQTlQVDBnYzJOdmNHVkpaRnh1SUNBZ0lDazdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5Qm9ZWE5RWlhKdGFYTnphVzl1S0Z4dUlDQWdJSFJsYm1GdWRFbGtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2NISnBibU5wY0dGc1NXUTZJSE4wY21sdVp5eGNiaUFnSUNCd1pYSnRhWE56YVc5dVMyVjVPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2MyTnZjR1ZMYVc1a09pQlRZMjl3WlV0cGJtUXNYRzRnSUNBZ2MyTnZjR1ZKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJR0YwUHpvZ1JHRjBaU3hjYmlBZ0lDQXVMaTVoY21kek9pQmhibmxiWFZ4dUlDQXBPaUJRY205dGFYTmxQR0p2YjJ4bFlXNCtJSHRjYmlBZ0lDQnlaWFIxY200Z0tHRjNZV2wwSUhSb2FYTXViR2x6ZEVadmNsQnlhVzVqYVhCaGJDaDBaVzVoYm5SSlpDd2djSEpwYm1OcGNHRnNTV1FzSUM0dUxtRnlaM01wS1M1emIyMWxLRnh1SUNBZ0lDQWdLSEJsY20xcGMzTnBiMjRwSUQwK1hHNGdJQ0FnSUNBZ0lIQmxjbTFwYzNOcGIyNHVjR1Z5YldsemMybHZia3RsZVNBOVBUMGdjR1Z5YldsemMybHZia3RsZVNBbUpseHVJQ0FnSUNBZ0lDQndaWEp0YVhOemFXOXVMbk5qYjNCbFMybHVaQ0E5UFQwZ2MyTnZjR1ZMYVc1a0lDWW1YRzRnSUNBZ0lDQWdJSEJsY20xcGMzTnBiMjR1YzJOdmNHVkpaQ0E5UFQwZ2MyTnZjR1ZKWkNBbUpseHVJQ0FnSUNBZ0lDQW9JWEJsY20xcGMzTnBiMjR1YzNSaGNuUnpRWFFnZkh3Z0lXRjBJSHg4SUhCbGNtMXBjM05wYjI0dWMzUmhjblJ6UVhRZ1BEMGdZWFFwSUNZbVhHNGdJQ0FnSUNBZ0lDZ2hjR1Z5YldsemMybHZiaTVsZUhCcGNtVnpRWFFnZkh3Z0lXRjBJSHg4SUhCbGNtMXBjM05wYjI0dVpYaHdhWEpsYzBGMElENDlJR0YwS1Z4dUlDQWdJQ2s3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJrWld4bGRHVkdiM0pRY21sdVkybHdZV3dvZEdWdVlXNTBTV1E2SUhOMGNtbHVaeXdnY0hKcGJtTnBjR0ZzU1dRNklITjBjbWx1Wnl3Z0xpNHVZWEpuY3pvZ1lXNTVXMTBwT2lCUWNtOXRhWE5sUEhadmFXUStJSHRjYmlBZ0lDQmhkMkZwZENCa1pXeGxkR1ZOWVc1NVFubEpaQ2gwYUdsekxDQmhkMkZwZENCMGFHbHpMbXhwYzNSR2IzSlFjbWx1WTJsd1lXd29kR1Z1WVc1MFNXUXNJSEJ5YVc1amFYQmhiRWxrTENBdUxpNWhjbWR6S1N3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCa1pXeGxkR1ZHYjNKVVpXNWhiblFvZEdWdVlXNTBTV1E2SUhOMGNtbHVaeXdnTGk0dVlYSm5jem9nWVc1NVcxMHBPaUJRY205dGFYTmxQSFp2YVdRK0lIdGNiaUFnSUNCaGQyRnBkQ0JrWld4bGRHVk5ZVzU1UW5sSlpDaGNiaUFnSUNBZ0lIUm9hWE1zWEc0Z0lDQWdJQ0FvWVhkaGFYUWdkR2hwY3k1c2FYTjBRV3hzS0M0dUxtRnlaM01wS1M1bWFXeDBaWElvS0hCbGNtMXBjM05wYjI0cElEMCtJSE5oYldWVVpXNWhiblFvY0dWeWJXbHpjMmx2Ymk1MFpXNWhiblFzSUhSbGJtRnVkRWxrS1Nrc1hHNGdJQ0FnSUNBdUxpNWhjbWR6WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVYRzRnSUVCMGNtRnVjMkZqZEdsdmJtRnNLQ2xjYmlBZ1lYTjVibU1nY21WaWRXbHNaRVp2Y2xCeWFXNWphWEJoYkNoY2JpQWdJQ0IwWlc1aGJuUkpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lIQnlhVzVqYVhCaGJFbGtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ0xpNHVZWEpuY3pvZ1lXNTVXMTFjYmlBZ0tUb2dVSEp2YldselpUeEZabVpsWTNScGRtVlFaWEp0YVhOemFXOXVXMTArSUh0Y2JpQWdJQ0JoZDJGcGRDQjBhR2x6TG1SbGJHVjBaVVp2Y2xCeWFXNWphWEJoYkNoMFpXNWhiblJKWkN3Z2NISnBibU5wY0dGc1NXUXNJQzR1TG1GeVozTXBPMXh1WEc0Z0lDQWdZMjl1YzNRZ2NtOXNaVUZ6YzJsbmJtMWxiblJUWlhKMmFXTmxJRDBnYm1WM0lGSnZiR1ZCYzNOcFoyNXRaVzUwVTJWeWRtbGpaU2dwTzF4dUlDQWdJR052Ym5OMElISnZiR1ZRWlhKdGFYTnphVzl1VTJWeWRtbGpaU0E5SUc1bGR5QlNiMnhsVUdWeWJXbHpjMmx2YmxObGNuWnBZMlVvS1R0Y2JpQWdJQ0JqYjI1emRDQndaWEp0YVhOemFXOXVVMlZ5ZG1salpTQTlJRzVsZHlCUVpYSnRhWE56YVc5dVUyVnlkbWxqWlNncE8xeHVJQ0FnSUdOdmJuTjBJR2R5YjNWd1RXVnRZbVZ5YzJocGNGTmxjblpwWTJVZ1BTQnVaWGNnUjNKdmRYQk5aVzFpWlhKemFHbHdVMlZ5ZG1salpTZ3BPMXh1SUNBZ0lHTnZibk4wSUhCeWFXNWphWEJoYkZObGNuWnBZMlVnUFNCdVpYY2dVSEpwYm1OcGNHRnNVMlZ5ZG1salpTZ3BPMXh1SUNBZ0lHTnZibk4wSUc5eVoxVnVhWFJEYkc5emRYSmxVMlZ5ZG1salpTQTlJRzVsZHlCUGNtZFZibWwwUTJ4dmMzVnlaVk5sY25acFkyVW9LVHRjYmlBZ0lDQmpiMjV6ZENCcGJtaGxjbWwwWVc1alpVSnNiMk5yVTJWeWRtbGpaU0E5SUc1bGR5QkpibWhsY21sMFlXNWpaVUpzYjJOclUyVnlkbWxqWlNncE8xeHVYRzRnSUNBZ1kyOXVjM1FnYldGMFpYSnBZV3hwZW1Wa09pQkZabVpsWTNScGRtVlFaWEp0YVhOemFXOXVVMjVoY0hOb2IzUmJYU0E5SUZ0ZE8xeHVJQ0FnSUdOdmJuTjBJSE52ZFhKalpVRnpjMmxuYm0xbGJuUnpJRDBnWVhkaGFYUWdjbTlzWlVGemMybG5ibTFsYm5SVFpYSjJhV05sTG14cGMzUlFjbWx1WTJsd1lXeEJjM05wWjI1dFpXNTBjeWhjYmlBZ0lDQWdJSFJsYm1GdWRFbGtMRnh1SUNBZ0lDQWdjSEpwYm1OcGNHRnNTV1FzWEc0Z0lDQWdJQ0F1TGk1aGNtZHpYRzRnSUNBZ0tUdGNiaUFnSUNCamIyNXpkQ0JuY205MWNFMWxiV0psY25Ob2FYQnpJRDBnWVhkaGFYUWdaM0p2ZFhCTlpXMWlaWEp6YUdsd1UyVnlkbWxqWlM1c2FYTjBVSEpwYm1OcGNHRnNSM0p2ZFhCektGeHVJQ0FnSUNBZ2NISnBibU5wY0dGc1NXUXNYRzRnSUNBZ0lDQXVMaTVoY21kelhHNGdJQ0FnS1R0Y2JpQWdJQ0JqYjI1emRDQm5jbTkxY0VGemMybG5ibTFsYm5SeklEMGdLRnh1SUNBZ0lDQWdZWGRoYVhRZ1VISnZiV2x6WlM1aGJHd29YRzRnSUNBZ0lDQWdJR2R5YjNWd1RXVnRZbVZ5YzJocGNITXViV0Z3S0dGemVXNWpJQ2h0WlcxaVpYSnphR2x3S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdaM0p2ZFhCUWNtbHVZMmx3WVd3Z1BTQmhkMkZwZENCd2NtbHVZMmx3WVd4VFpYSjJhV05sTG1kbGRFZHliM1Z3VUhKcGJtTnBjR0ZzS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdjbVZzWVhScGIyNUpaQ2h0WlcxaVpYSnphR2x3TG5SbGJtRnVkQ2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaV3hoZEdsdmJrbGtLRzFsYldKbGNuTm9hWEF1WjNKdmRYQXBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0xpNHVZWEpuYzF4dUlDQWdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEp2YkdWQmMzTnBaMjV0Wlc1MFUyVnlkbWxqWlM1c2FYTjBVSEpwYm1OcGNHRnNRWE56YVdkdWJXVnVkSE1vWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBaVzVoYm5SSlpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUdkeWIzVndVSEpwYm1OcGNHRnNMbWxrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdMaTR1WVhKbmMxeHVJQ0FnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnSUNBcFhHNGdJQ0FnS1M1bWJHRjBLQ2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmhjM05wWjI1dFpXNTBjeUE5SUZzdUxpNXpiM1Z5WTJWQmMzTnBaMjV0Wlc1MGN5d2dMaTR1WjNKdmRYQkJjM05wWjI1dFpXNTBjMTA3WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0JoYzNOcFoyNXRaVzUwSUc5bUlHRnpjMmxuYm0xbGJuUnpLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQnliMnhsVUdWeWJXbHpjMmx2Ym5NZ1BTQmhkMkZwZENCeWIyeGxVR1Z5YldsemMybHZibE5sY25acFkyVXViR2x6ZEZKdmJHVlFaWEp0YVhOemFXOXVjeWhjYmlBZ0lDQWdJQ0FnY21Wc1lYUnBiMjVKWkNoaGMzTnBaMjV0Wlc1MExuSnZiR1VwTEZ4dUlDQWdJQ0FnSUNBdUxpNWhjbWR6WEc0Z0lDQWdJQ0FwTzF4dUlDQWdJQ0FnWTI5dWMzUWdjR1Z5YldsemMybHZibk1nUFNCaGQyRnBkQ0JRY205dGFYTmxMbUZzYkNoY2JpQWdJQ0FnSUNBZ2NtOXNaVkJsY20xcGMzTnBiMjV6TG0xaGNDaGhjM2x1WXlBb2NtOXNaVkJsY20xcGMzTnBiMjRwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQndaWEp0YVhOemFXOXVJRDBnWVhkaGFYUWdjR1Z5YldsemMybHZibE5sY25acFkyVXVabWx1WkU5dVpVSjVLRnh1SUNBZ0lDQWdJQ0FnSUNBZ1hDSnBaRndpTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjbVZzWVhScGIyNUpaQ2h5YjJ4bFVHVnliV2x6YzJsdmJpNXdaWEp0YVhOemFXOXVLU0JoY3lCdVpYWmxjaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDNHVMbUZ5WjNOY2JpQWdJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ3WlhKdGFYTnphVzl1TzF4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lHWnZjaUFvWTI5dWMzUWdjR1Z5YldsemMybHZiaUJ2WmlCd1pYSnRhWE56YVc5dWN5a2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb0lYQmxjbTFwYzNOcGIyNHBJR052Ym5ScGJuVmxPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnpZMjl3WlV0cGJtUWdQU0JoYzNOcFoyNXRaVzUwTG5OamIzQmxTMmx1WkR0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYzJOdmNHVkpaQ0E5SUdGemMybG5ibTFsYm5RdWMyTnZjR1ZKWkR0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYzJOdmNHVnpPaUJCY25KaGVUeDdJSE5qYjNCbFMybHVaRG9nVTJOdmNHVkxhVzVrT3lCelkyOXdaVWxrT2lCemRISnBibWNnZlQ0Z1BTQmJYVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tITmpiM0JsUzJsdVpDQTlQVDBnVTJOdmNHVkxhVzVrTGxSbGJtRnVkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lITmpiM0JsY3k1d2RYTm9LSHNnYzJOdmNHVkxhVzVrTENCelkyOXdaVWxrT2lCMFpXNWhiblJKWkNCOUtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h6WTI5d1pVdHBibVFnUFQwOUlGTmpiM0JsUzJsdVpDNVNaWE52ZFhKalpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhOamIzQmxjeTV3ZFhOb0tIc2djMk52Y0dWTGFXNWtMQ0J6WTI5d1pVbGtJSDBwTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tITmpiM0JsUzJsdVpDQTlQVDBnVTJOdmNHVkxhVzVrTGs5eVoxVnVhWFFnSmlZZ0lXRnpjMmxuYm0xbGJuUXVhVzVvWlhKcGRFUnZkMjRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnpZMjl3WlhNdWNIVnphQ2g3SUhOamIzQmxTMmx1WkN3Z2MyTnZjR1ZKWkNCOUtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h6WTI5d1pVdHBibVFnUFQwOUlGTmpiM0JsUzJsdVpDNVBjbWRWYm1sMElDWW1JR0Z6YzJsbmJtMWxiblF1YVc1b1pYSnBkRVJ2ZDI0cElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmtaWE5qWlc1a1lXNTBjeUE5SUdGM1lXbDBJRzl5WjFWdWFYUkRiRzl6ZFhKbFUyVnlkbWxqWlM1c2FYTjBSR1Z6WTJWdVpHRnVkSE1vWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBaVzVoYm5SSlpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUhOamIzQmxTV1FzWEc0Z0lDQWdJQ0FnSUNBZ0lDQXVMaTVoY21kelhHNGdJQ0FnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnSUNCelkyOXdaWE11Y0hWemFDZ3VMaTVrWlhOalpXNWtZVzUwY3k1dFlYQW9LSEp2ZHlrZ1BUNGdLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lITmpiM0JsUzJsdVpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUhOamIzQmxTV1E2SUhKbGJHRjBhVzl1U1dRb2NtOTNMbVJsYzJObGJtUmhiblFwTEZ4dUlDQWdJQ0FnSUNBZ0lIMHBLU2s3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJSE5qYjNCbFpDQnZaaUJ6WTI5d1pYTXBJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9YRzRnSUNBZ0lDQWdJQ0FnSUNCelkyOXdaVXRwYm1RZ1BUMDlJRk5qYjNCbFMybHVaQzVQY21kVmJtbDBJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQmhjM05wWjI1dFpXNTBMbWx1YUdWeWFYUkViM2R1SUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0J6WTI5d1pXUXVjMk52Y0dWSlpDQWhQVDBnYzJOdmNHVkpaQ0FtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdLR0YzWVdsMElHbHVhR1Z5YVhSaGJtTmxRbXh2WTJ0VFpYSjJhV05sTG1OaGRHVm5iM0o1UW14dlkydGxaRVp2Y2tGdVkyVnpkRzl5S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IwWlc1aGJuUkpaQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjMk52Y0dWa0xuTmpiM0JsU1dRc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhOamIzQmxTV1FzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJsY20xcGMzTnBiMjR1WTJGMFpXZHZjbmtzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQzR1TG1GeVozTmNiaUFnSUNBZ0lDQWdJQ0FnSUNrcFhHNGdJQ0FnSUNBZ0lDQWdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2JXRjBaWEpwWVd4cGVtVmtMbkIxYzJnb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdRNklHbGtLQ2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBaVzVoYm5SSlpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUhCeWFXNWphWEJoYkVsa0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnY0dWeWJXbHpjMmx2Ymt0bGVUb2djR1Z5YldsemMybHZiaTVyWlhrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6WTI5d1pVdHBibVE2SUhOamIzQmxaQzV6WTI5d1pVdHBibVFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnpZMjl3WlVsa09pQnpZMjl3WldRdWMyTnZjR1ZKWkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE52ZFhKalpVdHBibVE2SUZ3aWNtOXNaVjloYzNOcFoyNXRaVzUwWENJc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6YjNWeVkyVkpaRG9nWVhOemFXZHViV1Z1ZEM1cFpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUhOMFlYSjBjMEYwT2lCaGMzTnBaMjV0Wlc1MExuTjBZWEowYzBGMExGeHVJQ0FnSUNBZ0lDQWdJQ0FnWlhod2FYSmxjMEYwT2lCaGMzTnBaMjV0Wlc1MExtVjRjR2x5WlhOQmRDeGNiaUFnSUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdOdmJuTjBJR055WldGMFpXUWdQU0JoZDJGcGRDQlFjbTl0YVhObExtRnNiQ2hjYmlBZ0lDQWdJRzFoZEdWeWFXRnNhWHBsWkM1dFlYQW9LSEJsY20xcGMzTnBiMjRwSUQwK1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTNKbFlYUmxUMjVsS0Z4dUlDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsa09pQndaWEp0YVhOemFXOXVMbWxrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdkR1Z1WVc1ME9pQndaWEp0YVhOemFXOXVMblJsYm1GdWRFbGtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2NISnBibU5wY0dGc09pQndaWEp0YVhOemFXOXVMbkJ5YVc1amFYQmhiRWxrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjR1Z5YldsemMybHZia3RsZVRvZ2NHVnliV2x6YzJsdmJpNXdaWEp0YVhOemFXOXVTMlY1TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjMk52Y0dWTGFXNWtPaUJ3WlhKdGFYTnphVzl1TG5OamIzQmxTMmx1WkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE5qYjNCbFNXUTZJSEJsY20xcGMzTnBiMjR1YzJOdmNHVkpaQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lITnZkWEpqWlV0cGJtUTZJSEJsY20xcGMzTnBiMjR1YzI5MWNtTmxTMmx1WkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE52ZFhKalpVbGtPaUJ3WlhKdGFYTnphVzl1TG5OdmRYSmpaVWxrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM1JoY25SelFYUTZJSEJsY20xcGMzTnBiMjR1YzNSaGNuUnpRWFFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmxlSEJwY21WelFYUTZJSEJsY20xcGMzTnBiMjR1Wlhod2FYSmxjMEYwTEZ4dUlDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQ0FnTGk0dVlYSm5jMXh1SUNBZ0lDQWdJQ0FwWEc0Z0lDQWdJQ0FwWEc0Z0lDQWdLVHRjYmlBZ0lDQnlaWFIxY200Z1kzSmxZWFJsWkR0Y2JpQWdmVnh1WEc0Z0lFQjBjbUZ1YzJGamRHbHZibUZzS0NsY2JpQWdZWE41Ym1NZ2NtVmlkV2xzWkVadmNsUmxibUZ1ZENoMFpXNWhiblJKWkRvZ2MzUnlhVzVuTENBdUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4ZG05cFpENGdlMXh1SUNBZ0lHTnZibk4wSUhCeWFXNWphWEJoYkhNZ1BTQW9ZWGRoYVhRZ2JtVjNJRkJ5YVc1amFYQmhiRk5sY25acFkyVW9LUzVzYVhOMFFXeHNLQzR1TG1GeVozTXBLUzVtYVd4MFpYSW9LSEJ5YVc1amFYQmhiQ2tnUFQ1Y2JpQWdJQ0FnSUhOaGJXVlVaVzVoYm5Rb2NISnBibU5wY0dGc0xuUmxibUZ1ZEN3Z2RHVnVZVzUwU1dRcFhHNGdJQ0FnS1R0Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUhCeWFXNWphWEJoYkNCdlppQndjbWx1WTJsd1lXeHpLU0I3WEc0Z0lDQWdJQ0JoZDJGcGRDQjBhR2x6TG5KbFluVnBiR1JHYjNKUWNtbHVZMmx3WVd3b2RHVnVZVzUwU1dRc0lIQnlhVzVqYVhCaGJDNXBaQ3dnTGk0dVlYSm5jeWs3WEc0Z0lDQWdmVnh1SUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlFjbTkwWldOMFpXUlNaWE52ZFhKalpWTmxjblpwWTJVZ1pYaDBaVzVrY3lCQ1lYTmxUVzlrWld4VFpYSjJhV05sUEZCeWIzUmxZM1JsWkZKbGMyOTFjbU5sUGlCN1hHNGdJR052Ym5OMGNuVmpkRzl5S0NrZ2UxeHVJQ0FnSUhOMWNHVnlLRkJ5YjNSbFkzUmxaRkpsYzI5MWNtTmxLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJSEpsWjJsemRHVnlVbVZ6YjNWeVkyVW9YRzRnSUNBZ2FXNXdkWFE2SUZKbFoybHpkR1Z5VW1WemIzVnlZMlZKYm5CMWRDeGNiaUFnSUNBdUxpNWhjbWR6T2lCaGJubGJYVnh1SUNBcE9pQlFjbTl0YVhObFBGQnliM1JsWTNSbFpGSmxjMjkxY21ObFBpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZM0psWVhSbFQyNWxLRnh1SUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0JwWkRvZ2FXUW9LU3hjYmlBZ0lDQWdJQ0FnZEdWdVlXNTBPaUJwYm5CMWRDNTBaVzVoYm5SSlpDeGNiaUFnSUNBZ0lDQWdiM0puVlc1cGREb2dhVzV3ZFhRdWIzSm5WVzVwZEVsa0xGeHVJQ0FnSUNBZ0lDQnlaWE52ZFhKalpWUjVjR1U2SUdsdWNIVjBMbkpsYzI5MWNtTmxWSGx3WlN4Y2JpQWdJQ0FnSUNBZ2NtVnpiM1Z5WTJWSlpEb2dhVzV3ZFhRdWNtVnpiM1Z5WTJWSlpDeGNiaUFnSUNBZ0lDQWdkbWx6YVdKcGJHbDBlVG9nYVc1d2RYUXVkbWx6YVdKcGJHbDBlU3hjYmlBZ0lDQWdJQ0FnYjNkdVpYSTZJR2x1Y0hWMExtOTNibVZ5VUhKcGJtTnBjR0ZzU1dRc1hHNGdJQ0FnSUNBZ0lITmxibk5wZEdsMmFYUjVPaUJwYm5CMWRDNXpaVzV6YVhScGRtbDBlU3hjYmlBZ0lDQWdJQ0FnYldWMFlXUmhkR0U2SUdsdWNIVjBMbTFsZEdGa1lYUmhMRnh1SUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQzR1TG1GeVozTmNiaUFnSUNBcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ1oyVjBRbmxFYjIxaGFXNVNaWE52ZFhKalpTaGNiaUFnSUNCMFpXNWhiblJKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJSEpsYzI5MWNtTmxWSGx3WlRvZ2MzUnlhVzVuTEZ4dUlDQWdJSEpsYzI5MWNtTmxTV1E2SUhOMGNtbHVaeXhjYmlBZ0lDQXVMaTVoY21kek9pQmhibmxiWFZ4dUlDQXBPaUJRY205dGFYTmxQRkJ5YjNSbFkzUmxaRkpsYzI5MWNtTmxJSHdnZFc1a1pXWnBibVZrUGlCN1hHNGdJQ0FnY21WMGRYSnVJQ2hoZDJGcGRDQjBhR2x6TG14cGMzUkJiR3dvTGk0dVlYSm5jeWtwTG1acGJtUW9YRzRnSUNBZ0lDQW9jbVZ6YjNWeVkyVXBJRDArWEc0Z0lDQWdJQ0FnSUhOaGJXVlVaVzVoYm5Rb2NtVnpiM1Z5WTJVdWRHVnVZVzUwTENCMFpXNWhiblJKWkNrZ0ppWmNiaUFnSUNBZ0lDQWdjbVZ6YjNWeVkyVXVjbVZ6YjNWeVkyVlVlWEJsSUQwOVBTQnlaWE52ZFhKalpWUjVjR1VnSmlaY2JpQWdJQ0FnSUNBZ2NtVnpiM1Z5WTJVdWNtVnpiM1Z5WTJWSlpDQTlQVDBnY21WemIzVnlZMlZKWkZ4dUlDQWdJQ2s3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJ0YjNabFVtVnpiM1Z5WTJWVWIwOXlaMVZ1YVhRb1hHNGdJQ0FnY0hKdmRHVmpkR1ZrVW1WemIzVnlZMlZKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJRzl5WjFWdWFYUkpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lDNHVMbUZ5WjNNNklHRnVlVnRkWEc0Z0lDazZJRkJ5YjIxcGMyVThVSEp2ZEdWamRHVmtVbVZ6YjNWeVkyVStJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTUxY0dSaGRHVlBibVVvY0hKdmRHVmpkR1ZrVW1WemIzVnlZMlZKWkN3Z2V5QnZjbWRWYm1sME9pQnZjbWRWYm1sMFNXUWdmU3dnTGk0dVlYSm5jeWs3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJ6WlhSV2FYTnBZbWxzYVhSNUtGeHVJQ0FnSUhCeWIzUmxZM1JsWkZKbGMyOTFjbU5sU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0IyYVhOcFltbHNhWFI1T2lCU1pYTnZkWEpqWlZacGMybGlhV3hwZEhrc1hHNGdJQ0FnTGk0dVlYSm5jem9nWVc1NVcxMWNiaUFnS1RvZ1VISnZiV2x6WlR4UWNtOTBaV04wWldSU1pYTnZkWEpqWlQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuVndaR0YwWlU5dVpTaHdjbTkwWldOMFpXUlNaWE52ZFhKalpVbGtMQ0I3SUhacGMybGlhV3hwZEhrZ2ZTd2dMaTR1WVhKbmN5azdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QjBjbUZ1YzJabGNrOTNibVZ5YzJocGNDaGNiaUFnSUNCd2NtOTBaV04wWldSU1pYTnZkWEpqWlVsa09pQnpkSEpwYm1jc1hHNGdJQ0FnYjNkdVpYSlFjbWx1WTJsd1lXeEpaRG9nYzNSeWFXNW5JSHdnZFc1a1pXWnBibVZrTEZ4dUlDQWdJQzR1TG1GeVozTTZJR0Z1ZVZ0ZFhHNGdJQ2s2SUZCeWIyMXBjMlU4VUhKdmRHVmpkR1ZrVW1WemIzVnlZMlUrSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1MWNHUmhkR1ZQYm1Vb2NISnZkR1ZqZEdWa1VtVnpiM1Z5WTJWSlpDd2dleUJ2ZDI1bGNqb2diM2R1WlhKUWNtbHVZMmx3WVd4SlpDQjlMQ0F1TGk1aGNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR3hwYzNSUGNtZFZibWwwVW1WemIzVnlZMlZ6S0c5eVoxVnVhWFJKWkRvZ2MzUnlhVzVuTENBdUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4VUhKdmRHVmpkR1ZrVW1WemIzVnlZMlZiWFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUFvWVhkaGFYUWdkR2hwY3k1c2FYTjBRV3hzS0M0dUxtRnlaM01wS1M1bWFXeDBaWElvS0hKbGMyOTFjbU5sS1NBOVBseHVJQ0FnSUNBZ2NtVnNZWFJwYjI1TllYUmphQ2h5WlhOdmRYSmpaUzV2Y21kVmJtbDBMQ0J2Y21kVmJtbDBTV1FwWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR3hwYzNSVVpXNWhiblJTWlhOdmRYSmpaWE1vZEdWdVlXNTBTV1E2SUhOMGNtbHVaeXdnTGk0dVlYSm5jem9nWVc1NVcxMHBPaUJRY205dGFYTmxQRkJ5YjNSbFkzUmxaRkpsYzI5MWNtTmxXMTArSUh0Y2JpQWdJQ0J5WlhSMWNtNGdLR0YzWVdsMElIUm9hWE11YkdsemRFRnNiQ2d1TGk1aGNtZHpLU2t1Wm1sc2RHVnlLQ2h5WlhOdmRYSmpaU2tnUFQ0Z2MyRnRaVlJsYm1GdWRDaHlaWE52ZFhKalpTNTBaVzVoYm5Rc0lIUmxibUZ1ZEVsa0tTazdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR05zWVhOeklGSmxjMjkxY21ObFIzSmhiblJUWlhKMmFXTmxJR1Y0ZEdWdVpITWdRbUZ6WlUxdlpHVnNVMlZ5ZG1salpUeFNaWE52ZFhKalpVZHlZVzUwUGlCN1hHNGdJR052Ym5OMGNuVmpkRzl5S0NrZ2UxeHVJQ0FnSUhOMWNHVnlLRkpsYzI5MWNtTmxSM0poYm5RcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ1ozSmhiblJTWlhOdmRYSmpaU2hwYm5CMWREb2dSM0poYm5SU1pYTnZkWEpqWlVsdWNIVjBMQ0F1TGk1aGNtZHpPaUJoYm5sYlhTazZJRkJ5YjIxcGMyVThVbVZ6YjNWeVkyVkhjbUZ1ZEQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnlaV0YwWlU5dVpTaGNiaUFnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdhV1E2SUdsa0tDa3NYRzRnSUNBZ0lDQWdJSFJsYm1GdWREb2dhVzV3ZFhRdWRHVnVZVzUwU1dRc1hHNGdJQ0FnSUNBZ0lISmxjMjkxY21ObE9pQnBibkIxZEM1eVpYTnZkWEpqWlVsa0xGeHVJQ0FnSUNBZ0lDQndjbWx1WTJsd1lXdzZJR2x1Y0hWMExuQnlhVzVqYVhCaGJFbGtMRnh1SUNBZ0lDQWdJQ0J3WlhKdGFYTnphVzl1UzJWNU9pQnBibkIxZEM1d1pYSnRhWE56YVc5dVMyVjVMRnh1SUNBZ0lDQWdJQ0J6ZEdGeWRITkJkRG9nYVc1d2RYUXVjM1JoY25SelFYUXNYRzRnSUNBZ0lDQWdJR1Y0Y0dseVpYTkJkRG9nYVc1d2RYUXVaWGh3YVhKbGMwRjBMRnh1SUNBZ0lDQWdJQ0JqYjI1a2FYUnBiMjV6T2lCcGJuQjFkQzVqYjI1a2FYUnBiMjV6TEZ4dUlDQWdJQ0FnSUNCamNtVmhkR1ZrUW5rNklHbHVjSFYwTG1OeVpXRjBaV1JDZVZCeWFXNWphWEJoYkVsa0xGeHVJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDNHVMbUZ5WjNOY2JpQWdJQ0FwTzF4dUlDQjlYRzVjYmlBZ1lYTjVibU1nY21WMmIydGxSM0poYm5Rb1ozSmhiblJKWkRvZ2MzUnlhVzVuTENBdUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4ZG05cFpENGdlMXh1SUNBZ0lHRjNZV2wwSUhSb2FYTXVaR1ZzWlhSbFFubEpaQ2huY21GdWRFbGtMQ0F1TGk1aGNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR3hwYzNSU1pYTnZkWEpqWlVkeVlXNTBjeWh3Y205MFpXTjBaV1JTWlhOdmRYSmpaVWxrT2lCemRISnBibWNzSUM0dUxtRnlaM002SUdGdWVWdGRLVG9nVUhKdmJXbHpaVHhTWlhOdmRYSmpaVWR5WVc1MFcxMCtJSHRjYmlBZ0lDQnlaWFIxY200Z0tHRjNZV2wwSUhSb2FYTXViR2x6ZEVGc2JDZ3VMaTVoY21kektTa3VabWxzZEdWeUtDaG5jbUZ1ZENrZ1BUNWNiaUFnSUNBZ0lISmxiR0YwYVc5dVRXRjBZMmdvWjNKaGJuUXVjbVZ6YjNWeVkyVXNJSEJ5YjNSbFkzUmxaRkpsYzI5MWNtTmxTV1FwWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR3hwYzNSUWNtbHVZMmx3WVd4SGNtRnVkSE1vWEc0Z0lDQWdkR1Z1WVc1MFNXUTZJSE4wY21sdVp5eGNiaUFnSUNCd2NtbHVZMmx3WVd4SlpEb2djM1J5YVc1bkxGeHVJQ0FnSUM0dUxtRnlaM002SUdGdWVWdGRYRzRnSUNrNklGQnliMjFwYzJVOFVtVnpiM1Z5WTJWSGNtRnVkRnRkUGlCN1hHNGdJQ0FnY21WMGRYSnVJQ2hoZDJGcGRDQjBhR2x6TG14cGMzUkJiR3dvTGk0dVlYSm5jeWtwTG1acGJIUmxjaWhjYmlBZ0lDQWdJQ2huY21GdWRDa2dQVDRnYzJGdFpWUmxibUZ1ZENobmNtRnVkQzUwWlc1aGJuUXNJSFJsYm1GdWRFbGtLU0FtSmlCeVpXeGhkR2x2YmsxaGRHTm9LR2R5WVc1MExuQnlhVzVqYVhCaGJDd2djSEpwYm1OcGNHRnNTV1FwWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR2hoYzBkeVlXNTBLRnh1SUNBZ0lIUmxibUZ1ZEVsa09pQnpkSEpwYm1jc1hHNGdJQ0FnY0hKcGJtTnBjR0ZzU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0J3Y205MFpXTjBaV1JTWlhOdmRYSmpaVWxrT2lCemRISnBibWNzWEc0Z0lDQWdjR1Z5YldsemMybHZia3RsZVRvZ2MzUnlhVzVuTEZ4dUlDQWdJR0YwUHpvZ1JHRjBaU3hjYmlBZ0lDQXVMaTVoY21kek9pQmhibmxiWFZ4dUlDQXBPaUJRY205dGFYTmxQR0p2YjJ4bFlXNCtJSHRjYmlBZ0lDQnlaWFIxY200Z0tHRjNZV2wwSUhSb2FYTXViR2x6ZEZCeWFXNWphWEJoYkVkeVlXNTBjeWgwWlc1aGJuUkpaQ3dnY0hKcGJtTnBjR0ZzU1dRc0lDNHVMbUZ5WjNNcEtTNXpiMjFsS0Z4dUlDQWdJQ0FnS0dkeVlXNTBLU0E5UGx4dUlDQWdJQ0FnSUNCeVpXeGhkR2x2YmsxaGRHTm9LR2R5WVc1MExuSmxjMjkxY21ObExDQndjbTkwWldOMFpXUlNaWE52ZFhKalpVbGtLU0FtSmx4dUlDQWdJQ0FnSUNCbmNtRnVkQzV3WlhKdGFYTnphVzl1UzJWNUlEMDlQU0J3WlhKdGFYTnphVzl1UzJWNUlDWW1YRzRnSUNBZ0lDQWdJQ2doWjNKaGJuUXVjM1JoY25SelFYUWdmSHdnSVdGMElIeDhJR2R5WVc1MExuTjBZWEowYzBGMElEdzlJR0YwS1NBbUpseHVJQ0FnSUNBZ0lDQW9JV2R5WVc1MExtVjRjR2x5WlhOQmRDQjhmQ0FoWVhRZ2ZId2daM0poYm5RdVpYaHdhWEpsYzBGMElENDlJR0YwS1Z4dUlDQWdJQ2s3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJrWld4bGRHVkJiR3hHYjNKU1pYTnZkWEpqWlNoY2JpQWdJQ0J3Y205MFpXTjBaV1JTWlhOdmRYSmpaVWxrT2lCemRISnBibWNzWEc0Z0lDQWdMaTR1WVhKbmN6b2dZVzU1VzExY2JpQWdLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQjdYRzRnSUNBZ1lYZGhhWFFnWkdWc1pYUmxUV0Z1ZVVKNVNXUW9YRzRnSUNBZ0lDQjBhR2x6TEZ4dUlDQWdJQ0FnWVhkaGFYUWdkR2hwY3k1c2FYTjBVbVZ6YjNWeVkyVkhjbUZ1ZEhNb2NISnZkR1ZqZEdWa1VtVnpiM1Z5WTJWSlpDd2dMaTR1WVhKbmN5a3NYRzRnSUNBZ0lDQXVMaTVoY21kelhHNGdJQ0FnS1R0Y2JpQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyeGhjM01nVW1WemIzVnlZMlZNYVdabFkzbGpiR1ZUWlhKMmFXTmxJSHRjYmlBZ1lYTjVibU1nZFc1eVpXZHBjM1JsY2xKbGMyOTFjbU5sS0hCeWIzUmxZM1JsWkZKbGMyOTFjbU5sU1dRNklITjBjbWx1Wnl3Z0xpNHVZWEpuY3pvZ1lXNTVXMTBwT2lCUWNtOXRhWE5sUEhadmFXUStJSHRjYmlBZ0lDQmhkMkZwZENCdVpYY2dVbVZ6YjNWeVkyVkhjbUZ1ZEZObGNuWnBZMlVvS1M1a1pXeGxkR1ZCYkd4R2IzSlNaWE52ZFhKalpTaHdjbTkwWldOMFpXUlNaWE52ZFhKalpVbGtMQ0F1TGk1aGNtZHpLVHRjYmlBZ0lDQmhkMkZwZENCdVpYY2dVSEp2ZEdWamRHVmtVbVZ6YjNWeVkyVlRaWEoyYVdObEtDa3VaR1ZzWlhSbFFubEpaQ2h3Y205MFpXTjBaV1JTWlhOdmRYSmpaVWxrTENBdUxpNWhjbWR6S1R0Y2JpQWdmVnh1WEc0Z0lHRnplVzVqSUhKbGMyOXNkbVZTWlhOdmRYSmpaVk5qYjNCbEtGeHVJQ0FnSUhCeWIzUmxZM1JsWkZKbGMyOTFjbU5sU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEh0Y2JpQWdJQ0IwWlc1aGJuUkpaRG9nYzNSeWFXNW5PMXh1SUNBZ0lHOXlaMVZ1YVhSSlpEb2djM1J5YVc1bk8xeHVJQ0FnSUhacGMybGlhV3hwZEhrNklGSmxjMjkxY21ObFZtbHphV0pwYkdsMGVUdGNiaUFnSUNCdmQyNWxjbEJ5YVc1amFYQmhiRWxrUHpvZ2MzUnlhVzVuTzF4dUlDQjlQaUI3WEc0Z0lDQWdZMjl1YzNRZ2NtVnpiM1Z5WTJVZ1BTQmhkMkZwZENCdVpYY2dVSEp2ZEdWamRHVmtVbVZ6YjNWeVkyVlRaWEoyYVdObEtDa3VaMlYwUW5sSlpDaHdjbTkwWldOMFpXUlNaWE52ZFhKalpVbGtMQ0F1TGk1aGNtZHpLVHRjYmlBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ2RHVnVZVzUwU1dRNklISmxiR0YwYVc5dVNXUW9jbVZ6YjNWeVkyVXVkR1Z1WVc1MEtTeGNiaUFnSUNBZ0lHOXlaMVZ1YVhSSlpEb2djbVZzWVhScGIyNUpaQ2h5WlhOdmRYSmpaUzV2Y21kVmJtbDBLU3hjYmlBZ0lDQWdJSFpwYzJsaWFXeHBkSGs2SUhKbGMyOTFjbU5sTG5acGMybGlhV3hwZEhrc1hHNGdJQ0FnSUNCdmQyNWxjbEJ5YVc1amFYQmhiRWxrT2lCeVpYTnZkWEpqWlM1dmQyNWxjaUEvSUhKbGJHRjBhVzl1U1dRb2NtVnpiM1Z5WTJVdWIzZHVaWElwSURvZ2RXNWtaV1pwYm1Wa0xGeHVJQ0FnSUgwN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUZOMGIzSmhaMlZDYVc1a2FXNW5VMlZ5ZG1salpTQmxlSFJsYm1SeklFSmhjMlZOYjJSbGJGTmxjblpwWTJVOFUzUnZjbUZuWlVKcGJtUnBibWMrSUh0Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNGdJQ0FnYzNWd1pYSW9VM1J2Y21GblpVSnBibVJwYm1jcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ1kzSmxZWFJsUW1sdVpHbHVaeWhwYm5CMWREb2dRM0psWVhSbFUzUnZjbUZuWlVKcGJtUnBibWRKYm5CMWRDd2dMaTR1WVhKbmN6b2dZVzU1VzEwcE9pQlFjbTl0YVhObFBGTjBiM0poWjJWQ2FXNWthVzVuUGlCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVkzSmxZWFJsVDI1bEtGeHVJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQnBaRG9nYVdRb0tTeGNiaUFnSUNBZ0lDQWdkR1Z1WVc1ME9pQnBibkIxZEM1MFpXNWhiblJKWkN4Y2JpQWdJQ0FnSUNBZ2MzUnZjbUZuWlV0cGJtUTZJR2x1Y0hWMExuTjBiM0poWjJWTGFXNWtMRnh1SUNBZ0lDQWdJQ0JpYVc1a2FXNW5TMmx1WkRvZ2FXNXdkWFF1WW1sdVpHbHVaMHRwYm1Rc1hHNGdJQ0FnSUNBZ0lHSnBibVJwYm1kTFpYazZJR2x1Y0hWMExtSnBibVJwYm1kTFpYa3NYRzRnSUNBZ0lDQWdJSEpsWjJsdmJqb2dhVzV3ZFhRdWNtVm5hVzl1TEZ4dUlDQWdJQ0FnSUNCamIyNW1hV2M2SUdsdWNIVjBMbU52Ym1acFp5eGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ0lDQXVMaTVoY21kelhHNGdJQ0FnS1R0Y2JpQWdmVnh1WEc0Z0lHRnplVzVqSUd4cGMzUlVaVzVoYm5SQ2FXNWthVzVuY3loMFpXNWhiblJKWkRvZ2MzUnlhVzVuTENBdUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4VTNSdmNtRm5aVUpwYm1ScGJtZGJYVDRnZTF4dUlDQWdJSEpsZEhWeWJpQW9ZWGRoYVhRZ2RHaHBjeTVzYVhOMFFXeHNLQzR1TG1GeVozTXBLUzVtYVd4MFpYSW9LR0pwYm1ScGJtY3BJRDArSUhOaGJXVlVaVzVoYm5Rb1ltbHVaR2x1Wnk1MFpXNWhiblFzSUhSbGJtRnVkRWxrS1NrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCblpYUkNhVzVrYVc1bktGeHVJQ0FnSUhSbGJtRnVkRWxrT2lCemRISnBibWNzWEc0Z0lDQWdjM1J2Y21GblpVdHBibVE2SUZOMGIzSmhaMlZMYVc1a0xGeHVJQ0FnSUM0dUxtRnlaM002SUdGdWVWdGRYRzRnSUNrNklGQnliMjFwYzJVOFUzUnZjbUZuWlVKcGJtUnBibWNnZkNCMWJtUmxabWx1WldRK0lIdGNiaUFnSUNCeVpYUjFjbTRnS0dGM1lXbDBJSFJvYVhNdWJHbHpkRlJsYm1GdWRFSnBibVJwYm1kektIUmxibUZ1ZEVsa0xDQXVMaTVoY21kektTa3VabWx1WkNoY2JpQWdJQ0FnSUNoaWFXNWthVzVuS1NBOVBpQmlhVzVrYVc1bkxuTjBiM0poWjJWTGFXNWtJRDA5UFNCemRHOXlZV2RsUzJsdVpGeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCelpYUkNhVzVrYVc1blEyOXVabWxuS0Z4dUlDQWdJR0pwYm1ScGJtZEpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lHTnZibVpwWnpvZ1VtVmpiM0prUEhOMGNtbHVaeXdnZFc1cmJtOTNiajRnZkNCMWJtUmxabWx1WldRc1hHNGdJQ0FnTGk0dVlYSm5jem9nWVc1NVcxMWNiaUFnS1RvZ1VISnZiV2x6WlR4VGRHOXlZV2RsUW1sdVpHbHVaejRnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5Wd1pHRjBaVTl1WlNoaWFXNWthVzVuU1dRc0lIc2dZMjl1Wm1sbklIMHNJQzR1TG1GeVozTXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdjSEp2Ylc5MFpWUnZSR1ZrYVdOaGRHVmtLRnh1SUNBZ0lHSnBibVJwYm1kSlpEb2djM1J5YVc1bkxGeHVJQ0FnSUdKcGJtUnBibWRMWlhrNklITjBjbWx1Wnl4Y2JpQWdJQ0J5WldkcGIyNDZJSE4wY21sdVp5eGNiaUFnSUNCamIyNW1hV2MvT2lCU1pXTnZjbVE4YzNSeWFXNW5MQ0IxYm10dWIzZHVQaXhjYmlBZ0lDQXVMaTVoY21kek9pQmhibmxiWFZ4dUlDQXBPaUJRY205dGFYTmxQRk4wYjNKaFoyVkNhVzVrYVc1blBpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVkWEJrWVhSbFQyNWxLRnh1SUNBZ0lDQWdZbWx1WkdsdVowbGtMRnh1SUNBZ0lDQWdleUJpYVc1a2FXNW5TMmx1WkRvZ1UzUnZjbUZuWlVKcGJtUnBibWRMYVc1a0xrUmxaR2xqWVhSbFpDd2dZbWx1WkdsdVowdGxlU3dnY21WbmFXOXVMQ0JqYjI1bWFXY2dmU3hjYmlBZ0lDQWdJQzR1TG1GeVozTmNiaUFnSUNBcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ2MyVjBVMmhoY21Wa0tGeHVJQ0FnSUdKcGJtUnBibWRKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJR0pwYm1ScGJtZExaWGs2SUhOMGNtbHVaeXhjYmlBZ0lDQnlaV2RwYjI0NklITjBjbWx1Wnl4Y2JpQWdJQ0JqYjI1bWFXYy9PaUJTWldOdmNtUThjM1J5YVc1bkxDQjFibXR1YjNkdVBpeGNiaUFnSUNBdUxpNWhjbWR6T2lCaGJubGJYVnh1SUNBcE9pQlFjbTl0YVhObFBGTjBiM0poWjJWQ2FXNWthVzVuUGlCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWRYQmtZWFJsVDI1bEtGeHVJQ0FnSUNBZ1ltbHVaR2x1WjBsa0xGeHVJQ0FnSUNBZ2V5QmlhVzVrYVc1blMybHVaRG9nVTNSdmNtRm5aVUpwYm1ScGJtZExhVzVrTGxOb1lYSmxaQ3dnWW1sdVpHbHVaMHRsZVN3Z2NtVm5hVzl1TENCamIyNW1hV2NnZlN4Y2JpQWdJQ0FnSUM0dUxtRnlaM05jYmlBZ0lDQXBPMXh1SUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QkNiMjkwYzNSeVlYQlRaWEoyYVdObElIdGNiaUFnY0hKcGRtRjBaU0IwWlc1aGJuUlRaWEoyYVdObElEMGdibVYzSUZSbGJtRnVkRk5sY25acFkyVW9LVHRjYmlBZ2NISnBkbUYwWlNCMFpXNWhiblJRY205bWFXeGxVMlZ5ZG1salpTQTlJRzVsZHlCVVpXNWhiblJRY205bWFXeGxVMlZ5ZG1salpTZ3BPMXh1SUNCd2NtbDJZWFJsSUc5eVoxVnVhWFJUWlhKMmFXTmxJRDBnYm1WM0lFOXlaMVZ1YVhSVFpYSjJhV05sS0NrN1hHNGdJSEJ5YVhaaGRHVWdiM0puVlc1cGRGQnliMlpwYkdWVFpYSjJhV05sSUQwZ2JtVjNJRTl5WjFWdWFYUlFjbTltYVd4bFUyVnlkbWxqWlNncE8xeHVJQ0J3Y21sMllYUmxJSFZ6WlhKVFpYSjJhV05sSUQwZ2JtVjNJRlZ6WlhKVFpYSjJhV05sS0NrN1hHNGdJSEJ5YVhaaGRHVWdiV1Z0WW1WeWMyaHBjRk5sY25acFkyVWdQU0J1WlhjZ1ZHVnVZVzUwVFdWdFltVnljMmhwY0ZObGNuWnBZMlVvS1R0Y2JpQWdjSEpwZG1GMFpTQndjbWx1WTJsd1lXeFRaWEoyYVdObElEMGdibVYzSUZCeWFXNWphWEJoYkZObGNuWnBZMlVvS1R0Y2JpQWdjSEpwZG1GMFpTQndaWEp0YVhOemFXOXVVMlZ5ZG1salpTQTlJRzVsZHlCUVpYSnRhWE56YVc5dVUyVnlkbWxqWlNncE8xeHVJQ0J3Y21sMllYUmxJSEp2YkdWVFpYSjJhV05sSUQwZ2JtVjNJRkp2YkdWVFpYSjJhV05sS0NrN1hHNGdJSEJ5YVhaaGRHVWdjbTlzWlZCbGNtMXBjM05wYjI1VFpYSjJhV05sSUQwZ2JtVjNJRkp2YkdWUVpYSnRhWE56YVc5dVUyVnlkbWxqWlNncE8xeHVJQ0J3Y21sMllYUmxJSEp2YkdWQmMzTnBaMjV0Wlc1MFUyVnlkbWxqWlNBOUlHNWxkeUJTYjJ4bFFYTnphV2R1YldWdWRGTmxjblpwWTJVb0tUdGNiaUFnY0hKcGRtRjBaU0JsWm1abFkzUnBkbVZRWlhKdGFYTnphVzl1VTJWeWRtbGpaU0E5SUc1bGR5QkZabVpsWTNScGRtVlFaWEp0YVhOemFXOXVVMlZ5ZG1salpTZ3BPMXh1WEc0Z0lFQjBjbUZ1YzJGamRHbHZibUZzS0NsY2JpQWdZWE41Ym1NZ1ltOXZkSE4wY21Gd1ZHVnVZVzUwUm5KdmJWUmxiWEJzWVhSbEtGeHVJQ0FnSUhSbGJYQnNZWFJsT2lCQ2IyOTBjM1J5WVhCVVpXMXdiR0YwWlN4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEh0Y2JpQWdJQ0IwWlc1aGJuUkpaRG9nYzNSeWFXNW5PMXh1SUNBZ0lISnZiM1JQY21kVmJtbDBTV1E2SUhOMGNtbHVaenRjYmlBZ0lDQnZkMjVsY2xWelpYSkpaRG9nYzNSeWFXNW5PMXh1SUNBZ0lHOTNibVZ5VUhKcGJtTnBjR0ZzU1dRNklITjBjbWx1Wnp0Y2JpQWdmVDRnZTF4dUlDQWdJR052Ym5OMElIUmxibUZ1ZENBOUlHRjNZV2wwSUhSb2FYTXVkR1Z1WVc1MFUyVnlkbWxqWlM1amNtVmhkR1ZVWlc1aGJuUW9kR1Z0Y0d4aGRHVXVkR1Z1WVc1MExDQXVMaTVoY21kektUdGNiaUFnSUNCcFppQW9kR1Z0Y0d4aGRHVXVkR1Z1WVc1MExuQnliMlpwYkdWTFpYa3BJSHRjYmlBZ0lDQWdJR0YzWVdsMElIUm9hWE11ZEdWdVlXNTBVSEp2Wm1sc1pWTmxjblpwWTJVdVkzSmxZWFJsVUhKdlptbHNaU2hjYmlBZ0lDQWdJQ0FnZEdWdVlXNTBMbWxrTEZ4dUlDQWdJQ0FnSUNCMFpXMXdiR0YwWlM1MFpXNWhiblF1Y0hKdlptbHNaVXRsZVN4Y2JpQWdJQ0FnSUNBZ2RHVnRjR3hoZEdVdWRHVnVZVzUwTG5CeWIyWnBiR1ZOWlhSaFpHRjBZU3hjYmlBZ0lDQWdJQ0FnTGk0dVlYSm5jMXh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCamNtVmhkR1ZQY21kVWNtVmxJRDBnWVhONWJtTWdLRnh1SUNBZ0lDQWdjR0Z5Wlc1MFNXUTZJSE4wY21sdVp5QjhJSFZ1WkdWbWFXNWxaQ3hjYmlBZ0lDQWdJRzl5WjFWdWFYUTZJRUp2YjNSemRISmhjRTl5WjFWdWFYUmNiaUFnSUNBcE9pQlFjbTl0YVhObFBFOXlaMVZ1YVhRK0lEMCtJSHRjYmlBZ0lDQWdJR052Ym5OMElHTnlaV0YwWldRZ1BWeHVJQ0FnSUNBZ0lDQndZWEpsYm5SSlpDQTlQVDBnZFc1a1pXWnBibVZrWEc0Z0lDQWdJQ0FnSUNBZ1B5QmhkMkZwZENCMGFHbHpMbTl5WjFWdWFYUlRaWEoyYVdObExtTnlaV0YwWlZKdmIzUW9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIUmxibUZ1ZEM1cFpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2IzSm5WVzVwZEM1dVlXMWxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnZjbWRWYm1sMExtMWxkR0ZrWVhSaExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCdmNtZFZibWwwTG5CeWIyWnBiR1ZMWlhrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUc5eVoxVnVhWFF1YldWMFlXUmhkR0VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQzR1TG1GeVozTmNiaUFnSUNBZ0lDQWdJQ0FnSUNsY2JpQWdJQ0FnSUNBZ0lDQTZJR0YzWVdsMElIUm9hWE11YjNKblZXNXBkRk5sY25acFkyVXVZM0psWVhSbFEyaHBiR1FvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwWlc1aGJuUkpaRG9nZEdWdVlXNTBMbWxrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCaGNtVnVkRTl5WjFWdWFYUkpaRG9nY0dGeVpXNTBTV1FzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYm1GdFpUb2diM0puVlc1cGRDNXVZVzFsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUcxbGRHRmtZWFJoT2lCdmNtZFZibWwwTG0xbGRHRmtZWFJoTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCeWIyWnBiR1ZMWlhrNklHOXlaMVZ1YVhRdWNISnZabWxzWlV0bGVTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQndjbTltYVd4bFRXVjBZV1JoZEdFNklHOXlaMVZ1YVhRdWJXVjBZV1JoZEdFc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUM0dUxtRnlaM05jYmlBZ0lDQWdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJR05vYVd4a0lHOW1JRzl5WjFWdWFYUXVZMmhwYkdSeVpXNGdQejhnVzEwcElIdGNiaUFnSUNBZ0lDQWdZWGRoYVhRZ1kzSmxZWFJsVDNKblZISmxaU2hqY21WaGRHVmtMbWxrTENCamFHbHNaQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZM0psWVhSbFpEdGNiaUFnSUNCOU8xeHVYRzRnSUNBZ1kyOXVjM1FnY205dmRFOXlaMVZ1YVhRZ1BTQmhkMkZwZENCamNtVmhkR1ZQY21kVWNtVmxLSFZ1WkdWbWFXNWxaQ3dnZEdWdGNHeGhkR1V1Y205dmRFOXlaMVZ1YVhRcE8xeHVJQ0FnSUdOdmJuTjBJRzkzYm1WeUlEMGdZWGRoYVhRZ2RHaHBjeTUxYzJWeVUyVnlkbWxqWlM1amNtVmhkR1ZWYzJWeUtIUmxiWEJzWVhSbExtOTNibVZ5VlhObGNpd2dMaTR1WVhKbmN5azdYRzRnSUNBZ1lYZGhhWFFnZEdocGN5NXRaVzFpWlhKemFHbHdVMlZ5ZG1salpTNWhaR1JWYzJWeVZHOVVaVzVoYm5Rb2RHVnVZVzUwTG1sa0xDQnZkMjVsY2k1cFpDd2dUV1Z0WW1WeWMyaHBjRk4wWVhSMWN5NUJZM1JwZG1Vc0lDNHVMbUZ5WjNNcE8xeHVJQ0FnSUdOdmJuTjBJRzkzYm1WeVVISnBibU5wY0dGc0lEMGdZWGRoYVhRZ2RHaHBjeTV3Y21sdVkybHdZV3hUWlhKMmFXTmxMbWRsZEZWelpYSlFjbWx1WTJsd1lXd29kR1Z1WVc1MExtbGtMQ0J2ZDI1bGNpNXBaQ3dnTGk0dVlYSm5jeWs3WEc1Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUhCbGNtMXBjM05wYjI0Z2IyWWdkR1Z0Y0d4aGRHVXVjR1Z5YldsemMybHZibk1wSUh0Y2JpQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdWNHVnliV2x6YzJsdmJsTmxjblpwWTJVdVkzSmxZWFJsVUdWeWJXbHpjMmx2Ymlod1pYSnRhWE56YVc5dUxDQXVMaTVoY21kektUdGNiaUFnSUNCOVhHNWNiaUFnSUNCbWIzSWdLR052Ym5OMElISnZiR1VnYjJZZ2RHVnRjR3hoZEdVdWNtOXNaWE1wSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR055WldGMFpXUlNiMnhsSUQwZ1lYZGhhWFFnZEdocGN5NXliMnhsVTJWeWRtbGpaUzVqY21WaGRHVlNiMnhsS0Z4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdkR1Z1WVc1MFNXUTZJSFJsYm1GdWRDNXBaQ3hjYmlBZ0lDQWdJQ0FnSUNCclpYazZJSEp2YkdVdWEyVjVMRnh1SUNBZ0lDQWdJQ0FnSUc1aGJXVTZJSEp2YkdVdWJtRnRaU3hjYmlBZ0lDQWdJQ0FnSUNCa1pYTmpjbWx3ZEdsdmJqb2djbTlzWlM1a1pYTmpjbWx3ZEdsdmJpeGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnTGk0dVlYSm5jMXh1SUNBZ0lDQWdLVHRjYmlBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnY0dWeWJXbHpjMmx2Ymt0bGVTQnZaaUJ5YjJ4bExuQmxjbTFwYzNOcGIyNUxaWGx6S1NCN1hHNGdJQ0FnSUNBZ0lHRjNZV2wwSUhSb2FYTXVjbTlzWlZCbGNtMXBjM05wYjI1VFpYSjJhV05sTG1Ga1pGQmxjbTFwYzNOcGIyNUxaWGxVYjFKdmJHVW9YRzRnSUNBZ0lDQWdJQ0FnWTNKbFlYUmxaRkp2YkdVdWFXUXNYRzRnSUNBZ0lDQWdJQ0FnY0dWeWJXbHpjMmx2Ymt0bGVTeGNiaUFnSUNBZ0lDQWdJQ0F1TGk1aGNtZHpYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdZMjl1YzNRZ2IzZHVaWEpTYjJ4bElEMGdZWGRoYVhRZ2RHaHBjeTV5YjJ4bFUyVnlkbWxqWlM1blpYUlVaVzVoYm5SU2IyeGxRbmxMWlhrb1hHNGdJQ0FnSUNCMFpXNWhiblF1YVdRc1hHNGdJQ0FnSUNCMFpXMXdiR0YwWlM1dmQyNWxjbEp2YkdWTFpYa3NYRzRnSUNBZ0lDQXVMaTVoY21kelhHNGdJQ0FnS1R0Y2JpQWdJQ0JoZDJGcGRDQjBhR2x6TG5KdmJHVkJjM05wWjI1dFpXNTBVMlZ5ZG1salpTNWhjM05wWjI1U2IyeGxLRnh1SUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0IwWlc1aGJuUkpaRG9nZEdWdVlXNTBMbWxrTEZ4dUlDQWdJQ0FnSUNCd2NtbHVZMmx3WVd4SlpEb2diM2R1WlhKUWNtbHVZMmx3WVd3dWFXUXNYRzRnSUNBZ0lDQWdJSEp2YkdWSlpEb2diM2R1WlhKU2IyeGxMbWxrTEZ4dUlDQWdJQ0FnSUNCelkyOXdaVXRwYm1RNklGTmpiM0JsUzJsdVpDNVBjbWRWYm1sMExGeHVJQ0FnSUNBZ0lDQnpZMjl3WlVsa09pQnliMjkwVDNKblZXNXBkQzVwWkN4Y2JpQWdJQ0FnSUNBZ2FXNW9aWEpwZEVSdmQyNDZJSFJ5ZFdVc1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0xpNHVZWEpuYzF4dUlDQWdJQ2s3WEc0Z0lDQWdZWGRoYVhRZ2RHaHBjeTVsWm1abFkzUnBkbVZRWlhKdGFYTnphVzl1VTJWeWRtbGpaUzV5WldKMWFXeGtSbTl5VUhKcGJtTnBjR0ZzS0hSbGJtRnVkQzVwWkN3Z2IzZHVaWEpRY21sdVkybHdZV3d1YVdRc0lDNHVMbUZ5WjNNcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUhSbGJtRnVkRWxrT2lCMFpXNWhiblF1YVdRc1hHNGdJQ0FnSUNCeWIyOTBUM0puVlc1cGRFbGtPaUJ5YjI5MFQzSm5WVzVwZEM1cFpDeGNiaUFnSUNBZ0lHOTNibVZ5VlhObGNrbGtPaUJ2ZDI1bGNpNXBaQ3hjYmlBZ0lDQWdJRzkzYm1WeVVISnBibU5wY0dGc1NXUTZJRzkzYm1WeVVISnBibU5wY0dGc0xtbGtMRnh1SUNBZ0lIMDdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR05zWVhOeklGTjVjM1JsYlUxaGJtRm5aVzFsYm5SVFpYSjJhV05sSUh0Y2JpQWdjSEpwZG1GMFpTQnRaVzFpWlhKemFHbHdVMlZ5ZG1salpTQTlJRzVsZHlCVVpXNWhiblJOWlcxaVpYSnphR2x3VTJWeWRtbGpaU2dwTzF4dUlDQndjbWwyWVhSbElHOXlaMDFsYldKbGNuTm9hWEJUWlhKMmFXTmxJRDBnYm1WM0lFOXlaMVZ1YVhSTlpXMWlaWEp6YUdsd1UyVnlkbWxqWlNncE8xeHVJQ0J3Y21sMllYUmxJSEJ5YVc1amFYQmhiRk5sY25acFkyVWdQU0J1WlhjZ1VISnBibU5wY0dGc1UyVnlkbWxqWlNncE8xeHVJQ0J3Y21sMllYUmxJSEp2YkdWVFpYSjJhV05sSUQwZ2JtVjNJRkp2YkdWVFpYSjJhV05sS0NrN1hHNGdJSEJ5YVhaaGRHVWdjbTlzWlVGemMybG5ibTFsYm5SVFpYSjJhV05sSUQwZ2JtVjNJRkp2YkdWQmMzTnBaMjV0Wlc1MFUyVnlkbWxqWlNncE8xeHVJQ0J3Y21sMllYUmxJR1ZtWm1WamRHbDJaVkJsY20xcGMzTnBiMjVUWlhKMmFXTmxJRDBnYm1WM0lFVm1abVZqZEdsMlpWQmxjbTFwYzNOcGIyNVRaWEoyYVdObEtDazdYRzVjYmlBZ1FIUnlZVzV6WVdOMGFXOXVZV3dvS1Z4dUlDQmhjM2x1WXlCdmJtSnZZWEprVlhObGNsUnZWR1Z1WVc1MFFXNWtUM0puVlc1cGRDaGNiaUFnSUNCMFpXNWhiblJKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJSFZ6WlhKSlpEb2djM1J5YVc1bkxGeHVJQ0FnSUc5eVoxVnVhWFJKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJSEp2YkdWTFpYazZJSE4wY21sdVp5eGNiaUFnSUNBdUxpNWhjbWR6T2lCaGJubGJYVnh1SUNBcE9pQlFjbTl0YVhObFBIc2djSEpwYm1OcGNHRnNTV1E2SUhOMGNtbHVaeUI5UGlCN1hHNGdJQ0FnWVhkaGFYUWdkR2hwY3k1dFpXMWlaWEp6YUdsd1UyVnlkbWxqWlM1aFpHUlZjMlZ5Vkc5VVpXNWhiblFvZEdWdVlXNTBTV1FzSUhWelpYSkpaQ3dnVFdWdFltVnljMmhwY0ZOMFlYUjFjeTVCWTNScGRtVXNJQzR1TG1GeVozTXBPMXh1SUNBZ0lHRjNZV2wwSUhSb2FYTXViM0puVFdWdFltVnljMmhwY0ZObGNuWnBZMlV1WVdSa1ZYTmxjbFJ2VDNKblZXNXBkQ2hjYmlBZ0lDQWdJSFJsYm1GdWRFbGtMRnh1SUNBZ0lDQWdiM0puVlc1cGRFbGtMRnh1SUNBZ0lDQWdkWE5sY2tsa0xGeHVJQ0FnSUNBZ1RXVnRZbVZ5YzJocGNGTjBZWFIxY3k1QlkzUnBkbVVzWEc0Z0lDQWdJQ0F1TGk1aGNtZHpYRzRnSUNBZ0tUdGNiaUFnSUNCamIyNXpkQ0J3Y21sdVkybHdZV3dnUFNCaGQyRnBkQ0IwYUdsekxuQnlhVzVqYVhCaGJGTmxjblpwWTJVdVoyVjBWWE5sY2xCeWFXNWphWEJoYkNoMFpXNWhiblJKWkN3Z2RYTmxja2xrTENBdUxpNWhjbWR6S1R0Y2JpQWdJQ0JqYjI1emRDQnliMnhsSUQwZ1lYZGhhWFFnZEdocGN5NXliMnhsVTJWeWRtbGpaUzVuWlhSVVpXNWhiblJTYjJ4bFFubExaWGtvZEdWdVlXNTBTV1FzSUhKdmJHVkxaWGtzSUM0dUxtRnlaM01wTzF4dUlDQWdJR0YzWVdsMElIUm9hWE11Y205c1pVRnpjMmxuYm0xbGJuUlRaWEoyYVdObExtRnpjMmxuYmxKdmJHVW9YRzRnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJSFJsYm1GdWRFbGtMRnh1SUNBZ0lDQWdJQ0J3Y21sdVkybHdZV3hKWkRvZ2NISnBibU5wY0dGc0xtbGtMRnh1SUNBZ0lDQWdJQ0J5YjJ4bFNXUTZJSEp2YkdVdWFXUXNYRzRnSUNBZ0lDQWdJSE5qYjNCbFMybHVaRG9nVTJOdmNHVkxhVzVrTGs5eVoxVnVhWFFzWEc0Z0lDQWdJQ0FnSUhOamIzQmxTV1E2SUc5eVoxVnVhWFJKWkN4Y2JpQWdJQ0FnSUNBZ2FXNW9aWEpwZEVSdmQyNDZJSFJ5ZFdVc1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0xpNHVZWEpuYzF4dUlDQWdJQ2s3WEc0Z0lDQWdZWGRoYVhRZ2RHaHBjeTVsWm1abFkzUnBkbVZRWlhKdGFYTnphVzl1VTJWeWRtbGpaUzV5WldKMWFXeGtSbTl5VUhKcGJtTnBjR0ZzS0hSbGJtRnVkRWxrTENCd2NtbHVZMmx3WVd3dWFXUXNJQzR1TG1GeVozTXBPMXh1SUNBZ0lISmxkSFZ5YmlCN0lIQnlhVzVqYVhCaGJFbGtPaUJ3Y21sdVkybHdZV3d1YVdRZ2ZUdGNiaUFnZlZ4dVhHNGdJRUIwY21GdWMyRmpkR2x2Ym1Gc0tDbGNiaUFnWVhONWJtTWdZMmhoYm1kbFZYTmxjazl5WjFKdmJHVW9YRzRnSUNBZ2RHVnVZVzUwU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0J3Y21sdVkybHdZV3hKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJRzl5WjFWdWFYUkpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lISnZiR1ZMWlhrNklITjBjbWx1Wnl4Y2JpQWdJQ0JwYm1obGNtbDBSRzkzYmpvZ1ltOXZiR1ZoYml4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEhadmFXUStJSHRjYmlBZ0lDQmpiMjV6ZENCeWIyeGxJRDBnWVhkaGFYUWdkR2hwY3k1eWIyeGxVMlZ5ZG1salpTNW5aWFJVWlc1aGJuUlNiMnhsUW5sTFpYa29kR1Z1WVc1MFNXUXNJSEp2YkdWTFpYa3NJQzR1TG1GeVozTXBPMXh1SUNBZ0lHTnZibk4wSUdOMWNuSmxiblJCYzNOcFoyNXRaVzUwY3lBOUlHRjNZV2wwSUhSb2FYTXVjbTlzWlVGemMybG5ibTFsYm5SVFpYSjJhV05sTG14cGMzUlFjbWx1WTJsd1lXeEJjM05wWjI1dFpXNTBjeWhjYmlBZ0lDQWdJSFJsYm1GdWRFbGtMRnh1SUNBZ0lDQWdjSEpwYm1OcGNHRnNTV1FzWEc0Z0lDQWdJQ0F1TGk1aGNtZHpYRzRnSUNBZ0tUdGNiaUFnSUNCbWIzSWdLR052Ym5OMElHRnpjMmxuYm0xbGJuUWdiMllnWTNWeWNtVnVkRUZ6YzJsbmJtMWxiblJ6TG1acGJIUmxjaWhjYmlBZ0lDQWdJQ2h5YjNjcElEMCtJSEp2ZHk1elkyOXdaVXRwYm1RZ1BUMDlJRk5qYjNCbFMybHVaQzVQY21kVmJtbDBJQ1ltSUhKdmR5NXpZMjl3WlVsa0lEMDlQU0J2Y21kVmJtbDBTV1JjYmlBZ0lDQXBLU0I3WEc0Z0lDQWdJQ0JoZDJGcGRDQjBhR2x6TG5KdmJHVkJjM05wWjI1dFpXNTBVMlZ5ZG1salpTNXlaWFp2YTJWQmMzTnBaMjV0Wlc1MEtHRnpjMmxuYm0xbGJuUXVhV1FzSUM0dUxtRnlaM01wTzF4dUlDQWdJSDFjYmlBZ0lDQmhkMkZwZENCMGFHbHpMbkp2YkdWQmMzTnBaMjV0Wlc1MFUyVnlkbWxqWlM1aGMzTnBaMjVTYjJ4bEtGeHVJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQjBaVzVoYm5SSlpDeGNiaUFnSUNBZ0lDQWdjSEpwYm1OcGNHRnNTV1FzWEc0Z0lDQWdJQ0FnSUhKdmJHVkpaRG9nY205c1pTNXBaQ3hjYmlBZ0lDQWdJQ0FnYzJOdmNHVkxhVzVrT2lCVFkyOXdaVXRwYm1RdVQzSm5WVzVwZEN4Y2JpQWdJQ0FnSUNBZ2MyTnZjR1ZKWkRvZ2IzSm5WVzVwZEVsa0xGeHVJQ0FnSUNBZ0lDQnBibWhsY21sMFJHOTNiaXhjYmlBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0F1TGk1aGNtZHpYRzRnSUNBZ0tUdGNiaUFnSUNCaGQyRnBkQ0IwYUdsekxtVm1abVZqZEdsMlpWQmxjbTFwYzNOcGIyNVRaWEoyYVdObExuSmxZblZwYkdSR2IzSlFjbWx1WTJsd1lXd29kR1Z1WVc1MFNXUXNJSEJ5YVc1amFYQmhiRWxrTENBdUxpNWhjbWR6S1R0Y2JpQWdmVnh1WEc0Z0lFQjBjbUZ1YzJGamRHbHZibUZzS0NsY2JpQWdZWE41Ym1NZ2MzVnpjR1Z1WkZWelpYSkpibFJsYm1GdWRDaGNiaUFnSUNCMFpXNWhiblJOWlcxaVpYSnphR2x3U1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0IwWlc1aGJuUkpaRG9nYzNSeWFXNW5MRnh1SUNBZ0lIQnlhVzVqYVhCaGJFbGtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ0xpNHVZWEpuY3pvZ1lXNTVXMTFjYmlBZ0tUb2dVSEp2YldselpUeDJiMmxrUGlCN1hHNGdJQ0FnWVhkaGFYUWdkR2hwY3k1dFpXMWlaWEp6YUdsd1UyVnlkbWxqWlM1elpYUlRkR0YwZFhNb1hHNGdJQ0FnSUNCMFpXNWhiblJOWlcxaVpYSnphR2x3U1dRc1hHNGdJQ0FnSUNCTlpXMWlaWEp6YUdsd1UzUmhkSFZ6TGxOMWMzQmxibVJsWkN4Y2JpQWdJQ0FnSUM0dUxtRnlaM05jYmlBZ0lDQXBPMXh1SUNBZ0lHRjNZV2wwSUhSb2FYTXVaV1ptWldOMGFYWmxVR1Z5YldsemMybHZibE5sY25acFkyVXVaR1ZzWlhSbFJtOXlVSEpwYm1OcGNHRnNLSFJsYm1GdWRFbGtMQ0J3Y21sdVkybHdZV3hKWkN3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYmx4dUlDQkFkSEpoYm5OaFkzUnBiMjVoYkNncFhHNGdJR0Z6ZVc1aklISmxZV04wYVhaaGRHVlZjMlZ5U1c1VVpXNWhiblFvWEc0Z0lDQWdkR1Z1WVc1MFRXVnRZbVZ5YzJocGNFbGtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2RHVnVZVzUwU1dRNklITjBjbWx1Wnl4Y2JpQWdJQ0J3Y21sdVkybHdZV3hKWkRvZ2MzUnlhVzVuTEZ4dUlDQWdJQzR1TG1GeVozTTZJR0Z1ZVZ0ZFhHNGdJQ2s2SUZCeWIyMXBjMlU4ZG05cFpENGdlMXh1SUNBZ0lHRjNZV2wwSUhSb2FYTXViV1Z0WW1WeWMyaHBjRk5sY25acFkyVXVjMlYwVTNSaGRIVnpLSFJsYm1GdWRFMWxiV0psY25Ob2FYQkpaQ3dnVFdWdFltVnljMmhwY0ZOMFlYUjFjeTVCWTNScGRtVXNJQzR1TG1GeVozTXBPMXh1SUNBZ0lHRjNZV2wwSUhSb2FYTXVaV1ptWldOMGFYWmxVR1Z5YldsemMybHZibE5sY25acFkyVXVjbVZpZFdsc1pFWnZjbEJ5YVc1amFYQmhiQ2gwWlc1aGJuUkpaQ3dnY0hKcGJtTnBjR0ZzU1dRc0lDNHVMbUZ5WjNNcE8xeHVJQ0I5WEc1OVhHNGlYWDA9Il19
|