@nlabs/metropolisjs 1.0.2 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -109
- package/README.md +45 -44
- package/docs/assets/metropolisjs-architecture.png +0 -0
- package/docs/assets/metropolisjs-architecture.svg +58 -0
- package/docs/assets/metropolisjs-request-lifecycle.svg +42 -0
- package/examples/content-actions-usage.ts +1 -2
- package/examples/factory-pattern-usage.ts +0 -18
- package/lib/actions/awsRumActions/awsRumActions.d.ts +1 -1
- package/lib/actions/awsRumActions/awsRumActions.js +12 -20
- package/lib/actions/userActions/userActions.d.ts +0 -2
- package/lib/actions/userActions/userActions.js +2 -7
- package/lib/adapters/tagAdapter/tagAdapter.d.ts +0 -1
- package/lib/adapters/tagAdapter/tagAdapter.js +1 -2
- package/lib/adapters/userAdapter/userAdapter.d.ts +0 -1
- package/lib/adapters/userAdapter/userAdapter.js +1 -2
- package/lib/config/index.d.ts +2 -2
- package/lib/config/index.js +1 -1
- package/lib/index.d.ts +4 -4
- package/lib/index.js +5 -5
- package/lib/utils/{MetropolisProvider.d.ts → MetropolisContext.d.ts} +3 -14
- package/lib/utils/MetropolisContext.js +7 -0
- package/lib/utils/actionFactory.js +2 -2
- package/lib/utils/api.d.ts +1 -0
- package/lib/utils/api.js +10 -2
- package/lib/utils/index.d.ts +2 -2
- package/lib/utils/index.js +3 -3
- package/lib/utils/useMetropolis.d.ts +2 -6
- package/lib/utils/useMetropolis.js +16 -30
- package/lib/utils/useTranslations.js +4 -2
- package/package.json +5 -2
- package/lib/utils/MetropolisProvider.js +0 -31
|
@@ -52,7 +52,6 @@ export interface UserApiResultsType {
|
|
|
52
52
|
readonly signIn?: Partial<User>;
|
|
53
53
|
readonly signUp?: Partial<User>;
|
|
54
54
|
readonly deleteBillingCard?: Partial<User>;
|
|
55
|
-
readonly update?: Partial<User>;
|
|
56
55
|
readonly updateUser?: Partial<User>;
|
|
57
56
|
readonly updatePassword?: Partial<boolean>;
|
|
58
57
|
readonly updatePlan?: Partial<User>;
|
|
@@ -66,7 +65,6 @@ export interface userActions {
|
|
|
66
65
|
}, requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
67
66
|
confirmSignUp: (code: string, type: 'email' | 'phone', requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
68
67
|
currentAuthenticatedUser: (requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
69
|
-
currentUser: (requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
70
68
|
list: (userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User[]>;
|
|
71
69
|
listByConnection: (userId: string, from?: number, to?: number, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User[]>;
|
|
72
70
|
itemById: (userId: string, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
@@ -260,9 +260,7 @@ export const createUserActions = (flux, options)=>{
|
|
|
260
260
|
};
|
|
261
261
|
const onSuccess = (data = {})=>{
|
|
262
262
|
const users = data?.users;
|
|
263
|
-
const
|
|
264
|
-
const updatedUser = users?.updateUser || {};
|
|
265
|
-
const user = hasSessionIdentity(updatedUser) ? updatedUser : legacyUser;
|
|
263
|
+
const user = users?.updateUser || {};
|
|
266
264
|
if (user?.userId && user.userId === flux.getState('user.session.userId')) {
|
|
267
265
|
syncStoredSession(flux, user);
|
|
268
266
|
}
|
|
@@ -689,7 +687,6 @@ export const createUserActions = (flux, options)=>{
|
|
|
689
687
|
const session = await hydrateSessionFromStorage(flux);
|
|
690
688
|
return session || {};
|
|
691
689
|
};
|
|
692
|
-
const currentUser = async (requestOptions = {})=>currentAuthenticatedUser(requestOptions);
|
|
693
690
|
const refreshSessionAction = async (token, expires, requestOptions = {})=>{
|
|
694
691
|
const result = await refreshSession(flux, token, expires);
|
|
695
692
|
return result?.refreshSession || {};
|
|
@@ -697,7 +694,6 @@ export const createUserActions = (flux, options)=>{
|
|
|
697
694
|
const signIn = async (user, expires, requestOptions = {})=>{
|
|
698
695
|
const { email, phone, username, password } = user;
|
|
699
696
|
let userInput;
|
|
700
|
-
let legacyVariables;
|
|
701
697
|
if (username && password) {
|
|
702
698
|
userInput = {
|
|
703
699
|
password,
|
|
@@ -902,7 +898,6 @@ export const createUserActions = (flux, options)=>{
|
|
|
902
898
|
confirmSignUp,
|
|
903
899
|
completePasswordReset,
|
|
904
900
|
currentAuthenticatedUser,
|
|
905
|
-
currentUser,
|
|
906
901
|
deleteBillingCard,
|
|
907
902
|
list,
|
|
908
903
|
forgotPassword,
|
|
@@ -932,4 +927,4 @@ export const createUserActions = (flux, options)=>{
|
|
|
932
927
|
};
|
|
933
928
|
};
|
|
934
929
|
|
|
935
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy91c2VyQWN0aW9ucy91c2VyQWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt2YWxpZGF0ZVVzZXJJbnB1dH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuaW1wb3J0IHtVU0VSX0NPTlNUQU5UU30gZnJvbSAnLi4vLi4vc3RvcmVzL3VzZXJTdG9yZS5qcyc7XG5pbXBvcnQge2FwcE11dGF0aW9uLCBhcHBRdWVyeSwgcHVibGljTXV0YXRpb24sIHB1YmxpY1F1ZXJ5LCByZWZyZXNoU2Vzc2lvbn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcbmltcG9ydCB7Y3JlYXRlQmFzZUFjdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL2Jhc2VBY3Rpb25GYWN0b3J5LmpzJztcbmltcG9ydCB7XG4gIGNsZWFyUGVyc2lzdGVkU2Vzc2lvbixcbiAgaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZSxcbiAgaXNMb2dnZWRJbiBhcyBpc0xvZ2dlZEluV2l0aFN0b3JhZ2UsXG4gIG5vcm1hbGl6ZVNlc3Npb24sXG4gIHN0b3JlU2Vzc2lvblxufSBmcm9tICcuLi8uLi91dGlscy9zZXNzaW9uLmpzJztcbmltcG9ydCB7Z2V0Q29uZmlnRnJvbUZsdXh9IGZyb20gJy4uLy4uL3V0aWxzL2NvbmZpZ1V0aWxzLmpzJztcbmltcG9ydCB7Y2xlYXJDYWNoZWRSZXF1ZXN0LCBnZXRDYWNoZWRSZXF1ZXN0LCBzZXRDYWNoZWRSZXF1ZXN0fSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuaW1wb3J0IHtzeW5jUGVyc29uYVRhZ3NUb1Nlc3Npb259IGZyb20gJy4uL3BlcnNvbmFBY3Rpb25zL3BlcnNvbmFBY3Rpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhBY3Rpb24sIEZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7VXNlcn0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuaW1wb3J0IHR5cGUge0FwaVJlc3VsdHNUeXBlLCBTZXNzaW9uVHlwZX0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcbmltcG9ydCB0eXBlIHtCYXNlQWRhcHRlck9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvckZhY3RvcnkuanMnO1xuaW1wb3J0IHR5cGUge0FjdGlvblJlcXVlc3RPcHRpb25zfSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuXG5jb25zdCBEQVRBX1RZUEUgPSAndXNlcnMnO1xuY29uc3QgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEUyA9IFsndXNlcklkJywgJ3VzZXJuYW1lJ107XG5jb25zdCBTRU5TSVRJVkVfVVNFUl9GSUVMRFMgPSBuZXcgU2V0KFtcbiAgJ3Bhc3N3b3JkJyxcbiAgJ3NhbHQnLFxuICAndG9rZW4nLFxuICAncmVmcmVzaFRva2VuJyxcbiAgJ3ZlcmlmaWVkRW1haWxDb2RlJyxcbiAgJ3ZlcmlmaWVkU21zQ29kZSdcbl0pO1xuY29uc3QgSU5WQUxJRF9GSUVMRF9SRUdFWCA9IC9DYW5ub3QgcXVlcnkgZmllbGQgXCIoW15cIl0rKVwiL2c7XG5jb25zdCBoYXNTZXNzaW9uSWRlbnRpdHkgPSAodXNlcj86IFBhcnRpYWw8VXNlcj4gfCBudWxsKTogYm9vbGVhbiA9PlxuICAhISh1c2VyICYmICgodXNlciBhcyBhbnkpLl9pZCB8fCAodXNlciBhcyBhbnkpLnVzZXJJZCB8fCAodXNlciBhcyBhbnkpLnVzZXJuYW1lIHx8ICh1c2VyIGFzIGFueSkuZW1haWwpKTtcblxuY29uc3Qgc2FuaXRpemVVcGRhdGVVc2VySW5wdXQgPSAodXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+ID0ge30sIGN1cnJlbnRTZXNzaW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogUGFydGlhbDxVc2VyPiA9PiB7XG4gIGNvbnN0IG5leHRVc2VyID0gT2JqZWN0LmVudHJpZXModXNlcklucHV0KS5yZWR1Y2UoKHVzZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBbZmllbGQsIHZhbHVlXSkgPT4ge1xuICAgIGlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmKGZpZWxkID09PSAncGFzc3dvcmQnKSB7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xuXG4gICAgICBpZihwYXNzd29yZCkge1xuICAgICAgICB1c2VyLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmKGZpZWxkID09PSAndXNlcklkJykge1xuICAgICAgdXNlci51c2VySWQgPSB2YWx1ZTtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRTZXNzaW9uW2ZpZWxkXTtcblxuICAgIGlmKFN0cmluZyh2YWx1ZSkgIT09IFN0cmluZyhjdXJyZW50VmFsdWUgPz8gJycpKSB7XG4gICAgICB1c2VyW2ZpZWxkXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIG5leHRVc2VyIGFzIFBhcnRpYWw8VXNlcj47XG59O1xuXG5jb25zdCBzeW5jU3RvcmVkU2Vzc2lvbiA9IGFzeW5jIChmbHV4OiBGbHV4RnJhbWV3b3JrLCBzZXNzaW9uUGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBQcm9taXNlPFNlc3Npb25UeXBlPiA9PiB7XG4gIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJldHVybiBzdG9yZVNlc3Npb24oZmx1eCwgey4uLmN1cnJlbnRTZXNzaW9uLCAuLi5zZXNzaW9uUGF0Y2h9KTtcbn07XG5cbmNvbnN0IGdldFNlc3Npb25QYXlsb2FkID0gKHBheWxvYWQ6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGlmKHBheWxvYWQgJiYgdHlwZW9mIHBheWxvYWQgPT09ICdvYmplY3QnICYmICdzZXNzaW9uJyBpbiAocGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICByZXR1cm4gKCgocGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuc2Vzc2lvbikgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG5cbiAgcmV0dXJuIChwYXlsb2FkICYmIHR5cGVvZiBwYXlsb2FkID09PSAnb2JqZWN0JyA/IHBheWxvYWQgOiB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5jb25zdCBnZXRGaWVsZFJvb3QgPSAoZmllbGQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBmaWVsZC50cmltKCk7XG4gIGNvbnN0IG1hdGNoID0gdHJpbW1lZC5tYXRjaCgvXltBLVphLXpfXVtBLVphLXowLTlfXSovKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiAnJztcbn07XG5cbmNvbnN0IHNhbml0aXplVXNlclByb3BzID0gKHByb3BzOiBzdHJpbmdbXSA9IFtdLCBmYWxsYmFja1Byb3BzOiBzdHJpbmdbXSA9IERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFMpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgc2FuaXRpemVkID0gcHJvcHMucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBnZXRGaWVsZFJvb3QoZmllbGQpO1xuXG4gICAgaWYoIXJvb3QgfHwgU0VOU0lUSVZFX1VTRVJfRklFTERTLmhhcyhyb290KSB8fCBzZWVuLmhhcyhmaWVsZCkpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIHNlZW4uYWRkKGZpZWxkKTtcbiAgICBsaXN0LnB1c2goZmllbGQpO1xuICAgIHJldHVybiBsaXN0O1xuICB9LCBbXSk7XG5cbiAgaWYoc2FuaXRpemVkLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gc2FuaXRpemVkO1xuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrUHJvcHMucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBnZXRGaWVsZFJvb3QoZmllbGQpO1xuXG4gICAgaWYoIXJvb3QgfHwgU0VOU0lUSVZFX1VTRVJfRklFTERTLmhhcyhyb290KSB8fCBzZWVuLmhhcyhmaWVsZCkpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIHNlZW4uYWRkKGZpZWxkKTtcbiAgICBsaXN0LnB1c2goZmllbGQpO1xuICAgIHJldHVybiBsaXN0O1xuICB9LCBbXSk7XG59O1xuXG5jb25zdCBnZXRJbnZhbGlkRmllbGRzID0gKGVycm9yOiB1bmtub3duKTogU2V0PHN0cmluZz4gPT4ge1xuICBjb25zdCBlcnJvcnMgPSAoZXJyb3IgYXMgYW55KT8uZXJyb3JzIHx8IChlcnJvciBhcyBhbnkpPy5zb3VyY2U/LmVycm9ycyB8fCBbXTtcbiAgY29uc3QgaW52YWxpZEZpZWxkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGVycm9ycy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnID8gaXRlbSA6IGl0ZW0/Lm1lc3NhZ2UgfHwgJyc7XG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gSU5WQUxJRF9GSUVMRF9SRUdFWC5leGVjKG1lc3NhZ2UpO1xuXG4gICAgd2hpbGUobWF0Y2gpIHtcbiAgICAgIGludmFsaWRGaWVsZHMuYWRkKG1hdGNoWzFdKTtcbiAgICAgIG1hdGNoID0gSU5WQUxJRF9GSUVMRF9SRUdFWC5leGVjKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIElOVkFMSURfRklFTERfUkVHRVgubGFzdEluZGV4ID0gMDtcbiAgfSk7XG5cbiAgcmV0dXJuIGludmFsaWRGaWVsZHM7XG59O1xuXG5jb25zdCBnZXRQYXNzd29yZFJlc2V0SWRlbnRpZmllciA9IChyZXF1ZXN0OiBzdHJpbmcgfCBQYXNzd29yZFJlc2V0UmVxdWVzdCk6IHtcbiAgcmVhZG9ubHkgaWRlbnRpZmllcjogc3RyaW5nO1xuICByZWFkb25seSB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJyB8ICd1c2VybmFtZSc7XG59ID0+IHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJ1xuICAgID8gU3RyaW5nKHJlcXVlc3QgfHwgJycpLnRyaW0oKVxuICAgIDogU3RyaW5nKHJlcXVlc3QuZW1haWwgfHwgcmVxdWVzdC5waG9uZSB8fCByZXF1ZXN0LnVzZXJuYW1lIHx8ICcnKS50cmltKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZGVudGlmaWVyLFxuICAgIHR5cGU6IHR5cGVvZiByZXF1ZXN0ICE9PSAnc3RyaW5nJyAmJiByZXF1ZXN0LnBob25lID8gJ3Bob25lJyA6IGlkZW50aWZpZXIuaW5jbHVkZXMoJ0AnKSA/ICdlbWFpbCcgOiAndXNlcm5hbWUnXG4gIH07XG59O1xuXG5jb25zdCBnZXRQYXNzd29yZFJlc2V0VHlwZSA9IChjb25maXJtYXRpb246IFBhc3N3b3JkUmVzZXRDb25maXJtYXRpb24pOiAnZW1haWwnIHwgJ3Bob25lJyA9PlxuICBjb25maXJtYXRpb24udHlwZSB8fCAoY29uZmlybWF0aW9uLnBob25lID8gJ3Bob25lJyA6ICdlbWFpbCcpO1xuXG5jb25zdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkgPSBhc3luYyA8VD4oXG4gIHJlcXVlc3RXaXRoUHJvcHM6IChwcm9wczogc3RyaW5nW10pID0+IFByb21pc2U8VD4sXG4gIHByb3BzOiBzdHJpbmdbXSxcbiAgZmFsbGJhY2tQcm9wczogc3RyaW5nW10gPSBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3Qgc2FmZVByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMocHJvcHMsIGZhbGxiYWNrUHJvcHMpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlcXVlc3RXaXRoUHJvcHMoc2FmZVByb3BzKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnN0IGludmFsaWRGaWVsZHMgPSBnZXRJbnZhbGlkRmllbGRzKGVycm9yKTtcblxuICAgIGlmKGludmFsaWRGaWVsZHMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0cnlQcm9wcyA9IHNhZmVQcm9wcy5maWx0ZXIoKGZpZWxkKSA9PiAhaW52YWxpZEZpZWxkcy5oYXMoZ2V0RmllbGRSb290KGZpZWxkKSkpO1xuXG4gICAgaWYocmV0cnlQcm9wcy5sZW5ndGggPT09IDAgfHwgcmV0cnlQcm9wcy5sZW5ndGggPT09IHNhZmVQcm9wcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0V2l0aFByb3BzKHJldHJ5UHJvcHMpO1xuICB9XG59O1xuXG5leHBvcnQgdHlwZSBVc2VyQWRhcHRlck9wdGlvbnMgPSBCYXNlQWRhcHRlck9wdGlvbnM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvbnNPcHRpb25zIHtcbiAgcmVhZG9ubHkgdXNlckFkYXB0ZXI/OiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBVc2VyQWRhcHRlck9wdGlvbnMpID0+IGFueTtcbiAgcmVhZG9ubHkgdXNlckFkYXB0ZXJPcHRpb25zPzogVXNlckFkYXB0ZXJPcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmaWNhdGlvbkVtYWlsT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHN1YmplY3Q/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRlbXBsYXRlPzogc3RyaW5nO1xuICByZWFkb25seSB0ZXh0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkUmVzZXRSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgZW1haWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBob25lPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZFJlc2V0Q29uZmlybWF0aW9uIGV4dGVuZHMgUGFzc3dvcmRSZXNldFJlcXVlc3Qge1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhc3N3b3JkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU/OiAnZW1haWwnIHwgJ3Bob25lJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyQXBpUmVzdWx0c1R5cGUge1xuICByZWFkb25seSB1c2Vyczoge1xuICAgIHJlYWRvbmx5IGFjdGl2ZUNvdW50PzogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGFkZFVzZXI/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGNvbmZpcm1Db2RlPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBkZWFjdGl2YXRlPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBmb3Jnb3RQYXNzd29yZD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgaXRlbUJ5SWQ/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGdldFVzZXJCeUF0dHJpYnV0ZT86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgZ2V0VXNlckJ5U2Vzc2lvbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgaXRlbUJ5U2Vzc2lvbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgaXRlbUJ5VG9rZW4/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGl0ZW1CeVVzZXJuYW1lPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBnZXRVc2VyTGlzdD86IFVzZXJbXTtcbiAgICByZWFkb25seSBsaXN0PzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3RCeUNvbm5lY3Rpb24/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgbGlzdEJ5TGF0ZXN0PzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3RCeVJlYWN0aW9ucz86IFVzZXJbXTtcbiAgICByZWFkb25seSBsaXN0QnlUYWdzPzogVXNlcltdO1xuICAgIHJlYWRvbmx5IHNlYXJjaD86IFVzZXJbXTtcbiAgICByZWFkb25seSByZWZyZXNoU2Vzc2lvbj86IFNlc3Npb25UeXBlO1xuICAgIHJlYWRvbmx5IHJlbW92ZT86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgcmVzZXRQYXNzd29yZD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgc2F2ZUJpbGxpbmdDYXJkPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBzZW5kVmVyaWZpY2F0aW9uRW1haWw/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHNlc3Npb24/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHNpZ25Jbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgc2lnblVwPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBkZWxldGVCaWxsaW5nQ2FyZD86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgdXBkYXRlPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSB1cGRhdGVVc2VyPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSB1cGRhdGVQYXNzd29yZD86IFBhcnRpYWw8Ym9vbGVhbj47XG4gICAgcmVhZG9ubHkgdXBkYXRlUGxhbj86IFBhcnRpYWw8VXNlcj47XG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRVc2VyVmFsaWRhdG9yID0gKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogVXNlckFkYXB0ZXJPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlVXNlcklucHV0KGlucHV0KTtcblxuICBpZihvcHRpb25zPy5zdHJpY3QgJiYgIXZhbGlkYXRlZC51c2VybmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVXNlcm5hbWUgaXMgcmVxdWlyZWQgaW4gc3RyaWN0IG1vZGUnKTtcbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZWQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIHVzZXJBY3Rpb25zIHtcbiAgYWRkVXNlcjogKHVzZXJJbnB1dDogUGFydGlhbDxVc2VyPiwgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIGNvbmZpcm1Db2RlOiAoY29kZTogbnVtYmVyLCB7dHlwZSwgdmFsdWV9OiB7dHlwZTogJ2VtYWlsJyB8ICdwaG9uZSc7IHZhbHVlOiBzdHJpbmd9LCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBjb25maXJtU2lnblVwOiAoY29kZTogc3RyaW5nLCB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJywgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyOiAocmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgY3VycmVudFVzZXI6IChyZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICBsaXN0OiAodXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcltdPjtcbiAgbGlzdEJ5Q29ubmVjdGlvbjogKHVzZXJJZDogc3RyaW5nLCBmcm9tPzogbnVtYmVyLCB0bz86IG51bWJlciwgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcltdPjtcbiAgaXRlbUJ5SWQ6ICh1c2VySWQ6IHN0cmluZywgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIGdldFVzZXJCeUF0dHJpYnV0ZTogKFxuICAgIGF0dHJpYnV0ZTogJ2VtYWlsJyB8ICd1c2VybmFtZScsXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICB1c2VyUHJvcHM/OiBzdHJpbmdbXSxcbiAgICByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zXG4gICkgPT4gUHJvbWlzZTxVc2VyPjtcbiAgZGVsZXRlQmlsbGluZ0NhcmQ6ICh1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgbGlzdEJ5TGF0ZXN0OiAodXNlcm5hbWU/OiBzdHJpbmcsIGZyb20/OiBudW1iZXIsIHRvPzogbnVtYmVyLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBsaXN0QnlSZWFjdGlvbnM6IChcbiAgICB1c2VybmFtZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uTmFtZXM6IHN0cmluZ1tdLFxuICAgIGZyb20/OiBudW1iZXIsXG4gICAgdG8/OiBudW1iZXIsXG4gICAgcGVyc29uYVByb3BzPzogc3RyaW5nW10sXG4gICAgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9uc1xuICApID0+IFByb21pc2U8VXNlcltdPjtcbiAgbGlzdEJ5VGFnczogKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgdGFnTmFtZXM6IHN0cmluZ1tdLFxuICAgIGZyb20/OiBudW1iZXIsXG4gICAgdG8/OiBudW1iZXIsXG4gICAgcGVyc29uYVByb3BzPzogc3RyaW5nW10sXG4gICAgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9uc1xuICApID0+IFByb21pc2U8VXNlcltdPjtcbiAgZm9yZ290UGFzc3dvcmQ6ICh1c2VybmFtZTogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICByZXF1ZXN0UGFzc3dvcmRSZXNldDogKHJlcXVlc3Q6IHN0cmluZyB8IFBhc3N3b3JkUmVzZXRSZXF1ZXN0LCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBpc0xvZ2dlZEluOiAoKSA9PiBib29sZWFuO1xuICByZWZyZXNoU2Vzc2lvbjogKHRva2VuPzogc3RyaW5nLCBleHBpcmVzPzogbnVtYmVyLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFNlc3Npb25UeXBlPjtcbiAgcmVtb3ZlOiAodXNlcklkOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIHJlc2V0UGFzc3dvcmQ6ICh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcsIHR5cGU6ICdlbWFpbCcgfCAncGhvbmUnLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBjb21wbGV0ZVBhc3N3b3JkUmVzZXQ6IChjb25maXJtYXRpb246IFBhc3N3b3JkUmVzZXRDb25maXJtYXRpb24sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIHNlYXJjaDogKHF1ZXJ5OiBzdHJpbmcsIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXJbXT47XG4gIHNlbmRWZXJpZmljYXRpb25FbWFpbDogKFxuICAgIGVtYWlsOiBzdHJpbmcsXG4gICAgZW1haWxPcHRpb25zPzogVmVyaWZpY2F0aW9uRW1haWxPcHRpb25zLFxuICAgIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnNcbiAgKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBzZXNzaW9uOiAodXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIHNhdmVCaWxsaW5nQ2FyZDogKGNhcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgc2lnbkluOiAodXNlcjogUGFydGlhbDxVc2VyPiwgZXhwaXJlcz86IG51bWJlciwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxTZXNzaW9uVHlwZT47XG4gIHNpZ25PdXQ6IChyZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBzaWduVXA6ICh1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4sIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICB1cGRhdGVQYXNzd29yZDogKHBhc3N3b3JkOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIHVwZGF0ZVVzZXI6ICh1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4sIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICB1cGRhdGVQbGFuOiAocGxhbklkOiBzdHJpbmcsIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICB1cGRhdGVVc2VyQWRhcHRlcjogKGFkYXB0ZXI6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFVzZXJBZGFwdGVyT3B0aW9ucykgPT4gYW55KSA9PiB2b2lkO1xuICB1cGRhdGVVc2VyQWRhcHRlck9wdGlvbnM6IChvcHRpb25zOiBVc2VyQWRhcHRlck9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVVc2VyQWN0aW9ucyA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgb3B0aW9ucz86IFVzZXJBY3Rpb25zT3B0aW9uc1xuKTogdXNlckFjdGlvbnMgPT4ge1xuICBjb25zdCB1c2VyQmFzZSA9IGNyZWF0ZUJhc2VBY3Rpb25zKGZsdXgsIGRlZmF1bHRVc2VyVmFsaWRhdG9yLCB7XG4gICAgYWRhcHRlcjogb3B0aW9ucz8udXNlckFkYXB0ZXIsXG4gICAgYWRhcHRlck9wdGlvbnM6IG9wdGlvbnM/LnVzZXJBZGFwdGVyT3B0aW9uc1xuICB9KTtcbiAgY29uc3QgY2xlYXJVc2VyUmVxdWVzdENhY2hlcyA9IGFzeW5jICh1c2VySWQgPSAnJyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAndXNlci5saXN0Jyk7XG4gICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICd1c2VyLmxpc3RCeUxhdGVzdCcpO1xuICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAndXNlci5saXN0QnlUYWdzJyk7XG4gICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICd1c2VyLnNlYXJjaCcpO1xuICAgIGlmKHVzZXJJZCkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGB1c2VyLml0ZW1CeUlkOiR7dXNlcklkfWApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhZGRVc2VyID0gYXN5bmMgKFxuICAgIHVzZXJJbnB1dDogUGFydGlhbDxVc2VyPixcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qge3VzZXJuYW1lLCBlbWFpbCwgcGFzc3dvcmR9ID0gdXNlcklucHV0O1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZW1haWwsXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogVXNlckFwaVJlc3VsdHNUeXBlKTogUHJvbWlzZTxGbHV4QWN0aW9uPiA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gZGF0YT8udXNlcnM/LmFkZFVzZXIgfHwge307XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkFERF9JVEVNX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKHVzZXJQcm9wcywgW1xuICAgICAgJ2FkZGVkJyxcbiAgICAgICdhZGRyZXNzJyxcbiAgICAgICdkb2InLFxuICAgICAgJ2NpdHknLFxuICAgICAgJ2NvdW50cnknLFxuICAgICAgJ2dlbmRlcicsXG4gICAgICAnaW1hZ2VVcmwnLFxuICAgICAgJ2xhdGl0dWRlJyxcbiAgICAgICdsb25naXR1ZGUnLFxuICAgICAgJ21haWxpbmdMaXN0JyxcbiAgICAgICdtb2RpZmllZCcsXG4gICAgICAnc3RhdGUnLFxuICAgICAgJ3RodW1iVXJsJyxcbiAgICAgICd1c2VyQWNjZXNzJyxcbiAgICAgICd1c2VySWQnLFxuICAgICAgJ3VzZXJuYW1lJ1xuICAgIF0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnYWRkVXNlcicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIHJldHVyblByb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcygpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzaWduVXAgPSBhc3luYyAoXG4gICAgdXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCB7dXNlcm5hbWUsIGVtYWlsLCBwYXNzd29yZH0gPSB1c2VySW5wdXQ7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBleHBpcmVzOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogMTVcbiAgICAgIH0sXG4gICAgICB1c2VyOiB7XG4gICAgICAgIHR5cGU6ICdVc2VySW5wdXQhJyxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBVc2VyQXBpUmVzdWx0c1R5cGUpOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSBkYXRhPy51c2Vycz8uc2lnblVwIHx8IHt9O1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX1VQX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKFtcbiAgICAgICdhZGRlZCcsXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHB1YmxpY011dGF0aW9uPFVzZXJBcGlSZXN1bHRzVHlwZT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdzaWduVXAnLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICByZXR1cm5Qcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fVVBfRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVVzZXIgPSBhc3luYyAoXG4gICAgdXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCB1cGRhdGVJbnB1dCA9IHNhbml0aXplVXBkYXRlVXNlcklucHV0KHVzZXJJbnB1dCwgKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgIGNvbnN0IHtcbiAgICAgIGJpcnRoZGF0ZSxcbiAgICAgIGRvYixcbiAgICAgIGVtYWlsLFxuICAgICAgZmlyc3ROYW1lLFxuICAgICAgZ2VuZGVyLFxuICAgICAgbGFzdE5hbWUsXG4gICAgICBtYWlsaW5nTGlzdCxcbiAgICAgIHBhc3N3b3JkLFxuICAgICAgcGhvbmUsXG4gICAgICB1c2VySWQsXG4gICAgICB1c2VybmFtZVxuICAgIH0gPSB1cGRhdGVJbnB1dDtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGJpcnRoZGF0ZTogYmlydGhkYXRlID8/IGRvYixcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICBmaXJzdE5hbWUsXG4gICAgICAgICAgZ2VuZGVyLFxuICAgICAgICAgIGxhc3ROYW1lLFxuICAgICAgICAgIG1haWxpbmdMaXN0LFxuICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgIHBob25lLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB1c2VycyA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM7XG4gICAgICBjb25zdCBsZWdhY3lVc2VyID0gdXNlcnM/LnVwZGF0ZSB8fCB7fTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRVc2VyID0gdXNlcnM/LnVwZGF0ZVVzZXIgfHwge307XG4gICAgICBjb25zdCB1c2VyID0gaGFzU2Vzc2lvbklkZW50aXR5KHVwZGF0ZWRVc2VyKSA/IHVwZGF0ZWRVc2VyIDogbGVnYWN5VXNlcjtcblxuICAgICAgaWYoKHVzZXIgYXMgYW55KT8udXNlcklkICYmICh1c2VyIGFzIGFueSkudXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgdXNlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX0lURU1fU1VDQ0VTUyxcbiAgICAgICAgdXNlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHVyblByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMoW1xuICAgICAgJ2FkZGVkJyxcbiAgICAgICdiaXJ0aGRhdGUnLFxuICAgICAgJ2NpdHknLFxuICAgICAgJ2NvdW50cnknLFxuICAgICAgJ2VtYWlsJyxcbiAgICAgICdmaXJzdE5hbWUnLFxuICAgICAgJ2dlbmRlcicsXG4gICAgICAnaW1hZ2VDb3VudCcsXG4gICAgICAnaW1hZ2VVcmwnLFxuICAgICAgJ2xhc3ROYW1lJyxcbiAgICAgICdsYXRpdHVkZScsXG4gICAgICAnbG9uZ2l0dWRlJyxcbiAgICAgICdtYWlsaW5nTGlzdCcsXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3Bob25lJyxcbiAgICAgICdzdGF0ZScsXG4gICAgICAndGh1bWJVcmwnLFxuICAgICAgJ3VzZXJBY2Nlc3MnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAndXBkYXRlVXNlcicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIHJldHVyblByb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcyhTdHJpbmcodXNlcklkIHx8ICcnKSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1Db2RlID0gYXN5bmMgKFxuICAgIGNvZGU6IG51bWJlcixcbiAgICB7dHlwZSwgdmFsdWV9OiB7dHlwZTogJ2VtYWlsJyB8ICdwaG9uZSc7IHZhbHVlOiBzdHJpbmd9LFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgY29kZToge1xuICAgICAgICB0eXBlOiAnSW50IScsXG4gICAgICAgIHZhbHVlOiBjb2RlXG4gICAgICB9LFxuICAgICAgdHlwZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgIHZhbHVlOiB0eXBlXG4gICAgICB9LFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAnY29uZmlybUNvZGUnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSk7XG4gICAgY29uc3QgY29uZmlybWVkID0gISFkYXRhPy51c2Vycz8uY29uZmlybUNvZGU7XG5cbiAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtjb25maXJtZWQsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkNPTkZJUk1fU0lHTl9VUF9TVUNDRVNTfSk7XG5cbiAgICByZXR1cm4gY29uZmlybWVkO1xuICB9O1xuXG4gIGNvbnN0IHJlbW92ZSA9IGFzeW5jICh1c2VySWQ6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXJJZDoge1xuICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgdmFsdWU6IHVzZXJJZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LnJlbW92ZSB8fCB7fTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHt0eXBlOiBVU0VSX0NPTlNUQU5UUy5SRU1PVkVfSVRFTV9TVUNDRVNTLCB1c2VyfSk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYXBwTXV0YXRpb24oZmx1eCwgJ3JlbW92ZScsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFtdLCB7b25TdWNjZXNzfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXModXNlcklkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2Vzc2lvbiA9IGFzeW5jICh1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgYXN5bmMgKHNlc3Npb25Qcm9wcykgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGFwcFF1ZXJ5KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnZ2V0VXNlckJ5U2Vzc2lvbicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAge30sXG4gICAgICAgIHNlc3Npb25Qcm9wc1xuICAgICAgKSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgdXNlcnM/OiB7Z2V0VXNlckJ5U2Vzc2lvbj86IFBhcnRpYWw8VXNlcj59O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gZGF0YT8udXNlcnM/LmdldFVzZXJCeVNlc3Npb24gfHwge307XG5cbiAgICAgIGlmKCFoYXNTZXNzaW9uSWRlbnRpdHkoc2Vzc2lvbkRhdGEpKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyUGVyc2lzdGVkU2Vzc2lvbihmbHV4KTtcbiAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fRVJST1J9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dFNlc3Npb24gPSBhd2FpdCBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCBzZXNzaW9uRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtzZXNzaW9uOiBuZXh0U2Vzc2lvbiwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fU1VDQ0VTU30pO1xuICAgICAgYXdhaXQgc3luY1BlcnNvbmFUYWdzVG9TZXNzaW9uKGZsdXgsIFN0cmluZygobmV4dFNlc3Npb24gYXMgYW55KT8ucGVyc29uYUlkIHx8ICcnKSk7XG4gICAgICByZXR1cm4gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIG5leHRTZXNzaW9uKSB8fCBuZXh0U2Vzc2lvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIGFzIFVzZXI7XG4gICAgfSxcbiAgICB1c2VyUHJvcHMsXG4gICAgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEU1xuICApO1xuXG4gIGNvbnN0IGl0ZW1CeUlkID0gYXN5bmMgKHVzZXJJZDogc3RyaW5nLCB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyPihmbHV4LCBgdXNlci5pdGVtQnlJZDoke3VzZXJJZH1gLCB7dXNlcklkLCB1c2VyUHJvcHN9LCByZXF1ZXN0T3B0aW9ucyk7XG5cbiAgICBpZihjYWNoZWRSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXJJZDoge1xuICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgdmFsdWU6IHVzZXJJZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgZ2V0VXNlckJ5SWQgPSAoKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUgJiB7XG4gICAgICAgIHVzZXJzPzoge2dldFVzZXJCeUlkPzogUGFydGlhbDxVc2VyPn07XG4gICAgICB9KT8udXNlcnM/LmdldFVzZXJCeUlkKSB8fCB7fTtcblxuICAgICAgaWYodXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgZ2V0VXNlckJ5SWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0lURU1fU1VDQ0VTUywgdXNlcjogZ2V0VXNlckJ5SWR9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aEludmFsaWRGaWVsZFJldHJ5KFxuICAgICAgKHNhZmVVc2VyUHJvcHMpID0+IGFwcFF1ZXJ5KGZsdXgsICdnZXRVc2VyQnlJZCcsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHVzZXJQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcj4oZmx1eCwgYHVzZXIuaXRlbUJ5SWQ6JHt1c2VySWR9YCwge3VzZXJJZCwgdXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXIsIHJlcXVlc3RPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBnZXRVc2VyQnlBdHRyaWJ1dGUgPSBhc3luYyAoXG4gICAgYXR0cmlidXRlOiAnZW1haWwnIHwgJ3VzZXJuYW1lJyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkQXR0cmlidXRlID0gU3RyaW5nKGF0dHJpYnV0ZSB8fCAnJykudHJpbSgpIGFzICdlbWFpbCcgfCAndXNlcm5hbWUnO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xuICAgIGxldCBtYXRjaGluZ1VzZXI6IFBhcnRpYWw8VXNlcj4gPSB7fTtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBnZXRDYWNoZWRSZXF1ZXN0PFVzZXI+KFxuICAgICAgZmx1eCxcbiAgICAgIGB1c2VyLmdldFVzZXJCeUF0dHJpYnV0ZToke25vcm1hbGl6ZWRBdHRyaWJ1dGV9OiR7bm9ybWFsaXplZFZhbHVlfWAsXG4gICAgICB7YXR0cmlidXRlOiBub3JtYWxpemVkQXR0cmlidXRlLCB1c2VyUHJvcHMsIHZhbHVlOiBub3JtYWxpemVkVmFsdWV9LFxuICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBhdHRyaWJ1dGU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogbm9ybWFsaXplZEF0dHJpYnV0ZVxuICAgICAgfSxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIHR5cGU6ICdTdHJpbmchJyxcbiAgICAgICAgdmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9ICgoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSAmIHtcbiAgICAgICAgdXNlcnM/OiB7Z2V0VXNlckJ5QXR0cmlidXRlPzogUGFydGlhbDxVc2VyPn07XG4gICAgICB9KT8udXNlcnM/LmdldFVzZXJCeUF0dHJpYnV0ZSkgfHwge307XG4gICAgICBtYXRjaGluZ1VzZXIgPSB1c2VyO1xuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0lURU1fU1VDQ0VTUywgdXNlcn0pO1xuICAgIH07XG5cbiAgICBhd2FpdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgICAoc2FmZVVzZXJQcm9wcykgPT4gcHVibGljUXVlcnkoZmx1eCwgJ2dldFVzZXJCeUF0dHJpYnV0ZScsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHVzZXJQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcj4oXG4gICAgICBmbHV4LFxuICAgICAgYHVzZXIuZ2V0VXNlckJ5QXR0cmlidXRlOiR7bm9ybWFsaXplZEF0dHJpYnV0ZX06JHtub3JtYWxpemVkVmFsdWV9YCxcbiAgICAgIHthdHRyaWJ1dGU6IG5vcm1hbGl6ZWRBdHRyaWJ1dGUsIHVzZXJQcm9wcywgdmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZX0sXG4gICAgICBtYXRjaGluZ1VzZXIgYXMgVXNlcixcbiAgICAgIHJlcXVlc3RPcHRpb25zXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBzYXZlQmlsbGluZ0NhcmQgPSBhc3luYyAoXG4gICAgY2FyZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgY2FyZDoge1xuICAgICAgICB0eXBlOiAnQ3JlZGl0Q2FyZElucHV0IScsXG4gICAgICAgIHZhbHVlOiBjYXJkXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gKChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LnNhdmVCaWxsaW5nQ2FyZCkgfHwge307XG5cbiAgICAgIGlmKCh1c2VyIGFzIGFueSk/LnVzZXJJZCAmJiAodXNlciBhcyBhbnkpLnVzZXJJZCA9PT0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpKSB7XG4gICAgICAgIHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIHVzZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlVQREFURV9JVEVNX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKFtcbiAgICAgICdtb2RpZmllZCcsXG4gICAgICAnc3RyaXBlQ2FyZEJyYW5kJyxcbiAgICAgICdzdHJpcGVDYXJkSWQnLFxuICAgICAgJ3N0cmlwZUNhcmRMYXN0NCcsXG4gICAgICAndXNlcklkJyxcbiAgICAgICd1c2VybmFtZScsXG4gICAgICAuLi51c2VyUHJvcHNcbiAgICBdKTtcbiAgICBjb25zdCBzZXNzaW9uVXNlcklkID0gU3RyaW5nKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi51c2VySWQnKSB8fCAnJyk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAnc2F2ZUJpbGxpbmdDYXJkJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKHNlc3Npb25Vc2VySWQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZWxldGVCaWxsaW5nQ2FyZCA9IGFzeW5jIChcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSAoKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8uZGVsZXRlQmlsbGluZ0NhcmQpIHx8IHt9O1xuXG4gICAgICBpZigodXNlciBhcyBhbnkpPy51c2VySWQgJiYgKHVzZXIgYXMgYW55KS51c2VySWQgPT09IGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi51c2VySWQnKSkge1xuICAgICAgICBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCB1c2VyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5VUERBVEVfSVRFTV9TVUNDRVNTLFxuICAgICAgICB1c2VyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmV0dXJuUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyhbXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3N0cmlwZUNhcmRCcmFuZCcsXG4gICAgICAnc3RyaXBlQ2FyZElkJyxcbiAgICAgICdzdHJpcGVDYXJkTGFzdDQnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG4gICAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IFN0cmluZyhmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykgfHwgJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2RlbGV0ZUJpbGxpbmdDYXJkJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICB7fSxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKHNlc3Npb25Vc2VySWQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB1cGRhdGVQbGFuID0gYXN5bmMgKFxuICAgIHBsYW5JZDogc3RyaW5nLFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBuZXh0UGxhbklkID0gU3RyaW5nKHBsYW5JZCB8fCAnJykudHJpbSgpO1xuXG4gICAgaWYoIW5leHRQbGFuSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBzdWJzY3JpcHRpb24gcGxhbklkIGlzIHJlcXVpcmVkIHRvIHVwZGF0ZSBhIHVzZXIgcGxhbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgcGxhbklkOiB7XG4gICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICB2YWx1ZTogbmV4dFBsYW5JZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9ICgoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy51cGRhdGVQbGFuKSB8fCB7fTtcblxuICAgICAgaWYoKHVzZXIgYXMgYW55KT8udXNlcklkICYmICh1c2VyIGFzIGFueSkudXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgdXNlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX0lURU1fU1VDQ0VTUyxcbiAgICAgICAgdXNlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHVyblByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMoW1xuICAgICAgJ21vZGlmaWVkJyxcbiAgICAgICdwbGFuRXhwaXJlcycsXG4gICAgICAncGxhbklkJyxcbiAgICAgICdwbGFuU3RhdHVzJyxcbiAgICAgICdwbGFuU3Vic2NyaXB0aW9uSWQnLFxuICAgICAgJ3N0cmlwZUNhcmRCcmFuZCcsXG4gICAgICAnc3RyaXBlQ2FyZElkJyxcbiAgICAgICdzdHJpcGVDYXJkTGFzdDQnLFxuICAgICAgJ3VzZXJBY2Nlc3MnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG4gICAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IFN0cmluZyhmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykgfHwgJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3VwZGF0ZVBsYW4nLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICByZXR1cm5Qcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoc2Vzc2lvblVzZXJJZCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxpc3QgPSBhc3luYyAodXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3QnLCB7dXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSAoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy5nZXRVc2VyTGlzdCB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnZ2V0VXNlckxpc3QnLCBEQVRBX1RZUEUsIHt9LCBzYWZlVXNlclByb3BzLCB7b25TdWNjZXNzfSksXG4gICAgICB1c2VyUHJvcHMsXG4gICAgICBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4gICAgKTtcblxuICAgIHJldHVybiBzZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdCcsIHt1c2VyUHJvcHN9LCByZXN1bHQgYXMgVXNlcltdLCByZXF1ZXN0T3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3QgbGlzdEJ5TGF0ZXN0ID0gYXN5bmMgKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcgPSAnJyxcbiAgICBmcm9tOiBudW1iZXIgPSAwLFxuICAgIHRvOiBudW1iZXIgPSAxMCxcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyW10+ID0+IHtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBnZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdEJ5TGF0ZXN0Jywge3VzZXJuYW1lLCBmcm9tLCB0bywgdXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogZnJvbVxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogdG9cbiAgICAgIH0sXG4gICAgICB1c2VybmFtZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgdmFsdWU6IHVzZXJuYW1lXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8ubGlzdEJ5TGF0ZXN0IHx8IFtdO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe2xpc3QsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9MSVNUX1NVQ0NFU1N9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aEludmFsaWRGaWVsZFJldHJ5KFxuICAgICAgKHNhZmVVc2VyUHJvcHMpID0+IGFwcFF1ZXJ5KGZsdXgsICdsaXN0QnlMYXRlc3QnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBzYWZlVXNlclByb3BzLCB7b25TdWNjZXNzfSksXG4gICAgICB1c2VyUHJvcHMsXG4gICAgICBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4gICAgKTtcblxuICAgIHJldHVybiBzZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdEJ5TGF0ZXN0Jywge3VzZXJuYW1lLCBmcm9tLCB0bywgdXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXJbXSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IGxpc3RCeUNvbm5lY3Rpb24gPSBhc3luYyAoXG4gICAgdXNlcklkOiBzdHJpbmcsXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcltdPiA9PlxuICAgIFtdXG4gIDtcblxuICBjb25zdCBsaXN0QnlSZWFjdGlvbnMgPSBhc3luYyAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICByZWFjdGlvbk5hbWVzOiBzdHJpbmdbXSxcbiAgICBmcm9tOiBudW1iZXIgPSAwLFxuICAgIHRvOiBudW1iZXIgPSAxMCxcbiAgICBwZXJzb25hUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyW10+ID0+XG4gICAgW11cbiAgO1xuXG4gIGNvbnN0IGxpc3RCeVRhZ3MgPSBhc3luYyAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICB0YWdOYW1lczogc3RyaW5nW10sXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgcGVyc29uYVByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3RCeVRhZ3MnLCB7dXNlcm5hbWUsIHRhZ05hbWVzLCBmcm9tLCB0bywgcGVyc29uYVByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogZnJvbVxuICAgICAgfSxcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgdHlwZTogJ1tTdHJpbmchXScsXG4gICAgICAgIHZhbHVlOiB0YWdOYW1lc1xuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogdG9cbiAgICAgIH0sXG4gICAgICB1c2VybmFtZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgdmFsdWU6IHVzZXJuYW1lXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8ubGlzdEJ5VGFncyB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnbGlzdEJ5VGFncycsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHBlcnNvbmFQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcltdPihmbHV4LCAndXNlci5saXN0QnlUYWdzJywge3VzZXJuYW1lLCB0YWdOYW1lcywgZnJvbSwgdG8sIHBlcnNvbmFQcm9wc30sIHJlc3VsdCBhcyBVc2VyW10sIHJlcXVlc3RPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBzZWFyY2ggPSBhc3luYyAocXVlcnk6IHN0cmluZywgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLnNlYXJjaCcsIHtxdWVyeSwgdXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBxdWVyeToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgIHZhbHVlOiBxdWVyeVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LnNlYXJjaCB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnc2VhcmNoJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgc2FmZVVzZXJQcm9wcywge29uU3VjY2Vzc30pLFxuICAgICAgdXNlclByb3BzLFxuICAgICAgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEU1xuICAgICk7XG5cbiAgICByZXR1cm4gc2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLnNlYXJjaCcsIHtxdWVyeSwgdXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXJbXSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IGlzTG9nZ2VkSW4gPSAoKTogYm9vbGVhbiA9PiBpc0xvZ2dlZEluV2l0aFN0b3JhZ2UoZmx1eCk7XG5cbiAgY29uc3QgY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyID0gYXN5bmMgKHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UoZmx1eCk7XG4gICAgcmV0dXJuIChzZXNzaW9uIHx8IHt9KSBhcyBVc2VyO1xuICB9O1xuXG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gYXN5bmMgKHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiBjdXJyZW50QXV0aGVudGljYXRlZFVzZXIocmVxdWVzdE9wdGlvbnMpO1xuXG4gIGNvbnN0IHJlZnJlc2hTZXNzaW9uQWN0aW9uID0gYXN5bmMgKHRva2VuPzogc3RyaW5nLCBleHBpcmVzPzogbnVtYmVyLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWZyZXNoU2Vzc2lvbihmbHV4LCB0b2tlbiwgZXhwaXJlcyk7XG4gICAgcmV0dXJuIChyZXN1bHQ/LnJlZnJlc2hTZXNzaW9uIHx8IHt9KSBhcyBTZXNzaW9uVHlwZTtcbiAgfTtcblxuICBjb25zdCBzaWduSW4gPSBhc3luYyAoXG4gICAgdXNlcjogUGFydGlhbDxVc2VyPixcbiAgICBleHBpcmVzPzogbnVtYmVyLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgICBjb25zdCB7ZW1haWwsIHBob25lLCB1c2VybmFtZSwgcGFzc3dvcmR9ID0gdXNlcjtcbiAgICBsZXQgdXNlcklucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBsZXQgbGVnYWN5VmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCB7dHlwZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bn0+IHwgdW5kZWZpbmVkO1xuXG4gICAgaWYodXNlcm5hbWUgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHVzZXJJbnB1dCA9IHtcbiAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZihlbWFpbCAmJiBwYXNzd29yZCkge1xuICAgICAgdXNlcklucHV0ID0ge1xuICAgICAgICBlbWFpbCxcbiAgICAgICAgcGFzc3dvcmRcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmKHBob25lICYmIHBhc3N3b3JkKSB7XG4gICAgICB1c2VySW5wdXQgPSB7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBwaG9uZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VybmFtZSwgZW1haWwsIG9yIHBob25lIG51bWJlciBhbmQgcGFzc3dvcmQgYXJlIHJlcXVpcmVkIHRvIHNpZ24gaW4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgICBjb25zdCByZXF1ZXN0ZWRFeHBpcmVzID0gTWF0aC5tYXgoMSwgTnVtYmVyKGV4cGlyZXMgfHwgY29uZmlnLmFwcD8uc2Vzc2lvbj8ubWF4TWludXRlcyB8fCAxNSkpO1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzV2l0aFVzZXJJbnB1dCA9IHtcbiAgICAgIGV4cGlyZXM6IHtcbiAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgIHZhbHVlOiByZXF1ZXN0ZWRFeHBpcmVzXG4gICAgICB9LFxuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB1c2VySW5wdXRcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gYXN5bmMgKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgIGNvbnN0IHVzZXJzID0gKGRhdGEgYXMgYW55KT8udXNlcnM7XG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IG5vcm1hbGl6ZVNlc3Npb24odXNlcnM/LnNpZ25JbiB8fCB7fSk7XG4gICAgICBjb25zdCBzdG9yZWRTZXNzaW9uID0gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgc2Vzc2lvbkRhdGEpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2Vzc2lvbjogc3RvcmVkU2Vzc2lvbixcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9JTl9TVUNDRVNTXG4gICAgICB9IGFzIEZsdXhBY3Rpb247XG4gICAgfTtcblxuICAgIGNvbnN0IHBlcmZvcm1TaWduSW4gPSBhc3luYyAocXVlcnlWYXJpYWJsZXM6IGFueSk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25SZXN1bHQgPSBhd2FpdCBwdWJsaWNNdXRhdGlvbjxTZXNzaW9uVHlwZSAmIFVzZXJBcGlSZXN1bHRzVHlwZT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdzaWduSW4nLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBbJ2V4cGlyZXMnLCAnaXNzdWVkJywgJ3Rva2VuJywgJ3VzZXJJZCcsICd1c2VybmFtZSddLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJhc2VTZXNzaW9uID0gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgZ2V0U2Vzc2lvblBheWxvYWQoc2Vzc2lvblJlc3VsdCkpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBoeWRyYXRlZFNlc3Npb24gPSBhd2FpdCBzZXNzaW9uKFsndXNlcklkJywgJ3BlcnNvbmFJZCcsICd1c2VyQWNjZXNzJywgJ3VzZXJuYW1lJ10sIHJlcXVlc3RPcHRpb25zKTtcbiAgICAgICAgYXdhaXQgc3luY1BlcnNvbmFUYWdzVG9TZXNzaW9uKGZsdXgsIFN0cmluZygoaHlkcmF0ZWRTZXNzaW9uIGFzIGFueSk/LnBlcnNvbmFJZCB8fCAnJykpO1xuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBjb25zdCBmYWxsYmFja1Nlc3Npb24gPSBhd2FpdCBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCBiYXNlU2Vzc2lvbiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe1xuICAgICAgICAgIHNlc3Npb246IGZhbGxiYWNrU2Vzc2lvbixcbiAgICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX0lOX1NVQ0NFU1NcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxsYmFja1Nlc3Npb247XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbmFsU2Vzc2lvbiA9IGF3YWl0IHN5bmNTdG9yZWRTZXNzaW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJywgYmFzZVNlc3Npb24pIHx8IGJhc2VTZXNzaW9uKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgKTtcbiAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe1xuICAgICAgICBzZXNzaW9uOiBmaW5hbFNlc3Npb24sXG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fSU5fU1VDQ0VTU1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmluYWxTZXNzaW9uO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHBlcmZvcm1TaWduSW4ocXVlcnlWYXJpYWJsZXNXaXRoVXNlcklucHV0KTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9JTl9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoU3RyaW5nKCh1c2VyIGFzIGFueSk/LnVzZXJJZCB8fCAnJykpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzaWduT3V0ID0gYXN5bmMgKHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgYXdhaXQgY2xlYXJQZXJzaXN0ZWRTZXNzaW9uKGZsdXgpO1xuICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe3Nlc3Npb246IHt9LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX09VVF9TVUNDRVNTfSk7XG4gICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1TaWduVXAgPSBhc3luYyAoY29kZTogc3RyaW5nLCB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+ID0+XG4gICAgdHJ1ZTtcblxuICBjb25zdCByZXF1ZXN0UGFzc3dvcmRSZXNldCA9IGFzeW5jIChcbiAgICByZXF1ZXN0OiBzdHJpbmcgfCBQYXNzd29yZFJlc2V0UmVxdWVzdCxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBsZXQgZm9yZ290UGFzc3dvcmRTdWNjZWVkZWQgPSBmYWxzZTtcbiAgICBjb25zdCB7aWRlbnRpZmllciwgdHlwZX0gPSBnZXRQYXNzd29yZFJlc2V0SWRlbnRpZmllcihyZXF1ZXN0KTtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSB0eXBlID09PSAncGhvbmUnID8gJ3Bob25lJyA6IHR5cGUgPT09ICdlbWFpbCcgPyAnZW1haWwnIDogJ3VzZXJuYW1lJztcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIFthdHRyaWJ1dGVdOiBpZGVudGlmaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE/OiBVc2VyQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5mb3Jnb3RQYXNzd29yZDtcbiAgICAgIGZvcmdvdFBhc3N3b3JkU3VjY2VlZGVkID0gc3VjY2VzcztcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogc3VjY2VzcyA/IFVTRVJfQ09OU1RBTlRTLkZPUkdPVF9QQVNTV09SRF9TVUNDRVNTIDogVVNFUl9DT05TVEFOVFMuRk9SR09UX1BBU1NXT1JEX0VSUk9SXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXdhaXQgcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAnZm9yZ290UGFzc3dvcmQnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSwge29uU3VjY2Vzc30pO1xuXG4gICAgaWYoIWZvcmdvdFBhc3N3b3JkU3VjY2VlZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvcmdvdF9wYXNzd29yZF9mYWlsZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBmb3Jnb3RQYXNzd29yZCA9IGFzeW5jICh1c2VybmFtZTogc3RyaW5nLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4gPT5cbiAgICByZXF1ZXN0UGFzc3dvcmRSZXNldCh1c2VybmFtZSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gIGNvbnN0IHNlbmRWZXJpZmljYXRpb25FbWFpbCA9IGFzeW5jIChcbiAgICBlbWFpbDogc3RyaW5nLFxuICAgIGVtYWlsT3B0aW9uczogVmVyaWZpY2F0aW9uRW1haWxPcHRpb25zID0ge30sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICB1c2VyOiB7XG4gICAgICAgIHR5cGU6ICdVc2VySW5wdXQhJyxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICAuLi4oZW1haWxPcHRpb25zLnN1YmplY3QgPyB7dmVyaWZpY2F0aW9uRW1haWxTdWJqZWN0OiBlbWFpbE9wdGlvbnMuc3ViamVjdH0gOiB7fSksXG4gICAgICAgICAgLi4uKGVtYWlsT3B0aW9ucy50ZW1wbGF0ZSA/IHt2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlOiBlbWFpbE9wdGlvbnMudGVtcGxhdGV9IDoge30pLFxuICAgICAgICAgIC4uLihlbWFpbE9wdGlvbnMudGV4dCA/IHt2ZXJpZmljYXRpb25FbWFpbFRleHQ6IGVtYWlsT3B0aW9ucy50ZXh0fSA6IHt9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhPzogVXNlckFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gISFkYXRhPy51c2Vycz8uc2VuZFZlcmlmaWNhdGlvbkVtYWlsO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBzdWNjZXNzID8gVVNFUl9DT05TVEFOVFMuQ09ORklSTV9TSUdOX1VQX1NVQ0NFU1MgOiBVU0VSX0NPTlNUQU5UUy5DT05GSVJNX1NJR05fVVBfRVJST1JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihcbiAgICAgIGZsdXgsXG4gICAgICAnc2VuZFZlcmlmaWNhdGlvbkVtYWlsJyxcbiAgICAgIERBVEFfVFlQRSxcbiAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgW10sXG4gICAgICB7b25TdWNjZXNzfVxuICAgICkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LnNlbmRWZXJpZmljYXRpb25FbWFpbDtcbiAgICAgIGlmKCFzdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2VuZF92ZXJpZmljYXRpb25fZW1haWxfZmFpbGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCByZXNldFBhc3N3b3JkID0gYXN5bmMgKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgICBjb2RlOiBzdHJpbmcsXG4gICAgdHlwZTogJ2VtYWlsJyB8ICdwaG9uZScsXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBjb2RlOiB7XG4gICAgICAgIHR5cGU6ICdTdHJpbmchJyxcbiAgICAgICAgdmFsdWU6IGNvZGVcbiAgICAgIH0sXG4gICAgICB1c2VyOiB7XG4gICAgICAgIHR5cGU6ICdVc2VySW5wdXQhJyxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAuLi4odHlwZSA9PT0gJ2VtYWlsJyA/IHtlbWFpbDogdXNlcm5hbWV9IDoge3Bob25lOiB1c2VybmFtZX0pLFxuICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgIHVzZXJuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE/OiBVc2VyQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5yZXNldFBhc3N3b3JkO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBzdWNjZXNzID8gVVNFUl9DT05TVEFOVFMuUkVTRVRfUEFTU1dPUkRfU1VDQ0VTUyA6IFVTRVJfQ09OU1RBTlRTLlJFU0VUX1BBU1NXT1JEX0VSUk9SXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHB1YmxpY011dGF0aW9uPFVzZXJBcGlSZXN1bHRzVHlwZT4oZmx1eCwgJ3Jlc2V0UGFzc3dvcmQnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSwge29uU3VjY2Vzc30pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5yZXNldFBhc3N3b3JkO1xuICAgICAgaWYoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNldF9wYXNzd29yZF9mYWlsZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGNvbXBsZXRlUGFzc3dvcmRSZXNldCA9IGFzeW5jIChcbiAgICBjb25maXJtYXRpb246IFBhc3N3b3JkUmVzZXRDb25maXJtYXRpb24sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgdXNlcm5hbWUgPSBTdHJpbmcoY29uZmlybWF0aW9uLmVtYWlsIHx8IGNvbmZpcm1hdGlvbi5waG9uZSB8fCBjb25maXJtYXRpb24udXNlcm5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCB0eXBlID0gZ2V0UGFzc3dvcmRSZXNldFR5cGUoY29uZmlybWF0aW9uKTtcbiAgICByZXR1cm4gcmVzZXRQYXNzd29yZCh1c2VybmFtZSwgY29uZmlybWF0aW9uLnBhc3N3b3JkLCBjb25maXJtYXRpb24uY29kZSwgdHlwZSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVBhc3N3b3JkID0gYXN5bmMgKHBhc3N3b3JkOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiA9PlxuICAgIHRydWVcbiAgO1xuXG4gIHJldHVybiB7XG4gICAgYWRkVXNlcixcbiAgICBjb25maXJtQ29kZSxcbiAgICBjb25maXJtU2lnblVwLFxuICAgIGNvbXBsZXRlUGFzc3dvcmRSZXNldCxcbiAgICBjdXJyZW50QXV0aGVudGljYXRlZFVzZXIsXG4gICAgY3VycmVudFVzZXIsXG4gICAgZGVsZXRlQmlsbGluZ0NhcmQsXG4gICAgbGlzdCxcbiAgICBmb3Jnb3RQYXNzd29yZCxcbiAgICBpc0xvZ2dlZEluLFxuICAgIGl0ZW1CeUlkLFxuICAgIGdldFVzZXJCeUF0dHJpYnV0ZSxcbiAgICBsaXN0QnlDb25uZWN0aW9uLFxuICAgIGxpc3RCeUxhdGVzdCxcbiAgICBsaXN0QnlSZWFjdGlvbnMsXG4gICAgbGlzdEJ5VGFncyxcbiAgICByZWZyZXNoU2Vzc2lvbjogcmVmcmVzaFNlc3Npb25BY3Rpb24sXG4gICAgcmVtb3ZlLFxuICAgIHJlcXVlc3RQYXNzd29yZFJlc2V0LFxuICAgIHJlc2V0UGFzc3dvcmQsXG4gICAgc2F2ZUJpbGxpbmdDYXJkLFxuICAgIHNlYXJjaCxcbiAgICBzZW5kVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgc2Vzc2lvbixcbiAgICBzaWduSW4sXG4gICAgc2lnbk91dCxcbiAgICBzaWduVXAsXG4gICAgdXBkYXRlUGFzc3dvcmQsXG4gICAgdXBkYXRlVXNlcixcbiAgICB1cGRhdGVQbGFuLFxuICAgIHVwZGF0ZVVzZXJBZGFwdGVyOiB1c2VyQmFzZS51cGRhdGVBZGFwdGVyLFxuICAgIHVwZGF0ZVVzZXJBZGFwdGVyT3B0aW9uczogdXNlckJhc2UudXBkYXRlT3B0aW9uc1xuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVVzZXJJbnB1dCIsIlVTRVJfQ09OU1RBTlRTIiwiYXBwTXV0YXRpb24iLCJhcHBRdWVyeSIsInB1YmxpY011dGF0aW9uIiwicHVibGljUXVlcnkiLCJyZWZyZXNoU2Vzc2lvbiIsImNyZWF0ZUJhc2VBY3Rpb25zIiwiY2xlYXJQZXJzaXN0ZWRTZXNzaW9uIiwiaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZSIsImlzTG9nZ2VkSW4iLCJpc0xvZ2dlZEluV2l0aFN0b3JhZ2UiLCJub3JtYWxpemVTZXNzaW9uIiwic3RvcmVTZXNzaW9uIiwiZ2V0Q29uZmlnRnJvbUZsdXgiLCJjbGVhckNhY2hlZFJlcXVlc3QiLCJnZXRDYWNoZWRSZXF1ZXN0Iiwic2V0Q2FjaGVkUmVxdWVzdCIsInN5bmNQZXJzb25hVGFnc1RvU2Vzc2lvbiIsIkRBVEFfVFlQRSIsIkRFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFMiLCJTRU5TSVRJVkVfVVNFUl9GSUVMRFMiLCJTZXQiLCJJTlZBTElEX0ZJRUxEX1JFR0VYIiwiaGFzU2Vzc2lvbklkZW50aXR5IiwidXNlciIsIl9pZCIsInVzZXJJZCIsInVzZXJuYW1lIiwiZW1haWwiLCJzYW5pdGl6ZVVwZGF0ZVVzZXJJbnB1dCIsInVzZXJJbnB1dCIsImN1cnJlbnRTZXNzaW9uIiwibmV4dFVzZXIiLCJPYmplY3QiLCJlbnRyaWVzIiwicmVkdWNlIiwiZmllbGQiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsInBhc3N3b3JkIiwiU3RyaW5nIiwidHJpbSIsImN1cnJlbnRWYWx1ZSIsInN5bmNTdG9yZWRTZXNzaW9uIiwiZmx1eCIsInNlc3Npb25QYXRjaCIsImdldFN0YXRlIiwiZ2V0U2Vzc2lvblBheWxvYWQiLCJwYXlsb2FkIiwic2Vzc2lvbiIsImdldEZpZWxkUm9vdCIsInRyaW1tZWQiLCJtYXRjaCIsInNhbml0aXplVXNlclByb3BzIiwicHJvcHMiLCJmYWxsYmFja1Byb3BzIiwic2VlbiIsInNhbml0aXplZCIsImxpc3QiLCJyb290IiwiaGFzIiwiYWRkIiwicHVzaCIsImxlbmd0aCIsImdldEludmFsaWRGaWVsZHMiLCJlcnJvciIsImVycm9ycyIsInNvdXJjZSIsImludmFsaWRGaWVsZHMiLCJmb3JFYWNoIiwiaXRlbSIsIm1lc3NhZ2UiLCJleGVjIiwibGFzdEluZGV4IiwiZ2V0UGFzc3dvcmRSZXNldElkZW50aWZpZXIiLCJyZXF1ZXN0IiwiaWRlbnRpZmllciIsInBob25lIiwidHlwZSIsImluY2x1ZGVzIiwiZ2V0UGFzc3dvcmRSZXNldFR5cGUiLCJjb25maXJtYXRpb24iLCJ3aXRoSW52YWxpZEZpZWxkUmV0cnkiLCJyZXF1ZXN0V2l0aFByb3BzIiwic2FmZVByb3BzIiwic2l6ZSIsInJldHJ5UHJvcHMiLCJmaWx0ZXIiLCJkZWZhdWx0VXNlclZhbGlkYXRvciIsImlucHV0Iiwib3B0aW9ucyIsInZhbGlkYXRlZCIsInN0cmljdCIsIkVycm9yIiwiY3JlYXRlVXNlckFjdGlvbnMiLCJ1c2VyQmFzZSIsImFkYXB0ZXIiLCJ1c2VyQWRhcHRlciIsImFkYXB0ZXJPcHRpb25zIiwidXNlckFkYXB0ZXJPcHRpb25zIiwiY2xlYXJVc2VyUmVxdWVzdENhY2hlcyIsImFkZFVzZXIiLCJ1c2VyUHJvcHMiLCJyZXF1ZXN0T3B0aW9ucyIsInF1ZXJ5VmFyaWFibGVzIiwib25TdWNjZXNzIiwiZGF0YSIsInVzZXJzIiwiZGlzcGF0Y2giLCJBRERfSVRFTV9TVUNDRVNTIiwicmV0dXJuUHJvcHMiLCJzaWduVXAiLCJleHBpcmVzIiwiU0lHTl9VUF9TVUNDRVNTIiwiU0lHTl9VUF9FUlJPUiIsInVwZGF0ZVVzZXIiLCJ1cGRhdGVJbnB1dCIsImJpcnRoZGF0ZSIsImRvYiIsImZpcnN0TmFtZSIsImdlbmRlciIsImxhc3ROYW1lIiwibWFpbGluZ0xpc3QiLCJsZWdhY3lVc2VyIiwidXBkYXRlIiwidXBkYXRlZFVzZXIiLCJVUERBVEVfSVRFTV9TVUNDRVNTIiwiY29uZmlybUNvZGUiLCJjb2RlIiwiY29uZmlybWVkIiwiQ09ORklSTV9TSUdOX1VQX1NVQ0NFU1MiLCJyZW1vdmUiLCJSRU1PVkVfSVRFTV9TVUNDRVNTIiwic2Vzc2lvblByb3BzIiwic2Vzc2lvbkRhdGEiLCJnZXRVc2VyQnlTZXNzaW9uIiwiR0VUX1NFU1NJT05fRVJST1IiLCJuZXh0U2Vzc2lvbiIsIkdFVF9TRVNTSU9OX1NVQ0NFU1MiLCJwZXJzb25hSWQiLCJpdGVtQnlJZCIsImNhY2hlZFJlc3VsdCIsImdldFVzZXJCeUlkIiwiR0VUX0lURU1fU1VDQ0VTUyIsInJlc3VsdCIsInNhZmVVc2VyUHJvcHMiLCJnZXRVc2VyQnlBdHRyaWJ1dGUiLCJhdHRyaWJ1dGUiLCJub3JtYWxpemVkQXR0cmlidXRlIiwibm9ybWFsaXplZFZhbHVlIiwibWF0Y2hpbmdVc2VyIiwic2F2ZUJpbGxpbmdDYXJkIiwiY2FyZCIsInNlc3Npb25Vc2VySWQiLCJkZWxldGVCaWxsaW5nQ2FyZCIsInVwZGF0ZVBsYW4iLCJwbGFuSWQiLCJuZXh0UGxhbklkIiwiZ2V0VXNlckxpc3QiLCJHRVRfTElTVF9TVUNDRVNTIiwibGlzdEJ5TGF0ZXN0IiwiZnJvbSIsInRvIiwibGlzdEJ5Q29ubmVjdGlvbiIsImxpc3RCeVJlYWN0aW9ucyIsInJlYWN0aW9uTmFtZXMiLCJwZXJzb25hUHJvcHMiLCJsaXN0QnlUYWdzIiwidGFnTmFtZXMiLCJ0YWdzIiwic2VhcmNoIiwicXVlcnkiLCJjdXJyZW50QXV0aGVudGljYXRlZFVzZXIiLCJjdXJyZW50VXNlciIsInJlZnJlc2hTZXNzaW9uQWN0aW9uIiwidG9rZW4iLCJzaWduSW4iLCJsZWdhY3lWYXJpYWJsZXMiLCJjb25maWciLCJyZXF1ZXN0ZWRFeHBpcmVzIiwiTWF0aCIsIm1heCIsIk51bWJlciIsImFwcCIsIm1heE1pbnV0ZXMiLCJxdWVyeVZhcmlhYmxlc1dpdGhVc2VySW5wdXQiLCJzdG9yZWRTZXNzaW9uIiwiU0lHTl9JTl9TVUNDRVNTIiwicGVyZm9ybVNpZ25JbiIsInNlc3Npb25SZXN1bHQiLCJiYXNlU2Vzc2lvbiIsImh5ZHJhdGVkU2Vzc2lvbiIsImZhbGxiYWNrU2Vzc2lvbiIsImZpbmFsU2Vzc2lvbiIsIlNJR05fSU5fRVJST1IiLCJzaWduT3V0IiwiU0lHTl9PVVRfU1VDQ0VTUyIsImNvbmZpcm1TaWduVXAiLCJyZXF1ZXN0UGFzc3dvcmRSZXNldCIsImZvcmdvdFBhc3N3b3JkU3VjY2VlZGVkIiwic3VjY2VzcyIsImZvcmdvdFBhc3N3b3JkIiwiRk9SR09UX1BBU1NXT1JEX1NVQ0NFU1MiLCJGT1JHT1RfUEFTU1dPUkRfRVJST1IiLCJzZW5kVmVyaWZpY2F0aW9uRW1haWwiLCJlbWFpbE9wdGlvbnMiLCJzdWJqZWN0IiwidmVyaWZpY2F0aW9uRW1haWxTdWJqZWN0IiwidGVtcGxhdGUiLCJ2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlIiwidGV4dCIsInZlcmlmaWNhdGlvbkVtYWlsVGV4dCIsIkNPTkZJUk1fU0lHTl9VUF9FUlJPUiIsInRoZW4iLCJyZXNldFBhc3N3b3JkIiwiUkVTRVRfUEFTU1dPUkRfU1VDQ0VTUyIsIlJFU0VUX1BBU1NXT1JEX0VSUk9SIiwiY29tcGxldGVQYXNzd29yZFJlc2V0IiwidXBkYXRlUGFzc3dvcmQiLCJuZXdQYXNzd29yZCIsInVwZGF0ZVVzZXJBZGFwdGVyIiwidXBkYXRlQWRhcHRlciIsInVwZGF0ZVVzZXJBZGFwdGVyT3B0aW9ucyIsInVwZGF0ZU9wdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLGlCQUFpQixRQUFPLDRDQUE0QztBQUM1RSxTQUFRQyxjQUFjLFFBQU8sNEJBQTRCO0FBQ3pELFNBQVFDLFdBQVcsRUFBRUMsUUFBUSxFQUFFQyxjQUFjLEVBQUVDLFdBQVcsRUFBRUMsY0FBYyxRQUFPLHFCQUFxQjtBQUN0RyxTQUFRQyxpQkFBaUIsUUFBTyxtQ0FBbUM7QUFDbkUsU0FDRUMscUJBQXFCLEVBQ3JCQyx5QkFBeUIsRUFDekJDLGNBQWNDLHFCQUFxQixFQUNuQ0MsZ0JBQWdCLEVBQ2hCQyxZQUFZLFFBQ1AseUJBQXlCO0FBQ2hDLFNBQVFDLGlCQUFpQixRQUFPLDZCQUE2QjtBQUM3RCxTQUFRQyxrQkFBa0IsRUFBRUMsZ0JBQWdCLEVBQUVDLGdCQUFnQixRQUFPLDhCQUE4QjtBQUNuRyxTQUFRQyx3QkFBd0IsUUFBTyxzQ0FBc0M7QUFRN0UsTUFBTUMsWUFBWTtBQUNsQixNQUFNQyw0QkFBNEI7SUFBQztJQUFVO0NBQVc7QUFDeEQsTUFBTUMsd0JBQXdCLElBQUlDLElBQUk7SUFDcEM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFDRCxNQUFNQyxzQkFBc0I7QUFDNUIsTUFBTUMscUJBQXFCLENBQUNDLE9BQzFCLENBQUMsQ0FB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
|
|
930
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy91c2VyQWN0aW9ucy91c2VyQWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt2YWxpZGF0ZVVzZXJJbnB1dH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuaW1wb3J0IHtVU0VSX0NPTlNUQU5UU30gZnJvbSAnLi4vLi4vc3RvcmVzL3VzZXJTdG9yZS5qcyc7XG5pbXBvcnQge2FwcE11dGF0aW9uLCBhcHBRdWVyeSwgcHVibGljTXV0YXRpb24sIHB1YmxpY1F1ZXJ5LCByZWZyZXNoU2Vzc2lvbn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcbmltcG9ydCB7Y3JlYXRlQmFzZUFjdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL2Jhc2VBY3Rpb25GYWN0b3J5LmpzJztcbmltcG9ydCB7XG4gIGNsZWFyUGVyc2lzdGVkU2Vzc2lvbixcbiAgaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZSxcbiAgaXNMb2dnZWRJbiBhcyBpc0xvZ2dlZEluV2l0aFN0b3JhZ2UsXG4gIG5vcm1hbGl6ZVNlc3Npb24sXG4gIHN0b3JlU2Vzc2lvblxufSBmcm9tICcuLi8uLi91dGlscy9zZXNzaW9uLmpzJztcbmltcG9ydCB7Z2V0Q29uZmlnRnJvbUZsdXh9IGZyb20gJy4uLy4uL3V0aWxzL2NvbmZpZ1V0aWxzLmpzJztcbmltcG9ydCB7Y2xlYXJDYWNoZWRSZXF1ZXN0LCBnZXRDYWNoZWRSZXF1ZXN0LCBzZXRDYWNoZWRSZXF1ZXN0fSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuaW1wb3J0IHtzeW5jUGVyc29uYVRhZ3NUb1Nlc3Npb259IGZyb20gJy4uL3BlcnNvbmFBY3Rpb25zL3BlcnNvbmFBY3Rpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhBY3Rpb24sIEZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7VXNlcn0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuaW1wb3J0IHR5cGUge0FwaVJlc3VsdHNUeXBlLCBTZXNzaW9uVHlwZX0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcbmltcG9ydCB0eXBlIHtCYXNlQWRhcHRlck9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvckZhY3RvcnkuanMnO1xuaW1wb3J0IHR5cGUge0FjdGlvblJlcXVlc3RPcHRpb25zfSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuXG5jb25zdCBEQVRBX1RZUEUgPSAndXNlcnMnO1xuY29uc3QgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEUyA9IFsndXNlcklkJywgJ3VzZXJuYW1lJ107XG5jb25zdCBTRU5TSVRJVkVfVVNFUl9GSUVMRFMgPSBuZXcgU2V0KFtcbiAgJ3Bhc3N3b3JkJyxcbiAgJ3NhbHQnLFxuICAndG9rZW4nLFxuICAncmVmcmVzaFRva2VuJyxcbiAgJ3ZlcmlmaWVkRW1haWxDb2RlJyxcbiAgJ3ZlcmlmaWVkU21zQ29kZSdcbl0pO1xuY29uc3QgSU5WQUxJRF9GSUVMRF9SRUdFWCA9IC9DYW5ub3QgcXVlcnkgZmllbGQgXCIoW15cIl0rKVwiL2c7XG5jb25zdCBoYXNTZXNzaW9uSWRlbnRpdHkgPSAodXNlcj86IFBhcnRpYWw8VXNlcj4gfCBudWxsKTogYm9vbGVhbiA9PlxuICAhISh1c2VyICYmICgodXNlciBhcyBhbnkpLl9pZCB8fCAodXNlciBhcyBhbnkpLnVzZXJJZCB8fCAodXNlciBhcyBhbnkpLnVzZXJuYW1lIHx8ICh1c2VyIGFzIGFueSkuZW1haWwpKTtcblxuY29uc3Qgc2FuaXRpemVVcGRhdGVVc2VySW5wdXQgPSAodXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+ID0ge30sIGN1cnJlbnRTZXNzaW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogUGFydGlhbDxVc2VyPiA9PiB7XG4gIGNvbnN0IG5leHRVc2VyID0gT2JqZWN0LmVudHJpZXModXNlcklucHV0KS5yZWR1Y2UoKHVzZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBbZmllbGQsIHZhbHVlXSkgPT4ge1xuICAgIGlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmKGZpZWxkID09PSAncGFzc3dvcmQnKSB7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xuXG4gICAgICBpZihwYXNzd29yZCkge1xuICAgICAgICB1c2VyLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmKGZpZWxkID09PSAndXNlcklkJykge1xuICAgICAgdXNlci51c2VySWQgPSB2YWx1ZTtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRTZXNzaW9uW2ZpZWxkXTtcblxuICAgIGlmKFN0cmluZyh2YWx1ZSkgIT09IFN0cmluZyhjdXJyZW50VmFsdWUgPz8gJycpKSB7XG4gICAgICB1c2VyW2ZpZWxkXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIG5leHRVc2VyIGFzIFBhcnRpYWw8VXNlcj47XG59O1xuXG5jb25zdCBzeW5jU3RvcmVkU2Vzc2lvbiA9IGFzeW5jIChmbHV4OiBGbHV4RnJhbWV3b3JrLCBzZXNzaW9uUGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBQcm9taXNlPFNlc3Npb25UeXBlPiA9PiB7XG4gIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJldHVybiBzdG9yZVNlc3Npb24oZmx1eCwgey4uLmN1cnJlbnRTZXNzaW9uLCAuLi5zZXNzaW9uUGF0Y2h9KTtcbn07XG5cbmNvbnN0IGdldFNlc3Npb25QYXlsb2FkID0gKHBheWxvYWQ6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGlmKHBheWxvYWQgJiYgdHlwZW9mIHBheWxvYWQgPT09ICdvYmplY3QnICYmICdzZXNzaW9uJyBpbiAocGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICByZXR1cm4gKCgocGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuc2Vzc2lvbikgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG5cbiAgcmV0dXJuIChwYXlsb2FkICYmIHR5cGVvZiBwYXlsb2FkID09PSAnb2JqZWN0JyA/IHBheWxvYWQgOiB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5jb25zdCBnZXRGaWVsZFJvb3QgPSAoZmllbGQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBmaWVsZC50cmltKCk7XG4gIGNvbnN0IG1hdGNoID0gdHJpbW1lZC5tYXRjaCgvXltBLVphLXpfXVtBLVphLXowLTlfXSovKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiAnJztcbn07XG5cbmNvbnN0IHNhbml0aXplVXNlclByb3BzID0gKHByb3BzOiBzdHJpbmdbXSA9IFtdLCBmYWxsYmFja1Byb3BzOiBzdHJpbmdbXSA9IERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFMpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgc2FuaXRpemVkID0gcHJvcHMucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBnZXRGaWVsZFJvb3QoZmllbGQpO1xuXG4gICAgaWYoIXJvb3QgfHwgU0VOU0lUSVZFX1VTRVJfRklFTERTLmhhcyhyb290KSB8fCBzZWVuLmhhcyhmaWVsZCkpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIHNlZW4uYWRkKGZpZWxkKTtcbiAgICBsaXN0LnB1c2goZmllbGQpO1xuICAgIHJldHVybiBsaXN0O1xuICB9LCBbXSk7XG5cbiAgaWYoc2FuaXRpemVkLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gc2FuaXRpemVkO1xuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrUHJvcHMucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBnZXRGaWVsZFJvb3QoZmllbGQpO1xuXG4gICAgaWYoIXJvb3QgfHwgU0VOU0lUSVZFX1VTRVJfRklFTERTLmhhcyhyb290KSB8fCBzZWVuLmhhcyhmaWVsZCkpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIHNlZW4uYWRkKGZpZWxkKTtcbiAgICBsaXN0LnB1c2goZmllbGQpO1xuICAgIHJldHVybiBsaXN0O1xuICB9LCBbXSk7XG59O1xuXG5jb25zdCBnZXRJbnZhbGlkRmllbGRzID0gKGVycm9yOiB1bmtub3duKTogU2V0PHN0cmluZz4gPT4ge1xuICBjb25zdCBlcnJvcnMgPSAoZXJyb3IgYXMgYW55KT8uZXJyb3JzIHx8IChlcnJvciBhcyBhbnkpPy5zb3VyY2U/LmVycm9ycyB8fCBbXTtcbiAgY29uc3QgaW52YWxpZEZpZWxkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGVycm9ycy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnID8gaXRlbSA6IGl0ZW0/Lm1lc3NhZ2UgfHwgJyc7XG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gSU5WQUxJRF9GSUVMRF9SRUdFWC5leGVjKG1lc3NhZ2UpO1xuXG4gICAgd2hpbGUobWF0Y2gpIHtcbiAgICAgIGludmFsaWRGaWVsZHMuYWRkKG1hdGNoWzFdKTtcbiAgICAgIG1hdGNoID0gSU5WQUxJRF9GSUVMRF9SRUdFWC5leGVjKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIElOVkFMSURfRklFTERfUkVHRVgubGFzdEluZGV4ID0gMDtcbiAgfSk7XG5cbiAgcmV0dXJuIGludmFsaWRGaWVsZHM7XG59O1xuXG5jb25zdCBnZXRQYXNzd29yZFJlc2V0SWRlbnRpZmllciA9IChyZXF1ZXN0OiBzdHJpbmcgfCBQYXNzd29yZFJlc2V0UmVxdWVzdCk6IHtcbiAgcmVhZG9ubHkgaWRlbnRpZmllcjogc3RyaW5nO1xuICByZWFkb25seSB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJyB8ICd1c2VybmFtZSc7XG59ID0+IHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJ1xuICAgID8gU3RyaW5nKHJlcXVlc3QgfHwgJycpLnRyaW0oKVxuICAgIDogU3RyaW5nKHJlcXVlc3QuZW1haWwgfHwgcmVxdWVzdC5waG9uZSB8fCByZXF1ZXN0LnVzZXJuYW1lIHx8ICcnKS50cmltKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZGVudGlmaWVyLFxuICAgIHR5cGU6IHR5cGVvZiByZXF1ZXN0ICE9PSAnc3RyaW5nJyAmJiByZXF1ZXN0LnBob25lID8gJ3Bob25lJyA6IGlkZW50aWZpZXIuaW5jbHVkZXMoJ0AnKSA/ICdlbWFpbCcgOiAndXNlcm5hbWUnXG4gIH07XG59O1xuXG5jb25zdCBnZXRQYXNzd29yZFJlc2V0VHlwZSA9IChjb25maXJtYXRpb246IFBhc3N3b3JkUmVzZXRDb25maXJtYXRpb24pOiAnZW1haWwnIHwgJ3Bob25lJyA9PlxuICBjb25maXJtYXRpb24udHlwZSB8fCAoY29uZmlybWF0aW9uLnBob25lID8gJ3Bob25lJyA6ICdlbWFpbCcpO1xuXG5jb25zdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkgPSBhc3luYyA8VD4oXG4gIHJlcXVlc3RXaXRoUHJvcHM6IChwcm9wczogc3RyaW5nW10pID0+IFByb21pc2U8VD4sXG4gIHByb3BzOiBzdHJpbmdbXSxcbiAgZmFsbGJhY2tQcm9wczogc3RyaW5nW10gPSBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3Qgc2FmZVByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMocHJvcHMsIGZhbGxiYWNrUHJvcHMpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlcXVlc3RXaXRoUHJvcHMoc2FmZVByb3BzKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnN0IGludmFsaWRGaWVsZHMgPSBnZXRJbnZhbGlkRmllbGRzKGVycm9yKTtcblxuICAgIGlmKGludmFsaWRGaWVsZHMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0cnlQcm9wcyA9IHNhZmVQcm9wcy5maWx0ZXIoKGZpZWxkKSA9PiAhaW52YWxpZEZpZWxkcy5oYXMoZ2V0RmllbGRSb290KGZpZWxkKSkpO1xuXG4gICAgaWYocmV0cnlQcm9wcy5sZW5ndGggPT09IDAgfHwgcmV0cnlQcm9wcy5sZW5ndGggPT09IHNhZmVQcm9wcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0V2l0aFByb3BzKHJldHJ5UHJvcHMpO1xuICB9XG59O1xuXG5leHBvcnQgdHlwZSBVc2VyQWRhcHRlck9wdGlvbnMgPSBCYXNlQWRhcHRlck9wdGlvbnM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvbnNPcHRpb25zIHtcbiAgcmVhZG9ubHkgdXNlckFkYXB0ZXI/OiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBVc2VyQWRhcHRlck9wdGlvbnMpID0+IGFueTtcbiAgcmVhZG9ubHkgdXNlckFkYXB0ZXJPcHRpb25zPzogVXNlckFkYXB0ZXJPcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmaWNhdGlvbkVtYWlsT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHN1YmplY3Q/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRlbXBsYXRlPzogc3RyaW5nO1xuICByZWFkb25seSB0ZXh0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkUmVzZXRSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgZW1haWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBob25lPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZFJlc2V0Q29uZmlybWF0aW9uIGV4dGVuZHMgUGFzc3dvcmRSZXNldFJlcXVlc3Qge1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhc3N3b3JkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU/OiAnZW1haWwnIHwgJ3Bob25lJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyQXBpUmVzdWx0c1R5cGUge1xuICByZWFkb25seSB1c2Vyczoge1xuICAgIHJlYWRvbmx5IGFjdGl2ZUNvdW50PzogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGFkZFVzZXI/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGNvbmZpcm1Db2RlPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBkZWFjdGl2YXRlPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBmb3Jnb3RQYXNzd29yZD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgaXRlbUJ5SWQ/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGdldFVzZXJCeUF0dHJpYnV0ZT86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgZ2V0VXNlckJ5U2Vzc2lvbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgaXRlbUJ5U2Vzc2lvbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgaXRlbUJ5VG9rZW4/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGl0ZW1CeVVzZXJuYW1lPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBnZXRVc2VyTGlzdD86IFVzZXJbXTtcbiAgICByZWFkb25seSBsaXN0PzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3RCeUNvbm5lY3Rpb24/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgbGlzdEJ5TGF0ZXN0PzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3RCeVJlYWN0aW9ucz86IFVzZXJbXTtcbiAgICByZWFkb25seSBsaXN0QnlUYWdzPzogVXNlcltdO1xuICAgIHJlYWRvbmx5IHNlYXJjaD86IFVzZXJbXTtcbiAgICByZWFkb25seSByZWZyZXNoU2Vzc2lvbj86IFNlc3Npb25UeXBlO1xuICAgIHJlYWRvbmx5IHJlbW92ZT86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgcmVzZXRQYXNzd29yZD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgc2F2ZUJpbGxpbmdDYXJkPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBzZW5kVmVyaWZpY2F0aW9uRW1haWw/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHNlc3Npb24/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHNpZ25Jbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgc2lnblVwPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBkZWxldGVCaWxsaW5nQ2FyZD86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgdXBkYXRlVXNlcj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgdXBkYXRlUGFzc3dvcmQ/OiBQYXJ0aWFsPGJvb2xlYW4+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZVBsYW4/OiBQYXJ0aWFsPFVzZXI+O1xuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0VXNlclZhbGlkYXRvciA9IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFVzZXJBZGFwdGVyT3B0aW9ucykgPT4ge1xuICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZVVzZXJJbnB1dChpbnB1dCk7XG5cbiAgaWYob3B0aW9ucz8uc3RyaWN0ICYmICF2YWxpZGF0ZWQudXNlcm5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXJuYW1lIGlzIHJlcXVpcmVkIGluIHN0cmljdCBtb2RlJyk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSB1c2VyQWN0aW9ucyB7XG4gIGFkZFVzZXI6ICh1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4sIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICBjb25maXJtQ29kZTogKGNvZGU6IG51bWJlciwge3R5cGUsIHZhbHVlfToge3R5cGU6ICdlbWFpbCcgfCAncGhvbmUnOyB2YWx1ZTogc3RyaW5nfSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgY29uZmlybVNpZ25VcDogKGNvZGU6IHN0cmluZywgdHlwZTogJ2VtYWlsJyB8ICdwaG9uZScsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIGN1cnJlbnRBdXRoZW50aWNhdGVkVXNlcjogKHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIGxpc3Q6ICh1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBsaXN0QnlDb25uZWN0aW9uOiAodXNlcklkOiBzdHJpbmcsIGZyb20/OiBudW1iZXIsIHRvPzogbnVtYmVyLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBpdGVtQnlJZDogKHVzZXJJZDogc3RyaW5nLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgZ2V0VXNlckJ5QXR0cmlidXRlOiAoXG4gICAgYXR0cmlidXRlOiAnZW1haWwnIHwgJ3VzZXJuYW1lJyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIHVzZXJQcm9wcz86IHN0cmluZ1tdLFxuICAgIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnNcbiAgKSA9PiBQcm9taXNlPFVzZXI+O1xuICBkZWxldGVCaWxsaW5nQ2FyZDogKHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICBsaXN0QnlMYXRlc3Q6ICh1c2VybmFtZT86IHN0cmluZywgZnJvbT86IG51bWJlciwgdG8/OiBudW1iZXIsIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXJbXT47XG4gIGxpc3RCeVJlYWN0aW9uczogKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgcmVhY3Rpb25OYW1lczogc3RyaW5nW10sXG4gICAgZnJvbT86IG51bWJlcixcbiAgICB0bz86IG51bWJlcixcbiAgICBwZXJzb25hUHJvcHM/OiBzdHJpbmdbXSxcbiAgICByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zXG4gICkgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBsaXN0QnlUYWdzOiAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICB0YWdOYW1lczogc3RyaW5nW10sXG4gICAgZnJvbT86IG51bWJlcixcbiAgICB0bz86IG51bWJlcixcbiAgICBwZXJzb25hUHJvcHM/OiBzdHJpbmdbXSxcbiAgICByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zXG4gICkgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBmb3Jnb3RQYXNzd29yZDogKHVzZXJuYW1lOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIHJlcXVlc3RQYXNzd29yZFJlc2V0OiAocmVxdWVzdDogc3RyaW5nIHwgUGFzc3dvcmRSZXNldFJlcXVlc3QsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIGlzTG9nZ2VkSW46ICgpID0+IGJvb2xlYW47XG4gIHJlZnJlc2hTZXNzaW9uOiAodG9rZW4/OiBzdHJpbmcsIGV4cGlyZXM/OiBudW1iZXIsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8U2Vzc2lvblR5cGU+O1xuICByZW1vdmU6ICh1c2VySWQ6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgcmVzZXRQYXNzd29yZDogKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGNvZGU6IHN0cmluZywgdHlwZTogJ2VtYWlsJyB8ICdwaG9uZScsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIGNvbXBsZXRlUGFzc3dvcmRSZXNldDogKGNvbmZpcm1hdGlvbjogUGFzc3dvcmRSZXNldENvbmZpcm1hdGlvbiwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgc2VhcmNoOiAocXVlcnk6IHN0cmluZywgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcltdPjtcbiAgc2VuZFZlcmlmaWNhdGlvbkVtYWlsOiAoXG4gICAgZW1haWw6IHN0cmluZyxcbiAgICBlbWFpbE9wdGlvbnM/OiBWZXJpZmljYXRpb25FbWFpbE9wdGlvbnMsXG4gICAgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9uc1xuICApID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIHNlc3Npb246ICh1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgc2F2ZUJpbGxpbmdDYXJkOiAoY2FyZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICBzaWduSW46ICh1c2VyOiBQYXJ0aWFsPFVzZXI+LCBleHBpcmVzPzogbnVtYmVyLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFNlc3Npb25UeXBlPjtcbiAgc2lnbk91dDogKHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIHNpZ25VcDogKHVzZXJJbnB1dDogUGFydGlhbDxVc2VyPiwgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIHVwZGF0ZVBhc3N3b3JkOiAocGFzc3dvcmQ6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgdXBkYXRlVXNlcjogKHVzZXJJbnB1dDogUGFydGlhbDxVc2VyPiwgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIHVwZGF0ZVBsYW46IChwbGFuSWQ6IHN0cmluZywgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIHVwZGF0ZVVzZXJBZGFwdGVyOiAoYWRhcHRlcjogKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogVXNlckFkYXB0ZXJPcHRpb25zKSA9PiBhbnkpID0+IHZvaWQ7XG4gIHVwZGF0ZVVzZXJBZGFwdGVyT3B0aW9uczogKG9wdGlvbnM6IFVzZXJBZGFwdGVyT3B0aW9ucykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVVzZXJBY3Rpb25zID0gKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBvcHRpb25zPzogVXNlckFjdGlvbnNPcHRpb25zXG4pOiB1c2VyQWN0aW9ucyA9PiB7XG4gIGNvbnN0IHVzZXJCYXNlID0gY3JlYXRlQmFzZUFjdGlvbnMoZmx1eCwgZGVmYXVsdFVzZXJWYWxpZGF0b3IsIHtcbiAgICBhZGFwdGVyOiBvcHRpb25zPy51c2VyQWRhcHRlcixcbiAgICBhZGFwdGVyT3B0aW9uczogb3B0aW9ucz8udXNlckFkYXB0ZXJPcHRpb25zXG4gIH0pO1xuICBjb25zdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzID0gYXN5bmMgKHVzZXJJZCA9ICcnKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICd1c2VyLmxpc3QnKTtcbiAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgJ3VzZXIubGlzdEJ5TGF0ZXN0Jyk7XG4gICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICd1c2VyLmxpc3RCeVRhZ3MnKTtcbiAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgJ3VzZXIuc2VhcmNoJyk7XG4gICAgaWYodXNlcklkKSB7XG4gICAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgYHVzZXIuaXRlbUJ5SWQ6JHt1c2VySWR9YCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFkZFVzZXIgPSBhc3luYyAoXG4gICAgdXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCB7dXNlcm5hbWUsIGVtYWlsLCBwYXNzd29yZH0gPSB1c2VySW5wdXQ7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICB1c2VyOiB7XG4gICAgICAgIHR5cGU6ICdVc2VySW5wdXQhJyxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBVc2VyQXBpUmVzdWx0c1R5cGUpOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSBkYXRhPy51c2Vycz8uYWRkVXNlciB8fCB7fTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuQUREX0lURU1fU1VDQ0VTUyxcbiAgICAgICAgdXNlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHVyblByb3BzID0gc2FuaXRpemVVc2VyUHJvcHModXNlclByb3BzLCBbXG4gICAgICAnYWRkZWQnLFxuICAgICAgJ2FkZHJlc3MnLFxuICAgICAgJ2RvYicsXG4gICAgICAnY2l0eScsXG4gICAgICAnY291bnRyeScsXG4gICAgICAnZ2VuZGVyJyxcbiAgICAgICdpbWFnZVVybCcsXG4gICAgICAnbGF0aXR1ZGUnLFxuICAgICAgJ2xvbmdpdHVkZScsXG4gICAgICAnbWFpbGluZ0xpc3QnLFxuICAgICAgJ21vZGlmaWVkJyxcbiAgICAgICdzdGF0ZScsXG4gICAgICAndGh1bWJVcmwnLFxuICAgICAgJ3VzZXJBY2Nlc3MnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnXG4gICAgXSk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHB1YmxpY011dGF0aW9uPFVzZXJBcGlSZXN1bHRzVHlwZT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdhZGRVc2VyJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNpZ25VcCA9IGFzeW5jIChcbiAgICB1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4sXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IHt1c2VybmFtZSwgZW1haWwsIHBhc3N3b3JkfSA9IHVzZXJJbnB1dDtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGV4cGlyZXM6IHtcbiAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgIHZhbHVlOiAxNVxuICAgICAgfSxcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgIHVzZXJuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFVzZXJBcGlSZXN1bHRzVHlwZSk6IFByb21pc2U8Rmx1eEFjdGlvbj4gPT4ge1xuICAgICAgY29uc3QgdXNlciA9IGRhdGE/LnVzZXJzPy5zaWduVXAgfHwge307XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fVVBfU1VDQ0VTUyxcbiAgICAgICAgdXNlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHVyblByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMoW1xuICAgICAgJ2FkZGVkJyxcbiAgICAgICdtb2RpZmllZCcsXG4gICAgICAndXNlcklkJyxcbiAgICAgICd1c2VybmFtZScsXG4gICAgICAuLi51c2VyUHJvcHNcbiAgICBdKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3NpZ25VcCcsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIHJldHVyblByb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9VUF9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlVXNlciA9IGFzeW5jIChcbiAgICB1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4sXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IHVwZGF0ZUlucHV0ID0gc2FuaXRpemVVcGRhdGVVc2VySW5wdXQodXNlcklucHV0LCAoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJywge30pIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgY29uc3Qge1xuICAgICAgYmlydGhkYXRlLFxuICAgICAgZG9iLFxuICAgICAgZW1haWwsXG4gICAgICBmaXJzdE5hbWUsXG4gICAgICBnZW5kZXIsXG4gICAgICBsYXN0TmFtZSxcbiAgICAgIG1haWxpbmdMaXN0LFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBwaG9uZSxcbiAgICAgIHVzZXJJZCxcbiAgICAgIHVzZXJuYW1lXG4gICAgfSA9IHVwZGF0ZUlucHV0O1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgYmlydGhkYXRlOiBiaXJ0aGRhdGUgPz8gZG9iLFxuICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgIGZpcnN0TmFtZSxcbiAgICAgICAgICBnZW5kZXIsXG4gICAgICAgICAgbGFzdE5hbWUsXG4gICAgICAgICAgbWFpbGluZ0xpc3QsXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgcGhvbmUsXG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHVzZXJuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHVzZXJzID0gKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2VycztcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2Vycz8udXBkYXRlVXNlciB8fCB7fTtcblxuICAgICAgaWYoKHVzZXIgYXMgYW55KT8udXNlcklkICYmICh1c2VyIGFzIGFueSkudXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgdXNlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX0lURU1fU1VDQ0VTUyxcbiAgICAgICAgdXNlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHVyblByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMoW1xuICAgICAgJ2FkZGVkJyxcbiAgICAgICdiaXJ0aGRhdGUnLFxuICAgICAgJ2NpdHknLFxuICAgICAgJ2NvdW50cnknLFxuICAgICAgJ2VtYWlsJyxcbiAgICAgICdmaXJzdE5hbWUnLFxuICAgICAgJ2dlbmRlcicsXG4gICAgICAnaW1hZ2VDb3VudCcsXG4gICAgICAnaW1hZ2VVcmwnLFxuICAgICAgJ2xhc3ROYW1lJyxcbiAgICAgICdsYXRpdHVkZScsXG4gICAgICAnbG9uZ2l0dWRlJyxcbiAgICAgICdtYWlsaW5nTGlzdCcsXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3Bob25lJyxcbiAgICAgICdzdGF0ZScsXG4gICAgICAndGh1bWJVcmwnLFxuICAgICAgJ3VzZXJBY2Nlc3MnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAndXBkYXRlVXNlcicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIHJldHVyblByb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcyhTdHJpbmcodXNlcklkIHx8ICcnKSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1Db2RlID0gYXN5bmMgKFxuICAgIGNvZGU6IG51bWJlcixcbiAgICB7dHlwZSwgdmFsdWV9OiB7dHlwZTogJ2VtYWlsJyB8ICdwaG9uZSc7IHZhbHVlOiBzdHJpbmd9LFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgY29kZToge1xuICAgICAgICB0eXBlOiAnSW50IScsXG4gICAgICAgIHZhbHVlOiBjb2RlXG4gICAgICB9LFxuICAgICAgdHlwZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgIHZhbHVlOiB0eXBlXG4gICAgICB9LFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAnY29uZmlybUNvZGUnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSk7XG4gICAgY29uc3QgY29uZmlybWVkID0gISFkYXRhPy51c2Vycz8uY29uZmlybUNvZGU7XG5cbiAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtjb25maXJtZWQsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkNPTkZJUk1fU0lHTl9VUF9TVUNDRVNTfSk7XG5cbiAgICByZXR1cm4gY29uZmlybWVkO1xuICB9O1xuXG4gIGNvbnN0IHJlbW92ZSA9IGFzeW5jICh1c2VySWQ6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXJJZDoge1xuICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgdmFsdWU6IHVzZXJJZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LnJlbW92ZSB8fCB7fTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHt0eXBlOiBVU0VSX0NPTlNUQU5UUy5SRU1PVkVfSVRFTV9TVUNDRVNTLCB1c2VyfSk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYXBwTXV0YXRpb24oZmx1eCwgJ3JlbW92ZScsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFtdLCB7b25TdWNjZXNzfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXModXNlcklkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2Vzc2lvbiA9IGFzeW5jICh1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgYXN5bmMgKHNlc3Npb25Qcm9wcykgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGFwcFF1ZXJ5KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnZ2V0VXNlckJ5U2Vzc2lvbicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAge30sXG4gICAgICAgIHNlc3Npb25Qcm9wc1xuICAgICAgKSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgdXNlcnM/OiB7Z2V0VXNlckJ5U2Vzc2lvbj86IFBhcnRpYWw8VXNlcj59O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gZGF0YT8udXNlcnM/LmdldFVzZXJCeVNlc3Npb24gfHwge307XG5cbiAgICAgIGlmKCFoYXNTZXNzaW9uSWRlbnRpdHkoc2Vzc2lvbkRhdGEpKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyUGVyc2lzdGVkU2Vzc2lvbihmbHV4KTtcbiAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fRVJST1J9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dFNlc3Npb24gPSBhd2FpdCBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCBzZXNzaW9uRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtzZXNzaW9uOiBuZXh0U2Vzc2lvbiwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fU1VDQ0VTU30pO1xuICAgICAgYXdhaXQgc3luY1BlcnNvbmFUYWdzVG9TZXNzaW9uKGZsdXgsIFN0cmluZygobmV4dFNlc3Npb24gYXMgYW55KT8ucGVyc29uYUlkIHx8ICcnKSk7XG4gICAgICByZXR1cm4gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIG5leHRTZXNzaW9uKSB8fCBuZXh0U2Vzc2lvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIGFzIFVzZXI7XG4gICAgfSxcbiAgICB1c2VyUHJvcHMsXG4gICAgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEU1xuICApO1xuXG4gIGNvbnN0IGl0ZW1CeUlkID0gYXN5bmMgKHVzZXJJZDogc3RyaW5nLCB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyPihmbHV4LCBgdXNlci5pdGVtQnlJZDoke3VzZXJJZH1gLCB7dXNlcklkLCB1c2VyUHJvcHN9LCByZXF1ZXN0T3B0aW9ucyk7XG5cbiAgICBpZihjYWNoZWRSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXJJZDoge1xuICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgdmFsdWU6IHVzZXJJZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgZ2V0VXNlckJ5SWQgPSAoKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUgJiB7XG4gICAgICAgIHVzZXJzPzoge2dldFVzZXJCeUlkPzogUGFydGlhbDxVc2VyPn07XG4gICAgICB9KT8udXNlcnM/LmdldFVzZXJCeUlkKSB8fCB7fTtcblxuICAgICAgaWYodXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgZ2V0VXNlckJ5SWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0lURU1fU1VDQ0VTUywgdXNlcjogZ2V0VXNlckJ5SWR9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aEludmFsaWRGaWVsZFJldHJ5KFxuICAgICAgKHNhZmVVc2VyUHJvcHMpID0+IGFwcFF1ZXJ5KGZsdXgsICdnZXRVc2VyQnlJZCcsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHVzZXJQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcj4oZmx1eCwgYHVzZXIuaXRlbUJ5SWQ6JHt1c2VySWR9YCwge3VzZXJJZCwgdXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXIsIHJlcXVlc3RPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBnZXRVc2VyQnlBdHRyaWJ1dGUgPSBhc3luYyAoXG4gICAgYXR0cmlidXRlOiAnZW1haWwnIHwgJ3VzZXJuYW1lJyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkQXR0cmlidXRlID0gU3RyaW5nKGF0dHJpYnV0ZSB8fCAnJykudHJpbSgpIGFzICdlbWFpbCcgfCAndXNlcm5hbWUnO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xuICAgIGxldCBtYXRjaGluZ1VzZXI6IFBhcnRpYWw8VXNlcj4gPSB7fTtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBnZXRDYWNoZWRSZXF1ZXN0PFVzZXI+KFxuICAgICAgZmx1eCxcbiAgICAgIGB1c2VyLmdldFVzZXJCeUF0dHJpYnV0ZToke25vcm1hbGl6ZWRBdHRyaWJ1dGV9OiR7bm9ybWFsaXplZFZhbHVlfWAsXG4gICAgICB7YXR0cmlidXRlOiBub3JtYWxpemVkQXR0cmlidXRlLCB1c2VyUHJvcHMsIHZhbHVlOiBub3JtYWxpemVkVmFsdWV9LFxuICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBhdHRyaWJ1dGU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogbm9ybWFsaXplZEF0dHJpYnV0ZVxuICAgICAgfSxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIHR5cGU6ICdTdHJpbmchJyxcbiAgICAgICAgdmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9ICgoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSAmIHtcbiAgICAgICAgdXNlcnM/OiB7Z2V0VXNlckJ5QXR0cmlidXRlPzogUGFydGlhbDxVc2VyPn07XG4gICAgICB9KT8udXNlcnM/LmdldFVzZXJCeUF0dHJpYnV0ZSkgfHwge307XG4gICAgICBtYXRjaGluZ1VzZXIgPSB1c2VyO1xuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0lURU1fU1VDQ0VTUywgdXNlcn0pO1xuICAgIH07XG5cbiAgICBhd2FpdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgICAoc2FmZVVzZXJQcm9wcykgPT4gcHVibGljUXVlcnkoZmx1eCwgJ2dldFVzZXJCeUF0dHJpYnV0ZScsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHVzZXJQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcj4oXG4gICAgICBmbHV4LFxuICAgICAgYHVzZXIuZ2V0VXNlckJ5QXR0cmlidXRlOiR7bm9ybWFsaXplZEF0dHJpYnV0ZX06JHtub3JtYWxpemVkVmFsdWV9YCxcbiAgICAgIHthdHRyaWJ1dGU6IG5vcm1hbGl6ZWRBdHRyaWJ1dGUsIHVzZXJQcm9wcywgdmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZX0sXG4gICAgICBtYXRjaGluZ1VzZXIgYXMgVXNlcixcbiAgICAgIHJlcXVlc3RPcHRpb25zXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBzYXZlQmlsbGluZ0NhcmQgPSBhc3luYyAoXG4gICAgY2FyZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgY2FyZDoge1xuICAgICAgICB0eXBlOiAnQ3JlZGl0Q2FyZElucHV0IScsXG4gICAgICAgIHZhbHVlOiBjYXJkXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gKChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LnNhdmVCaWxsaW5nQ2FyZCkgfHwge307XG5cbiAgICAgIGlmKCh1c2VyIGFzIGFueSk/LnVzZXJJZCAmJiAodXNlciBhcyBhbnkpLnVzZXJJZCA9PT0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpKSB7XG4gICAgICAgIHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIHVzZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlVQREFURV9JVEVNX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKFtcbiAgICAgICdtb2RpZmllZCcsXG4gICAgICAnc3RyaXBlQ2FyZEJyYW5kJyxcbiAgICAgICdzdHJpcGVDYXJkSWQnLFxuICAgICAgJ3N0cmlwZUNhcmRMYXN0NCcsXG4gICAgICAndXNlcklkJyxcbiAgICAgICd1c2VybmFtZScsXG4gICAgICAuLi51c2VyUHJvcHNcbiAgICBdKTtcbiAgICBjb25zdCBzZXNzaW9uVXNlcklkID0gU3RyaW5nKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi51c2VySWQnKSB8fCAnJyk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAnc2F2ZUJpbGxpbmdDYXJkJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKHNlc3Npb25Vc2VySWQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZWxldGVCaWxsaW5nQ2FyZCA9IGFzeW5jIChcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSAoKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8uZGVsZXRlQmlsbGluZ0NhcmQpIHx8IHt9O1xuXG4gICAgICBpZigodXNlciBhcyBhbnkpPy51c2VySWQgJiYgKHVzZXIgYXMgYW55KS51c2VySWQgPT09IGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi51c2VySWQnKSkge1xuICAgICAgICBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCB1c2VyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5VUERBVEVfSVRFTV9TVUNDRVNTLFxuICAgICAgICB1c2VyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmV0dXJuUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyhbXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3N0cmlwZUNhcmRCcmFuZCcsXG4gICAgICAnc3RyaXBlQ2FyZElkJyxcbiAgICAgICdzdHJpcGVDYXJkTGFzdDQnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG4gICAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IFN0cmluZyhmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykgfHwgJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2RlbGV0ZUJpbGxpbmdDYXJkJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICB7fSxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKHNlc3Npb25Vc2VySWQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB1cGRhdGVQbGFuID0gYXN5bmMgKFxuICAgIHBsYW5JZDogc3RyaW5nLFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBuZXh0UGxhbklkID0gU3RyaW5nKHBsYW5JZCB8fCAnJykudHJpbSgpO1xuXG4gICAgaWYoIW5leHRQbGFuSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBzdWJzY3JpcHRpb24gcGxhbklkIGlzIHJlcXVpcmVkIHRvIHVwZGF0ZSBhIHVzZXIgcGxhbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgcGxhbklkOiB7XG4gICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICB2YWx1ZTogbmV4dFBsYW5JZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9ICgoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy51cGRhdGVQbGFuKSB8fCB7fTtcblxuICAgICAgaWYoKHVzZXIgYXMgYW55KT8udXNlcklkICYmICh1c2VyIGFzIGFueSkudXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgdXNlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX0lURU1fU1VDQ0VTUyxcbiAgICAgICAgdXNlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHVyblByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMoW1xuICAgICAgJ21vZGlmaWVkJyxcbiAgICAgICdwbGFuRXhwaXJlcycsXG4gICAgICAncGxhbklkJyxcbiAgICAgICdwbGFuU3RhdHVzJyxcbiAgICAgICdwbGFuU3Vic2NyaXB0aW9uSWQnLFxuICAgICAgJ3N0cmlwZUNhcmRCcmFuZCcsXG4gICAgICAnc3RyaXBlQ2FyZElkJyxcbiAgICAgICdzdHJpcGVDYXJkTGFzdDQnLFxuICAgICAgJ3VzZXJBY2Nlc3MnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG4gICAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IFN0cmluZyhmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykgfHwgJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3VwZGF0ZVBsYW4nLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICByZXR1cm5Qcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoc2Vzc2lvblVzZXJJZCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxpc3QgPSBhc3luYyAodXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3QnLCB7dXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSAoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy5nZXRVc2VyTGlzdCB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnZ2V0VXNlckxpc3QnLCBEQVRBX1RZUEUsIHt9LCBzYWZlVXNlclByb3BzLCB7b25TdWNjZXNzfSksXG4gICAgICB1c2VyUHJvcHMsXG4gICAgICBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4gICAgKTtcblxuICAgIHJldHVybiBzZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdCcsIHt1c2VyUHJvcHN9LCByZXN1bHQgYXMgVXNlcltdLCByZXF1ZXN0T3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3QgbGlzdEJ5TGF0ZXN0ID0gYXN5bmMgKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcgPSAnJyxcbiAgICBmcm9tOiBudW1iZXIgPSAwLFxuICAgIHRvOiBudW1iZXIgPSAxMCxcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyW10+ID0+IHtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBnZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdEJ5TGF0ZXN0Jywge3VzZXJuYW1lLCBmcm9tLCB0bywgdXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogZnJvbVxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogdG9cbiAgICAgIH0sXG4gICAgICB1c2VybmFtZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgdmFsdWU6IHVzZXJuYW1lXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8ubGlzdEJ5TGF0ZXN0IHx8IFtdO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe2xpc3QsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9MSVNUX1NVQ0NFU1N9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aEludmFsaWRGaWVsZFJldHJ5KFxuICAgICAgKHNhZmVVc2VyUHJvcHMpID0+IGFwcFF1ZXJ5KGZsdXgsICdsaXN0QnlMYXRlc3QnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBzYWZlVXNlclByb3BzLCB7b25TdWNjZXNzfSksXG4gICAgICB1c2VyUHJvcHMsXG4gICAgICBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4gICAgKTtcblxuICAgIHJldHVybiBzZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdEJ5TGF0ZXN0Jywge3VzZXJuYW1lLCBmcm9tLCB0bywgdXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXJbXSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IGxpc3RCeUNvbm5lY3Rpb24gPSBhc3luYyAoXG4gICAgdXNlcklkOiBzdHJpbmcsXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcltdPiA9PlxuICAgIFtdXG4gIDtcblxuICBjb25zdCBsaXN0QnlSZWFjdGlvbnMgPSBhc3luYyAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICByZWFjdGlvbk5hbWVzOiBzdHJpbmdbXSxcbiAgICBmcm9tOiBudW1iZXIgPSAwLFxuICAgIHRvOiBudW1iZXIgPSAxMCxcbiAgICBwZXJzb25hUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyW10+ID0+XG4gICAgW11cbiAgO1xuXG4gIGNvbnN0IGxpc3RCeVRhZ3MgPSBhc3luYyAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICB0YWdOYW1lczogc3RyaW5nW10sXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgcGVyc29uYVByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3RCeVRhZ3MnLCB7dXNlcm5hbWUsIHRhZ05hbWVzLCBmcm9tLCB0bywgcGVyc29uYVByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogZnJvbVxuICAgICAgfSxcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgdHlwZTogJ1tTdHJpbmchXScsXG4gICAgICAgIHZhbHVlOiB0YWdOYW1lc1xuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogdG9cbiAgICAgIH0sXG4gICAgICB1c2VybmFtZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgdmFsdWU6IHVzZXJuYW1lXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8ubGlzdEJ5VGFncyB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnbGlzdEJ5VGFncycsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHBlcnNvbmFQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcltdPihmbHV4LCAndXNlci5saXN0QnlUYWdzJywge3VzZXJuYW1lLCB0YWdOYW1lcywgZnJvbSwgdG8sIHBlcnNvbmFQcm9wc30sIHJlc3VsdCBhcyBVc2VyW10sIHJlcXVlc3RPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBzZWFyY2ggPSBhc3luYyAocXVlcnk6IHN0cmluZywgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLnNlYXJjaCcsIHtxdWVyeSwgdXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBxdWVyeToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgIHZhbHVlOiBxdWVyeVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LnNlYXJjaCB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnc2VhcmNoJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgc2FmZVVzZXJQcm9wcywge29uU3VjY2Vzc30pLFxuICAgICAgdXNlclByb3BzLFxuICAgICAgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEU1xuICAgICk7XG5cbiAgICByZXR1cm4gc2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLnNlYXJjaCcsIHtxdWVyeSwgdXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXJbXSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IGlzTG9nZ2VkSW4gPSAoKTogYm9vbGVhbiA9PiBpc0xvZ2dlZEluV2l0aFN0b3JhZ2UoZmx1eCk7XG5cbiAgY29uc3QgY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyID0gYXN5bmMgKHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UoZmx1eCk7XG4gICAgcmV0dXJuIChzZXNzaW9uIHx8IHt9KSBhcyBVc2VyO1xuICB9O1xuXG4gIGNvbnN0IHJlZnJlc2hTZXNzaW9uQWN0aW9uID0gYXN5bmMgKHRva2VuPzogc3RyaW5nLCBleHBpcmVzPzogbnVtYmVyLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWZyZXNoU2Vzc2lvbihmbHV4LCB0b2tlbiwgZXhwaXJlcyk7XG4gICAgcmV0dXJuIChyZXN1bHQ/LnJlZnJlc2hTZXNzaW9uIHx8IHt9KSBhcyBTZXNzaW9uVHlwZTtcbiAgfTtcblxuICBjb25zdCBzaWduSW4gPSBhc3luYyAoXG4gICAgdXNlcjogUGFydGlhbDxVc2VyPixcbiAgICBleHBpcmVzPzogbnVtYmVyLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgICBjb25zdCB7ZW1haWwsIHBob25lLCB1c2VybmFtZSwgcGFzc3dvcmR9ID0gdXNlcjtcbiAgICBsZXQgdXNlcklucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBpZih1c2VybmFtZSAmJiBwYXNzd29yZCkge1xuICAgICAgdXNlcklucHV0ID0ge1xuICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgdXNlcm5hbWVcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmKGVtYWlsICYmIHBhc3N3b3JkKSB7XG4gICAgICB1c2VySW5wdXQgPSB7XG4gICAgICAgIGVtYWlsLFxuICAgICAgICBwYXNzd29yZFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYocGhvbmUgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHVzZXJJbnB1dCA9IHtcbiAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgIHBob25lXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXJuYW1lLCBlbWFpbCwgb3IgcGhvbmUgbnVtYmVyIGFuZCBwYXNzd29yZCBhcmUgcmVxdWlyZWQgdG8gc2lnbiBpbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICAgIGNvbnN0IHJlcXVlc3RlZEV4cGlyZXMgPSBNYXRoLm1heCgxLCBOdW1iZXIoZXhwaXJlcyB8fCBjb25maWcuYXBwPy5zZXNzaW9uPy5tYXhNaW51dGVzIHx8IDE1KSk7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXNXaXRoVXNlcklucHV0ID0ge1xuICAgICAgZXhwaXJlczoge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IHJlcXVlc3RlZEV4cGlyZXNcbiAgICAgIH0sXG4gICAgICB1c2VyOiB7XG4gICAgICAgIHR5cGU6ICdVc2VySW5wdXQhJyxcbiAgICAgICAgdmFsdWU6IHVzZXJJbnB1dFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSBhc3luYyAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSk6IFByb21pc2U8Rmx1eEFjdGlvbj4gPT4ge1xuICAgICAgY29uc3QgdXNlcnMgPSAoZGF0YSBhcyBhbnkpPy51c2VycztcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gbm9ybWFsaXplU2Vzc2lvbih1c2Vycz8uc2lnbkluIHx8IHt9KTtcbiAgICAgIGNvbnN0IHN0b3JlZFNlc3Npb24gPSBhd2FpdCBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCBzZXNzaW9uRGF0YSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXNzaW9uOiBzdG9yZWRTZXNzaW9uLFxuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX0lOX1NVQ0NFU1NcbiAgICAgIH0gYXMgRmx1eEFjdGlvbjtcbiAgICB9O1xuXG4gICAgY29uc3QgcGVyZm9ybVNpZ25JbiA9IGFzeW5jIChxdWVyeVZhcmlhYmxlczogYW55KTogUHJvbWlzZTxTZXNzaW9uVHlwZT4gPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvblJlc3VsdCA9IGF3YWl0IHB1YmxpY011dGF0aW9uPFNlc3Npb25UeXBlICYgVXNlckFwaVJlc3VsdHNUeXBlPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3NpZ25JbicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFsnZXhwaXJlcycsICdpc3N1ZWQnLCAndG9rZW4nLCAndXNlcklkJywgJ3VzZXJuYW1lJ10sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgICAgY29uc3QgYmFzZVNlc3Npb24gPSBhd2FpdCBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCBnZXRTZXNzaW9uUGF5bG9hZChzZXNzaW9uUmVzdWx0KSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGh5ZHJhdGVkU2Vzc2lvbiA9IGF3YWl0IHNlc3Npb24oWyd1c2VySWQnLCAncGVyc29uYUlkJywgJ3VzZXJBY2Nlc3MnLCAndXNlcm5hbWUnXSwgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBhd2FpdCBzeW5jUGVyc29uYVRhZ3NUb1Nlc3Npb24oZmx1eCwgU3RyaW5nKChoeWRyYXRlZFNlc3Npb24gYXMgYW55KT8ucGVyc29uYUlkIHx8ICcnKSk7XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrU2Vzc2lvbiA9IGF3YWl0IHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIGJhc2VTZXNzaW9uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgICAgc2Vzc2lvbjogZmFsbGJhY2tTZXNzaW9uLFxuICAgICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fSU5fU1VDQ0VTU1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrU2Vzc2lvbjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmluYWxTZXNzaW9uID0gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oXG4gICAgICAgIGZsdXgsXG4gICAgICAgIChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCBiYXNlU2Vzc2lvbikgfHwgYmFzZVNlc3Npb24pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICApO1xuICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHNlc3Npb246IGZpbmFsU2Vzc2lvbixcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9JTl9TVUNDRVNTXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmaW5hbFNlc3Npb247XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcGVyZm9ybVNpZ25JbihxdWVyeVZhcmlhYmxlc1dpdGhVc2VySW5wdXQpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX0lOX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcyhTdHJpbmcoKHVzZXIgYXMgYW55KT8udXNlcklkIHx8ICcnKSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNpZ25PdXQgPSBhc3luYyAocmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBhd2FpdCBjbGVhclBlcnNpc3RlZFNlc3Npb24oZmx1eCk7XG4gICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7c2Vzc2lvbjoge30sIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fT1VUX1NVQ0NFU1N9KTtcbiAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgY29uZmlybVNpZ25VcCA9IGFzeW5jIChjb2RlOiBzdHJpbmcsIHR5cGU6ICdlbWFpbCcgfCAncGhvbmUnLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4gPT5cbiAgICB0cnVlO1xuXG4gIGNvbnN0IHJlcXVlc3RQYXNzd29yZFJlc2V0ID0gYXN5bmMgKFxuICAgIHJlcXVlc3Q6IHN0cmluZyB8IFBhc3N3b3JkUmVzZXRSZXF1ZXN0LFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGxldCBmb3Jnb3RQYXNzd29yZFN1Y2NlZWRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHtpZGVudGlmaWVyLCB0eXBlfSA9IGdldFBhc3N3b3JkUmVzZXRJZGVudGlmaWVyKHJlcXVlc3QpO1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHR5cGUgPT09ICdwaG9uZScgPyAncGhvbmUnIDogdHlwZSA9PT0gJ2VtYWlsJyA/ICdlbWFpbCcgOiAndXNlcm5hbWUnO1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgW2F0dHJpYnV0ZV06IGlkZW50aWZpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YT86IFVzZXJBcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LmZvcmdvdFBhc3N3b3JkO1xuICAgICAgZm9yZ290UGFzc3dvcmRTdWNjZWVkZWQgPSBzdWNjZXNzO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBzdWNjZXNzID8gVVNFUl9DT05TVEFOVFMuRk9SR09UX1BBU1NXT1JEX1NVQ0NFU1MgOiBVU0VSX0NPTlNUQU5UUy5GT1JHT1RfUEFTU1dPUkRfRVJST1JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhd2FpdCBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KGZsdXgsICdmb3Jnb3RQYXNzd29yZCcsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFtdLCB7b25TdWNjZXNzfSk7XG5cbiAgICBpZighZm9yZ290UGFzc3dvcmRTdWNjZWVkZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZm9yZ290X3Bhc3N3b3JkX2ZhaWxlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGZvcmdvdFBhc3N3b3JkID0gYXN5bmMgKHVzZXJuYW1lOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiA9PlxuICAgIHJlcXVlc3RQYXNzd29yZFJlc2V0KHVzZXJuYW1lLCByZXF1ZXN0T3B0aW9ucyk7XG5cbiAgY29uc3Qgc2VuZFZlcmlmaWNhdGlvbkVtYWlsID0gYXN5bmMgKFxuICAgIGVtYWlsOiBzdHJpbmcsXG4gICAgZW1haWxPcHRpb25zOiBWZXJpZmljYXRpb25FbWFpbE9wdGlvbnMgPSB7fSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgIC4uLihlbWFpbE9wdGlvbnMuc3ViamVjdCA/IHt2ZXJpZmljYXRpb25FbWFpbFN1YmplY3Q6IGVtYWlsT3B0aW9ucy5zdWJqZWN0fSA6IHt9KSxcbiAgICAgICAgICAuLi4oZW1haWxPcHRpb25zLnRlbXBsYXRlID8ge3ZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGU6IGVtYWlsT3B0aW9ucy50ZW1wbGF0ZX0gOiB7fSksXG4gICAgICAgICAgLi4uKGVtYWlsT3B0aW9ucy50ZXh0ID8ge3ZlcmlmaWNhdGlvbkVtYWlsVGV4dDogZW1haWxPcHRpb25zLnRleHR9IDoge30pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE/OiBVc2VyQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5zZW5kVmVyaWZpY2F0aW9uRW1haWw7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IHN1Y2Nlc3MgPyBVU0VSX0NPTlNUQU5UUy5DT05GSVJNX1NJR05fVVBfU1VDQ0VTUyA6IFVTRVJfQ09OU1RBTlRTLkNPTkZJUk1fU0lHTl9VUF9FUlJPUlxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KFxuICAgICAgZmx1eCxcbiAgICAgICdzZW5kVmVyaWZpY2F0aW9uRW1haWwnLFxuICAgICAgREFUQV9UWVBFLFxuICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICBbXSxcbiAgICAgIHtvblN1Y2Nlc3N9XG4gICAgKS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gISFkYXRhPy51c2Vycz8uc2VuZFZlcmlmaWNhdGlvbkVtYWlsO1xuICAgICAgaWYoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZW5kX3ZlcmlmaWNhdGlvbl9lbWFpbF9mYWlsZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHJlc2V0UGFzc3dvcmQgPSBhc3luYyAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgIGNvZGU6IHN0cmluZyxcbiAgICB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJyxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGNvZGU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogY29kZVxuICAgICAgfSxcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLih0eXBlID09PSAnZW1haWwnID8ge2VtYWlsOiB1c2VybmFtZX0gOiB7cGhvbmU6IHVzZXJuYW1lfSksXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YT86IFVzZXJBcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LnJlc2V0UGFzc3dvcmQ7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IHN1Y2Nlc3MgPyBVU0VSX0NPTlNUQU5UUy5SRVNFVF9QQVNTV09SRF9TVUNDRVNTIDogVVNFUl9DT05TVEFOVFMuUkVTRVRfUEFTU1dPUkRfRVJST1JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAncmVzZXRQYXNzd29yZCcsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFtdLCB7b25TdWNjZXNzfSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LnJlc2V0UGFzc3dvcmQ7XG4gICAgICBpZighc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc2V0X3Bhc3N3b3JkX2ZhaWxlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgY29tcGxldGVQYXNzd29yZFJlc2V0ID0gYXN5bmMgKFxuICAgIGNvbmZpcm1hdGlvbjogUGFzc3dvcmRSZXNldENvbmZpcm1hdGlvbixcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCB1c2VybmFtZSA9IFN0cmluZyhjb25maXJtYXRpb24uZW1haWwgfHwgY29uZmlybWF0aW9uLnBob25lIHx8IGNvbmZpcm1hdGlvbi51c2VybmFtZSB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IHR5cGUgPSBnZXRQYXNzd29yZFJlc2V0VHlwZShjb25maXJtYXRpb24pO1xuICAgIHJldHVybiByZXNldFBhc3N3b3JkKHVzZXJuYW1lLCBjb25maXJtYXRpb24ucGFzc3dvcmQsIGNvbmZpcm1hdGlvbi5jb2RlLCB0eXBlLCByZXF1ZXN0T3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlUGFzc3dvcmQgPSBhc3luYyAocGFzc3dvcmQ6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+ID0+XG4gICAgdHJ1ZVxuICA7XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRVc2VyLFxuICAgIGNvbmZpcm1Db2RlLFxuICAgIGNvbmZpcm1TaWduVXAsXG4gICAgY29tcGxldGVQYXNzd29yZFJlc2V0LFxuICAgIGN1cnJlbnRBdXRoZW50aWNhdGVkVXNlcixcbiAgICBkZWxldGVCaWxsaW5nQ2FyZCxcbiAgICBsaXN0LFxuICAgIGZvcmdvdFBhc3N3b3JkLFxuICAgIGlzTG9nZ2VkSW4sXG4gICAgaXRlbUJ5SWQsXG4gICAgZ2V0VXNlckJ5QXR0cmlidXRlLFxuICAgIGxpc3RCeUNvbm5lY3Rpb24sXG4gICAgbGlzdEJ5TGF0ZXN0LFxuICAgIGxpc3RCeVJlYWN0aW9ucyxcbiAgICBsaXN0QnlUYWdzLFxuICAgIHJlZnJlc2hTZXNzaW9uOiByZWZyZXNoU2Vzc2lvbkFjdGlvbixcbiAgICByZW1vdmUsXG4gICAgcmVxdWVzdFBhc3N3b3JkUmVzZXQsXG4gICAgcmVzZXRQYXNzd29yZCxcbiAgICBzYXZlQmlsbGluZ0NhcmQsXG4gICAgc2VhcmNoLFxuICAgIHNlbmRWZXJpZmljYXRpb25FbWFpbCxcbiAgICBzZXNzaW9uLFxuICAgIHNpZ25JbixcbiAgICBzaWduT3V0LFxuICAgIHNpZ25VcCxcbiAgICB1cGRhdGVQYXNzd29yZCxcbiAgICB1cGRhdGVVc2VyLFxuICAgIHVwZGF0ZVBsYW4sXG4gICAgdXBkYXRlVXNlckFkYXB0ZXI6IHVzZXJCYXNlLnVwZGF0ZUFkYXB0ZXIsXG4gICAgdXBkYXRlVXNlckFkYXB0ZXJPcHRpb25zOiB1c2VyQmFzZS51cGRhdGVPcHRpb25zXG4gIH07XG59O1xuIl0sIm5hbWVzIjpbInZhbGlkYXRlVXNlcklucHV0IiwiVVNFUl9DT05TVEFOVFMiLCJhcHBNdXRhdGlvbiIsImFwcFF1ZXJ5IiwicHVibGljTXV0YXRpb24iLCJwdWJsaWNRdWVyeSIsInJlZnJlc2hTZXNzaW9uIiwiY3JlYXRlQmFzZUFjdGlvbnMiLCJjbGVhclBlcnNpc3RlZFNlc3Npb24iLCJoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlIiwiaXNMb2dnZWRJbiIsImlzTG9nZ2VkSW5XaXRoU3RvcmFnZSIsIm5vcm1hbGl6ZVNlc3Npb24iLCJzdG9yZVNlc3Npb24iLCJnZXRDb25maWdGcm9tRmx1eCIsImNsZWFyQ2FjaGVkUmVxdWVzdCIsImdldENhY2hlZFJlcXVlc3QiLCJzZXRDYWNoZWRSZXF1ZXN0Iiwic3luY1BlcnNvbmFUYWdzVG9TZXNzaW9uIiwiREFUQV9UWVBFIiwiREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEUyIsIlNFTlNJVElWRV9VU0VSX0ZJRUxEUyIsIlNldCIsIklOVkFMSURfRklFTERfUkVHRVgiLCJoYXNTZXNzaW9uSWRlbnRpdHkiLCJ1c2VyIiwiX2lkIiwidXNlcklkIiwidXNlcm5hbWUiLCJlbWFpbCIsInNhbml0aXplVXBkYXRlVXNlcklucHV0IiwidXNlcklucHV0IiwiY3VycmVudFNlc3Npb24iLCJuZXh0VXNlciIsIk9iamVjdCIsImVudHJpZXMiLCJyZWR1Y2UiLCJmaWVsZCIsInZhbHVlIiwidW5kZWZpbmVkIiwicGFzc3dvcmQiLCJTdHJpbmciLCJ0cmltIiwiY3VycmVudFZhbHVlIiwic3luY1N0b3JlZFNlc3Npb24iLCJmbHV4Iiwic2Vzc2lvblBhdGNoIiwiZ2V0U3RhdGUiLCJnZXRTZXNzaW9uUGF5bG9hZCIsInBheWxvYWQiLCJzZXNzaW9uIiwiZ2V0RmllbGRSb290IiwidHJpbW1lZCIsIm1hdGNoIiwic2FuaXRpemVVc2VyUHJvcHMiLCJwcm9wcyIsImZhbGxiYWNrUHJvcHMiLCJzZWVuIiwic2FuaXRpemVkIiwibGlzdCIsInJvb3QiLCJoYXMiLCJhZGQiLCJwdXNoIiwibGVuZ3RoIiwiZ2V0SW52YWxpZEZpZWxkcyIsImVycm9yIiwiZXJyb3JzIiwic291cmNlIiwiaW52YWxpZEZpZWxkcyIsImZvckVhY2giLCJpdGVtIiwibWVzc2FnZSIsImV4ZWMiLCJsYXN0SW5kZXgiLCJnZXRQYXNzd29yZFJlc2V0SWRlbnRpZmllciIsInJlcXVlc3QiLCJpZGVudGlmaWVyIiwicGhvbmUiLCJ0eXBlIiwiaW5jbHVkZXMiLCJnZXRQYXNzd29yZFJlc2V0VHlwZSIsImNvbmZpcm1hdGlvbiIsIndpdGhJbnZhbGlkRmllbGRSZXRyeSIsInJlcXVlc3RXaXRoUHJvcHMiLCJzYWZlUHJvcHMiLCJzaXplIiwicmV0cnlQcm9wcyIsImZpbHRlciIsImRlZmF1bHRVc2VyVmFsaWRhdG9yIiwiaW5wdXQiLCJvcHRpb25zIiwidmFsaWRhdGVkIiwic3RyaWN0IiwiRXJyb3IiLCJjcmVhdGVVc2VyQWN0aW9ucyIsInVzZXJCYXNlIiwiYWRhcHRlciIsInVzZXJBZGFwdGVyIiwiYWRhcHRlck9wdGlvbnMiLCJ1c2VyQWRhcHRlck9wdGlvbnMiLCJjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzIiwiYWRkVXNlciIsInVzZXJQcm9wcyIsInJlcXVlc3RPcHRpb25zIiwicXVlcnlWYXJpYWJsZXMiLCJvblN1Y2Nlc3MiLCJkYXRhIiwidXNlcnMiLCJkaXNwYXRjaCIsIkFERF9JVEVNX1NVQ0NFU1MiLCJyZXR1cm5Qcm9wcyIsInNpZ25VcCIsImV4cGlyZXMiLCJTSUdOX1VQX1NVQ0NFU1MiLCJTSUdOX1VQX0VSUk9SIiwidXBkYXRlVXNlciIsInVwZGF0ZUlucHV0IiwiYmlydGhkYXRlIiwiZG9iIiwiZmlyc3ROYW1lIiwiZ2VuZGVyIiwibGFzdE5hbWUiLCJtYWlsaW5nTGlzdCIsIlVQREFURV9JVEVNX1NVQ0NFU1MiLCJjb25maXJtQ29kZSIsImNvZGUiLCJjb25maXJtZWQiLCJDT05GSVJNX1NJR05fVVBfU1VDQ0VTUyIsInJlbW92ZSIsIlJFTU9WRV9JVEVNX1NVQ0NFU1MiLCJzZXNzaW9uUHJvcHMiLCJzZXNzaW9uRGF0YSIsImdldFVzZXJCeVNlc3Npb24iLCJHRVRfU0VTU0lPTl9FUlJPUiIsIm5leHRTZXNzaW9uIiwiR0VUX1NFU1NJT05fU1VDQ0VTUyIsInBlcnNvbmFJZCIsIml0ZW1CeUlkIiwiY2FjaGVkUmVzdWx0IiwiZ2V0VXNlckJ5SWQiLCJHRVRfSVRFTV9TVUNDRVNTIiwicmVzdWx0Iiwic2FmZVVzZXJQcm9wcyIsImdldFVzZXJCeUF0dHJpYnV0ZSIsImF0dHJpYnV0ZSIsIm5vcm1hbGl6ZWRBdHRyaWJ1dGUiLCJub3JtYWxpemVkVmFsdWUiLCJtYXRjaGluZ1VzZXIiLCJzYXZlQmlsbGluZ0NhcmQiLCJjYXJkIiwic2Vzc2lvblVzZXJJZCIsImRlbGV0ZUJpbGxpbmdDYXJkIiwidXBkYXRlUGxhbiIsInBsYW5JZCIsIm5leHRQbGFuSWQiLCJnZXRVc2VyTGlzdCIsIkdFVF9MSVNUX1NVQ0NFU1MiLCJsaXN0QnlMYXRlc3QiLCJmcm9tIiwidG8iLCJsaXN0QnlDb25uZWN0aW9uIiwibGlzdEJ5UmVhY3Rpb25zIiwicmVhY3Rpb25OYW1lcyIsInBlcnNvbmFQcm9wcyIsImxpc3RCeVRhZ3MiLCJ0YWdOYW1lcyIsInRhZ3MiLCJzZWFyY2giLCJxdWVyeSIsImN1cnJlbnRBdXRoZW50aWNhdGVkVXNlciIsInJlZnJlc2hTZXNzaW9uQWN0aW9uIiwidG9rZW4iLCJzaWduSW4iLCJjb25maWciLCJyZXF1ZXN0ZWRFeHBpcmVzIiwiTWF0aCIsIm1heCIsIk51bWJlciIsImFwcCIsIm1heE1pbnV0ZXMiLCJxdWVyeVZhcmlhYmxlc1dpdGhVc2VySW5wdXQiLCJzdG9yZWRTZXNzaW9uIiwiU0lHTl9JTl9TVUNDRVNTIiwicGVyZm9ybVNpZ25JbiIsInNlc3Npb25SZXN1bHQiLCJiYXNlU2Vzc2lvbiIsImh5ZHJhdGVkU2Vzc2lvbiIsImZhbGxiYWNrU2Vzc2lvbiIsImZpbmFsU2Vzc2lvbiIsIlNJR05fSU5fRVJST1IiLCJzaWduT3V0IiwiU0lHTl9PVVRfU1VDQ0VTUyIsImNvbmZpcm1TaWduVXAiLCJyZXF1ZXN0UGFzc3dvcmRSZXNldCIsImZvcmdvdFBhc3N3b3JkU3VjY2VlZGVkIiwic3VjY2VzcyIsImZvcmdvdFBhc3N3b3JkIiwiRk9SR09UX1BBU1NXT1JEX1NVQ0NFU1MiLCJGT1JHT1RfUEFTU1dPUkRfRVJST1IiLCJzZW5kVmVyaWZpY2F0aW9uRW1haWwiLCJlbWFpbE9wdGlvbnMiLCJzdWJqZWN0IiwidmVyaWZpY2F0aW9uRW1haWxTdWJqZWN0IiwidGVtcGxhdGUiLCJ2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlIiwidGV4dCIsInZlcmlmaWNhdGlvbkVtYWlsVGV4dCIsIkNPTkZJUk1fU0lHTl9VUF9FUlJPUiIsInRoZW4iLCJyZXNldFBhc3N3b3JkIiwiUkVTRVRfUEFTU1dPUkRfU1VDQ0VTUyIsIlJFU0VUX1BBU1NXT1JEX0VSUk9SIiwiY29tcGxldGVQYXNzd29yZFJlc2V0IiwidXBkYXRlUGFzc3dvcmQiLCJuZXdQYXNzd29yZCIsInVwZGF0ZVVzZXJBZGFwdGVyIiwidXBkYXRlQWRhcHRlciIsInVwZGF0ZVVzZXJBZGFwdGVyT3B0aW9ucyIsInVwZGF0ZU9wdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLGlCQUFpQixRQUFPLDRDQUE0QztBQUM1RSxTQUFRQyxjQUFjLFFBQU8sNEJBQTRCO0FBQ3pELFNBQVFDLFdBQVcsRUFBRUMsUUFBUSxFQUFFQyxjQUFjLEVBQUVDLFdBQVcsRUFBRUMsY0FBYyxRQUFPLHFCQUFxQjtBQUN0RyxTQUFRQyxpQkFBaUIsUUFBTyxtQ0FBbUM7QUFDbkUsU0FDRUMscUJBQXFCLEVBQ3JCQyx5QkFBeUIsRUFDekJD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
|
|
@@ -17,4 +17,3 @@ export declare class TagValidationError extends Error {
|
|
|
17
17
|
export declare const validateTagInput: (tag: unknown) => TagType;
|
|
18
18
|
export declare const formatTagOutput: (tag: TagType) => TagType;
|
|
19
19
|
export declare const parseTag: (tag: TagType) => TagType;
|
|
20
|
-
export declare const parseTagLegacy: (tag: TagType) => TagType;
|
|
@@ -93,6 +93,5 @@ const performTagTransformation = (tag)=>{
|
|
|
93
93
|
}
|
|
94
94
|
return result;
|
|
95
95
|
};
|
|
96
|
-
export const parseTagLegacy = (tag)=>parseTag(tag);
|
|
97
96
|
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWRhcHRlcnMvdGFnQWRhcHRlci90YWdBZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlQXJhbmdvSWQsIHBhcnNlSWQsIHBhcnNlU3RyaW5nIH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG5pbXBvcnQgeyBwYXJzZURvY3VtZW50LCByZW1vdmVFbXB0eUtleXMgfSBmcm9tICcuLi9hcmFuZ29BZGFwdGVyL2FyYW5nb0FkYXB0ZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VSZWFrdG9yQ29udGVudCwgcGFyc2VSZWFrdG9yVHlwZSB9IGZyb20gJy4uL3JlYWt0b3JBZGFwdGVyL3JlYWt0b3JBZGFwdGVyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWdUeXBlIHtcbiAgX2lkPzogc3RyaW5nO1xuICBfa2V5Pzogc3RyaW5nO1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB0YWdCeT86IHN0cmluZztcbiAgdGFnSWQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgVGFnVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBmaWVsZD86IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdUYWdWYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IFRhZ0lucHV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX2tleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuYW1lOiB6LnN0cmluZygpLm1heCgxNjApLm9wdGlvbmFsKCksXG4gIHRhZ0J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRhZ0lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZXJJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5sb29zZSgpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUYWdJbnB1dCA9ICh0YWc6IHVua25vd24pOiBUYWdUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBUYWdJbnB1dFNjaGVtYS5wYXJzZSh0YWcpO1xuICAgIHJldHVybiB2YWxpZGF0ZWQgYXMgVGFnVHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSBlcnJvci5pc3N1ZXMubWFwKChlKSA9PiBgJHtlLnBhdGguam9pbignLicpfTogJHtlLm1lc3NhZ2V9YCkuam9pbignLCAnKTtcbiAgICAgIHRocm93IG5ldyBUYWdWYWxpZGF0aW9uRXJyb3IoYFRhZyB2YWxpZGF0aW9uIGZhaWxlZDogJHtmaWVsZEVycm9yc31gKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRUYWdPdXRwdXQgPSAodGFnOiBUYWdUeXBlKTogVGFnVHlwZSA9PiB0YWc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZVRhZyA9ICh0YWc6IFRhZ1R5cGUpOiBUYWdUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBwZXJmb3JtVGFnVHJhbnNmb3JtYXRpb24odGFnKTtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBUYWdWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVGFnVmFsaWRhdGlvbkVycm9yKGBUYWcgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cbn07XG5cbmNvbnN0IHBlcmZvcm1UYWdUcmFuc2Zvcm1hdGlvbiA9ICh0YWc6IFRhZ1R5cGUpOiBUYWdUeXBlID0+
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWRhcHRlcnMvdGFnQWRhcHRlci90YWdBZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlQXJhbmdvSWQsIHBhcnNlSWQsIHBhcnNlU3RyaW5nIH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG5pbXBvcnQgeyBwYXJzZURvY3VtZW50LCByZW1vdmVFbXB0eUtleXMgfSBmcm9tICcuLi9hcmFuZ29BZGFwdGVyL2FyYW5nb0FkYXB0ZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VSZWFrdG9yQ29udGVudCwgcGFyc2VSZWFrdG9yVHlwZSB9IGZyb20gJy4uL3JlYWt0b3JBZGFwdGVyL3JlYWt0b3JBZGFwdGVyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWdUeXBlIHtcbiAgX2lkPzogc3RyaW5nO1xuICBfa2V5Pzogc3RyaW5nO1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB0YWdCeT86IHN0cmluZztcbiAgdGFnSWQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgVGFnVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBmaWVsZD86IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdUYWdWYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IFRhZ0lucHV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX2tleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuYW1lOiB6LnN0cmluZygpLm1heCgxNjApLm9wdGlvbmFsKCksXG4gIHRhZ0J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRhZ0lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZXJJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5sb29zZSgpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUYWdJbnB1dCA9ICh0YWc6IHVua25vd24pOiBUYWdUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBUYWdJbnB1dFNjaGVtYS5wYXJzZSh0YWcpO1xuICAgIHJldHVybiB2YWxpZGF0ZWQgYXMgVGFnVHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSBlcnJvci5pc3N1ZXMubWFwKChlKSA9PiBgJHtlLnBhdGguam9pbignLicpfTogJHtlLm1lc3NhZ2V9YCkuam9pbignLCAnKTtcbiAgICAgIHRocm93IG5ldyBUYWdWYWxpZGF0aW9uRXJyb3IoYFRhZyB2YWxpZGF0aW9uIGZhaWxlZDogJHtmaWVsZEVycm9yc31gKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRUYWdPdXRwdXQgPSAodGFnOiBUYWdUeXBlKTogVGFnVHlwZSA9PiB0YWc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZVRhZyA9ICh0YWc6IFRhZ1R5cGUpOiBUYWdUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBwZXJmb3JtVGFnVHJhbnNmb3JtYXRpb24odGFnKTtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBUYWdWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVGFnVmFsaWRhdGlvbkVycm9yKGBUYWcgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cbn07XG5cbmNvbnN0IHBlcmZvcm1UYWdUcmFuc2Zvcm1hdGlvbiA9ICh0YWc6IFRhZ1R5cGUpOiBUYWdUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIF9pZCxcbiAgICBfa2V5LFxuICAgIGNhdGVnb3J5LFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGlkLFxuICAgIG5hbWUsXG4gICAgdGFnQnksXG4gICAgdGFnSWQsXG4gICAgdXNlcklkXG4gIH0gPSB0YWc7XG5cbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB7XG4gICAgLi4ucGFyc2VEb2N1bWVudCh0YWcpLFxuICAgIC4uLihjYXRlZ29yeSAmJiB7Y2F0ZWdvcnk6IHBhcnNlUmVha3RvclR5cGUoY2F0ZWdvcnkpfSksXG4gICAgLi4uKGRlc2NyaXB0aW9uICYmIHtkZXNjcmlwdGlvbjogcGFyc2VSZWFrdG9yQ29udGVudChkZXNjcmlwdGlvbil9KSxcbiAgICAuLi4oKF9pZCB8fCBpZCkgJiYge2lkOiBwYXJzZUFyYW5nb0lkKF9pZCB8fCBpZCB8fCAnJyl9KSxcbiAgICAuLi4oKF9rZXkgfHwgdGFnSWQpICYmIHt0YWdJZDogcGFyc2VJZChfa2V5IHx8IHRhZ0lkIHx8ICcnKX0pLFxuICAgIC4uLihuYW1lICYmIHtuYW1lOiBwYXJzZVN0cmluZyhuYW1lLCAxNjApfSksXG4gICAgLi4uKHRhZ0J5ICYmIHt0YWdCeTogcGFyc2VJZCh0YWdCeSl9KSxcbiAgICAuLi4odXNlcklkICYmIHt1c2VySWQ6IHBhcnNlSWQodXNlcklkKX0pXG4gIH07XG5cbiAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlRW1wdHlLZXlzKHRyYW5zZm9ybWVkKTtcblxuICBpZih0YWcuX2lkKSB7XG4gICAgcmVzdWx0LmlkID0gdGFnLl9pZDtcbiAgICByZXN1bHQuX2lkID0gdGFnLl9pZDtcbiAgfSBlbHNlIGlmKHRhZy5pZCAmJiAhcmVzdWx0LmlkKSB7XG4gICAgcmVzdWx0LmlkID0gdGFnLmlkO1xuICAgIHJlc3VsdC5faWQgPSB0YWcuaWQ7XG4gIH1cblxuICBpZih0YWcuX2tleSkge1xuICAgIHJlc3VsdC50YWdJZCA9IHRhZy5fa2V5O1xuICAgIHJlc3VsdC5fa2V5ID0gdGFnLl9rZXk7XG4gIH0gZWxzZSBpZih0YWcudGFnSWQgJiYgIXJlc3VsdC50YWdJZCkge1xuICAgIHJlc3VsdC50YWdJZCA9IHRhZy50YWdJZDtcbiAgICByZXN1bHQuX2tleSA9IHRhZy50YWdJZDtcbiAgfVxuXG4gIGlmKHRhZy50YWdJZCAmJiAhcmVzdWx0Ll9rZXkpIHtcbiAgICByZXN1bHQuX2tleSA9IHRhZy50YWdJZDtcbiAgfVxuXG4gIGlmKHRhZy5pZCAmJiAhcmVzdWx0Ll9pZCkge1xuICAgIHJlc3VsdC5faWQgPSB0YWcuaWQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZUFyYW5nb0lkIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwieiIsInBhcnNlRG9jdW1lbnQiLCJyZW1vdmVFbXB0eUtleXMiLCJwYXJzZVJlYWt0b3JDb250ZW50IiwicGFyc2VSZWFrdG9yVHlwZSIsIlRhZ1ZhbGlkYXRpb25FcnJvciIsIkVycm9yIiwibWVzc2FnZSIsImZpZWxkIiwibmFtZSIsIlRhZ0lucHV0U2NoZW1hIiwib2JqZWN0IiwiX2lkIiwic3RyaW5nIiwib3B0aW9uYWwiLCJfa2V5IiwiY2F0ZWdvcnkiLCJtYXgiLCJkZXNjcmlwdGlvbiIsImlkIiwidGFnQnkiLCJ0YWdJZCIsInVzZXJJZCIsImxvb3NlIiwidmFsaWRhdGVUYWdJbnB1dCIsInRhZyIsInZhbGlkYXRlZCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImZpZWxkRXJyb3JzIiwiaXNzdWVzIiwibWFwIiwiZSIsInBhdGgiLCJqb2luIiwiZm9ybWF0VGFnT3V0cHV0IiwicGFyc2VUYWciLCJwYXJzZWQiLCJwZXJmb3JtVGFnVHJhbnNmb3JtYXRpb24iLCJ0cmFuc2Zvcm1lZCIsInJlc3VsdCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsYUFBYSxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsUUFBUSxlQUFlO0FBQ25FLFNBQVNDLENBQUMsUUFBUSxNQUFNO0FBRXhCLFNBQVNDLGFBQWEsRUFBRUMsZUFBZSxRQUFRLG9DQUFvQztBQUNuRixTQUFTQyxtQkFBbUIsRUFBRUMsZ0JBQWdCLFFBQVEsc0NBQXNDO0FBZTVGLE9BQU8sTUFBTUMsMkJBQTJCQzs7SUFDdEMsWUFBWUMsT0FBZSxFQUFFLEFBQU9DLEtBQWMsQ0FBRTtRQUNsRCxLQUFLLENBQUNELGVBRDRCQyxRQUFBQTtRQUVsQyxJQUFJLENBQUNDLElBQUksR0FBRztJQUNkO0FBQ0Y7QUFFQSxNQUFNQyxpQkFBaUJWLEVBQUVXLE1BQU0sQ0FBQztJQUM5QkMsS0FBS1osRUFBRWEsTUFBTSxHQUFHQyxRQUFRO0lBQ3hCQyxNQUFNZixFQUFFYSxNQUFNLEdBQUdDLFFBQVE7SUFDekJFLFVBQVVoQixFQUFFYSxNQUFNLEdBQUdJLEdBQUcsQ0FBQyxLQUFLSCxRQUFRO0lBQ3RDSSxhQUFhbEIsRUFBRWEsTUFBTSxHQUFHQyxRQUFRO0lBQ2hDSyxJQUFJbkIsRUFBRWEsTUFBTSxHQUFHQyxRQUFRO0lBQ3ZCTCxNQUFNVCxFQUFFYSxNQUFNLEdBQUdJLEdBQUcsQ0FBQyxLQUFLSCxRQUFRO0lBQ2xDTSxPQUFPcEIsRUFBRWEsTUFBTSxHQUFHQyxRQUFRO0lBQzFCTyxPQUFPckIsRUFBRWEsTUFBTSxHQUFHQyxRQUFRO0lBQzFCUSxRQUFRdEIsRUFBRWEsTUFBTSxHQUFHQyxRQUFRO0FBQzdCLEdBQUdTLEtBQUs7QUFFUixPQUFPLE1BQU1DLG1CQUFtQixDQUFD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
|