sonamu 0.13.2 → 0.13.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/decorators.d.ts +2 -3
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +1 -1
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +5 -5
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +8 -3
- package/dist/database/puri.d.ts +8 -3
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +120 -15
- package/dist/database/puri.types.d.ts +5 -2
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +1 -1
- package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
- package/dist/dict/sonamu-dictionary.js +24 -9
- package/dist/storage/buffered-file.d.ts +3 -3
- package/dist/storage/buffered-file.d.ts.map +1 -1
- package/dist/storage/buffered-file.js +2 -2
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -1
- package/dist/storage/storage-manager.d.ts +3 -4
- package/dist/storage/storage-manager.d.ts.map +1 -1
- package/dist/storage/storage-manager.js +2 -2
- package/dist/storage/types.d.ts +3 -2
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/uploaded-file.d.ts +3 -3
- package/dist/storage/uploaded-file.d.ts.map +1 -1
- package/dist/storage/uploaded-file.js +1 -1
- package/package.json +5 -2
- package/src/api/__tests__/sonamu.storage.test.ts +145 -0
- package/src/api/decorators.ts +2 -3
- package/src/api/sonamu.ts +6 -6
- package/src/database/__tests__/puri-hydration.test.ts +226 -0
- package/src/database/base-model.ts +7 -3
- package/src/database/puri.ts +204 -15
- package/src/database/puri.types.test-d.ts +29 -0
- package/src/database/puri.types.ts +10 -2
- package/src/dict/sonamu-dictionary.ts +28 -6
- package/src/storage/__tests__/storage-manager.test.ts +64 -0
- package/src/storage/buffered-file.ts +3 -3
- package/src/storage/index.ts +1 -1
- package/src/storage/storage-manager.ts +4 -5
- package/src/storage/storage.test-d.ts +47 -0
- package/src/storage/types.ts +3 -2
- package/src/storage/uploaded-file.ts +4 -4
|
@@ -64,11 +64,14 @@ export type LeftJoinMarkerFor<TTables, Path extends string> = IsNullableColumn<T
|
|
|
64
64
|
type IsNullableJoinedTable<TTables, TableKey> = TableKey extends keyof TTables ? TTables[TableKey] extends LeftJoinedMarker ? true : false : false;
|
|
65
65
|
type JoinPath<Prefix extends string, Key extends string> = Prefix extends "" ? Key : `${Prefix}__${Key}`;
|
|
66
66
|
export type ParseSelectObject<TTables extends object, TSelect extends SelectObject<TTables>> = ParseSelectObjectWithPath<TTables, TSelect, "">;
|
|
67
|
+
type IsNullableSelectGroup<TTables, TSelect, Path extends string> = IsNullableJoinedTable<TTables, Path> extends true ? true : TSelect extends {
|
|
68
|
+
id: `${infer Alias}.${string}`;
|
|
69
|
+
} ? IsNullableJoinedTable<TTables, Alias> : false;
|
|
67
70
|
type ParseSelectObjectWithPath<TTables extends object, TSelect extends SelectObject<TTables>, Prefix extends string> = Expand<{
|
|
68
|
-
[K in keyof TSelect]: TSelect[K] extends SqlExpression<SqlExpressionType, boolean> ? ParseSqlExpression<TSelect[K]> : IsNestedObject<TSelect[K]> extends true ? TSelect[K] extends NestedSelectObject<TTables> ?
|
|
71
|
+
[K in keyof TSelect]: TSelect[K] extends SqlExpression<SqlExpressionType, boolean> ? ParseSqlExpression<TSelect[K]> : IsNestedObject<TSelect[K]> extends true ? TSelect[K] extends NestedSelectObject<TTables> ? IsNullableSelectGroup<TTables, TSelect[K], JoinPath<Prefix, K & string>> extends true ? Expand<ParseSelectObjectInner<TTables, TSelect[K], JoinPath<Prefix, K & string>>> | null : Expand<ParseSelectObjectInner<TTables, TSelect[K], JoinPath<Prefix, K & string>>> : never : ExtractColumnType<TTables, TSelect[K] & string>;
|
|
69
72
|
}>;
|
|
70
73
|
type ParseSelectObjectInner<TTables extends object, TSelect extends SelectObject<TTables>, Prefix extends string> = Expand<{
|
|
71
|
-
[K in keyof TSelect]: TSelect[K] extends SqlExpression<SqlExpressionType, boolean> ? ParseSqlExpression<TSelect[K]> : IsNestedObject<TSelect[K]> extends true ? TSelect[K] extends NestedSelectObject<TTables> ?
|
|
74
|
+
[K in keyof TSelect]: TSelect[K] extends SqlExpression<SqlExpressionType, boolean> ? ParseSqlExpression<TSelect[K]> : IsNestedObject<TSelect[K]> extends true ? TSelect[K] extends NestedSelectObject<TTables> ? IsNullableSelectGroup<TTables, TSelect[K], JoinPath<Prefix, K & string>> extends true ? Expand<ParseSelectObjectInner<TTables, TSelect[K], JoinPath<Prefix, K & string>>> | null : Expand<ParseSelectObjectInner<TTables, TSelect[K], JoinPath<Prefix, K & string>>> : never : ExtractColumnTypeRaw<TTables, TSelect[K] & string>;
|
|
72
75
|
}>;
|
|
73
76
|
export type ExtractColumnType<TTables extends object, Path extends string> = Path extends `${infer TAlias}.${infer TColumn}` ? TAlias extends keyof TTables ? TColumn extends keyof TTables[TAlias] ? TTables[TAlias] extends LeftJoinedMarker ? TTables[TAlias][TColumn] | null : TTables[TAlias][TColumn] : never : never : IsSingleKey<TTables> extends true ? Path extends keyof TTables[keyof TTables] ? TTables[keyof TTables][Path] : never : never;
|
|
74
77
|
type ExtractColumnTypeRaw<TTables extends object, Path extends string> = Path extends `${infer TAlias}.${infer TColumn}` ? TAlias extends keyof TTables ? TColumn extends keyof TTables[TAlias] ? TTables[TAlias][TColumn] : never : never : IsSingleKey<TTables> extends true ? Path extends keyof TTables[keyof TTables] ? TTables[keyof TTables][Path] : never : never;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puri.types.d.ts","sourceRoot":"","sources":["../../src/database/puri.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"puri.types.d.ts","sourceRoot":"","sources":["../../src/database/puri.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,4 +11,4 @@ var init_puri_types = __esmMin((() => {
|
|
|
11
11
|
init_puri_types();
|
|
12
12
|
export { FUZZY_OPERATORS, init_puri_types };
|
|
13
13
|
|
|
14
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyaS50eXBlcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvcHVyaS50eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBveGxpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovIC8vIFB1cmkudHlwZXMudHPripQg64uk7JaR7ZWcIO2DgOyeheydhCDsgqzsmqntlZjqs6Ag7J6I7Iq164uI64ukLlxuXG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgeyB0eXBlIERhdGFiYXNlRm9yZWlnbktleXMsIHR5cGUgRGF0YWJhc2VTY2hlbWFFeHRlbmQgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgUHVyaSB9IGZyb20gXCIuL3B1cmlcIjtcbmltcG9ydCB7IHR5cGUgUHVyaVN1YnNldEZuIH0gZnJvbSBcIi4vcHVyaS1zdWJzZXQudHlwZXNcIjtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIOuCtOu2gCDtg4DsnoUg7YKkICjrqZTtg4DrjbDsnbTthLApXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxudHlwZSBGdWxsdGV4dEtleSA9IFwiX19mdWxsdGV4dF9fXCI7XG50eXBlIFZpcnR1YWxLZXkgPSBcIl9fdmlydHVhbF9fXCI7XG50eXBlIExlZnRKb2luZWRLZXkgPSBcIl9fbGVmdEpvaW5lZF9fXCI7XG50eXBlIEhhc0RlZmF1bHQgPSBcIl9faGFzRGVmYXVsdF9fXCI7XG50eXBlIEdlbmVyYXRlZEtleSA9IFwiX19nZW5lcmF0ZWRfX1wiO1xudHlwZSBWZWN0b3JLZXkgPSBcIl9fdmVjdG9yX19cIjtcbnR5cGUgSnNvbktleSA9IFwiX19qc29uX19cIjtcbnR5cGUgVmlydHVhbFF1ZXJ5S2V5ID0gXCJfX3ZpcnR1YWxfcXVlcnlfX1wiO1xudHlwZSBTcWxFeHByZXNzaW9uVHlwZSA9IFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcImRhdGVcIiB8IFwic3RyaW5nW11cIiB8IFwidHN2ZWN0b3JcIjtcblxudHlwZSBJbnRlcm5hbFR5cGVLZXlzID1cbiAgfCBGdWxsdGV4dEtleVxuICB8IFZpcnR1YWxLZXlcbiAgfCBMZWZ0Sm9pbmVkS2V5XG4gIHwgSGFzRGVmYXVsdFxuICB8IEdlbmVyYXRlZEtleVxuICB8IFZlY3RvcktleVxuICB8IEpzb25LZXlcbiAgfCBWaXJ0dWFsUXVlcnlLZXk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyDtg4DsnoUg7Jyg7Yu466as7YuwXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBfX3ZlY3Rvcl9fIOuplO2DgOuNsOydtO2EsOyXkOyEnCDrsqHthLAg7Lus65+8IOy2lOy2nFxudHlwZSBWZWN0b3JDb2x1bW5LZXlzPFQ+ID0gVCBleHRlbmRzIHsgW0sgaW4gVmVjdG9yS2V5XTogcmVhZG9ubHkgKGluZmVyIFYpW10gfVxuICA/IFYgJiBzdHJpbmdcbiAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgVmVjdG9yQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9XG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke1ZlY3RvckNvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlID8gVmVjdG9yQ29sdW1uS2V5czxUVGFibGVzW2tleW9mIFRUYWJsZXNdPiA6IG5ldmVyKTtcblxuLy8gX19qc29uX18g66mU7YOA642w7J207YSw7JeQ7IScIEpTT04g7Lus65+8IOy2lOy2nFxudHlwZSBKc29uQ29sdW1uS2V5czxUPiA9IFQgZXh0ZW5kcyB7IFtLIGluIEpzb25LZXldOiByZWFkb25seSAoaW5mZXIgSilbXSB9ID8gSiAmIHN0cmluZyA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBKc29uQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9XG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke0pzb25Db2x1bW5LZXlzPFRUYWJsZXNbVEFsaWFzXT59YDtcbiAgICB9W2tleW9mIFRUYWJsZXNdXG4gIHwgKElzU2luZ2xlS2V5PFRUYWJsZXM+IGV4dGVuZHMgdHJ1ZSA/IEpzb25Db2x1bW5LZXlzPFRUYWJsZXNba2V5b2YgVFRhYmxlc10+IDogbmV2ZXIpO1xuXG50eXBlIEpzb25TdXBlcnNldE5lc3RlZFZhbHVlPFQ+ID0gVCBleHRlbmRzIHJlYWRvbmx5IChpbmZlciBFbGVtZW50KVtdXG4gID8gSnNvblN1cGVyc2V0TmVzdGVkVmFsdWU8RWxlbWVudD5bXVxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICA/IHsgW0sgaW4ga2V5b2YgVF0/OiBKc29uU3VwZXJzZXROZXN0ZWRWYWx1ZTxUW0tdPiB9XG4gICAgOiBUO1xuXG5leHBvcnQgdHlwZSBKc29uU3VwZXJzZXRWYWx1ZTxUPiA9IEpzb25TdXBlcnNldE5lc3RlZFZhbHVlPE5vbk51bGxhYmxlPFQ+PjtcblxuLy8g7YWM7J2067iU66qFIO2DgOyehVxuZXhwb3J0IHR5cGUgVGFibGVOYW1lPFRTY2hlbWE+ID0ga2V5b2YgVFNjaGVtYSAmIHN0cmluZztcblxuLy8g7YWM7J2067iU7J2YIGlkKFBLKSDtg4DsnoXsnYQg7LaU7LacXG5leHBvcnQgdHlwZSBJZFR5cGU8VFNjaGVtYSwgVFRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4gPSBUU2NoZW1hW1RUYWJsZV0gZXh0ZW5kcyB7IGlkOiBpbmZlciBJIH1cbiAgPyBJXG4gIDogbnVtYmVyO1xuXG4vLyB2aXJ0dWFsIOy7rOufvCDtg4DsnoUg7LaU7LacXG50eXBlIFZpcnR1YWxLZXlzPFQ+ID0gVCBleHRlbmRzIHsgW0sgaW4gVmlydHVhbEtleV06IHJlYWRvbmx5IChpbmZlciBWKVtdIH0gPyBWICYgc3RyaW5nIDogbmV2ZXI7XG5cbi8vIHZpcnR1YWwg7Lus65+8IOygnOqxsFxudHlwZSBTdHJpcFZpcnR1YWw8VD4gPSBPbWl0PFQsIFZpcnR1YWxLZXlzPFQ+PjtcblxuLy8gTEVGVCBKT0lOIOuniOy7pCAtIG51bGxhYmxlIEZL66GcIOyhsOyduOuQnCDthYzsnbTruJRcbi8vIOydtCDrp4jsu6TripQgbnVsbGFibGUgRksgKyBsZWZ0Sm9pbiDsobDtlansl5DshJzrp4wg67aZ7Iq164uI64ukLlxuLy8gam9pbiArIEZLIG51bGxhYmxlIC0+IOyViCDrtpnsnYxcbi8vIGpvaW4gKyBGSyBub24tbnVsbGFibGUgLT4g7JWIIOu2meydjFxuLy8gbGVmdEpvaW4gKyBGSyBub24tbnVsbGFibGUgLT4g7JWIIOu2meydjFxuLy8gbGVmdEpvaW4gKyBGSyBudWxsYWJsZSAtPiDrtpnsnYwhXG5leHBvcnQgdHlwZSBMZWZ0Sm9pbmVkTWFya2VyID0geyBbSyBpbiBMZWZ0Sm9pbmVkS2V5XTogdHJ1ZSB9O1xuXG4vLyDrqZTtg4DrjbDsnbTthLAg7ZWE65OcIOygnOyZuO2VnCDsi6TsoJwg7JeU7Yuw7YuwIOy7rOufvFxuZXhwb3J0IHR5cGUgQ29sdW1uS2V5czxUPiA9IEV4Y2x1ZGU8a2V5b2YgU3RyaXBWaXJ0dWFsPFQ+LCBJbnRlcm5hbFR5cGVLZXlzPiAmIHN0cmluZztcblxuLy8gdmlydHVhbCDsu6zrn7wg7KCc6rGwIO2bhCBfX2Z1bGx0ZXh0X18g7Jyg7KeAXG5leHBvcnQgdHlwZSBQdXJpVGFibGU8VD4gPSBPbWl0PFN0cmlwVmlydHVhbDxUPiwgVmlydHVhbEtleT47XG5cbi8vIOuCtOu2gCDtg4DsnoUg7YKkIOygnOyZuCAo7Iuk7KCcIOy7rOufvOunjCDrgqjquYApXG5leHBvcnQgdHlwZSBPbWl0SW50ZXJuYWxUeXBlS2V5czxUPiA9IE9taXQ8VCwgSW50ZXJuYWxUeXBlS2V5cz47XG5cbi8vIFRUYWJsZXPsnZgg66qo65OgIO2FjOydtOu4lOyXkOyEnCDsgqzsmqkg6rCA64ql7ZWcIOy7rOufvCDqsr3roZxcbmV4cG9ydCB0eXBlIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPSAoXG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IENvbHVtbktleXM8VFRhYmxlc1trZXlvZiBUVGFibGVzXT4gLy8g64uo7J28IO2FjOydtOu4lOydtOuptCDsu6zrn7zrqoXrp4zrj4Qg7ZeI7JqpXG4gICAgICA6IG5ldmVyKVxuKSAmXG4gIHN0cmluZztcblxuLy8g7Iir7J6QIO2DgOyehSDsu6zrn7zrp4wg7LaU7Lac7ZWY64qUIOycoO2LuOumrO2LsCDtg4DsnoVcbnR5cGUgTnVtZXJpY0NvbHVtbktleXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50IHwgbnVsbCB8IHVuZGVmaW5lZCA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF0gJlxuICBzdHJpbmc7XG5cbi8vIFRUYWJsZXPsnZgg66qo65OgIO2FjOydtOu4lOyXkOyEnCDsiKvsnpAg7YOA7J6FIOy7rOufvOunjCDstpTstpxcbmV4cG9ydCB0eXBlIE51bWVyaWNDb2x1bW5zPFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID1cbiAgfCB7XG4gICAgICBbVEFsaWFzIGluIGtleW9mIFRUYWJsZXNdOiBgJHtUQWxpYXMgJiBzdHJpbmd9LiR7TnVtZXJpY0NvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IE51bWVyaWNDb2x1bW5LZXlzPFRUYWJsZXNba2V5b2YgVFRhYmxlc10+IC8vIOuLqOydvCDthYzsnbTruJTsnbTrqbQg7Lus65+866qF66eM64+EIO2XiOyaqVxuICAgICAgOiBuZXZlcik7XG5cbi8vIEdyb3VwIEJ5LCBPcmRlciBCeSwgSGF2aW5nIOuTseyXkOyEnCDshKDtg50g6rCA64ql7ZWcIOy7rOufvFxuZXhwb3J0IHR5cGUgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0LCBUUmVzdWx0ID0gYW55PiA9XG4gIHwgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPlxuICB8IGAke2tleW9mIFRSZXN1bHQgJiBzdHJpbmd9YDtcblxuLy8gU2VsZWN0IOqwkiDtg4DsnoUg7ZmV7J6lICjri6jsnbwg7Lus65+8IOuYkOuKlCBTUUwg7ZGc7ZiE7IudKVxuZXhwb3J0IHR5cGUgU2VsZWN0VmFsdWU8VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPVxuICB8IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5cbiAgfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcImRhdGVcIiB8IFwic3RyaW5nW11cIiwgYm9vbGVhbj47XG5cbi8vIOykkeyyqSBTZWxlY3Qg6rCd7LK0IO2DgOyehSAo7J6s6reA7KCBKVxuLy8g7JiIOiB7IHBhcmVudDogeyBpZDogXCJwYXJlbnQuaWRcIiwgbmFtZTogXCJwYXJlbnQubmFtZVwiIH0gfVxuZXhwb3J0IHR5cGUgTmVzdGVkU2VsZWN0T2JqZWN0PFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBba2V5OiBzdHJpbmddOiBTZWxlY3RWYWx1ZTxUVGFibGVzPiB8IE5lc3RlZFNlbGVjdE9iamVjdDxUVGFibGVzPjtcbn07XG5cbi8vIFNlbGVjdCDqsJ3ssrQg7YOA7J6FIChmbGF0IOuYkOuKlCDspJHssqkg7ZeI7JqpKVxuZXhwb3J0IHR5cGUgU2VsZWN0T2JqZWN0PFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID0gTmVzdGVkU2VsZWN0T2JqZWN0PFRUYWJsZXM+O1xuXG4vLyDqsJLsnbQg7KSR7LKpIOqwneyytOyduOyngCDtjJDrs4TtlZjripQg7Zes7Y28IO2DgOyehVxudHlwZSBJc05lc3RlZE9iamVjdDxUPiA9IFQgZXh0ZW5kcyBzdHJpbmdcbiAgPyBmYWxzZVxuICA6IFQgZXh0ZW5kcyBTcWxFeHByZXNzaW9uPFNxbEV4cHJlc3Npb25UeXBlLCBib29sZWFuPlxuICAgID8gZmFsc2VcbiAgICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZTtcblxuLy8g7Lus65+87J20IG51bGxhYmxl7J247KeAIO2ZleyduCAo7Iqk7YKk66eI7JeQ7IScIOyngeygkSDstpTstpwpXG4vLyDsmIg6IElzTnVsbGFibGVDb2x1bW48VFRhYmxlcywgXCJlbXBsb3llZXMuZGVwYXJ0bWVudF9pZFwiPiDihpIgZGVwYXJ0bWVudF9pZOqwgCBudW1iZXIgfCBudWxs7J2066m0IHRydWVcbmV4cG9ydCB0eXBlIElzTnVsbGFibGVDb2x1bW48XG4gIFRUYWJsZXMsXG4gIFBhdGggZXh0ZW5kcyBzdHJpbmcsXG4+ID0gUGF0aCBleHRlbmRzIGAke2luZmVyIFRBbGlhc30uJHtpbmZlciBUQ29sdW1ufWBcbiAgPyBUQWxpYXMgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gICAgPyBUQ29sdW1uIGV4dGVuZHMga2V5b2YgVFRhYmxlc1tUQWxpYXNdXG4gICAgICA/IG51bGwgZXh0ZW5kcyBUVGFibGVzW1RBbGlhc11bVENvbHVtbl1cbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogZmFsc2VcbiAgICAgIDogZmFsc2VcbiAgICA6IGZhbHNlXG4gIDogZmFsc2U7XG5cbi8vIEZLIG51bGxhYmxlIOyXrOu2gOyXkCDrlLDrpbgg66eI7LukIO2DgOyehSDqsrDsoJVcbi8vIG51bGxhYmxlIEZL66GcIGxlZnRKb2luIOKGkiBMZWZ0Sm9pbmVkTWFya2VyICjqsJ3ssrQg7J6Q7LK06rCAIG51bGzsnbwg7IiYIOyeiOydjClcbi8vIG5vbi1udWxsIEZL66GcIGxlZnRKb2luIOKGkiDrp4jsu6Qg7JeG7J2MICjrtoDrqqjqsIAg7J6I7Jy866m0IOyekOyLneuPhCDrsJjrk5zsi5wg7J6I7J2MKVxuZXhwb3J0IHR5cGUgTGVmdEpvaW5NYXJrZXJGb3I8VFRhYmxlcywgUGF0aCBleHRlbmRzIHN0cmluZz4gPVxuICBJc051bGxhYmxlQ29sdW1uPFRUYWJsZXMsIFBhdGg+IGV4dGVuZHMgdHJ1ZSA/IExlZnRKb2luZWRNYXJrZXIgOiB7fTtcblxuLy8g7KO87Ja07KeEIO2FjOydtOu4lOydtCBGSyBudWxsYWJsZeuhnCBsZWZ0Sm9pbiDrkJwg7YWM7J2067iU7J247KeAIO2ZleyduO2VqeuLiOuLpC5cbi8vIOyCrOyLpCBMZWZ0Sm9pbk1hcmtlcuqwgCDrtpnsl4jripTsp4Ag7ZmV7J247ZWY64qU6rKMIOuLpOyeheuLiOuLpC5cbi8vIOydtCDrp4jsu6TripQgRksgbnVsbGFibGUgKyBsZWZ0Sm9pbiDsobDtlansl5DshJzrp4wg67aZ7Iq164uI64ukLlxudHlwZSBJc051bGxhYmxlSm9pbmVkVGFibGU8VFRhYmxlcywgVGFibGVLZXk+ID0gVGFibGVLZXkgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gID8gVFRhYmxlc1tUYWJsZUtleV0gZXh0ZW5kcyBMZWZ0Sm9pbmVkTWFya2VyXG4gICAgPyB0cnVlIC8vIExlZnRKb2luZWRNYXJrZXLqsIAg7J6I7Jy866m0IG51bGxhYmxlXG4gICAgOiBmYWxzZVxuICA6IGZhbHNlO1xuXG4vLyDqsr3roZwg7KGw7ZWpIO2XrO2NvCAocHJlZml46rCAIOyXhuycvOuptCBrZXnrp4wsIOyeiOycvOuptCBwcmVmaXhfX2tleSlcbnR5cGUgSm9pblBhdGg8UHJlZml4IGV4dGVuZHMgc3RyaW5nLCBLZXkgZXh0ZW5kcyBzdHJpbmc+ID0gUHJlZml4IGV4dGVuZHMgXCJcIlxuICA/IEtleVxuICA6IGAke1ByZWZpeH1fXyR7S2V5fWA7XG5cbi8vIFNlbGVjdCDqsrDqs7wg7YOA7J6F7J2EIOy2lOuhoO2VtOyjvOuKlCDsuZzqtazsnoXri4jri6QuXG4vLyDsnbQg7YOA7J6F7J2AIFB1cmnsnZggc2VsZWN0LCBhcHBlbmRTZWxlY3Tsl5DshJwgVFJlc3VsdOuhnCDsgqzsmqnrkKnri4jri6QuXG4vL1xuLy8gU2NoZW1h66W8IOydveyWtOyEnCBGS+ydmCBudWxsYWJpbGl0eeyXkCDrlLDrnbwgam9pbuuQnCDqsJ3ssrTsnZgg7YOA7J6F7J2EIOy2lOuhoO2VtOyjvOuKlCDquLDriqXsnbQg7J6I7Iq164uI64ukLlxuLy8g7J206rKMIOustOyKqCDshozrpqzrg5A/IEZL6rCAIG51bGxhYmxl7J24642wIGxlZnRKb2lu65CY7JeI64uk66m0LCDtlbTri7kg6rCd7LK064qUIG51bGxhYmxlIO2VtOyVvCDtlajsnYQg7YOA7J6FIOy2lOuhoOycvOuhnCDrsJjsmIHtlbTspIDri6TripQg6rKD7J6F64uI64ukLlxuLy8g67CY66m0IEZL6rCAIG5vbi1udWxsYWJsZeydtOqxsOuCmCDqt7jrg6Ugam9pbuycvOuhnCDsnbTslrTsoYzri6TrqbQg7ZW064u5IOqwneyytOuKlCBub24tbnVsbGFibGXtlaAg6rKB64uI64ukLlxuLy8g66y866GgIOqwneyytCDrgrTrtoDsnZggbnVsbGFiaWxpdHnripQg65iQIOuzhOqwnOuhnCDstpTroaDrkKnri4jri6QuXG4vL1xuLy8g7JWE656Y7JeQ64+EIFBhcnNlU2VsZWN0T2JqZWN0V2l0aFBhdGjrpbwg67mE66Gv7ZW0IEV4dHJhY3RDb2x1bW5UeXBlLCBFeHRyYWN0Q29sdW1uVHlwZVJhdyDrk7HsnZgg7YOA7J6F7J20IOyeiOyKteuLiOuLpC5cbi8vIOydtOuTpOydmCDsl63tlaDsnYAg64uk7J2M6rO8IOqwmeyKteuLiOuLpDpcbi8vIC0gUGFyc2UqOiDqsJ3ssrQg66CI67Ko7JeQ7IScIOykkeyyqSDqtazsobDrpbwg7Iic7ZqM7ZWY66mwIOqwneyytOyXkCB8IG51bGzsnYQg67aZ7J287KeAIOqysOygle2VqeuLiOuLpC5cbi8vIC0gRXh0cmFjdCo6IO2VhOuTnCDroIjrsqjsl5DshJwgXCJ0YWJsZS5jb2x1bW5cIiDqsr3roZzroZzrtoDthLAg7Iuk7KCcIO2DgOyeheydhCDstpTstpztlanri4jri6QuXG4vL1xuLy8g7JiI7IucOlxuLy8gLnNlbGVjdCh7XG4vLyAgIGlkOiBcInVzZXJzLmlkXCIsICAgICAgICAgICAvLyDihpAgRXh0cmFjdENvbHVtblR5cGXsnZgg6rKw6rO864qUIG51bWJlcuyeheuLiOuLpC5cbi8vICAgZGVwYXJ0bWVudDogeyAgICAgICAgICAgICAvLyDihpAgUGFyc2VTZWxlY3RPYmplY3RJbm5lcuyXkCDsnZjtlbQgbnVsbGFibGUg6rCd7LK066GcIOy2lOuhoOuQqeuLiOuLpC5cbi8vICAgICBpZDogXCJkZXBhcnRtZW50LmlkXCIsICAgIC8vIOKGkCBFeHRyYWN0Q29sdW1uVHlwZVJhd+ydmCDqsrDqs7zripQgbnVtYmVy7J6F64uI64ukLlxuLy8gICAgIG5hbWU6IFwiZGVwYXJ0bWVudC5uYW1lXCIgLy8g4oaQIEV4dHJhY3RDb2x1bW5UeXBlUmF37J2YIOqysOqzvOuKlCBzdHJpbmfsnoXri4jri6QuXG4vLyAgIH1cbi8vIH0pXG5leHBvcnQgdHlwZSBQYXJzZVNlbGVjdE9iamVjdDxcbiAgVFRhYmxlcyBleHRlbmRzIG9iamVjdCxcbiAgVFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPixcbj4gPSBQYXJzZVNlbGVjdE9iamVjdFdpdGhQYXRoPFRUYWJsZXMsIFRTZWxlY3QsIFwiXCI+O1xuXG4vLyDqsr3roZzrpbwg7LaU7KCB7ZWY66m07IScIFNlbGVjdCDqsrDqs7wg7YOA7J6F7J2EIOy2lOuhoO2VqeuLiOuLpC5cbnR5cGUgUGFyc2VTZWxlY3RPYmplY3RXaXRoUGF0aDxcbiAgVFRhYmxlcyBleHRlbmRzIG9iamVjdCxcbiAgVFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPixcbiAgUHJlZml4IGV4dGVuZHMgc3RyaW5nLFxuPiA9IEV4cGFuZDx7XG4gIFtLIGluIGtleW9mIFRTZWxlY3RdOiBUU2VsZWN0W0tdIGV4dGVuZHMgU3FsRXhwcmVzc2lvbjxTcWxFeHByZXNzaW9uVHlwZSwgYm9vbGVhbj5cbiAgICA/IFBhcnNlU3FsRXhwcmVzc2lvbjxUU2VsZWN0W0tdPlxuICAgIDogSXNOZXN0ZWRPYmplY3Q8VFNlbGVjdFtLXT4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IFRTZWxlY3RbS10gZXh0ZW5kcyBOZXN0ZWRTZWxlY3RPYmplY3Q8VFRhYmxlcz5cbiAgICAgICAgPyBJc051bGxhYmxlSm9pbmVkVGFibGU8VFRhYmxlcywgSm9pblBhdGg8UHJlZml4LCBLICYgc3RyaW5nPj4gZXh0ZW5kcyB0cnVlIC8vIOyjvOyWtOynhCDthYzsnbTruJTsnbQgRksgbnVsbGFibGXsl5AgbGVmdEpvaW7rkJjsl4jripTsp4Ag7Jes67aA7JeQIOuUsOudvCBzZWxlY3Qg6rKw6rO8IOqwneyytOydmCDtg4DsnoXsnbQg64us65287KeR64uI64ukLlxuICAgICAgICAgID8gRXhwYW5kPFBhcnNlU2VsZWN0T2JqZWN0SW5uZXI8VFRhYmxlcywgVFNlbGVjdFtLXSwgSm9pblBhdGg8UHJlZml4LCBLICYgc3RyaW5nPj4+IHwgbnVsbCAvLyDrp4zslb0g7ZW064u57ZWc64uk66m0IO2VtOuLuSDqsJ3ssrQg7J6Q7LK064qUIG51bGxhYmxlIO2VmOupsCxcbiAgICAgICAgICA6IEV4cGFuZDxQYXJzZVNlbGVjdE9iamVjdElubmVyPFRUYWJsZXMsIFRTZWxlY3RbS10sIEpvaW5QYXRoPFByZWZpeCwgSyAmIHN0cmluZz4+PiAvLyDqt7jroIfsp4Ag7JWK64uk66m0IG5vbi1udWxsYWJsZSDtlanri4jri6QuXG4gICAgICAgIDogbmV2ZXJcbiAgICAgIDogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVFNlbGVjdFtLXSAmIHN0cmluZz47XG59PjtcblxuLy8g7KSR7LKpIOqwneyytCDrgrTrtoDsmqkgLSBsZWZ0Sm9pbiBudWxsYWJsZeydhCDqsJ3ssrQg66CI67Ko7JeQ7IScIOydtOuvuCDsspjrpqztlojsnLzrr4DroZwg7ZWE65Oc64qUIOybkOuzuCDtg4DsnoXsnYQg7IKs7Jqp7ZWp64uI64ukLlxuLy8gUGFyc2VTZWxlY3RPYmplY3RXaXRoUGF0aOyZgCDqsbDsnZgg64+Z7J287ZWY64KYLCDrp4jsp4Drp4nsl5AgRXh0cmFjdENvbHVtblR5cGUg64yA7IugIEV4dHJhY3RDb2x1bW5UeXBlUmF366W8IOyCrOyaqe2VmOyXrFxuLy8g7ZWE65OcIOugiOuyqOyXkOyEnCDspJHrs7XsnLzroZwgfCBudWxs7J20IOy2lOqwgOuQmOuKlCDqsoPsnYQg67Cp7KeA7ZWp64uI64ukLlxudHlwZSBQYXJzZVNlbGVjdE9iamVjdElubmVyPFxuICBUVGFibGVzIGV4dGVuZHMgb2JqZWN0LFxuICBUU2VsZWN0IGV4dGVuZHMgU2VsZWN0T2JqZWN0PFRUYWJsZXM+LFxuICBQcmVmaXggZXh0ZW5kcyBzdHJpbmcsXG4+ID0gRXhwYW5kPHtcbiAgW0sgaW4ga2V5b2YgVFNlbGVjdF06IFRTZWxlY3RbS10gZXh0ZW5kcyBTcWxFeHByZXNzaW9uPFNxbEV4cHJlc3Npb25UeXBlLCBib29sZWFuPlxuICAgID8gUGFyc2VTcWxFeHByZXNzaW9uPFRTZWxlY3RbS10+XG4gICAgOiBJc05lc3RlZE9iamVjdDxUU2VsZWN0W0tdPiBleHRlbmRzIHRydWVcbiAgICAgID8gVFNlbGVjdFtLXSBleHRlbmRzIE5lc3RlZFNlbGVjdE9iamVjdDxUVGFibGVzPlxuICAgICAgICA/IElzTnVsbGFibGVKb2luZWRUYWJsZTxUVGFibGVzLCBKb2luUGF0aDxQcmVmaXgsIEsgJiBzdHJpbmc+PiBleHRlbmRzIHRydWVcbiAgICAgICAgICA/IEV4cGFuZDxQYXJzZVNlbGVjdE9iamVjdElubmVyPFRUYWJsZXMsIFRTZWxlY3RbS10sIEpvaW5QYXRoPFByZWZpeCwgSyAmIHN0cmluZz4+PiB8IG51bGxcbiAgICAgICAgICA6IEV4cGFuZDxQYXJzZVNlbGVjdE9iamVjdElubmVyPFRUYWJsZXMsIFRTZWxlY3RbS10sIEpvaW5QYXRoPFByZWZpeCwgSyAmIHN0cmluZz4+PlxuICAgICAgICA6IG5ldmVyXG4gICAgICA6IEV4dHJhY3RDb2x1bW5UeXBlUmF3PFRUYWJsZXMsIFRTZWxlY3RbS10gJiBzdHJpbmc+OyAvLyBsZWZ0Sm9pbiBudWxsYWJsZSDrrLTsi5xcbn0+O1xuXG4vLyDsu6zrn7wg6rK966Gc7JeQ7IScIO2DgOyeheydhCDstpTstpztlanri4jri6QuIExlZnRKb2luZWRNYXJrZXLqsIAg7J6I7Jy866m0IHwgbnVsbOydhCDstpTqsIDtlanri4jri6QuXG4vLyDstZzsg4HsnIQgc2VsZWN0IO2VhOuTnOyXkOyEnCDsgqzsmqnrkKnri4jri6QuXG5leHBvcnQgdHlwZSBFeHRyYWN0Q29sdW1uVHlwZTxcbiAgVFRhYmxlcyBleHRlbmRzIG9iamVjdCxcbiAgUGF0aCBleHRlbmRzIHN0cmluZyxcbj4gPSBQYXRoIGV4dGVuZHMgYCR7aW5mZXIgVEFsaWFzfS4ke2luZmVyIFRDb2x1bW59YFxuICA/IFRBbGlhcyBleHRlbmRzIGtleW9mIFRUYWJsZXNcbiAgICA/IFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUVGFibGVzW1RBbGlhc11cbiAgICAgID8gVFRhYmxlc1tUQWxpYXNdIGV4dGVuZHMgTGVmdEpvaW5lZE1hcmtlclxuICAgICAgICA/IFRUYWJsZXNbVEFsaWFzXVtUQ29sdW1uXSB8IG51bGwgLy8gTEVGVCBKT0lOIChudWxsYWJsZSBGSykg4oaSIG51bGxhYmxlXG4gICAgICAgIDogVFRhYmxlc1tUQWxpYXNdW1RDb2x1bW5dIC8vIElOTkVSIEpPSU4g65iQ64qUIG5vbi1udWxsIEZLIGxlZnRKb2luIOKGkiBub24tbnVsbGFibGVcbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyXG4gIDogSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgPyBQYXRoIGV4dGVuZHMga2V5b2YgVFRhYmxlc1trZXlvZiBUVGFibGVzXVxuICAgICAgPyBUVGFibGVzW2tleW9mIFRUYWJsZXNdW1BhdGhdXG4gICAgICA6IG5ldmVyXG4gICAgOiBuZXZlcjtcblxuLy8g7Lus65+8IOqyveuhnOyXkOyEnCDtg4DsnoXsnYQg7LaU7Lac7ZWp64uI64ukLiBsZWZ0Sm9pbiDsl6zrtoDsmYAg6rSA6rOE7JeG7J20IOybkOuzuCDtg4DsnoXsnYQg67CY7ZmY7ZWp64uI64ukLlxuLy8g7KSR7LKpIOqwneyytCDrgrTrtoAg7ZWE65Oc7JeQ7IScIOyCrOyaqeuQqeuLiOuLpC4gKOqwneyytCDroIjrsqjsl5DshJwg7J2066+4IHwgbnVsbCDsspjrpqzqsIAg7JmE66OM65CY7JeI7Jy866+A66GcKVxudHlwZSBFeHRyYWN0Q29sdW1uVHlwZVJhdzxcbiAgVFRhYmxlcyBleHRlbmRzIG9iamVjdCxcbiAgUGF0aCBleHRlbmRzIHN0cmluZyxcbj4gPSBQYXRoIGV4dGVuZHMgYCR7aW5mZXIgVEFsaWFzfS4ke2luZmVyIFRDb2x1bW59YFxuICA/IFRBbGlhcyBleHRlbmRzIGtleW9mIFRUYWJsZXNcbiAgICA/IFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUVGFibGVzW1RBbGlhc11cbiAgICAgID8gVFRhYmxlc1tUQWxpYXNdW1RDb2x1bW5dIC8vIGxlZnRKb2luIOyXrOu2gOyZgCDqtIDqs4Tsl4bsnbQg7JuQ67O4IO2DgOyehVxuICAgICAgOiBuZXZlclxuICAgIDogbmV2ZXJcbiAgOiBJc1NpbmdsZUtleTxUVGFibGVzPiBleHRlbmRzIHRydWVcbiAgICA/IFBhdGggZXh0ZW5kcyBrZXlvZiBUVGFibGVzW2tleW9mIFRUYWJsZXNdXG4gICAgICA/IFRUYWJsZXNba2V5b2YgVFRhYmxlc11bUGF0aF1cbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyO1xuXG4vLyBXaGVyZSDsobDqsbQg6rCd7LK0IO2DgOyehVxuLy8g7JiIOiB7IFwidS5pZFwiOiAxLCBcInUuc3RhdHVzXCI6IFwiYWN0aXZlXCIgfVxuZXhwb3J0IHR5cGUgV2hlcmVDb25kaXRpb248VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtrZXkgaW4gQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPl0/OiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBrZXkgJiBzdHJpbmc+O1xufTtcblxuLy8gRnVsbHRleHQgaW5kZXgg7Lus65+8IOy2lOy2nCDtg4DsnoVcbmV4cG9ydCB0eXBlIEZ1bGx0ZXh0Q29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogVFRhYmxlc1tUQWxpYXNdIGV4dGVuZHMge1xuICAgIFtLIGluIEZ1bGx0ZXh0S2V5XTogcmVhZG9ubHkgKGluZmVyIENvbClbXTtcbiAgfVxuICAgID8gQ29sIGV4dGVuZHMgc3RyaW5nXG4gICAgICA/IGAke1RBbGlhcyAmIHN0cmluZ30uJHtDb2x9YFxuICAgICAgOiBuZXZlclxuICAgIDogbmV2ZXI7XG59W2tleW9mIFRUYWJsZXNdO1xuXG4vLyDruYTqtZAg7Jew7IKw7J6QXG5leHBvcnQgdHlwZSBDb21wYXJpc29uT3BlcmF0b3IgPSBcIj1cIiB8IFwiPlwiIHwgXCI+PVwiIHwgXCI8XCIgfCBcIjw9XCIgfCBcIjw+XCIgfCBcIiE9XCI7XG4vLyDsobDqsbQg7Jew7IKw7J6QOiDruYTqtZAg7Jew7IKw7J6QICsg7Yyo7YS0IOunpOy5rSDsl7DsgrDsnpBcbmV4cG9ydCB0eXBlIFdoZXJlT3BlcmF0b3IgPSBDb21wYXJpc29uT3BlcmF0b3IgfCBcImxpa2VcIiB8IFwibm90IGxpa2VcIiB8IFwiaWxpa2VcIiB8IFwibm90IGlsaWtlXCI7XG5leHBvcnQgY29uc3QgRlVaWllfT1BFUkFUT1JTID0gW1wiPCVcIiwgXCIlXCIsIFwiPDwlXCJdIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgRnV6enlPcGVyYXRvciA9ICh0eXBlb2YgRlVaWllfT1BFUkFUT1JTKVtudW1iZXJdO1xuXG4vLyBTUUwgRXhwcmVzc2lvbiDtg4DsnoUg7KCV7J2YXG5leHBvcnQgdHlwZSBTcWxFeHByZXNzaW9uPFQgZXh0ZW5kcyBTcWxFeHByZXNzaW9uVHlwZSwgVE51bGxhYmxlIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlPiA9IHtcbiAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIjsgLy8g65iQ64qUIFwiY29tcHV0ZWRfdmFsdWVcIlxuICBfcmV0dXJuOiBUO1xuICBfc3FsOiBzdHJpbmc7XG4gIF9wYXJhbXM6IEtuZXguUmF3QmluZGluZ1tdO1xuICByZWFkb25seSBfbnVsbGFibGU/OiBUTnVsbGFibGU7XG59O1xuXG50eXBlIFBhcnNlU3FsRXhwcmVzc2lvbjxURXhwcmVzc2lvbj4gPVxuICBURXhwcmVzc2lvbiBleHRlbmRzIFNxbEV4cHJlc3Npb248aW5mZXIgVFJldHVybiwgaW5mZXIgVE51bGxhYmxlPlxuICAgID9cbiAgICAgICAgfCAoVFJldHVybiBleHRlbmRzIFwic3RyaW5nXCJcbiAgICAgICAgICAgID8gc3RyaW5nXG4gICAgICAgICAgICA6IFRSZXR1cm4gZXh0ZW5kcyBcIm51bWJlclwiXG4gICAgICAgICAgICAgID8gbnVtYmVyXG4gICAgICAgICAgICAgIDogVFJldHVybiBleHRlbmRzIFwiYm9vbGVhblwiXG4gICAgICAgICAgICAgICAgPyBib29sZWFuXG4gICAgICAgICAgICAgICAgOiBUUmV0dXJuIGV4dGVuZHMgXCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgID8gRGF0ZVxuICAgICAgICAgICAgICAgICAgOiBUUmV0dXJuIGV4dGVuZHMgXCJzdHJpbmdbXVwiXG4gICAgICAgICAgICAgICAgICAgID8gc3RyaW5nW11cbiAgICAgICAgICAgICAgICAgICAgOiBuZXZlcilcbiAgICAgICAgfCAodHJ1ZSBleHRlbmRzIFROdWxsYWJsZSA/IG51bGwgOiBuZXZlcilcbiAgICA6IG5ldmVyO1xuXG4vLyDqsrDqs7wg7YOA7J6FIOqwgOuPheyEseydhCDsnITtlZwg7YOA7J6FIO2ZleyepVxuZXhwb3J0IHR5cGUgRXhwYW5kPFQ+ID0gVCBleHRlbmRzIGFueVtdXG4gID8geyBbSyBpbiBrZXlvZiBUWzBdXTogVFswXVtLXSB9W10gLy8g67Cw7Je07J2066m0IOyyqyDrsojsp7gg7JqU7IaM66W8IEV4cGFuZO2VmOqzoCDrsLDsl7TroZwg6rCQ7IyIXG4gIDogVCBleHRlbmRzIG9iamVjdFxuICAgID8geyBbSyBpbiBrZXlvZiBUXTogVFtLXSB9XG4gICAgOiBUO1xuXG50eXBlIElzU2luZ2xlS2V5PFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID0ga2V5b2YgVFRhYmxlcyBleHRlbmRzIGluZmVyIEtcbiAgPyBLIGV4dGVuZHMga2V5b2YgVFRhYmxlc1xuICAgID8ga2V5b2YgVFRhYmxlcyBleHRlbmRzIEsgLy8g7Jet67Cp7ZalIOyytO2BrOuhnCDri6jsnbwg7YKkIO2ZleyduFxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlXG4gICAgOiBmYWxzZVxuICA6IGZhbHNlO1xuXG5leHBvcnQgdHlwZSBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID1cbiAgSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlID8gVFRhYmxlc1trZXlvZiBUVGFibGVzXSA6IG5ldmVyO1xuXG4vLyBfX2hhc0RlZmF1bHRfX+yXkCDtj6ztlajrkJwg7YKk65Ok7J2EIFB1cmlUYWJsZTxUPuydmCDtgqTroZwg7KCc7ZWcXG50eXBlIEhhc0RlZmF1bHRLZXlzPFQ+ID0gVCBleHRlbmRzIHsgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IChpbmZlciBLKVtdIH1cbiAgPyBFeHRyYWN0PEssIGtleW9mIFB1cmlUYWJsZTxUPj5cbiAgOiBuZXZlcjtcblxuLy8gX19nZW5lcmF0ZWRfX+yXkCDtj6ztlajrkJwg7YKk65OkIChJTlNFUlQg7IucIOygnOyZuO2VtOyVvCDtlagpXG50eXBlIEdlbmVyYXRlZEtleXM8VD4gPSBUIGV4dGVuZHMgeyBfX2dlbmVyYXRlZF9fOiByZWFkb25seSAoaW5mZXIgSylbXSB9XG4gID8gRXh0cmFjdDxLLCBrZXlvZiBQdXJpVGFibGU8VD4+XG4gIDogbmV2ZXI7XG5cbi8vIF9fdmlydHVhbF9xdWVyeV9f7JeQIO2PrO2VqOuQnCDtgqTrk6QgKElOU0VSVCDsi5wg7KCc7Jm47ZW07JW8IO2VqClcbnR5cGUgVmlydHVhbFF1ZXJ5S2V5czxUPiA9IFQgZXh0ZW5kcyB7IF9fdmlydHVhbF9xdWVyeV9fOiByZWFkb25seSAoaW5mZXIgSylbXSB9XG4gID8gRXh0cmFjdDxLLCBrZXlvZiBQdXJpVGFibGU8VD4+XG4gIDogbmV2ZXI7XG5cbi8vIEluc2VydCDtg4DsnoU6IOuplO2DgOuNsOydtO2EsCDsoJzqsbAg7ZuELCBfX2hhc0RlZmF1bHRfXyDsu6zrn7zrk6Trp4wgb3B0aW9uYWzroZwg7LKY66asLCBnZW5lcmF0ZWQvdmlydHVhbFF1ZXJ5IOy7rOufvOydgCDsmYTsoITtnogg7KCc7Jm4XG5leHBvcnQgdHlwZSBJbnNlcnREYXRhPFQ+ID0gT21pdDxcbiAgUHVyaVRhYmxlPFQ+LFxuICBJbnRlcm5hbFR5cGVLZXlzIHwgSGFzRGVmYXVsdEtleXM8VD4gfCBHZW5lcmF0ZWRLZXlzPFQ+IHwgVmlydHVhbFF1ZXJ5S2V5czxUPlxuPiAmIHtcbiAgW0sgaW4gSGFzRGVmYXVsdEtleXM8VD5dPzogUHVyaVRhYmxlPFQ+W0tdO1xufTtcblxuLy8gSW5zZXJ0IFJlc3VsdCDtg4DsnoVcbmV4cG9ydCB0eXBlIEluc2VydFJlc3VsdCA9IFBpY2s8UXVlcnlSZXN1bHQsIFwiY29tbWFuZFwiIHwgXCJyb3dDb3VudFwiIHwgXCJyb3dzXCIgfCBcIm9pZFwiPjtcblxuLy8gU3Vic2V0UXVlcnnrpbwg7JyE7ZWcIO2DgOyehSDsnKDti7jrpqzti7BcbmV4cG9ydCB0eXBlIEV4dHJhY3RUVGFibGVzPFQgZXh0ZW5kcyBQdXJpPGFueSwgYW55LCBhbnk+PiA9XG4gIFQgZXh0ZW5kcyBQdXJpPGFueSwgaW5mZXIgVFRhYmxlcywgYW55PiA/IFRUYWJsZXMgOiBuZXZlcjtcbmV4cG9ydCB0eXBlIFVuaW9uRXh0cmFjdGVkVFRhYmxlczxcbiAgU3Vic2V0S2V5IGV4dGVuZHMgc3RyaW5nLFxuICBTdWJzZXRRdWVyaWVzIGV4dGVuZHMgUmVjb3JkPFN1YnNldEtleSwgUHVyaVN1YnNldEZuPixcbj4gPSB7XG4gIFtLIGluIFN1YnNldEtleV06IEV4dHJhY3RUVGFibGVzPFJldHVyblR5cGU8U3Vic2V0UXVlcmllc1tLXT4+O1xufVtTdWJzZXRLZXldO1xuXG4vLyBPTiBDT05GTElDVCDrjIDsg4Eg7YOA7J6FXG4vLyAtIOuLqOydvCDsu6zrn7w6IFwiZW1haWxcIlxuLy8gLSDrs7XsiJgg7Lus65+8OiBbXCJ1c2VyX2lkXCIsIFwicHJvZHVjdF9pZFwiXVxuZXhwb3J0IHR5cGUgT25Db25mbGljdFRhcmdldCA9IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4vLyBPTiBDT05GTElDVCDslaHshZgg7YOA7J6FXG4vLyAtIFwibm90aGluZ1wiOiBETyBOT1RISU5HXG4vLyAtIHsgdXBkYXRlOiBbLi4uXSB9OiBETyBVUERBVEVcbmV4cG9ydCB0eXBlIE9uQ29uZmxpY3RBY3Rpb248VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPVxuICB8IFwibm90aGluZ1wiXG4gIHwge1xuICAgICAgdXBkYXRlOlxuICAgICAgICB8IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5bXSAvLyDrsLDsl7Qg7ZiV7YOcIC0gW1wibmFtZVwiLCBcImVtYWlsXCJdXG4gICAgICAgIHwgV2hlcmVDb25kaXRpb248VFRhYmxlcz47IC8vIOqwneyytCDtmJXtg5wgLSB7IG5hbWU6IFwiSm9oblwiLCBjb3VudDogUHVyaS5yYXdOdW1iZXIoLi4uKSB9XG4gICAgfTtcblxuLy8gRksg7Lus65+866qFIOy2lOy2nCDsnKDti7jrpqzti7Ag7YOA7J6FIC0gRGF0YWJhc2VGb3JlaWduS2V5cyDtmZzsmqlcbmV4cG9ydCB0eXBlIEZvcmVpZ25LZXlDb2x1bW5zPFRUYWJsZSBleHRlbmRzIFRhYmxlTmFtZTxEYXRhYmFzZVNjaGVtYUV4dGVuZD4+ID1cbiAgVFRhYmxlIGV4dGVuZHMga2V5b2YgRGF0YWJhc2VGb3JlaWduS2V5cyA/IERhdGFiYXNlRm9yZWlnbktleXNbVFRhYmxlXSA6IG5ldmVyO1xuXG4vLyBVbmlvbuydhCBJbnRlcnNlY3Rpb27snLzroZwg67OA7ZmY7ZWY64qUIOycoO2LuOumrO2LsFxudHlwZSBVbmlvblRvSW50ZXJzZWN0aW9uPFU+ID0gKFUgZXh0ZW5kcyBhbnkgPyAoazogVSkgPT4gdm9pZCA6IG5ldmVyKSBleHRlbmRzIChrOiBpbmZlciBJKSA9PiB2b2lkXG4gID8gSVxuICA6IG5ldmVyO1xuXG4vLyBTZWxlY3RBbGwg7IucIOuqqOuToCDsobDsnbjrkJwg7YWM7J2067iU7J2YIOy7rOufvCDtj6ztlahcbmV4cG9ydCB0eXBlIFNlbGVjdEFsbFJlc3VsdDxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9IFVuaW9uVG9JbnRlcnNlY3Rpb248XG4gIHtcbiAgICBbSyBpbiBrZXlvZiBUVGFibGVzXTogVFRhYmxlc1tLXSBleHRlbmRzIGluZmVyIFRcbiAgICAgID8gVCBleHRlbmRzIExlZnRKb2luZWRNYXJrZXJcbiAgICAgICAgPyBQYXJ0aWFsPE9taXRJbnRlcm5hbFR5cGVLZXlzPFQ+PiAvLyBMRUZUIEpPSU7snYAgbnVsbGFibGUsIOuplO2DgOuNsOydtO2EsCDsoJzqsbBcbiAgICAgICAgOiBPbWl0SW50ZXJuYWxUeXBlS2V5czxUPiAvLyBJTk5FUiBKT0lO7J2AIG5vbi1udWxsYWJsZSwg66mU7YOA642w7J207YSwIOygnOqxsFxuICAgICAgOiBuZXZlcjtcbiAgfVtrZXlvZiBUVGFibGVzXVxuPjtcblxuLy8gRlRTIO2DgOyehVxudHlwZSBUc1F1ZXJ5UGFyc2VyID0gXCJ0b190c3F1ZXJ5XCIgfCBcInBsYWludG9fdHNxdWVyeVwiIHwgXCJwaHJhc2V0b190c3F1ZXJ5XCIgfCBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCI7XG5leHBvcnQgdHlwZSBUc1F1ZXJ5Q29uZmlnID0gXCJzaW1wbGVcIiB8IFwiZW5nbGlzaFwiO1xuZXhwb3J0IHR5cGUgVHNRdWVyeU9wdGlvbnMgPSB7XG4gIHBhcnNlcj86IFRzUXVlcnlQYXJzZXI7XG4gIGNvbmZpZz86IFRzUXVlcnlDb25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBUc0hpZ2hsaWdodE9wdGlvbnMgPSB7XG4gIC8qKiDsv7zrpqwg67OA7ZmYIO2VqOyImCAo6riw67O46rCSOiBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCIpICovXG4gIHBhcnNlcj86IFRzUXVlcnlQYXJzZXI7XG4gIC8qKiDthY3siqTtirgg6rKA7IOJIOyEpOyglSAo6riw67O46rCSOiBcInNpbXBsZVwiKSAqL1xuICBjb25maWc/OiBUc1F1ZXJ5Q29uZmlnO1xuICAvKiog7LWc64yAIOuLqOyWtCDsiJggKOq4sOuzuOqwkjogMzUpICovXG4gIG1heFdvcmRzPzogbnVtYmVyO1xuICAvKiog7LWc7IaMIOuLqOyWtCDsiJggKOq4sOuzuOqwkjogMTUpICovXG4gIG1pbldvcmRzPzogbnVtYmVyO1xuICAvKiog7Zek65Oc65287J24IOyLnOyekS/rgZ3sl5DshJwg7KCc6rGw7ZWgIOynp+ydgCDri6jslrQg6ri47J20ICjquLDrs7jqsJI6IDMpICovXG4gIHNob3J0V29yZD86IG51bWJlcjtcbiAgLyoqIHRydWXrqbQg7KCE7LK0IOusuOyEnOulvCDtl6Trk5zrnbzsnbjsnLzroZwg7IKs7JqpICjquLDrs7jqsJI6IGZhbHNlKSAqL1xuICBoaWdobGlnaHRBbGw/OiBib29sZWFuO1xuICAvKiog7ZGc7Iuc7ZWgIOy1nOuMgCDthY3siqTtirgg7KGw6rCBIOyImCAo6riw67O46rCSOiAwLCDsobDqsIEg66+47IKs7JqpKSAqL1xuICBtYXhGcmFnbWVudHM/OiBudW1iZXI7XG4gIC8qKiDsv7zrpqwg64uo7Ja0IOyLnOyekSDqtazrtoTsnpAgKOq4sOuzuOqwkjogXCI8Yj5cIikgKi9cbiAgc3RhcnRTZWw/OiBzdHJpbmc7XG4gIC8qKiDsv7zrpqwg64uo7Ja0IOuBnSDqtazrtoTsnpAgKOq4sOuzuOqwkjogXCI8L2I+XCIpICovXG4gIHN0b3BTZWw/OiBzdHJpbmc7XG4gIC8qKiDsobDqsIEg6rWs67aE7J6QICjquLDrs7jqsJI6IFwiIC4uLiBcIikgKi9cbiAgZnJhZ21lbnREZWxpbWl0ZXI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUc1JhbmtPcHRpb25zID0ge1xuICBwYXJzZXI/OiBUc1F1ZXJ5UGFyc2VyO1xuICBjb25maWc/OiBUc1F1ZXJ5Q29uZmlnO1xuICAvKiog6rCA7KSR7LmYIOuwsOyXtCBbRCwgQywgQiwgQV0gKOq4sOuzuOqwkjogWzAuMSwgMC4yLCAwLjQsIDEuMF0pICovXG4gIHdlaWdodHM/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgLyoqXG4gICAqIOygleq3nO2ZlCDsmLXshZhcbiAgICogMDog66y47IScIOq4uOydtCDrrLTsi5wgKOq4sOuzuOqwkilcbiAgICogMTogMSArIGxvZyjrrLjshJwg6ri47J20KeuhnCDrgpjriJRcbiAgICogMjog66y47IScIOq4uOydtOuhnCDrgpjriJRcbiAgICogNDog7Y+J6regIOyhsO2ZlCDqsbDrpqzroZwg64KY64iUICh0c19yYW5rX2Nk66eMKVxuICAgKiA4OiDqs6DsnKAg64uo7Ja0IOyImOuhnCDrgpjriJRcbiAgICogMTY6IDEgKyBsb2co6rOg7JygIOuLqOyWtCDsiJgp66GcIOuCmOuIlFxuICAgKiAzMjogcmFuay8ocmFuaysxKSAtPiAwfjEg7IKs7J207J2YIOqwkuycvOuhnCDsiqTsvIDsnbzrp4FcbiAgICpcbiAgICog67mE7Yq466eI7Iqk7YGs66W8IOyCrOyaqe2VmOyXrCDsmLXshZjsnYQg7KGw7ZWp7ZWgIOyImCDsnojsnYxcbiAgICog7JiIOiA4IHwgMzIgLT4g6rOg7JygIOuLqOyWtCDsiJjroZwg64KY64iE6rOgIDB+MSDsiqTsvIDsnbzrp4FcbiAgICovXG4gIG5vcm1hbGl6YXRpb24/OiBudW1iZXI7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0NBK1NhLGtCQUFrQjtFQUFDO0VBQU07RUFBSztDQUFLIn0=
|
|
14
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyaS50eXBlcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvcHVyaS50eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBveGxpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovIC8vIFB1cmkudHlwZXMudHPripQg64uk7JaR7ZWcIO2DgOyeheydhCDsgqzsmqntlZjqs6Ag7J6I7Iq164uI64ukLlxuXG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgeyB0eXBlIERhdGFiYXNlRm9yZWlnbktleXMsIHR5cGUgRGF0YWJhc2VTY2hlbWFFeHRlbmQgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgUHVyaSB9IGZyb20gXCIuL3B1cmlcIjtcbmltcG9ydCB7IHR5cGUgUHVyaVN1YnNldEZuIH0gZnJvbSBcIi4vcHVyaS1zdWJzZXQudHlwZXNcIjtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIOuCtOu2gCDtg4DsnoUg7YKkICjrqZTtg4DrjbDsnbTthLApXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxudHlwZSBGdWxsdGV4dEtleSA9IFwiX19mdWxsdGV4dF9fXCI7XG50eXBlIFZpcnR1YWxLZXkgPSBcIl9fdmlydHVhbF9fXCI7XG50eXBlIExlZnRKb2luZWRLZXkgPSBcIl9fbGVmdEpvaW5lZF9fXCI7XG50eXBlIEhhc0RlZmF1bHQgPSBcIl9faGFzRGVmYXVsdF9fXCI7XG50eXBlIEdlbmVyYXRlZEtleSA9IFwiX19nZW5lcmF0ZWRfX1wiO1xudHlwZSBWZWN0b3JLZXkgPSBcIl9fdmVjdG9yX19cIjtcbnR5cGUgSnNvbktleSA9IFwiX19qc29uX19cIjtcbnR5cGUgVmlydHVhbFF1ZXJ5S2V5ID0gXCJfX3ZpcnR1YWxfcXVlcnlfX1wiO1xudHlwZSBTcWxFeHByZXNzaW9uVHlwZSA9IFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcImRhdGVcIiB8IFwic3RyaW5nW11cIiB8IFwidHN2ZWN0b3JcIjtcblxudHlwZSBJbnRlcm5hbFR5cGVLZXlzID1cbiAgfCBGdWxsdGV4dEtleVxuICB8IFZpcnR1YWxLZXlcbiAgfCBMZWZ0Sm9pbmVkS2V5XG4gIHwgSGFzRGVmYXVsdFxuICB8IEdlbmVyYXRlZEtleVxuICB8IFZlY3RvcktleVxuICB8IEpzb25LZXlcbiAgfCBWaXJ0dWFsUXVlcnlLZXk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyDtg4DsnoUg7Jyg7Yu466as7YuwXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBfX3ZlY3Rvcl9fIOuplO2DgOuNsOydtO2EsOyXkOyEnCDrsqHthLAg7Lus65+8IOy2lOy2nFxudHlwZSBWZWN0b3JDb2x1bW5LZXlzPFQ+ID0gVCBleHRlbmRzIHsgW0sgaW4gVmVjdG9yS2V5XTogcmVhZG9ubHkgKGluZmVyIFYpW10gfVxuICA/IFYgJiBzdHJpbmdcbiAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgVmVjdG9yQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9XG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke1ZlY3RvckNvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlID8gVmVjdG9yQ29sdW1uS2V5czxUVGFibGVzW2tleW9mIFRUYWJsZXNdPiA6IG5ldmVyKTtcblxuLy8gX19qc29uX18g66mU7YOA642w7J207YSw7JeQ7IScIEpTT04g7Lus65+8IOy2lOy2nFxudHlwZSBKc29uQ29sdW1uS2V5czxUPiA9IFQgZXh0ZW5kcyB7IFtLIGluIEpzb25LZXldOiByZWFkb25seSAoaW5mZXIgSilbXSB9ID8gSiAmIHN0cmluZyA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBKc29uQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9XG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke0pzb25Db2x1bW5LZXlzPFRUYWJsZXNbVEFsaWFzXT59YDtcbiAgICB9W2tleW9mIFRUYWJsZXNdXG4gIHwgKElzU2luZ2xlS2V5PFRUYWJsZXM+IGV4dGVuZHMgdHJ1ZSA/IEpzb25Db2x1bW5LZXlzPFRUYWJsZXNba2V5b2YgVFRhYmxlc10+IDogbmV2ZXIpO1xuXG50eXBlIEpzb25TdXBlcnNldE5lc3RlZFZhbHVlPFQ+ID0gVCBleHRlbmRzIHJlYWRvbmx5IChpbmZlciBFbGVtZW50KVtdXG4gID8gSnNvblN1cGVyc2V0TmVzdGVkVmFsdWU8RWxlbWVudD5bXVxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICA/IHsgW0sgaW4ga2V5b2YgVF0/OiBKc29uU3VwZXJzZXROZXN0ZWRWYWx1ZTxUW0tdPiB9XG4gICAgOiBUO1xuXG5leHBvcnQgdHlwZSBKc29uU3VwZXJzZXRWYWx1ZTxUPiA9IEpzb25TdXBlcnNldE5lc3RlZFZhbHVlPE5vbk51bGxhYmxlPFQ+PjtcblxuLy8g7YWM7J2067iU66qFIO2DgOyehVxuZXhwb3J0IHR5cGUgVGFibGVOYW1lPFRTY2hlbWE+ID0ga2V5b2YgVFNjaGVtYSAmIHN0cmluZztcblxuLy8g7YWM7J2067iU7J2YIGlkKFBLKSDtg4DsnoXsnYQg7LaU7LacXG5leHBvcnQgdHlwZSBJZFR5cGU8VFNjaGVtYSwgVFRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4gPSBUU2NoZW1hW1RUYWJsZV0gZXh0ZW5kcyB7IGlkOiBpbmZlciBJIH1cbiAgPyBJXG4gIDogbnVtYmVyO1xuXG4vLyB2aXJ0dWFsIOy7rOufvCDtg4DsnoUg7LaU7LacXG50eXBlIFZpcnR1YWxLZXlzPFQ+ID0gVCBleHRlbmRzIHsgW0sgaW4gVmlydHVhbEtleV06IHJlYWRvbmx5IChpbmZlciBWKVtdIH0gPyBWICYgc3RyaW5nIDogbmV2ZXI7XG5cbi8vIHZpcnR1YWwg7Lus65+8IOygnOqxsFxudHlwZSBTdHJpcFZpcnR1YWw8VD4gPSBPbWl0PFQsIFZpcnR1YWxLZXlzPFQ+PjtcblxuLy8gTEVGVCBKT0lOIOuniOy7pCAtIG51bGxhYmxlIEZL66GcIOyhsOyduOuQnCDthYzsnbTruJRcbi8vIOydtCDrp4jsu6TripQgbnVsbGFibGUgRksgKyBsZWZ0Sm9pbiDsobDtlansl5DshJzrp4wg67aZ7Iq164uI64ukLlxuLy8gam9pbiArIEZLIG51bGxhYmxlIC0+IOyViCDrtpnsnYxcbi8vIGpvaW4gKyBGSyBub24tbnVsbGFibGUgLT4g7JWIIOu2meydjFxuLy8gbGVmdEpvaW4gKyBGSyBub24tbnVsbGFibGUgLT4g7JWIIOu2meydjFxuLy8gbGVmdEpvaW4gKyBGSyBudWxsYWJsZSAtPiDrtpnsnYwhXG5leHBvcnQgdHlwZSBMZWZ0Sm9pbmVkTWFya2VyID0geyBbSyBpbiBMZWZ0Sm9pbmVkS2V5XTogdHJ1ZSB9O1xuXG4vLyDrqZTtg4DrjbDsnbTthLAg7ZWE65OcIOygnOyZuO2VnCDsi6TsoJwg7JeU7Yuw7YuwIOy7rOufvFxuZXhwb3J0IHR5cGUgQ29sdW1uS2V5czxUPiA9IEV4Y2x1ZGU8a2V5b2YgU3RyaXBWaXJ0dWFsPFQ+LCBJbnRlcm5hbFR5cGVLZXlzPiAmIHN0cmluZztcblxuLy8gdmlydHVhbCDsu6zrn7wg7KCc6rGwIO2bhCBfX2Z1bGx0ZXh0X18g7Jyg7KeAXG5leHBvcnQgdHlwZSBQdXJpVGFibGU8VD4gPSBPbWl0PFN0cmlwVmlydHVhbDxUPiwgVmlydHVhbEtleT47XG5cbi8vIOuCtOu2gCDtg4DsnoUg7YKkIOygnOyZuCAo7Iuk7KCcIOy7rOufvOunjCDrgqjquYApXG5leHBvcnQgdHlwZSBPbWl0SW50ZXJuYWxUeXBlS2V5czxUPiA9IE9taXQ8VCwgSW50ZXJuYWxUeXBlS2V5cz47XG5cbi8vIFRUYWJsZXPsnZgg66qo65OgIO2FjOydtOu4lOyXkOyEnCDsgqzsmqkg6rCA64ql7ZWcIOy7rOufvCDqsr3roZxcbmV4cG9ydCB0eXBlIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPSAoXG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IENvbHVtbktleXM8VFRhYmxlc1trZXlvZiBUVGFibGVzXT4gLy8g64uo7J28IO2FjOydtOu4lOydtOuptCDsu6zrn7zrqoXrp4zrj4Qg7ZeI7JqpXG4gICAgICA6IG5ldmVyKVxuKSAmXG4gIHN0cmluZztcblxuLy8g7Iir7J6QIO2DgOyehSDsu6zrn7zrp4wg7LaU7Lac7ZWY64qUIOycoO2LuOumrO2LsCDtg4DsnoVcbnR5cGUgTnVtZXJpY0NvbHVtbktleXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50IHwgbnVsbCB8IHVuZGVmaW5lZCA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF0gJlxuICBzdHJpbmc7XG5cbi8vIFRUYWJsZXPsnZgg66qo65OgIO2FjOydtOu4lOyXkOyEnCDsiKvsnpAg7YOA7J6FIOy7rOufvOunjCDstpTstpxcbmV4cG9ydCB0eXBlIE51bWVyaWNDb2x1bW5zPFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID1cbiAgfCB7XG4gICAgICBbVEFsaWFzIGluIGtleW9mIFRUYWJsZXNdOiBgJHtUQWxpYXMgJiBzdHJpbmd9LiR7TnVtZXJpY0NvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IE51bWVyaWNDb2x1bW5LZXlzPFRUYWJsZXNba2V5b2YgVFRhYmxlc10+IC8vIOuLqOydvCDthYzsnbTruJTsnbTrqbQg7Lus65+866qF66eM64+EIO2XiOyaqVxuICAgICAgOiBuZXZlcik7XG5cbi8vIEdyb3VwIEJ5LCBPcmRlciBCeSwgSGF2aW5nIOuTseyXkOyEnCDshKDtg50g6rCA64ql7ZWcIOy7rOufvFxuZXhwb3J0IHR5cGUgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0LCBUUmVzdWx0ID0gYW55PiA9XG4gIHwgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPlxuICB8IGAke2tleW9mIFRSZXN1bHQgJiBzdHJpbmd9YDtcblxuLy8gU2VsZWN0IOqwkiDtg4DsnoUg7ZmV7J6lICjri6jsnbwg7Lus65+8IOuYkOuKlCBTUUwg7ZGc7ZiE7IudKVxuZXhwb3J0IHR5cGUgU2VsZWN0VmFsdWU8VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPVxuICB8IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5cbiAgfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcImRhdGVcIiB8IFwic3RyaW5nW11cIiwgYm9vbGVhbj47XG5cbi8vIOykkeyyqSBTZWxlY3Qg6rCd7LK0IO2DgOyehSAo7J6s6reA7KCBKVxuLy8g7JiIOiB7IHBhcmVudDogeyBpZDogXCJwYXJlbnQuaWRcIiwgbmFtZTogXCJwYXJlbnQubmFtZVwiIH0gfVxuZXhwb3J0IHR5cGUgTmVzdGVkU2VsZWN0T2JqZWN0PFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBba2V5OiBzdHJpbmddOiBTZWxlY3RWYWx1ZTxUVGFibGVzPiB8IE5lc3RlZFNlbGVjdE9iamVjdDxUVGFibGVzPjtcbn07XG5cbi8vIFNlbGVjdCDqsJ3ssrQg7YOA7J6FIChmbGF0IOuYkOuKlCDspJHssqkg7ZeI7JqpKVxuZXhwb3J0IHR5cGUgU2VsZWN0T2JqZWN0PFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID0gTmVzdGVkU2VsZWN0T2JqZWN0PFRUYWJsZXM+O1xuXG4vLyDqsJLsnbQg7KSR7LKpIOqwneyytOyduOyngCDtjJDrs4TtlZjripQg7Zes7Y28IO2DgOyehVxudHlwZSBJc05lc3RlZE9iamVjdDxUPiA9IFQgZXh0ZW5kcyBzdHJpbmdcbiAgPyBmYWxzZVxuICA6IFQgZXh0ZW5kcyBTcWxFeHByZXNzaW9uPFNxbEV4cHJlc3Npb25UeXBlLCBib29sZWFuPlxuICAgID8gZmFsc2VcbiAgICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZTtcblxuLy8g7Lus65+87J20IG51bGxhYmxl7J247KeAIO2ZleyduCAo7Iqk7YKk66eI7JeQ7IScIOyngeygkSDstpTstpwpXG4vLyDsmIg6IElzTnVsbGFibGVDb2x1bW48VFRhYmxlcywgXCJlbXBsb3llZXMuZGVwYXJ0bWVudF9pZFwiPiDihpIgZGVwYXJ0bWVudF9pZOqwgCBudW1iZXIgfCBudWxs7J2066m0IHRydWVcbmV4cG9ydCB0eXBlIElzTnVsbGFibGVDb2x1bW48XG4gIFRUYWJsZXMsXG4gIFBhdGggZXh0ZW5kcyBzdHJpbmcsXG4+ID0gUGF0aCBleHRlbmRzIGAke2luZmVyIFRBbGlhc30uJHtpbmZlciBUQ29sdW1ufWBcbiAgPyBUQWxpYXMgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gICAgPyBUQ29sdW1uIGV4dGVuZHMga2V5b2YgVFRhYmxlc1tUQWxpYXNdXG4gICAgICA/IG51bGwgZXh0ZW5kcyBUVGFibGVzW1RBbGlhc11bVENvbHVtbl1cbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogZmFsc2VcbiAgICAgIDogZmFsc2VcbiAgICA6IGZhbHNlXG4gIDogZmFsc2U7XG5cbi8vIEZLIG51bGxhYmxlIOyXrOu2gOyXkCDrlLDrpbgg66eI7LukIO2DgOyehSDqsrDsoJVcbi8vIG51bGxhYmxlIEZL66GcIGxlZnRKb2luIOKGkiBMZWZ0Sm9pbmVkTWFya2VyICjqsJ3ssrQg7J6Q7LK06rCAIG51bGzsnbwg7IiYIOyeiOydjClcbi8vIG5vbi1udWxsIEZL66GcIGxlZnRKb2luIOKGkiDrp4jsu6Qg7JeG7J2MICjrtoDrqqjqsIAg7J6I7Jy866m0IOyekOyLneuPhCDrsJjrk5zsi5wg7J6I7J2MKVxuZXhwb3J0IHR5cGUgTGVmdEpvaW5NYXJrZXJGb3I8VFRhYmxlcywgUGF0aCBleHRlbmRzIHN0cmluZz4gPVxuICBJc051bGxhYmxlQ29sdW1uPFRUYWJsZXMsIFBhdGg+IGV4dGVuZHMgdHJ1ZSA/IExlZnRKb2luZWRNYXJrZXIgOiB7fTtcblxuLy8g7KO87Ja07KeEIO2FjOydtOu4lOydtCBGSyBudWxsYWJsZeuhnCBsZWZ0Sm9pbiDrkJwg7YWM7J2067iU7J247KeAIO2ZleyduO2VqeuLiOuLpC5cbi8vIOyCrOyLpCBMZWZ0Sm9pbk1hcmtlcuqwgCDrtpnsl4jripTsp4Ag7ZmV7J247ZWY64qU6rKMIOuLpOyeheuLiOuLpC5cbi8vIOydtCDrp4jsu6TripQgRksgbnVsbGFibGUgKyBsZWZ0Sm9pbiDsobDtlansl5DshJzrp4wg67aZ7Iq164uI64ukLlxudHlwZSBJc051bGxhYmxlSm9pbmVkVGFibGU8VFRhYmxlcywgVGFibGVLZXk+ID0gVGFibGVLZXkgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gID8gVFRhYmxlc1tUYWJsZUtleV0gZXh0ZW5kcyBMZWZ0Sm9pbmVkTWFya2VyXG4gICAgPyB0cnVlIC8vIExlZnRKb2luZWRNYXJrZXLqsIAg7J6I7Jy866m0IG51bGxhYmxlXG4gICAgOiBmYWxzZVxuICA6IGZhbHNlO1xuXG4vLyDqsr3roZwg7KGw7ZWpIO2XrO2NvCAocHJlZml46rCAIOyXhuycvOuptCBrZXnrp4wsIOyeiOycvOuptCBwcmVmaXhfX2tleSlcbnR5cGUgSm9pblBhdGg8UHJlZml4IGV4dGVuZHMgc3RyaW5nLCBLZXkgZXh0ZW5kcyBzdHJpbmc+ID0gUHJlZml4IGV4dGVuZHMgXCJcIlxuICA/IEtleVxuICA6IGAke1ByZWZpeH1fXyR7S2V5fWA7XG5cbi8vIFNlbGVjdCDqsrDqs7wg7YOA7J6F7J2EIOy2lOuhoO2VtOyjvOuKlCDsuZzqtazsnoXri4jri6QuXG4vLyDsnbQg7YOA7J6F7J2AIFB1cmnsnZggc2VsZWN0LCBhcHBlbmRTZWxlY3Tsl5DshJwgVFJlc3VsdOuhnCDsgqzsmqnrkKnri4jri6QuXG4vL1xuLy8gU2NoZW1h66W8IOydveyWtOyEnCBGS+ydmCBudWxsYWJpbGl0eeyXkCDrlLDrnbwgam9pbuuQnCDqsJ3ssrTsnZgg7YOA7J6F7J2EIOy2lOuhoO2VtOyjvOuKlCDquLDriqXsnbQg7J6I7Iq164uI64ukLlxuLy8g7J206rKMIOustOyKqCDshozrpqzrg5A/IEZL6rCAIG51bGxhYmxl7J24642wIGxlZnRKb2lu65CY7JeI64uk66m0LCDtlbTri7kg6rCd7LK064qUIG51bGxhYmxlIO2VtOyVvCDtlajsnYQg7YOA7J6FIOy2lOuhoOycvOuhnCDrsJjsmIHtlbTspIDri6TripQg6rKD7J6F64uI64ukLlxuLy8g67CY66m0IEZL6rCAIG5vbi1udWxsYWJsZeydtOqxsOuCmCDqt7jrg6Ugam9pbuycvOuhnCDsnbTslrTsoYzri6TrqbQg7ZW064u5IOqwneyytOuKlCBub24tbnVsbGFibGXtlaAg6rKB64uI64ukLlxuLy8g66y866GgIOqwneyytCDrgrTrtoDsnZggbnVsbGFiaWxpdHnripQg65iQIOuzhOqwnOuhnCDstpTroaDrkKnri4jri6QuXG4vL1xuLy8g7JWE656Y7JeQ64+EIFBhcnNlU2VsZWN0T2JqZWN0V2l0aFBhdGjrpbwg67mE66Gv7ZW0IEV4dHJhY3RDb2x1bW5UeXBlLCBFeHRyYWN0Q29sdW1uVHlwZVJhdyDrk7HsnZgg7YOA7J6F7J20IOyeiOyKteuLiOuLpC5cbi8vIOydtOuTpOydmCDsl63tlaDsnYAg64uk7J2M6rO8IOqwmeyKteuLiOuLpDpcbi8vIC0gUGFyc2UqOiDqsJ3ssrQg66CI67Ko7JeQ7IScIOykkeyyqSDqtazsobDrpbwg7Iic7ZqM7ZWY66mwIOqwneyytOyXkCB8IG51bGzsnYQg67aZ7J287KeAIOqysOygle2VqeuLiOuLpC5cbi8vIC0gRXh0cmFjdCo6IO2VhOuTnCDroIjrsqjsl5DshJwgXCJ0YWJsZS5jb2x1bW5cIiDqsr3roZzroZzrtoDthLAg7Iuk7KCcIO2DgOyeheydhCDstpTstpztlanri4jri6QuXG4vL1xuLy8g7JiI7IucOlxuLy8gLnNlbGVjdCh7XG4vLyAgIGlkOiBcInVzZXJzLmlkXCIsICAgICAgICAgICAvLyDihpAgRXh0cmFjdENvbHVtblR5cGXsnZgg6rKw6rO864qUIG51bWJlcuyeheuLiOuLpC5cbi8vICAgZGVwYXJ0bWVudDogeyAgICAgICAgICAgICAvLyDihpAgUGFyc2VTZWxlY3RPYmplY3RJbm5lcuyXkCDsnZjtlbQgbnVsbGFibGUg6rCd7LK066GcIOy2lOuhoOuQqeuLiOuLpC5cbi8vICAgICBpZDogXCJkZXBhcnRtZW50LmlkXCIsICAgIC8vIOKGkCBFeHRyYWN0Q29sdW1uVHlwZVJhd+ydmCDqsrDqs7zripQgbnVtYmVy7J6F64uI64ukLlxuLy8gICAgIG5hbWU6IFwiZGVwYXJ0bWVudC5uYW1lXCIgLy8g4oaQIEV4dHJhY3RDb2x1bW5UeXBlUmF37J2YIOqysOqzvOuKlCBzdHJpbmfsnoXri4jri6QuXG4vLyAgIH1cbi8vIH0pXG5leHBvcnQgdHlwZSBQYXJzZVNlbGVjdE9iamVjdDxcbiAgVFRhYmxlcyBleHRlbmRzIG9iamVjdCxcbiAgVFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPixcbj4gPSBQYXJzZVNlbGVjdE9iamVjdFdpdGhQYXRoPFRUYWJsZXMsIFRTZWxlY3QsIFwiXCI+O1xuXG4vLyDrs4Tsua3snbQg64uk66W4IOq0gOqzhCDqt7jro7nrj4Qg66qF7Iuc7ZWcIGlk7J2YIG51bGxhYmxlIEpPSU4g7JuQ67O47J2EIOuUsOumheuLiOuLpC5cbnR5cGUgSXNOdWxsYWJsZVNlbGVjdEdyb3VwPFRUYWJsZXMsIFRTZWxlY3QsIFBhdGggZXh0ZW5kcyBzdHJpbmc+ID1cbiAgSXNOdWxsYWJsZUpvaW5lZFRhYmxlPFRUYWJsZXMsIFBhdGg+IGV4dGVuZHMgdHJ1ZVxuICAgID8gdHJ1ZVxuICAgIDogVFNlbGVjdCBleHRlbmRzIHsgaWQ6IGAke2luZmVyIEFsaWFzfS4ke3N0cmluZ31gIH1cbiAgICAgID8gSXNOdWxsYWJsZUpvaW5lZFRhYmxlPFRUYWJsZXMsIEFsaWFzPlxuICAgICAgOiBmYWxzZTtcblxuLy8g6rK966Gc66W8IOy2lOygge2VmOuptOyEnCBTZWxlY3Qg6rKw6rO8IO2DgOyeheydhCDstpTroaDtlanri4jri6QuXG50eXBlIFBhcnNlU2VsZWN0T2JqZWN0V2l0aFBhdGg8XG4gIFRUYWJsZXMgZXh0ZW5kcyBvYmplY3QsXG4gIFRTZWxlY3QgZXh0ZW5kcyBTZWxlY3RPYmplY3Q8VFRhYmxlcz4sXG4gIFByZWZpeCBleHRlbmRzIHN0cmluZyxcbj4gPSBFeHBhbmQ8e1xuICBbSyBpbiBrZXlvZiBUU2VsZWN0XTogVFNlbGVjdFtLXSBleHRlbmRzIFNxbEV4cHJlc3Npb248U3FsRXhwcmVzc2lvblR5cGUsIGJvb2xlYW4+XG4gICAgPyBQYXJzZVNxbEV4cHJlc3Npb248VFNlbGVjdFtLXT5cbiAgICA6IElzTmVzdGVkT2JqZWN0PFRTZWxlY3RbS10+IGV4dGVuZHMgdHJ1ZVxuICAgICAgPyBUU2VsZWN0W0tdIGV4dGVuZHMgTmVzdGVkU2VsZWN0T2JqZWN0PFRUYWJsZXM+XG4gICAgICAgID8gSXNOdWxsYWJsZVNlbGVjdEdyb3VwPFRUYWJsZXMsIFRTZWxlY3RbS10sIEpvaW5QYXRoPFByZWZpeCwgSyAmIHN0cmluZz4+IGV4dGVuZHMgdHJ1ZSAvLyDso7zslrTsp4Qg7YWM7J2067iU7J20IEZLIG51bGxhYmxl7JeQIGxlZnRKb2lu65CY7JeI64qU7KeAIOyXrOu2gOyXkCDrlLDrnbwgc2VsZWN0IOqysOqzvCDqsJ3ssrTsnZgg7YOA7J6F7J20IOuLrOudvOynkeuLiOuLpC5cbiAgICAgICAgICA/IEV4cGFuZDxQYXJzZVNlbGVjdE9iamVjdElubmVyPFRUYWJsZXMsIFRTZWxlY3RbS10sIEpvaW5QYXRoPFByZWZpeCwgSyAmIHN0cmluZz4+PiB8IG51bGwgLy8g66eM7JW9IO2VtOuLue2VnOuLpOuptCDtlbTri7kg6rCd7LK0IOyekOyytOuKlCBudWxsYWJsZSDtlZjrqbAsXG4gICAgICAgICAgOiBFeHBhbmQ8UGFyc2VTZWxlY3RPYmplY3RJbm5lcjxUVGFibGVzLCBUU2VsZWN0W0tdLCBKb2luUGF0aDxQcmVmaXgsIEsgJiBzdHJpbmc+Pj4gLy8g6re466CH7KeAIOyViuuLpOuptCBub24tbnVsbGFibGUg7ZWp64uI64ukLlxuICAgICAgICA6IG5ldmVyXG4gICAgICA6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRTZWxlY3RbS10gJiBzdHJpbmc+O1xufT47XG5cbi8vIOykkeyyqSDqsJ3ssrQg64K067aA7JqpIC0gbGVmdEpvaW4gbnVsbGFibGXsnYQg6rCd7LK0IOugiOuyqOyXkOyEnCDsnbTrr7gg7LKY66as7ZaI7Jy866+A66GcIO2VhOuTnOuKlCDsm5Drs7gg7YOA7J6F7J2EIOyCrOyaqe2VqeuLiOuLpC5cbi8vIFBhcnNlU2VsZWN0T2JqZWN0V2l0aFBhdGjsmYAg6rGw7J2YIOuPmeydvO2VmOuCmCwg66eI7KeA66eJ7JeQIEV4dHJhY3RDb2x1bW5UeXBlIOuMgOyLoCBFeHRyYWN0Q29sdW1uVHlwZVJhd+ulvCDsgqzsmqntlZjsl6xcbi8vIO2VhOuTnCDroIjrsqjsl5DshJwg7KSR67O17Jy866GcIHwgbnVsbOydtCDstpTqsIDrkJjripQg6rKD7J2EIOuwqeyngO2VqeuLiOuLpC5cbnR5cGUgUGFyc2VTZWxlY3RPYmplY3RJbm5lcjxcbiAgVFRhYmxlcyBleHRlbmRzIG9iamVjdCxcbiAgVFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPixcbiAgUHJlZml4IGV4dGVuZHMgc3RyaW5nLFxuPiA9IEV4cGFuZDx7XG4gIFtLIGluIGtleW9mIFRTZWxlY3RdOiBUU2VsZWN0W0tdIGV4dGVuZHMgU3FsRXhwcmVzc2lvbjxTcWxFeHByZXNzaW9uVHlwZSwgYm9vbGVhbj5cbiAgICA/IFBhcnNlU3FsRXhwcmVzc2lvbjxUU2VsZWN0W0tdPlxuICAgIDogSXNOZXN0ZWRPYmplY3Q8VFNlbGVjdFtLXT4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IFRTZWxlY3RbS10gZXh0ZW5kcyBOZXN0ZWRTZWxlY3RPYmplY3Q8VFRhYmxlcz5cbiAgICAgICAgPyBJc051bGxhYmxlU2VsZWN0R3JvdXA8VFRhYmxlcywgVFNlbGVjdFtLXSwgSm9pblBhdGg8UHJlZml4LCBLICYgc3RyaW5nPj4gZXh0ZW5kcyB0cnVlXG4gICAgICAgICAgPyBFeHBhbmQ8UGFyc2VTZWxlY3RPYmplY3RJbm5lcjxUVGFibGVzLCBUU2VsZWN0W0tdLCBKb2luUGF0aDxQcmVmaXgsIEsgJiBzdHJpbmc+Pj4gfCBudWxsXG4gICAgICAgICAgOiBFeHBhbmQ8UGFyc2VTZWxlY3RPYmplY3RJbm5lcjxUVGFibGVzLCBUU2VsZWN0W0tdLCBKb2luUGF0aDxQcmVmaXgsIEsgJiBzdHJpbmc+Pj5cbiAgICAgICAgOiBuZXZlclxuICAgICAgOiBFeHRyYWN0Q29sdW1uVHlwZVJhdzxUVGFibGVzLCBUU2VsZWN0W0tdICYgc3RyaW5nPjsgLy8gbGVmdEpvaW4gbnVsbGFibGUg66y07IucXG59PjtcblxuLy8g7Lus65+8IOqyveuhnOyXkOyEnCDtg4DsnoXsnYQg7LaU7Lac7ZWp64uI64ukLiBMZWZ0Sm9pbmVkTWFya2Vy6rCAIOyeiOycvOuptCB8IG51bGzsnYQg7LaU6rCA7ZWp64uI64ukLlxuLy8g7LWc7IOB7JyEIHNlbGVjdCDtlYTrk5zsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuZXhwb3J0IHR5cGUgRXh0cmFjdENvbHVtblR5cGU8XG4gIFRUYWJsZXMgZXh0ZW5kcyBvYmplY3QsXG4gIFBhdGggZXh0ZW5kcyBzdHJpbmcsXG4+ID0gUGF0aCBleHRlbmRzIGAke2luZmVyIFRBbGlhc30uJHtpbmZlciBUQ29sdW1ufWBcbiAgPyBUQWxpYXMgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gICAgPyBUQ29sdW1uIGV4dGVuZHMga2V5b2YgVFRhYmxlc1tUQWxpYXNdXG4gICAgICA/IFRUYWJsZXNbVEFsaWFzXSBleHRlbmRzIExlZnRKb2luZWRNYXJrZXJcbiAgICAgICAgPyBUVGFibGVzW1RBbGlhc11bVENvbHVtbl0gfCBudWxsIC8vIExFRlQgSk9JTiAobnVsbGFibGUgRkspIOKGkiBudWxsYWJsZVxuICAgICAgICA6IFRUYWJsZXNbVEFsaWFzXVtUQ29sdW1uXSAvLyBJTk5FUiBKT0lOIOuYkOuKlCBub24tbnVsbCBGSyBsZWZ0Sm9pbiDihpIgbm9uLW51bGxhYmxlXG4gICAgICA6IG5ldmVyXG4gICAgOiBuZXZlclxuICA6IElzU2luZ2xlS2V5PFRUYWJsZXM+IGV4dGVuZHMgdHJ1ZVxuICAgID8gUGF0aCBleHRlbmRzIGtleW9mIFRUYWJsZXNba2V5b2YgVFRhYmxlc11cbiAgICAgID8gVFRhYmxlc1trZXlvZiBUVGFibGVzXVtQYXRoXVxuICAgICAgOiBuZXZlclxuICAgIDogbmV2ZXI7XG5cbi8vIOy7rOufvCDqsr3roZzsl5DshJwg7YOA7J6F7J2EIOy2lOy2nO2VqeuLiOuLpC4gbGVmdEpvaW4g7Jes67aA7JmAIOq0gOqzhOyXhuydtCDsm5Drs7gg7YOA7J6F7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbi8vIOykkeyyqSDqsJ3ssrQg64K067aAIO2VhOuTnOyXkOyEnCDsgqzsmqnrkKnri4jri6QuICjqsJ3ssrQg66CI67Ko7JeQ7IScIOydtOuvuCB8IG51bGwg7LKY66as6rCAIOyZhOujjOuQmOyXiOycvOuvgOuhnClcbnR5cGUgRXh0cmFjdENvbHVtblR5cGVSYXc8XG4gIFRUYWJsZXMgZXh0ZW5kcyBvYmplY3QsXG4gIFBhdGggZXh0ZW5kcyBzdHJpbmcsXG4+ID0gUGF0aCBleHRlbmRzIGAke2luZmVyIFRBbGlhc30uJHtpbmZlciBUQ29sdW1ufWBcbiAgPyBUQWxpYXMgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gICAgPyBUQ29sdW1uIGV4dGVuZHMga2V5b2YgVFRhYmxlc1tUQWxpYXNdXG4gICAgICA/IFRUYWJsZXNbVEFsaWFzXVtUQ29sdW1uXSAvLyBsZWZ0Sm9pbiDsl6zrtoDsmYAg6rSA6rOE7JeG7J20IOybkOuzuCDtg4DsnoVcbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyXG4gIDogSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgPyBQYXRoIGV4dGVuZHMga2V5b2YgVFRhYmxlc1trZXlvZiBUVGFibGVzXVxuICAgICAgPyBUVGFibGVzW2tleW9mIFRUYWJsZXNdW1BhdGhdXG4gICAgICA6IG5ldmVyXG4gICAgOiBuZXZlcjtcblxuLy8gV2hlcmUg7KGw6rG0IOqwneyytCDtg4DsnoVcbi8vIOyYiDogeyBcInUuaWRcIjogMSwgXCJ1LnN0YXR1c1wiOiBcImFjdGl2ZVwiIH1cbmV4cG9ydCB0eXBlIFdoZXJlQ29uZGl0aW9uPFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBba2V5IGluIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5dPzogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywga2V5ICYgc3RyaW5nPjtcbn07XG5cbi8vIEZ1bGx0ZXh0IGluZGV4IOy7rOufvCDstpTstpwg7YOA7J6FXG5leHBvcnQgdHlwZSBGdWxsdGV4dENvbHVtbnM8VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtUQWxpYXMgaW4ga2V5b2YgVFRhYmxlc106IFRUYWJsZXNbVEFsaWFzXSBleHRlbmRzIHtcbiAgICBbSyBpbiBGdWxsdGV4dEtleV06IHJlYWRvbmx5IChpbmZlciBDb2wpW107XG4gIH1cbiAgICA/IENvbCBleHRlbmRzIHN0cmluZ1xuICAgICAgPyBgJHtUQWxpYXMgJiBzdHJpbmd9LiR7Q29sfWBcbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyO1xufVtrZXlvZiBUVGFibGVzXTtcblxuLy8g67mE6rWQIOyXsOyCsOyekFxuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbk9wZXJhdG9yID0gXCI9XCIgfCBcIj5cIiB8IFwiPj1cIiB8IFwiPFwiIHwgXCI8PVwiIHwgXCI8PlwiIHwgXCIhPVwiO1xuLy8g7KGw6rG0IOyXsOyCsOyekDog67mE6rWQIOyXsOyCsOyekCArIO2MqO2EtCDrp6Tsua0g7Jew7IKw7J6QXG5leHBvcnQgdHlwZSBXaGVyZU9wZXJhdG9yID0gQ29tcGFyaXNvbk9wZXJhdG9yIHwgXCJsaWtlXCIgfCBcIm5vdCBsaWtlXCIgfCBcImlsaWtlXCIgfCBcIm5vdCBpbGlrZVwiO1xuZXhwb3J0IGNvbnN0IEZVWlpZX09QRVJBVE9SUyA9IFtcIjwlXCIsIFwiJVwiLCBcIjw8JVwiXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEZ1enp5T3BlcmF0b3IgPSAodHlwZW9mIEZVWlpZX09QRVJBVE9SUylbbnVtYmVyXTtcblxuLy8gU1FMIEV4cHJlc3Npb24g7YOA7J6FIOygleydmFxuZXhwb3J0IHR5cGUgU3FsRXhwcmVzc2lvbjxUIGV4dGVuZHMgU3FsRXhwcmVzc2lvblR5cGUsIFROdWxsYWJsZSBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4gPSB7XG4gIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCI7IC8vIOuYkOuKlCBcImNvbXB1dGVkX3ZhbHVlXCJcbiAgX3JldHVybjogVDtcbiAgX3NxbDogc3RyaW5nO1xuICBfcGFyYW1zOiBLbmV4LlJhd0JpbmRpbmdbXTtcbiAgcmVhZG9ubHkgX251bGxhYmxlPzogVE51bGxhYmxlO1xufTtcblxudHlwZSBQYXJzZVNxbEV4cHJlc3Npb248VEV4cHJlc3Npb24+ID1cbiAgVEV4cHJlc3Npb24gZXh0ZW5kcyBTcWxFeHByZXNzaW9uPGluZmVyIFRSZXR1cm4sIGluZmVyIFROdWxsYWJsZT5cbiAgICA/XG4gICAgICAgIHwgKFRSZXR1cm4gZXh0ZW5kcyBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IHN0cmluZ1xuICAgICAgICAgICAgOiBUUmV0dXJuIGV4dGVuZHMgXCJudW1iZXJcIlxuICAgICAgICAgICAgICA/IG51bWJlclxuICAgICAgICAgICAgICA6IFRSZXR1cm4gZXh0ZW5kcyBcImJvb2xlYW5cIlxuICAgICAgICAgICAgICAgID8gYm9vbGVhblxuICAgICAgICAgICAgICAgIDogVFJldHVybiBleHRlbmRzIFwiZGF0ZVwiXG4gICAgICAgICAgICAgICAgICA/IERhdGVcbiAgICAgICAgICAgICAgICAgIDogVFJldHVybiBleHRlbmRzIFwic3RyaW5nW11cIlxuICAgICAgICAgICAgICAgICAgICA/IHN0cmluZ1tdXG4gICAgICAgICAgICAgICAgICAgIDogbmV2ZXIpXG4gICAgICAgIHwgKHRydWUgZXh0ZW5kcyBUTnVsbGFibGUgPyBudWxsIDogbmV2ZXIpXG4gICAgOiBuZXZlcjtcblxuLy8g6rKw6rO8IO2DgOyehSDqsIDrj4XshLHsnYQg7JyE7ZWcIO2DgOyehSDtmZXsnqVcbmV4cG9ydCB0eXBlIEV4cGFuZDxUPiA9IFQgZXh0ZW5kcyBhbnlbXVxuICA/IHsgW0sgaW4ga2V5b2YgVFswXV06IFRbMF1bS10gfVtdIC8vIOuwsOyXtOydtOuptCDssqsg67KI7Ke4IOyalOyGjOulvCBFeHBhbmTtlZjqs6Ag67Cw7Je066GcIOqwkOyMiFxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICA/IHsgW0sgaW4ga2V5b2YgVF06IFRbS10gfVxuICAgIDogVDtcblxudHlwZSBJc1NpbmdsZUtleTxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9IGtleW9mIFRUYWJsZXMgZXh0ZW5kcyBpbmZlciBLXG4gID8gSyBleHRlbmRzIGtleW9mIFRUYWJsZXNcbiAgICA/IGtleW9mIFRUYWJsZXMgZXh0ZW5kcyBLIC8vIOyXreuwqe2WpSDssrTtgazroZwg64uo7J28IO2CpCDtmZXsnbhcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZVxuICAgIDogZmFsc2VcbiAgOiBmYWxzZTtcblxuZXhwb3J0IHR5cGUgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9XG4gIElzU2luZ2xlS2V5PFRUYWJsZXM+IGV4dGVuZHMgdHJ1ZSA/IFRUYWJsZXNba2V5b2YgVFRhYmxlc10gOiBuZXZlcjtcblxuLy8gX19oYXNEZWZhdWx0X1/sl5Ag7Y+s7ZWo65CcIO2CpOuTpOydhCBQdXJpVGFibGU8VD7snZgg7YKk66GcIOygnO2VnFxudHlwZSBIYXNEZWZhdWx0S2V5czxUPiA9IFQgZXh0ZW5kcyB7IF9faGFzRGVmYXVsdF9fOiByZWFkb25seSAoaW5mZXIgSylbXSB9XG4gID8gRXh0cmFjdDxLLCBrZXlvZiBQdXJpVGFibGU8VD4+XG4gIDogbmV2ZXI7XG5cbi8vIF9fZ2VuZXJhdGVkX1/sl5Ag7Y+s7ZWo65CcIO2CpOuTpCAoSU5TRVJUIOyLnCDsoJzsmbjtlbTslbwg7ZWoKVxudHlwZSBHZW5lcmF0ZWRLZXlzPFQ+ID0gVCBleHRlbmRzIHsgX19nZW5lcmF0ZWRfXzogcmVhZG9ubHkgKGluZmVyIEspW10gfVxuICA/IEV4dHJhY3Q8Sywga2V5b2YgUHVyaVRhYmxlPFQ+PlxuICA6IG5ldmVyO1xuXG4vLyBfX3ZpcnR1YWxfcXVlcnlfX+yXkCDtj6ztlajrkJwg7YKk65OkIChJTlNFUlQg7IucIOygnOyZuO2VtOyVvCDtlagpXG50eXBlIFZpcnR1YWxRdWVyeUtleXM8VD4gPSBUIGV4dGVuZHMgeyBfX3ZpcnR1YWxfcXVlcnlfXzogcmVhZG9ubHkgKGluZmVyIEspW10gfVxuICA/IEV4dHJhY3Q8Sywga2V5b2YgUHVyaVRhYmxlPFQ+PlxuICA6IG5ldmVyO1xuXG4vLyBJbnNlcnQg7YOA7J6FOiDrqZTtg4DrjbDsnbTthLAg7KCc6rGwIO2bhCwgX19oYXNEZWZhdWx0X18g7Lus65+865Ok66eMIG9wdGlvbmFs66GcIOyymOumrCwgZ2VuZXJhdGVkL3ZpcnR1YWxRdWVyeSDsu6zrn7zsnYAg7JmE7KCE7Z6IIOygnOyZuFxuZXhwb3J0IHR5cGUgSW5zZXJ0RGF0YTxUPiA9IE9taXQ8XG4gIFB1cmlUYWJsZTxUPixcbiAgSW50ZXJuYWxUeXBlS2V5cyB8IEhhc0RlZmF1bHRLZXlzPFQ+IHwgR2VuZXJhdGVkS2V5czxUPiB8IFZpcnR1YWxRdWVyeUtleXM8VD5cbj4gJiB7XG4gIFtLIGluIEhhc0RlZmF1bHRLZXlzPFQ+XT86IFB1cmlUYWJsZTxUPltLXTtcbn07XG5cbi8vIEluc2VydCBSZXN1bHQg7YOA7J6FXG5leHBvcnQgdHlwZSBJbnNlcnRSZXN1bHQgPSBQaWNrPFF1ZXJ5UmVzdWx0LCBcImNvbW1hbmRcIiB8IFwicm93Q291bnRcIiB8IFwicm93c1wiIHwgXCJvaWRcIj47XG5cbi8vIFN1YnNldFF1ZXJ566W8IOychO2VnCDtg4DsnoUg7Jyg7Yu466as7YuwXG5leHBvcnQgdHlwZSBFeHRyYWN0VFRhYmxlczxUIGV4dGVuZHMgUHVyaTxhbnksIGFueSwgYW55Pj4gPVxuICBUIGV4dGVuZHMgUHVyaTxhbnksIGluZmVyIFRUYWJsZXMsIGFueT4gPyBUVGFibGVzIDogbmV2ZXI7XG5leHBvcnQgdHlwZSBVbmlvbkV4dHJhY3RlZFRUYWJsZXM8XG4gIFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgU3Vic2V0UXVlcmllcyBleHRlbmRzIFJlY29yZDxTdWJzZXRLZXksIFB1cmlTdWJzZXRGbj4sXG4+ID0ge1xuICBbSyBpbiBTdWJzZXRLZXldOiBFeHRyYWN0VFRhYmxlczxSZXR1cm5UeXBlPFN1YnNldFF1ZXJpZXNbS10+Pjtcbn1bU3Vic2V0S2V5XTtcblxuLy8gT04gQ09ORkxJQ1Qg64yA7IOBIO2DgOyehVxuLy8gLSDri6jsnbwg7Lus65+8OiBcImVtYWlsXCJcbi8vIC0g67O17IiYIOy7rOufvDogW1widXNlcl9pZFwiLCBcInByb2R1Y3RfaWRcIl1cbmV4cG9ydCB0eXBlIE9uQ29uZmxpY3RUYXJnZXQgPSBzdHJpbmcgfCBzdHJpbmdbXTtcblxuLy8gT04gQ09ORkxJQ1Qg7JWh7IWYIO2DgOyehVxuLy8gLSBcIm5vdGhpbmdcIjogRE8gTk9USElOR1xuLy8gLSB7IHVwZGF0ZTogWy4uLl0gfTogRE8gVVBEQVRFXG5leHBvcnQgdHlwZSBPbkNvbmZsaWN0QWN0aW9uPFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID1cbiAgfCBcIm5vdGhpbmdcIlxuICB8IHtcbiAgICAgIHVwZGF0ZTpcbiAgICAgICAgfCBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+W10gLy8g67Cw7Je0IO2Yle2DnCAtIFtcIm5hbWVcIiwgXCJlbWFpbFwiXVxuICAgICAgICB8IFdoZXJlQ29uZGl0aW9uPFRUYWJsZXM+OyAvLyDqsJ3ssrQg7ZiV7YOcIC0geyBuYW1lOiBcIkpvaG5cIiwgY291bnQ6IFB1cmkucmF3TnVtYmVyKC4uLikgfVxuICAgIH07XG5cbi8vIEZLIOy7rOufvOuqhSDstpTstpwg7Jyg7Yu466as7YuwIO2DgOyehSAtIERhdGFiYXNlRm9yZWlnbktleXMg7Zmc7JqpXG5leHBvcnQgdHlwZSBGb3JlaWduS2V5Q29sdW1uczxUVGFibGUgZXh0ZW5kcyBUYWJsZU5hbWU8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+PiA9XG4gIFRUYWJsZSBleHRlbmRzIGtleW9mIERhdGFiYXNlRm9yZWlnbktleXMgPyBEYXRhYmFzZUZvcmVpZ25LZXlzW1RUYWJsZV0gOiBuZXZlcjtcblxuLy8gVW5pb27snYQgSW50ZXJzZWN0aW9u7Jy866GcIOuzgO2ZmO2VmOuKlCDsnKDti7jrpqzti7BcbnR5cGUgVW5pb25Ub0ludGVyc2VjdGlvbjxVPiA9IChVIGV4dGVuZHMgYW55ID8gKGs6IFUpID0+IHZvaWQgOiBuZXZlcikgZXh0ZW5kcyAoazogaW5mZXIgSSkgPT4gdm9pZFxuICA/IElcbiAgOiBuZXZlcjtcblxuLy8gU2VsZWN0QWxsIOyLnCDrqqjrk6Ag7KGw7J2465CcIO2FjOydtOu4lOydmCDsu6zrn7wg7Y+s7ZWoXG5leHBvcnQgdHlwZSBTZWxlY3RBbGxSZXN1bHQ8VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPSBVbmlvblRvSW50ZXJzZWN0aW9uPFxuICB7XG4gICAgW0sgaW4ga2V5b2YgVFRhYmxlc106IFRUYWJsZXNbS10gZXh0ZW5kcyBpbmZlciBUXG4gICAgICA/IFQgZXh0ZW5kcyBMZWZ0Sm9pbmVkTWFya2VyXG4gICAgICAgID8gUGFydGlhbDxPbWl0SW50ZXJuYWxUeXBlS2V5czxUPj4gLy8gTEVGVCBKT0lO7J2AIG51bGxhYmxlLCDrqZTtg4DrjbDsnbTthLAg7KCc6rGwXG4gICAgICAgIDogT21pdEludGVybmFsVHlwZUtleXM8VD4gLy8gSU5ORVIgSk9JTuydgCBub24tbnVsbGFibGUsIOuplO2DgOuNsOydtO2EsCDsoJzqsbBcbiAgICAgIDogbmV2ZXI7XG4gIH1ba2V5b2YgVFRhYmxlc11cbj47XG5cbi8vIEZUUyDtg4DsnoVcbnR5cGUgVHNRdWVyeVBhcnNlciA9IFwidG9fdHNxdWVyeVwiIHwgXCJwbGFpbnRvX3RzcXVlcnlcIiB8IFwicGhyYXNldG9fdHNxdWVyeVwiIHwgXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiO1xuZXhwb3J0IHR5cGUgVHNRdWVyeUNvbmZpZyA9IFwic2ltcGxlXCIgfCBcImVuZ2xpc2hcIjtcbmV4cG9ydCB0eXBlIFRzUXVlcnlPcHRpb25zID0ge1xuICBwYXJzZXI/OiBUc1F1ZXJ5UGFyc2VyO1xuICBjb25maWc/OiBUc1F1ZXJ5Q29uZmlnO1xufTtcblxuZXhwb3J0IHR5cGUgVHNIaWdobGlnaHRPcHRpb25zID0ge1xuICAvKiog7L+866asIOuzgO2ZmCDtlajsiJggKOq4sOuzuOqwkjogXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiKSAqL1xuICBwYXJzZXI/OiBUc1F1ZXJ5UGFyc2VyO1xuICAvKiog7YWN7Iqk7Yq4IOqygOyDiSDshKTsoJUgKOq4sOuzuOqwkjogXCJzaW1wbGVcIikgKi9cbiAgY29uZmlnPzogVHNRdWVyeUNvbmZpZztcbiAgLyoqIOy1nOuMgCDri6jslrQg7IiYICjquLDrs7jqsJI6IDM1KSAqL1xuICBtYXhXb3Jkcz86IG51bWJlcjtcbiAgLyoqIOy1nOyGjCDri6jslrQg7IiYICjquLDrs7jqsJI6IDE1KSAqL1xuICBtaW5Xb3Jkcz86IG51bWJlcjtcbiAgLyoqIO2XpOuTnOudvOyduCDsi5zsnpEv64Gd7JeQ7IScIOygnOqxsO2VoCDsp6fsnYAg64uo7Ja0IOq4uOydtCAo6riw67O46rCSOiAzKSAqL1xuICBzaG9ydFdvcmQ/OiBudW1iZXI7XG4gIC8qKiB0cnVl66m0IOyghOyytCDrrLjshJzrpbwg7Zek65Oc65287J247Jy866GcIOyCrOyaqSAo6riw67O46rCSOiBmYWxzZSkgKi9cbiAgaGlnaGxpZ2h0QWxsPzogYm9vbGVhbjtcbiAgLyoqIO2RnOyLnO2VoCDstZzrjIAg7YWN7Iqk7Yq4IOyhsOqwgSDsiJggKOq4sOuzuOqwkjogMCwg7KGw6rCBIOuvuOyCrOyaqSkgKi9cbiAgbWF4RnJhZ21lbnRzPzogbnVtYmVyO1xuICAvKiog7L+866asIOuLqOyWtCDsi5zsnpEg6rWs67aE7J6QICjquLDrs7jqsJI6IFwiPGI+XCIpICovXG4gIHN0YXJ0U2VsPzogc3RyaW5nO1xuICAvKiog7L+866asIOuLqOyWtCDrgZ0g6rWs67aE7J6QICjquLDrs7jqsJI6IFwiPC9iPlwiKSAqL1xuICBzdG9wU2VsPzogc3RyaW5nO1xuICAvKiog7KGw6rCBIOq1rOu2hOyekCAo6riw67O46rCSOiBcIiAuLi4gXCIpICovXG4gIGZyYWdtZW50RGVsaW1pdGVyPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVHNSYW5rT3B0aW9ucyA9IHtcbiAgcGFyc2VyPzogVHNRdWVyeVBhcnNlcjtcbiAgY29uZmlnPzogVHNRdWVyeUNvbmZpZztcbiAgLyoqIOqwgOykkey5mCDrsLDsl7QgW0QsIEMsIEIsIEFdICjquLDrs7jqsJI6IFswLjEsIDAuMiwgMC40LCAxLjBdKSAqL1xuICB3ZWlnaHRzPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIC8qKlxuICAgKiDsoJXqt5ztmZQg7Ji17IWYXG4gICAqIDA6IOusuOyEnCDquLjsnbQg66y07IucICjquLDrs7jqsJIpXG4gICAqIDE6IDEgKyBsb2co66y47IScIOq4uOydtCnroZwg64KY64iUXG4gICAqIDI6IOusuOyEnCDquLjsnbTroZwg64KY64iUXG4gICAqIDQ6IO2Pieq3oCDsobDtmZQg6rGw66as66GcIOuCmOuIlCAodHNfcmFua19jZOunjClcbiAgICogODog6rOg7JygIOuLqOyWtCDsiJjroZwg64KY64iUXG4gICAqIDE2OiAxICsgbG9nKOqzoOycoCDri6jslrQg7IiYKeuhnCDrgpjriJRcbiAgICogMzI6IHJhbmsvKHJhbmsrMSkgLT4gMH4xIOyCrOydtOydmCDqsJLsnLzroZwg7Iqk7LyA7J2866eBXG4gICAqXG4gICAqIOu5hO2KuOuniOyKpO2BrOulvCDsgqzsmqntlZjsl6wg7Ji17IWY7J2EIOyhsO2Vqe2VoCDsiJgg7J6I7J2MXG4gICAqIOyYiDogOCB8IDMyIC0+IOqzoOycoCDri6jslrQg7IiY66GcIOuCmOuIhOqzoCAwfjEg7Iqk7LyA7J2866eBXG4gICAqL1xuICBub3JtYWxpemF0aW9uPzogbnVtYmVyO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztDQXVUYSxrQkFBa0I7RUFBQztFQUFNO0VBQUs7Q0FBSyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sonamu-dictionary.d.ts","sourceRoot":"","sources":["../../src/dict/sonamu-dictionary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sonamu-dictionary.d.ts","sourceRoot":"","sources":["../../src/dict/sonamu-dictionary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { init_runtime_value, isStringValue } from "../utils/runtime-value.js";
|
|
2
3
|
import { SD, init_sd } from "./sd.js";
|
|
3
4
|
import { BadRequestException, init_so_exceptions } from "../exceptions/so-exceptions.js";
|
|
4
5
|
import { formatCode, init_code_formatting } from "../code-formatting/index.js";
|
|
@@ -22,12 +23,29 @@ function colLetter(index) {
|
|
|
22
23
|
}
|
|
23
24
|
return result;
|
|
24
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Excel 행 셀을 사전 값 문자열로 읽습니다.
|
|
28
|
+
*
|
|
29
|
+
* SheetKit 0.5.1과 같은 결과를 유지합니다.
|
|
30
|
+
* - 문자열 셀은 그 값을 그대로 씁니다.
|
|
31
|
+
* - 수식 셀은 캐시된 결과가 아니라 수식 텍스트를 씁니다. SheetKit 1.0.1은 수식 텍스트를
|
|
32
|
+
* `value`와 `formula` 객체에 함께 주며, `value`가 없을 때는 `formula` 객체의 텍스트를 씁니다.
|
|
33
|
+
* - 숫자·날짜·불리언 셀은 빈 문자열로 둡니다. 객체 값을 문자열로 바꾸면
|
|
34
|
+
* "[object Object]" 같은 값이 사전에 들어가므로 변환하지 않습니다.
|
|
35
|
+
*/
|
|
36
|
+
function readCellText(cell) {
|
|
37
|
+
if (cell === void 0) return "";
|
|
38
|
+
if (isStringValue(cell.value)) return cell.value;
|
|
39
|
+
if (cell.valueType === "formula" && cell.formula !== void 0) return cell.formula.formula;
|
|
40
|
+
return "";
|
|
41
|
+
}
|
|
25
42
|
var SonamuDictionary, sonamuDictionary;
|
|
26
43
|
var init_sonamu_dictionary = __esmMin((() => {
|
|
27
44
|
init_sonamu();
|
|
28
45
|
init_code_formatting();
|
|
29
46
|
init_entity_manager();
|
|
30
47
|
init_so_exceptions();
|
|
48
|
+
init_runtime_value();
|
|
31
49
|
init_sd();
|
|
32
50
|
SonamuDictionary = class {
|
|
33
51
|
/**
|
|
@@ -554,23 +572,20 @@ var init_sonamu_dictionary = __esmMin((() => {
|
|
|
554
572
|
const projectDictEntries = {};
|
|
555
573
|
for (const locale of locales) projectDictEntries[locale] = [];
|
|
556
574
|
let headerRowNum = 0;
|
|
557
|
-
for (const rowData of allRows) {
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
headerRowNum = rowData.row;
|
|
561
|
-
break;
|
|
562
|
-
}
|
|
575
|
+
for (const rowData of allRows) if (readCellText(rowData.cells.find((c) => c.column === "A")).trim().toLowerCase() === "key") {
|
|
576
|
+
headerRowNum = rowData.row;
|
|
577
|
+
break;
|
|
563
578
|
}
|
|
564
579
|
if (headerRowNum === 0) throw new BadRequestException(SD("sonamu.error.headerRowNotFound"));
|
|
565
580
|
const headerRowData = allRows.find((r) => r.row === headerRowNum);
|
|
566
581
|
const colToHeader = /* @__PURE__ */ new Map();
|
|
567
|
-
if (headerRowData) for (const cell of headerRowData.cells) colToHeader.set(cell.column,
|
|
582
|
+
if (headerRowData) for (const cell of headerRowData.cells) colToHeader.set(cell.column, readCellText(cell));
|
|
568
583
|
for (const rowData of allRows) {
|
|
569
584
|
if (rowData.row <= headerRowNum) continue;
|
|
570
585
|
const rowValues = {};
|
|
571
586
|
for (const cell of rowData.cells) {
|
|
572
587
|
const headerName = colToHeader.get(cell.column);
|
|
573
|
-
if (headerName) rowValues[headerName] =
|
|
588
|
+
if (headerName) rowValues[headerName] = readCellText(cell);
|
|
574
589
|
}
|
|
575
590
|
const key = rowValues.key;
|
|
576
591
|
const source = rowValues.source;
|
|
@@ -747,4 +762,4 @@ var init_sonamu_dictionary = __esmMin((() => {
|
|
|
747
762
|
init_sonamu_dictionary();
|
|
748
763
|
export { SonamuDictionary, init_sonamu_dictionary, sonamuDictionary };
|
|
749
764
|
|
|
750
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYW11LWRpY3Rpb25hcnkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpY3Qvc29uYW11LWRpY3Rpb25hcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgV29ya2Jvb2sgfSBmcm9tIFwiQHNoZWV0a2l0L25vZGVcIjtcbmltcG9ydCB0cyBmcm9tIFwiQHR5cGVzY3JpcHQvdHlwZXNjcmlwdDZcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vY29kZS1mb3JtYXR0aW5nXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IFNEIH0gZnJvbSBcIi4vc2RcIjtcbmltcG9ydCB7XG4gIHR5cGUgRGljdEVudHJ5LFxuICB0eXBlIERpY3Rpb25hcnlSZXN1bHQsXG4gIHR5cGUgRGljdGlvbmFyeVJvdyxcbiAgdHlwZSBFbnRpdHlLZXlJbmZvLFxuICB0eXBlIEkxOG5Db25maWcsXG4gIHR5cGUgSW1wb3J0UmVzdWx0LFxuICB0eXBlIFVzYWdlUmVzdWx0LFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIDAtYmFzZWQg7Lus65+8IOyduOuNseyKpOulvCDsl5HshYAg7Lus65+8IOusuOyekOuhnCDrs4DtmZggKDAgLT4gXCJBXCIsIDI1IC0+IFwiWlwiLCAyNiAtPiBcIkFBXCIpXG4gKi9cbmZ1bmN0aW9uIGNvbExldHRlcihpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gIGxldCBuID0gaW5kZXg7XG4gIHdoaWxlIChuID49IDApIHtcbiAgICByZXN1bHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDY1ICsgKG4gJSAyNikpICsgcmVzdWx0O1xuICAgIG4gPSBNYXRoLmZsb29yKG4gLyAyNikgLSAxO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkg6rSA66asIO2BtOuemOyKpFxuICogaTE4biDrlJXshZTrhIjrpqzsnZggQ1JVRCDrsI8gRXhjZWwgaW1wb3J0L2V4cG9ydOulvCDri7Tri7ntlanri4jri6QuXG4gKi9cbmV4cG9ydCBjbGFzcyBTb25hbXVEaWN0aW9uYXJ5IHtcbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgQ29tcGlsZXIgQVBJ66W8IOyCrOyaqe2VmOyXrCBkaWN0IO2MjOydvCDtjIzsi7FcbiAgICpcbiAgICog7KeA7JuQIO2MqO2EtDpcbiAgICogLSBleHBvcnQgZGVmYXVsdCB7IC4uLiB9IGFzIGNvbnN0O1xuICAgKiAtIGV4cG9ydCBkZWZhdWx0IGRlZmluZUxvY2FsZSh7IC4uLiB9KTtcbiAgICogLSDrrLjsnpDsl7Qg6rCSOiBcImtleVwiOiBcInZhbHVlXCIg65iQ64qUIGtleTogYHZhbHVlYFxuICAgKiAtIO2VqOyImCDqsJI6IFwia2V5XCI6IChwYXJhbTogVHlwZSkgPT4gYHRlbXBsYXRlYFxuICAgKi9cbiAgcGFyc2VEaWN0RmlsZShmaWxlUGF0aDogc3RyaW5nKTogRGljdEVudHJ5W10ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIFwidXRmLThcIik7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IHRzLmNyZWF0ZVNvdXJjZUZpbGUoZmlsZVBhdGgsIGNvbnRlbnQsIHRzLlNjcmlwdFRhcmdldC5MYXRlc3QsIHRydWUpO1xuXG4gICAgY29uc3QgZW50cmllczogRGljdEVudHJ5W10gPSBbXTtcblxuICAgIHRzLmZvckVhY2hDaGlsZChzb3VyY2VGaWxlLCAobm9kZSkgPT4ge1xuICAgICAgaWYgKHRzLmlzRXhwb3J0QXNzaWdubWVudChub2RlKSkge1xuICAgICAgICBjb25zdCBvYmplY3RMaXRlcmFsID0gdGhpcy51bndyYXBUb09iamVjdExpdGVyYWwobm9kZS5leHByZXNzaW9uKTtcbiAgICAgICAgaWYgKG9iamVjdExpdGVyYWwpIHtcbiAgICAgICAgICB0aGlzLmV4dHJhY3RFbnRyaWVzRnJvbU9iamVjdChvYmplY3RMaXRlcmFsLCBzb3VyY2VGaWxlLCBlbnRyaWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cblxuICAvKipcbiAgICog7YyM7J287JeQ7IScIO2KueyglSDsnbTrpoTsnZggY29uc3Qg7ISg7Ja47J2EIOywvuyVhCBPYmplY3RMaXRlcmFsIO2MjOyLsVxuICAgKiDsmIg6IGNvbnN0IGVudGl0eUxhYmVscyA9IHsgLi4uIH0gYXMgY29uc3Q7XG4gICAqL1xuICBwYXJzZUNvbnN0T2JqZWN0RGVjbGFyYXRpb24oZmlsZVBhdGg6IHN0cmluZywgdmFyTmFtZTogc3RyaW5nKTogRGljdEVudHJ5W10ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIFwidXRmLThcIik7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IHRzLmNyZWF0ZVNvdXJjZUZpbGUoZmlsZVBhdGgsIGNvbnRlbnQsIHRzLlNjcmlwdFRhcmdldC5MYXRlc3QsIHRydWUpO1xuXG4gICAgY29uc3QgZW50cmllczogRGljdEVudHJ5W10gPSBbXTtcblxuICAgIHRzLmZvckVhY2hDaGlsZChzb3VyY2VGaWxlLCAobm9kZSkgPT4ge1xuICAgICAgaWYgKHRzLmlzVmFyaWFibGVTdGF0ZW1lbnQobm9kZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBkZWNsIG9mIG5vZGUuZGVjbGFyYXRpb25MaXN0LmRlY2xhcmF0aW9ucykge1xuICAgICAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIoZGVjbC5uYW1lKSAmJiBkZWNsLm5hbWUudGV4dCA9PT0gdmFyTmFtZSAmJiBkZWNsLmluaXRpYWxpemVyKSB7XG4gICAgICAgICAgICBjb25zdCBvYmplY3RMaXRlcmFsID0gdGhpcy51bndyYXBUb09iamVjdExpdGVyYWwoZGVjbC5pbml0aWFsaXplcik7XG4gICAgICAgICAgICBpZiAob2JqZWN0TGl0ZXJhbCkge1xuICAgICAgICAgICAgICB0aGlzLmV4dHJhY3RFbnRyaWVzRnJvbU9iamVjdChvYmplY3RMaXRlcmFsLCBzb3VyY2VGaWxlLCBlbnRyaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbnRyaWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIOusuOyekOyXtOydtCDtmZTsgrTtkZwg7ZWo7IiYIOuYkOuKlCDtlajsiJgg7ZGc7ZiE7Iud7J247KeAIO2MkOuzhFxuICAgKi9cbiAgaXNFeHByZXNzaW9uRnVuY3Rpb24oY29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8g67mIIOusuOyekOyXtOydtOuCmCDqs7XrsLHrp4wg7J6I64qUIOqyveyasFxuICAgIGlmICghY29kZS50cmltKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBBUlJPV19GVU5DVElPTl9QQVRURVJOID0gL15cXHMqXFwoW14pXSpcXClcXHMqPT4vO1xuXG4gICAgcmV0dXJuIEFSUk9XX0ZVTkNUSU9OX1BBVFRFUk4udGVzdChjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBleHBvcnQgZGVmYXVsdCDtkZztmITsi53sl5DshJwgT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24g7LaU7LacXG4gICAqIC0gYXMgY29uc3Qg7LKY66asXG4gICAqIC0gZGVmaW5lTG9jYWxlKHsgLi4uIH0pIO2YuOy2nCDsspjrpqxcbiAgICovXG4gIHByaXZhdGUgdW53cmFwVG9PYmplY3RMaXRlcmFsKGV4cHI6IHRzLkV4cHJlc3Npb24pOiB0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbiB8IG51bGwge1xuICAgIC8vIGFzIGNvbnN0IOyymOumrFxuICAgIGlmICh0cy5pc0FzRXhwcmVzc2lvbihleHByKSkge1xuICAgICAgcmV0dXJuIHRoaXMudW53cmFwVG9PYmplY3RMaXRlcmFsKGV4cHIuZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIC8vIOyngeygkSDqsJ3ssrQg66as7YSw65+0XG4gICAgaWYgKHRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24oZXhwcikpIHtcbiAgICAgIHJldHVybiBleHByO1xuICAgIH1cbiAgICAvLyBkZWZpbmVMb2NhbGUoeyAuLi4gfSkg7Zi47LacXG4gICAgaWYgKHRzLmlzQ2FsbEV4cHJlc3Npb24oZXhwcikpIHtcbiAgICAgIGNvbnN0IGZpcnN0QXJnID0gZXhwci5hcmd1bWVudHNbMF07XG4gICAgICBpZiAoZmlyc3RBcmcgJiYgdHMuaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihmaXJzdEFyZykpIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0QXJnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYmplY3RMaXRlcmFsRXhwcmVzc2lvbuyXkOyEnCBEaWN0RW50cnkg7LaU7LacXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RFbnRyaWVzRnJvbU9iamVjdChcbiAgICBvYmplY3RMaXRlcmFsOiB0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbixcbiAgICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuICAgIGVudHJpZXM6IERpY3RFbnRyeVtdLFxuICApOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2Ygb2JqZWN0TGl0ZXJhbC5wcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuZXh0cmFjdERpY3RFbnRyeShwcm9wLCBzb3VyY2VGaWxlKTtcbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9wZXJ0eU5hbWXsl5DshJwg7YKkIOusuOyekOyXtCDstpTstpxcbiAgICogLSDrrLjsnpDsl7Qg66as7YSw65+0OiBcImtleVwiXG4gICAqIC0g7Iud67OE7J6QOiBrZXkgKHVucXVvdGVkKVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0eUtleShuYW1lOiB0cy5Qcm9wZXJ0eU5hbWUpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodHMuaXNTdHJpbmdMaXRlcmFsKG5hbWUpKSB7XG4gICAgICByZXR1cm4gbmFtZS50ZXh0O1xuICAgIH1cbiAgICBpZiAodHMuaXNJZGVudGlmaWVyKG5hbWUpKSB7XG4gICAgICByZXR1cm4gbmFtZS50ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlITroZztjbzti7Dsl5DshJwgRGljdEVudHJ5IOy2lOy2nFxuICAgKiAtIOusuOyekOyXtDog7Iuk7KCcIOusuOyekOyXtCDqsJJcbiAgICogLSDtlajsiJg6IOybkOuzuCDshozsiqQgKOyXrOufrCDspITsnYAg7ZWcIOykhOuhnCDsoJXqt5ztmZQpXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3REaWN0RW50cnkoXG4gICAgcHJvcDogdHMuT2JqZWN0TGl0ZXJhbEVsZW1lbnRMaWtlLFxuICAgIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsXG4gICk6IERpY3RFbnRyeSB8IG51bGwge1xuICAgIGlmICghdHMuaXNQcm9wZXJ0eUFzc2lnbm1lbnQocHJvcCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0UHJvcGVydHlLZXkocHJvcC5uYW1lKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBpbml0ID0gcHJvcC5pbml0aWFsaXplcjtcblxuICAgIC8vIO2ZlOyCtO2RnCDtlajsiJhcbiAgICBpZiAodHMuaXNBcnJvd0Z1bmN0aW9uKGluaXQpKSB7XG4gICAgICBjb25zdCBmdW5jVGV4dCA9IGluaXQuZ2V0VGV4dChzb3VyY2VGaWxlKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmdW5jVGV4dC5yZXBsYWNlKC9cXHMqXFxuXFxzKi9nLCBcIiBcIikudHJpbSgpO1xuICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogbm9ybWFsaXplZCwgaXNGdW5jdGlvbjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIC8vIOusuOyekOyXtCDrpqzthLDrn7RcbiAgICBpZiAodHMuaXNTdHJpbmdMaXRlcmFsKGluaXQpKSB7XG4gICAgICByZXR1cm4geyBrZXksIHZhbHVlOiBpbml0LnRleHQsIGlzRnVuY3Rpb246IGZhbHNlIH07XG4gICAgfVxuXG4gICAgLy8g7YWc7ZSM66a/IOumrO2EsOuftCAo67OA7IiYIOyXhuydjClcbiAgICBpZiAodHMuaXNOb1N1YnN0aXR1dGlvblRlbXBsYXRlTGl0ZXJhbChpbml0KSkge1xuICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogaW5pdC50ZXh0LCBpc0Z1bmN0aW9uOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIC8vIOq4sO2DgCAo7JiIOiDtlajsiJgg7ZGc7ZiE7IudKVxuICAgIHJldHVybiB7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZTogaW5pdC5nZXRUZXh0KHNvdXJjZUZpbGUpLFxuICAgICAgaXNGdW5jdGlvbjogdHMuaXNGdW5jdGlvbkV4cHJlc3Npb24oaW5pdCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlITroZzsoJ3tirjsnZggaTE4biBkaWN0IO2MjOydvCDqsr3roZzrpbwg67CY7ZmY7ZWp64uI64ukLlxuICAgKiBAcGFyYW0gbG9jYWxlIC0g66Gc7LyA7J28IChrbywgZW4g65OxKVxuICAgKiBAcGFyYW0gdGFyZ2V0IC0g7YOA6rKfIOuUlOugie2GoOumrCAoYXBpLCB3ZWIsIGFwcClcbiAgICovXG4gIGdldFByb2plY3REaWN0UGF0aChsb2NhbGU6IHN0cmluZywgdGFyZ2V0OiBcImFwaVwiIHwgXCJ3ZWJcIiB8IFwiYXBwXCIgPSBcImFwaVwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXIgPSB0YXJnZXQgPT09IFwiYXBpXCIgPyBTb25hbXUuY29uZmlnLmFwaS5kaXIgOiB0YXJnZXQ7XG4gICAgcmV0dXJuIHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIGRpciwgXCJzcmNcIiwgXCJpMThuXCIsIGAke2xvY2FsZX0udHNgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzb25hbXUg64K07J6lIGRpY3Qg7YyM7J28IOqyveuhnOulvCDrsJjtmZjtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGdldFNvbmFtdURpY3RQYXRoKGxvY2FsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYWNrYWdlUm9vdCA9IHBhdGgucmVzb2x2ZShpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIik7XG4gICAgcmV0dXJuIHBhdGguam9pbihwYWNrYWdlUm9vdCwgXCJzcmNcIiwgXCJkaWN0XCIsIGAke2xvY2FsZX0udHNgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlYTsmpTtlZwgZGljdCDtgqTqsIAg7ZSE66Gc7KCd7Yq47JeQIOyhtOyerO2VmOuKlOyngCDtmZXsnbjtlZjqs6AsIOyXhuycvOuptCDstpTqsIDtlanri4jri6QuXG4gICAqIGRlZmF1bHRMb2NhbGXsl5Drp4wg7LaU6rCA7ZWY66mwLCDri6TrpbggbG9jYWxl7J2AIOyCrOyaqeyekOqwgCDsp4HsoJEg67KI7Jet7ZW07JW8IO2VqeuLiOuLpC5cbiAgICpcbiAgICogQHBhcmFtIHJlcXVpcmVkS2V5cyAtIO2VhOyalO2VnCDtgqQg66qp66GdXG4gICAqIEBwYXJhbSB0YXJnZXQgLSDtg4Dqsp8g65SU66CJ7Yag66asIChhcGksIHdlYiwgYXBwKVxuICAgKiBAcmV0dXJucyDstpTqsIDrkJwg7YKkIOuqqeuhnVxuICAgKi9cbiAgYXN5bmMgZW5zdXJlRGljdEtleXMoXG4gICAgcmVxdWlyZWRLZXlzOiBzdHJpbmdbXSxcbiAgICB0YXJnZXQ6IFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIiA9IFwiYXBpXCIsXG4gICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCB7IGRlZmF1bHRMb2NhbGUgfSA9IFNvbmFtdS5jb25maWcuaTE4bjtcbiAgICBjb25zdCBwcm9qZWN0RGljdFBhdGggPSB0aGlzLmdldFByb2plY3REaWN0UGF0aChkZWZhdWx0TG9jYWxlLCB0YXJnZXQpO1xuXG4gICAgLy8g7ZSE66Gc7KCd7Yq4IGRpY3Qg7YyM7J287J20IOyXhuycvOuptCDslYTrrLTqsoPrj4Qg7ZWY7KeAIOyViuydjFxuICAgIGlmICghZnMuZXhpc3RzU3luYyhwcm9qZWN0RGljdFBhdGgpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8g7ZSE66Gc7KCd7Yq4IGRpY3Tsl5DshJwg6riw7KG0IO2CpCDtjIzsi7FcbiAgICBjb25zdCBwcm9qZWN0RW50cmllcyA9IHRoaXMucGFyc2VEaWN0RmlsZShwcm9qZWN0RGljdFBhdGgpO1xuICAgIGNvbnN0IGV4aXN0aW5nS2V5cyA9IG5ldyBTZXQocHJvamVjdEVudHJpZXMubWFwKChlKSA9PiBlLmtleSkpO1xuXG4gICAgLy8g64iE652965CcIO2CpCDssL7quLBcbiAgICBjb25zdCBtaXNzaW5nS2V5cyA9IHJlcXVpcmVkS2V5cy5maWx0ZXIoKGtleSkgPT4gIWV4aXN0aW5nS2V5cy5oYXMoa2V5KSk7XG5cbiAgICBpZiAobWlzc2luZ0tleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gc29uYW11IGRpY3Tsl5DshJwg6riw67O46rCSIOqwgOyguOyYpOq4sFxuICAgIGNvbnN0IHNvbmFtdURpY3RQYXRoID0gdGhpcy5nZXRTb25hbXVEaWN0UGF0aChkZWZhdWx0TG9jYWxlKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc29uYW11RGljdFBhdGgpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgc29uYW11RW50cmllcyA9IHRoaXMucGFyc2VEaWN0RmlsZShzb25hbXVEaWN0UGF0aCk7XG4gICAgY29uc3Qgc29uYW11RGljdCA9IG5ldyBNYXAoc29uYW11RW50cmllcy5tYXAoKGUpID0+IFtlLmtleSwgZV0pKTtcblxuICAgIC8vIOy2lOqwgO2VoCDsl5Ttirjrpqwg7IOd7ISxXG4gICAgY29uc3QgZW50cmllc1RvQWRkID0gbWlzc2luZ0tleXNcbiAgICAgIC5tYXAoKGtleSkgPT4gc29uYW11RGljdC5nZXQoa2V5KSlcbiAgICAgIC5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgTm9uTnVsbGFibGU8dHlwZW9mIGVudHJ5PiA9PiBlbnRyeSAhPT0gdW5kZWZpbmVkKTtcblxuICAgIGlmIChlbnRyaWVzVG9BZGQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8g7ZSE66Gc7KCd7Yq4IGRpY3Qg7YyM7J287JeQIOy2lOqwgFxuICAgIGF3YWl0IHRoaXMuYXBwZW5kRW50cmllc1RvRGljdEZpbGUocHJvamVjdERpY3RQYXRoLCBlbnRyaWVzVG9BZGQsIGRlZmF1bHRMb2NhbGUsIHRydWUpO1xuXG4gICAgcmV0dXJuIGVudHJpZXNUb0FkZC5tYXAoKGUpID0+IGUua2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkaWN0IO2MjOydvOyXkCDsl5Ttirjrpqzrpbwg7LaU6rCA7ZWp64uI64ukLlxuICAgKiDquLDsobQg7YyM7J287J2EIO2MjOyLse2VmOqzoCwg7IOIIOyXlO2KuOumrOulvCDstpTqsIDtlZwg65KkLCDsoITssrQg7YyM7J287J2EIOyerOyDneyEse2VqeuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYXBwZW5kRW50cmllc1RvRGljdEZpbGUoXG4gICAgZmlsZVBhdGg6IHN0cmluZyxcbiAgICBlbnRyaWVzOiBEaWN0RW50cnlbXSxcbiAgICBsb2NhbGU6IHN0cmluZyxcbiAgICBpc0RlZmF1bHRMb2NhbGU6IGJvb2xlYW4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIOq4sOyhtCBlbnRyaWVzIO2MjOyLsVxuICAgIGNvbnN0IGV4aXN0aW5nRW50cmllcyA9IHRoaXMucGFyc2VEaWN0RmlsZShmaWxlUGF0aCk7XG5cbiAgICAvLyDsg4ggZW50cmllcyDstpTqsIBcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGV4aXN0aW5nRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB9XG5cbiAgICAvLyDtjIzsnbwg7J6s7IOd7ISxXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2VuZXJhdGVQcm9qZWN0RGljdChsb2NhbGUsIGV4aXN0aW5nRW50cmllcywgaXNEZWZhdWx0TG9jYWxlKTtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBhd2FpdCBmb3JtYXRDb2RlKGNvbnRlbnQsIGZpbGVQYXRoKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBmb3JtYXR0ZWQsIFwidXRmLThcIik7XG4gIH1cblxuICAvKipcbiAgICog7ZWo7IiYIOqwkuuTpOyXkOyEnCDsgqzsmqnrkJjripQg7Zes7Y28IO2VqOyImOulvCDqsJDsp4Dtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGRldGVjdFVzZWRIZWxwZXJzKGVudHJpZXM6IERpY3RFbnRyeVtdKSB7XG4gICAgY29uc3QgZnVuY3Rpb25FbnRyaWVzID0gZW50cmllcy5maWx0ZXIoKGUpID0+IGUuaXNGdW5jdGlvbik7XG4gICAgY29uc3QgaGVscGVyczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgaGVscGVyIG9mIFtcInBsdXJhbFwiLCBcImpvc2FcIl0pIHtcbiAgICAgIC8vIO2VqOyImOuqheydtCDri6jslrQg6rK96rOE66GcIOyCrOyaqeuQmOuKlOyngCDtmZXsnbggKOyYiDogcGx1cmFsKCDrmJDripQgcGx1cmFsLClcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKGBcXFxcYiR7aGVscGVyfVxcXFxzKlxcXFwoYCk7XG4gICAgICBpZiAoZnVuY3Rpb25FbnRyaWVzLnNvbWUoKGUpID0+IHBhdHRlcm4udGVzdChlLnZhbHVlKSkpIHtcbiAgICAgICAgaGVscGVycy5wdXNoKGhlbHBlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IOyCrOyaqSDsl6zrtoAg67OE64+EIOqwkOyngCAoZm9ybWF0Lm51bWJlciguLi4pLCBmb3JtYXQuZGF0ZSguLi4pIOuTsSlcbiAgICBjb25zdCBmb3JtYXRQYXR0ZXJuID0gL1xcYmZvcm1hdFxcLlxcdytcXHMqXFwoLztcbiAgICBjb25zdCB1c2VzRm9ybWF0ID0gZnVuY3Rpb25FbnRyaWVzLnNvbWUoKGUpID0+IGZvcm1hdFBhdHRlcm4udGVzdChlLnZhbHVlKSk7XG5cbiAgICByZXR1cm4geyBoZWxwZXJzLCB1c2VzRm9ybWF0IH07XG4gIH1cblxuICAvKipcbiAgICogUHJvamVjdCBkaWN0IO2MjOydvCDsg53shLFcbiAgICovXG4gIGdlbmVyYXRlUHJvamVjdERpY3QobG9jYWxlOiBzdHJpbmcsIGVudHJpZXM6IERpY3RFbnRyeVtdLCBpc0RlZmF1bHRMb2NhbGU6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIC8vIGtleSDslYztjIzrsrMg7IicIOygleugrFxuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5lbnRyaWVzXS50b1NvcnRlZCgoYSwgYikgPT4gYS5rZXkubG9jYWxlQ29tcGFyZShiLmtleSkpO1xuXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyDtlajsiJgg6rCS7JeQ7IScIOyCrOyaqeuQmOuKlCDtl6ztjbwg7ZWo7IiYIOqwkOyngFxuICAgIGNvbnN0IHsgaGVscGVycywgdXNlc0Zvcm1hdCB9ID0gdGhpcy5kZXRlY3RVc2VkSGVscGVycyhlbnRyaWVzKTtcblxuICAgIC8vIO2XrO2NvCDtlajsiJggaW1wb3J0IOy2lOqwgFxuICAgIGNvbnN0IGltcG9ydHMgPSBbLi4uaGVscGVyc107XG4gICAgaWYgKHVzZXNGb3JtYXQpIHtcbiAgICAgIGltcG9ydHMucHVzaChcImNyZWF0ZUZvcm1hdFwiKTtcbiAgICB9XG4gICAgaWYgKGltcG9ydHMubGVuZ3RoID4gMCkge1xuICAgICAgbGluZXMucHVzaChgaW1wb3J0IHsgJHtpbXBvcnRzLmpvaW4oXCIsIFwiKX0gfSBmcm9tIFwic29uYW11L2RpY3RcIjtgKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRGVmYXVsdExvY2FsZSkge1xuICAgICAgbGluZXMucHVzaCgnaW1wb3J0IHsgZGVmaW5lTG9jYWxlIH0gZnJvbSBcIi4vc2QuZ2VuZXJhdGVkXCI7Jyk7XG4gICAgfVxuXG4gICAgaWYgKGltcG9ydHMubGVuZ3RoID4gMCB8fCAhaXNEZWZhdWx0TG9jYWxlKSB7XG4gICAgICBsaW5lcy5wdXNoKFwiXCIpO1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCDsgqzsmqkg7IucIGNyZWF0ZUZvcm1hdCDtmLjstpwg7LaU6rCAXG4gICAgaWYgKHVzZXNGb3JtYXQpIHtcbiAgICAgIGxpbmVzLnB1c2goYGNvbnN0IGZvcm1hdCA9IGNyZWF0ZUZvcm1hdChcIiR7bG9jYWxlfVwiKTtgKTtcbiAgICAgIGxpbmVzLnB1c2goXCJcIik7XG4gICAgfVxuXG4gICAgbGluZXMucHVzaChcIi8qKlwiKTtcbiAgICBsaW5lcy5wdXNoKGAgKiBQcm9qZWN0ICR7bG9jYWxlLnRvVXBwZXJDYXNlKCl9IERpY3Rpb25hcnlgKTtcbiAgICBsaW5lcy5wdXNoKFwiICovXCIpO1xuXG4gICAgaWYgKGlzRGVmYXVsdExvY2FsZSkge1xuICAgICAgbGluZXMucHVzaChcImV4cG9ydCBkZWZhdWx0IHtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goXCJleHBvcnQgZGVmYXVsdCBkZWZpbmVMb2NhbGUoe1wiKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHNvcnRlZCkge1xuICAgICAgaWYgKGVudHJ5LmlzRnVuY3Rpb24pIHtcbiAgICAgICAgLy8g7ZWo7IiY7J24IOqyveyasDog7JuQ7ZiVIOq3uOuMgOuhnCDstpzroKVcbiAgICAgICAgbGluZXMucHVzaChgICBcIiR7ZW50cnkua2V5fVwiOiAke2VudHJ5LnZhbHVlfSxgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgXCIke2VudHJ5LmtleX1cIjogJHtKU09OLnN0cmluZ2lmeShlbnRyeS52YWx1ZSl9LGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0RlZmF1bHRMb2NhbGUpIHtcbiAgICAgIGxpbmVzLnB1c2goXCJ9IGFzIGNvbnN0O1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZXMucHVzaChcIn0pO1wiKTtcbiAgICB9XG4gICAgbGluZXMucHVzaChcIlwiKTtcblxuICAgIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGkxOG4g7ISk7KCV7J2EIOqwgOyguOyYteuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgZ2V0STE4bkNvbmZpZygpOiBJMThuQ29uZmlnIHtcbiAgICByZXR1cm4gU29uYW11LmNvbmZpZy5pMThuO1xuICB9XG5cbiAgLyoqXG4gICAqIGkxOG4g65SU66CJ7Yag66asIOqyveuhnOulvCDrsJjtmZjtlZjqs6AsIOyXhuycvOuptCDsg53shLHtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGVuc3VyZUkxOG5EaXIoKTogc3RyaW5nIHtcbiAgICBjb25zdCBpMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJpMThuXCIpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhpMThuRGlyKSkge1xuICAgICAgZnMubWtkaXJTeW5jKGkxOG5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaTE4bkRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBkaWN0IO2MjOydvOydhCDsoIDsnqXtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNhdmVEaWN0RmlsZShcbiAgICBsb2NhbGU6IHN0cmluZyxcbiAgICBlbnRyaWVzOiBEaWN0RW50cnlbXSxcbiAgICBpc0RlZmF1bHRMb2NhbGU6IGJvb2xlYW4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGkxOG5EaXIgPSB0aGlzLmVuc3VyZUkxOG5EaXIoKTtcbiAgICBjb25zdCBkaWN0UGF0aCA9IHBhdGguam9pbihpMThuRGlyLCBgJHtsb2NhbGV9LnRzYCk7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2VuZXJhdGVQcm9qZWN0RGljdChsb2NhbGUsIGVudHJpZXMsIGlzRGVmYXVsdExvY2FsZSk7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gYXdhaXQgZm9ybWF0Q29kZShjb250ZW50LCBkaWN0UGF0aCk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhkaWN0UGF0aCwgZm9ybWF0dGVkLCBcInV0Zi04XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGkxOG4ga2V566W8IO2MjOyLse2VmOyXrCBlbnRpdHkg6rSA66CoIOygleuztCDstpTstpxcbiAgICovXG4gIHBhcnNlRW50aXR5S2V5KGtleTogc3RyaW5nKTogRW50aXR5S2V5SW5mbyB7XG4gICAgLy8gZW50aXR5LntFbnRpdHlJZH0gKGxpc3QsIGNyZWF0ZSwgZWRpdCDsoJzsmbgpXG4gICAgY29uc3QgZW50aXR5VGl0bGVNYXRjaCA9IGtleS5tYXRjaCgvXmVudGl0eVxcLihbQS1aXVthLXpBLVowLTldKikkLyk7XG4gICAgaWYgKFxuICAgICAgZW50aXR5VGl0bGVNYXRjaCAmJlxuICAgICAgIWtleS5pbmNsdWRlcyhcIi5saXN0XCIpICYmXG4gICAgICAha2V5LmluY2x1ZGVzKFwiLmNyZWF0ZVwiKSAmJlxuICAgICAgIWtleS5pbmNsdWRlcyhcIi5lZGl0XCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcImVudGl0eVRpdGxlXCIsIGVudGl0eUlkOiBlbnRpdHlUaXRsZU1hdGNoWzFdIH07XG4gICAgfVxuXG4gICAgLy8gZW50aXR5LntFbnRpdHlJZH0ue3Byb3BOYW1lfVxuICAgIGNvbnN0IHByb3BEZXNjTWF0Y2ggPSBrZXkubWF0Y2goL15lbnRpdHlcXC4oW0EtWl1bYS16QS1aMC05XSopXFwuKFthLXpfXVthLXowLTlfXSopJC8pO1xuICAgIGlmIChwcm9wRGVzY01hdGNoKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInByb3BEZXNjXCIsIGVudGl0eUlkOiBwcm9wRGVzY01hdGNoWzFdLCBwcm9wTmFtZTogcHJvcERlc2NNYXRjaFsyXSB9O1xuICAgIH1cblxuICAgIC8vIGVudW0ue0VudW1JZH0ue3ZhbHVlfVxuICAgIGNvbnN0IGVudW1MYWJlbE1hdGNoID0ga2V5Lm1hdGNoKC9eZW51bVxcLihbQS1aXVthLXpBLVowLTldKilcXC4oLispJC8pO1xuICAgIGlmIChlbnVtTGFiZWxNYXRjaCkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJlbnVtTGFiZWxcIiwgZW51bUlkOiBlbnVtTGFiZWxNYXRjaFsxXSwgZW51bVZhbHVlOiBlbnVtTGFiZWxNYXRjaFsyXSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHR5cGU6IFwib3RoZXJcIiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIGVudGl0eSBrZXnsl5Ag64yA7ZW0IGVudGl0eS5qc29uIOyXheuNsOydtO2KuCDsiJjtlolcbiAgICogQHJldHVybnMg7JeF642w7J207Yq4IOyXrOu2gFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlRW50aXR5QnlLZXkoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBrZXlJbmZvID0gdGhpcy5wYXJzZUVudGl0eUtleShrZXkpO1xuXG4gICAgc3dpdGNoIChrZXlJbmZvLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJlbnRpdHlUaXRsZVwiOiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoa2V5SW5mby5lbnRpdHlJZCk7XG4gICAgICAgICAgaWYgKGVudGl0eS50aXRsZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIGVudGl0eS50aXRsZSA9IHZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gZW50aXR5IG5vdCBmb3VuZFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBcInByb3BEZXNjXCI6IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChrZXlJbmZvLmVudGl0eUlkKTtcbiAgICAgICAgICBjb25zdCBwcm9wSW5kZXggPSBlbnRpdHkucHJvcHMuZmluZEluZGV4KChwKSA9PiBwLm5hbWUgPT09IGtleUluZm8ucHJvcE5hbWUpO1xuICAgICAgICAgIGlmIChwcm9wSW5kZXggIT09IC0xICYmIGVudGl0eS5wcm9wc1twcm9wSW5kZXhdLmRlc2MgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICBlbnRpdHkucHJvcHNbcHJvcEluZGV4XS5kZXNjID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBlbnRpdHkgbm90IGZvdW5kXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFwiZW51bUxhYmVsXCI6IHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRpdHlJZCBvZiBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpKSB7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGlmIChlbnRpdHkuZW51bUxhYmVsc1trZXlJbmZvLmVudW1JZF0pIHtcbiAgICAgICAgICAgIGlmIChlbnRpdHkuZW51bUxhYmVsc1trZXlJbmZvLmVudW1JZF1ba2V5SW5mby5lbnVtVmFsdWVdICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICBlbnRpdHkuZW51bUxhYmVsc1trZXlJbmZvLmVudW1JZF1ba2V5SW5mby5lbnVtVmFsdWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZC5nZW5lcmF0ZWQudHPsl5DshJwgZW50aXR5IGxhYmVscyDstpTstpxcbiAgICogZW50aXR5Lmpzb27sl5DshJwg6rSA66as65CY64qUIOqwkuunjCDtj6ztlaggKC5saXN0LCAuY3JlYXRlLCAuZWRpdCDsoJzsmbgpXG4gICAqL1xuICBleHRyYWN0RW50aXR5TGFiZWxzKCk6IERpY3RFbnRyeVtdIHtcbiAgICBjb25zdCBzZFBhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcInNyY1wiLCBcImkxOG5cIiwgXCJzZC5nZW5lcmF0ZWQudHNcIik7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHNkUGF0aCkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wYXJzZUNvbnN0T2JqZWN0RGVjbGFyYXRpb24oc2RQYXRoLCBcImVudGl0eUxhYmVsc1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZC5nZW5lcmF0ZWQudHPsl5DshJwgcmMta2V5cyDstpTstpxcbiAgICogcmVhY3QtY29tcG9uZW50c+yXkOyEnCDqtIDrpqzrkJjripQgaTE4biDtgqTrk6RcbiAgICogQHBhcmFtIGxvY2FsZSAtIOuhnOy8gOydvCAoa28sIGVuIOuTsSlcbiAgICovXG4gIGV4dHJhY3RSQ0tleXMobG9jYWxlOiBzdHJpbmcpOiBEaWN0RW50cnlbXSB7XG4gICAgY29uc3Qgc2RQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJpMThuXCIsIFwic2QuZ2VuZXJhdGVkLnRzXCIpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhzZFBhdGgpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gbG9jYWxl67OEIOuzgOyImOuqhSDrp6TtlZEgKHNkLnRlbXBsYXRlLnRz7J2YIGdldFJDS2V5c1Zhck5hbWXqs7wg64+Z7J28KVxuICAgIGNvbnN0IHZhck5hbWUgPSAoKCkgPT4ge1xuICAgICAgaWYgKGxvY2FsZSA9PT0gXCJrb1wiKSByZXR1cm4gXCJyY0tleXNLb1wiO1xuICAgICAgaWYgKGxvY2FsZSA9PT0gXCJlblwiKSByZXR1cm4gXCJyY0tleXNFblwiO1xuICAgICAgLy8g64uk66W4IGxvY2FsZeydgCBlbuydhCBmYWxsYmFja+ycvOuhnCDsgqzsmqlcbiAgICAgIHJldHVybiBcInJjS2V5c0VuXCI7XG4gICAgfSkoKTtcblxuICAgIHJldHVybiB0aGlzLnBhcnNlQ29uc3RPYmplY3REZWNsYXJhdGlvbihzZFBhdGgsIHZhck5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2plY3QgZGljdCDtjIzsnbwoW2xvY2FsZV0udHMp7JeQ7IScIOuUleyFlOuEiOumrCDroZzrk5xcbiAgICovXG4gIGxvYWRQcm9qZWN0RGljdChsb2NhbGU6IHN0cmluZykge1xuICAgIGNvbnN0IGRpY3RQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJpMThuXCIsIGAke2xvY2FsZX0udHNgKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGljdFBhdGgpKSB7XG4gICAgICByZXR1cm4geyBlbnRyaWVzOiBbXSB9O1xuICAgIH1cbiAgICByZXR1cm4geyBlbnRyaWVzOiB0aGlzLnBhcnNlRGljdEZpbGUoZGljdFBhdGgpIH07XG4gIH1cblxuICAvKipcbiAgICog65SV7IWU64SI66asIOuNsOydtO2EsCDsiJjsp5EgKHNvbmFtdSArIGVudGl0eSArIHByb2plY3QpXG4gICAqL1xuICBhc3luYyBjb2xsZWN0RGljdGlvbmFyeSgpOiBQcm9taXNlPERpY3Rpb25hcnlSZXN1bHQ+IHtcbiAgICBjb25zdCB7IGRlZmF1bHRMb2NhbGUsIHN1cHBvcnRlZExvY2FsZXMgfSA9IHRoaXMuZ2V0STE4bkNvbmZpZygpO1xuICAgIGNvbnN0IGxvY2FsZXMgPSBzdXBwb3J0ZWRMb2NhbGVzO1xuXG4gICAgY29uc3Qgcm93czogRGljdGlvbmFyeVJvd1tdID0gW107XG4gICAgY29uc3Qgcm93TWFwID0gbmV3IE1hcDxzdHJpbmcsIERpY3Rpb25hcnlSb3c+KCk7XG5cbiAgICAvLyAxLiBSQyBLZXlzIChzb25hbXUgc291cmNlLCDqsIEgbG9jYWxl67OEKVxuICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICAgIGNvbnN0IHJjS2V5cyA9IHRoaXMuZXh0cmFjdFJDS2V5cyhsb2NhbGUpO1xuICAgICAgZm9yIChjb25zdCByY0tleSBvZiByY0tleXMpIHtcbiAgICAgICAgbGV0IHJvdyA9IHJvd01hcC5nZXQocmNLZXkua2V5KTtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICByb3cgPSB7XG4gICAgICAgICAgICBrZXk6IHJjS2V5LmtleSxcbiAgICAgICAgICAgIHNvdXJjZTogXCJzb25hbXVcIixcbiAgICAgICAgICAgIGlzRnVuY3Rpb246IHJjS2V5LmlzRnVuY3Rpb24gPz8gZmFsc2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByb3dNYXAuc2V0KHJjS2V5LmtleSwgcm93KTtcbiAgICAgICAgfVxuICAgICAgICByb3dbbG9jYWxlXSA9IHJjS2V5LnZhbHVlO1xuICAgICAgICBpZiAocmNLZXkuaXNGdW5jdGlvbikge1xuICAgICAgICAgIHJvdy5pc0Z1bmN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuIEVudGl0eSBsYWJlbHMgKGRlZmF1bHQgbG9jYWxlIOq4sOykgClcbiAgICBjb25zdCBlbnRpdHlMYWJlbHMgPSB0aGlzLmV4dHJhY3RFbnRpdHlMYWJlbHMoKTtcbiAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIGVudGl0eUxhYmVscykge1xuICAgICAgY29uc3Qgcm93OiBEaWN0aW9uYXJ5Um93ID0ge1xuICAgICAgICBrZXk6IGxhYmVsLmtleSxcbiAgICAgICAgc291cmNlOiBcImVudGl0eVwiLFxuICAgICAgICBpc0Z1bmN0aW9uOiBsYWJlbC5pc0Z1bmN0aW9uID8/IGZhbHNlLFxuICAgICAgICBbZGVmYXVsdExvY2FsZV06IGxhYmVsLnZhbHVlLFxuICAgICAgfTtcbiAgICAgIHJvd01hcC5zZXQobGFiZWwua2V5LCByb3cpO1xuICAgIH1cblxuICAgIC8vIDMuIFByb2plY3QgZGljdCAo6rCBIGxvY2FsZeuzhClcbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBsb2NhbGVzKSB7XG4gICAgICBjb25zdCB7IGVudHJpZXMgfSA9IHRoaXMubG9hZFByb2plY3REaWN0KGxvY2FsZSk7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSByb3dNYXAuZ2V0KGVudHJ5LmtleSk7XG4gICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgIC8vIHNvbmFtdSwgZW50aXR5IHNvdXJjZeqwgCDsnojsnLzrqbQg7ZW064u5IGxvY2FsZSDqsJLrp4wg7LaU6rCAXG4gICAgICAgICAgZXhpc3RpbmdbbG9jYWxlXSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgIGlmIChlbnRyeS5pc0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICBleGlzdGluZy5pc0Z1bmN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcHJvamVjdCBzb3VyY2XroZwg7IOI66GcIOy2lOqwgFxuICAgICAgICAgIGxldCByb3cgPSByb3dNYXAuZ2V0KGVudHJ5LmtleSk7XG4gICAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJvdyA9IHtcbiAgICAgICAgICAgICAga2V5OiBlbnRyeS5rZXksXG4gICAgICAgICAgICAgIHNvdXJjZTogXCJwcm9qZWN0XCIsXG4gICAgICAgICAgICAgIGlzRnVuY3Rpb246IGVudHJ5LmlzRnVuY3Rpb24sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcm93TWFwLnNldChlbnRyeS5rZXksIHJvdyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJvd1tsb2NhbGVdID0gZW50cnkudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByb3dzLnB1c2goLi4ucm93TWFwLnZhbHVlcygpKTtcbiAgICByb3dzLnNvcnQoKGEsIGIpID0+IGEua2V5LmxvY2FsZUNvbXBhcmUoYi5rZXkpKTtcblxuICAgIC8vIO2GteqzhCDqs4TsgrA6IGxvY2FsZeuzhCAo7LGE7JuM7KeEIOqwkiAvIOyghOyytCDtgqQg7IiYKVxuICAgIGNvbnN0IHN0YXRzOiBSZWNvcmQ8c3RyaW5nLCB7IHRvdGFsOiBudW1iZXI7IGZpbGxlZDogbnVtYmVyOyBwZXJjZW50OiBudW1iZXIgfT4gPSB7fTtcbiAgICBjb25zdCB0b3RhbCA9IHJvd3MubGVuZ3RoO1xuICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICAgIGNvbnN0IGZpbGxlZCA9IHJvd3MuZmlsdGVyKChyb3cpID0+ICEhcm93W2xvY2FsZV0pLmxlbmd0aDtcbiAgICAgIGNvbnN0IHBlcmNlbnQgPSB0b3RhbCA+IDAgPyBNYXRoLnJvdW5kKChmaWxsZWQgLyB0b3RhbCkgKiAxMDApIDogMDtcbiAgICAgIHN0YXRzW2xvY2FsZV0gPSB7IHRvdGFsLCBmaWxsZWQsIHBlcmNlbnQgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyByb3dzLCBsb2NhbGVzLCBkZWZhdWx0TG9jYWxlLCBzdGF0cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOuUleyFlOuEiOumrCDsobDtmoxcbiAgICovXG4gIGFzeW5jIGdldERpY3Rpb25hcnkoKTogUHJvbWlzZTxEaWN0aW9uYXJ5UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdERpY3Rpb25hcnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNlbOuhnCDrgrTrs7TrgrTquLBcbiAgICovXG4gIGFzeW5jIGV4cG9ydFRvRXhjZWwoKTogUHJvbWlzZTx7IGZpbGVuYW1lOiBzdHJpbmc7IGJ1ZmZlcjogQnVmZmVyIH0+IHtcbiAgICBjb25zdCB7IHJvd3MsIGxvY2FsZXMgfSA9IGF3YWl0IHRoaXMuY29sbGVjdERpY3Rpb25hcnkoKTtcblxuICAgIGNvbnN0IHdiID0gbmV3IFdvcmtib29rKCk7XG4gICAgY29uc3Qgc2hlZXQgPSBcImkxOG5cIjtcbiAgICB3Yi5zZXRTaGVldE5hbWUoXCJTaGVldDFcIiwgc2hlZXQpO1xuXG4gICAgY29uc3QgcHJvamVjdE5hbWUgPSBgJHtTb25hbXUuY29uZmlnLnByb2plY3ROYW1lID8/IFwiU29uYW11XCJ9IERpY3Rpb25hcnlgO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBbXCJrZXlcIiwgXCJzb3VyY2VcIiwgLi4ubG9jYWxlc107XG5cbiAgICAvLyDsiqTtg4Dsnbwg7KCV7J2YXG4gICAgY29uc3QgdGl0bGVTdHlsZUlkID0gd2IuYWRkU3R5bGUoe1xuICAgICAgZm9udDogeyBzaXplOiAyMyB9LFxuICAgICAgYWxpZ25tZW50OiB7IHZlcnRpY2FsOiBcImNlbnRlclwiLCBob3Jpem9udGFsOiBcImxlZnRcIiB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGhlYWRlclN0eWxlSWQgPSB3Yi5hZGRTdHlsZSh7XG4gICAgICBmb250OiB7IGJvbGQ6IHRydWUsIHNpemU6IDExIH0sXG4gICAgICBhbGlnbm1lbnQ6IHsgaG9yaXpvbnRhbDogXCJjZW50ZXJcIiwgdmVydGljYWw6IFwiY2VudGVyXCIgfSxcbiAgICAgIGZpbGw6IHsgcGF0dGVybjogXCJzb2xpZFwiLCBmZ0NvbG9yOiBcIkYxRjFGMVwiIH0sXG4gICAgICBib3JkZXI6IHtcbiAgICAgICAgdG9wOiB7IHN0eWxlOiBcInRoaW5cIiwgY29sb3I6IFwiRDBEMEQwXCIgfSxcbiAgICAgICAgbGVmdDogeyBzdHlsZTogXCJ0aGluXCIsIGNvbG9yOiBcIkQwRDBEMFwiIH0sXG4gICAgICAgIGJvdHRvbTogeyBzdHlsZTogXCJ0aGluXCIsIGNvbG9yOiBcIkQwRDBEMFwiIH0sXG4gICAgICAgIHJpZ2h0OiB7IHN0eWxlOiBcInRoaW5cIiwgY29sb3I6IFwiRDBEMEQwXCIgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YVN0eWxlSWQgPSB3Yi5hZGRTdHlsZSh7XG4gICAgICBmb250OiB7IHNpemU6IDExIH0sXG4gICAgICBhbGlnbm1lbnQ6IHsgdmVydGljYWw6IFwiY2VudGVyXCIsIGhvcml6b250YWw6IFwibGVmdFwiIH0sXG4gICAgfSk7XG5cbiAgICAvLyDtlokgMTog7ZSE66Gc7KCd7Yq466qFXG4gICAgd2Iuc2V0Q2VsbFZhbHVlKHNoZWV0LCBcIkExXCIsIHByb2plY3ROYW1lKTtcbiAgICB3Yi5zZXRDZWxsU3R5bGUoc2hlZXQsIFwiQTFcIiwgdGl0bGVTdHlsZUlkKTtcbiAgICB3Yi5zZXRSb3dIZWlnaHQoc2hlZXQsIDEsIDI4KTtcblxuICAgIC8vIO2WiSAyOiDruYgg7ZaJICjquLDrs7jqsJIpXG5cbiAgICAvLyDtlokgMzog7Zek642UXG4gICAgd2Iuc2V0Um93VmFsdWVzKHNoZWV0LCAzLCBcIkFcIiwgaGVhZGVycyk7XG4gICAgd2Iuc2V0Um93SGVpZ2h0KHNoZWV0LCAzLCAyNik7XG4gICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgaGVhZGVycy5sZW5ndGg7IGNvbCsrKSB7XG4gICAgICB3Yi5zZXRDZWxsU3R5bGUoc2hlZXQsIGAke2NvbExldHRlcihjb2wpfTNgLCBoZWFkZXJTdHlsZUlkKTtcbiAgICB9XG5cbiAgICAvLyDtlokgNCDsnbTtm4Q6IOuNsOydtO2EsFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgcm93ID0gcm93c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IFtyb3cua2V5LCByb3cuc291cmNlLCAuLi5sb2NhbGVzLm1hcCgobG9jYWxlKSA9PiByb3dbbG9jYWxlXSA/PyBcIlwiKV07XG4gICAgICBjb25zdCByb3dOdW0gPSBpICsgNDtcbiAgICAgIHdiLnNldFJvd1ZhbHVlcyhzaGVldCwgcm93TnVtLCBcIkFcIiwgdmFsdWVzKTtcbiAgICAgIHdiLnNldFJvd0hlaWdodChzaGVldCwgcm93TnVtLCAyNCk7XG4gICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCB2YWx1ZXMubGVuZ3RoOyBjb2wrKykge1xuICAgICAgICB3Yi5zZXRDZWxsU3R5bGUoc2hlZXQsIGAke2NvbExldHRlcihjb2wpfSR7cm93TnVtfWAsIGRhdGFTdHlsZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDsu6zrn7wg64SI67mEIOqzhOyCsFxuICAgIGNvbnN0IE1BWF9XSURUSCA9IDUwO1xuICAgIGNvbnN0IE1JTl9XSURUSCA9IDEwO1xuICAgIGNvbnN0IGNvbHVtbldpZHRoczogbnVtYmVyW10gPSBoZWFkZXJzLm1hcCgoaGVhZGVyKSA9PiBNYXRoLm1heChoZWFkZXIubGVuZ3RoLCBNSU5fV0lEVEgpKTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IFtyb3cua2V5LCByb3cuc291cmNlLCAuLi5sb2NhbGVzLm1hcCgobG9jYWxlKSA9PiByb3dbbG9jYWxlXSA/PyBcIlwiKV07XG4gICAgICB2YWx1ZXMuZm9yRWFjaCgodmFsdWUsIGlkeCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gU3RyaW5nKHZhbHVlKS5sZW5ndGg7XG4gICAgICAgIGNvbHVtbldpZHRoc1tpZHhdID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uV2lkdGhzW2lkeF0sIHRleHRMZW5ndGgpLCBNQVhfV0lEVEgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8g7Lus65+8IOuEiOu5hCDsoIHsmqlcbiAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBjb2x1bW5XaWR0aHMubGVuZ3RoOyBjb2wrKykge1xuICAgICAgd2Iuc2V0Q29sV2lkdGgoc2hlZXQsIGNvbExldHRlcihjb2wpLCBjb2x1bW5XaWR0aHNbY29sXSArIDIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmaWxlbmFtZTogYCR7cHJvamVjdE5hbWV9LSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXX0ueGxzeGAsXG4gICAgICBidWZmZXI6IHdiLndyaXRlQnVmZmVyU3luYygpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRXhjZWzsl5DshJwg6rCA7KC47Jik6riwXG4gICAqXG4gICAqIO2YleyLnTpcbiAgICogLSAx7ZaJOiDtlITroZzsoJ3tirjrqoVcbiAgICogLSAy7ZaJOiDruYgg7ZaJXG4gICAqIC0gM+2WiTog7Zek642UIChrZXksIHNvdXJjZSwgbG9jYWxlcy4uLilcbiAgICogLSA07ZaJIOydtO2bhDog642w7J207YSwXG4gICAqL1xuICBhc3luYyBpbXBvcnRGcm9tRXhjZWwoYnVmZmVyOiBCdWZmZXIpOiBQcm9taXNlPEltcG9ydFJlc3VsdD4ge1xuICAgIGNvbnN0IHdiID0gV29ya2Jvb2sub3BlbkJ1ZmZlclN5bmMoYnVmZmVyKTtcbiAgICBjb25zdCBzaGVldCA9IHdiLnNoZWV0TmFtZXNbMF07XG4gICAgY29uc3QgYWxsUm93cyA9IHdiLmdldFJvd3Moc2hlZXQpO1xuXG4gICAgY29uc3QgeyBkZWZhdWx0TG9jYWxlLCBzdXBwb3J0ZWRMb2NhbGVzIH0gPSB0aGlzLmdldEkxOG5Db25maWcoKTtcbiAgICBjb25zdCBsb2NhbGVzID0gc3VwcG9ydGVkTG9jYWxlcztcblxuICAgIGxldCB1cGRhdGVkRW50aXRpZXMgPSAwO1xuICAgIGxldCB1cGRhdGVkTG9jYWxlcyA9IDA7XG5cbiAgICAvLyBsb2NhbGXrs4QgcHJvamVjdCBkaWN0IGVudHJpZXNcbiAgICBjb25zdCBwcm9qZWN0RGljdEVudHJpZXM6IFJlY29yZDxzdHJpbmcsIERpY3RFbnRyeVtdPiA9IHt9O1xuICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICAgIHByb2plY3REaWN0RW50cmllc1tsb2NhbGVdID0gW107XG4gICAgfVxuXG4gICAgLy8g7Zek642UIO2WiSDssL7quLA6IOyyqyDrsojsp7gg7Lus65+8KEEp7J20IFwia2V5XCLsnbgg7ZaJXG4gICAgbGV0IGhlYWRlclJvd051bSA9IDA7XG4gICAgZm9yIChjb25zdCByb3dEYXRhIG9mIGFsbFJvd3MpIHtcbiAgICAgIGNvbnN0IGZpcnN0Q2VsbCA9IHJvd0RhdGEuY2VsbHMuZmluZCgoYykgPT4gYy5jb2x1bW4gPT09IFwiQVwiKTtcbiAgICAgIGNvbnN0IGZpcnN0Q2VsbFZhbHVlID0gU3RyaW5nKGZpcnN0Q2VsbD8udmFsdWUgPz8gXCJcIilcbiAgICAgICAgLnRyaW0oKVxuICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChmaXJzdENlbGxWYWx1ZSA9PT0gXCJrZXlcIikge1xuICAgICAgICBoZWFkZXJSb3dOdW0gPSByb3dEYXRhLnJvdztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhlYWRlclJvd051bSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuaGVhZGVyUm93Tm90Rm91bmRcIikpO1xuICAgIH1cblxuICAgIC8vIO2XpOuNlCDtlonsl5DshJwg7Lus65+8IOunpO2VkSDqtazshLFcbiAgICBjb25zdCBoZWFkZXJSb3dEYXRhID0gYWxsUm93cy5maW5kKChyKSA9PiByLnJvdyA9PT0gaGVhZGVyUm93TnVtKTtcbiAgICBjb25zdCBjb2xUb0hlYWRlcjogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgICBpZiAoaGVhZGVyUm93RGF0YSkge1xuICAgICAgZm9yIChjb25zdCBjZWxsIG9mIGhlYWRlclJvd0RhdGEuY2VsbHMpIHtcbiAgICAgICAgY29sVG9IZWFkZXIuc2V0KGNlbGwuY29sdW1uLCBTdHJpbmcoY2VsbC52YWx1ZSA/PyBcIlwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g642w7J207YSwIO2WiSDsnb3quLAgKO2XpOuNlCDri6TsnYwg7ZaJ67aA7YSwKVxuICAgIGZvciAoY29uc3Qgcm93RGF0YSBvZiBhbGxSb3dzKSB7XG4gICAgICBpZiAocm93RGF0YS5yb3cgPD0gaGVhZGVyUm93TnVtKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qgcm93VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGNlbGwgb2Ygcm93RGF0YS5jZWxscykge1xuICAgICAgICBjb25zdCBoZWFkZXJOYW1lID0gY29sVG9IZWFkZXIuZ2V0KGNlbGwuY29sdW1uKTtcbiAgICAgICAgaWYgKGhlYWRlck5hbWUpIHtcbiAgICAgICAgICByb3dWYWx1ZXNbaGVhZGVyTmFtZV0gPSBTdHJpbmcoY2VsbC52YWx1ZSA/PyBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSByb3dWYWx1ZXMua2V5O1xuICAgICAgY29uc3Qgc291cmNlID1cbiAgICAgICAgLyogU0FGRVRZOiDrj5nquLDtmZTrkJwg7IKs7KCEIO2CpOyZgCDqsJIg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcm93VmFsdWVzLnNvdXJjZSBhc1xuICAgICAgICAgIHwgXCJlbnRpdHlcIlxuICAgICAgICAgIHwgXCJwcm9qZWN0XCI7XG5cbiAgICAgIGlmICgha2V5IHx8ICFzb3VyY2UpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAoc291cmNlID09PSBcImVudGl0eVwiKSB7XG4gICAgICAgIC8vIGVudGl0eSBzb3VyY2U6IGRlZmF1bHQgbG9jYWxl66eMIGVudGl0eS5qc29u7JeQIOyggOyepVxuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSByb3dWYWx1ZXNbZGVmYXVsdExvY2FsZV07XG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdGhpcy51cGRhdGVFbnRpdHlCeUtleShrZXksIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgaWYgKHVwZGF0ZWQpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRFbnRpdGllcysrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vbi1kZWZhdWx0IGxvY2FsZeydgCBwcm9qZWN0IGRpY3Tsl5Ag7KCA7J6lXG4gICAgICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICAgICAgICBpZiAobG9jYWxlID09PSBkZWZhdWx0TG9jYWxlKSBjb250aW51ZTtcbiAgICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSByb3dWYWx1ZXNbbG9jYWxlXT8udHJpbSgpO1xuICAgICAgICAgIGlmIChjZWxsVmFsdWUpIHtcbiAgICAgICAgICAgIHByb2plY3REaWN0RW50cmllc1tsb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIHZhbHVlOiBjZWxsVmFsdWUsXG4gICAgICAgICAgICAgIGlzRnVuY3Rpb246IHRoaXMuaXNFeHByZXNzaW9uRnVuY3Rpb24oY2VsbFZhbHVlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb3VyY2UgPT09IFwicHJvamVjdFwiKSB7XG4gICAgICAgIC8vIHByb2plY3Qgc291cmNlOiDrqqjrk6AgbG9jYWxl7J2EIHByb2plY3QgZGljdOyXkCDsoIDsnqVcbiAgICAgICAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgICAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IHJvd1ZhbHVlc1tsb2NhbGVdPy50cmltKCk7XG4gICAgICAgICAgaWYgKGNlbGxWYWx1ZSkge1xuICAgICAgICAgICAgcHJvamVjdERpY3RFbnRyaWVzW2xvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgdmFsdWU6IGNlbGxWYWx1ZSxcbiAgICAgICAgICAgICAgaXNGdW5jdGlvbjogdGhpcy5pc0V4cHJlc3Npb25GdW5jdGlvbihjZWxsVmFsdWUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJvamVjdCBkaWN0IO2MjOydvCDsg53shLFcbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBsb2NhbGVzKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gcHJvamVjdERpY3RFbnRyaWVzW2xvY2FsZV07XG4gICAgICBpZiAoZW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZURpY3RGaWxlKGxvY2FsZSwgZW50cmllcywgbG9jYWxlID09PSBkZWZhdWx0TG9jYWxlKTtcbiAgICAgICAgdXBkYXRlZExvY2FsZXMrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIHVwZGF0ZWRFbnRpdGllcyxcbiAgICAgIHVwZGF0ZWRMb2NhbGVzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog65SV7IWU64SI66asIO2VreuqqSDsiJjsoJVcbiAgICovXG4gIGFzeW5jIHVwZGF0ZUVudHJ5KHBhcmFtczoge1xuICAgIG9sZEtleTogc3RyaW5nO1xuICAgIG5ld0tleTogc3RyaW5nO1xuICAgIHNvdXJjZTogXCJlbnRpdHlcIiB8IFwicHJvamVjdFwiIHwgXCJzb25hbXVcIjtcbiAgICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IG9sZEtleSwgbmV3S2V5LCBzb3VyY2UsIHZhbHVlcyB9ID0gcGFyYW1zO1xuXG4gICAgY29uc3QgeyBkZWZhdWx0TG9jYWxlLCBzdXBwb3J0ZWRMb2NhbGVzIH0gPSB0aGlzLmdldEkxOG5Db25maWcoKTtcbiAgICBjb25zdCBsb2NhbGVzID0gc3VwcG9ydGVkTG9jYWxlcztcblxuICAgIC8vIGVudGl0eSBzb3VyY2XsnZggZGVmYXVsdCBsb2NhbGUg7LKY66asXG4gICAgaWYgKHNvdXJjZSA9PT0gXCJlbnRpdHlcIiAmJiB2YWx1ZXNbZGVmYXVsdExvY2FsZV0pIHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlRW50aXR5QnlLZXkobmV3S2V5LCB2YWx1ZXNbZGVmYXVsdExvY2FsZV0pO1xuICAgIH1cblxuICAgIC8vIHByb2plY3QgZGljdCDsl4XrjbDsnbTtirhcbiAgICAvLyAtIGVudGl0eeydmCBub24tZGVmYXVsdCBsb2NhbGVcbiAgICAvLyAtIHByb2plY3Qgc291cmNl7J2YIOuqqOuToCBsb2NhbGVcbiAgICAvLyAtIHNvbmFtdSBzb3VyY2XsnZgg66qo65OgIGxvY2FsZSAob3ZlcnJpZGUpXG4gICAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgICAgLy8gZW50aXR5IHNvdXJjZeydmCBkZWZhdWx0IGxvY2FsZeydgCBlbnRpdHkuanNvbuyXkOyEnCDsspjrpqztlojsnLzrr4DroZwg7Iqk7YK1XG4gICAgICBpZiAoc291cmNlID09PSBcImVudGl0eVwiICYmIGxvY2FsZSA9PT0gZGVmYXVsdExvY2FsZSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IHZhbHVlc1tsb2NhbGVdPy50cmltKCk7XG4gICAgICBpZiAoIWNlbGxWYWx1ZSkgY29udGludWU7XG5cbiAgICAgIC8vIOq4sOyhtCBkaWN0IOuhnOuTnFxuICAgICAgY29uc3QgeyBlbnRyaWVzIH0gPSB0aGlzLmxvYWRQcm9qZWN0RGljdChsb2NhbGUpO1xuXG4gICAgICAvLyBrZXkg67OA6rK9IOyLnCDquLDsobQga2V5IOygnOqxsFxuICAgICAgaWYgKG9sZEtleSAhPT0gbmV3S2V5KSB7XG4gICAgICAgIGNvbnN0IG9sZEluZGV4ID0gZW50cmllcy5maW5kSW5kZXgoKGUpID0+IGUua2V5ID09PSBvbGRLZXkpO1xuICAgICAgICBpZiAob2xkSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgZW50cmllcy5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIOyDiCDqsJIg7JeF642w7J207Yq4IOuYkOuKlCDstpTqsIBcbiAgICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBlbnRyaWVzLmZpbmRJbmRleCgoZSkgPT4gZS5rZXkgPT09IG5ld0tleSk7XG4gICAgICBjb25zdCBuZXdFbnRyeTogRGljdEVudHJ5ID0ge1xuICAgICAgICBrZXk6IG5ld0tleSxcbiAgICAgICAgdmFsdWU6IGNlbGxWYWx1ZSxcbiAgICAgICAgaXNGdW5jdGlvbjogdGhpcy5pc0V4cHJlc3Npb25GdW5jdGlvbihjZWxsVmFsdWUpLFxuICAgICAgfTtcblxuICAgICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGVudHJpZXNbZXhpc3RpbmdJbmRleF0gPSBuZXdFbnRyeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudHJpZXMucHVzaChuZXdFbnRyeSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGRpY3Qg7YyM7J28IOyggOyepVxuICAgICAgYXdhaXQgdGhpcy5zYXZlRGljdEZpbGUobG9jYWxlLCBlbnRyaWVzLCBsb2NhbGUgPT09IGRlZmF1bHRMb2NhbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDrlJXshZTrhIjrpqwg7ZWt66qpIOy2lOqwgFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlRW50cnkocGFyYW1zOiB7IGtleTogc3RyaW5nOyB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsga2V5LCB2YWx1ZXMgfSA9IHBhcmFtcztcblxuICAgIGlmICgha2V5Py50cmltKCkpIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLmtleVJlcXVpcmVkXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRlZmF1bHRMb2NhbGUsIHN1cHBvcnRlZExvY2FsZXMgfSA9IHRoaXMuZ2V0STE4bkNvbmZpZygpO1xuICAgIGNvbnN0IGxvY2FsZXMgPSBzdXBwb3J0ZWRMb2NhbGVzO1xuXG4gICAgLy8g7KSR67O1IO2CpCDssrTtgaxcbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBsb2NhbGVzKSB7XG4gICAgICBjb25zdCB7IGVudHJpZXMgfSA9IHRoaXMubG9hZFByb2plY3REaWN0KGxvY2FsZSk7XG4gICAgICBpZiAoZW50cmllcy5zb21lKChlKSA9PiBlLmtleSA9PT0ga2V5KSkge1xuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5rZXlBbHJlYWR5RXhpc3RzXCIpKGtleSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOqwgSBsb2NhbGXsl5Ag7IOIIO2CpCDstpTqsIBcbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBsb2NhbGVzKSB7XG4gICAgICBjb25zdCBjZWxsVmFsdWUgPSB2YWx1ZXNbbG9jYWxlXT8udHJpbSgpO1xuICAgICAgaWYgKCFjZWxsVmFsdWUpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCB7IGVudHJpZXMgfSA9IHRoaXMubG9hZFByb2plY3REaWN0KGxvY2FsZSk7XG4gICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiBjZWxsVmFsdWUsXG4gICAgICAgIGlzRnVuY3Rpb246IHRoaXMuaXNFeHByZXNzaW9uRnVuY3Rpb24oY2VsbFZhbHVlKSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0aGlzLnNhdmVEaWN0RmlsZShsb2NhbGUsIGVudHJpZXMsIGxvY2FsZSA9PT0gZGVmYXVsdExvY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOuUleyFlOuEiOumrCDtla3rqqkg7IKt7KCcXG4gICAqL1xuICBhc3luYyBkZWxldGVFbnRyeShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICgha2V5KSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5rZXlSZXF1aXJlZFwiKSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBkZWZhdWx0TG9jYWxlLCBzdXBwb3J0ZWRMb2NhbGVzIH0gPSB0aGlzLmdldEkxOG5Db25maWcoKTtcbiAgICBjb25zdCBsb2NhbGVzID0gc3VwcG9ydGVkTG9jYWxlcztcblxuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgICAgY29uc3QgeyBlbnRyaWVzIH0gPSB0aGlzLmxvYWRQcm9qZWN0RGljdChsb2NhbGUpO1xuICAgICAgY29uc3QgaW5kZXggPSBlbnRyaWVzLmZpbmRJbmRleCgoZSkgPT4gZS5rZXkgPT09IGtleSk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGljdEZpbGUobG9jYWxlLCBlbnRyaWVzLCBsb2NhbGUgPT09IGRlZmF1bHRMb2NhbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZGVsZXRlZCkge1xuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3Iua2V5Tm90Rm91bmRcIikoa2V5KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOuvuOyCrOyaqSDtgqQg6rKA7IKsIChhc3QtZ3JlcCDsgqzsmqkpXG4gICAqL1xuICBhc3luYyBjaGVja1VzYWdlKGtleXM6IHN0cmluZ1tdKTogUHJvbWlzZTxVc2FnZVJlc3VsdD4ge1xuICAgIC8vIGFzdC1ncmVwIOyEpOy5mCDtmZXsnbhcbiAgICBsZXQgc2dQYXRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgc2dQYXRoID0gZXhlY1N5bmMoXCJ3aGljaCBzZ1wiLCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSkudHJpbSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2dQYXRoID0gZXhlY1N5bmMoXCJ3aGljaCBhc3QtZ3JlcFwiLCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSkudHJpbSgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGFzdC1ncmVwIG5vdCBpbnN0YWxsZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXNnUGF0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3I6XG4gICAgICAgICAgXCJhc3QtZ3JlcOydtCDshKTsuZjrkJjslrQg7J6I7KeAIOyViuyKteuLiOuLpC4gYnJldyBpbnN0YWxsIGFzdC1ncmVwIOuYkOuKlCBucG0gaW5zdGFsbCAtZyBAYXN0LWdyZXAvY2xp66GcIOyEpOy5mO2VtOyjvOyEuOyalC5cIixcbiAgICAgICAgdW51c2VkS2V5czogW10sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgW1wiYXBpXCIsIFwid2ViXCIsIFwiYXBwXCJdKSB7XG4gICAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgZW50cnksIFwic3JjXCIpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc3JjUGF0aCkpIHtcbiAgICAgICAgc2VhcmNoUGF0aHMucHVzaChzcmNQYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoUGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogXCLqsoDsg4ntlaAgc3JjIOuUlOugie2GoOumrOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpC5cIixcbiAgICAgICAgdW51c2VkS2V5czogW10sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHVzZWRLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gYXN0LWdyZXDsnLzroZwgU0QoXCIuLi5cIikg7Yyo7YS0IOqygOyDiVxuICAgICAgLy8g7Yyo7YS0OiBTRChcIktFWVwiKSDrmJDripQgU0QoJ0tFWScpIO2Yle2DnFxuICAgICAgY29uc3QgcGF0dGVybnMgPSBbJ1NEKFwiJEtFWVwiKScsIFwiU0QoJyRLRVknKVwiXTtcblxuICAgICAgZm9yIChjb25zdCBzZWFyY2hQYXRoIG9mIHNlYXJjaFBhdGhzKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBleGVjU3luYyhgJHtzZ1BhdGh9IC0tcGF0dGVybiAnJHtwYXR0ZXJufScgLS1qc29uICR7c2VhcmNoUGF0aH1gLCB7XG4gICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgICAgIG1heEJ1ZmZlcjogNTAgKiAxMDI0ICogMTAyNCwgLy8gNTBNQlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQudHJpbSgpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBKU09OLnBhcnNlKHJlc3VsdCk7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIC8vIG1ldGFWYXJpYWJsZXMuc2luZ2xlLktFWS50ZXh07JeQ7IScIO2CpCDstpTstpxcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlUZXh0ID0gbWF0Y2gubWV0YVZhcmlhYmxlcz8uc2luZ2xlPy5LRVk/LnRleHQ7XG4gICAgICAgICAgICAgICAgaWYgKGtleVRleHQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIOuUsOyYtO2RnCDsoJzqsbBcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFuS2V5ID0ga2V5VGV4dC5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgdXNlZEtleXMuYWRkKGNsZWFuS2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIO2MqO2EtCDrp6TsuZgg7JeG7Jy866m0IOyXkOufrCAo66y07IucKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBrZXlzIOykkeyXkOyEnCB1c2VkS2V5c+yXkCDsl4bripQg6rKD65Ok7J20IOuvuOyCrOyaqSDtgqRcbiAgICAgIGNvbnN0IHVudXNlZEtleXMgPSBrZXlzLmZpbHRlcigoaykgPT4gIXVzZWRLZXlzLmhhcyhrKSk7XG5cbiAgICAgIHJldHVybiB7IHVudXNlZEtleXMsIHVzZWRLZXlzQ291bnQ6IHVzZWRLZXlzLnNpemUgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogYOqygOyDiSDspJEg7Jik66WYIOuwnOyDnTogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCxcbiAgICAgICAgdW51c2VkS2V5czogW10sXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc29uYW11RGljdGlvbmFyeSA9IG5ldyBTb25hbXVEaWN0aW9uYXJ5KCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQXlCQSxTQUFTLFVBQVUsT0FBdUI7Q0FDeEMsSUFBSSxTQUFTO0NBQ2IsSUFBSSxJQUFJO0NBQ1IsT0FBTyxLQUFLLEdBQUc7RUFDYixTQUFTLE9BQU8sYUFBYSxLQUFNLElBQUksRUFBRyxJQUFJO0VBQzlDLElBQUksS0FBSyxNQUFNLElBQUksRUFBRSxJQUFJO0NBQzNCO0NBQ0EsT0FBTztBQUNUOzs7Q0ExQnNDLFlBQUE7Q0FDUyxxQkFBQTtDQUNTLG9CQUFBO0NBQ1MsbUJBQUE7Q0FDeEMsUUFBQTtDQTRCWixtQkFBYixNQUE4Qjs7Ozs7Ozs7OztFQVU1QixjQUFjLFVBQStCO0dBQzNDLE1BQU0sVUFBVSxHQUFHLGFBQWEsVUFBVSxPQUFPO0dBQ2pELE1BQU0sYUFBYSxHQUFHLGlCQUFpQixVQUFVLFNBQVMsR0FBRyxhQUFhLFFBQVEsSUFBSTtHQUV0RixNQUFNLFVBQXVCLENBQUM7R0FFOUIsR0FBRyxhQUFhLGFBQWEsU0FBUztJQUNwQyxJQUFJLEdBQUcsbUJBQW1CLElBQUksR0FBRztLQUMvQixNQUFNLGdCQUFnQixLQUFLLHNCQUFzQixLQUFLLFVBQVU7S0FDaEUsSUFBSSxlQUNGLEtBQUsseUJBQXlCLGVBQWUsWUFBWSxPQUFPO0lBRXBFO0dBQ0YsQ0FBQztHQUVELE9BQU87RUFDVDs7Ozs7RUFNQSw0QkFBNEIsVUFBa0IsU0FBOEI7R0FDMUUsTUFBTSxVQUFVLEdBQUcsYUFBYSxVQUFVLE9BQU87R0FDakQsTUFBTSxhQUFhLEdBQUcsaUJBQWlCLFVBQVUs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
|
|
765
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYW11LWRpY3Rpb25hcnkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpY3Qvc29uYW11LWRpY3Rpb25hcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgdHlwZSBKc1Jvd0NlbGwsIFdvcmtib29rIH0gZnJvbSBcIkBzaGVldGtpdC9ub2RlXCI7XG5pbXBvcnQgdHMgZnJvbSBcIkB0eXBlc2NyaXB0L3R5cGVzY3JpcHQ2XCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBmb3JtYXRDb2RlIH0gZnJvbSBcIi4uL2NvZGUtZm9ybWF0dGluZ1wiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEJhZFJlcXVlc3RFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBpc1N0cmluZ1ZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcbmltcG9ydCB7IFNEIH0gZnJvbSBcIi4vc2RcIjtcbmltcG9ydCB7XG4gIHR5cGUgRGljdEVudHJ5LFxuICB0eXBlIERpY3Rpb25hcnlSZXN1bHQsXG4gIHR5cGUgRGljdGlvbmFyeVJvdyxcbiAgdHlwZSBFbnRpdHlLZXlJbmZvLFxuICB0eXBlIEkxOG5Db25maWcsXG4gIHR5cGUgSW1wb3J0UmVzdWx0LFxuICB0eXBlIFVzYWdlUmVzdWx0LFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIDAtYmFzZWQg7Lus65+8IOyduOuNseyKpOulvCDsl5HshYAg7Lus65+8IOusuOyekOuhnCDrs4DtmZggKDAgLT4gXCJBXCIsIDI1IC0+IFwiWlwiLCAyNiAtPiBcIkFBXCIpXG4gKi9cbmZ1bmN0aW9uIGNvbExldHRlcihpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gIGxldCBuID0gaW5kZXg7XG4gIHdoaWxlIChuID49IDApIHtcbiAgICByZXN1bHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDY1ICsgKG4gJSAyNikpICsgcmVzdWx0O1xuICAgIG4gPSBNYXRoLmZsb29yKG4gLyAyNikgLSAxO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXhjZWwg7ZaJIOyFgOydhCDsgqzsoIQg6rCSIOusuOyekOyXtOuhnCDsnb3sirXri4jri6QuXG4gKlxuICogU2hlZXRLaXQgMC41LjHqs7wg6rCZ7J2AIOqysOqzvOulvCDsnKDsp4Dtlanri4jri6QuXG4gKiAtIOusuOyekOyXtCDshYDsnYAg6re4IOqwkuydhCDqt7jrjIDroZwg7JSB64uI64ukLlxuICogLSDsiJjsi50g7IWA7J2AIOy6kOyLnOuQnCDqsrDqs7zqsIAg7JWE64uI6528IOyImOyLnSDthY3siqTtirjrpbwg7JSB64uI64ukLiBTaGVldEtpdCAxLjAuMeydgCDsiJjsi50g7YWN7Iqk7Yq466W8XG4gKiAgIGB2YWx1ZWDsmYAgYGZvcm11bGFgIOqwneyytOyXkCDtlajqu5gg7KO866mwLCBgdmFsdWVg6rCAIOyXhuydhCDrlYzripQgYGZvcm11bGFgIOqwneyytOydmCDthY3siqTtirjrpbwg7JSB64uI64ukLlxuICogLSDsiKvsnpDCt+uCoOynnMK367aI66as7Ja4IOyFgOydgCDruYgg66y47J6Q7Je066GcIOuRoeuLiOuLpC4g6rCd7LK0IOqwkuydhCDrrLjsnpDsl7TroZwg67CU6r6466m0XG4gKiAgIFwiW29iamVjdCBPYmplY3RdXCIg6rCZ7J2AIOqwkuydtCDsgqzsoITsl5Ag65Ok7Ja06rCA66+A66GcIOuzgO2ZmO2VmOyngCDslYrsirXri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHJlYWRDZWxsVGV4dChjZWxsOiBKc1Jvd0NlbGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBpZiAoY2VsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgaWYgKGlzU3RyaW5nVmFsdWUoY2VsbC52YWx1ZSkpIHtcbiAgICByZXR1cm4gY2VsbC52YWx1ZTtcbiAgfVxuICBpZiAoY2VsbC52YWx1ZVR5cGUgPT09IFwiZm9ybXVsYVwiICYmIGNlbGwuZm9ybXVsYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNlbGwuZm9ybXVsYS5mb3JtdWxhO1xuICB9XG4gIHJldHVybiBcIlwiO1xufVxuXG4vKipcbiAqIFNvbmFtdSBEaWN0aW9uYXJ5IOq0gOumrCDtgbTrnpjsiqRcbiAqIGkxOG4g65SV7IWU64SI66as7J2YIENSVUQg67CPIEV4Y2VsIGltcG9ydC9leHBvcnTrpbwg64u064u57ZWp64uI64ukLlxuICovXG5leHBvcnQgY2xhc3MgU29uYW11RGljdGlvbmFyeSB7XG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IENvbXBpbGVyIEFQSeulvCDsgqzsmqntlZjsl6wgZGljdCDtjIzsnbwg7YyM7IuxXG4gICAqXG4gICAqIOyngOybkCDtjKjthLQ6XG4gICAqIC0gZXhwb3J0IGRlZmF1bHQgeyAuLi4gfSBhcyBjb25zdDtcbiAgICogLSBleHBvcnQgZGVmYXVsdCBkZWZpbmVMb2NhbGUoeyAuLi4gfSk7XG4gICAqIC0g66y47J6Q7Je0IOqwkjogXCJrZXlcIjogXCJ2YWx1ZVwiIOuYkOuKlCBrZXk6IGB2YWx1ZWBcbiAgICogLSDtlajsiJgg6rCSOiBcImtleVwiOiAocGFyYW06IFR5cGUpID0+IGB0ZW1wbGF0ZWBcbiAgICovXG4gIHBhcnNlRGljdEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IERpY3RFbnRyeVtdIHtcbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCBcInV0Zi04XCIpO1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKGZpbGVQYXRoLCBjb250ZW50LCB0cy5TY3JpcHRUYXJnZXQuTGF0ZXN0LCB0cnVlKTtcblxuICAgIGNvbnN0IGVudHJpZXM6IERpY3RFbnRyeVtdID0gW107XG5cbiAgICB0cy5mb3JFYWNoQ2hpbGQoc291cmNlRmlsZSwgKG5vZGUpID0+IHtcbiAgICAgIGlmICh0cy5pc0V4cG9ydEFzc2lnbm1lbnQobm9kZSkpIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0TGl0ZXJhbCA9IHRoaXMudW53cmFwVG9PYmplY3RMaXRlcmFsKG5vZGUuZXhwcmVzc2lvbik7XG4gICAgICAgIGlmIChvYmplY3RMaXRlcmFsKSB7XG4gICAgICAgICAgdGhpcy5leHRyYWN0RW50cmllc0Zyb21PYmplY3Qob2JqZWN0TGl0ZXJhbCwgc291cmNlRmlsZSwgZW50cmllcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbnRyaWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIO2MjOydvOyXkOyEnCDtirnsoJUg7J2066aE7J2YIGNvbnN0IOyEoOyWuOydhCDssL7slYQgT2JqZWN0TGl0ZXJhbCDtjIzsi7FcbiAgICog7JiIOiBjb25zdCBlbnRpdHlMYWJlbHMgPSB7IC4uLiB9IGFzIGNvbnN0O1xuICAgKi9cbiAgcGFyc2VDb25zdE9iamVjdERlY2xhcmF0aW9uKGZpbGVQYXRoOiBzdHJpbmcsIHZhck5hbWU6IHN0cmluZyk6IERpY3RFbnRyeVtdIHtcbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCBcInV0Zi04XCIpO1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKGZpbGVQYXRoLCBjb250ZW50LCB0cy5TY3JpcHRUYXJnZXQuTGF0ZXN0LCB0cnVlKTtcblxuICAgIGNvbnN0IGVudHJpZXM6IERpY3RFbnRyeVtdID0gW107XG5cbiAgICB0cy5mb3JFYWNoQ2hpbGQoc291cmNlRmlsZSwgKG5vZGUpID0+IHtcbiAgICAgIGlmICh0cy5pc1ZhcmlhYmxlU3RhdGVtZW50KG5vZGUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZGVjbCBvZiBub2RlLmRlY2xhcmF0aW9uTGlzdC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBpZiAodHMuaXNJZGVudGlmaWVyKGRlY2wubmFtZSkgJiYgZGVjbC5uYW1lLnRleHQgPT09IHZhck5hbWUgJiYgZGVjbC5pbml0aWFsaXplcikge1xuICAgICAgICAgICAgY29uc3Qgb2JqZWN0TGl0ZXJhbCA9IHRoaXMudW53cmFwVG9PYmplY3RMaXRlcmFsKGRlY2wuaW5pdGlhbGl6ZXIpO1xuICAgICAgICAgICAgaWYgKG9iamVjdExpdGVyYWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5leHRyYWN0RW50cmllc0Zyb21PYmplY3Qob2JqZWN0TGl0ZXJhbCwgc291cmNlRmlsZSwgZW50cmllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW50cmllcztcbiAgfVxuXG4gIC8qKlxuICAgKiDrrLjsnpDsl7TsnbQg7ZmU7IK07ZGcIO2VqOyImCDrmJDripQg7ZWo7IiYIO2RnO2YhOyLneyduOyngCDtjJDrs4RcbiAgICovXG4gIGlzRXhwcmVzc2lvbkZ1bmN0aW9uKGNvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIOu5iCDrrLjsnpDsl7TsnbTrgpgg6rO167Cx66eMIOyeiOuKlCDqsr3smrBcbiAgICBpZiAoIWNvZGUudHJpbSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgQVJST1dfRlVOQ1RJT05fUEFUVEVSTiA9IC9eXFxzKlxcKFteKV0qXFwpXFxzKj0+LztcblxuICAgIHJldHVybiBBUlJPV19GVU5DVElPTl9QQVRURVJOLnRlc3QoY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogZXhwb3J0IGRlZmF1bHQg7ZGc7ZiE7Iud7JeQ7IScIE9iamVjdExpdGVyYWxFeHByZXNzaW9uIOy2lOy2nFxuICAgKiAtIGFzIGNvbnN0IOyymOumrFxuICAgKiAtIGRlZmluZUxvY2FsZSh7IC4uLiB9KSDtmLjstpwg7LKY66asXG4gICAqL1xuICBwcml2YXRlIHVud3JhcFRvT2JqZWN0TGl0ZXJhbChleHByOiB0cy5FeHByZXNzaW9uKTogdHMuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24gfCBudWxsIHtcbiAgICAvLyBhcyBjb25zdCDsspjrpqxcbiAgICBpZiAodHMuaXNBc0V4cHJlc3Npb24oZXhwcikpIHtcbiAgICAgIHJldHVybiB0aGlzLnVud3JhcFRvT2JqZWN0TGl0ZXJhbChleHByLmV4cHJlc3Npb24pO1xuICAgIH1cbiAgICAvLyDsp4HsoJEg6rCd7LK0IOumrO2EsOuftFxuICAgIGlmICh0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKGV4cHIpKSB7XG4gICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG4gICAgLy8gZGVmaW5lTG9jYWxlKHsgLi4uIH0pIO2YuOy2nFxuICAgIGlmICh0cy5pc0NhbGxFeHByZXNzaW9uKGV4cHIpKSB7XG4gICAgICBjb25zdCBmaXJzdEFyZyA9IGV4cHIuYXJndW1lbnRzWzBdO1xuICAgICAgaWYgKGZpcnN0QXJnICYmIHRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24oZmlyc3RBcmcpKSB7XG4gICAgICAgIHJldHVybiBmaXJzdEFyZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb27sl5DshJwgRGljdEVudHJ5IOy2lOy2nFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0RW50cmllc0Zyb21PYmplY3QoXG4gICAgb2JqZWN0TGl0ZXJhbDogdHMuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24sXG4gICAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSxcbiAgICBlbnRyaWVzOiBEaWN0RW50cnlbXSxcbiAgKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIG9iamVjdExpdGVyYWwucHJvcGVydGllcykge1xuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmV4dHJhY3REaWN0RW50cnkocHJvcCwgc291cmNlRmlsZSk7XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvcGVydHlOYW1l7JeQ7IScIO2CpCDrrLjsnpDsl7Qg7LaU7LacXG4gICAqIC0g66y47J6Q7Je0IOumrO2EsOuftDogXCJrZXlcIlxuICAgKiAtIOyLneuzhOyekDoga2V5ICh1bnF1b3RlZClcbiAgICovXG4gIHByaXZhdGUgZ2V0UHJvcGVydHlLZXkobmFtZTogdHMuUHJvcGVydHlOYW1lKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRzLmlzU3RyaW5nTGl0ZXJhbChuYW1lKSkge1xuICAgICAgcmV0dXJuIG5hbWUudGV4dDtcbiAgICB9XG4gICAgaWYgKHRzLmlzSWRlbnRpZmllcihuYW1lKSkge1xuICAgICAgcmV0dXJuIG5hbWUudGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICog7ZSE66Gc7Y287Yuw7JeQ7IScIERpY3RFbnRyeSDstpTstpxcbiAgICogLSDrrLjsnpDsl7Q6IOyLpOygnCDrrLjsnpDsl7Qg6rCSXG4gICAqIC0g7ZWo7IiYOiDsm5Drs7gg7IaM7IqkICjsl6zrn6wg7KSE7J2AIO2VnCDspITroZwg7KCV6rec7ZmUKVxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0RGljdEVudHJ5KFxuICAgIHByb3A6IHRzLk9iamVjdExpdGVyYWxFbGVtZW50TGlrZSxcbiAgICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuICApOiBEaWN0RW50cnkgfCBudWxsIHtcbiAgICBpZiAoIXRzLmlzUHJvcGVydHlBc3NpZ25tZW50KHByb3ApKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFByb3BlcnR5S2V5KHByb3AubmFtZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgaW5pdCA9IHByb3AuaW5pdGlhbGl6ZXI7XG5cbiAgICAvLyDtmZTsgrTtkZwg7ZWo7IiYXG4gICAgaWYgKHRzLmlzQXJyb3dGdW5jdGlvbihpbml0KSkge1xuICAgICAgY29uc3QgZnVuY1RleHQgPSBpbml0LmdldFRleHQoc291cmNlRmlsZSk7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZnVuY1RleHQucmVwbGFjZSgvXFxzKlxcblxccyovZywgXCIgXCIpLnRyaW0oKTtcbiAgICAgIHJldHVybiB7IGtleSwgdmFsdWU6IG5vcm1hbGl6ZWQsIGlzRnVuY3Rpb246IHRydWUgfTtcbiAgICB9XG5cbiAgICAvLyDrrLjsnpDsl7Qg66as7YSw65+0XG4gICAgaWYgKHRzLmlzU3RyaW5nTGl0ZXJhbChpbml0KSkge1xuICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogaW5pdC50ZXh0LCBpc0Z1bmN0aW9uOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIC8vIO2FnO2UjOumvyDrpqzthLDrn7QgKOuzgOyImCDsl4bsnYwpXG4gICAgaWYgKHRzLmlzTm9TdWJzdGl0dXRpb25UZW1wbGF0ZUxpdGVyYWwoaW5pdCkpIHtcbiAgICAgIHJldHVybiB7IGtleSwgdmFsdWU6IGluaXQudGV4dCwgaXNGdW5jdGlvbjogZmFsc2UgfTtcbiAgICB9XG5cbiAgICAvLyDquLDtg4AgKOyYiDog7ZWo7IiYIO2RnO2YhOyLnSlcbiAgICByZXR1cm4ge1xuICAgICAga2V5LFxuICAgICAgdmFsdWU6IGluaXQuZ2V0VGV4dChzb3VyY2VGaWxlKSxcbiAgICAgIGlzRnVuY3Rpb246IHRzLmlzRnVuY3Rpb25FeHByZXNzaW9uKGluaXQpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog7ZSE66Gc7KCd7Yq47J2YIGkxOG4gZGljdCDtjIzsnbwg6rK966Gc66W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgICogQHBhcmFtIGxvY2FsZSAtIOuhnOy8gOydvCAoa28sIGVuIOuTsSlcbiAgICogQHBhcmFtIHRhcmdldCAtIO2DgOqynyDrlJTroInthqDrpqwgKGFwaSwgd2ViLCBhcHApXG4gICAqL1xuICBnZXRQcm9qZWN0RGljdFBhdGgobG9jYWxlOiBzdHJpbmcsIHRhcmdldDogXCJhcGlcIiB8IFwid2ViXCIgfCBcImFwcFwiID0gXCJhcGlcIik6IHN0cmluZyB7XG4gICAgY29uc3QgZGlyID0gdGFyZ2V0ID09PSBcImFwaVwiID8gU29uYW11LmNvbmZpZy5hcGkuZGlyIDogdGFyZ2V0O1xuICAgIHJldHVybiBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCBkaXIsIFwic3JjXCIsIFwiaTE4blwiLCBgJHtsb2NhbGV9LnRzYCk7XG4gIH1cblxuICAvKipcbiAgICogc29uYW11IOuCtOyepSBkaWN0IO2MjOydvCDqsr3roZzrpbwg67CY7ZmY7ZWp64uI64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTb25hbXVEaWN0UGF0aChsb2NhbGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFja2FnZVJvb3QgPSBwYXRoLnJlc29sdmUoaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIpO1xuICAgIHJldHVybiBwYXRoLmpvaW4ocGFja2FnZVJvb3QsIFwic3JjXCIsIFwiZGljdFwiLCBgJHtsb2NhbGV9LnRzYCk7XG4gIH1cblxuICAvKipcbiAgICog7ZWE7JqU7ZWcIGRpY3Qg7YKk6rCAIO2UhOuhnOygne2KuOyXkCDsobTsnqztlZjripTsp4Ag7ZmV7J247ZWY6rOgLCDsl4bsnLzrqbQg7LaU6rCA7ZWp64uI64ukLlxuICAgKiBkZWZhdWx0TG9jYWxl7JeQ66eMIOy2lOqwgO2VmOupsCwg64uk66W4IGxvY2FsZeydgCDsgqzsmqnsnpDqsIAg7KeB7KCRIOuyiOyXre2VtOyVvCDtlanri4jri6QuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1aXJlZEtleXMgLSDtlYTsmpTtlZwg7YKkIOuqqeuhnVxuICAgKiBAcGFyYW0gdGFyZ2V0IC0g7YOA6rKfIOuUlOugie2GoOumrCAoYXBpLCB3ZWIsIGFwcClcbiAgICogQHJldHVybnMg7LaU6rCA65CcIO2CpCDrqqnroZ1cbiAgICovXG4gIGFzeW5jIGVuc3VyZURpY3RLZXlzKFxuICAgIHJlcXVpcmVkS2V5czogc3RyaW5nW10sXG4gICAgdGFyZ2V0OiBcImFwaVwiIHwgXCJ3ZWJcIiB8IFwiYXBwXCIgPSBcImFwaVwiLFxuICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgeyBkZWZhdWx0TG9jYWxlIH0gPSBTb25hbXUuY29uZmlnLmkxOG47XG4gICAgY29uc3QgcHJvamVjdERpY3RQYXRoID0gdGhpcy5nZXRQcm9qZWN0RGljdFBhdGgoZGVmYXVsdExvY2FsZSwgdGFyZ2V0KTtcblxuICAgIC8vIO2UhOuhnOygne2KuCBkaWN0IO2MjOydvOydtCDsl4bsnLzrqbQg7JWE66y06rKD64+EIO2VmOyngCDslYrsnYxcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocHJvamVjdERpY3RQYXRoKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIO2UhOuhnOygne2KuCBkaWN07JeQ7IScIOq4sOyhtCDtgqQg7YyM7IuxXG4gICAgY29uc3QgcHJvamVjdEVudHJpZXMgPSB0aGlzLnBhcnNlRGljdEZpbGUocHJvamVjdERpY3RQYXRoKTtcbiAgICBjb25zdCBleGlzdGluZ0tleXMgPSBuZXcgU2V0KHByb2plY3RFbnRyaWVzLm1hcCgoZSkgPT4gZS5rZXkpKTtcblxuICAgIC8vIOuIhOudveuQnCDtgqQg7LC+6riwXG4gICAgY29uc3QgbWlzc2luZ0tleXMgPSByZXF1aXJlZEtleXMuZmlsdGVyKChrZXkpID0+ICFleGlzdGluZ0tleXMuaGFzKGtleSkpO1xuXG4gICAgaWYgKG1pc3NpbmdLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIHNvbmFtdSBkaWN07JeQ7IScIOq4sOuzuOqwkiDqsIDsoLjsmKTquLBcbiAgICBjb25zdCBzb25hbXVEaWN0UGF0aCA9IHRoaXMuZ2V0U29uYW11RGljdFBhdGgoZGVmYXVsdExvY2FsZSk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHNvbmFtdURpY3RQYXRoKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHNvbmFtdUVudHJpZXMgPSB0aGlzLnBhcnNlRGljdEZpbGUoc29uYW11RGljdFBhdGgpO1xuICAgIGNvbnN0IHNvbmFtdURpY3QgPSBuZXcgTWFwKHNvbmFtdUVudHJpZXMubWFwKChlKSA9PiBbZS5rZXksIGVdKSk7XG5cbiAgICAvLyDstpTqsIDtlaAg7JeU7Yq466asIOyDneyEsVxuICAgIGNvbnN0IGVudHJpZXNUb0FkZCA9IG1pc3NpbmdLZXlzXG4gICAgICAubWFwKChrZXkpID0+IHNvbmFtdURpY3QuZ2V0KGtleSkpXG4gICAgICAuZmlsdGVyKChlbnRyeSk6IGVudHJ5IGlzIE5vbk51bGxhYmxlPHR5cGVvZiBlbnRyeT4gPT4gZW50cnkgIT09IHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoZW50cmllc1RvQWRkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIO2UhOuhnOygne2KuCBkaWN0IO2MjOydvOyXkCDstpTqsIBcbiAgICBhd2FpdCB0aGlzLmFwcGVuZEVudHJpZXNUb0RpY3RGaWxlKHByb2plY3REaWN0UGF0aCwgZW50cmllc1RvQWRkLCBkZWZhdWx0TG9jYWxlLCB0cnVlKTtcblxuICAgIHJldHVybiBlbnRyaWVzVG9BZGQubWFwKChlKSA9PiBlLmtleSk7XG4gIH1cblxuICAvKipcbiAgICogZGljdCDtjIzsnbzsl5Ag7JeU7Yq466as66W8IOy2lOqwgO2VqeuLiOuLpC5cbiAgICog6riw7KG0IO2MjOydvOydhCDtjIzsi7HtlZjqs6AsIOyDiCDsl5Ttirjrpqzrpbwg7LaU6rCA7ZWcIOuSpCwg7KCE7LK0IO2MjOydvOydhCDsnqzsg53shLHtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFwcGVuZEVudHJpZXNUb0RpY3RGaWxlKFxuICAgIGZpbGVQYXRoOiBzdHJpbmcsXG4gICAgZW50cmllczogRGljdEVudHJ5W10sXG4gICAgbG9jYWxlOiBzdHJpbmcsXG4gICAgaXNEZWZhdWx0TG9jYWxlOiBib29sZWFuLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyDquLDsobQgZW50cmllcyDtjIzsi7FcbiAgICBjb25zdCBleGlzdGluZ0VudHJpZXMgPSB0aGlzLnBhcnNlRGljdEZpbGUoZmlsZVBhdGgpO1xuXG4gICAgLy8g7IOIIGVudHJpZXMg7LaU6rCAXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBleGlzdGluZ0VudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgLy8g7YyM7J28IOyerOyDneyEsVxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdlbmVyYXRlUHJvamVjdERpY3QobG9jYWxlLCBleGlzdGluZ0VudHJpZXMsIGlzRGVmYXVsdExvY2FsZSk7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gYXdhaXQgZm9ybWF0Q29kZShjb250ZW50LCBmaWxlUGF0aCk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZm9ybWF0dGVkLCBcInV0Zi04XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VqOyImCDqsJLrk6Tsl5DshJwg7IKs7Jqp65CY64qUIO2XrO2NvCDtlajsiJjrpbwg6rCQ7KeA7ZWp64uI64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlY3RVc2VkSGVscGVycyhlbnRyaWVzOiBEaWN0RW50cnlbXSkge1xuICAgIGNvbnN0IGZ1bmN0aW9uRW50cmllcyA9IGVudHJpZXMuZmlsdGVyKChlKSA9PiBlLmlzRnVuY3Rpb24pO1xuICAgIGNvbnN0IGhlbHBlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGhlbHBlciBvZiBbXCJwbHVyYWxcIiwgXCJqb3NhXCJdKSB7XG4gICAgICAvLyDtlajsiJjrqoXsnbQg64uo7Ja0IOqyveqzhOuhnCDsgqzsmqnrkJjripTsp4Ag7ZmV7J24ICjsmIg6IHBsdXJhbCgg65iQ64qUIHBsdXJhbCwpXG4gICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgXFxcXGIke2hlbHBlcn1cXFxccypcXFxcKGApO1xuICAgICAgaWYgKGZ1bmN0aW9uRW50cmllcy5zb21lKChlKSA9PiBwYXR0ZXJuLnRlc3QoZS52YWx1ZSkpKSB7XG4gICAgICAgIGhlbHBlcnMucHVzaChoZWxwZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZvcm1hdCDsgqzsmqkg7Jes67aAIOuzhOuPhCDqsJDsp4AgKGZvcm1hdC5udW1iZXIoLi4uKSwgZm9ybWF0LmRhdGUoLi4uKSDrk7EpXG4gICAgY29uc3QgZm9ybWF0UGF0dGVybiA9IC9cXGJmb3JtYXRcXC5cXHcrXFxzKlxcKC87XG4gICAgY29uc3QgdXNlc0Zvcm1hdCA9IGZ1bmN0aW9uRW50cmllcy5zb21lKChlKSA9PiBmb3JtYXRQYXR0ZXJuLnRlc3QoZS52YWx1ZSkpO1xuXG4gICAgcmV0dXJuIHsgaGVscGVycywgdXNlc0Zvcm1hdCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2plY3QgZGljdCDtjIzsnbwg7IOd7ISxXG4gICAqL1xuICBnZW5lcmF0ZVByb2plY3REaWN0KGxvY2FsZTogc3RyaW5nLCBlbnRyaWVzOiBEaWN0RW50cnlbXSwgaXNEZWZhdWx0TG9jYWxlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAvLyBrZXkg7JWM7YyM67KzIOyInCDsoJXroKxcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uZW50cmllc10udG9Tb3J0ZWQoKGEsIGIpID0+IGEua2V5LmxvY2FsZUNvbXBhcmUoYi5rZXkpKTtcblxuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8g7ZWo7IiYIOqwkuyXkOyEnCDsgqzsmqnrkJjripQg7Zes7Y28IO2VqOyImCDqsJDsp4BcbiAgICBjb25zdCB7IGhlbHBlcnMsIHVzZXNGb3JtYXQgfSA9IHRoaXMuZGV0ZWN0VXNlZEhlbHBlcnMoZW50cmllcyk7XG5cbiAgICAvLyDtl6ztjbwg7ZWo7IiYIGltcG9ydCDstpTqsIBcbiAgICBjb25zdCBpbXBvcnRzID0gWy4uLmhlbHBlcnNdO1xuICAgIGlmICh1c2VzRm9ybWF0KSB7XG4gICAgICBpbXBvcnRzLnB1c2goXCJjcmVhdGVGb3JtYXRcIik7XG4gICAgfVxuICAgIGlmIChpbXBvcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxpbmVzLnB1c2goYGltcG9ydCB7ICR7aW1wb3J0cy5qb2luKFwiLCBcIil9IH0gZnJvbSBcInNvbmFtdS9kaWN0XCI7YCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0RlZmF1bHRMb2NhbGUpIHtcbiAgICAgIGxpbmVzLnB1c2goJ2ltcG9ydCB7IGRlZmluZUxvY2FsZSB9IGZyb20gXCIuL3NkLmdlbmVyYXRlZFwiOycpO1xuICAgIH1cblxuICAgIGlmIChpbXBvcnRzLmxlbmd0aCA+IDAgfHwgIWlzRGVmYXVsdExvY2FsZSkge1xuICAgICAgbGluZXMucHVzaChcIlwiKTtcbiAgICB9XG5cbiAgICAvLyBmb3JtYXQg7IKs7JqpIOyLnCBjcmVhdGVGb3JtYXQg7Zi47LacIOy2lOqwgFxuICAgIGlmICh1c2VzRm9ybWF0KSB7XG4gICAgICBsaW5lcy5wdXNoKGBjb25zdCBmb3JtYXQgPSBjcmVhdGVGb3JtYXQoXCIke2xvY2FsZX1cIik7YCk7XG4gICAgICBsaW5lcy5wdXNoKFwiXCIpO1xuICAgIH1cblxuICAgIGxpbmVzLnB1c2goXCIvKipcIik7XG4gICAgbGluZXMucHVzaChgICogUHJvamVjdCAke2xvY2FsZS50b1VwcGVyQ2FzZSgpfSBEaWN0aW9uYXJ5YCk7XG4gICAgbGluZXMucHVzaChcIiAqL1wiKTtcblxuICAgIGlmIChpc0RlZmF1bHRMb2NhbGUpIHtcbiAgICAgIGxpbmVzLnB1c2goXCJleHBvcnQgZGVmYXVsdCB7XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lcy5wdXNoKFwiZXhwb3J0IGRlZmF1bHQgZGVmaW5lTG9jYWxlKHtcIik7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBzb3J0ZWQpIHtcbiAgICAgIGlmIChlbnRyeS5pc0Z1bmN0aW9uKSB7XG4gICAgICAgIC8vIO2VqOyImOyduCDqsr3smrA6IOybkO2YlSDqt7jrjIDroZwg7Lac66ClXG4gICAgICAgIGxpbmVzLnB1c2goYCAgXCIke2VudHJ5LmtleX1cIjogJHtlbnRyeS52YWx1ZX0sYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaW5lcy5wdXNoKGAgIFwiJHtlbnRyeS5rZXl9XCI6ICR7SlNPTi5zdHJpbmdpZnkoZW50cnkudmFsdWUpfSxgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNEZWZhdWx0TG9jYWxlKSB7XG4gICAgICBsaW5lcy5wdXNoKFwifSBhcyBjb25zdDtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goXCJ9KTtcIik7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goXCJcIik7XG5cbiAgICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpMThuIOyEpOygleydhCDqsIDsoLjsmLXri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGdldEkxOG5Db25maWcoKTogSTE4bkNvbmZpZyB7XG4gICAgcmV0dXJuIFNvbmFtdS5jb25maWcuaTE4bjtcbiAgfVxuXG4gIC8qKlxuICAgKiBpMThuIOuUlOugie2GoOumrCDqsr3roZzrpbwg67CY7ZmY7ZWY6rOgLCDsl4bsnLzrqbQg7IOd7ISx7ZWp64uI64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBlbnN1cmVJMThuRGlyKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaTE4bkRpciA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIsIFwiaTE4blwiKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoaTE4bkRpcikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhpMThuRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGkxOG5EaXI7XG4gIH1cblxuICAvKipcbiAgICogZGljdCDtjIzsnbzsnYQg7KCA7J6l7ZWp64uI64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzYXZlRGljdEZpbGUoXG4gICAgbG9jYWxlOiBzdHJpbmcsXG4gICAgZW50cmllczogRGljdEVudHJ5W10sXG4gICAgaXNEZWZhdWx0TG9jYWxlOiBib29sZWFuLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpMThuRGlyID0gdGhpcy5lbnN1cmVJMThuRGlyKCk7XG4gICAgY29uc3QgZGljdFBhdGggPSBwYXRoLmpvaW4oaTE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdlbmVyYXRlUHJvamVjdERpY3QobG9jYWxlLCBlbnRyaWVzLCBpc0RlZmF1bHRMb2NhbGUpO1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGF3YWl0IGZvcm1hdENvZGUoY29udGVudCwgZGljdFBhdGgpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoZGljdFBhdGgsIGZvcm1hdHRlZCwgXCJ1dGYtOFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpMThuIGtleeulvCDtjIzsi7HtlZjsl6wgZW50aXR5IOq0gOugqCDsoJXrs7Qg7LaU7LacXG4gICAqL1xuICBwYXJzZUVudGl0eUtleShrZXk6IHN0cmluZyk6IEVudGl0eUtleUluZm8ge1xuICAgIC8vIGVudGl0eS57RW50aXR5SWR9IChsaXN0LCBjcmVhdGUsIGVkaXQg7KCc7Jm4KVxuICAgIGNvbnN0IGVudGl0eVRpdGxlTWF0Y2ggPSBrZXkubWF0Y2goL15lbnRpdHlcXC4oW0EtWl1bYS16QS1aMC05XSopJC8pO1xuICAgIGlmIChcbiAgICAgIGVudGl0eVRpdGxlTWF0Y2ggJiZcbiAgICAgICFrZXkuaW5jbHVkZXMoXCIubGlzdFwiKSAmJlxuICAgICAgIWtleS5pbmNsdWRlcyhcIi5jcmVhdGVcIikgJiZcbiAgICAgICFrZXkuaW5jbHVkZXMoXCIuZWRpdFwiKVxuICAgICkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJlbnRpdHlUaXRsZVwiLCBlbnRpdHlJZDogZW50aXR5VGl0bGVNYXRjaFsxXSB9O1xuICAgIH1cblxuICAgIC8vIGVudGl0eS57RW50aXR5SWR9Lntwcm9wTmFtZX1cbiAgICBjb25zdCBwcm9wRGVzY01hdGNoID0ga2V5Lm1hdGNoKC9eZW50aXR5XFwuKFtBLVpdW2EtekEtWjAtOV0qKVxcLihbYS16X11bYS16MC05X10qKSQvKTtcbiAgICBpZiAocHJvcERlc2NNYXRjaCkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJwcm9wRGVzY1wiLCBlbnRpdHlJZDogcHJvcERlc2NNYXRjaFsxXSwgcHJvcE5hbWU6IHByb3BEZXNjTWF0Y2hbMl0gfTtcbiAgICB9XG5cbiAgICAvLyBlbnVtLntFbnVtSWR9Lnt2YWx1ZX1cbiAgICBjb25zdCBlbnVtTGFiZWxNYXRjaCA9IGtleS5tYXRjaCgvXmVudW1cXC4oW0EtWl1bYS16QS1aMC05XSopXFwuKC4rKSQvKTtcbiAgICBpZiAoZW51bUxhYmVsTWF0Y2gpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwiZW51bUxhYmVsXCIsIGVudW1JZDogZW51bUxhYmVsTWF0Y2hbMV0sIGVudW1WYWx1ZTogZW51bUxhYmVsTWF0Y2hbMl0gfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB0eXBlOiBcIm90aGVyXCIgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnRpdHkga2V57JeQIOuMgO2VtCBlbnRpdHkuanNvbiDsl4XrjbDsnbTtirgg7IiY7ZaJXG4gICAqIEByZXR1cm5zIOyXheuNsOydtO2KuCDsl6zrtoBcbiAgICovXG4gIGFzeW5jIHVwZGF0ZUVudGl0eUJ5S2V5KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qga2V5SW5mbyA9IHRoaXMucGFyc2VFbnRpdHlLZXkoa2V5KTtcblxuICAgIHN3aXRjaCAoa2V5SW5mby50eXBlKSB7XG4gICAgICBjYXNlIFwiZW50aXR5VGl0bGVcIjoge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGtleUluZm8uZW50aXR5SWQpO1xuICAgICAgICAgIGlmIChlbnRpdHkudGl0bGUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICBlbnRpdHkudGl0bGUgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIGVudGl0eSBub3QgZm91bmRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgXCJwcm9wRGVzY1wiOiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoa2V5SW5mby5lbnRpdHlJZCk7XG4gICAgICAgICAgY29uc3QgcHJvcEluZGV4ID0gZW50aXR5LnByb3BzLmZpbmRJbmRleCgocCkgPT4gcC5uYW1lID09PSBrZXlJbmZvLnByb3BOYW1lKTtcbiAgICAgICAgICBpZiAocHJvcEluZGV4ICE9PSAtMSAmJiBlbnRpdHkucHJvcHNbcHJvcEluZGV4XS5kZXNjICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgZW50aXR5LnByb3BzW3Byb3BJbmRleF0uZGVzYyA9IHZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gZW50aXR5IG5vdCBmb3VuZFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBcImVudW1MYWJlbFwiOiB7XG4gICAgICAgIGZvciAoY29uc3QgZW50aXR5SWQgb2YgRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKSkge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBpZiAoZW50aXR5LmVudW1MYWJlbHNba2V5SW5mby5lbnVtSWRdKSB7XG4gICAgICAgICAgICBpZiAoZW50aXR5LmVudW1MYWJlbHNba2V5SW5mby5lbnVtSWRdW2tleUluZm8uZW51bVZhbHVlXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgZW50aXR5LmVudW1MYWJlbHNba2V5SW5mby5lbnVtSWRdW2tleUluZm8uZW51bVZhbHVlXSA9IHZhbHVlO1xuICAgICAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2QuZ2VuZXJhdGVkLnRz7JeQ7IScIGVudGl0eSBsYWJlbHMg7LaU7LacXG4gICAqIGVudGl0eS5qc29u7JeQ7IScIOq0gOumrOuQmOuKlCDqsJLrp4wg7Y+s7ZWoICgubGlzdCwgLmNyZWF0ZSwgLmVkaXQg7KCc7Jm4KVxuICAgKi9cbiAgZXh0cmFjdEVudGl0eUxhYmVscygpOiBEaWN0RW50cnlbXSB7XG4gICAgY29uc3Qgc2RQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJpMThuXCIsIFwic2QuZ2VuZXJhdGVkLnRzXCIpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhzZFBhdGgpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGFyc2VDb25zdE9iamVjdERlY2xhcmF0aW9uKHNkUGF0aCwgXCJlbnRpdHlMYWJlbHNcIik7XG4gIH1cblxuICAvKipcbiAgICogc2QuZ2VuZXJhdGVkLnRz7JeQ7IScIHJjLWtleXMg7LaU7LacXG4gICAqIHJlYWN0LWNvbXBvbmVudHPsl5DshJwg6rSA66as65CY64qUIGkxOG4g7YKk65OkXG4gICAqIEBwYXJhbSBsb2NhbGUgLSDroZzsvIDsnbwgKGtvLCBlbiDrk7EpXG4gICAqL1xuICBleHRyYWN0UkNLZXlzKGxvY2FsZTogc3RyaW5nKTogRGljdEVudHJ5W10ge1xuICAgIGNvbnN0IHNkUGF0aCA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIsIFwiaTE4blwiLCBcInNkLmdlbmVyYXRlZC50c1wiKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc2RQYXRoKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIGxvY2FsZeuzhCDrs4DsiJjrqoUg66ek7ZWRIChzZC50ZW1wbGF0ZS50c+ydmCBnZXRSQ0tleXNWYXJOYW1l6rO8IOuPmeydvClcbiAgICBjb25zdCB2YXJOYW1lID0gKCgpID0+IHtcbiAgICAgIGlmIChsb2NhbGUgPT09IFwia29cIikgcmV0dXJuIFwicmNLZXlzS29cIjtcbiAgICAgIGlmIChsb2NhbGUgPT09IFwiZW5cIikgcmV0dXJuIFwicmNLZXlzRW5cIjtcbiAgICAgIC8vIOuLpOuluCBsb2NhbGXsnYAgZW7snYQgZmFsbGJhY2vsnLzroZwg7IKs7JqpXG4gICAgICByZXR1cm4gXCJyY0tleXNFblwiO1xuICAgIH0pKCk7XG5cbiAgICByZXR1cm4gdGhpcy5wYXJzZUNvbnN0T2JqZWN0RGVjbGFyYXRpb24oc2RQYXRoLCB2YXJOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9qZWN0IGRpY3Qg7YyM7J28KFtsb2NhbGVdLnRzKeyXkOyEnCDrlJXshZTrhIjrpqwg66Gc65OcXG4gICAqL1xuICBsb2FkUHJvamVjdERpY3QobG9jYWxlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBkaWN0UGF0aCA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIsIFwiaTE4blwiLCBgJHtsb2NhbGV9LnRzYCk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGRpY3RQYXRoKSkge1xuICAgICAgcmV0dXJuIHsgZW50cmllczogW10gfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZW50cmllczogdGhpcy5wYXJzZURpY3RGaWxlKGRpY3RQYXRoKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOuUleyFlOuEiOumrCDrjbDsnbTthLAg7IiY7KeRIChzb25hbXUgKyBlbnRpdHkgKyBwcm9qZWN0KVxuICAgKi9cbiAgYXN5bmMgY29sbGVjdERpY3Rpb25hcnkoKTogUHJvbWlzZTxEaWN0aW9uYXJ5UmVzdWx0PiB7XG4gICAgY29uc3QgeyBkZWZhdWx0TG9jYWxlLCBzdXBwb3J0ZWRMb2NhbGVzIH0gPSB0aGlzLmdldEkxOG5Db25maWcoKTtcbiAgICBjb25zdCBsb2NhbGVzID0gc3VwcG9ydGVkTG9jYWxlcztcblxuICAgIGNvbnN0IHJvd3M6IERpY3Rpb25hcnlSb3dbXSA9IFtdO1xuICAgIGNvbnN0IHJvd01hcCA9IG5ldyBNYXA8c3RyaW5nLCBEaWN0aW9uYXJ5Um93PigpO1xuXG4gICAgLy8gMS4gUkMgS2V5cyAoc29uYW11IHNvdXJjZSwg6rCBIGxvY2FsZeuzhClcbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBsb2NhbGVzKSB7XG4gICAgICBjb25zdCByY0tleXMgPSB0aGlzLmV4dHJhY3RSQ0tleXMobG9jYWxlKTtcbiAgICAgIGZvciAoY29uc3QgcmNLZXkgb2YgcmNLZXlzKSB7XG4gICAgICAgIGxldCByb3cgPSByb3dNYXAuZ2V0KHJjS2V5LmtleSk7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgcm93ID0ge1xuICAgICAgICAgICAga2V5OiByY0tleS5rZXksXG4gICAgICAgICAgICBzb3VyY2U6IFwic29uYW11XCIsXG4gICAgICAgICAgICBpc0Z1bmN0aW9uOiByY0tleS5pc0Z1bmN0aW9uID8/IGZhbHNlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgcm93TWFwLnNldChyY0tleS5rZXksIHJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgcm93W2xvY2FsZV0gPSByY0tleS52YWx1ZTtcbiAgICAgICAgaWYgKHJjS2V5LmlzRnVuY3Rpb24pIHtcbiAgICAgICAgICByb3cuaXNGdW5jdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBFbnRpdHkgbGFiZWxzIChkZWZhdWx0IGxvY2FsZSDquLDspIApXG4gICAgY29uc3QgZW50aXR5TGFiZWxzID0gdGhpcy5leHRyYWN0RW50aXR5TGFiZWxzKCk7XG4gICAgZm9yIChjb25zdCBsYWJlbCBvZiBlbnRpdHlMYWJlbHMpIHtcbiAgICAgIGNvbnN0IHJvdzogRGljdGlvbmFyeVJvdyA9IHtcbiAgICAgICAga2V5OiBsYWJlbC5rZXksXG4gICAgICAgIHNvdXJjZTogXCJlbnRpdHlcIixcbiAgICAgICAgaXNGdW5jdGlvbjogbGFiZWwuaXNGdW5jdGlvbiA/PyBmYWxzZSxcbiAgICAgICAgW2RlZmF1bHRMb2NhbGVdOiBsYWJlbC52YWx1ZSxcbiAgICAgIH07XG4gICAgICByb3dNYXAuc2V0KGxhYmVsLmtleSwgcm93KTtcbiAgICB9XG5cbiAgICAvLyAzLiBQcm9qZWN0IGRpY3QgKOqwgSBsb2NhbGXrs4QpXG4gICAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgICAgY29uc3QgeyBlbnRyaWVzIH0gPSB0aGlzLmxvYWRQcm9qZWN0RGljdChsb2NhbGUpO1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcm93TWFwLmdldChlbnRyeS5rZXkpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAvLyBzb25hbXUsIGVudGl0eSBzb3VyY2XqsIAg7J6I7Jy866m0IO2VtOuLuSBsb2NhbGUg6rCS66eMIOy2lOqwgFxuICAgICAgICAgIGV4aXN0aW5nW2xvY2FsZV0gPSBlbnRyeS52YWx1ZTtcbiAgICAgICAgICBpZiAoZW50cnkuaXNGdW5jdGlvbikge1xuICAgICAgICAgICAgZXhpc3RpbmcuaXNGdW5jdGlvbiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHByb2plY3Qgc291cmNl66GcIOyDiOuhnCDstpTqsIBcbiAgICAgICAgICBsZXQgcm93ID0gcm93TWFwLmdldChlbnRyeS5rZXkpO1xuICAgICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByb3cgPSB7XG4gICAgICAgICAgICAgIGtleTogZW50cnkua2V5LFxuICAgICAgICAgICAgICBzb3VyY2U6IFwicHJvamVjdFwiLFxuICAgICAgICAgICAgICBpc0Z1bmN0aW9uOiBlbnRyeS5pc0Z1bmN0aW9uLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJvd01hcC5zZXQoZW50cnkua2V5LCByb3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByb3dbbG9jYWxlXSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcm93cy5wdXNoKC4uLnJvd01hcC52YWx1ZXMoKSk7XG4gICAgcm93cy5zb3J0KChhLCBiKSA9PiBhLmtleS5sb2NhbGVDb21wYXJlKGIua2V5KSk7XG5cbiAgICAvLyDthrXqs4Qg6rOE7IKwOiBsb2NhbGXrs4QgKOyxhOybjOynhCDqsJIgLyDsoITssrQg7YKkIOyImClcbiAgICBjb25zdCBzdGF0czogUmVjb3JkPHN0cmluZywgeyB0b3RhbDogbnVtYmVyOyBmaWxsZWQ6IG51bWJlcjsgcGVyY2VudDogbnVtYmVyIH0+ID0ge307XG4gICAgY29uc3QgdG90YWwgPSByb3dzLmxlbmd0aDtcbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBsb2NhbGVzKSB7XG4gICAgICBjb25zdCBmaWxsZWQgPSByb3dzLmZpbHRlcigocm93KSA9PiAhIXJvd1tsb2NhbGVdKS5sZW5ndGg7XG4gICAgICBjb25zdCBwZXJjZW50ID0gdG90YWwgPiAwID8gTWF0aC5yb3VuZCgoZmlsbGVkIC8gdG90YWwpICogMTAwKSA6IDA7XG4gICAgICBzdGF0c1tsb2NhbGVdID0geyB0b3RhbCwgZmlsbGVkLCBwZXJjZW50IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcm93cywgbG9jYWxlcywgZGVmYXVsdExvY2FsZSwgc3RhdHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrlJXshZTrhIjrpqwg7KGw7ZqMXG4gICAqL1xuICBhc3luYyBnZXREaWN0aW9uYXJ5KCk6IFByb21pc2U8RGljdGlvbmFyeVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3REaWN0aW9uYXJ5KCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjZWzroZwg64K067O064K06riwXG4gICAqL1xuICBhc3luYyBleHBvcnRUb0V4Y2VsKCk6IFByb21pc2U8eyBmaWxlbmFtZTogc3RyaW5nOyBidWZmZXI6IEJ1ZmZlciB9PiB7XG4gICAgY29uc3QgeyByb3dzLCBsb2NhbGVzIH0gPSBhd2FpdCB0aGlzLmNvbGxlY3REaWN0aW9uYXJ5KCk7XG5cbiAgICBjb25zdCB3YiA9IG5ldyBXb3JrYm9vaygpO1xuICAgIGNvbnN0IHNoZWV0ID0gXCJpMThuXCI7XG4gICAgd2Iuc2V0U2hlZXROYW1lKFwiU2hlZXQxXCIsIHNoZWV0KTtcblxuICAgIGNvbnN0IHByb2plY3ROYW1lID0gYCR7U29uYW11LmNvbmZpZy5wcm9qZWN0TmFtZSA/PyBcIlNvbmFtdVwifSBEaWN0aW9uYXJ5YDtcbiAgICBjb25zdCBoZWFkZXJzID0gW1wia2V5XCIsIFwic291cmNlXCIsIC4uLmxvY2FsZXNdO1xuXG4gICAgLy8g7Iqk7YOA7J28IOygleydmFxuICAgIGNvbnN0IHRpdGxlU3R5bGVJZCA9IHdiLmFkZFN0eWxlKHtcbiAgICAgIGZvbnQ6IHsgc2l6ZTogMjMgfSxcbiAgICAgIGFsaWdubWVudDogeyB2ZXJ0aWNhbDogXCJjZW50ZXJcIiwgaG9yaXpvbnRhbDogXCJsZWZ0XCIgfSxcbiAgICB9KTtcbiAgICBjb25zdCBoZWFkZXJTdHlsZUlkID0gd2IuYWRkU3R5bGUoe1xuICAgICAgZm9udDogeyBib2xkOiB0cnVlLCBzaXplOiAxMSB9LFxuICAgICAgYWxpZ25tZW50OiB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcImNlbnRlclwiIH0sXG4gICAgICBmaWxsOiB7IHBhdHRlcm46IFwic29saWRcIiwgZmdDb2xvcjogXCJGMUYxRjFcIiB9LFxuICAgICAgYm9yZGVyOiB7XG4gICAgICAgIHRvcDogeyBzdHlsZTogXCJ0aGluXCIsIGNvbG9yOiBcIkQwRDBEMFwiIH0sXG4gICAgICAgIGxlZnQ6IHsgc3R5bGU6IFwidGhpblwiLCBjb2xvcjogXCJEMEQwRDBcIiB9LFxuICAgICAgICBib3R0b206IHsgc3R5bGU6IFwidGhpblwiLCBjb2xvcjogXCJEMEQwRDBcIiB9LFxuICAgICAgICByaWdodDogeyBzdHlsZTogXCJ0aGluXCIsIGNvbG9yOiBcIkQwRDBEMFwiIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGFTdHlsZUlkID0gd2IuYWRkU3R5bGUoe1xuICAgICAgZm9udDogeyBzaXplOiAxMSB9LFxuICAgICAgYWxpZ25tZW50OiB7IHZlcnRpY2FsOiBcImNlbnRlclwiLCBob3Jpem9udGFsOiBcImxlZnRcIiB9LFxuICAgIH0pO1xuXG4gICAgLy8g7ZaJIDE6IO2UhOuhnOygne2KuOuqhVxuICAgIHdiLnNldENlbGxWYWx1ZShzaGVldCwgXCJBMVwiLCBwcm9qZWN0TmFtZSk7XG4gICAgd2Iuc2V0Q2VsbFN0eWxlKHNoZWV0LCBcIkExXCIsIHRpdGxlU3R5bGVJZCk7XG4gICAgd2Iuc2V0Um93SGVpZ2h0KHNoZWV0LCAxLCAyOCk7XG5cbiAgICAvLyDtlokgMjog67mIIO2WiSAo6riw67O46rCSKVxuXG4gICAgLy8g7ZaJIDM6IO2XpOuNlFxuICAgIHdiLnNldFJvd1ZhbHVlcyhzaGVldCwgMywgXCJBXCIsIGhlYWRlcnMpO1xuICAgIHdiLnNldFJvd0hlaWdodChzaGVldCwgMywgMjYpO1xuICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IGhlYWRlcnMubGVuZ3RoOyBjb2wrKykge1xuICAgICAgd2Iuc2V0Q2VsbFN0eWxlKHNoZWV0LCBgJHtjb2xMZXR0ZXIoY29sKX0zYCwgaGVhZGVyU3R5bGVJZCk7XG4gICAgfVxuXG4gICAgLy8g7ZaJIDQg7J207ZuEOiDrjbDsnbTthLBcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3NbaV07XG4gICAgICBjb25zdCB2YWx1ZXMgPSBbcm93LmtleSwgcm93LnNvdXJjZSwgLi4ubG9jYWxlcy5tYXAoKGxvY2FsZSkgPT4gcm93W2xvY2FsZV0gPz8gXCJcIildO1xuICAgICAgY29uc3Qgcm93TnVtID0gaSArIDQ7XG4gICAgICB3Yi5zZXRSb3dWYWx1ZXMoc2hlZXQsIHJvd051bSwgXCJBXCIsIHZhbHVlcyk7XG4gICAgICB3Yi5zZXRSb3dIZWlnaHQoc2hlZXQsIHJvd051bSwgMjQpO1xuICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgdmFsdWVzLmxlbmd0aDsgY29sKyspIHtcbiAgICAgICAgd2Iuc2V0Q2VsbFN0eWxlKHNoZWV0LCBgJHtjb2xMZXR0ZXIoY29sKX0ke3Jvd051bX1gLCBkYXRhU3R5bGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g7Lus65+8IOuEiOu5hCDqs4TsgrBcbiAgICBjb25zdCBNQVhfV0lEVEggPSA1MDtcbiAgICBjb25zdCBNSU5fV0lEVEggPSAxMDtcbiAgICBjb25zdCBjb2x1bW5XaWR0aHM6IG51bWJlcltdID0gaGVhZGVycy5tYXAoKGhlYWRlcikgPT4gTWF0aC5tYXgoaGVhZGVyLmxlbmd0aCwgTUlOX1dJRFRIKSk7XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBbcm93LmtleSwgcm93LnNvdXJjZSwgLi4ubG9jYWxlcy5tYXAoKGxvY2FsZSkgPT4gcm93W2xvY2FsZV0gPz8gXCJcIildO1xuICAgICAgdmFsdWVzLmZvckVhY2goKHZhbHVlLCBpZHgpID0+IHtcbiAgICAgICAgY29uc3QgdGV4dExlbmd0aCA9IFN0cmluZyh2YWx1ZSkubGVuZ3RoO1xuICAgICAgICBjb2x1bW5XaWR0aHNbaWR4XSA9IE1hdGgubWluKE1hdGgubWF4KGNvbHVtbldpZHRoc1tpZHhdLCB0ZXh0TGVuZ3RoKSwgTUFYX1dJRFRIKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIOy7rOufvCDrhIjruYQg7KCB7JqpXG4gICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgY29sdW1uV2lkdGhzLmxlbmd0aDsgY29sKyspIHtcbiAgICAgIHdiLnNldENvbFdpZHRoKHNoZWV0LCBjb2xMZXR0ZXIoY29sKSwgY29sdW1uV2lkdGhzW2NvbF0gKyAyKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmlsZW5hbWU6IGAke3Byb2plY3ROYW1lfS0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF19Lnhsc3hgLFxuICAgICAgYnVmZmVyOiB3Yi53cml0ZUJ1ZmZlclN5bmMoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2Vs7JeQ7IScIOqwgOyguOyYpOq4sFxuICAgKlxuICAgKiDtmJXsi506XG4gICAqIC0gMe2WiTog7ZSE66Gc7KCd7Yq466qFXG4gICAqIC0gMu2WiTog67mIIO2WiVxuICAgKiAtIDPtlok6IO2XpOuNlCAoa2V5LCBzb3VyY2UsIGxvY2FsZXMuLi4pXG4gICAqIC0gNO2WiSDsnbTtm4Q6IOuNsOydtO2EsFxuICAgKi9cbiAgYXN5bmMgaW1wb3J0RnJvbUV4Y2VsKGJ1ZmZlcjogQnVmZmVyKTogUHJvbWlzZTxJbXBvcnRSZXN1bHQ+IHtcbiAgICBjb25zdCB3YiA9IFdvcmtib29rLm9wZW5CdWZmZXJTeW5jKGJ1ZmZlcik7XG4gICAgY29uc3Qgc2hlZXQgPSB3Yi5zaGVldE5hbWVzWzBdO1xuICAgIGNvbnN0IGFsbFJvd3MgPSB3Yi5nZXRSb3dzKHNoZWV0KTtcblxuICAgIGNvbnN0IHsgZGVmYXVsdExvY2FsZSwgc3VwcG9ydGVkTG9jYWxlcyB9ID0gdGhpcy5nZXRJMThuQ29uZmlnKCk7XG4gICAgY29uc3QgbG9jYWxlcyA9IHN1cHBvcnRlZExvY2FsZXM7XG5cbiAgICBsZXQgdXBkYXRlZEVudGl0aWVzID0gMDtcbiAgICBsZXQgdXBkYXRlZExvY2FsZXMgPSAwO1xuXG4gICAgLy8gbG9jYWxl67OEIHByb2plY3QgZGljdCBlbnRyaWVzXG4gICAgY29uc3QgcHJvamVjdERpY3RFbnRyaWVzOiBSZWNvcmQ8c3RyaW5nLCBEaWN0RW50cnlbXT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBsb2NhbGVzKSB7XG4gICAgICBwcm9qZWN0RGljdEVudHJpZXNbbG9jYWxlXSA9IFtdO1xuICAgIH1cblxuICAgIC8vIO2XpOuNlCDtlokg7LC+6riwOiDssqsg67KI7Ke4IOy7rOufvChBKeydtCBcImtleVwi7J24IO2WiVxuICAgIGxldCBoZWFkZXJSb3dOdW0gPSAwO1xuICAgIGZvciAoY29uc3Qgcm93RGF0YSBvZiBhbGxSb3dzKSB7XG4gICAgICBjb25zdCBmaXJzdENlbGwgPSByb3dEYXRhLmNlbGxzLmZpbmQoKGMpID0+IGMuY29sdW1uID09PSBcIkFcIik7XG4gICAgICBjb25zdCBmaXJzdENlbGxWYWx1ZSA9IHJlYWRDZWxsVGV4dChmaXJzdENlbGwpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGZpcnN0Q2VsbFZhbHVlID09PSBcImtleVwiKSB7XG4gICAgICAgIGhlYWRlclJvd051bSA9IHJvd0RhdGEucm93O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyUm93TnVtID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5oZWFkZXJSb3dOb3RGb3VuZFwiKSk7XG4gICAgfVxuXG4gICAgLy8g7Zek642UIO2WieyXkOyEnCDsu6zrn7wg66ek7ZWRIOq1rOyEsVxuICAgIGNvbnN0IGhlYWRlclJvd0RhdGEgPSBhbGxSb3dzLmZpbmQoKHIpID0+IHIucm93ID09PSBoZWFkZXJSb3dOdW0pO1xuICAgIGNvbnN0IGNvbFRvSGVhZGVyOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuICAgIGlmIChoZWFkZXJSb3dEYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IGNlbGwgb2YgaGVhZGVyUm93RGF0YS5jZWxscykge1xuICAgICAgICBjb2xUb0hlYWRlci5zZXQoY2VsbC5jb2x1bW4sIHJlYWRDZWxsVGV4dChjZWxsKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g642w7J207YSwIO2WiSDsnb3quLAgKO2XpOuNlCDri6TsnYwg7ZaJ67aA7YSwKVxuICAgIGZvciAoY29uc3Qgcm93RGF0YSBvZiBhbGxSb3dzKSB7XG4gICAgICBpZiAocm93RGF0YS5yb3cgPD0gaGVhZGVyUm93TnVtKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qgcm93VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGNlbGwgb2Ygcm93RGF0YS5jZWxscykge1xuICAgICAgICBjb25zdCBoZWFkZXJOYW1lID0gY29sVG9IZWFkZXIuZ2V0KGNlbGwuY29sdW1uKTtcbiAgICAgICAgaWYgKGhlYWRlck5hbWUpIHtcbiAgICAgICAgICByb3dWYWx1ZXNbaGVhZGVyTmFtZV0gPSByZWFkQ2VsbFRleHQoY2VsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gcm93VmFsdWVzLmtleTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9XG4gICAgICAgIC8qIFNBRkVUWTog64+Z6riw7ZmU65CcIOyCrOyghCDtgqTsmYAg6rCSIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJvd1ZhbHVlcy5zb3VyY2UgYXNcbiAgICAgICAgICB8IFwiZW50aXR5XCJcbiAgICAgICAgICB8IFwicHJvamVjdFwiO1xuXG4gICAgICBpZiAoIWtleSB8fCAhc291cmNlKSBjb250aW51ZTtcblxuICAgICAgaWYgKHNvdXJjZSA9PT0gXCJlbnRpdHlcIikge1xuICAgICAgICAvLyBlbnRpdHkgc291cmNlOiBkZWZhdWx0IGxvY2FsZeunjCBlbnRpdHkuanNvbuyXkCDsoIDsnqVcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcm93VmFsdWVzW2RlZmF1bHRMb2NhbGVdO1xuICAgICAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IHRoaXMudXBkYXRlRW50aXR5QnlLZXkoa2V5LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgIGlmICh1cGRhdGVkKSB7XG4gICAgICAgICAgICB1cGRhdGVkRW50aXRpZXMrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBub24tZGVmYXVsdCBsb2NhbGXsnYAgcHJvamVjdCBkaWN07JeQIOyggOyepVxuICAgICAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBsb2NhbGVzKSB7XG4gICAgICAgICAgaWYgKGxvY2FsZSA9PT0gZGVmYXVsdExvY2FsZSkgY29udGludWU7XG4gICAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gcm93VmFsdWVzW2xvY2FsZV0/LnRyaW0oKTtcbiAgICAgICAgICBpZiAoY2VsbFZhbHVlKSB7XG4gICAgICAgICAgICBwcm9qZWN0RGljdEVudHJpZXNbbG9jYWxlXS5wdXNoKHtcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogY2VsbFZhbHVlLFxuICAgICAgICAgICAgICBpc0Z1bmN0aW9uOiB0aGlzLmlzRXhwcmVzc2lvbkZ1bmN0aW9uKGNlbGxWYWx1ZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc291cmNlID09PSBcInByb2plY3RcIikge1xuICAgICAgICAvLyBwcm9qZWN0IHNvdXJjZTog66qo65OgIGxvY2FsZeydhCBwcm9qZWN0IGRpY3Tsl5Ag7KCA7J6lXG4gICAgICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSByb3dWYWx1ZXNbbG9jYWxlXT8udHJpbSgpO1xuICAgICAgICAgIGlmIChjZWxsVmFsdWUpIHtcbiAgICAgICAgICAgIHByb2plY3REaWN0RW50cmllc1tsb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIHZhbHVlOiBjZWxsVmFsdWUsXG4gICAgICAgICAgICAgIGlzRnVuY3Rpb246IHRoaXMuaXNFeHByZXNzaW9uRnVuY3Rpb24oY2VsbFZhbHVlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2plY3QgZGljdCDtjIzsnbwg7IOd7ISxXG4gICAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgICAgY29uc3QgZW50cmllcyA9IHByb2plY3REaWN0RW50cmllc1tsb2NhbGVdO1xuICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVEaWN0RmlsZShsb2NhbGUsIGVudHJpZXMsIGxvY2FsZSA9PT0gZGVmYXVsdExvY2FsZSk7XG4gICAgICAgIHVwZGF0ZWRMb2NhbGVzKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICB1cGRhdGVkRW50aXRpZXMsXG4gICAgICB1cGRhdGVkTG9jYWxlcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOuUleyFlOuEiOumrCDtla3rqqkg7IiY7KCVXG4gICAqL1xuICBhc3luYyB1cGRhdGVFbnRyeShwYXJhbXM6IHtcbiAgICBvbGRLZXk6IHN0cmluZztcbiAgICBuZXdLZXk6IHN0cmluZztcbiAgICBzb3VyY2U6IFwiZW50aXR5XCIgfCBcInByb2plY3RcIiB8IFwic29uYW11XCI7XG4gICAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBvbGRLZXksIG5ld0tleSwgc291cmNlLCB2YWx1ZXMgfSA9IHBhcmFtcztcblxuICAgIGNvbnN0IHsgZGVmYXVsdExvY2FsZSwgc3VwcG9ydGVkTG9jYWxlcyB9ID0gdGhpcy5nZXRJMThuQ29uZmlnKCk7XG4gICAgY29uc3QgbG9jYWxlcyA9IHN1cHBvcnRlZExvY2FsZXM7XG5cbiAgICAvLyBlbnRpdHkgc291cmNl7J2YIGRlZmF1bHQgbG9jYWxlIOyymOumrFxuICAgIGlmIChzb3VyY2UgPT09IFwiZW50aXR5XCIgJiYgdmFsdWVzW2RlZmF1bHRMb2NhbGVdKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUVudGl0eUJ5S2V5KG5ld0tleSwgdmFsdWVzW2RlZmF1bHRMb2NhbGVdKTtcbiAgICB9XG5cbiAgICAvLyBwcm9qZWN0IGRpY3Qg7JeF642w7J207Yq4XG4gICAgLy8gLSBlbnRpdHnsnZggbm9uLWRlZmF1bHQgbG9jYWxlXG4gICAgLy8gLSBwcm9qZWN0IHNvdXJjZeydmCDrqqjrk6AgbG9jYWxlXG4gICAgLy8gLSBzb25hbXUgc291cmNl7J2YIOuqqOuToCBsb2NhbGUgKG92ZXJyaWRlKVxuICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICAgIC8vIGVudGl0eSBzb3VyY2XsnZggZGVmYXVsdCBsb2NhbGXsnYAgZW50aXR5Lmpzb27sl5DshJwg7LKY66as7ZaI7Jy866+A66GcIOyKpO2CtVxuICAgICAgaWYgKHNvdXJjZSA9PT0gXCJlbnRpdHlcIiAmJiBsb2NhbGUgPT09IGRlZmF1bHRMb2NhbGUpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBjZWxsVmFsdWUgPSB2YWx1ZXNbbG9jYWxlXT8udHJpbSgpO1xuICAgICAgaWYgKCFjZWxsVmFsdWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyDquLDsobQgZGljdCDroZzrk5xcbiAgICAgIGNvbnN0IHsgZW50cmllcyB9ID0gdGhpcy5sb2FkUHJvamVjdERpY3QobG9jYWxlKTtcblxuICAgICAgLy8ga2V5IOuzgOqyvSDsi5wg6riw7KG0IGtleSDsoJzqsbBcbiAgICAgIGlmIChvbGRLZXkgIT09IG5ld0tleSkge1xuICAgICAgICBjb25zdCBvbGRJbmRleCA9IGVudHJpZXMuZmluZEluZGV4KChlKSA9PiBlLmtleSA9PT0gb2xkS2V5KTtcbiAgICAgICAgaWYgKG9sZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGVudHJpZXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDsg4gg6rCSIOyXheuNsOydtO2KuCDrmJDripQg7LaU6rCAXG4gICAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gZW50cmllcy5maW5kSW5kZXgoKGUpID0+IGUua2V5ID09PSBuZXdLZXkpO1xuICAgICAgY29uc3QgbmV3RW50cnk6IERpY3RFbnRyeSA9IHtcbiAgICAgICAga2V5OiBuZXdLZXksXG4gICAgICAgIHZhbHVlOiBjZWxsVmFsdWUsXG4gICAgICAgIGlzRnVuY3Rpb246IHRoaXMuaXNFeHByZXNzaW9uRnVuY3Rpb24oY2VsbFZhbHVlKSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgICBlbnRyaWVzW2V4aXN0aW5nSW5kZXhdID0gbmV3RW50cnk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRyaWVzLnB1c2gobmV3RW50cnkpO1xuICAgICAgfVxuXG4gICAgICAvLyBkaWN0IO2MjOydvCDsoIDsnqVcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZURpY3RGaWxlKGxvY2FsZSwgZW50cmllcywgbG9jYWxlID09PSBkZWZhdWx0TG9jYWxlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog65SV7IWU64SI66asIO2VreuqqSDstpTqsIBcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUVudHJ5KHBhcmFtczogeyBrZXk6IHN0cmluZzsgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGtleSwgdmFsdWVzIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIWtleT8udHJpbSgpKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5rZXlSZXF1aXJlZFwiKSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBkZWZhdWx0TG9jYWxlLCBzdXBwb3J0ZWRMb2NhbGVzIH0gPSB0aGlzLmdldEkxOG5Db25maWcoKTtcbiAgICBjb25zdCBsb2NhbGVzID0gc3VwcG9ydGVkTG9jYWxlcztcblxuICAgIC8vIOykkeuztSDtgqQg7LK07YGsXG4gICAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgICAgY29uc3QgeyBlbnRyaWVzIH0gPSB0aGlzLmxvYWRQcm9qZWN0RGljdChsb2NhbGUpO1xuICAgICAgaWYgKGVudHJpZXMuc29tZSgoZSkgPT4gZS5rZXkgPT09IGtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3Iua2V5QWxyZWFkeUV4aXN0c1wiKShrZXkpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDqsIEgbG9jYWxl7JeQIOyDiCDtgqQg7LaU6rCAXG4gICAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgICAgY29uc3QgY2VsbFZhbHVlID0gdmFsdWVzW2xvY2FsZV0/LnRyaW0oKTtcbiAgICAgIGlmICghY2VsbFZhbHVlKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgeyBlbnRyaWVzIH0gPSB0aGlzLmxvYWRQcm9qZWN0RGljdChsb2NhbGUpO1xuICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZTogY2VsbFZhbHVlLFxuICAgICAgICBpc0Z1bmN0aW9uOiB0aGlzLmlzRXhwcmVzc2lvbkZ1bmN0aW9uKGNlbGxWYWx1ZSksXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdGhpcy5zYXZlRGljdEZpbGUobG9jYWxlLCBlbnRyaWVzLCBsb2NhbGUgPT09IGRlZmF1bHRMb2NhbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDrlJXshZTrhIjrpqwg7ZWt66qpIOyCreygnFxuICAgKi9cbiAgYXN5bmMgZGVsZXRlRW50cnkoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWtleSkge1xuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3Iua2V5UmVxdWlyZWRcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGVmYXVsdExvY2FsZSwgc3VwcG9ydGVkTG9jYWxlcyB9ID0gdGhpcy5nZXRJMThuQ29uZmlnKCk7XG4gICAgY29uc3QgbG9jYWxlcyA9IHN1cHBvcnRlZExvY2FsZXM7XG5cbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICAgIGNvbnN0IHsgZW50cmllcyB9ID0gdGhpcy5sb2FkUHJvamVjdERpY3QobG9jYWxlKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gZW50cmllcy5maW5kSW5kZXgoKGUpID0+IGUua2V5ID09PSBrZXkpO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBlbnRyaWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZURpY3RGaWxlKGxvY2FsZSwgZW50cmllcywgbG9jYWxlID09PSBkZWZhdWx0TG9jYWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWRlbGV0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLmtleU5vdEZvdW5kXCIpKGtleSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDrr7jsgqzsmqkg7YKkIOqygOyCrCAoYXN0LWdyZXAg7IKs7JqpKVxuICAgKi9cbiAgYXN5bmMgY2hlY2tVc2FnZShrZXlzOiBzdHJpbmdbXSk6IFByb21pc2U8VXNhZ2VSZXN1bHQ+IHtcbiAgICAvLyBhc3QtZ3JlcCDshKTsuZgg7ZmV7J24XG4gICAgbGV0IHNnUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIHNnUGF0aCA9IGV4ZWNTeW5jKFwid2hpY2ggc2dcIiwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pLnRyaW0oKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNnUGF0aCA9IGV4ZWNTeW5jKFwid2hpY2ggYXN0LWdyZXBcIiwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pLnRyaW0oKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBhc3QtZ3JlcCBub3QgaW5zdGFsbGVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFzZ1BhdGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOlxuICAgICAgICAgIFwiYXN0LWdyZXDsnbQg7ISk7LmY65CY7Ja0IOyeiOyngCDslYrsirXri4jri6QuIGJyZXcgaW5zdGFsbCBhc3QtZ3JlcCDrmJDripQgbnBtIGluc3RhbGwgLWcgQGFzdC1ncmVwL2NsaeuhnCDshKTsuZjtlbTso7zshLjsmpQuXCIsXG4gICAgICAgIHVudXNlZEtleXM6IFtdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWFyY2hQYXRoczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFtcImFwaVwiLCBcIndlYlwiLCBcImFwcFwiXSkge1xuICAgICAgY29uc3Qgc3JjUGF0aCA9IHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIGVudHJ5LCBcInNyY1wiKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHNyY1BhdGgpKSB7XG4gICAgICAgIHNlYXJjaFBhdGhzLnB1c2goc3JjUGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNlYXJjaFBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3I6IFwi6rKA7IOJ7ZWgIHNyYyDrlJTroInthqDrpqzrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6QuXCIsXG4gICAgICAgIHVudXNlZEtleXM6IFtdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VkS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGFzdC1ncmVw7Jy866GcIFNEKFwiLi4uXCIpIO2MqO2EtCDqsoDsg4lcbiAgICAgIC8vIO2MqO2EtDogU0QoXCJLRVlcIikg65iQ64qUIFNEKCdLRVknKSDtmJXtg5xcbiAgICAgIGNvbnN0IHBhdHRlcm5zID0gWydTRChcIiRLRVlcIiknLCBcIlNEKCckS0VZJylcIl07XG5cbiAgICAgIGZvciAoY29uc3Qgc2VhcmNoUGF0aCBvZiBzZWFyY2hQYXRocykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXhlY1N5bmMoYCR7c2dQYXRofSAtLXBhdHRlcm4gJyR7cGF0dGVybn0nIC0tanNvbiAke3NlYXJjaFBhdGh9YCwge1xuICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgICAgICBtYXhCdWZmZXI6IDUwICogMTAyNCAqIDEwMjQsIC8vIDUwTUJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0LnRyaW0oKSkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBtZXRhVmFyaWFibGVzLnNpbmdsZS5LRVkudGV4dOyXkOyEnCDtgqQg7LaU7LacXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5VGV4dCA9IG1hdGNoLm1ldGFWYXJpYWJsZXM/LnNpbmdsZT8uS0VZPy50ZXh0O1xuICAgICAgICAgICAgICAgIGlmIChrZXlUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAvLyDrlLDsmLTtkZwg7KCc6rGwXG4gICAgICAgICAgICAgICAgICBjb25zdCBjbGVhbktleSA9IGtleVRleHQucmVwbGFjZSgvXltcIiddfFtcIiddJC9nLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgIHVzZWRLZXlzLmFkZChjbGVhbktleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyDtjKjthLQg66ek7LmYIOyXhuycvOuptCDsl5Drn6wgKOustOyLnClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8ga2V5cyDspJHsl5DshJwgdXNlZEtleXPsl5Ag7JeG64qUIOqyg+uTpOydtCDrr7jsgqzsmqkg7YKkXG4gICAgICBjb25zdCB1bnVzZWRLZXlzID0ga2V5cy5maWx0ZXIoKGspID0+ICF1c2VkS2V5cy5oYXMoaykpO1xuXG4gICAgICByZXR1cm4geyB1bnVzZWRLZXlzLCB1c2VkS2V5c0NvdW50OiB1c2VkS2V5cy5zaXplIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3I6IGDqsoDsg4kg7KSRIOyYpOulmCDrsJzsg506ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgICAgIHVudXNlZEtleXM6IFtdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHNvbmFtdURpY3Rpb25hcnkgPSBuZXcgU29uYW11RGljdGlvbmFyeSgpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBMEJBLFNBQVMsVUFBVSxPQUF1QjtDQUN4QyxJQUFJLFNBQVM7Q0FDYixJQUFJLElBQUk7Q0FDUixPQUFPLEtBQUssR0FBRztFQUNiLFNBQVMsT0FBTyxhQUFhLEtBQU0sSUFBSSxFQUFHLElBQUk7RUFDOUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxFQUFFLElBQUk7Q0FDM0I7Q0FDQSxPQUFPO0FBQ1Q7Ozs7Ozs7Ozs7O0FBWUEsU0FBUyxhQUFhLE1BQXFDO0NBQ3pELElBQUksU0FBUyxRQUNYLE9BQU87Q0FFVCxJQUFJLGNBQWMsS0FBSyxLQUFLLEdBQzFCLE9BQU8sS0FBSztDQUVkLElBQUksS0FBSyxjQUFjLGFBQWEsS0FBSyxZQUFZLFFBQ25ELE9BQU8sS0FBSyxRQUFRO0NBRXRCLE9BQU87QUFDVDs7O0NBbERzQyxZQUFBO0NBQ1MscUJBQUE7Q0FDUyxvQkFBQTtDQUNTLG1CQUFBO0NBQ1gsbUJBQUE7Q0FDN0IsUUFBQTtDQW1EWixtQkFBYixNQUE4Qjs7Ozs7Ozs7OztFQVU1QixjQUFjLFVBQStCO0dBQzNDLE1BQU0sVUFBVSxHQUFHLGFBQWEsVUFBVSxPQUFPO0dBQ2pELE1BQU0sYUFBYSxHQUFHLGlCQUFpQixVQUFVLFNBQVMsR0FBRyxhQUFhLFFBQVEsSUFBSTtHQUV0RixNQUFNLFVBQXVCLENBQUM7R0FFOUIsR0FBRyxhQUFhLGFBQWEsU0FBUztJ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
|