@atlasauth/angular 0.4.0 → 0.5.0
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/CHANGELOG.md +12 -0
- package/dist/esm2022/lib/atlas.service.mjs +30 -3
- package/dist/esm2022/lib/components/attempt-flow.component.mjs +12 -6
- package/dist/esm2022/lib/components/sign-up-form.component.mjs +20 -13
- package/dist/esm2022/lib/i18n.mjs +41 -1
- package/dist/fesm2022/atlasauth-angular.mjs +97 -18
- package/dist/fesm2022/atlasauth-angular.mjs.map +1 -1
- package/dist/lib/atlas.service.d.ts +15 -1
- package/dist/lib/components/attempt-flow.component.d.ts +2 -0
- package/dist/lib/components/sign-up-form.component.d.ts +3 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @atlasauth/angular changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.0
|
|
4
|
+
Requires `@atlasauth/js` 0.9.0.
|
|
5
|
+
- **Server errors render in the app's language.** `<atlas-sign-in>` / `<atlas-sign-up>` (the attempt flow and
|
|
6
|
+
the sign-up form) show the catalog string `error.<reason>` for an error's `reason`, falling back to the
|
|
7
|
+
server's message, then `error.generic`.
|
|
8
|
+
- **`Accept-Language`.** `AtlasService`'s Frontend API client and `createFapiClient()` send the `locale` tag of
|
|
9
|
+
the `localization` bundle, so the server localises `message` too.
|
|
10
|
+
- **Added 38 `error.<reason>` keys** to the built-in `EN_US` catalog (see `@atlasauth/localizations` 0.4.0).
|
|
11
|
+
- `AtlasService` gains `errorText(error)`, the `locale` getter (`string | undefined`) and the
|
|
12
|
+
`errorLocalization` getter (`Catalog`).
|
|
13
|
+
|
|
14
|
+
|
|
3
15
|
## 0.4.0
|
|
4
16
|
- **Safer sign-out.** `AtlasService.signOut(options?: SignOutOptions)` now returns
|
|
5
17
|
`Promise<SignOutResult>` (`{ revoked: boolean; activeSessionId?: string }`; was `Promise<void>` —
|
|
@@ -3,7 +3,7 @@ import { isPlatformBrowser } from '@angular/common';
|
|
|
3
3
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
5
5
|
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
6
|
-
import { FapiClient, SignOutGuard, TokenCache, closeOAuthPopupAfterSignIn, completeOAuthPopupLanding, getProviderToken as fetchProviderToken, mapOAuthPopupPayload, msUntilRefresh, readExpiry, readRedirectResult, resolveFrontendApi, stripRedirectParams, } from '@atlasauth/js';
|
|
6
|
+
import { FapiClient, SignOutGuard, catalogLocale, localizedErrorMessage, TokenCache, closeOAuthPopupAfterSignIn, completeOAuthPopupLanding, getProviderToken as fetchProviderToken, mapOAuthPopupPayload, msUntilRefresh, readExpiry, readRedirectResult, resolveFrontendApi, stripRedirectParams, } from '@atlasauth/js';
|
|
7
7
|
import { evaluate } from '@atlasauth/authz';
|
|
8
8
|
import { ATLAS_OPTIONS } from './atlas.config';
|
|
9
9
|
import { cssVariables, instanceDesignFrom, renderAppearance, resolveTokens, } from './appearance';
|
|
@@ -46,6 +46,10 @@ export class AtlasService {
|
|
|
46
46
|
guard;
|
|
47
47
|
stopWatchingSignOut = null;
|
|
48
48
|
catalog;
|
|
49
|
+
/** The language layer of `catalog` (the `localization` bundle alone; `EN_US` when none). */
|
|
50
|
+
errorCatalog;
|
|
51
|
+
/** Sent to the Frontend API as `Accept-Language`: the `localization` bundle's `locale` tag. */
|
|
52
|
+
requestLocale;
|
|
49
53
|
/**
|
|
50
54
|
* A sign-in attempt handed back by an OAuth redirect that still needs a second
|
|
51
55
|
* factor (no session was issued). Null in the ordinary case; the `<atlas-sign-in>`
|
|
@@ -101,10 +105,13 @@ export class AtlasService {
|
|
|
101
105
|
});
|
|
102
106
|
this.doFetch = options.fetchImpl ?? ((...args) => fetch(...args));
|
|
103
107
|
this.catalog = options.localization ? withFallback(options.localization) : EN_US;
|
|
108
|
+
this.errorCatalog = options.localization ?? EN_US;
|
|
109
|
+
this.requestLocale = catalogLocale(options.localization);
|
|
104
110
|
this.fapiClient = new FapiClient({
|
|
105
111
|
publishableKey: this.publishableKey,
|
|
106
112
|
baseUrl: this.baseUrl,
|
|
107
113
|
fetchImpl: this.doFetch,
|
|
114
|
+
locale: this.requestLocale,
|
|
108
115
|
});
|
|
109
116
|
this.guard = new SignOutGuard({
|
|
110
117
|
request: (path, init) => this.call(path, init),
|
|
@@ -147,6 +154,22 @@ export class AtlasService {
|
|
|
147
154
|
get frontendApi() {
|
|
148
155
|
return this.baseUrl;
|
|
149
156
|
}
|
|
157
|
+
/** The `Accept-Language` sent to the Frontend API: the `localization` bundle's `locale` tag, if any. */
|
|
158
|
+
get locale() {
|
|
159
|
+
return this.requestLocale;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* The text to show for a server error, in the app's language: the catalog's
|
|
163
|
+
* `error.<reason>` (looked up in the `localization` bundle, or `EN_US` when
|
|
164
|
+
* none is set), else the server's message, else `error.generic`.
|
|
165
|
+
*/
|
|
166
|
+
errorText(error) {
|
|
167
|
+
return localizedErrorMessage(error, this.errorCatalog, this.catalog);
|
|
168
|
+
}
|
|
169
|
+
/** The catalog server errors are looked up in (see {@link errorText}). */
|
|
170
|
+
get errorLocalization() {
|
|
171
|
+
return this.errorCatalog;
|
|
172
|
+
}
|
|
150
173
|
/** Tokens as CSS custom properties, for a host element to inherit. */
|
|
151
174
|
appearanceVariables() {
|
|
152
175
|
return cssVariables(resolveTokens(this.options.appearance));
|
|
@@ -180,7 +203,11 @@ export class AtlasService {
|
|
|
180
203
|
}
|
|
181
204
|
/** A fresh {@link FapiClient} for driving a sign-in/sign-up flow. */
|
|
182
205
|
createFapiClient() {
|
|
183
|
-
return new FapiClient({
|
|
206
|
+
return new FapiClient({
|
|
207
|
+
publishableKey: this.publishableKey,
|
|
208
|
+
baseUrl: this.baseUrl,
|
|
209
|
+
locale: this.requestLocale,
|
|
210
|
+
});
|
|
184
211
|
}
|
|
185
212
|
// --- Imperative API (mirrors the React hooks' actions) ----------------------
|
|
186
213
|
/**
|
|
@@ -416,4 +443,4 @@ function decodeClaims(jwt) {
|
|
|
416
443
|
return null;
|
|
417
444
|
}
|
|
418
445
|
}
|
|
419
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRsYXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXRsYXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUVWLFdBQVcsRUFFWCxRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUNMLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsZ0JBQWdCLElBQUksa0JBQWtCLEVBQ3RDLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEdBS3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQXlCLE1BQU0sa0JBQWtCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixhQUFhLEdBSWQsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQWdCLE1BQU0sUUFBUSxDQUFDOztBQVMzRDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQUNOLE9BQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEMsVUFBVSxHQUFHLE1BQU0s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SUQsXG4gIFNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEZhcGlDbGllbnQsXG4gIFNpZ25PdXRHdWFyZCxcbiAgVG9rZW5DYWNoZSxcbiAgY2xvc2VPQXV0aFBvcHVwQWZ0ZXJTaWduSW4sXG4gIGNvbXBsZXRlT0F1dGhQb3B1cExhbmRpbmcsXG4gIGdldFByb3ZpZGVyVG9rZW4gYXMgZmV0Y2hQcm92aWRlclRva2VuLFxuICBtYXBPQXV0aFBvcHVwUGF5bG9hZCxcbiAgbXNVbnRpbFJlZnJlc2gsXG4gIHJlYWRFeHBpcnksXG4gIHJlYWRSZWRpcmVjdFJlc3VsdCxcbiAgcmVzb2x2ZUZyb250ZW5kQXBpLFxuICBzdHJpcFJlZGlyZWN0UGFyYW1zLFxuICB0eXBlIFByb3ZpZGVyVG9rZW4sXG4gIHR5cGUgUmVkaXJlY3RSZXN1bHQsXG4gIHR5cGUgU2lnbk91dE9wdGlvbnMsXG4gIHR5cGUgU2lnbk91dFJlc3VsdCxcbn0gZnJvbSAnQGF0bGFzYXV0aC9qcyc7XG5pbXBvcnQgeyBldmFsdWF0ZSwgdHlwZSBQcm90ZWN0Q29uZGl0aW9uIH0gZnJvbSAnQGF0bGFzYXV0aC9hdXRoeic7XG5pbXBvcnQgeyBBVExBU19PUFRJT05TIH0gZnJvbSAnLi9hdGxhcy5jb25maWcnO1xuaW1wb3J0IHtcbiAgY3NzVmFyaWFibGVzLFxuICBpbnN0YW5jZURlc2lnbkZyb20sXG4gIHJlbmRlckFwcGVhcmFuY2UsXG4gIHJlc29sdmVUb2tlbnMsXG4gIHR5cGUgQXBwZWFyYW5jZSxcbiAgdHlwZSBBcHBlYXJhbmNlUmVuZGVyLFxuICB0eXBlIEluc3RhbmNlRGVzaWduLFxufSBmcm9tICcuL2FwcGVhcmFuY2UnO1xuaW1wb3J0IHsgRU5fVVMsIHdpdGhGYWxsYmFjaywgdHlwZSBDYXRhbG9nIH0gZnJvbSAnLi9pMThuJztcbmltcG9ydCB0eXBlIHtcbiAgQXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwLFxuICBBdGxhc1Nlc3Npb24sXG4gIEF0bGFzVXNlcixcbiAgQXV0aFN0YXR1cyxcbiAgU2Vzc2lvbkNsYWltcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogYEF0bGFzU2VydmljZWAg4oCUIHRoZSBBbmd1bGFyIHBlZXIgb2YgUmVhY3QncyBgPEF0bGFzUHJvdmlkZXI+YCArIGhvb2tzLlxuICpcbiAqIEl0IGhvbGRzIGV4YWN0bHkgb25lIHRoaW5nIHRoYXQgbWF0dGVycyBpbiBtZW1vcnk6IHRoZSBzaG9ydC1saXZlZCBKV1QsIGluIGFcbiAqIHtAbGluayBUb2tlbkNhY2hlfS4gTm90IGxvY2FsU3RvcmFnZSwgbm90IGEgY29va2llIHRoaXMgY29kZSB3cml0ZXMg4oCUIHRoZVxuICogcmVmcmVzaCB0b2tlbiBpcyBIdHRwT25seSBzbyBicm93c2VyIHNjcmlwdCBuZXZlciB0b3VjaGVzIGl0LCBhbmQgdGhlIEpXVFxuICogbGl2ZXMgb25seSBhcyBsb25nIGFzIHRoZSB0YWIuIEFueXRoaW5nIHBlcnNpc3RlZCB3b3VsZCBzdXJ2aXZlIHRoZSB0YWIgYW5kXG4gKiBiZWNvbWUgdGhlIGZpcnN0IHRoaW5nIGFuIFhTUyByZWFkcy5cbiAqXG4gKiBSZWFjdGl2ZSBhdXRoIHN0YXRlIGlzIGV4cG9zZWQgdHdvIHdheXMgc28gY2FsbGVycyBjYW4gcGljayB0aGVpciBpZGlvbTpcbiAqICAtIFJ4SlMgb2JzZXJ2YWJsZXMgKGB1c2VyJGAsIGBzZXNzaW9uJGAsIGBpc1NpZ25lZEluJGAsIOKApikg4oCUIHRoZSBwcmltYXJ5IEFQSSxcbiAqICAgIHRoZSBhbmFsb2d1ZSBvZiB0aGUgUmVhY3QgaG9va3MnIHJldHVybiB2YWx1ZXMuXG4gKiAgLSBBbmd1bGFyIHNpZ25hbHMgKGB1c2VyYCwgYHNlc3Npb25gLCBgaXNTaWduZWRJbmAsIOKApikg4oCUIHRoZSBzYW1lIHZhbHVlcyBhc1xuICogICAgYFNpZ25hbDxUPmAsIGZvciB0ZW1wbGF0ZXMgYW5kIGBjb21wdXRlZCgpYC5cbiAqXG4gKiBUaGUgaW1wZXJhdGl2ZSBtZXRob2RzIChgc2lnbk91dGAsIGBnZXRUb2tlbmAsIGBnZXRQcm92aWRlclRva2VuYCxcbiAqIGBzZXRBY3RpdmVPcmdhbml6YXRpb25gLCBgcmVsb2FkYCkgbWlycm9yIHRoZSBhY3Rpb25zIHRoZSBob29rcyByZXR1cm4uXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXRsYXNTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zID0gaW5qZWN0KEFUTEFTX09QVElPTlMpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHVibGlzaGFibGVLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBkb0ZldGNoOiB0eXBlb2YgZmV0Y2g7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZSA9IG5ldyBUb2tlbkNhY2hlKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmFwaUNsaWVudDogRmFwaUNsaWVudDtcbiAgcHJpdmF0ZSByZWZyZXNoVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXNzaW9ucyB0aGlzIGJyb3dzZXIgc2lnbmVkIG91dCBvZiAodG9tYnN0b25lcyBpbiBsb2NhbFN0b3JhZ2UsIHBlclxuICAgKiBGcm9udGVuZCBBUEkgb3JpZ2luKSwgdGhlIHJldm9rZSBhbmQgaXRzIGJhY2tncm91bmQgcmUtdHJpZXMuIEV2ZXJ5IHJlbG9hZCAvXG4gICAqIHJlZnJlc2ggYXNrcyBpdCBiZWZvcmUgYWRvcHRpbmcgYSBzZXNzaW9uLCBzbyBhIHNpZ24tb3V0IHRoZSBzZXJ2ZXIgbmV2ZXJcbiAgICogY29uZmlybWVkIGlzIG5vdCB1bmRvbmUgYnkgdGhlIHN0aWxsLXZhbGlkIHJlZnJlc2ggY29va2llLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBndWFyZDogU2lnbk91dEd1YXJkO1xuICBwcml2YXRlIHN0b3BXYXRjaGluZ1NpZ25PdXQ6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZzogQ2F0YWxvZztcblxuICAvKipcbiAgICogQSBzaWduLWluIGF0dGVtcHQgaGFuZGVkIGJhY2sgYnkgYW4gT0F1dGggcmVkaXJlY3QgdGhhdCBzdGlsbCBuZWVkcyBhIHNlY29uZFxuICAgKiBmYWN0b3IgKG5vIHNlc3Npb24gd2FzIGlzc3VlZCkuIE51bGwgaW4gdGhlIG9yZGluYXJ5IGNhc2U7IHRoZSBgPGF0bGFzLXNpZ24taW4+YFxuICAgKiBmbG93IHNlZWRzIGl0c2VsZiBmcm9tIHRoaXMgc28gdGhlIHVzZXIgcmVzdW1lcyBhdCB0aGUgMkZBIHN0ZXAuIENhcHR1cmVkXG4gICAqIG9uY2UsIHN5bmNocm9ub3VzbHksIGF0IGNvbnN0cnVjdGlvbiDigJQgYmVmb3JlIGFueSBmbG93IGNvbXBvbmVudCByZWFkcyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHBlbmRpbmdBdHRlbXB0OiB7IGlkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH0gfCBudWxsO1xuXG4gIC8vIC0tLSBSZWFjdGl2ZSBzdGF0ZSAoc291cmNlIG9mIHRydXRoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0dXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0dXM+KCdsb2FkaW5nJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VzZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF0bGFzVXNlciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdGxhc1Nlc3Npb24gfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2xhaW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZXNzaW9uQ2xhaW1zIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lbWJlcnNoaXBzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXT4oW10pO1xuXG4gIC8qKiBUaGUgdGhyZWUtc3RhdGUgYXV0aCBsaWZlY3ljbGU6IGBsb2FkaW5nYCDihpIgYHNpZ25lZF9pbmAgfCBgc2lnbmVkX291dGAuICovXG4gIHJlYWRvbmx5IHN0YXR1cyQ6IE9ic2VydmFibGU8QXV0aFN0YXR1cz4gPSB0aGlzLl9zdGF0dXMuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IHVzZXIkOiBPYnNlcnZhYmxlPEF0bGFzVXNlciB8IG51bGw+ID0gdGhpcy5fdXNlci5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgc2Vzc2lvbiQ6IE9ic2VydmFibGU8QXRsYXNTZXNzaW9uIHwgbnVsbD4gPSB0aGlzLl9zZXNzaW9uLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBjbGFpbXMkOiBPYnNlcnZhYmxlPFNlc3Npb25DbGFpbXMgfCBudWxsPiA9IHRoaXMuX2NsYWltcy5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgbWVtYmVyc2hpcHMkOiBPYnNlcnZhYmxlPEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcFtdPiA9XG4gICAgdGhpcy5fbWVtYmVyc2hpcHMuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqXG4gICAqIFRydWUgb25jZSB0aGUgU0RLIGhhcyBmaW5pc2hlZCBpdHMgZmlyc3QgYm9vdC4gRGlzdGluZ3Vpc2hpbmcgXCJzdGlsbCBsb2FkaW5nXCJcbiAgICogZnJvbSBcInNpZ25lZCBvdXRcIiBpcyB3aGF0IGxldHMgYSB0ZW1wbGF0ZSBhdm9pZCB0aGUgZmxhc2ggb2YgYSBzaWduLWluIGZvcm1cbiAgICogb24gZXZlcnkgcGFnZSBsb2FkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNMb2FkZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zdGF0dXMkLnBpcGUoXG4gICAgbWFwKChzKSA9PiBzICE9PSAnbG9hZGluZycpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNTaWduZWRJbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnN0YXR1cyQucGlwZShcbiAgICBtYXAoKHMpID0+IHMgPT09ICdzaWduZWRfaW4nKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICApO1xuXG4gIC8qKiBUaGUgYWN0aXZlIG9yZ2FuaXphdGlvbiBtZW1iZXJzaGlwLCBkZXJpdmVkIGZyb20gdGhlIHRva2VuJ3MgYG9yZ19pZGAgY2xhaW0uICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbiQ6IE9ic2VydmFibGU8QXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwIHwgbnVsbD4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9tZW1iZXJzaGlwcyxcbiAgICB0aGlzLl9jbGFpbXMsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFttZW1iZXJzaGlwcywgY2xhaW1zXSkgPT5cbiAgICAgICAgbWVtYmVyc2hpcHMuZmluZCgobSkgPT4gbS5vcmdhbml6YXRpb24uaWQgPT09IGNsYWltcz8ub3JnX2lkKSA/PyBudWxsLFxuICAgICksXG4gICk7XG5cbiAgLy8gLS0tIFNpZ25hbCBtaXJyb3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHJlYWRvbmx5IHN0YXR1czogU2lnbmFsPEF1dGhTdGF0dXM+ID0gdG9TaWduYWwodGhpcy5zdGF0dXMkLCB7IGluaXRpYWxWYWx1ZTogJ2xvYWRpbmcnIH0pO1xuICByZWFkb25seSB1c2VyOiBTaWduYWw8QXRsYXNVc2VyIHwgbnVsbD4gPSB0b1NpZ25hbCh0aGlzLnVzZXIkLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgcmVhZG9ubHkgc2Vzc2lvbjogU2lnbmFsPEF0bGFzU2Vzc2lvbiB8IG51bGw+ID0gdG9TaWduYWwodGhpcy5zZXNzaW9uJCwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIHJlYWRvbmx5IGNsYWltczogU2lnbmFsPFNlc3Npb25DbGFpbXMgfCBudWxsPiA9IHRvU2lnbmFsKHRoaXMuY2xhaW1zJCwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIHJlYWRvbmx5IG1lbWJlcnNoaXBzOiBTaWduYWw8QXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwW10+ID0gdG9TaWduYWwodGhpcy5tZW1iZXJzaGlwcyQsIHtcbiAgICBpbml0aWFsVmFsdWU6IFtdIGFzIEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcFtdLFxuICB9KTtcbiAgcmVhZG9ubHkgaXNMb2FkZWQ6IFNpZ25hbDxib29sZWFuPiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdHVzKCkgIT09ICdsb2FkaW5nJyk7XG4gIHJlYWRvbmx5IGlzU2lnbmVkSW46IFNpZ25hbDxib29sZWFuPiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdHVzKCkgPT09ICdzaWduZWRfaW4nKTtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiBTaWduYWw8QXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwIHwgbnVsbD4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmNsYWltcygpPy5vcmdfaWQ7XG4gICAgcmV0dXJuIHRoaXMubWVtYmVyc2hpcHMoKS5maW5kKChtKSA9PiBtLm9yZ2FuaXphdGlvbi5pZCA9PT0gb3JnSWQpID8/IG51bGw7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdGhpcy5wdWJsaXNoYWJsZUtleSA9IG9wdGlvbnMucHVibGlzaGFibGVLZXk7XG4gICAgLy8gVGhyb3dzIGFuIGBBdGxhc0NvbmZpZ0Vycm9yYCBvbiBhIG1pc3NpbmcvaW52YWxpZCB2YWx1ZSByYXRoZXIgdGhhbiBxdWlldGx5XG4gICAgLy8gc2VuZGluZyBldmVyeSByZXF1ZXN0IHRvIGEgcmVsYXRpdmUgcGF0aCBvbiB0aGUgYXBwJ3Mgb3JpZ2luLlxuICAgIHRoaXMuYmFzZVVybCA9IHJlc29sdmVGcm9udGVuZEFwaShvcHRpb25zLmZyb250ZW5kQXBpLCB7XG4gICAgICBjb21wb25lbnQ6ICdwcm92aWRlQXRsYXMoKSAvIEF0bGFzTW9kdWxlLmZvclJvb3QoKScsXG4gICAgfSk7XG4gICAgdGhpcy5kb0ZldGNoID0gb3B0aW9ucy5mZXRjaEltcGwgPz8gKCguLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBmZXRjaD4pID0+IGZldGNoKC4uLmFyZ3MpKTtcblxuICAgIHRoaXMuY2F0YWxvZyA9IG9wdGlvbnMubG9jYWxpemF0aW9uID8gd2l0aEZhbGxiYWNrKG9wdGlvbnMubG9jYWxpemF0aW9uKSA6IEVOX1VTO1xuXG4gICAgdGhpcy5mYXBpQ2xpZW50ID0gbmV3IEZhcGlDbGllbnQoe1xuICAgICAgcHVibGlzaGFibGVLZXk6IHRoaXMucHVibGlzaGFibGVLZXksXG4gICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICBmZXRjaEltcGw6IHRoaXMuZG9GZXRjaCxcbiAgICB9KTtcblxuICAgIHRoaXMuZ3VhcmQgPSBuZXcgU2lnbk91dEd1YXJkKHtcbiAgICAgIHJlcXVlc3Q6IChwYXRoLCBpbml0KSA9PiB0aGlzLmNhbGwocGF0aCwgaW5pdCksXG4gICAgICBmcm9udGVuZEFwaTogdGhpcy5iYXNlVXJsLFxuICAgIH0pO1xuXG4gICAgLy8gQ2FwdHVyZWQgc3luY2hyb25vdXNseSAobm90IGluIGFuIGFzeW5jIGluaXQpIHNvIGl0IGlzIGF2YWlsYWJsZSBiZWZvcmUgYW55XG4gICAgLy8gZmxvdyBjb21wb25lbnQgcmVhZHMgaXQ6IGEgbmVlZHNfc2Vjb25kX2ZhY3RvciByZWRpcmVjdCBjYXJyaWVzIGEgc3RhdHVzIGJ1dFxuICAgIC8vIG5vIHRpY2tldCwgYW5kIHRoYXQgaXMgd2hhdCB0aGUgMkZBIHJlc3VtZSBzZWVkcyBmcm9tLlxuICAgIHRoaXMucGVuZGluZ0F0dGVtcHQgPSB0aGlzLmlzQnJvd3NlciA/IHRoaXMucmVhZFBlbmRpbmdBdHRlbXB0KCkgOiBudWxsO1xuXG4gICAgLy8gQm9vdCBvbmNlLCBicm93c2VyIG9ubHkuIE9uIHRoZSBzZXJ2ZXIgdGhlcmUgaXMgbm8gY29va2llIGphciB0byByZWFkIGFcbiAgICAvLyBzZXNzaW9uIGZyb20sIHNvIHdlIGxlYXZlIHRoZSBzdGF0ZSBhdCBgbG9hZGluZ2AgYW5kIGxldCBoeWRyYXRpb24gYm9vdCBpdC5cbiAgICBpZiAodGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgIC8vIEFub3RoZXIgdGFiIHNpZ25lZCBvdXQgb2YgVEhJUyBzZXNzaW9uIChpdHMgdG9tYnN0b25lIHJlYWNoZWQgdGhlIHNoYXJlZFxuICAgICAgLy8gc3RvcmUpOiBkcm9wIHRoZSB0b2tlbiBhbmQgcmUtY2hlY2ssIHdoaWNoIHRoZW4gcmVmdXNlcyB0aGUgc2Vzc2lvbi5cbiAgICAgIHRoaXMuc3RvcFdhdGNoaW5nU2lnbk91dCA9IHRoaXMuZ3VhcmQud2F0Y2goXG4gICAgICAgICgpID0+IHRoaXMuY2FjaGUucGVlaygpPy5zZXNzaW9uSWQgPz8gdGhpcy5fc2Vzc2lvbi52YWx1ZT8uaWQsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgICAgICAgdm9pZCB0aGlzLnJlbG9hZCgpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHZvaWQgdGhpcy5ib290KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wV2F0Y2hpbmdTaWduT3V0Py4oKTtcbiAgICB0aGlzLnN0b3BXYXRjaGluZ1NpZ25PdXQgPSBudWxsO1xuICAgIHRoaXMuZ3VhcmQuZGlzcG9zZSgpO1xuICAgIHRoaXMuY2xlYXJSZWZyZXNoVGltZXIoKTtcbiAgICB0aGlzLl9zdGF0dXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl91c2VyLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2Vzc2lvbi5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2NsYWltcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX21lbWJlcnNoaXBzLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvLyAtLS0gQ29uZmlndXJhdGlvbiBhY2Nlc3NvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgZ2V0IGFwcGVhcmFuY2UoKTogQXBwZWFyYW5jZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hcHBlYXJhbmNlO1xuICB9XG5cbiAgZ2V0IGxvY2FsaXphdGlvbigpOiBDYXRhbG9nIHtcbiAgICByZXR1cm4gdGhpcy5jYXRhbG9nO1xuICB9XG5cbiAgZ2V0IGZyb250ZW5kQXBpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVVybDtcbiAgfVxuXG4gIC8qKiBUb2tlbnMgYXMgQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzLCBmb3IgYSBob3N0IGVsZW1lbnQgdG8gaW5oZXJpdC4gKi9cbiAgYXBwZWFyYW5jZVZhcmlhYmxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gY3NzVmFyaWFibGVzKHJlc29sdmVUb2tlbnModGhpcy5vcHRpb25zLmFwcGVhcmFuY2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZnVsbCBhcHBlYXJhbmNlIHJlbmRlciBmb3IgYSByb290IGVsZW1lbnQ6IGlubGluZSB2YXJpYWJsZXMsIHRoZVxuICAgKiBgZGF0YS1hdGxhcy0qYCBhdHRyaWJ1dGVzIGFuZCB0aGUgZGVzaWduIHN0eWxlc2hlZXQuIFBhc3MgdGhlIGRhc2hib2FyZFxuICAgKiBkZXNpZ24gKGZyb20ge0BsaW5rIGxvYWRJbnN0YW5jZURlc2lnbn0pIHRvIGxheWVyIGNvZGUgb3ZlcnJpZGVzIG9uIGl0IOKAlFxuICAgKiB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgYEBhdGxhc2F1dGgvcmVhY3RgLlxuICAgKi9cbiAgYXBwZWFyYW5jZVJlbmRlcihpbnN0YW5jZURlc2lnbj86IEluc3RhbmNlRGVzaWduIHwgbnVsbCk6IEFwcGVhcmFuY2VSZW5kZXIge1xuICAgIHJldHVybiByZW5kZXJBcHBlYXJhbmNlKHRoaXMub3B0aW9ucy5hcHBlYXJhbmNlLCBpbnN0YW5jZURlc2lnbiA/PyBudWxsLCB7XG4gICAgICBmcm9udGVuZEFwaTogdGhpcy5iYXNlVXJsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNpZ24gY29uZmlndXJlZCBpbiB0aGUgQXRsYXMgZGFzaGJvYXJkIChgR0VUIC92MS9hcHBlYXJhbmNlYCksIG9yIG51bGxcbiAgICogd2hlbiB0aGVyZSBpcyBub25lLCBpdCBjYW5ub3QgYmUgcmVhZCwgb3IgdGhlIGFwcCBvcHRlZCBvdXQgd2l0aFxuICAgKiBgYXBwZWFyYW5jZS5pbnN0YW5jZURlc2lnbjogZmFsc2VgLlxuICAgKi9cbiAgYXN5bmMgbG9hZEluc3RhbmNlRGVzaWduKCk6IFByb21pc2U8SW5zdGFuY2VEZXNpZ24gfCBudWxsPiB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcHBlYXJhbmNlPy5pbnN0YW5jZURlc2lnbiA9PT0gZmFsc2UpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbCgnL3YxL2FwcGVhcmFuY2UnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5vayA/IGluc3RhbmNlRGVzaWduRnJvbShhd2FpdCByZXNwb25zZS5qc29uKCkpIDogbnVsbDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBIGZyZXNoIHtAbGluayBGYXBpQ2xpZW50fSBmb3IgZHJpdmluZyBhIHNpZ24taW4vc2lnbi11cCBmbG93LiAqL1xuICBjcmVhdGVGYXBpQ2xpZW50KCk6IEZhcGlDbGllbnQge1xuICAgIHJldHVybiBuZXcgRmFwaUNsaWVudCh7IHB1Ymxpc2hhYmxlS2V5OiB0aGlzLnB1Ymxpc2hhYmxlS2V5LCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfSk7XG4gIH1cblxuICAvLyAtLS0gSW1wZXJhdGl2ZSBBUEkgKG1pcnJvcnMgdGhlIFJlYWN0IGhvb2tzJyBhY3Rpb25zKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHNlc3Npb24ncyBKV1QsIGFsd2F5cyBmcmVzaDogaWYgdGhlIGNhY2hlZCB0b2tlbiBpcyB3aXRoaW4gNXMgb2ZcbiAgICogZXhwaXJ5IGl0IGlzIHJlZnJlc2hlZCBmaXJzdCByYXRoZXIgdGhhbiBoYW5kZWQgb3Zlci4gTnVsbCB3aGVuIHNpZ25lZCBvdXQuXG4gICAqL1xuICBhc3luYyBnZXRUb2tlbigpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCB1c2FibGUgPSB0aGlzLmNhY2hlLmdldCg1XzAwMCk7XG4gICAgaWYgKHVzYWJsZSkgcmV0dXJuIHVzYWJsZS5qd3Q7XG5cbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQoNV8wMDApPy5qd3QgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2lnbmVkLWluIHVzZXIncyBPV04gbGl2ZSBhY2Nlc3MgdG9rZW4gYXQgYSBjb25uZWN0ZWQgcHJvdmlkZXIgKEdvb2dsZSxcbiAgICogR2l0SHViLCDigKYpLCBzbyB0aGUgYXBwIGNhbiBjYWxsIHRoYXQgcHJvdmlkZXIncyBBUEkgZnJvbSB0aGUgYnJvd3Nlci4gTnVsbFxuICAgKiB3aGVuIHRoZXJlIGlzIG5vIHVzYWJsZSB0b2tlbiDigJQgbm8gbGlua2VkIGFjY291bnQsIG9yIHRoZSBwcm92aWRlciBncmFudGVkIC9cbiAgICoga2VwdCBub25lLiBUaGUgc2VydmVyIHJlZnJlc2hlcyBhIHN0YWxlIHRva2VuIG9uIHJlYWQ7IHRoZSByZWZyZXNoIHRva2VuIGlzXG4gICAqIG5ldmVyIGV4cG9zZWQuXG4gICAqL1xuICBnZXRQcm92aWRlclRva2VuKHByb3ZpZGVyOiBzdHJpbmcpOiBQcm9taXNlPFByb3ZpZGVyVG9rZW4gfCBudWxsPiB7XG4gICAgcmV0dXJuIGZldGNoUHJvdmlkZXJUb2tlbih0aGlzLmZhcGlDbGllbnQsIHByb3ZpZGVyKTtcbiAgfVxuXG4gIC8qKiBJbXBlcmF0aXZlIGBoYXMoKWAg4oCUIHRoZSBzYW1lIGV2YWx1YXRpb24gYCphdGxhc1Byb3RlY3RgIHJlbmRlcnMgb24uICovXG4gIGhhcyhjb25kaXRpb246IFByb3RlY3RDb25kaXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gZXZhbHVhdGUodGhpcy5fY2xhaW1zLnZhbHVlLCBjb25kaXRpb24pLmFsbG93ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlIHRoZSBjdXJyZW50IHNlc3Npb24gc2VydmVyLXNpZGUgYW5kIGRyb3AgYWxsIGxvY2FsIGF1dGggc3RhdGUuXG4gICAqXG4gICAqIFRoZSBzZXNzaW9uIGlkIGlzIHJlbWVtYmVyZWQgYmVmb3JlIHRoZSByZXZva2UgKGEgdG9tYnN0b25lIHNoYXJlZCBieSBldmVyeVxuICAgKiB0YWIpLCBzbyBhIHJlbG9hZCwgYSB0b2tlbiByZWZyZXNoLCBhIHNpYmxpbmcgdGFiIG9yIGEgdGFiIG9wZW5lZCBsYXRlciBuZXZlclxuICAgKiByZS1hZG9wdHMgaXQg4oCUIGV2ZW4gd2hlbiB0aGUgcmV2b2tlIGZhaWxlZCAoaXQgaXMgcmV0cmllZCBvbmNlLCB0aGVuIGFnYWluIGluXG4gICAqIHRoZSBiYWNrZ3JvdW5kKSBhbmQgdGhlIHJlZnJlc2ggY29va2llIGlzIHN0aWxsIHZhbGlkLiBSZXNvbHZlc1xuICAgKiBgeyByZXZva2VkLCBhY3RpdmVTZXNzaW9uSWQ/IH1gOyB3aXRoIGB7IHN0cmljdDogdHJ1ZSB9YCBhbiB1bmNvbmZpcm1lZCByZXZva2VcbiAgICogcmVqZWN0cyB3aXRoIGEgYFNpZ25PdXRFcnJvcmAgaW5zdGVhZCAoYWZ0ZXIgdGhlIGxvY2FsIHNpZ24tb3V0KS4gQSBwYXJrZWRcbiAgICogc2Vzc2lvbiB0aGUgc2VydmVyIHByb21vdGVkIG9uIHJldm9rZSBpcyBhZG9wdGVkLiBGcm9udC1jaGFubmVsIGxvZ291dCBydW5zXG4gICAqIHVubGVzcyBgeyBmcm9udGNoYW5uZWw6IGZhbHNlIH1gLlxuICAgKi9cbiAgYXN5bmMgc2lnbk91dChvcHRpb25zOiBTaWduT3V0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxTaWduT3V0UmVzdWx0PiB7XG4gICAgLy8gV2l0aCBubyBjYWNoZWQgdG9rZW4gdGhlIGd1YXJkIGZpbmRzIHRoZSBjb29raWUgc2Vzc2lvbiBpdHNlbGZcbiAgICAvLyAoR0VUIC92MS9jbGllbnQpLCBzbyBhIG1pc3NpbmcgSldUIG5ldmVyIHNraXBzIHRoZSByZXZva2UuXG4gICAgY29uc3Qgc2Vzc2lvbklkID0gdGhpcy5jYWNoZS5wZWVrKCk/LnNlc3Npb25JZCA/PyB0aGlzLl9zZXNzaW9uLnZhbHVlPy5pZCA/PyBudWxsO1xuICAgIGNvbnN0IGF0dGVtcHQgPSBhd2FpdCB0aGlzLmd1YXJkLnJldm9rZShzZXNzaW9uSWQsIG9wdGlvbnMpO1xuICAgIHRoaXMuY2xlYXJMb2NhbFN0YXRlKCk7XG4gICAgaWYgKHRoaXMuZ3VhcmQucHJvbW90ZWQoYXR0ZW1wdCkpIGF3YWl0IHRoaXMucmVsb2FkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ3VhcmQuc2V0dGxlKGF0dGVtcHQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN3aXRjaCB0aGUgYWN0aXZlIG9yZ2FuaXphdGlvbiAob3IgYG51bGxgIGZvciB0aGUgcGVyc29uYWwgYWNjb3VudCkuIFRoZVxuICAgKiBuZXcgdG9rZW4gY2FycmllcyB0aGUgbmV3IG9yZyBjbGFpbXMsIHNvIHRoZSBhcHAncyBwZXJtaXNzaW9uIGNoZWNrcyB1cGRhdGVcbiAgICogd2l0aG91dCBhIHJlLWxvZ2luLlxuICAgKi9cbiAgYXN5bmMgc2V0QWN0aXZlT3JnYW5pemF0aW9uKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY2FjaGUucGVlaygpO1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGwoYC92MS9jbGllbnQvc2Vzc2lvbnMvJHtjdXJyZW50LnNlc3Npb25JZH0vdG91Y2hgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aXZlX29yZ2FuaXphdGlvbl9pZDogb3JnYW5pemF0aW9uSWQgfSksXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykgcmV0dXJuO1xuXG4gICAgY29uc3QgYm9keSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHsgand0OiBzdHJpbmcgfTtcbiAgICB0aGlzLmFwcGx5VG9rZW4oYm9keS5qd3QsIGN1cnJlbnQuc2Vzc2lvbklkKTtcbiAgICBhd2FpdCB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgLyoqIFJlLXJlYWQgYC92MS9jbGllbnRgOiByZWZyZXNoIHVzZXIsIHNlc3Npb24sIG1lbWJlcnNoaXBzIGFuZCBzdGF0dXMuICovXG4gIGFzeW5jIHJlbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGwoJy92MS9jbGllbnQnKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcignYm9vdCBmYWlsZWQnKTtcblxuICAgICAgY29uc3QgYm9keSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgICAgc2Vzc2lvbjogQXRsYXNTZXNzaW9uIHwgbnVsbDtcbiAgICAgICAgdXNlcjogQXRsYXNVc2VyIHwgbnVsbDtcbiAgICAgICAgand0Pzogc3RyaW5nO1xuICAgICAgICBvcmdhbml6YXRpb25fbWVtYmVyc2hpcHM/OiBBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEEgc2Vzc2lvbiB0aGlzIGJyb3dzZXIgc2lnbmVkIG91dCBvZiBpcyBuZXZlciByZS1hZG9wdGVkIGZyb20gdGhlXG4gICAgICAvLyByZWZyZXNoIGNvb2tpZTsgdGhlIGd1YXJkIHJlLXRyaWVzIGl0cyByZXZva2UgaW4gdGhlIGJhY2tncm91bmQuXG4gICAgICBpZiAoIWJvZHkuc2Vzc2lvbiB8fCAhYm9keS51c2VyIHx8IHRoaXMuZ3VhcmQucmVmdXNlKGJvZHkuc2Vzc2lvbi5pZCkpIHtcbiAgICAgICAgdGhpcy5jbGVhckxvY2FsU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl91c2VyLm5leHQoYm9keS51c2VyKTtcbiAgICAgIHRoaXMuX3Nlc3Npb24ubmV4dChib2R5LnNlc3Npb24pO1xuICAgICAgdGhpcy5fbWVtYmVyc2hpcHMubmV4dChib2R5Lm9yZ2FuaXphdGlvbl9tZW1iZXJzaGlwcyA/PyBbXSk7XG4gICAgICBpZiAoYm9keS5qd3QpIHRoaXMuYXBwbHlUb2tlbihib2R5Lmp3dCwgYm9keS5zZXNzaW9uLmlkKTtcbiAgICAgIHRoaXMuX3N0YXR1cy5uZXh0KCdzaWduZWRfaW4nKTtcbiAgICAgIHRoaXMuc2NoZWR1bGVSZWZyZXNoKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBBIGZhaWxlZCBib290IGlzIE5PVCBzaWduZWQtb3V0LiBSZW5kZXJpbmcgYSBzaWduLWluIGZvcm0gYmVjYXVzZSB0aGVcbiAgICAgIC8vIG5ldHdvcmsgaGljY3VwZWQgdGhyb3dzIGF3YXkgYSBwZXJmZWN0bHkgZ29vZCBzZXNzaW9uIGFuZCBmb3JjZXMgYVxuICAgICAgLy8gbmVlZGxlc3MgcmUtYXV0aGVudGljYXRpb24uIE9ubHkgcHJvbW90ZSBsb2FkaW5nIOKGkiBzaWduZWRfb3V0LlxuICAgICAgaWYgKHRoaXMuX3N0YXR1cy52YWx1ZSA9PT0gJ2xvYWRpbmcnKSB0aGlzLl9zdGF0dXMubmV4dCgnc2lnbmVkX291dCcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBJbnRlcm5hbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogwqc2LjMgc3RlcCAzOiBjb21wbGV0ZSBhIHJlZGlyZWN0LWJhc2VkIHNpZ24taW4sIHRoZW4gYm9vdC4gQW4gT0F1dGggb3JcbiAgICogaG9zdGVkLXBhZ2UgZmxvdyBsYW5kcyBiYWNrIHdpdGggYSBvbmUtdGltZSB0aWNrZXQgaW4gdGhlIFVSTDsgZXhjaGFuZ2UgaXRcbiAgICogZm9yIGNvb2tpZXMsIHNjcnViIHRoZSBVUkwgc28gYSByZWxvYWQgY2Fubm90IHJlcGxheSBpdCwgVEhFTiByZWFkIHRoZVxuICAgKiBzZXNzaW9uLiBBIHJlZGlyZWN0IGNhcnJ5aW5nIG9ubHkgYSBzdGF0dXMgKGEgc2Vjb25kIGZhY3RvciBpcyBzdGlsbCBvd2VkKVxuICAgKiBoYXMgbm8gdGlja2V0LCBzbyBub3RoaW5nIGlzIGV4Y2hhbmdlZCBhbmQgdGhlIGFwcCBib290cyBzaWduZWQtb3V0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBib290KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZyb21VcmwgPSByZWFkUmVkaXJlY3RSZXN1bHQod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgbGV0IHJlc3VsdDogUmVkaXJlY3RSZXN1bHQgfCBudWxsID0gZnJvbVVybDtcblxuICAgIC8vIMKnb2F1dGggcG9wdXAgbW9kZTogdGhpcyBwYWdlIG1heSBiZSB0aGUgbGFuZGluZyBvZiBhIHNpZ24taW4gcG9wdXAgd2hvc2VcbiAgICAvLyBvcGVuZXIgYSBDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSBzZXZlcmVkIChgI2F0bGFzX3BvcHVwX3Jlc3VsdD3igKZgKS5cbiAgICAvLyBUaGUgcmVzdWx0IGlzIHJlbGF5ZWQgdG8gdGhlIG9wZW5lciwgd2hpY2ggcmVkZWVtcyB0aGUgdGlja2V0LCBhbmQgdGhpc1xuICAgIC8vIHdpbmRvdyBjbG9zZXMuIElmIG5vIG9wZW5lciB0YWtlcyBpdCAoaXRzIHRhYiBpcyBnb25lKSwgZmluaXNoIGhlcmUgbGlrZVxuICAgIC8vIGEgcmVkaXJlY3QuXG4gICAgY29uc3QgbGFuZGluZyA9IGF3YWl0IGNvbXBsZXRlT0F1dGhQb3B1cExhbmRpbmcoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICBpZiAobGFuZGluZyAmJiAhbGFuZGluZy5kZWxpdmVyZWQpIHtcbiAgICAgIGNvbnN0IG91dGNvbWUgPSBtYXBPQXV0aFBvcHVwUGF5bG9hZChsYW5kaW5nLnBheWxvYWQpO1xuICAgICAgaWYgKG91dGNvbWU/LnRpY2tldCAmJiBvdXRjb21lLmF0dGVtcHRJZCkge1xuICAgICAgICByZXN1bHQgPSB7IGF0dGVtcHRJZDogb3V0Y29tZS5hdHRlbXB0SWQsIHRpY2tldDogb3V0Y29tZS50aWNrZXQgfTtcbiAgICAgIH0gZWxzZSBpZiAob3V0Y29tZT8uY29udGludWF0aW9uVXJsKSB7XG4gICAgICAgIC8vIEEgc2Vjb25kIGZhY3RvciAvIGNvbm5lY3Qgc3RlcCAvIHByb3ZpZGVyIGVycm9yOiB0aGUgcmVkaXJlY3QgZmxvdydzIHBhZ2UuXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKG91dGNvbWUuY29udGludWF0aW9uVXJsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBleGNoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAocmVzdWx0Py50aWNrZXQpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKCcvdjEvY2xpZW50L3RpY2tldHMvZXhjaGFuZ2UnLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGF0dGVtcHRfaWQ6IHJlc3VsdC5hdHRlbXB0SWQsIHRpY2tldDogcmVzdWx0LnRpY2tldCB9KSxcbiAgICAgIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICBleGNoYW5nZWQgPSAhIXJlc3BvbnNlPy5vaztcbiAgICB9XG4gICAgaWYgKGZyb21VcmwpIHtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgZG9jdW1lbnQudGl0bGUsIHN0cmlwUmVkaXJlY3RQYXJhbXMod2luZG93LmxvY2F0aW9uLmhyZWYpKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZWxvYWQoKTtcbiAgICAvLyBTaWduZWQgaW4gaW5zaWRlIHRoZSBBdGxhcyBwb3B1cCAodGhlIHJlZGlyZWN0IGZsb3cgcmFuIGluIGl0KTogaGFuZCBiYWNrXG4gICAgLy8gdG8gdGhlIHdhaXRpbmcgb3BlbmVyIGFuZCBjbG9zZS4gQSBuby1vcCBpbiBhbiBvcmRpbmFyeSB0YWIuXG4gICAgaWYgKGV4Y2hhbmdlZCkgdm9pZCBjbG9zZU9BdXRoUG9wdXBBZnRlclNpZ25JbigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkUGVuZGluZ0F0dGVtcHQoKTogeyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9IHwgbnVsbCB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmVhZFJlZGlyZWN0UmVzdWx0KHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIHJldHVybiByZXN1bHQ/LnN0YXR1cyAmJiAhcmVzdWx0LnRpY2tldFxuICAgICAgPyB7IGlkOiByZXN1bHQuYXR0ZW1wdElkLCBzdGF0dXM6IHJlc3VsdC5zdGF0dXMgfVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsKHBhdGg6IHN0cmluZywgaW5pdD86IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmRvRmV0Y2goYCR7dGhpcy5iYXNlVXJsfSR7cGF0aH1gLCB7XG4gICAgICAuLi5pbml0LFxuICAgICAgLy8gQ29va2llcyBjYXJyeSB0aGUgc2Vzc2lvbjsgYSByZXF1ZXN0IHdpdGhvdXQgdGhpcyBpcyBpbmRpc3Rpbmd1aXNoYWJsZVxuICAgICAgLy8gZnJvbSBiZWluZyBzaWduZWQgb3V0LlxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ3gtcHVibGlzaGFibGUta2V5JzogdGhpcy5wdWJsaXNoYWJsZUtleSxcbiAgICAgICAgLi4uKGluaXQ/LmJvZHkgPyB7ICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSA6IHt9KSxcbiAgICAgICAgLi4uaW5pdD8uaGVhZGVycyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VG9rZW4oand0OiBzdHJpbmcsIHNlc3Npb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gQW4gaW4tZmxpZ2h0IHJlZnJlc2ggbXVzdCBub3QgcmVzdXJyZWN0IGEgc2Vzc2lvbiBzaWduZWQgb3V0IG1lYW53aGlsZS5cbiAgICBpZiAodGhpcy5ndWFyZC5pc1NpZ25lZE91dChzZXNzaW9uSWQpKSByZXR1cm47XG4gICAgY29uc3QgZXhwaXJlc0F0ID0gcmVhZEV4cGlyeShqd3QpO1xuICAgIGlmICghZXhwaXJlc0F0KSByZXR1cm47XG5cbiAgICB0aGlzLmNhY2hlLnNldCh7IGp3dCwgZXhwaXJlc0F0LCBzZXNzaW9uSWQgfSk7XG4gICAgdGhpcy5fY2xhaW1zLm5leHQoZGVjb2RlQ2xhaW1zKGp3dCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmNhY2hlLnBlZWsoKTtcbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbChgL3YxL2NsaWVudC9zZXNzaW9ucy8ke2N1cnJlbnQuc2Vzc2lvbklkfS90b2tlbnNgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IoJ3JlZnJlc2ggZmFpbGVkJyk7XG5cbiAgICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IGp3dDogc3RyaW5nOyBzZXNzaW9uX2lkOiBzdHJpbmcgfTtcbiAgICAgIHRoaXMuYXBwbHlUb2tlbihib2R5Lmp3dCwgYm9keS5zZXNzaW9uX2lkKTtcbiAgICAgIHRoaXMuc2NoZWR1bGVSZWZyZXNoKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBUaGUgc2Vzc2lvbiBtYXkgZ2VudWluZWx5IGJlIGdvbmUuIFJlLWJvb3QgcmF0aGVyIHRoYW4gZ3Vlc3MuXG4gICAgICBhd2FpdCB0aGlzLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJMb2NhbFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJSZWZyZXNoVGltZXIoKTtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5fc3RhdHVzLm5leHQoJ3NpZ25lZF9vdXQnKTtcbiAgICB0aGlzLl91c2VyLm5leHQobnVsbCk7XG4gICAgdGhpcy5fc2Vzc2lvbi5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2NsYWltcy5uZXh0KG51bGwpO1xuICAgIHRoaXMuX21lbWJlcnNoaXBzLm5leHQoW10pO1xuICB9XG5cbiAgLyoqIMKnNy40OiBwcm9hY3RpdmUsIGppdHRlcmVkIHJlZnJlc2ggc2NoZWR1bGVkIGZyb20gdGhlIHRva2VuJ3Mgb3duIGV4cGlyeS4gKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZVJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclJlZnJlc2hUaW1lcigpO1xuICAgIGlmICh0aGlzLl9zdGF0dXMudmFsdWUgIT09ICdzaWduZWRfaW4nKSByZXR1cm47XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuY2FjaGUucGVlaygpO1xuICAgIGlmICghdG9rZW4pIHJldHVybjtcblxuICAgIGNvbnN0IGRlbGF5ID0gbXNVbnRpbFJlZnJlc2goeyB0b2tlbiwgbm93OiBEYXRlLm5vdygpIH0pO1xuICAgIHRoaXMucmVmcmVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMucmVmcmVzaCgpLCBkZWxheSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyUmVmcmVzaFRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlZnJlc2hUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaFRpbWVyKTtcbiAgICAgIHRoaXMucmVmcmVzaFRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLyoqIERlY29kZSBhIEpXVCBwYXlsb2FkIHdpdGhvdXQgdmVyaWZ5aW5nIGl0IOKAlCBhIHNjaGVkdWxpbmcvVUkgaGludCBvbmx5LiAqL1xuZnVuY3Rpb24gZGVjb2RlQ2xhaW1zKGp3dDogc3RyaW5nKTogU2Vzc2lvbkNsYWltcyB8IG51bGwge1xuICBjb25zdCBwYXJ0cyA9IGp3dC5zcGxpdCgnLicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShcbiAgICAgIGF0b2IocGFydHNbMV0hLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJykpLFxuICAgICkgYXMgU2Vzc2lvbkNsYWltcztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
|
|
446
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRsYXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXRsYXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUVWLFdBQVcsRUFFWCxRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUNMLFVBQVUsRUFDVixZQUFZLEVBQ1osYUFBYSxFQUNiLHFCQUFxQixFQUVyQixVQUFVLEVBQ1YsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QixnQkFBZ0IsSUFBSSxrQkFBa0IsRUFDdEMsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixtQkFBbUIsR0FLcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBeUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGFBQWEsR0FJZCxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBZ0IsTUFBTSxRQUFRLENBQUM7O0FBUzNEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILE1BQU0sT0FBTyxZQUFZO0lBQ04sT0FBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FB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R0FBWixZQUFZLGNBREMsTUFBTTs7NEZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQTZjbEMsNkVBQTZFO0FBQzdFLFNBQVMsWUFBWSxDQUFDLEdBQVc7SUFDL0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3BDLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FDZixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUNyQyxDQUFDO0lBQ3JCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZSxcbiAgT25EZXN0cm95LFxuICBQTEFURk9STV9JRCxcbiAgU2lnbmFsLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRmFwaUNsaWVudCxcbiAgU2lnbk91dEd1YXJkLFxuICBjYXRhbG9nTG9jYWxlLFxuICBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UsXG4gIHR5cGUgRXJyb3JMaWtlLFxuICBUb2tlbkNhY2hlLFxuICBjbG9zZU9BdXRoUG9wdXBBZnRlclNpZ25JbixcbiAgY29tcGxldGVPQXV0aFBvcHVwTGFuZGluZyxcbiAgZ2V0UHJvdmlkZXJUb2tlbiBhcyBmZXRjaFByb3ZpZGVyVG9rZW4sXG4gIG1hcE9BdXRoUG9wdXBQYXlsb2FkLFxuICBtc1VudGlsUmVmcmVzaCxcbiAgcmVhZEV4cGlyeSxcbiAgcmVhZFJlZGlyZWN0UmVzdWx0LFxuICByZXNvbHZlRnJvbnRlbmRBcGksXG4gIHN0cmlwUmVkaXJlY3RQYXJhbXMsXG4gIHR5cGUgUHJvdmlkZXJUb2tlbixcbiAgdHlwZSBSZWRpcmVjdFJlc3VsdCxcbiAgdHlwZSBTaWduT3V0T3B0aW9ucyxcbiAgdHlwZSBTaWduT3V0UmVzdWx0LFxufSBmcm9tICdAYXRsYXNhdXRoL2pzJztcbmltcG9ydCB7IGV2YWx1YXRlLCB0eXBlIFByb3RlY3RDb25kaXRpb24gfSBmcm9tICdAYXRsYXNhdXRoL2F1dGh6JztcbmltcG9ydCB7IEFUTEFTX09QVElPTlMgfSBmcm9tICcuL2F0bGFzLmNvbmZpZyc7XG5pbXBvcnQge1xuICBjc3NWYXJpYWJsZXMsXG4gIGluc3RhbmNlRGVzaWduRnJvbSxcbiAgcmVuZGVyQXBwZWFyYW5jZSxcbiAgcmVzb2x2ZVRva2VucyxcbiAgdHlwZSBBcHBlYXJhbmNlLFxuICB0eXBlIEFwcGVhcmFuY2VSZW5kZXIsXG4gIHR5cGUgSW5zdGFuY2VEZXNpZ24sXG59IGZyb20gJy4vYXBwZWFyYW5jZSc7XG5pbXBvcnQgeyBFTl9VUywgd2l0aEZhbGxiYWNrLCB0eXBlIENhdGFsb2cgfSBmcm9tICcuL2kxOG4nO1xuaW1wb3J0IHR5cGUge1xuICBBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXAsXG4gIEF0bGFzU2Vzc2lvbixcbiAgQXRsYXNVc2VyLFxuICBBdXRoU3RhdHVzLFxuICBTZXNzaW9uQ2xhaW1zLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBgQXRsYXNTZXJ2aWNlYCDigJQgdGhlIEFuZ3VsYXIgcGVlciBvZiBSZWFjdCdzIGA8QXRsYXNQcm92aWRlcj5gICsgaG9va3MuXG4gKlxuICogSXQgaG9sZHMgZXhhY3RseSBvbmUgdGhpbmcgdGhhdCBtYXR0ZXJzIGluIG1lbW9yeTogdGhlIHNob3J0LWxpdmVkIEpXVCwgaW4gYVxuICoge0BsaW5rIFRva2VuQ2FjaGV9LiBOb3QgbG9jYWxTdG9yYWdlLCBub3QgYSBjb29raWUgdGhpcyBjb2RlIHdyaXRlcyDigJQgdGhlXG4gKiByZWZyZXNoIHRva2VuIGlzIEh0dHBPbmx5IHNvIGJyb3dzZXIgc2NyaXB0IG5ldmVyIHRvdWNoZXMgaXQsIGFuZCB0aGUgSldUXG4gKiBsaXZlcyBvbmx5IGFzIGxvbmcgYXMgdGhlIHRhYi4gQW55dGhpbmcgcGVyc2lzdGVkIHdvdWxkIHN1cnZpdmUgdGhlIHRhYiBhbmRcbiAqIGJlY29tZSB0aGUgZmlyc3QgdGhpbmcgYW4gWFNTIHJlYWRzLlxuICpcbiAqIFJlYWN0aXZlIGF1dGggc3RhdGUgaXMgZXhwb3NlZCB0d28gd2F5cyBzbyBjYWxsZXJzIGNhbiBwaWNrIHRoZWlyIGlkaW9tOlxuICogIC0gUnhKUyBvYnNlcnZhYmxlcyAoYHVzZXIkYCwgYHNlc3Npb24kYCwgYGlzU2lnbmVkSW4kYCwg4oCmKSDigJQgdGhlIHByaW1hcnkgQVBJLFxuICogICAgdGhlIGFuYWxvZ3VlIG9mIHRoZSBSZWFjdCBob29rcycgcmV0dXJuIHZhbHVlcy5cbiAqICAtIEFuZ3VsYXIgc2lnbmFscyAoYHVzZXJgLCBgc2Vzc2lvbmAsIGBpc1NpZ25lZEluYCwg4oCmKSDigJQgdGhlIHNhbWUgdmFsdWVzIGFzXG4gKiAgICBgU2lnbmFsPFQ+YCwgZm9yIHRlbXBsYXRlcyBhbmQgYGNvbXB1dGVkKClgLlxuICpcbiAqIFRoZSBpbXBlcmF0aXZlIG1ldGhvZHMgKGBzaWduT3V0YCwgYGdldFRva2VuYCwgYGdldFByb3ZpZGVyVG9rZW5gLFxuICogYHNldEFjdGl2ZU9yZ2FuaXphdGlvbmAsIGByZWxvYWRgKSBtaXJyb3IgdGhlIGFjdGlvbnMgdGhlIGhvb2tzIHJldHVybi5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdGxhc1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnMgPSBpbmplY3QoQVRMQVNfT1BUSU9OUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNCcm93c2VyID0gaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwdWJsaXNoYWJsZUtleTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvRmV0Y2g6IHR5cGVvZiBmZXRjaDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IFRva2VuQ2FjaGUoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmYXBpQ2xpZW50OiBGYXBpQ2xpZW50O1xuICBwcml2YXRlIHJlZnJlc2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhlIHNlc3Npb25zIHRoaXMgYnJvd3NlciBzaWduZWQgb3V0IG9mICh0b21ic3RvbmVzIGluIGxvY2FsU3RvcmFnZSwgcGVyXG4gICAqIEZyb250ZW5kIEFQSSBvcmlnaW4pLCB0aGUgcmV2b2tlIGFuZCBpdHMgYmFja2dyb3VuZCByZS10cmllcy4gRXZlcnkgcmVsb2FkIC9cbiAgICogcmVmcmVzaCBhc2tzIGl0IGJlZm9yZSBhZG9wdGluZyBhIHNlc3Npb24sIHNvIGEgc2lnbi1vdXQgdGhlIHNlcnZlciBuZXZlclxuICAgKiBjb25maXJtZWQgaXMgbm90IHVuZG9uZSBieSB0aGUgc3RpbGwtdmFsaWQgcmVmcmVzaCBjb29raWUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGd1YXJkOiBTaWduT3V0R3VhcmQ7XG4gIHByaXZhdGUgc3RvcFdhdGNoaW5nU2lnbk91dDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9nOiBDYXRhbG9nO1xuICAvKiogVGhlIGxhbmd1YWdlIGxheWVyIG9mIGBjYXRhbG9nYCAodGhlIGBsb2NhbGl6YXRpb25gIGJ1bmRsZSBhbG9uZTsgYEVOX1VTYCB3aGVuIG5vbmUpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yQ2F0YWxvZzogQ2F0YWxvZztcbiAgLyoqIFNlbnQgdG8gdGhlIEZyb250ZW5kIEFQSSBhcyBgQWNjZXB0LUxhbmd1YWdlYDogdGhlIGBsb2NhbGl6YXRpb25gIGJ1bmRsZSdzIGBsb2NhbGVgIHRhZy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0TG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEEgc2lnbi1pbiBhdHRlbXB0IGhhbmRlZCBiYWNrIGJ5IGFuIE9BdXRoIHJlZGlyZWN0IHRoYXQgc3RpbGwgbmVlZHMgYSBzZWNvbmRcbiAgICogZmFjdG9yIChubyBzZXNzaW9uIHdhcyBpc3N1ZWQpLiBOdWxsIGluIHRoZSBvcmRpbmFyeSBjYXNlOyB0aGUgYDxhdGxhcy1zaWduLWluPmBcbiAgICogZmxvdyBzZWVkcyBpdHNlbGYgZnJvbSB0aGlzIHNvIHRoZSB1c2VyIHJlc3VtZXMgYXQgdGhlIDJGQSBzdGVwLiBDYXB0dXJlZFxuICAgKiBvbmNlLCBzeW5jaHJvbm91c2x5LCBhdCBjb25zdHJ1Y3Rpb24g4oCUIGJlZm9yZSBhbnkgZmxvdyBjb21wb25lbnQgcmVhZHMgaXQuXG4gICAqL1xuICByZWFkb25seSBwZW5kaW5nQXR0ZW1wdDogeyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9IHwgbnVsbDtcblxuICAvLyAtLS0gUmVhY3RpdmUgc3RhdGUgKHNvdXJjZSBvZiB0cnV0aCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdHVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdHVzPignbG9hZGluZycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91c2VyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdGxhc1VzZXIgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXRsYXNTZXNzaW9uIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsYWltcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Vzc2lvbkNsYWltcyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZW1iZXJzaGlwcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwW10+KFtdKTtcblxuICAvKiogVGhlIHRocmVlLXN0YXRlIGF1dGggbGlmZWN5Y2xlOiBgbG9hZGluZ2Ag4oaSIGBzaWduZWRfaW5gIHwgYHNpZ25lZF9vdXRgLiAqL1xuICByZWFkb25seSBzdGF0dXMkOiBPYnNlcnZhYmxlPEF1dGhTdGF0dXM+ID0gdGhpcy5fc3RhdHVzLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSB1c2VyJDogT2JzZXJ2YWJsZTxBdGxhc1VzZXIgfCBudWxsPiA9IHRoaXMuX3VzZXIuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IHNlc3Npb24kOiBPYnNlcnZhYmxlPEF0bGFzU2Vzc2lvbiB8IG51bGw+ID0gdGhpcy5fc2Vzc2lvbi5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgY2xhaW1zJDogT2JzZXJ2YWJsZTxTZXNzaW9uQ2xhaW1zIHwgbnVsbD4gPSB0aGlzLl9jbGFpbXMuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IG1lbWJlcnNoaXBzJDogT2JzZXJ2YWJsZTxBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXT4gPVxuICAgIHRoaXMuX21lbWJlcnNoaXBzLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qKlxuICAgKiBUcnVlIG9uY2UgdGhlIFNESyBoYXMgZmluaXNoZWQgaXRzIGZpcnN0IGJvb3QuIERpc3Rpbmd1aXNoaW5nIFwic3RpbGwgbG9hZGluZ1wiXG4gICAqIGZyb20gXCJzaWduZWQgb3V0XCIgaXMgd2hhdCBsZXRzIGEgdGVtcGxhdGUgYXZvaWQgdGhlIGZsYXNoIG9mIGEgc2lnbi1pbiBmb3JtXG4gICAqIG9uIGV2ZXJ5IHBhZ2UgbG9hZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzTG9hZGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3RhdHVzJC5waXBlKFxuICAgIG1hcCgocykgPT4gcyAhPT0gJ2xvYWRpbmcnKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICApO1xuXG4gIHJlYWRvbmx5IGlzU2lnbmVkSW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zdGF0dXMkLnBpcGUoXG4gICAgbWFwKChzKSA9PiBzID09PSAnc2lnbmVkX2luJyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgKTtcblxuICAvKiogVGhlIGFjdGl2ZSBvcmdhbml6YXRpb24gbWVtYmVyc2hpcCwgZGVyaXZlZCBmcm9tIHRoZSB0b2tlbidzIGBvcmdfaWRgIGNsYWltLiAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb24kOiBPYnNlcnZhYmxlPEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcCB8IG51bGw+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fbWVtYmVyc2hpcHMsXG4gICAgdGhpcy5fY2xhaW1zLFxuICBdKS5waXBlKFxuICAgIG1hcChcbiAgICAgIChbbWVtYmVyc2hpcHMsIGNsYWltc10pID0+XG4gICAgICAgIG1lbWJlcnNoaXBzLmZpbmQoKG0pID0+IG0ub3JnYW5pemF0aW9uLmlkID09PSBjbGFpbXM/Lm9yZ19pZCkgPz8gbnVsbCxcbiAgICApLFxuICApO1xuXG4gIC8vIC0tLSBTaWduYWwgbWlycm9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICByZWFkb25seSBzdGF0dXM6IFNpZ25hbDxBdXRoU3RhdHVzPiA9IHRvU2lnbmFsKHRoaXMuc3RhdHVzJCwgeyBpbml0aWFsVmFsdWU6ICdsb2FkaW5nJyB9KTtcbiAgcmVhZG9ubHkgdXNlcjogU2lnbmFsPEF0bGFzVXNlciB8IG51bGw+ID0gdG9TaWduYWwodGhpcy51c2VyJCwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIHJlYWRvbmx5IHNlc3Npb246IFNpZ25hbDxBdGxhc1Nlc3Npb24gfCBudWxsPiA9IHRvU2lnbmFsKHRoaXMuc2Vzc2lvbiQsIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICByZWFkb25seSBjbGFpbXM6IFNpZ25hbDxTZXNzaW9uQ2xhaW1zIHwgbnVsbD4gPSB0b1NpZ25hbCh0aGlzLmNsYWltcyQsIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICByZWFkb25seSBtZW1iZXJzaGlwczogU2lnbmFsPEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcFtdPiA9IHRvU2lnbmFsKHRoaXMubWVtYmVyc2hpcHMkLCB7XG4gICAgaW5pdGlhbFZhbHVlOiBbXSBhcyBBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXSxcbiAgfSk7XG4gIHJlYWRvbmx5IGlzTG9hZGVkOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXR1cygpICE9PSAnbG9hZGluZycpO1xuICByZWFkb25seSBpc1NpZ25lZEluOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXR1cygpID09PSAnc2lnbmVkX2luJyk7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogU2lnbmFsPEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcCB8IG51bGw+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5jbGFpbXMoKT8ub3JnX2lkO1xuICAgIHJldHVybiB0aGlzLm1lbWJlcnNoaXBzKCkuZmluZCgobSkgPT4gbS5vcmdhbml6YXRpb24uaWQgPT09IG9yZ0lkKSA/PyBudWxsO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMucHVibGlzaGFibGVLZXkgPSBvcHRpb25zLnB1Ymxpc2hhYmxlS2V5O1xuICAgIC8vIFRocm93cyBhbiBgQXRsYXNDb25maWdFcnJvcmAgb24gYSBtaXNzaW5nL2ludmFsaWQgdmFsdWUgcmF0aGVyIHRoYW4gcXVpZXRseVxuICAgIC8vIHNlbmRpbmcgZXZlcnkgcmVxdWVzdCB0byBhIHJlbGF0aXZlIHBhdGggb24gdGhlIGFwcCdzIG9yaWdpbi5cbiAgICB0aGlzLmJhc2VVcmwgPSByZXNvbHZlRnJvbnRlbmRBcGkob3B0aW9ucy5mcm9udGVuZEFwaSwge1xuICAgICAgY29tcG9uZW50OiAncHJvdmlkZUF0bGFzKCkgLyBBdGxhc01vZHVsZS5mb3JSb290KCknLFxuICAgIH0pO1xuICAgIHRoaXMuZG9GZXRjaCA9IG9wdGlvbnMuZmV0Y2hJbXBsID8/ICgoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgZmV0Y2g+KSA9PiBmZXRjaCguLi5hcmdzKSk7XG5cbiAgICB0aGlzLmNhdGFsb2cgPSBvcHRpb25zLmxvY2FsaXphdGlvbiA/IHdpdGhGYWxsYmFjayhvcHRpb25zLmxvY2FsaXphdGlvbikgOiBFTl9VUztcbiAgICB0aGlzLmVycm9yQ2F0YWxvZyA9IG9wdGlvbnMubG9jYWxpemF0aW9uID8/IEVOX1VTO1xuICAgIHRoaXMucmVxdWVzdExvY2FsZSA9IGNhdGFsb2dMb2NhbGUob3B0aW9ucy5sb2NhbGl6YXRpb24pO1xuXG4gICAgdGhpcy5mYXBpQ2xpZW50ID0gbmV3IEZhcGlDbGllbnQoe1xuICAgICAgcHVibGlzaGFibGVLZXk6IHRoaXMucHVibGlzaGFibGVLZXksXG4gICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICBmZXRjaEltcGw6IHRoaXMuZG9GZXRjaCxcbiAgICAgIGxvY2FsZTogdGhpcy5yZXF1ZXN0TG9jYWxlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ndWFyZCA9IG5ldyBTaWduT3V0R3VhcmQoe1xuICAgICAgcmVxdWVzdDogKHBhdGgsIGluaXQpID0+IHRoaXMuY2FsbChwYXRoLCBpbml0KSxcbiAgICAgIGZyb250ZW5kQXBpOiB0aGlzLmJhc2VVcmwsXG4gICAgfSk7XG5cbiAgICAvLyBDYXB0dXJlZCBzeW5jaHJvbm91c2x5IChub3QgaW4gYW4gYXN5bmMgaW5pdCkgc28gaXQgaXMgYXZhaWxhYmxlIGJlZm9yZSBhbnlcbiAgICAvLyBmbG93IGNvbXBvbmVudCByZWFkcyBpdDogYSBuZWVkc19zZWNvbmRfZmFjdG9yIHJlZGlyZWN0IGNhcnJpZXMgYSBzdGF0dXMgYnV0XG4gICAgLy8gbm8gdGlja2V0LCBhbmQgdGhhdCBpcyB3aGF0IHRoZSAyRkEgcmVzdW1lIHNlZWRzIGZyb20uXG4gICAgdGhpcy5wZW5kaW5nQXR0ZW1wdCA9IHRoaXMuaXNCcm93c2VyID8gdGhpcy5yZWFkUGVuZGluZ0F0dGVtcHQoKSA6IG51bGw7XG5cbiAgICAvLyBCb290IG9uY2UsIGJyb3dzZXIgb25seS4gT24gdGhlIHNlcnZlciB0aGVyZSBpcyBubyBjb29raWUgamFyIHRvIHJlYWQgYVxuICAgIC8vIHNlc3Npb24gZnJvbSwgc28gd2UgbGVhdmUgdGhlIHN0YXRlIGF0IGBsb2FkaW5nYCBhbmQgbGV0IGh5ZHJhdGlvbiBib290IGl0LlxuICAgIGlmICh0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgLy8gQW5vdGhlciB0YWIgc2lnbmVkIG91dCBvZiBUSElTIHNlc3Npb24gKGl0cyB0b21ic3RvbmUgcmVhY2hlZCB0aGUgc2hhcmVkXG4gICAgICAvLyBzdG9yZSk6IGRyb3AgdGhlIHRva2VuIGFuZCByZS1jaGVjaywgd2hpY2ggdGhlbiByZWZ1c2VzIHRoZSBzZXNzaW9uLlxuICAgICAgdGhpcy5zdG9wV2F0Y2hpbmdTaWduT3V0ID0gdGhpcy5ndWFyZC53YXRjaChcbiAgICAgICAgKCkgPT4gdGhpcy5jYWNoZS5wZWVrKCk/LnNlc3Npb25JZCA/PyB0aGlzLl9zZXNzaW9uLnZhbHVlPy5pZCxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgICAgICAgICB2b2lkIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdm9pZCB0aGlzLmJvb3QoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BXYXRjaGluZ1NpZ25PdXQ/LigpO1xuICAgIHRoaXMuc3RvcFdhdGNoaW5nU2lnbk91dCA9IG51bGw7XG4gICAgdGhpcy5ndWFyZC5kaXNwb3NlKCk7XG4gICAgdGhpcy5jbGVhclJlZnJlc2hUaW1lcigpO1xuICAgIHRoaXMuX3N0YXR1cy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3VzZXIuY29tcGxldGUoKTtcbiAgICB0aGlzLl9zZXNzaW9uLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fY2xhaW1zLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fbWVtYmVyc2hpcHMuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8vIC0tLSBDb25maWd1cmF0aW9uIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBnZXQgYXBwZWFyYW5jZSgpOiBBcHBlYXJhbmNlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFwcGVhcmFuY2U7XG4gIH1cblxuICBnZXQgbG9jYWxpemF0aW9uKCk6IENhdGFsb2cge1xuICAgIHJldHVybiB0aGlzLmNhdGFsb2c7XG4gIH1cblxuICBnZXQgZnJvbnRlbmRBcGkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsO1xuICB9XG5cbiAgLyoqIFRoZSBgQWNjZXB0LUxhbmd1YWdlYCBzZW50IHRvIHRoZSBGcm9udGVuZCBBUEk6IHRoZSBgbG9jYWxpemF0aW9uYCBidW5kbGUncyBgbG9jYWxlYCB0YWcsIGlmIGFueS4gKi9cbiAgZ2V0IGxvY2FsZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMb2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gc2hvdyBmb3IgYSBzZXJ2ZXIgZXJyb3IsIGluIHRoZSBhcHAncyBsYW5ndWFnZTogdGhlIGNhdGFsb2cnc1xuICAgKiBgZXJyb3IuPHJlYXNvbj5gIChsb29rZWQgdXAgaW4gdGhlIGBsb2NhbGl6YXRpb25gIGJ1bmRsZSwgb3IgYEVOX1VTYCB3aGVuXG4gICAqIG5vbmUgaXMgc2V0KSwgZWxzZSB0aGUgc2VydmVyJ3MgbWVzc2FnZSwgZWxzZSBgZXJyb3IuZ2VuZXJpY2AuXG4gICAqL1xuICBlcnJvclRleHQoZXJyb3I6IEVycm9yTGlrZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIHJldHVybiBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UoZXJyb3IsIHRoaXMuZXJyb3JDYXRhbG9nLCB0aGlzLmNhdGFsb2cpO1xuICB9XG5cbiAgLyoqIFRoZSBjYXRhbG9nIHNlcnZlciBlcnJvcnMgYXJlIGxvb2tlZCB1cCBpbiAoc2VlIHtAbGluayBlcnJvclRleHR9KS4gKi9cbiAgZ2V0IGVycm9yTG9jYWxpemF0aW9uKCk6IENhdGFsb2cge1xuICAgIHJldHVybiB0aGlzLmVycm9yQ2F0YWxvZztcbiAgfVxuXG4gIC8qKiBUb2tlbnMgYXMgQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzLCBmb3IgYSBob3N0IGVsZW1lbnQgdG8gaW5oZXJpdC4gKi9cbiAgYXBwZWFyYW5jZVZhcmlhYmxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gY3NzVmFyaWFibGVzKHJlc29sdmVUb2tlbnModGhpcy5vcHRpb25zLmFwcGVhcmFuY2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZnVsbCBhcHBlYXJhbmNlIHJlbmRlciBmb3IgYSByb290IGVsZW1lbnQ6IGlubGluZSB2YXJpYWJsZXMsIHRoZVxuICAgKiBgZGF0YS1hdGxhcy0qYCBhdHRyaWJ1dGVzIGFuZCB0aGUgZGVzaWduIHN0eWxlc2hlZXQuIFBhc3MgdGhlIGRhc2hib2FyZFxuICAgKiBkZXNpZ24gKGZyb20ge0BsaW5rIGxvYWRJbnN0YW5jZURlc2lnbn0pIHRvIGxheWVyIGNvZGUgb3ZlcnJpZGVzIG9uIGl0IOKAlFxuICAgKiB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgYEBhdGxhc2F1dGgvcmVhY3RgLlxuICAgKi9cbiAgYXBwZWFyYW5jZVJlbmRlcihpbnN0YW5jZURlc2lnbj86IEluc3RhbmNlRGVzaWduIHwgbnVsbCk6IEFwcGVhcmFuY2VSZW5kZXIge1xuICAgIHJldHVybiByZW5kZXJBcHBlYXJhbmNlKHRoaXMub3B0aW9ucy5hcHBlYXJhbmNlLCBpbnN0YW5jZURlc2lnbiA/PyBudWxsLCB7XG4gICAgICBmcm9udGVuZEFwaTogdGhpcy5iYXNlVXJsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNpZ24gY29uZmlndXJlZCBpbiB0aGUgQXRsYXMgZGFzaGJvYXJkIChgR0VUIC92MS9hcHBlYXJhbmNlYCksIG9yIG51bGxcbiAgICogd2hlbiB0aGVyZSBpcyBub25lLCBpdCBjYW5ub3QgYmUgcmVhZCwgb3IgdGhlIGFwcCBvcHRlZCBvdXQgd2l0aFxuICAgKiBgYXBwZWFyYW5jZS5pbnN0YW5jZURlc2lnbjogZmFsc2VgLlxuICAgKi9cbiAgYXN5bmMgbG9hZEluc3RhbmNlRGVzaWduKCk6IFByb21pc2U8SW5zdGFuY2VEZXNpZ24gfCBudWxsPiB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcHBlYXJhbmNlPy5pbnN0YW5jZURlc2lnbiA9PT0gZmFsc2UpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbCgnL3YxL2FwcGVhcmFuY2UnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5vayA/IGluc3RhbmNlRGVzaWduRnJvbShhd2FpdCByZXNwb25zZS5qc29uKCkpIDogbnVsbDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBIGZyZXNoIHtAbGluayBGYXBpQ2xpZW50fSBmb3IgZHJpdmluZyBhIHNpZ24taW4vc2lnbi11cCBmbG93LiAqL1xuICBjcmVhdGVGYXBpQ2xpZW50KCk6IEZhcGlDbGllbnQge1xuICAgIHJldHVybiBuZXcgRmFwaUNsaWVudCh7XG4gICAgICBwdWJsaXNoYWJsZUtleTogdGhpcy5wdWJsaXNoYWJsZUtleSxcbiAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgIGxvY2FsZTogdGhpcy5yZXF1ZXN0TG9jYWxlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tIEltcGVyYXRpdmUgQVBJIChtaXJyb3JzIHRoZSBSZWFjdCBob29rcycgYWN0aW9ucykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBzZXNzaW9uJ3MgSldULCBhbHdheXMgZnJlc2g6IGlmIHRoZSBjYWNoZWQgdG9rZW4gaXMgd2l0aGluIDVzIG9mXG4gICAqIGV4cGlyeSBpdCBpcyByZWZyZXNoZWQgZmlyc3QgcmF0aGVyIHRoYW4gaGFuZGVkIG92ZXIuIE51bGwgd2hlbiBzaWduZWQgb3V0LlxuICAgKi9cbiAgYXN5bmMgZ2V0VG9rZW4oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgdXNhYmxlID0gdGhpcy5jYWNoZS5nZXQoNV8wMDApO1xuICAgIGlmICh1c2FibGUpIHJldHVybiB1c2FibGUuand0O1xuXG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KDVfMDAwKT8uand0ID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNpZ25lZC1pbiB1c2VyJ3MgT1dOIGxpdmUgYWNjZXNzIHRva2VuIGF0IGEgY29ubmVjdGVkIHByb3ZpZGVyIChHb29nbGUsXG4gICAqIEdpdEh1Yiwg4oCmKSwgc28gdGhlIGFwcCBjYW4gY2FsbCB0aGF0IHByb3ZpZGVyJ3MgQVBJIGZyb20gdGhlIGJyb3dzZXIuIE51bGxcbiAgICogd2hlbiB0aGVyZSBpcyBubyB1c2FibGUgdG9rZW4g4oCUIG5vIGxpbmtlZCBhY2NvdW50LCBvciB0aGUgcHJvdmlkZXIgZ3JhbnRlZCAvXG4gICAqIGtlcHQgbm9uZS4gVGhlIHNlcnZlciByZWZyZXNoZXMgYSBzdGFsZSB0b2tlbiBvbiByZWFkOyB0aGUgcmVmcmVzaCB0b2tlbiBpc1xuICAgKiBuZXZlciBleHBvc2VkLlxuICAgKi9cbiAgZ2V0UHJvdmlkZXJUb2tlbihwcm92aWRlcjogc3RyaW5nKTogUHJvbWlzZTxQcm92aWRlclRva2VuIHwgbnVsbD4ge1xuICAgIHJldHVybiBmZXRjaFByb3ZpZGVyVG9rZW4odGhpcy5mYXBpQ2xpZW50LCBwcm92aWRlcik7XG4gIH1cblxuICAvKiogSW1wZXJhdGl2ZSBgaGFzKClgIOKAlCB0aGUgc2FtZSBldmFsdWF0aW9uIGAqYXRsYXNQcm90ZWN0YCByZW5kZXJzIG9uLiAqL1xuICBoYXMoY29uZGl0aW9uOiBQcm90ZWN0Q29uZGl0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2YWx1YXRlKHRoaXMuX2NsYWltcy52YWx1ZSwgY29uZGl0aW9uKS5hbGxvd2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSB0aGUgY3VycmVudCBzZXNzaW9uIHNlcnZlci1zaWRlIGFuZCBkcm9wIGFsbCBsb2NhbCBhdXRoIHN0YXRlLlxuICAgKlxuICAgKiBUaGUgc2Vzc2lvbiBpZCBpcyByZW1lbWJlcmVkIGJlZm9yZSB0aGUgcmV2b2tlIChhIHRvbWJzdG9uZSBzaGFyZWQgYnkgZXZlcnlcbiAgICogdGFiKSwgc28gYSByZWxvYWQsIGEgdG9rZW4gcmVmcmVzaCwgYSBzaWJsaW5nIHRhYiBvciBhIHRhYiBvcGVuZWQgbGF0ZXIgbmV2ZXJcbiAgICogcmUtYWRvcHRzIGl0IOKAlCBldmVuIHdoZW4gdGhlIHJldm9rZSBmYWlsZWQgKGl0IGlzIHJldHJpZWQgb25jZSwgdGhlbiBhZ2FpbiBpblxuICAgKiB0aGUgYmFja2dyb3VuZCkgYW5kIHRoZSByZWZyZXNoIGNvb2tpZSBpcyBzdGlsbCB2YWxpZC4gUmVzb2x2ZXNcbiAgICogYHsgcmV2b2tlZCwgYWN0aXZlU2Vzc2lvbklkPyB9YDsgd2l0aCBgeyBzdHJpY3Q6IHRydWUgfWAgYW4gdW5jb25maXJtZWQgcmV2b2tlXG4gICAqIHJlamVjdHMgd2l0aCBhIGBTaWduT3V0RXJyb3JgIGluc3RlYWQgKGFmdGVyIHRoZSBsb2NhbCBzaWduLW91dCkuIEEgcGFya2VkXG4gICAqIHNlc3Npb24gdGhlIHNlcnZlciBwcm9tb3RlZCBvbiByZXZva2UgaXMgYWRvcHRlZC4gRnJvbnQtY2hhbm5lbCBsb2dvdXQgcnVuc1xuICAgKiB1bmxlc3MgYHsgZnJvbnRjaGFubmVsOiBmYWxzZSB9YC5cbiAgICovXG4gIGFzeW5jIHNpZ25PdXQob3B0aW9uczogU2lnbk91dE9wdGlvbnMgPSB7fSk6IFByb21pc2U8U2lnbk91dFJlc3VsdD4ge1xuICAgIC8vIFdpdGggbm8gY2FjaGVkIHRva2VuIHRoZSBndWFyZCBmaW5kcyB0aGUgY29va2llIHNlc3Npb24gaXRzZWxmXG4gICAgLy8gKEdFVCAvdjEvY2xpZW50KSwgc28gYSBtaXNzaW5nIEpXVCBuZXZlciBza2lwcyB0aGUgcmV2b2tlLlxuICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuY2FjaGUucGVlaygpPy5zZXNzaW9uSWQgPz8gdGhpcy5fc2Vzc2lvbi52YWx1ZT8uaWQgPz8gbnVsbDtcbiAgICBjb25zdCBhdHRlbXB0ID0gYXdhaXQgdGhpcy5ndWFyZC5yZXZva2Uoc2Vzc2lvbklkLCBvcHRpb25zKTtcbiAgICB0aGlzLmNsZWFyTG9jYWxTdGF0ZSgpO1xuICAgIGlmICh0aGlzLmd1YXJkLnByb21vdGVkKGF0dGVtcHQpKSBhd2FpdCB0aGlzLnJlbG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmd1YXJkLnNldHRsZShhdHRlbXB0LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2l0Y2ggdGhlIGFjdGl2ZSBvcmdhbml6YXRpb24gKG9yIGBudWxsYCBmb3IgdGhlIHBlcnNvbmFsIGFjY291bnQpLiBUaGVcbiAgICogbmV3IHRva2VuIGNhcnJpZXMgdGhlIG5ldyBvcmcgY2xhaW1zLCBzbyB0aGUgYXBwJ3MgcGVybWlzc2lvbiBjaGVja3MgdXBkYXRlXG4gICAqIHdpdGhvdXQgYSByZS1sb2dpbi5cbiAgICovXG4gIGFzeW5jIHNldEFjdGl2ZU9yZ2FuaXphdGlvbihvcmdhbml6YXRpb25JZDogc3RyaW5nIHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmNhY2hlLnBlZWsoKTtcbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybjtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKGAvdjEvY2xpZW50L3Nlc3Npb25zLyR7Y3VycmVudC5zZXNzaW9uSWR9L3RvdWNoYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGl2ZV9vcmdhbml6YXRpb25faWQ6IG9yZ2FuaXphdGlvbklkIH0pLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHJldHVybjtcblxuICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IGp3dDogc3RyaW5nIH07XG4gICAgdGhpcy5hcHBseVRva2VuKGJvZHkuand0LCBjdXJyZW50LnNlc3Npb25JZCk7XG4gICAgYXdhaXQgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIC8qKiBSZS1yZWFkIGAvdjEvY2xpZW50YDogcmVmcmVzaCB1c2VyLCBzZXNzaW9uLCBtZW1iZXJzaGlwcyBhbmQgc3RhdHVzLiAqL1xuICBhc3luYyByZWxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKCcvdjEvY2xpZW50Jyk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IoJ2Jvb3QgZmFpbGVkJyk7XG5cbiAgICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7XG4gICAgICAgIHNlc3Npb246IEF0bGFzU2Vzc2lvbiB8IG51bGw7XG4gICAgICAgIHVzZXI6IEF0bGFzVXNlciB8IG51bGw7XG4gICAgICAgIGp3dD86IHN0cmluZztcbiAgICAgICAgb3JnYW5pemF0aW9uX21lbWJlcnNoaXBzPzogQXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwW107XG4gICAgICB9O1xuXG4gICAgICAvLyBBIHNlc3Npb24gdGhpcyBicm93c2VyIHNpZ25lZCBvdXQgb2YgaXMgbmV2ZXIgcmUtYWRvcHRlZCBmcm9tIHRoZVxuICAgICAgLy8gcmVmcmVzaCBjb29raWU7IHRoZSBndWFyZCByZS10cmllcyBpdHMgcmV2b2tlIGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgICAgaWYgKCFib2R5LnNlc3Npb24gfHwgIWJvZHkudXNlciB8fCB0aGlzLmd1YXJkLnJlZnVzZShib2R5LnNlc3Npb24uaWQpKSB7XG4gICAgICAgIHRoaXMuY2xlYXJMb2NhbFN0YXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdXNlci5uZXh0KGJvZHkudXNlcik7XG4gICAgICB0aGlzLl9zZXNzaW9uLm5leHQoYm9keS5zZXNzaW9uKTtcbiAgICAgIHRoaXMuX21lbWJlcnNoaXBzLm5leHQoYm9keS5vcmdhbml6YXRpb25fbWVtYmVyc2hpcHMgPz8gW10pO1xuICAgICAgaWYgKGJvZHkuand0KSB0aGlzLmFwcGx5VG9rZW4oYm9keS5qd3QsIGJvZHkuc2Vzc2lvbi5pZCk7XG4gICAgICB0aGlzLl9zdGF0dXMubmV4dCgnc2lnbmVkX2luJyk7XG4gICAgICB0aGlzLnNjaGVkdWxlUmVmcmVzaCgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQSBmYWlsZWQgYm9vdCBpcyBOT1Qgc2lnbmVkLW91dC4gUmVuZGVyaW5nIGEgc2lnbi1pbiBmb3JtIGJlY2F1c2UgdGhlXG4gICAgICAvLyBuZXR3b3JrIGhpY2N1cGVkIHRocm93cyBhd2F5IGEgcGVyZmVjdGx5IGdvb2Qgc2Vzc2lvbiBhbmQgZm9yY2VzIGFcbiAgICAgIC8vIG5lZWRsZXNzIHJlLWF1dGhlbnRpY2F0aW9uLiBPbmx5IHByb21vdGUgbG9hZGluZyDihpIgc2lnbmVkX291dC5cbiAgICAgIGlmICh0aGlzLl9zdGF0dXMudmFsdWUgPT09ICdsb2FkaW5nJykgdGhpcy5fc3RhdHVzLm5leHQoJ3NpZ25lZF9vdXQnKTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gSW50ZXJuYWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIMKnNi4zIHN0ZXAgMzogY29tcGxldGUgYSByZWRpcmVjdC1iYXNlZCBzaWduLWluLCB0aGVuIGJvb3QuIEFuIE9BdXRoIG9yXG4gICAqIGhvc3RlZC1wYWdlIGZsb3cgbGFuZHMgYmFjayB3aXRoIGEgb25lLXRpbWUgdGlja2V0IGluIHRoZSBVUkw7IGV4Y2hhbmdlIGl0XG4gICAqIGZvciBjb29raWVzLCBzY3J1YiB0aGUgVVJMIHNvIGEgcmVsb2FkIGNhbm5vdCByZXBsYXkgaXQsIFRIRU4gcmVhZCB0aGVcbiAgICogc2Vzc2lvbi4gQSByZWRpcmVjdCBjYXJyeWluZyBvbmx5IGEgc3RhdHVzIChhIHNlY29uZCBmYWN0b3IgaXMgc3RpbGwgb3dlZClcbiAgICogaGFzIG5vIHRpY2tldCwgc28gbm90aGluZyBpcyBleGNoYW5nZWQgYW5kIHRoZSBhcHAgYm9vdHMgc2lnbmVkLW91dC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYm9vdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmcm9tVXJsID0gcmVhZFJlZGlyZWN0UmVzdWx0KHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIGxldCByZXN1bHQ6IFJlZGlyZWN0UmVzdWx0IHwgbnVsbCA9IGZyb21Vcmw7XG5cbiAgICAvLyDCp29hdXRoIHBvcHVwIG1vZGU6IHRoaXMgcGFnZSBtYXkgYmUgdGhlIGxhbmRpbmcgb2YgYSBzaWduLWluIHBvcHVwIHdob3NlXG4gICAgLy8gb3BlbmVyIGEgQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3kgc2V2ZXJlZCAoYCNhdGxhc19wb3B1cF9yZXN1bHQ94oCmYCkuXG4gICAgLy8gVGhlIHJlc3VsdCBpcyByZWxheWVkIHRvIHRoZSBvcGVuZXIsIHdoaWNoIHJlZGVlbXMgdGhlIHRpY2tldCwgYW5kIHRoaXNcbiAgICAvLyB3aW5kb3cgY2xvc2VzLiBJZiBubyBvcGVuZXIgdGFrZXMgaXQgKGl0cyB0YWIgaXMgZ29uZSksIGZpbmlzaCBoZXJlIGxpa2VcbiAgICAvLyBhIHJlZGlyZWN0LlxuICAgIGNvbnN0IGxhbmRpbmcgPSBhd2FpdCBjb21wbGV0ZU9BdXRoUG9wdXBMYW5kaW5nKCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgaWYgKGxhbmRpbmcgJiYgIWxhbmRpbmcuZGVsaXZlcmVkKSB7XG4gICAgICBjb25zdCBvdXRjb21lID0gbWFwT0F1dGhQb3B1cFBheWxvYWQobGFuZGluZy5wYXlsb2FkKTtcbiAgICAgIGlmIChvdXRjb21lPy50aWNrZXQgJiYgb3V0Y29tZS5hdHRlbXB0SWQpIHtcbiAgICAgICAgcmVzdWx0ID0geyBhdHRlbXB0SWQ6IG91dGNvbWUuYXR0ZW1wdElkLCB0aWNrZXQ6IG91dGNvbWUudGlja2V0IH07XG4gICAgICB9IGVsc2UgaWYgKG91dGNvbWU/LmNvbnRpbnVhdGlvblVybCkge1xuICAgICAgICAvLyBBIHNlY29uZCBmYWN0b3IgLyBjb25uZWN0IHN0ZXAgLyBwcm92aWRlciBlcnJvcjogdGhlIHJlZGlyZWN0IGZsb3cncyBwYWdlLlxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShvdXRjb21lLmNvbnRpbnVhdGlvblVybCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZXhjaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKHJlc3VsdD8udGlja2V0KSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbCgnL3YxL2NsaWVudC90aWNrZXRzL2V4Y2hhbmdlJywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhdHRlbXB0X2lkOiByZXN1bHQuYXR0ZW1wdElkLCB0aWNrZXQ6IHJlc3VsdC50aWNrZXQgfSksXG4gICAgICB9KS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgZXhjaGFuZ2VkID0gISFyZXNwb25zZT8ub2s7XG4gICAgfVxuICAgIGlmIChmcm9tVXJsKSB7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIGRvY3VtZW50LnRpdGxlLCBzdHJpcFJlZGlyZWN0UGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVsb2FkKCk7XG4gICAgLy8gU2lnbmVkIGluIGluc2lkZSB0aGUgQXRsYXMgcG9wdXAgKHRoZSByZWRpcmVjdCBmbG93IHJhbiBpbiBpdCk6IGhhbmQgYmFja1xuICAgIC8vIHRvIHRoZSB3YWl0aW5nIG9wZW5lciBhbmQgY2xvc2UuIEEgbm8tb3AgaW4gYW4gb3JkaW5hcnkgdGFiLlxuICAgIGlmIChleGNoYW5nZWQpIHZvaWQgY2xvc2VPQXV0aFBvcHVwQWZ0ZXJTaWduSW4oKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZFBlbmRpbmdBdHRlbXB0KCk6IHsgaWQ6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmcgfSB8IG51bGwge1xuICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRSZWRpcmVjdFJlc3VsdCh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICByZXR1cm4gcmVzdWx0Py5zdGF0dXMgJiYgIXJlc3VsdC50aWNrZXRcbiAgICAgID8geyBpZDogcmVzdWx0LmF0dGVtcHRJZCwgc3RhdHVzOiByZXN1bHQuc3RhdHVzIH1cbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbChwYXRoOiBzdHJpbmcsIGluaXQ/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5kb0ZldGNoKGAke3RoaXMuYmFzZVVybH0ke3BhdGh9YCwge1xuICAgICAgLi4uaW5pdCxcbiAgICAgIC8vIENvb2tpZXMgY2FycnkgdGhlIHNlc3Npb247IGEgcmVxdWVzdCB3aXRob3V0IHRoaXMgaXMgaW5kaXN0aW5ndWlzaGFibGVcbiAgICAgIC8vIGZyb20gYmVpbmcgc2lnbmVkIG91dC5cbiAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICd4LXB1Ymxpc2hhYmxlLWtleSc6IHRoaXMucHVibGlzaGFibGVLZXksXG4gICAgICAgIC4uLihpbml0Py5ib2R5ID8geyAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0gOiB7fSksXG4gICAgICAgIC4uLmluaXQ/LmhlYWRlcnMsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRva2VuKGp3dDogc3RyaW5nLCBzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEFuIGluLWZsaWdodCByZWZyZXNoIG11c3Qgbm90IHJlc3VycmVjdCBhIHNlc3Npb24gc2lnbmVkIG91dCBtZWFud2hpbGUuXG4gICAgaWYgKHRoaXMuZ3VhcmQuaXNTaWduZWRPdXQoc2Vzc2lvbklkKSkgcmV0dXJuO1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IHJlYWRFeHBpcnkoand0KTtcbiAgICBpZiAoIWV4cGlyZXNBdCkgcmV0dXJuO1xuXG4gICAgdGhpcy5jYWNoZS5zZXQoeyBqd3QsIGV4cGlyZXNBdCwgc2Vzc2lvbklkIH0pO1xuICAgIHRoaXMuX2NsYWltcy5uZXh0KGRlY29kZUNsYWltcyhqd3QpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jYWNoZS5wZWVrKCk7XG4gICAgaWYgKCFjdXJyZW50KSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGwoYC92MS9jbGllbnQvc2Vzc2lvbnMvJHtjdXJyZW50LnNlc3Npb25JZH0vdG9rZW5zYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIH0pO1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKCdyZWZyZXNoIGZhaWxlZCcpO1xuXG4gICAgICBjb25zdCBib2R5ID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgeyBqd3Q6IHN0cmluZzsgc2Vzc2lvbl9pZDogc3RyaW5nIH07XG4gICAgICB0aGlzLmFwcGx5VG9rZW4oYm9keS5qd3QsIGJvZHkuc2Vzc2lvbl9pZCk7XG4gICAgICB0aGlzLnNjaGVkdWxlUmVmcmVzaCgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gVGhlIHNlc3Npb24gbWF5IGdlbnVpbmVseSBiZSBnb25lLiBSZS1ib290IHJhdGhlciB0aGFuIGd1ZXNzLlxuICAgICAgYXdhaXQgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyTG9jYWxTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyUmVmcmVzaFRpbWVyKCk7XG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgIHRoaXMuX3N0YXR1cy5uZXh0KCdzaWduZWRfb3V0Jyk7XG4gICAgdGhpcy5fdXNlci5uZXh0KG51bGwpO1xuICAgIHRoaXMuX3Nlc3Npb24ubmV4dChudWxsKTtcbiAgICB0aGlzLl9jbGFpbXMubmV4dChudWxsKTtcbiAgICB0aGlzLl9tZW1iZXJzaGlwcy5uZXh0KFtdKTtcbiAgfVxuXG4gIC8qKiDCpzcuNDogcHJvYWN0aXZlLCBqaXR0ZXJlZCByZWZyZXNoIHNjaGVkdWxlZCBmcm9tIHRoZSB0b2tlbidzIG93biBleHBpcnkuICovXG4gIHByaXZhdGUgc2NoZWR1bGVSZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJSZWZyZXNoVGltZXIoKTtcbiAgICBpZiAodGhpcy5fc3RhdHVzLnZhbHVlICE9PSAnc2lnbmVkX2luJykgcmV0dXJuO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmNhY2hlLnBlZWsoKTtcbiAgICBpZiAoIXRva2VuKSByZXR1cm47XG5cbiAgICBjb25zdCBkZWxheSA9IG1zVW50aWxSZWZyZXNoKHsgdG9rZW4sIG5vdzogRGF0ZS5ub3coKSB9KTtcbiAgICB0aGlzLnJlZnJlc2hUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnJlZnJlc2goKSwgZGVsYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlZnJlc2hUaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWZyZXNoVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUaW1lcik7XG4gICAgICB0aGlzLnJlZnJlc2hUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKiBEZWNvZGUgYSBKV1QgcGF5bG9hZCB3aXRob3V0IHZlcmlmeWluZyBpdCDigJQgYSBzY2hlZHVsaW5nL1VJIGhpbnQgb25seS4gKi9cbmZ1bmN0aW9uIGRlY29kZUNsYWltcyhqd3Q6IHN0cmluZyk6IFNlc3Npb25DbGFpbXMgfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSBqd3Quc3BsaXQoJy4nKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICBhdG9iKHBhcnRzWzFdIS5yZXBsYWNlKC8tL2csICcrJykucmVwbGFjZSgvXy9nLCAnLycpKSxcbiAgICApIGFzIFNlc3Npb25DbGFpbXM7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, inject, } from '@angular/core';
|
|
2
|
-
import { nextStep } from '@atlasauth/js';
|
|
2
|
+
import { localizedErrorMessage, nextStep, } from '@atlasauth/js';
|
|
3
3
|
import { AtlasService } from '../atlas.service';
|
|
4
4
|
import { AtlasCaptchaSlotDirective } from '../directives/captcha-slot.directive';
|
|
5
5
|
import { classFor } from '../appearance';
|
|
@@ -43,6 +43,12 @@ export class AttemptFlowComponent {
|
|
|
43
43
|
t(key, vars) {
|
|
44
44
|
return translate(this.atlas.localization, key, vars);
|
|
45
45
|
}
|
|
46
|
+
/** A server error in the app's language (`error.<reason>`, else the server's message). */
|
|
47
|
+
errorText(error) {
|
|
48
|
+
// `errorLocalization` is read defensively: a stand-in service may lack it.
|
|
49
|
+
const layer = this.atlas.errorLocalization;
|
|
50
|
+
return localizedErrorMessage(error, layer ?? this.atlas.localization, this.atlas.localization);
|
|
51
|
+
}
|
|
46
52
|
cls(key, base) {
|
|
47
53
|
return classFor(key, this.atlas.appearance, base);
|
|
48
54
|
}
|
|
@@ -135,7 +141,7 @@ export class AttemptFlowComponent {
|
|
|
135
141
|
<h1 [class]="cls('headerTitle', 'atlas-title')">{{ t(titleKey) }}</h1>
|
|
136
142
|
|
|
137
143
|
@for (error of formErrors(); track error.code) {
|
|
138
|
-
<p [class]="cls('formFieldError', 'atlas-error')" role="alert">{{ error
|
|
144
|
+
<p [class]="cls('formFieldError', 'atlas-error')" role="alert">{{ errorText(error) }}</p>
|
|
139
145
|
}
|
|
140
146
|
|
|
141
147
|
<form (submit)="onSubmit($event)">
|
|
@@ -151,7 +157,7 @@ export class AttemptFlowComponent {
|
|
|
151
157
|
(input)="setValue(f.name, $any($event.target).value)"
|
|
152
158
|
/>
|
|
153
159
|
@for (error of fieldErrorsFor(f.name); track error.code) {
|
|
154
|
-
<span [class]="cls('formFieldError', 'atlas-error')">{{ error
|
|
160
|
+
<span [class]="cls('formFieldError', 'atlas-error')">{{ errorText(error) }}</span>
|
|
155
161
|
}
|
|
156
162
|
</label>
|
|
157
163
|
} @else {
|
|
@@ -195,7 +201,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
195
201
|
<h1 [class]="cls('headerTitle', 'atlas-title')">{{ t(titleKey) }}</h1>
|
|
196
202
|
|
|
197
203
|
@for (error of formErrors(); track error.code) {
|
|
198
|
-
<p [class]="cls('formFieldError', 'atlas-error')" role="alert">{{ error
|
|
204
|
+
<p [class]="cls('formFieldError', 'atlas-error')" role="alert">{{ errorText(error) }}</p>
|
|
199
205
|
}
|
|
200
206
|
|
|
201
207
|
<form (submit)="onSubmit($event)">
|
|
@@ -211,7 +217,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
211
217
|
(input)="setValue(f.name, $any($event.target).value)"
|
|
212
218
|
/>
|
|
213
219
|
@for (error of fieldErrorsFor(f.name); track error.code) {
|
|
214
|
-
<span [class]="cls('formFieldError', 'atlas-error')">{{ error
|
|
220
|
+
<span [class]="cls('formFieldError', 'atlas-error')">{{ errorText(error) }}</span>
|
|
215
221
|
}
|
|
216
222
|
</label>
|
|
217
223
|
} @else {
|
|
@@ -266,4 +272,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
266
272
|
function msg(labelKey) {
|
|
267
273
|
return { kind: 'message', name: '', labelKey, type: 'text' };
|
|
268
274
|
}
|
|
269
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW1wdC1mbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hdHRlbXB0LWZsb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUE2RCxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakYsT0FBTyxFQUFFLFFBQVEsRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFlcEM7Ozs7Ozs7OztHQVNHO0FBMkRILE1BQU0sT0FBTyxvQkFBb0I7SUFDZCxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXJDLE9BQU8sR0FBdUIsSUFBSSxDQUFDO0lBQ25DLElBQUksR0FBRyxLQUFLLENBQUM7SUFDYixNQUFNLEdBQWlCLEVBQUUsQ0FBQztJQUMxQixRQUFRLEdBQUcsY0FBYyxDQUFDO0lBQ25DOzs7O09BSUc7SUFDTSxPQUFPLEdBQTZCLElBQUksQ0FBQztJQUNsRDs7OztPQUlHO0lBQ00sWUFBWSxHQUFvQixJQUFJLENBQUM7SUFDOUMscUdBQXFHO0lBQzVGLGNBQWMsR0FBa0IsSUFBSSxDQUFDO0lBRTlDLG1FQUFtRTtJQUN6RCxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7SUFDbEUsNkZBQTZGO0lBQ25GLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztJQUVoRCxNQUFNLEdBQTJCLEVBQUUsQ0FBQztJ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Qyx5QkFBeUIsQ0FBQztvQkFDcEMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtRFQ7aUJBQ0Y7OEJBSVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxPQUFPO3NCQUFmLEtBQUs7Z0JBTUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUcsWUFBWTtzQkFBckIsTUFBTTs7QUF3R1Qsa0ZBQWtGO0FBQ2xGLFNBQVMsR0FBRyxDQUFDLFFBQWdCO0lBQzNCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbmV4dFN0ZXAsIHR5cGUgQXR0ZW1wdFZpZXcsIHR5cGUgQ2FwdGNoYUNvbnRyb2xsZXIsIHR5cGUgRmllbGRFcnJvciB9IGZyb20gJ0BhdGxhc2F1dGgvanMnO1xuaW1wb3J0IHsgQXRsYXNTZXJ2aWNlIH0gZnJvbSAnLi4vYXRsYXMuc2VydmljZSc7XG5pbXBvcnQgeyBBdGxhc0NhcHRjaGFTbG90RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jYXB0Y2hhLXNsb3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IGNsYXNzRm9yLCB0eXBlIEVsZW1lbnRLZXkgfSBmcm9tICcuLi9hcHBlYXJhbmNlJztcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gJy4uL2kxOG4nO1xuXG4vKipcbiAqIE9uZSByZW5kZXJlZCByb3cgb2YgdGhlIGZsb3cuIEEgdW5pZm9ybSBzaGFwZSAocmF0aGVyIHRoYW4gYSBkaXNjcmltaW5hdGVkXG4gKiB1bmlvbikgc28gdGhlIHRlbXBsYXRlIGFjY2Vzc2VzIG9ubHkgZmllbGRzIHRoYXQgYWx3YXlzIGV4aXN0IOKAlCBubyByZWxpYW5jZSBvblxuICogdGVtcGxhdGUgY29udHJvbC1mbG93IG5hcnJvd2luZyBvZiBhIGxvb3AgdmFyaWFibGUsIHdoaWNoIHZhcmllcyBieSBBbmd1bGFyXG4gKiBtaW5vci4gRm9yIGEgYG1lc3NhZ2VgIHJvdywgYGxhYmVsS2V5YCBjYXJyaWVzIHRoZSBtZXNzYWdlJ3MgaTE4biBrZXkuXG4gKi9cbmludGVyZmFjZSBTdGVwRmllbGQge1xuICBraW5kOiAnaW5wdXQnIHwgJ21lc3NhZ2UnO1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhYmVsS2V5OiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc2VydmVyLWRyaXZlbiBmbG93IHNoZWxsLCBzaGFyZWQgYnkgYDxhdGxhcy1zaWduLWluPmAgYW5kXG4gKiBgPGF0bGFzLXNpZ24tdXA+YC4gVGhlIEFuZ3VsYXIgcGVlciBvZiBSZWFjdCdzIGludGVybmFsIGBBdHRlbXB0Rmxvd2AuXG4gKlxuICogSXQgY29udGFpbnMgTk8gZGVjaXNpb24gYWJvdXQgd2hhdCBjb21lcyBuZXh0OiBpdCByZW5kZXJzIHdoYXRldmVyIGBzdGF0dXNgXG4gKiB0aGUgc2VydmVyIHJldHVybmVkLCBtYXBwZWQgdGhyb3VnaCBgbmV4dFN0ZXBgIGZyb20gYEBhdGxhc2F1dGgvanNgICh0aGUgc2FtZVxuICogZXhoYXVzdGl2ZSBtYXBwaW5nIHRoZSBSZWFjdCBTREsgdXNlcyksIHNvIGFkZGluZyBhIHN0ZXAgaXMgYSBzZXJ2ZXIgY2hhbmdlXG4gKiBhbmQgYW4gb3V0LW9mLWRhdGUgY2xpZW50IGRlZ3JhZGVzIHRvIGEgdmlzaWJsZSBcInBsZWFzZSB1cGRhdGVcIiBtZXNzYWdlIHJhdGhlclxuICogdGhhbiBhIGJsYW5rIHNjcmVlbi5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXRsYXMtYXR0ZW1wdC1mbG93JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtBdGxhc0NhcHRjaGFTbG90RGlyZWN0aXZlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFtjbGFzc109XCJjbHMoJ2NhcmQnLCAnYXRsYXMtY2FyZCcpXCI+XG4gICAgICA8aDEgW2NsYXNzXT1cImNscygnaGVhZGVyVGl0bGUnLCAnYXRsYXMtdGl0bGUnKVwiPnt7IHQodGl0bGVLZXkpIH19PC9oMT5cblxuICAgICAgQGZvciAoZXJyb3Igb2YgZm9ybUVycm9ycygpOyB0cmFjayBlcnJvci5jb2RlKSB7XG4gICAgICAgIDxwIFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZEVycm9yJywgJ2F0bGFzLWVycm9yJylcIiByb2xlPVwiYWxlcnRcIj57eyBlcnJvci5tZXNzYWdlIH19PC9wPlxuICAgICAgfVxuXG4gICAgICA8Zm9ybSAoc3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIj5cbiAgICAgICAgQGZvciAoZiBvZiBmaWVsZHMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgQGlmIChmLmtpbmQgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImF0bGFzLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHQoZi5sYWJlbEtleSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZElucHV0JywgJ2F0bGFzLWlucHV0JylcIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cImYudHlwZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIubmFtZV09XCJmLm5hbWVcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZXNbZi5uYW1lXSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cInNldFZhbHVlKGYubmFtZSwgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICBAZm9yIChlcnJvciBvZiBmaWVsZEVycm9yc0ZvcihmLm5hbWUpOyB0cmFjayBlcnJvci5jb2RlKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImNscygnZm9ybUZpZWxkRXJyb3InLCAnYXRsYXMtZXJyb3InKVwiPnt7IGVycm9yLm1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8cD57eyB0KGYubGFiZWxLZXkpIH19PC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoc2hvd0NhcHRjaGEoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdGxhcy1jYXB0Y2hhXCIgZGF0YS1hdGxhcy1jYXB0Y2hhPVwiXCIgW2F0bGFzQ2FwdGNoYVNsb3RdPVwiY2FwdGNoYVwiPjwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzaG93U3VibWl0KCkpIHtcbiAgICAgICAgICA8YnV0dG9uIFtjbGFzc109XCJjbHMoJ2Zvcm1CdXR0b25QcmltYXJ5JywgJ2F0bGFzLWJ1dHRvbicpXCIgW2Rpc2FibGVkXT1cImJ1c3lcIiB0eXBlPVwic3VibWl0XCI+XG4gICAgICAgICAgICB7eyB0KCdzaWduSW4uc3VibWl0JykgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoc2hvd0VtYWlsQ29kZU9wdGlvbigpKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblNlY29uZGFyeScsICdhdGxhcy1idXR0b24tc2Vjb25kYXJ5JylcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1c3lcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hvb3NlRmFjdG9yLmVtaXQoJ2VtYWlsX2NvZGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdCgnc2lnbkluLnVzZUVtYWlsQ29kZScpIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQXR0ZW1wdEZsb3dDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGF0bGFzID0gaW5qZWN0KEF0bGFzU2VydmljZSk7XG5cbiAgQElucHV0KCkgYXR0ZW1wdDogQXR0ZW1wdFZpZXcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgYnVzeSA9IGZhbHNlO1xuICBASW5wdXQoKSBlcnJvcnM6IEZpZWxkRXJyb3JbXSA9IFtdO1xuICBASW5wdXQoKSB0aXRsZUtleSA9ICdzaWduSW4udGl0bGUnO1xuICAvKipcbiAgICogVGhlIHNpZ24taW4gY2FwdGNoYSwgZHJhd24gYWJvdmUgdGhlIHN1Ym1pdCBidXR0b24gb24gdGhlIGlkZW50aWZpZXIgc3RlcFxuICAgKiAoYW4gYWx3YXlzLW9uIHNpZ24taW4gY2FwdGNoYSkgYW5kIG9uIHRoZSBjaGFsbGVuZ2Ugc3RlcCB0aGUgc2VydmVyIGRlbWFuZHNcbiAgICogd2l0aCBgbmVlZHNfY2FwdGNoYWAuIE51bGwgd2hlbiB0aGUgZmxvdyBkcmF3cyBub25lLlxuICAgKi9cbiAgQElucHV0KCkgY2FwdGNoYTogQ2FwdGNoYUNvbnRyb2xsZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBmaXJzdCBmYWN0b3JzIHRvIG9mZmVyIG9uIHRoZSBgbmVlZHNfZmlyc3RfZmFjdG9yYCBzdGVwIOKAlCBwYXNzXG4gICAqIGBBdGxhc0Zsb3dDb250cm9sbGVyLmZpcnN0RmFjdG9ycygpYCwgd2hpY2ggZHJvcHMgZW1haWwgY29kZSAvIGxpbmsgd2hpbGUgdGhlXG4gICAqIGFwcCBjYW5ub3QgZGVsaXZlciBlbWFpbC4gTnVsbCB1c2VzIHRoZSBzZXJ2ZXIncyBsaXN0IGFzLWlzLlxuICAgKi9cbiAgQElucHV0KCkgZmlyc3RGYWN0b3JzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuICAvKiogVGhlIGZpcnN0IGZhY3RvciBhbHJlYWR5IHNlbnQgKGBBdGxhc0Zsb3dDb250cm9sbGVyLnByZXBhcmVkRmFjdG9yKClgKTogaXRzIGNvZGUgaXMgY29sbGVjdGVkLiAqL1xuICBASW5wdXQoKSBwcmVwYXJlZEZhY3Rvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEVtaXRzIHRoZSBjb2xsZWN0ZWQgZmllbGQgdmFsdWVzIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkLiAqL1xuICBAT3V0cHV0KCkgc3VibWl0RmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKTtcbiAgLyoqIEVtaXRzIHdoZW4gdGhlIHVzZXIgcGlja3MgYSBmaXJzdCBmYWN0b3IgdGhlIHNlcnZlciBtdXN0IHNlbmQgZmlyc3QgKGFuIGVtYWlsZWQgY29kZSkuICovXG4gIEBPdXRwdXQoKSBjaG9vc2VGYWN0b3IgPSBuZXcgRXZlbnRFbWl0dGVyPCdlbWFpbF9jb2RlJz4oKTtcblxuICBwcm90ZWN0ZWQgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgcHJvdGVjdGVkIHQoa2V5OiBzdHJpbmcsIHZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXksIHZhcnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNscyhrZXk6IEVsZW1lbnRLZXksIGJhc2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNsYXNzRm9yKGtleSwgdGhpcy5hdGxhcy5hcHBlYXJhbmNlLCBiYXNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyA9IHsgLi4udGhpcy52YWx1ZXMsIFtuYW1lXTogdmFsdWUgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblN1Ym1pdChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc3VibWl0Rmxvdy5lbWl0KHRoaXMudmFsdWVzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmb3JtRXJyb3JzKCk6IEZpZWxkRXJyb3JbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmZpbHRlcigoZXJyb3IpID0+ICFlcnJvci5wYXJhbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmllbGRFcnJvcnNGb3IobmFtZTogc3RyaW5nKTogRmllbGRFcnJvcltdIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMuZmlsdGVyKChlcnJvcikgPT4gZXJyb3IucGFyYW0gPT09IG5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGVwKCkge1xuICAgIHJldHVybiB0aGlzLmF0dGVtcHQgPyBuZXh0U3RlcCh0aGlzLmF0dGVtcHQpIDogKHsga2luZDogJ2NvbGxlY3RfaWRlbnRpZmllcicgfSBhcyBjb25zdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd0NhcHRjaGEoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2luZCA9IHRoaXMuc3RlcCgpLmtpbmQ7XG4gICAgcmV0dXJuICEhdGhpcy5jYXB0Y2hhICYmIChraW5kID09PSAnY29sbGVjdF9pZGVudGlmaWVyJyB8fCBraW5kID09PSAnY29sbGVjdF9jYXB0Y2hhJyk7XG4gIH1cblxuICAvKiogVGhlIGZpcnN0IGZhY3RvcnMgb24gb2ZmZXIgYXQgYSBgbmVlZHNfZmlyc3RfZmFjdG9yYCBzdGVwIChlbXB0eSBvbiBhbnkgb3RoZXIpLiAqL1xuICBwcml2YXRlIG9mZmVyZWQoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLnN0ZXAoKTtcbiAgICBpZiAoc3RlcC5raW5kICE9PSAnY29sbGVjdF9maXJzdF9mYWN0b3InKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHRoaXMuZmlyc3RGYWN0b3JzID8/IHN0ZXAuc3RyYXRlZ2llcztcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93RW1haWxDb2RlT3B0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByZXBhcmVkRmFjdG9yICE9PSAnZW1haWxfY29kZScgJiYgdGhpcy5vZmZlcmVkKCkuaW5jbHVkZXMoJ2VtYWlsX2NvZGUnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93U3VibWl0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtpbmQgPSB0aGlzLnN0ZXAoKS5raW5kO1xuICAgIC8vIE5vdGhpbmcgdG8gc3VibWl0IG9uIGEgZmlyc3QtZmFjdG9yIHN0ZXAgdGhhdCBvbmx5IG9mZmVycyBhbiBlbWFpbGVkIGNvZGVcbiAgICAvLyB1bnRpbCB0aGF0IGNvZGUgaXMgc2VudC5cbiAgICBpZiAoa2luZCA9PT0gJ2NvbGxlY3RfZmlyc3RfZmFjdG9yJykgcmV0dXJuIHRoaXMuZmllbGRzKCkubGVuZ3RoID4gMDtcbiAgICByZXR1cm4ga2luZCAhPT0gJ2RvbmUnICYmIGtpbmQgIT09ICdhd2FpdF9vYXV0aCc7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmllbGRzKCk6IFN0ZXBGaWVsZFtdIHtcbiAgICBjb25zdCBzdGVwID0gdGhpcy5zdGVwKCk7XG4gICAgc3dpdGNoIChzdGVwLmtpbmQpIHtcbiAgICAgIGNhc2UgJ2NvbGxlY3RfaWRlbnRpZmllcic6XG4gICAgICAgIHJldHVybiBbeyBraW5kOiAnaW5wdXQnLCBuYW1lOiAnaWRlbnRpZmllcicsIGxhYmVsS2V5OiAnc2lnbkluLmlkZW50aWZpZXJMYWJlbCcsIHR5cGU6ICdlbWFpbCcgfV07XG4gICAgICBjYXNlICdjb2xsZWN0X2ZpcnN0X2ZhY3Rvcic6IHtcbiAgICAgICAgaWYgKHRoaXMucHJlcGFyZWRGYWN0b3IgPT09ICdlbWFpbF9jb2RlJykge1xuICAgICAgICAgIHJldHVybiBbeyBraW5kOiAnaW5wdXQnLCBuYW1lOiAnY29kZScsIGxhYmVsS2V5OiAnc2lnbkluLmVtYWlsQ29kZUxhYmVsJywgdHlwZTogJ3RleHQnIH1dO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBwYXNzd29yZCBmaWVsZCB1bmxlc3MgdGhlIG9ubHkgb2ZmZXIgaXMgYW4gZW1haWxlZCBjb2RlIChjaG9zZW5cbiAgICAgICAgLy8gd2l0aCB0aGUgYnV0dG9uIGJlbG93IHRoZSBmb3JtKS5cbiAgICAgICAgY29uc3Qgb2ZmZXJlZCA9IHRoaXMub2ZmZXJlZCgpO1xuICAgICAgICByZXR1cm4gb2ZmZXJlZC5pbmNsdWRlcygnZW1haWxfY29kZScpICYmICFvZmZlcmVkLmluY2x1ZGVzKCdwYXNzd29yZCcpXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogW3sga2luZDogJ2lucHV0JywgbmFtZTogJ3Bhc3N3b3JkJywgbGFiZWxLZXk6ICdzaWduSW4ucGFzc3dvcmRMYWJlbCcsIHR5cGU6ICdwYXNzd29yZCcgfV07XG4gICAgICB9XG4gICAgICBjYXNlICdjb2xsZWN0X3NlY29uZF9mYWN0b3InOlxuICAgICAgICByZXR1cm4gW3sga2luZDogJ2lucHV0JywgbmFtZTogJ2NvZGUnLCBsYWJlbEtleTogJ21mYS5jb2RlTGFiZWwnLCB0eXBlOiAndGV4dCcgfV07XG4gICAgICBjYXNlICdlbnJvbGxfc2Vjb25kX2ZhY3Rvcic6XG4gICAgICAgIC8vIFR3byBjb25zZWN1dGl2ZSBjb2RlcyAowqc1LjYpOiBhIHBob25lIHdpdGggYSBmYXN0IGNsb2NrIGZhaWxzIGhlcmVcbiAgICAgICAgLy8gcmF0aGVyIHRoYW4gb24gZXZlcnkgc2lnbi1pbiBhZnRlcndhcmRzLlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHsga2luZDogJ2lucHV0JywgbmFtZTogJ2NvZGUnLCBsYWJlbEtleTogJ21mYS5lbnJvbGxGaXJzdENvZGVMYWJlbCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICAgIHsga2luZDogJ2lucHV0JywgbmFtZTogJ3NlY29uZENvZGUnLCBsYWJlbEtleTogJ21mYS5lbnJvbGxTZWNvbmRDb2RlTGFiZWwnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2NvbGxlY3RfZW1haWxfY29kZSc6XG4gICAgICAgIHJldHVybiBbeyBraW5kOiAnaW5wdXQnLCBuYW1lOiAnY29kZScsIGxhYmVsS2V5OiAnc2lnbkluLmVtYWlsQ29kZUxhYmVsJywgdHlwZTogJ3RleHQnIH1dO1xuICAgICAgY2FzZSAnY29sbGVjdF9uZXdfcGFzc3dvcmQnOlxuICAgICAgICByZXR1cm4gW3sga2luZDogJ2lucHV0JywgbmFtZTogJ3Bhc3N3b3JkJywgbGFiZWxLZXk6ICdyZXNldC5uZXdQYXNzd29yZExhYmVsJywgdHlwZTogJ3Bhc3N3b3JkJyB9XTtcbiAgICAgIGNhc2UgJ2NvbGxlY3RfY2FwdGNoYSc6XG4gICAgICAgIC8vIMKnNSB0aGUgc2VydmVyIHdpdGhoZWxkIHRoZSBhdHRlbXB0IHVudGlsIGEgY2FwdGNoYSBjbGVhcnMuIFNvbHZpbmcgdGhlXG4gICAgICAgIC8vIHdpZGdldCByZXN1Ym1pdHMgdGhlIGlkZW50aWZpZXIgb24gaXRzIG93bjsgdGhlIGJ1dHRvbiByZXRyaWVzLlxuICAgICAgICByZXR1cm4gW21zZygnY2FwdGNoYS5wcm9tcHQnKV07XG4gICAgICBjYXNlICdhd2FpdF9vYXV0aCc6XG4gICAgICAgIHJldHVybiBbbXNnKCdzaWduSW4ubWFnaWNMaW5rU2VudCcpXTtcbiAgICAgIGNhc2UgJ2RvbmUnOlxuICAgICAgICByZXR1cm4gW21zZygnc2lnbkluLmNoZWNrT3RoZXJUYWInKV07XG4gICAgICBjYXNlICdyZXN0YXJ0JzpcbiAgICAgICAgcmV0dXJuIFttc2coJ2Vycm9yLmdlbmVyaWMnKV07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBBIHN0YXR1cyB0aGlzIFNESyB2ZXJzaW9uIGRvZXMgbm90IGtub3cuIEFuIGhvbmVzdCBtZXNzYWdlIGJlYXRzIGFcbiAgICAgICAgLy8gYmxhbmsgbG9naW4gYm94IHRoZSB1c2VyIGNhbm5vdCBhY3Qgb24uXG4gICAgICAgIHJldHVybiBbbXNnKCdlcnJvci5nZW5lcmljJyldO1xuICAgIH1cbiAgfVxufVxuXG4vKiogQSByZWFkLW9ubHkgbWVzc2FnZSByb3c6IGBsYWJlbEtleWAgaG9sZHMgdGhlIGkxOG4ga2V5IG9mIHRoZSB0ZXh0IHRvIHNob3cuICovXG5mdW5jdGlvbiBtc2cobGFiZWxLZXk6IHN0cmluZyk6IFN0ZXBGaWVsZCB7XG4gIHJldHVybiB7IGtpbmQ6ICdtZXNzYWdlJywgbmFtZTogJycsIGxhYmVsS2V5LCB0eXBlOiAndGV4dCcgfTtcbn1cbiJdfQ==
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW1wdC1mbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hdHRlbXB0LWZsb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLFFBQVEsR0FJVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakYsT0FBTyxFQUFFLFFBQVEsRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFlcEM7Ozs7Ozs7OztHQVNHO0FBMkRILE1BQU0sT0FBTyxvQkFBb0I7SUFDZCxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXJDLE9BQU8sR0FBdUIsSUFBSSxDQUFDO0lBQ25DLElBQUksR0FBRyxLQUFLLENBQUM7SUFDYixNQUFNLEdBQWlCLEVBQUUsQ0FBQztJQUMxQixRQUFRLEdBQUcsY0FBYyxDQUFDO0lBQ25DOzs7O09BSUc7SUFDTSxPQUFPLEdBQTZCLElBQUksQ0FBQztJQUNsRDs7OztPQUlHO0lBQ00sWUFBWSxHQUFvQixJQUFJLENBQUM7SUFDOUMscUdBQXFHO0lBQzVGLGNBQWMsR0FBa0IsSUFBSSxDQUFDO0lBRTlDLG1FQUFtRTtJQUN6RCxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7SUFDbEUsNkZBQTZGO0lBQ25GLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztJQUVoRCxNQUFNLEdBQTJC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QkFBb0I7NEZBQXBCLG9CQUFvQiw2VEFyRHJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtRFQsNERBcERTLHlCQUF5Qjs7NEZBc0R4QixvQkFBb0I7a0JBMURoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMseUJBQXlCLENBQUM7b0JBQ3BDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbURUO2lCQUNGOzhCQUlVLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsT0FBTztzQkFBZixLQUFLO2dCQU1HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07O0FBK0dULGtGQUFrRjtBQUNsRixTQUFTLEdBQUcsQ0FBQyxRQUFnQjtJQUMzQixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIGxvY2FsaXplZEVycm9yTWVzc2FnZSxcbiAgbmV4dFN0ZXAsXG4gIHR5cGUgQXR0ZW1wdFZpZXcsXG4gIHR5cGUgQ2FwdGNoYUNvbnRyb2xsZXIsXG4gIHR5cGUgRmllbGRFcnJvcixcbn0gZnJvbSAnQGF0bGFzYXV0aC9qcyc7XG5pbXBvcnQgeyBBdGxhc1NlcnZpY2UgfSBmcm9tICcuLi9hdGxhcy5zZXJ2aWNlJztcbmltcG9ydCB7IEF0bGFzQ2FwdGNoYVNsb3REaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2NhcHRjaGEtc2xvdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgY2xhc3NGb3IsIHR5cGUgRWxlbWVudEtleSB9IGZyb20gJy4uL2FwcGVhcmFuY2UnO1xuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSAnLi4vaTE4bic7XG5cbi8qKlxuICogT25lIHJlbmRlcmVkIHJvdyBvZiB0aGUgZmxvdy4gQSB1bmlmb3JtIHNoYXBlIChyYXRoZXIgdGhhbiBhIGRpc2NyaW1pbmF0ZWRcbiAqIHVuaW9uKSBzbyB0aGUgdGVtcGxhdGUgYWNjZXNzZXMgb25seSBmaWVsZHMgdGhhdCBhbHdheXMgZXhpc3Qg4oCUIG5vIHJlbGlhbmNlIG9uXG4gKiB0ZW1wbGF0ZSBjb250cm9sLWZsb3cgbmFycm93aW5nIG9mIGEgbG9vcCB2YXJpYWJsZSwgd2hpY2ggdmFyaWVzIGJ5IEFuZ3VsYXJcbiAqIG1pbm9yLiBGb3IgYSBgbWVzc2FnZWAgcm93LCBgbGFiZWxLZXlgIGNhcnJpZXMgdGhlIG1lc3NhZ2UncyBpMThuIGtleS5cbiAqL1xuaW50ZXJmYWNlIFN0ZXBGaWVsZCB7XG4gIGtpbmQ6ICdpbnB1dCcgfCAnbWVzc2FnZSc7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWxLZXk6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzZXJ2ZXItZHJpdmVuIGZsb3cgc2hlbGwsIHNoYXJlZCBieSBgPGF0bGFzLXNpZ24taW4+YCBhbmRcbiAqIGA8YXRsYXMtc2lnbi11cD5gLiBUaGUgQW5ndWxhciBwZWVyIG9mIFJlYWN0J3MgaW50ZXJuYWwgYEF0dGVtcHRGbG93YC5cbiAqXG4gKiBJdCBjb250YWlucyBOTyBkZWNpc2lvbiBhYm91dCB3aGF0IGNvbWVzIG5leHQ6IGl0IHJlbmRlcnMgd2hhdGV2ZXIgYHN0YXR1c2BcbiAqIHRoZSBzZXJ2ZXIgcmV0dXJuZWQsIG1hcHBlZCB0aHJvdWdoIGBuZXh0U3RlcGAgZnJvbSBgQGF0bGFzYXV0aC9qc2AgKHRoZSBzYW1lXG4gKiBleGhhdXN0aXZlIG1hcHBpbmcgdGhlIFJlYWN0IFNESyB1c2VzKSwgc28gYWRkaW5nIGEgc3RlcCBpcyBhIHNlcnZlciBjaGFuZ2VcbiAqIGFuZCBhbiBvdXQtb2YtZGF0ZSBjbGllbnQgZGVncmFkZXMgdG8gYSB2aXNpYmxlIFwicGxlYXNlIHVwZGF0ZVwiIG1lc3NhZ2UgcmF0aGVyXG4gKiB0aGFuIGEgYmxhbmsgc2NyZWVuLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdGxhcy1hdHRlbXB0LWZsb3cnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0F0bGFzQ2FwdGNoYVNsb3REaXJlY3RpdmVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImNscygnY2FyZCcsICdhdGxhcy1jYXJkJylcIj5cbiAgICAgIDxoMSBbY2xhc3NdPVwiY2xzKCdoZWFkZXJUaXRsZScsICdhdGxhcy10aXRsZScpXCI+e3sgdCh0aXRsZUtleSkgfX08L2gxPlxuXG4gICAgICBAZm9yIChlcnJvciBvZiBmb3JtRXJyb3JzKCk7IHRyYWNrIGVycm9yLmNvZGUpIHtcbiAgICAgICAgPHAgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkRXJyb3InLCAnYXRsYXMtZXJyb3InKVwiIHJvbGU9XCJhbGVydFwiPnt7IGVycm9yVGV4dChlcnJvcikgfX08L3A+XG4gICAgICB9XG5cbiAgICAgIDxmb3JtIChzdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiPlxuICAgICAgICBAZm9yIChmIG9mIGZpZWxkcygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICBAaWYgKGYua2luZCA9PT0gJ2lucHV0Jykge1xuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYXRsYXMtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdChmLmxhYmVsS2V5KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkSW5wdXQnLCAnYXRsYXMtaW5wdXQnKVwiXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiZi50eXBlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5uYW1lXT1cImYubmFtZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlc1tmLm5hbWVdID8/ICcnXCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwic2V0VmFsdWUoZi5uYW1lLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIEBmb3IgKGVycm9yIG9mIGZpZWxkRXJyb3JzRm9yKGYubmFtZSk7IHRyYWNrIGVycm9yLmNvZGUpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRFcnJvcicsICdhdGxhcy1lcnJvcicpXCI+e3sgZXJyb3JUZXh0KGVycm9yKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxwPnt7IHQoZi5sYWJlbEtleSkgfX08L3A+XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzaG93Q2FwdGNoYSgpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF0bGFzLWNhcHRjaGFcIiBkYXRhLWF0bGFzLWNhcHRjaGE9XCJcIiBbYXRsYXNDYXB0Y2hhU2xvdF09XCJjYXB0Y2hhXCI+PC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHNob3dTdWJtaXQoKSkge1xuICAgICAgICAgIDxidXR0b24gW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblByaW1hcnknLCAnYXRsYXMtYnV0dG9uJylcIiBbZGlzYWJsZWRdPVwiYnVzeVwiIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICAgIHt7IHQoJ3NpZ25Jbi5zdWJtaXQnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzaG93RW1haWxDb2RlT3B0aW9uKCkpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBbY2xhc3NdPVwiY2xzKCdmb3JtQnV0dG9uU2Vjb25kYXJ5JywgJ2F0bGFzLWJ1dHRvbi1zZWNvbmRhcnknKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnVzeVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaG9vc2VGYWN0b3IuZW1pdCgnZW1haWxfY29kZScpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0KCdzaWduSW4udXNlRW1haWxDb2RlJykgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRlbXB0Rmxvd0NvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXRsYXMgPSBpbmplY3QoQXRsYXNTZXJ2aWNlKTtcblxuICBASW5wdXQoKSBhdHRlbXB0OiBBdHRlbXB0VmlldyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBidXN5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVycm9yczogRmllbGRFcnJvcltdID0gW107XG4gIEBJbnB1dCgpIHRpdGxlS2V5ID0gJ3NpZ25Jbi50aXRsZSc7XG4gIC8qKlxuICAgKiBUaGUgc2lnbi1pbiBjYXB0Y2hhLCBkcmF3biBhYm92ZSB0aGUgc3VibWl0IGJ1dHRvbiBvbiB0aGUgaWRlbnRpZmllciBzdGVwXG4gICAqIChhbiBhbHdheXMtb24gc2lnbi1pbiBjYXB0Y2hhKSBhbmQgb24gdGhlIGNoYWxsZW5nZSBzdGVwIHRoZSBzZXJ2ZXIgZGVtYW5kc1xuICAgKiB3aXRoIGBuZWVkc19jYXB0Y2hhYC4gTnVsbCB3aGVuIHRoZSBmbG93IGRyYXdzIG5vbmUuXG4gICAqL1xuICBASW5wdXQoKSBjYXB0Y2hhOiBDYXB0Y2hhQ29udHJvbGxlciB8IG51bGwgPSBudWxsO1xuICAvKipcbiAgICogVGhlIGZpcnN0IGZhY3RvcnMgdG8gb2ZmZXIgb24gdGhlIGBuZWVkc19maXJzdF9mYWN0b3JgIHN0ZXAg4oCUIHBhc3NcbiAgICogYEF0bGFzRmxvd0NvbnRyb2xsZXIuZmlyc3RGYWN0b3JzKClgLCB3aGljaCBkcm9wcyBlbWFpbCBjb2RlIC8gbGluayB3aGlsZSB0aGVcbiAgICogYXBwIGNhbm5vdCBkZWxpdmVyIGVtYWlsLiBOdWxsIHVzZXMgdGhlIHNlcnZlcidzIGxpc3QgYXMtaXMuXG4gICAqL1xuICBASW5wdXQoKSBmaXJzdEZhY3RvcnM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBUaGUgZmlyc3QgZmFjdG9yIGFscmVhZHkgc2VudCAoYEF0bGFzRmxvd0NvbnRyb2xsZXIucHJlcGFyZWRGYWN0b3IoKWApOiBpdHMgY29kZSBpcyBjb2xsZWN0ZWQuICovXG4gIEBJbnB1dCgpIHByZXBhcmVkRmFjdG9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKiogRW1pdHMgdGhlIGNvbGxlY3RlZCBmaWVsZCB2YWx1ZXMgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQuICovXG4gIEBPdXRwdXQoKSBzdWJtaXRGbG93ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigpO1xuICAvKiogRW1pdHMgd2hlbiB0aGUgdXNlciBwaWNrcyBhIGZpcnN0IGZhY3RvciB0aGUgc2VydmVyIG11c3Qgc2VuZCBmaXJzdCAoYW4gZW1haWxlZCBjb2RlKS4gKi9cbiAgQE91dHB1dCgpIGNob29zZUZhY3RvciA9IG5ldyBFdmVudEVtaXR0ZXI8J2VtYWlsX2NvZGUnPigpO1xuXG4gIHByb3RlY3RlZCB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBwcm90ZWN0ZWQgdChrZXk6IHN0cmluZywgdmFycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0cmFuc2xhdGUodGhpcy5hdGxhcy5sb2NhbGl6YXRpb24sIGtleSwgdmFycyk7XG4gIH1cblxuICAvKiogQSBzZXJ2ZXIgZXJyb3IgaW4gdGhlIGFwcCdzIGxhbmd1YWdlIChgZXJyb3IuPHJlYXNvbj5gLCBlbHNlIHRoZSBzZXJ2ZXIncyBtZXNzYWdlKS4gKi9cbiAgcHJvdGVjdGVkIGVycm9yVGV4dChlcnJvcjogRmllbGRFcnJvcik6IHN0cmluZyB7XG4gICAgLy8gYGVycm9yTG9jYWxpemF0aW9uYCBpcyByZWFkIGRlZmVuc2l2ZWx5OiBhIHN0YW5kLWluIHNlcnZpY2UgbWF5IGxhY2sgaXQuXG4gICAgY29uc3QgbGF5ZXIgPSAodGhpcy5hdGxhcyBhcyB7IGVycm9yTG9jYWxpemF0aW9uPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9KS5lcnJvckxvY2FsaXphdGlvbjtcbiAgICByZXR1cm4gbG9jYWxpemVkRXJyb3JNZXNzYWdlKGVycm9yLCBsYXllciA/PyB0aGlzLmF0bGFzLmxvY2FsaXphdGlvbiwgdGhpcy5hdGxhcy5sb2NhbGl6YXRpb24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNscyhrZXk6IEVsZW1lbnRLZXksIGJhc2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNsYXNzRm9yKGtleSwgdGhpcy5hdGxhcy5hcHBlYXJhbmNlLCBiYXNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyA9IHsgLi4udGhpcy52YWx1ZXMsIFtuYW1lXTogdmFsdWUgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblN1Ym1pdChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc3VibWl0Rmxvdy5lbWl0KHRoaXMudmFsdWVzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmb3JtRXJyb3JzKCk6IEZpZWxkRXJyb3JbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmZpbHRlcigoZXJyb3IpID0+ICFlcnJvci5wYXJhbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmllbGRFcnJvcnNGb3IobmFtZTogc3RyaW5nKTogRmllbGRFcnJvcltdIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMuZmlsdGVyKChlcnJvcikgPT4gZXJyb3IucGFyYW0gPT09IG5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGVwKCkge1xuICAgIHJldHVybiB0aGlzLmF0dGVtcHQgPyBuZXh0U3RlcCh0aGlzLmF0dGVtcHQpIDogKHsga2luZDogJ2NvbGxlY3RfaWRlbnRpZmllcicgfSBhcyBjb25zdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd0NhcHRjaGEoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2luZCA9IHRoaXMuc3RlcCgpLmtpbmQ7XG4gICAgcmV0dXJuICEhdGhpcy5jYXB0Y2hhICYmIChraW5kID09PSAnY29sbGVjdF9pZGVudGlmaWVyJyB8fCBraW5kID09PSAnY29sbGVjdF9jYXB0Y2hhJyk7XG4gIH1cblxuICAvKiogVGhlIGZpcnN0IGZhY3RvcnMgb24gb2ZmZXIgYXQgYSBgbmVlZHNfZmlyc3RfZmFjdG9yYCBzdGVwIChlbXB0eSBvbiBhbnkgb3RoZXIpLiAqL1xuICBwcml2YXRlIG9mZmVyZWQoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLnN0ZXAoKTtcbiAgICBpZiAoc3RlcC5raW5kICE9PSAnY29sbGVjdF9maXJzdF9mYWN0b3InKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHRoaXMuZmlyc3RGYWN0b3JzID8/IHN0ZXAuc3RyYXRlZ2llcztcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93RW1haWxDb2RlT3B0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByZXBhcmVkRmFjdG9yICE9PSAnZW1haWxfY29kZScgJiYgdGhpcy5vZmZlcmVkKCkuaW5jbHVkZXMoJ2VtYWlsX2NvZGUnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93U3VibWl0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtpbmQgPSB0aGlzLnN0ZXAoKS5raW5kO1xuICAgIC8vIE5vdGhpbmcgdG8gc3VibWl0IG9uIGEgZmlyc3QtZmFjdG9yIHN0ZXAgdGhhdCBvbmx5IG9mZmVycyBhbiBlbWFpbGVkIGNvZGVcbiAgICAvLyB1bnRpbCB0aGF0IGNvZGUgaXMgc2VudC5cbiAgICBpZiAoa2luZCA9PT0gJ2NvbGxlY3RfZmlyc3RfZmFjdG9yJykgcmV0dXJuIHRoaXMuZmllbGRzKCkubGVuZ3RoID4gMDtcbiAgICByZXR1cm4ga2luZCAhPT0gJ2RvbmUnICYmIGtpbmQgIT09ICdhd2FpdF9vYXV0aCc7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmllbGRzKCk6IFN0ZXBGaWVsZFtdIHtcbiAgICBjb25zdCBzdGVwID0gdGhpcy5zdGVwKCk7XG4gICAgc3dpdGNoIChzdGVwLmtpbmQpIHtcbiAgICAgIGNhc2UgJ2NvbGxlY3RfaWRlbnRpZmllcic6XG4gICAgICAgIHJldHVybiBbeyBraW5kOiAnaW5wdXQnLCBuYW1lOiAnaWRlbnRpZmllcicsIGxhYmVsS2V5OiAnc2lnbkluLmlkZW50aWZpZXJMYWJlbCcsIHR5cGU6ICdlbWFpbCcgfV07XG4gICAgICBjYXNlICdjb2xsZWN0X2ZpcnN0X2ZhY3Rvcic6IHtcbiAgICAgICAgaWYgKHRoaXMucHJlcGFyZWRGYWN0b3IgPT09ICdlbWFpbF9jb2RlJykge1xuICAgICAgICAgIHJldHVybiBbeyBraW5kOiAnaW5wdXQnLCBuYW1lOiAnY29kZScsIGxhYmVsS2V5OiAnc2lnbkluLmVtYWlsQ29kZUxhYmVsJywgdHlwZTogJ3RleHQnIH1dO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBwYXNzd29yZCBmaWVsZCB1bmxlc3MgdGhlIG9ubHkgb2ZmZXIgaXMgYW4gZW1haWxlZCBjb2RlIChjaG9zZW5cbiAgICAgICAgLy8gd2l0aCB0aGUgYnV0dG9uIGJlbG93IHRoZSBmb3JtKS5cbiAgICAgICAgY29uc3Qgb2ZmZXJlZCA9IHRoaXMub2ZmZXJlZCgpO1xuICAgICAgICByZXR1cm4gb2ZmZXJlZC5pbmNsdWRlcygnZW1haWxfY29kZScpICYmICFvZmZlcmVkLmluY2x1ZGVzKCdwYXNzd29yZCcpXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogW3sga2luZDogJ2lucHV0JywgbmFtZTogJ3Bhc3N3b3JkJywgbGFiZWxLZXk6ICdzaWduSW4ucGFzc3dvcmRMYWJlbCcsIHR5cGU6ICdwYXNzd29yZCcgfV07XG4gICAgICB9XG4gICAgICBjYXNlICdjb2xsZWN0X3NlY29uZF9mYWN0b3InOlxuICAgICAgICByZXR1cm4gW3sga2luZDogJ2lucHV0JywgbmFtZTogJ2NvZGUnLCBsYWJlbEtleTogJ21mYS5jb2RlTGFiZWwnLCB0eXBlOiAndGV4dCcgfV07XG4gICAgICBjYXNlICdlbnJvbGxfc2Vjb25kX2ZhY3Rvcic6XG4gICAgICAgIC8vIFR3byBjb25zZWN1dGl2ZSBjb2RlcyAowqc1LjYpOiBhIHBob25lIHdpdGggYSBmYXN0IGNsb2NrIGZhaWxzIGhlcmVcbiAgICAgICAgLy8gcmF0aGVyIHRoYW4gb24gZXZlcnkgc2lnbi1pbiBhZnRlcndhcmRzLlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHsga2luZDogJ2lucHV0JywgbmFtZTogJ2NvZGUnLCBsYWJlbEtleTogJ21mYS5lbnJvbGxGaXJzdENvZGVMYWJlbCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICAgIHsga2luZDogJ2lucHV0JywgbmFtZTogJ3NlY29uZENvZGUnLCBsYWJlbEtleTogJ21mYS5lbnJvbGxTZWNvbmRDb2RlTGFiZWwnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2NvbGxlY3RfZW1haWxfY29kZSc6XG4gICAgICAgIHJldHVybiBbeyBraW5kOiAnaW5wdXQnLCBuYW1lOiAnY29kZScsIGxhYmVsS2V5OiAnc2lnbkluLmVtYWlsQ29kZUxhYmVsJywgdHlwZTogJ3RleHQnIH1dO1xuICAgICAgY2FzZSAnY29sbGVjdF9uZXdfcGFzc3dvcmQnOlxuICAgICAgICByZXR1cm4gW3sga2luZDogJ2lucHV0JywgbmFtZTogJ3Bhc3N3b3JkJywgbGFiZWxLZXk6ICdyZXNldC5uZXdQYXNzd29yZExhYmVsJywgdHlwZTogJ3Bhc3N3b3JkJyB9XTtcbiAgICAgIGNhc2UgJ2NvbGxlY3RfY2FwdGNoYSc6XG4gICAgICAgIC8vIMKnNSB0aGUgc2VydmVyIHdpdGhoZWxkIHRoZSBhdHRlbXB0IHVudGlsIGEgY2FwdGNoYSBjbGVhcnMuIFNvbHZpbmcgdGhlXG4gICAgICAgIC8vIHdpZGdldCByZXN1Ym1pdHMgdGhlIGlkZW50aWZpZXIgb24gaXRzIG93bjsgdGhlIGJ1dHRvbiByZXRyaWVzLlxuICAgICAgICByZXR1cm4gW21zZygnY2FwdGNoYS5wcm9tcHQnKV07XG4gICAgICBjYXNlICdhd2FpdF9vYXV0aCc6XG4gICAgICAgIHJldHVybiBbbXNnKCdzaWduSW4ubWFnaWNMaW5rU2VudCcpXTtcbiAgICAgIGNhc2UgJ2RvbmUnOlxuICAgICAgICByZXR1cm4gW21zZygnc2lnbkluLmNoZWNrT3RoZXJUYWInKV07XG4gICAgICBjYXNlICdyZXN0YXJ0JzpcbiAgICAgICAgcmV0dXJuIFttc2coJ2Vycm9yLmdlbmVyaWMnKV07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBBIHN0YXR1cyB0aGlzIFNESyB2ZXJzaW9uIGRvZXMgbm90IGtub3cuIEFuIGhvbmVzdCBtZXNzYWdlIGJlYXRzIGFcbiAgICAgICAgLy8gYmxhbmsgbG9naW4gYm94IHRoZSB1c2VyIGNhbm5vdCBhY3Qgb24uXG4gICAgICAgIHJldHVybiBbbXNnKCdlcnJvci5nZW5lcmljJyldO1xuICAgIH1cbiAgfVxufVxuXG4vKiogQSByZWFkLW9ubHkgbWVzc2FnZSByb3c6IGBsYWJlbEtleWAgaG9sZHMgdGhlIGkxOG4ga2V5IG9mIHRoZSB0ZXh0IHRvIHNob3cuICovXG5mdW5jdGlvbiBtc2cobGFiZWxLZXk6IHN0cmluZyk6IFN0ZXBGaWVsZCB7XG4gIHJldHVybiB7IGtpbmQ6ICdtZXNzYWdlJywgbmFtZTogJycsIGxhYmVsS2V5LCB0eXBlOiAndGV4dCcgfTtcbn1cbiJdfQ==
|