@lifeready/core 1.0.21 → 1.0.22
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/bundles/lifeready-core.umd.js +9745 -9700
- package/bundles/lifeready-core.umd.js.map +1 -1
- package/bundles/lifeready-core.umd.min.js +2 -2
- package/bundles/lifeready-core.umd.min.js.map +1 -1
- package/esm2015/lib/_common/run-outside-angular.js +2 -2
- package/esm2015/lib/_common/types.js +1 -1
- package/esm2015/lib/api/lr-apollo.service.js +3 -3
- package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +3 -3
- package/esm2015/lib/api/query-processor/common-processors.service.js +3 -3
- package/esm2015/lib/api/query-processor/query-processor.service.js +4 -4
- package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +6 -5
- package/esm2015/lib/api/types/lr-graphql.types.js +1 -1
- package/esm2015/lib/auth/auth.gql.js +1 -28
- package/esm2015/lib/auth/auth.types.js +1 -1
- package/esm2015/lib/auth/life-ready-auth.service.js +32 -31
- package/esm2015/lib/category/category.gql.js +1 -1
- package/esm2015/lib/category/category.service.js +6 -6
- package/esm2015/lib/contact-card/contact-card.gql.js +79 -0
- package/esm2015/lib/contact-card/contact-card.service.js +154 -0
- package/esm2015/lib/contact-card/contact-card2.gql.js +29 -0
- package/esm2015/lib/contact-card/contact-card2.service.js +103 -0
- package/esm2015/lib/encryption/encryption.service.js +189 -0
- package/esm2015/lib/file-upload/file-upload.service.js +74 -0
- package/esm2015/lib/file-upload/file-upload.types.js +1 -0
- package/esm2015/lib/{auth → idle}/idle.service.js +7 -7
- package/esm2015/lib/{auth → idle}/idle.types.js +1 -1
- package/esm2015/lib/items2/item2.service.js +20 -20
- package/esm2015/lib/key/key-factory.service.js +237 -0
- package/esm2015/lib/{cryptography → key}/key-graph.service.js +10 -10
- package/esm2015/lib/key/key-meta.service.js +200 -0
- package/esm2015/lib/key/key.service.js +124 -0
- package/esm2015/lib/key/key.types.js +11 -0
- package/esm2015/lib/key-exchange/key-exchange.gql.js +188 -0
- package/esm2015/lib/key-exchange/key-exchange.service.js +443 -0
- package/esm2015/lib/key-exchange/key-exchange.types.js +7 -0
- package/esm2015/lib/key-exchange/key-exchange2.gql.js +171 -0
- package/esm2015/lib/key-exchange/key-exchange2.service.js +500 -0
- package/esm2015/lib/lbop/lbop.service.js +355 -0
- package/esm2015/lib/life-ready.module.js +2 -27
- package/esm2015/lib/lock/lock.gql.js +40 -0
- package/esm2015/lib/lock/lock.service.js +64 -0
- package/esm2015/lib/message/message.gql.js +32 -0
- package/esm2015/lib/message/message.service.js +116 -0
- package/esm2015/lib/message/message.types.js +1 -0
- package/esm2015/lib/password/password.gql.js +28 -0
- package/esm2015/lib/password/password.service.js +315 -0
- package/esm2015/lib/persist/persist.service.js +180 -0
- package/esm2015/lib/profile/profile-details.service.js +214 -0
- package/esm2015/lib/profile/profile.gql.js +97 -0
- package/esm2015/lib/profile/profile.service.js +169 -0
- package/esm2015/lib/profile/profile.types.js +34 -0
- package/esm2015/lib/record/record-attachment.service.js +15 -15
- package/esm2015/lib/record/record.service.js +3 -3
- package/esm2015/lib/register/register.service.js +172 -0
- package/esm2015/lib/scenario/scenario.controller.js +2 -2
- package/esm2015/lib/scenario/{scenario.gql.private.js → scenario.private.gql.js} +1 -1
- package/esm2015/lib/scenario/scenario.service.js +9 -9
- package/esm2015/lib/scenario/scenario.types.js +1 -1
- package/esm2015/lib/shared-contact-card/shared-contact-card.service.js +119 -0
- package/esm2015/lib/shared-contact-card/shared-contact-card2.gql.js +41 -0
- package/esm2015/lib/shared-contact-card/shared-contact-card2.service.js +117 -0
- package/esm2015/lib/slip39/slip39.service.js +169 -0
- package/esm2015/lib/time/time.service.js +146 -0
- package/esm2015/lib/tp-assembly/tp-assembly.js +365 -0
- package/esm2015/lib/tp-assembly/tp-assembly.private.gql.js +22 -0
- package/esm2015/lib/tp-assembly/tp-assembly.types.js +1 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset-request.service.js +100 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset-user.service.js +117 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.constants.js +4 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.controller.js +34 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.gql.js +74 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.private.gql.js +165 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.private.service.js +54 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.service.js +92 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.types.js +1 -0
- package/esm2015/lib/trusted-party/trusted-party.gql.js +148 -0
- package/esm2015/lib/trusted-party/trusted-party.service.js +326 -0
- package/esm2015/lib/trusted-party/trusted-party.types.js +41 -0
- package/esm2015/lib/trusted-party/trusted-party2.gql.js +64 -0
- package/esm2015/lib/trusted-party/trusted-party2.gql.private.js +25 -0
- package/esm2015/lib/trusted-party/trusted-party2.service.js +224 -0
- package/esm2015/lib/trusted-party/trusted-party2.types.js +1 -0
- package/esm2015/lib/two-factor/two-factor.service.js +74 -0
- package/esm2015/lib/user/user.gql.js +60 -0
- package/esm2015/lib/user/user.service.js +79 -0
- package/esm2015/lib/user/user.types.js +1 -0
- package/esm2015/lib/web-crypto/web-crypto.service.js +29 -0
- package/esm2015/lifeready-core.js +15 -13
- package/esm2015/public-api.js +49 -51
- package/fesm2015/lifeready-core.js +9232 -9214
- package/fesm2015/lifeready-core.js.map +1 -1
- package/lib/_common/types.d.ts +3 -1
- package/lib/api/lr-apollo.service.d.ts +1 -1
- package/lib/api/lr-graphql/lr-graphql.service.d.ts +1 -1
- package/lib/api/query-processor/common-processors.service.d.ts +1 -1
- package/lib/api/query-processor/query-processor.service.d.ts +1 -1
- package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +1 -1
- package/lib/api/types/lr-graphql.types.d.ts +11 -0
- package/lib/auth/auth.gql.d.ts +0 -3
- package/lib/auth/auth.types.d.ts +2 -2
- package/lib/auth/life-ready-auth.service.d.ts +12 -12
- package/lib/category/category.gql.d.ts +1 -1
- package/lib/category/category.service.d.ts +2 -2
- package/lib/{api → contact-card}/contact-card.service.d.ts +9 -9
- package/lib/contact-card/contact-card2.gql.d.ts +25 -0
- package/lib/{api → contact-card}/contact-card2.service.d.ts +11 -12
- package/lib/{cryptography → encryption}/encryption.service.d.ts +2 -2
- package/lib/{api/file.service.d.ts → file-upload/file-upload.service.d.ts} +3 -7
- package/lib/file-upload/file-upload.types.d.ts +5 -0
- package/lib/{auth → idle}/idle.service.d.ts +4 -4
- package/lib/items2/item2.service.d.ts +11 -11
- package/lib/{cryptography → key}/key-factory.service.d.ts +2 -2
- package/lib/{cryptography → key}/key-graph.service.d.ts +5 -5
- package/lib/{cryptography → key}/key-meta.service.d.ts +1 -1
- package/lib/{cryptography → key}/key.service.d.ts +2 -2
- package/lib/{cryptography/cryptography.types.d.ts → key/key.types.d.ts} +9 -13
- package/lib/{api → key-exchange}/key-exchange.service.d.ts +5 -5
- package/lib/{api → key-exchange}/key-exchange.types.d.ts +4 -4
- package/lib/{api → key-exchange}/key-exchange2.gql.d.ts +1 -1
- package/lib/{api → key-exchange}/key-exchange2.service.d.ts +71 -18
- package/lib/{auth → lbop}/lbop.service.d.ts +7 -7
- package/lib/{api → lock}/lock.gql.d.ts +1 -1
- package/lib/{api → lock}/lock.service.d.ts +1 -1
- package/lib/message/message.gql.d.ts +13 -0
- package/lib/message/message.service.d.ts +29 -0
- package/lib/message/message.types.d.ts +12 -0
- package/lib/password/password.gql.d.ts +3 -0
- package/lib/{auth → password}/password.service.d.ts +8 -8
- package/lib/{api → persist}/persist.service.d.ts +3 -3
- package/lib/{users → profile}/profile-details.service.d.ts +3 -3
- package/lib/{users → profile}/profile.gql.d.ts +2 -2
- package/lib/{users → profile}/profile.service.d.ts +6 -6
- package/lib/{users → profile}/profile.types.d.ts +1 -1
- package/lib/record/record-attachment.service.d.ts +6 -6
- package/lib/record/record.service.d.ts +1 -1
- package/lib/{auth → register}/register.service.d.ts +4 -4
- package/lib/scenario/scenario.controller.d.ts +1 -1
- package/lib/scenario/scenario.service.d.ts +2 -2
- package/lib/scenario/scenario.types.d.ts +1 -1
- package/lib/{api → shared-contact-card}/shared-contact-card.service.d.ts +9 -9
- package/lib/{api → shared-contact-card}/shared-contact-card2.gql.d.ts +1 -1
- package/lib/{api → shared-contact-card}/shared-contact-card2.service.d.ts +6 -6
- package/lib/{trusted-parties → tp-assembly}/tp-assembly.d.ts +7 -7
- package/lib/{trusted-parties → tp-assembly}/tp-assembly.types.d.ts +1 -1
- package/lib/{trusted-parties → tp-password-reset}/tp-password-reset-request.service.d.ts +4 -8
- package/lib/{trusted-parties → tp-password-reset}/tp-password-reset-user.service.d.ts +7 -13
- package/lib/{trusted-parties → tp-password-reset}/tp-password-reset.controller.d.ts +1 -1
- package/lib/tp-password-reset/tp-password-reset.gql.d.ts +63 -0
- package/lib/{trusted-parties/tp-password-reset.gql.d.ts → tp-password-reset/tp-password-reset.private.gql.d.ts} +1 -63
- package/lib/tp-password-reset/tp-password-reset.private.service.d.ts +59 -0
- package/lib/{trusted-parties → tp-password-reset}/tp-password-reset.service.d.ts +6 -89
- package/lib/tp-password-reset/tp-password-reset.types.d.ts +40 -0
- package/lib/{trusted-parties → trusted-party}/trusted-party.service.d.ts +7 -7
- package/lib/{trusted-parties → trusted-party}/trusted-party.types.d.ts +2 -3
- package/lib/{trusted-parties → trusted-party}/trusted-party2.gql.d.ts +0 -22
- package/lib/trusted-party/trusted-party2.gql.private.d.ts +23 -0
- package/lib/{trusted-parties → trusted-party}/trusted-party2.service.d.ts +11 -35
- package/lib/trusted-party/trusted-party2.types.d.ts +12 -0
- package/lib/{users → user}/user.gql.d.ts +1 -1
- package/lib/{users → user}/user.types.d.ts +1 -1
- package/lifeready-core.d.ts +14 -12
- package/lifeready-core.metadata.json +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +48 -50
- package/esm2015/lib/api/contact-card.gql.js +0 -79
- package/esm2015/lib/api/contact-card.service.js +0 -154
- package/esm2015/lib/api/contact-card2.gql.js +0 -60
- package/esm2015/lib/api/contact-card2.service.js +0 -103
- package/esm2015/lib/api/file.service.js +0 -74
- package/esm2015/lib/api/key-exchange.gql.js +0 -188
- package/esm2015/lib/api/key-exchange.service.js +0 -442
- package/esm2015/lib/api/key-exchange.types.js +0 -7
- package/esm2015/lib/api/key-exchange2.gql.js +0 -171
- package/esm2015/lib/api/key-exchange2.service.js +0 -480
- package/esm2015/lib/api/lock.gql.js +0 -40
- package/esm2015/lib/api/lock.service.js +0 -64
- package/esm2015/lib/api/message.service.js +0 -138
- package/esm2015/lib/api/persist.service.js +0 -181
- package/esm2015/lib/api/shared-contact-card.service.js +0 -119
- package/esm2015/lib/api/shared-contact-card2.gql.js +0 -41
- package/esm2015/lib/api/shared-contact-card2.service.js +0 -117
- package/esm2015/lib/api/time.service.js +0 -146
- package/esm2015/lib/auth/lbop.service.js +0 -355
- package/esm2015/lib/auth/password.service.js +0 -315
- package/esm2015/lib/auth/register.service.js +0 -172
- package/esm2015/lib/auth/two-factor.service.js +0 -74
- package/esm2015/lib/cryptography/cryptography.types.js +0 -11
- package/esm2015/lib/cryptography/encryption.service.js +0 -189
- package/esm2015/lib/cryptography/key-factory.service.js +0 -237
- package/esm2015/lib/cryptography/key-meta.service.js +0 -200
- package/esm2015/lib/cryptography/key.service.js +0 -124
- package/esm2015/lib/cryptography/slip39.service.js +0 -169
- package/esm2015/lib/cryptography/web-crypto.service.js +0 -29
- package/esm2015/lib/trusted-parties/tp-assembly.gql.private.js +0 -22
- package/esm2015/lib/trusted-parties/tp-assembly.js +0 -365
- package/esm2015/lib/trusted-parties/tp-assembly.types.js +0 -1
- package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +0 -113
- package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +0 -129
- package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +0 -4
- package/esm2015/lib/trusted-parties/tp-password-reset.controller.js +0 -34
- package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +0 -237
- package/esm2015/lib/trusted-parties/tp-password-reset.service.js +0 -95
- package/esm2015/lib/trusted-parties/trusted-party.gql.js +0 -148
- package/esm2015/lib/trusted-parties/trusted-party.service.js +0 -326
- package/esm2015/lib/trusted-parties/trusted-party.types.js +0 -41
- package/esm2015/lib/trusted-parties/trusted-party2.gql.js +0 -87
- package/esm2015/lib/trusted-parties/trusted-party2.service.js +0 -218
- package/esm2015/lib/users/profile-details.service.js +0 -214
- package/esm2015/lib/users/profile.gql.js +0 -97
- package/esm2015/lib/users/profile.service.js +0 -169
- package/esm2015/lib/users/profile.types.js +0 -34
- package/esm2015/lib/users/user.gql.js +0 -60
- package/esm2015/lib/users/user.service.js +0 -79
- package/esm2015/lib/users/user.types.js +0 -1
- package/lib/api/contact-card2.gql.d.ts +0 -34
- package/lib/api/message.service.d.ts +0 -59
- /package/lib/{api → contact-card}/contact-card.gql.d.ts +0 -0
- /package/lib/{auth → idle}/idle.types.d.ts +0 -0
- /package/lib/{api → key-exchange}/key-exchange.gql.d.ts +0 -0
- /package/lib/scenario/{scenario.gql.private.d.ts → scenario.private.gql.d.ts} +0 -0
- /package/lib/{cryptography → slip39}/slip39.service.d.ts +0 -0
- /package/lib/{api → time}/time.service.d.ts +0 -0
- /package/lib/{trusted-parties/tp-assembly.gql.private.d.ts → tp-assembly/tp-assembly.private.gql.d.ts} +0 -0
- /package/lib/{trusted-parties → tp-password-reset}/tp-password-reset.constants.d.ts +0 -0
- /package/lib/{trusted-parties → trusted-party}/trusted-party.gql.d.ts +0 -0
- /package/lib/{auth → two-factor}/two-factor.service.d.ts +0 -0
- /package/lib/{users → user}/user.service.d.ts +0 -0
- /package/lib/{cryptography → web-crypto}/web-crypto.service.d.ts +0 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { HttpClient } from '@angular/common/http';
|
|
3
|
+
import { Inject, Injectable } from '@angular/core';
|
|
4
|
+
import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
|
|
5
|
+
import { EncryptionService } from '../encryption/encryption.service';
|
|
6
|
+
import { KeyFactoryService } from '../key/key-factory.service';
|
|
7
|
+
import { LR_CONFIG } from '../life-ready.config';
|
|
8
|
+
import { PasswordService } from '../password/password.service';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../life-ready.config";
|
|
11
|
+
import * as i2 from "@aws-amplify/auth/lib-esm/Auth";
|
|
12
|
+
import * as i3 from "@angular/common/http";
|
|
13
|
+
import * as i4 from "../key/key-factory.service";
|
|
14
|
+
import * as i5 from "../encryption/encryption.service";
|
|
15
|
+
import * as i6 from "../password/password.service";
|
|
16
|
+
export class RegisterService {
|
|
17
|
+
constructor(config, auth, http, keyFactory, encryptionService, passwordService) {
|
|
18
|
+
this.config = config;
|
|
19
|
+
this.auth = auth;
|
|
20
|
+
this.http = http;
|
|
21
|
+
this.keyFactory = keyFactory;
|
|
22
|
+
this.encryptionService = encryptionService;
|
|
23
|
+
this.passwordService = passwordService;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Request a verification code to be sent out to an email.
|
|
27
|
+
* @return Info needed to be submitted along with the verification code
|
|
28
|
+
*/
|
|
29
|
+
verifyEmail(email) {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
const { claim_id } = yield this.http
|
|
32
|
+
.post(`${this.config.authUrl}cove/claim/email/`, {
|
|
33
|
+
address: email,
|
|
34
|
+
context: 'signup',
|
|
35
|
+
})
|
|
36
|
+
.toPromise();
|
|
37
|
+
return claim_id;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
verifyPhone(phoneNumber) {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
const { claim_id } = yield this.http
|
|
43
|
+
.post(`${this.config.authUrl}cove/claim/sms/`, {
|
|
44
|
+
address: phoneNumber,
|
|
45
|
+
context: 'signup',
|
|
46
|
+
})
|
|
47
|
+
.toPromise();
|
|
48
|
+
return claim_id;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
confirmVerificationCode(verificationId, verificationCode) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
const { token } = yield this.http
|
|
54
|
+
.post(`${this.config.authUrl}cove/respond/`, {
|
|
55
|
+
claim_id: verificationId,
|
|
56
|
+
v_code: verificationCode,
|
|
57
|
+
})
|
|
58
|
+
.toPromise();
|
|
59
|
+
return token;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
register(email, password, verificationId, verificationToken, verificationType = 'email') {
|
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
// Generate the key material needed for PassIdp which will be the password used for Cognito.
|
|
65
|
+
const passKeyBundle = yield this.passwordService.createPassKeyBundle(password);
|
|
66
|
+
const masterKey = yield this.keyFactory.createKey();
|
|
67
|
+
const wrappedMasterKey = yield this.encryptionService.encrypt(passKeyBundle.passKey, masterKey.toJSON(true));
|
|
68
|
+
const rootKey = yield this.keyFactory.createKey();
|
|
69
|
+
const wrappedRootKey = yield this.encryptionService.encrypt(masterKey, rootKey.toJSON(true));
|
|
70
|
+
// Encryption PKC key
|
|
71
|
+
const prk = yield this.keyFactory.createPkcKey();
|
|
72
|
+
const wrappedPrk = yield this.encryptionService.encrypt(rootKey, prk.toJSON(true));
|
|
73
|
+
// Signing PKC key
|
|
74
|
+
const sigPrk = yield this.keyFactory.createPkcSignKey();
|
|
75
|
+
const wrappedSigPrk = yield this.encryptionService.encrypt(rootKey, sigPrk.toJSON(true));
|
|
76
|
+
// API call to setup profile
|
|
77
|
+
const user = yield this.http
|
|
78
|
+
.post(`${this.config.authUrl}users/`, {
|
|
79
|
+
claims: [
|
|
80
|
+
{
|
|
81
|
+
type: verificationType,
|
|
82
|
+
token: verificationToken,
|
|
83
|
+
claim_id: verificationId,
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
pass_idp_params: passKeyBundle.passIdpParams,
|
|
87
|
+
pass_idp_verifier_pbk: passKeyBundle.passIdpVerifier.toJSON(),
|
|
88
|
+
wrapped_pass_idp_verifier_prk: passKeyBundle.wrappedPassIdpVerifierPrk,
|
|
89
|
+
pass_key_params: passKeyBundle.passKeyParams,
|
|
90
|
+
wrapped_master_key: wrappedMasterKey,
|
|
91
|
+
wrapped_root_key: wrappedRootKey,
|
|
92
|
+
pbk: prk.toJSON(),
|
|
93
|
+
wrapped_prk: wrappedPrk,
|
|
94
|
+
sig_pbk: sigPrk.toJSON(),
|
|
95
|
+
wrapped_sig_prk: wrappedSigPrk,
|
|
96
|
+
})
|
|
97
|
+
.toPromise();
|
|
98
|
+
// API call to create user on cognito
|
|
99
|
+
const attributes = {};
|
|
100
|
+
user.claims.forEach((claim) => {
|
|
101
|
+
attributes[claim.type] = claim.value;
|
|
102
|
+
});
|
|
103
|
+
// Random suffix for uniqueness. If there's a duplicate, then used just needs to
|
|
104
|
+
// sign up again. But chances of collision is low.
|
|
105
|
+
const suffix = this.keyFactory.randomDigitsNoZeros(4);
|
|
106
|
+
const cognitoUser = yield this.auth.signUp({
|
|
107
|
+
username: `${email.split('@')[0]}.${suffix}`,
|
|
108
|
+
password: this.passwordService.getPassIdpString(passKeyBundle.passIdp),
|
|
109
|
+
attributes,
|
|
110
|
+
// Unfortunately, validationData is not passed to the post
|
|
111
|
+
// confirmation cognito trigger. So can can't do the association there.
|
|
112
|
+
// The current workflow will create a new user on LR before signing up
|
|
113
|
+
// with Cognito. Then Cognito can use the user.id and user.pre_sign_up_token to
|
|
114
|
+
// do the validation of the attributes.
|
|
115
|
+
// validationData: [
|
|
116
|
+
// new CognitoUserAttribute({
|
|
117
|
+
// Name: "user_id",
|
|
118
|
+
// Value: String(user.id)
|
|
119
|
+
// }),
|
|
120
|
+
// new CognitoUserAttribute({
|
|
121
|
+
// Name: "user_pre_sign_up_token",
|
|
122
|
+
// Value: user.pre_sign_up_token
|
|
123
|
+
// })
|
|
124
|
+
// ]
|
|
125
|
+
clientMetadata: {
|
|
126
|
+
user_id: String(user.id),
|
|
127
|
+
user_pre_sign_up_token: String(user.pre_sign_up_token),
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
return {
|
|
131
|
+
username: cognitoUser.user.getUsername(),
|
|
132
|
+
userId: user.id,
|
|
133
|
+
preSignUpToken: user.pre_sign_up_token,
|
|
134
|
+
userSub: cognitoUser.userSub,
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
hibpBreachedAccounts(account) {
|
|
139
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
140
|
+
// The account is just the email
|
|
141
|
+
try {
|
|
142
|
+
const response = yield this.http
|
|
143
|
+
.get(`${this.config.authUrl}users/hibp/breachedaccount/${account}/?truncateResponse=false`)
|
|
144
|
+
.toPromise();
|
|
145
|
+
return response;
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (error.status === 404) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
RegisterService.ɵprov = i0.ɵɵdefineInjectable({ factory: function RegisterService_Factory() { return new RegisterService(i0.ɵɵinject(i1.LR_CONFIG), i0.ɵɵinject(i2.AuthClass), i0.ɵɵinject(i3.HttpClient), i0.ɵɵinject(i4.KeyFactoryService), i0.ɵɵinject(i5.EncryptionService), i0.ɵɵinject(i6.PasswordService)); }, token: RegisterService, providedIn: "root" });
|
|
159
|
+
RegisterService.decorators = [
|
|
160
|
+
{ type: Injectable, args: [{
|
|
161
|
+
providedIn: 'root',
|
|
162
|
+
},] }
|
|
163
|
+
];
|
|
164
|
+
RegisterService.ctorParameters = () => [
|
|
165
|
+
{ type: undefined, decorators: [{ type: Inject, args: [LR_CONFIG,] }] },
|
|
166
|
+
{ type: AuthClass },
|
|
167
|
+
{ type: HttpClient },
|
|
168
|
+
{ type: KeyFactoryService },
|
|
169
|
+
{ type: EncryptionService },
|
|
170
|
+
{ type: PasswordService }
|
|
171
|
+
];
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvcmVnaXN0ZXIvcmVnaXN0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7QUFLL0QsTUFBTSxPQUFPLGVBQWU7SUFDMUIsWUFDNkIsTUFBdUIsRUFDMUMsSUFBZSxFQUNmLElBQWdCLEVBQ2hCLFVBQTZCLEVBQzdCLGlCQUFvQyxFQUNwQyxlQUFnQztRQUxiLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQzFDLFNBQUksR0FBSixJQUFJLENBQVc7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3ZDLENBQUM7SUFFSjs7O09BR0c7SUFDVSxXQUFXLENBQUMsS0FBYTs7WUFDcEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUk7aUJBQ2pDLElBQUksQ0FBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENB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aWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aENsYXNzIH0gZnJvbSAnQGF3cy1hbXBsaWZ5L2F1dGgvbGliLWVzbS9BdXRoJztcbmltcG9ydCB7IFJlZ2lzdGVyUmVzdWx0IH0gZnJvbSAnLi4vYXV0aC9hdXRoLnR5cGVzJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vZW5jcnlwdGlvbi9lbmNyeXB0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LWZhY3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBMaWZlUmVhZHlDb25maWcsIExSX0NPTkZJRyB9IGZyb20gJy4uL2xpZmUtcmVhZHkuY29uZmlnJztcbmltcG9ydCB7IFBhc3N3b3JkU2VydmljZSB9IGZyb20gJy4uL3Bhc3N3b3JkL3Bhc3N3b3JkLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChMUl9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBMaWZlUmVhZHlDb25maWcsXG4gICAgcHJpdmF0ZSBhdXRoOiBBdXRoQ2xhc3MsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUga2V5RmFjdG9yeTogS2V5RmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXNzd29yZFNlcnZpY2U6IFBhc3N3b3JkU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgYSB2ZXJpZmljYXRpb24gY29kZSB0byBiZSBzZW50IG91dCB0byBhbiBlbWFpbC5cbiAgICogQHJldHVybiBJbmZvIG5lZWRlZCB0byBiZSBzdWJtaXR0ZWQgYWxvbmcgd2l0aCB0aGUgdmVyaWZpY2F0aW9uIGNvZGVcbiAgICovXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnlFbWFpbChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IGNsYWltX2lkIH0gPSBhd2FpdCB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHsgY2xhaW1faWQgfT4oYCR7dGhpcy5jb25maWcuYXV0aFVybH1jb3ZlL2NsYWltL2VtYWlsL2AsIHtcbiAgICAgICAgYWRkcmVzczogZW1haWwsXG4gICAgICAgIGNvbnRleHQ6ICdzaWdudXAnLFxuICAgICAgfSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgICByZXR1cm4gY2xhaW1faWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdmVyaWZ5UGhvbmUocGhvbmVOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyBjbGFpbV9pZCB9ID0gYXdhaXQgdGhpcy5odHRwXG4gICAgICAucG9zdDx7IGNsYWltX2lkIH0+KGAke3RoaXMuY29uZmlnLmF1dGhVcmx9Y292ZS9jbGFpbS9zbXMvYCwge1xuICAgICAgICBhZGRyZXNzOiBwaG9uZU51bWJlcixcbiAgICAgICAgY29udGV4dDogJ3NpZ251cCcsXG4gICAgICB9KVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIHJldHVybiBjbGFpbV9pZDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb25maXJtVmVyaWZpY2F0aW9uQ29kZShcbiAgICB2ZXJpZmljYXRpb25JZDogc3RyaW5nLFxuICAgIHZlcmlmaWNhdGlvbkNvZGU6IHN0cmluZ1xuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgdG9rZW4gfSA9IGF3YWl0IHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8eyB0b2tlbiB9PihgJHt0aGlzLmNvbmZpZy5hdXRoVXJsfWNvdmUvcmVzcG9uZC9gLCB7XG4gICAgICAgIGNsYWltX2lkOiB2ZXJpZmljYXRpb25JZCxcbiAgICAgICAgdl9jb2RlOiB2ZXJpZmljYXRpb25Db2RlLFxuICAgICAgfSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXIoXG4gICAgZW1haWw6IHN0cmluZyxcbiAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgIHZlcmlmaWNhdGlvbklkOiBzdHJpbmcsXG4gICAgdmVyaWZpY2F0aW9uVG9rZW46IHN0cmluZyxcbiAgICB2ZXJpZmljYXRpb25UeXBlOiAnZW1haWwnIHwgJ3Bob25lJyA9ICdlbWFpbCdcbiAgKTogUHJvbWlzZTxSZWdpc3RlclJlc3VsdD4ge1xuICAgIC8vIEdlbmVyYXRlIHRoZSBrZXkgbWF0ZXJpYWwgbmVlZGVkIGZvciBQYXNzSWRwIHdoaWNoIHdpbGwgYmUgdGhlIHBhc3N3b3JkIHVzZWQgZm9yIENvZ25pdG8uXG4gICAgY29uc3QgcGFzc0tleUJ1bmRsZSA9IGF3YWl0IHRoaXMucGFzc3dvcmRTZXJ2aWNlLmNyZWF0ZVBhc3NLZXlCdW5kbGUoXG4gICAgICBwYXNzd29yZFxuICAgICk7XG5cbiAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlS2V5KCk7XG4gICAgY29uc3Qgd3JhcHBlZE1hc3RlcktleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChcbiAgICAgIHBhc3NLZXlCdW5kbGUucGFzc0tleSxcbiAgICAgIG1hc3RlcktleS50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgY29uc3Qgcm9vdEtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcbiAgICBjb25zdCB3cmFwcGVkUm9vdEtleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChcbiAgICAgIG1hc3RlcktleSxcbiAgICAgIHJvb3RLZXkudG9KU09OKHRydWUpXG4gICAgKTtcblxuICAgIC8vIEVuY3J5cHRpb24gUEtDIGtleVxuICAgIGNvbnN0IHByayA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVQa2NLZXkoKTtcbiAgICBjb25zdCB3cmFwcGVkUHJrID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxuICAgICAgcm9vdEtleSxcbiAgICAgIHByay50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgLy8gU2lnbmluZyBQS0Mga2V5XG4gICAgY29uc3Qgc2lnUHJrID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZVBrY1NpZ25LZXkoKTtcbiAgICBjb25zdCB3cmFwcGVkU2lnUHJrID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxuICAgICAgcm9vdEtleSxcbiAgICAgIHNpZ1Byay50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgLy8gQVBJIGNhbGwgdG8gc2V0dXAgcHJvZmlsZVxuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PGFueT4oYCR7dGhpcy5jb25maWcuYXV0aFVybH11c2Vycy9gLCB7XG4gICAgICAgIGNsYWltczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IHZlcmlmaWNhdGlvblR5cGUsXG4gICAgICAgICAgICB0b2tlbjogdmVyaWZpY2F0aW9uVG9rZW4sXG4gICAgICAgICAgICBjbGFpbV9pZDogdmVyaWZpY2F0aW9uSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFzc19pZHBfcGFyYW1zOiBwYXNzS2V5QnVuZGxlLnBhc3NJZHBQYXJhbXMsXG4gICAgICAgIHBhc3NfaWRwX3ZlcmlmaWVyX3BiazogcGFzc0tleUJ1bmRsZS5wYXNzSWRwVmVyaWZpZXIudG9KU09OKCksXG4gICAgICAgIHdyYXBwZWRfcGFzc19pZHBfdmVyaWZpZXJfcHJrOiBwYXNzS2V5QnVuZGxlLndyYXBwZWRQYXNzSWRwVmVyaWZpZXJQcmssXG4gICAgICAgIHBhc3Nfa2V5X3BhcmFtczogcGFzc0tleUJ1bmRsZS5wYXNzS2V5UGFyYW1zLFxuICAgICAgICB3cmFwcGVkX21hc3Rlcl9rZXk6IHdyYXBwZWRNYXN0ZXJLZXksXG4gICAgICAgIHdyYXBwZWRfcm9vdF9rZXk6IHdyYXBwZWRSb290S2V5LFxuICAgICAgICBwYms6IHByay50b0pTT04oKSwgLy8gcHVibGljIGVuY3J5cHRpb24ga2V5XG4gICAgICAgIHdyYXBwZWRfcHJrOiB3cmFwcGVkUHJrLFxuICAgICAgICBzaWdfcGJrOiBzaWdQcmsudG9KU09OKCksIC8vIHB1YmxpYyBzaWduaW5nIGtleVxuICAgICAgICB3cmFwcGVkX3NpZ19wcms6IHdyYXBwZWRTaWdQcmssXG4gICAgICB9KVxuICAgICAgLnRvUHJvbWlzZSgpO1xuXG4gICAgLy8gQVBJIGNhbGwgdG8gY3JlYXRlIHVzZXIgb24gY29nbml0b1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICB1c2VyLmNsYWltcy5mb3JFYWNoKChjbGFpbSkgPT4ge1xuICAgICAgYXR0cmlidXRlc1tjbGFpbS50eXBlXSA9IGNsYWltLnZhbHVlO1xuICAgIH0pO1xuXG4gICAgLy8gUmFuZG9tIHN1ZmZpeCBmb3IgdW5pcXVlbmVzcy4gSWYgdGhlcmUncyBhIGR1cGxpY2F0ZSwgdGhlbiB1c2VkIGp1c3QgbmVlZHMgdG9cbiAgICAvLyBzaWduIHVwIGFnYWluLiBCdXQgY2hhbmNlcyBvZiBjb2xsaXNpb24gaXMgbG93LlxuICAgIGNvbnN0IHN1ZmZpeCA9IHRoaXMua2V5RmFjdG9yeS5yYW5kb21EaWdpdHNOb1plcm9zKDQpO1xuXG4gICAgY29uc3QgY29nbml0b1VzZXIgPSBhd2FpdCB0aGlzLmF1dGguc2lnblVwKHtcbiAgICAgIHVzZXJuYW1lOiBgJHtlbWFpbC5zcGxpdCgnQCcpWzBdfS4ke3N1ZmZpeH1gLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmRTZXJ2aWNlLmdldFBhc3NJZHBTdHJpbmcocGFzc0tleUJ1bmRsZS5wYXNzSWRwKSxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB2YWxpZGF0aW9uRGF0YSBpcyBub3QgcGFzc2VkIHRvIHRoZSBwb3N0XG4gICAgICAvLyBjb25maXJtYXRpb24gY29nbml0byB0cmlnZ2VyLiBTbyBjYW4gY2FuJ3QgZG8gdGhlIGFzc29jaWF0aW9uIHRoZXJlLlxuICAgICAgLy8gVGhlIGN1cnJlbnQgd29ya2Zsb3cgd2lsbCBjcmVhdGUgYSBuZXcgdXNlciBvbiBMUiBiZWZvcmUgc2lnbmluZyB1cFxuICAgICAgLy8gd2l0aCBDb2duaXRvLiBUaGVuIENvZ25pdG8gY2FuIHVzZSB0aGUgdXNlci5pZCBhbmQgdXNlci5wcmVfc2lnbl91cF90b2tlbiB0b1xuICAgICAgLy8gZG8gdGhlIHZhbGlkYXRpb24gb2YgdGhlIGF0dHJpYnV0ZXMuXG4gICAgICAvLyB2YWxpZGF0aW9uRGF0YTogW1xuICAgICAgLy8gICBuZXcgQ29nbml0b1VzZXJBdHRyaWJ1dGUoe1xuICAgICAgLy8gICAgIE5hbWU6IFwidXNlcl9pZFwiLFxuICAgICAgLy8gICAgIFZhbHVlOiBTdHJpbmcodXNlci5pZClcbiAgICAgIC8vICAgfSksXG4gICAgICAvLyAgIG5ldyBDb2duaXRvVXNlckF0dHJpYnV0ZSh7XG4gICAgICAvLyAgICAgTmFtZTogXCJ1c2VyX3ByZV9zaWduX3VwX3Rva2VuXCIsXG4gICAgICAvLyAgICAgVmFsdWU6IHVzZXIucHJlX3NpZ25fdXBfdG9rZW5cbiAgICAgIC8vICAgfSlcbiAgICAgIC8vIF1cbiAgICAgIGNsaWVudE1ldGFkYXRhOiB7XG4gICAgICAgIHVzZXJfaWQ6IFN0cmluZyh1c2VyLmlkKSxcbiAgICAgICAgdXNlcl9wcmVfc2lnbl91cF90b2tlbjogU3RyaW5nKHVzZXIucHJlX3NpZ25fdXBfdG9rZW4pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB1c2VybmFtZTogY29nbml0b1VzZXIudXNlci5nZXRVc2VybmFtZSgpLFxuICAgICAgdXNlcklkOiB1c2VyLmlkLFxuICAgICAgcHJlU2lnblVwVG9rZW46IHVzZXIucHJlX3NpZ25fdXBfdG9rZW4sXG4gICAgICB1c2VyU3ViOiBjb2duaXRvVXNlci51c2VyU3ViLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGlicEJyZWFjaGVkQWNjb3VudHMoYWNjb3VudDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBUaGUgYWNjb3VudCBpcyBqdXN0IHRoZSBlbWFpbFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cFxuICAgICAgICAuZ2V0KFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLmF1dGhVcmx9dXNlcnMvaGlicC9icmVhY2hlZGFjY291bnQvJHthY2NvdW50fS8/dHJ1bmNhdGVSZXNwb25zZT1mYWxzZWBcbiAgICAgICAgKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { Injectable, Injector, NgZone } from '@angular/core';
|
|
3
|
-
import { TpAssemblyController } from '../
|
|
3
|
+
import { TpAssemblyController } from '../tp-assembly/tp-assembly';
|
|
4
4
|
import { RunOutsideAngular } from '../_common/run-outside-angular';
|
|
5
5
|
import { SCENARIO_SLIP39_PASSPHRASE } from './scenario.constants';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
@@ -31,4 +31,4 @@ ScenarioAssemblyController = __decorate([
|
|
|
31
31
|
})
|
|
32
32
|
], ScenarioAssemblyController);
|
|
33
33
|
export { ScenarioAssemblyController };
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8uY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvc2NlbmFyaW8vc2NlbmFyaW8uY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztJQVFyRCwwQkFBMEIsU0FBMUIsMEJBQTJCLFNBQVEsb0JBQW9CO0lBR2xFLFlBQW9CLE1BQWMsRUFBVSxRQUFrQjtRQUM1RCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFERSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUY5RCxxQkFBZ0IsR0FBRywwQkFBMEIsQ0FBQztJQUk5QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsRUFBVTtRQUMzQixPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0NBQ0YsQ0FBQTs7O1lBYkEsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFYOEIsTUFBTTtZQUFoQixRQUFROztBQVloQiwwQkFBMEI7SUFOdEMsaUJBQWlCLENBQUM7UUFDakIsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQztHQUlXLDBCQUEwQixDQVV0QztTQVZZLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRwTm9kZSB9IGZyb20gJy4uL2FwaS90eXBlcyc7XG5pbXBvcnQgeyBUcEFzc2VtYmx5Q29udHJvbGxlciB9IGZyb20gJy4uL3RwLWFzc2VtYmx5L3RwLWFzc2VtYmx5JztcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcbmltcG9ydCB7IFNDRU5BUklPX1NMSVAzOV9QQVNTUEhSQVNFIH0gZnJvbSAnLi9zY2VuYXJpby5jb25zdGFudHMnO1xuXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcbn0pXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NlbmFyaW9Bc3NlbWJseUNvbnRyb2xsZXIgZXh0ZW5kcyBUcEFzc2VtYmx5Q29udHJvbGxlciB7XG4gIHNsaXAzOVBhc3NwaHJhc2UgPSBTQ0VOQVJJT19TTElQMzlfUEFTU1BIUkFTRTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lLCBwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuXG4gIGdldFRwV3JhcHBpbmdLZXlJZCh0cDogVHBOb2RlKSB7XG4gICAgcmV0dXJuIHRwLmN1cnJlbnRVc2VyU2hhcmVkS2V5LnVzZXJTaGFyZWRLZXkuc2hhcmVkS2V5LmlkO1xuICB9XG59XG4iXX0=
|
|
@@ -195,4 +195,4 @@ query SharedScenarioQuery($scenarioId: LrRelayIdInput!) {
|
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
197
|
`;
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8ucHJpdmF0ZS5ncWwuanMiLCJzb3VyY2VSb290IjoiL29wdC9hdGxhc3NpYW4vcGlwZWxpbmVzL2FnZW50L2J1aWxkL3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3NjZW5hcmlvL3NjZW5hcmlvLnByaXZhdGUuZ3FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVkxQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF3R3hELENBQUM7QUFLSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQTJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EwRnJFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY2VuYXJpb05vZGUsIFNoYXJlZFNjZW5hcmlvTm9kZSB9IGZyb20gJy4uL2FwaS90eXBlcyc7XG5pbXBvcnQgeyBncWxUeXBlZCB9IGZyb20gJy4uL19jb21tb24vYXN0JztcblxuLyoqXG4gKiBUaGlzIGlzIGEgcXVlcnkgdGhhdCBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIHNlcnZpY2VzIGZvciBtdXRhdGlvbnMuIEl0XG4gKiBjb250YWlucyB0aGUgbWluaW11bSBhbW91bnQgb2YgaW5mb3JtYXRpb24gZm9yIHRoZSBpbmZvcm1hdGlvbiB0aGUgc2VydmljZXNcbiAqIG5lZWQuIFlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHdyaXRlIHlvdXIgb3duIHF1ZXJ5IHRvIHlvdXIgbGlraW5nIGlmIHlvdVxuICogd2FudCB0byByZXRyaWV2ZSBhIHNjZW5hcmlvLiBGb3IgZXhhbXBsZSwgdGhlcmUgYSBzZXBhcmF0ZSBxdWVyeSBpbiB0aGVcbiAqIHNjZW5hcmlvLnNlcnZpY2Uuc3BlYy50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjZW5hcmlvUXVlcnlSZXN1bHQge1xuICBzY2VuYXJpbzogU2NlbmFyaW9Ob2RlO1xufVxuZXhwb3J0IGNvbnN0IFNjZW5hcmlvUXVlcnkgPSBncWxUeXBlZDxTY2VuYXJpb1F1ZXJ5UmVzdWx0PmBcbnF1ZXJ5IFNjZW5hcmlvUXVlcnkoXG4gICRzY2VuYXJpb0lkOiBMclJlbGF5SWRJbnB1dCFcbikge1xuICBzY2VuYXJpbyhpZDogJHNjZW5hcmlvSWQpIHtcbiAgICBpZFxuICAgIHN0YXRlXG4gICAgYXNzZW1ibHkge1xuICAgICAgcXVvcnVtXG4gICAgICBzaW5nbGVSZWplY3RcbiAgICAgIGFzc2VtYmx5S2V5IHtcbiAgICAgICAgaWRcbiAgICAgIH1cbiAgICAgIHN1YmplY3RLZXkge1xuICAgICAgICBpZFxuICAgICAgfVxuICAgICAgc3ViamVjdENpcGhlckRhdGFcbiAgICAgIHN1YkFzc2VtYmxpZXMge1xuICAgICAgICBlZGdlcyB7XG4gICAgICAgICAgbm9kZSB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgc3ViamVjdEtleSB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJqZWN0Q2lwaGVyRGF0YVxuICAgICAgICAgICAgcXVvcnVtXG4gICAgICAgICAgICBzaW5nbGVSZWplY3RcbiAgICAgICAgICAgIGFwcHJvdmVycyB7XG4gICAgICAgICAgICAgIGVkZ2VzIHtcbiAgICAgICAgICAgICAgICBub2RlIHtcbiAgICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgICB0cCB7XG4gICAgICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBzaGFyZWRLZXkge1xuICAgICAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjbGFpbWFudHMge1xuICAgICAgZWRnZXMge1xuICAgICAgICBub2RlIHtcbiAgICAgICAgICB0cCB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgIH1cbiAgICAgICAgICBzaGFyZWRLZXkge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmVjZWl2ZXJzIHtcbiAgICAgIGVkZ2VzIHtcbiAgICAgICAgbm9kZSB7XG4gICAgICAgICAgdHAge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICB9XG4gICAgICAgICAgc2hhcmVkS2V5IHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgfVxuICAgICAgICAgIHNoYXJlZENpcGhlckRhdGFcbiAgICAgICAgICByZWNlaXZlckRpcmVjdG9yaWVzIHtcbiAgICAgICAgICAgIGVkZ2VzIHtcbiAgICAgICAgICAgICAgbm9kZSB7XG4gICAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgICBzaGFyZWRDaXBoZXJEYXRhXG4gICAgICAgICAgICAgICAgc2hhcmVkS2V5IHtcbiAgICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjY2Vzc1JvbGVcbiAgICAgICAgICAgICAgICBpdGVtS2V5IHtcbiAgICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB7XG4gICAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgICAga2V5SWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVjZWl2ZXJGaWxlcyB7XG4gICAgICAgICAgICBlZGdlcyB7XG4gICAgICAgICAgICAgIG5vZGUge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YVxuICAgICAgICAgICAgICAgIHNoYXJlZEtleSB7XG4gICAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2Nlc3NSb2xlXG4gICAgICAgICAgICAgICAgaXRlbUtleSB7XG4gICAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufWA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVkU2NlbmFyaW9RdWVyeVJlc3VsdCB7XG4gIHNoYXJlZFNjZW5hcmlvOiBTaGFyZWRTY2VuYXJpb05vZGU7XG59XG5leHBvcnQgY29uc3QgU2hhcmVkU2NlbmFyaW9RdWVyeSA9IGdxbFR5cGVkPFNoYXJlZFNjZW5hcmlvUXVlcnlSZXN1bHQ+YFxucXVlcnkgU2hhcmVkU2NlbmFyaW9RdWVyeSgkc2NlbmFyaW9JZDogTHJSZWxheUlkSW5wdXQhKSB7XG4gIHNoYXJlZFNjZW5hcmlvKGlkOiAkc2NlbmFyaW9JZCkge1xuICAgIGlkXG4gICAgc3RhdGVcbiAgICB0cCB7XG4gICAgICBpZFxuICAgIH1cbiAgICBhc0NsYWltYW50IHtcbiAgICAgIHNoYXJlZEtleSB7XG4gICAgICAgIGlkXG4gICAgICB9XG4gICAgICBzaGFyZWRDaXBoZXJEYXRhXG4gICAgfVxuICAgIGFzUmVjZWl2ZXIge1xuICAgICAgc2hhcmVkS2V5IHtcbiAgICAgICAgaWRcbiAgICAgIH1cbiAgICAgIHNoYXJlZENpcGhlckRhdGFcbiAgICAgIHBiayB7XG4gICAgICAgIGlkXG4gICAgICB9XG4gICAgICByZWNlaXZlckRpcmVjdG9yaWVzIHtcbiAgICAgICAgZWRnZXMge1xuICAgICAgICAgIG5vZGUge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIHdyYXBwZWRJdGVtS2V5XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFzc2VtYmx5IHtcbiAgICAgIGFzQXBwcm92ZXJzIHtcbiAgICAgICAgZWRnZXMge1xuICAgICAgICAgIG5vZGUge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIHNoYXJlZEtleSB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFyZWRDaXBoZXJEYXRhXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHNoYXJlZENsYWltIHtcblx0IFx0XHRpZFxuICAgICAgaXNDbGFpbWFudFxuICAgICAgY2xhaW0ge1xuICAgICAgICBzdGF0ZVxuICAgICAgICBhc0NsYWltQXBwcm92ZXJzIHtcbiAgICAgICAgICBlZGdlcyB7XG4gICAgICAgICAgICBub2RlIHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgc2hhcmVkS2V5IHtcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNoYXJlZENpcGhlckFwcHJvdmFsRGF0YVxuICAgICAgICAgICAgICBzaGFyZWRDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXlcbiAgICAgICAgICAgICAgcmVjZWl2ZXJBcHByb3ZhbHMge1xuICAgICAgICAgICAgICAgIGVkZ2VzIHtcbiAgICAgICAgICAgICAgICAgIG5vZGUge1xuICAgICAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgICAgICBweGsge1xuICAgICAgICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFzQ2xhaW1SZWNlaXZlciB7XG4gICAgICAgIHJlY2VpdmVkXG4gICAgICAgIGFwcHJvdmFscyB7XG4gICAgICAgICAgZWRnZXMge1xuICAgICAgICAgICAgbm9kZSB7XG4gICAgICAgICAgICAgIHJlY2VpdmVyQ2lwaGVyXG4gICAgICAgICAgICAgIHJlY2VpdmVyQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5XG4gICAgICAgICAgICAgIHB4ayB7XG4gICAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuYDtcbiJdfQ==
|
|
@@ -2,20 +2,20 @@ import { __awaiter, __decorate } from "tslib";
|
|
|
2
2
|
import { Injectable, Injector, NgZone } from '@angular/core';
|
|
3
3
|
import { LrMergedMutation, LrMutation, LrService } from '../api/lr-graphql';
|
|
4
4
|
import { mapEdges, ScenarioState, TpClaimApproverState, } from '../api/types';
|
|
5
|
-
import {
|
|
5
|
+
import { EncryptionService } from '../encryption/encryption.service';
|
|
6
|
+
import { Item2Service } from '../items2/item2.service';
|
|
7
|
+
import { KeyGraphService } from '../key/key-graph.service';
|
|
8
|
+
import { TpsKeysQuery } from '../tp-assembly/tp-assembly.private.gql';
|
|
6
9
|
import { LrBadArgumentException, LrBadStateException, } from '../_common/exceptions';
|
|
7
10
|
import { RunOutsideAngular } from '../_common/run-outside-angular';
|
|
8
|
-
import { DeleteScenarioMutation, CreateScenarioClaimMutation, UpdateScenarioMutation, CreateScenarioMutation, ReceiveScenarioClaimMutation, ApproveScenarioClaimMutation, CancelScenarioClaimMutation, RejectScenarioClaimMutation, } from './scenario.gql';
|
|
9
|
-
import { Item2Service } from '../items2/item2.service';
|
|
10
11
|
import { ScenarioAssemblyController } from './scenario.controller';
|
|
11
|
-
import {
|
|
12
|
-
import { ScenarioQuery, SharedScenarioQuery } from './scenario.gql
|
|
13
|
-
import { TpsKeysQuery } from '../trusted-parties/tp-assembly.gql.private';
|
|
12
|
+
import { ApproveScenarioClaimMutation, CancelScenarioClaimMutation, CreateScenarioClaimMutation, CreateScenarioMutation, DeleteScenarioMutation, ReceiveScenarioClaimMutation, RejectScenarioClaimMutation, UpdateScenarioMutation, } from './scenario.gql';
|
|
13
|
+
import { ScenarioQuery, SharedScenarioQuery } from './scenario.private.gql';
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "../
|
|
15
|
+
import * as i1 from "../key/key-graph.service";
|
|
16
16
|
import * as i2 from "../items2/item2.service";
|
|
17
17
|
import * as i3 from "./scenario.controller";
|
|
18
|
-
import * as i4 from "../
|
|
18
|
+
import * as i4 from "../encryption/encryption.service";
|
|
19
19
|
export function throwClaimIdMismatch() {
|
|
20
20
|
throw new LrBadArgumentException('claimId does not match with the current claimId of the scenario');
|
|
21
21
|
}
|
|
@@ -534,4 +534,4 @@ ScenarioService = __decorate([
|
|
|
534
534
|
})
|
|
535
535
|
], ScenarioService);
|
|
536
536
|
export { ScenarioService };
|
|
537
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvc2NlbmFyaW8vc2NlbmFyaW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUUsT0FBTyxFQUVMLFFBQVEsRUFHUixhQUFhLEVBR2Isb0JBQW9CLEdBRXJCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLG1CQUFtQixHQUNwQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1QiwyQkFBMkIsRUFDM0IsMkJBQTJCLEdBQzVCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBYW5FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7OztBQUUxRSxN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QjtZQUN0QixNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUNsRCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLG9CQUFvQixDQUFDLE9BQU8sQ0FDN0IsQ0FBQztZQUVGLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUN6QixDQUFPLGVBQWUsRUFBRSxFQUFFO2dCQUN4QixPQUFBLElBQUksVUFBVSxDQUFDO29CQUNiLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLFNBQVMsRUFBRTt3QkFDVCxLQUFLLEVBQUUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRTtxQkFDL0M7aUJBQ0YsQ0FBQyxDQUFBO2NBQUEsQ0FDTCxDQUFDO1FBQ0osQ0FBQztLQUFBO0NBQ0YsQ0FBQTtBQXJzQmUsaUNBQWlCLEdBQUcsV0FBVyxDQUFDOzs7WUFkL0MsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFoRThCLE1BQU07WUFBaEIsUUFBUTtZQWNwQixlQUFlO1lBZ0JmLFlBQVk7WUFDWiwwQkFBMEI7WUFhMUIsaUJBQWlCOztBQXFCYixlQUFlO0lBTjNCLGlCQUFpQixDQUFDO1FBQ2pCLFVBQVUsRUFBRSxRQUFRO0tBQ3JCLENBQUM7R0FJVyxlQUFlLENBZ3RCM0I7U0FodEJZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKV0sgfSBmcm9tICdub2RlLWpvc2UnO1xuaW1wb3J0IHsgTHJNZXJnZWRNdXRhdGlvbiwgTHJNdXRhdGlvbiwgTHJTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWdyYXBocWwnO1xuaW1wb3J0IHtcbiAgSlNPTk9iamVjdCxcbiAgbWFwRWRnZXMsXG4gIFNjZW5hcmlvTm9kZSxcbiAgU2NlbmFyaW9SZWNlaXZlck5vZGUsXG4gIFNjZW5hcmlvU3RhdGUsXG4gIFNoYXJlZFNjZW5hcmlvQ2xhaW1SZWNlaXZlZEFwcHJvdmFsTm9kZSxcbiAgU2hhcmVkVHBDbGFpbUFwcHJvdmVyTm9kZSxcbiAgVHBDbGFpbUFwcHJvdmVyU3RhdGUsXG4gIFRwTm9kZSxcbn0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZ3JhcGguc2VydmljZSc7XG5pbXBvcnQge1xuICBMckJhZEFyZ3VtZW50RXhjZXB0aW9uLFxuICBMckJhZFN0YXRlRXhjZXB0aW9uLFxufSBmcm9tICcuLi9fY29tbW9uL2V4Y2VwdGlvbnMnO1xuaW1wb3J0IHsgUnVuT3V0c2lkZUFuZ3VsYXIgfSBmcm9tICcuLi9fY29tbW9uL3J1bi1vdXRzaWRlLWFuZ3VsYXInO1xuaW1wb3J0IHtcbiAgRGVsZXRlU2NlbmFyaW9NdXRhdGlvbixcbiAgQ3JlYXRlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBVcGRhdGVTY2VuYXJpb011dGF0aW9uLFxuICBDcmVhdGVTY2VuYXJpb011dGF0aW9uLFxuICBSZWNlaXZlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBBcHByb3ZlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBDYW5jZWxTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gIFJlamVjdFNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbn0gZnJvbSAnLi9zY2VuYXJpby5ncWwnO1xuaW1wb3J0IHsgSXRlbTJTZXJ2aWNlIH0gZnJvbSAnLi4vaXRlbXMyL2l0ZW0yLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NlbmFyaW9Bc3NlbWJseUNvbnRyb2xsZXIgfSBmcm9tICcuL3NjZW5hcmlvLmNvbnRyb2xsZXInO1xuaW1wb3J0IHtcbiAgQ3JlYXRlQ2xhaW1hbnRPcHRpb25zLFxuICBDcmVhdGVQYXJ0aWNpcGFudE9wdGlvbnMsXG4gIENyZWF0ZVJlY2VpdmVyT3B0aW9ucyxcbiAgQ3JlYXRlU2NlbmFyaW9PcHRpb25zLFxuICBQYXJ0aWNpcGFudE9wdGlvbnMsXG4gIFJlY2VpdmVyRGlyZWN0b3J5T3B0aW9ucyxcbiAgUmVzZXRTY2VuYXJpb09wdGlvbnMsXG4gIFVwZGF0ZUNsYWltYW50T3B0aW9ucyxcbiAgVXBkYXRlUmVjZWl2ZXJPcHRpb25zLFxuICBVcGRhdGVTY2VuYXJpb09wdGlvbnMsXG59IGZyb20gJy4vc2NlbmFyaW8udHlwZXMnO1xuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvZW5jcnlwdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNjZW5hcmlvUXVlcnksIFNoYXJlZFNjZW5hcmlvUXVlcnkgfSBmcm9tICcuL3NjZW5hcmlvLmdxbC5wcml2YXRlJztcbmltcG9ydCB7IFBhcnRpYWxBc3NlbWJseUtleSB9IGZyb20gJy4uL3RydXN0ZWQtcGFydGllcy90cC1hc3NlbWJseS50eXBlcyc7XG5pbXBvcnQgeyBUcHNLZXlzUXVlcnkgfSBmcm9tICcuLi90cnVzdGVkLXBhcnRpZXMvdHAtYXNzZW1ibHkuZ3FsLnByaXZhdGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dDbGFpbUlkTWlzbWF0Y2goKSB7XG4gIHRocm93IG5ldyBMckJhZEFyZ3VtZW50RXhjZXB0aW9uKFxuICAgICdjbGFpbUlkIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGN1cnJlbnQgY2xhaW1JZCBvZiB0aGUgc2NlbmFyaW8nXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0NsYWltTm90QXBwcm92ZWQoKSB7XG4gIHRocm93IG5ldyBMckJhZFN0YXRlRXhjZXB0aW9uKCdTY2VuYXJpbyBjbGFpbSBoYXMgbm90IGJlZW4gYXBwcm92ZWQnKTtcbn1cblxuQFJ1bk91dHNpZGVBbmd1bGFyKHtcbiAgbmdab25lTmFtZTogJ25nWm9uZScsXG59KVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNjZW5hcmlvU2VydmljZSBleHRlbmRzIExyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgaXRlbTJTZXJ2aWNlOiBJdGVtMlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhc3NlbWJseUNvbnRyb2xsZXI6IFNjZW5hcmlvQXNzZW1ibHlDb250cm9sbGVyLFxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIFNMSVAzOV9QQVNTUEhSQVNFID0gJ2xpZmVyZWFkeSc7XG5cbiAgcHJpdmF0ZSBwcmVwYXJlQWRkUmVjZWl2ZXJEaXJlY3RvcnkgPSB0aGlzLnByZXBhcmVSZWNlaXZlckRpcmVjdG9yeTtcbiAgcHJpdmF0ZSBwcmVwYXJlVXBkYXRlUmVjZWl2ZXJEaXJlY3RvcnkgPSB0aGlzLnByZXBhcmVSZWNlaXZlckRpcmVjdG9yeTtcblxuICAvLyBTY2VuYXJpb3NcbiAgYXN5bmMgY3JlYXRlU2NlbmFyaW8ob3B0aW9uczogQ3JlYXRlU2NlbmFyaW9PcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY3JlYXRlU2NlbmFyaW9NdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTY2VuYXJpb011dGF0aW9uKG9wdGlvbnM6IENyZWF0ZVNjZW5hcmlvT3B0aW9ucykge1xuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlU2NlbmFyaW9NdXRhdGlvbihvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENyZWF0ZVNjZW5hcmlvTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlU2NlbmFyaW8ob3B0aW9uczogVXBkYXRlU2NlbmFyaW9PcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudXBkYXRlU2NlbmFyaW9NdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVTY2VuYXJpb011dGF0aW9uKG9wdGlvbnM6IFVwZGF0ZVNjZW5hcmlvT3B0aW9ucykge1xuICAgIGNvbnN0IHNjZW5hcmlvID0gKGF3YWl0IHRoaXMuZ2V0U2NlbmFyaW8ob3B0aW9ucy5zY2VuYXJpb0lkKSkuc2NlbmFyaW87XG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVTY2VuYXJpbyhvcHRpb25zLCBzY2VuYXJpbyk7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVTY2VuYXJpb011dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0U2NlbmFyaW8ob3B0aW9uczogUmVzZXRTY2VuYXJpb09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5yZXNldFNjZW5hcmlvTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgcmVzZXRTY2VuYXJpb011dGF0aW9uKG9wdGlvbnM6IFJlc2V0U2NlbmFyaW9PcHRpb25zKSB7XG4gICAgY29uc3Qgc2NlbmFyaW8gPSAoYXdhaXQgdGhpcy5nZXRTY2VuYXJpbyhvcHRpb25zLnNjZW5hcmlvSWQpKS5zY2VuYXJpbztcblxuICAgIGNvbnN0IHsgYXNzZW1ibHkgfSA9IHNjZW5hcmlvO1xuXG4gICAgLy8gSnVzdCBuZWVkIHRvIGRvIGFuIHVwZGF0ZSB3aXRob3V0IGNoYW5naW5nIGFwcHJvdmVycy4gVGhpcyB3aWxsIHJlY3JlYXRlXG4gICAgLy8gYWxsIGFzc2VtYmx5IGtleXMuXG4gICAgY29uc3QgdXBkYXRlU3ViQXNzZW1ibGllcyA9IG1hcEVkZ2VzKGFzc2VtYmx5LnN1YkFzc2VtYmxpZXMpLm1hcCgoc2EpID0+IHtcbiAgICAgIGNvbnN0IGFwcHJvdmVyVHBzID0gbWFwRWRnZXMoc2EuYXBwcm92ZXJzKS5tYXAoKGFwcHJvdmVyKSA9PiAoe1xuICAgICAgICB0cElkOiBhcHByb3Zlci50cC5pZCxcbiAgICAgIH0pKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHNhLmlkLFxuICAgICAgICBxdW9ydW06IHNhLnF1b3J1bSxcbiAgICAgICAgc2luZ2xlUmVqZWN0OiBzYS5zaW5nbGVSZWplY3QsXG4gICAgICAgIHN1YmplY3RDaXBoZXJEYXRhQ2xlYXJKc29uOiBzYS5zdWJqZWN0Q2lwaGVyRGF0YUNsZWFySnNvbixcbiAgICAgICAgYXBwcm92ZXJUcHMsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVTY2VuYXJpbyhcbiAgICAgIHtcbiAgICAgICAgc2NlbmFyaW9JZDogb3B0aW9ucy5zY2VuYXJpb0lkLFxuICAgICAgICBlbmFibGVkOiBvcHRpb25zLmVuYWJsZWQsXG4gICAgICAgIHVwZGF0ZUFzc2VtYmx5OiB7XG4gICAgICAgICAgcXVvcnVtOiBhc3NlbWJseS5xdW9ydW0sXG4gICAgICAgICAgc2luZ2xlUmVqZWN0OiBhc3NlbWJseS5zaW5nbGVSZWplY3QsXG4gICAgICAgICAgdXBkYXRlU3ViQXNzZW1ibGllcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzY2VuYXJpb1xuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFVwZGF0ZVNjZW5hcmlvTXV0YXRpb24sIC8vIHVwZGF0aW5nIHNjZW5hcmlvIHJlc2V0cyBpdFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNjZW5hcmlvKHNjZW5hcmlvSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmxyR3JhcGhRTC5sck11dGF0ZSh0aGlzLmRlbGV0ZVNjZW5hcmlvTXV0YXRpb24oc2NlbmFyaW9JZCkpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2NlbmFyaW9NdXRhdGlvbihzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IERlbGV0ZVNjZW5hcmlvTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHsgaW5wdXQ6IHsgc2NlbmFyaW9JZCB9IH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBDbGFpbXNcbiAgYXN5bmMgY3JlYXRlQ2xhaW0oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY3JlYXRlQ2xhaW1NdXRhdGlvbihzY2VuYXJpb0lkKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVDbGFpbU11dGF0aW9uKHNjZW5hcmlvSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQ3JlYXRlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7IGlucHV0OiB7IHNjZW5hcmlvSWQgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsQ2xhaW0oY2xhaW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY2FuY2VsQ2xhaW1NdXRhdGlvbihjbGFpbUlkKSk7XG4gIH1cblxuICBhc3luYyBjYW5jZWxDbGFpbU11dGF0aW9uKGNsYWltSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQ2FuY2VsU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7IGlucHV0OiB7IGNsYWltSWQgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVqZWN0Q2xhaW0oc2hhcmVkU2NlbmFyaW9JZDogc3RyaW5nLCBjbGFpbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5yZWplY3RDbGFpbU11dGF0aW9uKHNoYXJlZFNjZW5hcmlvSWQsIGNsYWltSWQpKTtcbiAgfVxuXG4gIGFzeW5jIHJlamVjdENsYWltTXV0YXRpb24oc2hhcmVkU2NlbmFyaW9JZDogc3RyaW5nLCBjbGFpbUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtdXRhdGlvbnMgPSBhd2FpdCB0aGlzLnByZXBhcmVSZWplY3RDbGFpbU11dGF0aW9ucyhcbiAgICAgIHNoYXJlZFNjZW5hcmlvSWQsXG4gICAgICBjbGFpbUlkXG4gICAgKTtcbiAgICByZXR1cm4gTHJNZXJnZWRNdXRhdGlvbi5jcmVhdGUoYXdhaXQgUHJvbWlzZS5hbGwobXV0YXRpb25zKSk7XG4gIH1cblxuICBhc3luYyBhcHByb3ZlQ2xhaW0oc2hhcmVkU2NlbmFyaW9JZDogc3RyaW5nLCBzaGFyZWRDbGFpbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUoXG4gICAgICB0aGlzLmFwcHJvdmVDbGFpbU11dGF0aW9uKHNoYXJlZFNjZW5hcmlvSWQsIHNoYXJlZENsYWltSWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGFwcHJvdmVDbGFpbU11dGF0aW9uKHNoYXJlZFNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbXV0YXRpb25zID0gYXdhaXQgdGhpcy5wcmVwYXJlQXBwcm92ZUNsYWltTXV0YXRpb25zKFxuICAgICAgc2hhcmVkU2NlbmFyaW9JZCxcbiAgICAgIHNoYXJlZENsYWltSWRcbiAgICApO1xuICAgIHJldHVybiBMck1lcmdlZE11dGF0aW9uLmNyZWF0ZShhd2FpdCBQcm9taXNlLmFsbChtdXRhdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmVDbGFpbShzY2VuYXJpb0lkOiBzdHJpbmcsIHNoYXJlZENsYWltSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnJlY2VpdmVDbGFpbU11dGF0aW9uKHNjZW5hcmlvSWQsIHNoYXJlZENsYWltSWQpKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmVDbGFpbU11dGF0aW9uKHNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBSZWNlaXZlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBhd2FpdCB0aGlzLnByZXBhcmVDbGFpbShzY2VuYXJpb0lkLCBzaGFyZWRDbGFpbUlkKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIZWxwZXJzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHByaXZhdGUgYXN5bmMgZ2V0U2NlbmFyaW8oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkoe1xuICAgICAgcXVlcnk6IFNjZW5hcmlvUXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHsgc2NlbmFyaW9JZCB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRTaGFyZWRTY2VuYXJpbyhzY2VuYXJpb0lkOiBzdHJpbmcsIGNsYWltSWQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnF1ZXJ5KHtcbiAgICAgIHF1ZXJ5OiBTaGFyZWRTY2VuYXJpb1F1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIHNjZW5hcmlvSWQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKGNsYWltSWQgJiYgcmV0LnNoYXJlZFNjZW5hcmlvLnNoYXJlZENsYWltLmlkICE9PSBjbGFpbUlkKSB7XG4gICAgICB0aHJvd0NsYWltSWRNaXNtYXRjaCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFBhcnRpY2lwYW50VHBzS2V5cyhvcHRpb25zOiBDcmVhdGVQYXJ0aWNpcGFudE9wdGlvbnNbXSkge1xuICAgIGNvbnN0IHRwSWRzID0gb3B0aW9ucy5tYXAoKHgpID0+IHgudHBJZCk7XG5cbiAgICAvLyBUaGlzIHNob3VsZCBjb250YWluIGFsbCB0aGUgVFBzIHRoYXQgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGFzc2VtYmx5LlxuICAgIGNvbnN0IHRwcyA9IG1hcEVkZ2VzKFxuICAgICAgKFxuICAgICAgICBhd2FpdCB0aGlzLmxyR3JhcGhRTC5xdWVyeSh7XG4gICAgICAgICAgcXVlcnk6IFRwc0tleXNRdWVyeSxcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGlkczogdHBJZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICkudHBzXG4gICAgKTtcblxuICAgIHJldHVybiB0cHM7XG4gIH1cblxuICBwcml2YXRlIGZpbGxUcFNoYXJlZEtleUlkKFxuICAgIG9wdGlvbnM6IENyZWF0ZVBhcnRpY2lwYW50T3B0aW9uc1tdLFxuICAgIHRwczogVHBOb2RlW11cbiAgKSB7XG4gICAgb3B0aW9ucy5mb3JFYWNoKChwYXJ0aWNpcGFudCkgPT4ge1xuICAgICAgaWYgKCFwYXJ0aWNpcGFudC50cFNoYXJlZEtleUlkKSB7XG4gICAgICAgIGNvbnN0IHRwID0gdHBzLmZpbmQoKHgpID0+IHguaWQgPT09IHBhcnRpY2lwYW50LnRwSWQpO1xuICAgICAgICBwYXJ0aWNpcGFudC50cFNoYXJlZEtleUlkID1cbiAgICAgICAgICB0cC5jdXJyZW50VXNlclNoYXJlZEtleS51c2VyU2hhcmVkS2V5LnNoYXJlZEtleS5pZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9uczogQ3JlYXRlU2NlbmFyaW9PcHRpb25zKSB7XG4gICAgY29uc3QgeyBhc3NlbWJseUtleSwgbXV0YXRpb25JbnB1dDogY3JlYXRlQXNzZW1ibHkgfSA9XG4gICAgICBhd2FpdCB0aGlzLmFzc2VtYmx5Q29udHJvbGxlci5wcmVwYXJlQ3JlYXRlKG9wdGlvbnMuY3JlYXRlQXNzZW1ibHkpO1xuXG4gICAgY29uc3QgY3JlYXRlUmVjZWl2ZXJzT3B0aW9ucyA9IG9wdGlvbnMuY3JlYXRlUmVjZWl2ZXJzIHx8IFtdO1xuICAgIGNvbnN0IGNyZWF0ZUNsYWltYW50c09wdGlvbnMgPSBvcHRpb25zLmNyZWF0ZUNsYWltYW50cyB8fCBbXTtcblxuICAgIC8vIEZldGNoIGFsbCB0aGUgVFBzIHNvIHdlIGRvbid0IGhhdmUgdG8gcGFzcyBpbiB0cFNoYXJlZEtleUlkXG4gICAgY29uc3QgY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zID0gY3JlYXRlUmVjZWl2ZXJzT3B0aW9ucy5jb25jYXQoXG4gICAgICBjcmVhdGVDbGFpbWFudHNPcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IHRwcyA9IGF3YWl0IHRoaXMuZ2V0UGFydGljaXBhbnRUcHNLZXlzKGNyZWF0UGFydGljaXBhbnRzT3B0aW9ucyk7XG5cbiAgICB0aGlzLmZpbGxUcFNoYXJlZEtleUlkKGNyZWF0UGFydGljaXBhbnRzT3B0aW9ucywgdHBzKTtcblxuICAgIGNvbnN0IGNyZWF0ZVJlY2VpdmVycyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY3JlYXRlUmVjZWl2ZXJzT3B0aW9ucy5tYXAoKHJlY2VpdmVyKSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVDcmVhdGVSZWNlaXZlcihyZWNlaXZlciwgYXNzZW1ibHlLZXkpXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGNyZWF0ZUNsYWltYW50cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY3JlYXRlQ2xhaW1hbnRzT3B0aW9ucy5tYXAoKHgpID0+IHRoaXMucHJlcGFyZUNyZWF0ZUNsYWltYW50KHgpKVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZW5hYmxlZDogb3B0aW9ucy5lbmFibGVkLFxuICAgICAgY3JlYXRlQXNzZW1ibHksXG4gICAgICBjcmVhdGVSZWNlaXZlcnMsXG4gICAgICBjcmVhdGVDbGFpbWFudHMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVVwZGF0ZVNjZW5hcmlvKFxuICAgIG9wdGlvbnM6IFVwZGF0ZVNjZW5hcmlvT3B0aW9ucyxcbiAgICBzY2VuYXJpbzogU2NlbmFyaW9Ob2RlXG4gICkge1xuICAgIGxldCBhc3NlbWJseUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KFxuICAgICAgc2NlbmFyaW8uYXNzZW1ibHkuYXNzZW1ibHlLZXkuaWRcbiAgICApO1xuICAgIGxldCB1cGRhdGVBc3NlbWJseTogYW55O1xuXG4gICAgaWYgKG9wdGlvbnMudXBkYXRlQXNzZW1ibHkpIHtcbiAgICAgIC8vIEFzc2VtYmx5IGtleSBpcyBhbHdheXMgcm90YXRlZCB3aGVuIHVwZGF0aW5nIGFzc2VtYmx5LlxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hc3NlbWJseUNvbnRyb2xsZXIucHJlcGFyZVVwZGF0ZShcbiAgICAgICAgb3B0aW9ucy51cGRhdGVBc3NlbWJseSxcbiAgICAgICAgc2NlbmFyaW8uYXNzZW1ibHlcbiAgICAgICk7XG4gICAgICB1cGRhdGVBc3NlbWJseSA9IHJlc3VsdC5tdXRhdGlvbklucHV0O1xuICAgICAgYXNzZW1ibHlLZXkgPSByZXN1bHQuYXNzZW1ibHlLZXk7XG4gICAgfVxuXG4gICAgY29uc3QgY3JlYXRlUmVjZWl2ZXJzT3B0aW9ucyA9IG9wdGlvbnMuY3JlYXRlUmVjZWl2ZXJzIHx8IFtdO1xuICAgIGNvbnN0IGNyZWF0ZUNsYWltYW50c09wdGlvbnMgPSBvcHRpb25zLmNyZWF0ZUNsYWltYW50cyB8fCBbXTtcblxuICAgIC8vIEZldGNoIGFsbCB0aGUgVFBzIHNvIHdlIGRvbid0IGhhdmUgdG8gcGFzcyBpbiB0cFNoYXJlZEtleUlkXG4gICAgY29uc3QgY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zID0gY3JlYXRlUmVjZWl2ZXJzT3B0aW9ucy5jb25jYXQoXG4gICAgICBjcmVhdGVDbGFpbWFudHNPcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IHRwcyA9IGF3YWl0IHRoaXMuZ2V0UGFydGljaXBhbnRUcHNLZXlzKGNyZWF0UGFydGljaXBhbnRzT3B0aW9ucyk7XG5cbiAgICB0aGlzLmZpbGxUcFNoYXJlZEtleUlkKGNyZWF0UGFydGljaXBhbnRzT3B0aW9ucywgdHBzKTtcblxuICAgIGNvbnN0IGNyZWF0ZVJlY2VpdmVycyA9XG4gICAgICBvcHRpb25zLmNyZWF0ZVJlY2VpdmVycyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLmNyZWF0ZVJlY2VpdmVycy5tYXAoKHgpID0+XG4gICAgICAgICAgdGhpcy5wcmVwYXJlQ3JlYXRlUmVjZWl2ZXIoeCwgYXNzZW1ibHlLZXkpXG4gICAgICAgIClcbiAgICAgICkpO1xuXG4gICAgY29uc3QgZXhpc3RpbmdSZWNlaXZlcnMgPSBtYXBFZGdlcyhzY2VuYXJpby5yZWNlaXZlcnMpO1xuICAgIGxldCB1cGRhdGVSZWNlaXZlcnMgPSBvcHRpb25zLnVwZGF0ZVJlY2VpdmVyc1xuICAgICAgPyBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBvcHRpb25zLnVwZGF0ZVJlY2VpdmVycy5tYXAoKHVwZGF0ZVJlY2VpdmVyKSA9PiB7XG4gICAgICAgICAgICAvLyBGaW5kIHRoZSByZWNlaXZlciB3ZSBhcmUgdXBkYXRpbmdcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUmVjZWl2ZXIgPSBleGlzdGluZ1JlY2VpdmVycy5maW5kKFxuICAgICAgICAgICAgICAoeCkgPT4geC50cC5pZCA9PT0gdXBkYXRlUmVjZWl2ZXIudHBJZFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZVVwZGF0ZVJlY2VpdmVyKFxuICAgICAgICAgICAgICB1cGRhdGVSZWNlaXZlcixcbiAgICAgICAgICAgICAgYXNzZW1ibHlLZXksXG4gICAgICAgICAgICAgIGV4aXN0aW5nUmVjZWl2ZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgOiBbXTtcblxuICAgIC8vIEZpbGwgaW4gYW55IG1pc3NpbmcgcmVjZWl2ZXJzIHdoZW4gdXBkYXRpbmcgYXNzZW1ibHkuXG4gICAgaWYgKG9wdGlvbnMudXBkYXRlQXNzZW1ibHkpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHJlY2VpdmVycyB0aGF0IHdpbGwgYmUgZGVsZXRlZCBvciBhbHJlYWR5IHVwZGF0ZWQuXG4gICAgICBjb25zdCBleGlzdGluZyA9IGV4aXN0aW5nUmVjZWl2ZXJzLmZpbHRlcihcbiAgICAgICAgKGV4aXN0aW5nUmVjZWl2ZXIpID0+XG4gICAgICAgICAgIShvcHRpb25zLmRlbGV0ZVJlY2VpdmVycyB8fCBbXSkuaW5jbHVkZXMoZXhpc3RpbmdSZWNlaXZlci50cC5pZCkgJiZcbiAgICAgICAgICAhdXBkYXRlUmVjZWl2ZXJzLnNvbWUoXG4gICAgICAgICAgICAodXBkYXRlUmVjZWl2ZXIpID0+IHVwZGF0ZVJlY2VpdmVyLnRwSWQgPT09IGV4aXN0aW5nUmVjZWl2ZXIudHAuaWRcbiAgICAgICAgICApXG4gICAgICApO1xuICAgICAgdXBkYXRlUmVjZWl2ZXJzID0gdXBkYXRlUmVjZWl2ZXJzLmNvbmNhdChcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlRXhpc3RpbmdSZWNlaXZlcnMoZXhpc3RpbmcsIGFzc2VtYmx5S2V5KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVDbGFpbWFudHMgPVxuICAgICAgb3B0aW9ucy5jcmVhdGVDbGFpbWFudHMgJiZcbiAgICAgIChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3B0aW9ucy5jcmVhdGVDbGFpbWFudHMubWFwKCh4KSA9PiB0aGlzLnByZXBhcmVDcmVhdGVDbGFpbWFudCh4KSlcbiAgICAgICkpO1xuXG4gICAgY29uc3QgZXhpc3RpbmdDbGFpbWFudHMgPSBtYXBFZGdlcyhzY2VuYXJpby5jbGFpbWFudHMpO1xuICAgIGNvbnN0IHVwZGF0ZUNsYWltYW50cyA9XG4gICAgICBvcHRpb25zLnVwZGF0ZUNsYWltYW50cyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLnVwZGF0ZUNsYWltYW50cy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAvLyBGaW5kIHRoZSBjbGFpbWFudCB3ZSBhcmUgdXBkYXRpbmdcbiAgICAgICAgICBjb25zdCBjbGFpbWFudCA9IGV4aXN0aW5nQ2xhaW1hbnRzLmZpbmQoXG4gICAgICAgICAgICAoZXhpc3RpbmdDbGFpbWFudCkgPT4gZXhpc3RpbmdDbGFpbWFudC50cC5pZCA9PT0geC50cElkXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlVXBkYXRlQ2xhaW1hbnQoeCwgY2xhaW1hbnQuc2hhcmVkS2V5LmlkKTtcbiAgICAgICAgfSlcbiAgICAgICkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNjZW5hcmlvSWQ6IG9wdGlvbnMuc2NlbmFyaW9JZCxcbiAgICAgIGVuYWJsZWQ6IG9wdGlvbnMuZW5hYmxlZCxcbiAgICAgIHVwZGF0ZUFzc2VtYmx5LFxuICAgICAgY3JlYXRlUmVjZWl2ZXJzLFxuICAgICAgdXBkYXRlUmVjZWl2ZXJzLFxuICAgICAgZGVsZXRlUmVjZWl2ZXJzOiBvcHRpb25zLmRlbGV0ZVJlY2VpdmVycyxcbiAgICAgIGNyZWF0ZUNsYWltYW50cyxcbiAgICAgIHVwZGF0ZUNsYWltYW50cyxcbiAgICAgIGRlbGV0ZUNsYWltYW50czogb3B0aW9ucy5kZWxldGVDbGFpbWFudHMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVJlY2VpdmVyRGlyZWN0b3J5KFxuICAgIG9wdGlvbnM6IFJlY2VpdmVyRGlyZWN0b3J5T3B0aW9ucyxcbiAgICByZWNlaXZlclNoYXJlZEtleTogSldLLktleSxcbiAgICBhc3NlbWJseUtleTogSldLLktleVxuICApIHtcbiAgICAvLyBUT0RPIHRoaXMgc2hvdWxkIGJlIGJhdGNoZWRcbiAgICBjb25zdCBkaXJlY3RvcnlLZXkgPSBhd2FpdCB0aGlzLml0ZW0yU2VydmljZS5nZXREaXJlY3RvcnlLZXkoXG4gICAgICBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgb3B0aW9ucy5kaXJlY3RvcnlLZXlJZFxuICAgICk7XG5cbiAgICBjb25zdCBzaGFyZWRDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICByZWNlaXZlclNoYXJlZEtleSxcbiAgICAgIG9wdGlvbnMuc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvblxuICAgICk7XG5cbiAgICBsZXQgd3JhcHBlZEl0ZW1LZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIHJlY2VpdmVyU2hhcmVkS2V5LFxuICAgICAgZGlyZWN0b3J5S2V5Lmp3ay50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgLy8gVE9ETyBmZXRjaCBhc3NlbWJseUtleUlkLiBXZSBhcmUgY2hhbmdpbmcgaXQgc3VjaCB0aGF0IHRoZXJlIGlzIGFsd2F5cyBhbiBhc3NlbWJseVxuICAgIC8vIGJlZm9yZSByZWNlaXZlcnMgY2FuIGJlIGFkZGVkLlxuICAgIHdyYXBwZWRJdGVtS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBhc3NlbWJseUtleSxcbiAgICAgIHdyYXBwZWRJdGVtS2V5XG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkaXJlY3RvcnlJZDogb3B0aW9ucy5kaXJlY3RvcnlJZCxcbiAgICAgIHdyYXBwZWRJdGVtS2V5LFxuICAgICAgYWNjZXNzUm9sZTogb3B0aW9ucy5hY2Nlc3NSb2xlLFxuICAgICAgc2hhcmVkQ2lwaGVyRGF0YSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlUmVjZWl2ZXIoXG4gICAgb3B0aW9uczogQ3JlYXRlUmVjZWl2ZXJPcHRpb25zLFxuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5XG4gICkge1xuICAgIGNvbnN0IHsgc2hhcmVkS2V5LCBtdXRhdGlvbklucHV0IH0gPSBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVQYXJ0aWNpcGFudChcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgYWRkRGlyZWN0b3JpZXMgPVxuICAgICAgb3B0aW9ucy5hZGREaXJlY3RvcmllcyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLmFkZERpcmVjdG9yaWVzLm1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLnByZXBhcmVBZGRSZWNlaXZlckRpcmVjdG9yeSh4LCBzaGFyZWRLZXkua2V5LCBhc3NlbWJseUtleSlcbiAgICAgICAgKVxuICAgICAgKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubXV0YXRpb25JbnB1dCxcbiAgICAgIGFkZERpcmVjdG9yaWVzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVSZWNlaXZlcihcbiAgICBvcHRpb25zOiBVcGRhdGVSZWNlaXZlck9wdGlvbnMsXG4gICAgYXNzZW1ibHlLZXk6IEpXSy5LZXksXG4gICAgZXhpc3RpbmdSZWNlaXZlcjogU2NlbmFyaW9SZWNlaXZlck5vZGVcbiAgKSB7XG4gICAgY29uc3Qgc2hhcmVkS2V5SWQgPSBleGlzdGluZ1JlY2VpdmVyLnNoYXJlZEtleS5pZDtcblxuICAgIGNvbnN0IGRlbGV0ZURpcmVjdG9yaWVzT3B0aW9ucyA9IG9wdGlvbnMuZGVsZXRlRGlyZWN0b3JpZXMgfHwgW107XG4gICAgY29uc3QgdXBkYXRlRGlyZWN0b3JpZXNPcHRpb25zID0gb3B0aW9ucy51cGRhdGVEaXJlY3RvcmllcyB8fCBbXTtcblxuICAgIC8vIEZpbGwgaW4gYW55IG1pc3NpbmcgdXBkYXRlIGRpcmVjdG9yaWVzXG4gICAgbWFwRWRnZXMoZXhpc3RpbmdSZWNlaXZlci5yZWNlaXZlckRpcmVjdG9yaWVzKS5mb3JFYWNoKFxuICAgICAgKGV4aXN0aW5nRGlyZWN0b3J5KSA9PiB7XG4gICAgICAgIGlmIChkZWxldGVEaXJlY3Rvcmllc09wdGlvbnMuaW5jbHVkZXMoZXhpc3RpbmdEaXJlY3RvcnkuZGlyZWN0b3J5LmlkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB1cGRhdGVEaXJlY3Rvcmllc09wdGlvbnMuZmluZChcbiAgICAgICAgICAgICh4KSA9PiB4LmRpcmVjdG9yeUlkID09PSBleGlzdGluZ0RpcmVjdG9yeS5kaXJlY3RvcnkuaWRcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZURpcmVjdG9yaWVzT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICBhY2Nlc3NSb2xlOiBleGlzdGluZ0RpcmVjdG9yeS5hY2Nlc3NSb2xlLFxuICAgICAgICAgIGRpcmVjdG9yeUlkOiBleGlzdGluZ0RpcmVjdG9yeS5kaXJlY3RvcnkuaWQsXG4gICAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbjpcbiAgICAgICAgICAgIGV4aXN0aW5nRGlyZWN0b3J5LnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCB7IHNoYXJlZEtleSwgbXV0YXRpb25JbnB1dCB9ID0gYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlUGFydGljaXBhbnQoXG4gICAgICBvcHRpb25zLFxuICAgICAgc2hhcmVkS2V5SWRcbiAgICApO1xuXG4gICAgY29uc3QgYWRkRGlyZWN0b3JpZXMgPVxuICAgICAgb3B0aW9ucy5hZGREaXJlY3RvcmllcyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLmFkZERpcmVjdG9yaWVzLm1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLnByZXBhcmVBZGRSZWNlaXZlckRpcmVjdG9yeSh4LCBzaGFyZWRLZXksIGFzc2VtYmx5S2V5KVxuICAgICAgICApXG4gICAgICApKTtcblxuICAgIGNvbnN0IHVwZGF0ZURpcmVjdG9yaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB1cGRhdGVEaXJlY3Rvcmllc09wdGlvbnMubWFwKCh4KSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVVcGRhdGVSZWNlaXZlckRpcmVjdG9yeSh4LCBzaGFyZWRLZXksIGFzc2VtYmx5S2V5KVxuICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubXV0YXRpb25JbnB1dCxcbiAgICAgIGFkZERpcmVjdG9yaWVzLFxuICAgICAgdXBkYXRlRGlyZWN0b3JpZXMsXG4gICAgICBkZWxldGVEaXJlY3Rvcmllczogb3B0aW9ucy5kZWxldGVEaXJlY3RvcmllcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlRXhpc3RpbmdSZWNlaXZlcihcbiAgICBleGlzdGluZ1JlY2VpdmVyOiBTY2VuYXJpb1JlY2VpdmVyTm9kZSxcbiAgICBhc3NlbWJseUtleTogSldLLktleVxuICApIHtcbiAgICBjb25zdCB1cGRhdGVEaXJlY3RvcmllcyA9IG1hcEVkZ2VzKFxuICAgICAgZXhpc3RpbmdSZWNlaXZlci5yZWNlaXZlckRpcmVjdG9yaWVzXG4gICAgKS5tYXAoKHJlY2VpdmVyRGlyZWN0b3J5KSA9PiAoe1xuICAgICAgZGlyZWN0b3J5SWQ6IHJlY2VpdmVyRGlyZWN0b3J5LmRpcmVjdG9yeS5pZCxcbiAgICAgIGRpcmVjdG9yeUtleUlkOiByZWNlaXZlckRpcmVjdG9yeS5kaXJlY3Rvcnkua2V5SWQsXG4gICAgICBhY2Nlc3NSb2xlOiByZWNlaXZlckRpcmVjdG9yeS5hY2Nlc3NSb2xlLFxuICAgICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbjogcmVjZWl2ZXJEaXJlY3Rvcnkuc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcbiAgICB9KSk7XG5cbiAgICAvLyBGaWxsIGl0IGluIHdpdGggZXhpc3RpbmcgcmVjZWl2ZXIuXG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZVVwZGF0ZVJlY2VpdmVyKFxuICAgICAge1xuICAgICAgICB0cElkOiBleGlzdGluZ1JlY2VpdmVyLnRwLmlkLFxuICAgICAgICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uOiBleGlzdGluZ1JlY2VpdmVyLnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICAgIHVwZGF0ZURpcmVjdG9yaWVzLFxuICAgICAgfSxcbiAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgZXhpc3RpbmdSZWNlaXZlclxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVFeGlzdGluZ1JlY2VpdmVycyhcbiAgICBleGlzdGluZ1JlY2VpdmVyczogU2NlbmFyaW9SZWNlaXZlck5vZGVbXSxcbiAgICBhc3NlbWJseUtleTogSldLLktleVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBleGlzdGluZ1JlY2VpdmVycy5tYXAoKGV4aXN0aW5nUmVjZWl2ZXIpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZUV4aXN0aW5nUmVjZWl2ZXIoZXhpc3RpbmdSZWNlaXZlciwgYXNzZW1ibHlLZXkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZVBhcnRpY2lwYW50KG9wdGlvbnM6IENyZWF0ZVBhcnRpY2lwYW50T3B0aW9ucykge1xuICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFdpdGhOZXdLZXkoXG4gICAgICBvcHRpb25zLnRwU2hhcmVkS2V5SWQsXG4gICAgICBvcHRpb25zLnNoYXJlZENpcGhlckRhdGFDbGVhckpzb25cbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBzaGFyZWRLZXksXG4gICAgICBtdXRhdGlvbklucHV0OiB7XG4gICAgICAgIHRwSWQ6IG9wdGlvbnMudHBJZCxcbiAgICAgICAgdHBTaGFyZWRLZXlJZDogb3B0aW9ucy50cFNoYXJlZEtleUlkLFxuICAgICAgICB0cFNoYXJlZEtleVdyYXBwZWRTaGFyZWRLZXk6IHNoYXJlZEtleS53cmFwcGVkS2V5LFxuICAgICAgICBzaGFyZWRDaXBoZXJEYXRhOiBzaGFyZWRLZXkuY2lwaGVyLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVXBkYXRlUGFydGljaXBhbnQoXG4gICAgb3B0aW9uczogUGFydGljaXBhbnRPcHRpb25zLFxuICAgIHNoYXJlZEtleUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3Qgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRKd2tLZXkoc2hhcmVkS2V5SWQpO1xuXG4gICAgY29uc3Qgc2hhcmVkQ2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgc2hhcmVkS2V5LFxuICAgICAgb3B0aW9ucy5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaGFyZWRLZXksXG4gICAgICBtdXRhdGlvbklucHV0OiB7XG4gICAgICAgIHRwSWQ6IG9wdGlvbnMudHBJZCxcbiAgICAgICAgc2hhcmVkS2V5SWQsXG4gICAgICAgIHNoYXJlZENpcGhlckRhdGEsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDcmVhdGVDbGFpbWFudChvcHRpb25zOiBDcmVhdGVDbGFpbWFudE9wdGlvbnMpIHtcbiAgICBjb25zdCB7IG11dGF0aW9uSW5wdXQgfSA9IGF3YWl0IHRoaXMucHJlcGFyZUNyZWF0ZVBhcnRpY2lwYW50KG9wdGlvbnMpO1xuICAgIHJldHVybiBtdXRhdGlvbklucHV0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVXBkYXRlQ2xhaW1hbnQoXG4gICAgb3B0aW9uczogVXBkYXRlQ2xhaW1hbnRPcHRpb25zLFxuICAgIHNoYXJlZEtleUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgeyBtdXRhdGlvbklucHV0IH0gPSBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVQYXJ0aWNpcGFudChcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzaGFyZWRLZXlJZFxuICAgICk7XG5cbiAgICByZXR1cm4gbXV0YXRpb25JbnB1dDtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVDbGFpbShzY2VuYXJpb0lkOiBzdHJpbmcsIHNoYXJlZENsYWltSWQ6IHN0cmluZykge1xuICAgIC8vIEdldCBhbGwgdGhlIHNoYXJlZCBpdGVtc1xuICAgIGNvbnN0IHNoYXJlZFNjZW5hcmlvID0gKFxuICAgICAgYXdhaXQgdGhpcy5nZXRTaGFyZWRTY2VuYXJpbyhzY2VuYXJpb0lkLCBzaGFyZWRDbGFpbUlkKVxuICAgICkuc2hhcmVkU2NlbmFyaW87XG5cbiAgICBpZiAoc2hhcmVkU2NlbmFyaW8uc3RhdGUgIT09IFNjZW5hcmlvU3RhdGUuQVBQUk9WRUQpIHtcbiAgICAgIHRocm93Q2xhaW1Ob3RBcHByb3ZlZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcHJvdmFscyA9IG1hcEVkZ2VzKFxuICAgICAgc2hhcmVkU2NlbmFyaW8uc2hhcmVkQ2xhaW0uYXNDbGFpbVJlY2VpdmVyLmFwcHJvdmFsc1xuICAgICk7XG5cbiAgICBjb25zdCBhc3NlbWJseUtleSA9IGF3YWl0IHRoaXMucmVjb3ZlckFzc2VtYmx5S2V5KGFwcHJvdmFscyk7XG4gICAgY29uc29sZS5sb2coJ3JlY2VpdmVDbGFpbU11dGF0aW9uIGFzc2VtYmx5S2V5JywgYXNzZW1ibHlLZXkpO1xuXG4gICAgLy8gRGVjcnlwdCBhbGwgaXRlbXNcbiAgICBjb25zdCByZWNlaXZlckRpcmVjdG9yaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBzaGFyZWRTY2VuYXJpby5hc1JlY2VpdmVyLnJlY2VpdmVyRGlyZWN0b3JpZXMuZWRnZXNcbiAgICAgICAgLm1hcCgoZWRnZSkgPT4gZWRnZS5ub2RlKVxuICAgICAgICAubWFwKGFzeW5jIChyZWNlaXZlckRpcmVjdG9yeSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdyYXBwZWRJdGVtS2V5ID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5kZWNyeXB0KFxuICAgICAgICAgICAgYXNzZW1ibHlLZXksXG4gICAgICAgICAgICByZWNlaXZlckRpcmVjdG9yeS53cmFwcGVkSXRlbUtleVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVjZWl2ZXJEaXJlY3RvcnlJZDogcmVjZWl2ZXJEaXJlY3RvcnkuaWQsXG4gICAgICAgICAgICByZWNlaXZlclNoYXJlZEtleVdyYXBwZWRJdGVtS2V5OiB3cmFwcGVkSXRlbUtleSwgLy8gdGhlIHdyYXBwZWRJdGVtS2V5IGlzIGFscmVhZHkgd3JhcHBlZCBieSByZWNlaXZlclNoYXJlZEtleVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzY2VuYXJpb0NsYWltSWQ6IHNoYXJlZENsYWltSWQsXG4gICAgICByZWNlaXZlckRpcmVjdG9yaWVzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlY292ZXJBc3NlbWJseUtleShcbiAgICBhcHByb3ZhbHM6IFNoYXJlZFNjZW5hcmlvQ2xhaW1SZWNlaXZlZEFwcHJvdmFsTm9kZVtdXG4gICkge1xuICAgIGNvbnN0IHBhcnRpYWxzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBhcHByb3ZhbHMubWFwKChhcHByb3ZhbCkgPT5cbiAgICAgICAgdGhpcy5rZXlHcmFwaC5kZWNyeXB0RnJvbVN0cmluZzxQYXJ0aWFsQXNzZW1ibHlLZXk+KFxuICAgICAgICAgIGFwcHJvdmFsLnB4ay5pZCxcbiAgICAgICAgICBhcHByb3ZhbC5yZWNlaXZlckNpcGhlclBhcnRpYWxBc3NlbWJseUtleVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmFzc2VtYmx5Q29udHJvbGxlci5yZWNvdmVyQXNzZW1ibHlLZXkocGFydGlhbHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhc0NsYWltQXBwcm92ZXJzKFxuICAgIHNoYXJlZFNjZW5hcmlvSWQsXG4gICAgY2xhaW1JZCxcbiAgICBzdGF0ZTogVHBDbGFpbUFwcHJvdmVyU3RhdGVcbiAgKSB7XG4gICAgY29uc3Qgc2hhcmVkU2NlbmFyaW8gPSAoXG4gICAgICBhd2FpdCB0aGlzLmdldFNoYXJlZFNjZW5hcmlvKHNoYXJlZFNjZW5hcmlvSWQsIGNsYWltSWQpXG4gICAgKS5zaGFyZWRTY2VuYXJpbztcblxuICAgIHJldHVybiBtYXBFZGdlcyhzaGFyZWRTY2VuYXJpby5zaGFyZWRDbGFpbS5jbGFpbS5hc0NsYWltQXBwcm92ZXJzKS5maWx0ZXIoXG4gICAgICAoYXNDbGFpbUFwcHJvdmVyKSA9PiBhc0NsYWltQXBwcm92ZXIuc3RhdGUgPT09IHN0YXRlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUFwcHJvdmVDbGFpbU11dGF0aW9ucyhcbiAgICBzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsXG4gICAgY2xhaW1JZDogc3RyaW5nXG4gICkge1xuICAgIC8vIFRoZSBjdXJyZW50IHVzZXIgbWF5IGJlIGFjdGluZyBhcyBhcHByb3ZlcnMgaW4gbXVsdGlwbGUgc3ViLWFzc2VtYmxpZXMgc29cbiAgICAvLyB3ZSBhcHByb3ZlIHRoZW0gYWxsLlxuICAgIGNvbnN0IGFzQ2xhaW1BcHByb3ZlcnMgPSBhd2FpdCB0aGlzLmFzQ2xhaW1BcHByb3ZlcnMoXG4gICAgICBzaGFyZWRTY2VuYXJpb0lkLFxuICAgICAgY2xhaW1JZCxcbiAgICAgIFRwQ2xhaW1BcHByb3ZlclN0YXRlLkNMQUlNRURcbiAgICApO1xuXG4gICAgcmV0dXJuIGFzQ2xhaW1BcHByb3ZlcnMubWFwKFxuICAgICAgYXN5bmMgKGFzQ2xhaW1BcHByb3ZlcikgPT5cbiAgICAgICAgbmV3IExyTXV0YXRpb24oe1xuICAgICAgICAgIG11dGF0aW9uOiBBcHByb3ZlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgaW5wdXQ6IGF3YWl0IHRoaXMucHJlcGFyZUFwcHJvdmVDbGFpbShhc0NsYWltQXBwcm92ZXIpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUFwcHJvdmVDbGFpbShcbiAgICBhc0NsYWltQXBwcm92ZXI6IFNoYXJlZFRwQ2xhaW1BcHByb3Zlck5vZGVcbiAgKSB7XG4gICAgY29uc3QgcmVjZWl2ZXJBcHByb3ZhbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1hcEVkZ2VzKGFzQ2xhaW1BcHByb3Zlci5yZWNlaXZlckFwcHJvdmFscykubWFwKChyZWNlaXZlckFwcHJvdmFsKSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVSZWNlaXZlckFwcHJvdmFsKHtcbiAgICAgICAgICByZWNlaXZlckFwcHJvdmFsSWQ6IHJlY2VpdmVyQXBwcm92YWwuaWQsXG4gICAgICAgICAgcmVjZWl2ZXJBcHByb3ZhbFB4a0lkOiByZWNlaXZlckFwcHJvdmFsLnB4ay5pZCxcbiAgICAgICAgICBzaGFyZWRDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXlDbGVhckpzb246XG4gICAgICAgICAgICBhc0NsYWltQXBwcm92ZXIuc2hhcmVkQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5Q2xlYXJKc29uLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2xhaW1BcHByb3ZlcklkOiBhc0NsYWltQXBwcm92ZXIuaWQsXG4gICAgICByZWNlaXZlckFwcHJvdmFscyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUmVjZWl2ZXJBcHByb3ZhbChvcHRpb25zOiB7XG4gICAgcmVjZWl2ZXJBcHByb3ZhbElkOiBzdHJpbmc7XG4gICAgcmVjZWl2ZXJBcHByb3ZhbFB4a0lkOiBzdHJpbmc7XG4gICAgc2hhcmVkQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5Q2xlYXJKc29uOiBKU09OT2JqZWN0O1xuICB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY2VpdmVyQXBwcm92YWxJZDogb3B0aW9ucy5yZWNlaXZlckFwcHJvdmFsSWQsXG4gICAgICAvLyBUT0RPIGFsbG93IHNlbmRpbmcgb2YgbWVzc2FnZXMgdG8gcmVjZWl2ZXIuXG4gICAgICByZWNlaXZlckNpcGhlcjogJycsXG4gICAgICByZWNlaXZlckNpcGhlclBhcnRpYWxBc3NlbWJseUtleTogYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICAgIG9wdGlvbnMucmVjZWl2ZXJBcHByb3ZhbFB4a0lkLFxuICAgICAgICBvcHRpb25zLnNoYXJlZENpcGhlclBhcnRpYWxBc3NlbWJseUtleUNsZWFySnNvblxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUmVqZWN0Q2xhaW1NdXRhdGlvbnMoXG4gICAgc2hhcmVkU2NlbmFyaW9JZDogc3RyaW5nLFxuICAgIGNsYWltSWQ6IHN0cmluZ1xuICApIHtcbiAgICAvLyBUaGUgY3VycmVudCB1c2VyIG1heSBiZSBhY3RpbmcgYXMgYXBwcm92ZXJzIGluIG11bHRpcGxlIHN1Yi1hc3NlbWJsaWVzIHNvXG4gICAgLy8gd2UgcmVqZWN0IHRoZW0gYWxsLlxuICAgIGNvbnN0IGFzQ2xhaW1BcHByb3ZlcnMgPSBhd2FpdCB0aGlzLmFzQ2xhaW1BcHByb3ZlcnMoXG4gICAgICBzaGFyZWRTY2VuYXJpb0lkLFxuICAgICAgY2xhaW1JZCxcbiAgICAgIFRwQ2xhaW1BcHByb3ZlclN0YXRlLkNMQUlNRURcbiAgICApO1xuXG4gICAgcmV0dXJuIGFzQ2xhaW1BcHByb3ZlcnMubWFwKFxuICAgICAgYXN5bmMgKGFzQ2xhaW1BcHByb3ZlcikgPT5cbiAgICAgICAgbmV3IExyTXV0YXRpb24oe1xuICAgICAgICAgIG11dGF0aW9uOiBSZWplY3RTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBpbnB1dDogeyBjbGFpbUFwcHJvdmVySWQ6IGFzQ2xhaW1BcHByb3Zlci5pZCB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
537
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvc2NlbmFyaW8vc2NlbmFyaW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUUsT0FBTyxFQUVMLFFBQVEsRUFHUixhQUFhLEVBR2Isb0JBQW9CLEdBRXJCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXRFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUNMLDRCQUE0QixFQUM1QiwyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzNCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUMzQixzQkFBc0IsR0FDdkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQWM1RSxN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QjtZQUN0QixNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUNsRCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLG9CQUFvQixDQUFDLE9BQU8sQ0FDN0IsQ0FBQztZQUVGLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUN6QixDQUFPLGVBQWUsRUFBRSxFQUFFO2dCQUN4QixPQUFBLElBQUksVUFBVSxDQUFDO29CQUNiLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLFNBQVMsRUFBRTt3QkFDVCxLQUFLLEVBQUUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRTtxQkFDL0M7aUJBQ0YsQ0FBQyxDQUFBO2NBQUEsQ0FDTCxDQUFDO1FBQ0osQ0FBQztLQUFBO0NBQ0YsQ0FBQTtBQXJzQmUsaUNBQWlCLEdBQUcsV0FBVyxDQUFDOzs7WUFkL0MsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFoRThCLE1BQU07WUFBaEIsUUFBUTtZQWdCcEIsZUFBZTtZQURmLFlBQVk7WUFTWiwwQkFBMEI7WUFWMUIsaUJBQWlCOztBQW1EYixlQUFlO0lBTjNCLGlCQUFpQixDQUFDO1FBQ2pCLFVBQVUsRUFBRSxRQUFRO0tBQ3JCLENBQUM7R0FJVyxlQUFlLENBZ3RCM0I7U0FodEJZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKV0sgfSBmcm9tICdub2RlLWpvc2UnO1xuaW1wb3J0IHsgTHJNZXJnZWRNdXRhdGlvbiwgTHJNdXRhdGlvbiwgTHJTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWdyYXBocWwnO1xuaW1wb3J0IHtcbiAgSlNPTk9iamVjdCxcbiAgbWFwRWRnZXMsXG4gIFNjZW5hcmlvTm9kZSxcbiAgU2NlbmFyaW9SZWNlaXZlck5vZGUsXG4gIFNjZW5hcmlvU3RhdGUsXG4gIFNoYXJlZFNjZW5hcmlvQ2xhaW1SZWNlaXZlZEFwcHJvdmFsTm9kZSxcbiAgU2hhcmVkVHBDbGFpbUFwcHJvdmVyTm9kZSxcbiAgVHBDbGFpbUFwcHJvdmVyU3RhdGUsXG4gIFRwTm9kZSxcbn0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vZW5jcnlwdGlvbi9lbmNyeXB0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSXRlbTJTZXJ2aWNlIH0gZnJvbSAnLi4vaXRlbXMyL2l0ZW0yLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5R3JhcGhTZXJ2aWNlIH0gZnJvbSAnLi4va2V5L2tleS1ncmFwaC5zZXJ2aWNlJztcbmltcG9ydCB7IFRwc0tleXNRdWVyeSB9IGZyb20gJy4uL3RwLWFzc2VtYmx5L3RwLWFzc2VtYmx5LnByaXZhdGUuZ3FsJztcbmltcG9ydCB7IFBhcnRpYWxBc3NlbWJseUtleSB9IGZyb20gJy4uL3RwLWFzc2VtYmx5L3RwLWFzc2VtYmx5LnR5cGVzJztcbmltcG9ydCB7XG4gIExyQmFkQXJndW1lbnRFeGNlcHRpb24sXG4gIExyQmFkU3RhdGVFeGNlcHRpb24sXG59IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBSdW5PdXRzaWRlQW5ndWxhciB9IGZyb20gJy4uL19jb21tb24vcnVuLW91dHNpZGUtYW5ndWxhcic7XG5pbXBvcnQgeyBTY2VuYXJpb0Fzc2VtYmx5Q29udHJvbGxlciB9IGZyb20gJy4vc2NlbmFyaW8uY29udHJvbGxlcic7XG5pbXBvcnQge1xuICBBcHByb3ZlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBDYW5jZWxTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gIENyZWF0ZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgQ3JlYXRlU2NlbmFyaW9NdXRhdGlvbixcbiAgRGVsZXRlU2NlbmFyaW9NdXRhdGlvbixcbiAgUmVjZWl2ZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgUmVqZWN0U2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBVcGRhdGVTY2VuYXJpb011dGF0aW9uLFxufSBmcm9tICcuL3NjZW5hcmlvLmdxbCc7XG5pbXBvcnQgeyBTY2VuYXJpb1F1ZXJ5LCBTaGFyZWRTY2VuYXJpb1F1ZXJ5IH0gZnJvbSAnLi9zY2VuYXJpby5wcml2YXRlLmdxbCc7XG5pbXBvcnQge1xuICBDcmVhdGVDbGFpbWFudE9wdGlvbnMsXG4gIENyZWF0ZVBhcnRpY2lwYW50T3B0aW9ucyxcbiAgQ3JlYXRlUmVjZWl2ZXJPcHRpb25zLFxuICBDcmVhdGVTY2VuYXJpb09wdGlvbnMsXG4gIFBhcnRpY2lwYW50T3B0aW9ucyxcbiAgUmVjZWl2ZXJEaXJlY3RvcnlPcHRpb25zLFxuICBSZXNldFNjZW5hcmlvT3B0aW9ucyxcbiAgVXBkYXRlQ2xhaW1hbnRPcHRpb25zLFxuICBVcGRhdGVSZWNlaXZlck9wdGlvbnMsXG4gIFVwZGF0ZVNjZW5hcmlvT3B0aW9ucyxcbn0gZnJvbSAnLi9zY2VuYXJpby50eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0NsYWltSWRNaXNtYXRjaCgpIHtcbiAgdGhyb3cgbmV3IExyQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgJ2NsYWltSWQgZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgY3VycmVudCBjbGFpbUlkIG9mIHRoZSBzY2VuYXJpbydcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRocm93Q2xhaW1Ob3RBcHByb3ZlZCgpIHtcbiAgdGhyb3cgbmV3IExyQmFkU3RhdGVFeGNlcHRpb24oJ1NjZW5hcmlvIGNsYWltIGhhcyBub3QgYmVlbiBhcHByb3ZlZCcpO1xufVxuXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcbn0pXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NlbmFyaW9TZXJ2aWNlIGV4dGVuZHMgTHJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGtleUdyYXBoOiBLZXlHcmFwaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpdGVtMlNlcnZpY2U6IEl0ZW0yU2VydmljZSxcbiAgICBwcml2YXRlIGFzc2VtYmx5Q29udHJvbGxlcjogU2NlbmFyaW9Bc3NlbWJseUNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgU0xJUDM5X1BBU1NQSFJBU0UgPSAnbGlmZXJlYWR5JztcblxuICBwcml2YXRlIHByZXBhcmVBZGRSZWNlaXZlckRpcmVjdG9yeSA9IHRoaXMucHJlcGFyZVJlY2VpdmVyRGlyZWN0b3J5O1xuICBwcml2YXRlIHByZXBhcmVVcGRhdGVSZWNlaXZlckRpcmVjdG9yeSA9IHRoaXMucHJlcGFyZVJlY2VpdmVyRGlyZWN0b3J5O1xuXG4gIC8vIFNjZW5hcmlvc1xuICBhc3luYyBjcmVhdGVTY2VuYXJpbyhvcHRpb25zOiBDcmVhdGVTY2VuYXJpb09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jcmVhdGVTY2VuYXJpb011dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9uczogQ3JlYXRlU2NlbmFyaW9PcHRpb25zKSB7XG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVTY2VuYXJpb011dGF0aW9uKG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQ3JlYXRlU2NlbmFyaW9NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVTY2VuYXJpbyhvcHRpb25zOiBVcGRhdGVTY2VuYXJpb09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51cGRhdGVTY2VuYXJpb011dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9uczogVXBkYXRlU2NlbmFyaW9PcHRpb25zKSB7XG4gICAgY29uc3Qgc2NlbmFyaW8gPSAoYXdhaXQgdGhpcy5nZXRTY2VuYXJpbyhvcHRpb25zLnNjZW5hcmlvSWQpKS5zY2VuYXJpbztcbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZVNjZW5hcmlvKG9wdGlvbnMsIHNjZW5hcmlvKTtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFVwZGF0ZVNjZW5hcmlvTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVzZXRTY2VuYXJpbyhvcHRpb25zOiBSZXNldFNjZW5hcmlvT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnJlc2V0U2NlbmFyaW9NdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyByZXNldFNjZW5hcmlvTXV0YXRpb24ob3B0aW9uczogUmVzZXRTY2VuYXJpb09wdGlvbnMpIHtcbiAgICBjb25zdCBzY2VuYXJpbyA9IChhd2FpdCB0aGlzLmdldFNjZW5hcmlvKG9wdGlvbnMuc2NlbmFyaW9JZCkpLnNjZW5hcmlvO1xuXG4gICAgY29uc3QgeyBhc3NlbWJseSB9ID0gc2NlbmFyaW87XG5cbiAgICAvLyBKdXN0IG5lZWQgdG8gZG8gYW4gdXBkYXRlIHdpdGhvdXQgY2hhbmdpbmcgYXBwcm92ZXJzLiBUaGlzIHdpbGwgcmVjcmVhdGVcbiAgICAvLyBhbGwgYXNzZW1ibHkga2V5cy5cbiAgICBjb25zdCB1cGRhdGVTdWJBc3NlbWJsaWVzID0gbWFwRWRnZXMoYXNzZW1ibHkuc3ViQXNzZW1ibGllcykubWFwKChzYSkgPT4ge1xuICAgICAgY29uc3QgYXBwcm92ZXJUcHMgPSBtYXBFZGdlcyhzYS5hcHByb3ZlcnMpLm1hcCgoYXBwcm92ZXIpID0+ICh7XG4gICAgICAgIHRwSWQ6IGFwcHJvdmVyLnRwLmlkLFxuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogc2EuaWQsXG4gICAgICAgIHF1b3J1bTogc2EucXVvcnVtLFxuICAgICAgICBzaW5nbGVSZWplY3Q6IHNhLnNpbmdsZVJlamVjdCxcbiAgICAgICAgc3ViamVjdENpcGhlckRhdGFDbGVhckpzb246IHNhLnN1YmplY3RDaXBoZXJEYXRhQ2xlYXJKc29uLFxuICAgICAgICBhcHByb3ZlclRwcyxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZVNjZW5hcmlvKFxuICAgICAge1xuICAgICAgICBzY2VuYXJpb0lkOiBvcHRpb25zLnNjZW5hcmlvSWQsXG4gICAgICAgIGVuYWJsZWQ6IG9wdGlvbnMuZW5hYmxlZCxcbiAgICAgICAgdXBkYXRlQXNzZW1ibHk6IHtcbiAgICAgICAgICBxdW9ydW06IGFzc2VtYmx5LnF1b3J1bSxcbiAgICAgICAgICBzaW5nbGVSZWplY3Q6IGFzc2VtYmx5LnNpbmdsZVJlamVjdCxcbiAgICAgICAgICB1cGRhdGVTdWJBc3NlbWJsaWVzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNjZW5hcmlvXG4gICAgKTtcblxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlU2NlbmFyaW9NdXRhdGlvbiwgLy8gdXBkYXRpbmcgc2NlbmFyaW8gcmVzZXRzIGl0XG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2NlbmFyaW8oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubHJHcmFwaFFMLmxyTXV0YXRlKHRoaXMuZGVsZXRlU2NlbmFyaW9NdXRhdGlvbihzY2VuYXJpb0lkKSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTY2VuYXJpb011dGF0aW9uKHNjZW5hcmlvSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogRGVsZXRlU2NlbmFyaW9NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogeyBpbnB1dDogeyBzY2VuYXJpb0lkIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIENsYWltc1xuICBhc3luYyBjcmVhdGVDbGFpbShzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jcmVhdGVDbGFpbU11dGF0aW9uKHNjZW5hcmlvSWQpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUNsYWltTXV0YXRpb24oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHsgaW5wdXQ6IHsgc2NlbmFyaW9JZCB9IH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjYW5jZWxDbGFpbShjbGFpbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jYW5jZWxDbGFpbU11dGF0aW9uKGNsYWltSWQpKTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbENsYWltTXV0YXRpb24oY2xhaW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDYW5jZWxTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHsgaW5wdXQ6IHsgY2xhaW1JZCB9IH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWplY3RDbGFpbShzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsIGNsYWltSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnJlamVjdENsYWltTXV0YXRpb24oc2hhcmVkU2NlbmFyaW9JZCwgY2xhaW1JZCkpO1xuICB9XG5cbiAgYXN5bmMgcmVqZWN0Q2xhaW1NdXRhdGlvbihzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsIGNsYWltSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG11dGF0aW9ucyA9IGF3YWl0IHRoaXMucHJlcGFyZVJlamVjdENsYWltTXV0YXRpb25zKFxuICAgICAgc2hhcmVkU2NlbmFyaW9JZCxcbiAgICAgIGNsYWltSWRcbiAgICApO1xuICAgIHJldHVybiBMck1lcmdlZE11dGF0aW9uLmNyZWF0ZShhd2FpdCBQcm9taXNlLmFsbChtdXRhdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGFwcHJvdmVDbGFpbShzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsIHNoYXJlZENsYWltSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZShcbiAgICAgIHRoaXMuYXBwcm92ZUNsYWltTXV0YXRpb24oc2hhcmVkU2NlbmFyaW9JZCwgc2hhcmVkQ2xhaW1JZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgYXBwcm92ZUNsYWltTXV0YXRpb24oc2hhcmVkU2NlbmFyaW9JZDogc3RyaW5nLCBzaGFyZWRDbGFpbUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtdXRhdGlvbnMgPSBhd2FpdCB0aGlzLnByZXBhcmVBcHByb3ZlQ2xhaW1NdXRhdGlvbnMoXG4gICAgICBzaGFyZWRTY2VuYXJpb0lkLFxuICAgICAgc2hhcmVkQ2xhaW1JZFxuICAgICk7XG4gICAgcmV0dXJuIExyTWVyZ2VkTXV0YXRpb24uY3JlYXRlKGF3YWl0IFByb21pc2UuYWxsKG11dGF0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgcmVjZWl2ZUNsYWltKHNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMucmVjZWl2ZUNsYWltTXV0YXRpb24oc2NlbmFyaW9JZCwgc2hhcmVkQ2xhaW1JZCkpO1xuICB9XG5cbiAgYXN5bmMgcmVjZWl2ZUNsYWltTXV0YXRpb24oc2NlbmFyaW9JZDogc3RyaW5nLCBzaGFyZWRDbGFpbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFJlY2VpdmVTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IGF3YWl0IHRoaXMucHJlcGFyZUNsYWltKHNjZW5hcmlvSWQsIHNoYXJlZENsYWltSWQpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEhlbHBlcnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgcHJpdmF0ZSBhc3luYyBnZXRTY2VuYXJpbyhzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSh7XG4gICAgICBxdWVyeTogU2NlbmFyaW9RdWVyeSxcbiAgICAgIHZhcmlhYmxlczogeyBzY2VuYXJpb0lkIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFNoYXJlZFNjZW5hcmlvKHNjZW5hcmlvSWQ6IHN0cmluZywgY2xhaW1JZD86IHN0cmluZykge1xuICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMucXVlcnkoe1xuICAgICAgcXVlcnk6IFNoYXJlZFNjZW5hcmlvUXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgc2NlbmFyaW9JZCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAoY2xhaW1JZCAmJiByZXQuc2hhcmVkU2NlbmFyaW8uc2hhcmVkQ2xhaW0uaWQgIT09IGNsYWltSWQpIHtcbiAgICAgIHRocm93Q2xhaW1JZE1pc21hdGNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UGFydGljaXBhbnRUcHNLZXlzKG9wdGlvbnM6IENyZWF0ZVBhcnRpY2lwYW50T3B0aW9uc1tdKSB7XG4gICAgY29uc3QgdHBJZHMgPSBvcHRpb25zLm1hcCgoeCkgPT4geC50cElkKTtcblxuICAgIC8vIFRoaXMgc2hvdWxkIGNvbnRhaW4gYWxsIHRoZSBUUHMgdGhhdCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYXNzZW1ibHkuXG4gICAgY29uc3QgdHBzID0gbWFwRWRnZXMoXG4gICAgICAoXG4gICAgICAgIGF3YWl0IHRoaXMubHJHcmFwaFFMLnF1ZXJ5KHtcbiAgICAgICAgICBxdWVyeTogVHBzS2V5c1F1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgaWRzOiB0cElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKS50cHNcbiAgICApO1xuXG4gICAgcmV0dXJuIHRwcztcbiAgfVxuXG4gIHByaXZhdGUgZmlsbFRwU2hhcmVkS2V5SWQoXG4gICAgb3B0aW9uczogQ3JlYXRlUGFydGljaXBhbnRPcHRpb25zW10sXG4gICAgdHBzOiBUcE5vZGVbXVxuICApIHtcbiAgICBvcHRpb25zLmZvckVhY2goKHBhcnRpY2lwYW50KSA9PiB7XG4gICAgICBpZiAoIXBhcnRpY2lwYW50LnRwU2hhcmVkS2V5SWQpIHtcbiAgICAgICAgY29uc3QgdHAgPSB0cHMuZmluZCgoeCkgPT4geC5pZCA9PT0gcGFydGljaXBhbnQudHBJZCk7XG4gICAgICAgIHBhcnRpY2lwYW50LnRwU2hhcmVkS2V5SWQgPVxuICAgICAgICAgIHRwLmN1cnJlbnRVc2VyU2hhcmVkS2V5LnVzZXJTaGFyZWRLZXkuc2hhcmVkS2V5LmlkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlU2NlbmFyaW9NdXRhdGlvbihvcHRpb25zOiBDcmVhdGVTY2VuYXJpb09wdGlvbnMpIHtcbiAgICBjb25zdCB7IGFzc2VtYmx5S2V5LCBtdXRhdGlvbklucHV0OiBjcmVhdGVBc3NlbWJseSB9ID1cbiAgICAgIGF3YWl0IHRoaXMuYXNzZW1ibHlDb250cm9sbGVyLnByZXBhcmVDcmVhdGUob3B0aW9ucy5jcmVhdGVBc3NlbWJseSk7XG5cbiAgICBjb25zdCBjcmVhdGVSZWNlaXZlcnNPcHRpb25zID0gb3B0aW9ucy5jcmVhdGVSZWNlaXZlcnMgfHwgW107XG4gICAgY29uc3QgY3JlYXRlQ2xhaW1hbnRzT3B0aW9ucyA9IG9wdGlvbnMuY3JlYXRlQ2xhaW1hbnRzIHx8IFtdO1xuXG4gICAgLy8gRmV0Y2ggYWxsIHRoZSBUUHMgc28gd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIGluIHRwU2hhcmVkS2V5SWRcbiAgICBjb25zdCBjcmVhdFBhcnRpY2lwYW50c09wdGlvbnMgPSBjcmVhdGVSZWNlaXZlcnNPcHRpb25zLmNvbmNhdChcbiAgICAgIGNyZWF0ZUNsYWltYW50c09wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgdHBzID0gYXdhaXQgdGhpcy5nZXRQYXJ0aWNpcGFudFRwc0tleXMoY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zKTtcblxuICAgIHRoaXMuZmlsbFRwU2hhcmVkS2V5SWQoY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zLCB0cHMpO1xuXG4gICAgY29uc3QgY3JlYXRlUmVjZWl2ZXJzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjcmVhdGVSZWNlaXZlcnNPcHRpb25zLm1hcCgocmVjZWl2ZXIpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZUNyZWF0ZVJlY2VpdmVyKHJlY2VpdmVyLCBhc3NlbWJseUtleSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgY3JlYXRlQ2xhaW1hbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjcmVhdGVDbGFpbWFudHNPcHRpb25zLm1hcCgoeCkgPT4gdGhpcy5wcmVwYXJlQ3JlYXRlQ2xhaW1hbnQoeCkpXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBlbmFibGVkOiBvcHRpb25zLmVuYWJsZWQsXG4gICAgICBjcmVhdGVBc3NlbWJseSxcbiAgICAgIGNyZWF0ZVJlY2VpdmVycyxcbiAgICAgIGNyZWF0ZUNsYWltYW50cyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVXBkYXRlU2NlbmFyaW8oXG4gICAgb3B0aW9uczogVXBkYXRlU2NlbmFyaW9PcHRpb25zLFxuICAgIHNjZW5hcmlvOiBTY2VuYXJpb05vZGVcbiAgKSB7XG4gICAgbGV0IGFzc2VtYmx5S2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRKd2tLZXkoXG4gICAgICBzY2VuYXJpby5hc3NlbWJseS5hc3NlbWJseUtleS5pZFxuICAgICk7XG4gICAgbGV0IHVwZGF0ZUFzc2VtYmx5OiBhbnk7XG5cbiAgICBpZiAob3B0aW9ucy51cGRhdGVBc3NlbWJseSkge1xuICAgICAgLy8gQXNzZW1ibHkga2V5IGlzIGFsd2F5cyByb3RhdGVkIHdoZW4gdXBkYXRpbmcgYXNzZW1ibHkuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFzc2VtYmx5Q29udHJvbGxlci5wcmVwYXJlVXBkYXRlKFxuICAgICAgICBvcHRpb25zLnVwZGF0ZUFzc2VtYmx5LFxuICAgICAgICBzY2VuYXJpby5hc3NlbWJseVxuICAgICAgKTtcbiAgICAgIHVwZGF0ZUFzc2VtYmx5ID0gcmVzdWx0Lm11dGF0aW9uSW5wdXQ7XG4gICAgICBhc3NlbWJseUtleSA9IHJlc3VsdC5hc3NlbWJseUtleTtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVSZWNlaXZlcnNPcHRpb25zID0gb3B0aW9ucy5jcmVhdGVSZWNlaXZlcnMgfHwgW107XG4gICAgY29uc3QgY3JlYXRlQ2xhaW1hbnRzT3B0aW9ucyA9IG9wdGlvbnMuY3JlYXRlQ2xhaW1hbnRzIHx8IFtdO1xuXG4gICAgLy8gRmV0Y2ggYWxsIHRoZSBUUHMgc28gd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIGluIHRwU2hhcmVkS2V5SWRcbiAgICBjb25zdCBjcmVhdFBhcnRpY2lwYW50c09wdGlvbnMgPSBjcmVhdGVSZWNlaXZlcnNPcHRpb25zLmNvbmNhdChcbiAgICAgIGNyZWF0ZUNsYWltYW50c09wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgdHBzID0gYXdhaXQgdGhpcy5nZXRQYXJ0aWNpcGFudFRwc0tleXMoY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zKTtcblxuICAgIHRoaXMuZmlsbFRwU2hhcmVkS2V5SWQoY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zLCB0cHMpO1xuXG4gICAgY29uc3QgY3JlYXRlUmVjZWl2ZXJzID1cbiAgICAgIG9wdGlvbnMuY3JlYXRlUmVjZWl2ZXJzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMuY3JlYXRlUmVjZWl2ZXJzLm1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLnByZXBhcmVDcmVhdGVSZWNlaXZlcih4LCBhc3NlbWJseUtleSlcbiAgICAgICAgKVxuICAgICAgKSk7XG5cbiAgICBjb25zdCBleGlzdGluZ1JlY2VpdmVycyA9IG1hcEVkZ2VzKHNjZW5hcmlvLnJlY2VpdmVycyk7XG4gICAgbGV0IHVwZGF0ZVJlY2VpdmVycyA9IG9wdGlvbnMudXBkYXRlUmVjZWl2ZXJzXG4gICAgICA/IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIG9wdGlvbnMudXBkYXRlUmVjZWl2ZXJzLm1hcCgodXBkYXRlUmVjZWl2ZXIpID0+IHtcbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIHJlY2VpdmVyIHdlIGFyZSB1cGRhdGluZ1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSZWNlaXZlciA9IGV4aXN0aW5nUmVjZWl2ZXJzLmZpbmQoXG4gICAgICAgICAgICAgICh4KSA9PiB4LnRwLmlkID09PSB1cGRhdGVSZWNlaXZlci50cElkXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlVXBkYXRlUmVjZWl2ZXIoXG4gICAgICAgICAgICAgIHVwZGF0ZVJlY2VpdmVyLFxuICAgICAgICAgICAgICBhc3NlbWJseUtleSxcbiAgICAgICAgICAgICAgZXhpc3RpbmdSZWNlaXZlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICA6IFtdO1xuXG4gICAgLy8gRmlsbCBpbiBhbnkgbWlzc2luZyByZWNlaXZlcnMgd2hlbiB1cGRhdGluZyBhc3NlbWJseS5cbiAgICBpZiAob3B0aW9ucy51cGRhdGVBc3NlbWJseSkge1xuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgcmVjZWl2ZXJzIHRoYXQgd2lsbCBiZSBkZWxldGVkIG9yIGFscmVhZHkgdXBkYXRlZC5cbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gZXhpc3RpbmdSZWNlaXZlcnMuZmlsdGVyKFxuICAgICAgICAoZXhpc3RpbmdSZWNlaXZlcikgPT5cbiAgICAgICAgICAhKG9wdGlvbnMuZGVsZXRlUmVjZWl2ZXJzIHx8IFtdKS5pbmNsdWRlcyhleGlzdGluZ1JlY2VpdmVyLnRwLmlkKSAmJlxuICAgICAgICAgICF1cGRhdGVSZWNlaXZlcnMuc29tZShcbiAgICAgICAgICAgICh1cGRhdGVSZWNlaXZlcikgPT4gdXBkYXRlUmVjZWl2ZXIudHBJZCA9PT0gZXhpc3RpbmdSZWNlaXZlci50cC5pZFxuICAgICAgICAgIClcbiAgICAgICk7XG4gICAgICB1cGRhdGVSZWNlaXZlcnMgPSB1cGRhdGVSZWNlaXZlcnMuY29uY2F0KFxuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVFeGlzdGluZ1JlY2VpdmVycyhleGlzdGluZywgYXNzZW1ibHlLZXkpXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZUNsYWltYW50cyA9XG4gICAgICBvcHRpb25zLmNyZWF0ZUNsYWltYW50cyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLmNyZWF0ZUNsYWltYW50cy5tYXAoKHgpID0+IHRoaXMucHJlcGFyZUNyZWF0ZUNsYWltYW50KHgpKVxuICAgICAgKSk7XG5cbiAgICBjb25zdCBleGlzdGluZ0NsYWltYW50cyA9IG1hcEVkZ2VzKHNjZW5hcmlvLmNsYWltYW50cyk7XG4gICAgY29uc3QgdXBkYXRlQ2xhaW1hbnRzID1cbiAgICAgIG9wdGlvbnMudXBkYXRlQ2xhaW1hbnRzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMudXBkYXRlQ2xhaW1hbnRzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGNsYWltYW50IHdlIGFyZSB1cGRhdGluZ1xuICAgICAgICAgIGNvbnN0IGNsYWltYW50ID0gZXhpc3RpbmdDbGFpbWFudHMuZmluZChcbiAgICAgICAgICAgIChleGlzdGluZ0NsYWltYW50KSA9PiBleGlzdGluZ0NsYWltYW50LnRwLmlkID09PSB4LnRwSWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVVcGRhdGVDbGFpbWFudCh4LCBjbGFpbWFudC5zaGFyZWRLZXkuaWQpO1xuICAgICAgICB9KVxuICAgICAgKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2NlbmFyaW9JZDogb3B0aW9ucy5zY2VuYXJpb0lkLFxuICAgICAgZW5hYmxlZDogb3B0aW9ucy5lbmFibGVkLFxuICAgICAgdXBkYXRlQXNzZW1ibHksXG4gICAgICBjcmVhdGVSZWNlaXZlcnMsXG4gICAgICB1cGRhdGVSZWNlaXZlcnMsXG4gICAgICBkZWxldGVSZWNlaXZlcnM6IG9wdGlvbnMuZGVsZXRlUmVjZWl2ZXJzLFxuICAgICAgY3JlYXRlQ2xhaW1hbnRzLFxuICAgICAgdXBkYXRlQ2xhaW1hbnRzLFxuICAgICAgZGVsZXRlQ2xhaW1hbnRzOiBvcHRpb25zLmRlbGV0ZUNsYWltYW50cyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUmVjZWl2ZXJEaXJlY3RvcnkoXG4gICAgb3B0aW9uczogUmVjZWl2ZXJEaXJlY3RvcnlPcHRpb25zLFxuICAgIHJlY2VpdmVyU2hhcmVkS2V5OiBKV0suS2V5LFxuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5XG4gICkge1xuICAgIC8vIFRPRE8gdGhpcyBzaG91bGQgYmUgYmF0Y2hlZFxuICAgIGNvbnN0IGRpcmVjdG9yeUtleSA9IGF3YWl0IHRoaXMuaXRlbTJTZXJ2aWNlLmdldERpcmVjdG9yeUtleShcbiAgICAgIG9wdGlvbnMuZGlyZWN0b3J5SWQsXG4gICAgICBvcHRpb25zLmRpcmVjdG9yeUtleUlkXG4gICAgKTtcblxuICAgIGNvbnN0IHNoYXJlZENpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIHJlY2VpdmVyU2hhcmVkS2V5LFxuICAgICAgb3B0aW9ucy5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uXG4gICAgKTtcblxuICAgIGxldCB3cmFwcGVkSXRlbUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgcmVjZWl2ZXJTaGFyZWRLZXksXG4gICAgICBkaXJlY3RvcnlLZXkuandrLnRvSlNPTih0cnVlKVxuICAgICk7XG5cbiAgICAvLyBUT0RPIGZldGNoIGFzc2VtYmx5S2V5SWQuIFdlIGFyZSBjaGFuZ2luZyBpdCBzdWNoIHRoYXQgdGhlcmUgaXMgYWx3YXlzIGFuIGFzc2VtYmx5XG4gICAgLy8gYmVmb3JlIHJlY2VpdmVycyBjYW4gYmUgYWRkZWQuXG4gICAgd3JhcHBlZEl0ZW1LZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgd3JhcHBlZEl0ZW1LZXlcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpcmVjdG9yeUlkOiBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgd3JhcHBlZEl0ZW1LZXksXG4gICAgICBhY2Nlc3NSb2xlOiBvcHRpb25zLmFjY2Vzc1JvbGUsXG4gICAgICBzaGFyZWRDaXBoZXJEYXRhLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDcmVhdGVSZWNlaXZlcihcbiAgICBvcHRpb25zOiBDcmVhdGVSZWNlaXZlck9wdGlvbnMsXG4gICAgYXNzZW1ibHlLZXk6IEpXSy5LZXlcbiAgKSB7XG4gICAgY29uc3QgeyBzaGFyZWRLZXksIG11dGF0aW9uSW5wdXQgfSA9IGF3YWl0IHRoaXMucHJlcGFyZUNyZWF0ZVBhcnRpY2lwYW50KFxuICAgICAgb3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBhZGREaXJlY3RvcmllcyA9XG4gICAgICBvcHRpb25zLmFkZERpcmVjdG9yaWVzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMuYWRkRGlyZWN0b3JpZXMubWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMucHJlcGFyZUFkZFJlY2VpdmVyRGlyZWN0b3J5KHgsIHNoYXJlZEtleS5rZXksIGFzc2VtYmx5S2V5KVxuICAgICAgICApXG4gICAgICApKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tdXRhdGlvbklucHV0LFxuICAgICAgYWRkRGlyZWN0b3JpZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVVwZGF0ZVJlY2VpdmVyKFxuICAgIG9wdGlvbnM6IFVwZGF0ZVJlY2VpdmVyT3B0aW9ucyxcbiAgICBhc3NlbWJseUtleTogSldLLktleSxcbiAgICBleGlzdGluZ1JlY2VpdmVyOiBTY2VuYXJpb1JlY2VpdmVyTm9kZVxuICApIHtcbiAgICBjb25zdCBzaGFyZWRLZXlJZCA9IGV4aXN0aW5nUmVjZWl2ZXIuc2hhcmVkS2V5LmlkO1xuXG4gICAgY29uc3QgZGVsZXRlRGlyZWN0b3JpZXNPcHRpb25zID0gb3B0aW9ucy5kZWxldGVEaXJlY3RvcmllcyB8fCBbXTtcbiAgICBjb25zdCB1cGRhdGVEaXJlY3Rvcmllc09wdGlvbnMgPSBvcHRpb25zLnVwZGF0ZURpcmVjdG9yaWVzIHx8IFtdO1xuXG4gICAgLy8gRmlsbCBpbiBhbnkgbWlzc2luZyB1cGRhdGUgZGlyZWN0b3JpZXNcbiAgICBtYXBFZGdlcyhleGlzdGluZ1JlY2VpdmVyLnJlY2VpdmVyRGlyZWN0b3JpZXMpLmZvckVhY2goXG4gICAgICAoZXhpc3RpbmdEaXJlY3RvcnkpID0+IHtcbiAgICAgICAgaWYgKGRlbGV0ZURpcmVjdG9yaWVzT3B0aW9ucy5pbmNsdWRlcyhleGlzdGluZ0RpcmVjdG9yeS5kaXJlY3RvcnkuaWQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHVwZGF0ZURpcmVjdG9yaWVzT3B0aW9ucy5maW5kKFxuICAgICAgICAgICAgKHgpID0+IHguZGlyZWN0b3J5SWQgPT09IGV4aXN0aW5nRGlyZWN0b3J5LmRpcmVjdG9yeS5pZFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlRGlyZWN0b3JpZXNPcHRpb25zLnB1c2goe1xuICAgICAgICAgIGFjY2Vzc1JvbGU6IGV4aXN0aW5nRGlyZWN0b3J5LmFjY2Vzc1JvbGUsXG4gICAgICAgICAgZGlyZWN0b3J5SWQ6IGV4aXN0aW5nRGlyZWN0b3J5LmRpcmVjdG9yeS5pZCxcbiAgICAgICAgICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uOlxuICAgICAgICAgICAgZXhpc3RpbmdEaXJlY3Rvcnkuc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHsgc2hhcmVkS2V5LCBtdXRhdGlvbklucHV0IH0gPSBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVQYXJ0aWNpcGFudChcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzaGFyZWRLZXlJZFxuICAgICk7XG5cbiAgICBjb25zdCBhZGREaXJlY3RvcmllcyA9XG4gICAgICBvcHRpb25zLmFkZERpcmVjdG9yaWVzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMuYWRkRGlyZWN0b3JpZXMubWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMucHJlcGFyZUFkZFJlY2VpdmVyRGlyZWN0b3J5KHgsIHNoYXJlZEtleSwgYXNzZW1ibHlLZXkpXG4gICAgICAgIClcbiAgICAgICkpO1xuXG4gICAgY29uc3QgdXBkYXRlRGlyZWN0b3JpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHVwZGF0ZURpcmVjdG9yaWVzT3B0aW9ucy5tYXAoKHgpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZVVwZGF0ZVJlY2VpdmVyRGlyZWN0b3J5KHgsIHNoYXJlZEtleSwgYXNzZW1ibHlLZXkpXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tdXRhdGlvbklucHV0LFxuICAgICAgYWRkRGlyZWN0b3JpZXMsXG4gICAgICB1cGRhdGVEaXJlY3RvcmllcyxcbiAgICAgIGRlbGV0ZURpcmVjdG9yaWVzOiBvcHRpb25zLmRlbGV0ZURpcmVjdG9yaWVzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVFeGlzdGluZ1JlY2VpdmVyKFxuICAgIGV4aXN0aW5nUmVjZWl2ZXI6IFNjZW5hcmlvUmVjZWl2ZXJOb2RlLFxuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5XG4gICkge1xuICAgIGNvbnN0IHVwZGF0ZURpcmVjdG9yaWVzID0gbWFwRWRnZXMoXG4gICAgICBleGlzdGluZ1JlY2VpdmVyLnJlY2VpdmVyRGlyZWN0b3JpZXNcbiAgICApLm1hcCgocmVjZWl2ZXJEaXJlY3RvcnkpID0+ICh7XG4gICAgICBkaXJlY3RvcnlJZDogcmVjZWl2ZXJEaXJlY3RvcnkuZGlyZWN0b3J5LmlkLFxuICAgICAgZGlyZWN0b3J5S2V5SWQ6IHJlY2VpdmVyRGlyZWN0b3J5LmRpcmVjdG9yeS5rZXlJZCxcbiAgICAgIGFjY2Vzc1JvbGU6IHJlY2VpdmVyRGlyZWN0b3J5LmFjY2Vzc1JvbGUsXG4gICAgICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uOiByZWNlaXZlckRpcmVjdG9yeS5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uLFxuICAgIH0pKTtcblxuICAgIC8vIEZpbGwgaXQgaW4gd2l0aCBleGlzdGluZyByZWNlaXZlci5cbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlVXBkYXRlUmVjZWl2ZXIoXG4gICAgICB7XG4gICAgICAgIHRwSWQ6IGV4aXN0aW5nUmVjZWl2ZXIudHAuaWQsXG4gICAgICAgIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb246IGV4aXN0aW5nUmVjZWl2ZXIuc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcbiAgICAgICAgdXBkYXRlRGlyZWN0b3JpZXMsXG4gICAgICB9LFxuICAgICAgYXNzZW1ibHlLZXksXG4gICAgICBleGlzdGluZ1JlY2VpdmVyXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUV4aXN0aW5nUmVjZWl2ZXJzKFxuICAgIGV4aXN0aW5nUmVjZWl2ZXJzOiBTY2VuYXJpb1JlY2VpdmVyTm9kZVtdLFxuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5XG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGV4aXN0aW5nUmVjZWl2ZXJzLm1hcCgoZXhpc3RpbmdSZWNlaXZlcikgPT5cbiAgICAgICAgdGhpcy5wcmVwYXJlRXhpc3RpbmdSZWNlaXZlcihleGlzdGluZ1JlY2VpdmVyLCBhc3NlbWJseUtleSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlUGFydGljaXBhbnQob3B0aW9uczogQ3JlYXRlUGFydGljaXBhbnRPcHRpb25zKSB7XG4gICAgY29uc3Qgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0V2l0aE5ld0tleShcbiAgICAgIG9wdGlvbnMudHBTaGFyZWRLZXlJZCxcbiAgICAgIG9wdGlvbnMuc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvblxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNoYXJlZEtleSxcbiAgICAgIG11dGF0aW9uSW5wdXQ6IHtcbiAgICAgICAgdHBJZDogb3B0aW9ucy50cElkLFxuICAgICAgICB0cFNoYXJlZEtleUlkOiBvcHRpb25zLnRwU2hhcmVkS2V5SWQsXG4gICAgICAgIHRwU2hhcmVkS2V5V3JhcHBlZFNoYXJlZEtleTogc2hhcmVkS2V5LndyYXBwZWRLZXksXG4gICAgICAgIHNoYXJlZENpcGhlckRhdGE6IHNoYXJlZEtleS5jaXBoZXIsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVQYXJ0aWNpcGFudChcbiAgICBvcHRpb25zOiBQYXJ0aWNpcGFudE9wdGlvbnMsXG4gICAgc2hhcmVkS2V5SWQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShzaGFyZWRLZXlJZCk7XG5cbiAgICBjb25zdCBzaGFyZWRDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBzaGFyZWRLZXksXG4gICAgICBvcHRpb25zLnNoYXJlZENpcGhlckRhdGFDbGVhckpzb25cbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNoYXJlZEtleSxcbiAgICAgIG11dGF0aW9uSW5wdXQ6IHtcbiAgICAgICAgdHBJZDogb3B0aW9ucy50cElkLFxuICAgICAgICBzaGFyZWRLZXlJZCxcbiAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZUNsYWltYW50KG9wdGlvbnM6IENyZWF0ZUNsYWltYW50T3B0aW9ucykge1xuICAgIGNvbnN0IHsgbXV0YXRpb25JbnB1dCB9ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlUGFydGljaXBhbnQob3B0aW9ucyk7XG4gICAgcmV0dXJuIG11dGF0aW9uSW5wdXQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVDbGFpbWFudChcbiAgICBvcHRpb25zOiBVcGRhdGVDbGFpbWFudE9wdGlvbnMsXG4gICAgc2hhcmVkS2V5SWQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCB7IG11dGF0aW9uSW5wdXQgfSA9IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZVBhcnRpY2lwYW50KFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNoYXJlZEtleUlkXG4gICAgKTtcblxuICAgIHJldHVybiBtdXRhdGlvbklucHV0O1xuICB9XG5cbiAgYXN5bmMgcHJlcGFyZUNsYWltKHNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gICAgLy8gR2V0IGFsbCB0aGUgc2hhcmVkIGl0ZW1zXG4gICAgY29uc3Qgc2hhcmVkU2NlbmFyaW8gPSAoXG4gICAgICBhd2FpdCB0aGlzLmdldFNoYXJlZFNjZW5hcmlvKHNjZW5hcmlvSWQsIHNoYXJlZENsYWltSWQpXG4gICAgKS5zaGFyZWRTY2VuYXJpbztcblxuICAgIGlmIChzaGFyZWRTY2VuYXJpby5zdGF0ZSAhPT0gU2NlbmFyaW9TdGF0ZS5BUFBST1ZFRCkge1xuICAgICAgdGhyb3dDbGFpbU5vdEFwcHJvdmVkKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwcm92YWxzID0gbWFwRWRnZXMoXG4gICAgICBzaGFyZWRTY2VuYXJpby5zaGFyZWRDbGFpbS5hc0NsYWltUmVjZWl2ZXIuYXBwcm92YWxzXG4gICAgKTtcblxuICAgIGNvbnN0IGFzc2VtYmx5S2V5ID0gYXdhaXQgdGhpcy5yZWNvdmVyQXNzZW1ibHlLZXkoYXBwcm92YWxzKTtcbiAgICBjb25zb2xlLmxvZygncmVjZWl2ZUNsYWltTXV0YXRpb24gYXNzZW1ibHlLZXknLCBhc3NlbWJseUtleSk7XG5cbiAgICAvLyBEZWNyeXB0IGFsbCBpdGVtc1xuICAgIGNvbnN0IHJlY2VpdmVyRGlyZWN0b3JpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHNoYXJlZFNjZW5hcmlvLmFzUmVjZWl2ZXIucmVjZWl2ZXJEaXJlY3Rvcmllcy5lZGdlc1xuICAgICAgICAubWFwKChlZGdlKSA9PiBlZGdlLm5vZGUpXG4gICAgICAgIC5tYXAoYXN5bmMgKHJlY2VpdmVyRGlyZWN0b3J5KSA9PiB7XG4gICAgICAgICAgY29uc3Qgd3JhcHBlZEl0ZW1LZXkgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQoXG4gICAgICAgICAgICBhc3NlbWJseUtleSxcbiAgICAgICAgICAgIHJlY2VpdmVyRGlyZWN0b3J5LndyYXBwZWRJdGVtS2V5XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZWNlaXZlckRpcmVjdG9yeUlkOiByZWNlaXZlckRpcmVjdG9yeS5pZCxcbiAgICAgICAgICAgIHJlY2VpdmVyU2hhcmVkS2V5V3JhcHBlZEl0ZW1LZXk6IHdyYXBwZWRJdGVtS2V5LCAvLyB0aGUgd3JhcHBlZEl0ZW1LZXkgaXMgYWxyZWFkeSB3cmFwcGVkIGJ5IHJlY2VpdmVyU2hhcmVkS2V5XG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNjZW5hcmlvQ2xhaW1JZDogc2hhcmVkQ2xhaW1JZCxcbiAgICAgIHJlY2VpdmVyRGlyZWN0b3JpZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVjb3ZlckFzc2VtYmx5S2V5KFxuICAgIGFwcHJvdmFsczogU2hhcmVkU2NlbmFyaW9DbGFpbVJlY2VpdmVkQXBwcm92YWxOb2RlW11cbiAgKSB7XG4gICAgY29uc3QgcGFydGlhbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGFwcHJvdmFscy5tYXAoKGFwcHJvdmFsKSA9PlxuICAgICAgICB0aGlzLmtleUdyYXBoLmRlY3J5cHRGcm9tU3RyaW5nPFBhcnRpYWxBc3NlbWJseUtleT4oXG4gICAgICAgICAgYXBwcm92YWwucHhrLmlkLFxuICAgICAgICAgIGFwcHJvdmFsLnJlY2VpdmVyQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5XG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuYXNzZW1ibHlDb250cm9sbGVyLnJlY292ZXJBc3NlbWJseUtleShwYXJ0aWFscyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFzQ2xhaW1BcHByb3ZlcnMoXG4gICAgc2hhcmVkU2NlbmFyaW9JZCxcbiAgICBjbGFpbUlkLFxuICAgIHN0YXRlOiBUcENsYWltQXBwcm92ZXJTdGF0ZVxuICApIHtcbiAgICBjb25zdCBzaGFyZWRTY2VuYXJpbyA9IChcbiAgICAgIGF3YWl0IHRoaXMuZ2V0U2hhcmVkU2NlbmFyaW8oc2hhcmVkU2NlbmFyaW9JZCwgY2xhaW1JZClcbiAgICApLnNoYXJlZFNjZW5hcmlvO1xuXG4gICAgcmV0dXJuIG1hcEVkZ2VzKHNoYXJlZFNjZW5hcmlvLnNoYXJlZENsYWltLmNsYWltLmFzQ2xhaW1BcHByb3ZlcnMpLmZpbHRlcihcbiAgICAgIChhc0NsYWltQXBwcm92ZXIpID0+IGFzQ2xhaW1BcHByb3Zlci5zdGF0ZSA9PT0gc3RhdGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQXBwcm92ZUNsYWltTXV0YXRpb25zKFxuICAgIHNoYXJlZFNjZW5hcmlvSWQ6IHN0cmluZyxcbiAgICBjbGFpbUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgdXNlciBtYXkgYmUgYWN0aW5nIGFzIGFwcHJvdmVycyBpbiBtdWx0aXBsZSBzdWItYXNzZW1ibGllcyBzb1xuICAgIC8vIHdlIGFwcHJvdmUgdGhlbSBhbGwuXG4gICAgY29uc3QgYXNDbGFpbUFwcHJvdmVycyA9IGF3YWl0IHRoaXMuYXNDbGFpbUFwcHJvdmVycyhcbiAgICAgIHNoYXJlZFNjZW5hcmlvSWQsXG4gICAgICBjbGFpbUlkLFxuICAgICAgVHBDbGFpbUFwcHJvdmVyU3RhdGUuQ0xBSU1FRFxuICAgICk7XG5cbiAgICByZXR1cm4gYXNDbGFpbUFwcHJvdmVycy5tYXAoXG4gICAgICBhc3luYyAoYXNDbGFpbUFwcHJvdmVyKSA9PlxuICAgICAgICBuZXcgTHJNdXRhdGlvbih7XG4gICAgICAgICAgbXV0YXRpb246IEFwcHJvdmVTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlQXBwcm92ZUNsYWltKGFzQ2xhaW1BcHByb3ZlciksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQXBwcm92ZUNsYWltKFxuICAgIGFzQ2xhaW1BcHByb3ZlcjogU2hhcmVkVHBDbGFpbUFwcHJvdmVyTm9kZVxuICApIHtcbiAgICBjb25zdCByZWNlaXZlckFwcHJvdmFscyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbWFwRWRnZXMoYXNDbGFpbUFwcHJvdmVyLnJlY2VpdmVyQXBwcm92YWxzKS5tYXAoKHJlY2VpdmVyQXBwcm92YWwpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZVJlY2VpdmVyQXBwcm92YWwoe1xuICAgICAgICAgIHJlY2VpdmVyQXBwcm92YWxJZDogcmVjZWl2ZXJBcHByb3ZhbC5pZCxcbiAgICAgICAgICByZWNlaXZlckFwcHJvdmFsUHhrSWQ6IHJlY2VpdmVyQXBwcm92YWwucHhrLmlkLFxuICAgICAgICAgIHNoYXJlZENpcGhlclBhcnRpYWxBc3NlbWJseUtleUNsZWFySnNvbjpcbiAgICAgICAgICAgIGFzQ2xhaW1BcHByb3Zlci5zaGFyZWRDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXlDbGVhckpzb24sXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjbGFpbUFwcHJvdmVySWQ6IGFzQ2xhaW1BcHByb3Zlci5pZCxcbiAgICAgIHJlY2VpdmVyQXBwcm92YWxzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVSZWNlaXZlckFwcHJvdmFsKG9wdGlvbnM6IHtcbiAgICByZWNlaXZlckFwcHJvdmFsSWQ6IHN0cmluZztcbiAgICByZWNlaXZlckFwcHJvdmFsUHhrSWQ6IHN0cmluZztcbiAgICBzaGFyZWRDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXlDbGVhckpzb246IEpTT05PYmplY3Q7XG4gIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVjZWl2ZXJBcHByb3ZhbElkOiBvcHRpb25zLnJlY2VpdmVyQXBwcm92YWxJZCxcbiAgICAgIC8vIFRPRE8gYWxsb3cgc2VuZGluZyBvZiBtZXNzYWdlcyB0byByZWNlaXZlci5cbiAgICAgIHJlY2VpdmVyQ2lwaGVyOiAnJyxcbiAgICAgIHJlY2VpdmVyQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5OiBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgb3B0aW9ucy5yZWNlaXZlckFwcHJvdmFsUHhrSWQsXG4gICAgICAgIG9wdGlvbnMuc2hhcmVkQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5Q2xlYXJKc29uXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVSZWplY3RDbGFpbU11dGF0aW9ucyhcbiAgICBzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsXG4gICAgY2xhaW1JZDogc3RyaW5nXG4gICkge1xuICAgIC8vIFRoZSBjdXJyZW50IHVzZXIgbWF5IGJlIGFjdGluZyBhcyBhcHByb3ZlcnMgaW4gbXVsdGlwbGUgc3ViLWFzc2VtYmxpZXMgc29cbiAgICAvLyB3ZSByZWplY3QgdGhlbSBhbGwuXG4gICAgY29uc3QgYXNDbGFpbUFwcHJvdmVycyA9IGF3YWl0IHRoaXMuYXNDbGFpbUFwcHJvdmVycyhcbiAgICAgIHNoYXJlZFNjZW5hcmlvSWQsXG4gICAgICBjbGFpbUlkLFxuICAgICAgVHBDbGFpbUFwcHJvdmVyU3RhdGUuQ0xBSU1FRFxuICAgICk7XG5cbiAgICByZXR1cm4gYXNDbGFpbUFwcHJvdmVycy5tYXAoXG4gICAgICBhc3luYyAoYXNDbGFpbUFwcHJvdmVyKSA9PlxuICAgICAgICBuZXcgTHJNdXRhdGlvbih7XG4gICAgICAgICAgbXV0YXRpb246IFJlamVjdFNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGlucHV0OiB7IGNsYWltQXBwcm92ZXJJZDogYXNDbGFpbUFwcHJvdmVyLmlkIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8udHlwZXMuanMiLCJzb3VyY2VSb290IjoiL29wdC9hdGxhc3NpYW4vcGlwZWxpbmVzL2FnZW50L2J1aWxkL3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3NjZW5hcmlvL3NjZW5hcmlvLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NSb2xlQ2hvaWNlLCBKU09OT2JqZWN0IH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7XG4gIENyZWF0ZVRwQXNzZW1ibHlJbnB1dCxcbiAgVXBkYXRlVHBBc3NlbWJseUlucHV0LFxufSBmcm9tICcuLi90cC1hc3NlbWJseS90cC1hc3NlbWJseS50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGljaXBhbnRPcHRpb25zIHtcbiAgdHBJZDogc3RyaW5nO1xuICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uOiBKU09OT2JqZWN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVBhcnRpY2lwYW50T3B0aW9ucyBleHRlbmRzIFBhcnRpY2lwYW50T3B0aW9ucyB7XG4gIC8qKiBUaGlzIGlzIHRoZSBUUC5zaGFyZWRLZXkgdXNlZCB0byB3cmFwIHRoZSBhcHByb3ZlciBzaGFyZWQga2V5IHdoaWNoIHdpbGwgYmUgY3JlYXRlZC4gKi9cbiAgdHBTaGFyZWRLZXlJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlUGFydGljaXBhbnRPcHRpb25zID0gUGFydGljaXBhbnRPcHRpb25zO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlY2VpdmVyRGlyZWN0b3J5T3B0aW9ucyB7XG4gIGRpcmVjdG9yeUlkOiBzdHJpbmc7XG4gIGRpcmVjdG9yeUtleUlkPzogc3RyaW5nO1xuICBhY2Nlc3NSb2xlOiBBY2Nlc3NSb2xlQ2hvaWNlO1xuICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uOiBKU09OT2JqZWN0O1xufVxuXG5leHBvcnQgdHlwZSBDcmVhdGVSZWNlaXZlckRpcmVjdG9yeU9wdGlvbnMgPSBSZWNlaXZlckRpcmVjdG9yeU9wdGlvbnM7XG5leHBvcnQgdHlwZSBVcGRhdGVSZWNlaXZlckRpcmVjdG9yeU9wdGlvbnMgPSBSZWNlaXZlckRpcmVjdG9yeU9wdGlvbnM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUmVjZWl2ZXJPcHRpb25zIGV4dGVuZHMgQ3JlYXRlUGFydGljaXBhbnRPcHRpb25zIHtcbiAgYWRkRGlyZWN0b3JpZXM/OiBDcmVhdGVSZWNlaXZlckRpcmVjdG9yeU9wdGlvbnNbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVSZWNlaXZlck9wdGlvbnMgZXh0ZW5kcyBVcGRhdGVQYXJ0aWNpcGFudE9wdGlvbnMge1xuICBhZGREaXJlY3Rvcmllcz86IENyZWF0ZVJlY2VpdmVyRGlyZWN0b3J5T3B0aW9uc1tdO1xuICB1cGRhdGVEaXJlY3Rvcmllcz86IFVwZGF0ZVJlY2VpdmVyRGlyZWN0b3J5T3B0aW9uc1tdO1xuICBkZWxldGVEaXJlY3Rvcmllcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgdHlwZSBDcmVhdGVDbGFpbWFudE9wdGlvbnMgPSBDcmVhdGVQYXJ0aWNpcGFudE9wdGlvbnM7XG5leHBvcnQgdHlwZSBVcGRhdGVDbGFpbWFudE9wdGlvbnMgPSBVcGRhdGVQYXJ0aWNpcGFudE9wdGlvbnM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlU2NlbmFyaW9PcHRpb25zIHtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgY3JlYXRlQXNzZW1ibHk/OiBDcmVhdGVUcEFzc2VtYmx5SW5wdXQ7XG4gIGNyZWF0ZVJlY2VpdmVycz86IENyZWF0ZVJlY2VpdmVyT3B0aW9uc1tdO1xuICBjcmVhdGVDbGFpbWFudHM/OiBDcmVhdGVDbGFpbWFudE9wdGlvbnNbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVTY2VuYXJpb09wdGlvbnMge1xuICBzY2VuYXJpb0lkOiBzdHJpbmc7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIHVwZGF0ZUFzc2VtYmx5PzogVXBkYXRlVHBBc3NlbWJseUlucHV0O1xuICBjcmVhdGVSZWNlaXZlcnM/OiBDcmVhdGVSZWNlaXZlck9wdGlvbnNbXTtcbiAgdXBkYXRlUmVjZWl2ZXJzPzogVXBkYXRlUmVjZWl2ZXJPcHRpb25zW107XG4gIGRlbGV0ZVJlY2VpdmVycz86IHN0cmluZ1tdO1xuICBjcmVhdGVDbGFpbWFudHM/OiBDcmVhdGVDbGFpbWFudE9wdGlvbnNbXTtcbiAgdXBkYXRlQ2xhaW1hbnRzPzogVXBkYXRlQ2xhaW1hbnRPcHRpb25zW107XG4gIGRlbGV0ZUNsYWltYW50cz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc2V0U2NlbmFyaW9PcHRpb25zIHtcbiAgc2NlbmFyaW9JZDogc3RyaW5nO1xuICBlbmFibGVkOiBib29sZWFuO1xufVxuIl19
|