@arena-im/react-sdk-auth 1.11.0-dev.2 → 1.13.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -5,6 +5,7 @@ interface AuthDialogContextType {
|
|
|
5
5
|
isOpen: boolean;
|
|
6
6
|
appName: string | undefined;
|
|
7
7
|
appDescription: string | undefined;
|
|
8
|
+
language: string | undefined;
|
|
8
9
|
trackOptions: TrackOptions | undefined;
|
|
9
10
|
onAuthCompleted: ((user: UserProps) => void) | undefined;
|
|
10
11
|
openDialog: (options: OpenDialogOptions) => void;
|
|
@@ -14,6 +15,7 @@ interface AuthDialogContextType {
|
|
|
14
15
|
type OpenDialogOptions = {
|
|
15
16
|
trackOptions: TrackOptions;
|
|
16
17
|
appName?: string;
|
|
18
|
+
language?: string;
|
|
17
19
|
appDescription?: string;
|
|
18
20
|
onAuthCompleted?: () => (user: UserProps) => void;
|
|
19
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-dialog-provider.d.ts","sourceRoot":"","sources":["../../src/context/auth-dialog-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuC,SAAS,EAAE,MAAM,OAAO,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,UAAU,qBAAqB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,YAAY,GAAG,SAAS,CAAC;IACvC,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACzD,UAAU,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAMD,KAAK,iBAAiB,GAAG;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,cAAc;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"auth-dialog-provider.d.ts","sourceRoot":"","sources":["../../src/context/auth-dialog-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuC,SAAS,EAAE,MAAM,OAAO,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,UAAU,qBAAqB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,YAAY,EAAE,YAAY,GAAG,SAAS,CAAC;IACvC,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACzD,UAAU,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAMD,KAAK,iBAAiB,GAAG;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,cAAc;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,4CAkDvE,CAAC;AAEF,eAAO,MAAM,aAAa,6BAMzB,CAAC"}
|
package/dialog/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dialog/index.tsx"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dialog/index.tsx"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,UAAU,mDAkFjC"}
|
package/index.d.ts
CHANGED
|
@@ -75,6 +75,7 @@ interface AuthDialogContextType {
|
|
|
75
75
|
isOpen: boolean;
|
|
76
76
|
appName: string | undefined;
|
|
77
77
|
appDescription: string | undefined;
|
|
78
|
+
language: string | undefined;
|
|
78
79
|
trackOptions: TrackOptions | undefined;
|
|
79
80
|
onAuthCompleted: ((user: UserProps) => void) | undefined;
|
|
80
81
|
openDialog: (options: OpenDialogOptions) => void;
|
|
@@ -84,6 +85,7 @@ interface AuthDialogContextType {
|
|
|
84
85
|
type OpenDialogOptions = {
|
|
85
86
|
trackOptions: TrackOptions;
|
|
86
87
|
appName?: string;
|
|
88
|
+
language?: string;
|
|
87
89
|
appDescription?: string;
|
|
88
90
|
onAuthCompleted?: () => (user: UserProps) => void;
|
|
89
91
|
};
|
|
@@ -246,4 +248,4 @@ declare function useTokenEventListener(): {
|
|
|
246
248
|
|
|
247
249
|
export { AnalyticsEvent, AnalyticsWidgetType, AuthCookie, AuthProvider, TokenType, useAuthDialog, usePublicProfile, useRefreshToken, useRefreshedTokenLoaded, useToken, useTokenEventListener, useTokenStore, useTokenValue, useTokens, useUpdateProfile, useUser, useUserActions, useUserStore, useUserWithProfile };
|
|
248
250
|
export type { IdentityProps, RudderContext, TokenPair, TokensMap, TrackOptions, TrackProps };
|
|
249
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZXMiOlsiLi4vc3JjL3NlcnZpY2VzL2F1dGgvdHlwZXMudHMiLCIuLi9zcmMvdHlwZXMvYW5hbHl0aWNzLnRzIiwiLi4vc3JjL2NvbnRleHQvYXV0aC1kaWFsb2ctcHJvdmlkZXIudHN4IiwiLi4vc3JjL2NvbnRleHQvaW5kZXgudHN4IiwiLi4vc3JjL3R5cGVzL3Rva2VuLnRzIiwiLi4vc3JjL3N0b3Jlcy90b2tlbi1zdG9yZS50cyIsIi4uL3NyYy9zZXJ2aWNlcy9wcm9maWxlL3R5cGVzLnRzIiwiLi4vc3JjL2NvbmZpZy9pbmRleC50cyIsIi4uL3NyYy9zdG9yZXMvdXNlci1zdG9yZS50cyIsIi4uL3NyYy9ob29rcy91c2UtdG9rZW5zLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS11c2VyLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS10b2tlbi1ldmVudC1saXN0ZW5lci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEV4Y2hhbmdlVG9rZW5zUmVzcG9uc2Uge1xuICBhY2Nlc3NfdG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclByb3BzIHtcbiAgdWlkOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHBob3RvVVJMPzogc3RyaW5nO1xuICBoYW5kbGU/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFNzb1VzZXJQcm9wcyB7XG4gIHN1Yjogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBwaG90b1VSTD86IHN0cmluZztcbiAgaGFuZGxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNzb1YyRXhjaGFuZ2VSZXNwb25zZSB7XG4gIHRva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbkluUmVzcG9uc2Uge1xuICBkYXRhOiB7XG4gICAgdXNlcjogVXNlclByb3BzO1xuICAgIHRva2VuOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZWJhc2VVc2VyIHtcbiAgbmFtZTogc3RyaW5nO1xuICBwaWN0dXJlOiBzdHJpbmc7XG4gIG9yaWdpbmFsRW1haWw6IHN0cmluZztcbiAgc2FmZURpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHNhZmVQaG90b1VSTDogc3RyaW5nO1xuICBpbml0aWFsaXplZDogYm9vbGVhbjtcbiAgbGVnYWN5SUQ6IHN0cmluZztcbiAgaGFuZGxlOiBzdHJpbmc7XG4gIGlzczogc3RyaW5nO1xuICBhdWQ6IHN0cmluZztcbiAgYXV0aF90aW1lOiBudW1iZXI7XG4gIHVzZXJfaWQ6IHN0cmluZztcbiAgc3ViOiBzdHJpbmc7XG4gIGlhdDogbnVtYmVyO1xuICBleHA6IG51bWJlcjtcbiAgZW1haWw6IHN0cmluZztcbiAgZW1haWxfdmVyaWZpZWQ6IGJvb2xlYW47XG4gIGZpcmViYXNlOiB7XG4gICAgaWRlbnRpdGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuICAgIHNpZ25faW5fcHJvdmlkZXI6IHN0cmluZztcbiAgfTtcbn1cbiIsInR5cGUgTnVsbGFibGU8VD4gPSBUIHwgbnVsbDtcblxuZXhwb3J0IGVudW0gQW5hbHl0aWNzV2lkZ2V0VHlwZSB7XG4gIEF2YXRhclByb2ZpbGUgPSAnYXZhdGFyLXByb2ZpbGUnLFxuICBBdmF0YXJDaGF0ID0gJ2F2YXRhci1jaGF0JyxcbiAgQ29tbWVudHMgPSAnY29tbWVudHMnLFxuICBHbG9iYWxQcm9maWxlID0gJ2dsb2JhbC1wcm9maWxlJyxcbiAgR3JvdXBDaGF0ID0gJ2dyb3VwLWNoYXQnLFxuICBQb2xscyA9ICdwb2xscycsXG4gIFVuaXZlcnNhbFNuaXBwZXQgPSAndW5pdmVyc2FsLXNuaXBwZXQnLFxufVxuXG5leHBvcnQgdHlwZSBUcmFja09wdGlvbnMgPSB7XG4gIHdpZGdldElkOiBzdHJpbmcgfCBudWxsO1xuICB3aWRnZXRUeXBlOiBBbmFseXRpY3NXaWRnZXRUeXBlO1xuICBzaXRlSWQ6IHN0cmluZztcbiAgcnNXcml0ZUtleTogc3RyaW5nO1xuICByc0RhdGFQbGFuZVVybDogc3RyaW5nO1xuICB0cmlnZ2VyOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZW51bSBBbmFseXRpY3NFdmVudCB7XG4gIEF1dGhlbnRpY2F0aW9uQ29tcGxldGVkID0gJ0F1dGhlbnRpY2F0aW9uIENvbXBsZXRlZCcsXG4gIEF1dGhlbnRpY2F0aW9uU3RhcnRlZCA9ICdBdXRoZW50aWNhdGlvbiBTdGFydGVkJyxcbiAgQXV0aGVudGljYXRpb25WaWV3ZWQgPSAnQXV0aGVudGljYXRpb24gVmlld2VkJyxcbn1cblxuZXhwb3J0IHR5cGUgVHJhY2tQcm9wcyA9IE51bGxhYmxlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3BzIHtcbiAgYW5vbnltb3VzSWQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWRkZXJDb250ZXh0IHtcbiAgY2hhbm5lbDogJ3dlYic7XG4gIGFub255bW91c0lkPzogc3RyaW5nO1xuICBsb2NhbGU/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIG9zPzogeyBuYW1lOiBzdHJpbmc7IHZlcnNpb24/OiBzdHJpbmcgfTtcbiAgcGFnZT86IHtcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIHJlZmVycmVyPzogc3RyaW5nO1xuICAgIHJlZmVycmluZ19kb21haW4/OiBzdHJpbmc7XG4gICAgc2VhcmNoPzogc3RyaW5nO1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIHVybD86IHN0cmluZztcbiAgICBpbml0aWFsX3JlZmVycmVyPzogc3RyaW5nO1xuICAgIGluaXRpYWxfcmVmZXJyaW5nX2RvbWFpbj86IHN0cmluZztcbiAgfTtcbiAgc2NyZWVuPzoge1xuICAgIGRlbnNpdHk/OiBudW1iZXI7XG4gICAgaGVpZ2h0PzogbnVtYmVyO1xuICAgIHdpZHRoPzogbnVtYmVyO1xuICAgIGlubmVySGVpZ2h0PzogbnVtYmVyO1xuICAgIGlubmVyV2lkdGg/OiBudW1iZXI7XG4gIH07XG4gIGNhbXBhaWduPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBVc2VyUHJvcHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoL3R5cGVzJztcbmltcG9ydCB7IFRyYWNrT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL2FuYWx5dGljcyc7XG5cbmludGVyZmFjZSBBdXRoRGlhbG9nQ29udGV4dFR5cGUge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGFwcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYXBwRGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdHJhY2tPcHRpb25zOiBUcmFja09wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIG9uQXV0aENvbXBsZXRlZDogKCh1c2VyOiBVc2VyUHJvcHMpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBvcGVuRGlhbG9nOiAob3B0aW9uczogT3BlbkRpYWxvZ09wdGlvbnMpID0+IHZvaWQ7XG4gIGNsb3NlRGlhbG9nOiAoKSA9PiB2b2lkO1xuICBvbk9wZW5DaGFuZ2U6IChvcGVuOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5jb25zdCBBdXRoRGlhbG9nQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8QXV0aERpYWxvZ0NvbnRleHRUeXBlIHwgdW5kZWZpbmVkPihcbiAgdW5kZWZpbmVkXG4pO1xuXG50eXBlIE9wZW5EaWFsb2dPcHRpb25zID0ge1xuICB0cmFja09wdGlvbnM6IFRyYWNrT3B0aW9ucztcbiAgYXBwTmFtZT86IHN0cmluZztcbiAgYXBwRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIG9uQXV0aENvbXBsZXRlZD86ICgpID0+ICh1c2VyOiBVc2VyUHJvcHMpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgQXV0aERpYWxvZ1Byb3ZpZGVyID0gKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogUmVhY3ROb2RlIH0pID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2FwcE5hbWUsIHNldEFwcE5hbWVdID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjb25zdCBbYXBwRGVzY3JpcHRpb24sIHNldEFwcERlc2NyaXB0aW9uXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIGNvbnN0IFtvbkF1dGhDb21wbGV0ZWQsIHNldE9uQXV0aENvbXBsZXRlZF0gPSB1c2VTdGF0ZTxcbiAgICAoKHVzZXI6IFVzZXJQcm9wcykgPT4gdm9pZCkgfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICBjb25zdCBbdHJhY2tPcHRpb25zLCBzZXRUcmFja09wdGlvbnNdID0gdXNlU3RhdGU8VHJhY2tPcHRpb25zIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgY29uc3Qgb3BlbkRpYWxvZyA9ICh7XG4gICAgdHJhY2tPcHRpb25zLFxuICAgIGFwcE5hbWUsXG4gICAgYXBwRGVzY3JpcHRpb24sXG4gICAgb25BdXRoQ29tcGxldGVkLFxuICB9OiBPcGVuRGlhbG9nT3B0aW9ucykgPT4ge1xuICAgIHNldElzT3Blbih0cnVlKTtcbiAgICBzZXRUcmFja09wdGlvbnModHJhY2tPcHRpb25zKTtcbiAgICBzZXRBcHBOYW1lKGFwcE5hbWUpO1xuICAgIHNldEFwcERlc2NyaXB0aW9uKGFwcERlc2NyaXB0aW9uKTtcbiAgICBzZXRPbkF1dGhDb21wbGV0ZWQob25BdXRoQ29tcGxldGVkKTtcbiAgfTtcblxuICBjb25zdCBjbG9zZURpYWxvZyA9ICgpID0+IHNldElzT3BlbihmYWxzZSk7XG4gIGNvbnN0IG9uT3BlbkNoYW5nZSA9IChvcGVuOiBib29sZWFuKSA9PiBzZXRJc09wZW4ob3Blbik7XG5cbiAgcmV0dXJuIChcbiAgICA8QXV0aERpYWxvZ0NvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIGlzT3BlbixcbiAgICAgICAgYXBwTmFtZSxcbiAgICAgICAgYXBwRGVzY3JpcHRpb24sXG4gICAgICAgIHRyYWNrT3B0aW9ucyxcbiAgICAgICAgb25BdXRoQ29tcGxldGVkLFxuICAgICAgICBvcGVuRGlhbG9nLFxuICAgICAgICBjbG9zZURpYWxvZyxcbiAgICAgICAgb25PcGVuQ2hhbmdlLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9BdXRoRGlhbG9nQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VBdXRoRGlhbG9nID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChBdXRoRGlhbG9nQ29udGV4dCk7XG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlQXV0aERpYWxvZyBtdXN0IGJlIHVzZWQgd2l0aGluIGFuIEF1dGhEaWFsb2dQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiIsImltcG9ydCB7IEF1dGhEaWFsb2dQcm92aWRlciB9IGZyb20gJy4vYXV0aC1kaWFsb2ctcHJvdmlkZXInO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgVXNlclByb3ZpZGVyIH0gZnJvbSAnLi91c2VyLXByb3ZpZGVyJztcbmltcG9ydCB7IENvbmZpZ1Byb3ZpZGVyIH0gZnJvbSAnLi9jb25maWctcHJvdmlkZXInO1xuaW1wb3J0IEF1dGhEaWFsb2cgZnJvbSAnLi4vZGlhbG9nJztcbmltcG9ydCB7IEFub255bW91c1Rva2VuUHJvdmlkZXIgfSBmcm9tICcuL2Fub255bW91cy10b2tlbi1wcm92aWRlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBBdXRoUHJvdmlkZXIoe1xuICBjaGlsZHJlbixcbiAgcXVlcnlDbGllbnQsXG4gIGVudmlyb25tZW50LFxufToge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBxdWVyeUNsaWVudD86IFF1ZXJ5Q2xpZW50O1xuICBlbnZpcm9ubWVudD86ICdwcm9kdWN0aW9uJyB8ICdkZXZlbG9wbWVudCc7XG59KSB7XG4gIHF1ZXJ5Q2xpZW50ID0gcXVlcnlDbGllbnQgfHwgbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIChcbiAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgIDxDb25maWdQcm92aWRlciBlbnZpcm9ubWVudD17ZW52aXJvbm1lbnR9PlxuICAgICAgICA8VXNlclByb3ZpZGVyPlxuICAgICAgICAgIDxBdXRoRGlhbG9nUHJvdmlkZXI+XG4gICAgICAgICAgICA8QW5vbnltb3VzVG9rZW5Qcm92aWRlcj5cbiAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICA8QXV0aERpYWxvZyAvPlxuICAgICAgICAgICAgPC9Bbm9ueW1vdXNUb2tlblByb3ZpZGVyPlxuICAgICAgICAgIDwvQXV0aERpYWxvZ1Byb3ZpZGVyPlxuICAgICAgICA8L1VzZXJQcm92aWRlcj5cbiAgICAgIDwvQ29uZmlnUHJvdmlkZXI+XG4gICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyB1c2VBdXRoRGlhbG9nIH0gZnJvbSAnLi9hdXRoLWRpYWxvZy1wcm92aWRlcic7XG4iLCJleHBvcnQgZW51bSBUb2tlblR5cGUge1xuICBBTk9OWU1PVVMgPSAnYW5vbnltb3VzJyxcbiAgR1VFU1QgPSAnZ3Vlc3QnLFxuICBQVUJMSUMgPSAncHVibGljJyxcbiAgQ1VTVE9NID0gJ2N1c3RvbScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5QYWlyIHtcbiAgaWRUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgVG9rZW5zTWFwID0gUmVjb3JkPFRva2VuVHlwZSwgVG9rZW5QYWlyPjtcblxuZXhwb3J0IGVudW0gQXV0aENvb2tpZSB7XG4gIFBVQkxJQ19JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLXB1YmxpYy1pZC10b2tlbicsXG4gIFBVQkxJQ19SRUZSRVNIX1RPS0VOID0gJ2FyZW5hLWF1dGgtcHVibGljLXJlZnJlc2gtdG9rZW4nLFxuICBBTk9OWU1PVVNfSURfVE9LRU4gPSAnYXJlbmEtYXV0aC1hbm9ueW1vdXMtaWQtdG9rZW4nLFxuICBHVUVTVF9JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLWd1ZXN0LWlkLXRva2VuJyxcbiAgQ1VTVE9NX0lEX1RPS0VOID0gJ2FyZW5hLWF1dGgtY3VzdG9tLWlkLXRva2VuJyxcbiAgQ1VTVE9NX1VTRVIgPSAnYXJlbmEtYXV0aC1jdXN0b20tdXNlcicsXG59XG4iLCJpbXBvcnQgeyBjcmVhdGUgfSBmcm9tICd6dXN0YW5kJztcbmltcG9ydCB7IHN1YnNjcmliZVdpdGhTZWxlY3RvciB9IGZyb20gJ3p1c3RhbmQvbWlkZGxld2FyZSc7XG5pbXBvcnQgQ29va2llcyBmcm9tICdqcy1jb29raWUnO1xuaW1wb3J0IHsgQXV0aENvb2tpZSwgVG9rZW5zTWFwLCBUb2tlblR5cGUgfSBmcm9tICcuLi90eXBlcy90b2tlbic7XG5pbXBvcnQgeyBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZG9tLWV2ZW50cyc7XG5cbmludGVyZmFjZSBUb2tlblN0b3JlIHtcbiAgdG9rZW5zOiBUb2tlbnNNYXA7XG4gIGdldFRva2VuOiAodHlwZTogVG9rZW5UeXBlKSA9PiBzdHJpbmcgfCBudWxsO1xuICBnZXRNb3N0UHJpdmlsZWdlZFRva2VuOiAoXG4gICAgb3B0aW9ucz86IEFycmF5PFRva2VuVHlwZT5cbiAgKSA9PiB7IHR5cGU6IFRva2VuVHlwZTsgaWRUb2tlbjogc3RyaW5nIH0gfCBudWxsO1xuICBnZXRSZWZyZXNoVG9rZW46ICh0eXBlOiBUb2tlblR5cGUpID0+IHN0cmluZyB8IG51bGw7XG4gIHVwZGF0ZVB1YmxpY1Rva2VuczogKFxuICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyxcbiAgICBzb3VyY2U/OiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xuICB1cGRhdGVBbm9ueW1vdXNUb2tlbjogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVHdWVzdFRva2VuczogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVDdXN0b21Ub2tlbjogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhclRva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4gdm9pZDtcbiAgY2xlYXJQdWJsaWNUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsZWFyQW5vbnltb3VzVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhckd1ZXN0VG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhckN1c3RvbVRva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50VXBkYXRlUHVibGljVG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nLCByZWZyZXNoVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50VXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNpbGVudFVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuICBzaWxlbnRVcGRhdGVDdXN0b21Ub2tlbjogKGlkVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50Q2xlYXJQdWJsaWNUb2tlbnM6ICgpID0+IHZvaWQ7XG4gIHNpbGVudENsZWFyQW5vbnltb3VzVG9rZW5zOiAoKSA9PiB2b2lkO1xuICBzaWxlbnRDbGVhckd1ZXN0VG9rZW5zOiAoKSA9PiB2b2lkO1xuICBzaWxlbnRDbGVhckN1c3RvbVRva2VuczogKCkgPT4gdm9pZDtcbn1cblxuY29uc3QgZGVmYXVsdFRva2VuczogVG9rZW5zTWFwID0ge1xuICBwdWJsaWM6IHtcbiAgICBpZFRva2VuOiBDb29raWVzLmdldChBdXRoQ29va2llLlBVQkxJQ19JRF9UT0tFTikgfHwgbnVsbCxcbiAgICByZWZyZXNoVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX1JFRlJFU0hfVE9LRU4pIHx8IG51bGwsXG4gIH0sXG4gIGFub255bW91czoge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOKSB8fCBudWxsLFxuICB9LFxuICBndWVzdDoge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuR1VFU1RfSURfVE9LRU4pIHx8IG51bGwsXG4gIH0sXG4gIGN1c3RvbToge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKSB8fCBudWxsLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHVzZVRva2VuU3RvcmUgPSBjcmVhdGU8VG9rZW5TdG9yZT4oKShcbiAgc3Vic2NyaWJlV2l0aFNlbGVjdG9yKChzZXQsIGdldCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZVB1YmxpY1Rva2Vuc0hlbHBlciA9IChcbiAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaWRUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLnB1YmxpYy5pZFRva2VuICYmXG4gICAgICAgIHJlZnJlc2hUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLnB1YmxpYy5yZWZyZXNoVG9rZW5cbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgcHVibGljOiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgICAgcmVmcmVzaFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuUFVCTElDX0lEX1RPS0VOLCBpZFRva2VuLCB7XG4gICAgICAgIGV4cGlyZXM6IDEgLyAyNCxcbiAgICAgIH0pO1xuXG4gICAgICBDb29raWVzLnNldChBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOLCByZWZyZXNoVG9rZW4sIHtcbiAgICAgICAgZXhwaXJlczogMzAsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGRpc3BhdGNoRXZlbnQpIHtcbiAgICAgICAgZGlzcGF0Y2hUb2tlblVwZGF0ZWRFdmVudChUb2tlblR5cGUuUFVCTElDLCB7XG4gICAgICAgICAgaWRUb2tlbixcbiAgICAgICAgICByZWZyZXNoVG9rZW4sXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlQW5vbnltb3VzVG9rZW5IZWxwZXIgPSAoXG4gICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlkVG9rZW4gPT09IGdldCgpLnRva2Vucy5hbm9ueW1vdXMuaWRUb2tlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgYW5vbnltb3VzOiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOLCBpZFRva2VuLCB7XG4gICAgICAgIGV4cGlyZXM6IDEgLyAyNCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5BTk9OWU1PVVMsIHsgaWRUb2tlbiwgc291cmNlIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVHdWVzdFRva2Vuc0hlbHBlciA9IChcbiAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaWRUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLmd1ZXN0LmlkVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgLi4uc3RhdGUudG9rZW5zLFxuICAgICAgICAgIGd1ZXN0OiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuR1VFU1RfSURfVE9LRU4sIGlkVG9rZW4sIHtcbiAgICAgICAgZXhwaXJlczogMSAvIDI0LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkdVRVNULCB7IGlkVG9rZW4sIHNvdXJjZSB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlQ3VzdG9tVG9rZW5IZWxwZXIgPSAoXG4gICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlkVG9rZW4gPT09IGdldCgpLnRva2Vucy5jdXN0b20uaWRUb2tlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgY3VzdG9tOiB7IGlkVG9rZW4gfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcblxuICAgICAgQ29va2llcy5zZXQoQXV0aENvb2tpZS5DVVNUT01fSURfVE9LRU4sIGlkVG9rZW4pO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5DVVNUT00sIHsgaWRUb2tlbiwgc291cmNlIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjbGVhclB1YmxpY1Rva2Vuc0hlbHBlciA9IChcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBDb29raWVzLnJlbW92ZShBdXRoQ29va2llLlBVQkxJQ19JRF9UT0tFTik7XG4gICAgICBDb29raWVzLnJlbW92ZShBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOKTtcblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBwdWJsaWM6IHsgaWRUb2tlbjogbnVsbCwgcmVmcmVzaFRva2VuOiBudWxsIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLlBVQkxJQywgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyID0gKFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIENvb2tpZXMucmVtb3ZlKEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOKTtcblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBhbm9ueW1vdXM6IHsgaWRUb2tlbjogbnVsbCB9LFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5BTk9OWU1PVVMsIHtcbiAgICAgICAgICBpZFRva2VuOiBudWxsLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyR3Vlc3RUb2tlbnNIZWxwZXIgPSAoXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgQ29va2llcy5yZW1vdmUoQXV0aENvb2tpZS5HVUVTVF9JRF9UT0tFTik7XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgZ3Vlc3Q6IHsgaWRUb2tlbjogbnVsbCB9LFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5HVUVTVCwgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyQ3VzdG9tVG9rZW5zSGVscGVyID0gKFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIENvb2tpZXMucmVtb3ZlKEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEF1dGhDb29raWUuQ1VTVE9NX1VTRVIpO1xuXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgLi4uc3RhdGUudG9rZW5zLFxuICAgICAgICAgIGN1c3RvbTogeyBpZFRva2VuOiBudWxsIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkNVU1RPTSwgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGRlZmF1bHRUb2tlbnMsXG5cbiAgICAgIGdldFRva2VuOiAodHlwZTogVG9rZW5UeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXQoKS50b2tlbnNbdHlwZV0/LmlkVG9rZW4gfHwgbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIGdldE1vc3RQcml2aWxlZ2VkVG9rZW46IChcbiAgICAgICAgb3B0aW9ucyA9IFtUb2tlblR5cGUuUFVCTElDLCBUb2tlblR5cGUuR1VFU1QsIFRva2VuVHlwZS5BTk9OWU1PVVNdXG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5jdXN0b20uaWRUb2tlbiAmJiBvcHRpb25zLmluY2x1ZGVzKFRva2VuVHlwZS5DVVNUT00pKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5DVVNUT00sXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMuY3VzdG9tLmlkVG9rZW4hLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5wdWJsaWMuaWRUb2tlbiAmJiBvcHRpb25zLmluY2x1ZGVzKFRva2VuVHlwZS5QVUJMSUMpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5QVUJMSUMsXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMucHVibGljLmlkVG9rZW4hLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5ndWVzdC5pZFRva2VuICYmIG9wdGlvbnMuaW5jbHVkZXMoVG9rZW5UeXBlLkdVRVNUKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlblR5cGUuR1VFU1QsXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMuZ3Vlc3QuaWRUb2tlbiEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZ2V0KCkudG9rZW5zLmFub255bW91cy5pZFRva2VuICYmXG4gICAgICAgICAgb3B0aW9ucy5pbmNsdWRlcyhUb2tlblR5cGUuQU5PTllNT1VTKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5UeXBlLkFOT05ZTU9VUyxcbiAgICAgICAgICAgIGlkVG9rZW46IGdldCgpLnRva2Vucy5hbm9ueW1vdXMuaWRUb2tlbiEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIGdldFJlZnJlc2hUb2tlbjogKHR5cGU6IFRva2VuVHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0KCkudG9rZW5zW3R5cGVdPy5yZWZyZXNoVG9rZW4gfHwgbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIHVwZGF0ZVB1YmxpY1Rva2VuczogKFxuICAgICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICAgICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICAgICkgPT4ge1xuICAgICAgICB1cGRhdGVQdWJsaWNUb2tlbnNIZWxwZXIoaWRUb2tlbiwgcmVmcmVzaFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbkhlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlR3Vlc3RUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVHdWVzdFRva2Vuc0hlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlQ3VzdG9tVG9rZW46IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVDdXN0b21Ub2tlbkhlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgICAgY2xlYXJBbm9ueW1vdXNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgICAgY2xlYXJHdWVzdFRva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgICBjbGVhckN1c3RvbVRva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJQdWJsaWNUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyKHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICBjbGVhckd1ZXN0VG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyR3Vlc3RUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zSGVscGVyKHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICBzaWxlbnRVcGRhdGVQdWJsaWNUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZVB1YmxpY1Rva2Vuc0hlbHBlcihpZFRva2VuLCByZWZyZXNoVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUFub255bW91c1Rva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUFub255bW91c1Rva2VuSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUd1ZXN0VG9rZW5zSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUN1c3RvbVRva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUN1c3RvbVRva2VuSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyUHVibGljVG9rZW5zOiAoKSA9PiB7XG4gICAgICAgIGNsZWFyUHVibGljVG9rZW5zSGVscGVyKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyQW5vbnltb3VzVG9rZW5zOiAoKSA9PiB7XG4gICAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyR3Vlc3RUb2tlbnM6ICgpID0+IHtcbiAgICAgICAgY2xlYXJHdWVzdFRva2Vuc0hlbHBlcihmYWxzZSk7XG4gICAgICB9LFxuXG4gICAgICBzaWxlbnRDbGVhckN1c3RvbVRva2VuczogKCkgPT4ge1xuICAgICAgICBjbGVhckN1c3RvbVRva2Vuc0hlbHBlcihmYWxzZSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0pXG4pO1xuIiwiZXhwb3J0IGludGVyZmFjZSBQdWJsaWNQcm9maWxlIHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGhhbmRsZT86IHN0cmluZztcbiAgYmlvPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IHtcbiAgICBjb21tZW50Q291bnRCeVNpdGU/OiB7XG4gICAgICBbc2l0ZUlkOiBzdHJpbmddOiBudW1iZXI7XG4gICAgfTtcbiAgICBjb21tZW50UmVhY3Rpb25Db3VudEJ5U2l0ZT86IHtcbiAgICAgIFtzaXRlSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgICB9O1xuICAgIG92ZXJhbGxDb21tZW50Q291bnQ/OiBudW1iZXI7XG4gICAgb3ZlcmFsbENvbW1lbnRSZWFjdGlvbkNvdW50PzogbnVtYmVyO1xuICB9O1xuICBwaG90b1VSTD86IHN0cmluZztcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgcHJvZmlsZVNlcnZpY2VVcmw6IHN0cmluZztcbiAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nO1xuICBhdXRoSWZyYW1lVXJsOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuICBkZWJ1ZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnQgPSAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gKGVudmlyb25tZW50OiBFbnZpcm9ubWVudCk6IENvbmZpZyA9PiB7XG4gIGNvbnN0IGlzRGV2ID0gZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCc7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9maWxlU2VydmljZVVybDogaXNEZXZcbiAgICAgID8gcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLWRldi5hcmVuYS5pbSdcbiAgICAgIDogcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9QUkQgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5JREVOVElUWV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vdG9rZW4tc2VydmljZS1kZXYuYXJlbmEuaW0nXG4gICAgICA6IHByb2Nlc3MuZW52LklERU5USVRZX1NFUlZJQ0VfVVJMX1BSRCB8fFxuICAgICAgICAnaHR0cHM6Ly90b2tlbi1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgcmVmcmVzaFRva2VuQXBpS2V5OiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5GSVJFQkFTRV9QVUJMSUNfQVBJX0tFWV9ERVYgfHxcbiAgICAgICAgJ0FJemFTeUNKaFdGQ0szaWNzOWtKMmVTZ1FEN2tXSFVzT3NKeVBkaydcbiAgICAgIDogcHJvY2Vzcy5lbnYuRklSRUJBU0VfUFVCTElDX0FQSV9LRVlfUFJEIHx8XG4gICAgICAgICdBSXphU3lELTl0U3JRV243M1MwcW02QnFFSDUtMTJIcThMMGVUc1EnLFxuICAgIGF1dGhJZnJhbWVVcmw6IGlzRGV2XG4gICAgICA/IHByb2Nlc3MuZW52LkFVVEhfSUZSQU1FX1VSTF9ERVYgfHwgJ2h0dHBzOi8vYXV0aDIuZGV2LmFyZW5hLmltJ1xuICAgICAgOiBwcm9jZXNzLmVudi5BVVRIX0lGUkFNRV9VUkxfUFJEIHx8ICdodHRwczovL2F1dGgyLmFyZW5hLmltJyxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBkZWJ1ZzogZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCcsXG4gIH07XG59O1xuIiwiaW1wb3J0IHsgY3JlYXRlIH0gZnJvbSAnenVzdGFuZCc7XG5pbXBvcnQgeyBzdWJzY3JpYmVXaXRoU2VsZWN0b3IgfSBmcm9tICd6dXN0YW5kL21pZGRsZXdhcmUnO1xuaW1wb3J0IENvb2tpZXMgZnJvbSAnanMtY29va2llJztcbmltcG9ydCB7XG4gIFVzZXJQcm9wcyxcbiAgRmlyZWJhc2VVc2VyLFxuICBTc29Vc2VyUHJvcHMsXG4gIFNzb1YyRXhjaGFuZ2VSZXNwb25zZSxcbn0gZnJvbSAnLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5pbXBvcnQgeyBqd3REZWNvZGUgfSBmcm9tICdqd3QtZGVjb2RlJztcbmltcG9ydCB7IHR5cGUgUHVibGljUHJvZmlsZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2ZpbGUvdHlwZXMnO1xuaW1wb3J0IHsgdXNlVG9rZW5TdG9yZSB9IGZyb20gJy4vdG9rZW4tc3RvcmUnO1xuaW1wb3J0IHsgQXV0aENvb2tpZSB9IGZyb20gJy4uL3R5cGVzL3Rva2VuJztcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tICcuLi91dGlscy9yZXF1ZXN0JztcbmltcG9ydCB7IEVudmlyb25tZW50LCBnZXRDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuXG5pbnRlcmZhY2UgVXNlclN0b3JlIHtcbiAgdXNlcjogVXNlclByb3BzIHwgbnVsbDtcbiAgcHVibGljUHJvZmlsZTogUHVibGljUHJvZmlsZSB8IG51bGw7XG4gIHJlZnJlc2hlZFRva2VuTG9hZGVkOiBib29sZWFuO1xuICBzZXRVc2VyOiAodXNlcjogVXNlclByb3BzIHwgbnVsbCkgPT4gdm9pZDtcbiAgc2V0UHVibGljUHJvZmlsZTogKHB1YmxpY1Byb2ZpbGU6IFB1YmxpY1Byb2ZpbGUgfCBudWxsKSA9PiB2b2lkO1xuICBsb2dvdXQ6ICgpID0+IHZvaWQ7XG4gIHJlZnJlc2hQdWJsaWNUb2tlbnM6IChjb25maWc6IHtcbiAgICByZWZyZXNoVG9rZW5BcGlLZXk6IHN0cmluZztcbiAgfSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgc2V0VXNlckJ5VG9rZW5JZDogKGlkVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgbG9hZFN0b3JlZFVzZXI6IChjb25maWc/OiB7IHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nIH0pID0+IFByb21pc2U8dm9pZD47XG4gIHNzb1YyRXhjaGFuZ2U6IChcbiAgICBzc29Tb3VyY2VJRDogc3RyaW5nLFxuICAgIGp3dDogc3RyaW5nLFxuICAgIGVudj86IEVudmlyb25tZW50XG4gICkgPT4gUHJvbWlzZTxTc29WMkV4Y2hhbmdlUmVzcG9uc2U+O1xufVxuXG5leHBvcnQgY29uc3QgdXNlVXNlclN0b3JlID0gY3JlYXRlPFVzZXJTdG9yZT4oKShcbiAgc3Vic2NyaWJlV2l0aFNlbGVjdG9yKChzZXQsIGdldCkgPT4gKHtcbiAgICB1c2VyOiBudWxsLFxuICAgIHB1YmxpY1Byb2ZpbGU6IG51bGwsXG4gICAgcmVmcmVzaGVkVG9rZW5Mb2FkZWQ6IGZhbHNlLFxuXG4gICAgc2V0VXNlcjogKHVzZXI6IFVzZXJQcm9wcyB8IG51bGwpID0+IHtcbiAgICAgIHNldCh7IHVzZXIgfSk7XG4gICAgfSxcblxuICAgIHNldFB1YmxpY1Byb2ZpbGU6IChwdWJsaWNQcm9maWxlOiBQdWJsaWNQcm9maWxlIHwgbnVsbCkgPT4ge1xuICAgICAgc2V0KHsgcHVibGljUHJvZmlsZSB9KTtcbiAgICB9LFxuXG4gICAgc2V0VXNlckJ5VG9rZW5JZDogKGlkVG9rZW46IHN0cmluZykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdXNlciA9IGp3dERlY29kZTxGaXJlYmFzZVVzZXI+KGlkVG9rZW4pO1xuICAgICAgICBjb25zdCB1c2VyUHJvcHM6IFVzZXJQcm9wcyA9IHtcbiAgICAgICAgICB1aWQ6IHVzZXIudXNlcl9pZCxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogdXNlci5zYWZlRGlzcGxheU5hbWUsXG4gICAgICAgICAgZW1haWw6IHVzZXIuZW1haWwsXG4gICAgICAgICAgcGhvdG9VUkw6IHVzZXIuc2FmZVBob3RvVVJMLFxuICAgICAgICAgIGhhbmRsZTogdXNlci5oYW5kbGUsXG4gICAgICAgIH07XG4gICAgICAgIHNldCh7IHVzZXI6IHVzZXJQcm9wcyB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsb2dvdXQ6ICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRva2VuU3RvcmUgPSB1c2VUb2tlblN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIHRva2VuU3RvcmUuY2xlYXJQdWJsaWNUb2tlbnMoKTtcbiAgICAgICAgdG9rZW5TdG9yZS5jbGVhckN1c3RvbVRva2VucygpO1xuICAgICAgICBzZXQoeyB1c2VyOiBudWxsIH0pO1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnYXJlbmEtY29tbWVudHMtbG9nb3V0JykpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlZnJlc2hQdWJsaWNUb2tlbnM6IGFzeW5jIChjb25maWc6IHsgcmVmcmVzaFRva2VuQXBpS2V5OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfUkVGUkVTSF9UT0tFTik7XG5cbiAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlZnJlc2ggdG9rZW4gZm91bmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZWZpeCA9ICdodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZWFwaXMuY29tL3YxL3Rva2VuP2tleT0nO1xuICAgICAgICBjb25zdCBhcGlLZXkgPSBjb25maWcucmVmcmVzaFRva2VuQXBpS2V5O1xuICAgICAgICBjb25zdCB1cmwgPSBgJHtwcmVmaXh9JHthcGlLZXl9YDtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbixcbiAgICAgICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICAgICAgY29uc3QgeyBzZXRVc2VyQnlUb2tlbklkIH0gPSBnZXQoKTtcbiAgICAgICAgc2V0VXNlckJ5VG9rZW5JZChkYXRhLmlkX3Rva2VuKTtcblxuICAgICAgICBjb25zdCB0b2tlblN0b3JlID0gdXNlVG9rZW5TdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICB0b2tlblN0b3JlLnVwZGF0ZVB1YmxpY1Rva2VucyhkYXRhLmlkX3Rva2VuLCBkYXRhLnJlZnJlc2hfdG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIGNvbnN0IHsgbG9nb3V0IH0gPSBnZXQoKTtcbiAgICAgICAgbG9nb3V0KCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGxvYWRTdG9yZWRVc2VyOiBhc3luYyAoY29uZmlnPzogeyByZWZyZXNoVG9rZW5BcGlLZXk6IHN0cmluZyB9KSA9PiB7XG4gICAgICBjb25zdCBwdWJsaWNJZFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfSURfVE9LRU4pO1xuICAgICAgY29uc3QgcHVibGljUmVmcmVzaFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfUkVGUkVTSF9UT0tFTik7XG4gICAgICBjb25zdCBjdXN0b21JZFRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQXV0aENvb2tpZS5DVVNUT01fSURfVE9LRU4pO1xuICAgICAgY29uc3QgY3VzdG9tVXNlciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKEF1dGhDb29raWUuQ1VTVE9NX1VTRVIpO1xuXG4gICAgICBpZiAoISFjdXN0b21JZFRva2VuICYmICEhY3VzdG9tVXNlcikge1xuICAgICAgICBjb25zdCBwYXJzZWRVc2VyID0gSlNPTi5wYXJzZShjdXN0b21Vc2VyKTtcblxuICAgICAgICBzZXQoeyB1c2VyOiBwYXJzZWRVc2VyIH0pO1xuXG4gICAgICAgIGNvbnN0IHRva2VuU3RvcmUgPSB1c2VUb2tlblN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIHRva2VuU3RvcmUudXBkYXRlQ3VzdG9tVG9rZW4oY3VzdG9tSWRUb2tlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHVibGljSWRUb2tlbikge1xuICAgICAgICAgIGNvbnN0IHsgc2V0VXNlckJ5VG9rZW5JZCB9ID0gZ2V0KCk7XG4gICAgICAgICAgc2V0VXNlckJ5VG9rZW5JZChwdWJsaWNJZFRva2VuKTtcbiAgICAgICAgfSBlbHNlIGlmIChwdWJsaWNSZWZyZXNoVG9rZW4gJiYgY29uZmlnKSB7XG4gICAgICAgICAgY29uc3QgeyByZWZyZXNoUHVibGljVG9rZW5zIH0gPSBnZXQoKTtcbiAgICAgICAgICBhd2FpdCByZWZyZXNoUHVibGljVG9rZW5zKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0KHsgcmVmcmVzaGVkVG9rZW5Mb2FkZWQ6IHRydWUgfSk7XG4gICAgfSxcblxuICAgIHNzb1YyRXhjaGFuZ2U6IGFzeW5jIChcbiAgICAgIHNzb1NvdXJjZUlEOiBzdHJpbmcsXG4gICAgICBqd3Q6IHN0cmluZyxcbiAgICAgIGVudj86IEVudmlyb25tZW50XG4gICAgKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoZW52ID8/ICdwcm9kdWN0aW9uJyk7XG4gICAgICAgIGNvbnN0IHByb2ZpbGVVcmwgPSBjb25maWcucHJvZmlsZVNlcnZpY2VVcmw7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7cHJvZmlsZVVybH0vc3NvL3NvdXJjZXMvJHtzc29Tb3VyY2VJRH0vdXNlcmA7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBTc29WMkV4Y2hhbmdlUmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KCdQT1NUJywgdXJsLCB7XG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzaWduZWRVc2VyRGF0YTogand0IH0pLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkVXNlciA9IGp3dERlY29kZTxTc29Vc2VyUHJvcHM+KHJlc3BvbnNlLnRva2VuKTtcblxuICAgICAgICAgIGNvbnN0IHsgc2V0VXNlciwgc2V0UHVibGljUHJvZmlsZSB9ID0gZ2V0KCk7XG5cbiAgICAgICAgICBzZXRVc2VyKHtcbiAgICAgICAgICAgIHVpZDogZGVjb2RlZFVzZXI/LnN1YixcbiAgICAgICAgICAgIGVtYWlsOiBkZWNvZGVkVXNlcj8uZW1haWwsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogZGVjb2RlZFVzZXI/LmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgcGhvdG9VUkw6IGRlY29kZWRVc2VyPy5waG90b1VSTCxcbiAgICAgICAgICAgIGhhbmRsZTogZGVjb2RlZFVzZXI/LmhhbmRsZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHNldFB1YmxpY1Byb2ZpbGUoe1xuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGRlY29kZWRVc2VyPy5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHBob3RvVVJMOiBkZWNvZGVkVXNlcj8ucGhvdG9VUkwsXG4gICAgICAgICAgICBoYW5kbGU6IGRlY29kZWRVc2VyPy5oYW5kbGUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCB0b2tlblN0b3JlID0gdXNlVG9rZW5TdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICAgIHRva2VuU3RvcmUudXBkYXRlQ3VzdG9tVG9rZW4ocmVzcG9uc2UudG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignU1NPIFYyIEV4Y2hhbmdlIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gIH0pKVxuKTtcbiIsImltcG9ydCB7IHVzZVRva2VuU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvdG9rZW4tc3RvcmUnO1xuaW1wb3J0IHsgdXNlVG9rZW5FdmVudExpc3RlbmVyIH0gZnJvbSAnLi91c2UtdG9rZW4tZXZlbnQtbGlzdGVuZXInO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9rZW5zKCkge1xuICBjb25zdCBnZXRUb2tlbiA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUuZ2V0VG9rZW4pO1xuICBjb25zdCBnZXRNb3N0UHJpdmlsZWdlZFRva2VuID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5nZXRNb3N0UHJpdmlsZWdlZFRva2VuXG4gICk7XG4gIGNvbnN0IGdldFJlZnJlc2hUb2tlbiA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUuZ2V0UmVmcmVzaFRva2VuKTtcbiAgY29uc3QgdXBkYXRlUHVibGljVG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS51cGRhdGVQdWJsaWNUb2tlbnMpO1xuICBjb25zdCB1cGRhdGVBbm9ueW1vdXNUb2tlbiA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUudXBkYXRlQW5vbnltb3VzVG9rZW5cbiAgKTtcbiAgY29uc3QgdXBkYXRlR3Vlc3RUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnVwZGF0ZUd1ZXN0VG9rZW5zKTtcbiAgY29uc3QgdXBkYXRlQ3VzdG9tVG9rZW4gPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnVwZGF0ZUN1c3RvbVRva2VuKTtcbiAgY29uc3QgY2xlYXJUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmNsZWFyVG9rZW5zKTtcbiAgY29uc3QgY2xlYXJQdWJsaWNUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmNsZWFyUHVibGljVG9rZW5zKTtcbiAgY29uc3QgY2xlYXJDdXN0b21Ub2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmNsZWFyQ3VzdG9tVG9rZW5zKTtcblxuICBjb25zdCB7IGV2ZW50U291cmNlIH0gPSB1c2VUb2tlbkV2ZW50TGlzdGVuZXIoKTtcblxuICByZXR1cm4ge1xuICAgIGdldFRva2VuLFxuICAgIGdldE1vc3RQcml2aWxlZ2VkVG9rZW4sXG4gICAgZ2V0UmVmcmVzaFRva2VuLFxuICAgIHVwZGF0ZVB1YmxpY1Rva2VuczogKGlkVG9rZW46IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVQdWJsaWNUb2tlbnMoaWRUb2tlbiwgcmVmcmVzaFRva2VuLCBldmVudFNvdXJjZSksXG4gICAgdXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbihpZFRva2VuLCBldmVudFNvdXJjZSksXG4gICAgdXBkYXRlR3Vlc3RUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVHdWVzdFRva2VucyhpZFRva2VuLCBldmVudFNvdXJjZSksXG4gICAgdXBkYXRlQ3VzdG9tVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVDdXN0b21Ub2tlbihpZFRva2VuLCBldmVudFNvdXJjZSksXG4gICAgY2xlYXJUb2tlbnM6ICgpID0+IGNsZWFyVG9rZW5zKGV2ZW50U291cmNlKSxcbiAgICBjbGVhclB1YmxpY1Rva2VuczogKCkgPT4gY2xlYXJQdWJsaWNUb2tlbnMoZXZlbnRTb3VyY2UpLFxuICAgIGNsZWFyQ3VzdG9tVG9rZW5zOiAoKSA9PiBjbGVhckN1c3RvbVRva2VucyhldmVudFNvdXJjZSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlbih0eXBlOiAnYW5vbnltb3VzJyB8ICdndWVzdCcgfCAncHVibGljJyB8ICdjdXN0b20nKSB7XG4gIHJldHVybiB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnRva2Vuc1t0eXBlXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlblZhbHVlKFxuICB0eXBlOiAnYW5vbnltb3VzJyB8ICdndWVzdCcgfCAncHVibGljJyB8ICdjdXN0b20nXG4pIHtcbiAgcmV0dXJuIHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUudG9rZW5zW3R5cGVdPy5pZFRva2VuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZnJlc2hUb2tlbih0eXBlOiAnYW5vbnltb3VzJyB8ICdndWVzdCcgfCAncHVibGljJykge1xuICByZXR1cm4gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS50b2tlbnNbdHlwZV0/LnJlZnJlc2hUb2tlbik7XG59XG4iLCJpbXBvcnQgeyB1c2VQcm9maWxlU2VydmljZXMgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9maWxlL3VzZS1wcm9maWxlLXNlcnZpY2VzJztcbmltcG9ydCB7IHVzZVVzZXJTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy91c2VyLXN0b3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVzZXIoKSB7XG4gIHJldHVybiB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUudXNlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQdWJsaWNQcm9maWxlKCkge1xuICByZXR1cm4gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnB1YmxpY1Byb2ZpbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVmcmVzaGVkVG9rZW5Mb2FkZWQoKSB7XG4gIHJldHVybiB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUucmVmcmVzaGVkVG9rZW5Mb2FkZWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVXNlckFjdGlvbnMoKSB7XG4gIGNvbnN0IHNldFVzZXIgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0VXNlcik7XG4gIGNvbnN0IHNldFB1YmxpY1Byb2ZpbGUgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0UHVibGljUHJvZmlsZSk7XG4gIGNvbnN0IGxvZ291dCA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5sb2dvdXQpO1xuICBjb25zdCByZWZyZXNoUHVibGljVG9rZW5zID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnJlZnJlc2hQdWJsaWNUb2tlbnMpO1xuICBjb25zdCBzZXRVc2VyQnlUb2tlbklkID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnNldFVzZXJCeVRva2VuSWQpO1xuICBjb25zdCBsb2FkU3RvcmVkVXNlciA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5sb2FkU3RvcmVkVXNlcik7XG4gIGNvbnN0IHNzb1YyRXhjaGFuZ2UgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUuc3NvVjJFeGNoYW5nZSk7XG4gIFxuXG4gIHJldHVybiB7XG4gICAgc2V0VXNlcixcbiAgICBzZXRQdWJsaWNQcm9maWxlLFxuICAgIGxvZ291dCxcbiAgICByZWZyZXNoUHVibGljVG9rZW5zLFxuICAgIHNldFVzZXJCeVRva2VuSWQsXG4gICAgbG9hZFN0b3JlZFVzZXIsXG4gICAgc3NvVjJFeGNoYW5nZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZVByb2ZpbGUoKSB7XG4gIGNvbnN0IHsgdXBkYXRlUHVibGljUHJvZmlsZSB9ID0gdXNlUHJvZmlsZVNlcnZpY2VzKCk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlUHVibGljUHJvZmlsZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVzZXJXaXRoUHJvZmlsZSgpIHtcbiAgY29uc3QgdXNlciA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS51c2VyKTtcbiAgY29uc3QgcHVibGljUHJvZmlsZSA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5wdWJsaWNQcm9maWxlKTtcbiAgY29uc3QgcmVmcmVzaGVkVG9rZW5Mb2FkZWQgPSB1c2VVc2VyU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUucmVmcmVzaGVkVG9rZW5Mb2FkZWRcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHVzZXIsXG4gICAgcHVibGljUHJvZmlsZSxcbiAgICByZWZyZXNoZWRUb2tlbkxvYWRlZCxcbiAgfTtcbn1cblxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUb2tlblR5cGUgfSBmcm9tICcuLi90eXBlcy90b2tlbic7XG5pbXBvcnQgeyB1c2VUb2tlblN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3Rva2VuLXN0b3JlJztcbmltcG9ydCB7IFRPS0VOX1VQREFURURfRVZFTlQgfSBmcm9tICcuLi91dGlscy9kb20tZXZlbnRzJztcblxuaW50ZXJmYWNlIFRva2VuVXBkYXRlRXZlbnQge1xuICBkZXRhaWw6IHtcbiAgICBpZFRva2VuOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlZnJlc2hUb2tlbj86IHN0cmluZyB8IG51bGw7XG4gICAgdHlwZTogVG9rZW5UeXBlO1xuICAgIHNvdXJjZT86IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2VuRXZlbnRMaXN0ZW5lcigpIHtcbiAgY29uc3QgdXBkYXRlUHVibGljVG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRVcGRhdGVQdWJsaWNUb2tlbnNcbiAgKTtcbiAgY29uc3QgdXBkYXRlQW5vbnltb3VzVG9rZW4gPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudFVwZGF0ZUFub255bW91c1Rva2VuXG4gICk7XG4gIGNvbnN0IHVwZGF0ZUd1ZXN0VG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRVcGRhdGVHdWVzdFRva2Vuc1xuICApO1xuICBjb25zdCB1cGRhdGVDdXN0b21Ub2tlbiA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuc2lsZW50VXBkYXRlQ3VzdG9tVG9rZW5cbiAgKTtcbiAgY29uc3QgY2xlYXJUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmNsZWFyVG9rZW5zKTtcbiAgY29uc3QgY2xlYXJQdWJsaWNUb2tlbnMgPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudENsZWFyUHVibGljVG9rZW5zXG4gICk7XG4gIGNvbnN0IGNsZWFyQW5vbnltb3VzVG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRDbGVhckFub255bW91c1Rva2Vuc1xuICApO1xuICBjb25zdCBjbGVhckd1ZXN0VG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRDbGVhckd1ZXN0VG9rZW5zKTtcbiAgY29uc3QgY2xlYXJDdXN0b21Ub2tlbnMgPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudENsZWFyQ3VzdG9tVG9rZW5zXG4gICk7XG5cbiAgY29uc3QgZXZlbnRTb3VyY2VSZWYgPSB1c2VSZWY8c3RyaW5nPihcbiAgICBgd2lkZ2V0LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWBcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVRva2VuVXBkYXRlID0gKFxuICAgICAgZXZlbnQ6IEN1c3RvbUV2ZW50PFRva2VuVXBkYXRlRXZlbnRbJ2RldGFpbCddPlxuICAgICkgPT4ge1xuICAgICAgY29uc3QgeyBpZFRva2VuLCByZWZyZXNoVG9rZW4sIHR5cGUsIHNvdXJjZSB9ID0gZXZlbnQuZGV0YWlsO1xuXG4gICAgICBpZiAoc291cmNlID09PSBldmVudFNvdXJjZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLlBVQkxJQzpcbiAgICAgICAgICBpZiAoaWRUb2tlbikge1xuICAgICAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWZyZXNoIHRva2VuIGlzIHJlcXVpcmVkIGZvciBwdWJsaWMgdG9rZW5zJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVQdWJsaWNUb2tlbnMoaWRUb2tlbiwgcmVmcmVzaFRva2VuKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBUb2tlblR5cGUuQU5PTllNT1VTOlxuICAgICAgICAgIGlmIChpZFRva2VuKSB7XG4gICAgICAgICAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbihpZFRva2VuKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJBbm9ueW1vdXNUb2tlbnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBUb2tlblR5cGUuR1VFU1Q6XG4gICAgICAgICAgaWYgKGlkVG9rZW4pIHtcbiAgICAgICAgICAgIHVwZGF0ZUd1ZXN0VG9rZW5zKGlkVG9rZW4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGVhckd1ZXN0VG9rZW5zKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkNVU1RPTTpcbiAgICAgICAgICBpZiAoaWRUb2tlbikge1xuICAgICAgICAgICAgdXBkYXRlQ3VzdG9tVG9rZW4oaWRUb2tlbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgVE9LRU5fVVBEQVRFRF9FVkVOVCxcbiAgICAgIGhhbmRsZVRva2VuVXBkYXRlIGFzIEV2ZW50TGlzdGVuZXJcbiAgICApO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFRPS0VOX1VQREFURURfRVZFTlQsXG4gICAgICAgIGhhbmRsZVRva2VuVXBkYXRlIGFzIEV2ZW50TGlzdGVuZXJcbiAgICAgICk7XG4gICAgfTtcbiAgfSwgW1xuICAgIHVwZGF0ZVB1YmxpY1Rva2VucyxcbiAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbixcbiAgICB1cGRhdGVHdWVzdFRva2VucyxcbiAgICB1cGRhdGVDdXN0b21Ub2tlbixcbiAgICBjbGVhclRva2VucyxcbiAgICBjbGVhclB1YmxpY1Rva2VucyxcbiAgICBjbGVhckFub255bW91c1Rva2VucyxcbiAgICBjbGVhckd1ZXN0VG9rZW5zLFxuICAgIGNsZWFyQ3VzdG9tVG9rZW5zLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIGV2ZW50U291cmNlOiBldmVudFNvdXJjZVJlZi5jdXJyZW50LFxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFJTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFPO0FBQ1A7QUFDQTs7QUNwQkE7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlPOztBQ3JCQTtBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQ0xPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQTzs7QUNMUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQk87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FDdkJPO0FBQ1A7QUFDQTs7OyJ9
|
|
251
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZXMiOlsiLi4vc3JjL3NlcnZpY2VzL2F1dGgvdHlwZXMudHMiLCIuLi9zcmMvdHlwZXMvYW5hbHl0aWNzLnRzIiwiLi4vc3JjL2NvbnRleHQvYXV0aC1kaWFsb2ctcHJvdmlkZXIudHN4IiwiLi4vc3JjL2NvbnRleHQvaW5kZXgudHN4IiwiLi4vc3JjL3R5cGVzL3Rva2VuLnRzIiwiLi4vc3JjL3N0b3Jlcy90b2tlbi1zdG9yZS50cyIsIi4uL3NyYy9zZXJ2aWNlcy9wcm9maWxlL3R5cGVzLnRzIiwiLi4vc3JjL2NvbmZpZy9pbmRleC50cyIsIi4uL3NyYy9zdG9yZXMvdXNlci1zdG9yZS50cyIsIi4uL3NyYy9ob29rcy91c2UtdG9rZW5zLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS11c2VyLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS10b2tlbi1ldmVudC1saXN0ZW5lci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEV4Y2hhbmdlVG9rZW5zUmVzcG9uc2Uge1xuICBhY2Nlc3NfdG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclByb3BzIHtcbiAgdWlkOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHBob3RvVVJMPzogc3RyaW5nO1xuICBoYW5kbGU/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFNzb1VzZXJQcm9wcyB7XG4gIHN1Yjogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBwaG90b1VSTD86IHN0cmluZztcbiAgaGFuZGxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNzb1YyRXhjaGFuZ2VSZXNwb25zZSB7XG4gIHRva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbkluUmVzcG9uc2Uge1xuICBkYXRhOiB7XG4gICAgdXNlcjogVXNlclByb3BzO1xuICAgIHRva2VuOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZWJhc2VVc2VyIHtcbiAgbmFtZTogc3RyaW5nO1xuICBwaWN0dXJlOiBzdHJpbmc7XG4gIG9yaWdpbmFsRW1haWw6IHN0cmluZztcbiAgc2FmZURpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHNhZmVQaG90b1VSTDogc3RyaW5nO1xuICBpbml0aWFsaXplZDogYm9vbGVhbjtcbiAgbGVnYWN5SUQ6IHN0cmluZztcbiAgaGFuZGxlOiBzdHJpbmc7XG4gIGlzczogc3RyaW5nO1xuICBhdWQ6IHN0cmluZztcbiAgYXV0aF90aW1lOiBudW1iZXI7XG4gIHVzZXJfaWQ6IHN0cmluZztcbiAgc3ViOiBzdHJpbmc7XG4gIGlhdDogbnVtYmVyO1xuICBleHA6IG51bWJlcjtcbiAgZW1haWw6IHN0cmluZztcbiAgZW1haWxfdmVyaWZpZWQ6IGJvb2xlYW47XG4gIGZpcmViYXNlOiB7XG4gICAgaWRlbnRpdGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuICAgIHNpZ25faW5fcHJvdmlkZXI6IHN0cmluZztcbiAgfTtcbn1cbiIsInR5cGUgTnVsbGFibGU8VD4gPSBUIHwgbnVsbDtcblxuZXhwb3J0IGVudW0gQW5hbHl0aWNzV2lkZ2V0VHlwZSB7XG4gIEF2YXRhclByb2ZpbGUgPSAnYXZhdGFyLXByb2ZpbGUnLFxuICBBdmF0YXJDaGF0ID0gJ2F2YXRhci1jaGF0JyxcbiAgQ29tbWVudHMgPSAnY29tbWVudHMnLFxuICBHbG9iYWxQcm9maWxlID0gJ2dsb2JhbC1wcm9maWxlJyxcbiAgR3JvdXBDaGF0ID0gJ2dyb3VwLWNoYXQnLFxuICBQb2xscyA9ICdwb2xscycsXG4gIFVuaXZlcnNhbFNuaXBwZXQgPSAndW5pdmVyc2FsLXNuaXBwZXQnLFxufVxuXG5leHBvcnQgdHlwZSBUcmFja09wdGlvbnMgPSB7XG4gIHdpZGdldElkOiBzdHJpbmcgfCBudWxsO1xuICB3aWRnZXRUeXBlOiBBbmFseXRpY3NXaWRnZXRUeXBlO1xuICBzaXRlSWQ6IHN0cmluZztcbiAgcnNXcml0ZUtleTogc3RyaW5nO1xuICByc0RhdGFQbGFuZVVybDogc3RyaW5nO1xuICB0cmlnZ2VyOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZW51bSBBbmFseXRpY3NFdmVudCB7XG4gIEF1dGhlbnRpY2F0aW9uQ29tcGxldGVkID0gJ0F1dGhlbnRpY2F0aW9uIENvbXBsZXRlZCcsXG4gIEF1dGhlbnRpY2F0aW9uU3RhcnRlZCA9ICdBdXRoZW50aWNhdGlvbiBTdGFydGVkJyxcbiAgQXV0aGVudGljYXRpb25WaWV3ZWQgPSAnQXV0aGVudGljYXRpb24gVmlld2VkJyxcbn1cblxuZXhwb3J0IHR5cGUgVHJhY2tQcm9wcyA9IE51bGxhYmxlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3BzIHtcbiAgYW5vbnltb3VzSWQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWRkZXJDb250ZXh0IHtcbiAgY2hhbm5lbDogJ3dlYic7XG4gIGFub255bW91c0lkPzogc3RyaW5nO1xuICBsb2NhbGU/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIG9zPzogeyBuYW1lOiBzdHJpbmc7IHZlcnNpb24/OiBzdHJpbmcgfTtcbiAgcGFnZT86IHtcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIHJlZmVycmVyPzogc3RyaW5nO1xuICAgIHJlZmVycmluZ19kb21haW4/OiBzdHJpbmc7XG4gICAgc2VhcmNoPzogc3RyaW5nO1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIHVybD86IHN0cmluZztcbiAgICBpbml0aWFsX3JlZmVycmVyPzogc3RyaW5nO1xuICAgIGluaXRpYWxfcmVmZXJyaW5nX2RvbWFpbj86IHN0cmluZztcbiAgfTtcbiAgc2NyZWVuPzoge1xuICAgIGRlbnNpdHk/OiBudW1iZXI7XG4gICAgaGVpZ2h0PzogbnVtYmVyO1xuICAgIHdpZHRoPzogbnVtYmVyO1xuICAgIGlubmVySGVpZ2h0PzogbnVtYmVyO1xuICAgIGlubmVyV2lkdGg/OiBudW1iZXI7XG4gIH07XG4gIGNhbXBhaWduPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBVc2VyUHJvcHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoL3R5cGVzJztcbmltcG9ydCB7IFRyYWNrT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL2FuYWx5dGljcyc7XG5cbmludGVyZmFjZSBBdXRoRGlhbG9nQ29udGV4dFR5cGUge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGFwcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYXBwRGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGFuZ3VhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdHJhY2tPcHRpb25zOiBUcmFja09wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIG9uQXV0aENvbXBsZXRlZDogKCh1c2VyOiBVc2VyUHJvcHMpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBvcGVuRGlhbG9nOiAob3B0aW9uczogT3BlbkRpYWxvZ09wdGlvbnMpID0+IHZvaWQ7XG4gIGNsb3NlRGlhbG9nOiAoKSA9PiB2b2lkO1xuICBvbk9wZW5DaGFuZ2U6IChvcGVuOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5jb25zdCBBdXRoRGlhbG9nQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8QXV0aERpYWxvZ0NvbnRleHRUeXBlIHwgdW5kZWZpbmVkPihcbiAgdW5kZWZpbmVkXG4pO1xuXG50eXBlIE9wZW5EaWFsb2dPcHRpb25zID0ge1xuICB0cmFja09wdGlvbnM6IFRyYWNrT3B0aW9ucztcbiAgYXBwTmFtZT86IHN0cmluZztcbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIGFwcERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBvbkF1dGhDb21wbGV0ZWQ/OiAoKSA9PiAodXNlcjogVXNlclByb3BzKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IEF1dGhEaWFsb2dQcm92aWRlciA9ICh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0Tm9kZSB9KSA9PiB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFthcHBOYW1lLCBzZXRBcHBOYW1lXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgW2FwcERlc2NyaXB0aW9uLCBzZXRBcHBEZXNjcmlwdGlvbl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBjb25zdCBbb25BdXRoQ29tcGxldGVkLCBzZXRPbkF1dGhDb21wbGV0ZWRdID0gdXNlU3RhdGU8XG4gICAgKCh1c2VyOiBVc2VyUHJvcHMpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgY29uc3QgW3RyYWNrT3B0aW9ucywgc2V0VHJhY2tPcHRpb25zXSA9IHVzZVN0YXRlPFRyYWNrT3B0aW9ucyB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIGNvbnN0IFtsYW5ndWFnZSwgc2V0TGFuZ3VhZ2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgY29uc3Qgb3BlbkRpYWxvZyA9ICh7XG4gICAgdHJhY2tPcHRpb25zLFxuICAgIGFwcE5hbWUsXG4gICAgbGFuZ3VhZ2UsXG4gICAgYXBwRGVzY3JpcHRpb24sXG4gICAgb25BdXRoQ29tcGxldGVkLFxuICB9OiBPcGVuRGlhbG9nT3B0aW9ucykgPT4ge1xuICAgIHNldElzT3Blbih0cnVlKTtcbiAgICBzZXRUcmFja09wdGlvbnModHJhY2tPcHRpb25zKTtcbiAgICBzZXRBcHBOYW1lKGFwcE5hbWUpO1xuICAgIHNldExhbmd1YWdlKGxhbmd1YWdlKTtcbiAgICBzZXRBcHBEZXNjcmlwdGlvbihhcHBEZXNjcmlwdGlvbik7XG4gICAgc2V0T25BdXRoQ29tcGxldGVkKG9uQXV0aENvbXBsZXRlZCk7XG4gIH07XG5cbiAgY29uc3QgY2xvc2VEaWFsb2cgPSAoKSA9PiBzZXRJc09wZW4oZmFsc2UpO1xuICBjb25zdCBvbk9wZW5DaGFuZ2UgPSAob3BlbjogYm9vbGVhbikgPT4gc2V0SXNPcGVuKG9wZW4pO1xuXG4gIHJldHVybiAoXG4gICAgPEF1dGhEaWFsb2dDb250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17e1xuICAgICAgICBpc09wZW4sXG4gICAgICAgIGFwcE5hbWUsXG4gICAgICAgIGxhbmd1YWdlLFxuICAgICAgICBhcHBEZXNjcmlwdGlvbixcbiAgICAgICAgdHJhY2tPcHRpb25zLFxuICAgICAgICBvbkF1dGhDb21wbGV0ZWQsXG4gICAgICAgIG9wZW5EaWFsb2csXG4gICAgICAgIGNsb3NlRGlhbG9nLFxuICAgICAgICBvbk9wZW5DaGFuZ2UsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0F1dGhEaWFsb2dDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUF1dGhEaWFsb2cgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEF1dGhEaWFsb2dDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VBdXRoRGlhbG9nIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gQXV0aERpYWxvZ1Byb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuIiwiaW1wb3J0IHsgQXV0aERpYWxvZ1Byb3ZpZGVyIH0gZnJvbSAnLi9hdXRoLWRpYWxvZy1wcm92aWRlcic7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBVc2VyUHJvdmlkZXIgfSBmcm9tICcuL3VzZXItcHJvdmlkZXInO1xuaW1wb3J0IHsgQ29uZmlnUHJvdmlkZXIgfSBmcm9tICcuL2NvbmZpZy1wcm92aWRlcic7XG5pbXBvcnQgQXV0aERpYWxvZyBmcm9tICcuLi9kaWFsb2cnO1xuaW1wb3J0IHsgQW5vbnltb3VzVG9rZW5Qcm92aWRlciB9IGZyb20gJy4vYW5vbnltb3VzLXRva2VuLXByb3ZpZGVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIEF1dGhQcm92aWRlcih7XG4gIGNoaWxkcmVuLFxuICBxdWVyeUNsaWVudCxcbiAgZW52aXJvbm1lbnQsXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHF1ZXJ5Q2xpZW50PzogUXVlcnlDbGllbnQ7XG4gIGVudmlyb25tZW50PzogJ3Byb2R1Y3Rpb24nIHwgJ2RldmVsb3BtZW50Jztcbn0pIHtcbiAgcXVlcnlDbGllbnQgPSBxdWVyeUNsaWVudCB8fCBuZXcgUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gKFxuICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgPENvbmZpZ1Byb3ZpZGVyIGVudmlyb25tZW50PXtlbnZpcm9ubWVudH0+XG4gICAgICAgIDxVc2VyUHJvdmlkZXI+XG4gICAgICAgICAgPEF1dGhEaWFsb2dQcm92aWRlcj5cbiAgICAgICAgICAgIDxBbm9ueW1vdXNUb2tlblByb3ZpZGVyPlxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgIDxBdXRoRGlhbG9nIC8+XG4gICAgICAgICAgICA8L0Fub255bW91c1Rva2VuUHJvdmlkZXI+XG4gICAgICAgICAgPC9BdXRoRGlhbG9nUHJvdmlkZXI+XG4gICAgICAgIDwvVXNlclByb3ZpZGVyPlxuICAgICAgPC9Db25maWdQcm92aWRlcj5cbiAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IHVzZUF1dGhEaWFsb2cgfSBmcm9tICcuL2F1dGgtZGlhbG9nLXByb3ZpZGVyJztcbiIsImV4cG9ydCBlbnVtIFRva2VuVHlwZSB7XG4gIEFOT05ZTU9VUyA9ICdhbm9ueW1vdXMnLFxuICBHVUVTVCA9ICdndWVzdCcsXG4gIFBVQkxJQyA9ICdwdWJsaWMnLFxuICBDVVNUT00gPSAnY3VzdG9tJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb2tlblBhaXIge1xuICBpZFRva2VuOiBzdHJpbmcgfCBudWxsO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBUb2tlbnNNYXAgPSBSZWNvcmQ8VG9rZW5UeXBlLCBUb2tlblBhaXI+O1xuXG5leHBvcnQgZW51bSBBdXRoQ29va2llIHtcbiAgUFVCTElDX0lEX1RPS0VOID0gJ2FyZW5hLWF1dGgtcHVibGljLWlkLXRva2VuJyxcbiAgUFVCTElDX1JFRlJFU0hfVE9LRU4gPSAnYXJlbmEtYXV0aC1wdWJsaWMtcmVmcmVzaC10b2tlbicsXG4gIEFOT05ZTU9VU19JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLWFub255bW91cy1pZC10b2tlbicsXG4gIEdVRVNUX0lEX1RPS0VOID0gJ2FyZW5hLWF1dGgtZ3Vlc3QtaWQtdG9rZW4nLFxuICBDVVNUT01fSURfVE9LRU4gPSAnYXJlbmEtYXV0aC1jdXN0b20taWQtdG9rZW4nLFxuICBDVVNUT01fVVNFUiA9ICdhcmVuYS1hdXRoLWN1c3RvbS11c2VyJyxcbn1cbiIsImltcG9ydCB7IGNyZWF0ZSB9IGZyb20gJ3p1c3RhbmQnO1xuaW1wb3J0IHsgc3Vic2NyaWJlV2l0aFNlbGVjdG9yIH0gZnJvbSAnenVzdGFuZC9taWRkbGV3YXJlJztcbmltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5pbXBvcnQgeyBBdXRoQ29va2llLCBUb2tlbnNNYXAsIFRva2VuVHlwZSB9IGZyb20gJy4uL3R5cGVzL3Rva2VuJztcbmltcG9ydCB7IGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQgfSBmcm9tICcuLi91dGlscy9kb20tZXZlbnRzJztcblxuaW50ZXJmYWNlIFRva2VuU3RvcmUge1xuICB0b2tlbnM6IFRva2Vuc01hcDtcbiAgZ2V0VG9rZW46ICh0eXBlOiBUb2tlblR5cGUpID0+IHN0cmluZyB8IG51bGw7XG4gIGdldE1vc3RQcml2aWxlZ2VkVG9rZW46IChcbiAgICBvcHRpb25zPzogQXJyYXk8VG9rZW5UeXBlPlxuICApID0+IHsgdHlwZTogVG9rZW5UeXBlOyBpZFRva2VuOiBzdHJpbmcgfSB8IG51bGw7XG4gIGdldFJlZnJlc2hUb2tlbjogKHR5cGU6IFRva2VuVHlwZSkgPT4gc3RyaW5nIHwgbnVsbDtcbiAgdXBkYXRlUHVibGljVG9rZW5zOiAoXG4gICAgaWRUb2tlbjogc3RyaW5nLFxuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICAgIHNvdXJjZT86IHN0cmluZ1xuICApID0+IHZvaWQ7XG4gIHVwZGF0ZUFub255bW91c1Rva2VuOiAoaWRUb2tlbjogc3RyaW5nLCBzb3VyY2U/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nLCBzb3VyY2U/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHVwZGF0ZUN1c3RvbVRva2VuOiAoaWRUb2tlbjogc3RyaW5nLCBzb3VyY2U/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsZWFyVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhclB1YmxpY1Rva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4gdm9pZDtcbiAgY2xlYXJBbm9ueW1vdXNUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsZWFyR3Vlc3RUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsZWFyQ3VzdG9tVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBzaWxlbnRVcGRhdGVQdWJsaWNUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuICBzaWxlbnRVcGRhdGVBbm9ueW1vdXNUb2tlbjogKGlkVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50VXBkYXRlR3Vlc3RUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNpbGVudFVwZGF0ZUN1c3RvbVRva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuICBzaWxlbnRDbGVhclB1YmxpY1Rva2VuczogKCkgPT4gdm9pZDtcbiAgc2lsZW50Q2xlYXJBbm9ueW1vdXNUb2tlbnM6ICgpID0+IHZvaWQ7XG4gIHNpbGVudENsZWFyR3Vlc3RUb2tlbnM6ICgpID0+IHZvaWQ7XG4gIHNpbGVudENsZWFyQ3VzdG9tVG9rZW5zOiAoKSA9PiB2b2lkO1xufVxuXG5jb25zdCBkZWZhdWx0VG9rZW5zOiBUb2tlbnNNYXAgPSB7XG4gIHB1YmxpYzoge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX0lEX1RPS0VOKSB8fCBudWxsLFxuICAgIHJlZnJlc2hUb2tlbjogQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfUkVGUkVTSF9UT0tFTikgfHwgbnVsbCxcbiAgfSxcbiAgYW5vbnltb3VzOiB7XG4gICAgaWRUb2tlbjogQ29va2llcy5nZXQoQXV0aENvb2tpZS5BTk9OWU1PVVNfSURfVE9LRU4pIHx8IG51bGwsXG4gIH0sXG4gIGd1ZXN0OiB7XG4gICAgaWRUb2tlbjogQ29va2llcy5nZXQoQXV0aENvb2tpZS5HVUVTVF9JRF9UT0tFTikgfHwgbnVsbCxcbiAgfSxcbiAgY3VzdG9tOiB7XG4gICAgaWRUb2tlbjogQ29va2llcy5nZXQoQXV0aENvb2tpZS5DVVNUT01fSURfVE9LRU4pIHx8IG51bGwsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgdXNlVG9rZW5TdG9yZSA9IGNyZWF0ZTxUb2tlblN0b3JlPigpKFxuICBzdWJzY3JpYmVXaXRoU2VsZWN0b3IoKHNldCwgZ2V0KSA9PiB7XG4gICAgY29uc3QgdXBkYXRlUHVibGljVG9rZW5zSGVscGVyID0gKFxuICAgICAgaWRUb2tlbjogc3RyaW5nLFxuICAgICAgcmVmcmVzaFRva2VuOiBzdHJpbmcsXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBpZFRva2VuID09PSBnZXQoKS50b2tlbnMucHVibGljLmlkVG9rZW4gJiZcbiAgICAgICAgcmVmcmVzaFRva2VuID09PSBnZXQoKS50b2tlbnMucHVibGljLnJlZnJlc2hUb2tlblxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBwdWJsaWM6IHtcbiAgICAgICAgICAgIGlkVG9rZW4sXG4gICAgICAgICAgICByZWZyZXNoVG9rZW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcblxuICAgICAgQ29va2llcy5zZXQoQXV0aENvb2tpZS5QVUJMSUNfSURfVE9LRU4sIGlkVG9rZW4sIHtcbiAgICAgICAgZXhwaXJlczogMSAvIDI0LFxuICAgICAgfSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuUFVCTElDX1JFRlJFU0hfVE9LRU4sIHJlZnJlc2hUb2tlbiwge1xuICAgICAgICBleHBpcmVzOiAzMCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5QVUJMSUMsIHtcbiAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbixcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVBbm9ueW1vdXNUb2tlbkhlbHBlciA9IChcbiAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaWRUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLmFub255bW91cy5pZFRva2VuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBhbm9ueW1vdXM6IHtcbiAgICAgICAgICAgIGlkVG9rZW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcblxuICAgICAgQ29va2llcy5zZXQoQXV0aENvb2tpZS5BTk9OWU1PVVNfSURfVE9LRU4sIGlkVG9rZW4sIHtcbiAgICAgICAgZXhwaXJlczogMSAvIDI0LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkFOT05ZTU9VUywgeyBpZFRva2VuLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZUd1ZXN0VG9rZW5zSGVscGVyID0gKFxuICAgICAgaWRUb2tlbjogc3RyaW5nLFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChpZFRva2VuID09PSBnZXQoKS50b2tlbnMuZ3Vlc3QuaWRUb2tlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgZ3Vlc3Q6IHtcbiAgICAgICAgICAgIGlkVG9rZW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcblxuICAgICAgQ29va2llcy5zZXQoQXV0aENvb2tpZS5HVUVTVF9JRF9UT0tFTiwgaWRUb2tlbiwge1xuICAgICAgICBleHBpcmVzOiAxIC8gMjQsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGRpc3BhdGNoRXZlbnQpIHtcbiAgICAgICAgZGlzcGF0Y2hUb2tlblVwZGF0ZWRFdmVudChUb2tlblR5cGUuR1VFU1QsIHsgaWRUb2tlbiwgc291cmNlIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVDdXN0b21Ub2tlbkhlbHBlciA9IChcbiAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaWRUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLmN1c3RvbS5pZFRva2VuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBjdXN0b206IHsgaWRUb2tlbiB9LFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBDb29raWVzLnNldChBdXRoQ29va2llLkNVU1RPTV9JRF9UT0tFTiwgaWRUb2tlbik7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkNVU1RPTSwgeyBpZFRva2VuLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyUHVibGljVG9rZW5zSGVscGVyID0gKFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIENvb2tpZXMucmVtb3ZlKEF1dGhDb29raWUuUFVCTElDX0lEX1RPS0VOKTtcbiAgICAgIENvb2tpZXMucmVtb3ZlKEF1dGhDb29raWUuUFVCTElDX1JFRlJFU0hfVE9LRU4pO1xuXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgLi4uc3RhdGUudG9rZW5zLFxuICAgICAgICAgIHB1YmxpYzogeyBpZFRva2VuOiBudWxsLCByZWZyZXNoVG9rZW46IG51bGwgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcblxuICAgICAgaWYgKGRpc3BhdGNoRXZlbnQpIHtcbiAgICAgICAgZGlzcGF0Y2hUb2tlblVwZGF0ZWRFdmVudChUb2tlblR5cGUuUFVCTElDLCB7IGlkVG9rZW46IG51bGwsIHNvdXJjZSB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY2xlYXJBbm9ueW1vdXNUb2tlbnNIZWxwZXIgPSAoXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgQ29va2llcy5yZW1vdmUoQXV0aENvb2tpZS5BTk9OWU1PVVNfSURfVE9LRU4pO1xuXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgLi4uc3RhdGUudG9rZW5zLFxuICAgICAgICAgIGFub255bW91czogeyBpZFRva2VuOiBudWxsIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkFOT05ZTU9VUywge1xuICAgICAgICAgIGlkVG9rZW46IG51bGwsXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY2xlYXJHdWVzdFRva2Vuc0hlbHBlciA9IChcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBDb29raWVzLnJlbW92ZShBdXRoQ29va2llLkdVRVNUX0lEX1RPS0VOKTtcblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBndWVzdDogeyBpZFRva2VuOiBudWxsIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkdVRVNULCB7IGlkVG9rZW46IG51bGwsIHNvdXJjZSB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY2xlYXJDdXN0b21Ub2tlbnNIZWxwZXIgPSAoXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgQ29va2llcy5yZW1vdmUoQXV0aENvb2tpZS5DVVNUT01fSURfVE9LRU4pO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oQXV0aENvb2tpZS5DVVNUT01fSURfVE9LRU4pO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oQXV0aENvb2tpZS5DVVNUT01fVVNFUik7XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgY3VzdG9tOiB7IGlkVG9rZW46IG51bGwgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcblxuICAgICAgaWYgKGRpc3BhdGNoRXZlbnQpIHtcbiAgICAgICAgZGlzcGF0Y2hUb2tlblVwZGF0ZWRFdmVudChUb2tlblR5cGUuQ1VTVE9NLCB7IGlkVG9rZW46IG51bGwsIHNvdXJjZSB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuczogZGVmYXVsdFRva2VucyxcblxuICAgICAgZ2V0VG9rZW46ICh0eXBlOiBUb2tlblR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIGdldCgpLnRva2Vuc1t0eXBlXT8uaWRUb2tlbiB8fCBudWxsO1xuICAgICAgfSxcblxuICAgICAgZ2V0TW9zdFByaXZpbGVnZWRUb2tlbjogKFxuICAgICAgICBvcHRpb25zID0gW1Rva2VuVHlwZS5QVUJMSUMsIFRva2VuVHlwZS5HVUVTVCwgVG9rZW5UeXBlLkFOT05ZTU9VU11cbiAgICAgICkgPT4ge1xuICAgICAgICBpZiAoZ2V0KCkudG9rZW5zLmN1c3RvbS5pZFRva2VuICYmIG9wdGlvbnMuaW5jbHVkZXMoVG9rZW5UeXBlLkNVU1RPTSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5UeXBlLkNVU1RPTSxcbiAgICAgICAgICAgIGlkVG9rZW46IGdldCgpLnRva2Vucy5jdXN0b20uaWRUb2tlbiEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2V0KCkudG9rZW5zLnB1YmxpYy5pZFRva2VuICYmIG9wdGlvbnMuaW5jbHVkZXMoVG9rZW5UeXBlLlBVQkxJQykpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5UeXBlLlBVQkxJQyxcbiAgICAgICAgICAgIGlkVG9rZW46IGdldCgpLnRva2Vucy5wdWJsaWMuaWRUb2tlbiEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2V0KCkudG9rZW5zLmd1ZXN0LmlkVG9rZW4gJiYgb3B0aW9ucy5pbmNsdWRlcyhUb2tlblR5cGUuR1VFU1QpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5HVUVTVCxcbiAgICAgICAgICAgIGlkVG9rZW46IGdldCgpLnRva2Vucy5ndWVzdC5pZFRva2VuISxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBnZXQoKS50b2tlbnMuYW5vbnltb3VzLmlkVG9rZW4gJiZcbiAgICAgICAgICBvcHRpb25zLmluY2x1ZGVzKFRva2VuVHlwZS5BTk9OWU1PVVMpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlblR5cGUuQU5PTllNT1VTLFxuICAgICAgICAgICAgaWRUb2tlbjogZ2V0KCkudG9rZW5zLmFub255bW91cy5pZFRva2VuISxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSxcblxuICAgICAgZ2V0UmVmcmVzaFRva2VuOiAodHlwZTogVG9rZW5UeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXQoKS50b2tlbnNbdHlwZV0/LnJlZnJlc2hUb2tlbiB8fCBudWxsO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlUHVibGljVG9rZW5zOiAoXG4gICAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgICAgcmVmcmVzaFRva2VuOiBzdHJpbmcsXG4gICAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICAgKSA9PiB7XG4gICAgICAgIHVwZGF0ZVB1YmxpY1Rva2Vuc0hlbHBlcihpZFRva2VuLCByZWZyZXNoVG9rZW4sIHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbjogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUFub255bW91c1Rva2VuSGVscGVyKGlkVG9rZW4sIHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICB1cGRhdGVHdWVzdFRva2VuczogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUd1ZXN0VG9rZW5zSGVscGVyKGlkVG9rZW4sIHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICB1cGRhdGVDdXN0b21Ub2tlbjogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUN1c3RvbVRva2VuSGVscGVyKGlkVG9rZW4sIHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICBjbGVhclRva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICBjbGVhclB1YmxpY1Rva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgICBjbGVhckFub255bW91c1Rva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgICBjbGVhckd1ZXN0VG9rZW5zSGVscGVyKHRydWUsIHNvdXJjZSk7XG4gICAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zSGVscGVyKHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICBjbGVhclB1YmxpY1Rva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICBjbGVhclB1YmxpY1Rva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJBbm9ueW1vdXNUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJBbm9ueW1vdXNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyR3Vlc3RUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJHdWVzdFRva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJDdXN0b21Ub2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJDdXN0b21Ub2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZVB1YmxpY1Rva2VuczogKGlkVG9rZW46IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdXBkYXRlUHVibGljVG9rZW5zSGVscGVyKGlkVG9rZW4sIHJlZnJlc2hUb2tlbiwgZmFsc2UpO1xuICAgICAgfSxcblxuICAgICAgc2lsZW50VXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdXBkYXRlQW5vbnltb3VzVG9rZW5IZWxwZXIoaWRUb2tlbiwgZmFsc2UpO1xuICAgICAgfSxcblxuICAgICAgc2lsZW50VXBkYXRlR3Vlc3RUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdXBkYXRlR3Vlc3RUb2tlbnNIZWxwZXIoaWRUb2tlbiwgZmFsc2UpO1xuICAgICAgfSxcblxuICAgICAgc2lsZW50VXBkYXRlQ3VzdG9tVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdXBkYXRlQ3VzdG9tVG9rZW5IZWxwZXIoaWRUb2tlbiwgZmFsc2UpO1xuICAgICAgfSxcblxuICAgICAgc2lsZW50Q2xlYXJQdWJsaWNUb2tlbnM6ICgpID0+IHtcbiAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnNIZWxwZXIoZmFsc2UpO1xuICAgICAgfSxcblxuICAgICAgc2lsZW50Q2xlYXJBbm9ueW1vdXNUb2tlbnM6ICgpID0+IHtcbiAgICAgICAgY2xlYXJBbm9ueW1vdXNUb2tlbnNIZWxwZXIoZmFsc2UpO1xuICAgICAgfSxcblxuICAgICAgc2lsZW50Q2xlYXJHdWVzdFRva2VuczogKCkgPT4ge1xuICAgICAgICBjbGVhckd1ZXN0VG9rZW5zSGVscGVyKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyQ3VzdG9tVG9rZW5zOiAoKSA9PiB7XG4gICAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zSGVscGVyKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSlcbik7XG4iLCJleHBvcnQgaW50ZXJmYWNlIFB1YmxpY1Byb2ZpbGUge1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgaGFuZGxlPzogc3RyaW5nO1xuICBiaW8/OiBzdHJpbmc7XG4gIG1ldGFkYXRhPzoge1xuICAgIGNvbW1lbnRDb3VudEJ5U2l0ZT86IHtcbiAgICAgIFtzaXRlSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgICB9O1xuICAgIGNvbW1lbnRSZWFjdGlvbkNvdW50QnlTaXRlPzoge1xuICAgICAgW3NpdGVJZDogc3RyaW5nXTogbnVtYmVyO1xuICAgIH07XG4gICAgb3ZlcmFsbENvbW1lbnRDb3VudD86IG51bWJlcjtcbiAgICBvdmVyYWxsQ29tbWVudFJlYWN0aW9uQ291bnQ/OiBudW1iZXI7XG4gIH07XG4gIHBob3RvVVJMPzogc3RyaW5nO1xufVxuIiwiZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuICBwcm9maWxlU2VydmljZVVybDogc3RyaW5nO1xuICBpZGVudGl0eVNlcnZpY2VVcmw6IHN0cmluZztcbiAgcmVmcmVzaFRva2VuQXBpS2V5OiBzdHJpbmc7XG4gIGF1dGhJZnJhbWVVcmw6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6ICdkZXZlbG9wbWVudCcgfCAncHJvZHVjdGlvbic7XG4gIGRlYnVnOiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudCA9ICdkZXZlbG9wbWVudCcgfCAncHJvZHVjdGlvbic7XG5cbmV4cG9ydCBjb25zdCBnZXRDb25maWcgPSAoZW52aXJvbm1lbnQ6IEVudmlyb25tZW50KTogQ29uZmlnID0+IHtcbiAgY29uc3QgaXNEZXYgPSBlbnZpcm9ubWVudCA9PT0gJ2RldmVsb3BtZW50JztcblxuICByZXR1cm4ge1xuICAgIHByb2ZpbGVTZXJ2aWNlVXJsOiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5QUk9GSUxFX1NFUlZJQ0VfVVJMX0RFViB8fFxuICAgICAgICAnaHR0cHM6Ly9wcm9maWxlLXNlcnZpY2UtZGV2LmFyZW5hLmltJ1xuICAgICAgOiBwcm9jZXNzLmVudi5QUk9GSUxFX1NFUlZJQ0VfVVJMX1BSRCB8fFxuICAgICAgICAnaHR0cHM6Ly9wcm9maWxlLXNlcnZpY2UtcHJkLmFyZW5hLmltJyxcbiAgICBpZGVudGl0eVNlcnZpY2VVcmw6IGlzRGV2XG4gICAgICA/IHByb2Nlc3MuZW52LklERU5USVRZX1NFUlZJQ0VfVVJMX0RFViB8fFxuICAgICAgICAnaHR0cHM6Ly90b2tlbi1zZXJ2aWNlLWRldi5hcmVuYS5pbSdcbiAgICAgIDogcHJvY2Vzcy5lbnYuSURFTlRJVFlfU0VSVklDRV9VUkxfUFJEIHx8XG4gICAgICAgICdodHRwczovL3Rva2VuLXNlcnZpY2UtcHJkLmFyZW5hLmltJyxcbiAgICByZWZyZXNoVG9rZW5BcGlLZXk6IGlzRGV2XG4gICAgICA/IHByb2Nlc3MuZW52LkZJUkVCQVNFX1BVQkxJQ19BUElfS0VZX0RFViB8fFxuICAgICAgICAnQUl6YVN5Q0poV0ZDSzNpY3M5a0oyZVNnUUQ3a1dIVXNPc0p5UGRrJ1xuICAgICAgOiBwcm9jZXNzLmVudi5GSVJFQkFTRV9QVUJMSUNfQVBJX0tFWV9QUkQgfHxcbiAgICAgICAgJ0FJemFTeUQtOXRTclFXbjczUzBxbTZCcUVINS0xMkhxOEwwZVRzUScsXG4gICAgYXV0aElmcmFtZVVybDogaXNEZXZcbiAgICAgID8gcHJvY2Vzcy5lbnYuQVVUSF9JRlJBTUVfVVJMX0RFViB8fCAnaHR0cHM6Ly9hdXRoMi5kZXYuYXJlbmEuaW0nXG4gICAgICA6IHByb2Nlc3MuZW52LkFVVEhfSUZSQU1FX1VSTF9QUkQgfHwgJ2h0dHBzOi8vYXV0aDIuYXJlbmEuaW0nLFxuICAgIGVudmlyb25tZW50LFxuICAgIGRlYnVnOiBlbnZpcm9ubWVudCA9PT0gJ2RldmVsb3BtZW50JyxcbiAgfTtcbn07XG4iLCJpbXBvcnQgeyBjcmVhdGUgfSBmcm9tICd6dXN0YW5kJztcbmltcG9ydCB7IHN1YnNjcmliZVdpdGhTZWxlY3RvciB9IGZyb20gJ3p1c3RhbmQvbWlkZGxld2FyZSc7XG5pbXBvcnQgQ29va2llcyBmcm9tICdqcy1jb29raWUnO1xuaW1wb3J0IHtcbiAgVXNlclByb3BzLFxuICBGaXJlYmFzZVVzZXIsXG4gIFNzb1VzZXJQcm9wcyxcbiAgU3NvVjJFeGNoYW5nZVJlc3BvbnNlLFxufSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoL3R5cGVzJztcbmltcG9ydCB7IGp3dERlY29kZSB9IGZyb20gJ2p3dC1kZWNvZGUnO1xuaW1wb3J0IHsgdHlwZSBQdWJsaWNQcm9maWxlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZmlsZS90eXBlcyc7XG5pbXBvcnQgeyB1c2VUb2tlblN0b3JlIH0gZnJvbSAnLi90b2tlbi1zdG9yZSc7XG5pbXBvcnQgeyBBdXRoQ29va2llIH0gZnJvbSAnLi4vdHlwZXMvdG9rZW4nO1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gJy4uL3V0aWxzL3JlcXVlc3QnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIGdldENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XG5cbmludGVyZmFjZSBVc2VyU3RvcmUge1xuICB1c2VyOiBVc2VyUHJvcHMgfCBudWxsO1xuICBwdWJsaWNQcm9maWxlOiBQdWJsaWNQcm9maWxlIHwgbnVsbDtcbiAgcmVmcmVzaGVkVG9rZW5Mb2FkZWQ6IGJvb2xlYW47XG4gIHNldFVzZXI6ICh1c2VyOiBVc2VyUHJvcHMgfCBudWxsKSA9PiB2b2lkO1xuICBzZXRQdWJsaWNQcm9maWxlOiAocHVibGljUHJvZmlsZTogUHVibGljUHJvZmlsZSB8IG51bGwpID0+IHZvaWQ7XG4gIGxvZ291dDogKCkgPT4gdm9pZDtcbiAgcmVmcmVzaFB1YmxpY1Rva2VuczogKGNvbmZpZzoge1xuICAgIHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nO1xuICB9KSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzZXRVc2VyQnlUb2tlbklkOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuICBsb2FkU3RvcmVkVXNlcjogKGNvbmZpZz86IHsgcmVmcmVzaFRva2VuQXBpS2V5OiBzdHJpbmcgfSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgc3NvVjJFeGNoYW5nZTogKFxuICAgIHNzb1NvdXJjZUlEOiBzdHJpbmcsXG4gICAgand0OiBzdHJpbmcsXG4gICAgZW52PzogRW52aXJvbm1lbnRcbiAgKSA9PiBQcm9taXNlPFNzb1YyRXhjaGFuZ2VSZXNwb25zZT47XG59XG5cbmV4cG9ydCBjb25zdCB1c2VVc2VyU3RvcmUgPSBjcmVhdGU8VXNlclN0b3JlPigpKFxuICBzdWJzY3JpYmVXaXRoU2VsZWN0b3IoKHNldCwgZ2V0KSA9PiAoe1xuICAgIHVzZXI6IG51bGwsXG4gICAgcHVibGljUHJvZmlsZTogbnVsbCxcbiAgICByZWZyZXNoZWRUb2tlbkxvYWRlZDogZmFsc2UsXG5cbiAgICBzZXRVc2VyOiAodXNlcjogVXNlclByb3BzIHwgbnVsbCkgPT4ge1xuICAgICAgc2V0KHsgdXNlciB9KTtcbiAgICB9LFxuXG4gICAgc2V0UHVibGljUHJvZmlsZTogKHB1YmxpY1Byb2ZpbGU6IFB1YmxpY1Byb2ZpbGUgfCBudWxsKSA9PiB7XG4gICAgICBzZXQoeyBwdWJsaWNQcm9maWxlIH0pO1xuICAgIH0sXG5cbiAgICBzZXRVc2VyQnlUb2tlbklkOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB1c2VyID0gand0RGVjb2RlPEZpcmViYXNlVXNlcj4oaWRUb2tlbik7XG4gICAgICAgIGNvbnN0IHVzZXJQcm9wczogVXNlclByb3BzID0ge1xuICAgICAgICAgIHVpZDogdXNlci51c2VyX2lkLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiB1c2VyLnNhZmVEaXNwbGF5TmFtZSxcbiAgICAgICAgICBlbWFpbDogdXNlci5lbWFpbCxcbiAgICAgICAgICBwaG90b1VSTDogdXNlci5zYWZlUGhvdG9VUkwsXG4gICAgICAgICAgaGFuZGxlOiB1c2VyLmhhbmRsZSxcbiAgICAgICAgfTtcbiAgICAgICAgc2V0KHsgdXNlcjogdXNlclByb3BzIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGxvZ291dDogKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdG9rZW5TdG9yZSA9IHVzZVRva2VuU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgdG9rZW5TdG9yZS5jbGVhclB1YmxpY1Rva2VucygpO1xuICAgICAgICB0b2tlblN0b3JlLmNsZWFyQ3VzdG9tVG9rZW5zKCk7XG4gICAgICAgIHNldCh7IHVzZXI6IG51bGwgfSk7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdhcmVuYS1jb21tZW50cy1sb2dvdXQnKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVmcmVzaFB1YmxpY1Rva2VuczogYXN5bmMgKGNvbmZpZzogeyByZWZyZXNoVG9rZW5BcGlLZXk6IHN0cmluZyB9KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSBDb29raWVzLmdldChBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOKTtcblxuICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVmcmVzaCB0b2tlbiBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlZml4ID0gJ2h0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlYXBpcy5jb20vdjEvdG9rZW4/a2V5PSc7XG4gICAgICAgIGNvbnN0IGFwaUtleSA9IGNvbmZpZy5yZWZyZXNoVG9rZW5BcGlLZXk7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3ByZWZpeH0ke2FwaUtleX1gO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuLFxuICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgICBjb25zdCB7IHNldFVzZXJCeVRva2VuSWQgfSA9IGdldCgpO1xuICAgICAgICBzZXRVc2VyQnlUb2tlbklkKGRhdGEuaWRfdG9rZW4pO1xuXG4gICAgICAgIGNvbnN0IHRva2VuU3RvcmUgPSB1c2VUb2tlblN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIHRva2VuU3RvcmUudXBkYXRlUHVibGljVG9rZW5zKGRhdGEuaWRfdG9rZW4sIGRhdGEucmVmcmVzaF90b2tlbik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgY29uc3QgeyBsb2dvdXQgfSA9IGdldCgpO1xuICAgICAgICBsb2dvdXQoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbG9hZFN0b3JlZFVzZXI6IGFzeW5jIChjb25maWc/OiB7IHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nIH0pID0+IHtcbiAgICAgIGNvbnN0IHB1YmxpY0lkVG9rZW4gPSBDb29raWVzLmdldChBdXRoQ29va2llLlBVQkxJQ19JRF9UT0tFTik7XG4gICAgICBjb25zdCBwdWJsaWNSZWZyZXNoVG9rZW4gPSBDb29raWVzLmdldChBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOKTtcbiAgICAgIGNvbnN0IGN1c3RvbUlkVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShBdXRoQ29va2llLkNVU1RPTV9JRF9UT0tFTik7XG4gICAgICBjb25zdCBjdXN0b21Vc2VyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQXV0aENvb2tpZS5DVVNUT01fVVNFUik7XG5cbiAgICAgIGlmICghIWN1c3RvbUlkVG9rZW4gJiYgISFjdXN0b21Vc2VyKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVzZXIgPSBKU09OLnBhcnNlKGN1c3RvbVVzZXIpO1xuXG4gICAgICAgIHNldCh7IHVzZXI6IHBhcnNlZFVzZXIgfSk7XG5cbiAgICAgICAgY29uc3QgdG9rZW5TdG9yZSA9IHVzZVRva2VuU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgdG9rZW5TdG9yZS51cGRhdGVDdXN0b21Ub2tlbihjdXN0b21JZFRva2VuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwdWJsaWNJZFRva2VuKSB7XG4gICAgICAgICAgY29uc3QgeyBzZXRVc2VyQnlUb2tlbklkIH0gPSBnZXQoKTtcbiAgICAgICAgICBzZXRVc2VyQnlUb2tlbklkKHB1YmxpY0lkVG9rZW4pO1xuICAgICAgICB9IGVsc2UgaWYgKHB1YmxpY1JlZnJlc2hUb2tlbiAmJiBjb25maWcpIHtcbiAgICAgICAgICBjb25zdCB7IHJlZnJlc2hQdWJsaWNUb2tlbnMgfSA9IGdldCgpO1xuICAgICAgICAgIGF3YWl0IHJlZnJlc2hQdWJsaWNUb2tlbnMoY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXQoeyByZWZyZXNoZWRUb2tlbkxvYWRlZDogdHJ1ZSB9KTtcbiAgICB9LFxuXG4gICAgc3NvVjJFeGNoYW5nZTogYXN5bmMgKFxuICAgICAgc3NvU291cmNlSUQ6IHN0cmluZyxcbiAgICAgIGp3dDogc3RyaW5nLFxuICAgICAgZW52PzogRW52aXJvbm1lbnRcbiAgICApID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZyhlbnYgPz8gJ3Byb2R1Y3Rpb24nKTtcbiAgICAgICAgY29uc3QgcHJvZmlsZVVybCA9IGNvbmZpZy5wcm9maWxlU2VydmljZVVybDtcblxuICAgICAgICBjb25zdCB1cmwgPSBgJHtwcm9maWxlVXJsfS9zc28vc291cmNlcy8ke3Nzb1NvdXJjZUlEfS91c2VyYDtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IFNzb1YyRXhjaGFuZ2VSZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QoJ1BPU1QnLCB1cmwsIHtcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHNpZ25lZFVzZXJEYXRhOiBqd3QgfSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IGRlY29kZWRVc2VyID0gand0RGVjb2RlPFNzb1VzZXJQcm9wcz4ocmVzcG9uc2UudG9rZW4pO1xuXG4gICAgICAgICAgY29uc3QgeyBzZXRVc2VyLCBzZXRQdWJsaWNQcm9maWxlIH0gPSBnZXQoKTtcblxuICAgICAgICAgIHNldFVzZXIoe1xuICAgICAgICAgICAgdWlkOiBkZWNvZGVkVXNlcj8uc3ViLFxuICAgICAgICAgICAgZW1haWw6IGRlY29kZWRVc2VyPy5lbWFpbCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBkZWNvZGVkVXNlcj8uZGlzcGxheU5hbWUsXG4gICAgICAgICAgICBwaG90b1VSTDogZGVjb2RlZFVzZXI/LnBob3RvVVJMLFxuICAgICAgICAgICAgaGFuZGxlOiBkZWNvZGVkVXNlcj8uaGFuZGxlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgc2V0UHVibGljUHJvZmlsZSh7XG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogZGVjb2RlZFVzZXI/LmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgcGhvdG9VUkw6IGRlY29kZWRVc2VyPy5waG90b1VSTCxcbiAgICAgICAgICAgIGhhbmRsZTogZGVjb2RlZFVzZXI/LmhhbmRsZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHRva2VuU3RvcmUgPSB1c2VUb2tlblN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgICAgdG9rZW5TdG9yZS51cGRhdGVDdXN0b21Ub2tlbihyZXNwb25zZS50b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTU08gVjIgRXhjaGFuZ2UgZmFpbGVkOicsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSxcbiAgfSkpXG4pO1xuIiwiaW1wb3J0IHsgdXNlVG9rZW5TdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy90b2tlbi1zdG9yZSc7XG5pbXBvcnQgeyB1c2VUb2tlbkV2ZW50TGlzdGVuZXIgfSBmcm9tICcuL3VzZS10b2tlbi1ldmVudC1saXN0ZW5lcic7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlbnMoKSB7XG4gIGNvbnN0IGdldFRva2VuID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5nZXRUb2tlbik7XG4gIGNvbnN0IGdldE1vc3RQcml2aWxlZ2VkVG9rZW4gPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLmdldE1vc3RQcml2aWxlZ2VkVG9rZW5cbiAgKTtcbiAgY29uc3QgZ2V0UmVmcmVzaFRva2VuID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5nZXRSZWZyZXNoVG9rZW4pO1xuICBjb25zdCB1cGRhdGVQdWJsaWNUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnVwZGF0ZVB1YmxpY1Rva2Vucyk7XG4gIGNvbnN0IHVwZGF0ZUFub255bW91c1Rva2VuID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS51cGRhdGVBbm9ueW1vdXNUb2tlblxuICApO1xuICBjb25zdCB1cGRhdGVHdWVzdFRva2VucyA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUudXBkYXRlR3Vlc3RUb2tlbnMpO1xuICBjb25zdCB1cGRhdGVDdXN0b21Ub2tlbiA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUudXBkYXRlQ3VzdG9tVG9rZW4pO1xuICBjb25zdCBjbGVhclRva2VucyA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUuY2xlYXJUb2tlbnMpO1xuICBjb25zdCBjbGVhclB1YmxpY1Rva2VucyA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUuY2xlYXJQdWJsaWNUb2tlbnMpO1xuICBjb25zdCBjbGVhckN1c3RvbVRva2VucyA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUuY2xlYXJDdXN0b21Ub2tlbnMpO1xuXG4gIGNvbnN0IHsgZXZlbnRTb3VyY2UgfSA9IHVzZVRva2VuRXZlbnRMaXN0ZW5lcigpO1xuXG4gIHJldHVybiB7XG4gICAgZ2V0VG9rZW4sXG4gICAgZ2V0TW9zdFByaXZpbGVnZWRUb2tlbixcbiAgICBnZXRSZWZyZXNoVG9rZW4sXG4gICAgdXBkYXRlUHVibGljVG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nLCByZWZyZXNoVG9rZW46IHN0cmluZykgPT5cbiAgICAgIHVwZGF0ZVB1YmxpY1Rva2VucyhpZFRva2VuLCByZWZyZXNoVG9rZW4sIGV2ZW50U291cmNlKSxcbiAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbjogKGlkVG9rZW46IHN0cmluZykgPT5cbiAgICAgIHVwZGF0ZUFub255bW91c1Rva2VuKGlkVG9rZW4sIGV2ZW50U291cmNlKSxcbiAgICB1cGRhdGVHdWVzdFRva2VuczogKGlkVG9rZW46IHN0cmluZykgPT5cbiAgICAgIHVwZGF0ZUd1ZXN0VG9rZW5zKGlkVG9rZW4sIGV2ZW50U291cmNlKSxcbiAgICB1cGRhdGVDdXN0b21Ub2tlbjogKGlkVG9rZW46IHN0cmluZykgPT5cbiAgICAgIHVwZGF0ZUN1c3RvbVRva2VuKGlkVG9rZW4sIGV2ZW50U291cmNlKSxcbiAgICBjbGVhclRva2VuczogKCkgPT4gY2xlYXJUb2tlbnMoZXZlbnRTb3VyY2UpLFxuICAgIGNsZWFyUHVibGljVG9rZW5zOiAoKSA9PiBjbGVhclB1YmxpY1Rva2VucyhldmVudFNvdXJjZSksXG4gICAgY2xlYXJDdXN0b21Ub2tlbnM6ICgpID0+IGNsZWFyQ3VzdG9tVG9rZW5zKGV2ZW50U291cmNlKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2VuKHR5cGU6ICdhbm9ueW1vdXMnIHwgJ2d1ZXN0JyB8ICdwdWJsaWMnIHwgJ2N1c3RvbScpIHtcbiAgcmV0dXJuIHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUudG9rZW5zW3R5cGVdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2VuVmFsdWUoXG4gIHR5cGU6ICdhbm9ueW1vdXMnIHwgJ2d1ZXN0JyB8ICdwdWJsaWMnIHwgJ2N1c3RvbSdcbikge1xuICByZXR1cm4gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS50b2tlbnNbdHlwZV0/LmlkVG9rZW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVmcmVzaFRva2VuKHR5cGU6ICdhbm9ueW1vdXMnIHwgJ2d1ZXN0JyB8ICdwdWJsaWMnKSB7XG4gIHJldHVybiB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnRva2Vuc1t0eXBlXT8ucmVmcmVzaFRva2VuKTtcbn1cbiIsImltcG9ydCB7IHVzZVByb2ZpbGVTZXJ2aWNlcyB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2ZpbGUvdXNlLXByb2ZpbGUtc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlVXNlclN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3VzZXItc3RvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlVXNlcigpIHtcbiAgcmV0dXJuIHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS51c2VyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVB1YmxpY1Byb2ZpbGUoKSB7XG4gIHJldHVybiB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUucHVibGljUHJvZmlsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWZyZXNoZWRUb2tlbkxvYWRlZCgpIHtcbiAgcmV0dXJuIHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5yZWZyZXNoZWRUb2tlbkxvYWRlZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VVc2VyQWN0aW9ucygpIHtcbiAgY29uc3Qgc2V0VXNlciA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRVc2VyKTtcbiAgY29uc3Qgc2V0UHVibGljUHJvZmlsZSA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRQdWJsaWNQcm9maWxlKTtcbiAgY29uc3QgbG9nb3V0ID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLmxvZ291dCk7XG4gIGNvbnN0IHJlZnJlc2hQdWJsaWNUb2tlbnMgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUucmVmcmVzaFB1YmxpY1Rva2Vucyk7XG4gIGNvbnN0IHNldFVzZXJCeVRva2VuSWQgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0VXNlckJ5VG9rZW5JZCk7XG4gIGNvbnN0IGxvYWRTdG9yZWRVc2VyID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLmxvYWRTdG9yZWRVc2VyKTtcbiAgY29uc3Qgc3NvVjJFeGNoYW5nZSA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zc29WMkV4Y2hhbmdlKTtcbiAgXG5cbiAgcmV0dXJuIHtcbiAgICBzZXRVc2VyLFxuICAgIHNldFB1YmxpY1Byb2ZpbGUsXG4gICAgbG9nb3V0LFxuICAgIHJlZnJlc2hQdWJsaWNUb2tlbnMsXG4gICAgc2V0VXNlckJ5VG9rZW5JZCxcbiAgICBsb2FkU3RvcmVkVXNlcixcbiAgICBzc29WMkV4Y2hhbmdlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBkYXRlUHJvZmlsZSgpIHtcbiAgY29uc3QgeyB1cGRhdGVQdWJsaWNQcm9maWxlIH0gPSB1c2VQcm9maWxlU2VydmljZXMoKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGVQdWJsaWNQcm9maWxlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVXNlcldpdGhQcm9maWxlKCkge1xuICBjb25zdCB1c2VyID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnVzZXIpO1xuICBjb25zdCBwdWJsaWNQcm9maWxlID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnB1YmxpY1Byb2ZpbGUpO1xuICBjb25zdCByZWZyZXNoZWRUb2tlbkxvYWRlZCA9IHVzZVVzZXJTdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5yZWZyZXNoZWRUb2tlbkxvYWRlZFxuICApO1xuXG4gIHJldHVybiB7XG4gICAgdXNlcixcbiAgICBwdWJsaWNQcm9maWxlLFxuICAgIHJlZnJlc2hlZFRva2VuTG9hZGVkLFxuICB9O1xufVxuXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRva2VuVHlwZSB9IGZyb20gJy4uL3R5cGVzL3Rva2VuJztcbmltcG9ydCB7IHVzZVRva2VuU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvdG9rZW4tc3RvcmUnO1xuaW1wb3J0IHsgVE9LRU5fVVBEQVRFRF9FVkVOVCB9IGZyb20gJy4uL3V0aWxzL2RvbS1ldmVudHMnO1xuXG5pbnRlcmZhY2UgVG9rZW5VcGRhdGVFdmVudCB7XG4gIGRldGFpbDoge1xuICAgIGlkVG9rZW46IHN0cmluZyB8IG51bGw7XG4gICAgcmVmcmVzaFRva2VuPzogc3RyaW5nIHwgbnVsbDtcbiAgICB0eXBlOiBUb2tlblR5cGU7XG4gICAgc291cmNlPzogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9rZW5FdmVudExpc3RlbmVyKCkge1xuICBjb25zdCB1cGRhdGVQdWJsaWNUb2tlbnMgPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudFVwZGF0ZVB1YmxpY1Rva2Vuc1xuICApO1xuICBjb25zdCB1cGRhdGVBbm9ueW1vdXNUb2tlbiA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuc2lsZW50VXBkYXRlQW5vbnltb3VzVG9rZW5cbiAgKTtcbiAgY29uc3QgdXBkYXRlR3Vlc3RUb2tlbnMgPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudFVwZGF0ZUd1ZXN0VG9rZW5zXG4gICk7XG4gIGNvbnN0IHVwZGF0ZUN1c3RvbVRva2VuID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRVcGRhdGVDdXN0b21Ub2tlblxuICApO1xuICBjb25zdCBjbGVhclRva2VucyA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUuY2xlYXJUb2tlbnMpO1xuICBjb25zdCBjbGVhclB1YmxpY1Rva2VucyA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuc2lsZW50Q2xlYXJQdWJsaWNUb2tlbnNcbiAgKTtcbiAgY29uc3QgY2xlYXJBbm9ueW1vdXNUb2tlbnMgPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudENsZWFyQW5vbnltb3VzVG9rZW5zXG4gICk7XG4gIGNvbnN0IGNsZWFyR3Vlc3RUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnNpbGVudENsZWFyR3Vlc3RUb2tlbnMpO1xuICBjb25zdCBjbGVhckN1c3RvbVRva2VucyA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuc2lsZW50Q2xlYXJDdXN0b21Ub2tlbnNcbiAgKTtcblxuICBjb25zdCBldmVudFNvdXJjZVJlZiA9IHVzZVJlZjxzdHJpbmc+KFxuICAgIGB3aWRnZXQtJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlVG9rZW5VcGRhdGUgPSAoXG4gICAgICBldmVudDogQ3VzdG9tRXZlbnQ8VG9rZW5VcGRhdGVFdmVudFsnZGV0YWlsJ10+XG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB7IGlkVG9rZW4sIHJlZnJlc2hUb2tlbiwgdHlwZSwgc291cmNlIH0gPSBldmVudC5kZXRhaWw7XG5cbiAgICAgIGlmIChzb3VyY2UgPT09IGV2ZW50U291cmNlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBUb2tlblR5cGUuUFVCTElDOlxuICAgICAgICAgIGlmIChpZFRva2VuKSB7XG4gICAgICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZnJlc2ggdG9rZW4gaXMgcmVxdWlyZWQgZm9yIHB1YmxpYyB0b2tlbnMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVB1YmxpY1Rva2VucyhpZFRva2VuLCByZWZyZXNoVG9rZW4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGVhclB1YmxpY1Rva2VucygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFRva2VuVHlwZS5BTk9OWU1PVVM6XG4gICAgICAgICAgaWYgKGlkVG9rZW4pIHtcbiAgICAgICAgICAgIHVwZGF0ZUFub255bW91c1Rva2VuKGlkVG9rZW4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGVhckFub255bW91c1Rva2VucygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFRva2VuVHlwZS5HVUVTVDpcbiAgICAgICAgICBpZiAoaWRUb2tlbikge1xuICAgICAgICAgICAgdXBkYXRlR3Vlc3RUb2tlbnMoaWRUb2tlbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsZWFyR3Vlc3RUb2tlbnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBUb2tlblR5cGUuQ1VTVE9NOlxuICAgICAgICAgIGlmIChpZFRva2VuKSB7XG4gICAgICAgICAgICB1cGRhdGVDdXN0b21Ub2tlbihpZFRva2VuKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJDdXN0b21Ub2tlbnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBUT0tFTl9VUERBVEVEX0VWRU5ULFxuICAgICAgaGFuZGxlVG9rZW5VcGRhdGUgYXMgRXZlbnRMaXN0ZW5lclxuICAgICk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgVE9LRU5fVVBEQVRFRF9FVkVOVCxcbiAgICAgICAgaGFuZGxlVG9rZW5VcGRhdGUgYXMgRXZlbnRMaXN0ZW5lclxuICAgICAgKTtcbiAgICB9O1xuICB9LCBbXG4gICAgdXBkYXRlUHVibGljVG9rZW5zLFxuICAgIHVwZGF0ZUFub255bW91c1Rva2VuLFxuICAgIHVwZGF0ZUd1ZXN0VG9rZW5zLFxuICAgIHVwZGF0ZUN1c3RvbVRva2VuLFxuICAgIGNsZWFyVG9rZW5zLFxuICAgIGNsZWFyUHVibGljVG9rZW5zLFxuICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zLFxuICAgIGNsZWFyR3Vlc3RUb2tlbnMsXG4gICAgY2xlYXJDdXN0b21Ub2tlbnMsXG4gIF0pO1xuXG4gIHJldHVybiB7XG4gICAgZXZlbnRTb3VyY2U6IGV2ZW50U291cmNlUmVmLmN1cnJlbnQsXG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUlPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUU87QUFDUDtBQUNBOztBQ3BCQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlPOztBQ3ZCQTtBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQ0xPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQTzs7QUNMUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQk87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FDdkJPO0FBQ1A7QUFDQTs7OyJ9
|