@payloadcms/db-postgres 0.5.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. package/dist/connect.d.ts.map +1 -1
  2. package/dist/connect.js +48 -8
  3. package/dist/find/traverseFields.js +2 -2
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +8 -2
  6. package/dist/init.d.ts.map +1 -1
  7. package/dist/init.js +12 -7
  8. package/dist/migrate.js +2 -2
  9. package/dist/migrateFresh.d.ts.map +1 -1
  10. package/dist/migrateFresh.js +3 -3
  11. package/dist/queries/buildQuery.d.ts +2 -1
  12. package/dist/queries/buildQuery.d.ts.map +1 -1
  13. package/dist/queries/buildQuery.js +3 -2
  14. package/dist/queries/getTableColumnFromPath.d.ts +9 -4
  15. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  16. package/dist/queries/getTableColumnFromPath.js +40 -13
  17. package/dist/queries/parseParams.d.ts.map +1 -1
  18. package/dist/queries/parseParams.js +6 -8
  19. package/dist/queries/sanitizeQueryValue.d.ts +3 -1
  20. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  21. package/dist/queries/sanitizeQueryValue.js +5 -3
  22. package/dist/schema/build.d.ts.map +1 -1
  23. package/dist/schema/build.js +13 -15
  24. package/dist/schema/parentIDColumnMap.d.ts +3 -6
  25. package/dist/schema/parentIDColumnMap.d.ts.map +1 -1
  26. package/dist/schema/parentIDColumnMap.js +2 -1
  27. package/dist/schema/setColumnID.d.ts +11 -0
  28. package/dist/schema/setColumnID.d.ts.map +1 -0
  29. package/dist/schema/setColumnID.js +34 -0
  30. package/dist/schema/traverseFields.d.ts.map +1 -1
  31. package/dist/schema/traverseFields.js +2 -1
  32. package/dist/types.d.ts +11 -2
  33. package/dist/types.d.ts.map +1 -1
  34. package/dist/upsertRow/insertArrays.d.ts.map +1 -1
  35. package/dist/upsertRow/insertArrays.js +19 -5
  36. package/dist/utilities/createMigrationTable.d.ts +2 -2
  37. package/dist/utilities/createMigrationTable.d.ts.map +1 -1
  38. package/dist/utilities/createMigrationTable.js +5 -4
  39. package/package.json +3 -3
  40. package/dist/schema/getConfigIDType.d.ts +0 -3
  41. package/dist/schema/getConfigIDType.d.ts.map +0 -1
  42. package/dist/schema/getConfigIDType.js +0 -25
@@ -12,8 +12,8 @@ const _drizzleorm = require("drizzle-orm");
12
12
  const _pgcore = require("drizzle-orm/pg-core");
13
13
  const _types = require("payload/types");
14
14
  const _tosnakecase = /*#__PURE__*/ _interop_require_default(require("to-snake-case"));
15
- const _getConfigIDType = require("./getConfigIDType");
16
15
  const _parentIDColumnMap = require("./parentIDColumnMap");
16
+ const _setColumnID = require("./setColumnID");
17
17
  const _traverseFields = require("./traverseFields");
