@gomomento/sdk-core 1.77.1 → 1.78.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  import { CacheDelete, CacheGet, CacheIncrement, CacheSet, CacheSetIfNotExists, CacheSetFetch, CacheSetAddElements, CacheSetAddElement, CacheSetRemoveElements, CacheSetRemoveElement, CacheListFetch, CacheListLength, CacheListPushFront, CacheListPushBack, CacheListConcatenateBack, CacheListConcatenateFront, CacheListPopBack, CacheListPopFront, CacheListRemoveValue, CacheListRetain, CacheDictionarySetField, CacheDictionarySetFields, CacheDictionaryGetField, CacheDictionaryFetch, CacheDictionaryIncrement, CacheDictionaryRemoveField, CacheDictionaryRemoveFields, CacheDictionaryLength, CacheSortedSetFetch, CacheSortedSetPutElement, CacheSortedSetPutElements, CacheSortedSetGetRank, CacheSortedSetGetScore, CacheSortedSetGetScores, CacheSortedSetIncrementScore, CacheSortedSetRemoveElement, CacheSortedSetLength, CacheSortedSetLengthByScore, CacheItemGetType, CacheItemGetTtl, CacheKeyExists, CacheKeysExist, CacheUpdateTtl, CacheIncreaseTtl, CacheDecreaseTtl, CacheDictionaryGetFields, GetBatch, SetBatch, CacheSetIfAbsent, CacheSetIfPresent, CacheSetIfEqual, CacheSetIfNotEqual, CacheSetIfPresentAndNotEqual, CacheSetIfAbsentOrEqual, CacheSetSample } from '../index';
2
- import { ScalarCallOptions, ListFetchCallOptions, ListRetainCallOptions, BackTruncatableCallOptions, FrontTruncatableCallOptions, CollectionCallOptions, SortedSetFetchByRankCallOptions, SortedSetFetchByScoreCallOptions, SortedSetLengthByScoreCallOptions, SetCallOptions, GetCallOptions, DictionaryGetFieldCallOptions, DictionaryGetFieldsCallOptions, DictionaryFetchCallOptions, DictionarySetFieldCallOptions, DictionarySetFieldsCallOptions, SetIfAbsentCallOptions } from '../utils';
2
+ import { ScalarCallOptions, ListFetchCallOptions, ListRetainCallOptions, BackTruncatableCallOptions, FrontTruncatableCallOptions, CollectionCallOptions, SortedSetFetchByRankCallOptions, SortedSetFetchByScoreCallOptions, SortedSetLengthByScoreCallOptions, SetCallOptions, GetCallOptions, SetIfAbsentCallOptions } from '../utils';
3
3
  import { IControlClient, IPingClient } from '../internal/clients';
4
4
  import { IMomentoCache } from './IMomentoCache';
5
5
  export type SetOptions = SetCallOptions;
@@ -18,11 +18,8 @@ export type ListPushBackOptions = FrontTruncatableCallOptions;
18
18
  export type ListPushFrontOptions = BackTruncatableCallOptions;
19
19
  export type SetAddElementOptions = CollectionCallOptions;
20
20
  export type SetAddElementsOptions = CollectionCallOptions;
21
- export type DictionaryGetFieldOptions = DictionaryGetFieldCallOptions;
22
- export type DictionaryGetFieldsOptions = DictionaryGetFieldsCallOptions;
23
- export type DictionaryFetchOptions = DictionaryFetchCallOptions;
24
- export type DictionarySetFieldOptions = DictionarySetFieldCallOptions;
25
- export type DictionarySetFieldsOptions = DictionarySetFieldsCallOptions;
21
+ export type DictionarySetFieldOptions = CollectionCallOptions;
22
+ export type DictionarySetFieldsOptions = CollectionCallOptions;
26
23
  export type DictionaryIncrementOptions = CollectionCallOptions;
27
24
  export type IncrementOptions = ScalarCallOptions;
28
25
  export type SortedSetPutElementOptions = CollectionCallOptions;
@@ -67,7 +64,7 @@ export interface ICacheClient extends IControlClient, IPingClient {
67
64
  listRetain(cacheName: string, listName: string, options?: ListRetainCallOptions): Promise<CacheListRetain.Response>;
68
65
  dictionarySetField(cacheName: string, dictionaryName: string, field: string | Uint8Array, value: string | Uint8Array, options?: DictionarySetFieldOptions): Promise<CacheDictionarySetField.Response>;
69
66
  dictionarySetFields(cacheName: string, dictionaryName: string, elements: Map<string | Uint8Array, string | Uint8Array> | Record<string, string | Uint8Array> | Array<[string, string | Uint8Array]>, options?: DictionarySetFieldsOptions): Promise<CacheDictionarySetFields.Response>;
70
- dictionaryGetField(cacheName: string, dictionaryName: string, field: string | Uint8Array, options?: DictionaryGetFieldOptions): Promise<CacheDictionaryGetField.Response>;
67
+ dictionaryGetField(cacheName: string, dictionaryName: string, field: string | Uint8Array): Promise<CacheDictionaryGetField.Response>;
71
68
  dictionaryGetFields(cacheName: string, dictionaryName: string, fields: string[] | Uint8Array[]): Promise<CacheDictionaryGetFields.Response>;
72
69
  dictionaryFetch(cacheName: string, dictionaryName: string): Promise<CacheDictionaryFetch.Response>;
73
70
  dictionaryIncrement(cacheName: string, dictionaryName: string, field: string | Uint8Array, amount?: number, options?: DictionaryIncrementOptions): Promise<CacheDictionaryIncrement.Response>;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUNhY2hlQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudHMvSUNhY2hlQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDYWNoZURlbGV0ZSxcbiAgQ2FjaGVHZXQsXG4gIENhY2hlSW5jcmVtZW50LFxuICBDYWNoZVNldCxcbiAgQ2FjaGVTZXRJZk5vdEV4aXN0cyxcbiAgQ2FjaGVTZXRGZXRjaCxcbiAgQ2FjaGVTZXRBZGRFbGVtZW50cyxcbiAgQ2FjaGVTZXRBZGRFbGVtZW50LFxuICBDYWNoZVNldFJlbW92ZUVsZW1lbnRzLFxuICBDYWNoZVNldFJlbW92ZUVsZW1lbnQsXG4gIENhY2hlTGlzdEZldGNoLFxuICBDYWNoZUxpc3RMZW5ndGgsXG4gIENhY2hlTGlzdFB1c2hGcm9udCxcbiAgQ2FjaGVMaXN0UHVzaEJhY2ssXG4gIENhY2hlTGlzdENvbmNhdGVuYXRlQmFjayxcbiAgQ2FjaGVMaXN0Q29uY2F0ZW5hdGVGcm9udCxcbiAgQ2FjaGVMaXN0UG9wQmFjayxcbiAgQ2FjaGVMaXN0UG9wRnJvbnQsXG4gIENhY2hlTGlzdFJlbW92ZVZhbHVlLFxuICBDYWNoZUxpc3RSZXRhaW4sXG4gIENhY2hlRGljdGlvbmFyeVNldEZpZWxkLFxuICBDYWNoZURpY3Rpb25hcnlTZXRGaWVsZHMsXG4gIENhY2hlRGljdGlvbmFyeUdldEZpZWxkLFxuICBDYWNoZURpY3Rpb25hcnlGZXRjaCxcbiAgQ2FjaGVEaWN0aW9uYXJ5SW5jcmVtZW50LFxuICBDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZCxcbiAgQ2FjaGVEaWN0aW9uYXJ5UmVtb3ZlRmllbGRzLFxuICBDYWNoZURpY3Rpb25hcnlMZW5ndGgsXG4gIENhY2hlU29ydGVkU2V0RmV0Y2gsXG4gIENhY2hlU29ydGVkU2V0UHV0RWxlbWVudCxcbiAgQ2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50cyxcbiAgQ2FjaGVTb3J0ZWRTZXRHZXRSYW5rLFxuICBDYWNoZVNvcnRlZFNldEdldFNjb3JlLFxuICBDYWNoZVNvcnRlZFNldEdldFNjb3JlcyxcbiAgQ2FjaGVTb3J0ZWRTZXRJbmNyZW1lbnRTY29yZSxcbiAgQ2FjaGVTb3J0ZWRTZXRSZW1vdmVFbGVtZW50LFxuICBDYWNoZVNvcnRlZFNldExlbmd0aCxcbiAgQ2FjaGVTb3J0ZWRTZXRMZW5ndGhCeVNjb3JlLFxuICBDYWNoZUl0ZW1HZXRUeXBlLFxuICBDYWNoZUl0ZW1HZXRUdGwsXG4gIENhY2hlS2V5RXhpc3RzLFxuICBDYWNoZUtleXNFeGlzdCxcbiAgQ2FjaGVVcGRhdGVUdGwsXG4gIENhY2hlSW5jcmVhc2VUdGwsXG4gIENhY2hlRGVjcmVhc2VUdGwsXG4gIENhY2hlRGljdGlvbmFyeUdldEZpZWxkcyxcbiAgR2V0QmF0Y2gsXG4gIFNldEJhdGNoLFxuICBDYWNoZVNldElmQWJzZW50LFxuICBDYWNoZVNldElmUHJlc2VudCxcbiAgQ2FjaGVTZXRJZkVxdWFsLFxuICBDYWNoZVNldElmTm90RXF1YWwsXG4gIENhY2hlU2V0SWZQcmVzZW50QW5kTm90RXF1YWwsXG4gIENhY2hlU2V0SWZBYnNlbnRPckVxdWFsLFxuICBDYWNoZVNldFNhbXBsZSxcbn0gZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHtcbiAgU2NhbGFyQ2FsbE9wdGlvbnMsXG4gIExpc3RGZXRjaENhbGxPcHRpb25zLFxuICBMaXN0UmV0YWluQ2FsbE9wdGlvbnMsXG4gIEJhY2tUcnVuY2F0YWJsZUNhbGxPcHRpb25zLFxuICBGcm9udFRydW5jYXRhYmxlQ2FsbE9wdGlvbnMsXG4gIENvbGxlY3Rpb25DYWxsT3B0aW9ucyxcbiAgU29ydGVkU2V0RmV0Y2hCeVJhbmtDYWxsT3B0aW9ucyxcbiAgU29ydGVkU2V0RmV0Y2hCeVNjb3JlQ2FsbE9wdGlvbnMsXG4gIFNvcnRlZFNldExlbmd0aEJ5U2NvcmVDYWxsT3B0aW9ucyxcbiAgU2V0Q2FsbE9wdGlvbnMsXG4gIEdldENhbGxPcHRpb25zLFxuICBEaWN0aW9uYXJ5R2V0RmllbGRDYWxsT3B0aW9ucyxcbiAgRGljdGlvbmFyeUdldEZpZWxkc0NhbGxPcHRpb25zLFxuICBEaWN0aW9uYXJ5RmV0Y2hDYWxsT3B0aW9ucyxcbiAgRGljdGlvbmFyeVNldEZpZWxkQ2FsbE9wdGlvbnMsXG4gIERpY3Rpb25hcnlTZXRGaWVsZHNDYWxsT3B0aW9ucyxcbiAgU2V0SWZBYnNlbnRDYWxsT3B0aW9ucyxcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtJQ29udHJvbENsaWVudCwgSVBpbmdDbGllbnR9IGZyb20gJy4uL2ludGVybmFsL2NsaWVudHMnO1xuaW1wb3J0IHtJTW9tZW50b0NhY2hlfSBmcm9tICcuL0lNb21lbnRvQ2FjaGUnO1xuXG4vLyBUeXBlIGFsaWFzZXMgdG8gZGlmZmVyZW50aWF0ZSB0aGUgZGlmZmVyZW50IG1ldGhvZHMnIG9wdGlvbmFsIGFyZ3VtZW50cy5cbmV4cG9ydCB0eXBlIFNldE9wdGlvbnMgPSBTZXRDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIEdldE9wdGlvbnMgPSBHZXRDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIFNldElmTm90RXhpc3RzT3B0aW9ucyA9IFNjYWxhckNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgU2V0SWZBYnNlbnRPcHRpb25zID0gU2V0SWZBYnNlbnRDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIFNldElmUHJlc2VudE9wdGlvbnMgPSBTY2FsYXJDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIFNldElmRXF1YWxPcHRpb25zID0gU2NhbGFyQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBTZXRJZk5vdEVxdWFsT3B0aW9ucyA9IFNjYWxhckNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgU2V0SWZQcmVzZW50QW5kTm90RXF1YWxPcHRpb25zID0gU2NhbGFyQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBTZXRJZkFic2VudE9yRXF1YWxPcHRpb25zID0gU2NhbGFyQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBTZXRCYXRjaE9wdGlvbnMgPSBTY2FsYXJDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIExpc3RDb25jYXRlbmF0ZUJhY2tPcHRpb25zID0gRnJvbnRUcnVuY2F0YWJsZUNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgTGlzdENvbmNhdGVuYXRlRnJvbnRPcHRpb25zID0gQmFja1RydW5jYXRhYmxlQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBMaXN0UHVzaEJhY2tPcHRpb25zID0gRnJvbnRUcnVuY2F0YWJsZUNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgTGlzdFB1c2hGcm9udE9wdGlvbnMgPSBCYWNrVHJ1bmNhdGFibGVDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIFNldEFkZEVsZW1lbnRPcHRpb25zID0gQ29sbGVjdGlvbkNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgU2V0QWRkRWxlbWVudHNPcHRpb25zID0gQ29sbGVjdGlvbkNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgRGljdGlvbmFyeUdldEZpZWxkT3B0aW9ucyA9IERpY3Rpb25hcnlHZXRGaWVsZENhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgRGljdGlvbmFyeUdldEZpZWxkc09wdGlvbnMgPSBEaWN0aW9uYXJ5R2V0RmllbGRzQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBEaWN0aW9uYXJ5RmV0Y2hPcHRpb25zID0gRGljdGlvbmFyeUZldGNoQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBEaWN0aW9uYXJ5U2V0RmllbGRPcHRpb25zID0gRGljdGlvbmFyeVNldEZpZWxkQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBEaWN0aW9uYXJ5U2V0RmllbGRzT3B0aW9ucyA9IERpY3Rpb25hcnlTZXRGaWVsZHNDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIERpY3Rpb25hcnlJbmNyZW1lbnRPcHRpb25zID0gQ29sbGVjdGlvbkNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgSW5jcmVtZW50T3B0aW9ucyA9IFNjYWxhckNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgU29ydGVkU2V0UHV0RWxlbWVudE9wdGlvbnMgPSBDb2xsZWN0aW9uQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBTb3J0ZWRTZXRQdXRFbGVtZW50c09wdGlvbnMgPSBDb2xsZWN0aW9uQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBTb3J0ZWRTZXRGZXRjaEJ5UmFua09wdGlvbnMgPSBTb3J0ZWRTZXRGZXRjaEJ5UmFua0NhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgU29ydGVkU2V0RmV0Y2hCeVNjb3JlT3B0aW9ucyA9IFNvcnRlZFNldEZldGNoQnlTY29yZUNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgU29ydGVkU2V0SW5jcmVtZW50T3B0aW9ucyA9IENvbGxlY3Rpb25DYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIFNvcnRlZFNldExlbmd0aEJ5U2NvcmVPcHRpb25zID0gU29ydGVkU2V0TGVuZ3RoQnlTY29yZUNhbGxPcHRpb25zO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDYWNoZUNsaWVudCBleHRlbmRzIElDb250cm9sQ2xpZW50LCBJUGluZ0NsaWVudCB7XG4gIGNhY2hlKGNhY2hlTmFtZTogc3RyaW5nKTogSU1vbWVudG9DYWNoZTtcblxuICBnZXQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBHZXRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVHZXQuUmVzcG9uc2U+O1xuICBzZXQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXQuUmVzcG9uc2U+O1xuICBkZWxldGUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVEZWxldGUuUmVzcG9uc2U+O1xuICBpbmNyZW1lbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgYW1vdW50OiBudW1iZXIsXG4gICAgb3B0aW9ucz86IEluY3JlbWVudE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZUluY3JlbWVudC5SZXNwb25zZT47XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2Ugc2V0SWZBYnNlbnQgaW5zdGVhZC5cbiAgICovXG4gIHNldElmTm90RXhpc3RzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0SWZOb3RFeGlzdHNPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXRJZk5vdEV4aXN0cy5SZXNwb25zZT47XG4gIHNldElmQWJzZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0SWZBYnNlbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXRJZkFic2VudC5SZXNwb25zZT47XG4gIHNldElmUHJlc2VudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldElmUHJlc2VudE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmUHJlc2VudC5SZXNwb25zZT47XG4gIHNldElmRXF1YWwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGVxdWFsOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRJZkVxdWFsT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZFcXVhbC5SZXNwb25zZT47XG4gIHNldElmTm90RXF1YWwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG5vdEVxdWFsOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRJZk5vdEVxdWFsT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZOb3RFcXVhbC5SZXNwb25zZT47XG4gIHNldElmUHJlc2VudEFuZE5vdEVxdWFsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBub3RFcXVhbDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0SWZQcmVzZW50QW5kTm90RXF1YWxPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXRJZlByZXNlbnRBbmROb3RFcXVhbC5SZXNwb25zZT47XG4gIHNldElmQWJzZW50T3JFcXVhbChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZXF1YWw6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldElmQWJzZW50T3JFcXVhbE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmQWJzZW50T3JFcXVhbC5SZXNwb25zZT47XG4gIGdldEJhdGNoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleXM6IEFycmF5PHN0cmluZyB8IFVpbnQ4QXJyYXk+XG4gICk6IFByb21pc2U8R2V0QmF0Y2guUmVzcG9uc2U+O1xuICBzZXRCYXRjaChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBpdGVtczpcbiAgICAgIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgVWludDhBcnJheT5cbiAgICAgIHwgTWFwPHN0cmluZyB8IFVpbnQ4QXJyYXksIHN0cmluZyB8IFVpbnQ4QXJyYXk+LFxuICAgIG9wdGlvbnM/OiBTZXRCYXRjaE9wdGlvbnNcbiAgKTogUHJvbWlzZTxTZXRCYXRjaC5SZXNwb25zZT47XG4gIHNldEZldGNoKGNhY2hlTmFtZTogc3RyaW5nLCBzZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPENhY2hlU2V0RmV0Y2guUmVzcG9uc2U+O1xuICBzZXRBZGRFbGVtZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNldE5hbWU6IHN0cmluZyxcbiAgICBlbGVtZW50OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRBZGRFbGVtZW50c09wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldEFkZEVsZW1lbnQuUmVzcG9uc2U+O1xuICBzZXRBZGRFbGVtZW50cyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzZXROYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdLFxuICAgIG9wdGlvbnM/OiBTZXRBZGRFbGVtZW50c09wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldEFkZEVsZW1lbnRzLlJlc3BvbnNlPjtcbiAgc2V0UmVtb3ZlRWxlbWVudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzZXROYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudDogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlU2V0UmVtb3ZlRWxlbWVudC5SZXNwb25zZT47XG4gIHNldFJlbW92ZUVsZW1lbnRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNldE5hbWU6IHN0cmluZyxcbiAgICBlbGVtZW50czogc3RyaW5nW10gfCBVaW50OEFycmF5W11cbiAgKTogUHJvbWlzZTxDYWNoZVNldFJlbW92ZUVsZW1lbnRzLlJlc3BvbnNlPjtcbiAgc2V0U2FtcGxlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNldE5hbWU6IHN0cmluZyxcbiAgICBsaW1pdDogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVTZXRTYW1wbGUuUmVzcG9uc2U+O1xuICBsaXN0RmV0Y2goXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTGlzdEZldGNoQ2FsbE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RGZXRjaC5SZXNwb25zZT47XG4gIGxpc3RMZW5ndGgoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPENhY2hlTGlzdExlbmd0aC5SZXNwb25zZT47XG4gIGxpc3RQdXNoRnJvbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogTGlzdFB1c2hGcm9udE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RQdXNoRnJvbnQuUmVzcG9uc2U+O1xuICBsaXN0UHVzaEJhY2soXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogTGlzdFB1c2hCYWNrT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlTGlzdFB1c2hCYWNrLlJlc3BvbnNlPjtcbiAgbGlzdENvbmNhdGVuYXRlQmFjayhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogc3RyaW5nW10gfCBVaW50OEFycmF5W10sXG4gICAgb3B0aW9ucz86IExpc3RDb25jYXRlbmF0ZUJhY2tPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0Q29uY2F0ZW5hdGVCYWNrLlJlc3BvbnNlPjtcbiAgbGlzdENvbmNhdGVuYXRlRnJvbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdLFxuICAgIG9wdGlvbnM/OiBMaXN0Q29uY2F0ZW5hdGVGcm9udE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RDb25jYXRlbmF0ZUZyb250LlJlc3BvbnNlPjtcbiAgbGlzdFBvcEJhY2soXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPENhY2hlTGlzdFBvcEJhY2suUmVzcG9uc2U+O1xuICBsaXN0UG9wRnJvbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPENhY2hlTGlzdFBvcEZyb250LlJlc3BvbnNlPjtcbiAgbGlzdFJlbW92ZVZhbHVlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RSZW1vdmVWYWx1ZS5SZXNwb25zZT47XG4gIGxpc3RSZXRhaW4oXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTGlzdFJldGFpbkNhbGxPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UmV0YWluLlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeVNldEZpZWxkKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IERpY3Rpb25hcnlTZXRGaWVsZE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlTZXRGaWVsZC5SZXNwb25zZT47XG4gIGRpY3Rpb25hcnlTZXRGaWVsZHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBlbGVtZW50czpcbiAgICAgIHwgTWFwPHN0cmluZyB8IFVpbnQ4QXJyYXksIHN0cmluZyB8IFVpbnQ4QXJyYXk+XG4gICAgICB8IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IFVpbnQ4QXJyYXk+XG4gICAgICB8IEFycmF5PFtzdHJpbmcsIHN0cmluZyB8IFVpbnQ4QXJyYXldPixcbiAgICBvcHRpb25zPzogRGljdGlvbmFyeVNldEZpZWxkc09wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlTZXRGaWVsZHMuUmVzcG9uc2U+O1xuICBkaWN0aW9uYXJ5R2V0RmllbGQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogRGljdGlvbmFyeUdldEZpZWxkT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeUdldEZpZWxkLlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeUdldEZpZWxkcyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkczogc3RyaW5nW10gfCBVaW50OEFycmF5W11cbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlHZXRGaWVsZHMuUmVzcG9uc2U+O1xuICBkaWN0aW9uYXJ5RmV0Y2goXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeUZldGNoLlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeUluY3JlbWVudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGFtb3VudD86IG51bWJlcixcbiAgICBvcHRpb25zPzogRGljdGlvbmFyeUluY3JlbWVudE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlJbmNyZW1lbnQuUmVzcG9uc2U+O1xuICBkaWN0aW9uYXJ5UmVtb3ZlRmllbGQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeVJlbW92ZUZpZWxkLlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeVJlbW92ZUZpZWxkcyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkczogc3RyaW5nW10gfCBVaW50OEFycmF5W11cbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZHMuUmVzcG9uc2U+O1xuICBkaWN0aW9uYXJ5TGVuZ3RoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlMZW5ndGguUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRGZXRjaEJ5UmFuayhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFNvcnRlZFNldEZldGNoQnlSYW5rT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0RmV0Y2guUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRGZXRjaEJ5U2NvcmUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBTb3J0ZWRTZXRGZXRjaEJ5U2NvcmVPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRGZXRjaC5SZXNwb25zZT47XG4gIHNvcnRlZFNldFB1dEVsZW1lbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHNjb3JlOiBudW1iZXIsXG4gICAgb3B0aW9ucz86IFNvcnRlZFNldFB1dEVsZW1lbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50LlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0UHV0RWxlbWVudHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnRzOlxuICAgICAgfCBNYXA8c3RyaW5nIHwgVWludDhBcnJheSwgbnVtYmVyPlxuICAgICAgfCBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+XG4gICAgICB8IEFycmF5PFtzdHJpbmcsIG51bWJlcl0+LFxuICAgIG9wdGlvbnM/OiBTb3J0ZWRTZXRQdXRFbGVtZW50c09wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldFB1dEVsZW1lbnRzLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0R2V0UmFuayhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldEdldFJhbmsuUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRHZXRTY29yZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldEdldFNjb3JlLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0R2V0U2NvcmVzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRHZXRTY29yZXMuUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRJbmNyZW1lbnRTY29yZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgYW1vdW50PzogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBTb3J0ZWRTZXRJbmNyZW1lbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRJbmNyZW1lbnRTY29yZS5SZXNwb25zZT47XG4gIHNvcnRlZFNldFJlbW92ZUVsZW1lbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRSZW1vdmVFbGVtZW50LlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0UmVtb3ZlRWxlbWVudHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogc3RyaW5nW10gfCBVaW50OEFycmF5W11cbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldFJlbW92ZUVsZW1lbnQuUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRMZW5ndGgoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRMZW5ndGguUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRMZW5ndGhCeVNjb3JlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogU29ydGVkU2V0TGVuZ3RoQnlTY29yZU9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldExlbmd0aEJ5U2NvcmUuUmVzcG9uc2U+O1xuICBpdGVtR2V0VHlwZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZUl0ZW1HZXRUeXBlLlJlc3BvbnNlPjtcbiAgaXRlbUdldFR0bChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZUl0ZW1HZXRUdGwuUmVzcG9uc2U+O1xuICBrZXlFeGlzdHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVLZXlFeGlzdHMuUmVzcG9uc2U+O1xuICBrZXlzRXhpc3QoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5czogc3RyaW5nW10gfCBVaW50OEFycmF5W11cbiAgKTogUHJvbWlzZTxDYWNoZUtleXNFeGlzdC5SZXNwb25zZT47XG4gIHVwZGF0ZVR0bChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdHRsTWlsbGlzZWNvbmRzOiBudW1iZXJcbiAgKTogUHJvbWlzZTxDYWNoZVVwZGF0ZVR0bC5SZXNwb25zZT47XG4gIGluY3JlYXNlVHRsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB0dGxNaWxsaXNlY29uZHM6IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlSW5jcmVhc2VUdGwuUmVzcG9uc2U+O1xuICBkZWNyZWFzZVR0bChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdHRsTWlsbGlzZWNvbmRzOiBudW1iZXJcbiAgKTogUHJvbWlzZTxDYWNoZURlY3JlYXNlVHRsLlJlc3BvbnNlPjtcbiAgY2xvc2UoKTogdm9pZDtcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUNhY2hlQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudHMvSUNhY2hlQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDYWNoZURlbGV0ZSxcbiAgQ2FjaGVHZXQsXG4gIENhY2hlSW5jcmVtZW50LFxuICBDYWNoZVNldCxcbiAgQ2FjaGVTZXRJZk5vdEV4aXN0cyxcbiAgQ2FjaGVTZXRGZXRjaCxcbiAgQ2FjaGVTZXRBZGRFbGVtZW50cyxcbiAgQ2FjaGVTZXRBZGRFbGVtZW50LFxuICBDYWNoZVNldFJlbW92ZUVsZW1lbnRzLFxuICBDYWNoZVNldFJlbW92ZUVsZW1lbnQsXG4gIENhY2hlTGlzdEZldGNoLFxuICBDYWNoZUxpc3RMZW5ndGgsXG4gIENhY2hlTGlzdFB1c2hGcm9udCxcbiAgQ2FjaGVMaXN0UHVzaEJhY2ssXG4gIENhY2hlTGlzdENvbmNhdGVuYXRlQmFjayxcbiAgQ2FjaGVMaXN0Q29uY2F0ZW5hdGVGcm9udCxcbiAgQ2FjaGVMaXN0UG9wQmFjayxcbiAgQ2FjaGVMaXN0UG9wRnJvbnQsXG4gIENhY2hlTGlzdFJlbW92ZVZhbHVlLFxuICBDYWNoZUxpc3RSZXRhaW4sXG4gIENhY2hlRGljdGlvbmFyeVNldEZpZWxkLFxuICBDYWNoZURpY3Rpb25hcnlTZXRGaWVsZHMsXG4gIENhY2hlRGljdGlvbmFyeUdldEZpZWxkLFxuICBDYWNoZURpY3Rpb25hcnlGZXRjaCxcbiAgQ2FjaGVEaWN0aW9uYXJ5SW5jcmVtZW50LFxuICBDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZCxcbiAgQ2FjaGVEaWN0aW9uYXJ5UmVtb3ZlRmllbGRzLFxuICBDYWNoZURpY3Rpb25hcnlMZW5ndGgsXG4gIENhY2hlU29ydGVkU2V0RmV0Y2gsXG4gIENhY2hlU29ydGVkU2V0UHV0RWxlbWVudCxcbiAgQ2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50cyxcbiAgQ2FjaGVTb3J0ZWRTZXRHZXRSYW5rLFxuICBDYWNoZVNvcnRlZFNldEdldFNjb3JlLFxuICBDYWNoZVNvcnRlZFNldEdldFNjb3JlcyxcbiAgQ2FjaGVTb3J0ZWRTZXRJbmNyZW1lbnRTY29yZSxcbiAgQ2FjaGVTb3J0ZWRTZXRSZW1vdmVFbGVtZW50LFxuICBDYWNoZVNvcnRlZFNldExlbmd0aCxcbiAgQ2FjaGVTb3J0ZWRTZXRMZW5ndGhCeVNjb3JlLFxuICBDYWNoZUl0ZW1HZXRUeXBlLFxuICBDYWNoZUl0ZW1HZXRUdGwsXG4gIENhY2hlS2V5RXhpc3RzLFxuICBDYWNoZUtleXNFeGlzdCxcbiAgQ2FjaGVVcGRhdGVUdGwsXG4gIENhY2hlSW5jcmVhc2VUdGwsXG4gIENhY2hlRGVjcmVhc2VUdGwsXG4gIENhY2hlRGljdGlvbmFyeUdldEZpZWxkcyxcbiAgR2V0QmF0Y2gsXG4gIFNldEJhdGNoLFxuICBDYWNoZVNldElmQWJzZW50LFxuICBDYWNoZVNldElmUHJlc2VudCxcbiAgQ2FjaGVTZXRJZkVxdWFsLFxuICBDYWNoZVNldElmTm90RXF1YWwsXG4gIENhY2hlU2V0SWZQcmVzZW50QW5kTm90RXF1YWwsXG4gIENhY2hlU2V0SWZBYnNlbnRPckVxdWFsLFxuICBDYWNoZVNldFNhbXBsZSxcbn0gZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHtcbiAgU2NhbGFyQ2FsbE9wdGlvbnMsXG4gIExpc3RGZXRjaENhbGxPcHRpb25zLFxuICBMaXN0UmV0YWluQ2FsbE9wdGlvbnMsXG4gIEJhY2tUcnVuY2F0YWJsZUNhbGxPcHRpb25zLFxuICBGcm9udFRydW5jYXRhYmxlQ2FsbE9wdGlvbnMsXG4gIENvbGxlY3Rpb25DYWxsT3B0aW9ucyxcbiAgU29ydGVkU2V0RmV0Y2hCeVJhbmtDYWxsT3B0aW9ucyxcbiAgU29ydGVkU2V0RmV0Y2hCeVNjb3JlQ2FsbE9wdGlvbnMsXG4gIFNvcnRlZFNldExlbmd0aEJ5U2NvcmVDYWxsT3B0aW9ucyxcbiAgU2V0Q2FsbE9wdGlvbnMsXG4gIEdldENhbGxPcHRpb25zLFxuICBTZXRJZkFic2VudENhbGxPcHRpb25zLFxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge0lDb250cm9sQ2xpZW50LCBJUGluZ0NsaWVudH0gZnJvbSAnLi4vaW50ZXJuYWwvY2xpZW50cyc7XG5pbXBvcnQge0lNb21lbnRvQ2FjaGV9IGZyb20gJy4vSU1vbWVudG9DYWNoZSc7XG5cbi8vIFR5cGUgYWxpYXNlcyB0byBkaWZmZXJlbnRpYXRlIHRoZSBkaWZmZXJlbnQgbWV0aG9kcycgb3B0aW9uYWwgYXJndW1lbnRzLlxuZXhwb3J0IHR5cGUgU2V0T3B0aW9ucyA9IFNldENhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgR2V0T3B0aW9ucyA9IEdldENhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgU2V0SWZOb3RFeGlzdHNPcHRpb25zID0gU2NhbGFyQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBTZXRJZkFic2VudE9wdGlvbnMgPSBTZXRJZkFic2VudENhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgU2V0SWZQcmVzZW50T3B0aW9ucyA9IFNjYWxhckNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgU2V0SWZFcXVhbE9wdGlvbnMgPSBTY2FsYXJDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIFNldElmTm90RXF1YWxPcHRpb25zID0gU2NhbGFyQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBTZXRJZlByZXNlbnRBbmROb3RFcXVhbE9wdGlvbnMgPSBTY2FsYXJDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIFNldElmQWJzZW50T3JFcXVhbE9wdGlvbnMgPSBTY2FsYXJDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIFNldEJhdGNoT3B0aW9ucyA9IFNjYWxhckNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgTGlzdENvbmNhdGVuYXRlQmFja09wdGlvbnMgPSBGcm9udFRydW5jYXRhYmxlQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBMaXN0Q29uY2F0ZW5hdGVGcm9udE9wdGlvbnMgPSBCYWNrVHJ1bmNhdGFibGVDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIExpc3RQdXNoQmFja09wdGlvbnMgPSBGcm9udFRydW5jYXRhYmxlQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBMaXN0UHVzaEZyb250T3B0aW9ucyA9IEJhY2tUcnVuY2F0YWJsZUNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgU2V0QWRkRWxlbWVudE9wdGlvbnMgPSBDb2xsZWN0aW9uQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBTZXRBZGRFbGVtZW50c09wdGlvbnMgPSBDb2xsZWN0aW9uQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBEaWN0aW9uYXJ5U2V0RmllbGRPcHRpb25zID0gQ29sbGVjdGlvbkNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgRGljdGlvbmFyeVNldEZpZWxkc09wdGlvbnMgPSBDb2xsZWN0aW9uQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBEaWN0aW9uYXJ5SW5jcmVtZW50T3B0aW9ucyA9IENvbGxlY3Rpb25DYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIEluY3JlbWVudE9wdGlvbnMgPSBTY2FsYXJDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIFNvcnRlZFNldFB1dEVsZW1lbnRPcHRpb25zID0gQ29sbGVjdGlvbkNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgU29ydGVkU2V0UHV0RWxlbWVudHNPcHRpb25zID0gQ29sbGVjdGlvbkNhbGxPcHRpb25zO1xuZXhwb3J0IHR5cGUgU29ydGVkU2V0RmV0Y2hCeVJhbmtPcHRpb25zID0gU29ydGVkU2V0RmV0Y2hCeVJhbmtDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIFNvcnRlZFNldEZldGNoQnlTY29yZU9wdGlvbnMgPSBTb3J0ZWRTZXRGZXRjaEJ5U2NvcmVDYWxsT3B0aW9ucztcbmV4cG9ydCB0eXBlIFNvcnRlZFNldEluY3JlbWVudE9wdGlvbnMgPSBDb2xsZWN0aW9uQ2FsbE9wdGlvbnM7XG5leHBvcnQgdHlwZSBTb3J0ZWRTZXRMZW5ndGhCeVNjb3JlT3B0aW9ucyA9IFNvcnRlZFNldExlbmd0aEJ5U2NvcmVDYWxsT3B0aW9ucztcblxuZXhwb3J0IGludGVyZmFjZSBJQ2FjaGVDbGllbnQgZXh0ZW5kcyBJQ29udHJvbENsaWVudCwgSVBpbmdDbGllbnQge1xuICBjYWNoZShjYWNoZU5hbWU6IHN0cmluZyk6IElNb21lbnRvQ2FjaGU7XG5cbiAgZ2V0KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogR2V0T3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlR2V0LlJlc3BvbnNlPjtcbiAgc2V0KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0T3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0LlJlc3BvbnNlPjtcbiAgZGVsZXRlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlRGVsZXRlLlJlc3BvbnNlPjtcbiAgaW5jcmVtZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGFtb3VudDogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBJbmNyZW1lbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVJbmNyZW1lbnQuUmVzcG9uc2U+O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNldElmQWJzZW50IGluc3RlYWQuXG4gICAqL1xuICBzZXRJZk5vdEV4aXN0cyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldElmTm90RXhpc3RzT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZOb3RFeGlzdHMuUmVzcG9uc2U+O1xuICBzZXRJZkFic2VudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldElmQWJzZW50T3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZBYnNlbnQuUmVzcG9uc2U+O1xuICBzZXRJZlByZXNlbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRJZlByZXNlbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXRJZlByZXNlbnQuUmVzcG9uc2U+O1xuICBzZXRJZkVxdWFsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBlcXVhbDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0SWZFcXVhbE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmRXF1YWwuUmVzcG9uc2U+O1xuICBzZXRJZk5vdEVxdWFsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBub3RFcXVhbDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0SWZOb3RFcXVhbE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmTm90RXF1YWwuUmVzcG9uc2U+O1xuICBzZXRJZlByZXNlbnRBbmROb3RFcXVhbChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgbm90RXF1YWw6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldElmUHJlc2VudEFuZE5vdEVxdWFsT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZQcmVzZW50QW5kTm90RXF1YWwuUmVzcG9uc2U+O1xuICBzZXRJZkFic2VudE9yRXF1YWwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGVxdWFsOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRJZkFic2VudE9yRXF1YWxPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXRJZkFic2VudE9yRXF1YWwuUmVzcG9uc2U+O1xuICBnZXRCYXRjaChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXlzOiBBcnJheTxzdHJpbmcgfCBVaW50OEFycmF5PlxuICApOiBQcm9taXNlPEdldEJhdGNoLlJlc3BvbnNlPjtcbiAgc2V0QmF0Y2goXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgaXRlbXM6XG4gICAgICB8IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IFVpbnQ4QXJyYXk+XG4gICAgICB8IE1hcDxzdHJpbmcgfCBVaW50OEFycmF5LCBzdHJpbmcgfCBVaW50OEFycmF5PixcbiAgICBvcHRpb25zPzogU2V0QmF0Y2hPcHRpb25zXG4gICk6IFByb21pc2U8U2V0QmF0Y2guUmVzcG9uc2U+O1xuICBzZXRGZXRjaChjYWNoZU5hbWU6IHN0cmluZywgc2V0TmFtZTogc3RyaW5nKTogUHJvbWlzZTxDYWNoZVNldEZldGNoLlJlc3BvbnNlPjtcbiAgc2V0QWRkRWxlbWVudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzZXROYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0QWRkRWxlbWVudHNPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXRBZGRFbGVtZW50LlJlc3BvbnNlPjtcbiAgc2V0QWRkRWxlbWVudHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc2V0TmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnRzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXSxcbiAgICBvcHRpb25zPzogU2V0QWRkRWxlbWVudHNPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXRBZGRFbGVtZW50cy5SZXNwb25zZT47XG4gIHNldFJlbW92ZUVsZW1lbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc2V0TmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnQ6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZVNldFJlbW92ZUVsZW1lbnQuUmVzcG9uc2U+O1xuICBzZXRSZW1vdmVFbGVtZW50cyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzZXROYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVTZXRSZW1vdmVFbGVtZW50cy5SZXNwb25zZT47XG4gIHNldFNhbXBsZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzZXROYW1lOiBzdHJpbmcsXG4gICAgbGltaXQ6IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlU2V0U2FtcGxlLlJlc3BvbnNlPjtcbiAgbGlzdEZldGNoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IExpc3RGZXRjaENhbGxPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0RmV0Y2guUmVzcG9uc2U+O1xuICBsaXN0TGVuZ3RoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RMZW5ndGguUmVzcG9uc2U+O1xuICBsaXN0UHVzaEZyb250KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IExpc3RQdXNoRnJvbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UHVzaEZyb250LlJlc3BvbnNlPjtcbiAgbGlzdFB1c2hCYWNrKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IExpc3RQdXNoQmFja09wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RQdXNoQmFjay5SZXNwb25zZT47XG4gIGxpc3RDb25jYXRlbmF0ZUJhY2soXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdLFxuICAgIG9wdGlvbnM/OiBMaXN0Q29uY2F0ZW5hdGVCYWNrT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlTGlzdENvbmNhdGVuYXRlQmFjay5SZXNwb25zZT47XG4gIGxpc3RDb25jYXRlbmF0ZUZyb250KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWVzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXSxcbiAgICBvcHRpb25zPzogTGlzdENvbmNhdGVuYXRlRnJvbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0Q29uY2F0ZW5hdGVGcm9udC5SZXNwb25zZT47XG4gIGxpc3RQb3BCYWNrKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RQb3BCYWNrLlJlc3BvbnNlPjtcbiAgbGlzdFBvcEZyb250KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RQb3BGcm9udC5SZXNwb25zZT47XG4gIGxpc3RSZW1vdmVWYWx1ZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UmVtb3ZlVmFsdWUuUmVzcG9uc2U+O1xuICBsaXN0UmV0YWluKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IExpc3RSZXRhaW5DYWxsT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlTGlzdFJldGFpbi5SZXNwb25zZT47XG4gIGRpY3Rpb25hcnlTZXRGaWVsZChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBEaWN0aW9uYXJ5U2V0RmllbGRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5U2V0RmllbGQuUmVzcG9uc2U+O1xuICBkaWN0aW9uYXJ5U2V0RmllbGRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6XG4gICAgICB8IE1hcDxzdHJpbmcgfCBVaW50OEFycmF5LCBzdHJpbmcgfCBVaW50OEFycmF5PlxuICAgICAgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBVaW50OEFycmF5PlxuICAgICAgfCBBcnJheTxbc3RyaW5nLCBzdHJpbmcgfCBVaW50OEFycmF5XT4sXG4gICAgb3B0aW9ucz86IERpY3Rpb25hcnlTZXRGaWVsZHNPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5U2V0RmllbGRzLlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeUdldEZpZWxkKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlHZXRGaWVsZC5SZXNwb25zZT47XG4gIGRpY3Rpb25hcnlHZXRGaWVsZHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZHM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5R2V0RmllbGRzLlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeUZldGNoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlGZXRjaC5SZXNwb25zZT47XG4gIGRpY3Rpb25hcnlJbmNyZW1lbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBhbW91bnQ/OiBudW1iZXIsXG4gICAgb3B0aW9ucz86IERpY3Rpb25hcnlJbmNyZW1lbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5SW5jcmVtZW50LlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeVJlbW92ZUZpZWxkKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZC5SZXNwb25zZT47XG4gIGRpY3Rpb25hcnlSZW1vdmVGaWVsZHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZHM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5UmVtb3ZlRmllbGRzLlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeUxlbmd0aChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5TGVuZ3RoLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0RmV0Y2hCeVJhbmsoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBTb3J0ZWRTZXRGZXRjaEJ5UmFua09wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldEZldGNoLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0RmV0Y2hCeVNjb3JlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogU29ydGVkU2V0RmV0Y2hCeVNjb3JlT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0RmV0Y2guUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRQdXRFbGVtZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBzY29yZTogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBTb3J0ZWRTZXRQdXRFbGVtZW50T3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0UHV0RWxlbWVudC5SZXNwb25zZT47XG4gIHNvcnRlZFNldFB1dEVsZW1lbnRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICBlbGVtZW50czpcbiAgICAgIHwgTWFwPHN0cmluZyB8IFVpbnQ4QXJyYXksIG51bWJlcj5cbiAgICAgIHwgUmVjb3JkPHN0cmluZywgbnVtYmVyPlxuICAgICAgfCBBcnJheTxbc3RyaW5nLCBudW1iZXJdPixcbiAgICBvcHRpb25zPzogU29ydGVkU2V0UHV0RWxlbWVudHNPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50cy5SZXNwb25zZT47XG4gIHNvcnRlZFNldEdldFJhbmsoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRHZXRSYW5rLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0R2V0U2NvcmUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRHZXRTY29yZS5SZXNwb25zZT47XG4gIHNvcnRlZFNldEdldFNjb3JlcyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWVzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXVxuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0R2V0U2NvcmVzLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0SW5jcmVtZW50U2NvcmUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGFtb3VudD86IG51bWJlcixcbiAgICBvcHRpb25zPzogU29ydGVkU2V0SW5jcmVtZW50T3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0SW5jcmVtZW50U2NvcmUuUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRSZW1vdmVFbGVtZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0UmVtb3ZlRWxlbWVudC5SZXNwb25zZT47XG4gIHNvcnRlZFNldFJlbW92ZUVsZW1lbnRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRSZW1vdmVFbGVtZW50LlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0TGVuZ3RoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0TGVuZ3RoLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0TGVuZ3RoQnlTY29yZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFNvcnRlZFNldExlbmd0aEJ5U2NvcmVPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRMZW5ndGhCeVNjb3JlLlJlc3BvbnNlPjtcbiAgaXRlbUdldFR5cGUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVJdGVtR2V0VHlwZS5SZXNwb25zZT47XG4gIGl0ZW1HZXRUdGwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVJdGVtR2V0VHRsLlJlc3BvbnNlPjtcbiAga2V5RXhpc3RzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlS2V5RXhpc3RzLlJlc3BvbnNlPjtcbiAga2V5c0V4aXN0KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleXM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVLZXlzRXhpc3QuUmVzcG9uc2U+O1xuICB1cGRhdGVUdGwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bE1pbGxpc2Vjb25kczogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVVcGRhdGVUdGwuUmVzcG9uc2U+O1xuICBpbmNyZWFzZVR0bChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdHRsTWlsbGlzZWNvbmRzOiBudW1iZXJcbiAgKTogUHJvbWlzZTxDYWNoZUluY3JlYXNlVHRsLlJlc3BvbnNlPjtcbiAgZGVjcmVhc2VUdGwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bE1pbGxpc2Vjb25kczogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVEZWNyZWFzZVR0bC5SZXNwb25zZT47XG4gIGNsb3NlKCk6IHZvaWQ7XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { CreateCache, DeleteCache, ListCaches, CacheFlush, CacheGet, CacheSet, CacheDelete, CacheIncrement, IncrementOptions, CacheSetIfNotExists, SetIfNotExistsOptions, SetIfAbsentOptions, SetIfPresentOptions, SetIfEqualOptions, SetIfNotEqualOptions, SetIfPresentAndNotEqualOptions, SetIfAbsentOrEqualOptions, CacheSetFetch, CacheSetAddElement, CacheSetAddElements, CacheSetRemoveElement, CacheSetRemoveElements, CacheListFetch, CacheListLength, CacheListPushFront, CacheListPushBack, CacheListConcatenateBack, CacheListConcatenateFront, CacheListPopBack, CacheListPopFront, CacheListRemoveValue, CacheListRetain, CacheDictionarySetField, CacheDictionarySetFields, CacheDictionaryGetField, CacheDictionaryGetFields, CacheDictionaryIncrement, CacheDictionaryFetch, CacheDictionaryRemoveField, CacheDictionaryRemoveFields, CacheDictionaryLength, CacheSortedSetFetch, CacheSortedSetPutElement, CacheSortedSetPutElements, CacheSortedSetGetRank, CacheSortedSetGetScore, CacheSortedSetGetScores, CacheSortedSetIncrementScore, CacheSortedSetRemoveElement, CacheSortedSetRemoveElements, CacheSortedSetLength, CacheSortedSetLengthByScore, CacheItemGetTtl, CacheItemGetType, CacheKeyExists, CacheKeysExist, CacheUpdateTtl, CacheIncreaseTtl, CacheDecreaseTtl, GetBatch, SetBatch, CacheSetIfAbsent, CacheSetIfPresent, CacheSetIfEqual, CacheSetIfNotEqual, CacheSetIfPresentAndNotEqual, CacheSetIfAbsentOrEqual, CacheSetSample } from '../../../index';
2
2
  import { ListFetchCallOptions, ListRetainCallOptions } from '../../../utils';
3
- import { ICacheClient, SetOptions, SetAddElementOptions, SetAddElementsOptions, ListPushFrontOptions, ListPushBackOptions, ListConcatenateBackOptions, ListConcatenateFrontOptions, DictionaryGetFieldOptions, DictionaryGetFieldsOptions, DictionaryFetchOptions, DictionarySetFieldOptions, DictionarySetFieldsOptions, DictionaryIncrementOptions, SortedSetFetchByRankOptions, SortedSetPutElementOptions, SortedSetPutElementsOptions, SortedSetFetchByScoreOptions, SortedSetIncrementOptions, SortedSetLengthByScoreOptions, SetBatchOptions, GetOptions } from '../../../clients/ICacheClient';
3
+ import { ICacheClient, SetOptions, SetAddElementOptions, SetAddElementsOptions, ListPushFrontOptions, ListPushBackOptions, ListConcatenateBackOptions, ListConcatenateFrontOptions, DictionarySetFieldOptions, DictionarySetFieldsOptions, DictionaryIncrementOptions, SortedSetFetchByRankOptions, SortedSetPutElementOptions, SortedSetPutElementsOptions, SortedSetFetchByScoreOptions, SortedSetIncrementOptions, SortedSetLengthByScoreOptions, SetBatchOptions, GetOptions } from '../../../clients/ICacheClient';
4
4
  import { IControlClient } from './IControlClient';
5
5
  import { IDataClient } from './IDataClient';
6
6
  import { IPingClient } from './IPingClient';
@@ -478,15 +478,13 @@ export declare abstract class AbstractCacheClient implements ICacheClient {
478
478
  *
479
479
  * @param {string} cacheName - The cache to perform the lookup in.
480
480
  * @param {string} dictionaryName - The dictionary to fetch.
481
- * @param {DictionaryFetchOptions} [options]
482
- * @param {boolean} [options.decompress=false] - Whether to decompress the values. Defaults to false.
483
481
  * @returns {Promise<CacheDictionaryFetch.Response>} -
484
482
  * {@link CacheDictionaryFetch.Hit} containing the dictionary elements if the
485
483
  * dictionary exists.
486
484
  * {@link CacheDictionaryFetch.Miss} if the dictionary does not exist.
487
485
  * {@link CacheDictionaryFetch.Error} on failure.
488
486
  */
489
- dictionaryFetch(cacheName: string, dictionaryName: string, options?: DictionaryFetchOptions): Promise<CacheDictionaryFetch.Response>;
487
+ dictionaryFetch(cacheName: string, dictionaryName: string): Promise<CacheDictionaryFetch.Response>;
490
488
  /**
491
489
  * Adds an integer quantity to a field value.
492
490
  *
@@ -515,10 +513,10 @@ export declare abstract class AbstractCacheClient implements ICacheClient {
515
513
  * @param {string} dictionaryName - The dictionary to add to.
516
514
  * @param {string | Uint8Array} field - The field to set.
517
515
  * @param {string | Uint8Array} value - The value to store.
518
- * @param {DictionarySetFieldOptions} [options]
516
+ * @param {DictionarySetFieldOptions} options
519
517
  * @param {CollectionTtl} [options.ttl] - How the TTL should be managed.
520
- * Refreshes the dictionary's TTL using the client's default if this is not supplied.
521
- * @param {boolean} [options.compress=false] - Whether to compress the value. Defaults to false.
518
+ * Refreshes the dictionary's TTL using the client's default if this is not
519
+ * supplied.
522
520
  * @returns {Promise<CacheDictionarySetField.Response>} -
523
521
  * {@link CacheDictionarySetField.Success} on success.
524
522
  * {@link CacheDictionarySetField.Error} on failure.
@@ -532,11 +530,10 @@ export declare abstract class AbstractCacheClient implements ICacheClient {
532
530
  * @param {string} dictionaryName - The dictionary to add to.
533
531
  * @param {Map<string | Uint8Array, string | Uint8Array>} elements - The
534
532
  * elements to set.
535
- * @param {DictionarySetFieldsOptions} [options]
533
+ * @param {DictionarySetFieldsOptions} options
536
534
  * @param {CollectionTtl} [options.ttl] - How the TTL should be managed.
537
535
  * Refreshes the dictionary's TTL using the client's default if this is not
538
536
  * supplied.
539
- * @param {boolean} [options.compress=false] - Whether to compress the values. Defaults to false.
540
537
  * @returns {Promise<CacheDictionarySetFields.Response>} -
541
538
  * {@link CacheDictionarySetFields.Success} on success.
542
539
  * {@link CacheDictionarySetFields.Error} on failure.
@@ -548,30 +545,26 @@ export declare abstract class AbstractCacheClient implements ICacheClient {
548
545
  * @param {string} cacheName - The cache containing the dictionary.
549
546
  * @param {string} dictionaryName - The dictionary to look up.
550
547
  * @param {string | Uint8Array} field - The field to look up.
551
- * @param {DictionaryGetFieldOptions} [options]
552
- * @param {boolean} [options.decompress=false] - Whether to decompress the value. Defaults to false.
553
548
  * @returns {Promise<CacheDictionaryGetField.Response>} -
554
549
  * {@link CacheDictionaryGetField.Hit} containing the dictionary element if
555
550
  * one is found.
556
551
  * {@link CacheDictionaryGetField.Miss} if the dictionary does not exist.
557
552
  * {@link CacheDictionaryGetField.Error} on failure.
558
553
  */
559
- dictionaryGetField(cacheName: string, dictionaryName: string, field: string | Uint8Array, options?: DictionaryGetFieldOptions): Promise<CacheDictionaryGetField.Response>;
554
+ dictionaryGetField(cacheName: string, dictionaryName: string, field: string | Uint8Array): Promise<CacheDictionaryGetField.Response>;
560
555
  /**
561
556
  * Gets multiple values from the given dictionary.
562
557
  *
563
558
  * @param {string} cacheName - The cache containing the dictionary.
564
559
  * @param {string} dictionaryName - The dictionary to look up.
565
560
  * @param {string[] | Uint8Array[]} fields - The fields to look up.
566
- * @param {DictionaryGetFieldsOptions} [options]
567
- * @param {boolean} [options.decompress=false] - Whether to decompress the values. Defaults to false.
568
561
  * @returns {Promise<CacheDictionaryGetFields.Response>} -
569
562
  * {@link CacheDictionaryGetFields.Hit} containing the dictionary elements if
570
563
  * the dictionary exists.
571
564
  * {@link CacheDictionaryGetFields.Miss} if the dictionary does not exist.
572
565
  * {@link CacheDictionaryGetFields.Error} on failure.
573
566
  */
574
- dictionaryGetFields(cacheName: string, dictionaryName: string, fields: string[] | Uint8Array[], options?: DictionaryGetFieldsOptions): Promise<CacheDictionaryGetFields.Response>;
567
+ dictionaryGetFields(cacheName: string, dictionaryName: string, fields: string[] | Uint8Array[]): Promise<CacheDictionaryGetFields.Response>;
575
568
  /**
576
569
  * Removes an element from the given dictionary.
577
570
  *
@@ -577,17 +577,15 @@ class AbstractCacheClient {
577
577
  *
578
578
  * @param {string} cacheName - The cache to perform the lookup in.
579
579
  * @param {string} dictionaryName - The dictionary to fetch.
580
- * @param {DictionaryFetchOptions} [options]
581
- * @param {boolean} [options.decompress=false] - Whether to decompress the values. Defaults to false.
582
580
  * @returns {Promise<CacheDictionaryFetch.Response>} -
583
581
  * {@link CacheDictionaryFetch.Hit} containing the dictionary elements if the
584
582
  * dictionary exists.
585
583
  * {@link CacheDictionaryFetch.Miss} if the dictionary does not exist.
586
584
  * {@link CacheDictionaryFetch.Error} on failure.
587
585
  */
588
- async dictionaryFetch(cacheName, dictionaryName, options) {
586
+ async dictionaryFetch(cacheName, dictionaryName) {
589
587
  const client = this.getNextDataClient();
590
- return await client.dictionaryFetch(cacheName, dictionaryName, options);
588
+ return await client.dictionaryFetch(cacheName, dictionaryName);
591
589
  }
592
590
  /**
593
591
  * Adds an integer quantity to a field value.
@@ -620,17 +618,17 @@ class AbstractCacheClient {
620
618
  * @param {string} dictionaryName - The dictionary to add to.
621
619
  * @param {string | Uint8Array} field - The field to set.
622
620
  * @param {string | Uint8Array} value - The value to store.
623
- * @param {DictionarySetFieldOptions} [options]
621
+ * @param {DictionarySetFieldOptions} options
624
622
  * @param {CollectionTtl} [options.ttl] - How the TTL should be managed.
625
- * Refreshes the dictionary's TTL using the client's default if this is not supplied.
626
- * @param {boolean} [options.compress=false] - Whether to compress the value. Defaults to false.
623
+ * Refreshes the dictionary's TTL using the client's default if this is not
624
+ * supplied.
627
625
  * @returns {Promise<CacheDictionarySetField.Response>} -
628
626
  * {@link CacheDictionarySetField.Success} on success.
629
627
  * {@link CacheDictionarySetField.Error} on failure.
630
628
  */
631
629
  async dictionarySetField(cacheName, dictionaryName, field, value, options) {
632
630
  const client = this.getNextDataClient();
633
- return await client.dictionarySetField(cacheName, dictionaryName, field, value, options);
631
+ return await client.dictionarySetField(cacheName, dictionaryName, field, value, options === null || options === void 0 ? void 0 : options.ttl);
634
632
  }
635
633
  /**
636
634
  * Adds multiple elements to the given dictionary. Creates the dictionary if
@@ -640,18 +638,17 @@ class AbstractCacheClient {
640
638
  * @param {string} dictionaryName - The dictionary to add to.
641
639
  * @param {Map<string | Uint8Array, string | Uint8Array>} elements - The
642
640
  * elements to set.
643
- * @param {DictionarySetFieldsOptions} [options]
641
+ * @param {DictionarySetFieldsOptions} options
644
642
  * @param {CollectionTtl} [options.ttl] - How the TTL should be managed.
645
643
  * Refreshes the dictionary's TTL using the client's default if this is not
646
644
  * supplied.
647
- * @param {boolean} [options.compress=false] - Whether to compress the values. Defaults to false.
648
645
  * @returns {Promise<CacheDictionarySetFields.Response>} -
649
646
  * {@link CacheDictionarySetFields.Success} on success.
650
647
  * {@link CacheDictionarySetFields.Error} on failure.
651
648
  */
652
649
  async dictionarySetFields(cacheName, dictionaryName, elements, options) {
653
650
  const client = this.getNextDataClient();
654
- return await client.dictionarySetFields(cacheName, dictionaryName, elements, options);
651
+ return await client.dictionarySetFields(cacheName, dictionaryName, elements, options === null || options === void 0 ? void 0 : options.ttl);
655
652
  }
656
653
  /**
657
654
  * Gets the value stored for the given dictionary and field.
@@ -659,17 +656,15 @@ class AbstractCacheClient {
659
656
  * @param {string} cacheName - The cache containing the dictionary.
660
657
  * @param {string} dictionaryName - The dictionary to look up.
661
658
  * @param {string | Uint8Array} field - The field to look up.
662
- * @param {DictionaryGetFieldOptions} [options]
663
- * @param {boolean} [options.decompress=false] - Whether to decompress the value. Defaults to false.
664
659
  * @returns {Promise<CacheDictionaryGetField.Response>} -
665
660
  * {@link CacheDictionaryGetField.Hit} containing the dictionary element if
666
661
  * one is found.
667
662
  * {@link CacheDictionaryGetField.Miss} if the dictionary does not exist.
668
663
  * {@link CacheDictionaryGetField.Error} on failure.
669
664
  */
670
- async dictionaryGetField(cacheName, dictionaryName, field, options) {
665
+ async dictionaryGetField(cacheName, dictionaryName, field) {
671
666
  const client = this.getNextDataClient();
672
- return await client.dictionaryGetField(cacheName, dictionaryName, field, options);
667
+ return await client.dictionaryGetField(cacheName, dictionaryName, field);
673
668
  }
674
669
  /**
675
670
  * Gets multiple values from the given dictionary.
@@ -677,17 +672,15 @@ class AbstractCacheClient {
677
672
  * @param {string} cacheName - The cache containing the dictionary.
678
673
  * @param {string} dictionaryName - The dictionary to look up.
679
674
  * @param {string[] | Uint8Array[]} fields - The fields to look up.
680
- * @param {DictionaryGetFieldsOptions} [options]
681
- * @param {boolean} [options.decompress=false] - Whether to decompress the values. Defaults to false.
682
675
  * @returns {Promise<CacheDictionaryGetFields.Response>} -
683
676
  * {@link CacheDictionaryGetFields.Hit} containing the dictionary elements if
684
677
  * the dictionary exists.
685
678
  * {@link CacheDictionaryGetFields.Miss} if the dictionary does not exist.
686
679
  * {@link CacheDictionaryGetFields.Error} on failure.
687
680
  */
688
- async dictionaryGetFields(cacheName, dictionaryName, fields, options) {
681
+ async dictionaryGetFields(cacheName, dictionaryName, fields) {
689
682
  const client = this.getNextDataClient();
690
- return await client.dictionaryGetFields(cacheName, dictionaryName, fields, options);
683
+ return await client.dictionaryGetFields(cacheName, dictionaryName, fields);
691
684
  }
692
685
  /**
693
686
  * Removes an element from the given dictionary.
@@ -1081,4 +1074,4 @@ class AbstractCacheClient {
1081
1074
  }
1082
1075
  }
1083
1076
  exports.AbstractCacheClient = AbstractCacheClient;
1084
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RDYWNoZUNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pbnRlcm5hbC9jbGllbnRzL2NhY2hlL0Fic3RyYWN0Q2FjaGVDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMENBdUV3QjtBQThCeEIsbURBQTZDO0FBRTdDLE1BQXNCLG1CQUFtQjtJQVN2QyxZQUNFLGFBQTZCLEVBQzdCLFdBQTBCLEVBQzFCLFVBQXdCO1FBRXhCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBRTdCLDRFQUE0RTtRQUM1RSx5RUFBeUU7UUFDekUsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFpQjtRQUM1QixPQUFPLElBQUksNEJBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUk7O1FBQ2YsT0FBTyxNQUFNLENBQUEsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxJQUFJLEVBQUUsQ0FBQSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBaUI7UUFDeEMsT0FBTyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFpQjtRQUN4QyxPQUFPLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJ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LEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxLQUFLLENBQUMsV0FBVyxDQUN0QixTQUFpQixFQUNqQixHQUF3QixFQUN4QixlQUF1QjtRQUV2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN4QyxPQUFPLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksS0FBSyxDQUFDLFdBQVcsQ0FDdEIsU0FBaUIsRUFDakIsR0FBd0IsRUFDeEIsZUFBdUI7UUFFdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDeEMsT0FBTyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRVMsaUJBQWlCO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLG1CQUFtQjtZQUN0QixDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUMzRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBR0Y7QUE3Z0RELGtEQTZnREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDcmVhdGVDYWNoZSxcbiAgRGVsZXRlQ2FjaGUsXG4gIExpc3RDYWNoZXMsXG4gIENhY2hlRmx1c2gsXG4gIENhY2hlR2V0LFxuICBDYWNoZVNldCxcbiAgQ2FjaGVEZWxldGUsXG4gIENhY2hlSW5jcmVtZW50LFxuICBJbmNyZW1lbnRPcHRpb25zLFxuICBDYWNoZVNldElmTm90RXhpc3RzLFxuICBTZXRJZk5vdEV4aXN0c09wdGlvbnMsXG4gIFNldElmQWJzZW50T3B0aW9ucyxcbiAgU2V0SWZQcmVzZW50T3B0aW9ucyxcbiAgU2V0SWZFcXVhbE9wdGlvbnMsXG4gIFNldElmTm90RXF1YWxPcHRpb25zLFxuICBTZXRJZlByZXNlbnRBbmROb3RFcXVhbE9wdGlvbnMsXG4gIFNldElmQWJzZW50T3JFcXVhbE9wdGlvbnMsXG4gIENhY2hlU2V0RmV0Y2gsXG4gIENhY2hlU2V0QWRkRWxlbWVudCxcbiAgQ2FjaGVTZXRBZGRFbGVtZW50cyxcbiAgQ2FjaGVTZXRSZW1vdmVFbGVtZW50LFxuICBDYWNoZVNldFJlbW92ZUVsZW1lbnRzLFxuICBDYWNoZUxpc3RGZXRjaCxcbiAgQ2FjaGVMaXN0TGVuZ3RoLFxuICBDYWNoZUxpc3RQdXNoRnJvbnQsXG4gIENhY2hlTGlzdFB1c2hCYWNrLFxuICBDYWNoZUxpc3RDb25jYXRlbmF0ZUJhY2ssXG4gIENhY2hlTGlzdENvbmNhdGVuYXRlRnJvbnQsXG4gIENhY2hlTGlzdFBvcEJhY2ssXG4gIENhY2hlTGlzdFBvcEZyb250LFxuICBDYWNoZUxpc3RSZW1vdmVWYWx1ZSxcbiAgQ2FjaGVMaXN0UmV0YWluLFxuICBDYWNoZURpY3Rpb25hcnlTZXRGaWVsZCxcbiAgQ2FjaGVEaWN0aW9uYXJ5U2V0RmllbGRzLFxuICBDYWNoZURpY3Rpb25hcnlHZXRGaWVsZCxcbiAgQ2FjaGVEaWN0aW9uYXJ5R2V0RmllbGRzLFxuICBDYWNoZURpY3Rpb25hcnlJbmNyZW1lbnQsXG4gIENhY2hlRGljdGlvbmFyeUZldGNoLFxuICBDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZCxcbiAgQ2FjaGVEaWN0aW9uYXJ5UmVtb3ZlRmllbGRzLFxuICBDYWNoZURpY3Rpb25hcnlMZW5ndGgsXG4gIENhY2hlU29ydGVkU2V0RmV0Y2gsXG4gIENhY2hlU29ydGVkU2V0UHV0RWxlbWVudCxcbiAgQ2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50cyxcbiAgQ2FjaGVTb3J0ZWRTZXRHZXRSYW5rLFxuICBDYWNoZVNvcnRlZFNldEdldFNjb3JlLFxuICBDYWNoZVNvcnRlZFNldEdldFNjb3JlcyxcbiAgQ2FjaGVTb3J0ZWRTZXRJbmNyZW1lbnRTY29yZSxcbiAgQ2FjaGVTb3J0ZWRTZXRSZW1vdmVFbGVtZW50LFxuICBDYWNoZVNvcnRlZFNldFJlbW92ZUVsZW1lbnRzLFxuICBDYWNoZVNvcnRlZFNldExlbmd0aCxcbiAgQ2FjaGVTb3J0ZWRTZXRMZW5ndGhCeVNjb3JlLFxuICBTb3J0ZWRTZXRPcmRlcixcbiAgQ2FjaGVJdGVtR2V0VHRsLFxuICBDYWNoZUl0ZW1HZXRUeXBlLFxuICBDYWNoZUtleUV4aXN0cyxcbiAgQ2FjaGVLZXlzRXhpc3QsXG4gIENhY2hlVXBkYXRlVHRsLFxuICBDYWNoZUluY3JlYXNlVHRsLFxuICBDYWNoZURlY3JlYXNlVHRsLFxuICBHZXRCYXRjaCxcbiAgU2V0QmF0Y2gsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBDYWNoZVNldElmQWJzZW50LFxuICBDYWNoZVNldElmUHJlc2VudCxcbiAgQ2FjaGVTZXRJZkVxdWFsLFxuICBDYWNoZVNldElmTm90RXF1YWwsXG4gIENhY2hlU2V0SWZQcmVzZW50QW5kTm90RXF1YWwsXG4gIENhY2hlU2V0SWZBYnNlbnRPckVxdWFsLFxuICBDYWNoZVNldFNhbXBsZSxcbn0gZnJvbSAnLi4vLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHtMaXN0RmV0Y2hDYWxsT3B0aW9ucywgTGlzdFJldGFpbkNhbGxPcHRpb25zfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQge1xuICBJQ2FjaGVDbGllbnQsXG4gIFNldE9wdGlvbnMsXG4gIFNldEFkZEVsZW1lbnRPcHRpb25zLFxuICBTZXRBZGRFbGVtZW50c09wdGlvbnMsXG4gIExpc3RQdXNoRnJvbnRPcHRpb25zLFxuICBMaXN0UHVzaEJhY2tPcHRpb25zLFxuICBMaXN0Q29uY2F0ZW5hdGVCYWNrT3B0aW9ucyxcbiAgTGlzdENvbmNhdGVuYXRlRnJvbnRPcHRpb25zLFxuICBEaWN0aW9uYXJ5R2V0RmllbGRPcHRpb25zLFxuICBEaWN0aW9uYXJ5R2V0RmllbGRzT3B0aW9ucyxcbiAgRGljdGlvbmFyeUZldGNoT3B0aW9ucyxcbiAgRGljdGlvbmFyeVNldEZpZWxkT3B0aW9ucyxcbiAgRGljdGlvbmFyeVNldEZpZWxkc09wdGlvbnMsXG4gIERpY3Rpb25hcnlJbmNyZW1lbnRPcHRpb25zLFxuICBTb3J0ZWRTZXRGZXRjaEJ5UmFua09wdGlvbnMsXG4gIFNvcnRlZFNldFB1dEVsZW1lbnRPcHRpb25zLFxuICBTb3J0ZWRTZXRQdXRFbGVtZW50c09wdGlvbnMsXG4gIFNvcnRlZFNldEZldGNoQnlTY29yZU9wdGlvbnMsXG4gIFNvcnRlZFNldEluY3JlbWVudE9wdGlvbnMsXG4gIFNvcnRlZFNldExlbmd0aEJ5U2NvcmVPcHRpb25zLFxuICBTZXRCYXRjaE9wdGlvbnMsXG4gIEdldE9wdGlvbnMsXG59IGZyb20gJy4uLy4uLy4uL2NsaWVudHMvSUNhY2hlQ2xpZW50JztcbmltcG9ydCB7SUNvbnRyb2xDbGllbnR9IGZyb20gJy4vSUNvbnRyb2xDbGllbnQnO1xuaW1wb3J0IHtJRGF0YUNsaWVudH0gZnJvbSAnLi9JRGF0YUNsaWVudCc7XG5pbXBvcnQge0lQaW5nQ2xpZW50fSBmcm9tICcuL0lQaW5nQ2xpZW50JztcbmltcG9ydCB7SU1vbWVudG9DYWNoZX0gZnJvbSAnLi4vLi4vLi4vY2xpZW50cy9JTW9tZW50b0NhY2hlJztcbmltcG9ydCB7TW9tZW50b0NhY2hlfSBmcm9tICcuL21vbWVudG8tY2FjaGUnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDYWNoZUNsaWVudCBpbXBsZW1lbnRzIElDYWNoZUNsaWVudCB7XG4gIC8vIG1ha2luZyB0aGVzZSBwcm90ZWN0ZWQgdW50aWwgd2UgZnVsbHkgYWJzdHJhY3QgYXdheSB0aGUgbm9kZWpzIGNsaWVudFxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udHJvbENsaWVudDogSUNvbnRyb2xDbGllbnQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhQ2xpZW50czogSURhdGFDbGllbnRbXTtcbiAgLy8gVE9ETzogTWFrZSBwaW5nQ2xpZW50IHJlcXVpcmVkIGlmIGFuZCB3aGVuIHRoZSBub2RlanMgc2lkZSBzdGFydHMgYWRkaW5nXG4gIC8vICBvbmUgYXMgd2VsbFxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGluZ0NsaWVudD86IElQaW5nQ2xpZW50O1xuICBwcm90ZWN0ZWQgbmV4dERhdGFDbGllbnRJbmRleDogbnVtYmVyO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBjb250cm9sQ2xpZW50OiBJQ29udHJvbENsaWVudCxcbiAgICBkYXRhQ2xpZW50czogSURhdGFDbGllbnRbXSxcbiAgICBwaW5nQ2xpZW50PzogSVBpbmdDbGllbnRcbiAgKSB7XG4gICAgdGhpcy5jb250cm9sQ2xpZW50ID0gY29udHJvbENsaWVudDtcbiAgICB0aGlzLmRhdGFDbGllbnRzID0gZGF0YUNsaWVudHM7XG4gICAgdGhpcy5waW5nQ2xpZW50ID0gcGluZ0NsaWVudDtcblxuICAgIC8vIFdlIHJvdW5kLXJvYmluIHRoZSByZXF1ZXN0cyB0aHJvdWdoIGFsbCBvZiBvdXIgY2xpZW50cy4gIFNpbmNlIGphdmFzY3JpcHRcbiAgICAvLyBpcyBzaW5nbGUtdGhyZWFkZWQsIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhyZWFkIHNhZmV0eSBvbiB0aGlzXG4gICAgLy8gaW5kZXggdmFyaWFibGUuXG4gICAgdGhpcy5uZXh0RGF0YUNsaWVudEluZGV4ID0gMDtcbiAgfVxuXG4gIHB1YmxpYyBjYWNoZShjYWNoZU5hbWU6IHN0cmluZyk6IElNb21lbnRvQ2FjaGUge1xuICAgIHJldHVybiBuZXcgTW9tZW50b0NhY2hlKHRoaXMsIGNhY2hlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUGluZyB0aGUgc2VydmljZSB0byB2ZXJpZnkgaXQgaXMgdXAgYW5kIHJ1bm5pbmdcbiAgICovXG4gIHB1YmxpYyBhc3luYyBwaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnBpbmdDbGllbnQ/LnBpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2FjaGUgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gYmUgY3JlYXRlZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q3JlYXRlQ2FjaGUuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDcmVhdGVDYWNoZS5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ3JlYXRlQ2FjaGUuQWxyZWFkeUV4aXN0c30gaWYgdGhlIGNhY2hlIGFscmVhZHkgZXhpc3RzLlxuICAgKiB7QGxpbmsgQ3JlYXRlQ2FjaGUuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlQ2FjaGUoY2FjaGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPENyZWF0ZUNhY2hlLlJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29udHJvbENsaWVudC5jcmVhdGVDYWNoZShjYWNoZU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBjYWNoZSBhbmQgYWxsIGl0ZW1zIHN0b3JlZCBpbiBpdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERlbGV0ZUNhY2hlLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgRGVsZXRlQ2FjaGUuU3VjY2Vzc30gb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIERlbGV0ZUNhY2hlLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUNhY2hlKGNhY2hlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxEZWxldGVDYWNoZS5SZXNwb25zZT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbnRyb2xDbGllbnQuZGVsZXRlQ2FjaGUoY2FjaGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyBhbGwgY2FjaGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMaXN0Q2FjaGVzLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgTGlzdENhY2hlcy5TdWNjZXNzfSBjb250YWluaW5nIHRoZSBsaXN0IG9uIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBMaXN0Q2FjaGVzLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3RDYWNoZXMoKTogUHJvbWlzZTxMaXN0Q2FjaGVzLlJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29udHJvbENsaWVudC5saXN0Q2FjaGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdmFsdWUgc3RvcmVkIGZvciB0aGUgZ2l2ZW4ga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHBlcmZvcm0gdGhlIGxvb2t1cCBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBrZXkgLSBUaGUga2V5IHRvIGxvb2sgdXAuXG4gICAqIEBwYXJhbSB7R2V0T3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7ZGVjb21wcmVzc30gW29wdGlvbnMuZGVjb21wcmVzcz1mYWxzZV0gLSBXaGV0aGVyIHRvIGRlY29tcHJlc3MgdGhlIHZhbHVlLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVHZXQuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZUdldC5IaXR9IGNvbnRhaW5pbmcgdGhlIHZhbHVlIGlmIG9uZSBpcyBmb3VuZC5cbiAgICoge0BsaW5rIENhY2hlR2V0Lk1pc3N9IGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZUdldC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBHZXRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVHZXQuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpLmdldChjYWNoZU5hbWUsIGtleSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQXNzb2NpYXRlcyB0aGUgZ2l2ZW4ga2V5IHdpdGggdGhlIGdpdmVuIHZhbHVlLiBJZiBhIHZhbHVlIGZvciB0aGUga2V5IGlzXG4gICAqIGFscmVhZHkgcHJlc2VudCBpdCBpcyByZXBsYWNlZCB3aXRoIHRoZSBuZXcgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIHZhbHVlIGluLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGtleSAtIFRoZSBrZXkgdG8gc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0b3JlZC5cbiAgICogQHBhcmFtIHtTZXRPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnR0bF0gLSBUaGUgdGltZSB0byBsaXZlIGZvciB0aGUgaXRlbSBpbiB0aGUgY2FjaGUuXG4gICAqIFVzZXMgdGhlIGNsaWVudCdzIGRlZmF1bHQgVFRMIGlmIHRoaXMgaXMgbm90IHN1cHBsaWVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNvbXByZXNzPWZhbHNlXSAtIFdoZXRoZXIgdG8gY29tcHJlc3MgdGhlIHZhbHVlLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTZXQuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZVNldC5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXQuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0T3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0LlJlc3BvbnNlPiB7XG4gICAgLy8gdGhpcyB0eXBlb2YgY2hlY2sgd291bGRuJ3QgYmUgbmVjZXNzYXJ5IGluIFRTLCBidXQgaXQgY2FuIGhlbHAgY2F0Y2ggYnVncyBpbiBKUyBjb2RlIGF0IHJ1bnRpbWUuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICAnT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIGEgdHRsIHByb3BlcnR5LidcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNldChjYWNoZU5hbWUsIGtleSwgdmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdpdmVuIGtleSBmcm9tIHRoZSBjYWNoZS4gVGhlIGtleSBjYW4gcmVwcmVzZW50IGEgc2luZ2xlIHZhbHVlXG4gICAqIG9yIGEgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBkZWxldGUgZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBrZXkgLSBUaGUga2V5IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVEZWxldGUuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZURlbGV0ZS5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVEZWxldGUuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGVsZXRlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlRGVsZXRlLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuZGVsZXRlKGNhY2hlTmFtZSwga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBzdG9yZWQgZm9yIHRoZSBnaXZlbiBrZXlzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHBlcmZvcm0gdGhlIGxvb2t1cCBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXX0ga2V5cyAtIFRoZSBsaXN0IG9mIGtleXMgdG8gbG9vayB1cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8R2V0QmF0Y2guUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBHZXRCYXRjaC5TdWNjZXNzfSBjb250YWluaW5nIHRoZSB2YWx1ZXMgaWYgdGhleSB3ZXJlIGZvdW5kLlxuICAgKiB7QGxpbmsgR2V0QmF0Y2guRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QmF0Y2goXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5czogQXJyYXk8c3RyaW5nIHwgVWludDhBcnJheT5cbiAgKTogUHJvbWlzZTxHZXRCYXRjaC5SZXNwb25zZT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldE5leHREYXRhQ2xpZW50KCkuZ2V0QmF0Y2goY2FjaGVOYW1lLCBrZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NvY2lhdGVzIHRoZSBnaXZlbiBrZXlzIHdpdGggdGhlIGdpdmVuIHZhbHVlcy4gSWYgYSB2YWx1ZSBmb3IgdGhlIGtleSBpc1xuICAgKiBhbHJlYWR5IHByZXNlbnQgaXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmV3IHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHN0b3JlIHRoZSB2YWx1ZXMgaW4uXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgVWludDhBcnJheT4gfCBNYXA8c3RyaW5nIHwgVWludDhBcnJheSwgc3RyaW5nIHwgVWludDhBcnJheT59IGl0ZW1zIC0gVGhlIGtleS12YWx1ZSBwYWlycyB0byBiZSBzdG9yZWQuXG4gICAqIEBwYXJhbSB7U2V0T3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50dGxdIC0gVGhlIHRpbWUgdG8gbGl2ZSBmb3IgdGhlIGl0ZW1zIGluIHRoZSBjYWNoZS5cbiAgICogVXNlcyB0aGUgY2xpZW50J3MgZGVmYXVsdCBUVEwgaWYgdGhpcyBpcyBub3Qgc3VwcGxpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU2V0LlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgU2V0QmF0Y2guU3VjY2Vzc30gb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIFNldEJhdGNoLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldEJhdGNoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGl0ZW1zOlxuICAgICAgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBVaW50OEFycmF5PlxuICAgICAgfCBNYXA8c3RyaW5nIHwgVWludDhBcnJheSwgc3RyaW5nIHwgVWludDhBcnJheT4sXG4gICAgb3B0aW9ucz86IFNldEJhdGNoT3B0aW9uc1xuICApOiBQcm9taXNlPFNldEJhdGNoLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2V0QmF0Y2goY2FjaGVOYW1lLCBpdGVtcywgb3B0aW9ucz8udHRsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG11bHRpcGxlIGVsZW1lbnRzIHRvIHRoZSBiYWNrIG9mIHRoZSBnaXZlbiBsaXN0LiBDcmVhdGVzIHRoZSBsaXN0IGlmXG4gICAqIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIGxpc3QgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaXN0TmFtZSAtIFRoZSBsaXN0IHRvIGFkZCB0by5cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXX0gdmFsdWVzIC0gVGhlIGVsZW1lbnRzIHRvIGFkZCB0byB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHtMaXN0Q29uY2F0ZW5hdGVCYWNrT3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50cnVuY2F0ZUZyb250VG9TaXplXSAtIElmIHRoZSBsaXN0IGV4Y2VlZHMgdGhpc1xuICAgKiBsZW5ndGgsIHJlbW92ZSBleGNlc3MgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuIE11c3QgYmUgcG9zaXRpdmUuXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvblR0bH0gW29wdGlvbnMudHRsXSAtIEhvdyB0aGUgVFRMIHNob3VsZCBiZSBtYW5hZ2VkLlxuICAgKiBSZWZyZXNoZXMgdGhlIGxpc3QncyBUVEwgdXNpbmcgdGhlIGNsaWVudCdzIGRlZmF1bHQgaWYgdGhpcyBpcyBub3RcbiAgICogc3VwcGxpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlTGlzdENvbmNhdGVuYXRlQmFjay5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlTGlzdENvbmNhdGVuYXRlQmFjay5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0Q29uY2F0ZW5hdGVCYWNrLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3RDb25jYXRlbmF0ZUJhY2soXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdLFxuICAgIG9wdGlvbnM/OiBMaXN0Q29uY2F0ZW5hdGVCYWNrT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlTGlzdENvbmNhdGVuYXRlQmFjay5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50Lmxpc3RDb25jYXRlbmF0ZUJhY2soXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBsaXN0TmFtZSxcbiAgICAgIHZhbHVlcyxcbiAgICAgIG9wdGlvbnM/LnRydW5jYXRlRnJvbnRUb1NpemUsXG4gICAgICBvcHRpb25zPy50dGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgbXVsdGlwbGUgZWxlbWVudHMgdG8gdGhlIGZyb250IG9mIHRoZSBnaXZlbiBsaXN0LiBDcmVhdGVzIHRoZSBsaXN0IGlmXG4gICAqIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIGxpc3QgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaXN0TmFtZSAtIFRoZSBsaXN0IHRvIGFkZCB0by5cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXX0gdmFsdWVzIC0gVGhlIGVsZW1lbnRzIHRvIGFkZCB0byB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHtMaXN0Q29uY2F0ZW5hdGVGcm9udE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudHJ1bmNhdGVCYWNrVG9TaXplXSAtIElmIHRoZSBsaXN0IGV4Y2VlZHMgdGhpc1xuICAgKiBsZW5ndGgsIHJlbW92ZSBleGNlc3MgZnJvbSB0aGUgYmFjayBvZiB0aGUgbGlzdC4gTXVzdCBiZSBwb3NpdGl2ZS5cbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVHRsfSBbb3B0aW9ucy50dGxdIC0gSG93IHRoZSBUVEwgc2hvdWxkIGJlIG1hbmFnZWQuXG4gICAqIFJlZnJlc2hlcyB0aGUgbGlzdCdzIFRUTCB1c2luZyB0aGUgY2xpZW50J3MgZGVmYXVsdCBpZiB0aGlzIGlzIG5vdFxuICAgKiBzdXBwbGllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVMaXN0Q29uY2F0ZW5hdGVGcm9udC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlTGlzdENvbmNhdGVuYXRlRnJvbnQuU3VjY2Vzc30gb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlTGlzdENvbmNhdGVuYXRlRnJvbnQuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbGlzdENvbmNhdGVuYXRlRnJvbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdLFxuICAgIG9wdGlvbnM/OiBMaXN0Q29uY2F0ZW5hdGVGcm9udE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RDb25jYXRlbmF0ZUZyb250LlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQubGlzdENvbmNhdGVuYXRlRnJvbnQoXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBsaXN0TmFtZSxcbiAgICAgIHZhbHVlcyxcbiAgICAgIG9wdGlvbnM/LnRydW5jYXRlQmFja1RvU2l6ZSxcbiAgICAgIG9wdGlvbnM/LnR0bFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbGwgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpc3ROYW1lIC0gVGhlIGxpc3QgdG8gZmV0Y2guXG4gICAqIEBwYXJhbSB7TGlzdEZldGNoQ2FsbE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc3RhcnRJbmRleF0gLSBTdGFydCBpbmNsdXNpdmUgaW5kZXggZm9yIGZldGNoIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmVuZEluZGV4XSAtIEVuZCBleGNsdXNpdmUgaW5kZXggZm9yIGZldGNoIG9wZXJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVMaXN0RmV0Y2guUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZUxpc3RGZXRjaC5IaXR9IGNvbnRhaW5pbmcgdGhlIGxpc3QgZWxlbWVudHMgaWYgdGhlIGxpc3QgZXhpc3RzLlxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0RmV0Y2guTWlzc30gaWYgdGhlIGxpc3QgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZUxpc3RGZXRjaC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0RmV0Y2goXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTGlzdEZldGNoQ2FsbE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RGZXRjaC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50Lmxpc3RGZXRjaChcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGxpc3ROYW1lLFxuICAgICAgb3B0aW9ucz8uc3RhcnRJbmRleCxcbiAgICAgIG9wdGlvbnM/LmVuZEluZGV4XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGdpdmVuIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpc3ROYW1lIC0gVGhlIGxpc3QgdG8gZ2V0IHRoZSBsZW5ndGggb2YuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlTGlzdExlbmd0aC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlTGlzdExlbmd0aC5IaXR9IGNvbnRhaW5pbmcgdGhlIGxlbmd0aCBpZiB0aGUgbGlzdCBleGlzdHMuXG4gICAqIHtAbGluayBDYWNoZUxpc3RMZW5ndGguTWlzc30gaWYgdGhlIGxpc3QgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZUxpc3RMZW5ndGguRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbGlzdExlbmd0aChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0TGVuZ3RoLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQubGlzdExlbmd0aChjYWNoZU5hbWUsIGxpc3ROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCByZW1vdmVzIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlIGdpdmVuIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpc3ROYW1lIC0gVGhlIGxpc3QgdG8gcG9wLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUxpc3RQb3BCYWNrLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0UG9wQmFjay5IaXR9IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQgaWYgdGhlIGxpc3QgZXhpc3RzLlxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0UG9wQmFjay5NaXNzfSBpZiB0aGUgbGlzdCBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlTGlzdFBvcEJhY2suRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbGlzdFBvcEJhY2soXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPENhY2hlTGlzdFBvcEJhY2suUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5saXN0UG9wQmFjayhjYWNoZU5hbWUsIGxpc3ROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCByZW1vdmVzIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIGxpc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaXN0TmFtZSAtIFRoZSBsaXN0IHRvIHBvcC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVMaXN0UG9wRnJvbnQuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZUxpc3RQb3BGcm9udC5IaXR9IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQgaWYgdGhlIGxpc3QgZXhpc3RzLlxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0UG9wRnJvbnQuTWlzc30gaWYgdGhlIGxpc3QgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZUxpc3RQb3BGcm9udC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0UG9wRnJvbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPENhY2hlTGlzdFBvcEZyb250LlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQubGlzdFBvcEZyb250KGNhY2hlTmFtZSwgbGlzdE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZWxlbWVudCB0byB0aGUgYmFjayBvZiB0aGUgZ2l2ZW4gbGlzdC4gQ3JlYXRlcyB0aGUgbGlzdCBpZlxuICAgKiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHN0b3JlIHRoZSBsaXN0IGluLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGlzdE5hbWUgLSBUaGUgbGlzdCB0byBwdXNoIHRvLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHB1c2guXG4gICAqIEBwYXJhbSB7TGlzdFB1c2hCYWNrT3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50cnVuY2F0ZUZyb250VG9TaXplXSAtIElmIHRoZSBsaXN0IGV4Y2VlZHMgdGhpc1xuICAgKiBsZW5ndGgsIHJlbW92ZSBleGNlc3MgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuIE11c3QgYmUgcG9zaXRpdmUuXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvblR0bH0gW29wdGlvbnMudHRsXSAtIEhvdyB0aGUgVFRMIHNob3VsZCBiZSBtYW5hZ2VkLlxuICAgKiBSZWZyZXNoZXMgdGhlIGxpc3QncyBUVEwgdXNpbmcgdGhlIGNsaWVudCdzIGRlZmF1bHQgaWYgdGhpcyBpcyBub3RcbiAgICogc3VwcGxpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlTGlzdFB1c2hCYWNrLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0UHVzaEJhY2suU3VjY2Vzc30gY29udGFpbmluZyB0aGUgbGlzdCdzIG5ldyBsZW5ndGggb25cbiAgICogc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlTGlzdFB1c2hCYWNrLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3RQdXNoQmFjayhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBMaXN0UHVzaEJhY2tPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UHVzaEJhY2suUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5saXN0UHVzaEJhY2soXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBsaXN0TmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgb3B0aW9ucz8udHJ1bmNhdGVGcm9udFRvU2l6ZSxcbiAgICAgIG9wdGlvbnM/LnR0bFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBlbGVtZW50IHRvIHRoZSBmcm9udCBvZiB0aGUgZ2l2ZW4gbGlzdC4gQ3JlYXRlcyB0aGUgbGlzdCBpZlxuICAgKiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHN0b3JlIHRoZSBsaXN0IGluLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGlzdE5hbWUgLSBUaGUgbGlzdCB0byBwdXNoIHRvLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHB1c2guXG4gICAqIEBwYXJhbSB7TGlzdFB1c2hGcm9udE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudHJ1bmNhdGVCYWNrVG9TaXplXSAtIElmIHRoZSBsaXN0IGV4Y2VlZHMgdGhpc1xuICAgKiBsZW5ndGgsIHJlbW92ZSBleGNlc3MgZnJvbSB0aGUgZW5kIG9mIHRoZSBsaXN0LiBNdXN0IGJlIHBvc2l0aXZlLlxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25UdGx9IFtvcHRpb25zLnR0bF0gLSBIb3cgdGhlIFRUTCBzaG91bGQgYmUgbWFuYWdlZC5cbiAgICogUmVmcmVzaGVzIHRoZSBsaXN0J3MgVFRMIHVzaW5nIHRoZSBjbGllbnQncyBkZWZhdWx0IGlmIHRoaXMgaXMgbm90XG4gICAqIHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUxpc3RQdXNoRnJvbnQuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZUxpc3RQdXNoRnJvbnQuU3VjY2Vzc30gY29udGFpbmluZyB0aGUgbGlzdCdzIG5ldyBsZW5ndGggb25cbiAgICogc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlTGlzdFB1c2hGcm9udC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0UHVzaEZyb250KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IExpc3RQdXNoRnJvbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UHVzaEZyb250LlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQubGlzdFB1c2hGcm9udChcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGxpc3ROYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBvcHRpb25zPy50cnVuY2F0ZUJhY2tUb1NpemUsXG4gICAgICBvcHRpb25zPy50dGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGZyb20gdGhlIGdpdmVuIGxpc3QgZXF1YWwgdG8gdGhlIGdpdmVuIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIGxpc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaXN0TmFtZSAtIFRoZSBsaXN0IHRvIHJlbW92ZSBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVMaXN0UmVtb3ZlVmFsdWUuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZUxpc3RSZW1vdmVWYWx1ZS5TdWNjZXNzfSBvbiBzdWNjZXNzLiBSZW1vdmluZyBhbiBlbGVtZW50IHRoYXRcbiAgICogZG9lcyBub3Qgb2NjdXIgaW4gdGhlIGxpc3Qgb3IgcmVtb3ZpbmcgZnJvbSBhIG5vbi1leGlzdGVudCBsaXN0IGNvdW50cyBhcyBhXG4gICAqIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZUxpc3RSZW1vdmVWYWx1ZS5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0UmVtb3ZlVmFsdWUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlTGlzdFJlbW92ZVZhbHVlLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQubGlzdFJlbW92ZVZhbHVlKGNhY2hlTmFtZSwgbGlzdE5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRhaW5zIHNsaWNlIG9mIGVsZW1lbnRzIG9mIGEgZ2l2ZW4gbGlzdCwgZGVsZXRlcyB0aGUgcmVzdCBvZiB0aGUgbGlzdFxuICAgKiB0aGF0IGlzbid0IGJlaW5nIHJldGFpbmVkLiBSZXR1cm5zIGEgU3VjY2VzcyBvciBFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGlzdE5hbWUgLSBUaGUgbGlzdCB0byByZXRhaW4gYSBzbGljZSBvZi5cbiAgICogQHBhcmFtIHtMaXN0UmV0YWluQ2FsbE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc3RhcnRJbmRleF0gLSBTdGFydCBpbmNsdXNpdmUgaW5kZXggZm9yIGZldGNoXG4gICAqIG9wZXJhdGlvbi4gRGVmYXVsdHMgdG8gc3RhcnQgb2YgYXJyYXkgaWYgbm90IGdpdmVuLCAwLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZW5kSW5kZXhdIC0gRW5kIGV4Y2x1c2l2ZSBpbmRleCBmb3IgZmV0Y2hcbiAgICogb3BlcmF0aW9uLiBEZWZhdWx0cyB0byBlbmQgb2YgYXJyYXkgaWYgbm90IGdpdmVuLlxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25UdGx9IFtvcHRpb25zLnR0bF0gLSBIb3cgdGhlIFRUTCBzaG91bGQgYmUgbWFuYWdlZC5cbiAgICogUmVmcmVzaGVzIHRoZSBsaXN0J3MgVFRMIHVzaW5nIHRoZSBjbGllbnQncyBkZWZhdWx0IGlmIHRoaXMgaXMgbm90XG4gICAqIHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUxpc3RSZXRhaW4uUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZUxpc3RSZXRhaW4uU3VjY2Vzc30gb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlTGlzdFJldGFpbi5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0UmV0YWluKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IExpc3RSZXRhaW5DYWxsT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlTGlzdFJldGFpbi5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50Lmxpc3RSZXRhaW4oXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBsaXN0TmFtZSxcbiAgICAgIG9wdGlvbnM/LnN0YXJ0SW5kZXgsXG4gICAgICBvcHRpb25zPy5lbmRJbmRleCxcbiAgICAgIG9wdGlvbnM/LnR0bFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbGwgZWxlbWVudHMgb2YgdGhlIGdpdmVuIHNldFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNldE5hbWUgLSBUaGUgc2V0IHRvIGZldGNoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldEZldGNoLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVTZXRGZXRjaC5IaXR9IGNvbnRhaW5pbmcgdGhlIHNldCBlbGVtZW50cyBpZiB0aGUgc2V0IGV4aXN0cy5cbiAgICoge0BsaW5rIENhY2hlU2V0RmV0Y2guTWlzc30gaWYgdGhlIHNldCBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlU2V0RmV0Y2guRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0RmV0Y2goXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc2V0TmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVTZXRGZXRjaC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNldEZldGNoKGNhY2hlTmFtZSwgc2V0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBlbGVtZW50IHRvIHRoZSBnaXZlbiBzZXQuIENyZWF0ZXMgdGhlIHNldCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5XG4gICAqIGV4aXN0LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBBZnRlciB0aGlzIG9wZXJhdGlvbiB0aGUgc2V0IHdpbGwgY29udGFpbiB0aGUgdW5pb24gb2YgdGhlIGVsZW1lbnQgcGFzc2VkXG4gICAqIGluIGFuZCB0aGUgb3JpZ2luYWwgZWxlbWVudHMgb2YgdGhlIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBzdG9yZSB0aGUgc2V0IGluLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2V0TmFtZSAtIFRoZSBzZXQgdG8gYWRkIHRvLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBhZGQuXG4gICAqIEBwYXJhbSB7U2V0QWRkRWxlbWVudE9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVHRsfSBbb3B0aW9ucy50dGxdIC0gSG93IHRoZSBUVEwgc2hvdWxkIGJlIG1hbmFnZWQuXG4gICAqIFJlZnJlc2hlcyB0aGUgc2V0J3MgVFRMIHVzaW5nIHRoZSBjbGllbnQncyBkZWZhdWx0IGlmIHRoaXMgaXMgbm90IHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldEFkZEVsZW1lbnQuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZVNldEFkZEVsZW1lbnQuU3VjY2Vzc30gb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlU2V0QWRkRWxlbWVudC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRBZGRFbGVtZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNldE5hbWU6IHN0cmluZyxcbiAgICBlbGVtZW50OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRBZGRFbGVtZW50T3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0QWRkRWxlbWVudC5SZXNwb25zZT4ge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCB0aGlzLnNldEFkZEVsZW1lbnRzKFxuICAgICAgICBjYWNoZU5hbWUsXG4gICAgICAgIHNldE5hbWUsXG4gICAgICAgIFtlbGVtZW50XSBhcyBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgICkudG9TaW5ndWxhclJlc3BvbnNlKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBtdWx0aXBsZSBlbGVtZW50cyB0byB0aGUgZ2l2ZW4gc2V0LiBDcmVhdGVzIHRoZSBzZXQgaWYgaXQgZG9lcyBub3RcbiAgICogYWxyZWFkeSBleGlzdC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogQWZ0ZXIgdGhpcyBvcGVyYXRpb24sIHRoZSBzZXQgd2lsbCBjb250YWluIHRoZSB1bmlvbiBvZiB0aGUgZWxlbWVudHMgcGFzc2VkXG4gICAqIGluIGFuZCB0aGUgb3JpZ2luYWwgZWxlbWVudHMgb2YgdGhlIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBzdG9yZSB0aGUgc2V0IGluLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2V0TmFtZSAtIFRoZSBzZXQgdG8gYWRkIHRvLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgVWludDhBcnJheVtdfSBlbGVtZW50cyAtIFRoZSBlbGVtZW50cyB0byBhZGQuXG4gICAqIEBwYXJhbSB7U2V0QWRkRWxlbWVudHNPcHRpb25zfSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvblR0bH0gW29wdGlvbnMudHRsXSAtIEhvdyB0aGUgVFRMIHNob3VsZCBiZSBtYW5hZ2VkLlxuICAgKiBSZWZyZXNoZXMgdGhlIHNldCdzIFRUTCB1c2luZyB0aGUgY2xpZW50J3MgZGVmYXVsdCBpZiB0aGlzIGlzIG5vdCBzdXBwbGllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTZXRBZGRFbGVtZW50cy5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU2V0QWRkRWxlbWVudHMuU3VjY2Vzc30gb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlU2V0QWRkRWxlbWVudHMuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0QWRkRWxlbWVudHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc2V0TmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnRzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXSxcbiAgICBvcHRpb25zPzogU2V0QWRkRWxlbWVudHNPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXRBZGRFbGVtZW50cy5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNldEFkZEVsZW1lbnRzKFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgc2V0TmFtZSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgb3B0aW9ucz8udHRsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuIGVsZW1lbnQgZnJvbSB0aGUgZ2l2ZW4gc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNldE5hbWUgLSBUaGUgc2V0IHRvIHJlbW92ZSBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU2V0UmVtb3ZlRWxlbWVudC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU2V0UmVtb3ZlRWxlbWVudC5TdWNjZXNzfSBvbiBzdWNjZXNzLiBSZW1vdmluZyBhbiBlbGVtZW50IHRoYXRcbiAgICogZG9lcyBub3Qgb2NjdXIgaW4gdGhlIHNldCBvciByZW1vdmluZyBmcm9tIGEgbm9uLWV4aXN0ZW50IHNldCBjb3VudHMgYXMgYVxuICAgKiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRSZW1vdmVFbGVtZW50LkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldFJlbW92ZUVsZW1lbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc2V0TmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnQ6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZVNldFJlbW92ZUVsZW1lbnQuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5zZXRSZW1vdmVFbGVtZW50cyhjYWNoZU5hbWUsIHNldE5hbWUsIFtlbGVtZW50XSBhc1xuICAgICAgICB8IHN0cmluZ1tdXG4gICAgICAgIHwgVWludDhBcnJheVtdKVxuICAgICkudG9TaW5ndWxhclJlc3BvbnNlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBtdWx0aXBsZSBlbGVtZW50cyBmcm9tIHRoZSBnaXZlbiBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2V0TmFtZSAtIFRoZSBzZXQgdG8gcmVtb3ZlIGZyb20uXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBVaW50OEFycmF5W119IGVsZW1lbnRzIC0gVGhlIGVsZW1lbnRzIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTZXRSZW1vdmVFbGVtZW50cy5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU2V0UmVtb3ZlRWxlbWVudHMuU3VjY2Vzc30gb24gc3VjY2Vzcy4gUmVtb3ZpbmcgZWxlbWVudHMgdGhhdFxuICAgKiBkbyBub3Qgb2NjdXIgaW4gdGhlIHNldCBvciByZW1vdmluZyBmcm9tIGEgbm9uLWV4aXN0ZW50IHNldCBjb3VudHMgYXMgYVxuICAgKiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRSZW1vdmVFbGVtZW50cy5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRSZW1vdmVFbGVtZW50cyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzZXROYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVTZXRSZW1vdmVFbGVtZW50cy5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNldFJlbW92ZUVsZW1lbnRzKGNhY2hlTmFtZSwgc2V0TmFtZSwgZWxlbWVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGEgcmFuZG9tIHNhbXBsZSBvZiBlbGVtZW50cyBmcm9tIHRoZSBzZXQuXG4gICAqIFJldHVybnMgYSBkaWZmZXJlbnQgcmFuZG9tIHNhbXBsZSBmb3IgZWFjaCBjYWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNldE5hbWUgLSBUaGUgc2V0IHRvIHJlbW92ZSBmcm9tLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmV0dXJuLlxuICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGZld2VyIHRoYW4gJ2xpbWl0JyBlbGVtZW50cywgdGhlIGVudGlyZSBzZXQgd2lsbCBiZSByZXR1cm5lZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTZXRTYW1wbGUuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZVNldFNhbXBsZS5IaXR9IGNvbnRhaW5pbmcgdGhlIHNldCBlbGVtZW50cyBpZiB0aGUgc2V0IGV4aXN0cy5cbiAgICoge0BsaW5rIENhY2hlU2V0U2FtcGxlLk1pc3N9IGlmIHRoZSBzZXQgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZVNldFNhbXBsZS5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRTYW1wbGUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc2V0TmFtZTogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXJcbiAgKTogUHJvbWlzZTxDYWNoZVNldFNhbXBsZS5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNldFNhbXBsZShjYWNoZU5hbWUsIHNldE5hbWUsIGxpbWl0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NvY2lhdGVzIHRoZSBnaXZlbiBrZXkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgaWYga2V5IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGNhY2hlLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc2V0SWZBYnNlbnQgaW5zdGVhZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBzdG9yZSB0aGUgdmFsdWUgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0ga2V5IC0gVGhlIGtleSB0byBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gZmllbGQgLSBUaGUgdmFsdWUgdG8gYmUgc3RvcmVkLlxuICAgKiBAcGFyYW0ge1NldElmTm90RXhpc3RzT3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50dGxdIC0gVGhlIHRpbWUgdG8gbGl2ZSBmb3IgdGhlIGl0ZW0gaW4gdGhlIGNhY2hlLlxuICAgKiBVc2VzIHRoZSBjbGllbnQncyBkZWZhdWx0IFRUTCBpZiB0aGlzIGlzIG5vdCBzdXBwbGllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTZXRJZk5vdEV4aXN0cy5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU2V0SWZOb3RFeGlzdHMuU3RvcmVkfSBvbiBzdG9yaW5nIHRoZSBuZXcgdmFsdWUuXG4gICAqIHtAbGluayBDYWNoZVNldElmTm90RXhpc3RzLk5vdFN0b3JlZH0gb24gbm90IHN0b3JpbmcgdGhlIG5ldyB2YWx1ZS5cbiAgICoge0BsaW5rIENhY2hlU2V0SWZOb3RFeGlzdHMuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0SWZOb3RFeGlzdHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRJZk5vdEV4aXN0c09wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmTm90RXhpc3RzLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2V0SWZOb3RFeGlzdHMoY2FjaGVOYW1lLCBrZXksIGZpZWxkLCBvcHRpb25zPy50dGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc29jaWF0ZXMgdGhlIGdpdmVuIGtleSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBpZiBrZXkgaXMgbm90IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgY2FjaGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIHZhbHVlIGluLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGtleSAtIFRoZSBrZXkgdG8gc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGZpZWxkIC0gVGhlIHZhbHVlIHRvIGJlIHN0b3JlZC5cbiAgICogQHBhcmFtIHtTZXRJZkFic2VudE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudHRsXSAtIFRoZSB0aW1lIHRvIGxpdmUgZm9yIHRoZSBpdGVtIGluIHRoZSBjYWNoZS5cbiAgICogVXNlcyB0aGUgY2xpZW50J3MgZGVmYXVsdCBUVEwgaWYgdGhpcyBpcyBub3Qgc3VwcGxpZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY29tcHJlc3M9ZmFsc2VdIC0gV2hldGhlciB0byBjb21wcmVzcyB0aGUgdmFsdWUuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldElmQWJzZW50LlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZkFic2VudC5TdG9yZWR9IG9uIHN0b3JpbmcgdGhlIG5ldyB2YWx1ZS5cbiAgICoge0BsaW5rIENhY2hlU2V0SWZBYnNlbnQuTm90U3RvcmVkfSBvbiBub3Qgc3RvcmluZyB0aGUgbmV3IHZhbHVlLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZkFic2VudC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRJZkFic2VudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldElmQWJzZW50T3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZBYnNlbnQuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zZXRJZkFic2VudChjYWNoZU5hbWUsIGtleSwgZmllbGQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc29jaWF0ZXMgdGhlIGdpdmVuIGtleSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBpZiB0aGUga2V5IGlzIHByZXNlbnQgaW4gdGhlIGNhY2hlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHN0b3JlIHRoZSB2YWx1ZSBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBrZXkgLSBUaGUga2V5IHRvIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBmaWVsZCAtIFRoZSB2YWx1ZSB0byBiZSBzdG9yZWQuXG4gICAqIEBwYXJhbSB7U2V0SWZQcmVzZW50T3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50dGxdIC0gVGhlIHRpbWUgdG8gbGl2ZSBmb3IgdGhlIGl0ZW0gaW4gdGhlIGNhY2hlLlxuICAgKiBVc2VzIHRoZSBjbGllbnQncyBkZWZhdWx0IFRUTCBpZiB0aGlzIGlzIG5vdCBzdXBwbGllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTZXRJZlByZXNlbnQuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZVNldElmUHJlc2VudC5TdG9yZWR9IG9uIHN0b3JpbmcgdGhlIG5ldyB2YWx1ZS5cbiAgICoge0BsaW5rIENhY2hlU2V0SWZQcmVzZW50Lk5vdFN0b3JlZH0gb24gbm90IHN0b3JpbmcgdGhlIG5ldyB2YWx1ZS5cbiAgICoge0BsaW5rIENhY2hlU2V0SWZQcmVzZW50LkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldElmUHJlc2VudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldElmUHJlc2VudE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmUHJlc2VudC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNldElmUHJlc2VudChjYWNoZU5hbWUsIGtleSwgZmllbGQsIG9wdGlvbnM/LnR0bCk7XG4gIH1cblxuICAvKipcbiAgICogQXNzb2NpYXRlcyB0aGUgZ2l2ZW4ga2V5IHdpdGggdGhlIGdpdmVuIHZhbHVlIGlmIHRoZSBrZXkgaXMgcHJlc2VudCBpbiB0aGUgY2FjaGVcbiAgICogYW5kIGl0cyB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgc3VwcGxpZWQgYGVxdWFsYCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBzdG9yZSB0aGUgdmFsdWUgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0ga2V5IC0gVGhlIGtleSB0byBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gZmllbGQgLSBUaGUgdmFsdWUgdG8gYmUgc3RvcmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGVxdWFsIC0gVGhlIHZhbHVlIHRvIGNvbXBhcmUgdG8gdGhlIGNhY2hlZCB2YWx1ZS5cbiAgICogQHBhcmFtIHtTZXRJZkVxdWFsT3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50dGxdIC0gVGhlIHRpbWUgdG8gbGl2ZSBmb3IgdGhlIGl0ZW0gaW4gdGhlIGNhY2hlLlxuICAgKiBVc2VzIHRoZSBjbGllbnQncyBkZWZhdWx0IFRUTCBpZiB0aGlzIGlzIG5vdCBzdXBwbGllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTZXRJZkVxdWFsLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZkVxdWFsLlN0b3JlZH0gb24gc3RvcmluZyB0aGUgbmV3IHZhbHVlLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZkVxdWFsLk5vdFN0b3JlZH0gb24gbm90IHN0b3JpbmcgdGhlIG5ldyB2YWx1ZS5cbiAgICoge0BsaW5rIENhY2hlU2V0SWZFcXVhbC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRJZkVxdWFsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBlcXVhbDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0SWZFcXVhbE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmRXF1YWwuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zZXRJZkVxdWFsKGNhY2hlTmFtZSwga2V5LCBmaWVsZCwgZXF1YWwsIG9wdGlvbnM/LnR0bCk7XG4gIH1cblxuICAvKipcbiAgICogQXNzb2NpYXRlcyB0aGUgZ2l2ZW4ga2V5IHdpdGggdGhlIGdpdmVuIHZhbHVlIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNhY2hlIG9yXG4gICAqIGlmIHRoZSB2YWx1ZSBmb3IgdGhlIGtleSBpcyBub3QgZXF1YWwgdG8gdGhlIHN1cHBsaWVkIGBub3RFcXVhbGAgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHN0b3JlIHRoZSB2YWx1ZSBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBrZXkgLSBUaGUga2V5IHRvIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBmaWVsZCAtIFRoZSB2YWx1ZSB0byBiZSBzdG9yZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gbm90RXF1YWwgLSBUaGUgdmFsdWUgdG8gY29tcGFyZSB0byB0aGUgY2FjaGVkIHZhbHVlLlxuICAgKiBAcGFyYW0ge1NldElmTm90RXF1YWxPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnR0bF0gLSBUaGUgdGltZSB0byBsaXZlIGZvciB0aGUgaXRlbSBpbiB0aGUgY2FjaGUuXG4gICAqIFVzZXMgdGhlIGNsaWVudCdzIGRlZmF1bHQgVFRMIGlmIHRoaXMgaXMgbm90IHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldElmTm90RXF1YWwuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZVNldElmTm90RXF1YWwuU3RvcmVkfSBvbiBzdG9yaW5nIHRoZSBuZXcgdmFsdWUuXG4gICAqIHtAbGluayBDYWNoZVNldElmTm90RXF1YWwuTm90U3RvcmVkfSBvbiBub3Qgc3RvcmluZyB0aGUgbmV3IHZhbHVlLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZk5vdEVxdWFsLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldElmTm90RXF1YWwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG5vdEVxdWFsOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRJZk5vdEVxdWFsT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZOb3RFcXVhbC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNldElmTm90RXF1YWwoXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBrZXksXG4gICAgICBmaWVsZCxcbiAgICAgIG5vdEVxdWFsLFxuICAgICAgb3B0aW9ucz8udHRsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NvY2lhdGVzIHRoZSBnaXZlbiBrZXkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgaWYga2V5IGlzIHByZXNlbnQgaW4gdGhlIGNhY2hlXG4gICAqIGFuZCBpdHMgdmFsdWUgaXMgbm90IGVxdWFsIHRvIHRoZSBzdXBwbGllZCBgbm90RXF1YWxgIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHN0b3JlIHRoZSB2YWx1ZSBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBrZXkgLSBUaGUga2V5IHRvIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBmaWVsZCAtIFRoZSB2YWx1ZSB0byBiZSBzdG9yZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gbm90RXF1YWwgLSBUaGUgdmFsdWUgdG8gY29tcGFyZSB0byB0aGUgY2FjaGVkIHZhbHVlLlxuICAgKiBAcGFyYW0ge1NldElmQWJzZW50T3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50dGxdIC0gVGhlIHRpbWUgdG8gbGl2ZSBmb3IgdGhlIGl0ZW0gaW4gdGhlIGNhY2hlLlxuICAgKiBVc2VzIHRoZSBjbGllbnQncyBkZWZhdWx0IFRUTCBpZiB0aGlzIGlzIG5vdCBzdXBwbGllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTZXRJZlByZXNlbnRBbmROb3RFcXVhbC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU2V0SWZQcmVzZW50QW5kTm90RXF1YWwuU3RvcmVkfSBvbiBzdG9yaW5nIHRoZSBuZXcgdmFsdWUuXG4gICAqIHtAbGluayBDYWNoZVNldElmUHJlc2VudEFuZE5vdEVxdWFsLk5vdFN0b3JlZH0gb24gbm90IHN0b3JpbmcgdGhlIG5ldyB2YWx1ZS5cbiAgICoge0BsaW5rIENhY2hlU2V0SWZQcmVzZW50QW5kTm90RXF1YWwuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0SWZQcmVzZW50QW5kTm90RXF1YWwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG5vdEVxdWFsOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRJZlByZXNlbnRBbmROb3RFcXVhbE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmUHJlc2VudEFuZE5vdEVxdWFsLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2V0SWZQcmVzZW50QW5kTm90RXF1YWwoXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBrZXksXG4gICAgICBmaWVsZCxcbiAgICAgIG5vdEVxdWFsLFxuICAgICAgb3B0aW9ucz8udHRsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NvY2lhdGVzIHRoZSBnaXZlbiBrZXkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgaWYga2V5IGlzIGFic2VudCBvciBpZiB0aGUga2V5IGlzXG4gICAqIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgZ2l2ZW4gdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIHZhbHVlIGluLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGtleSAtIFRoZSBrZXkgdG8gc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGZpZWxkIC0gVGhlIHZhbHVlIHRvIGJlIHN0b3JlZC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBlcXVhbCAtIFRoZSB2YWx1ZSB0byBjb21wYXJlIHRvIHRoZSBjYWNoZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB7U2V0SWZBYnNlbnRPckVxdWFsT3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50dGxdIC0gVGhlIHRpbWUgdG8gbGl2ZSBmb3IgdGhlIGl0ZW0gaW4gdGhlIGNhY2hlLlxuICAgKiBVc2VzIHRoZSBjbGllbnQncyBkZWZhdWx0IFRUTCBpZiB0aGlzIGlzIG5vdCBzdXBwbGllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTZXRJZkFic2VudE9yRXF1YWwuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZVNldElmQWJzZW50T3JFcXVhbC5TdG9yZWR9IG9uIHN0b3JpbmcgdGhlIG5ldyB2YWx1ZS5cbiAgICoge0BsaW5rIENhY2hlU2V0SWZBYnNlbnRPckVxdWFsLk5vdFN0b3JlZH0gb24gbm90IHN0b3JpbmcgdGhlIG5ldyB2YWx1ZS5cbiAgICoge0BsaW5rIENhY2hlU2V0SWZBYnNlbnRPckVxdWFsLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldElmQWJzZW50T3JFcXVhbChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZXF1YWw6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldElmQWJzZW50T3JFcXVhbE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmQWJzZW50T3JFcXVhbC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNldElmQWJzZW50T3JFcXVhbChcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGtleSxcbiAgICAgIGZpZWxkLFxuICAgICAgZXF1YWwsXG4gICAgICBvcHRpb25zPy50dGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsdXNoZXMgLyBjbGVhcnMgYWxsIHRoZSBpdGVtcyBvZiB0aGUgZ2l2ZW4gY2FjaGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBiZSBmbHVzaGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUZsdXNoLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVGbHVzaC5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVGbHVzaC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBmbHVzaENhY2hlKGNhY2hlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxDYWNoZUZsdXNoLlJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29udHJvbENsaWVudC5mbHVzaENhY2hlKGNhY2hlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbGwgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGRpY3Rpb25hcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gcGVyZm9ybSB0aGUgbG9va3VwIGluLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGljdGlvbmFyeU5hbWUgLSBUaGUgZGljdGlvbmFyeSB0byBmZXRjaC5cbiAgICogQHBhcmFtIHtEaWN0aW9uYXJ5RmV0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kZWNvbXByZXNzPWZhbHNlXSAtIFdoZXRoZXIgdG8gZGVjb21wcmVzcyB0aGUgdmFsdWVzLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVEaWN0aW9uYXJ5RmV0Y2guUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlGZXRjaC5IaXR9IGNvbnRhaW5pbmcgdGhlIGRpY3Rpb25hcnkgZWxlbWVudHMgaWYgdGhlXG4gICAqIGRpY3Rpb25hcnkgZXhpc3RzLlxuICAgKiB7QGxpbmsgQ2FjaGVEaWN0aW9uYXJ5RmV0Y2guTWlzc30gaWYgdGhlIGRpY3Rpb25hcnkgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlGZXRjaC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaWN0aW9uYXJ5RmV0Y2goXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogRGljdGlvbmFyeUZldGNoT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeUZldGNoLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuZGljdGlvbmFyeUZldGNoKGNhY2hlTmFtZSwgZGljdGlvbmFyeU5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gaW50ZWdlciBxdWFudGl0eSB0byBhIGZpZWxkIHZhbHVlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJbmNyZW1lbnRpbmcgdGhlIHZhbHVlIG9mIGEgbWlzc2luZyBmaWVsZCBzZXRzIHRoZSB2YWx1ZSB0byBhbW91bnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgZmllbGQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gZmllbGQgLSBUaGUgZmllbGQgdG8gaW5jcmVtZW50LlxuICAgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IC0gVGhlIHF1YW50aXR5IHRvIGFkZCB0byB0aGUgdmFsdWUuIE1heSBiZSBwb3NpdGl2ZSxcbiAgICogbmVnYXRpdmUsIG9yIHplcm8uIERlZmF1bHRzIHRvIDEuXG4gICAqIEBwYXJhbSB7SW5jcmVtZW50T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25UdGx9IFtvcHRpb25zLnR0bF0gLSBIb3cgdGhlIFRUTCBzaG91bGQgYmUgbWFuYWdlZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVJbmNyZW1lbnQ+fSAtXG4gICAqIHtAbGluayBDYWNoZUluY3JlbWVudC5TdWNjZXNzfSBjb250YWluaW5nIHRoZSBpbmNyZW1lbnRlZCB2YWx1ZVxuICAgKiBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVJbmNyZW1lbnQuRXJyb3J9IG9uIGZhaWx1cmUuIEluY3JlbWVudGluZyBhIHZhbHVlXG4gICAqIHRoYXQgd2FzIG5vdCBzZXQgdXNpbmcgdGhpcyBtZXRob2Qgb3IgaXMgbm90IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2ZcbiAgICogYW4gaW50ZWdlciByZXN1bHRzIGluIGEgZmFpbHVyZSB3aXRoIGEgRmFpbGVkUHJlY29uZGl0aW9uRXhjZXB0aW9uIGVycm9yLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGluY3JlbWVudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBhbW91bnQgPSAxLFxuICAgIG9wdGlvbnM/OiBJbmNyZW1lbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVJbmNyZW1lbnQuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5pbmNyZW1lbnQoY2FjaGVOYW1lLCBmaWVsZCwgYW1vdW50LCBvcHRpb25zPy50dGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZWxlbWVudCB0byB0aGUgZ2l2ZW4gZGljdGlvbmFyeS4gQ3JlYXRlcyB0aGUgZGljdGlvbmFyeSBpZiBpdCBkb2VzXG4gICAqIG5vdCBhbHJlYWR5IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHN0b3JlIHRoZSBkaWN0aW9uYXJ5IGluLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGljdGlvbmFyeU5hbWUgLSBUaGUgZGljdGlvbmFyeSB0byBhZGQgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gZmllbGQgLSBUaGUgZmllbGQgdG8gc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHN0b3JlLlxuICAgKiBAcGFyYW0ge0RpY3Rpb25hcnlTZXRGaWVsZE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25UdGx9IFtvcHRpb25zLnR0bF0gLSBIb3cgdGhlIFRUTCBzaG91bGQgYmUgbWFuYWdlZC5cbiAgICogIFJlZnJlc2hlcyB0aGUgZGljdGlvbmFyeSdzIFRUTCB1c2luZyB0aGUgY2xpZW50J3MgZGVmYXVsdCBpZiB0aGlzIGlzIG5vdCBzdXBwbGllZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jb21wcmVzcz1mYWxzZV0gLSBXaGV0aGVyIHRvIGNvbXByZXNzIHRoZSB2YWx1ZS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlRGljdGlvbmFyeVNldEZpZWxkLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVEaWN0aW9uYXJ5U2V0RmllbGQuU3VjY2Vzc30gb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeVNldEZpZWxkLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpY3Rpb25hcnlTZXRGaWVsZChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBEaWN0aW9uYXJ5U2V0RmllbGRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5U2V0RmllbGQuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5kaWN0aW9uYXJ5U2V0RmllbGQoXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBkaWN0aW9uYXJ5TmFtZSxcbiAgICAgIGZpZWxkLFxuICAgICAgdmFsdWUsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG11bHRpcGxlIGVsZW1lbnRzIHRvIHRoZSBnaXZlbiBkaWN0aW9uYXJ5LiBDcmVhdGVzIHRoZSBkaWN0aW9uYXJ5IGlmXG4gICAqIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIGRpY3Rpb25hcnkgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaWN0aW9uYXJ5TmFtZSAtIFRoZSBkaWN0aW9uYXJ5IHRvIGFkZCB0by5cbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nIHwgVWludDhBcnJheSwgc3RyaW5nIHwgVWludDhBcnJheT59IGVsZW1lbnRzIC0gVGhlXG4gICAqIGVsZW1lbnRzIHRvIHNldC5cbiAgICogQHBhcmFtIHtEaWN0aW9uYXJ5U2V0RmllbGRzT3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvblR0bH0gW29wdGlvbnMudHRsXSAtIEhvdyB0aGUgVFRMIHNob3VsZCBiZSBtYW5hZ2VkLlxuICAgKiBSZWZyZXNoZXMgdGhlIGRpY3Rpb25hcnkncyBUVEwgdXNpbmcgdGhlIGNsaWVudCdzIGRlZmF1bHQgaWYgdGhpcyBpcyBub3RcbiAgICogc3VwcGxpZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY29tcHJlc3M9ZmFsc2VdIC0gV2hldGhlciB0byBjb21wcmVzcyB0aGUgdmFsdWVzLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVEaWN0aW9uYXJ5U2V0RmllbGRzLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVEaWN0aW9uYXJ5U2V0RmllbGRzLlN1Y2Nlc3N9IG9uIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlTZXRGaWVsZHMuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGljdGlvbmFyeVNldEZpZWxkcyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnRzOlxuICAgICAgfCBNYXA8c3RyaW5nIHwgVWludDhBcnJheSwgc3RyaW5nIHwgVWludDhBcnJheT5cbiAgICAgIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgVWludDhBcnJheT5cbiAgICAgIHwgQXJyYXk8W3N0cmluZywgc3RyaW5nIHwgVWludDhBcnJheV0+LFxuICAgIG9wdGlvbnM/OiBEaWN0aW9uYXJ5U2V0RmllbGRzT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeVNldEZpZWxkcy5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LmRpY3Rpb25hcnlTZXRGaWVsZHMoXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBkaWN0aW9uYXJ5TmFtZSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdmFsdWUgc3RvcmVkIGZvciB0aGUgZ2l2ZW4gZGljdGlvbmFyeSBhbmQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgZGljdGlvbmFyeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpY3Rpb25hcnlOYW1lIC0gVGhlIGRpY3Rpb25hcnkgdG8gbG9vayB1cC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBmaWVsZCAtIFRoZSBmaWVsZCB0byBsb29rIHVwLlxuICAgKiBAcGFyYW0ge0RpY3Rpb25hcnlHZXRGaWVsZE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRlY29tcHJlc3M9ZmFsc2VdIC0gV2hldGhlciB0byBkZWNvbXByZXNzIHRoZSB2YWx1ZS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlRGljdGlvbmFyeUdldEZpZWxkLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVEaWN0aW9uYXJ5R2V0RmllbGQuSGl0fSBjb250YWluaW5nIHRoZSBkaWN0aW9uYXJ5IGVsZW1lbnQgaWZcbiAgICogb25lIGlzIGZvdW5kLlxuICAgKiB7QGxpbmsgQ2FjaGVEaWN0aW9uYXJ5R2V0RmllbGQuTWlzc30gaWYgdGhlIGRpY3Rpb25hcnkgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlHZXRGaWVsZC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaWN0aW9uYXJ5R2V0RmllbGQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogRGljdGlvbmFyeUdldEZpZWxkT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeUdldEZpZWxkLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuZGljdGlvbmFyeUdldEZpZWxkKFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgZGljdGlvbmFyeU5hbWUsXG4gICAgICBmaWVsZCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgbXVsdGlwbGUgdmFsdWVzIGZyb20gdGhlIGdpdmVuIGRpY3Rpb25hcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgZGljdGlvbmFyeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpY3Rpb25hcnlOYW1lIC0gVGhlIGRpY3Rpb25hcnkgdG8gbG9vayB1cC5cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXX0gZmllbGRzIC0gVGhlIGZpZWxkcyB0byBsb29rIHVwLlxuICAgKiBAcGFyYW0ge0RpY3Rpb25hcnlHZXRGaWVsZHNPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kZWNvbXByZXNzPWZhbHNlXSAtIFdoZXRoZXIgdG8gZGVjb21wcmVzcyB0aGUgdmFsdWVzLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVEaWN0aW9uYXJ5R2V0RmllbGRzLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVEaWN0aW9uYXJ5R2V0RmllbGRzLkhpdH0gY29udGFpbmluZyB0aGUgZGljdGlvbmFyeSBlbGVtZW50cyBpZlxuICAgKiB0aGUgZGljdGlvbmFyeSBleGlzdHMuXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlHZXRGaWVsZHMuTWlzc30gaWYgdGhlIGRpY3Rpb25hcnkgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlHZXRGaWVsZHMuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGljdGlvbmFyeUdldEZpZWxkcyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkczogc3RyaW5nW10gfCBVaW50OEFycmF5W10sXG4gICAgb3B0aW9ucz86IERpY3Rpb25hcnlHZXRGaWVsZHNPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5R2V0RmllbGRzLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuZGljdGlvbmFyeUdldEZpZWxkcyhcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGRpY3Rpb25hcnlOYW1lLFxuICAgICAgZmllbGRzLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbiBlbGVtZW50IGZyb20gdGhlIGdpdmVuIGRpY3Rpb25hcnkuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFBlcmZvcm1zIGEgbm8tb3AgaWYgdGhlIGRpY3Rpb25hcnkgb3IgZmllbGQgZG9lcyBub3QgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgZGljdGlvbmFyeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpY3Rpb25hcnlOYW1lIC0gVGhlIGRpY3Rpb25hcnkgdG8gcmVtb3ZlIGZyb20uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gZmllbGQgLSBUaGUgZmllbGQgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeVJlbW92ZUZpZWxkLlN1Y2Nlc3N9IG9uIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaWN0aW9uYXJ5UmVtb3ZlRmllbGQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeVJlbW92ZUZpZWxkLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuZGljdGlvbmFyeVJlbW92ZUZpZWxkKGNhY2hlTmFtZSwgZGljdGlvbmFyeU5hbWUsIGZpZWxkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIG11bHRpcGxlIGZpZWxkcyBmcm9tIHRoZSBnaXZlbiBkaWN0aW9uYXJ5LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBQZXJmb3JtcyBhIG5vLW9wIGlmIHRoZSBkaWN0aW9uYXJ5IG9yIGZpZWxkcyBkbyBub3QgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgZGljdGlvbmFyeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpY3Rpb25hcnlOYW1lIC0gVGhlIGRpY3Rpb25hcnkgdG8gcmVtb3ZlIGZyb20uXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBVaW50OEFycmF5W119IGZpZWxkcyAtIFRoZSBmaWVsZHMgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZHMuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZHMuU3VjY2Vzc30gb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeVJlbW92ZUZpZWxkcy5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaWN0aW9uYXJ5UmVtb3ZlRmllbGRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZmllbGRzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXVxuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeVJlbW92ZUZpZWxkcy5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LmRpY3Rpb25hcnlSZW1vdmVGaWVsZHMoXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBkaWN0aW9uYXJ5TmFtZSxcbiAgICAgIGZpZWxkc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBpbnRlZ2VyIHF1YW50aXR5IHRvIGEgZGljdGlvbmFyeSB2YWx1ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW5jcmVtZW50aW5nIHRoZSB2YWx1ZSBvZiBhIG1pc3NpbmcgZmllbGQgc2V0cyB0aGUgdmFsdWUgdG8gYW1vdW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIGRpY3Rpb25hcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaWN0aW9uYXJ5TmFtZSAtIFRoZSBkaWN0aW9uYXJ5IHRvIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBmaWVsZCAtIFRoZSBmaWVsZCB0byBpbmNyZW1lbnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgLSBUaGUgcXVhbnRpdHkgdG8gYWRkIHRvIHRoZSB2YWx1ZS4gTWF5IGJlIHBvc2l0aXZlLFxuICAgKiBuZWdhdGl2ZSwgb3IgemVyby4gRGVmYXVsdHMgdG8gMS5cbiAgICogQHBhcmFtIHtEaWN0aW9uYXJ5SW5jcmVtZW50T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25UdGx9IFtvcHRpb25zLnR0bF0gLSBIb3cgdGhlIFRUTCBzaG91bGQgYmUgbWFuYWdlZC5cbiAgICogUmVmcmVzaGVzIHRoZSBkaWN0aW9uYXJ5J3MgVFRMIHVzaW5nIHRoZSBjbGllbnQncyBkZWZhdWx0IGlmIHRoaXMgaXMgbm90XG4gICAqIHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZURpY3Rpb25hcnlJbmNyZW1lbnQuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlJbmNyZW1lbnQuU3VjY2Vzc30gY29udGFpbmluZyB0aGUgaW5jcmVtZW50ZWQgdmFsdWVcbiAgICogb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeUluY3JlbWVudC5FcnJvcn0gb24gZmFpbHVyZS4gSW5jcmVtZW50aW5nIGEgdmFsdWVcbiAgICogdGhhdCB3YXMgbm90IHNldCB1c2luZyB0aGlzIG1ldGhvZCBvciBpcyBub3QgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZlxuICAgKiBhbiBpbnRlZ2VyIHJlc3VsdHMgaW4gYSBmYWlsdXJlIHdpdGggYSBGYWlsZWRQcmVjb25kaXRpb25FeGNlcHRpb24gZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGljdGlvbmFyeUluY3JlbWVudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGFtb3VudCA9IDEsXG4gICAgb3B0aW9ucz86IERpY3Rpb25hcnlJbmNyZW1lbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5SW5jcmVtZW50LlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuZGljdGlvbmFyeUluY3JlbWVudChcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGRpY3Rpb25hcnlOYW1lLFxuICAgICAgZmllbGQsXG4gICAgICBhbW91bnQsXG4gICAgICBvcHRpb25zPy50dGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gZGljdGlvbmFyeS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBkaWN0aW9uYXJ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGljdGlvbmFyeU5hbWUgLSBUaGUgZGljdGlvbmFyeSB0byBnZXQgdGhlIGxlbmd0aCBvZi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVEaWN0aW9uYXJ5TGVuZ3RoLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVEaWN0aW9uYXJ5TGVuZ3RoLkhpdH0gY29udGFpbmluZyB0aGUgbGVuZ3RoIGlmIHRoZSBkaWN0aW9uYXJ5IGV4aXN0cy5cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeUxlbmd0aC5NaXNzfSBpZiB0aGUgZGljdGlvbmFyeSBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeUxlbmd0aC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaWN0aW9uYXJ5TGVuZ3RoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlMZW5ndGguUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5kaWN0aW9uYXJ5TGVuZ3RoKGNhY2hlTmFtZSwgZGljdGlvbmFyeU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZWxlbWVudCB0byB0aGUgZ2l2ZW4gc29ydGVkIHNldC4gSWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMsIGl0c1xuICAgKiBzY29yZSBpcyB1cGRhdGVkLiBDcmVhdGVzIHRoZSBzb3J0ZWQgc2V0IGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIHNvcnRlZCBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0ZWRTZXROYW1lIC0gVGhlIHNvcnRlZCBzZXQgdG8gYWRkIHRvLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGFkZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHNjb3JlIC0gVGhlIHNjb3JlIHRvIGFzc2lnbiB0byB0aGUgdmFsdWUuXG4gICAqIEBwYXJhbSB7U29ydGVkU2V0UHV0RWxlbWVudE9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVHRsfSBbb3B0aW9ucy50dGxdIC0gSG93IHRoZSBUVEwgc2hvdWxkIGJlIG1hbmFnZWQuXG4gICAqIFJlZnJlc2hlcyB0aGUgc29ydGVkIHNldCdzIFRUTCB1c2luZyB0aGUgY2xpZW50J3MgZGVmYXVsdCBpZiB0aGlzIGlzIG5vdFxuICAgKiBzdXBwbGllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50LlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50LlN1Y2Nlc3N9IG9uIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldFB1dEVsZW1lbnQuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc29ydGVkU2V0UHV0RWxlbWVudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgc2NvcmU6IG51bWJlcixcbiAgICBvcHRpb25zPzogU29ydGVkU2V0UHV0RWxlbWVudE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldFB1dEVsZW1lbnQuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zb3J0ZWRTZXRQdXRFbGVtZW50KFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgc29ydGVkU2V0TmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgc2NvcmUsXG4gICAgICBvcHRpb25zPy50dGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZWxlbWVudHMgdG8gdGhlIGdpdmVuIHNvcnRlZCBzZXQuIEZvciBhbnkgdmFsdWVzIHRoYXQgYWxyZWFkeSBleGlzdCwgaXRcbiAgICogdGhlIHNjb3JlIGlzIHVwZGF0ZWQuIENyZWF0ZXMgdGhlIHNvcnRlZCBzZXQgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc29ydGVkIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRlZFNldE5hbWUgLSBUaGUgc29ydGVkIHNldCB0byBhZGQgdG8uXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZyB8IFVpbnQ4QXJyYXksIG51bWJlcj58IFJlY29yZDxzdHJpbmcsIG51bWJlcj59IGVsZW1lbnRzIC0gVGhlIHZhbHVlLT5zY29yZSBwYWlycyB0byBhZGQgdG8gdGhlIHNvcnRlZCBzZXQuXG4gICAqIEBwYXJhbSB7U29ydGVkU2V0UHV0RWxlbWVudE9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVHRsfSBbb3B0aW9ucy50dGxdIC0gSG93IHRoZSBUVEwgc2hvdWxkIGJlIG1hbmFnZWQuXG4gICAqIFJlZnJlc2hlcyB0aGUgc29ydGVkIHNldCdzIFRUTCB1c2luZyB0aGUgY2xpZW50J3MgZGVmYXVsdCBpZiB0aGlzIGlzIG5vdFxuICAgKiBzdXBwbGllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50cy5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0UHV0RWxlbWVudHMuU3VjY2Vzc30gb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0UHV0RWxlbWVudHMuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc29ydGVkU2V0UHV0RWxlbWVudHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnRzOlxuICAgICAgfCBNYXA8c3RyaW5nIHwgVWludDhBcnJheSwgbnVtYmVyPlxuICAgICAgfCBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+XG4gICAgICB8IEFycmF5PFtzdHJpbmcsIG51bWJlcl0+LFxuICAgIG9wdGlvbnM/OiBTb3J0ZWRTZXRQdXRFbGVtZW50c09wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldFB1dEVsZW1lbnRzLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc29ydGVkU2V0UHV0RWxlbWVudHMoXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBzb3J0ZWRTZXROYW1lLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBvcHRpb25zPy50dGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gc29ydGVkIHNldCBieSBpbmRleCAocmFuaykuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc29ydGVkIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRlZFNldE5hbWUgLSBUaGUgc29ydGVkIHNldCB0byBmZXRjaCBmcm9tLlxuICAgKiBAcGFyYW0ge1NvcnRlZFNldEZldGNoQnlSYW5rT3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc3RhcnRSYW5rXSAtIFRoZSByYW5rIG9mIHRoZSBmaXJzdCBlbGVtZW50IHRvXG4gICAqIGZldGNoLiBEZWZhdWx0cyB0byAwLiBUaGlzIHJhbmsgaXMgaW5jbHVzaXZlLCBpZSB0aGUgZWxlbWVudCBhdCB0aGlzIHJhbmtcbiAgICogd2lsbCBiZSBmZXRjaGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZW5kUmFua10gLSBUaGUgcmFuayBvZiB0aGUgbGFzdCBlbGVtZW50IHRvIGZldGNoLlxuICAgKiBUaGlzIHJhbmsgaXMgZXhjbHVzaXZlLCBpZSB0aGUgZWxlbWVudCBhdCB0aGlzIHJhbmsgd2lsbCBub3QgYmUgZmV0Y2hlZC5cbiAgICogRGVmYXVsdHMgdG8gbnVsbCwgd2hpY2ggZmV0Y2hlcyB1cCB1bnRpbCBhbmQgaW5jbHVkaW5nIHRoZSBsYXN0IGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7U29ydGVkU2V0T3JkZXJ9IFtvcHRpb25zLm9yZGVyXSAtIFRoZSBvcmRlciB0byBmZXRjaCB0aGUgZWxlbWVudHMgaW4uXG4gICAqIERlZmF1bHRzIHRvIGFzY2VuZGluZy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTb3J0ZWRTZXRGZXRjaC5SZXNwb25zZT59XG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEZldGNoLkhpdH0gY29udGFpbmluZyB0aGUgcmVxdWVzdGVkIGVsZW1lbnRzIHdoZW4gZm91bmQuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEZldGNoLk1pc3N9IHdoZW4gdGhlIHNvcnRlZCBzZXQgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEZldGNoLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNvcnRlZFNldEZldGNoQnlSYW5rKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogU29ydGVkU2V0RmV0Y2hCeVJhbmtPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRGZXRjaC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNvcnRlZFNldEZldGNoQnlSYW5rKFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgc29ydGVkU2V0TmFtZSxcbiAgICAgIG9wdGlvbnM/Lm9yZGVyID8/IFNvcnRlZFNldE9yZGVyLkFzY2VuZGluZyxcbiAgICAgIG9wdGlvbnM/LnN0YXJ0UmFuayA/PyAwLFxuICAgICAgb3B0aW9ucz8uZW5kUmFua1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBzb3J0ZWQgc2V0IGJ5IHNjb3JlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIHNvcnRlZCBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0ZWRTZXROYW1lIC0gVGhlIHNvcnRlZCBzZXQgdG8gZmV0Y2ggZnJvbS5cbiAgICogQHBhcmFtIHtTb3J0ZWRTZXRGZXRjaEJ5U2NvcmVPcHRpb25zfSBvcHRpb25zXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5TY29yZV0gLSBUaGUgbWluaW11bSBzY29yZSAoaW5jbHVzaXZlKSBvZiB0aGVcbiAgICogZWxlbWVudHMgdG8gZmV0Y2guIERlZmF1bHRzIHRvIG5lZ2F0aXZlIGluZmluaXR5LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4U2NvcmVdIC0gVGhlIG1heGltdW0gc2NvcmUgKGluY2x1c2l2ZSkgb2YgdGhlXG4gICAqIGVsZW1lbnRzIHRvIGZldGNoLiBEZWZhdWx0cyB0byBwb3NpdGl2ZSBpbmZpbml0eS5cbiAgICogQHBhcmFtIHtTb3J0ZWRTZXRPcmRlcn0gW29wdGlvbnMub3JkZXJdIC0gVGhlIG9yZGVyIHRvIGZldGNoIHRoZSBlbGVtZW50cyBpbi5cbiAgICogRGVmYXVsdHMgdG8gYXNjZW5kaW5nLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMub2Zmc2V0XSAtIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBiZWZvcmVcbiAgICogcmV0dXJuaW5nIHRoZSBmaXJzdCBlbGVtZW50LiBEZWZhdWx0cyB0byAwLiBOb3RlOiB0aGlzIGlzIG5vdCB0aGUgcmFuayBvZlxuICAgKiB0aGUgZmlyc3QgZWxlbWVudCB0byByZXR1cm4sIGJ1dCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoZSByZXN1bHQgc2V0XG4gICAqIHRvIHNraXAgYmVmb3JlIHJldHVybmluZyB0aGUgZmlyc3QgZWxlbWVudC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmNvdW50XSAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0byByZXR1cm4uXG4gICAqIERlZmF1bHRzIHRvIHVuZGVmaW5lZCwgd2hpY2ggcmV0dXJucyBhbGwgZWxlbWVudHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU29ydGVkU2V0RmV0Y2guUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEZldGNoLkhpdH0gY29udGFpbmluZyB0aGUgcmVxdWVzdGVkIGVsZW1lbnRzIHdoZW4gZm91bmQuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEZldGNoLk1pc3N9IHdoZW4gdGhlIHNvcnRlZCBzZXQgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEZldGNoLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNvcnRlZFNldEZldGNoQnlTY29yZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFNvcnRlZFNldEZldGNoQnlTY29yZU9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldEZldGNoLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc29ydGVkU2V0RmV0Y2hCeVNjb3JlKFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgc29ydGVkU2V0TmFtZSxcbiAgICAgIG9wdGlvbnM/Lm9yZGVyID8/IFNvcnRlZFNldE9yZGVyLkFzY2VuZGluZyxcbiAgICAgIG9wdGlvbnM/Lm1pblNjb3JlLFxuICAgICAgb3B0aW9ucz8ubWF4U2NvcmUsXG4gICAgICBvcHRpb25zPy5vZmZzZXQsXG4gICAgICBvcHRpb25zPy5jb3VudFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTG9vayB1cCB0aGUgcmFuayBvZiBhbiBlbGVtZW50IGluIHRoZSBzb3J0ZWQgc2V0LCBieSB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc29ydGVkIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRlZFNldE5hbWUgLSBUaGUgc29ydGVkIHNldCB0byBmZXRjaCBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IHdob3NlIHJhbmsgd2UgYXJlIHJldHJpZXZpbmcuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU29ydGVkU2V0R2V0UmFuay5SZXNwb25zZT59XG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEdldFJhbmsuSGl0fSBjb250YWluaW5nIHRoZSByYW5rIG9mIHRoZSByZXF1ZXN0ZWQgZWxlbWVudHMgd2hlbiBmb3VuZC5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0R2V0UmFuay5NaXNzfSB3aGVuIHRoZSBlbGVtZW50IGRvZXMgbm90IGV4aXN0LlxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRHZXRSYW5rLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNvcnRlZFNldEdldFJhbmsoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRHZXRSYW5rLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc29ydGVkU2V0R2V0UmFuayhjYWNoZU5hbWUsIHNvcnRlZFNldE5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIHVwIHRoZSBzY29yZSBvZiBhbiBlbGVtZW50IGluIHRoZSBzb3J0ZWQgc2V0LCBieSB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc29ydGVkIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRlZFNldE5hbWUgLSBUaGUgc29ydGVkIHNldCB0byBmZXRjaCBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IHdob3NlIHNjb3JlIHdlIGFyZSByZXRyaWV2aW5nLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNvcnRlZFNldEdldFNjb3JlLlJlc3BvbnNlPn1cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0R2V0U2NvcmUuSGl0fSBjb250YWluaW5nIHRoZSBzY29yZSBvZiB0aGUgcmVxdWVzdGVkIGVsZW1lbnQgd2hlbiBmb3VuZC5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0R2V0U2NvcmUuTWlzc30gd2hlbiB0aGUgZWxlbWVudCBvciBjb2xsZWN0aW9uIGRvZXMgbm90IGV4aXN0LlxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRHZXRTY29yZS5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzb3J0ZWRTZXRHZXRTY29yZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldEdldFNjb3JlLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc29ydGVkU2V0R2V0U2NvcmUoY2FjaGVOYW1lLCBzb3J0ZWRTZXROYW1lLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTG9vayB1cCB0aGUgc2NvcmVzIG9mIG11bHRpcGxlIGVsZW1lbnRzIGluIHRoZSBzb3J0ZWQgc2V0LCBieSB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIHNvcnRlZCBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0ZWRTZXROYW1lIC0gVGhlIHNvcnRlZCBzZXQgdG8gZmV0Y2ggZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXX0gdmFsdWVzIC0gVGhlIHZhbHVlcyBvZiB0aGUgZWxlbWVudHMgd2hvc2Ugc2NvcmVzIHdlIGFyZSByZXRyaWV2aW5nLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNvcnRlZFNldEdldFNjb3Jlcy5SZXNwb25zZT59XG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEdldFNjb3Jlcy5IaXR9IGNvbnRhaW5pbmcgdGhlIHNjb3JlcyBvZiB0aGUgcmVxdWVzdGVkIGVsZW1lbnRzIHdoZW4gZm91bmQuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEdldFNjb3Jlcy5NaXNzfSB3aGVuIHRoZSBlbGVtZW50IG9yIGNvbGxlY3Rpb24gZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEdldFNjb3Jlcy5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzb3J0ZWRTZXRHZXRTY29yZXMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogc3RyaW5nW10gfCBVaW50OEFycmF5W11cbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldEdldFNjb3Jlcy5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNvcnRlZFNldEdldFNjb3JlcyhjYWNoZU5hbWUsIHNvcnRlZFNldE5hbWUsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICogSW5jcmVtZW50IHRoZSBzY29yZSBvZiBhbiBlbGVtZW50IGluIHRoZSBzb3J0ZWQgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIHNvcnRlZCBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0ZWRTZXROYW1lIC0gVGhlIHNvcnRlZCBzZXQgdG8gZmV0Y2ggZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCB3aG9zZSBzY29yZSB3ZSBhcmUgaW5jcmVtZW50aW5nLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IC0gVGhlIHF1YW50aXR5IHRvIGFkZCB0byB0aGUgc2NvcmUuIE1heSBiZSBwb3NpdGl2ZSxcbiAgICogbmVnYXRpdmUsIG9yIHplcm8uIERlZmF1bHRzIHRvIDEuXG4gICAqIEBwYXJhbSB7U29ydGVkU2V0SW5jcmVtZW50T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25UdGx9IFtvcHRpb25zLnR0bF0gLSBIb3cgdGhlIFRUTCBzaG91bGQgYmUgbWFuYWdlZC5cbiAgICogUmVmcmVzaGVzIHRoZSBzb3J0ZWQgc2V0J3MgVFRMIHVzaW5nIHRoZSBjbGllbnQncyBkZWZhdWx0IGlmIHRoaXMgaXMgbm90XG4gICAqIHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNvcnRlZFNldEluY3JlbWVudFNjb3JlLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRJbmNyZW1lbnRTY29yZS5TdWNjZXNzfSBjb250YWluaW5nIHRoZSBpbmNyZW1lbnRlZCBzY29yZVxuICAgKiBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRJbmNyZW1lbnRTY29yZS5FcnJvcn0gb24gZmFpbHVyZS4gSW5jcmVtZW50aW5nIGEgc2NvcmVcbiAgICogdGhhdCB3YXMgbm90IHNldCB1c2luZyB0aGlzIG1ldGhvZCBvciBpcyBub3QgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZlxuICAgKiBhbiBpbnRlZ2VyIHJlc3VsdHMgaW4gYSBmYWlsdXJlIHdpdGggYSBGYWlsZWRQcmVjb25kaXRpb25FeGNlcHRpb24gZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc29ydGVkU2V0SW5jcmVtZW50U2NvcmUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGFtb3VudD86IG51bWJlcixcbiAgICBvcHRpb25zPzogU29ydGVkU2V0SW5jcmVtZW50T3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0SW5jcmVtZW50U2NvcmUuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zb3J0ZWRTZXRJbmNyZW1lbnRTY29yZShcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIHNvcnRlZFNldE5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIGFtb3VudCB8fCAxLFxuICAgICAgb3B0aW9ucz8udHRsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZWxlbWVudCBmcm9tIHRoZSBzb3J0ZWQgc2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc29ydGVkIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRlZFNldE5hbWUgLSBUaGUgc29ydGVkIHNldCB0byByZW1vdmUgZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCB0byByZW1vdmUgZnJvbSB0aGUgc2V0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNvcnRlZFNldFJlbW92ZUVsZW1lbnQuUmVzcG9uc2U+fVxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRSZW1vdmVFbGVtZW50LlN1Y2Nlc3N9IGlmIHRoZSBlbGVtZW50IHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZFxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRJbmNyZW1lbnRTY29yZS5FcnJvcn0gb24gZmFpbHVyZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNvcnRlZFNldFJlbW92ZUVsZW1lbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRSZW1vdmVFbGVtZW50LlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc29ydGVkU2V0UmVtb3ZlRWxlbWVudChjYWNoZU5hbWUsIHNvcnRlZFNldE5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgbXVsdGlwbGUgZWxlbWVudHMgZnJvbSB0aGUgc29ydGVkIHNldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIHNvcnRlZCBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0ZWRTZXROYW1lIC0gVGhlIHNvcnRlZCBzZXQgdG8gcmVtb3ZlIGZyb20uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gdmFsdWVzIC0gVGhlIHZhbHVlcyBvZiB0aGUgZWxlbWVudHMgdG8gcmVtb3ZlIGZyb20gdGhlIHNldC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTb3J0ZWRTZXRSZW1vdmVFbGVtZW50LlJlc3BvbnNlPn1cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0UmVtb3ZlRWxlbWVudC5TdWNjZXNzfSBpZiB0aGUgZWxlbWVudHMgd2VyZSBzdWNjZXNzZnVsbHkgcmVtb3ZlZFxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRJbmNyZW1lbnRTY29yZS5FcnJvcn0gb24gZmFpbHVyZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNvcnRlZFNldFJlbW92ZUVsZW1lbnRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRSZW1vdmVFbGVtZW50cy5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNvcnRlZFNldFJlbW92ZUVsZW1lbnRzKFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgc29ydGVkU2V0TmFtZSxcbiAgICAgIHZhbHVlc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggbGVuZ3RoIChudW1iZXIgb2YgaXRlbXMpIG9mIHNvcnRlZCBzZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBzb3J0ZWQgc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc29ydGVkU2V0TmFtZSAtIFRoZSBzb3J0ZWQgc2V0IG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU29ydGVkU2V0TGVuZ3RoLlJlc3BvbnNlPn1cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0TGVuZ3RoLkhpdH0gY29udGFpbmluZyB0aGUgbGVuZ3RoIGlmIHRoZSBzb3J0ZWQgc2V0IGV4aXN0cy5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0TGVuZ3RoLk1pc3N9IGlmIHRoZSBzb3J0ZWQgc2V0IGRvZXMgbm90IGV4aXN0LlxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRMZW5ndGguRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc29ydGVkU2V0TGVuZ3RoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0TGVuZ3RoLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc29ydGVkU2V0TGVuZ3RoKGNhY2hlTmFtZSwgc29ydGVkU2V0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggbGVuZ3RoIChudW1iZXIgb2YgaXRlbXMpIG9mIHNvcnRlZCBzZXQgd2l0aGluIHRoZSBwcm92aWRlZCBzY29yZSByYW5nZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIHNvcnRlZCBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0ZWRTZXROYW1lIC0gVGhlIHNvcnRlZCBzZXQgbmFtZS5cbiAgICogQHBhcmFtIHtTb3J0ZWRTZXRMZW5ndGhCeVNjb3JlT3B0aW9uc30gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlciBmb3Igc3BlY2lmeWluZyB0aGUgc2NvcmUgcmFuZ2UgdG8gc2VhcmNoIGluLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWluU2NvcmVdIC0gVGhlIGxvd2VyIGJvdW5kIG9uIHRoZSBzY29yZSByYW5nZSB0byBzZWFyY2ggaW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhTY29yZV0gLSBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHNjb3JlIHJhbmdlIHRvIHNlYXJjaCBpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTb3J0ZWRTZXRMZW5ndGhCeVNjb3JlLlJlc3BvbnNlPn1cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0TGVuZ3RoQnlTY29yZS5IaXR9IGNvbnRhaW5pbmcgdGhlIGxlbmd0aCBpZiB0aGUgc29ydGVkIHNldCBleGlzdHMuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldExlbmd0aEJ5U2NvcmUuTWlzc30gaWYgdGhlIHNvcnRlZCBzZXQgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldExlbmd0aEJ5U2NvcmUuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc29ydGVkU2V0TGVuZ3RoQnlTY29yZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFNvcnRlZFNldExlbmd0aEJ5U2NvcmVPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRMZW5ndGhCeVNjb3JlLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc29ydGVkU2V0TGVuZ3RoQnlTY29yZShcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIHNvcnRlZFNldE5hbWUsXG4gICAgICBvcHRpb25zPy5taW5TY29yZSxcbiAgICAgIG9wdGlvbnM/Lm1heFNjb3JlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIGtleSBpbiB0aGUgY2FjaGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBrZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IGZvciB3aGljaCB0eXBlIGlzIHJlcXVlc3RlZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVJdGVtR2V0VHlwZS5SZXNwb25zZT59XG4gICAqIHtAbGluayBDYWNoZUl0ZW1HZXRUeXBlLkhpdH0gY29udGFpbmluZyB0eXBlIG9mIGtleSB3aGVuIGZvdW5kLlxuICAgKiB7QGxpbmsgQ2FjaGVJdGVtR2V0VHlwZS5NaXNzfSB3aGVuIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZUl0ZW1HZXRUeXBlLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGl0ZW1HZXRUeXBlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlSXRlbUdldFR5cGUuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5pdGVtR2V0VHlwZShjYWNoZU5hbWUsIGtleSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSByZW1haW5pbmcgdHRsIG9mIHRoZSBrZXkgaW4gdGhlIGNhY2hlIGluIG1pbGxpc2Vjb25kcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBrZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IGZvciB3aGljaCB0aGUgdHRsIHJlbWFpbmluZyBpcyByZXF1ZXN0ZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlSXRlbUdldFR0bC5SZXNwb25zZT59XG4gICAqIHtAbGluayBDYWNoZUl0ZW1HZXRUdGwuSGl0fSBjb250YWluaW5nIHR0bCByZW1haW5pbmcgb2Yga2V5IHdoZW4gZm91bmQuXG4gICAqIHtAbGluayBDYWNoZUl0ZW1HZXRUdGwuTWlzc30gd2hlbiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LlxuICAgKiB7QGxpbmsgQ2FjaGVJdGVtR2V0VHRsLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGl0ZW1HZXRUdGwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVJdGVtR2V0VHRsLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuaXRlbUdldFR0bChjYWNoZU5hbWUsIGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIGtleSBleGlzdHMgaW4gdGhlIGNhY2hlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gbG9vayBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBrZXkgLSBUaGUga2V5IHRvIGxvb2sgdXAuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlS2V5RXhpc3RzLlJlc3BvbnNlPn1cbiAgICoge0BsaW5rIENhY2hlS2V5RXhpc3RzLlN1Y2Nlc3N9IHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGtleSB3YXMgZm91bmQuXG4gICAqIHtAbGluayBDYWNoZUtleUV4aXN0cy5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBrZXlFeGlzdHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVLZXlFeGlzdHMuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5rZXlFeGlzdHMoY2FjaGVOYW1lLCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBwcm92aWRlZCBrZXlzIGV4aXN0IGluIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIGxvb2sgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBVaW50OEFycmF5W119IGtleXMgLSBUaGUga2V5cyB0byBsb29rIHVwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUtleXNFeGlzdC5SZXNwb25zZT59XG4gICAqIHtAbGluayBDYWNoZUtleXNFeGlzdC5TdWNjZXNzfSByZXR1cm5zIGxpc3Qgb2YgYm9vbGVhbnMgaW5kaWNhdGluZyB3aGV0aGVyIGVhY2gga2V5IHdhcyBmb3VuZC5cbiAgICoge0BsaW5rIENhY2hlS2V5c0V4aXN0LkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGtleXNFeGlzdChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXlzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXVxuICApOiBQcm9taXNlPENhY2hlS2V5c0V4aXN0LlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQua2V5c0V4aXN0KGNhY2hlTmFtZSwga2V5cyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB0dGwgb2YgdGhlIGtleSBpbiB0aGUgY2FjaGUgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIGtleS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgZm9yIHdoaWNoIHRoZSB0dGwgcmVtYWluaW5nIGlzIHJlcXVlc3RlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHR0bE1pbGxpc2Vjb25kcyAtIFRoZSB0dGwgaW4gbWlsbGlzZWNvbmRzIHRoYXQgc2hvdWxkIG92ZXJ3cml0ZSB0aGUgY3VycmVudCB0dGwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlVXBkYXRlVHRsLlJlc3BvbnNlPn1cbiAgICoge0BsaW5rIENhY2hlVXBkYXRlVHRsLlNldH0gd2hlbiB0aGUgdHRsIHdhcyBzdWNjZXNzZnVsbHkgb3ZlcndyaXR0ZW4uXG4gICAqIHtAbGluayBDYWNoZVVwZGF0ZVR0bC5NaXNzfSB3aGVuIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZVVwZGF0ZVR0bC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVUdGwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bE1pbGxpc2Vjb25kczogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVVcGRhdGVUdGwuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC51cGRhdGVUdGwoY2FjaGVOYW1lLCBrZXksIHR0bE1pbGxpc2Vjb25kcyk7XG4gIH1cblxuICAvKipcbiAgICogSW5jcmVhc2UgdGhlIHR0bCBvZiB0aGUga2V5IGluIHRoZSBjYWNoZSBpbiBtaWxsaXNlY29uZHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUga2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBmb3Igd2hpY2ggdGhlIHR0bCByZW1haW5pbmcgaXMgcmVxdWVzdGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdHRsTWlsbGlzZWNvbmRzIC0gVGhlIHR0bCBpbiBtaWxsaXNlY29uZHMgdGhhdCBzaG91bGRcbiAgICogb3ZlcndyaXRlIHRoZSBjdXJyZW50IHR0bC4gU2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCB0dGwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlSW5jcmVhc2VUdGwuUmVzcG9uc2U+fVxuICAgKiB7QGxpbmsgQ2FjaGVJbmNyZWFzZVR0bC5TZXR9IHdoZW4gdGhlIHR0bCB3YXMgc3VjY2Vzc2Z1bGx5IGluY3JlYXNlZC5cbiAgICoge0BsaW5rIENhY2hlSW5jcmVhc2VUdGwuTWlzc30gd2hlbiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LlxuICAgKiB7QGxpbmsgQ2FjaGVJbmNyZWFzZVR0bC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbmNyZWFzZVR0bChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdHRsTWlsbGlzZWNvbmRzOiBudW1iZXJcbiAgKTogUHJvbWlzZTxDYWNoZUluY3JlYXNlVHRsLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuaW5jcmVhc2VUdGwoY2FjaGVOYW1lLCBrZXksIHR0bE1pbGxpc2Vjb25kcyk7XG4gIH1cblxuICAvKipcbiAgICogRGVjcmVhc2UgdGhlIHR0bCBvZiB0aGUga2V5IGluIHRoZSBjYWNoZSBpbiBtaWxsaXNlY29uZHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUga2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBmb3Igd2hpY2ggdGhlIHR0bCByZW1haW5pbmcgaXMgcmVxdWVzdGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdHRsTWlsbGlzZWNvbmRzIC0gVGhlIHR0bCBpbiBtaWxsaXNlY29uZHMgdGhhdCBzaG91bGRcbiAgICogb3ZlcndyaXRlIHRoZSBjdXJyZW50IHR0bC4gU2hvdWxkIGJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCB0dGwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlRGVjcmVhc2VUdGwuUmVzcG9uc2U+fVxuICAgKiB7QGxpbmsgQ2FjaGVEZWNyZWFzZVR0bC5TZXR9IHdoZW4gdGhlIHR0bCB3YXMgc3VjY2Vzc2Z1bGx5IGRlY3JlYXNlZC5cbiAgICoge0BsaW5rIENhY2hlRGVjcmVhc2VUdGwuTWlzc30gd2hlbiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LlxuICAgKiB7QGxpbmsgQ2FjaGVEZWNyZWFzZVR0bC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWNyZWFzZVR0bChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdHRsTWlsbGlzZWNvbmRzOiBudW1iZXJcbiAgKTogUHJvbWlzZTxDYWNoZURlY3JlYXNlVHRsLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuZGVjcmVhc2VUdGwoY2FjaGVOYW1lLCBrZXksIHR0bE1pbGxpc2Vjb25kcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TmV4dERhdGFDbGllbnQoKTogSURhdGFDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZGF0YUNsaWVudHNbdGhpcy5uZXh0RGF0YUNsaWVudEluZGV4XTtcbiAgICB0aGlzLm5leHREYXRhQ2xpZW50SW5kZXggPVxuICAgICAgKHRoaXMubmV4dERhdGFDbGllbnRJbmRleCArIDEpICUgdGhpcy5kYXRhQ2xpZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxuXG4gIGFic3RyYWN0IGNsb3NlKCk6IHZvaWQ7XG59XG4iXX0=
1077
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RDYWNoZUNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pbnRlcm5hbC9jbGllbnRzL2NhY2hlL0Fic3RyYWN0Q2FjaGVDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMENBdUV3QjtBQTJCeEIsbURBQTZDO0FBRTdDLE1BQXNCLG1CQUFtQjtJQVN2QyxZQUNFLGFBQTZCLEVBQzdCLFdBQTBCLEVBQzFCLFVBQXdCO1FBRXhCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBRTdCLDRFQUE0RTtRQUM1RSx5RUFBeUU7UUFDekUsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFpQjtRQUM1QixPQUFPLElBQUksNEJBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUk7O1FBQ2YsT0FBTyxNQUFNLENBQUEsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxJQUFJLEVBQUUsQ0FBQSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBaUI7UUFDeEMsT0FBTyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFpQjtRQUN4QyxPQUFPLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJ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QUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxLQUFLLENBQUMsV0FBVyxDQUN0QixTQUFpQixFQUNqQixHQUF3QixFQUN4QixlQUF1QjtRQUV2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN4QyxPQUFPLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksS0FBSyxDQUFDLFdBQVcsQ0FDdEIsU0FBaUIsRUFDakIsR0FBd0IsRUFDeEIsZUFBdUI7UUFFdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDeEMsT0FBTyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRVMsaUJBQWlCO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLG1CQUFtQjtZQUN0QixDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUMzRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBR0Y7QUF6L0NELGtEQXkvQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDcmVhdGVDYWNoZSxcbiAgRGVsZXRlQ2FjaGUsXG4gIExpc3RDYWNoZXMsXG4gIENhY2hlRmx1c2gsXG4gIENhY2hlR2V0LFxuICBDYWNoZVNldCxcbiAgQ2FjaGVEZWxldGUsXG4gIENhY2hlSW5jcmVtZW50LFxuICBJbmNyZW1lbnRPcHRpb25zLFxuICBDYWNoZVNldElmTm90RXhpc3RzLFxuICBTZXRJZk5vdEV4aXN0c09wdGlvbnMsXG4gIFNldElmQWJzZW50T3B0aW9ucyxcbiAgU2V0SWZQcmVzZW50T3B0aW9ucyxcbiAgU2V0SWZFcXVhbE9wdGlvbnMsXG4gIFNldElmTm90RXF1YWxPcHRpb25zLFxuICBTZXRJZlByZXNlbnRBbmROb3RFcXVhbE9wdGlvbnMsXG4gIFNldElmQWJzZW50T3JFcXVhbE9wdGlvbnMsXG4gIENhY2hlU2V0RmV0Y2gsXG4gIENhY2hlU2V0QWRkRWxlbWVudCxcbiAgQ2FjaGVTZXRBZGRFbGVtZW50cyxcbiAgQ2FjaGVTZXRSZW1vdmVFbGVtZW50LFxuICBDYWNoZVNldFJlbW92ZUVsZW1lbnRzLFxuICBDYWNoZUxpc3RGZXRjaCxcbiAgQ2FjaGVMaXN0TGVuZ3RoLFxuICBDYWNoZUxpc3RQdXNoRnJvbnQsXG4gIENhY2hlTGlzdFB1c2hCYWNrLFxuICBDYWNoZUxpc3RDb25jYXRlbmF0ZUJhY2ssXG4gIENhY2hlTGlzdENvbmNhdGVuYXRlRnJvbnQsXG4gIENhY2hlTGlzdFBvcEJhY2ssXG4gIENhY2hlTGlzdFBvcEZyb250LFxuICBDYWNoZUxpc3RSZW1vdmVWYWx1ZSxcbiAgQ2FjaGVMaXN0UmV0YWluLFxuICBDYWNoZURpY3Rpb25hcnlTZXRGaWVsZCxcbiAgQ2FjaGVEaWN0aW9uYXJ5U2V0RmllbGRzLFxuICBDYWNoZURpY3Rpb25hcnlHZXRGaWVsZCxcbiAgQ2FjaGVEaWN0aW9uYXJ5R2V0RmllbGRzLFxuICBDYWNoZURpY3Rpb25hcnlJbmNyZW1lbnQsXG4gIENhY2hlRGljdGlvbmFyeUZldGNoLFxuICBDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZCxcbiAgQ2FjaGVEaWN0aW9uYXJ5UmVtb3ZlRmllbGRzLFxuICBDYWNoZURpY3Rpb25hcnlMZW5ndGgsXG4gIENhY2hlU29ydGVkU2V0RmV0Y2gsXG4gIENhY2hlU29ydGVkU2V0UHV0RWxlbWVudCxcbiAgQ2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50cyxcbiAgQ2FjaGVTb3J0ZWRTZXRHZXRSYW5rLFxuICBDYWNoZVNvcnRlZFNldEdldFNjb3JlLFxuICBDYWNoZVNvcnRlZFNldEdldFNjb3JlcyxcbiAgQ2FjaGVTb3J0ZWRTZXRJbmNyZW1lbnRTY29yZSxcbiAgQ2FjaGVTb3J0ZWRTZXRSZW1vdmVFbGVtZW50LFxuICBDYWNoZVNvcnRlZFNldFJlbW92ZUVsZW1lbnRzLFxuICBDYWNoZVNvcnRlZFNldExlbmd0aCxcbiAgQ2FjaGVTb3J0ZWRTZXRMZW5ndGhCeVNjb3JlLFxuICBTb3J0ZWRTZXRPcmRlcixcbiAgQ2FjaGVJdGVtR2V0VHRsLFxuICBDYWNoZUl0ZW1HZXRUeXBlLFxuICBDYWNoZUtleUV4aXN0cyxcbiAgQ2FjaGVLZXlzRXhpc3QsXG4gIENhY2hlVXBkYXRlVHRsLFxuICBDYWNoZUluY3JlYXNlVHRsLFxuICBDYWNoZURlY3JlYXNlVHRsLFxuICBHZXRCYXRjaCxcbiAgU2V0QmF0Y2gsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBDYWNoZVNldElmQWJzZW50LFxuICBDYWNoZVNldElmUHJlc2VudCxcbiAgQ2FjaGVTZXRJZkVxdWFsLFxuICBDYWNoZVNldElmTm90RXF1YWwsXG4gIENhY2hlU2V0SWZQcmVzZW50QW5kTm90RXF1YWwsXG4gIENhY2hlU2V0SWZBYnNlbnRPckVxdWFsLFxuICBDYWNoZVNldFNhbXBsZSxcbn0gZnJvbSAnLi4vLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHtMaXN0RmV0Y2hDYWxsT3B0aW9ucywgTGlzdFJldGFpbkNhbGxPcHRpb25zfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQge1xuICBJQ2FjaGVDbGllbnQsXG4gIFNldE9wdGlvbnMsXG4gIFNldEFkZEVsZW1lbnRPcHRpb25zLFxuICBTZXRBZGRFbGVtZW50c09wdGlvbnMsXG4gIExpc3RQdXNoRnJvbnRPcHRpb25zLFxuICBMaXN0UHVzaEJhY2tPcHRpb25zLFxuICBMaXN0Q29uY2F0ZW5hdGVCYWNrT3B0aW9ucyxcbiAgTGlzdENvbmNhdGVuYXRlRnJvbnRPcHRpb25zLFxuICBEaWN0aW9uYXJ5U2V0RmllbGRPcHRpb25zLFxuICBEaWN0aW9uYXJ5U2V0RmllbGRzT3B0aW9ucyxcbiAgRGljdGlvbmFyeUluY3JlbWVudE9wdGlvbnMsXG4gIFNvcnRlZFNldEZldGNoQnlSYW5rT3B0aW9ucyxcbiAgU29ydGVkU2V0UHV0RWxlbWVudE9wdGlvbnMsXG4gIFNvcnRlZFNldFB1dEVsZW1lbnRzT3B0aW9ucyxcbiAgU29ydGVkU2V0RmV0Y2hCeVNjb3JlT3B0aW9ucyxcbiAgU29ydGVkU2V0SW5jcmVtZW50T3B0aW9ucyxcbiAgU29ydGVkU2V0TGVuZ3RoQnlTY29yZU9wdGlvbnMsXG4gIFNldEJhdGNoT3B0aW9ucyxcbiAgR2V0T3B0aW9ucyxcbn0gZnJvbSAnLi4vLi4vLi4vY2xpZW50cy9JQ2FjaGVDbGllbnQnO1xuaW1wb3J0IHtJQ29udHJvbENsaWVudH0gZnJvbSAnLi9JQ29udHJvbENsaWVudCc7XG5pbXBvcnQge0lEYXRhQ2xpZW50fSBmcm9tICcuL0lEYXRhQ2xpZW50JztcbmltcG9ydCB7SVBpbmdDbGllbnR9IGZyb20gJy4vSVBpbmdDbGllbnQnO1xuaW1wb3J0IHtJTW9tZW50b0NhY2hlfSBmcm9tICcuLi8uLi8uLi9jbGllbnRzL0lNb21lbnRvQ2FjaGUnO1xuaW1wb3J0IHtNb21lbnRvQ2FjaGV9IGZyb20gJy4vbW9tZW50by1jYWNoZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENhY2hlQ2xpZW50IGltcGxlbWVudHMgSUNhY2hlQ2xpZW50IHtcbiAgLy8gbWFraW5nIHRoZXNlIHByb3RlY3RlZCB1bnRpbCB3ZSBmdWxseSBhYnN0cmFjdCBhd2F5IHRoZSBub2RlanMgY2xpZW50XG4gIHByb3RlY3RlZCByZWFkb25seSBjb250cm9sQ2xpZW50OiBJQ29udHJvbENsaWVudDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGFDbGllbnRzOiBJRGF0YUNsaWVudFtdO1xuICAvLyBUT0RPOiBNYWtlIHBpbmdDbGllbnQgcmVxdWlyZWQgaWYgYW5kIHdoZW4gdGhlIG5vZGVqcyBzaWRlIHN0YXJ0cyBhZGRpbmdcbiAgLy8gIG9uZSBhcyB3ZWxsXG4gIHByb3RlY3RlZCByZWFkb25seSBwaW5nQ2xpZW50PzogSVBpbmdDbGllbnQ7XG4gIHByb3RlY3RlZCBuZXh0RGF0YUNsaWVudEluZGV4OiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRyb2xDbGllbnQ6IElDb250cm9sQ2xpZW50LFxuICAgIGRhdGFDbGllbnRzOiBJRGF0YUNsaWVudFtdLFxuICAgIHBpbmdDbGllbnQ/OiBJUGluZ0NsaWVudFxuICApIHtcbiAgICB0aGlzLmNvbnRyb2xDbGllbnQgPSBjb250cm9sQ2xpZW50O1xuICAgIHRoaXMuZGF0YUNsaWVudHMgPSBkYXRhQ2xpZW50cztcbiAgICB0aGlzLnBpbmdDbGllbnQgPSBwaW5nQ2xpZW50O1xuXG4gICAgLy8gV2Ugcm91bmQtcm9iaW4gdGhlIHJlcXVlc3RzIHRocm91Z2ggYWxsIG9mIG91ciBjbGllbnRzLiAgU2luY2UgamF2YXNjcmlwdFxuICAgIC8vIGlzIHNpbmdsZS10aHJlYWRlZCwgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aHJlYWQgc2FmZXR5IG9uIHRoaXNcbiAgICAvLyBpbmRleCB2YXJpYWJsZS5cbiAgICB0aGlzLm5leHREYXRhQ2xpZW50SW5kZXggPSAwO1xuICB9XG5cbiAgcHVibGljIGNhY2hlKGNhY2hlTmFtZTogc3RyaW5nKTogSU1vbWVudG9DYWNoZSB7XG4gICAgcmV0dXJuIG5ldyBNb21lbnRvQ2FjaGUodGhpcywgY2FjaGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaW5nIHRoZSBzZXJ2aWNlIHRvIHZlcmlmeSBpdCBpcyB1cCBhbmQgcnVubmluZ1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHBpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucGluZ0NsaWVudD8ucGluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjYWNoZSBpZiBpdCBkb2VzIG5vdCBleGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDcmVhdGVDYWNoZS5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENyZWF0ZUNhY2hlLlN1Y2Nlc3N9IG9uIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDcmVhdGVDYWNoZS5BbHJlYWR5RXhpc3RzfSBpZiB0aGUgY2FjaGUgYWxyZWFkeSBleGlzdHMuXG4gICAqIHtAbGluayBDcmVhdGVDYWNoZS5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDYWNoZShjYWNoZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Q3JlYXRlQ2FjaGUuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb250cm9sQ2xpZW50LmNyZWF0ZUNhY2hlKGNhY2hlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhIGNhY2hlIGFuZCBhbGwgaXRlbXMgc3RvcmVkIGluIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8RGVsZXRlQ2FjaGUuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBEZWxldGVDYWNoZS5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgRGVsZXRlQ2FjaGUuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGVsZXRlQ2FjaGUoY2FjaGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPERlbGV0ZUNhY2hlLlJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29udHJvbENsaWVudC5kZWxldGVDYWNoZShjYWNoZU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RzIGFsbCBjYWNoZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExpc3RDYWNoZXMuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBMaXN0Q2FjaGVzLlN1Y2Nlc3N9IGNvbnRhaW5pbmcgdGhlIGxpc3Qgb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIExpc3RDYWNoZXMuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbGlzdENhY2hlcygpOiBQcm9taXNlPExpc3RDYWNoZXMuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb250cm9sQ2xpZW50Lmxpc3RDYWNoZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBzdG9yZWQgZm9yIHRoZSBnaXZlbiBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gcGVyZm9ybSB0aGUgbG9va3VwIGluLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGtleSAtIFRoZSBrZXkgdG8gbG9vayB1cC5cbiAgICogQHBhcmFtIHtHZXRPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtkZWNvbXByZXNzfSBbb3B0aW9ucy5kZWNvbXByZXNzPWZhbHNlXSAtIFdoZXRoZXIgdG8gZGVjb21wcmVzcyB0aGUgdmFsdWUuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUdldC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlR2V0LkhpdH0gY29udGFpbmluZyB0aGUgdmFsdWUgaWYgb25lIGlzIGZvdW5kLlxuICAgKiB7QGxpbmsgQ2FjaGVHZXQuTWlzc30gaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlR2V0LkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IEdldE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZUdldC5SZXNwb25zZT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldE5leHREYXRhQ2xpZW50KCkuZ2V0KGNhY2hlTmFtZSwga2V5LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NvY2lhdGVzIHRoZSBnaXZlbiBrZXkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuIElmIGEgdmFsdWUgZm9yIHRoZSBrZXkgaXNcbiAgICogYWxyZWFkeSBwcmVzZW50IGl0IGlzIHJlcGxhY2VkIHdpdGggdGhlIG5ldyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBzdG9yZSB0aGUgdmFsdWUgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0ga2V5IC0gVGhlIGtleSB0byBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RvcmVkLlxuICAgKiBAcGFyYW0ge1NldE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudHRsXSAtIFRoZSB0aW1lIHRvIGxpdmUgZm9yIHRoZSBpdGVtIGluIHRoZSBjYWNoZS5cbiAgICogVXNlcyB0aGUgY2xpZW50J3MgZGVmYXVsdCBUVEwgaWYgdGhpcyBpcyBub3Qgc3VwcGxpZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY29tcHJlc3M9ZmFsc2VdIC0gV2hldGhlciB0byBjb21wcmVzcyB0aGUgdmFsdWUuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU2V0LlN1Y2Nlc3N9IG9uIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZVNldC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXQuUmVzcG9uc2U+IHtcbiAgICAvLyB0aGlzIHR5cGVvZiBjaGVjayB3b3VsZG4ndCBiZSBuZWNlc3NhcnkgaW4gVFMsIGJ1dCBpdCBjYW4gaGVscCBjYXRjaCBidWdzIGluIEpTIGNvZGUgYXQgcnVudGltZS5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICdPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggYSB0dGwgcHJvcGVydHkuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2V0KGNhY2hlTmFtZSwga2V5LCB2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4ga2V5IGZyb20gdGhlIGNhY2hlLiBUaGUga2V5IGNhbiByZXByZXNlbnQgYSBzaW5nbGUgdmFsdWVcbiAgICogb3IgYSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIGRlbGV0ZSBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGtleSAtIFRoZSBrZXkgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZURlbGV0ZS5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlRGVsZXRlLlN1Y2Nlc3N9IG9uIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZURlbGV0ZS5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVEZWxldGUuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5kZWxldGUoY2FjaGVOYW1lLCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZhbHVlIHN0b3JlZCBmb3IgdGhlIGdpdmVuIGtleXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gcGVyZm9ybSB0aGUgbG9va3VwIGluLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgVWludDhBcnJheVtdfSBrZXlzIC0gVGhlIGxpc3Qgb2Yga2V5cyB0byBsb29rIHVwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxHZXRCYXRjaC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIEdldEJhdGNoLlN1Y2Nlc3N9IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBpZiB0aGV5IHdlcmUgZm91bmQuXG4gICAqIHtAbGluayBHZXRCYXRjaC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRCYXRjaChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXlzOiBBcnJheTxzdHJpbmcgfCBVaW50OEFycmF5PlxuICApOiBQcm9taXNlPEdldEJhdGNoLlJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKS5nZXRCYXRjaChjYWNoZU5hbWUsIGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc29jaWF0ZXMgdGhlIGdpdmVuIGtleXMgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzLiBJZiBhIHZhbHVlIGZvciB0aGUga2V5IGlzXG4gICAqIGFscmVhZHkgcHJlc2VudCBpdCBpcyByZXBsYWNlZCB3aXRoIHRoZSBuZXcgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIHZhbHVlcyBpbi5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBVaW50OEFycmF5PiB8IE1hcDxzdHJpbmcgfCBVaW50OEFycmF5LCBzdHJpbmcgfCBVaW50OEFycmF5Pn0gaXRlbXMgLSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGJlIHN0b3JlZC5cbiAgICogQHBhcmFtIHtTZXRPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnR0bF0gLSBUaGUgdGltZSB0byBsaXZlIGZvciB0aGUgaXRlbXMgaW4gdGhlIGNhY2hlLlxuICAgKiBVc2VzIHRoZSBjbGllbnQncyBkZWZhdWx0IFRUTCBpZiB0aGlzIGlzIG5vdCBzdXBwbGllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTZXQuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBTZXRCYXRjaC5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgU2V0QmF0Y2guRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0QmF0Y2goXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgaXRlbXM6XG4gICAgICB8IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IFVpbnQ4QXJyYXk+XG4gICAgICB8IE1hcDxzdHJpbmcgfCBVaW50OEFycmF5LCBzdHJpbmcgfCBVaW50OEFycmF5PixcbiAgICBvcHRpb25zPzogU2V0QmF0Y2hPcHRpb25zXG4gICk6IFByb21pc2U8U2V0QmF0Y2guUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zZXRCYXRjaChjYWNoZU5hbWUsIGl0ZW1zLCBvcHRpb25zPy50dGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgbXVsdGlwbGUgZWxlbWVudHMgdG8gdGhlIGJhY2sgb2YgdGhlIGdpdmVuIGxpc3QuIENyZWF0ZXMgdGhlIGxpc3QgaWZcbiAgICogaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBzdG9yZSB0aGUgbGlzdCBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpc3ROYW1lIC0gVGhlIGxpc3QgdG8gYWRkIHRvLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgVWludDhBcnJheVtdfSB2YWx1ZXMgLSBUaGUgZWxlbWVudHMgdG8gYWRkIHRvIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0ge0xpc3RDb25jYXRlbmF0ZUJhY2tPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRydW5jYXRlRnJvbnRUb1NpemVdIC0gSWYgdGhlIGxpc3QgZXhjZWVkcyB0aGlzXG4gICAqIGxlbmd0aCwgcmVtb3ZlIGV4Y2VzcyBmcm9tIHRoZSBmcm9udCBvZiB0aGUgbGlzdC4gTXVzdCBiZSBwb3NpdGl2ZS5cbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVHRsfSBbb3B0aW9ucy50dGxdIC0gSG93IHRoZSBUVEwgc2hvdWxkIGJlIG1hbmFnZWQuXG4gICAqIFJlZnJlc2hlcyB0aGUgbGlzdCdzIFRUTCB1c2luZyB0aGUgY2xpZW50J3MgZGVmYXVsdCBpZiB0aGlzIGlzIG5vdFxuICAgKiBzdXBwbGllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVMaXN0Q29uY2F0ZW5hdGVCYWNrLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0Q29uY2F0ZW5hdGVCYWNrLlN1Y2Nlc3N9IG9uIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZUxpc3RDb25jYXRlbmF0ZUJhY2suRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbGlzdENvbmNhdGVuYXRlQmFjayhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogc3RyaW5nW10gfCBVaW50OEFycmF5W10sXG4gICAgb3B0aW9ucz86IExpc3RDb25jYXRlbmF0ZUJhY2tPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0Q29uY2F0ZW5hdGVCYWNrLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQubGlzdENvbmNhdGVuYXRlQmFjayhcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGxpc3ROYW1lLFxuICAgICAgdmFsdWVzLFxuICAgICAgb3B0aW9ucz8udHJ1bmNhdGVGcm9udFRvU2l6ZSxcbiAgICAgIG9wdGlvbnM/LnR0bFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBtdWx0aXBsZSBlbGVtZW50cyB0byB0aGUgZnJvbnQgb2YgdGhlIGdpdmVuIGxpc3QuIENyZWF0ZXMgdGhlIGxpc3QgaWZcbiAgICogaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBzdG9yZSB0aGUgbGlzdCBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpc3ROYW1lIC0gVGhlIGxpc3QgdG8gYWRkIHRvLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgVWludDhBcnJheVtdfSB2YWx1ZXMgLSBUaGUgZWxlbWVudHMgdG8gYWRkIHRvIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0ge0xpc3RDb25jYXRlbmF0ZUZyb250T3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50cnVuY2F0ZUJhY2tUb1NpemVdIC0gSWYgdGhlIGxpc3QgZXhjZWVkcyB0aGlzXG4gICAqIGxlbmd0aCwgcmVtb3ZlIGV4Y2VzcyBmcm9tIHRoZSBiYWNrIG9mIHRoZSBsaXN0LiBNdXN0IGJlIHBvc2l0aXZlLlxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25UdGx9IFtvcHRpb25zLnR0bF0gLSBIb3cgdGhlIFRUTCBzaG91bGQgYmUgbWFuYWdlZC5cbiAgICogUmVmcmVzaGVzIHRoZSBsaXN0J3MgVFRMIHVzaW5nIHRoZSBjbGllbnQncyBkZWZhdWx0IGlmIHRoaXMgaXMgbm90XG4gICAqIHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUxpc3RDb25jYXRlbmF0ZUZyb250LlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0Q29uY2F0ZW5hdGVGcm9udC5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0Q29uY2F0ZW5hdGVGcm9udC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0Q29uY2F0ZW5hdGVGcm9udChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogc3RyaW5nW10gfCBVaW50OEFycmF5W10sXG4gICAgb3B0aW9ucz86IExpc3RDb25jYXRlbmF0ZUZyb250T3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlTGlzdENvbmNhdGVuYXRlRnJvbnQuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5saXN0Q29uY2F0ZW5hdGVGcm9udChcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGxpc3ROYW1lLFxuICAgICAgdmFsdWVzLFxuICAgICAgb3B0aW9ucz8udHJ1bmNhdGVCYWNrVG9TaXplLFxuICAgICAgb3B0aW9ucz8udHRsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFsbCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gbGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGlzdE5hbWUgLSBUaGUgbGlzdCB0byBmZXRjaC5cbiAgICogQHBhcmFtIHtMaXN0RmV0Y2hDYWxsT3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zdGFydEluZGV4XSAtIFN0YXJ0IGluY2x1c2l2ZSBpbmRleCBmb3IgZmV0Y2ggb3BlcmF0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZW5kSW5kZXhdIC0gRW5kIGV4Y2x1c2l2ZSBpbmRleCBmb3IgZmV0Y2ggb3BlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUxpc3RGZXRjaC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlTGlzdEZldGNoLkhpdH0gY29udGFpbmluZyB0aGUgbGlzdCBlbGVtZW50cyBpZiB0aGUgbGlzdCBleGlzdHMuXG4gICAqIHtAbGluayBDYWNoZUxpc3RGZXRjaC5NaXNzfSBpZiB0aGUgbGlzdCBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlTGlzdEZldGNoLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3RGZXRjaChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBMaXN0RmV0Y2hDYWxsT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlTGlzdEZldGNoLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQubGlzdEZldGNoKFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgbGlzdE5hbWUsXG4gICAgICBvcHRpb25zPy5zdGFydEluZGV4LFxuICAgICAgb3B0aW9ucz8uZW5kSW5kZXhcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gbGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGlzdE5hbWUgLSBUaGUgbGlzdCB0byBnZXQgdGhlIGxlbmd0aCBvZi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVMaXN0TGVuZ3RoLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0TGVuZ3RoLkhpdH0gY29udGFpbmluZyB0aGUgbGVuZ3RoIGlmIHRoZSBsaXN0IGV4aXN0cy5cbiAgICoge0BsaW5rIENhY2hlTGlzdExlbmd0aC5NaXNzfSBpZiB0aGUgbGlzdCBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlTGlzdExlbmd0aC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0TGVuZ3RoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RMZW5ndGguUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5saXN0TGVuZ3RoKGNhY2hlTmFtZSwgbGlzdE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHJlbW92ZXMgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gbGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGlzdE5hbWUgLSBUaGUgbGlzdCB0byBwb3AuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlTGlzdFBvcEJhY2suUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZUxpc3RQb3BCYWNrLkhpdH0gY29udGFpbmluZyB0aGUgZWxlbWVudCBpZiB0aGUgbGlzdCBleGlzdHMuXG4gICAqIHtAbGluayBDYWNoZUxpc3RQb3BCYWNrLk1pc3N9IGlmIHRoZSBsaXN0IGRvZXMgbm90IGV4aXN0LlxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0UG9wQmFjay5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0UG9wQmFjayhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UG9wQmFjay5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50Lmxpc3RQb3BCYWNrKGNhY2hlTmFtZSwgbGlzdE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHJlbW92ZXMgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlIGdpdmVuIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpc3ROYW1lIC0gVGhlIGxpc3QgdG8gcG9wLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUxpc3RQb3BGcm9udC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlTGlzdFBvcEZyb250LkhpdH0gY29udGFpbmluZyB0aGUgZWxlbWVudCBpZiB0aGUgbGlzdCBleGlzdHMuXG4gICAqIHtAbGluayBDYWNoZUxpc3RQb3BGcm9udC5NaXNzfSBpZiB0aGUgbGlzdCBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlTGlzdFBvcEZyb250LkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3RQb3BGcm9udChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UG9wRnJvbnQuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5saXN0UG9wRnJvbnQoY2FjaGVOYW1lLCBsaXN0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBlbGVtZW50IHRvIHRoZSBiYWNrIG9mIHRoZSBnaXZlbiBsaXN0LiBDcmVhdGVzIHRoZSBsaXN0IGlmXG4gICAqIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIGxpc3QgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaXN0TmFtZSAtIFRoZSBsaXN0IHRvIHB1c2ggdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcHVzaC5cbiAgICogQHBhcmFtIHtMaXN0UHVzaEJhY2tPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRydW5jYXRlRnJvbnRUb1NpemVdIC0gSWYgdGhlIGxpc3QgZXhjZWVkcyB0aGlzXG4gICAqIGxlbmd0aCwgcmVtb3ZlIGV4Y2VzcyBmcm9tIHRoZSBmcm9udCBvZiB0aGUgbGlzdC4gTXVzdCBiZSBwb3NpdGl2ZS5cbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVHRsfSBbb3B0aW9ucy50dGxdIC0gSG93IHRoZSBUVEwgc2hvdWxkIGJlIG1hbmFnZWQuXG4gICAqIFJlZnJlc2hlcyB0aGUgbGlzdCdzIFRUTCB1c2luZyB0aGUgY2xpZW50J3MgZGVmYXVsdCBpZiB0aGlzIGlzIG5vdFxuICAgKiBzdXBwbGllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVMaXN0UHVzaEJhY2suUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZUxpc3RQdXNoQmFjay5TdWNjZXNzfSBjb250YWluaW5nIHRoZSBsaXN0J3MgbmV3IGxlbmd0aCBvblxuICAgKiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0UHVzaEJhY2suRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbGlzdFB1c2hCYWNrKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IExpc3RQdXNoQmFja09wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RQdXNoQmFjay5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50Lmxpc3RQdXNoQmFjayhcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGxpc3ROYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBvcHRpb25zPy50cnVuY2F0ZUZyb250VG9TaXplLFxuICAgICAgb3B0aW9ucz8udHRsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGVsZW1lbnQgdG8gdGhlIGZyb250IG9mIHRoZSBnaXZlbiBsaXN0LiBDcmVhdGVzIHRoZSBsaXN0IGlmXG4gICAqIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIGxpc3QgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaXN0TmFtZSAtIFRoZSBsaXN0IHRvIHB1c2ggdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcHVzaC5cbiAgICogQHBhcmFtIHtMaXN0UHVzaEZyb250T3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50cnVuY2F0ZUJhY2tUb1NpemVdIC0gSWYgdGhlIGxpc3QgZXhjZWVkcyB0aGlzXG4gICAqIGxlbmd0aCwgcmVtb3ZlIGV4Y2VzcyBmcm9tIHRoZSBlbmQgb2YgdGhlIGxpc3QuIE11c3QgYmUgcG9zaXRpdmUuXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvblR0bH0gW29wdGlvbnMudHRsXSAtIEhvdyB0aGUgVFRMIHNob3VsZCBiZSBtYW5hZ2VkLlxuICAgKiBSZWZyZXNoZXMgdGhlIGxpc3QncyBUVEwgdXNpbmcgdGhlIGNsaWVudCdzIGRlZmF1bHQgaWYgdGhpcyBpcyBub3RcbiAgICogc3VwcGxpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlTGlzdFB1c2hGcm9udC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlTGlzdFB1c2hGcm9udC5TdWNjZXNzfSBjb250YWluaW5nIHRoZSBsaXN0J3MgbmV3IGxlbmd0aCBvblxuICAgKiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0UHVzaEZyb250LkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3RQdXNoRnJvbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogTGlzdFB1c2hGcm9udE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RQdXNoRnJvbnQuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5saXN0UHVzaEZyb250KFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgbGlzdE5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIG9wdGlvbnM/LnRydW5jYXRlQmFja1RvU2l6ZSxcbiAgICAgIG9wdGlvbnM/LnR0bFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgZnJvbSB0aGUgZ2l2ZW4gbGlzdCBlcXVhbCB0byB0aGUgZ2l2ZW4gdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpc3ROYW1lIC0gVGhlIGxpc3QgdG8gcmVtb3ZlIGZyb20uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUxpc3RSZW1vdmVWYWx1ZS5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlTGlzdFJlbW92ZVZhbHVlLlN1Y2Nlc3N9IG9uIHN1Y2Nlc3MuIFJlbW92aW5nIGFuIGVsZW1lbnQgdGhhdFxuICAgKiBkb2VzIG5vdCBvY2N1ciBpbiB0aGUgbGlzdCBvciByZW1vdmluZyBmcm9tIGEgbm9uLWV4aXN0ZW50IGxpc3QgY291bnRzIGFzIGFcbiAgICogc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlTGlzdFJlbW92ZVZhbHVlLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3RSZW1vdmVWYWx1ZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UmVtb3ZlVmFsdWUuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5saXN0UmVtb3ZlVmFsdWUoY2FjaGVOYW1lLCBsaXN0TmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldGFpbnMgc2xpY2Ugb2YgZWxlbWVudHMgb2YgYSBnaXZlbiBsaXN0LCBkZWxldGVzIHRoZSByZXN0IG9mIHRoZSBsaXN0XG4gICAqIHRoYXQgaXNuJ3QgYmVpbmcgcmV0YWluZWQuIFJldHVybnMgYSBTdWNjZXNzIG9yIEVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIGxpc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaXN0TmFtZSAtIFRoZSBsaXN0IHRvIHJldGFpbiBhIHNsaWNlIG9mLlxuICAgKiBAcGFyYW0ge0xpc3RSZXRhaW5DYWxsT3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zdGFydEluZGV4XSAtIFN0YXJ0IGluY2x1c2l2ZSBpbmRleCBmb3IgZmV0Y2hcbiAgICogb3BlcmF0aW9uLiBEZWZhdWx0cyB0byBzdGFydCBvZiBhcnJheSBpZiBub3QgZ2l2ZW4sIDAuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5lbmRJbmRleF0gLSBFbmQgZXhjbHVzaXZlIGluZGV4IGZvciBmZXRjaFxuICAgKiBvcGVyYXRpb24uIERlZmF1bHRzIHRvIGVuZCBvZiBhcnJheSBpZiBub3QgZ2l2ZW4uXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvblR0bH0gW29wdGlvbnMudHRsXSAtIEhvdyB0aGUgVFRMIHNob3VsZCBiZSBtYW5hZ2VkLlxuICAgKiBSZWZyZXNoZXMgdGhlIGxpc3QncyBUVEwgdXNpbmcgdGhlIGNsaWVudCdzIGRlZmF1bHQgaWYgdGhpcyBpcyBub3RcbiAgICogc3VwcGxpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlTGlzdFJldGFpbi5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlTGlzdFJldGFpbi5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVMaXN0UmV0YWluLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3RSZXRhaW4oXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTGlzdFJldGFpbkNhbGxPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UmV0YWluLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQubGlzdFJldGFpbihcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGxpc3ROYW1lLFxuICAgICAgb3B0aW9ucz8uc3RhcnRJbmRleCxcbiAgICAgIG9wdGlvbnM/LmVuZEluZGV4LFxuICAgICAgb3B0aW9ucz8udHRsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFsbCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gc2V0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2V0TmFtZSAtIFRoZSBzZXQgdG8gZmV0Y2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU2V0RmV0Y2guUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZVNldEZldGNoLkhpdH0gY29udGFpbmluZyB0aGUgc2V0IGVsZW1lbnRzIGlmIHRoZSBzZXQgZXhpc3RzLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRGZXRjaC5NaXNzfSBpZiB0aGUgc2V0IGRvZXMgbm90IGV4aXN0LlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRGZXRjaC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRGZXRjaChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzZXROYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDYWNoZVNldEZldGNoLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2V0RmV0Y2goY2FjaGVOYW1lLCBzZXROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGVsZW1lbnQgdG8gdGhlIGdpdmVuIHNldC4gQ3JlYXRlcyB0aGUgc2V0IGlmIGl0IGRvZXMgbm90IGFscmVhZHlcbiAgICogZXhpc3QuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEFmdGVyIHRoaXMgb3BlcmF0aW9uIHRoZSBzZXQgd2lsbCBjb250YWluIHRoZSB1bmlvbiBvZiB0aGUgZWxlbWVudCBwYXNzZWRcbiAgICogaW4gYW5kIHRoZSBvcmlnaW5hbCBlbGVtZW50cyBvZiB0aGUgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHN0b3JlIHRoZSBzZXQgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXROYW1lIC0gVGhlIHNldCB0byBhZGQgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGFkZC5cbiAgICogQHBhcmFtIHtTZXRBZGRFbGVtZW50T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25UdGx9IFtvcHRpb25zLnR0bF0gLSBIb3cgdGhlIFRUTCBzaG91bGQgYmUgbWFuYWdlZC5cbiAgICogUmVmcmVzaGVzIHRoZSBzZXQncyBUVEwgdXNpbmcgdGhlIGNsaWVudCdzIGRlZmF1bHQgaWYgdGhpcyBpcyBub3Qgc3VwcGxpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU2V0QWRkRWxlbWVudC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU2V0QWRkRWxlbWVudC5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRBZGRFbGVtZW50LkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldEFkZEVsZW1lbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc2V0TmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldEFkZEVsZW1lbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXRBZGRFbGVtZW50LlJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMuc2V0QWRkRWxlbWVudHMoXG4gICAgICAgIGNhY2hlTmFtZSxcbiAgICAgICAgc2V0TmFtZSxcbiAgICAgICAgW2VsZW1lbnRdIGFzIHN0cmluZ1tdIHwgVWludDhBcnJheVtdLFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgKS50b1Npbmd1bGFyUmVzcG9uc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG11bHRpcGxlIGVsZW1lbnRzIHRvIHRoZSBnaXZlbiBzZXQuIENyZWF0ZXMgdGhlIHNldCBpZiBpdCBkb2VzIG5vdFxuICAgKiBhbHJlYWR5IGV4aXN0LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBBZnRlciB0aGlzIG9wZXJhdGlvbiwgdGhlIHNldCB3aWxsIGNvbnRhaW4gdGhlIHVuaW9uIG9mIHRoZSBlbGVtZW50cyBwYXNzZWRcbiAgICogaW4gYW5kIHRoZSBvcmlnaW5hbCBlbGVtZW50cyBvZiB0aGUgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHN0b3JlIHRoZSBzZXQgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXROYW1lIC0gVGhlIHNldCB0byBhZGQgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBVaW50OEFycmF5W119IGVsZW1lbnRzIC0gVGhlIGVsZW1lbnRzIHRvIGFkZC5cbiAgICogQHBhcmFtIHtTZXRBZGRFbGVtZW50c09wdGlvbnN9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVHRsfSBbb3B0aW9ucy50dGxdIC0gSG93IHRoZSBUVEwgc2hvdWxkIGJlIG1hbmFnZWQuXG4gICAqIFJlZnJlc2hlcyB0aGUgc2V0J3MgVFRMIHVzaW5nIHRoZSBjbGllbnQncyBkZWZhdWx0IGlmIHRoaXMgaXMgbm90IHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldEFkZEVsZW1lbnRzLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVTZXRBZGRFbGVtZW50cy5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRBZGRFbGVtZW50cy5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRBZGRFbGVtZW50cyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzZXROYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdLFxuICAgIG9wdGlvbnM/OiBTZXRBZGRFbGVtZW50c09wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldEFkZEVsZW1lbnRzLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2V0QWRkRWxlbWVudHMoXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBzZXROYW1lLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBvcHRpb25zPy50dGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYW4gZWxlbWVudCBmcm9tIHRoZSBnaXZlbiBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2V0TmFtZSAtIFRoZSBzZXQgdG8gcmVtb3ZlIGZyb20uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTZXRSZW1vdmVFbGVtZW50LlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVTZXRSZW1vdmVFbGVtZW50LlN1Y2Nlc3N9IG9uIHN1Y2Nlc3MuIFJlbW92aW5nIGFuIGVsZW1lbnQgdGhhdFxuICAgKiBkb2VzIG5vdCBvY2N1ciBpbiB0aGUgc2V0IG9yIHJlbW92aW5nIGZyb20gYSBub24tZXhpc3RlbnQgc2V0IGNvdW50cyBhcyBhXG4gICAqIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZVNldFJlbW92ZUVsZW1lbnQuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0UmVtb3ZlRWxlbWVudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzZXROYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudDogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlU2V0UmVtb3ZlRWxlbWVudC5SZXNwb25zZT4ge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCB0aGlzLnNldFJlbW92ZUVsZW1lbnRzKGNhY2hlTmFtZSwgc2V0TmFtZSwgW2VsZW1lbnRdIGFzXG4gICAgICAgIHwgc3RyaW5nW11cbiAgICAgICAgfCBVaW50OEFycmF5W10pXG4gICAgKS50b1Npbmd1bGFyUmVzcG9uc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIG11bHRpcGxlIGVsZW1lbnRzIGZyb20gdGhlIGdpdmVuIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXROYW1lIC0gVGhlIHNldCB0byByZW1vdmUgZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXX0gZWxlbWVudHMgLSBUaGUgZWxlbWVudHMgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldFJlbW92ZUVsZW1lbnRzLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVTZXRSZW1vdmVFbGVtZW50cy5TdWNjZXNzfSBvbiBzdWNjZXNzLiBSZW1vdmluZyBlbGVtZW50cyB0aGF0XG4gICAqIGRvIG5vdCBvY2N1ciBpbiB0aGUgc2V0IG9yIHJlbW92aW5nIGZyb20gYSBub24tZXhpc3RlbnQgc2V0IGNvdW50cyBhcyBhXG4gICAqIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZVNldFJlbW92ZUVsZW1lbnRzLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldFJlbW92ZUVsZW1lbnRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNldE5hbWU6IHN0cmluZyxcbiAgICBlbGVtZW50czogc3RyaW5nW10gfCBVaW50OEFycmF5W11cbiAgKTogUHJvbWlzZTxDYWNoZVNldFJlbW92ZUVsZW1lbnRzLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2V0UmVtb3ZlRWxlbWVudHMoY2FjaGVOYW1lLCBzZXROYW1lLCBlbGVtZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYSByYW5kb20gc2FtcGxlIG9mIGVsZW1lbnRzIGZyb20gdGhlIHNldC5cbiAgICogUmV0dXJucyBhIGRpZmZlcmVudCByYW5kb20gc2FtcGxlIGZvciBlYWNoIGNhbGwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2V0TmFtZSAtIFRoZSBzZXQgdG8gcmVtb3ZlIGZyb20uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0byByZXR1cm4uXG4gICAqIElmIHRoZSBzZXQgY29udGFpbnMgZmV3ZXIgdGhhbiAnbGltaXQnIGVsZW1lbnRzLCB0aGUgZW50aXJlIHNldCB3aWxsIGJlIHJldHVybmVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldFNhbXBsZS5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU2V0U2FtcGxlLkhpdH0gY29udGFpbmluZyB0aGUgc2V0IGVsZW1lbnRzIGlmIHRoZSBzZXQgZXhpc3RzLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRTYW1wbGUuTWlzc30gaWYgdGhlIHNldCBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlU2V0U2FtcGxlLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldFNhbXBsZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzZXROYW1lOiBzdHJpbmcsXG4gICAgbGltaXQ6IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlU2V0U2FtcGxlLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2V0U2FtcGxlKGNhY2hlTmFtZSwgc2V0TmFtZSwgbGltaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc29jaWF0ZXMgdGhlIGdpdmVuIGtleSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBpZiBrZXkgaXMgbm90IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgY2FjaGUuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzZXRJZkFic2VudCBpbnN0ZWFkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHN0b3JlIHRoZSB2YWx1ZSBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBrZXkgLSBUaGUga2V5IHRvIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBmaWVsZCAtIFRoZSB2YWx1ZSB0byBiZSBzdG9yZWQuXG4gICAqIEBwYXJhbSB7U2V0SWZOb3RFeGlzdHNPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnR0bF0gLSBUaGUgdGltZSB0byBsaXZlIGZvciB0aGUgaXRlbSBpbiB0aGUgY2FjaGUuXG4gICAqIFVzZXMgdGhlIGNsaWVudCdzIGRlZmF1bHQgVFRMIGlmIHRoaXMgaXMgbm90IHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldElmTm90RXhpc3RzLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZk5vdEV4aXN0cy5TdG9yZWR9IG9uIHN0b3JpbmcgdGhlIG5ldyB2YWx1ZS5cbiAgICoge0BsaW5rIENhY2hlU2V0SWZOb3RFeGlzdHMuTm90U3RvcmVkfSBvbiBub3Qgc3RvcmluZyB0aGUgbmV3IHZhbHVlLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZk5vdEV4aXN0cy5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRJZk5vdEV4aXN0cyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldElmTm90RXhpc3RzT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZOb3RFeGlzdHMuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zZXRJZk5vdEV4aXN0cyhjYWNoZU5hbWUsIGtleSwgZmllbGQsIG9wdGlvbnM/LnR0bCk7XG4gIH1cblxuICAvKipcbiAgICogQXNzb2NpYXRlcyB0aGUgZ2l2ZW4ga2V5IHdpdGggdGhlIGdpdmVuIHZhbHVlIGlmIGtleSBpcyBub3QgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBjYWNoZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBzdG9yZSB0aGUgdmFsdWUgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0ga2V5IC0gVGhlIGtleSB0byBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gZmllbGQgLSBUaGUgdmFsdWUgdG8gYmUgc3RvcmVkLlxuICAgKiBAcGFyYW0ge1NldElmQWJzZW50T3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50dGxdIC0gVGhlIHRpbWUgdG8gbGl2ZSBmb3IgdGhlIGl0ZW0gaW4gdGhlIGNhY2hlLlxuICAgKiBVc2VzIHRoZSBjbGllbnQncyBkZWZhdWx0IFRUTCBpZiB0aGlzIGlzIG5vdCBzdXBwbGllZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jb21wcmVzcz1mYWxzZV0gLSBXaGV0aGVyIHRvIGNvbXByZXNzIHRoZSB2YWx1ZS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU2V0SWZBYnNlbnQuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZVNldElmQWJzZW50LlN0b3JlZH0gb24gc3RvcmluZyB0aGUgbmV3IHZhbHVlLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZkFic2VudC5Ob3RTdG9yZWR9IG9uIG5vdCBzdG9yaW5nIHRoZSBuZXcgdmFsdWUuXG4gICAqIHtAbGluayBDYWNoZVNldElmQWJzZW50LkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldElmQWJzZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0SWZBYnNlbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXRJZkFic2VudC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNldElmQWJzZW50KGNhY2hlTmFtZSwga2V5LCBmaWVsZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQXNzb2NpYXRlcyB0aGUgZ2l2ZW4ga2V5IHdpdGggdGhlIGdpdmVuIHZhbHVlIGlmIHRoZSBrZXkgaXMgcHJlc2VudCBpbiB0aGUgY2FjaGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIHZhbHVlIGluLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGtleSAtIFRoZSBrZXkgdG8gc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGZpZWxkIC0gVGhlIHZhbHVlIHRvIGJlIHN0b3JlZC5cbiAgICogQHBhcmFtIHtTZXRJZlByZXNlbnRPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnR0bF0gLSBUaGUgdGltZSB0byBsaXZlIGZvciB0aGUgaXRlbSBpbiB0aGUgY2FjaGUuXG4gICAqIFVzZXMgdGhlIGNsaWVudCdzIGRlZmF1bHQgVFRMIGlmIHRoaXMgaXMgbm90IHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldElmUHJlc2VudC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU2V0SWZQcmVzZW50LlN0b3JlZH0gb24gc3RvcmluZyB0aGUgbmV3IHZhbHVlLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZlByZXNlbnQuTm90U3RvcmVkfSBvbiBub3Qgc3RvcmluZyB0aGUgbmV3IHZhbHVlLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZlByZXNlbnQuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0SWZQcmVzZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0SWZQcmVzZW50T3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZQcmVzZW50LlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2V0SWZQcmVzZW50KGNhY2hlTmFtZSwga2V5LCBmaWVsZCwgb3B0aW9ucz8udHRsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NvY2lhdGVzIHRoZSBnaXZlbiBrZXkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgaWYgdGhlIGtleSBpcyBwcmVzZW50IGluIHRoZSBjYWNoZVxuICAgKiBhbmQgaXRzIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSBzdXBwbGllZCBgZXF1YWxgIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIHN0b3JlIHRoZSB2YWx1ZSBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBrZXkgLSBUaGUga2V5IHRvIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBmaWVsZCAtIFRoZSB2YWx1ZSB0byBiZSBzdG9yZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gZXF1YWwgLSBUaGUgdmFsdWUgdG8gY29tcGFyZSB0byB0aGUgY2FjaGVkIHZhbHVlLlxuICAgKiBAcGFyYW0ge1NldElmRXF1YWxPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnR0bF0gLSBUaGUgdGltZSB0byBsaXZlIGZvciB0aGUgaXRlbSBpbiB0aGUgY2FjaGUuXG4gICAqIFVzZXMgdGhlIGNsaWVudCdzIGRlZmF1bHQgVFRMIGlmIHRoaXMgaXMgbm90IHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldElmRXF1YWwuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZVNldElmRXF1YWwuU3RvcmVkfSBvbiBzdG9yaW5nIHRoZSBuZXcgdmFsdWUuXG4gICAqIHtAbGluayBDYWNoZVNldElmRXF1YWwuTm90U3RvcmVkfSBvbiBub3Qgc3RvcmluZyB0aGUgbmV3IHZhbHVlLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZkVxdWFsLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldElmRXF1YWwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGVxdWFsOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRJZkVxdWFsT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZFcXVhbC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNldElmRXF1YWwoY2FjaGVOYW1lLCBrZXksIGZpZWxkLCBlcXVhbCwgb3B0aW9ucz8udHRsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NvY2lhdGVzIHRoZSBnaXZlbiBrZXkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2FjaGUgb3JcbiAgICogaWYgdGhlIHZhbHVlIGZvciB0aGUga2V5IGlzIG5vdCBlcXVhbCB0byB0aGUgc3VwcGxpZWQgYG5vdEVxdWFsYCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIHZhbHVlIGluLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGtleSAtIFRoZSBrZXkgdG8gc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGZpZWxkIC0gVGhlIHZhbHVlIHRvIGJlIHN0b3JlZC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBub3RFcXVhbCAtIFRoZSB2YWx1ZSB0byBjb21wYXJlIHRvIHRoZSBjYWNoZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB7U2V0SWZOb3RFcXVhbE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudHRsXSAtIFRoZSB0aW1lIHRvIGxpdmUgZm9yIHRoZSBpdGVtIGluIHRoZSBjYWNoZS5cbiAgICogVXNlcyB0aGUgY2xpZW50J3MgZGVmYXVsdCBUVEwgaWYgdGhpcyBpcyBub3Qgc3VwcGxpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU2V0SWZOb3RFcXVhbC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU2V0SWZOb3RFcXVhbC5TdG9yZWR9IG9uIHN0b3JpbmcgdGhlIG5ldyB2YWx1ZS5cbiAgICoge0BsaW5rIENhY2hlU2V0SWZOb3RFcXVhbC5Ob3RTdG9yZWR9IG9uIG5vdCBzdG9yaW5nIHRoZSBuZXcgdmFsdWUuXG4gICAqIHtAbGluayBDYWNoZVNldElmTm90RXF1YWwuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0SWZOb3RFcXVhbChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgbm90RXF1YWw6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldElmTm90RXF1YWxPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXRJZk5vdEVxdWFsLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2V0SWZOb3RFcXVhbChcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGtleSxcbiAgICAgIGZpZWxkLFxuICAgICAgbm90RXF1YWwsXG4gICAgICBvcHRpb25zPy50dGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc29jaWF0ZXMgdGhlIGdpdmVuIGtleSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBpZiBrZXkgaXMgcHJlc2VudCBpbiB0aGUgY2FjaGVcbiAgICogYW5kIGl0cyB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gdGhlIHN1cHBsaWVkIGBub3RFcXVhbGAgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIHZhbHVlIGluLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGtleSAtIFRoZSBrZXkgdG8gc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGZpZWxkIC0gVGhlIHZhbHVlIHRvIGJlIHN0b3JlZC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBub3RFcXVhbCAtIFRoZSB2YWx1ZSB0byBjb21wYXJlIHRvIHRoZSBjYWNoZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB7U2V0SWZBYnNlbnRPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnR0bF0gLSBUaGUgdGltZSB0byBsaXZlIGZvciB0aGUgaXRlbSBpbiB0aGUgY2FjaGUuXG4gICAqIFVzZXMgdGhlIGNsaWVudCdzIGRlZmF1bHQgVFRMIGlmIHRoaXMgaXMgbm90IHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldElmUHJlc2VudEFuZE5vdEVxdWFsLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZlByZXNlbnRBbmROb3RFcXVhbC5TdG9yZWR9IG9uIHN0b3JpbmcgdGhlIG5ldyB2YWx1ZS5cbiAgICoge0BsaW5rIENhY2hlU2V0SWZQcmVzZW50QW5kTm90RXF1YWwuTm90U3RvcmVkfSBvbiBub3Qgc3RvcmluZyB0aGUgbmV3IHZhbHVlLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZlByZXNlbnRBbmROb3RFcXVhbC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRJZlByZXNlbnRBbmROb3RFcXVhbChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgbm90RXF1YWw6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldElmUHJlc2VudEFuZE5vdEVxdWFsT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZQcmVzZW50QW5kTm90RXF1YWwuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zZXRJZlByZXNlbnRBbmROb3RFcXVhbChcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGtleSxcbiAgICAgIGZpZWxkLFxuICAgICAgbm90RXF1YWwsXG4gICAgICBvcHRpb25zPy50dGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc29jaWF0ZXMgdGhlIGdpdmVuIGtleSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBpZiBrZXkgaXMgYWJzZW50IG9yIGlmIHRoZSBrZXkgaXNcbiAgICogcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBzdG9yZSB0aGUgdmFsdWUgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0ga2V5IC0gVGhlIGtleSB0byBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gZmllbGQgLSBUaGUgdmFsdWUgdG8gYmUgc3RvcmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGVxdWFsIC0gVGhlIHZhbHVlIHRvIGNvbXBhcmUgdG8gdGhlIGNhY2hlZCB2YWx1ZS5cbiAgICogQHBhcmFtIHtTZXRJZkFic2VudE9yRXF1YWxPcHRpb25zfSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnR0bF0gLSBUaGUgdGltZSB0byBsaXZlIGZvciB0aGUgaXRlbSBpbiB0aGUgY2FjaGUuXG4gICAqIFVzZXMgdGhlIGNsaWVudCdzIGRlZmF1bHQgVFRMIGlmIHRoaXMgaXMgbm90IHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNldElmQWJzZW50T3JFcXVhbC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU2V0SWZBYnNlbnRPckVxdWFsLlN0b3JlZH0gb24gc3RvcmluZyB0aGUgbmV3IHZhbHVlLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZkFic2VudE9yRXF1YWwuTm90U3RvcmVkfSBvbiBub3Qgc3RvcmluZyB0aGUgbmV3IHZhbHVlLlxuICAgKiB7QGxpbmsgQ2FjaGVTZXRJZkFic2VudE9yRXF1YWwuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0SWZBYnNlbnRPckVxdWFsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBlcXVhbDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0SWZBYnNlbnRPckVxdWFsT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZBYnNlbnRPckVxdWFsLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc2V0SWZBYnNlbnRPckVxdWFsKFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAga2V5LFxuICAgICAgZmllbGQsXG4gICAgICBlcXVhbCxcbiAgICAgIG9wdGlvbnM/LnR0bFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmx1c2hlcyAvIGNsZWFycyBhbGwgdGhlIGl0ZW1zIG9mIHRoZSBnaXZlbiBjYWNoZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIHRvIGJlIGZsdXNoZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlRmx1c2guUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZUZsdXNoLlN1Y2Nlc3N9IG9uIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZUZsdXNoLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZsdXNoQ2FjaGUoY2FjaGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPENhY2hlRmx1c2guUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb250cm9sQ2xpZW50LmZsdXNoQ2FjaGUoY2FjaGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFsbCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gZGljdGlvbmFyeS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBwZXJmb3JtIHRoZSBsb29rdXAgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaWN0aW9uYXJ5TmFtZSAtIFRoZSBkaWN0aW9uYXJ5IHRvIGZldGNoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZURpY3Rpb25hcnlGZXRjaC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeUZldGNoLkhpdH0gY29udGFpbmluZyB0aGUgZGljdGlvbmFyeSBlbGVtZW50cyBpZiB0aGVcbiAgICogZGljdGlvbmFyeSBleGlzdHMuXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlGZXRjaC5NaXNzfSBpZiB0aGUgZGljdGlvbmFyeSBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeUZldGNoLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpY3Rpb25hcnlGZXRjaChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5RmV0Y2guUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5kaWN0aW9uYXJ5RmV0Y2goY2FjaGVOYW1lLCBkaWN0aW9uYXJ5TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBpbnRlZ2VyIHF1YW50aXR5IHRvIGEgZmllbGQgdmFsdWUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEluY3JlbWVudGluZyB0aGUgdmFsdWUgb2YgYSBtaXNzaW5nIGZpZWxkIHNldHMgdGhlIHZhbHVlIHRvIGFtb3VudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBmaWVsZC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBmaWVsZCAtIFRoZSBmaWVsZCB0byBpbmNyZW1lbnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgLSBUaGUgcXVhbnRpdHkgdG8gYWRkIHRvIHRoZSB2YWx1ZS4gTWF5IGJlIHBvc2l0aXZlLFxuICAgKiBuZWdhdGl2ZSwgb3IgemVyby4gRGVmYXVsdHMgdG8gMS5cbiAgICogQHBhcmFtIHtJbmNyZW1lbnRPcHRpb25zfSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvblR0bH0gW29wdGlvbnMudHRsXSAtIEhvdyB0aGUgVFRMIHNob3VsZCBiZSBtYW5hZ2VkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUluY3JlbWVudD59IC1cbiAgICoge0BsaW5rIENhY2hlSW5jcmVtZW50LlN1Y2Nlc3N9IGNvbnRhaW5pbmcgdGhlIGluY3JlbWVudGVkIHZhbHVlXG4gICAqIG9uIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZUluY3JlbWVudC5FcnJvcn0gb24gZmFpbHVyZS4gSW5jcmVtZW50aW5nIGEgdmFsdWVcbiAgICogdGhhdCB3YXMgbm90IHNldCB1c2luZyB0aGlzIG1ldGhvZCBvciBpcyBub3QgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZlxuICAgKiBhbiBpbnRlZ2VyIHJlc3VsdHMgaW4gYSBmYWlsdXJlIHdpdGggYSBGYWlsZWRQcmVjb25kaXRpb25FeGNlcHRpb24gZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW5jcmVtZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGFtb3VudCA9IDEsXG4gICAgb3B0aW9ucz86IEluY3JlbWVudE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZUluY3JlbWVudC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LmluY3JlbWVudChjYWNoZU5hbWUsIGZpZWxkLCBhbW91bnQsIG9wdGlvbnM/LnR0bCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBlbGVtZW50IHRvIHRoZSBnaXZlbiBkaWN0aW9uYXJ5LiBDcmVhdGVzIHRoZSBkaWN0aW9uYXJ5IGlmIGl0IGRvZXNcbiAgICogbm90IGFscmVhZHkgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIGRpY3Rpb25hcnkgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaWN0aW9uYXJ5TmFtZSAtIFRoZSBkaWN0aW9uYXJ5IHRvIGFkZCB0by5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBmaWVsZCAtIFRoZSBmaWVsZCB0byBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc3RvcmUuXG4gICAqIEBwYXJhbSB7RGljdGlvbmFyeVNldEZpZWxkT3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25UdGx9IFtvcHRpb25zLnR0bF0gLSBIb3cgdGhlIFRUTCBzaG91bGQgYmUgbWFuYWdlZC5cbiAgICogUmVmcmVzaGVzIHRoZSBkaWN0aW9uYXJ5J3MgVFRMIHVzaW5nIHRoZSBjbGllbnQncyBkZWZhdWx0IGlmIHRoaXMgaXMgbm90XG4gICAqIHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZURpY3Rpb25hcnlTZXRGaWVsZC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeVNldEZpZWxkLlN1Y2Nlc3N9IG9uIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlTZXRGaWVsZC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaWN0aW9uYXJ5U2V0RmllbGQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogRGljdGlvbmFyeVNldEZpZWxkT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeVNldEZpZWxkLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuZGljdGlvbmFyeVNldEZpZWxkKFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgZGljdGlvbmFyeU5hbWUsXG4gICAgICBmaWVsZCxcbiAgICAgIHZhbHVlLFxuICAgICAgb3B0aW9ucz8udHRsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG11bHRpcGxlIGVsZW1lbnRzIHRvIHRoZSBnaXZlbiBkaWN0aW9uYXJ5LiBDcmVhdGVzIHRoZSBkaWN0aW9uYXJ5IGlmXG4gICAqIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gc3RvcmUgdGhlIGRpY3Rpb25hcnkgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaWN0aW9uYXJ5TmFtZSAtIFRoZSBkaWN0aW9uYXJ5IHRvIGFkZCB0by5cbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nIHwgVWludDhBcnJheSwgc3RyaW5nIHwgVWludDhBcnJheT59IGVsZW1lbnRzIC0gVGhlXG4gICAqIGVsZW1lbnRzIHRvIHNldC5cbiAgICogQHBhcmFtIHtEaWN0aW9uYXJ5U2V0RmllbGRzT3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25UdGx9IFtvcHRpb25zLnR0bF0gLSBIb3cgdGhlIFRUTCBzaG91bGQgYmUgbWFuYWdlZC5cbiAgICogUmVmcmVzaGVzIHRoZSBkaWN0aW9uYXJ5J3MgVFRMIHVzaW5nIHRoZSBjbGllbnQncyBkZWZhdWx0IGlmIHRoaXMgaXMgbm90XG4gICAqIHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZURpY3Rpb25hcnlTZXRGaWVsZHMuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlTZXRGaWVsZHMuU3VjY2Vzc30gb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeVNldEZpZWxkcy5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaWN0aW9uYXJ5U2V0RmllbGRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6XG4gICAgICB8IE1hcDxzdHJpbmcgfCBVaW50OEFycmF5LCBzdHJpbmcgfCBVaW50OEFycmF5PlxuICAgICAgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBVaW50OEFycmF5PlxuICAgICAgfCBBcnJheTxbc3RyaW5nLCBzdHJpbmcgfCBVaW50OEFycmF5XT4sXG4gICAgb3B0aW9ucz86IERpY3Rpb25hcnlTZXRGaWVsZHNPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5U2V0RmllbGRzLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuZGljdGlvbmFyeVNldEZpZWxkcyhcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGRpY3Rpb25hcnlOYW1lLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBvcHRpb25zPy50dGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZhbHVlIHN0b3JlZCBmb3IgdGhlIGdpdmVuIGRpY3Rpb25hcnkgYW5kIGZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIGRpY3Rpb25hcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaWN0aW9uYXJ5TmFtZSAtIFRoZSBkaWN0aW9uYXJ5IHRvIGxvb2sgdXAuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gZmllbGQgLSBUaGUgZmllbGQgdG8gbG9vayB1cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVEaWN0aW9uYXJ5R2V0RmllbGQuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlHZXRGaWVsZC5IaXR9IGNvbnRhaW5pbmcgdGhlIGRpY3Rpb25hcnkgZWxlbWVudCBpZlxuICAgKiBvbmUgaXMgZm91bmQuXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlHZXRGaWVsZC5NaXNzfSBpZiB0aGUgZGljdGlvbmFyeSBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeUdldEZpZWxkLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpY3Rpb25hcnlHZXRGaWVsZChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5R2V0RmllbGQuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5kaWN0aW9uYXJ5R2V0RmllbGQoY2FjaGVOYW1lLCBkaWN0aW9uYXJ5TmFtZSwgZmllbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgbXVsdGlwbGUgdmFsdWVzIGZyb20gdGhlIGdpdmVuIGRpY3Rpb25hcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgZGljdGlvbmFyeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpY3Rpb25hcnlOYW1lIC0gVGhlIGRpY3Rpb25hcnkgdG8gbG9vayB1cC5cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXX0gZmllbGRzIC0gVGhlIGZpZWxkcyB0byBsb29rIHVwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZURpY3Rpb25hcnlHZXRGaWVsZHMuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlHZXRGaWVsZHMuSGl0fSBjb250YWluaW5nIHRoZSBkaWN0aW9uYXJ5IGVsZW1lbnRzIGlmXG4gICAqIHRoZSBkaWN0aW9uYXJ5IGV4aXN0cy5cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeUdldEZpZWxkcy5NaXNzfSBpZiB0aGUgZGljdGlvbmFyeSBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeUdldEZpZWxkcy5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaWN0aW9uYXJ5R2V0RmllbGRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZmllbGRzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXVxuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeUdldEZpZWxkcy5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LmRpY3Rpb25hcnlHZXRGaWVsZHMoY2FjaGVOYW1lLCBkaWN0aW9uYXJ5TmFtZSwgZmllbGRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuIGVsZW1lbnQgZnJvbSB0aGUgZ2l2ZW4gZGljdGlvbmFyeS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUGVyZm9ybXMgYSBuby1vcCBpZiB0aGUgZGljdGlvbmFyeSBvciBmaWVsZCBkb2VzIG5vdCBleGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBkaWN0aW9uYXJ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGljdGlvbmFyeU5hbWUgLSBUaGUgZGljdGlvbmFyeSB0byByZW1vdmUgZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBmaWVsZCAtIFRoZSBmaWVsZCB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlRGljdGlvbmFyeVJlbW92ZUZpZWxkLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVEaWN0aW9uYXJ5UmVtb3ZlRmllbGQuU3VjY2Vzc30gb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeVJlbW92ZUZpZWxkLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpY3Rpb25hcnlSZW1vdmVGaWVsZChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5UmVtb3ZlRmllbGQuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5kaWN0aW9uYXJ5UmVtb3ZlRmllbGQoY2FjaGVOYW1lLCBkaWN0aW9uYXJ5TmFtZSwgZmllbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgbXVsdGlwbGUgZmllbGRzIGZyb20gdGhlIGdpdmVuIGRpY3Rpb25hcnkuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFBlcmZvcm1zIGEgbm8tb3AgaWYgdGhlIGRpY3Rpb25hcnkgb3IgZmllbGRzIGRvIG5vdCBleGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBkaWN0aW9uYXJ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGljdGlvbmFyeU5hbWUgLSBUaGUgZGljdGlvbmFyeSB0byByZW1vdmUgZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXX0gZmllbGRzIC0gVGhlIGZpZWxkcyB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlRGljdGlvbmFyeVJlbW92ZUZpZWxkcy5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeVJlbW92ZUZpZWxkcy5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVEaWN0aW9uYXJ5UmVtb3ZlRmllbGRzLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpY3Rpb25hcnlSZW1vdmVGaWVsZHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZHM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5UmVtb3ZlRmllbGRzLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuZGljdGlvbmFyeVJlbW92ZUZpZWxkcyhcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIGRpY3Rpb25hcnlOYW1lLFxuICAgICAgZmllbGRzXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGludGVnZXIgcXVhbnRpdHkgdG8gYSBkaWN0aW9uYXJ5IHZhbHVlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJbmNyZW1lbnRpbmcgdGhlIHZhbHVlIG9mIGEgbWlzc2luZyBmaWVsZCBzZXRzIHRoZSB2YWx1ZSB0byBhbW91bnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgZGljdGlvbmFyeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpY3Rpb25hcnlOYW1lIC0gVGhlIGRpY3Rpb25hcnkgdG8gc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGZpZWxkIC0gVGhlIGZpZWxkIHRvIGluY3JlbWVudC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCAtIFRoZSBxdWFudGl0eSB0byBhZGQgdG8gdGhlIHZhbHVlLiBNYXkgYmUgcG9zaXRpdmUsXG4gICAqIG5lZ2F0aXZlLCBvciB6ZXJvLiBEZWZhdWx0cyB0byAxLlxuICAgKiBAcGFyYW0ge0RpY3Rpb25hcnlJbmNyZW1lbnRPcHRpb25zfSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvblR0bH0gW29wdGlvbnMudHRsXSAtIEhvdyB0aGUgVFRMIHNob3VsZCBiZSBtYW5hZ2VkLlxuICAgKiBSZWZyZXNoZXMgdGhlIGRpY3Rpb25hcnkncyBUVEwgdXNpbmcgdGhlIGNsaWVudCdzIGRlZmF1bHQgaWYgdGhpcyBpcyBub3RcbiAgICogc3VwcGxpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlRGljdGlvbmFyeUluY3JlbWVudC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlRGljdGlvbmFyeUluY3JlbWVudC5TdWNjZXNzfSBjb250YWluaW5nIHRoZSBpbmNyZW1lbnRlZCB2YWx1ZVxuICAgKiBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVEaWN0aW9uYXJ5SW5jcmVtZW50LkVycm9yfSBvbiBmYWlsdXJlLiBJbmNyZW1lbnRpbmcgYSB2YWx1ZVxuICAgKiB0aGF0IHdhcyBub3Qgc2V0IHVzaW5nIHRoaXMgbWV0aG9kIG9yIGlzIG5vdCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mXG4gICAqIGFuIGludGVnZXIgcmVzdWx0cyBpbiBhIGZhaWx1cmUgd2l0aCBhIEZhaWxlZFByZWNvbmRpdGlvbkV4Y2VwdGlvbiBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaWN0aW9uYXJ5SW5jcmVtZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgYW1vdW50ID0gMSxcbiAgICBvcHRpb25zPzogRGljdGlvbmFyeUluY3JlbWVudE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlJbmNyZW1lbnQuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5kaWN0aW9uYXJ5SW5jcmVtZW50KFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgZGljdGlvbmFyeU5hbWUsXG4gICAgICBmaWVsZCxcbiAgICAgIGFtb3VudCxcbiAgICAgIG9wdGlvbnM/LnR0bFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBkaWN0aW9uYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIGRpY3Rpb25hcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaWN0aW9uYXJ5TmFtZSAtIFRoZSBkaWN0aW9uYXJ5IHRvIGdldCB0aGUgbGVuZ3RoIG9mLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZURpY3Rpb25hcnlMZW5ndGguUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZURpY3Rpb25hcnlMZW5ndGguSGl0fSBjb250YWluaW5nIHRoZSBsZW5ndGggaWYgdGhlIGRpY3Rpb25hcnkgZXhpc3RzLlxuICAgKiB7QGxpbmsgQ2FjaGVEaWN0aW9uYXJ5TGVuZ3RoLk1pc3N9IGlmIHRoZSBkaWN0aW9uYXJ5IGRvZXMgbm90IGV4aXN0LlxuICAgKiB7QGxpbmsgQ2FjaGVEaWN0aW9uYXJ5TGVuZ3RoLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpY3Rpb25hcnlMZW5ndGgoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeUxlbmd0aC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LmRpY3Rpb25hcnlMZW5ndGgoY2FjaGVOYW1lLCBkaWN0aW9uYXJ5TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBlbGVtZW50IHRvIHRoZSBnaXZlbiBzb3J0ZWQgc2V0LiBJZiB0aGUgZWxlbWVudCBhbHJlYWR5IGV4aXN0cywgaXRzXG4gICAqIHNjb3JlIGlzIHVwZGF0ZWQuIENyZWF0ZXMgdGhlIHNvcnRlZCBzZXQgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc29ydGVkIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRlZFNldE5hbWUgLSBUaGUgc29ydGVkIHNldCB0byBhZGQgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYWRkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2NvcmUgLSBUaGUgc2NvcmUgdG8gYXNzaWduIHRvIHRoZSB2YWx1ZS5cbiAgICogQHBhcmFtIHtTb3J0ZWRTZXRQdXRFbGVtZW50T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25UdGx9IFtvcHRpb25zLnR0bF0gLSBIb3cgdGhlIFRUTCBzaG91bGQgYmUgbWFuYWdlZC5cbiAgICogUmVmcmVzaGVzIHRoZSBzb3J0ZWQgc2V0J3MgVFRMIHVzaW5nIHRoZSBjbGllbnQncyBkZWZhdWx0IGlmIHRoaXMgaXMgbm90XG4gICAqIHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNvcnRlZFNldFB1dEVsZW1lbnQuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldFB1dEVsZW1lbnQuU3VjY2Vzc30gb24gc3VjY2Vzcy5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0UHV0RWxlbWVudC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzb3J0ZWRTZXRQdXRFbGVtZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBzY29yZTogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBTb3J0ZWRTZXRQdXRFbGVtZW50T3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0UHV0RWxlbWVudC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNvcnRlZFNldFB1dEVsZW1lbnQoXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBzb3J0ZWRTZXROYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBzY29yZSxcbiAgICAgIG9wdGlvbnM/LnR0bFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBlbGVtZW50cyB0byB0aGUgZ2l2ZW4gc29ydGVkIHNldC4gRm9yIGFueSB2YWx1ZXMgdGhhdCBhbHJlYWR5IGV4aXN0LCBpdFxuICAgKiB0aGUgc2NvcmUgaXMgdXBkYXRlZC4gQ3JlYXRlcyB0aGUgc29ydGVkIHNldCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBzb3J0ZWQgc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc29ydGVkU2V0TmFtZSAtIFRoZSBzb3J0ZWQgc2V0IHRvIGFkZCB0by5cbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nIHwgVWludDhBcnJheSwgbnVtYmVyPnwgUmVjb3JkPHN0cmluZywgbnVtYmVyPn0gZWxlbWVudHMgLSBUaGUgdmFsdWUtPnNjb3JlIHBhaXJzIHRvIGFkZCB0byB0aGUgc29ydGVkIHNldC5cbiAgICogQHBhcmFtIHtTb3J0ZWRTZXRQdXRFbGVtZW50T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25UdGx9IFtvcHRpb25zLnR0bF0gLSBIb3cgdGhlIFRUTCBzaG91bGQgYmUgbWFuYWdlZC5cbiAgICogUmVmcmVzaGVzIHRoZSBzb3J0ZWQgc2V0J3MgVFRMIHVzaW5nIHRoZSBjbGllbnQncyBkZWZhdWx0IGlmIHRoaXMgaXMgbm90XG4gICAqIHN1cHBsaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNvcnRlZFNldFB1dEVsZW1lbnRzLlJlc3BvbnNlPn0gLVxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50cy5TdWNjZXNzfSBvbiBzdWNjZXNzLlxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50cy5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzb3J0ZWRTZXRQdXRFbGVtZW50cyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6XG4gICAgICB8IE1hcDxzdHJpbmcgfCBVaW50OEFycmF5LCBudW1iZXI+XG4gICAgICB8IFJlY29yZDxzdHJpbmcsIG51bWJlcj5cbiAgICAgIHwgQXJyYXk8W3N0cmluZywgbnVtYmVyXT4sXG4gICAgb3B0aW9ucz86IFNvcnRlZFNldFB1dEVsZW1lbnRzT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0UHV0RWxlbWVudHMuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zb3J0ZWRTZXRQdXRFbGVtZW50cyhcbiAgICAgIGNhY2hlTmFtZSxcbiAgICAgIHNvcnRlZFNldE5hbWUsXG4gICAgICBlbGVtZW50cyxcbiAgICAgIG9wdGlvbnM/LnR0bFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBzb3J0ZWQgc2V0IGJ5IGluZGV4IChyYW5rKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBzb3J0ZWQgc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc29ydGVkU2V0TmFtZSAtIFRoZSBzb3J0ZWQgc2V0IHRvIGZldGNoIGZyb20uXG4gICAqIEBwYXJhbSB7U29ydGVkU2V0RmV0Y2hCeVJhbmtPcHRpb25zfSBvcHRpb25zXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zdGFydFJhbmtdIC0gVGhlIHJhbmsgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdG9cbiAgICogZmV0Y2guIERlZmF1bHRzIHRvIDAuIFRoaXMgcmFuayBpcyBpbmNsdXNpdmUsIGllIHRoZSBlbGVtZW50IGF0IHRoaXMgcmFua1xuICAgKiB3aWxsIGJlIGZldGNoZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5lbmRSYW5rXSAtIFRoZSByYW5rIG9mIHRoZSBsYXN0IGVsZW1lbnQgdG8gZmV0Y2guXG4gICAqIFRoaXMgcmFuayBpcyBleGNsdXNpdmUsIGllIHRoZSBlbGVtZW50IGF0IHRoaXMgcmFuayB3aWxsIG5vdCBiZSBmZXRjaGVkLlxuICAgKiBEZWZhdWx0cyB0byBudWxsLCB3aGljaCBmZXRjaGVzIHVwIHVudGlsIGFuZCBpbmNsdWRpbmcgdGhlIGxhc3QgZWxlbWVudC5cbiAgICogQHBhcmFtIHtTb3J0ZWRTZXRPcmRlcn0gW29wdGlvbnMub3JkZXJdIC0gVGhlIG9yZGVyIHRvIGZldGNoIHRoZSBlbGVtZW50cyBpbi5cbiAgICogRGVmYXVsdHMgdG8gYXNjZW5kaW5nLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNvcnRlZFNldEZldGNoLlJlc3BvbnNlPn1cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0RmV0Y2guSGl0fSBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgZWxlbWVudHMgd2hlbiBmb3VuZC5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0RmV0Y2guTWlzc30gd2hlbiB0aGUgc29ydGVkIHNldCBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0RmV0Y2guRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc29ydGVkU2V0RmV0Y2hCeVJhbmsoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBTb3J0ZWRTZXRGZXRjaEJ5UmFua09wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldEZldGNoLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc29ydGVkU2V0RmV0Y2hCeVJhbmsoXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBzb3J0ZWRTZXROYW1lLFxuICAgICAgb3B0aW9ucz8ub3JkZXIgPz8gU29ydGVkU2V0T3JkZXIuQXNjZW5kaW5nLFxuICAgICAgb3B0aW9ucz8uc3RhcnRSYW5rID8/IDAsXG4gICAgICBvcHRpb25zPy5lbmRSYW5rXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgZWxlbWVudHMgaW4gdGhlIGdpdmVuIHNvcnRlZCBzZXQgYnkgc2NvcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc29ydGVkIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRlZFNldE5hbWUgLSBUaGUgc29ydGVkIHNldCB0byBmZXRjaCBmcm9tLlxuICAgKiBAcGFyYW0ge1NvcnRlZFNldEZldGNoQnlTY29yZU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pblNjb3JlXSAtIFRoZSBtaW5pbXVtIHNjb3JlIChpbmNsdXNpdmUpIG9mIHRoZVxuICAgKiBlbGVtZW50cyB0byBmZXRjaC4gRGVmYXVsdHMgdG8gbmVnYXRpdmUgaW5maW5pdHkuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhTY29yZV0gLSBUaGUgbWF4aW11bSBzY29yZSAoaW5jbHVzaXZlKSBvZiB0aGVcbiAgICogZWxlbWVudHMgdG8gZmV0Y2guIERlZmF1bHRzIHRvIHBvc2l0aXZlIGluZmluaXR5LlxuICAgKiBAcGFyYW0ge1NvcnRlZFNldE9yZGVyfSBbb3B0aW9ucy5vcmRlcl0gLSBUaGUgb3JkZXIgdG8gZmV0Y2ggdGhlIGVsZW1lbnRzIGluLlxuICAgKiBEZWZhdWx0cyB0byBhc2NlbmRpbmcuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5vZmZzZXRdIC0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGJlZm9yZVxuICAgKiByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnQuIERlZmF1bHRzIHRvIDAuIE5vdGU6IHRoaXMgaXMgbm90IHRoZSByYW5rIG9mXG4gICAqIHRoZSBmaXJzdCBlbGVtZW50IHRvIHJldHVybiwgYnV0IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhlIHJlc3VsdCBzZXRcbiAgICogdG8gc2tpcCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBmaXJzdCBlbGVtZW50LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY291bnRdIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJldHVybi5cbiAgICogRGVmYXVsdHMgdG8gdW5kZWZpbmVkLCB3aGljaCByZXR1cm5zIGFsbCBlbGVtZW50cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTb3J0ZWRTZXRGZXRjaC5SZXNwb25zZT59IC1cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0RmV0Y2guSGl0fSBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgZWxlbWVudHMgd2hlbiBmb3VuZC5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0RmV0Y2guTWlzc30gd2hlbiB0aGUgc29ydGVkIHNldCBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0RmV0Y2guRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc29ydGVkU2V0RmV0Y2hCeVNjb3JlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogU29ydGVkU2V0RmV0Y2hCeVNjb3JlT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0RmV0Y2guUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zb3J0ZWRTZXRGZXRjaEJ5U2NvcmUoXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBzb3J0ZWRTZXROYW1lLFxuICAgICAgb3B0aW9ucz8ub3JkZXIgPz8gU29ydGVkU2V0T3JkZXIuQXNjZW5kaW5nLFxuICAgICAgb3B0aW9ucz8ubWluU2NvcmUsXG4gICAgICBvcHRpb25zPy5tYXhTY29yZSxcbiAgICAgIG9wdGlvbnM/Lm9mZnNldCxcbiAgICAgIG9wdGlvbnM/LmNvdW50XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIHVwIHRoZSByYW5rIG9mIGFuIGVsZW1lbnQgaW4gdGhlIHNvcnRlZCBzZXQsIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBzb3J0ZWQgc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc29ydGVkU2V0TmFtZSAtIFRoZSBzb3J0ZWQgc2V0IHRvIGZldGNoIGZyb20uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgd2hvc2UgcmFuayB3ZSBhcmUgcmV0cmlldmluZy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTb3J0ZWRTZXRHZXRSYW5rLlJlc3BvbnNlPn1cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0R2V0UmFuay5IaXR9IGNvbnRhaW5pbmcgdGhlIHJhbmsgb2YgdGhlIHJlcXVlc3RlZCBlbGVtZW50cyB3aGVuIGZvdW5kLlxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRHZXRSYW5rLk1pc3N9IHdoZW4gdGhlIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEdldFJhbmsuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc29ydGVkU2V0R2V0UmFuayhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldEdldFJhbmsuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zb3J0ZWRTZXRHZXRSYW5rKGNhY2hlTmFtZSwgc29ydGVkU2V0TmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2sgdXAgdGhlIHNjb3JlIG9mIGFuIGVsZW1lbnQgaW4gdGhlIHNvcnRlZCBzZXQsIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBzb3J0ZWQgc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc29ydGVkU2V0TmFtZSAtIFRoZSBzb3J0ZWQgc2V0IHRvIGZldGNoIGZyb20uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgd2hvc2Ugc2NvcmUgd2UgYXJlIHJldHJpZXZpbmcuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU29ydGVkU2V0R2V0U2NvcmUuUmVzcG9uc2U+fVxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRHZXRTY29yZS5IaXR9IGNvbnRhaW5pbmcgdGhlIHNjb3JlIG9mIHRoZSByZXF1ZXN0ZWQgZWxlbWVudCB3aGVuIGZvdW5kLlxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRHZXRTY29yZS5NaXNzfSB3aGVuIHRoZSBlbGVtZW50IG9yIGNvbGxlY3Rpb24gZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEdldFNjb3JlLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNvcnRlZFNldEdldFNjb3JlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0R2V0U2NvcmUuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zb3J0ZWRTZXRHZXRTY29yZShjYWNoZU5hbWUsIHNvcnRlZFNldE5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIHVwIHRoZSBzY29yZXMgb2YgbXVsdGlwbGUgZWxlbWVudHMgaW4gdGhlIHNvcnRlZCBzZXQsIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc29ydGVkIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRlZFNldE5hbWUgLSBUaGUgc29ydGVkIHNldCB0byBmZXRjaCBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgVWludDhBcnJheVtdfSB2YWx1ZXMgLSBUaGUgdmFsdWVzIG9mIHRoZSBlbGVtZW50cyB3aG9zZSBzY29yZXMgd2UgYXJlIHJldHJpZXZpbmcuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU29ydGVkU2V0R2V0U2NvcmVzLlJlc3BvbnNlPn1cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0R2V0U2NvcmVzLkhpdH0gY29udGFpbmluZyB0aGUgc2NvcmVzIG9mIHRoZSByZXF1ZXN0ZWQgZWxlbWVudHMgd2hlbiBmb3VuZC5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0R2V0U2NvcmVzLk1pc3N9IHdoZW4gdGhlIGVsZW1lbnQgb3IgY29sbGVjdGlvbiBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0R2V0U2NvcmVzLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNvcnRlZFNldEdldFNjb3JlcyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWVzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXVxuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0R2V0U2NvcmVzLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc29ydGVkU2V0R2V0U2NvcmVzKGNhY2hlTmFtZSwgc29ydGVkU2V0TmFtZSwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgdGhlIHNjb3JlIG9mIGFuIGVsZW1lbnQgaW4gdGhlIHNvcnRlZCBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc29ydGVkIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRlZFNldE5hbWUgLSBUaGUgc29ydGVkIHNldCB0byBmZXRjaCBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IHdob3NlIHNjb3JlIHdlIGFyZSBpbmNyZW1lbnRpbmcuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgLSBUaGUgcXVhbnRpdHkgdG8gYWRkIHRvIHRoZSBzY29yZS4gTWF5IGJlIHBvc2l0aXZlLFxuICAgKiBuZWdhdGl2ZSwgb3IgemVyby4gRGVmYXVsdHMgdG8gMS5cbiAgICogQHBhcmFtIHtTb3J0ZWRTZXRJbmNyZW1lbnRPcHRpb25zfSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvblR0bH0gW29wdGlvbnMudHRsXSAtIEhvdyB0aGUgVFRMIHNob3VsZCBiZSBtYW5hZ2VkLlxuICAgKiBSZWZyZXNoZXMgdGhlIHNvcnRlZCBzZXQncyBUVEwgdXNpbmcgdGhlIGNsaWVudCdzIGRlZmF1bHQgaWYgdGhpcyBpcyBub3RcbiAgICogc3VwcGxpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU29ydGVkU2V0SW5jcmVtZW50U2NvcmUuUmVzcG9uc2U+fSAtXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEluY3JlbWVudFNjb3JlLlN1Y2Nlc3N9IGNvbnRhaW5pbmcgdGhlIGluY3JlbWVudGVkIHNjb3JlXG4gICAqIG9uIHN1Y2Nlc3MuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEluY3JlbWVudFNjb3JlLkVycm9yfSBvbiBmYWlsdXJlLiBJbmNyZW1lbnRpbmcgYSBzY29yZVxuICAgKiB0aGF0IHdhcyBub3Qgc2V0IHVzaW5nIHRoaXMgbWV0aG9kIG9yIGlzIG5vdCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mXG4gICAqIGFuIGludGVnZXIgcmVzdWx0cyBpbiBhIGZhaWx1cmUgd2l0aCBhIEZhaWxlZFByZWNvbmRpdGlvbkV4Y2VwdGlvbiBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzb3J0ZWRTZXRJbmNyZW1lbnRTY29yZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgYW1vdW50PzogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBTb3J0ZWRTZXRJbmNyZW1lbnRPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRJbmNyZW1lbnRTY29yZS5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNvcnRlZFNldEluY3JlbWVudFNjb3JlKFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgc29ydGVkU2V0TmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgYW1vdW50IHx8IDEsXG4gICAgICBvcHRpb25zPy50dGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBlbGVtZW50IGZyb20gdGhlIHNvcnRlZCBzZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBzb3J0ZWQgc2V0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc29ydGVkU2V0TmFtZSAtIFRoZSBzb3J0ZWQgc2V0IHRvIHJlbW92ZSBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IHRvIHJlbW92ZSBmcm9tIHRoZSBzZXQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlU29ydGVkU2V0UmVtb3ZlRWxlbWVudC5SZXNwb25zZT59XG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldFJlbW92ZUVsZW1lbnQuU3VjY2Vzc30gaWYgdGhlIGVsZW1lbnQgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEluY3JlbWVudFNjb3JlLkVycm9yfSBvbiBmYWlsdXJlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc29ydGVkU2V0UmVtb3ZlRWxlbWVudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldFJlbW92ZUVsZW1lbnQuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zb3J0ZWRTZXRSZW1vdmVFbGVtZW50KGNhY2hlTmFtZSwgc29ydGVkU2V0TmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBtdWx0aXBsZSBlbGVtZW50cyBmcm9tIHRoZSBzb3J0ZWQgc2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc29ydGVkIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRlZFNldE5hbWUgLSBUaGUgc29ydGVkIHNldCB0byByZW1vdmUgZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSB2YWx1ZXMgLSBUaGUgdmFsdWVzIG9mIHRoZSBlbGVtZW50cyB0byByZW1vdmUgZnJvbSB0aGUgc2V0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNvcnRlZFNldFJlbW92ZUVsZW1lbnQuUmVzcG9uc2U+fVxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRSZW1vdmVFbGVtZW50LlN1Y2Nlc3N9IGlmIHRoZSBlbGVtZW50cyB3ZXJlIHN1Y2Nlc3NmdWxseSByZW1vdmVkXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldEluY3JlbWVudFNjb3JlLkVycm9yfSBvbiBmYWlsdXJlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc29ydGVkU2V0UmVtb3ZlRWxlbWVudHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogc3RyaW5nW10gfCBVaW50OEFycmF5W11cbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldFJlbW92ZUVsZW1lbnRzLlJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXROZXh0RGF0YUNsaWVudCgpO1xuICAgIHJldHVybiBhd2FpdCBjbGllbnQuc29ydGVkU2V0UmVtb3ZlRWxlbWVudHMoXG4gICAgICBjYWNoZU5hbWUsXG4gICAgICBzb3J0ZWRTZXROYW1lLFxuICAgICAgdmFsdWVzXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBsZW5ndGggKG51bWJlciBvZiBpdGVtcykgb2Ygc29ydGVkIHNldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIHNvcnRlZCBzZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0ZWRTZXROYW1lIC0gVGhlIHNvcnRlZCBzZXQgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVTb3J0ZWRTZXRMZW5ndGguUmVzcG9uc2U+fVxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRMZW5ndGguSGl0fSBjb250YWluaW5nIHRoZSBsZW5ndGggaWYgdGhlIHNvcnRlZCBzZXQgZXhpc3RzLlxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRMZW5ndGguTWlzc30gaWYgdGhlIHNvcnRlZCBzZXQgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZVNvcnRlZFNldExlbmd0aC5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzb3J0ZWRTZXRMZW5ndGgoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRMZW5ndGguUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zb3J0ZWRTZXRMZW5ndGgoY2FjaGVOYW1lLCBzb3J0ZWRTZXROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBsZW5ndGggKG51bWJlciBvZiBpdGVtcykgb2Ygc29ydGVkIHNldCB3aXRoaW4gdGhlIHByb3ZpZGVkIHNjb3JlIHJhbmdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUgc29ydGVkIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRlZFNldE5hbWUgLSBUaGUgc29ydGVkIHNldCBuYW1lLlxuICAgKiBAcGFyYW0ge1NvcnRlZFNldExlbmd0aEJ5U2NvcmVPcHRpb25zfSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVyIGZvciBzcGVjaWZ5aW5nIHRoZSBzY29yZSByYW5nZSB0byBzZWFyY2ggaW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5TY29yZV0gLSBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHNjb3JlIHJhbmdlIHRvIHNlYXJjaCBpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFNjb3JlXSAtIFRoZSB1cHBlciBib3VuZCBvbiB0aGUgc2NvcmUgcmFuZ2UgdG8gc2VhcmNoIGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZVNvcnRlZFNldExlbmd0aEJ5U2NvcmUuUmVzcG9uc2U+fVxuICAgKiB7QGxpbmsgQ2FjaGVTb3J0ZWRTZXRMZW5ndGhCeVNjb3JlLkhpdH0gY29udGFpbmluZyB0aGUgbGVuZ3RoIGlmIHRoZSBzb3J0ZWQgc2V0IGV4aXN0cy5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0TGVuZ3RoQnlTY29yZS5NaXNzfSBpZiB0aGUgc29ydGVkIHNldCBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlU29ydGVkU2V0TGVuZ3RoQnlTY29yZS5FcnJvcn0gb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzb3J0ZWRTZXRMZW5ndGhCeVNjb3JlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogU29ydGVkU2V0TGVuZ3RoQnlTY29yZU9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldExlbmd0aEJ5U2NvcmUuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5zb3J0ZWRTZXRMZW5ndGhCeVNjb3JlKFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgc29ydGVkU2V0TmFtZSxcbiAgICAgIG9wdGlvbnM/Lm1pblNjb3JlLFxuICAgICAgb3B0aW9ucz8ubWF4U2NvcmVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdHlwZSBvZiB0aGUga2V5IGluIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIGtleS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgZm9yIHdoaWNoIHR5cGUgaXMgcmVxdWVzdGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZUl0ZW1HZXRUeXBlLlJlc3BvbnNlPn1cbiAgICoge0BsaW5rIENhY2hlSXRlbUdldFR5cGUuSGl0fSBjb250YWluaW5nIHR5cGUgb2Yga2V5IHdoZW4gZm91bmQuXG4gICAqIHtAbGluayBDYWNoZUl0ZW1HZXRUeXBlLk1pc3N9IHdoZW4gdGhlIGtleSBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlSXRlbUdldFR5cGUuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXRlbUdldFR5cGUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVJdGVtR2V0VHlwZS5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50Lml0ZW1HZXRUeXBlKGNhY2hlTmFtZSwga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHJlbWFpbmluZyB0dGwgb2YgdGhlIGtleSBpbiB0aGUgY2FjaGUgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lIC0gVGhlIGNhY2hlIGNvbnRhaW5pbmcgdGhlIGtleS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgZm9yIHdoaWNoIHRoZSB0dGwgcmVtYWluaW5nIGlzIHJlcXVlc3RlZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVJdGVtR2V0VHRsLlJlc3BvbnNlPn1cbiAgICoge0BsaW5rIENhY2hlSXRlbUdldFR0bC5IaXR9IGNvbnRhaW5pbmcgdHRsIHJlbWFpbmluZyBvZiBrZXkgd2hlbiBmb3VuZC5cbiAgICoge0BsaW5rIENhY2hlSXRlbUdldFR0bC5NaXNzfSB3aGVuIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZUl0ZW1HZXRUdGwuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXRlbUdldFR0bChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZUl0ZW1HZXRUdGwuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5pdGVtR2V0VHRsKGNhY2hlTmFtZSwga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgcHJvdmlkZWQga2V5IGV4aXN0cyBpbiB0aGUgY2FjaGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSB0byBsb29rIGluLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGtleSAtIFRoZSBrZXkgdG8gbG9vayB1cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVLZXlFeGlzdHMuUmVzcG9uc2U+fVxuICAgKiB7QGxpbmsgQ2FjaGVLZXlFeGlzdHMuU3VjY2Vzc30gcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUga2V5IHdhcyBmb3VuZC5cbiAgICoge0BsaW5rIENhY2hlS2V5RXhpc3RzLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGtleUV4aXN0cyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZUtleUV4aXN0cy5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LmtleUV4aXN0cyhjYWNoZU5hbWUsIGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIGtleXMgZXhpc3QgaW4gdGhlIGNhY2hlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgdG8gbG9vayBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXX0ga2V5cyAtIFRoZSBrZXlzIHRvIGxvb2sgdXAuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlS2V5c0V4aXN0LlJlc3BvbnNlPn1cbiAgICoge0BsaW5rIENhY2hlS2V5c0V4aXN0LlN1Y2Nlc3N9IHJldHVybnMgbGlzdCBvZiBib29sZWFucyBpbmRpY2F0aW5nIHdoZXRoZXIgZWFjaCBrZXkgd2FzIGZvdW5kLlxuICAgKiB7QGxpbmsgQ2FjaGVLZXlzRXhpc3QuRXJyb3J9IG9uIGZhaWx1cmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMga2V5c0V4aXN0KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleXM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVLZXlzRXhpc3QuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5rZXlzRXhpc3QoY2FjaGVOYW1lLCBrZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHR0bCBvZiB0aGUga2V5IGluIHRoZSBjYWNoZSBpbiBtaWxsaXNlY29uZHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWUgLSBUaGUgY2FjaGUgY29udGFpbmluZyB0aGUga2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBmb3Igd2hpY2ggdGhlIHR0bCByZW1haW5pbmcgaXMgcmVxdWVzdGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdHRsTWlsbGlzZWNvbmRzIC0gVGhlIHR0bCBpbiBtaWxsaXNlY29uZHMgdGhhdCBzaG91bGQgb3ZlcndyaXRlIHRoZSBjdXJyZW50IHR0bC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVVcGRhdGVUdGwuUmVzcG9uc2U+fVxuICAgKiB7QGxpbmsgQ2FjaGVVcGRhdGVUdGwuU2V0fSB3aGVuIHRoZSB0dGwgd2FzIHN1Y2Nlc3NmdWxseSBvdmVyd3JpdHRlbi5cbiAgICoge0BsaW5rIENhY2hlVXBkYXRlVHRsLk1pc3N9IHdoZW4gdGhlIGtleSBkb2VzIG5vdCBleGlzdC5cbiAgICoge0BsaW5rIENhY2hlVXBkYXRlVHRsLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVR0bChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdHRsTWlsbGlzZWNvbmRzOiBudW1iZXJcbiAgKTogUHJvbWlzZTxDYWNoZVVwZGF0ZVR0bC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0TmV4dERhdGFDbGllbnQoKTtcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnVwZGF0ZVR0bChjYWNoZU5hbWUsIGtleSwgdHRsTWlsbGlzZWNvbmRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmNyZWFzZSB0aGUgdHRsIG9mIHRoZSBrZXkgaW4gdGhlIGNhY2hlIGluIG1pbGxpc2Vjb25kcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBrZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IGZvciB3aGljaCB0aGUgdHRsIHJlbWFpbmluZyBpcyByZXF1ZXN0ZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0dGxNaWxsaXNlY29uZHMgLSBUaGUgdHRsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHNob3VsZFxuICAgKiBvdmVyd3JpdGUgdGhlIGN1cnJlbnQgdHRsLiBTaG91bGQgYmUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IHR0bC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVJbmNyZWFzZVR0bC5SZXNwb25zZT59XG4gICAqIHtAbGluayBDYWNoZUluY3JlYXNlVHRsLlNldH0gd2hlbiB0aGUgdHRsIHdhcyBzdWNjZXNzZnVsbHkgaW5jcmVhc2VkLlxuICAgKiB7QGxpbmsgQ2FjaGVJbmNyZWFzZVR0bC5NaXNzfSB3aGVuIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZUluY3JlYXNlVHRsLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGluY3JlYXNlVHRsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB0dGxNaWxsaXNlY29uZHM6IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlSW5jcmVhc2VUdGwuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5pbmNyZWFzZVR0bChjYWNoZU5hbWUsIGtleSwgdHRsTWlsbGlzZWNvbmRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNyZWFzZSB0aGUgdHRsIG9mIHRoZSBrZXkgaW4gdGhlIGNhY2hlIGluIG1pbGxpc2Vjb25kcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZSAtIFRoZSBjYWNoZSBjb250YWluaW5nIHRoZSBrZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IGZvciB3aGljaCB0aGUgdHRsIHJlbWFpbmluZyBpcyByZXF1ZXN0ZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0dGxNaWxsaXNlY29uZHMgLSBUaGUgdHRsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHNob3VsZFxuICAgKiBvdmVyd3JpdGUgdGhlIGN1cnJlbnQgdHRsLiBTaG91bGQgYmUgbGVzcyB0aGFuIHRoZSBjdXJyZW50IHR0bC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGVEZWNyZWFzZVR0bC5SZXNwb25zZT59XG4gICAqIHtAbGluayBDYWNoZURlY3JlYXNlVHRsLlNldH0gd2hlbiB0aGUgdHRsIHdhcyBzdWNjZXNzZnVsbHkgZGVjcmVhc2VkLlxuICAgKiB7QGxpbmsgQ2FjaGVEZWNyZWFzZVR0bC5NaXNzfSB3aGVuIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuXG4gICAqIHtAbGluayBDYWNoZURlY3JlYXNlVHRsLkVycm9yfSBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlY3JlYXNlVHRsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB0dGxNaWxsaXNlY29uZHM6IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlRGVjcmVhc2VUdGwuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldE5leHREYXRhQ2xpZW50KCk7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5kZWNyZWFzZVR0bChjYWNoZU5hbWUsIGtleSwgdHRsTWlsbGlzZWNvbmRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXROZXh0RGF0YUNsaWVudCgpOiBJRGF0YUNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5kYXRhQ2xpZW50c1t0aGlzLm5leHREYXRhQ2xpZW50SW5kZXhdO1xuICAgIHRoaXMubmV4dERhdGFDbGllbnRJbmRleCA9XG4gICAgICAodGhpcy5uZXh0RGF0YUNsaWVudEluZGV4ICsgMSkgJSB0aGlzLmRhdGFDbGllbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG5cbiAgYWJzdHJhY3QgY2xvc2UoKTogdm9pZDtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { CacheDelete, CacheGet, CacheIncrement, CacheSet, CacheSetIfNotExists, CacheSetFetch, CacheSetAddElements, CacheSetRemoveElements, CacheListFetch, CacheListLength, CacheListPushFront, CacheListPushBack, CacheListConcatenateBack, CacheListConcatenateFront, CacheListPopBack, CacheListPopFront, CacheListRemoveValue, CacheListRetain, CacheDictionarySetField, CacheDictionarySetFields, CacheDictionaryGetField, CacheDictionaryFetch, CacheDictionaryIncrement, CacheDictionaryRemoveField, CacheDictionaryRemoveFields, CacheSortedSetFetch, CacheSortedSetPutElement, CacheSortedSetPutElements, CacheSortedSetGetRank, CacheSortedSetGetScore, CacheSortedSetGetScores, CacheSortedSetIncrementScore, CacheSortedSetRemoveElement, CacheSortedSetLength, CacheSortedSetLengthByScore, CollectionTtl, SortedSetOrder, CacheItemGetType, CacheItemGetTtl, CacheKeyExists, CacheKeysExist, CacheUpdateTtl, CacheIncreaseTtl, CacheDecreaseTtl, CacheDictionaryLength, CacheDictionaryGetFields, SetBatch, GetBatch, CacheSetIfAbsent, CacheSetIfPresent, CacheSetIfEqual, CacheSetIfNotEqual, CacheSetIfPresentAndNotEqual, CacheSetIfAbsentOrEqual, CacheSetSample } from '../../../index';
2
- import { GetCallOptions, SetCallOptions, DictionaryFetchCallOptions, DictionaryGetFieldCallOptions, DictionaryGetFieldsCallOptions, DictionarySetFieldCallOptions, DictionarySetFieldsCallOptions, SetIfAbsentCallOptions } from '../../../utils';
2
+ import { GetCallOptions, SetCallOptions, SetIfAbsentCallOptions } from '../../../utils';
3
3
  export interface IDataClient {
4
4
  get(cacheName: string, key: string | Uint8Array, options?: GetCallOptions): Promise<CacheGet.Response>;
5
5
  set(cacheName: string, key: string | Uint8Array, value: string | Uint8Array, options?: SetCallOptions): Promise<CacheSet.Response>;
@@ -28,11 +28,11 @@ export interface IDataClient {
28
28
  listPopFront(cacheName: string, listName: string): Promise<CacheListPopFront.Response>;
29
29
  listRemoveValue(cacheName: string, listName: string, value: string | Uint8Array): Promise<CacheListRemoveValue.Response>;
30
30
  listRetain(cacheName: string, listName: string, startIndex?: number, endIndex?: number, ttl?: CollectionTtl): Promise<CacheListRetain.Response>;
31
- dictionarySetField(cacheName: string, dictionaryName: string, field: string | Uint8Array, value: string | Uint8Array, options?: DictionarySetFieldCallOptions): Promise<CacheDictionarySetField.Response>;
32
- dictionarySetFields(cacheName: string, dictionaryName: string, elements: Map<string | Uint8Array, string | Uint8Array> | Record<string, string | Uint8Array> | Array<[string, string | Uint8Array]>, options?: DictionarySetFieldsCallOptions): Promise<CacheDictionarySetFields.Response>;
33
- dictionaryGetField(cacheName: string, dictionaryName: string, field: string | Uint8Array, options?: DictionaryGetFieldCallOptions): Promise<CacheDictionaryGetField.Response>;
34
- dictionaryGetFields(cacheName: string, dictionaryName: string, fields: string[] | Uint8Array[], options?: DictionaryGetFieldsCallOptions): Promise<CacheDictionaryGetFields.Response>;
35
- dictionaryFetch(cacheName: string, dictionaryName: string, options?: DictionaryFetchCallOptions): Promise<CacheDictionaryFetch.Response>;
31
+ dictionarySetField(cacheName: string, dictionaryName: string, field: string | Uint8Array, value: string | Uint8Array, ttl?: CollectionTtl): Promise<CacheDictionarySetField.Response>;
32
+ dictionarySetFields(cacheName: string, dictionaryName: string, elements: Map<string | Uint8Array, string | Uint8Array> | Record<string, string | Uint8Array> | Array<[string, string | Uint8Array]>, ttl?: CollectionTtl): Promise<CacheDictionarySetFields.Response>;
33
+ dictionaryGetField(cacheName: string, dictionaryName: string, field: string | Uint8Array): Promise<CacheDictionaryGetField.Response>;
34
+ dictionaryGetFields(cacheName: string, dictionaryName: string, fields: string[] | Uint8Array[]): Promise<CacheDictionaryGetFields.Response>;
35
+ dictionaryFetch(cacheName: string, dictionaryName: string): Promise<CacheDictionaryFetch.Response>;
36
36
  dictionaryIncrement(cacheName: string, dictionaryName: string, field: string | Uint8Array, amount?: number, ttl?: CollectionTtl): Promise<CacheDictionaryIncrement.Response>;
37
37
  dictionaryRemoveField(cacheName: string, dictionaryName: string, field: string | Uint8Array): Promise<CacheDictionaryRemoveField.Response>;
38
38
  dictionaryRemoveFields(cacheName: string, dictionaryName: string, fields: string[] | Uint8Array[]): Promise<CacheDictionaryRemoveFields.Response>;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSURhdGFDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW50ZXJuYWwvY2xpZW50cy9jYWNoZS9JRGF0YUNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2FjaGVEZWxldGUsXG4gIENhY2hlR2V0LFxuICBDYWNoZUluY3JlbWVudCxcbiAgQ2FjaGVTZXQsXG4gIENhY2hlU2V0SWZOb3RFeGlzdHMsXG4gIENhY2hlU2V0RmV0Y2gsXG4gIENhY2hlU2V0QWRkRWxlbWVudHMsXG4gIENhY2hlU2V0UmVtb3ZlRWxlbWVudHMsXG4gIENhY2hlTGlzdEZldGNoLFxuICBDYWNoZUxpc3RMZW5ndGgsXG4gIENhY2hlTGlzdFB1c2hGcm9udCxcbiAgQ2FjaGVMaXN0UHVzaEJhY2ssXG4gIENhY2hlTGlzdENvbmNhdGVuYXRlQmFjayxcbiAgQ2FjaGVMaXN0Q29uY2F0ZW5hdGVGcm9udCxcbiAgQ2FjaGVMaXN0UG9wQmFjayxcbiAgQ2FjaGVMaXN0UG9wRnJvbnQsXG4gIENhY2hlTGlzdFJlbW92ZVZhbHVlLFxuICBDYWNoZUxpc3RSZXRhaW4sXG4gIENhY2hlRGljdGlvbmFyeVNldEZpZWxkLFxuICBDYWNoZURpY3Rpb25hcnlTZXRGaWVsZHMsXG4gIENhY2hlRGljdGlvbmFyeUdldEZpZWxkLFxuICBDYWNoZURpY3Rpb25hcnlGZXRjaCxcbiAgQ2FjaGVEaWN0aW9uYXJ5SW5jcmVtZW50LFxuICBDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZCxcbiAgQ2FjaGVEaWN0aW9uYXJ5UmVtb3ZlRmllbGRzLFxuICBDYWNoZVNvcnRlZFNldEZldGNoLFxuICBDYWNoZVNvcnRlZFNldFB1dEVsZW1lbnQsXG4gIENhY2hlU29ydGVkU2V0UHV0RWxlbWVudHMsXG4gIENhY2hlU29ydGVkU2V0R2V0UmFuayxcbiAgQ2FjaGVTb3J0ZWRTZXRHZXRTY29yZSxcbiAgQ2FjaGVTb3J0ZWRTZXRHZXRTY29yZXMsXG4gIENhY2hlU29ydGVkU2V0SW5jcmVtZW50U2NvcmUsXG4gIENhY2hlU29ydGVkU2V0UmVtb3ZlRWxlbWVudCxcbiAgQ2FjaGVTb3J0ZWRTZXRMZW5ndGgsXG4gIENhY2hlU29ydGVkU2V0TGVuZ3RoQnlTY29yZSxcbiAgQ29sbGVjdGlvblR0bCxcbiAgU29ydGVkU2V0T3JkZXIsXG4gIENhY2hlSXRlbUdldFR5cGUsXG4gIENhY2hlSXRlbUdldFR0bCxcbiAgQ2FjaGVLZXlFeGlzdHMsXG4gIENhY2hlS2V5c0V4aXN0LFxuICBDYWNoZVVwZGF0ZVR0bCxcbiAgQ2FjaGVJbmNyZWFzZVR0bCxcbiAgQ2FjaGVEZWNyZWFzZVR0bCxcbiAgQ2FjaGVEaWN0aW9uYXJ5TGVuZ3RoLFxuICBDYWNoZURpY3Rpb25hcnlHZXRGaWVsZHMsXG4gIFNldEJhdGNoLFxuICBHZXRCYXRjaCxcbiAgQ2FjaGVTZXRJZkFic2VudCxcbiAgQ2FjaGVTZXRJZlByZXNlbnQsXG4gIENhY2hlU2V0SWZFcXVhbCxcbiAgQ2FjaGVTZXRJZk5vdEVxdWFsLFxuICBDYWNoZVNldElmUHJlc2VudEFuZE5vdEVxdWFsLFxuICBDYWNoZVNldElmQWJzZW50T3JFcXVhbCxcbiAgQ2FjaGVTZXRTYW1wbGUsXG59IGZyb20gJy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7XG4gIEdldENhbGxPcHRpb25zLFxuICBTZXRDYWxsT3B0aW9ucyxcbiAgRGljdGlvbmFyeUZldGNoQ2FsbE9wdGlvbnMsXG4gIERpY3Rpb25hcnlHZXRGaWVsZENhbGxPcHRpb25zLFxuICBEaWN0aW9uYXJ5R2V0RmllbGRzQ2FsbE9wdGlvbnMsXG4gIERpY3Rpb25hcnlTZXRGaWVsZENhbGxPcHRpb25zLFxuICBEaWN0aW9uYXJ5U2V0RmllbGRzQ2FsbE9wdGlvbnMsXG4gIFNldElmQWJzZW50Q2FsbE9wdGlvbnMsXG59IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YUNsaWVudCB7XG4gIGdldChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IEdldENhbGxPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVHZXQuUmVzcG9uc2U+O1xuICBzZXQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM/OiBTZXRDYWxsT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0LlJlc3BvbnNlPjtcbiAgZGVsZXRlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlRGVsZXRlLlJlc3BvbnNlPjtcbiAgaW5jcmVtZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGFtb3VudDogbnVtYmVyLFxuICAgIHR0bD86IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlSW5jcmVtZW50LlJlc3BvbnNlPjtcbiAgc2V0SWZOb3RFeGlzdHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bD86IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlU2V0SWZOb3RFeGlzdHMuUmVzcG9uc2U+O1xuICBzZXRJZkFic2VudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldElmQWJzZW50Q2FsbE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmQWJzZW50LlJlc3BvbnNlPjtcbiAgc2V0SWZQcmVzZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB0dGw/OiBudW1iZXJcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmUHJlc2VudC5SZXNwb25zZT47XG4gIHNldElmRXF1YWwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGVxdWFsOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bD86IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlU2V0SWZFcXVhbC5SZXNwb25zZT47XG4gIHNldElmTm90RXF1YWwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG5vdEVxdWFsOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bD86IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlU2V0SWZOb3RFcXVhbC5SZXNwb25zZT47XG4gIHNldElmUHJlc2VudEFuZE5vdEVxdWFsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBub3RFcXVhbDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB0dGw/OiBudW1iZXJcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmUHJlc2VudEFuZE5vdEVxdWFsLlJlc3BvbnNlPjtcbiAgc2V0SWZBYnNlbnRPckVxdWFsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBlcXVhbDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB0dGw/OiBudW1iZXJcbiAgKTogUHJvbWlzZTxDYWNoZVNldElmQWJzZW50T3JFcXVhbC5SZXNwb25zZT47XG4gIGdldEJhdGNoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleXM6IEFycmF5PHN0cmluZyB8IFVpbnQ4QXJyYXk+XG4gICk6IFByb21pc2U8R2V0QmF0Y2guUmVzcG9uc2U+O1xuICBzZXRCYXRjaChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBpdGVtczpcbiAgICAgIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgVWludDhBcnJheT5cbiAgICAgIHwgTWFwPHN0cmluZyB8IFVpbnQ4QXJyYXksIHN0cmluZyB8IFVpbnQ4QXJyYXk+LFxuICAgIHR0bD86IG51bWJlclxuICApOiBQcm9taXNlPFNldEJhdGNoLlJlc3BvbnNlPjtcbiAgc2V0RmV0Y2goY2FjaGVOYW1lOiBzdHJpbmcsIHNldE5hbWU6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVTZXRGZXRjaC5SZXNwb25zZT47XG4gIHNldEFkZEVsZW1lbnRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNldE5hbWU6IHN0cmluZyxcbiAgICBlbGVtZW50czogc3RyaW5nW10gfCBVaW50OEFycmF5W10sXG4gICAgdHRsPzogQ29sbGVjdGlvblR0bFxuICApOiBQcm9taXNlPENhY2hlU2V0QWRkRWxlbWVudHMuUmVzcG9uc2U+O1xuICBzZXRSZW1vdmVFbGVtZW50cyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzZXROYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVTZXRSZW1vdmVFbGVtZW50cy5SZXNwb25zZT47XG4gIHNldFNhbXBsZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzZXROYW1lOiBzdHJpbmcsXG4gICAgbGltaXQ6IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlU2V0U2FtcGxlLlJlc3BvbnNlPjtcbiAgbGlzdEZldGNoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgc3RhcnRJbmRleD86IG51bWJlcixcbiAgICBlbmRJbmRleD86IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlTGlzdEZldGNoLlJlc3BvbnNlPjtcbiAgbGlzdExlbmd0aChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0TGVuZ3RoLlJlc3BvbnNlPjtcbiAgbGlzdFB1c2hGcm9udChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHRydW5jYXRlQmFja1RvU2l6ZT86IG51bWJlcixcbiAgICB0dGw/OiBDb2xsZWN0aW9uVHRsXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UHVzaEZyb250LlJlc3BvbnNlPjtcbiAgbGlzdFB1c2hCYWNrKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdHJ1bmNhdGVGcm9udFRvU2l6ZT86IG51bWJlcixcbiAgICB0dGw/OiBDb2xsZWN0aW9uVHRsXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UHVzaEJhY2suUmVzcG9uc2U+O1xuICBsaXN0Q29uY2F0ZW5hdGVCYWNrKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWVzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXSxcbiAgICB0cnVuY2F0ZUZyb250VG9TaXplPzogbnVtYmVyLFxuICAgIHR0bD86IENvbGxlY3Rpb25UdGxcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RDb25jYXRlbmF0ZUJhY2suUmVzcG9uc2U+O1xuICBsaXN0Q29uY2F0ZW5hdGVGcm9udChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogc3RyaW5nW10gfCBVaW50OEFycmF5W10sXG4gICAgdHJ1bmNhdGVCYWNrVG9TaXplPzogbnVtYmVyLFxuICAgIHR0bD86IENvbGxlY3Rpb25UdGxcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RDb25jYXRlbmF0ZUZyb250LlJlc3BvbnNlPjtcbiAgbGlzdFBvcEJhY2soXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPENhY2hlTGlzdFBvcEJhY2suUmVzcG9uc2U+O1xuICBsaXN0UG9wRnJvbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPENhY2hlTGlzdFBvcEZyb250LlJlc3BvbnNlPjtcbiAgbGlzdFJlbW92ZVZhbHVlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RSZW1vdmVWYWx1ZS5SZXNwb25zZT47XG4gIGxpc3RSZXRhaW4oXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICBzdGFydEluZGV4PzogbnVtYmVyLFxuICAgIGVuZEluZGV4PzogbnVtYmVyLFxuICAgIHR0bD86IENvbGxlY3Rpb25UdGxcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RSZXRhaW4uUmVzcG9uc2U+O1xuICBkaWN0aW9uYXJ5U2V0RmllbGQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogRGljdGlvbmFyeVNldEZpZWxkQ2FsbE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlTZXRGaWVsZC5SZXNwb25zZT47XG4gIGRpY3Rpb25hcnlTZXRGaWVsZHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBlbGVtZW50czpcbiAgICAgIHwgTWFwPHN0cmluZyB8IFVpbnQ4QXJyYXksIHN0cmluZyB8IFVpbnQ4QXJyYXk+XG4gICAgICB8IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IFVpbnQ4QXJyYXk+XG4gICAgICB8IEFycmF5PFtzdHJpbmcsIHN0cmluZyB8IFVpbnQ4QXJyYXldPixcbiAgICBvcHRpb25zPzogRGljdGlvbmFyeVNldEZpZWxkc0NhbGxPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5U2V0RmllbGRzLlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeUdldEZpZWxkKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IERpY3Rpb25hcnlHZXRGaWVsZENhbGxPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5R2V0RmllbGQuUmVzcG9uc2U+O1xuICBkaWN0aW9uYXJ5R2V0RmllbGRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZmllbGRzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXSxcbiAgICBvcHRpb25zPzogRGljdGlvbmFyeUdldEZpZWxkc0NhbGxPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5R2V0RmllbGRzLlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeUZldGNoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IERpY3Rpb25hcnlGZXRjaENhbGxPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5RmV0Y2guUmVzcG9uc2U+O1xuICBkaWN0aW9uYXJ5SW5jcmVtZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgYW1vdW50PzogbnVtYmVyLFxuICAgIHR0bD86IENvbGxlY3Rpb25UdGxcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlJbmNyZW1lbnQuUmVzcG9uc2U+O1xuICBkaWN0aW9uYXJ5UmVtb3ZlRmllbGQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeVJlbW92ZUZpZWxkLlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeVJlbW92ZUZpZWxkcyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkczogc3RyaW5nW10gfCBVaW50OEFycmF5W11cbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZHMuUmVzcG9uc2U+O1xuICBkaWN0aW9uYXJ5TGVuZ3RoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlMZW5ndGguUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRGZXRjaEJ5UmFuayhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgb3JkZXI/OiBTb3J0ZWRTZXRPcmRlcixcbiAgICBzdGFydFJhbms/OiBudW1iZXIsXG4gICAgZW5kUmFuaz86IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0RmV0Y2guUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRGZXRjaEJ5U2NvcmUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIG9yZGVyPzogU29ydGVkU2V0T3JkZXIsXG4gICAgbWluU2NvcmU/OiBudW1iZXIsXG4gICAgbWF4U2NvcmU/OiBudW1iZXIsXG4gICAgb2Zmc2V0PzogbnVtYmVyLFxuICAgIGNvdW50PzogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRGZXRjaC5SZXNwb25zZT47XG4gIHNvcnRlZFNldFB1dEVsZW1lbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHNjb3JlOiBudW1iZXIsXG4gICAgdHRsPzogQ29sbGVjdGlvblR0bFxuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0UHV0RWxlbWVudC5SZXNwb25zZT47XG4gIHNvcnRlZFNldFB1dEVsZW1lbnRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICBlbGVtZW50czpcbiAgICAgIHwgTWFwPHN0cmluZyB8IFVpbnQ4QXJyYXksIG51bWJlcj5cbiAgICAgIHwgUmVjb3JkPHN0cmluZywgbnVtYmVyPlxuICAgICAgfCBBcnJheTxbc3RyaW5nLCBudW1iZXJdPixcbiAgICB0dGw/OiBDb2xsZWN0aW9uVHRsXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50cy5SZXNwb25zZT47XG4gIHNvcnRlZFNldEdldFJhbmsoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRHZXRSYW5rLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0R2V0U2NvcmUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRHZXRTY29yZS5SZXNwb25zZT47XG4gIHNvcnRlZFNldEdldFNjb3JlcyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWVzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXVxuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0R2V0U2NvcmVzLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0SW5jcmVtZW50U2NvcmUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGFtb3VudD86IG51bWJlcixcbiAgICB0dGw/OiBDb2xsZWN0aW9uVHRsXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRJbmNyZW1lbnRTY29yZS5SZXNwb25zZT47XG4gIHNvcnRlZFNldFJlbW92ZUVsZW1lbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRSZW1vdmVFbGVtZW50LlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0UmVtb3ZlRWxlbWVudHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogc3RyaW5nW10gfCBVaW50OEFycmF5W11cbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldFJlbW92ZUVsZW1lbnQuUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRMZW5ndGgoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRMZW5ndGguUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRMZW5ndGhCeVNjb3JlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICBtaW5TY29yZT86IG51bWJlcixcbiAgICBtYXhTY29yZT86IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0TGVuZ3RoQnlTY29yZS5SZXNwb25zZT47XG4gIGl0ZW1HZXRUeXBlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlSXRlbUdldFR5cGUuUmVzcG9uc2U+O1xuICBpdGVtR2V0VHRsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlSXRlbUdldFR0bC5SZXNwb25zZT47XG4gIGtleUV4aXN0cyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZUtleUV4aXN0cy5SZXNwb25zZT47XG4gIGtleXNFeGlzdChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXlzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXVxuICApOiBQcm9taXNlPENhY2hlS2V5c0V4aXN0LlJlc3BvbnNlPjtcbiAgdXBkYXRlVHRsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB0dGxNaWxsaXNlY29uZHM6IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlVXBkYXRlVHRsLlJlc3BvbnNlPjtcbiAgaW5jcmVhc2VUdGwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bE1pbGxpc2Vjb25kczogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVJbmNyZWFzZVR0bC5SZXNwb25zZT47XG4gIGRlY3JlYXNlVHRsKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB0dGxNaWxsaXNlY29uZHM6IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlRGVjcmVhc2VUdGwuUmVzcG9uc2U+O1xuICBjbG9zZSgpOiB2b2lkO1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSURhdGFDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW50ZXJuYWwvY2xpZW50cy9jYWNoZS9JRGF0YUNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2FjaGVEZWxldGUsXG4gIENhY2hlR2V0LFxuICBDYWNoZUluY3JlbWVudCxcbiAgQ2FjaGVTZXQsXG4gIENhY2hlU2V0SWZOb3RFeGlzdHMsXG4gIENhY2hlU2V0RmV0Y2gsXG4gIENhY2hlU2V0QWRkRWxlbWVudHMsXG4gIENhY2hlU2V0UmVtb3ZlRWxlbWVudHMsXG4gIENhY2hlTGlzdEZldGNoLFxuICBDYWNoZUxpc3RMZW5ndGgsXG4gIENhY2hlTGlzdFB1c2hGcm9udCxcbiAgQ2FjaGVMaXN0UHVzaEJhY2ssXG4gIENhY2hlTGlzdENvbmNhdGVuYXRlQmFjayxcbiAgQ2FjaGVMaXN0Q29uY2F0ZW5hdGVGcm9udCxcbiAgQ2FjaGVMaXN0UG9wQmFjayxcbiAgQ2FjaGVMaXN0UG9wRnJvbnQsXG4gIENhY2hlTGlzdFJlbW92ZVZhbHVlLFxuICBDYWNoZUxpc3RSZXRhaW4sXG4gIENhY2hlRGljdGlvbmFyeVNldEZpZWxkLFxuICBDYWNoZURpY3Rpb25hcnlTZXRGaWVsZHMsXG4gIENhY2hlRGljdGlvbmFyeUdldEZpZWxkLFxuICBDYWNoZURpY3Rpb25hcnlGZXRjaCxcbiAgQ2FjaGVEaWN0aW9uYXJ5SW5jcmVtZW50LFxuICBDYWNoZURpY3Rpb25hcnlSZW1vdmVGaWVsZCxcbiAgQ2FjaGVEaWN0aW9uYXJ5UmVtb3ZlRmllbGRzLFxuICBDYWNoZVNvcnRlZFNldEZldGNoLFxuICBDYWNoZVNvcnRlZFNldFB1dEVsZW1lbnQsXG4gIENhY2hlU29ydGVkU2V0UHV0RWxlbWVudHMsXG4gIENhY2hlU29ydGVkU2V0R2V0UmFuayxcbiAgQ2FjaGVTb3J0ZWRTZXRHZXRTY29yZSxcbiAgQ2FjaGVTb3J0ZWRTZXRHZXRTY29yZXMsXG4gIENhY2hlU29ydGVkU2V0SW5jcmVtZW50U2NvcmUsXG4gIENhY2hlU29ydGVkU2V0UmVtb3ZlRWxlbWVudCxcbiAgQ2FjaGVTb3J0ZWRTZXRMZW5ndGgsXG4gIENhY2hlU29ydGVkU2V0TGVuZ3RoQnlTY29yZSxcbiAgQ29sbGVjdGlvblR0bCxcbiAgU29ydGVkU2V0T3JkZXIsXG4gIENhY2hlSXRlbUdldFR5cGUsXG4gIENhY2hlSXRlbUdldFR0bCxcbiAgQ2FjaGVLZXlFeGlzdHMsXG4gIENhY2hlS2V5c0V4aXN0LFxuICBDYWNoZVVwZGF0ZVR0bCxcbiAgQ2FjaGVJbmNyZWFzZVR0bCxcbiAgQ2FjaGVEZWNyZWFzZVR0bCxcbiAgQ2FjaGVEaWN0aW9uYXJ5TGVuZ3RoLFxuICBDYWNoZURpY3Rpb25hcnlHZXRGaWVsZHMsXG4gIFNldEJhdGNoLFxuICBHZXRCYXRjaCxcbiAgQ2FjaGVTZXRJZkFic2VudCxcbiAgQ2FjaGVTZXRJZlByZXNlbnQsXG4gIENhY2hlU2V0SWZFcXVhbCxcbiAgQ2FjaGVTZXRJZk5vdEVxdWFsLFxuICBDYWNoZVNldElmUHJlc2VudEFuZE5vdEVxdWFsLFxuICBDYWNoZVNldElmQWJzZW50T3JFcXVhbCxcbiAgQ2FjaGVTZXRTYW1wbGUsXG59IGZyb20gJy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7XG4gIEdldENhbGxPcHRpb25zLFxuICBTZXRDYWxsT3B0aW9ucyxcbiAgU2V0SWZBYnNlbnRDYWxsT3B0aW9ucyxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhQ2xpZW50IHtcbiAgZ2V0KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogR2V0Q2FsbE9wdGlvbnNcbiAgKTogUHJvbWlzZTxDYWNoZUdldC5SZXNwb25zZT47XG4gIHNldChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9ucz86IFNldENhbGxPcHRpb25zXG4gICk6IFByb21pc2U8Q2FjaGVTZXQuUmVzcG9uc2U+O1xuICBkZWxldGUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVEZWxldGUuUmVzcG9uc2U+O1xuICBpbmNyZW1lbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgYW1vdW50OiBudW1iZXIsXG4gICAgdHRsPzogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVJbmNyZW1lbnQuUmVzcG9uc2U+O1xuICBzZXRJZk5vdEV4aXN0cyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdHRsPzogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVTZXRJZk5vdEV4aXN0cy5SZXNwb25zZT47XG4gIHNldElmQWJzZW50KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBvcHRpb25zPzogU2V0SWZBYnNlbnRDYWxsT3B0aW9uc1xuICApOiBQcm9taXNlPENhY2hlU2V0SWZBYnNlbnQuUmVzcG9uc2U+O1xuICBzZXRJZlByZXNlbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bD86IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlU2V0SWZQcmVzZW50LlJlc3BvbnNlPjtcbiAgc2V0SWZFcXVhbChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZXF1YWw6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdHRsPzogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVTZXRJZkVxdWFsLlJlc3BvbnNlPjtcbiAgc2V0SWZOb3RFcXVhbChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgbm90RXF1YWw6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdHRsPzogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVTZXRJZk5vdEVxdWFsLlJlc3BvbnNlPjtcbiAgc2V0SWZQcmVzZW50QW5kTm90RXF1YWwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIG5vdEVxdWFsOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bD86IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlU2V0SWZQcmVzZW50QW5kTm90RXF1YWwuUmVzcG9uc2U+O1xuICBzZXRJZkFic2VudE9yRXF1YWwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGVxdWFsOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bD86IG51bWJlclxuICApOiBQcm9taXNlPENhY2hlU2V0SWZBYnNlbnRPckVxdWFsLlJlc3BvbnNlPjtcbiAgZ2V0QmF0Y2goXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5czogQXJyYXk8c3RyaW5nIHwgVWludDhBcnJheT5cbiAgKTogUHJvbWlzZTxHZXRCYXRjaC5SZXNwb25zZT47XG4gIHNldEJhdGNoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGl0ZW1zOlxuICAgICAgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBVaW50OEFycmF5PlxuICAgICAgfCBNYXA8c3RyaW5nIHwgVWludDhBcnJheSwgc3RyaW5nIHwgVWludDhBcnJheT4sXG4gICAgdHRsPzogbnVtYmVyXG4gICk6IFByb21pc2U8U2V0QmF0Y2guUmVzcG9uc2U+O1xuICBzZXRGZXRjaChjYWNoZU5hbWU6IHN0cmluZywgc2V0TmFtZTogc3RyaW5nKTogUHJvbWlzZTxDYWNoZVNldEZldGNoLlJlc3BvbnNlPjtcbiAgc2V0QWRkRWxlbWVudHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc2V0TmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnRzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXSxcbiAgICB0dGw/OiBDb2xsZWN0aW9uVHRsXG4gICk6IFByb21pc2U8Q2FjaGVTZXRBZGRFbGVtZW50cy5SZXNwb25zZT47XG4gIHNldFJlbW92ZUVsZW1lbnRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNldE5hbWU6IHN0cmluZyxcbiAgICBlbGVtZW50czogc3RyaW5nW10gfCBVaW50OEFycmF5W11cbiAgKTogUHJvbWlzZTxDYWNoZVNldFJlbW92ZUVsZW1lbnRzLlJlc3BvbnNlPjtcbiAgc2V0U2FtcGxlKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNldE5hbWU6IHN0cmluZyxcbiAgICBsaW1pdDogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVTZXRTYW1wbGUuUmVzcG9uc2U+O1xuICBsaXN0RmV0Y2goXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICBzdGFydEluZGV4PzogbnVtYmVyLFxuICAgIGVuZEluZGV4PzogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0RmV0Y2guUmVzcG9uc2U+O1xuICBsaXN0TGVuZ3RoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RMZW5ndGguUmVzcG9uc2U+O1xuICBsaXN0UHVzaEZyb250KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdHJ1bmNhdGVCYWNrVG9TaXplPzogbnVtYmVyLFxuICAgIHR0bD86IENvbGxlY3Rpb25UdGxcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RQdXNoRnJvbnQuUmVzcG9uc2U+O1xuICBsaXN0UHVzaEJhY2soXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICB0cnVuY2F0ZUZyb250VG9TaXplPzogbnVtYmVyLFxuICAgIHR0bD86IENvbGxlY3Rpb25UdGxcbiAgKTogUHJvbWlzZTxDYWNoZUxpc3RQdXNoQmFjay5SZXNwb25zZT47XG4gIGxpc3RDb25jYXRlbmF0ZUJhY2soXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdLFxuICAgIHRydW5jYXRlRnJvbnRUb1NpemU/OiBudW1iZXIsXG4gICAgdHRsPzogQ29sbGVjdGlvblR0bFxuICApOiBQcm9taXNlPENhY2hlTGlzdENvbmNhdGVuYXRlQmFjay5SZXNwb25zZT47XG4gIGxpc3RDb25jYXRlbmF0ZUZyb250KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGxpc3ROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWVzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXSxcbiAgICB0cnVuY2F0ZUJhY2tUb1NpemU/OiBudW1iZXIsXG4gICAgdHRsPzogQ29sbGVjdGlvblR0bFxuICApOiBQcm9taXNlPENhY2hlTGlzdENvbmNhdGVuYXRlRnJvbnQuUmVzcG9uc2U+O1xuICBsaXN0UG9wQmFjayhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UG9wQmFjay5SZXNwb25zZT47XG4gIGxpc3RQb3BGcm9udChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8Q2FjaGVMaXN0UG9wRnJvbnQuUmVzcG9uc2U+O1xuICBsaXN0UmVtb3ZlVmFsdWUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgbGlzdE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlTGlzdFJlbW92ZVZhbHVlLlJlc3BvbnNlPjtcbiAgbGlzdFJldGFpbihcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBsaXN0TmFtZTogc3RyaW5nLFxuICAgIHN0YXJ0SW5kZXg/OiBudW1iZXIsXG4gICAgZW5kSW5kZXg/OiBudW1iZXIsXG4gICAgdHRsPzogQ29sbGVjdGlvblR0bFxuICApOiBQcm9taXNlPENhY2hlTGlzdFJldGFpbi5SZXNwb25zZT47XG4gIGRpY3Rpb25hcnlTZXRGaWVsZChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHZhbHVlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bD86IENvbGxlY3Rpb25UdGxcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlTZXRGaWVsZC5SZXNwb25zZT47XG4gIGRpY3Rpb25hcnlTZXRGaWVsZHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBlbGVtZW50czpcbiAgICAgIHwgTWFwPHN0cmluZyB8IFVpbnQ4QXJyYXksIHN0cmluZyB8IFVpbnQ4QXJyYXk+XG4gICAgICB8IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IFVpbnQ4QXJyYXk+XG4gICAgICB8IEFycmF5PFtzdHJpbmcsIHN0cmluZyB8IFVpbnQ4QXJyYXldPixcbiAgICB0dGw/OiBDb2xsZWN0aW9uVHRsXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5U2V0RmllbGRzLlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeUdldEZpZWxkKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZmllbGQ6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlHZXRGaWVsZC5SZXNwb25zZT47XG4gIGRpY3Rpb25hcnlHZXRGaWVsZHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZHM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5R2V0RmllbGRzLlJlc3BvbnNlPjtcbiAgZGljdGlvbmFyeUZldGNoKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDYWNoZURpY3Rpb25hcnlGZXRjaC5SZXNwb25zZT47XG4gIGRpY3Rpb25hcnlJbmNyZW1lbnQoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZDogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBhbW91bnQ/OiBudW1iZXIsXG4gICAgdHRsPzogQ29sbGVjdGlvblR0bFxuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeUluY3JlbWVudC5SZXNwb25zZT47XG4gIGRpY3Rpb25hcnlSZW1vdmVGaWVsZChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBkaWN0aW9uYXJ5TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkOiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVEaWN0aW9uYXJ5UmVtb3ZlRmllbGQuUmVzcG9uc2U+O1xuICBkaWN0aW9uYXJ5UmVtb3ZlRmllbGRzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGRpY3Rpb25hcnlOYW1lOiBzdHJpbmcsXG4gICAgZmllbGRzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXVxuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeVJlbW92ZUZpZWxkcy5SZXNwb25zZT47XG4gIGRpY3Rpb25hcnlMZW5ndGgoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgZGljdGlvbmFyeU5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPENhY2hlRGljdGlvbmFyeUxlbmd0aC5SZXNwb25zZT47XG4gIHNvcnRlZFNldEZldGNoQnlSYW5rKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICBvcmRlcj86IFNvcnRlZFNldE9yZGVyLFxuICAgIHN0YXJ0UmFuaz86IG51bWJlcixcbiAgICBlbmRSYW5rPzogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRGZXRjaC5SZXNwb25zZT47XG4gIHNvcnRlZFNldEZldGNoQnlTY29yZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgb3JkZXI/OiBTb3J0ZWRTZXRPcmRlcixcbiAgICBtaW5TY29yZT86IG51bWJlcixcbiAgICBtYXhTY29yZT86IG51bWJlcixcbiAgICBvZmZzZXQ/OiBudW1iZXIsXG4gICAgY291bnQ/OiBudW1iZXJcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldEZldGNoLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0UHV0RWxlbWVudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgc2NvcmU6IG51bWJlcixcbiAgICB0dGw/OiBDb2xsZWN0aW9uVHRsXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRQdXRFbGVtZW50LlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0UHV0RWxlbWVudHMoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnRzOlxuICAgICAgfCBNYXA8c3RyaW5nIHwgVWludDhBcnJheSwgbnVtYmVyPlxuICAgICAgfCBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+XG4gICAgICB8IEFycmF5PFtzdHJpbmcsIG51bWJlcl0+LFxuICAgIHR0bD86IENvbGxlY3Rpb25UdGxcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldFB1dEVsZW1lbnRzLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0R2V0UmFuayhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldEdldFJhbmsuUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRHZXRTY29yZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldEdldFNjb3JlLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0R2V0U2NvcmVzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIHNvcnRlZFNldE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRHZXRTY29yZXMuUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRJbmNyZW1lbnRTY29yZShcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgYW1vdW50PzogbnVtYmVyLFxuICAgIHR0bD86IENvbGxlY3Rpb25UdGxcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldEluY3JlbWVudFNjb3JlLlJlc3BvbnNlPjtcbiAgc29ydGVkU2V0UmVtb3ZlRWxlbWVudChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldFJlbW92ZUVsZW1lbnQuUmVzcG9uc2U+O1xuICBzb3J0ZWRTZXRSZW1vdmVFbGVtZW50cyhcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWVzOiBzdHJpbmdbXSB8IFVpbnQ4QXJyYXlbXVxuICApOiBQcm9taXNlPENhY2hlU29ydGVkU2V0UmVtb3ZlRWxlbWVudC5SZXNwb25zZT47XG4gIHNvcnRlZFNldExlbmd0aChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBzb3J0ZWRTZXROYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDYWNoZVNvcnRlZFNldExlbmd0aC5SZXNwb25zZT47XG4gIHNvcnRlZFNldExlbmd0aEJ5U2NvcmUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAgc29ydGVkU2V0TmFtZTogc3RyaW5nLFxuICAgIG1pblNjb3JlPzogbnVtYmVyLFxuICAgIG1heFNjb3JlPzogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVTb3J0ZWRTZXRMZW5ndGhCeVNjb3JlLlJlc3BvbnNlPjtcbiAgaXRlbUdldFR5cGUoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVJdGVtR2V0VHlwZS5SZXNwb25zZT47XG4gIGl0ZW1HZXRUdGwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5XG4gICk6IFByb21pc2U8Q2FjaGVJdGVtR2V0VHRsLlJlc3BvbnNlPjtcbiAga2V5RXhpc3RzKFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nIHwgVWludDhBcnJheVxuICApOiBQcm9taXNlPENhY2hlS2V5RXhpc3RzLlJlc3BvbnNlPjtcbiAga2V5c0V4aXN0KFxuICAgIGNhY2hlTmFtZTogc3RyaW5nLFxuICAgIGtleXM6IHN0cmluZ1tdIHwgVWludDhBcnJheVtdXG4gICk6IFByb21pc2U8Q2FjaGVLZXlzRXhpc3QuUmVzcG9uc2U+O1xuICB1cGRhdGVUdGwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bE1pbGxpc2Vjb25kczogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVVcGRhdGVUdGwuUmVzcG9uc2U+O1xuICBpbmNyZWFzZVR0bChcbiAgICBjYWNoZU5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gICAgdHRsTWlsbGlzZWNvbmRzOiBudW1iZXJcbiAgKTogUHJvbWlzZTxDYWNoZUluY3JlYXNlVHRsLlJlc3BvbnNlPjtcbiAgZGVjcmVhc2VUdGwoXG4gICAgY2FjaGVOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHR0bE1pbGxpc2Vjb25kczogbnVtYmVyXG4gICk6IFByb21pc2U8Q2FjaGVEZWNyZWFzZVR0bC5SZXNwb25zZT47XG4gIGNsb3NlKCk6IHZvaWQ7XG59XG4iXX0=
@@ -19,8 +19,7 @@ export interface DecompressableCallOptions {
19
19
  }
20
20
  export interface SetCallOptions extends ScalarCallOptions, CompressableCallOptions {
21
21
  }
22
- export interface GetCallOptions extends DecompressableCallOptions {
23
- }
22
+ export type GetCallOptions = DecompressableCallOptions;
24
23
  export interface SetIfAbsentCallOptions extends ScalarCallOptions, CompressableCallOptions {
25
24
  }
26
25
  export interface CollectionCallOptions {
@@ -36,16 +35,6 @@ export interface CollectionCallOptions {
36
35
  * @returns The TTL from the options or a default value.
37
36
  */
38
37
  export declare function ttlOrFromCacheTtl(options?: CollectionCallOptions): CollectionTtl;
39
- export interface DictionaryGetFieldCallOptions extends DecompressableCallOptions {
40
- }
41
- export interface DictionaryGetFieldsCallOptions extends DecompressableCallOptions {
42
- }
43
- export interface DictionaryFetchCallOptions extends DecompressableCallOptions {
44
- }
45
- export interface DictionarySetFieldCallOptions extends CollectionCallOptions, CompressableCallOptions {
46
- }
47
- export interface DictionarySetFieldsCallOptions extends CollectionCallOptions, CompressableCallOptions {
48
- }
49
38
  export interface FrontTruncatableCallOptions extends CollectionCallOptions {
50
39
  /**
51
40
  * If the collection exceeds this length, remove excess from the start of the list. Must be positive.
@@ -23,4 +23,4 @@ var LeaderboardOrder;
23
23
  LeaderboardOrder["Ascending"] = "ASC";
24
24
  LeaderboardOrder["Descending"] = "DESC";
25
25
  })(LeaderboardOrder = exports.LeaderboardOrder || (exports.LeaderboardOrder = {}));
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtY2FsbC1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2NhY2hlLWNhbGwtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBK0M7QUF5Qy9DOzs7OztHQUtHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQy9CLE9BQStCOztJQUUvQixPQUFPLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLEdBQUcsbUNBQUksOEJBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN0RCxDQUFDO0FBSkQsOENBSUM7QUFtQ0QsSUFBWSxjQUdYO0FBSEQsV0FBWSxjQUFjO0lBQ3hCLG1DQUFpQixDQUFBO0lBQ2pCLHFDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQUd6QjtBQTBGRCxJQUFZLGdCQUdYO0FBSEQsV0FBWSxnQkFBZ0I7SUFDMUIscUNBQWlCLENBQUE7SUFDakIsdUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLGdCQUFnQixHQUFoQix3QkFBZ0IsS0FBaEIsd0JBQWdCLFFBRzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb2xsZWN0aW9uVHRsfSBmcm9tICcuL2NvbGxlY3Rpb24tdHRsJztcblxuZXhwb3J0IGludGVyZmFjZSBTY2FsYXJDYWxsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdGltZSB0byBsaXZlIGluIHNlY29uZHMgb2YgdGhlIG9iamVjdCBiZWluZyBtb2RpZmllZC5cbiAgICovXG4gIHR0bD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wcmVzc2FibGVDYWxsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNvbXByZXNzIHRoZSBkYXRhLlxuICAgKi9cbiAgY29tcHJlc3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlY29tcHJlc3NhYmxlQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBkZWNvbXByZXNzIHRoZSBkYXRhLlxuICAgKi9cbiAgZGVjb21wcmVzcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0Q2FsbE9wdGlvbnNcbiAgZXh0ZW5kcyBTY2FsYXJDYWxsT3B0aW9ucyxcbiAgICBDb21wcmVzc2FibGVDYWxsT3B0aW9ucyB7fVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBHZXRDYWxsT3B0aW9ucyBleHRlbmRzIERlY29tcHJlc3NhYmxlQ2FsbE9wdGlvbnMge31cblxuZXhwb3J0IGludGVyZmFjZSBTZXRJZkFic2VudENhbGxPcHRpb25zXG4gIGV4dGVuZHMgU2NhbGFyQ2FsbE9wdGlvbnMsXG4gICAgQ29tcHJlc3NhYmxlQ2FsbE9wdGlvbnMge31cblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGxlbmd0aCBvZiB0aGUgVFRMIGFuZCB3aGV0aGVyIGl0IHNob3VsZCBiZSByZWZyZXNoZWQgd2hlbiB0aGUgY29sbGVjdGlvbiBpcyBtb2RpZmllZC5cbiAgICovXG4gIHR0bD86IENvbGxlY3Rpb25UdGw7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgVFRMIGZyb20gdGhlIG9wdGlvbnMgb3IgcmVmcmVzaCB3aXRoIHRoZSBjYWNoZSBUVEwuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgdG8gZ2V0IHRoZSBUVEwgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBUVEwgZnJvbSB0aGUgb3B0aW9ucyBvciBhIGRlZmF1bHQgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0dGxPckZyb21DYWNoZVR0bChcbiAgb3B0aW9ucz86IENvbGxlY3Rpb25DYWxsT3B0aW9uc1xuKTogQ29sbGVjdGlvblR0bCB7XG4gIHJldHVybiBvcHRpb25zPy50dGwgPz8gQ29sbGVjdGlvblR0bC5mcm9tQ2FjaGVUdGwoKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgRGljdGlvbmFyeUdldEZpZWxkQ2FsbE9wdGlvbnNcbiAgZXh0ZW5kcyBEZWNvbXByZXNzYWJsZUNhbGxPcHRpb25zIHt9XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIERpY3Rpb25hcnlHZXRGaWVsZHNDYWxsT3B0aW9uc1xuICBleHRlbmRzIERlY29tcHJlc3NhYmxlQ2FsbE9wdGlvbnMge31cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgRGljdGlvbmFyeUZldGNoQ2FsbE9wdGlvbnMgZXh0ZW5kcyBEZWNvbXByZXNzYWJsZUNhbGxPcHRpb25zIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGljdGlvbmFyeVNldEZpZWxkQ2FsbE9wdGlvbnNcbiAgZXh0ZW5kcyBDb2xsZWN0aW9uQ2FsbE9wdGlvbnMsXG4gICAgQ29tcHJlc3NhYmxlQ2FsbE9wdGlvbnMge31cblxuZXhwb3J0IGludGVyZmFjZSBEaWN0aW9uYXJ5U2V0RmllbGRzQ2FsbE9wdGlvbnNcbiAgZXh0ZW5kcyBDb2xsZWN0aW9uQ2FsbE9wdGlvbnMsXG4gICAgQ29tcHJlc3NhYmxlQ2FsbE9wdGlvbnMge31cblxuZXhwb3J0IGludGVyZmFjZSBGcm9udFRydW5jYXRhYmxlQ2FsbE9wdGlvbnMgZXh0ZW5kcyBDb2xsZWN0aW9uQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogSWYgdGhlIGNvbGxlY3Rpb24gZXhjZWVkcyB0aGlzIGxlbmd0aCwgcmVtb3ZlIGV4Y2VzcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgbGlzdC4gTXVzdCBiZSBwb3NpdGl2ZS5cbiAgICovXG4gIHRydW5jYXRlRnJvbnRUb1NpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja1RydW5jYXRhYmxlQ2FsbE9wdGlvbnMgZXh0ZW5kcyBDb2xsZWN0aW9uQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogSWYgdGhlIGNvbGxlY3Rpb24gZXhjZWVkcyB0aGlzIGxlbmd0aCwgcmVtb3ZlIGV4Y2VzcyBmcm9tIHRoZSBlbmQgb2YgdGhlIGxpc3QuIE11c3QgYmUgcG9zaXRpdmUuXG4gICAqL1xuICB0cnVuY2F0ZUJhY2tUb1NpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIFNvcnRlZFNldE9yZGVyIHtcbiAgQXNjZW5kaW5nID0gJ0FTQycsXG4gIERlc2NlbmRpbmcgPSAnREVTQycsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydGVkU2V0RmV0Y2hCeVJhbmtDYWxsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcmFuayBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byByZXR1cm4sIGluY2x1c2l2ZS5cbiAgICogSWYgbmVnYXRpdmUsIHRoZSByYW5rIGlzIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAqIElmIHRoZSByYW5rIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQuXG4gICAqL1xuICBzdGFydFJhbms/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgcmFuayBvZiB0aGUgbGFzdCBlbGVtZW50IHRvIHJldHVybiwgZXhjbHVzaXZlLlxuICAgKiBJZiBuZWdhdGl2ZSwgdGhlIHJhbmsgaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICogSWYgdGhlIHJhbmsgaXMgbm90IHNwZWNpZmllZCwgdGhlIHJhbmdlIGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICovXG4gIGVuZFJhbms/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgb3JkZXIgaW4gd2hpY2ggdG8gcmV0dXJuIHRoZSBlbGVtZW50cy5cbiAgICogSWYgdGhlIG9yZGVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlbGVtZW50cyBhcmUgcmV0dXJuZWQgaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgKiBJZiBkZXNjZW5kaW5nIG9yZGVyIGlzIHVzZWQsIHRoZSBzdGFydCBhbmQgZW5kIHJhbmtzIGFyZSBpbnRlcnByZXRlZCBhcyBpZlxuICAgKiB0aGUgbGlzdCB3ZXJlIHJldmVyc2VkLlxuICAgKi9cbiAgb3JkZXI/OiBTb3J0ZWRTZXRPcmRlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTb3J0ZWRTZXRGZXRjaEJ5U2NvcmVDYWxsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBzY29yZSBvZiB0aGUgZWxlbWVudHMgdG8gcmV0dXJuLCBpbmNsdXNpdmUuXG4gICAqIElmIHRoZSBtaW5pbXVtIHNjb3JlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBsb3dlc3Qgc2NvcmUuXG4gICAqL1xuICBtaW5TY29yZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHNjb3JlIG9mIHRoZSBlbGVtZW50cyB0byByZXR1cm4sIGluY2x1c2l2ZS5cbiAgICogSWYgdGhlIG1heGltdW0gc2NvcmUgaXMgbm90IHNwZWNpZmllZCwgdGhlIHJhbmdlIGV4dGVuZHMgdG8gdGhlIGhpZ2hlc3Qgc2NvcmUuXG4gICAqL1xuICBtYXhTY29yZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBvcmRlciBpbiB3aGljaCB0byByZXR1cm4gdGhlIGVsZW1lbnRzLlxuICAgKiBJZiB0aGUgb3JkZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVsZW1lbnRzIGFyZSByZXR1cm5lZCBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gICAqL1xuICBvcmRlcj86IFNvcnRlZFNldE9yZGVyO1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byByZXR1cm4sIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSByZXN1bHQgc2V0LlxuICAgKiBJZiBzcGVjaWZpZWQgbXVzdCBiZSBub24tbmVnYXRpdmUgKD49IDApLlxuICAgKiBEZWZhdWx0cyB0byB6ZXJvLCBpZS4gdGhlIHN0YXJ0IGF0IGZpcnN0IGVsZW1lbnQgaW4gdGhlIHJlc3VsdCBzZXQuXG4gICAqL1xuICBvZmZzZXQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmV0dXJuLlxuICAgKiBJZiBzcGVjaWZpZWQgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZSAoPiAwKS5cbiAgICogRGVmYXVsdHMgdG8gYWxsIGVsZW1lbnRzIGluIHRoZSByZXN1bHQgc2V0LlxuICAgKi9cbiAgY291bnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydGVkU2V0TGVuZ3RoQnlTY29yZUNhbGxPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHNjb3JlIG9mIHRoZSBlbGVtZW50cyB0byBpbmNsdWRlIHdoZW4gY291bnRpbmcgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBzZXQsIGluY2x1c2l2ZS5cbiAgICogSWYgdGhlIG1pbmltdW0gc2NvcmUgaXMgbm90IHNwZWNpZmllZCwgdGhlIHJhbmdlIGV4dGVuZHMgdG8gdGhlIGxvd2VzdCBzY29yZS5cbiAgICovXG4gIG1pblNjb3JlPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIG1heGltdW0gc2NvcmUgb2YgdGhlIGVsZW1lbnRzIHRvIGluY2x1ZGUgd2hlbiBjb3VudGluZyBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHNldCwgaW5jbHVzaXZlLlxuICAgKiBJZiB0aGUgbWF4aW11bSBzY29yZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyB0byB0aGUgaGlnaGVzdCBzY29yZS5cbiAgICovXG4gIG1heFNjb3JlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RSZXRhaW5DYWxsT3B0aW9ucyBleHRlbmRzIENvbGxlY3Rpb25DYWxsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGFydGluZyBpbmNsdXNpdmUgaW5kZXggb2Ygb3BlcmF0aW9uLlxuICAgKi9cbiAgc3RhcnRJbmRleD86IG51bWJlcjtcblxuICAvKipcbiAgICogRW5kaW5nIGV4Y2x1c2l2ZSBpbmRleCBvZiBvcGVyYXRpb24uXG4gICAqL1xuICBlbmRJbmRleD86IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEZldGNoQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogU3RhcnRpbmcgaW5jbHVzaXZlIGluZGV4IG9mIG9wZXJhdGlvbi5cbiAgICovXG4gIHN0YXJ0SW5kZXg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEVuZGluZyBleGNsdXNpdmUgaW5kZXggb2Ygb3BlcmF0aW9uLlxuICAgKi9cbiAgZW5kSW5kZXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIExlYWRlcmJvYXJkT3JkZXIge1xuICBBc2NlbmRpbmcgPSAnQVNDJywgLy8gMCBpcyB0aGUgbG93ZXN0LXNjb3JpbmcgcmFua1xuICBEZXNjZW5kaW5nID0gJ0RFU0MnLCAvLyAwIGlzIHRoZSBoaWdoZXN0LXNjb3JpbmcgcmFuay5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBMZWFkZXJib2FyZEdldFJhbmtDYWxsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgb3JkZXIgaW4gd2hpY2ggdG8gcmV0dXJuIHRoZSBlbGVtZW50cy5cbiAgICogSWYgdGhlIG9yZGVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlbGVtZW50cyBhcmUgcmV0dXJuZWQgaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgKiBJZiBkZXNjZW5kaW5nIG9yZGVyIGlzIHVzZWQsIHRoZSBzdGFydCBhbmQgZW5kIHJhbmtzIGFyZSBpbnRlcnByZXRlZCBhcyBpZlxuICAgKiB0aGUgbGVhZGVyYm9hcmQgd2VyZSByZXZlcnNlZC5cbiAgICovXG4gIG9yZGVyPzogTGVhZGVyYm9hcmRPcmRlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMZWFkZXJib2FyZEZldGNoQnlSYW5rQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG9yZGVyIGluIHdoaWNoIHRvIHJldHVybiB0aGUgZWxlbWVudHMuXG4gICAqIElmIHRoZSBvcmRlciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWxlbWVudHMgYXJlIHJldHVybmVkIGluIGFzY2VuZGluZyBvcmRlci5cbiAgICogSWYgZGVzY2VuZGluZyBvcmRlciBpcyB1c2VkLCB0aGUgc3RhcnQgYW5kIGVuZCByYW5rcyBhcmUgaW50ZXJwcmV0ZWQgYXMgaWZcbiAgICogdGhlIGxlYWRlcmJvYXJkIHdlcmUgcmV2ZXJzZWQuXG4gICAqL1xuICBvcmRlcj86IExlYWRlcmJvYXJkT3JkZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVhZGVyYm9hcmRGZXRjaEJ5U2NvcmVDYWxsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBzY29yZSBvZiB0aGUgZWxlbWVudHMgdG8gcmV0dXJuLCBpbmNsdXNpdmUuXG4gICAqIElmIHRoZSBtaW5pbXVtIHNjb3JlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBsb3dlc3Qgc2NvcmUuXG4gICAqL1xuICBtaW5TY29yZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHNjb3JlIG9mIHRoZSBlbGVtZW50cyB0byByZXR1cm4sIGV4Y2x1c2l2ZS5cbiAgICogSWYgdGhlIG1heGltdW0gc2NvcmUgaXMgbm90IHNwZWNpZmllZCwgdGhlIHJhbmdlIGV4dGVuZHMgdG8gdGhlIGhpZ2hlc3Qgc2NvcmUuXG4gICAqL1xuICBtYXhTY29yZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBvcmRlciBpbiB3aGljaCB0byByZXR1cm4gdGhlIGVsZW1lbnRzLlxuICAgKiBJZiB0aGUgb3JkZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVsZW1lbnRzIGFyZSByZXR1cm5lZCBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gICAqL1xuICBvcmRlcj86IExlYWRlcmJvYXJkT3JkZXI7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2Zmc2V0IG9mIHRoZSBmaXJzdCBlbGVtZW50IHRvIHJldHVybiwgcmVsYXRpdmUgdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHJlc3VsdCBzZXQuXG4gICAqIElmIHNwZWNpZmllZCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSAoPj0gMCkuXG4gICAqIERlZmF1bHRzIHRvIHplcm8sIGllLiB0aGUgc3RhcnQgYXQgZmlyc3QgZWxlbWVudCBpbiB0aGUgcmVzdWx0IHNldC5cbiAgICovXG4gIG9mZnNldD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0byByZXR1cm4uXG4gICAqIElmIHNwZWNpZmllZCBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlICg+IDApLlxuICAgKiBEZWZhdWx0cyB0byA4MTkyLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdGhhdCBjYW4gYmUgcmV0dXJuZWQgYXQgYSB0aW1lLlxuICAgKi9cbiAgY291bnQ/OiBudW1iZXI7XG59XG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtY2FsbC1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2NhY2hlLWNhbGwtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBK0M7QUF3Qy9DOzs7OztHQUtHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQy9CLE9BQStCOztJQUUvQixPQUFPLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLEdBQUcsbUNBQUksOEJBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN0RCxDQUFDO0FBSkQsOENBSUM7QUFnQkQsSUFBWSxjQUdYO0FBSEQsV0FBWSxjQUFjO0lBQ3hCLG1DQUFpQixDQUFBO0lBQ2pCLHFDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQUd6QjtBQTBGRCxJQUFZLGdCQUdYO0FBSEQsV0FBWSxnQkFBZ0I7SUFDMUIscUNBQWlCLENBQUE7SUFDakIsdUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLGdCQUFnQixHQUFoQix3QkFBZ0IsS0FBaEIsd0JBQWdCLFFBRzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb2xsZWN0aW9uVHRsfSBmcm9tICcuL2NvbGxlY3Rpb24tdHRsJztcblxuZXhwb3J0IGludGVyZmFjZSBTY2FsYXJDYWxsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdGltZSB0byBsaXZlIGluIHNlY29uZHMgb2YgdGhlIG9iamVjdCBiZWluZyBtb2RpZmllZC5cbiAgICovXG4gIHR0bD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wcmVzc2FibGVDYWxsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNvbXByZXNzIHRoZSBkYXRhLlxuICAgKi9cbiAgY29tcHJlc3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlY29tcHJlc3NhYmxlQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBkZWNvbXByZXNzIHRoZSBkYXRhLlxuICAgKi9cbiAgZGVjb21wcmVzcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0Q2FsbE9wdGlvbnNcbiAgZXh0ZW5kcyBTY2FsYXJDYWxsT3B0aW9ucyxcbiAgICBDb21wcmVzc2FibGVDYWxsT3B0aW9ucyB7fVxuXG5leHBvcnQgdHlwZSBHZXRDYWxsT3B0aW9ucyA9IERlY29tcHJlc3NhYmxlQ2FsbE9wdGlvbnM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0SWZBYnNlbnRDYWxsT3B0aW9uc1xuICBleHRlbmRzIFNjYWxhckNhbGxPcHRpb25zLFxuICAgIENvbXByZXNzYWJsZUNhbGxPcHRpb25zIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkNhbGxPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBsZW5ndGggb2YgdGhlIFRUTCBhbmQgd2hldGhlciBpdCBzaG91bGQgYmUgcmVmcmVzaGVkIHdoZW4gdGhlIGNvbGxlY3Rpb24gaXMgbW9kaWZpZWQuXG4gICAqL1xuICB0dGw/OiBDb2xsZWN0aW9uVHRsO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIFRUTCBmcm9tIHRoZSBvcHRpb25zIG9yIHJlZnJlc2ggd2l0aCB0aGUgY2FjaGUgVFRMLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHRvIGdldCB0aGUgVFRMIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgVFRMIGZyb20gdGhlIG9wdGlvbnMgb3IgYSBkZWZhdWx0IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHRsT3JGcm9tQ2FjaGVUdGwoXG4gIG9wdGlvbnM/OiBDb2xsZWN0aW9uQ2FsbE9wdGlvbnNcbik6IENvbGxlY3Rpb25UdGwge1xuICByZXR1cm4gb3B0aW9ucz8udHRsID8/IENvbGxlY3Rpb25UdGwuZnJvbUNhY2hlVHRsKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbnRUcnVuY2F0YWJsZUNhbGxPcHRpb25zIGV4dGVuZHMgQ29sbGVjdGlvbkNhbGxPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRoZSBjb2xsZWN0aW9uIGV4Y2VlZHMgdGhpcyBsZW5ndGgsIHJlbW92ZSBleGNlc3MgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGxpc3QuIE11c3QgYmUgcG9zaXRpdmUuXG4gICAqL1xuICB0cnVuY2F0ZUZyb250VG9TaXplPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tUcnVuY2F0YWJsZUNhbGxPcHRpb25zIGV4dGVuZHMgQ29sbGVjdGlvbkNhbGxPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRoZSBjb2xsZWN0aW9uIGV4Y2VlZHMgdGhpcyBsZW5ndGgsIHJlbW92ZSBleGNlc3MgZnJvbSB0aGUgZW5kIG9mIHRoZSBsaXN0LiBNdXN0IGJlIHBvc2l0aXZlLlxuICAgKi9cbiAgdHJ1bmNhdGVCYWNrVG9TaXplPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBTb3J0ZWRTZXRPcmRlciB7XG4gIEFzY2VuZGluZyA9ICdBU0MnLFxuICBEZXNjZW5kaW5nID0gJ0RFU0MnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRlZFNldEZldGNoQnlSYW5rQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHJhbmsgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdG8gcmV0dXJuLCBpbmNsdXNpdmUuXG4gICAqIElmIG5lZ2F0aXZlLCB0aGUgcmFuayBpcyByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuICAgKiBJZiB0aGUgcmFuayBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkLlxuICAgKi9cbiAgc3RhcnRSYW5rPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHJhbmsgb2YgdGhlIGxhc3QgZWxlbWVudCB0byByZXR1cm4sIGV4Y2x1c2l2ZS5cbiAgICogSWYgbmVnYXRpdmUsIHRoZSByYW5rIGlzIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAqIElmIHRoZSByYW5rIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAqL1xuICBlbmRSYW5rPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIG9yZGVyIGluIHdoaWNoIHRvIHJldHVybiB0aGUgZWxlbWVudHMuXG4gICAqIElmIHRoZSBvcmRlciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWxlbWVudHMgYXJlIHJldHVybmVkIGluIGFzY2VuZGluZyBvcmRlci5cbiAgICogSWYgZGVzY2VuZGluZyBvcmRlciBpcyB1c2VkLCB0aGUgc3RhcnQgYW5kIGVuZCByYW5rcyBhcmUgaW50ZXJwcmV0ZWQgYXMgaWZcbiAgICogdGhlIGxpc3Qgd2VyZSByZXZlcnNlZC5cbiAgICovXG4gIG9yZGVyPzogU29ydGVkU2V0T3JkZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydGVkU2V0RmV0Y2hCeVNjb3JlQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gc2NvcmUgb2YgdGhlIGVsZW1lbnRzIHRvIHJldHVybiwgaW5jbHVzaXZlLlxuICAgKiBJZiB0aGUgbWluaW11bSBzY29yZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyB0byB0aGUgbG93ZXN0IHNjb3JlLlxuICAgKi9cbiAgbWluU2NvcmU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBzY29yZSBvZiB0aGUgZWxlbWVudHMgdG8gcmV0dXJuLCBpbmNsdXNpdmUuXG4gICAqIElmIHRoZSBtYXhpbXVtIHNjb3JlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBoaWdoZXN0IHNjb3JlLlxuICAgKi9cbiAgbWF4U2NvcmU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgb3JkZXIgaW4gd2hpY2ggdG8gcmV0dXJuIHRoZSBlbGVtZW50cy5cbiAgICogSWYgdGhlIG9yZGVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlbGVtZW50cyBhcmUgcmV0dXJuZWQgaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgKi9cbiAgb3JkZXI/OiBTb3J0ZWRTZXRPcmRlcjtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZmZzZXQgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdG8gcmV0dXJuLCByZWxhdGl2ZSB0byB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgcmVzdWx0IHNldC5cbiAgICogSWYgc3BlY2lmaWVkIG11c3QgYmUgbm9uLW5lZ2F0aXZlICg+PSAwKS5cbiAgICogRGVmYXVsdHMgdG8gemVybywgaWUuIHRoZSBzdGFydCBhdCBmaXJzdCBlbGVtZW50IGluIHRoZSByZXN1bHQgc2V0LlxuICAgKi9cbiAgb2Zmc2V0PzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJldHVybi5cbiAgICogSWYgc3BlY2lmaWVkIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUgKD4gMCkuXG4gICAqIERlZmF1bHRzIHRvIGFsbCBlbGVtZW50cyBpbiB0aGUgcmVzdWx0IHNldC5cbiAgICovXG4gIGNvdW50PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRlZFNldExlbmd0aEJ5U2NvcmVDYWxsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBzY29yZSBvZiB0aGUgZWxlbWVudHMgdG8gaW5jbHVkZSB3aGVuIGNvdW50aW5nIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2V0LCBpbmNsdXNpdmUuXG4gICAqIElmIHRoZSBtaW5pbXVtIHNjb3JlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBsb3dlc3Qgc2NvcmUuXG4gICAqL1xuICBtaW5TY29yZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHNjb3JlIG9mIHRoZSBlbGVtZW50cyB0byBpbmNsdWRlIHdoZW4gY291bnRpbmcgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBzZXQsIGluY2x1c2l2ZS5cbiAgICogSWYgdGhlIG1heGltdW0gc2NvcmUgaXMgbm90IHNwZWNpZmllZCwgdGhlIHJhbmdlIGV4dGVuZHMgdG8gdGhlIGhpZ2hlc3Qgc2NvcmUuXG4gICAqL1xuICBtYXhTY29yZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0UmV0YWluQ2FsbE9wdGlvbnMgZXh0ZW5kcyBDb2xsZWN0aW9uQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogU3RhcnRpbmcgaW5jbHVzaXZlIGluZGV4IG9mIG9wZXJhdGlvbi5cbiAgICovXG4gIHN0YXJ0SW5kZXg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEVuZGluZyBleGNsdXNpdmUgaW5kZXggb2Ygb3BlcmF0aW9uLlxuICAgKi9cbiAgZW5kSW5kZXg/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIExpc3RGZXRjaENhbGxPcHRpb25zIHtcbiAgLyoqXG4gICAqIFN0YXJ0aW5nIGluY2x1c2l2ZSBpbmRleCBvZiBvcGVyYXRpb24uXG4gICAqL1xuICBzdGFydEluZGV4PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmRpbmcgZXhjbHVzaXZlIGluZGV4IG9mIG9wZXJhdGlvbi5cbiAgICovXG4gIGVuZEluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBMZWFkZXJib2FyZE9yZGVyIHtcbiAgQXNjZW5kaW5nID0gJ0FTQycsIC8vIDAgaXMgdGhlIGxvd2VzdC1zY29yaW5nIHJhbmtcbiAgRGVzY2VuZGluZyA9ICdERVNDJywgLy8gMCBpcyB0aGUgaGlnaGVzdC1zY29yaW5nIHJhbmsuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVhZGVyYm9hcmRHZXRSYW5rQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG9yZGVyIGluIHdoaWNoIHRvIHJldHVybiB0aGUgZWxlbWVudHMuXG4gICAqIElmIHRoZSBvcmRlciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWxlbWVudHMgYXJlIHJldHVybmVkIGluIGFzY2VuZGluZyBvcmRlci5cbiAgICogSWYgZGVzY2VuZGluZyBvcmRlciBpcyB1c2VkLCB0aGUgc3RhcnQgYW5kIGVuZCByYW5rcyBhcmUgaW50ZXJwcmV0ZWQgYXMgaWZcbiAgICogdGhlIGxlYWRlcmJvYXJkIHdlcmUgcmV2ZXJzZWQuXG4gICAqL1xuICBvcmRlcj86IExlYWRlcmJvYXJkT3JkZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVhZGVyYm9hcmRGZXRjaEJ5UmFua0NhbGxPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBvcmRlciBpbiB3aGljaCB0byByZXR1cm4gdGhlIGVsZW1lbnRzLlxuICAgKiBJZiB0aGUgb3JkZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVsZW1lbnRzIGFyZSByZXR1cm5lZCBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gICAqIElmIGRlc2NlbmRpbmcgb3JkZXIgaXMgdXNlZCwgdGhlIHN0YXJ0IGFuZCBlbmQgcmFua3MgYXJlIGludGVycHJldGVkIGFzIGlmXG4gICAqIHRoZSBsZWFkZXJib2FyZCB3ZXJlIHJldmVyc2VkLlxuICAgKi9cbiAgb3JkZXI/OiBMZWFkZXJib2FyZE9yZGVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlYWRlcmJvYXJkRmV0Y2hCeVNjb3JlQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gc2NvcmUgb2YgdGhlIGVsZW1lbnRzIHRvIHJldHVybiwgaW5jbHVzaXZlLlxuICAgKiBJZiB0aGUgbWluaW11bSBzY29yZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyB0byB0aGUgbG93ZXN0IHNjb3JlLlxuICAgKi9cbiAgbWluU2NvcmU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBzY29yZSBvZiB0aGUgZWxlbWVudHMgdG8gcmV0dXJuLCBleGNsdXNpdmUuXG4gICAqIElmIHRoZSBtYXhpbXVtIHNjb3JlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBoaWdoZXN0IHNjb3JlLlxuICAgKi9cbiAgbWF4U2NvcmU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgb3JkZXIgaW4gd2hpY2ggdG8gcmV0dXJuIHRoZSBlbGVtZW50cy5cbiAgICogSWYgdGhlIG9yZGVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlbGVtZW50cyBhcmUgcmV0dXJuZWQgaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgKi9cbiAgb3JkZXI/OiBMZWFkZXJib2FyZE9yZGVyO1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byByZXR1cm4sIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSByZXN1bHQgc2V0LlxuICAgKiBJZiBzcGVjaWZpZWQgbXVzdCBiZSBub24tbmVnYXRpdmUgKD49IDApLlxuICAgKiBEZWZhdWx0cyB0byB6ZXJvLCBpZS4gdGhlIHN0YXJ0IGF0IGZpcnN0IGVsZW1lbnQgaW4gdGhlIHJlc3VsdCBzZXQuXG4gICAqL1xuICBvZmZzZXQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmV0dXJuLlxuICAgKiBJZiBzcGVjaWZpZWQgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZSAoPiAwKS5cbiAgICogRGVmYXVsdHMgdG8gODE5MiwgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgY2FuIGJlIHJldHVybmVkIGF0IGEgdGltZS5cbiAgICovXG4gIGNvdW50PzogbnVtYmVyO1xufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gomomento/sdk-core",
3
- "version": "1.77.1",
3
+ "version": "1.78.0",
4
4
  "description": "Common code for Momento JS SDKs",
5
5
  "main": "dist/src/index.js",
6
6
  "files": [