18
18
  function _interop_require_default(obj) {
19
19
  return obj && obj.__esModule ? obj : {
@@ -40,13 +40,11 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
40
40
  let relationshipsTable;
41
41
  // Drizzle relations
42
42
  const relationsToBuild = new Map();
43
- const idColType = (0, _getConfigIDType.getConfigIDType)(fields);
44
- const idColTypeMap = {
45
- integer: _pgcore.serial,
46
- numeric: _pgcore.numeric,
47
- varchar: _pgcore.varchar
48
- };
49
- columns.id = idColTypeMap[idColType]('id').primaryKey();
43
+ const idColType = (0, _setColumnID.setColumnID)({
44
+ adapter,
45
+ columns,
46
+ fields
47
+ });
50
48
  ({ hasLocalizedField, hasLocalizedManyNumberField, hasLocalizedManyTextField, hasLocalizedRelationshipField, hasManyNumberField, hasManyTextField } = (0, _traverseFields.traverseFields)({
51
49
  adapter,
52
50
  buildNumbers,
@@ -79,7 +77,7 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
79
77
  withTimezone: true
80
78
  }).defaultNow().notNull();
81
79
  }
82
- const table = (0, _pgcore.pgTable)(tableName, columns, (cols)=>{
80
+ const table = adapter.pgSchema.table(tableName, columns, (cols)=>{
83
81
  const extraConfig = Object.entries(baseExtraConfig).reduce((config, [key, func])=>{
84
82
  config[key] = func(cols);
85
83
  return config;
@@ -97,7 +95,7 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
97
95
  localesColumns._parentID = _parentIDColumnMap.parentIDColumnMap[idColType]('_parent_id').references(()=>table.id, {
98
96
  onDelete: 'cascade'
99
97
  }).notNull();
100
- localesTable = (0, _pgcore.pgTable)(localeTableName, localesColumns, (cols)=>{
98
+ localesTable = adapter.pgSchema.table(localeTableName, localesColumns, (cols)=>{
101
99
  return Object.entries(localesIndexes).reduce((acc, [colName, func])=>{
102
100
  acc[colName] = func(cols);
103
101
  return acc;
@@ -132,7 +130,7 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
132
130
  if (hasLocalizedManyTextField) {
133
131
  columns.locale = adapter.enums.enum__locales('locale');
134
132
  }
135
- textsTable = (0, _pgcore.pgTable)(textsTableName, columns, (cols)=>{
133
+ textsTable = adapter.pgSchema.table(textsTableName, columns, (cols)=>{
136
134
  const indexes = {
137
135
  orderParentIdx: (0, _pgcore.index)(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent)
138
136
  };
@@ -171,7 +169,7 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
171
169
  if (hasLocalizedManyNumberField) {
172
170
  columns.locale = adapter.enums.enum__locales('locale');
173
171
  }
174
- numbersTable = (0, _pgcore.pgTable)(numbersTableName, columns, (cols)=>{
172
+ numbersTable = adapter.pgSchema.table(numbersTableName, columns, (cols)=>{
175
173
  const indexes = {
176
174
  orderParentIdx: (0, _pgcore.index)(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent)
177
175
  };
@@ -211,7 +209,7 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
211
209
  }
212
210
  relationships.forEach((relationTo)=>{
213
211
  const formattedRelationTo = (0, _tosnakecase.default)(relationTo);
214
- let colType = 'integer';
212
+ let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer';
215
213
  const relatedCollectionCustomID = adapter.payload.collections[relationTo].config.fields.find((field)=>(0, _types.fieldAffectsData)(field) && field.name === 'id');
216
214
  if (relatedCollectionCustomID?.type === 'number') colType = 'numeric';
217
215
  if (relatedCollectionCustomID?.type === 'text') colType = 'varchar';
@@ -220,7 +218,7 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
220
218
  });
221
219
  });
222
220
  const relationshipsTableName = `${tableName}_rels`;
223
- relationshipsTable = (0, _pgcore.pgTable)(relationshipsTableName, relationshipColumns, (cols)=>{
221
+ relationshipsTable = adapter.pgSchema.table(relationshipsTableName, relationshipColumns, (cols)=>{
224
222
  const result = {
225
223
  order: (0, _pgcore.index)(`${relationshipsTableName}_order_idx`).on(cols.order),
226
224
  parentIdx: (0, _pgcore.index)(`${relationshipsTableName}_parent_idx`).on(cols.parent),
@@ -290,4 +288,4 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
290
288
  };
291
289
  };
292
290
 
293
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvYnVpbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHsgSW5kZXhCdWlsZGVyLCBQZ0NvbHVtbkJ1aWxkZXIsIFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB0eXBlIHsgRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyByZWxhdGlvbnMgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7XG4gIGluZGV4LFxuICBpbnRlZ2VyLFxuICBudW1lcmljLFxuICBwZ1RhYmxlLFxuICBzZXJpYWwsXG4gIHRpbWVzdGFtcCxcbiAgdW5pcXVlLFxuICB2YXJjaGFyLFxufSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5pbXBvcnQgdG9TbmFrZUNhc2UgZnJvbSAndG8tc25ha2UtY2FzZSdcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1ucywgR2VuZXJpY1RhYmxlLCBQb3N0Z3Jlc0FkYXB0ZXIgfSBmcm9tICcuLi90eXBlcydcblxuaW1wb3J0IHsgZ2V0Q29uZmlnSURUeXBlIH0gZnJvbSAnLi9nZXRDb25maWdJRFR5cGUnXG5pbXBvcnQgeyBwYXJlbnRJRENvbHVtbk1hcCB9IGZyb20gJy4vcGFyZW50SURDb2x1bW5NYXAnXG5pbXBvcnQgeyB0cmF2ZXJzZUZpZWxkcyB9IGZyb20gJy4vdHJhdmVyc2VGaWVsZHMnXG5cbnR5cGUgQXJncyA9IHtcbiAgYWRhcHRlcjogUG9zdGdyZXNBZGFwdGVyXG4gIGJhc2VDb2x1bW5zPzogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPlxuICBiYXNlRXh0cmFDb25maWc/OiBSZWNvcmQ8c3RyaW5nLCAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlciB8IFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyPlxuICBidWlsZE51bWJlcnM/OiBib29sZWFuXG4gIGJ1aWxkUmVsYXRpb25zaGlwcz86IGJvb2xlYW5cbiAgYnVpbGRUZXh0cz86IGJvb2xlYW5cbiAgZGlzYWJsZU5vdE51bGw6IGJvb2xlYW5cbiAgZGlzYWJsZVVuaXF1ZTogYm9vbGVhblxuICBmaWVsZHM6IEZpZWxkW11cbiAgcm9vdFJlbGF0aW9uc1RvQnVpbGQ/OiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4gIHJvb3RSZWxhdGlvbnNoaXBzPzogU2V0PHN0cmluZz5cbiAgcm9vdFRhYmxlSURDb2xUeXBlPzogc3RyaW5nXG4gIHJvb3RUYWJsZU5hbWU/OiBzdHJpbmdcbiAgdGFibGVOYW1lOiBzdHJpbmdcbiAgdGltZXN0YW1wcz86IGJvb2xlYW5cbn1cblxudHlwZSBSZXN1bHQgPSB7XG4gIGhhc01hbnlOdW1iZXJGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW5cbiAgaGFzTWFueVRleHRGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW5cbiAgcmVsYXRpb25zVG9CdWlsZDogTWFwPHN0cmluZywgc3RyaW5nPlxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRUYWJsZSA9ICh7XG4gIGFkYXB0ZXIsXG4gIGJhc2VDb2x1bW5zID0ge30sXG4gIGJhc2VFeHRyYUNvbmZpZyA9IHt9LFxuICBidWlsZE51bWJlcnMsXG4gIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgYnVpbGRUZXh0cyxcbiAgZGlzYWJsZU5vdE51bGwsXG4gIGRpc2FibGVVbmlxdWUgPSBmYWxzZSxcbiAgZmllbGRzLFxuICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgcm9vdFJlbGF0aW9uc2hpcHMsXG4gIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgcm9vdFRhYmxlTmFtZTogaW5jb21pbmdSb290VGFibGVOYW1lLFxuICB0YWJsZU5hbWUsXG4gIHRpbWVzdGFtcHMsXG59OiBBcmdzKTogUmVzdWx0ID0+IHtcbiAgY29uc3Qgcm9vdFRhYmxlTmFtZSA9IGluY29taW5nUm9vdFRhYmxlTmFtZSB8fCB0YWJsZU5hbWVcbiAgY29uc3QgY29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IGJhc2VDb2x1bW5zXG4gIGNvbnN0IGluZGV4ZXM6IFJlY29yZDxzdHJpbmcsIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyPiA9IHt9XG5cbiAgbGV0IGhhc0xvY2FsaXplZEZpZWxkID0gZmFsc2VcbiAgbGV0IGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkID0gZmFsc2VcbiAgbGV0IGhhc01hbnlUZXh0RmllbGQ6ICdpbmRleCcgfCBib29sZWFuID0gZmFsc2VcbiAgbGV0IGhhc01hbnlOdW1iZXJGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQgPSBmYWxzZVxuXG4gIGNvbnN0IGxvY2FsZXNDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0ge31cbiAgY29uc3QgbG9jYWxlc0luZGV4ZXM6IFJlY29yZDxzdHJpbmcsIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyPiA9IHt9XG4gIGxldCBsb2NhbGVzVGFibGU6IEdlbmVyaWNUYWJsZVxuICBsZXQgdGV4dHNUYWJsZTogR2VuZXJpY1RhYmxlXG4gIGxldCBudW1iZXJzVGFibGU6IEdlbmVyaWNUYWJsZVxuXG4gIC8vIFJlbGF0aW9uc2hpcHMgdG8gdGhlIGJhc2UgY29sbGVjdGlvblxuICBjb25zdCByZWxhdGlvbnNoaXBzOiBTZXQ8c3RyaW5nPiA9IHJvb3RSZWxhdGlvbnNoaXBzIHx8IG5ldyBTZXQoKVxuXG4gIGxldCByZWxhdGlvbnNoaXBzVGFibGU6IEdlbmVyaWNUYWJsZVxuXG4gIC8vIERyaXp6bGUgcmVsYXRpb25zXG4gIGNvbnN0IHJlbGF0aW9uc1RvQnVpbGQ6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKClcblxuICBjb25zdCBpZENvbFR5cGUgPSBnZXRDb25maWdJRFR5cGUoZmllbGRzKVxuXG4gIGNvbnN0IGlkQ29sVHlwZU1hcCA9IHtcbiAgICBpbnRlZ2VyOiBzZXJpYWwsXG4gICAgbnVtZXJpYyxcbiAgICB2YXJjaGFyLFxuICB9XG5cbiAgY29sdW1ucy5pZCA9IGlkQ29sVHlwZU1hcFtpZENvbFR5cGVdKCdpZCcpLnByaW1hcnlLZXkoKVxuICA7KHtcbiAgICBoYXNMb2NhbGl6ZWRGaWVsZCxcbiAgICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCxcbiAgICBoYXNNYW55TnVtYmVyRmllbGQsXG4gICAgaGFzTWFueVRleHRGaWVsZCxcbiAgfSA9IHRyYXZlcnNlRmllbGRzKHtcbiAgICBhZGFwdGVyLFxuICAgIGJ1aWxkTnVtYmVycyxcbiAgICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gICAgYnVpbGRUZXh0cyxcbiAgICBjb2x1bW5zLFxuICAgIGRpc2FibGVOb3ROdWxsLFxuICAgIGRpc2FibGVVbmlxdWUsXG4gICAgZmllbGRzLFxuICAgIGluZGV4ZXMsXG4gICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgbmV3VGFibGVOYW1lOiB0YWJsZU5hbWUsXG4gICAgcGFyZW50VGFibGVOYW1lOiB0YWJsZU5hbWUsXG4gICAgcmVsYXRpb25zVG9CdWlsZCxcbiAgICByZWxhdGlvbnNoaXBzLFxuICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkOiByb290UmVsYXRpb25zVG9CdWlsZCB8fCByZWxhdGlvbnNUb0J1aWxkLFxuICAgIHJvb3RUYWJsZUlEQ29sVHlwZTogcm9vdFRhYmxlSURDb2xUeXBlIHx8IGlkQ29sVHlwZSxcbiAgICByb290VGFibGVOYW1lLFxuICB9KSlcblxuICBpZiAodGltZXN0YW1wcykge1xuICAgIGNvbHVtbnMuY3JlYXRlZEF0ID0gdGltZXN0YW1wKCdjcmVhdGVkX2F0Jywge1xuICAgICAgbW9kZTogJ3N0cmluZycsXG4gICAgICBwcmVjaXNpb246IDMsXG4gICAgICB3aXRoVGltZXpvbmU6IHRydWUsXG4gICAgfSlcbiAgICAgIC5kZWZhdWx0Tm93KClcbiAgICAgIC5ub3ROdWxsKClcbiAgICBjb2x1bW5zLnVwZGF0ZWRBdCA9IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHtcbiAgICAgIG1vZGU6ICdzdHJpbmcnLFxuICAgICAgcHJlY2lzaW9uOiAzLFxuICAgICAgd2l0aFRpbWV6b25lOiB0cnVlLFxuICAgIH0pXG4gICAgICAuZGVmYXVsdE5vdygpXG4gICAgICAubm90TnVsbCgpXG4gIH1cblxuICBjb25zdCB0YWJsZSA9IHBnVGFibGUodGFibGVOYW1lLCBjb2x1bW5zLCAoY29scykgPT4ge1xuICAgIGNvbnN0IGV4dHJhQ29uZmlnID0gT2JqZWN0LmVudHJpZXMoYmFzZUV4dHJhQ29uZmlnKS5yZWR1Y2UoKGNvbmZpZywgW2tleSwgZnVuY10pID0+IHtcbiAgICAgIGNvbmZpZ1trZXldID0gZnVuYyhjb2xzKVxuICAgICAgcmV0dXJuIGNvbmZpZ1xuICAgIH0sIHt9KVxuXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGluZGV4ZXMpLnJlZHVjZSgoYWNjLCBbY29sTmFtZSwgZnVuY10pID0+IHtcbiAgICAgIGFjY1tjb2xOYW1lXSA9IGZ1bmMoY29scylcbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCBleHRyYUNvbmZpZylcbiAgfSlcblxuICBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdID0gdGFibGVcblxuICBpZiAoaGFzTG9jYWxpemVkRmllbGQpIHtcbiAgICBjb25zdCBsb2NhbGVUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2xvY2FsZXNgXG4gICAgbG9jYWxlc0NvbHVtbnMuaWQgPSBzZXJpYWwoJ2lkJykucHJpbWFyeUtleSgpXG4gICAgbG9jYWxlc0NvbHVtbnMuX2xvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnX2xvY2FsZScpLm5vdE51bGwoKVxuICAgIGxvY2FsZXNDb2x1bW5zLl9wYXJlbnRJRCA9IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ19wYXJlbnRfaWQnKVxuICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gdGFibGUuaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgLm5vdE51bGwoKVxuXG4gICAgbG9jYWxlc1RhYmxlID0gcGdUYWJsZShsb2NhbGVUYWJsZU5hbWUsIGxvY2FsZXNDb2x1bW5zLCAoY29scykgPT4ge1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGxvY2FsZXNJbmRleGVzKS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIFtjb2xOYW1lLCBmdW5jXSkgPT4ge1xuICAgICAgICAgIGFjY1tjb2xOYW1lXSA9IGZ1bmMoY29scylcbiAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBfbG9jYWxlUGFyZW50OiB1bmlxdWUoYCR7bG9jYWxlVGFibGVOYW1lfV9sb2NhbGVfcGFyZW50X2lkX3VuaXF1ZWApLm9uKFxuICAgICAgICAgICAgY29scy5fbG9jYWxlLFxuICAgICAgICAgICAgY29scy5fcGFyZW50SUQsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9KVxuXG4gICAgYWRhcHRlci50YWJsZXNbbG9jYWxlVGFibGVOYW1lXSA9IGxvY2FsZXNUYWJsZVxuXG4gICAgY29uc3QgbG9jYWxlc1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKGxvY2FsZXNUYWJsZSwgKHsgb25lIH0pID0+ICh7XG4gICAgICBfcGFyZW50SUQ6IG9uZSh0YWJsZSwge1xuICAgICAgICBmaWVsZHM6IFtsb2NhbGVzVGFibGUuX3BhcmVudElEXSxcbiAgICAgICAgcmVmZXJlbmNlczogW3RhYmxlLmlkXSxcbiAgICAgIH0pLFxuICAgIH0pKVxuXG4gICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uc18ke2xvY2FsZVRhYmxlTmFtZX1gXSA9IGxvY2FsZXNUYWJsZVJlbGF0aW9uc1xuICB9XG5cbiAgaWYgKGhhc01hbnlUZXh0RmllbGQgJiYgYnVpbGRUZXh0cykge1xuICAgIGNvbnN0IHRleHRzVGFibGVOYW1lID0gYCR7cm9vdFRhYmxlTmFtZX1fdGV4dHNgXG4gICAgY29uc3QgY29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgIGlkOiBzZXJpYWwoJ2lkJykucHJpbWFyeUtleSgpLFxuICAgICAgb3JkZXI6IGludGVnZXIoJ29yZGVyJykubm90TnVsbCgpLFxuICAgICAgcGFyZW50OiBwYXJlbnRJRENvbHVtbk1hcFtpZENvbFR5cGVdKCdwYXJlbnRfaWQnKVxuICAgICAgICAucmVmZXJlbmNlcygoKSA9PiB0YWJsZS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAgIC5ub3ROdWxsKCksXG4gICAgICBwYXRoOiB2YXJjaGFyKCdwYXRoJykubm90TnVsbCgpLFxuICAgICAgdGV4dDogdmFyY2hhcigndGV4dCcpLFxuICAgIH1cblxuICAgIGlmIChoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkKSB7XG4gICAgICBjb2x1bW5zLmxvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnbG9jYWxlJylcbiAgICB9XG5cbiAgICB0ZXh0c1RhYmxlID0gcGdUYWJsZSh0ZXh0c1RhYmxlTmFtZSwgY29sdW1ucywgKGNvbHMpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ZXM6IFJlY29yZDxzdHJpbmcsIEluZGV4QnVpbGRlcj4gPSB7XG4gICAgICAgIG9yZGVyUGFyZW50SWR4OiBpbmRleChgJHt0ZXh0c1RhYmxlTmFtZX1fb3JkZXJfcGFyZW50X2lkeGApLm9uKGNvbHMub3JkZXIsIGNvbHMucGFyZW50KSxcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc01hbnlUZXh0RmllbGQgPT09ICdpbmRleCcpIHtcbiAgICAgICAgaW5kZXhlcy50ZXh0X2lkeCA9IGluZGV4KGAke3RleHRzVGFibGVOYW1lfV90ZXh0X2lkeGApLm9uKGNvbHMudGV4dClcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIHtcbiAgICAgICAgaW5kZXhlcy5sb2NhbGVQYXJlbnQgPSBpbmRleChgJHt0ZXh0c1RhYmxlTmFtZX1fbG9jYWxlX3BhcmVudGApLm9uKGNvbHMubG9jYWxlLCBjb2xzLnBhcmVudClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZGV4ZXNcbiAgICB9KVxuXG4gICAgYWRhcHRlci50YWJsZXNbdGV4dHNUYWJsZU5hbWVdID0gdGV4dHNUYWJsZVxuXG4gICAgY29uc3QgdGV4dHNUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyh0ZXh0c1RhYmxlLCAoeyBvbmUgfSkgPT4gKHtcbiAgICAgIHBhcmVudDogb25lKHRhYmxlLCB7XG4gICAgICAgIGZpZWxkczogW3RleHRzVGFibGUucGFyZW50XSxcbiAgICAgICAgcmVmZXJlbmNlczogW3RhYmxlLmlkXSxcbiAgICAgIH0pLFxuICAgIH0pKVxuXG4gICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uc18ke3RleHRzVGFibGVOYW1lfWBdID0gdGV4dHNUYWJsZVJlbGF0aW9uc1xuICB9XG5cbiAgaWYgKGhhc01hbnlOdW1iZXJGaWVsZCAmJiBidWlsZE51bWJlcnMpIHtcbiAgICBjb25zdCBudW1iZXJzVGFibGVOYW1lID0gYCR7cm9vdFRhYmxlTmFtZX1fbnVtYmVyc2BcbiAgICBjb25zdCBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0ge1xuICAgICAgaWQ6IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KCksXG4gICAgICBudW1iZXI6IG51bWVyaWMoJ251bWJlcicpLFxuICAgICAgb3JkZXI6IGludGVnZXIoJ29yZGVyJykubm90TnVsbCgpLFxuICAgICAgcGFyZW50OiBwYXJlbnRJRENvbHVtbk1hcFtpZENvbFR5cGVdKCdwYXJlbnRfaWQnKVxuICAgICAgICAucmVmZXJlbmNlcygoKSA9PiB0YWJsZS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAgIC5ub3ROdWxsKCksXG4gICAgICBwYXRoOiB2YXJjaGFyKCdwYXRoJykubm90TnVsbCgpLFxuICAgIH1cblxuICAgIGlmIChoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgIGNvbHVtbnMubG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdsb2NhbGUnKVxuICAgIH1cblxuICAgIG51bWJlcnNUYWJsZSA9IHBnVGFibGUobnVtYmVyc1RhYmxlTmFtZSwgY29sdW1ucywgKGNvbHMpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ZXM6IFJlY29yZDxzdHJpbmcsIEluZGV4QnVpbGRlcj4gPSB7XG4gICAgICAgIG9yZGVyUGFyZW50SWR4OiBpbmRleChgJHtudW1iZXJzVGFibGVOYW1lfV9vcmRlcl9wYXJlbnRfaWR4YCkub24oY29scy5vcmRlciwgY29scy5wYXJlbnQpLFxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTWFueU51bWJlckZpZWxkID09PSAnaW5kZXgnKSB7XG4gICAgICAgIGluZGV4ZXMubnVtYmVySWR4ID0gaW5kZXgoYCR7bnVtYmVyc1RhYmxlTmFtZX1fbnVtYmVyX2lkeGApLm9uKGNvbHMubnVtYmVyKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSB7XG4gICAgICAgIGluZGV4ZXMubG9jYWxlUGFyZW50ID0gaW5kZXgoYCR7bnVtYmVyc1RhYmxlTmFtZX1fbG9jYWxlX3BhcmVudGApLm9uKFxuICAgICAgICAgIGNvbHMubG9jYWxlLFxuICAgICAgICAgIGNvbHMucGFyZW50LFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleGVzXG4gICAgfSlcblxuICAgIGFkYXB0ZXIudGFibGVzW251bWJlcnNUYWJsZU5hbWVdID0gbnVtYmVyc1RhYmxlXG5cbiAgICBjb25zdCBudW1iZXJzVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMobnVtYmVyc1RhYmxlLCAoeyBvbmUgfSkgPT4gKHtcbiAgICAgIHBhcmVudDogb25lKHRhYmxlLCB7XG4gICAgICAgIGZpZWxkczogW251bWJlcnNUYWJsZS5wYXJlbnRdLFxuICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgfSksXG4gICAgfSkpXG5cbiAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7bnVtYmVyc1RhYmxlTmFtZX1gXSA9IG51bWJlcnNUYWJsZVJlbGF0aW9uc1xuICB9XG5cbiAgaWYgKGJ1aWxkUmVsYXRpb25zaGlwcykge1xuICAgIGlmIChyZWxhdGlvbnNoaXBzLnNpemUpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcENvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICAgIGlkOiBzZXJpYWwoJ2lkJykucHJpbWFyeUtleSgpLFxuICAgICAgICBvcmRlcjogaW50ZWdlcignb3JkZXInKSxcbiAgICAgICAgcGFyZW50OiBwYXJlbnRJRENvbHVtbk1hcFtpZENvbFR5cGVdKCdwYXJlbnRfaWQnKVxuICAgICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IHRhYmxlLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgICAubm90TnVsbCgpLFxuICAgICAgICBwYXRoOiB2YXJjaGFyKCdwYXRoJykubm90TnVsbCgpLFxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIHtcbiAgICAgICAgcmVsYXRpb25zaGlwQ29sdW1ucy5sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ2xvY2FsZScpXG4gICAgICB9XG5cbiAgICAgIHJlbGF0aW9uc2hpcHMuZm9yRWFjaCgocmVsYXRpb25UbykgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRSZWxhdGlvblRvID0gdG9TbmFrZUNhc2UocmVsYXRpb25UbylcbiAgICAgICAgbGV0IGNvbFR5cGUgPSAnaW50ZWdlcidcbiAgICAgICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb25DdXN0b21JRCA9IGFkYXB0ZXIucGF5bG9hZC5jb2xsZWN0aW9uc1tcbiAgICAgICAgICByZWxhdGlvblRvXG4gICAgICAgIF0uY29uZmlnLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJylcbiAgICAgICAgaWYgKHJlbGF0ZWRDb2xsZWN0aW9uQ3VzdG9tSUQ/LnR5cGUgPT09ICdudW1iZXInKSBjb2xUeXBlID0gJ251bWVyaWMnXG4gICAgICAgIGlmIChyZWxhdGVkQ29sbGVjdGlvbkN1c3RvbUlEPy50eXBlID09PSAndGV4dCcpIGNvbFR5cGUgPSAndmFyY2hhcidcblxuICAgICAgICByZWxhdGlvbnNoaXBDb2x1bW5zW2Ake3JlbGF0aW9uVG99SURgXSA9IHBhcmVudElEQ29sdW1uTWFwW2NvbFR5cGVdKFxuICAgICAgICAgIGAke2Zvcm1hdHRlZFJlbGF0aW9uVG99X2lkYCxcbiAgICAgICAgKS5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW2Zvcm1hdHRlZFJlbGF0aW9uVG9dLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHNUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X3JlbHNgXG5cbiAgICAgIHJlbGF0aW9uc2hpcHNUYWJsZSA9IHBnVGFibGUocmVsYXRpb25zaGlwc1RhYmxlTmFtZSwgcmVsYXRpb25zaGlwQ29sdW1ucywgKGNvbHMpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICBvcmRlcjogaW5kZXgoYCR7cmVsYXRpb25zaGlwc1RhYmxlTmFtZX1fb3JkZXJfaWR4YCkub24oY29scy5vcmRlciksXG4gICAgICAgICAgcGFyZW50SWR4OiBpbmRleChgJHtyZWxhdGlvbnNoaXBzVGFibGVOYW1lfV9wYXJlbnRfaWR4YCkub24oY29scy5wYXJlbnQpLFxuICAgICAgICAgIHBhdGhJZHg6IGluZGV4KGAke3JlbGF0aW9uc2hpcHNUYWJsZU5hbWV9X3BhdGhfaWR4YCkub24oY29scy5wYXRoKSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCkge1xuICAgICAgICAgIHJlc3VsdC5sb2NhbGVJZHggPSBpbmRleChgJHtyZWxhdGlvbnNoaXBzVGFibGVOYW1lfV9sb2NhbGVfaWR4YCkub24oY29scy5sb2NhbGUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9KVxuXG4gICAgICBhZGFwdGVyLnRhYmxlc1tyZWxhdGlvbnNoaXBzVGFibGVOYW1lXSA9IHJlbGF0aW9uc2hpcHNUYWJsZVxuXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMocmVsYXRpb25zaGlwc1RhYmxlLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlbGF0aW9uPHN0cmluZz4+ID0ge1xuICAgICAgICAgIHBhcmVudDogb25lKHRhYmxlLCB7XG4gICAgICAgICAgICBmaWVsZHM6IFtyZWxhdGlvbnNoaXBzVGFibGUucGFyZW50XSxcbiAgICAgICAgICAgIHJlZmVyZW5jZXM6IFt0YWJsZS5pZF0sXG4gICAgICAgICAgICByZWxhdGlvbk5hbWU6ICdfcmVscycsXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cblxuICAgICAgICByZWxhdGlvbnNoaXBzLmZvckVhY2goKHJlbGF0aW9uVG8pID0+IHtcbiAgICAgICAgICBjb25zdCByZWxhdGVkVGFibGVOYW1lID0gdG9TbmFrZUNhc2UocmVsYXRpb25UbylcbiAgICAgICAgICBjb25zdCBpZENvbHVtbk5hbWUgPSBgJHtyZWxhdGlvblRvfUlEYFxuICAgICAgICAgIHJlc3VsdFtpZENvbHVtbk5hbWVdID0gb25lKGFkYXB0ZXIudGFibGVzW3JlbGF0ZWRUYWJsZU5hbWVdLCB7XG4gICAgICAgICAgICBmaWVsZHM6IFtyZWxhdGlvbnNoaXBzVGFibGVbaWRDb2x1bW5OYW1lXV0sXG4gICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcmVsYXRlZFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSlcblxuICAgICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uc18ke3JlbGF0aW9uc2hpcHNUYWJsZU5hbWV9YF0gPSByZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnNcbiAgICB9XG4gIH1cblxuICBjb25zdCB0YWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyh0YWJsZSwgKHsgbWFueSB9KSA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHt9XG5cbiAgICByZWxhdGlvbnNUb0J1aWxkLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICByZXN1bHRba2V5XSA9IG1hbnkoYWRhcHRlci50YWJsZXNbdmFsXSlcbiAgICB9KVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZEZpZWxkKSB7XG4gICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KGxvY2FsZXNUYWJsZSlcbiAgICB9XG5cbiAgICBpZiAoaGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgcmVzdWx0Ll90ZXh0cyA9IG1hbnkodGV4dHNUYWJsZSlcbiAgICB9XG4gICAgaWYgKGhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgcmVzdWx0Ll9udW1iZXJzID0gbWFueShudW1iZXJzVGFibGUpXG4gICAgfVxuXG4gICAgaWYgKHJlbGF0aW9uc2hpcHMuc2l6ZSAmJiByZWxhdGlvbnNoaXBzVGFibGUpIHtcbiAgICAgIHJlc3VsdC5fcmVscyA9IG1hbnkocmVsYXRpb25zaGlwc1RhYmxlLCB7XG4gICAgICAgIHJlbGF0aW9uTmFtZTogJ19yZWxzJyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KVxuXG4gIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHt0YWJsZU5hbWV9YF0gPSB0YWJsZVJlbGF0aW9uc1xuXG4gIHJldHVybiB7IGhhc01hbnlOdW1iZXJGaWVsZCwgaGFzTWFueVRleHRGaWVsZCwgcmVsYXRpb25zVG9CdWlsZCB9XG59XG4iXSwibmFtZXMiOlsiYnVpbGRUYWJsZSIsImFkYXB0ZXIiLCJiYXNlQ29sdW1ucyIsImJhc2VFeHRyYUNvbmZpZyIsImJ1aWxkTnVtYmVycyIsImJ1aWxkUmVsYXRpb25zaGlwcyIsImJ1aWxkVGV4dHMiLCJkaXNhYmxlTm90TnVsbCIsImRpc2FibGVVbmlxdWUiLCJmaWVsZHMiLCJyb290UmVsYXRpb25zVG9CdWlsZCIsInJvb3RSZWxhdGlvbnNoaXBzIiwicm9vdFRhYmxlSURDb2xUeXBlIiwicm9vdFRhYmxlTmFtZSIsImluY29taW5nUm9vdFRhYmxlTmFtZSIsInRhYmxlTmFtZSIsInRpbWVzdGFtcHMiLCJjb2x1bW5zIiwiaW5kZXhlcyIsImhhc0xvY2FsaXplZEZpZWxkIiwiaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJoYXNNYW55VGV4dEZpZWxkIiwiaGFzTWFueU51bWJlckZpZWxkIiwiaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsImhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsImxvY2FsZXNDb2x1bW5zIiwibG9jYWxlc0luZGV4ZXMiLCJsb2NhbGVzVGFibGUiLCJ0ZXh0c1RhYmxlIiwibnVtYmVyc1RhYmxlIiwicmVsYXRpb25zaGlwcyIsIlNldCIsInJlbGF0aW9uc2hpcHNUYWJsZSIsInJlbGF0aW9uc1RvQnVpbGQiLCJNYXAiLCJpZENvbFR5cGUiLCJnZXRDb25maWdJRFR5cGUiLCJpZENvbFR5cGVNYXAiLCJpbnRlZ2VyIiwic2VyaWFsIiwibnVtZXJpYyIsInZhcmNoYXIiLCJpZCIsInByaW1hcnlLZXkiLCJ0cmF2ZXJzZUZpZWxkcyIsIm5ld1RhYmxlTmFtZSIsInBhcmVudFRhYmxlTmFtZSIsImNyZWF0ZWRBdCIsInRpbWVzdGFtcCIsIm1vZGUiLCJwcmVjaXNpb24iLCJ3aXRoVGltZXpvbmUiLCJkZWZhdWx0Tm93Iiwibm90TnVsbCIsInVwZGF0ZWRBdCIsInRhYmxlIiwicGdUYWJsZSIsImNvbHMiLCJleHRyYUNvbmZpZyIsIk9iamVjdCIsImVudHJpZXMiLCJyZWR1Y2UiLCJjb25maWciLCJrZXkiLCJmdW5jIiwiYWNjIiwiY29sTmFtZSIsInRhYmxlcyIsImxvY2FsZVRhYmxlTmFtZSIsIl9sb2NhbGUiLCJlbnVtcyIsImVudW1fX2xvY2FsZXMiLCJfcGFyZW50SUQiLCJwYXJlbnRJRENvbHVtbk1hcCIsInJlZmVyZW5jZXMiLCJvbkRlbGV0ZSIsIl9sb2NhbGVQYXJlbnQiLCJ1bmlxdWUiLCJvbiIsImxvY2FsZXNUYWJsZVJlbGF0aW9ucyIsInJlbGF0aW9ucyIsIm9uZSIsInRleHRzVGFibGVOYW1lIiwib3JkZXIiLCJwYXJlbnQiLCJwYXRoIiwidGV4dCIsImxvY2FsZSIsIm9yZGVyUGFyZW50SWR4IiwiaW5kZXgiLCJ0ZXh0X2lkeCIsImxvY2FsZVBhcmVudCIsInRleHRzVGFibGVSZWxhdGlvbnMiLCJudW1iZXJzVGFibGVOYW1lIiwibnVtYmVyIiwibnVtYmVySWR4IiwibnVtYmVyc1RhYmxlUmVsYXRpb25zIiwic2l6ZSIsInJlbGF0aW9uc2hpcENvbHVtbnMiLCJmb3JFYWNoIiwicmVsYXRpb25UbyIsImZvcm1hdHRlZFJlbGF0aW9uVG8iLCJ0b1NuYWtlQ2FzZSIsImNvbFR5cGUiLCJyZWxhdGVkQ29sbGVjdGlvbkN1c3RvbUlEIiwicGF5bG9hZCIsImNvbGxlY3Rpb25zIiwiZmluZCIsImZpZWxkIiwiZmllbGRBZmZlY3RzRGF0YSIsIm5hbWUiLCJ0eXBlIiwicmVsYXRpb25zaGlwc1RhYmxlTmFtZSIsInJlc3VsdCIsInBhcmVudElkeCIsInBhdGhJZHgiLCJsb2NhbGVJZHgiLCJyZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnMiLCJyZWxhdGlvbk5hbWUiLCJyZWxhdGVkVGFibGVOYW1lIiwiaWRDb2x1bW5OYW1lIiwidGFibGVSZWxhdGlvbnMiLCJtYW55IiwidmFsIiwiX2xvY2FsZXMiLCJfdGV4dHMiLCJfbnVtYmVycyIsIl9yZWxzIl0sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7Ozs7K0JBaUR2QkE7OztlQUFBQTs7OzRCQTVDYTt3QkFVbkI7dUJBQzBCO29FQUNUO2lDQUlRO21DQUNFO2dDQUNIOzs7Ozs7QUEwQnhCLE1BQU1BLGFBQWEsQ0FBQyxFQUN6QkMsT0FBTyxFQUNQQyxjQUFjLENBQUMsQ0FBQyxFQUNoQkMsa0JBQWtCLENBQUMsQ0FBQyxFQUNwQkMsWUFBWSxFQUNaQyxrQkFBa0IsRUFDbEJDLFVBQVUsRUFDVkMsY0FBYyxFQUNkQyxnQkFBZ0IsS0FBSyxFQUNyQkMsTUFBTSxFQUNOQyxvQkFBb0IsRUFDcEJDLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxlQUFlQyxxQkFBcUIsRUFDcENDLFNBQVMsRUFDVEMsVUFBVSxFQUNMO0lBQ0wsTUFBTUgsZ0JBQWdCQyx5QkFBeUJDO0lBQy9DLE1BQU1FLFVBQTJDZjtJQUNqRCxNQUFNZ0IsVUFBa0UsQ0FBQztJQUV6RSxJQUFJQyxvQkFBb0I7SUFDeEIsSUFBSUMsZ0NBQWdDO0lBQ3BDLElBQUlDLG1CQUFzQztJQUMxQyxJQUFJQyxxQkFBd0M7SUFDNUMsSUFBSUMsNEJBQTRCO0lBQ2hDLElBQUlDLDhCQUE4QjtJQUVsQyxNQUFNQyxp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
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvYnVpbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHtcbiAgSW5kZXhCdWlsZGVyLFxuICBQZ0NvbHVtbkJ1aWxkZXIsXG4gIFBnVGFibGVXaXRoQ29sdW1ucyxcbiAgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHsgcmVsYXRpb25zIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgeyBpbmRleCwgaW50ZWdlciwgbnVtZXJpYywgc2VyaWFsLCB0aW1lc3RhbXAsIHVuaXF1ZSwgdmFyY2hhciB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB0b1NuYWtlQ2FzZSBmcm9tICd0by1zbmFrZS1jYXNlJ1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNDb2x1bW5zLCBHZW5lcmljVGFibGUsIElEVHlwZSwgUG9zdGdyZXNBZGFwdGVyIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCB7IHBhcmVudElEQ29sdW1uTWFwIH0gZnJvbSAnLi9wYXJlbnRJRENvbHVtbk1hcCdcbmltcG9ydCB7IHNldENvbHVtbklEIH0gZnJvbSAnLi9zZXRDb2x1bW5JRCdcbmltcG9ydCB7IHRyYXZlcnNlRmllbGRzIH0gZnJvbSAnLi90cmF2ZXJzZUZpZWxkcydcblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgYmFzZUNvbHVtbnM/OiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+XG4gIGJhc2VFeHRyYUNvbmZpZz86IFJlY29yZDxzdHJpbmcsIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXI+XG4gIGJ1aWxkTnVtYmVycz86IGJvb2xlYW5cbiAgYnVpbGRSZWxhdGlvbnNoaXBzPzogYm9vbGVhblxuICBidWlsZFRleHRzPzogYm9vbGVhblxuICBkaXNhYmxlTm90TnVsbDogYm9vbGVhblxuICBkaXNhYmxlVW5pcXVlOiBib29sZWFuXG4gIGZpZWxkczogRmllbGRbXVxuICByb290UmVsYXRpb25zVG9CdWlsZD86IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcm9vdFJlbGF0aW9uc2hpcHM/OiBTZXQ8c3RyaW5nPlxuICByb290VGFibGVJRENvbFR5cGU/OiBzdHJpbmdcbiAgcm9vdFRhYmxlTmFtZT86IHN0cmluZ1xuICB0YWJsZU5hbWU6IHN0cmluZ1xuICB0aW1lc3RhbXBzPzogYm9vbGVhblxufVxuXG50eXBlIFJlc3VsdCA9IHtcbiAgaGFzTWFueU51bWJlckZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhblxuICBoYXNNYW55VGV4dEZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhblxuICByZWxhdGlvbnNUb0J1aWxkOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG59XG5cbmV4cG9ydCBjb25zdCBidWlsZFRhYmxlID0gKHtcbiAgYWRhcHRlcixcbiAgYmFzZUNvbHVtbnMgPSB7fSxcbiAgYmFzZUV4dHJhQ29uZmlnID0ge30sXG4gIGJ1aWxkTnVtYmVycyxcbiAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICBidWlsZFRleHRzLFxuICBkaXNhYmxlTm90TnVsbCxcbiAgZGlzYWJsZVVuaXF1ZSA9IGZhbHNlLFxuICBmaWVsZHMsXG4gIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICByb290UmVsYXRpb25zaGlwcyxcbiAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICByb290VGFibGVOYW1lOiBpbmNvbWluZ1Jvb3RUYWJsZU5hbWUsXG4gIHRhYmxlTmFtZSxcbiAgdGltZXN0YW1wcyxcbn06IEFyZ3MpOiBSZXN1bHQgPT4ge1xuICBjb25zdCByb290VGFibGVOYW1lID0gaW5jb21pbmdSb290VGFibGVOYW1lIHx8IHRhYmxlTmFtZVxuICBjb25zdCBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0gYmFzZUNvbHVtbnNcbiAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+ID0ge31cblxuICBsZXQgaGFzTG9jYWxpemVkRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTWFueVRleHRGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgaGFzTWFueU51bWJlckZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhbiA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gZmFsc2VcbiAgbGV0IGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IGZhbHNlXG5cbiAgY29uc3QgbG9jYWxlc0NvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7fVxuICBjb25zdCBsb2NhbGVzSW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+ID0ge31cbiAgbGV0IGxvY2FsZXNUYWJsZTogR2VuZXJpY1RhYmxlIHwgUGdUYWJsZVdpdGhDb2x1bW5zPGFueT5cbiAgbGV0IHRleHRzVGFibGU6IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG4gIGxldCBudW1iZXJzVGFibGU6IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG5cbiAgLy8gUmVsYXRpb25zaGlwcyB0byB0aGUgYmFzZSBjb2xsZWN0aW9uXG4gIGNvbnN0IHJlbGF0aW9uc2hpcHM6IFNldDxzdHJpbmc+ID0gcm9vdFJlbGF0aW9uc2hpcHMgfHwgbmV3IFNldCgpXG5cbiAgbGV0IHJlbGF0aW9uc2hpcHNUYWJsZTogR2VuZXJpY1RhYmxlIHwgUGdUYWJsZVdpdGhDb2x1bW5zPGFueT5cblxuICAvLyBEcml6emxlIHJlbGF0aW9uc1xuICBjb25zdCByZWxhdGlvbnNUb0J1aWxkOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpXG5cbiAgY29uc3QgaWRDb2xUeXBlOiBJRFR5cGUgPSBzZXRDb2x1bW5JRCh7IGFkYXB0ZXIsIGNvbHVtbnMsIGZpZWxkcyB9KVxuXG4gIDsoe1xuICAgIGhhc0xvY2FsaXplZEZpZWxkLFxuICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkLFxuICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgIGhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICBoYXNNYW55VGV4dEZpZWxkLFxuICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgIGFkYXB0ZXIsXG4gICAgYnVpbGROdW1iZXJzLFxuICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICBidWlsZFRleHRzLFxuICAgIGNvbHVtbnMsXG4gICAgZGlzYWJsZU5vdE51bGwsXG4gICAgZGlzYWJsZVVuaXF1ZSxcbiAgICBmaWVsZHMsXG4gICAgaW5kZXhlcyxcbiAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICBuZXdUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICBwYXJlbnRUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQ6IHJvb3RSZWxhdGlvbnNUb0J1aWxkIHx8IHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgcm9vdFRhYmxlSURDb2xUeXBlOiByb290VGFibGVJRENvbFR5cGUgfHwgaWRDb2xUeXBlLFxuICAgIHJvb3RUYWJsZU5hbWUsXG4gIH0pKVxuXG4gIGlmICh0aW1lc3RhbXBzKSB7XG4gICAgY29sdW1ucy5jcmVhdGVkQXQgPSB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7XG4gICAgICBtb2RlOiAnc3RyaW5nJyxcbiAgICAgIHByZWNpc2lvbjogMyxcbiAgICAgIHdpdGhUaW1lem9uZTogdHJ1ZSxcbiAgICB9KVxuICAgICAgLmRlZmF1bHROb3coKVxuICAgICAgLm5vdE51bGwoKVxuICAgIGNvbHVtbnMudXBkYXRlZEF0ID0gdGltZXN0YW1wKCd1cGRhdGVkX2F0Jywge1xuICAgICAgbW9kZTogJ3N0cmluZycsXG4gICAgICBwcmVjaXNpb246IDMsXG4gICAgICB3aXRoVGltZXpvbmU6IHRydWUsXG4gICAgfSlcbiAgICAgIC5kZWZhdWx0Tm93KClcbiAgICAgIC5ub3ROdWxsKClcbiAgfVxuXG4gIGNvbnN0IHRhYmxlID0gYWRhcHRlci5wZ1NjaGVtYS50YWJsZSh0YWJsZU5hbWUsIGNvbHVtbnMsIChjb2xzKSA9PiB7XG4gICAgY29uc3QgZXh0cmFDb25maWcgPSBPYmplY3QuZW50cmllcyhiYXNlRXh0cmFDb25maWcpLnJlZHVjZSgoY29uZmlnLCBba2V5LCBmdW5jXSkgPT4ge1xuICAgICAgY29uZmlnW2tleV0gPSBmdW5jKGNvbHMpXG4gICAgICByZXR1cm4gY29uZmlnXG4gICAgfSwge30pXG5cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaW5kZXhlcykucmVkdWNlKChhY2MsIFtjb2xOYW1lLCBmdW5jXSkgPT4ge1xuICAgICAgYWNjW2NvbE5hbWVdID0gZnVuYyhjb2xzKVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIGV4dHJhQ29uZmlnKVxuICB9KVxuXG4gIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0gPSB0YWJsZVxuXG4gIGlmIChoYXNMb2NhbGl6ZWRGaWVsZCkge1xuICAgIGNvbnN0IGxvY2FsZVRhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fbG9jYWxlc2BcbiAgICBsb2NhbGVzQ29sdW1ucy5pZCA9IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KClcbiAgICBsb2NhbGVzQ29sdW1ucy5fbG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdfbG9jYWxlJykubm90TnVsbCgpXG4gICAgbG9jYWxlc0NvbHVtbnMuX3BhcmVudElEID0gcGFyZW50SURDb2x1bW5NYXBbaWRDb2xUeXBlXSgnX3BhcmVudF9pZCcpXG4gICAgICAucmVmZXJlbmNlcygoKSA9PiB0YWJsZS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAubm90TnVsbCgpXG5cbiAgICBsb2NhbGVzVGFibGUgPSBhZGFwdGVyLnBnU2NoZW1hLnRhYmxlKGxvY2FsZVRhYmxlTmFtZSwgbG9jYWxlc0NvbHVtbnMsIChjb2xzKSA9PiB7XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMobG9jYWxlc0luZGV4ZXMpLnJlZHVjZShcbiAgICAgICAgKGFjYywgW2NvbE5hbWUsIGZ1bmNdKSA9PiB7XG4gICAgICAgICAgYWNjW2NvbE5hbWVdID0gZnVuYyhjb2xzKVxuICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIF9sb2NhbGVQYXJlbnQ6IHVuaXF1ZShgJHtsb2NhbGVUYWJsZU5hbWV9X2xvY2FsZV9wYXJlbnRfaWRfdW5pcXVlYCkub24oXG4gICAgICAgICAgICBjb2xzLl9sb2NhbGUsXG4gICAgICAgICAgICBjb2xzLl9wYXJlbnRJRCxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgKVxuICAgIH0pXG5cbiAgICBhZGFwdGVyLnRhYmxlc1tsb2NhbGVUYWJsZU5hbWVdID0gbG9jYWxlc1RhYmxlXG5cbiAgICBjb25zdCBsb2NhbGVzVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMobG9jYWxlc1RhYmxlLCAoeyBvbmUgfSkgPT4gKHtcbiAgICAgIF9wYXJlbnRJRDogb25lKHRhYmxlLCB7XG4gICAgICAgIGZpZWxkczogW2xvY2FsZXNUYWJsZS5fcGFyZW50SURdLFxuICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgfSksXG4gICAgfSkpXG5cbiAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7bG9jYWxlVGFibGVOYW1lfWBdID0gbG9jYWxlc1RhYmxlUmVsYXRpb25zXG4gIH1cblxuICBpZiAoaGFzTWFueVRleHRGaWVsZCAmJiBidWlsZFRleHRzKSB7XG4gICAgY29uc3QgdGV4dHNUYWJsZU5hbWUgPSBgJHtyb290VGFibGVOYW1lfV90ZXh0c2BcbiAgICBjb25zdCBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0ge1xuICAgICAgaWQ6IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KCksXG4gICAgICBvcmRlcjogaW50ZWdlcignb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IHRhYmxlLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgIHBhdGg6IHZhcmNoYXIoJ3BhdGgnKS5ub3ROdWxsKCksXG4gICAgICB0ZXh0OiB2YXJjaGFyKCd0ZXh0JyksXG4gICAgfVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIHtcbiAgICAgIGNvbHVtbnMubG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdsb2NhbGUnKVxuICAgIH1cblxuICAgIHRleHRzVGFibGUgPSBhZGFwdGVyLnBnU2NoZW1hLnRhYmxlKHRleHRzVGFibGVOYW1lLCBjb2x1bW5zLCAoY29scykgPT4ge1xuICAgICAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgSW5kZXhCdWlsZGVyPiA9IHtcbiAgICAgICAgb3JkZXJQYXJlbnRJZHg6IGluZGV4KGAke3RleHRzVGFibGVOYW1lfV9vcmRlcl9wYXJlbnRfaWR4YCkub24oY29scy5vcmRlciwgY29scy5wYXJlbnQpLFxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTWFueVRleHRGaWVsZCA9PT0gJ2luZGV4Jykge1xuICAgICAgICBpbmRleGVzLnRleHRfaWR4ID0gaW5kZXgoYCR7dGV4dHNUYWJsZU5hbWV9X3RleHRfaWR4YCkub24oY29scy50ZXh0KVxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCkge1xuICAgICAgICBpbmRleGVzLmxvY2FsZVBhcmVudCA9IGluZGV4KGAke3RleHRzVGFibGVOYW1lfV9sb2NhbGVfcGFyZW50YCkub24oY29scy5sb2NhbGUsIGNvbHMucGFyZW50KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXhlc1xuICAgIH0pXG5cbiAgICBhZGFwdGVyLnRhYmxlc1t0ZXh0c1RhYmxlTmFtZV0gPSB0ZXh0c1RhYmxlXG5cbiAgICBjb25zdCB0ZXh0c1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKHRleHRzVGFibGUsICh7IG9uZSB9KSA9PiAoe1xuICAgICAgcGFyZW50OiBvbmUodGFibGUsIHtcbiAgICAgICAgZmllbGRzOiBbdGV4dHNUYWJsZS5wYXJlbnRdLFxuICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgfSksXG4gICAgfSkpXG5cbiAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7dGV4dHNUYWJsZU5hbWV9YF0gPSB0ZXh0c1RhYmxlUmVsYXRpb25zXG4gIH1cblxuICBpZiAoaGFzTWFueU51bWJlckZpZWxkICYmIGJ1aWxkTnVtYmVycykge1xuICAgIGNvbnN0IG51bWJlcnNUYWJsZU5hbWUgPSBgJHtyb290VGFibGVOYW1lfV9udW1iZXJzYFxuICAgIGNvbnN0IGNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICBpZDogc2VyaWFsKCdpZCcpLnByaW1hcnlLZXkoKSxcbiAgICAgIG51bWJlcjogbnVtZXJpYygnbnVtYmVyJyksXG4gICAgICBvcmRlcjogaW50ZWdlcignb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IHRhYmxlLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgIHBhdGg6IHZhcmNoYXIoJ3BhdGgnKS5ub3ROdWxsKCksXG4gICAgfVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgY29sdW1ucy5sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ2xvY2FsZScpXG4gICAgfVxuXG4gICAgbnVtYmVyc1RhYmxlID0gYWRhcHRlci5wZ1NjaGVtYS50YWJsZShudW1iZXJzVGFibGVOYW1lLCBjb2x1bW5zLCAoY29scykgPT4ge1xuICAgICAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgSW5kZXhCdWlsZGVyPiA9IHtcbiAgICAgICAgb3JkZXJQYXJlbnRJZHg6IGluZGV4KGAke251bWJlcnNUYWJsZU5hbWV9X29yZGVyX3BhcmVudF9pZHhgKS5vbihjb2xzLm9yZGVyLCBjb2xzLnBhcmVudCksXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNNYW55TnVtYmVyRmllbGQgPT09ICdpbmRleCcpIHtcbiAgICAgICAgaW5kZXhlcy5udW1iZXJJZHggPSBpbmRleChgJHtudW1iZXJzVGFibGVOYW1lfV9udW1iZXJfaWR4YCkub24oY29scy5udW1iZXIpXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgaW5kZXhlcy5sb2NhbGVQYXJlbnQgPSBpbmRleChgJHtudW1iZXJzVGFibGVOYW1lfV9sb2NhbGVfcGFyZW50YCkub24oXG4gICAgICAgICAgY29scy5sb2NhbGUsXG4gICAgICAgICAgY29scy5wYXJlbnQsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZGV4ZXNcbiAgICB9KVxuXG4gICAgYWRhcHRlci50YWJsZXNbbnVtYmVyc1RhYmxlTmFtZV0gPSBudW1iZXJzVGFibGVcblxuICAgIGNvbnN0IG51bWJlcnNUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhudW1iZXJzVGFibGUsICh7IG9uZSB9KSA9PiAoe1xuICAgICAgcGFyZW50OiBvbmUodGFibGUsIHtcbiAgICAgICAgZmllbGRzOiBbbnVtYmVyc1RhYmxlLnBhcmVudF0sXG4gICAgICAgIHJlZmVyZW5jZXM6IFt0YWJsZS5pZF0sXG4gICAgICB9KSxcbiAgICB9KSlcblxuICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHtudW1iZXJzVGFibGVOYW1lfWBdID0gbnVtYmVyc1RhYmxlUmVsYXRpb25zXG4gIH1cblxuICBpZiAoYnVpbGRSZWxhdGlvbnNoaXBzKSB7XG4gICAgaWYgKHJlbGF0aW9uc2hpcHMuc2l6ZSkge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgaWQ6IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KCksXG4gICAgICAgIG9yZGVyOiBpbnRlZ2VyKCdvcmRlcicpLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gdGFibGUuaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgIHBhdGg6IHZhcmNoYXIoJ3BhdGgnKS5ub3ROdWxsKCksXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCkge1xuICAgICAgICByZWxhdGlvbnNoaXBDb2x1bW5zLmxvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnbG9jYWxlJylcbiAgICAgIH1cblxuICAgICAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKChyZWxhdGlvblRvKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFJlbGF0aW9uVG8gPSB0b1NuYWtlQ2FzZShyZWxhdGlvblRvKVxuICAgICAgICBsZXQgY29sVHlwZSA9IGFkYXB0ZXIuaWRUeXBlID09PSAndXVpZCcgPyAndXVpZCcgOiAnaW50ZWdlcidcbiAgICAgICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb25DdXN0b21JRCA9IGFkYXB0ZXIucGF5bG9hZC5jb2xsZWN0aW9uc1tcbiAgICAgICAgICByZWxhdGlvblRvXG4gICAgICAgIF0uY29uZmlnLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJylcbiAgICAgICAgaWYgKHJlbGF0ZWRDb2xsZWN0aW9uQ3VzdG9tSUQ/LnR5cGUgPT09ICdudW1iZXInKSBjb2xUeXBlID0gJ251bWVyaWMnXG4gICAgICAgIGlmIChyZWxhdGVkQ29sbGVjdGlvbkN1c3RvbUlEPy50eXBlID09PSAndGV4dCcpIGNvbFR5cGUgPSAndmFyY2hhcidcblxuICAgICAgICByZWxhdGlvbnNoaXBDb2x1bW5zW2Ake3JlbGF0aW9uVG99SURgXSA9IHBhcmVudElEQ29sdW1uTWFwW2NvbFR5cGVdKFxuICAgICAgICAgIGAke2Zvcm1hdHRlZFJlbGF0aW9uVG99X2lkYCxcbiAgICAgICAgKS5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW2Zvcm1hdHRlZFJlbGF0aW9uVG9dLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHNUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X3JlbHNgXG5cbiAgICAgIHJlbGF0aW9uc2hpcHNUYWJsZSA9IGFkYXB0ZXIucGdTY2hlbWEudGFibGUoXG4gICAgICAgIHJlbGF0aW9uc2hpcHNUYWJsZU5hbWUsXG4gICAgICAgIHJlbGF0aW9uc2hpcENvbHVtbnMsXG4gICAgICAgIChjb2xzKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICAgIG9yZGVyOiBpbmRleChgJHtyZWxhdGlvbnNoaXBzVGFibGVOYW1lfV9vcmRlcl9pZHhgKS5vbihjb2xzLm9yZGVyKSxcbiAgICAgICAgICAgIHBhcmVudElkeDogaW5kZXgoYCR7cmVsYXRpb25zaGlwc1RhYmxlTmFtZX1fcGFyZW50X2lkeGApLm9uKGNvbHMucGFyZW50KSxcbiAgICAgICAgICAgIHBhdGhJZHg6IGluZGV4KGAke3JlbGF0aW9uc2hpcHNUYWJsZU5hbWV9X3BhdGhfaWR4YCkub24oY29scy5wYXRoKSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5sb2NhbGVJZHggPSBpbmRleChgJHtyZWxhdGlvbnNoaXBzVGFibGVOYW1lfV9sb2NhbGVfaWR4YCkub24oY29scy5sb2NhbGUpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBhZGFwdGVyLnRhYmxlc1tyZWxhdGlvbnNoaXBzVGFibGVOYW1lXSA9IHJlbGF0aW9uc2hpcHNUYWJsZVxuXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMocmVsYXRpb25zaGlwc1RhYmxlLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlbGF0aW9uPHN0cmluZz4+ID0ge1xuICAgICAgICAgIHBhcmVudDogb25lKHRhYmxlLCB7XG4gICAgICAgICAgICBmaWVsZHM6IFtyZWxhdGlvbnNoaXBzVGFibGUucGFyZW50XSxcbiAgICAgICAgICAgIHJlZmVyZW5jZXM6IFt0YWJsZS5pZF0sXG4gICAgICAgICAgICByZWxhdGlvbk5hbWU6ICdfcmVscycsXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cblxuICAgICAgICByZWxhdGlvbnNoaXBzLmZvckVhY2goKHJlbGF0aW9uVG8pID0+IHtcbiAgICAgICAgICBjb25zdCByZWxhdGVkVGFibGVOYW1lID0gdG9TbmFrZUNhc2UocmVsYXRpb25UbylcbiAgICAgICAgICBjb25zdCBpZENvbHVtbk5hbWUgPSBgJHtyZWxhdGlvblRvfUlEYFxuICAgICAgICAgIHJlc3VsdFtpZENvbHVtbk5hbWVdID0gb25lKGFkYXB0ZXIudGFibGVzW3JlbGF0ZWRUYWJsZU5hbWVdLCB7XG4gICAgICAgICAgICBmaWVsZHM6IFtyZWxhdGlvbnNoaXBzVGFibGVbaWRDb2x1bW5OYW1lXV0sXG4gICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcmVsYXRlZFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSlcblxuICAgICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uc18ke3JlbGF0aW9uc2hpcHNUYWJsZU5hbWV9YF0gPSByZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnNcbiAgICB9XG4gIH1cblxuICBjb25zdCB0YWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyh0YWJsZSwgKHsgbWFueSB9KSA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHt9XG5cbiAgICByZWxhdGlvbnNUb0J1aWxkLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICByZXN1bHRba2V5XSA9IG1hbnkoYWRhcHRlci50YWJsZXNbdmFsXSlcbiAgICB9KVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZEZpZWxkKSB7XG4gICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KGxvY2FsZXNUYWJsZSlcbiAgICB9XG5cbiAgICBpZiAoaGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgcmVzdWx0Ll90ZXh0cyA9IG1hbnkodGV4dHNUYWJsZSlcbiAgICB9XG4gICAgaWYgKGhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgcmVzdWx0Ll9udW1iZXJzID0gbWFueShudW1iZXJzVGFibGUpXG4gICAgfVxuXG4gICAgaWYgKHJlbGF0aW9uc2hpcHMuc2l6ZSAmJiByZWxhdGlvbnNoaXBzVGFibGUpIHtcbiAgICAgIHJlc3VsdC5fcmVscyA9IG1hbnkocmVsYXRpb25zaGlwc1RhYmxlLCB7XG4gICAgICAgIHJlbGF0aW9uTmFtZTogJ19yZWxzJyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KVxuXG4gIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHt0YWJsZU5hbWV9YF0gPSB0YWJsZVJlbGF0aW9uc1xuXG4gIHJldHVybiB7IGhhc01hbnlOdW1iZXJGaWVsZCwgaGFzTWFueVRleHRGaWVsZCwgcmVsYXRpb25zVG9CdWlsZCB9XG59XG4iXSwibmFtZXMiOlsiYnVpbGRUYWJsZSIsImFkYXB0ZXIiLCJiYXNlQ29sdW1ucyIsImJhc2VFeHRyYUNvbmZpZyIsImJ1aWxkTnVtYmVycyIsImJ1aWxkUmVsYXRpb25zaGlwcyIsImJ1aWxkVGV4dHMiLCJkaXNhYmxlTm90TnVsbCIsImRpc2FibGVVbmlxdWUiLCJmaWVsZHMiLCJyb290UmVsYXRpb25zVG9CdWlsZCIsInJvb3RSZWxhdGlvbnNoaXBzIiwicm9vdFRhYmxlSURDb2xUeXBlIiwicm9vdFRhYmxlTmFtZSIsImluY29taW5nUm9vdFRhYmxlTmFtZSIsInRhYmxlTmFtZSIsInRpbWVzdGFtcHMiLCJjb2x1bW5zIiwiaW5kZXhlcyIsImhhc0xvY2FsaXplZEZpZWxkIiwiaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJoYXNNYW55VGV4dEZpZWxkIiwiaGFzTWFueU51bWJlckZpZWxkIiwiaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsImhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsImxvY2FsZXNDb2x1bW5zIiwibG9jYWxlc0luZGV4ZXMiLCJsb2NhbGVzVGFibGUiLCJ0ZXh0c1RhYmxlIiwibnVtYmVyc1RhYmxlIiwicmVsYXRpb25zaGlwcyIsIlNldCIsInJlbGF0aW9uc2hpcHNUYWJsZSIsInJlbGF0aW9uc1RvQnVpbGQiLCJNYXAiLCJpZENvbFR5cGUiLCJzZXRDb2x1bW5JRCIsInRyYXZlcnNlRmllbGRzIiwibmV3VGFibGVOYW1lIiwicGFyZW50VGFibGVOYW1lIiwiY3JlYXRlZEF0IiwidGltZXN0YW1wIiwibW9kZSIsInByZWNpc2lvbiIsIndpdGhUaW1lem9uZSIsImRlZmF1bHROb3ciLCJub3ROdWxsIiwidXBkYXRlZEF0IiwidGFibGUiLCJwZ1NjaGVtYSIsImNvbHMiLCJleHRyYUNvbmZpZyIsIk9iamVjdCIsImVudHJpZXMiLCJyZWR1Y2UiLCJjb25maWciLCJrZXkiLCJmdW5jIiwiYWNjIiwiY29sTmFtZSIsInRhYmxlcyIsImxvY2FsZVRhYmxlTmFtZSIsImlkIiwic2VyaWFsIiwicHJpbWFyeUtleSIsIl9sb2NhbGUiLCJlbnVtcyIsImVudW1fX2xvY2FsZXMiLCJfcGFyZW50SUQiLCJwYXJlbnRJRENvbHVtbk1hcCIsInJlZmVyZW5jZXMiLCJvbkRlbGV0ZSIsIl9sb2NhbGVQYXJlbnQiLCJ1bmlxdWUiLCJvbiIsImxvY2FsZXNUYWJsZVJlbGF0aW9ucyIsInJlbGF0aW9ucyIsIm9uZSIsInRleHRzVGFibGVOYW1lIiwib3JkZXIiLCJpbnRlZ2VyIiwicGFyZW50IiwicGF0aCIsInZhcmNoYXIiLCJ0ZXh0IiwibG9jYWxlIiwib3JkZXJQYXJlbnRJZHgiLCJpbmRleCIsInRleHRfaWR4IiwibG9jYWxlUGFyZW50IiwidGV4dHNUYWJsZVJlbGF0aW9ucyIsIm51bWJlcnNUYWJsZU5hbWUiLCJudW1iZXIiLCJudW1lcmljIiwibnVtYmVySWR4IiwibnVtYmVyc1RhYmxlUmVsYXRpb25zIiwic2l6ZSIsInJlbGF0aW9uc2hpcENvbHVtbnMiLCJmb3JFYWNoIiwicmVsYXRpb25UbyIsImZvcm1hdHRlZFJlbGF0aW9uVG8iLCJ0b1NuYWtlQ2FzZSIsImNvbFR5cGUiLCJpZFR5cGUiLCJyZWxhdGVkQ29sbGVjdGlvbkN1c3RvbUlEIiwicGF5bG9hZCIsImNvbGxlY3Rpb25zIiwiZmluZCIsImZpZWxkIiwiZmllbGRBZmZlY3RzRGF0YSIsIm5hbWUiLCJ0eXBlIiwicmVsYXRpb25zaGlwc1RhYmxlTmFtZSIsInJlc3VsdCIsInBhcmVudElkeCIsInBhdGhJZHgiLCJsb2NhbGVJZHgiLCJyZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnMiLCJyZWxhdGlvbk5hbWUiLCJyZWxhdGVkVGFibGVOYW1lIiwiaWRDb2x1bW5OYW1lIiwidGFibGVSZWxhdGlvbnMiLCJtYW55IiwidmFsIiwiX2xvY2FsZXMiLCJfdGV4dHMiLCJfbnVtYmVycyIsIl9yZWxzIl0sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7Ozs7K0JBNkN2QkE7OztlQUFBQTs7OzRCQW5DYTt3QkFDa0Q7dUJBQzNDO29FQUNUO21DQUlVOzZCQUNOO2dDQUNHOzs7Ozs7QUEwQnhCLE1BQU1BLGFBQWEsQ0FBQyxFQUN6QkMsT0FBTyxFQUNQQyxjQUFjLENBQUMsQ0FBQyxFQUNoQkMsa0JBQWtCLENBQUMsQ0FBQyxFQUNwQkMsWUFBWSxFQUNaQyxrQkFBa0IsRUFDbEJDLFVBQVUsRUFDVkMsY0FBYyxFQUNkQyxnQkFBZ0IsS0FBSyxFQUNyQkMsTUFBTSxFQUNOQyxvQkFBb0IsRUFDcEJDLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxlQUFlQyxxQkFBcUIsRUFDcENDLFNBQVMsRUFDVEMsVUFBVSxFQUNMO0lBQ0wsTUFBTUgsZ0JBQWdCQyx5QkFBeUJDO0lBQy9DLE1BQU1FLFVBQTJDZjtJQUNq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
@@ -1,7 +1,4 @@
1
- import { integer, numeric, varchar } from 'drizzle-orm/pg-core';
2
- export declare const parentIDColumnMap: {
3
- integer: typeof integer;
4
- numeric: typeof numeric;
5
- varchar: typeof varchar;
6
- };
1
+ import { integer, numeric, uuid, varchar } from 'drizzle-orm/pg-core';
2
+ import type { IDType } from '../types';
3
+ export declare const parentIDColumnMap: Record<IDType, typeof integer<string> | typeof numeric<string> | typeof uuid<string> | typeof varchar>;
7
4
  //# sourceMappingURL=parentIDColumnMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parentIDColumnMap.d.ts","sourceRoot":"","sources":["../../src/schema/parentIDColumnMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE/D,eAAO,MAAM,iBAAiB;;;;CAI7B,CAAA"}
1
+ {"version":3,"file":"parentIDColumnMap.d.ts","sourceRoot":"","sources":["../../src/schema/parentIDColumnMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAErE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEtC,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,MAAM,EACN,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,OAAO,CAMvF,CAAA"}
@@ -12,7 +12,8 @@ const _pgcore = require("drizzle-orm/pg-core");
12
12
  const parentIDColumnMap = {
13
13
  integer: _pgcore.integer,
14
14
  numeric: _pgcore.numeric,
15
+ uuid: _pgcore.uuid,
15
16
  varchar: _pgcore.varchar
16
17
  };
17
18
 
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvcGFyZW50SURDb2x1bW5NYXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdlciwgbnVtZXJpYywgdmFyY2hhciB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5cbmV4cG9ydCBjb25zdCBwYXJlbnRJRENvbHVtbk1hcCA9IHtcbiAgaW50ZWdlcixcbiAgbnVtZXJpYyxcbiAgdmFyY2hhcixcbn1cbiJdLCJuYW1lcyI6WyJwYXJlbnRJRENvbHVtbk1hcCIsImludGVnZXIiLCJudW1lcmljIiwidmFyY2hhciJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFFYUE7OztlQUFBQTs7O3dCQUY2QjtBQUVuQyxNQUFNQSxvQkFBb0I7SUFDL0JDLFNBQUFBLGVBQU87SUFDUEMsU0FBQUEsZUFBTztJQUNQQyxTQUFBQSxlQUFPO0FBQ1QifQ==
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvcGFyZW50SURDb2x1bW5NYXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdlciwgbnVtZXJpYywgdXVpZCwgdmFyY2hhciB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5cbmltcG9ydCB0eXBlIHsgSURUeXBlIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBwYXJlbnRJRENvbHVtbk1hcDogUmVjb3JkPFxuICBJRFR5cGUsXG4gIHR5cGVvZiBpbnRlZ2VyPHN0cmluZz4gfCB0eXBlb2YgbnVtZXJpYzxzdHJpbmc+IHwgdHlwZW9mIHV1aWQ8c3RyaW5nPiB8IHR5cGVvZiB2YXJjaGFyXG4+ID0ge1xuICBpbnRlZ2VyLFxuICBudW1lcmljLFxuICB1dWlkLFxuICB2YXJjaGFyLFxufVxuIl0sIm5hbWVzIjpbInBhcmVudElEQ29sdW1uTWFwIiwiaW50ZWdlciIsIm51bWVyaWMiLCJ1dWlkIiwidmFyY2hhciJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFJYUE7OztlQUFBQTs7O3dCQUptQztBQUl6QyxNQUFNQSxvQkFHVDtJQUNGQyxTQUFBQSxlQUFPO0lBQ1BDLFNBQUFBLGVBQU87SUFDUEMsTUFBQUEsWUFBSTtJQUNKQyxTQUFBQSxlQUFPO0FBQ1QifQ==
@@ -0,0 +1,11 @@
1
+ import type { PgColumnBuilder } from 'drizzle-orm/pg-core';
2
+ import { type Field } from 'payload/types';
3
+ import type { IDType, PostgresAdapter } from '../types';
4
+ type Args = {
5
+ adapter: PostgresAdapter;
6
+ columns: Record<string, PgColumnBuilder>;
7
+ fields: Field[];
8
+ };
9
+ export declare const setColumnID: ({ adapter, columns, fields }: Args) => IDType;
10
+ export {};
11
+ //# sourceMappingURL=setColumnID.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setColumnID.d.ts","sourceRoot":"","sources":["../../src/schema/setColumnID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAG1D,OAAO,EAAE,KAAK,KAAK,EAAoB,MAAM,eAAe,CAAA;AAG5D,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAEvD,KAAK,IAAI,GAAG;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAAC,MAAM,EAAE,KAAK,EAAE,CAAA;CAAE,CAAA;AACnG,eAAO,MAAM,WAAW,iCAAkC,IAAI,KAAG,MAuBhE,CAAA"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "setColumnID", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return setColumnID;
9
+ }
10
+ });
11
+ const _pgcore = require("drizzle-orm/pg-core");
12
+ const _types = require("payload/types");
13
+ const _utilities = require("payload/utilities");
14
+ const setColumnID = ({ adapter, columns, fields })=>{
15
+ const idField = (0, _utilities.flattenTopLevelFields)(fields).find((field)=>(0, _types.fieldAffectsData)(field) && field.name === 'id');
16
+ if (idField) {
17
+ if (idField.type === 'number') {
18
+ columns.id = (0, _pgcore.numeric)('id').primaryKey();
19
+ return 'numeric';
20
+ }
21
+ if (idField.type === 'text') {
22
+ columns.id = (0, _pgcore.varchar)('id').primaryKey();
23
+ return 'varchar';
24
+ }
25
+ }
26
+ if (adapter.idType === 'uuid') {
27
+ columns.id = (0, _pgcore.uuid)('id').defaultRandom().primaryKey();
28
+ return 'uuid';
29
+ }
30
+ columns.id = (0, _pgcore.serial)('id').primaryKey();
31
+ return 'integer';
32
+ };
33
+
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvc2V0Q29sdW1uSUQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQZ0NvbHVtbkJ1aWxkZXIgfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJ1xuXG5pbXBvcnQgeyBudW1lcmljLCBzZXJpYWwsIHV1aWQsIHZhcmNoYXIgfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJ1xuaW1wb3J0IHsgdHlwZSBGaWVsZCwgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5pbXBvcnQgeyBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMgfSBmcm9tICdwYXlsb2FkL3V0aWxpdGllcydcblxuaW1wb3J0IHR5cGUgeyBJRFR5cGUsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuXG50eXBlIEFyZ3MgPSB7IGFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlcjsgY29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPjsgZmllbGRzOiBGaWVsZFtdIH1cbmV4cG9ydCBjb25zdCBzZXRDb2x1bW5JRCA9ICh7IGFkYXB0ZXIsIGNvbHVtbnMsIGZpZWxkcyB9OiBBcmdzKTogSURUeXBlID0+IHtcbiAgY29uc3QgaWRGaWVsZCA9IGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyhmaWVsZHMpLmZpbmQoXG4gICAgKGZpZWxkKSA9PiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiBmaWVsZC5uYW1lID09PSAnaWQnLFxuICApXG4gIGlmIChpZEZpZWxkKSB7XG4gICAgaWYgKGlkRmllbGQudHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbHVtbnMuaWQgPSBudW1lcmljKCdpZCcpLnByaW1hcnlLZXkoKVxuICAgICAgcmV0dXJuICdudW1lcmljJ1xuICAgIH1cblxuICAgIGlmIChpZEZpZWxkLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgY29sdW1ucy5pZCA9IHZhcmNoYXIoJ2lkJykucHJpbWFyeUtleSgpXG4gICAgICByZXR1cm4gJ3ZhcmNoYXInXG4gICAgfVxuICB9XG5cbiAgaWYgKGFkYXB0ZXIuaWRUeXBlID09PSAndXVpZCcpIHtcbiAgICBjb2x1bW5zLmlkID0gdXVpZCgnaWQnKS5kZWZhdWx0UmFuZG9tKCkucHJpbWFyeUtleSgpXG4gICAgcmV0dXJuICd1dWlkJ1xuICB9XG5cbiAgY29sdW1ucy5pZCA9IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KClcbiAgcmV0dXJuICdpbnRlZ2VyJ1xufVxuIl0sIm5hbWVzIjpbInNldENvbHVtbklEIiwiYWRhcHRlciIsImNvbHVtbnMiLCJmaWVsZHMiLCJpZEZpZWxkIiwiZmxhdHRlblRvcExldmVsRmllbGRzIiwiZmluZCIsImZpZWxkIiwiZmllbGRBZmZlY3RzRGF0YSIsIm5hbWUiLCJ0eXBlIiwiaWQiLCJudW1lcmljIiwicHJpbWFyeUtleSIsInZhcmNoYXIiLCJpZFR5cGUiLCJ1dWlkIiwiZGVmYXVsdFJhbmRvbSIsInNlcmlhbCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFTYUE7OztlQUFBQTs7O3dCQVBrQzt1QkFDRjsyQkFDUDtBQUsvQixNQUFNQSxjQUFjLENBQUMsRUFBRUMsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBUTtJQUM1RCxNQUFNQyxVQUFVQyxJQUFBQSxnQ0FBcUIsRUFBQ0YsUUFBUUcsSUFBSSxDQUNoRCxDQUFDQyxRQUFVQyxJQUFBQSx1QkFBZ0IsRUFBQ0QsVUFBVUEsTUFBTUUsSUFBSSxLQUFLO0lBRXZELElBQUlMLFNBQVM7UUFDWCxJQUFJQSxRQUFRTSxJQUFJLEtBQUssVUFBVTtZQUM3QlIsUUFBUVMsRUFBRSxHQUFHQyxJQUFBQSxlQUFPLEVBQUMsTUFBTUMsVUFBVTtZQUNyQyxPQUFPO1FBQ1Q7UUFFQSxJQUFJVCxRQUFRTSxJQUFJLEtBQUssUUFBUTtZQUMzQlIsUUFBUVMsRUFBRSxHQUFHRyxJQUFBQSxlQUFPLEVBQUMsTUFBTUQsVUFBVTtZQUNyQyxPQUFPO1FBQ1Q7SUFDRjtJQUVBLElBQUlaLFFBQVFjLE1BQU0sS0FBSyxRQUFRO1FBQzdCYixRQUFRUyxFQUFFLEdBQUdLLElBQUFBLFlBQUksRUFBQyxNQUFNQyxhQUFhLEdBQUdKLFVBQVU7UUFDbEQsT0FBTztJQUNUO0lBRUFYLFFBQVFTLEVBQUUsR0FBR08sSUFBQUEsY0FBTSxFQUFDLE1BQU1MLFVBQVU7SUFDcEMsT0FBTztBQUNUIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/schema/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAA2B,MAAM,qBAAqB,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAoBtD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAS/D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,YAAY,EAAE,OAAO,CAAA;IACrB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,4TAsBxB,IAAI,KAAG,MA4kBT,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/schema/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAA2B,MAAM,qBAAqB,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAqBtD,OAAO,KAAK,EAAE,cAAc,EAAU,eAAe,EAAE,MAAM,UAAU,CAAA;AASvE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,YAAY,EAAE,OAAO,CAAA;IACrB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,4TAsBxB,IAAI,KAAG,MA6kBT,CAAA"}
@@ -32,6 +32,7 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
32
32
  let hasManyNumberField = false;
33
33
  let hasLocalizedManyNumberField = false;
34
34
  let parentIDColType = 'integer';
35
+ if (columns.id instanceof _pgcore.PgUUIDBuilder) parentIDColType = 'uuid';
35
36
  if (columns.id instanceof _pgcore.PgNumericBuilder) parentIDColType = 'numeric';
36
37
  if (columns.id instanceof _pgcore.PgVarcharBuilder) parentIDColType = 'varchar';
37
38
  fields.forEach((field)=>{
@@ -504,4 +505,4 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
504
505
  };
505
506
  };
506
507
 
507
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdHJhdmVyc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHsgSW5kZXhCdWlsZGVyLCBQZ0NvbHVtbkJ1aWxkZXIsIFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyByZWxhdGlvbnMgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7XG4gIFBnTnVtZXJpY0J1aWxkZXIsXG4gIFBnVmFyY2hhckJ1aWxkZXIsXG4gIGJvb2xlYW4sXG4gIGluZGV4LFxuICBpbnRlZ2VyLFxuICBqc29uYixcbiAgbnVtZXJpYyxcbiAgcGdFbnVtLFxuICB0ZXh0LFxuICB0aW1lc3RhbXAsXG4gIHZhcmNoYXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBJbnZhbGlkQ29uZmlndXJhdGlvbiB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgb3B0aW9uSXNPYmplY3QgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbnMsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbXBvcnQgeyBoYXNMb2NhbGVzVGFibGUgfSBmcm9tICcuLi91dGlsaXRpZXMvaGFzTG9jYWxlc1RhYmxlJ1xuaW1wb3J0IHsgYnVpbGRUYWJsZSB9IGZyb20gJy4vYnVpbGQnXG5pbXBvcnQgeyBjcmVhdGVJbmRleCB9IGZyb20gJy4vY3JlYXRlSW5kZXgnXG5pbXBvcnQgeyBpZFRvVVVJRCB9IGZyb20gJy4vaWRUb1VVSUQnXG5pbXBvcnQgeyBwYXJlbnRJRENvbHVtbk1hcCB9IGZyb20gJy4vcGFyZW50SURDb2x1bW5NYXAnXG5pbXBvcnQgeyB2YWxpZGF0ZUV4aXN0aW5nQmxvY2tJc0lkZW50aWNhbCB9IGZyb20gJy4vdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwnXG5cbnR5cGUgQXJncyA9IHtcbiAgYWRhcHRlcjogUG9zdGdyZXNBZGFwdGVyXG4gIGJ1aWxkTnVtYmVyczogYm9vbGVhblxuICBidWlsZFJlbGF0aW9uc2hpcHM6IGJvb2xlYW5cbiAgYnVpbGRUZXh0czogYm9vbGVhblxuICBjb2x1bW5QcmVmaXg/OiBzdHJpbmdcbiAgY29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPlxuICBkaXNhYmxlTm90TnVsbDogYm9vbGVhblxuICBkaXNhYmxlVW5pcXVlPzogYm9vbGVhblxuICBmaWVsZFByZWZpeD86IHN0cmluZ1xuICBmaWVsZHM6IChGaWVsZCB8IFRhYkFzRmllbGQpW11cbiAgZm9yY2VMb2NhbGl6ZWQ/OiBib29sZWFuXG4gIGluZGV4ZXM6IFJlY29yZDxzdHJpbmcsIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyPlxuICBsb2NhbGVzQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPlxuICBsb2NhbGVzSW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+XG4gIG5ld1RhYmxlTmFtZTogc3RyaW5nXG4gIHBhcmVudFRhYmxlTmFtZTogc3RyaW5nXG4gIHJlbGF0aW9uc1RvQnVpbGQ6IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcmVsYXRpb25zaGlwczogU2V0PHN0cmluZz5cbiAgcm9vdFJlbGF0aW9uc1RvQnVpbGQ/OiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4gIHJvb3RUYWJsZUlEQ29sVHlwZTogc3RyaW5nXG4gIHJvb3RUYWJsZU5hbWU6IHN0cmluZ1xufVxuXG50eXBlIFJlc3VsdCA9IHtcbiAgaGFzTG9jYWxpemVkRmllbGQ6IGJvb2xlYW5cbiAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiBib29sZWFuXG4gIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IGJvb2xlYW5cbiAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IGJvb2xlYW5cbiAgaGFzTWFueU51bWJlckZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhblxuICBoYXNNYW55VGV4dEZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgdHJhdmVyc2VGaWVsZHMgPSAoe1xuICBhZGFwdGVyLFxuICBidWlsZE51bWJlcnMsXG4gIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgYnVpbGRUZXh0cyxcbiAgY29sdW1uUHJlZml4LFxuICBjb2x1bW5zLFxuICBkaXNhYmxlTm90TnVsbCxcbiAgZGlzYWJsZVVuaXF1ZSA9IGZhbHNlLFxuICBmaWVsZFByZWZpeCxcbiAgZmllbGRzLFxuICBmb3JjZUxvY2FsaXplZCxcbiAgaW5kZXhlcyxcbiAgbG9jYWxlc0NvbHVtbnMsXG4gIGxvY2FsZXNJbmRleGVzLFxuICBuZXdUYWJsZU5hbWUsXG4gIHBhcmVudFRhYmxlTmFtZSxcbiAgcmVsYXRpb25zVG9CdWlsZCxcbiAgcmVsYXRpb25zaGlwcyxcbiAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgcm9vdFRhYmxlTmFtZSxcbn06IEFyZ3MpOiBSZXN1bHQgPT4ge1xuICBsZXQgaGFzTG9jYWxpemVkRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTWFueVRleHRGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNNYW55TnVtYmVyRmllbGQ6ICdpbmRleCcgfCBib29sZWFuID0gZmFsc2VcbiAgbGV0IGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IGZhbHNlXG5cbiAgbGV0IHBhcmVudElEQ29sVHlwZSA9ICdpbnRlZ2VyJ1xuICBpZiAoY29sdW1ucy5pZCBpbnN0YW5jZW9mIFBnTnVtZXJpY0J1aWxkZXIpIHBhcmVudElEQ29sVHlwZSA9ICdudW1lcmljJ1xuICBpZiAoY29sdW1ucy5pZCBpbnN0YW5jZW9mIFBnVmFyY2hhckJ1aWxkZXIpIHBhcmVudElEQ29sVHlwZSA9ICd2YXJjaGFyJ1xuXG4gIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgIGlmICgnbmFtZScgaW4gZmllbGQgJiYgZmllbGQubmFtZSA9PT0gJ2lkJykgcmV0dXJuXG4gICAgbGV0IGNvbHVtbk5hbWU6IHN0cmluZ1xuICAgIGxldCBmaWVsZE5hbWU6IHN0cmluZ1xuXG4gICAgbGV0IHRhcmdldFRhYmxlID0gY29sdW1uc1xuICAgIGxldCB0YXJnZXRJbmRleGVzID0gaW5kZXhlc1xuXG4gICAgaWYgKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpKSB7XG4gICAgICBjb2x1bW5OYW1lID0gYCR7Y29sdW1uUHJlZml4IHx8ICcnfSR7ZmllbGQubmFtZVswXSA9PT0gJ18nID8gJ18nIDogJyd9JHt0b1NuYWtlQ2FzZShcbiAgICAgICAgZmllbGQubmFtZSxcbiAgICAgICl9YFxuICAgICAgZmllbGROYW1lID0gYCR7ZmllbGRQcmVmaXg/LnJlcGxhY2UoJy4nLCAnXycpIHx8ICcnfSR7ZmllbGQubmFtZX1gXG5cbiAgICAgIC8vIElmIGZpZWxkIGlzIGxvY2FsaXplZCxcbiAgICAgIC8vIGFkZCB0aGUgY29sdW1uIHRvIHRoZSBsb2NhbGUgdGFibGUgaW5zdGVhZCBvZiBtYWluIHRhYmxlXG4gICAgICBpZiAoYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24gJiYgKGZpZWxkLmxvY2FsaXplZCB8fCBmb3JjZUxvY2FsaXplZCkpIHtcbiAgICAgICAgaGFzTG9jYWxpemVkRmllbGQgPSB0cnVlXG4gICAgICAgIHRhcmdldFRhYmxlID0gbG9jYWxlc0NvbHVtbnNcbiAgICAgICAgdGFyZ2V0SW5kZXhlcyA9IGxvY2FsZXNJbmRleGVzXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgKGZpZWxkLnVuaXF1ZSB8fCBmaWVsZC5pbmRleCkgJiZcbiAgICAgICAgIVsnYXJyYXknLCAnYmxvY2tzJywgJ2dyb3VwJywgJ3BvaW50JywgJ3JlbGF0aW9uc2hpcCcsICd1cGxvYWQnXS5pbmNsdWRlcyhmaWVsZC50eXBlKSAmJlxuICAgICAgICAhKCdoYXNNYW55JyBpbiBmaWVsZCAmJiBmaWVsZC5oYXNNYW55ID09PSB0cnVlKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHVuaXF1ZSA9IGRpc2FibGVVbmlxdWUgIT09IHRydWUgJiYgZmllbGQudW5pcXVlXG4gICAgICAgIGlmICh1bmlxdWUpIHtcbiAgICAgICAgICBjb25zdCBjb25zdHJhaW50VmFsdWUgPSBgJHtmaWVsZFByZWZpeCB8fCAnJ30ke2ZpZWxkLm5hbWV9YFxuICAgICAgICAgIGlmICghYWRhcHRlci5maWVsZENvbnN0cmFpbnRzPy5bcm9vdFRhYmxlTmFtZV0pIHtcbiAgICAgICAgICAgIGFkYXB0ZXIuZmllbGRDb25zdHJhaW50c1tyb290VGFibGVOYW1lXSA9IHt9XG4gICAgICAgICAgfVxuICAgICAgICAgIGFkYXB0ZXIuZmllbGRDb25zdHJhaW50c1tyb290VGFibGVOYW1lXVtgJHtjb2x1bW5OYW1lfV9pZHhgXSA9IGNvbnN0cmFpbnRWYWx1ZVxuICAgICAgICB9XG4gICAgICAgIHRhcmdldEluZGV4ZXNbYCR7bmV3VGFibGVOYW1lfV8ke2ZpZWxkLm5hbWV9SWR4YF0gPSBjcmVhdGVJbmRleCh7XG4gICAgICAgICAgbmFtZTogZmllbGROYW1lLFxuICAgICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgICAgdGFibGVOYW1lOiBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgdW5pcXVlLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSAndGV4dCc6IHtcbiAgICAgICAgaWYgKGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkKSB7XG4gICAgICAgICAgICBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5pbmRleCkge1xuICAgICAgICAgICAgaGFzTWFueVRleHRGaWVsZCA9ICdpbmRleCdcbiAgICAgICAgICB9IGVsc2UgaWYgKCFoYXNNYW55VGV4dEZpZWxkKSB7XG4gICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC51bmlxdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgJ1VuaXF1ZSBpcyBub3Qgc3VwcG9ydGVkIGluIFBvc3RncmVzIGZvciBoYXNNYW55IHRleHQgZmllbGRzLicsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0gPSB2YXJjaGFyKGNvbHVtbk5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgIGNhc2UgJ2NvZGUnOlxuICAgICAgY2FzZSAndGV4dGFyZWEnOiB7XG4gICAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0gPSB2YXJjaGFyKGNvbHVtbk5hbWUpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ251bWJlcic6IHtcbiAgICAgICAgaWYgKGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkKSB7XG4gICAgICAgICAgICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLmluZGV4KSB7XG4gICAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQgPSAnaW5kZXgnXG4gICAgICAgICAgfSBlbHNlIGlmICghaGFzTWFueU51bWJlckZpZWxkKSB7XG4gICAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLnVuaXF1ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAnVW5pcXVlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gUG9zdGdyZXMgZm9yIGhhc01hbnkgbnVtYmVyIGZpZWxkcy4nLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0gbnVtZXJpYyhjb2x1bW5OYW1lKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3JpY2hUZXh0JzpcbiAgICAgIGNhc2UgJ2pzb24nOiB7XG4gICAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0gPSBqc29uYihjb2x1bW5OYW1lKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdkYXRlJzoge1xuICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0gdGltZXN0YW1wKGNvbHVtbk5hbWUsIHtcbiAgICAgICAgICBtb2RlOiAnc3RyaW5nJyxcbiAgICAgICAgICBwcmVjaXNpb246IDMsXG4gICAgICAgICAgd2l0aFRpbWV6b25lOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdwb2ludCc6IHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmFkaW8nOlxuICAgICAgY2FzZSAnc2VsZWN0Jzoge1xuICAgICAgICBjb25zdCBlbnVtTmFtZSA9IGBlbnVtXyR7bmV3VGFibGVOYW1lfV8ke3RvU25ha2VDYXNlKGZpZWxkLm5hbWUpfWBcblxuICAgICAgICBhZGFwdGVyLmVudW1zW2VudW1OYW1lXSA9IHBnRW51bShcbiAgICAgICAgICBlbnVtTmFtZSxcbiAgICAgICAgICBmaWVsZC5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9uSXNPYmplY3Qob3B0aW9uKSkge1xuICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLnZhbHVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgICAgICB9KSBhcyBbc3RyaW5nLCAuLi5zdHJpbmdbXV0sXG4gICAgICAgIClcblxuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlbGVjdCcgJiYgZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdFRhYmxlTmFtZSA9IGAke25ld1RhYmxlTmFtZX1fJHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1gXG4gICAgICAgICAgY29uc3QgYmFzZUNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICAgICAgICBvcmRlcjogaW50ZWdlcignb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICAgICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW3BhcmVudElEQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW3BhcmVudFRhYmxlTmFtZV0uaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgICAgICAubm90TnVsbCgpLFxuICAgICAgICAgICAgdmFsdWU6IGFkYXB0ZXIuZW51bXNbZW51bU5hbWVdKCd2YWx1ZScpLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGJhc2VFeHRyYUNvbmZpZzogUmVjb3JkPFxuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXIgfCBVbmlxdWVDb25zdHJhaW50QnVpbGRlclxuICAgICAgICAgID4gPSB7XG4gICAgICAgICAgICBvcmRlcklkeDogKGNvbHMpID0+IGluZGV4KGAke3NlbGVjdFRhYmxlTmFtZX1fb3JkZXJfaWR4YCkub24oY29scy5vcmRlciksXG4gICAgICAgICAgICBwYXJlbnRJZHg6IChjb2xzKSA9PiBpbmRleChgJHtzZWxlY3RUYWJsZU5hbWV9X3BhcmVudF9pZHhgKS5vbihjb2xzLnBhcmVudCksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgICAgICAgYmFzZUNvbHVtbnMubG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdsb2NhbGUnKS5ub3ROdWxsKClcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZy5sb2NhbGVJZHggPSAoY29scykgPT5cbiAgICAgICAgICAgICAgaW5kZXgoYCR7c2VsZWN0VGFibGVOYW1lfV9sb2NhbGVfaWR4YCkub24oY29scy5sb2NhbGUpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLmluZGV4KSB7XG4gICAgICAgICAgICBiYXNlRXh0cmFDb25maWcudmFsdWUgPSAoY29scykgPT4gaW5kZXgoYCR7c2VsZWN0VGFibGVOYW1lfV92YWx1ZV9pZHhgKS5vbihjb2xzLnZhbHVlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ1aWxkVGFibGUoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGJhc2VDb2x1bW5zLFxuICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLFxuICAgICAgICAgICAgZGlzYWJsZU5vdE51bGwsXG4gICAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgICAgZmllbGRzOiBbXSxcbiAgICAgICAgICAgIHRhYmxlTmFtZTogc2VsZWN0VGFibGVOYW1lLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLnNldChmaWVsZE5hbWUsIHNlbGVjdFRhYmxlTmFtZSlcblxuICAgICAgICAgIGNvbnN0IHNlbGVjdFRhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKGFkYXB0ZXIudGFibGVzW3NlbGVjdFRhYmxlTmFtZV0sICh7IG9uZSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlbGF0aW9uPHN0cmluZz4+ID0ge1xuICAgICAgICAgICAgICBwYXJlbnQ6IG9uZShhZGFwdGVyLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdLCB7XG4gICAgICAgICAgICAgICAgZmllbGRzOiBbYWRhcHRlci50YWJsZXNbc2VsZWN0VGFibGVOYW1lXS5wYXJlbnRdLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IFthZGFwdGVyLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdLmlkXSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uXyR7c2VsZWN0VGFibGVOYW1lfWBdID0gc2VsZWN0VGFibGVSZWxhdGlvbnNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0gYWRhcHRlci5lbnVtc1tlbnVtTmFtZV0oZmllbGROYW1lKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2NoZWNrYm94Jzoge1xuICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0gYm9vbGVhbihjb2x1bW5OYW1lKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgICAgY29uc3QgZGlzYWJsZU5vdE51bGxGcm9tSGVyZSA9IEJvb2xlYW4oZmllbGQuYWRtaW4/LmNvbmRpdGlvbikgfHwgZGlzYWJsZU5vdE51bGxcblxuICAgICAgICBjb25zdCBhcnJheVRhYmxlTmFtZSA9IGAke25ld1RhYmxlTmFtZX1fJHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1gXG4gICAgICAgIGNvbnN0IGJhc2VDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0ge1xuICAgICAgICAgIF9vcmRlcjogaW50ZWdlcignX29yZGVyJykubm90TnVsbCgpLFxuICAgICAgICAgIF9wYXJlbnRJRDogcGFyZW50SURDb2x1bW5NYXBbcGFyZW50SURDb2xUeXBlXSgnX3BhcmVudF9pZCcpXG4gICAgICAgICAgICAucmVmZXJlbmNlcygoKSA9PiBhZGFwdGVyLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYXNlRXh0cmFDb25maWc6IFJlY29yZDxcbiAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXIgfCBVbmlxdWVDb25zdHJhaW50QnVpbGRlclxuICAgICAgICA+ID0ge1xuICAgICAgICAgIF9vcmRlcklkeDogKGNvbHMpID0+IGluZGV4KGAke2FycmF5VGFibGVOYW1lfV9vcmRlcl9pZHhgKS5vbihjb2xzLl9vcmRlciksXG4gICAgICAgICAgX3BhcmVudElESWR4OiAoY29scykgPT4gaW5kZXgoYCR7YXJyYXlUYWJsZU5hbWV9X3BhcmVudF9pZF9pZHhgKS5vbihjb2xzLl9wYXJlbnRJRCksXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgYmFzZUNvbHVtbnMuX2xvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnX2xvY2FsZScpLm5vdE51bGwoKVxuICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZy5fbG9jYWxlSWR4ID0gKGNvbHMpID0+XG4gICAgICAgICAgICBpbmRleChgJHthcnJheVRhYmxlTmFtZX1fbG9jYWxlX2lkeGApLm9uKGNvbHMuX2xvY2FsZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQ6IHN1Ykhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkOiBzdWJIYXNNYW55VGV4dEZpZWxkLFxuICAgICAgICAgIHJlbGF0aW9uc1RvQnVpbGQ6IHN1YlJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgIH0gPSBidWlsZFRhYmxlKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGJhc2VDb2x1bW5zLFxuICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZyxcbiAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgIGZpZWxkczogZGlzYWJsZVVuaXF1ZSA/IGlkVG9VVUlEKGZpZWxkLmZpZWxkcykgOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc2hpcHM6IHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgdGFibGVOYW1lOiBhcnJheVRhYmxlTmFtZSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoc3ViSGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgICAgIGlmICghaGFzTWFueVRleHRGaWVsZCB8fCBzdWJIYXNNYW55VGV4dEZpZWxkID09PSAnaW5kZXgnKVxuICAgICAgICAgICAgaGFzTWFueVRleHRGaWVsZCA9IHN1Ykhhc01hbnlUZXh0RmllbGRcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3ViSGFzTWFueU51bWJlckZpZWxkKSB7XG4gICAgICAgICAgaWYgKCFoYXNNYW55TnVtYmVyRmllbGQgfHwgc3ViSGFzTWFueU51bWJlckZpZWxkID09PSAnaW5kZXgnKVxuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkID0gc3ViSGFzTWFueU51bWJlckZpZWxkXG4gICAgICAgIH1cblxuICAgICAgICByZWxhdGlvbnNUb0J1aWxkLnNldChmaWVsZE5hbWUsIGFycmF5VGFibGVOYW1lKVxuXG4gICAgICAgIGNvbnN0IGFycmF5VGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMoYWRhcHRlci50YWJsZXNbYXJyYXlUYWJsZU5hbWVdLCAoeyBtYW55LCBvbmUgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVsYXRpb248c3RyaW5nPj4gPSB7XG4gICAgICAgICAgICBfcGFyZW50SUQ6IG9uZShhZGFwdGVyLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdLCB7XG4gICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW2FycmF5VGFibGVOYW1lXS5fcGFyZW50SURdLFxuICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGFzTG9jYWxlc1RhYmxlKGZpZWxkLmZpZWxkcykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5fbG9jYWxlcyA9IG1hbnkoYWRhcHRlci50YWJsZXNbYCR7YXJyYXlUYWJsZU5hbWV9X2xvY2FsZXNgXSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdWJSZWxhdGlvbnNUb0J1aWxkLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG1hbnkoYWRhcHRlci50YWJsZXNbdmFsXSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9KVxuXG4gICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHthcnJheVRhYmxlTmFtZX1gXSA9IGFycmF5VGFibGVSZWxhdGlvbnNcblxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgZmllbGQuYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmxvY2tUYWJsZU5hbWUgPSBgJHtyb290VGFibGVOYW1lfV9ibG9ja3NfJHt0b1NuYWtlQ2FzZShibG9jay5zbHVnKX1gXG4gICAgICAgICAgaWYgKCFhZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0ge1xuICAgICAgICAgICAgICBfb3JkZXI6IGludGVnZXIoJ19vcmRlcicpLm5vdE51bGwoKSxcbiAgICAgICAgICAgICAgX3BhcmVudElEOiBwYXJlbnRJRENvbHVtbk1hcFtyb290VGFibGVJRENvbFR5cGVdKCdfcGFyZW50X2lkJylcbiAgICAgICAgICAgICAgICAucmVmZXJlbmNlcygoKSA9PiBhZGFwdGVyLnRhYmxlc1tyb290VGFibGVOYW1lXS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAgICAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgICAgICAgICAgX3BhdGg6IHRleHQoJ19wYXRoJykubm90TnVsbCgpLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBiYXNlRXh0cmFDb25maWc6IFJlY29yZDxcbiAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlciB8IFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyXG4gICAgICAgICAgICA+ID0ge1xuICAgICAgICAgICAgICBfb3JkZXJJZHg6IChjb2xzKSA9PiBpbmRleChgJHtibG9ja1RhYmxlTmFtZX1fb3JkZXJfaWR4YCkub24oY29scy5fb3JkZXIpLFxuICAgICAgICAgICAgICBfcGFyZW50SURJZHg6IChjb2xzKSA9PiBpbmRleChgJHtibG9ja1RhYmxlTmFtZX1fcGFyZW50X2lkX2lkeGApLm9uKGNvbHMuX3BhcmVudElEKSxcbiAgICAgICAgICAgICAgX3BhdGhJZHg6IChjb2xzKSA9PiBpbmRleChgJHtibG9ja1RhYmxlTmFtZX1fcGF0aF9pZHhgKS5vbihjb2xzLl9wYXRoKSxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgICAgICBiYXNlQ29sdW1ucy5fbG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdfbG9jYWxlJykubm90TnVsbCgpXG4gICAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZy5fbG9jYWxlSWR4ID0gKGNvbHMpID0+XG4gICAgICAgICAgICAgICAgaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X2xvY2FsZV9pZHhgKS5vbihjb2xzLl9sb2NhbGUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBzdWJIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IHN1Ykhhc01hbnlUZXh0RmllbGQsXG4gICAgICAgICAgICAgIHJlbGF0aW9uc1RvQnVpbGQ6IHN1YlJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgICB9ID0gYnVpbGRUYWJsZSh7XG4gICAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICAgIGJhc2VDb2x1bW5zLFxuICAgICAgICAgICAgICBiYXNlRXh0cmFDb25maWcsXG4gICAgICAgICAgICAgIGRpc2FibGVOb3ROdWxsOiBkaXNhYmxlTm90TnVsbEZyb21IZXJlLFxuICAgICAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgICAgICBmaWVsZHM6IGRpc2FibGVVbmlxdWUgPyBpZFRvVVVJRChibG9jay5maWVsZHMpIDogYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICAgICAgcm9vdFJlbGF0aW9uc2hpcHM6IHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgICAgIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgdGFibGVOYW1lOiBibG9ja1RhYmxlTmFtZSxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmIChzdWJIYXNNYW55VGV4dEZpZWxkKSB7XG4gICAgICAgICAgICAgIGlmICghaGFzTWFueVRleHRGaWVsZCB8fCBzdWJIYXNNYW55VGV4dEZpZWxkID09PSAnaW5kZXgnKVxuICAgICAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSBzdWJIYXNNYW55VGV4dEZpZWxkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdWJIYXNNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgICAgaWYgKCFoYXNNYW55TnVtYmVyRmllbGQgfHwgc3ViSGFzTWFueU51bWJlckZpZWxkID09PSAnaW5kZXgnKVxuICAgICAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9IHN1Ykhhc01hbnlOdW1iZXJGaWVsZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBibG9ja1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKFxuICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgICh7IG1hbnksIG9uZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgICAgICAgIF9wYXJlbnRJRDogb25lKGFkYXB0ZXIudGFibGVzW3Jvb3RUYWJsZU5hbWVdLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW2Jsb2NrVGFibGVOYW1lXS5fcGFyZW50SURdLFxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGhhc0xvY2FsZXNUYWJsZShibG9jay5maWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KGFkYXB0ZXIudGFibGVzW2Ake2Jsb2NrVGFibGVOYW1lfV9sb2NhbGVzYF0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3ViUmVsYXRpb25zVG9CdWlsZC5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBtYW55KGFkYXB0ZXIudGFibGVzW3ZhbF0pXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uc18ke2Jsb2NrVGFibGVOYW1lfWBdID0gYmxvY2tUYWJsZVJlbGF0aW9uc1xuICAgICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwoe1xuICAgICAgICAgICAgICBibG9jayxcbiAgICAgICAgICAgICAgbG9jYWxpemVkOiBmaWVsZC5sb2NhbGl6ZWQsXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLnNldChgX2Jsb2Nrc18ke2Jsb2NrLnNsdWd9YCwgYmxvY2tUYWJsZU5hbWUpXG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAndGFiJzpcbiAgICAgIGNhc2UgJ2dyb3VwJzoge1xuICAgICAgICBpZiAoISgnbmFtZScgaW4gZmllbGQpKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkRmllbGQsXG4gICAgICAgICAgICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkLFxuICAgICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQ6IGdyb3VwSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogZ3JvdXBIYXNNYW55VGV4dEZpZWxkLFxuICAgICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgYnVpbGROdW1iZXJzLFxuICAgICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgICAgYnVpbGRUZXh0cyxcbiAgICAgICAgICAgIGNvbHVtblByZWZpeCxcbiAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICBkaXNhYmxlTm90TnVsbCxcbiAgICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgICBmaWVsZFByZWZpeCxcbiAgICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgICAgZm9yY2VMb2NhbGl6ZWQsXG4gICAgICAgICAgICBpbmRleGVzLFxuICAgICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICAgICAgICAgIG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICAgIHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgICByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRGaWVsZCkgaGFzTG9jYWxpemVkRmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIGlmIChncm91cEhhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCkgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNNYW55TnVtYmVyRmllbGQpIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlzYWJsZU5vdE51bGxGcm9tSGVyZSA9IEJvb2xlYW4oZmllbGQuYWRtaW4/LmNvbmRpdGlvbikgfHwgZGlzYWJsZU5vdE51bGxcblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiBncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkOiBncm91cEhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBncm91cEhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkOiBncm91cEhhc01hbnlUZXh0RmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZE51bWJlcnMsXG4gICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4OiBgJHtjb2x1bW5OYW1lfV9gLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeDogYCR7ZmllbGROYW1lfS5gLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGZvcmNlTG9jYWxpemVkOiBmaWVsZC5sb2NhbGl6ZWQsXG4gICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICAgICAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICAgICAgICBuZXdUYWJsZU5hbWU6IGAke3BhcmVudFRhYmxlTmFtZX1fJHtjb2x1bW5OYW1lfWAsXG4gICAgICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRGaWVsZCkgaGFzTG9jYWxpemVkRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTWFueVRleHRGaWVsZCkgaGFzTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCkgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCkgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICBjb25zdCBkaXNhYmxlTm90TnVsbEZyb21IZXJlID0gQm9vbGVhbihmaWVsZC5hZG1pbj8uY29uZGl0aW9uKSB8fCBkaXNhYmxlTm90TnVsbFxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRGaWVsZDogdGFiSGFzTG9jYWxpemVkRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiB0YWJIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogdGFiSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogdGFiSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiB0YWJIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogdGFiSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgfSA9IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGJ1aWxkTnVtYmVycyxcbiAgICAgICAgICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgYnVpbGRUZXh0cyxcbiAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgIGZpZWxkUHJlZml4LFxuICAgICAgICAgIGZpZWxkczogZmllbGQudGFicy5tYXAoKHRhYikgPT4gKHsgLi4udGFiLCB0eXBlOiAndGFiJyB9KSksXG4gICAgICAgICAgZm9yY2VMb2NhbGl6ZWQsXG4gICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICAgICAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGFiSGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAodGFiSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAodGFiSGFzTWFueVRleHRGaWVsZCkgaGFzTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNNYW55TnVtYmVyRmllbGQpIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCkgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyb3cnOlxuICAgICAgY2FzZSAnY29sbGFwc2libGUnOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRGaWVsZDogcm93SGFzTG9jYWxpemVkRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiByb3dIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogcm93SGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogcm93SGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiByb3dIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogcm93SGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgfSA9IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGJ1aWxkTnVtYmVycyxcbiAgICAgICAgICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgYnVpbGRUZXh0cyxcbiAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgIGZpZWxkUHJlZml4LFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lOiBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAocm93SGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAocm93SGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAocm93SGFzTWFueVRleHRGaWVsZCkgaGFzTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNNYW55TnVtYmVyRmllbGQpIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCkgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyZWxhdGlvbnNoaXAnOlxuICAgICAgY2FzZSAndXBsb2FkJzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQucmVsYXRpb25UbykpIHtcbiAgICAgICAgICBmaWVsZC5yZWxhdGlvblRvLmZvckVhY2goKHJlbGF0aW9uKSA9PiByZWxhdGlvbnNoaXBzLmFkZChyZWxhdGlvbikpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVsYXRpb25zaGlwcy5hZGQoZmllbGQucmVsYXRpb25UbylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGZpZWxkLmFkbWluICYmIGZpZWxkLmFkbWluLmNvbmRpdGlvblxuXG4gICAgaWYgKFxuICAgICAgIWRpc2FibGVOb3ROdWxsICYmXG4gICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdICYmXG4gICAgICAncmVxdWlyZWQnIGluIGZpZWxkICYmXG4gICAgICBmaWVsZC5yZXF1aXJlZCAmJlxuICAgICAgIWNvbmRpdGlvblxuICAgICkge1xuICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXS5ub3ROdWxsKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBoYXNMb2NhbGl6ZWRGaWVsZCxcbiAgICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCxcbiAgICBoYXNNYW55TnVtYmVyRmllbGQsXG4gICAgaGFzTWFueVRleHRGaWVsZCxcbiAgfVxufVxuIl0sIm5hbWVzIjpbInRyYXZlcnNlRmllbGRzIiwiYWRhcHRlciIsImJ1aWxkTnVtYmVycyIsImJ1aWxkUmVsYXRpb25zaGlwcyIsImJ1aWxkVGV4dHMiLCJjb2x1bW5QcmVmaXgiLCJjb2x1bW5zIiwiZGlzYWJsZU5vdE51bGwiLCJkaXNhYmxlVW5pcXVlIiwiZmllbGRQcmVmaXgiLCJmaWVsZHMiLCJmb3JjZUxvY2FsaXplZCIsImluZGV4ZXMiLCJsb2NhbGVzQ29sdW1ucyIsImxvY2FsZXNJbmRleGVzIiwibmV3VGFibGVOYW1lIiwicGFyZW50VGFibGVOYW1lIiwicmVsYXRpb25zVG9CdWlsZCIsInJlbGF0aW9uc2hpcHMiLCJyb290UmVsYXRpb25zVG9CdWlsZCIsInJvb3RUYWJsZUlEQ29sVHlwZSIsInJvb3RUYWJsZU5hbWUiLCJoYXNMb2NhbGl6ZWRGaWVsZCIsImhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkIiwiaGFzTWFueVRleHRGaWVsZCIsImhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQiLCJoYXNNYW55TnVtYmVyRmllbGQiLCJoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQiLCJwYXJlbnRJRENvbFR5cGUiLCJpZCIsIlBnTnVtZXJpY0J1aWxkZXIiLCJQZ1ZhcmNoYXJCdWlsZGVyIiwiZm9yRWFjaCIsImZpZWxkIiwibmFtZSIsImNvbHVtbk5hbWUiLCJmaWVsZE5hbWUiLCJ0YXJnZXRUYWJsZSIsInRhcmdldEluZGV4ZXMiLCJmaWVsZEFmZmVjdHNEYXRhIiwidG9TbmFrZUNhc2UiLCJyZXBsYWNlIiwicGF5bG9hZCIsImNvbmZpZyIsImxvY2FsaXphdGlvbiIsImxvY2FsaXplZCIsInVuaXF1ZSIsImluZGV4IiwiaW5jbHVkZXMiLCJ0eXBlIiwiaGFzTWFueSIsImNvbnN0cmFpbnRWYWx1ZSIsImZpZWxkQ29uc3RyYWludHMiLCJjcmVhdGVJbmRleCIsInRhYmxlTmFtZSIsIkludmFsaWRDb25maWd1cmF0aW9uIiwidmFyY2hhciIsIm51bWVyaWMiLCJqc29uYiIsInRpbWVzdGFtcCIsIm1vZGUiLCJwcmVjaXNpb24iLCJ3aXRoVGltZXpvbmUiLCJlbnVtTmFtZSIsImVudW1zIiwicGdFbnVtIiwib3B0aW9ucyIsIm1hcCIsIm9wdGlvbiIsIm9wdGlvbklzT2JqZWN0IiwidmFsdWUiLCJzZWxlY3RUYWJsZU5hbWUiLCJiYXNlQ29sdW1ucyIsIm9yZGVyIiwiaW50ZWdlciIsIm5vdE51bGwiLCJwYXJlbnQiLCJwYXJlbnRJRENvbHVtbk1hcCIsInJlZmVyZW5jZXMiLCJ0YWJsZXMiLCJvbkRlbGV0ZSIsImJhc2VFeHRyYUNvbmZpZyIsIm9yZGVySWR4IiwiY29scyIsIm9uIiwicGFyZW50SWR4IiwibG9jYWxlIiwiZW51bV9fbG9jYWxlcyIsImxvY2FsZUlkeCIsImJ1aWxkVGFibGUiLCJzZXQiLCJzZWxlY3RUYWJsZVJlbGF0aW9ucyIsInJlbGF0aW9ucyIsIm9uZSIsInJlc3VsdCIsImJvb2xlYW4iLCJkaXNhYmxlTm90TnVsbEZyb21IZXJlIiwiQm9vbGVhbiIsImFkbWluIiwiY29uZGl0aW9uIiwiYXJyYXlUYWJsZU5hbWUiLCJfb3JkZXIiLCJfcGFyZW50SUQiLCJfb3JkZXJJZHgiLCJfcGFyZW50SURJZHgiLCJfbG9jYWxlIiwiX2xvY2FsZUlkeCIsInN1Ykhhc01hbnlOdW1iZXJGaWVsZCIsInN1Ykhhc01hbnlUZXh0RmllbGQiLCJzdWJSZWxhdGlvbnNUb0J1aWxkIiwiaWRUb1VVSUQiLCJyb290UmVsYXRpb25zaGlwcyIsImFycmF5VGFibGVSZWxhdGlvbnMiLCJtYW55IiwiaGFzTG9jYWxlc1RhYmxlIiwiX2xvY2FsZXMiLCJ2YWwiLCJrZXkiLCJibG9ja3MiLCJibG9jayIsImJsb2NrVGFibGVOYW1lIiwic2x1ZyIsIl9wYXRoIiwidGV4dCIsIl9wYXRoSWR4IiwiYmxvY2tUYWJsZVJlbGF0aW9ucyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsIiwidGFibGUiLCJncm91cEhhc0xvY2FsaXplZEZpZWxkIiwiZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQiLCJncm91cEhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQiLCJncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkIiwiZ3JvdXBIYXNNYW55TnVtYmVyRmllbGQiLCJncm91cEhhc01hbnlUZXh0RmllbGQiLCJ0YWJIYXNMb2NhbGl6ZWRGaWVsZCIsInRhYkhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsInRhYkhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQiLCJ0YWJIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsInRhYkhhc01hbnlOdW1iZXJGaWVsZCIsInRhYkhhc01hbnlUZXh0RmllbGQiLCJ0YWJzIiwidGFiIiwicm93SGFzTG9jYWxpemVkRmllbGQiLCJyb3dIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQiLCJyb3dIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkIiwicm93SGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJyb3dIYXNNYW55TnVtYmVyRmllbGQiLCJyb3dIYXNNYW55VGV4dEZpZWxkIiwiQXJyYXkiLCJpc0FycmF5IiwicmVsYXRpb25UbyIsInJlbGF0aW9uIiwiYWRkIiwicmVxdWlyZWQiXSwibWFwcGluZ3MiOiJBQUFBLG9DQUFvQzs7OzsrQkFpRXZCQTs7O2VBQUFBOzs7NEJBNURhO3dCQWFuQjt3QkFDOEI7dUJBQ1k7b0VBQ3pCO2lDQUlRO3VCQUNMOzZCQUNDOzBCQUNIO21DQUNTO2tEQUNlOzs7Ozs7QUFtQzFDLE1BQU1BLGlCQUFpQixDQUFDLEVBQzdCQyxPQUFPLEVBQ1BDLFlBQVksRUFDWkMsa0JBQWtCLEVBQ2xCQyxVQUFVLEVBQ1ZDLFlBQVksRUFDWkMsT0FBTyxFQUNQQyxjQUFjLEVBQ2RDLGdCQUFnQixLQUFLLEVBQ3JCQyxXQUFXLEVBQ1hDLE1BQU0sRUFDTkMsY0FBYyxFQUNkQyxPQUFPLEVBQ1BDLGNBQWMsRUFDZEMsY0FBYyxFQUNkQyxZQUFZLEVBQ1pDLGVBQWUsRUFDZkMsZ0JBQWdCLEVBQ2hCQyxhQUFhLEVBQ2JDLG9CQUFvQixFQUNwQkMsa0JBQWtCLEVBQ2xCQyxhQUFhLEVBQ1I7SUFDTCxJQUFJQyxvQkFBb0I7SUFDeEIsSUFBSUMsZ0NBQWdDO0lBQ3BDLElBQUlDLG1CQUFzQztJQUMxQyxJQUFJQyw0QkFBNEI7SUFDaEMsSUFBSUMscUJB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
508
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdHJhdmVyc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHsgSW5kZXhCdWlsZGVyLCBQZ0NvbHVtbkJ1aWxkZXIsIFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyByZWxhdGlvbnMgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7XG4gIFBnTnVtZXJpY0J1aWxkZXIsXG4gIFBnVVVJREJ1aWxkZXIsXG4gIFBnVmFyY2hhckJ1aWxkZXIsXG4gIGJvb2xlYW4sXG4gIGluZGV4LFxuICBpbnRlZ2VyLFxuICBqc29uYixcbiAgbnVtZXJpYyxcbiAgcGdFbnVtLFxuICB0ZXh0LFxuICB0aW1lc3RhbXAsXG4gIHZhcmNoYXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBJbnZhbGlkQ29uZmlndXJhdGlvbiB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgb3B0aW9uSXNPYmplY3QgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbnMsIElEVHlwZSwgUG9zdGdyZXNBZGFwdGVyIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCB7IGhhc0xvY2FsZXNUYWJsZSB9IGZyb20gJy4uL3V0aWxpdGllcy9oYXNMb2NhbGVzVGFibGUnXG5pbXBvcnQgeyBidWlsZFRhYmxlIH0gZnJvbSAnLi9idWlsZCdcbmltcG9ydCB7IGNyZWF0ZUluZGV4IH0gZnJvbSAnLi9jcmVhdGVJbmRleCdcbmltcG9ydCB7IGlkVG9VVUlEIH0gZnJvbSAnLi9pZFRvVVVJRCdcbmltcG9ydCB7IHBhcmVudElEQ29sdW1uTWFwIH0gZnJvbSAnLi9wYXJlbnRJRENvbHVtbk1hcCdcbmltcG9ydCB7IHZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsIH0gZnJvbSAnLi92YWxpZGF0ZUV4aXN0aW5nQmxvY2tJc0lkZW50aWNhbCdcblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgYnVpbGROdW1iZXJzOiBib29sZWFuXG4gIGJ1aWxkUmVsYXRpb25zaGlwczogYm9vbGVhblxuICBidWlsZFRleHRzOiBib29sZWFuXG4gIGNvbHVtblByZWZpeD86IHN0cmluZ1xuICBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+XG4gIGRpc2FibGVOb3ROdWxsOiBib29sZWFuXG4gIGRpc2FibGVVbmlxdWU/OiBib29sZWFuXG4gIGZpZWxkUHJlZml4Pzogc3RyaW5nXG4gIGZpZWxkczogKEZpZWxkIHwgVGFiQXNGaWVsZClbXVxuICBmb3JjZUxvY2FsaXplZD86IGJvb2xlYW5cbiAgaW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+XG4gIGxvY2FsZXNDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+XG4gIGxvY2FsZXNJbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlcj5cbiAgbmV3VGFibGVOYW1lOiBzdHJpbmdcbiAgcGFyZW50VGFibGVOYW1lOiBzdHJpbmdcbiAgcmVsYXRpb25zVG9CdWlsZDogTWFwPHN0cmluZywgc3RyaW5nPlxuICByZWxhdGlvbnNoaXBzOiBTZXQ8c3RyaW5nPlxuICByb290UmVsYXRpb25zVG9CdWlsZD86IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcm9vdFRhYmxlSURDb2xUeXBlOiBzdHJpbmdcbiAgcm9vdFRhYmxlTmFtZTogc3RyaW5nXG59XG5cbnR5cGUgUmVzdWx0ID0ge1xuICBoYXNMb2NhbGl6ZWRGaWVsZDogYm9vbGVhblxuICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQ6IGJvb2xlYW5cbiAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogYm9vbGVhblxuICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogYm9vbGVhblxuICBoYXNNYW55TnVtYmVyRmllbGQ6ICdpbmRleCcgfCBib29sZWFuXG4gIGhhc01hbnlUZXh0RmllbGQ6ICdpbmRleCcgfCBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCB0cmF2ZXJzZUZpZWxkcyA9ICh7XG4gIGFkYXB0ZXIsXG4gIGJ1aWxkTnVtYmVycyxcbiAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICBidWlsZFRleHRzLFxuICBjb2x1bW5QcmVmaXgsXG4gIGNvbHVtbnMsXG4gIGRpc2FibGVOb3ROdWxsLFxuICBkaXNhYmxlVW5pcXVlID0gZmFsc2UsXG4gIGZpZWxkUHJlZml4LFxuICBmaWVsZHMsXG4gIGZvcmNlTG9jYWxpemVkLFxuICBpbmRleGVzLFxuICBsb2NhbGVzQ29sdW1ucyxcbiAgbG9jYWxlc0luZGV4ZXMsXG4gIG5ld1RhYmxlTmFtZSxcbiAgcGFyZW50VGFibGVOYW1lLFxuICByZWxhdGlvbnNUb0J1aWxkLFxuICByZWxhdGlvbnNoaXBzLFxuICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICByb290VGFibGVOYW1lLFxufTogQXJncyk6IFJlc3VsdCA9PiB7XG4gIGxldCBoYXNMb2NhbGl6ZWRGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNNYW55VGV4dEZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhbiA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gZmFsc2VcbiAgbGV0IGhhc01hbnlOdW1iZXJGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gZmFsc2VcblxuICBsZXQgcGFyZW50SURDb2xUeXBlOiBJRFR5cGUgPSAnaW50ZWdlcidcbiAgaWYgKGNvbHVtbnMuaWQgaW5zdGFuY2VvZiBQZ1VVSURCdWlsZGVyKSBwYXJlbnRJRENvbFR5cGUgPSAndXVpZCdcbiAgaWYgKGNvbHVtbnMuaWQgaW5zdGFuY2VvZiBQZ051bWVyaWNCdWlsZGVyKSBwYXJlbnRJRENvbFR5cGUgPSAnbnVtZXJpYydcbiAgaWYgKGNvbHVtbnMuaWQgaW5zdGFuY2VvZiBQZ1ZhcmNoYXJCdWlsZGVyKSBwYXJlbnRJRENvbFR5cGUgPSAndmFyY2hhcidcblxuICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICBpZiAoJ25hbWUnIGluIGZpZWxkICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpIHJldHVyblxuICAgIGxldCBjb2x1bW5OYW1lOiBzdHJpbmdcbiAgICBsZXQgZmllbGROYW1lOiBzdHJpbmdcblxuICAgIGxldCB0YXJnZXRUYWJsZSA9IGNvbHVtbnNcbiAgICBsZXQgdGFyZ2V0SW5kZXhlcyA9IGluZGV4ZXNcblxuICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgY29sdW1uTmFtZSA9IGAke2NvbHVtblByZWZpeCB8fCAnJ30ke2ZpZWxkLm5hbWVbMF0gPT09ICdfJyA/ICdfJyA6ICcnfSR7dG9TbmFrZUNhc2UoXG4gICAgICAgIGZpZWxkLm5hbWUsXG4gICAgICApfWBcbiAgICAgIGZpZWxkTmFtZSA9IGAke2ZpZWxkUHJlZml4Py5yZXBsYWNlKCcuJywgJ18nKSB8fCAnJ30ke2ZpZWxkLm5hbWV9YFxuXG4gICAgICAvLyBJZiBmaWVsZCBpcyBsb2NhbGl6ZWQsXG4gICAgICAvLyBhZGQgdGhlIGNvbHVtbiB0byB0aGUgbG9jYWxlIHRhYmxlIGluc3RlYWQgb2YgbWFpbiB0YWJsZVxuICAgICAgaWYgKGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uICYmIChmaWVsZC5sb2NhbGl6ZWQgfHwgZm9yY2VMb2NhbGl6ZWQpKSB7XG4gICAgICAgIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICB0YXJnZXRUYWJsZSA9IGxvY2FsZXNDb2x1bW5zXG4gICAgICAgIHRhcmdldEluZGV4ZXMgPSBsb2NhbGVzSW5kZXhlc1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIChmaWVsZC51bmlxdWUgfHwgZmllbGQuaW5kZXgpICYmXG4gICAgICAgICFbJ2FycmF5JywgJ2Jsb2NrcycsICdncm91cCcsICdwb2ludCcsICdyZWxhdGlvbnNoaXAnLCAndXBsb2FkJ10uaW5jbHVkZXMoZmllbGQudHlwZSkgJiZcbiAgICAgICAgISgnaGFzTWFueScgaW4gZmllbGQgJiYgZmllbGQuaGFzTWFueSA9PT0gdHJ1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCB1bmlxdWUgPSBkaXNhYmxlVW5pcXVlICE9PSB0cnVlICYmIGZpZWxkLnVuaXF1ZVxuICAgICAgICBpZiAodW5pcXVlKSB7XG4gICAgICAgICAgY29uc3QgY29uc3RyYWludFZhbHVlID0gYCR7ZmllbGRQcmVmaXggfHwgJyd9JHtmaWVsZC5uYW1lfWBcbiAgICAgICAgICBpZiAoIWFkYXB0ZXIuZmllbGRDb25zdHJhaW50cz8uW3Jvb3RUYWJsZU5hbWVdKSB7XG4gICAgICAgICAgICBhZGFwdGVyLmZpZWxkQ29uc3RyYWludHNbcm9vdFRhYmxlTmFtZV0gPSB7fVxuICAgICAgICAgIH1cbiAgICAgICAgICBhZGFwdGVyLmZpZWxkQ29uc3RyYWludHNbcm9vdFRhYmxlTmFtZV1bYCR7Y29sdW1uTmFtZX1faWR4YF0gPSBjb25zdHJhaW50VmFsdWVcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRJbmRleGVzW2Ake25ld1RhYmxlTmFtZX1fJHtmaWVsZC5uYW1lfUlkeGBdID0gY3JlYXRlSW5kZXgoe1xuICAgICAgICAgIG5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHVuaXF1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuaW5kZXgpIHtcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSAnaW5kZXgnXG4gICAgICAgICAgfSBlbHNlIGlmICghaGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgICAgICAgaGFzTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQudW5pcXVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICdVbmlxdWUgaXMgbm90IHN1cHBvcnRlZCBpbiBQb3N0Z3JlcyBmb3IgaGFzTWFueSB0ZXh0IGZpZWxkcy4nLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0gdmFyY2hhcihjb2x1bW5OYW1lKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdlbWFpbCc6XG4gICAgICBjYXNlICdjb2RlJzpcbiAgICAgIGNhc2UgJ3RleHRhcmVhJzoge1xuICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0gdmFyY2hhcihjb2x1bW5OYW1lKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdudW1iZXInOiB7XG4gICAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5pbmRleCkge1xuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkID0gJ2luZGV4J1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC51bmlxdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgJ1VuaXF1ZSBpcyBub3Qgc3VwcG9ydGVkIGluIFBvc3RncmVzIGZvciBoYXNNYW55IG51bWJlciBmaWVsZHMuJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IG51bWVyaWMoY29sdW1uTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyaWNoVGV4dCc6XG4gICAgICBjYXNlICdqc29uJzoge1xuICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0ganNvbmIoY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnZGF0ZSc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IHRpbWVzdGFtcChjb2x1bW5OYW1lLCB7XG4gICAgICAgICAgbW9kZTogJ3N0cmluZycsXG4gICAgICAgICAgcHJlY2lzaW9uOiAzLFxuICAgICAgICAgIHdpdGhUaW1lem9uZTogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncG9pbnQnOiB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgIGNhc2UgJ3NlbGVjdCc6IHtcbiAgICAgICAgY29uc3QgZW51bU5hbWUgPSBgZW51bV8ke25ld1RhYmxlTmFtZX1fJHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1gXG5cbiAgICAgICAgYWRhcHRlci5lbnVtc1tlbnVtTmFtZV0gPSBwZ0VudW0oXG4gICAgICAgICAgZW51bU5hbWUsXG4gICAgICAgICAgZmllbGQub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbklzT2JqZWN0KG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfSkgYXMgW3N0cmluZywgLi4uc3RyaW5nW11dLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWxlY3QnICYmIGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZU5hbWUgPSBgJHtuZXdUYWJsZU5hbWV9XyR7dG9TbmFrZUNhc2UoZmllbGQubmFtZSl9YFxuICAgICAgICAgIGNvbnN0IGJhc2VDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0ge1xuICAgICAgICAgICAgb3JkZXI6IGludGVnZXIoJ29yZGVyJykubm90TnVsbCgpLFxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRJRENvbHVtbk1hcFtwYXJlbnRJRENvbFR5cGVdKCdwYXJlbnRfaWQnKVxuICAgICAgICAgICAgICAucmVmZXJlbmNlcygoKSA9PiBhZGFwdGVyLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgICAgICAgIHZhbHVlOiBhZGFwdGVyLmVudW1zW2VudW1OYW1lXSgndmFsdWUnKSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBiYXNlRXh0cmFDb25maWc6IFJlY29yZDxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXJcbiAgICAgICAgICA+ID0ge1xuICAgICAgICAgICAgb3JkZXJJZHg6IChjb2xzKSA9PiBpbmRleChgJHtzZWxlY3RUYWJsZU5hbWV9X29yZGVyX2lkeGApLm9uKGNvbHMub3JkZXIpLFxuICAgICAgICAgICAgcGFyZW50SWR4OiAoY29scykgPT4gaW5kZXgoYCR7c2VsZWN0VGFibGVOYW1lfV9wYXJlbnRfaWR4YCkub24oY29scy5wYXJlbnQpLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGJhc2VDb2x1bW5zLmxvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnbG9jYWxlJykubm90TnVsbCgpXG4gICAgICAgICAgICBiYXNlRXh0cmFDb25maWcubG9jYWxlSWR4ID0gKGNvbHMpID0+XG4gICAgICAgICAgICAgIGluZGV4KGAke3NlbGVjdFRhYmxlTmFtZX1fbG9jYWxlX2lkeGApLm9uKGNvbHMubG9jYWxlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5pbmRleCkge1xuICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLnZhbHVlID0gKGNvbHMpID0+IGluZGV4KGAke3NlbGVjdFRhYmxlTmFtZX1fdmFsdWVfaWR4YCkub24oY29scy52YWx1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWlsZFRhYmxlKHtcbiAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZyxcbiAgICAgICAgICAgIGRpc2FibGVOb3ROdWxsLFxuICAgICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICAgIGZpZWxkczogW10sXG4gICAgICAgICAgICB0YWJsZU5hbWU6IHNlbGVjdFRhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZC5zZXQoZmllbGROYW1lLCBzZWxlY3RUYWJsZU5hbWUpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhhZGFwdGVyLnRhYmxlc1tzZWxlY3RUYWJsZU5hbWVdLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgICAgcGFyZW50OiBvbmUoYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW3NlbGVjdFRhYmxlTmFtZV0ucGFyZW50XSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZF0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbl8ke3NlbGVjdFRhYmxlTmFtZX1gXSA9IHNlbGVjdFRhYmxlUmVsYXRpb25zXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGFkYXB0ZXIuZW51bXNbZW51bU5hbWVdKGZpZWxkTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGJvb2xlYW4oY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3QgYXJyYXlUYWJsZU5hbWUgPSBgJHtuZXdUYWJsZU5hbWV9XyR7dG9TbmFrZUNhc2UoZmllbGQubmFtZSl9YFxuICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICBfb3JkZXI6IGludGVnZXIoJ19vcmRlcicpLm5vdE51bGwoKSxcbiAgICAgICAgICBfcGFyZW50SUQ6IHBhcmVudElEQ29sdW1uTWFwW3BhcmVudElEQ29sVHlwZV0oJ19wYXJlbnRfaWQnKVxuICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAgICAgICAubm90TnVsbCgpLFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXJcbiAgICAgICAgPiA9IHtcbiAgICAgICAgICBfb3JkZXJJZHg6IChjb2xzKSA9PiBpbmRleChgJHthcnJheVRhYmxlTmFtZX1fb3JkZXJfaWR4YCkub24oY29scy5fb3JkZXIpLFxuICAgICAgICAgIF9wYXJlbnRJRElkeDogKGNvbHMpID0+IGluZGV4KGAke2FycmF5VGFibGVOYW1lfV9wYXJlbnRfaWRfaWR4YCkub24oY29scy5fcGFyZW50SUQpLFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIGJhc2VDb2x1bW5zLl9sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ19sb2NhbGUnKS5ub3ROdWxsKClcbiAgICAgICAgICBiYXNlRXh0cmFDb25maWcuX2xvY2FsZUlkeCA9IChjb2xzKSA9PlxuICAgICAgICAgICAgaW5kZXgoYCR7YXJyYXlUYWJsZU5hbWV9X2xvY2FsZV9pZHhgKS5vbihjb2xzLl9sb2NhbGUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBzdWJIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogc3ViSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkOiBzdWJSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICB9ID0gYnVpbGRUYWJsZSh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICBiYXNlRXh0cmFDb25maWcsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZHM6IGRpc2FibGVVbmlxdWUgPyBpZFRvVVVJRChmaWVsZC5maWVsZHMpIDogZmllbGQuZmllbGRzLFxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNoaXBzOiByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZTogYXJyYXlUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHN1Ykhhc01hbnlUZXh0RmllbGQpIHtcbiAgICAgICAgICBpZiAoIWhhc01hbnlUZXh0RmllbGQgfHwgc3ViSGFzTWFueVRleHRGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSBzdWJIYXNNYW55VGV4dEZpZWxkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN1Ykhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgICAgIGlmICghaGFzTWFueU51bWJlckZpZWxkIHx8IHN1Ykhhc01hbnlOdW1iZXJGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9IHN1Ykhhc01hbnlOdW1iZXJGaWVsZFxuICAgICAgICB9XG5cbiAgICAgICAgcmVsYXRpb25zVG9CdWlsZC5zZXQoZmllbGROYW1lLCBhcnJheVRhYmxlTmFtZSlcblxuICAgICAgICBjb25zdCBhcnJheVRhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKGFkYXB0ZXIudGFibGVzW2FycmF5VGFibGVOYW1lXSwgKHsgbWFueSwgb25lIH0pID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlbGF0aW9uPHN0cmluZz4+ID0ge1xuICAgICAgICAgICAgX3BhcmVudElEOiBvbmUoYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICBmaWVsZHM6IFthZGFwdGVyLnRhYmxlc1thcnJheVRhYmxlTmFtZV0uX3BhcmVudElEXSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlczogW2FkYXB0ZXIudGFibGVzW3BhcmVudFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGhhc0xvY2FsZXNUYWJsZShmaWVsZC5maWVsZHMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KGFkYXB0ZXIudGFibGVzW2Ake2FycmF5VGFibGVOYW1lfV9sb2NhbGVzYF0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3ViUmVsYXRpb25zVG9CdWlsZC5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBtYW55KGFkYXB0ZXIudGFibGVzW3ZhbF0pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSlcblxuICAgICAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7YXJyYXlUYWJsZU5hbWV9YF0gPSBhcnJheVRhYmxlUmVsYXRpb25zXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYmxvY2tzJzoge1xuICAgICAgICBjb25zdCBkaXNhYmxlTm90TnVsbEZyb21IZXJlID0gQm9vbGVhbihmaWVsZC5hZG1pbj8uY29uZGl0aW9uKSB8fCBkaXNhYmxlTm90TnVsbFxuXG4gICAgICAgIGZpZWxkLmJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgICAgIGNvbnN0IGJsb2NrVGFibGVOYW1lID0gYCR7cm9vdFRhYmxlTmFtZX1fYmxvY2tzXyR7dG9TbmFrZUNhc2UoYmxvY2suc2x1Zyl9YFxuICAgICAgICAgIGlmICghYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICAgICAgX29yZGVyOiBpbnRlZ2VyKCdfb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICAgICAgICAgIF9wYXJlbnRJRDogcGFyZW50SURDb2x1bW5NYXBbcm9vdFRhYmxlSURDb2xUeXBlXSgnX3BhcmVudF9pZCcpXG4gICAgICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0uaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgICAgICAgIF9wYXRoOiB0ZXh0KCdfcGF0aCcpLm5vdE51bGwoKSxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXIgfCBVbmlxdWVDb25zdHJhaW50QnVpbGRlclxuICAgICAgICAgICAgPiA9IHtcbiAgICAgICAgICAgICAgX29yZGVySWR4OiAoY29scykgPT4gaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X29yZGVyX2lkeGApLm9uKGNvbHMuX29yZGVyKSxcbiAgICAgICAgICAgICAgX3BhcmVudElESWR4OiAoY29scykgPT4gaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X3BhcmVudF9pZF9pZHhgKS5vbihjb2xzLl9wYXJlbnRJRCksXG4gICAgICAgICAgICAgIF9wYXRoSWR4OiAoY29scykgPT4gaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X3BhdGhfaWR4YCkub24oY29scy5fcGF0aCksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgICAgYmFzZUNvbHVtbnMuX2xvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnX2xvY2FsZScpLm5vdE51bGwoKVxuICAgICAgICAgICAgICBiYXNlRXh0cmFDb25maWcuX2xvY2FsZUlkeCA9IChjb2xzKSA9PlxuICAgICAgICAgICAgICAgIGluZGV4KGAke2Jsb2NrVGFibGVOYW1lfV9sb2NhbGVfaWR4YCkub24oY29scy5fbG9jYWxlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogc3ViSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkOiBzdWJIYXNNYW55VGV4dEZpZWxkLFxuICAgICAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkOiBzdWJSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgfSA9IGJ1aWxkVGFibGUoe1xuICAgICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLFxuICAgICAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICAgICAgZmllbGRzOiBkaXNhYmxlVW5pcXVlID8gaWRUb1VVSUQoYmxvY2suZmllbGRzKSA6IGJsb2NrLmZpZWxkcyxcbiAgICAgICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNoaXBzOiByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogYmxvY2tUYWJsZU5hbWUsXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZiAoc3ViSGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgICAgICAgICBpZiAoIWhhc01hbnlUZXh0RmllbGQgfHwgc3ViSGFzTWFueVRleHRGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkID0gc3ViSGFzTWFueVRleHRGaWVsZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3ViSGFzTWFueU51bWJlckZpZWxkKSB7XG4gICAgICAgICAgICAgIGlmICghaGFzTWFueU51bWJlckZpZWxkIHx8IHN1Ykhhc01hbnlOdW1iZXJGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQgPSBzdWJIYXNNYW55TnVtYmVyRmllbGRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmxvY2tUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhcbiAgICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdLFxuICAgICAgICAgICAgICAoeyBtYW55LCBvbmUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVsYXRpb248c3RyaW5nPj4gPSB7XG4gICAgICAgICAgICAgICAgICBfcGFyZW50SUQ6IG9uZShhZGFwdGVyLnRhYmxlc1tyb290VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHM6IFthZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0uX3BhcmVudElEXSxcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlczogW2FkYXB0ZXIudGFibGVzW3Jvb3RUYWJsZU5hbWVdLmlkXSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChoYXNMb2NhbGVzVGFibGUoYmxvY2suZmllbGRzKSkge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0Ll9sb2NhbGVzID0gbWFueShhZGFwdGVyLnRhYmxlc1tgJHtibG9ja1RhYmxlTmFtZX1fbG9jYWxlc2BdKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN1YlJlbGF0aW9uc1RvQnVpbGQuZm9yRWFjaCgodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbWFueShhZGFwdGVyLnRhYmxlc1t2YWxdKVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHtibG9ja1RhYmxlTmFtZX1gXSA9IGJsb2NrVGFibGVSZWxhdGlvbnNcbiAgICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsKHtcbiAgICAgICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgICAgIGxvY2FsaXplZDogZmllbGQubG9jYWxpemVkLFxuICAgICAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZC5zZXQoYF9ibG9ja3NfJHtibG9jay5zbHVnfWAsIGJsb2NrVGFibGVOYW1lKVxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RhYic6XG4gICAgICBjYXNlICdncm91cCc6IHtcbiAgICAgICAgaWYgKCEoJ25hbWUnIGluIGZpZWxkKSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiBncm91cEhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiBncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBncm91cEhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IGdyb3VwSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGJ1aWxkTnVtYmVycyxcbiAgICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgZGlzYWJsZU5vdE51bGwsXG4gICAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgICAgZmllbGRQcmVmaXgsXG4gICAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNNYW55VGV4dEZpZWxkKSBoYXNNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiBncm91cEhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogZ3JvdXBIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogZ3JvdXBIYXNNYW55VGV4dEZpZWxkLFxuICAgICAgICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYnVpbGROdW1iZXJzLFxuICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICBidWlsZFRleHRzLFxuICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uTmFtZX1fYCxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGRpc2FibGVOb3ROdWxsOiBkaXNhYmxlTm90TnVsbEZyb21IZXJlLFxuICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgZmllbGRQcmVmaXg6IGAke2ZpZWxkTmFtZX0uYCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZUxvY2FsaXplZDogZmllbGQubG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lOiBgJHtwYXJlbnRUYWJsZU5hbWV9XyR7Y29sdW1uTmFtZX1gLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCkgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc01hbnlOdW1iZXJGaWVsZCkgaGFzTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAndGFicyc6IHtcbiAgICAgICAgY29uc3QgZGlzYWJsZU5vdE51bGxGcm9tSGVyZSA9IEJvb2xlYW4oZmllbGQuYWRtaW4/LmNvbmRpdGlvbikgfHwgZGlzYWJsZU5vdE51bGxcblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IHRhYkhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogdGFiSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IHRhYkhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IHRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogdGFiSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IHRhYkhhc01hbnlUZXh0RmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZE51bWJlcnMsXG4gICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7IC4uLnRhYiwgdHlwZTogJ3RhYicgfSkpLFxuICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAodGFiSGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncm93JzpcbiAgICAgIGNhc2UgJ2NvbGxhcHNpYmxlJzoge1xuICAgICAgICBjb25zdCBkaXNhYmxlTm90TnVsbEZyb21IZXJlID0gQm9vbGVhbihmaWVsZC5hZG1pbj8uY29uZGl0aW9uKSB8fCBkaXNhYmxlTm90TnVsbFxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IHJvd0hhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogcm93SGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IHJvd0hhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IHJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogcm93SGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IHJvd0hhc01hbnlUZXh0RmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZE51bWJlcnMsXG4gICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZUxvY2FsaXplZCxcbiAgICAgICAgICBpbmRleGVzLFxuICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgIGxvY2FsZXNJbmRleGVzLFxuICAgICAgICAgIG5ld1RhYmxlTmFtZTogcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAocm93SGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgICAgZmllbGQucmVsYXRpb25Uby5mb3JFYWNoKChyZWxhdGlvbikgPT4gcmVsYXRpb25zaGlwcy5hZGQocmVsYXRpb24pKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbGF0aW9uc2hpcHMuYWRkKGZpZWxkLnJlbGF0aW9uVG8pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBmaWVsZC5hZG1pbiAmJiBmaWVsZC5hZG1pbi5jb25kaXRpb25cblxuICAgIGlmIChcbiAgICAgICFkaXNhYmxlTm90TnVsbCAmJlxuICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSAmJlxuICAgICAgJ3JlcXVpcmVkJyBpbiBmaWVsZCAmJlxuICAgICAgZmllbGQucmVxdWlyZWQgJiZcbiAgICAgICFjb25kaXRpb25cbiAgICApIHtcbiAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0ubm90TnVsbCgpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgaGFzTG9jYWxpemVkRmllbGQsXG4gICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgaGFzTWFueU51bWJlckZpZWxkLFxuICAgIGhhc01hbnlUZXh0RmllbGQsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ0cmF2ZXJzZUZpZWxkcyIsImFkYXB0ZXIiLCJidWlsZE51bWJlcnMiLCJidWlsZFJlbGF0aW9uc2hpcHMiLCJidWlsZFRleHRzIiwiY29sdW1uUHJlZml4IiwiY29sdW1ucyIsImRpc2FibGVOb3ROdWxsIiwiZGlzYWJsZVVuaXF1ZSIsImZpZWxkUHJlZml4IiwiZmllbGRzIiwiZm9yY2VMb2NhbGl6ZWQiLCJpbmRleGVzIiwibG9jYWxlc0NvbHVtbnMiLCJsb2NhbGVzSW5kZXhlcyIsIm5ld1RhYmxlTmFtZSIsInBhcmVudFRhYmxlTmFtZSIsInJlbGF0aW9uc1RvQnVpbGQiLCJyZWxhdGlvbnNoaXBzIiwicm9vdFJlbGF0aW9uc1RvQnVpbGQiLCJyb290VGFibGVJRENvbFR5cGUiLCJyb290VGFibGVOYW1lIiwiaGFzTG9jYWxpemVkRmllbGQiLCJoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsImhhc01hbnlUZXh0RmllbGQiLCJoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkIiwiaGFzTWFueU51bWJlckZpZWxkIiwiaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwicGFyZW50SURDb2xUeXBlIiwiaWQiLCJQZ1VVSURCdWlsZGVyIiwiUGdOdW1lcmljQnVpbGRlciIsIlBnVmFyY2hhckJ1aWxkZXIiLCJmb3JFYWNoIiwiZmllbGQiLCJuYW1lIiwiY29sdW1uTmFtZSIsImZpZWxkTmFtZSIsInRhcmdldFRhYmxlIiwidGFyZ2V0SW5kZXhlcyIsImZpZWxkQWZmZWN0c0RhdGEiLCJ0b1NuYWtlQ2FzZSIsInJlcGxhY2UiLCJwYXlsb2FkIiwiY29uZmlnIiwibG9jYWxpemF0aW9uIiwibG9jYWxpemVkIiwidW5pcXVlIiwiaW5kZXgiLCJpbmNsdWRlcyIsInR5cGUiLCJoYXNNYW55IiwiY29uc3RyYWludFZhbHVlIiwiZmllbGRDb25zdHJhaW50cyIsImNyZWF0ZUluZGV4IiwidGFibGVOYW1lIiwiSW52YWxpZENvbmZpZ3VyYXRpb24iLCJ2YXJjaGFyIiwibnVtZXJpYyIsImpzb25iIiwidGltZXN0YW1wIiwibW9kZSIsInByZWNpc2lvbiIsIndpdGhUaW1lem9uZSIsImVudW1OYW1lIiwiZW51bXMiLCJwZ0VudW0iLCJvcHRpb25zIiwibWFwIiwib3B0aW9uIiwib3B0aW9uSXNPYmplY3QiLCJ2YWx1ZSIsInNlbGVjdFRhYmxlTmFtZSIsImJhc2VDb2x1bW5zIiwib3JkZXIiLCJpbnRlZ2VyIiwibm90TnVsbCIsInBhcmVudCIsInBhcmVudElEQ29sdW1uTWFwIiwicmVmZXJlbmNlcyIsInRhYmxlcyIsIm9uRGVsZXRlIiwiYmFzZUV4dHJhQ29uZmlnIiwib3JkZXJJZHgiLCJjb2xzIiwib24iLCJwYXJlbnRJZHgiLCJsb2NhbGUiLCJlbnVtX19sb2NhbGVzIiwibG9jYWxlSWR4IiwiYnVpbGRUYWJsZSIsInNldCIsInNlbGVjdFRhYmxlUmVsYXRpb25zIiwicmVsYXRpb25zIiwib25lIiwicmVzdWx0IiwiYm9vbGVhbiIsImRpc2FibGVOb3ROdWxsRnJvbUhlcmUiLCJCb29sZWFuIiwiYWRtaW4iLCJjb25kaXRpb24iLCJhcnJheVRhYmxlTmFtZSIsIl9vcmRlciIsIl9wYXJlbnRJRCIsIl9vcmRlcklkeCIsIl9wYXJlbnRJRElkeCIsIl9sb2NhbGUiLCJfbG9jYWxlSWR4Iiwic3ViSGFzTWFueU51bWJlckZpZWxkIiwic3ViSGFzTWFueVRleHRGaWVsZCIsInN1YlJlbGF0aW9uc1RvQnVpbGQiLCJpZFRvVVVJRCIsInJvb3RSZWxhdGlvbnNoaXBzIiwiYXJyYXlUYWJsZVJlbGF0aW9ucyIsIm1hbnkiLCJoYXNMb2NhbGVzVGFibGUiLCJfbG9jYWxlcyIsInZhbCIsImtleSIsImJsb2NrcyIsImJsb2NrIiwiYmxvY2tUYWJsZU5hbWUiLCJzbHVnIiwiX3BhdGgiLCJ0ZXh0IiwiX3BhdGhJZHgiLCJibG9ja1RhYmxlUmVsYXRpb25zIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwidmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwiLCJ0YWJsZSIsImdyb3VwSGFzTG9jYWxpemVkRmllbGQiLCJncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsImdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsImdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJncm91cEhhc01hbnlOdW1iZXJGaWVsZCIsImdyb3VwSGFzTWFueVRleHRGaWVsZCIsInRhYkhhc0xvY2FsaXplZEZpZWxkIiwidGFiSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwidGFiSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsInRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkIiwidGFiSGFzTWFueU51bWJlckZpZWxkIiwidGFiSGFzTWFueVRleHRGaWVsZCIsInRhYnMiLCJ0YWIiLCJyb3dIYXNMb2NhbGl6ZWRGaWVsZCIsInJvd0hhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsInJvd0hhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQiLCJyb3dIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsInJvd0hhc01hbnlOdW1iZXJGaWVsZCIsInJvd0hhc01hbnlUZXh0RmllbGQiLCJBcnJheSIsImlzQXJyYXkiLCJyZWxhdGlvblRvIiwicmVsYXRpb24iLCJhZGQiLCJyZXF1aXJlZCJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DOzs7OytCQWtFdkJBOzs7ZUFBQUE7Ozs0QkE3RGE7d0JBY25CO3dCQUM4Qjt1QkFDWTtvRUFDekI7aUNBSVE7dUJBQ0w7NkJBQ0M7MEJBQ0g7bUNBQ1M7a0RBQ2U7Ozs7OztBQW1DMUMsTUFBTUEsaUJBQWlCLENBQUMsRUFDN0JDLE9BQU8sRUFDUEMsWUFBWSxFQUNaQyxrQkFBa0IsRUFDbEJDLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxPQUFPLEVBQ1BDLGNBQWMsRUFDZEMsZ0JBQWdCLEtBQUssRUFDckJDLFdBQVcsRUFDWEMsTUFBTSxFQUNOQyxjQUFjLEVBQ2RDLE9BQU8sRUFDUEMsY0FBYyxFQUNkQyxjQUFjLEVBQ2RDLFlBQVksRUFDWkMsZUFBZSxFQUNmQyxnQkFBZ0IsRUFDaEJDLGFBQWEsRUFDYkMsb0JBQW9CLEVB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