@lumeer/pivot 0.0.9 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -529,37 +529,39 @@ export class PivotTableConverter {
529
529
  const columnsCount = cells[0]?.length || 0;
530
530
  for (let i = 0; i < rowGroupsInfo.length; i++) {
531
531
  const rowGroupInfo = rowGroupsInfo[i];
532
- if (rowGroupInfo) {
533
- for (let j = 0; j < columnGroupsInfo.length; j++) {
534
- if (columnGroupsInfo[j]) {
535
- const columns = columnGroupsInfo[j].indexes;
536
- let formattedValue;
537
- let dataResources;
538
- if (rowGroupInfo.expression) {
539
- const result = this.evaluateExpression(rowGroupInfo.expression, columns);
540
- const valueIndex = columns[0] % this.data.valueTitles.length;
541
- formattedValue = this.formatValueByConstraint(result.value, valueIndex);
542
- dataResources = result.dataResources;
543
- }
544
- else {
545
- // it's enough to fill group values only from row side
546
- const { rowsIndexes, columnsIndexes } = this.getValuesIndexesFromCellsIndexes(rowGroupInfo.indexes, columns);
547
- const result = this.getGroupedValuesForRowsAndCols(rowsIndexes, columnsIndexes);
548
- formattedValue = this.aggregateAndFormatDataValues(result.values, rowsIndexes, columnsIndexes);
549
- dataResources = result.dataResources;
550
- }
551
- cells[i][j] = {
552
- value: String(formattedValue),
553
- dataResources,
554
- colSpan: 1,
555
- rowSpan: 1,
556
- cssClass: PivotTableConverter.groupDataClass,
557
- isValue: true,
558
- };
559
- }
532
+ if (!rowGroupInfo) {
533
+ continue;
534
+ }
535
+ for (let j = 0; j < columnGroupsInfo.length; j++) {
536
+ if (!columnGroupsInfo[j]) {
537
+ continue;
538
+ }
539
+ const columns = columnGroupsInfo[j].indexes;
540
+ const { rowsIndexes, columnsIndexes } = this.getValuesIndexesFromCellsIndexes(rowGroupInfo.indexes, columns);
541
+ let formattedValue;
542
+ let dataResources;
543
+ if (rowGroupInfo.expression) {
544
+ const result = this.evaluateExpression(rowGroupInfo.expression, columnsIndexes);
545
+ const valueIndex = columnsIndexes[0] % this.data.valueTitles.length;
546
+ formattedValue = this.formatValueByConstraint(result.value, valueIndex);
547
+ dataResources = result.dataResources;
548
+ }
549
+ else {
550
+ // it's enough to fill group values only from row side
551
+ const result = this.getGroupedValuesForRowsAndCols(rowsIndexes, columnsIndexes);
552
+ formattedValue = this.aggregateAndFormatDataValues(result.values, rowsIndexes, columnsIndexes);
553
+ dataResources = result.dataResources;
560
554
  }
561
- this.fillRowWithColor(cells, i, rowGroupInfo, columnsCount);
555
+ cells[i][j] = {
556
+ value: String(formattedValue),
557
+ dataResources,
558
+ colSpan: 1,
559
+ rowSpan: 1,
560
+ cssClass: PivotTableConverter.groupDataClass,
561
+ isValue: true,
562
+ };
562
563
  }
564
+ this.fillRowWithColor(cells, i, rowGroupInfo, columnsCount);
563
565
  }
564
566
  for (let j = 0; j < columnGroupsInfo.length; j++) {
565
567
  if (columnGroupsInfo[j]) {
@@ -994,4 +996,4 @@ function divideValues(value, divider) {
994
996
  }
995
997
  return null;
996
998
  }
997
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtdGFibGUtY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbG1yLXBpdm90LXRhYmxlL3NyYy9saWIvdXRpbC9waXZvdC10YWJsZS1jb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsT0FBTyxFQUFDLG1CQUFtQixFQUE4QixtQkFBbUIsRUFBZ0Isa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEdBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4TSxPQUFPLEVBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsWUFBWSxHQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTVKLE9BQU8sRUFBOEYsaUJBQWlCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNsSixPQUFPLEVBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBZ0JoSCxNQUFNLE9BQU8sbUJBQW1CO0lBQ3ZCLE1BQU0sQ0FBVSxVQUFVLEdBQUcsa0JBQWtCLENBQUM7SUFDaEQsTUFBTSxDQUFVLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztJQUM5QyxNQUFNLENBQVUsY0FBYyxHQUFHLHVCQUF1QixDQUFDO0lBQ3pELE1BQU0sQ0FBVSxjQUFjLEdBQUcsdUJBQXVCLENBQUM7SUFDekQsTUFBTSxDQUFVLG1CQUFtQixHQUFHLDZCQUE2QixDQUFDO0lBQ3BFLE1BQU0sQ0FBVSx1QkFBdUIsR0FBRyxpQ0FBaUMsQ0FBQztJQUM1RSxNQUFNLENBQVUsaUJBQWlCLEdBQUcsMEJBQTBCLENBQUM7SUFDL0QsTUFBTSxDQUFVLHNCQUFzQixHQUFHLGdDQUFnQyxDQUFD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a0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztTQUMxRTtLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxPQUFpQixFQUFFLEdBQVcsRUFBRSxLQUFhO0lBQ3ZFLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsS0FBVSxFQUFFLE9BQVk7SUFDNUMsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUM1QixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzFDLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtZQUNqQixPQUFPLEtBQUssR0FBRyxPQUFPLENBQUM7U0FDeEI7YUFBTTtZQUNMLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7S0FDRjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBMdW1lZXI6IE1vZGVybiBEYXRhIERlZmluaXRpb24gYW5kIFByb2Nlc3NpbmcgUGxhdGZvcm1cbiAqXG4gKiBDb3B5cmlnaHQgKEMpIHNpbmNlIDIwMTcgTHVtZWVyLmlvLCBzLnIuby4gYW5kL29yIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cbmltcG9ydCB7YWdncmVnYXRlRGF0YVZhbHVlcywgQ29uc3RyYWludCwgQ29uc3RyYWludERhdGEsIERhdGFBZ2dyZWdhdGlvblR5cGUsIERhdGFSZXNvdXJjZSwgaXNWYWx1ZUFnZ3JlZ2F0aW9uLCBOdW1iZXJDb25zdHJhaW50LCBQZXJjZW50YWdlQ29uc3RyYWludCwgVW5rbm93bkNvbnN0cmFpbnQsfSBmcm9tICdAbHVtZWVyL2RhdGEtZmlsdGVycyc7XG5pbXBvcnQge2NyZWF0ZVJhbmdlLCBkZWVwT2JqZWN0Q29weSwgaXNBcnJheSwgaXNOb3ROdWxsT3JVbmRlZmluZWQsIGlzTnVsbE9yVW5kZWZpbmVkLCBpc051bWVyaWMsIHNoYWRlQ29sb3IsIHRvTnVtYmVyLCB1bmlxdWVWYWx1ZXMsfSBmcm9tICdAbHVtZWVyL3V0aWxzJztcblxuaW1wb3J0IHtMbXJQaXZvdERhdGEsIExtclBpdm90RGF0YUhlYWRlciwgTG1yUGl2b3REYXRhSGVhZGVyRXhwcmVzc2lvbiwgTG1yUGl2b3REYXRhSGVhZGVyT3BlcmFuZCwgTG1yUGl2b3REaW1lbnNpb25Db25maWcsIExtclBpdm90U3RlbURhdGF9IGZyb20gJy4vbG1yLXBpdm90LWRhdGEnO1xuaW1wb3J0IHtMbXJQaXZvdFRhYmxlLCBMbXJQaXZvdFRhYmxlQ2VsbH0gZnJvbSAnLi9sbXItcGl2b3QtdGFibGUnO1xuaW1wb3J0IHtMbXJQaXZvdEV4cHJlc3Npb24sIExtclBpdm90SGVhZGVyT3BlcmFuZCwgTG1yUGl2b3RPcGVyYW5kLCBMbXJQaXZvdFNvcnQsIExtclBpdm90VHJhbnNmb3JtLCBMbXJQaXZvdFZhbHVlVHlwZX0gZnJvbSAnLi9sbXItcGl2b3QtY29uZmlnJztcbmltcG9ydCB7Q09MT1JfR1JBWTEwMCwgQ09MT1JfR1JBWTIwMCwgQ09MT1JfR1JBWTMwMCwgQ09MT1JfR1JBWTQwMCwgQ09MT1JfR1JBWTUwMH0gZnJvbSAnLi9sbXItcGl2b3QtY29uc3RhbnRzJztcblxuaW50ZXJmYWNlIEhlYWRlckdyb3VwSW5mbyB7XG4gIGJhY2tncm91bmQ6IHN0cmluZztcbiAgaW5kZXhlczogbnVtYmVyW107XG4gIGV4cHJlc3Npb24/OiBMbXJQaXZvdERhdGFIZWFkZXJFeHByZXNzaW9uO1xuICBsZXZlbDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgVmFsdWVUeXBlSW5mbyB7XG4gIHN1bT86IG51bWJlcjtcbiAgc3Vtc1Jvd3M/OiBudW1iZXJbXTtcbiAgc3Vtc0NvbHVtbnM/OiBudW1iZXJbXTtcbiAgZGVmYXVsdENvbnN0cmFpbnQ/OiBDb25zdHJhaW50O1xufVxuXG5leHBvcnQgY2xhc3MgUGl2b3RUYWJsZUNvbnZlcnRlciB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZW1wdHlDbGFzcyA9ICdwaXZvdC1lbXB0eS1jZWxsJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBkYXRhQ2xhc3MgPSAncGl2b3QtZGF0YS1jZWxsJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBncm91cERhdGFDbGFzcyA9ICdwaXZvdC1kYXRhLWdyb3VwLWNlbGwnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHJvd0hlYWRlckNsYXNzID0gJ3Bpdm90LXJvdy1oZWFkZXItY2VsbCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgcm93R3JvdXBIZWFkZXJDbGFzcyA9ICdwaXZvdC1yb3ctZ3JvdXAtaGVhZGVyLWNlbGwnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHJvd0F0dHJpYnV0ZUhlYWRlckNsYXNzID0gJ3Bpdm90LXJvdy1hdHRyaWJ1dGUtaGVhZGVyLWNlbGwnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGNvbHVtbkhlYWRlckNsYXNzID0gJ3Bpdm90LWNvbHVtbi1oZWFkZXItY2VsbCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgY29sdW1uR3JvdXBIZWFkZXJDbGFzcyA9ICdwaXZvdC1jb2x1bW4tZ3JvdXAtaGVhZGVyLWNlbGwnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXBDb2xvcnMgPSBbQ09MT1JfR1JBWTEwMCwgQ09MT1JfR1JBWTIwMCwgQ09MT1JfR1JBWTMwMCwgQ09MT1JfR1JBWTQwMCwgQ09MT1JfR1JBWTUwMF07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwZXJjZW50YWdlQ29uc3RyYWludCA9IG5ldyBQZXJjZW50YWdlQ29uc3RyYWludCh7ZGVjaW1hbHM6IDJ9KTtcblxuICBwcml2YXRlIGRhdGE6IExtclBpdm90U3RlbURhdGE7XG4gIHByaXZhdGUgdHJhbnNmb3JtOiBMbXJQaXZvdFRyYW5zZm9ybTtcbiAgcHJpdmF0ZSB2YWx1ZXM6IGFueVtdW107XG4gIHByaXZhdGUgZGF0YVJlc291cmNlczogRGF0YVJlc291cmNlW11bXVtdO1xuICBwcml2YXRlIGNvbnN0cmFpbnREYXRhOiBDb25zdHJhaW50RGF0YTtcbiAgcHJpdmF0ZSByb3dMZXZlbHM6IG51bWJlcjtcbiAgcHJpdmF0ZSByb3dzVHJhbnNmb3JtYXRpb25BcnJheTogbnVtYmVyW107XG4gIHByaXZhdGUgY29sdW1uTGV2ZWxzOiBudW1iZXI7XG4gIHByaXZhdGUgY29sdW1uc1RyYW5zZm9ybWF0aW9uQXJyYXk6IG51bWJlcltdO1xuICBwcml2YXRlIHZhbHVlVHlwZUluZm86IFZhbHVlVHlwZUluZm9bXTtcbiAgcHJpdmF0ZSBub25TdGlja3lSb3dJbmRleDogbnVtYmVyO1xuICBwcml2YXRlIG5vblN0aWNreUNvbHVtbkluZGV4OiBudW1iZXI7XG5cbiAgcHVibGljIGNyZWF0ZVRhYmxlcyhwaXZvdERhdGE6IExtclBpdm90RGF0YSwgdHJhbnNmb3JtOiBMbXJQaXZvdFRyYW5zZm9ybSk6IExtclBpdm90VGFibGVbXSB7XG4gICAgaWYgKCFwaXZvdERhdGEpIHtcbiAgICAgIHJldHVybiBbe2NlbGxzOiBbXX1dO1xuICAgIH1cblxuICAgIHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIHRoaXMuY29uc3RyYWludERhdGEgPSBwaXZvdERhdGEuY29uc3RyYWludERhdGE7XG5cbiAgICByZXR1cm4gKHBpdm90RGF0YS5kYXRhIHx8IFtdKS5tYXAoZCA9PiB7XG4gICAgICBpZiAodGhpcy5kYXRhQXJlRW1wdHkoZCkpIHtcbiAgICAgICAgcmV0dXJuIHtjZWxsczogW119O1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVEYXRhKGQpO1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtRGF0YSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRhQXJlRW1wdHkoZGF0YTogTG1yUGl2b3RTdGVtRGF0YSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoZGF0YS5yb3dIZWFkZXJzIHx8IFtdKS5sZW5ndGggPT09IDAgJiYgKGRhdGEuY29sdW1uSGVhZGVycyB8fCBbXSkubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRhKGRhdGE6IExtclBpdm90U3RlbURhdGEpIHtcbiAgICBjb25zdCBudW1iZXJPZlN1bXMgPSBNYXRoLm1heCgxLCAoZGF0YS52YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoKTtcbiAgICB0aGlzLnZhbHVlVHlwZUluZm8gPSBnZXRWYWx1ZXNUeXBlSW5mbyhkYXRhLnZhbHVlcywgZGF0YS52YWx1ZVR5cGVzLCBudW1iZXJPZlN1bXMpO1xuICAgIHRoaXMuZGF0YSA9IHByZXBhcmVQaXZvdERhdGEoZGF0YSwgdGhpcy5jb25zdHJhaW50RGF0YSwgdGhpcy52YWx1ZVR5cGVJbmZvKTtcbiAgICB0aGlzLnZhbHVlcyA9IGRhdGEudmFsdWVzIHx8IFtdO1xuICAgIHRoaXMuZGF0YVJlc291cmNlcyA9IGRhdGEuZGF0YVJlc291cmNlcyB8fCBbXTtcbiAgICB0aGlzLnJvd0xldmVscyA9IChkYXRhLnJvd3NDb25maWcgfHwgW10pLmxlbmd0aDtcbiAgICB0aGlzLmNvbHVtbkxldmVscyA9IChkYXRhLmNvbHVtbnNDb25maWcgfHwgW10pLmxlbmd0aCArIChkYXRhLmhhc0FkZGl0aW9uYWxDb2x1bW5MZXZlbCA/IDEgOiAwKTtcbiAgICBjb25zdCByb3dBbGxTdGlja3kgPSB0aGlzLmRhdGEucm93c0NvbmZpZz8ubGVuZ3RoICYmIHRoaXMuZGF0YS5yb3dzQ29uZmlnLmV2ZXJ5KGNvbmZpZyA9PiAhIWNvbmZpZz8uc3RpY2t5KVxuICAgIHRoaXMubm9uU3RpY2t5Um93SW5kZXggPSBNYXRoLm1heChyb3dBbGxTdGlja3kgPyB0aGlzLnJvd0xldmVscyA6ICh0aGlzLmRhdGEucm93c0NvbmZpZz8uZmluZEluZGV4KGNvbmZpZyA9PiAhY29uZmlnPy5zdGlja3kpIHx8IDApLCAwKTtcbiAgICBjb25zdCBjb2x1bW5BbGxTdGlja3kgPSB0aGlzLmRhdGEuY29sdW1uc0NvbmZpZz8ubGVuZ3RoICYmIHRoaXMuZGF0YS5jb2x1bW5zQ29uZmlnLmV2ZXJ5KGNvbmZpZyA9PiAhIWNvbmZpZz8uc3RpY2t5KVxuICAgIHRoaXMubm9uU3RpY2t5Q29sdW1uSW5kZXggPSBNYXRoLm1heChjb2x1bW5BbGxTdGlja3kgPyB0aGlzLmNvbHVtbkxldmVscyA6ICh0aGlzLmRhdGEuY29sdW1uc0NvbmZpZz8uZmluZEluZGV4KGNvbmZpZyA9PiAhY29uZmlnPy5zdGlja3kpIHx8IDApLCAwKTtcbiAgICBjb25zdCBoYXNWYWx1ZSA9IChkYXRhLnZhbHVlVGl0bGVzIHx8IFtdKS5sZW5ndGggPiAwO1xuICAgIGlmICgodGhpcy5kYXRhLnJvd0hlYWRlcnMgfHwgW10pLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucm93c1RyYW5zZm9ybWF0aW9uQXJyYXkgPSBjcmVhdGVUcmFuc2Zvcm1hdGlvbk1hcChcbiAgICAgICAgdGhpcy5kYXRhLnJvd0hlYWRlcnMsXG4gICAgICAgIHRoaXMucm93U2hvd1N1bXMsXG4gICAgICAgIHRoaXMuY29sdW1uTGV2ZWxzLFxuICAgICAgICAxXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd3NUcmFuc2Zvcm1hdGlvbkFycmF5ID0gaGFzVmFsdWUgPyBbdGhpcy5jb2x1bW5MZXZlbHNdIDogW107XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLmRhdGEuY29sdW1uSGVhZGVycyB8fCBbXSkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb2x1bW5zVHJhbnNmb3JtYXRpb25BcnJheSA9IGNyZWF0ZVRyYW5zZm9ybWF0aW9uTWFwKFxuICAgICAgICB0aGlzLmRhdGEuY29sdW1uSGVhZGVycyxcbiAgICAgICAgdGhpcy5jb2x1bW5TaG93U3VtcyxcbiAgICAgICAgdGhpcy5yb3dMZXZlbHMsXG4gICAgICAgIG51bWJlck9mU3Vtc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zVHJhbnNmb3JtYXRpb25BcnJheSA9IGhhc1ZhbHVlID8gW3RoaXMucm93TGV2ZWxzXSA6IFtdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHJvd1Nob3dTdW1zKCk6IGJvb2xlYW5bXSB7XG4gICAgcmV0dXJuICh0aGlzLmRhdGEucm93c0NvbmZpZyB8fCBbXSkubWFwKGNvbmZpZyA9PiBjb25maWcuc2hvd1N1bXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29sdW1uU2hvd1N1bXMoKTogYm9vbGVhbltdIHtcbiAgICByZXR1cm4gKHRoaXMuZGF0YS5jb2x1bW5zQ29uZmlnIHx8IFtdKS5tYXAoY29uZmlnID0+IGNvbmZpZy5zaG93U3Vtcyk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybURhdGEoKTogTG1yUGl2b3RUYWJsZSB7XG4gICAgY29uc3QgY2VsbHMgPSB0aGlzLmluaXRDZWxscygpO1xuICAgIGNvbnN0IHJvd0dyb3VwcyA9IHRoaXMuZmlsbENlbGxzQnlSb3dzKGNlbGxzKTtcbiAgICBjb25zdCBjb2x1bW5Hcm91cHMgPSB0aGlzLmZpbGxDZWxsc0J5Q29sdW1ucyhjZWxscyk7XG4gICAgdGhpcy5maWxsQ2VsbHNCeUdyb3VwSW50ZXJzZWN0aW9uKGNlbGxzLCByb3dHcm91cHMsIGNvbHVtbkdyb3Vwcyk7XG4gICAgcmV0dXJuIHtjZWxsc307XG4gIH1cblxuICBwcml2YXRlIGZpbGxDZWxsc0J5Um93cyhjZWxsczogTG1yUGl2b3RUYWJsZUNlbGxbXVtdKTogSGVhZGVyR3JvdXBJbmZvW10ge1xuICAgIGNvbnN0IHJvd0dyb3VwcyA9IFtdO1xuICAgIHRoaXMuaXRlcmF0ZUFuZEZpbGxDZWxsc0J5Um93cyhjZWxscywgcm93R3JvdXBzLCB0aGlzLmRhdGEucm93SGVhZGVycywgdGhpcy5jb2x1bW5MZXZlbHMsIHRoaXMucm93U2hvd1N1bXMsIDApO1xuICAgIHJldHVybiByb3dHcm91cHM7XG4gIH1cblxuICBwcml2YXRlIGl0ZXJhdGVBbmRGaWxsQ2VsbHNCeVJvd3MoXG4gICAgY2VsbHM6IExtclBpdm90VGFibGVDZWxsW11bXSxcbiAgICByb3dHcm91cHNJbmZvOiBIZWFkZXJHcm91cEluZm9bXSxcbiAgICBoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2hvd1N1bXM6IGJvb2xlYW5bXSxcbiAgICBsZXZlbDogbnVtYmVyLFxuICAgIHBhcmVudEhlYWRlcj86IExtclBpdm90RGF0YUhlYWRlclxuICApIHtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJzKSB7XG4gICAgICBjb25zdCByb3dTcGFuID0gZ2V0RGlyZWN0SGVhZGVyQ2hpbGRDb3VudChoZWFkZXIsIGxldmVsLCBzaG93U3Vtcyk7XG4gICAgICBjZWxsc1tjdXJyZW50SW5kZXhdW2xldmVsXSA9IHtcbiAgICAgICAgdmFsdWU6IHRoaXMuZm9ybWF0Um93SGVhZGVyKGhlYWRlci50aXRsZSwgbGV2ZWwpLFxuICAgICAgICBjc3NDbGFzczogUGl2b3RUYWJsZUNvbnZlcnRlci5yb3dIZWFkZXJDbGFzcyxcbiAgICAgICAgaXNIZWFkZXI6IHRydWUsXG4gICAgICAgIHN0aWNreVN0YXJ0OiB0aGlzLmlzUm93TGV2ZWxTdGlja3kobGV2ZWwpLFxuICAgICAgICByb3dTcGFuLFxuICAgICAgICBjb2xTcGFuOiAxLFxuICAgICAgICBiYWNrZ3JvdW5kOiB0aGlzLmdldEhlYWRlckJhY2tncm91bmQoaGVhZGVyLCBsZXZlbCksXG4gICAgICAgIGNvbnN0cmFpbnQ6IGhlYWRlci5jb25zdHJhaW50LFxuICAgICAgICBsYWJlbDogaGVhZGVyLmF0dHJpYnV0ZU5hbWUsXG4gICAgICAgIGNoaWxkSW5kZXhlczogY3JlYXRlUmFuZ2UoY3VycmVudEluZGV4LCBjdXJyZW50SW5kZXggKyAoaGVhZGVyLmNoaWxkcmVuPy5sZW5ndGggfHwgMSkpXG4gICAgICB9O1xuXG4gICAgICBpZiAoaGVhZGVyLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuaXRlcmF0ZUFuZEZpbGxDZWxsc0J5Um93cyhcbiAgICAgICAgICBjZWxscyxcbiAgICAgICAgICByb3dHcm91cHNJbmZvLFxuICAgICAgICAgIGhlYWRlci5jaGlsZHJlbixcbiAgICAgICAgICBjdXJyZW50SW5kZXgsXG4gICAgICAgICAgc2hvd1N1bXMsXG4gICAgICAgICAgbGV2ZWwgKyAxLFxuICAgICAgICAgIGhlYWRlclxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChpc05vdE51bGxPclVuZGVmaW5lZChoZWFkZXIudGFyZ2V0SW5kZXgpKSB7XG4gICAgICAgIHRoaXMuZmlsbENlbGxzRm9yUm93KGNlbGxzLCBoZWFkZXIudGFyZ2V0SW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50SW5kZXggKz0gZ2V0SGVhZGVyQ2hpbGRDb3VudChoZWFkZXIsIGxldmVsLCBzaG93U3Vtcyk7XG5cbiAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gaGVhZGVyLmV4cHJlc3Npb25zIHx8IFtdXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25JbmRleCA9IGN1cnJlbnRJbmRleCAtIChleHByZXNzaW9ucy5sZW5ndGggLSBpKVxuICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5nZXRTdW1tYXJ5QmFja2dyb3VuZChsZXZlbCk7XG4gICAgICAgIGNvbnN0IHtpbmRleGVzfSA9IHRoaXMuZmlsbENlbGxzRm9yRXhwcmVzc2lvblJvdyhjZWxscywgZXhwcmVzc2lvbnNbaV0sIGV4cHJlc3Npb25JbmRleCwgYmFja2dyb3VuZClcbiAgICAgICAgdGhpcy5zcGxpdFJvd0dyb3VwSGVhZGVyKGNlbGxzLCBsZXZlbCwgZXhwcmVzc2lvbkluZGV4LCBiYWNrZ3JvdW5kLCBleHByZXNzaW9uc1tpXS50aXRsZSwgaW5kZXhlcylcbiAgICAgICAgcm93R3JvdXBzSW5mb1tleHByZXNzaW9uSW5kZXhdID0ge2JhY2tncm91bmQsIGluZGV4ZXM6IFtdLCBleHByZXNzaW9uOiBleHByZXNzaW9uc1tpXSwgbGV2ZWx9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG93U3Vtc1tsZXZlbF0pIHtcbiAgICAgIGNvbnN0IHsgdGl0bGUsIHN1bW1hcnkgfSA9IHRoaXMuZm9ybWF0U3VtbWFyeUhlYWRlcihwYXJlbnRIZWFkZXIsIGxldmVsKVxuICAgICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuZ2V0U3VtbWFyeUJhY2tncm91bmQobGV2ZWwpO1xuICAgICAgY29uc3QgY29sdW1uSW5kZXggPSBNYXRoLm1heChsZXZlbCAtIDEsIDApO1xuICAgICAgdGhpcy5zcGxpdFJvd0dyb3VwSGVhZGVyKGNlbGxzLCBjb2x1bW5JbmRleCwgY3VycmVudEluZGV4LCBiYWNrZ3JvdW5kLCBzdW1tYXJ5LCBbXSwgdGl0bGUsIHBhcmVudEhlYWRlcj8uY29uc3RyYWludCwgcGFyZW50SGVhZGVyPy5hdHRyaWJ1dGVOYW1lKVxuXG4gICAgICBjb25zdCByb3dJbmRleGVzID0gZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcnMoaGVhZGVycyk7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZFJvd0luZGV4ZXMgPSB0aGlzLnRyYW5zZm9ybVJvd0luZGV4ZXMocm93SW5kZXhlcyk7XG4gICAgICByb3dHcm91cHNJbmZvW2N1cnJlbnRJbmRleF0gPSB7YmFja2dyb3VuZCwgaW5kZXhlczogdHJhbnNmb3JtZWRSb3dJbmRleGVzLCBsZXZlbH07XG5cbiAgICAgIHRoaXMuZmlsbENlbGxzRm9yR3JvdXBlZFJvdyhjZWxscywgcm93SW5kZXhlcywgY3VycmVudEluZGV4LCBiYWNrZ3JvdW5kKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNwbGl0Um93R3JvdXBIZWFkZXIoY2VsbHM6IExtclBpdm90VGFibGVDZWxsW11bXSwgY29sdW1uSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIsIGJhY2tncm91bmQ6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nLCByb3dJbmRleGVzOiBudW1iZXJbXSwgdGl0bGU/OiBzdHJpbmcsIGNvbnN0cmFpbnQ/OiBDb25zdHJhaW50LCBsYWJlbD86IHN0cmluZykge1xuICAgIGxldCBjb2xTcGFuID0gdGhpcy5yb3dMZXZlbHMgLSBjb2x1bW5JbmRleDtcbiAgICBjb25zdCBzdGlja3lTdGFydCA9IHRoaXMuaXNSb3dMZXZlbFN0aWNreShjb2x1bW5JbmRleCk7XG5cbiAgICAvLyBzcGxpdCByb3cgZ3JvdXAgaGVhZGVyIGNlbGwgYmVjYXVzZSBvZiBjb3JyZWN0IHN0aWNreSBzY3JvbGxcbiAgICBpZiAoc3RpY2t5U3RhcnQgJiYgdGhpcy5ub25TdGlja3lSb3dJbmRleCA+IDAgJiYgdGhpcy5ub25TdGlja3lSb3dJbmRleCA8IHRoaXMucm93TGV2ZWxzICYmIGNvbFNwYW4gPiAxKSB7XG4gICAgICBjb25zdCBuZXdDb2xzcGFuID0gdGhpcy5ub25TdGlja3lSb3dJbmRleCAtIGNvbHVtbkluZGV4O1xuXG4gICAgICBjZWxsc1tjdXJyZW50SW5kZXhdW3RoaXMubm9uU3RpY2t5Um93SW5kZXhdID0ge1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBjb25zdHJhaW50OiB1bmRlZmluZWQsXG4gICAgICAgIGxhYmVsOiB1bmRlZmluZWQsXG4gICAgICAgIGNzc0NsYXNzOiBQaXZvdFRhYmxlQ29udmVydGVyLnJvd0dyb3VwSGVhZGVyQ2xhc3MsXG4gICAgICAgIGlzU3VtbWFyeTogdHJ1ZSxcbiAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgY29sU3BhbjogY29sU3BhbiAtIG5ld0NvbHNwYW4sXG4gICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgIHN1bW1hcnk6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIGNvbFNwYW4gPSBuZXdDb2xzcGFuO1xuICAgIH1cblxuICAgIGNlbGxzW2N1cnJlbnRJbmRleF1bY29sdW1uSW5kZXhdID0ge1xuICAgICAgdmFsdWU6IHRpdGxlLFxuICAgICAgY29uc3RyYWludCxcbiAgICAgIGxhYmVsLFxuICAgICAgY3NzQ2xhc3M6IFBpdm90VGFibGVDb252ZXJ0ZXIucm93R3JvdXBIZWFkZXJDbGFzcyxcbiAgICAgIGlzU3VtbWFyeTogdHJ1ZSxcbiAgICAgIHN0aWNreVN0YXJ0LFxuICAgICAgcm93U3BhbjogMSxcbiAgICAgIGNvbFNwYW4sXG4gICAgICBiYWNrZ3JvdW5kLFxuICAgICAgc3VtbWFyeSxcbiAgICAgIHJvd0luZGV4ZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0U3VtbWFyeUhlYWRlcihoZWFkZXI6IExtclBpdm90RGF0YUhlYWRlciwgbGV2ZWw6IG51bWJlcik6IHt0aXRsZT86IHN0cmluZzsgc3VtbWFyeTogc3RyaW5nfSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLmZvcm1hdFN1bW1hcnlIZWFkZXI/LihoZWFkZXIsIGxldmVsKSB8fCB7XG4gICAgICB0aXRsZTogaGVhZGVyPy50aXRsZSxcbiAgICAgIHN1bW1hcnk6ICcnLFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0Um93SGVhZGVyKHRpdGxlOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybT8uZm9ybWF0Um93SGVhZGVyPy4odGl0bGUsIGxldmVsKSB8fCB0aXRsZVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRDb2x1bW5IZWFkZXIodGl0bGU6IHN0cmluZywgbGV2ZWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtPy5mb3JtYXRDb2x1bW5IZWFkZXI/Lih0aXRsZSwgbGV2ZWwpIHx8IHRpdGxlXG4gIH1cblxuICBwcml2YXRlIGdldEhlYWRlckJhY2tncm91bmQoaGVhZGVyOiB7IGNvbG9yOiBzdHJpbmcgfSwgbGV2ZWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGhlYWRlcj8uY29sb3IpIHtcbiAgICAgIHJldHVybiBzaGFkZUNvbG9yKGhlYWRlci5jb2xvciwgdGhpcy5nZXRMZXZlbE9wYWNpdHkobGV2ZWwpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMZXZlbE9wYWNpdHkobGV2ZWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKDgwLCA1MCArIGxldmVsICogNSkgLyAxMDA7XG4gIH1cblxuICBwcml2YXRlIGlzUm93TGV2ZWxTdGlja3kobGV2ZWw6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJvd3NDb25maWc/LltsZXZlbF0/LnN0aWNreTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDb2x1bW5MZXZlbFN0aWNreShsZXZlbDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF4TGV2ZWwgPSBNYXRoLm1pbihsZXZlbCwgKHRoaXMuZGF0YT8uY29sdW1uc0NvbmZpZz8ubGVuZ3RoID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSAtIDEpO1xuICAgIHJldHVybiB0aGlzLmRhdGE/LmNvbHVtbnNDb25maWc/LlttYXhMZXZlbF0/LnN0aWNreTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3VtbWFyeUJhY2tncm91bmQobGV2ZWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLm1pbihsZXZlbCwgdGhpcy5ncm91cENvbG9ycy5sZW5ndGggLSAxKTtcbiAgICByZXR1cm4gdGhpcy5ncm91cENvbG9yc1tpbmRleF07XG4gIH1cblxuICBwcml2YXRlIGZpbGxDZWxsc0ZvclJvdyhjZWxsczogTG1yUGl2b3RUYWJsZUNlbGxbXVtdLCByb3c6IG51bWJlcikge1xuICAgIGNvbnN0IHJvd0luZGV4SW5DZWxscyA9IHRoaXMucm93c1RyYW5zZm9ybWF0aW9uQXJyYXlbcm93XTtcbiAgICBpZiAoaXNOb3ROdWxsT3JVbmRlZmluZWQocm93SW5kZXhJbkNlbGxzKSkge1xuICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zVHJhbnNmb3JtYXRpb25BcnJheS5sZW5ndGg7IGNvbHVtbisrKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkluZGV4SW5DZWxscyA9IHRoaXMuY29sdW1uc1RyYW5zZm9ybWF0aW9uQXJyYXlbY29sdW1uXTtcbiAgICAgICAgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKGNvbHVtbkluZGV4SW5DZWxscykpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS52YWx1ZXNbcm93XVtjb2x1bW5dO1xuICAgICAgICAgIGNvbnN0IGRhdGFSZXNvdXJjZXMgPSB0aGlzLmRhdGFSZXNvdXJjZXM/Lltyb3ddPy5bY29sdW1uXSB8fCBbXTtcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuYWdncmVnYXRlT3JGb3JtYXRTaW5nbGVWYWx1ZSh2YWx1ZSwgY29sdW1uKTtcbiAgICAgICAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IGlzTm90TnVsbE9yVW5kZWZpbmVkKGZvcm1hdHRlZFZhbHVlKSA/IFN0cmluZyhmb3JtYXR0ZWRWYWx1ZSkgOiAnJztcbiAgICAgICAgICBjZWxsc1tyb3dJbmRleEluQ2VsbHNdW2NvbHVtbkluZGV4SW5DZWxsc10gPSB7XG4gICAgICAgICAgICB2YWx1ZTogc3RyaW5nVmFsdWUsXG4gICAgICAgICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICBjc3NDbGFzczogUGl2b3RUYWJsZUNvbnZlcnRlci5kYXRhQ2xhc3MsXG4gICAgICAgICAgICBpc1ZhbHVlOiB0cnVlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlSW5kZXhGb3JDb2x1bW5zKGNvbHVtbnM6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29sdW1uc1swXSAlIHRoaXMuZGF0YS52YWx1ZVRpdGxlcy5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFZhbHVlQnlWYWx1ZVR5cGUodmFsdWU6IGFueSwgdmFsdWVJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSAodGhpcy5kYXRhLnZhbHVlVHlwZXMgfHwgW10pW3ZhbHVlSW5kZXhdO1xuICAgIGlmICghdmFsdWVUeXBlIHx8IHZhbHVlVHlwZSA9PT0gTG1yUGl2b3RWYWx1ZVR5cGUuRGVmYXVsdCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0VmFsdWVCeUNvbnN0cmFpbnQodmFsdWUsIHZhbHVlSW5kZXgpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtMbXJQaXZvdFZhbHVlVHlwZS5BbGxQZXJjZW50YWdlLCBMbXJQaXZvdFZhbHVlVHlwZS5Db2x1bW5QZXJjZW50YWdlLCBMbXJQaXZvdFZhbHVlVHlwZS5Sb3dQZXJjZW50YWdlXS5pbmNsdWRlcyh2YWx1ZVR5cGUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRWYWx1ZUJ5UGVyY2VudGFnZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0VmFsdWVCeUNvbnN0cmFpbnQodmFsdWUsIHZhbHVlSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRHcm91cGVkVmFsdWVCeVZhbHVlVHlwZSh2YWx1ZTogYW55LCByb3dzOiBudW1iZXJbXSwgY29sdW1uczogbnVtYmVyW10pOiBhbnkge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBjb2x1bW5zWzBdICUgdGhpcy5kYXRhLnZhbHVlVGl0bGVzLmxlbmd0aDtcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLmRhdGEudmFsdWVUeXBlcyAmJiB0aGlzLmRhdGEudmFsdWVUeXBlc1t2YWx1ZUluZGV4XTtcbiAgICBjb25zdCB2YWx1ZVR5cGVJbmZvID0gdGhpcy52YWx1ZVR5cGVJbmZvW3ZhbHVlSW5kZXhdO1xuICAgIGlmICghdmFsdWVUeXBlSW5mbyB8fCAhdmFsdWVUeXBlIHx8IHZhbHVlVHlwZSA9PT0gTG1yUGl2b3RWYWx1ZVR5cGUuRGVmYXVsdCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0VmFsdWVCeUNvbnN0cmFpbnQodmFsdWUsIHZhbHVlSW5kZXgpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZVR5cGUgPT09IExtclBpdm90VmFsdWVUeXBlLkFsbFBlcmNlbnRhZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbHVlQnlQZXJjZW50YWdlKGRpdmlkZVZhbHVlcyh2YWx1ZSwgdmFsdWVUeXBlSW5mby5zdW0pKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PT0gTG1yUGl2b3RWYWx1ZVR5cGUuQ29sdW1uUGVyY2VudGFnZSkge1xuICAgICAgY29uc3QgY29sdW1uc0RpdmlkZXJzID0gY29sdW1ucy5yZWR1Y2UoKGRpdmlkZXJzLCBjb2x1bW4pID0+IHtcbiAgICAgICAgZGl2aWRlcnMucHVzaCh2YWx1ZVR5cGVJbmZvLnN1bXNDb2x1bW5zW2NvbHVtbl0pO1xuICAgICAgICByZXR1cm4gZGl2aWRlcnM7XG4gICAgICB9LCBbXSk7XG4gICAgICBjb25zdCBjb2x1bW5zRGl2aWRlciA9IGFnZ3JlZ2F0ZURhdGFWYWx1ZXMoRGF0YUFnZ3JlZ2F0aW9uVHlwZS5TdW0sIGNvbHVtbnNEaXZpZGVycyk7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRWYWx1ZUJ5UGVyY2VudGFnZShkaXZpZGVWYWx1ZXModmFsdWUsIGNvbHVtbnNEaXZpZGVyKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09IExtclBpdm90VmFsdWVUeXBlLlJvd1BlcmNlbnRhZ2UpIHtcbiAgICAgIGNvbnN0IHJvd3NEaXZpZGVycyA9IHJvd3MucmVkdWNlKChkaXZpZGVycywgcm93KSA9PiB7XG4gICAgICAgIGRpdmlkZXJzLnB1c2godmFsdWVUeXBlSW5mby5zdW1zUm93c1tyb3ddKTtcbiAgICAgICAgcmV0dXJuIGRpdmlkZXJzO1xuICAgICAgfSwgW10pO1xuICAgICAgY29uc3Qgcm93c0RpdmlkZXIgPSBhZ2dyZWdhdGVEYXRhVmFsdWVzKERhdGFBZ2dyZWdhdGlvblR5cGUuU3VtLCByb3dzRGl2aWRlcnMpO1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0VmFsdWVCeVBlcmNlbnRhZ2UoZGl2aWRlVmFsdWVzKHZhbHVlLCByb3dzRGl2aWRlcikpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbHVlQnlDb25zdHJhaW50KHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VmFsdWVCeVBlcmNlbnRhZ2UodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGVyY2VudGFnZUNvbnN0cmFpbnQuY3JlYXRlRGF0YVZhbHVlKHZhbHVlKS5mb3JtYXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VmFsdWVCeUNvbnN0cmFpbnQodmFsdWU6IGFueSwgdmFsdWVJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCBjb25zdHJhaW50ID0gdGhpcy5kYXRhLnZhbHVlc0NvbnN0cmFpbnRzPy5bdmFsdWVJbmRleF0gfHwgdGhpcy52YWx1ZVR5cGVJbmZvW3ZhbHVlSW5kZXhdPy5kZWZhdWx0Q29uc3RyYWludDtcbiAgICBpZiAoY29uc3RyYWludCkge1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuY3JlYXRlRGF0YVZhbHVlKHZhbHVlLCB0aGlzLmNvbnN0cmFpbnREYXRhKS5wcmV2aWV3KCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsbENlbGxzRm9yR3JvdXBlZFJvdyhcbiAgICBjZWxsczogTG1yUGl2b3RUYWJsZUNlbGxbXVtdLFxuICAgIHJvd3M6IG51bWJlcltdLFxuICAgIHJvd0luZGV4SW5DZWxsczogbnVtYmVyLFxuICAgIGJhY2tncm91bmQ6IHN0cmluZ1xuICApIHtcbiAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnNUcmFuc2Zvcm1hdGlvbkFycmF5Lmxlbmd0aDsgY29sdW1uKyspIHtcbiAgICAgIGNvbnN0IGNvbHVtbkluZGV4SW5DZWxscyA9IHRoaXMuY29sdW1uc1RyYW5zZm9ybWF0aW9uQXJyYXlbY29sdW1uXTtcbiAgICAgIGlmIChpc05vdE51bGxPclVuZGVmaW5lZChjb2x1bW5JbmRleEluQ2VsbHMpKSB7XG4gICAgICAgIGNvbnN0IHt2YWx1ZXMsIGRhdGFSZXNvdXJjZXN9ID0gdGhpcy5nZXRHcm91cGVkVmFsdWVzRm9yUm93c0FuZENvbHMocm93cywgW2NvbHVtbl0pO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuYWdncmVnYXRlQW5kRm9ybWF0RGF0YVZhbHVlcyh2YWx1ZXMsIHJvd3MsIFtjb2x1bW5dKTtcbiAgICAgICAgY2VsbHNbcm93SW5kZXhJbkNlbGxzXVtjb2x1bW5JbmRleEluQ2VsbHNdID0ge1xuICAgICAgICAgIHZhbHVlOiBTdHJpbmcoZm9ybWF0dGVkVmFsdWUpLFxuICAgICAgICAgIGRhdGFSZXNvdXJjZXMsXG4gICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICAgIGNzc0NsYXNzOiBQaXZvdFRhYmxlQ29udmVydGVyLmdyb3VwRGF0YUNsYXNzLFxuICAgICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgICAgaXNWYWx1ZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxDZWxsc0ZvckV4cHJlc3Npb25Sb3coXG4gICAgY2VsbHM6IExtclBpdm90VGFibGVDZWxsW11bXSxcbiAgICBleHByZXNzaW9uOiBMbXJQaXZvdERhdGFIZWFkZXJFeHByZXNzaW9uLFxuICAgIHJvd0luZGV4SW5DZWxsczogbnVtYmVyLFxuICAgIGJhY2tncm91bmQ6IHN0cmluZ1xuICApOntpbmRleGVzOiBudW1iZXJbXX0ge1xuICAgIGxldCByb3dJbmRleGVzOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRoaXMuY29sdW1uc1RyYW5zZm9ybWF0aW9uQXJyYXkubGVuZ3RoOyBjb2x1bW4rKykge1xuICAgICAgY29uc3QgY29sdW1uSW5kZXhJbkNlbGxzID0gdGhpcy5jb2x1bW5zVHJhbnNmb3JtYXRpb25BcnJheVtjb2x1bW5dO1xuICAgICAgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKGNvbHVtbkluZGV4SW5DZWxscykpIHtcbiAgICAgICAgY29uc3Qge3ZhbHVlLCBkYXRhUmVzb3VyY2VzLCBpbmRleGVzfSA9IHRoaXMuZXZhbHVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIFtjb2x1bW5dKTtcbiAgICAgICAgcm93SW5kZXhlcyA9IGluZGV4ZXNcbiAgICAgICAgY29uc3QgdmFsdWVJbmRleCA9IGNvbHVtbiAlIHRoaXMuZGF0YS52YWx1ZVRpdGxlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZUJ5Q29uc3RyYWludCh2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgICAgIGNlbGxzW3Jvd0luZGV4SW5DZWxsc11bY29sdW1uSW5kZXhJbkNlbGxzXSA9IHtcbiAgICAgICAgICB2YWx1ZTogU3RyaW5nKGZvcm1hdHRlZFZhbHVlKSxcbiAgICAgICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgICBjc3NDbGFzczogUGl2b3RUYWJsZUNvbnZlcnRlci5ncm91cERhdGFDbGFzcyxcbiAgICAgICAgICBiYWNrZ3JvdW5kLFxuICAgICAgICAgIGlzVmFsdWU6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7aW5kZXhlczogdW5pcXVlVmFsdWVzKFsuLi5yb3dJbmRleGVzLCByb3dJbmRleEluQ2VsbHNdKX1cbiAgfVxuXG4gIHByaXZhdGUgZXZhbHVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb246IExtclBpdm90RGF0YUhlYWRlckV4cHJlc3Npb24sIGNvbHVtbnM6IG51bWJlcltdKToge3ZhbHVlOiBudW1iZXI7IGRhdGFSZXNvdXJjZXM6IERhdGFSZXNvdXJjZVtdOyBpbmRleGVzOiBudW1iZXJbXSAgfSB7XG4gICAgcmV0dXJuIChleHByZXNzaW9uLm9wZXJhbmRzIHx8IFtdKS5yZWR1Y2UoKHJlc3VsdCwgb3BlcmFuZCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHt2YWx1ZSwgZGF0YVJlc291cmNlcywgaW5kZXhlcyB9ID0gdGhpcy5ldmFsdWF0ZU9wZXJhbmQob3BlcmFuZCwgY29sdW1ucylcbiAgICAgIHJlc3VsdC5kYXRhUmVzb3VyY2VzLnB1c2goLi4uZGF0YVJlc291cmNlcylcbiAgICAgIHJlc3VsdC5pbmRleGVzLnB1c2goLi4uaW5kZXhlcylcbiAgICAgIHN3aXRjaCAoZXhwcmVzc2lvbi5vcGVyYXRpb24pIHtcbiAgICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgICByZXN1bHQudmFsdWUgKz0gdmFsdWVcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3VidHJhY3QnOlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IChpbmRleCA9PT0gMCA/IHZhbHVlIDogcmVzdWx0LnZhbHVlIC0gdmFsdWUpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ211bHRpcGx5JzpcbiAgICAgICAgICByZXN1bHQudmFsdWUgPSBpbmRleCA9PT0gMCA/IHZhbHVlIDogcmVzdWx0LnZhbHVlICogdmFsdWVcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGl2aWRlJzpcbiAgICAgICAgICByZXN1bHQudmFsdWUgPSBpbmRleCA9PT0gMCA/IHZhbHVlIDogdmFsdWUgPyByZXN1bHQudmFsdWUgLyB2YWx1ZSA6IHJlc3VsdC52YWx1ZVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSAsIHt2YWx1ZTogMCwgZGF0YVJlc291cmNlczogW10sIGluZGV4ZXM6IFtdfSlcbiAgfVxuXG4gIHByaXZhdGUgZXZhbHVhdGVPcGVyYW5kKG9wZXJhbmQ6IExtclBpdm90RGF0YUhlYWRlck9wZXJhbmQsIGNvbHVtbnM6IG51bWJlcltdKToge3ZhbHVlOiBudW1iZXI7IGRhdGFSZXNvdXJjZXM6IERhdGFSZXNvdXJjZVtdOyBpbmRleGVzOiBudW1iZXJbXSB9IHtcbiAgICBzd2l0Y2ggKG9wZXJhbmQudHlwZSkge1xuICAgICAgY2FzZSAnZXhwcmVzc2lvbic6IHJldHVybiB0aGlzLmV2YWx1YXRlRXhwcmVzc2lvbihvcGVyYW5kLCBjb2x1bW5zKVxuICAgICAgY2FzZSAndmFsdWUnOiByZXR1cm4ge3ZhbHVlOiBvcGVyYW5kLnZhbHVlLCBkYXRhUmVzb3VyY2VzOiBbXSwgaW5kZXhlczogW119XG4gICAgICBjYXNlICdoZWFkZXInOiB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBnZXRUYXJnZXRJbmRleGVzRm9ySGVhZGVycyhvcGVyYW5kLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCB7dmFsdWVzLCBkYXRhUmVzb3VyY2VzfSA9IHRoaXMuZ2V0R3JvdXBlZFZhbHVlc0ZvclJvd3NBbmRDb2xzKHJvd3MsIGNvbHVtbnMpO1xuICAgICAgICBjb25zdCB7dmFsdWV9ID0gdGhpcy5hZ2dyZWdhdGVEYXRhVmFsdWVzKHZhbHVlcywgY29sdW1ucyk7XG4gICAgICAgIHJldHVybiB7dmFsdWUsIGRhdGFSZXNvdXJjZXMsIGluZGV4ZXM6IHRoaXMudHJhbnNmb3JtUm93SW5kZXhlcyhyb3dzKX1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybVJvd0luZGV4ZXMocm93czogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHJvd3NcbiAgICAgIC5tYXAodiA9PiB0aGlzLnJvd3NUcmFuc2Zvcm1hdGlvbkFycmF5W3ZdKVxuICAgICAgLmZpbHRlcih2ID0+IGlzTm90TnVsbE9yVW5kZWZpbmVkKHYpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0R3JvdXBlZFZhbHVlc0ZvclJvd3NBbmRDb2xzKFxuICAgIHJvd3M6IG51bWJlcltdLFxuICAgIGNvbHVtbnM6IG51bWJlcltdXG4gICk6IHsgdmFsdWVzOiBhbnlbXTsgZGF0YVJlc291cmNlczogRGF0YVJlc291cmNlW10gfSB7XG4gICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgY29uc3QgZGF0YVJlc291cmNlcyA9IFtdO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgY29uc3Qgcm93Q29sdW1uVmFsdWUgPSB0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl07XG4gICAgICAgIGlmIChpc0FycmF5KHJvd0NvbHVtblZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKC4uLnJvd0NvbHVtblZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaChyb3dDb2x1bW5WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVJlc291cmNlcy5wdXNoKC4uLih0aGlzLmRhdGFSZXNvdXJjZXM/Lltyb3ddPy5bY29sdW1uXSB8fCBbXSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge3ZhbHVlcywgZGF0YVJlc291cmNlc307XG4gIH1cblxuICBwcml2YXRlIGZpbGxDZWxsc0J5Q29sdW1ucyhjZWxsczogTG1yUGl2b3RUYWJsZUNlbGxbXVtdKTogSGVhZGVyR3JvdXBJbmZvW10ge1xuICAgIGNvbnN0IGNvbHVtbkdyb3VwcyA9IFtdO1xuICAgIHRoaXMuaXRlcmF0ZUFuZEZpbGxDZWxsc0J5Q29sdW1ucyhcbiAgICAgIGNlbGxzLFxuICAgICAgY29sdW1uR3JvdXBzLFxuICAgICAgdGhpcy5kYXRhLmNvbHVtbkhlYWRlcnMsXG4gICAgICB0aGlzLnJvd0xldmVscyxcbiAgICAgIHRoaXMuY29sdW1uU2hvd1N1bXMsXG4gICAgICAwXG4gICAgKTtcbiAgICByZXR1cm4gY29sdW1uR3JvdXBzO1xuICB9XG5cbiAgcHJpdmF0ZSBpdGVyYXRlQW5kRmlsbENlbGxzQnlDb2x1bW5zKFxuICAgIGNlbGxzOiBMbXJQaXZvdFRhYmxlQ2VsbFtdW10sXG4gICAgY29sdW1uR3JvdXBzSW5mbzogSGVhZGVyR3JvdXBJbmZvW10sXG4gICAgaGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNob3dTdW1zOiBib29sZWFuW10sXG4gICAgbGV2ZWw6IG51bWJlcixcbiAgICBwYXJlbnRIZWFkZXI/OiBMbXJQaXZvdERhdGFIZWFkZXJcbiAgKSB7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgY29uc3QgbnVtYmVyT2ZTdW1zID0gTWF0aC5tYXgoMSwgdGhpcy5kYXRhLnZhbHVlVGl0bGVzLmxlbmd0aCk7XG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgaGVhZGVycykge1xuICAgICAgY29uc3QgY29sU3BhbiA9IGdldERpcmVjdEhlYWRlckNoaWxkQ291bnQoaGVhZGVyLCBsZXZlbCwgc2hvd1N1bXMsIG51bWJlck9mU3Vtcyk7XG4gICAgICBjZWxsc1tsZXZlbF1bY3VycmVudEluZGV4XSA9IHtcbiAgICAgICAgdmFsdWU6IHRoaXMuZm9ybWF0Q29sdW1uSGVhZGVyKGhlYWRlci50aXRsZSwgbGV2ZWwpLFxuICAgICAgICBjc3NDbGFzczogUGl2b3RUYWJsZUNvbnZlcnRlci5jb2x1bW5IZWFkZXJDbGFzcyxcbiAgICAgICAgaXNIZWFkZXI6IHRydWUsXG4gICAgICAgIHJvd1NwYW46IDEsXG4gICAgICAgIGNvbFNwYW4sXG4gICAgICAgIHN0aWNreVRvcDogdGhpcy5pc0NvbHVtbkxldmVsU3RpY2t5KGxldmVsKSxcbiAgICAgICAgYmFja2dyb3VuZDogdGhpcy5nZXRIZWFkZXJCYWNrZ3JvdW5kKGhlYWRlciwgbGV2ZWwpLFxuICAgICAgICBjb25zdHJhaW50OiBoZWFkZXIuY29uc3RyYWludCxcbiAgICAgICAgbGFiZWw6IGhlYWRlci5hdHRyaWJ1dGVOYW1lLFxuICAgICAgfTtcblxuICAgICAgaWYgKGhlYWRlci5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLml0ZXJhdGVBbmRGaWxsQ2VsbHNCeUNvbHVtbnMoXG4gICAgICAgICAgY2VsbHMsXG4gICAgICAgICAgY29sdW1uR3JvdXBzSW5mbyxcbiAgICAgICAgICBoZWFkZXIuY2hpbGRyZW4sXG4gICAgICAgICAgY3VycmVudEluZGV4LFxuICAgICAgICAgIHNob3dTdW1zLFxuICAgICAgICAgIGxldmVsICsgMSxcbiAgICAgICAgICBoZWFkZXJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNOb3ROdWxsT3JVbmRlZmluZWQoaGVhZGVyLnRhcmdldEluZGV4KSkge1xuICAgICAgICB0aGlzLmZpbGxDZWxsc0ZvckNvbHVtbihjZWxscywgaGVhZGVyLnRhcmdldEluZGV4KTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudEluZGV4ICs9IGdldEhlYWRlckNoaWxkQ291bnQoaGVhZGVyLCBsZXZlbCwgc2hvd1N1bXMsIG51bWJlck9mU3Vtcyk7XG4gICAgfVxuXG4gICAgaWYgKHNob3dTdW1zW2xldmVsXSkge1xuICAgICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuZ2V0U3VtbWFyeUJhY2tncm91bmQobGV2ZWwpO1xuICAgICAgY29uc3QgeyB0aXRsZSwgc3VtbWFyeSB9ID0gdGhpcy5mb3JtYXRTdW1tYXJ5SGVhZGVyKHBhcmVudEhlYWRlciwgbGV2ZWwpXG4gICAgICBjb25zdCBudW1iZXJPZlZhbHVlcyA9IHRoaXMuZGF0YS52YWx1ZVRpdGxlcy5sZW5ndGg7XG4gICAgICBjb25zdCByb3dJbmRleCA9IE1hdGgubWF4KGxldmVsIC0gMSwgMCk7XG4gICAgICBjb25zdCBzaG91bGRBZGRWYWx1ZUhlYWRlcnMgPSBudW1iZXJPZlZhbHVlcyA+IDE7XG5cbiAgICAgIGNlbGxzW3Jvd0luZGV4XVtjdXJyZW50SW5kZXhdID0ge1xuICAgICAgICB2YWx1ZTogdGl0bGUsXG4gICAgICAgIGNvbnN0cmFpbnQ6IHBhcmVudEhlYWRlcj8uY29uc3RyYWludCxcbiAgICAgICAgbGFiZWw6IHBhcmVudEhlYWRlcj8uYXR0cmlidXRlTmFtZSxcbiAgICAgICAgY3NzQ2xhc3M6IFBpdm90VGFibGVDb252ZXJ0ZXIuY29sdW1uR3JvdXBIZWFkZXJDbGFzcyxcbiAgICAgICAgaXNTdW1tYXJ5OiB0cnVlLFxuICAgICAgICBzdGlja3lUb3A6IHRoaXMuaXNDb2x1bW5MZXZlbFN0aWNreShsZXZlbCksXG4gICAgICAgIHJvd1NwYW46IHRoaXMuY29sdW1uTGV2ZWxzIC0gcm93SW5kZXggLSAoc2hvdWxkQWRkVmFsdWVIZWFkZXJzID8gMSA6IDApLFxuICAgICAgICBjb2xTcGFuOiBudW1iZXJPZlN1bXMsXG4gICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgIHN1bW1hcnksXG4gICAgICB9O1xuXG4gICAgICBpZiAobnVtYmVyT2ZWYWx1ZXMgPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZWYWx1ZXM7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkluZGV4SW5DZWxscyA9IGN1cnJlbnRJbmRleCArIGk7XG4gICAgICAgICAgaWYgKHNob3VsZEFkZFZhbHVlSGVhZGVycykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVUaXRsZSA9IHRoaXMuZGF0YS52YWx1ZVRpdGxlc1tpXTtcbiAgICAgICAgICAgIGNlbGxzW3RoaXMuY29sdW1uTGV2ZWxzIC0gMV1bY29sdW1uSW5kZXhJbkNlbGxzXSA9IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlVGl0bGUsXG4gICAgICAgICAgICAgIGNzc0NsYXNzOiBQaXZvdFRhYmxlQ29udmVydGVyLmNvbHVtbkdyb3VwSGVhZGVyQ2xhc3MsXG4gICAgICAgICAgICAgIGlzU3VtbWFyeTogdHJ1ZSxcbiAgICAgICAgICAgICAgc3RpY2t5VG9wOiB0aGlzLmlzQ29sdW1uTGV2ZWxTdGlja3kobGV2ZWwpLFxuICAgICAgICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICAgICAgICBjb2xTcGFuOiAxLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb2x1bW5zSW5kZXhlcyA9IGdldFRhcmdldEluZGV4ZXNGb3JIZWFkZXJzKGhlYWRlcnMpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlQ29sdW1uc0luZGV4ZXMgPSBjb2x1bW5zSW5kZXhlcy5maWx0ZXIoaW5kZXggPT4gaW5kZXggJSBudW1iZXJPZlZhbHVlcyA9PT0gaSk7XG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRDb2x1bW5JbmRleGVzID0gdmFsdWVDb2x1bW5zSW5kZXhlc1xuICAgICAgICAgICAgLm1hcCh2ID0+IHRoaXMuY29sdW1uc1RyYW5zZm9ybWF0aW9uQXJyYXlbdl0pXG4gICAgICAgICAgICAuZmlsdGVyKHYgPT4gaXNOb3ROdWxsT3JVbmRlZmluZWQodikpO1xuICAgICAgICAgIGNvbHVtbkdyb3Vwc0luZm9bY29sdW1uSW5kZXhJbkNlbGxzXSA9IHtiYWNrZ3JvdW5kLCBpbmRleGVzOiB0cmFuc2Zvcm1lZENvbHVtbkluZGV4ZXMsIGxldmVsfTtcblxuICAgICAgICAgIHRoaXMuZmlsbENlbGxzRm9yR3JvdXBlZENvbHVtbihjZWxscywgdmFsdWVDb2x1bW5zSW5kZXhlcywgY29sdW1uSW5kZXhJbkNlbGxzLCBiYWNrZ3JvdW5kKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sdW1uR3JvdXBzSW5mb1tjdXJyZW50SW5kZXhdID0ge2JhY2tncm91bmQsIGluZGV4ZXM6IFtdLCBsZXZlbH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWxsQ2VsbHNGb3JHcm91cGVkQ29sdW1uKFxuICAgIGNlbGxzOiBMbXJQaXZvdFRhYmxlQ2VsbFtdW10sXG4gICAgY29sdW1uczogbnVtYmVyW10sXG4gICAgY29sdW1uSW5kZXhJbkNlbGxzOiBudW1iZXIsXG4gICAgYmFja2dyb3VuZDogc3RyaW5nXG4gICkge1xuICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93c1RyYW5zZm9ybWF0aW9uQXJyYXkubGVuZ3RoOyByb3crKykge1xuICAgICAgY29uc3Qgcm93SW5kZXhJbkNlbGxzID0gdGhpcy5yb3dzVHJhbnNmb3JtYXRpb25BcnJheVtyb3ddO1xuICAgICAgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKHJvd0luZGV4SW5DZWxscykpIHtcbiAgICAgICAgY29uc3Qge3ZhbHVlcywgZGF0YVJlc291cmNlc30gPSB0aGlzLmdldEdyb3VwZWRWYWx1ZXNGb3JSb3dzQW5kQ29scyhbcm93XSwgY29sdW1ucyk7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy5hZ2dyZWdhdGVBbmRGb3JtYXREYXRhVmFsdWVzKHZhbHVlcywgW3Jvd10sIGNvbHVtbnMpO1xuICAgICAgICBjZWxsc1tyb3dJbmRleEluQ2VsbHNdW2NvbHVtbkluZGV4SW5DZWxsc10gPSB7XG4gICAgICAgICAgdmFsdWU6IFN0cmluZyhmb3JtYXR0ZWRWYWx1ZSksXG4gICAgICAgICAgZGF0YVJlc291cmNlcyxcbiAgICAgICAgICBjb2xTcGFuOiAxLFxuICAgICAgICAgIHJvd1NwYW46IDEsXG4gICAgICAgICAgY3NzQ2xhc3M6IFBpdm90VGFibGVDb252ZXJ0ZXIuZ3JvdXBEYXRhQ2xhc3MsXG4gICAgICAgICAgYmFja2dyb3VuZCxcbiAgICAgICAgICBpc1ZhbHVlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWdncmVnYXRlQW5kRm9ybWF0RGF0YVZhbHVlcyh2YWx1ZXM6IGFueVtdLCByb3dzOiBudW1iZXJbXSwgY29sdW1uczogbnVtYmVyW10pOiBhbnkge1xuICAgIGNvbnN0IHt2YWx1ZSwgYWdncmVnYXRpb259ID0gdGhpcy5hZ2dyZWdhdGVEYXRhVmFsdWVzKHZhbHVlcywgY29sdW1ucyk7XG4gICAgcmV0dXJuIGFnZ3JlZ2F0aW9uID09PSBEYXRhQWdncmVnYXRpb25UeXBlLkpvaW4gPyB2YWx1ZSA6IHRoaXMuZm9ybWF0R3JvdXBlZFZhbHVlQnlWYWx1ZVR5cGUodmFsdWUsIHJvd3MsIGNvbHVtbnMpXG4gIH1cblxuICBwcml2YXRlIGFnZ3JlZ2F0ZURhdGFWYWx1ZXModmFsdWVzOiBhbnlbXSwgY29sdW1uczogbnVtYmVyW10pOiB7dmFsdWU6IGFueTsgYWdncmVnYXRpb246IERhdGFBZ2dyZWdhdGlvblR5cGV9IHtcbiAgICBjb25zdCBhZ2dyZWdhdGlvbiA9IHRoaXMuYWdncmVnYXRpb25CeUNvbHVtbnMoY29sdW1ucyk7XG4gICAgaWYgKGFnZ3JlZ2F0aW9uID09PSBEYXRhQWdncmVnYXRpb25UeXBlLkpvaW4pIHtcbiAgICAgIGNvbnN0IHZhbHVlSW5kZXggPSB0aGlzLmdldFZhbHVlSW5kZXhGb3JDb2x1bW5zKGNvbHVtbnMpO1xuICAgICAgY29uc3QgY29uc3RyYWludCA9IHRoaXMuZGF0YS52YWx1ZXNDb25zdHJhaW50cz8uW3ZhbHVlSW5kZXhdIHx8IHRoaXMudmFsdWVUeXBlSW5mb1t2YWx1ZUluZGV4XT8uZGVmYXVsdENvbnN0cmFpbnQ7XG4gICAgICByZXR1cm4ge3ZhbHVlOiBhZ2dyZWdhdGVEYXRhVmFsdWVzKGFnZ3JlZ2F0aW9uLCB2YWx1ZXMsIGNvbnN0cmFpbnQsIGZhbHNlLCB0aGlzLmNvbnN0cmFpbnREYXRhKSwgYWdncmVnYXRpb259O1xuICAgIH1cbiAgICByZXR1cm4ge3ZhbHVlOiBhZ2dyZWdhdGVEYXRhVmFsdWVzKGFnZ3JlZ2F0aW9uLCB2YWx1ZXMpLCBhZ2dyZWdhdGlvbn07XG4gIH1cblxuICBwcml2YXRlIGFnZ3JlZ2F0aW9uQnlDb2x1bW5zKGNvbHVtbnM6IG51bWJlcltdKTogRGF0YUFnZ3JlZ2F0aW9uVHlwZSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGNvbHVtbnNbMF0gJSB0aGlzLmRhdGEudmFsdWVUaXRsZXMubGVuZ3RoO1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uID0gdGhpcy5kYXRhLnZhbHVlQWdncmVnYXRpb25zPy5bdmFsdWVJbmRleF07XG4gICAgcmV0dXJuIGlzVmFsdWVBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbikgPyBhZ2dyZWdhdGlvbiA6IERhdGFBZ2dyZWdhdGlvblR5cGUuU3VtO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsQ2VsbHNGb3JDb2x1bW4oY2VsbHM6IExtclBpdm90VGFibGVDZWxsW11bXSwgY29sdW1uOiBudW1iZXIpIHtcbiAgICBjb25zdCBjb2x1bW5JbmRleEluQ2VsbHMgPSB0aGlzLmNvbHVtbnNUcmFuc2Zvcm1hdGlvbkFycmF5W2NvbHVtbl07XG4gICAgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKGNvbHVtbkluZGV4SW5DZWxscykpIHtcbiAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93c1RyYW5zZm9ybWF0aW9uQXJyYXkubGVuZ3RoOyByb3crKykge1xuICAgICAgICBjb25zdCByb3dJbmRleEluQ2VsbHMgPSB0aGlzLnJvd3NUcmFuc2Zvcm1hdGlvbkFycmF5W3Jvd107XG4gICAgICAgIGlmIChpc05vdE51bGxPclVuZGVmaW5lZChyb3dJbmRleEluQ2VsbHMpKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRhdGEudmFsdWVzW3Jvd11bY29sdW1uXTtcbiAgICAgICAgICBjb25zdCBkYXRhUmVzb3VyY2VzID0gdGhpcy5kYXRhUmVzb3VyY2VzPy5bcm93XT8uW2NvbHVtbl0gfHwgW107XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmFnZ3JlZ2F0ZU9yRm9ybWF0U2luZ2xlVmFsdWUodmFsdWUsIGNvbHVtbik7XG4gICAgICAgICAgY29uc3Qgc3RyaW5nVmFsdWUgPSBpc05vdE51bGxPclVuZGVmaW5lZChmb3JtYXR0ZWRWYWx1ZSkgPyBTdHJpbmcoZm9ybWF0dGVkVmFsdWUpIDogJyc7XG4gICAgICAgICAgY2VsbHNbcm93SW5kZXhJbkNlbGxzXVtjb2x1bW5JbmRleEluQ2VsbHNdID0ge1xuICAgICAgICAgICAgdmFsdWU6IHN0cmluZ1ZhbHVlLFxuICAgICAgICAgICAgZGF0YVJlc291cmNlcyxcbiAgICAgICAgICAgIHJvd1NwYW46IDEsXG4gICAgICAgICAgICBjb2xTcGFuOiAxLFxuICAgICAgICAgICAgY3NzQ2xhc3M6IFBpdm90VGFibGVDb252ZXJ0ZXIuZGF0YUNsYXNzLFxuICAgICAgICAgICAgaXNWYWx1ZTogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZ2dyZWdhdGVPckZvcm1hdFNpbmdsZVZhbHVlKHZhbHVlOiBhbnksIGNvbHVtbjogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCBhZ2dyZWdhdGlvbiA9IHRoaXMuYWdncmVnYXRpb25CeUNvbHVtbnMoW2NvbHVtbl0pO1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSB0aGlzLmdldFZhbHVlSW5kZXhGb3JDb2x1bW5zKFtjb2x1bW5dKTtcbiAgICBpZiAoYWdncmVnYXRpb24gPT09IERhdGFBZ2dyZWdhdGlvblR5cGUuSm9pbikge1xuICAgICAgY29uc3QgY29uc3RyYWludCA9IHRoaXMuZGF0YS52YWx1ZXNDb25zdHJhaW50cz8uW3ZhbHVlSW5kZXhdIHx8IHRoaXMudmFsdWVUeXBlSW5mb1t2YWx1ZUluZGV4XT8uZGVmYXVsdENvbnN0cmFpbnQ7XG4gICAgICByZXR1cm4gYWdncmVnYXRlRGF0YVZhbHVlcyhhZ2dyZWdhdGlvbiwgW3ZhbHVlXSwgY29uc3RyYWludCwgZmFsc2UsIHRoaXMuY29uc3RyYWludERhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mb3JtYXRWYWx1ZUJ5VmFsdWVUeXBlKHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsbENlbGxzQnlHcm91cEludGVyc2VjdGlvbihcbiAgICBjZWxsczogTG1yUGl2b3RUYWJsZUNlbGxbXVtdLFxuICAgIHJvd0dyb3Vwc0luZm86IEhlYWRlckdyb3VwSW5mb1tdLFxuICAgIGNvbHVtbkdyb3Vwc0luZm86IEhlYWRlckdyb3VwSW5mb1tdXG4gICkge1xuICAgIGNvbnN0IHJvd3NDb3VudCA9IGNlbGxzLmxlbmd0aDtcbiAgICBjb25zdCBjb2x1bW5zQ291bnQgPSBjZWxsc1swXT8ubGVuZ3RoIHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0dyb3Vwc0luZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJvd0dyb3VwSW5mbyA9IHJvd0dyb3Vwc0luZm9baV07XG4gICAgICBpZiAocm93R3JvdXBJbmZvKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uR3JvdXBzSW5mby5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGlmIChjb2x1bW5Hcm91cHNJbmZvW2pdKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gY29sdW1uR3JvdXBzSW5mb1tqXS5pbmRleGVzXG4gICAgICAgICAgICBsZXQgZm9ybWF0dGVkVmFsdWU6IHN0cmluZztcbiAgICAgICAgICAgIGxldCBkYXRhUmVzb3VyY2VzOiBEYXRhUmVzb3VyY2VbXTtcbiAgICAgICAgICAgIGlmIChyb3dHcm91cEluZm8uZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV2YWx1YXRlRXhwcmVzc2lvbihyb3dHcm91cEluZm8uZXhwcmVzc2lvbiwgY29sdW1ucyk7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlSW5kZXggPSBjb2x1bW5zWzBdICUgdGhpcy5kYXRhLnZhbHVlVGl0bGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlQnlDb25zdHJhaW50KHJlc3VsdC52YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgICAgICAgICAgIGRhdGFSZXNvdXJjZXMgPSByZXN1bHQuZGF0YVJlc291cmNlc1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gaXQncyBlbm91Z2ggdG8gZmlsbCBncm91cCB2YWx1ZXMgb25seSBmcm9tIHJvdyBzaWRlXG4gICAgICAgICAgICAgIGNvbnN0IHtyb3dzSW5kZXhlcywgY29sdW1uc0luZGV4ZXN9ID0gdGhpcy5nZXRWYWx1ZXNJbmRleGVzRnJvbUNlbGxzSW5kZXhlcyhcbiAgICAgICAgICAgICAgICByb3dHcm91cEluZm8uaW5kZXhlcyxcbiAgICAgICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0R3JvdXBlZFZhbHVlc0ZvclJvd3NBbmRDb2xzKHJvd3NJbmRleGVzLCBjb2x1bW5zSW5kZXhlcyk7XG4gICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdGhpcy5hZ2dyZWdhdGVBbmRGb3JtYXREYXRhVmFsdWVzKHJlc3VsdC52YWx1ZXMsIHJvd3NJbmRleGVzLCBjb2x1bW5zSW5kZXhlcyk7XG4gICAgICAgICAgICAgIGRhdGFSZXNvdXJjZXMgPSByZXN1bHQuZGF0YVJlc291cmNlc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2VsbHNbaV1bal0gPSB7XG4gICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcoZm9ybWF0dGVkVmFsdWUpLFxuICAgICAgICAgICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgICAgICAgICBjb2xTcGFuOiAxLFxuICAgICAgICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICAgICAgICBjc3NDbGFzczogUGl2b3RUYWJsZUNvbnZlcnRlci5ncm91cERhdGFDbGFzcyxcbiAgICAgICAgICAgICAgaXNWYWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWxsUm93V2l0aENvbG9yKGNlbGxzLCBpLCByb3dHcm91cEluZm8sIGNvbHVtbnNDb3VudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5Hcm91cHNJbmZvLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoY29sdW1uR3JvdXBzSW5mb1tqXSkge1xuICAgICAgICB0aGlzLmZpbGxDb2x1bW5XaXRoQ29sb3IoY2VsbHMsIGosIGNvbHVtbkdyb3Vwc0luZm9bal0sIHJvd0dyb3Vwc0luZm8sIHJvd3NDb3VudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNJbmRleGVzRnJvbUNlbGxzSW5kZXhlcyhcbiAgICByb3dzOiBudW1iZXJbXSxcbiAgICBjb2x1bW5zOiBudW1iZXJbXVxuICApOiB7IHJvd3NJbmRleGVzOiBudW1iZXJbXTsgY29sdW1uc0luZGV4ZXM6IG51bWJlcltdIH0ge1xuICAgIGNvbnN0IHJvd3NJbmRleGVzID0gcm93c1xuICAgICAgLm1hcChyb3cgPT4gdGhpcy5yb3dzVHJhbnNmb3JtYXRpb25BcnJheS5maW5kSW5kZXgodFJvdyA9PiB0Um93ID09PSByb3cpKVxuICAgICAgLmZpbHRlcihpbmRleCA9PiBpbmRleCA+PSAwKTtcbiAgICBjb25zdCBjb2x1bW5zSW5kZXhlcyA9IGNvbHVtbnNcbiAgICAgIC5tYXAoY29sdW1uID0+IHRoaXMuY29sdW1uc1RyYW5zZm9ybWF0aW9uQXJyYXkuZmluZEluZGV4KHRDb2x1bW4gPT4gdENvbHVtbiA9PT0gY29sdW1uKSlcbiAgICAgIC5maWx0ZXIoaW5kZXggPT4gaW5kZXggPj0gMCk7XG4gICAgcmV0dXJuIHtyb3dzSW5kZXhlcywgY29sdW1uc0luZGV4ZXN9O1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsUm93V2l0aENvbG9yKFxuICAgIGNlbGxzOiBMbXJQaXZvdFRhYmxlQ2VsbFtdW10sXG4gICAgcm93OiBudW1iZXIsXG4gICAgcm93R3JvdXBJbmZvOiBIZWFkZXJHcm91cEluZm8sXG4gICAgY29sdW1uc0NvdW50OiBudW1iZXJcbiAgKSB7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMucm93TGV2ZWxzOyBpIDwgY29sdW1uc0NvdW50OyBpKyspIHtcbiAgICAgIGNlbGxzW3Jvd11baV0gJiYgKGNlbGxzW3Jvd11baV0uYmFja2dyb3VuZCA9IHJvd0dyb3VwSW5mby5iYWNrZ3JvdW5kKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxDb2x1bW5XaXRoQ29sb3IoXG4gICAgY2VsbHM6IExtclBpdm90VGFibGVDZWxsW11bXSxcbiAgICBjb2x1bW46IG51bWJlcixcbiAgICBjb2x1bW5Hcm91cEluZm86IEhlYWRlckdyb3VwSW5mbyxcbiAgICByb3dHcm91cHNJbmZvOiBIZWFkZXJHcm91cEluZm9bXSxcbiAgICByb3dDb3VudDogbnVtYmVyXG4gICkge1xuICAgIGZvciAobGV0IGkgPSB0aGlzLmNvbHVtbkxldmVsczsgaSA8IHJvd0NvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IHJvd0dyb3VwSW5mbyA9IHJvd0dyb3Vwc0luZm9baV07XG4gICAgICBpZiAoIXJvd0dyb3VwSW5mbyB8fCByb3dHcm91cEluZm8ubGV2ZWwgPiBjb2x1bW5Hcm91cEluZm8ubGV2ZWwpIHtcbiAgICAgICAgY2VsbHNbaV1bY29sdW1uXSAmJiAoY2VsbHNbaV1bY29sdW1uXS5iYWNrZ3JvdW5kID0gY29sdW1uR3JvdXBJbmZvLmJhY2tncm91bmQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdENlbGxzKCk6IExtclBpdm90VGFibGVDZWxsW11bXSB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuZ2V0Um93c0NvdW50KCkgKyB0aGlzLmNvbHVtbkxldmVscztcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zQ291bnQoKSArIHRoaXMucm93TGV2ZWxzO1xuXG4gICAgY29uc3QgbWF0cml4OiBMbXJQaXZvdFRhYmxlQ2VsbFtdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW107XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAoaSA+PSB0aGlzLmNvbHVtbkxldmVscyAmJiBqID49IHRoaXMucm93TGV2ZWxzKSB7XG4gICAgICAgICAgY29uc3QgaXNEYXRhQ2xhc3MgPSB0aGlzLnJvd3NUcmFuc2Zvcm1hdGlvbkFycmF5LmluY2x1ZGVzKGkpICYmIHRoaXMuY29sdW1uc1RyYW5zZm9ybWF0aW9uQXJyYXkuaW5jbHVkZXMoaik7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0ge1xuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgZGF0YVJlc291cmNlczogW10sXG4gICAgICAgICAgICBjc3NDbGFzczogaXNEYXRhQ2xhc3MgPyBQaXZvdFRhYmxlQ29udmVydGVyLmRhdGFDbGFzcyA6IFBpdm90VGFibGVDb252ZXJ0ZXIuZ3JvdXBEYXRhQ2xhc3MsXG4gICAgICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICAgIGlzVmFsdWU6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXRyaXhbaV1bal0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5yb3dMZXZlbHMgPiAwICYmIHRoaXMuY29sdW1uTGV2ZWxzID4gMCkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnJvd0xldmVsczsgaisrKSB7XG4gICAgICAgIGNvbnN0IHJvd0hlYWRlckF0dHJpYnV0ZSA9IHRoaXMuZGF0YS5yb3dIZWFkZXJBdHRyaWJ1dGVzW2pdO1xuICAgICAgICBpZiAocm93SGVhZGVyQXR0cmlidXRlKSB7XG4gICAgICAgICAgY29uc3QgdGl0bGVSb3dTcGFuID0gdGhpcy5ub25TdGlja3lDb2x1bW5JbmRleCB8fCB0aGlzLmNvbHVtbkxldmVsc1xuICAgICAgICAgIG1hdHJpeFswXVtqXSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiByb3dIZWFkZXJBdHRyaWJ1dGUudGl0bGUsXG4gICAgICAgICAgICBjc3NDbGFzczogUGl2b3RUYWJsZUNvbnZlcnRlci5yb3dBdHRyaWJ1dGVIZWFkZXJDbGFzcyxcbiAgICAgICAgICAgIGlzQXR0cmlidXRlSGVhZGVyOiB0cnVlLFxuICAgICAgICAgICAgcm93U3BhbjogdGl0bGVSb3dTcGFuLFxuICAgICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICAgIHN0aWNreVRvcDogdGhpcy5pc0NvbHVtbkxldmVsU3RpY2t5KDApLFxuICAgICAgICAgICAgc3RpY2t5U3RhcnQ6IHRoaXMuaXNSb3dMZXZlbFN0aWNreShqKSxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJvd0hlYWRlckF0dHJpYnV0ZS5jb2xvcixcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHRoaXMuY29sdW1uTGV2ZWxzIC0gdGl0bGVSb3dTcGFuID4gMCkge1xuICAgICAgICAgICAgbWF0cml4W3RoaXMubm9uU3RpY2t5Q29sdW1uSW5kZXhdW2pdID0ge1xuICAgICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICAgIGNzc0NsYXNzOiBQaXZvdFRhYmxlQ29udmVydGVyLnJvd0F0dHJpYnV0ZUhlYWRlckNsYXNzLFxuICAgICAgICAgICAgICBpc0F0dHJpYnV0ZUhlYWRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgcm93U3BhbjogdGhpcy5jb2x1bW5MZXZlbHMgLSB0aXRsZVJvd1NwYW4sXG4gICAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJvd0hlYWRlckF0dHJpYnV0ZS5jb2xvcixcbiAgICAgICAgICAgICAgc3RpY2t5U3RhcnQ6IHRoaXMuaXNSb3dMZXZlbFN0aWNreShqKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbkxldmVsczsgaSsrKSB7XG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSB7XG4gICAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICAgICAgY3NzQ2xhc3M6IFBpdm90VGFibGVDb252ZXJ0ZXIuZW1wdHlDbGFzcyxcbiAgICAgICAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICAgICAgc3RpY2t5U3RhcnQ6IHRoaXMuaXNSb3dMZXZlbFN0aWNreShqKSxcbiAgICAgICAgICAgICAgc3RpY2t5VG9wOiB0aGlzLmlzQ29sdW1uTGV2ZWxTdGlja3koaSksXG4gICAgICAgICAgICAgIGlzSGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3dzQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5kYXRhLnJvd0hlYWRlcnMubGVuZ3RoID09PSAwICYmICh0aGlzLmRhdGEudmFsdWVUaXRsZXMgfHwgW10pLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0SGVhZGVyc0NoaWxkQ291bnQodGhpcy5kYXRhLnJvd0hlYWRlcnMsIHRoaXMucm93U2hvd1N1bXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5zQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5kYXRhLmNvbHVtbkhlYWRlcnMubGVuZ3RoID09PSAwICYmICh0aGlzLmRhdGEudmFsdWVUaXRsZXMgfHwgW10pLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBjb25zdCBudW1iZXJPZlN1bXMgPSBNYXRoLm1heCgxLCAodGhpcy5kYXRhLnZhbHVlVGl0bGVzIHx8IFtdKS5sZW5ndGgpO1xuICAgIHJldHVybiBnZXRIZWFkZXJzQ2hpbGRDb3VudCh0aGlzLmRhdGEuY29sdW1uSGVhZGVycywgdGhpcy5jb2x1bW5TaG93U3VtcywgbnVtYmVyT2ZTdW1zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlUGl2b3REYXRhKFxuICBkYXRhOiBMbXJQaXZvdFN0ZW1EYXRhLFxuICBjb25zdHJhaW50RGF0YTogQ29uc3RyYWludERhdGEsXG4gIHZhbHVlVHlwZUluZm86IFZhbHVlVHlwZUluZm9bXVxuKTogTG1yUGl2b3RTdGVtRGF0YSB7XG4gIGNvbnN0IG51bWJlck9mU3VtcyA9IE1hdGgubWF4KDEsIChkYXRhLnZhbHVlVGl0bGVzIHx8IFtdKS5sZW5ndGgpO1xuICBjb25zdCB2YWx1ZXMgPSBjb21wdXRlVmFsdWVzQnlWYWx1ZVR5cGUoZGF0YS52YWx1ZXMsIGRhdGEudmFsdWVUeXBlcywgbnVtYmVyT2ZTdW1zLCB2YWx1ZVR5cGVJbmZvKTtcbiAgY29uc3Qgc29ydGVkID0gc29ydFBpdm90RGF0YSh7Li4uZGF0YSwgdmFsdWVzfSwgY29uc3RyYWludERhdGEpO1xuICByZXR1cm4gZmlsbEV4cHJlc3Npb25zVG9EYXRhKHNvcnRlZClcbn1cblxuZnVuY3Rpb24gZmlsbEV4cHJlc3Npb25zVG9EYXRhKGRhdGE6IExtclBpdm90U3RlbURhdGEpOiBMbXJQaXZvdFN0ZW1EYXRhIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhLFxuICAgIHJvd0hlYWRlcnM6IGZpbGxFeHByZXNzaW9uc1RvSGVhZGVycyhkYXRhLnJvd0hlYWRlcnMsIGRhdGEucm93c0NvbmZpZywgMCksXG4gICAgY29sdW1uSGVhZGVyczogZmlsbEV4cHJlc3Npb25zVG9IZWFkZXJzKGRhdGEuY29sdW1uSGVhZGVycywgZGF0YS5jb2x1bW5zQ29uZmlnLCAwKSxcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWxsRXhwcmVzc2lvbnNUb0hlYWRlcnMoaGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sIGNvbmZpZ3M6IExtclBpdm90RGltZW5zaW9uQ29uZmlnW10sIGluZGV4OiBudW1iZXIpOiBMbXJQaXZvdERhdGFIZWFkZXJbXSB7XG4gIGNvbnN0IGV4cHJlc3Npb25zID0gY29uZmlncz8uW2luZGV4XT8uZXhwcmVzc2lvbnMgfHwgW11cbiAgY29uc3QgaGVhZGVyc0NvcHkgPSBbLi4uKGhlYWRlcnMgfHwgW10pXVxuICBmb3IgKGNvbnN0IGV4cHJlc3Npb24gb2YgZXhwcmVzc2lvbnMpIHtcbiAgICBjb25zdCBkYXRhSGVhZGVyRXhwcmVzc2lvbiA9IGV4dGVuZFBpdm90RXhwcmVzc2lvbihleHByZXNzaW9uLCBoZWFkZXJzKVxuICAgIGlmIChkYXRhSGVhZGVyRXhwcmVzc2lvbi5sYXN0SGVhZGVySW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgbGFzdEhlYWRlckluZGV4ID0gZGF0YUhlYWRlckV4cHJlc3Npb24ubGFzdEhlYWRlckluZGV4XG4gICAgICBjb25zdCBuZXdIZWFkZXI6IExtclBpdm90RGF0YUhlYWRlciA9IHsuLi5oZWFkZXJzQ29weVtsYXN0SGVhZGVySW5kZXhdLCBleHByZXNzaW9uczogWy4uLihoZWFkZXJzQ29weVtsYXN0SGVhZGVySW5kZXhdLmV4cHJlc3Npb25zIHx8IFtdKSwgZGF0YUhlYWRlckV4cHJlc3Npb25dfVxuICAgICAgaGVhZGVyc0NvcHkuc3BsaWNlKGxhc3RIZWFkZXJJbmRleCwgMSwgbmV3SGVhZGVyKVxuICAgIH1cbiAgfVxuXG4gIGlmIChjb25maWdzPy5baW5kZXggKyAxXSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVyc0NvcHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhlYWRlcnNDb3B5LnNwbGljZShpLCAxLCB7Li4uaGVhZGVyc0NvcHlbaV0sIGNoaWxkcmVuOiBmaWxsRXhwcmVzc2lvbnNUb0hlYWRlcnMoaGVhZGVyc0NvcHlbaV0uY2hpbGRyZW4sIGNvbmZpZ3MsIGluZGV4ICsgMSl9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzQ29weVxufVxuXG5mdW5jdGlvbiBleHRlbmRQaXZvdEV4cHJlc3Npb24oZXhwcmVzc2lvbjogTG1yUGl2b3RFeHByZXNzaW9uLCBoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSk6IExtclBpdm90RGF0YUhlYWRlckV4cHJlc3Npb24ge1xuICBjb25zdCBkYXRhSGVhZGVyT3BlcmFuZHM6IExtclBpdm90RGF0YUhlYWRlck9wZXJhbmRbXSA9IFtdO1xuICBsZXQgbGFzdEhlYWRlckluZGV4OiBudW1iZXIgPSAtMVxuXG4gIGZ1bmN0aW9uIHRyYXZlcnNlKG9wZXJhbmRzOiBMbXJQaXZvdE9wZXJhbmRbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgb3BlcmFuZCBvZiBvcGVyYW5kcyl7XG4gICAgICBpZiAob3BlcmFuZC50eXBlID09PSAnaGVhZGVyJykge1xuICAgICAgICBjb25zdCBpbmRleGVzID0gZ2V0T3BlcmFuZEluZGV4ZXNJbkhlYWRlcnMob3BlcmFuZCwgaGVhZGVycylcbiAgICAgICAgbGFzdEhlYWRlckluZGV4ID0gTWF0aC5tYXgobGFzdEhlYWRlckluZGV4LCAuLi5pbmRleGVzKVxuICAgICAgICBjb25zdCBvcGVyYW5kSGVhZGVycyA9IGluZGV4ZXMubWFwKGluZGV4ID0+IGhlYWRlcnNbaW5kZXhdKVxuICAgICAgICBkYXRhSGVhZGVyT3BlcmFuZHMucHVzaCh7Li4ub3BlcmFuZCwgaGVhZGVyczogb3BlcmFuZEhlYWRlcnN9KTtcbiAgICAgIH0gZWxzZSBpZiAob3BlcmFuZC50eXBlID09PSAnZXhwcmVzc2lvbicpIHtcbiAgICAgICAgdHJhdmVyc2Uob3BlcmFuZC5vcGVyYW5kcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhSGVhZGVyT3BlcmFuZHMucHVzaChvcGVyYW5kKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyYXZlcnNlKGV4cHJlc3Npb24ub3BlcmFuZHMpO1xuXG4gIHJldHVybiB7Li4uZXhwcmVzc2lvbiwgbGFzdEhlYWRlckluZGV4LCBvcGVyYW5kczogZGF0YUhlYWRlck9wZXJhbmRzfTtcbn1cblxuZnVuY3Rpb24gZ2V0T3BlcmFuZEluZGV4ZXNJbkhlYWRlcnMob3BlcmFuZDogTG1yUGl2b3RIZWFkZXJPcGVyYW5kLCBoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSk6IG51bWJlcltdIHtcbiAgcmV0dXJuIChoZWFkZXJzIHx8IFtdKS5yZWR1Y2U8bnVtYmVyW10+KChpbmRleGVzLCBoZWFkZXIsIGluZGV4KSA9PiB7XG4gICAgaWYgKG9wZXJhbmRDb250YWluc0hlYWRlcihvcGVyYW5kLCBoZWFkZXIpKSB7XG4gICAgICBpbmRleGVzLnB1c2goaW5kZXgpXG4gICAgfVxuICAgIHJldHVybiBpbmRleGVzXG4gIH0sIFtdKVxufVxuXG5mdW5jdGlvbiBvcGVyYW5kQ29udGFpbnNIZWFkZXIob3BlcmFuZDogTG1yUGl2b3RIZWFkZXJPcGVyYW5kLCBoZWFkZXI6IExtclBpdm90RGF0YUhlYWRlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gaGVhZGVyLnRpdGxlLm1hdGNoKG5ldyBSZWdFeHAob3BlcmFuZC52YWx1ZSkpPy5sZW5ndGggPiAwXG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVWYWx1ZXNCeVZhbHVlVHlwZShcbiAgdmFsdWVzOiBhbnlbXVtdLFxuICB2YWx1ZVR5cGVzOiBMbXJQaXZvdFZhbHVlVHlwZVtdLFxuICBudW1WYWx1ZXM6IG51bWJlcixcbiAgdmFsdWVUeXBlSW5mbzogVmFsdWVUeXBlSW5mb1tdXG4pOiBhbnlbXVtdIHtcbiAgY29uc3Qgcm93c0luZGV4ZXMgPSBbLi4uQXJyYXkodmFsdWVzLmxlbmd0aCkua2V5cygpXTtcbiAgY29uc3QgbW9kaWZpZWRWYWx1ZXMgPSBkZWVwT2JqZWN0Q29weSh2YWx1ZXMpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtVmFsdWVzOyBpKyspIHtcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSB2YWx1ZVR5cGVzICYmIHZhbHVlVHlwZXNbaV07XG4gICAgaWYgKCF2YWx1ZVR5cGUgfHwgdmFsdWVUeXBlID09PSBMbXJQaXZvdFZhbHVlVHlwZS5EZWZhdWx0KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5zQ291bnQgPSAodmFsdWVzWzBdICYmIHZhbHVlc1swXS5sZW5ndGgpIHx8IDA7XG4gICAgY29uc3QgY29sdW1uSW5kZXhlcyA9IFsuLi5BcnJheShjb2x1bW5zQ291bnQpLmtleXMoKV0uZmlsdGVyKGtleSA9PiBrZXkgJSBudW1WYWx1ZXMgPT09IGkpO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZVR5cGVJbmZvW2ldO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93c0luZGV4ZXMpIHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbkluZGV4ZXMpIHtcbiAgICAgICAgaWYgKHZhbHVlVHlwZSA9PT0gTG1yUGl2b3RWYWx1ZVR5cGUuQWxsUGVyY2VudGFnZSkge1xuICAgICAgICAgIG1vZGlmaWVkVmFsdWVzW3Jvd11bY29sdW1uXSA9IGRpdmlkZVZhbHVlcyh2YWx1ZXNbcm93XVtjb2x1bW5dLCBpbmZvLnN1bSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSBMbXJQaXZvdFZhbHVlVHlwZS5Sb3dQZXJjZW50YWdlKSB7XG4gICAgICAgICAgbW9kaWZpZWRWYWx1ZXNbcm93XVtjb2x1bW5dID0gZGl2aWRlVmFsdWVzKHZhbHVlc1tyb3ddW2NvbHVtbl0sIGluZm8uc3Vtc1Jvd3Nbcm93XSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSBMbXJQaXZvdFZhbHVlVHlwZS5Db2x1bW5QZXJjZW50YWdlKSB7XG4gICAgICAgICAgbW9kaWZpZWRWYWx1ZXNbcm93XVtjb2x1bW5dID0gZGl2aWRlVmFsdWVzKHZhbHVlc1tyb3ddW2NvbHVtbl0sIGluZm8uc3Vtc0NvbHVtbnNbY29sdW1uXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW9kaWZpZWRWYWx1ZXM7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlc1R5cGVJbmZvKHZhbHVlczogYW55W11bXSwgdmFsdWVUeXBlczogTG1yUGl2b3RWYWx1ZVR5cGVbXSwgbnVtVmFsdWVzOiBudW1iZXIpOiBWYWx1ZVR5cGVJbmZvW10ge1xuICBjb25zdCB2YWx1ZVR5cGVJbmZvID0gW107XG4gIGNvbnN0IHJvd3NJbmRleGVzID0gWy4uLkFycmF5KHZhbHVlcy5sZW5ndGgpLmtleXMoKV07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WYWx1ZXM7IGkrKykge1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHZhbHVlVHlwZXMgJiYgdmFsdWVUeXBlc1tpXTtcbiAgICBjb25zdCBjb2x1bW5zQ291bnQgPSAodmFsdWVzWzBdICYmIHZhbHVlc1swXS5sZW5ndGgpIHx8IDA7XG4gICAgY29uc3QgY29sdW1uSW5kZXhlcyA9IFsuLi5BcnJheShjb2x1bW5zQ291bnQpLmtleXMoKV0uZmlsdGVyKGtleSA9PiBrZXkgJSBudW1WYWx1ZXMgPT09IGkpO1xuXG4gICAgdmFsdWVUeXBlSW5mb1tpXSA9IGdldFZhbHVlVHlwZUluZm8odmFsdWVzLCB2YWx1ZVR5cGUsIHJvd3NJbmRleGVzLCBjb2x1bW5JbmRleGVzKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZVR5cGVJbmZvO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZVR5cGVJbmZvKHZhbHVlczogYW55W11bXSwgdHlwZTogTG1yUGl2b3RWYWx1ZVR5cGUsIHJvd3M6IG51bWJlcltdLCBjb2x1bW5zOiBudW1iZXJbXSk6IFZhbHVlVHlwZUluZm8ge1xuICBjb25zdCBjb250YWluc0RlY2ltYWwgPSBjb250YWluc0RlY2ltYWxWYWx1ZSh2YWx1ZXMsIHJvd3MsIGNvbHVtbnMpO1xuICBjb25zdCB2YWx1ZVR5cGVJbmZvOiBWYWx1ZVR5cGVJbmZvID0ge1xuICAgIGRlZmF1bHRDb25zdHJhaW50OiBjb250YWluc0RlY2ltYWwgPyBuZXcgTnVtYmVyQ29uc3RyYWludCh7ZGVjaW1hbHM6IDJ9KSA6IG51bGwsXG4gIH07XG5cbiAgaWYgKHR5cGUgPT09IExtclBpdm90VmFsdWVUeXBlLkFsbFBlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gey4uLnZhbHVlVHlwZUluZm8sIHN1bTogZ2V0TnVtZXJpY1ZhbHVlc1N1bW1hcnkodmFsdWVzLCByb3dzLCBjb2x1bW5zKX07XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTG1yUGl2b3RWYWx1ZVR5cGUuUm93UGVyY2VudGFnZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZVR5cGVJbmZvLFxuICAgICAgc3Vtc1Jvd3M6IHJvd3MucmVkdWNlKChhcnIsIHJvdykgPT4ge1xuICAgICAgICBhcnJbcm93XSA9IGdldE51bWVyaWNWYWx1ZXNTdW1tYXJ5KHZhbHVlcywgW3Jvd10sIGNvbHVtbnMpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgfSwgW10pLFxuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTG1yUGl2b3RWYWx1ZVR5cGUuQ29sdW1uUGVyY2VudGFnZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZVR5cGVJbmZvLFxuICAgICAgc3Vtc0NvbHVtbnM6IGNvbHVtbnMucmVkdWNlKChhcnIsIGNvbHVtbikgPT4ge1xuICAgICAgICBhcnJbY29sdW1uXSA9IGdldE51bWVyaWNWYWx1ZXNTdW1tYXJ5KHZhbHVlcywgcm93cywgW2NvbHVtbl0pO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgfSwgW10pLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnZhbHVlVHlwZUluZm99O1xufVxuXG5mdW5jdGlvbiBjb250YWluc0RlY2ltYWxWYWx1ZSh2YWx1ZXM6IGFueVtdW10sIHJvd3M6IG51bWJlcltdLCBjb2x1bW5zOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgaWYgKGlzVmFsdWVEZWNpbWFsKHZhbHVlc1tyb3ddW2NvbHVtbl0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVEZWNpbWFsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc051bWVyaWModmFsdWUpKSB7XG4gICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKSAlIDEgIT09IDA7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm1hdGlvbk1hcChcbiAgaGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gIHNob3dTdW1zOiBib29sZWFuW10sXG4gIGFkZGl0aW9uYWxOdW06IG51bWJlcixcbiAgbnVtYmVyT2ZTdW1zOiBudW1iZXJcbik6IG51bWJlcltdIHtcbiAgY29uc3QgYXJyYXkgPSBbXTtcbiAgaXRlcmF0ZVRocm91Z2hUcmFuc2Zvcm1hdGlvbk1hcChoZWFkZXJzLCBhZGRpdGlvbmFsTnVtLCBhcnJheSwgMCwgc2hvd1N1bXMsIG51bWJlck9mU3Vtcyk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gaXRlcmF0ZVRocm91Z2hUcmFuc2Zvcm1hdGlvbk1hcChcbiAgaGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gIGFkZGl0aW9uYWxOdW06IG51bWJlcixcbiAgYXJyYXk6IG51bWJlcltdLFxuICBsZXZlbDogbnVtYmVyLFxuICBzaG93U3VtczogYm9vbGVhbltdLFxuICBudW1iZXJPZlN1bXM6IG51bWJlclxuKSB7XG4gIGxldCBhZGRpdGlvbmFsID0gYWRkaXRpb25hbE51bTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaGVhZGVyID0gaGVhZGVyc1tpXTtcbiAgICBpZiAoaGVhZGVyLmNoaWxkcmVuKSB7XG4gICAgICBpdGVyYXRlVGhyb3VnaFRyYW5zZm9ybWF0aW9uTWFwKGhlYWRlci5jaGlsZHJlbiwgYWRkaXRpb25hbCwgYXJyYXksIGxldmVsICsgMSwgc2hvd1N1bXMsIG51bWJlck9mU3Vtcyk7XG4gICAgICBhZGRpdGlvbmFsICs9IGdldEhlYWRlckNoaWxkQ291bnQoaGVhZGVyLCBsZXZlbCwgc2hvd1N1bXMsIG51bWJlck9mU3Vtcyk7XG4gICAgfSBlbHNlIGlmIChpc05vdE51bGxPclVuZGVmaW5lZChoZWFkZXIudGFyZ2V0SW5kZXgpKSB7XG4gICAgICBhcnJheVtoZWFkZXIudGFyZ2V0SW5kZXhdID0gaSArIGFkZGl0aW9uYWw7XG4gICAgICBhZGRpdGlvbmFsICs9IChoZWFkZXIuZXhwcmVzc2lvbnMgfHwgW10pLmxlbmd0aDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcnMoaGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGFsbFJvd3MgPSAoaGVhZGVycyB8fCBbXSkucmVkdWNlKChyb3dzLCBoZWFkZXIpID0+IHtcbiAgICByb3dzLnB1c2goLi4uZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcihoZWFkZXIpKTtcbiAgICByZXR1cm4gcm93cztcbiAgfSwgW10pO1xuICByZXR1cm4gdW5pcXVlVmFsdWVzPG51bWJlcj4oYWxsUm93cyk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluZGV4ZXNGb3JIZWFkZXIocGl2b3REYXRhSGVhZGVyOiBMbXJQaXZvdERhdGFIZWFkZXIpOiBudW1iZXJbXSB7XG4gIGlmIChwaXZvdERhdGFIZWFkZXIuY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gcGl2b3REYXRhSGVhZGVyLmNoaWxkcmVuLnJlZHVjZSgocm93cywgaGVhZGVyKSA9PiB7XG4gICAgICByb3dzLnB1c2goLi4uZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcihoZWFkZXIpKTtcbiAgICAgIHJldHVybiByb3dzO1xuICAgIH0sIFtdKTtcbiAgfVxuICByZXR1cm4gW3Bpdm90RGF0YUhlYWRlci50YXJnZXRJbmRleF07XG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlcnNDaGlsZENvdW50KGhlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdLCBzaG93U3VtczogYm9vbGVhbltdLCBudW1iZXJPZlN1bXMgPSAxKTogbnVtYmVyIHtcbiAgcmV0dXJuIChoZWFkZXJzIHx8IFtdKS5yZWR1Y2UoXG4gICAgKHN1bSwgaGVhZGVyKSA9PiBzdW0gKyBnZXRIZWFkZXJDaGlsZENvdW50KGhlYWRlciwgMCwgc2hvd1N1bXMsIG51bWJlck9mU3VtcyksXG4gICAgc2hvd1N1bXNbMF0gPyBudW1iZXJPZlN1bXMgOiAwXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlckNoaWxkQ291bnQoXG4gIHBpdm90RGF0YUhlYWRlcjogTG1yUGl2b3REYXRhSGVhZGVyLFxuICBsZXZlbDogbnVtYmVyLFxuICBzaG93U3VtczogYm9vbGVhbltdLFxuICBudW1iZXJPZlN1bXMgPSAxLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgbnVtRXhwcmVzc2lvbnMgPSAocGl2b3REYXRhSGVhZGVyLmV4cHJlc3Npb25zIHx8IFtdKS5sZW5ndGhcbiAgaWYgKHBpdm90RGF0YUhlYWRlci5jaGlsZHJlbikge1xuICAgIHJldHVybiBwaXZvdERhdGFIZWFkZXIuY2hpbGRyZW4ucmVkdWNlKFxuICAgICAgKHN1bSwgaGVhZGVyKSA9PiBzdW0gKyBnZXRIZWFkZXJDaGlsZENvdW50KGhlYWRlciwgbGV2ZWwgKyAxLCBzaG93U3VtcywgbnVtYmVyT2ZTdW1zKSxcbiAgICAgIChzaG93U3Vtc1tsZXZlbCArIDFdID8gbnVtYmVyT2ZTdW1zIDogMCkgKyBudW1FeHByZXNzaW9uc1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIDEgKyBudW1FeHByZXNzaW9ucztcbn1cblxuZnVuY3Rpb24gZ2V0RGlyZWN0SGVhZGVyQ2hpbGRDb3VudChcbiAgcGl2b3REYXRhSGVhZGVyOiBMbXJQaXZvdERhdGFIZWFkZXIsXG4gIGxldmVsOiBudW1iZXIsXG4gIHNob3dTdW1zOiBib29sZWFuW10sXG4gIG51bWJlck9mU3VtcyA9IDFcbik6IG51bWJlciB7XG4gIGlmIChwaXZvdERhdGFIZWFkZXIuY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gcGl2b3REYXRhSGVhZGVyLmNoaWxkcmVuLnJlZHVjZShcbiAgICAgIChzdW0sIGhlYWRlcikgPT4gc3VtICsgZ2V0SGVhZGVyQ2hpbGRDb3VudChoZWFkZXIsIGxldmVsICsgMSwgc2hvd1N1bXMsIG51bWJlck9mU3VtcyksXG4gICAgICAwXG4gICAgKTtcbiAgfVxuICByZXR1cm4gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRQaXZvdERhdGEoZGF0YTogTG1yUGl2b3RTdGVtRGF0YSwgY29uc3RyYWludERhdGE6IENvbnN0cmFpbnREYXRhKTogTG1yUGl2b3RTdGVtRGF0YSB7XG4gIGNvbnN0IHJvd1NvcnRzID0gKGRhdGEucm93c0NvbmZpZyB8fCBbXSkubWFwKGNvbmZpZyA9PiBjb25maWcuc29ydClcbiAgY29uc3QgY29sdW1uU29ydHMgPSAoZGF0YS5jb2x1bW5zQ29uZmlnIHx8IFtdKS5tYXAoY29uZmlnID0+IGNvbmZpZy5zb3J0KVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGEsXG4gICAgcm93SGVhZGVyczogc29ydFBpdm90Um93RGF0YUhlYWRlcnMoZGF0YS5yb3dIZWFkZXJzLCByb3dTb3J0cywgZGF0YSwgY29uc3RyYWludERhdGEpLFxuICAgIGNvbHVtbkhlYWRlcnM6IHNvcnRQaXZvdENvbHVtbkRhdGFIZWFkZXJzKGRhdGEuY29sdW1uSGVhZGVycywgY29sdW1uU29ydHMsIGRhdGEsIGNvbnN0cmFpbnREYXRhKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gc29ydFBpdm90Um93RGF0YUhlYWRlcnMoXG4gIHJvd0hlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdLFxuICByb3dTb3J0czogTG1yUGl2b3RTb3J0W10sXG4gIHBpdm90RGF0YTogTG1yUGl2b3RTdGVtRGF0YSxcbiAgY29uc3RyYWludERhdGE6IENvbnN0cmFpbnREYXRhXG4pOiBMbXJQaXZvdERhdGFIZWFkZXJbXSB7XG4gIHJldHVybiBzb3J0UGl2b3REYXRhSGVhZGVyc1JlY3Vyc2l2ZShcbiAgICByb3dIZWFkZXJzLFxuICAgIDAsXG4gICAgcm93U29ydHMsXG4gICAgcGl2b3REYXRhLmNvbHVtbkhlYWRlcnMsXG4gICAgcGl2b3REYXRhLnZhbHVlcyxcbiAgICBwaXZvdERhdGEudmFsdWVUaXRsZXMgfHwgW10sXG4gICAgdHJ1ZSxcbiAgICBjb25zdHJhaW50RGF0YVxuICApO1xufVxuXG5mdW5jdGlvbiBzb3J0UGl2b3RDb2x1bW5EYXRhSGVhZGVycyhcbiAgY29sdW1uSGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gIGNvbHVtblNvcnRzOiBMbXJQaXZvdFNvcnRbXSxcbiAgcGl2b3REYXRhOiBMbXJQaXZvdFN0ZW1EYXRhLFxuICBjb25zdHJhaW50RGF0YTogQ29uc3RyYWludERhdGFcbik6IExtclBpdm90RGF0YUhlYWRlcltdIHtcbiAgcmV0dXJuIHNvcnRQaXZvdERhdGFIZWFkZXJzUmVjdXJzaXZlKFxuICAgIGNvbHVtbkhlYWRlcnMsXG4gICAgMCxcbiAgICBjb2x1bW5Tb3J0cyxcbiAgICBwaXZvdERhdGEucm93SGVhZGVycyxcbiAgICBwaXZvdERhdGEudmFsdWVzLFxuICAgIHBpdm90RGF0YS52YWx1ZVRpdGxlcyB8fCBbXSxcbiAgICBmYWxzZSxcbiAgICBjb25zdHJhaW50RGF0YVxuICApO1xufVxuXG5mdW5jdGlvbiBzb3J0UGl2b3REYXRhSGVhZGVyc1JlY3Vyc2l2ZShcbiAgaGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gIGluZGV4OiBudW1iZXIsXG4gIHNvcnRzOiBMbXJQaXZvdFNvcnRbXSxcbiAgb3RoZXJTaWRlSGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gIHZhbHVlczogYW55W11bXSxcbiAgdmFsdWVUaXRsZXM6IHN0cmluZ1tdLFxuICBpc1Jvd3M6IGJvb2xlYW4sXG4gIGNvbnN0cmFpbnREYXRhOiBDb25zdHJhaW50RGF0YVxuKTogTG1yUGl2b3REYXRhSGVhZGVyW10ge1xuICAvLyB3ZSBkb24ndCB3YW50IHRvIHNvcnQgdmFsdWVzIGhlYWRlcnNcbiAgaWYgKCFpc1Jvd3MgJiYgaXNWYWx1ZXNIZWFkZXJzKGhlYWRlcnMsIHZhbHVlVGl0bGVzKSkge1xuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG4gIGNvbnN0IHNvcnQgPSBzb3J0cyAmJiBzb3J0c1tpbmRleF07XG4gIGNvbnN0IGNvbnN0cmFpbnQgPSBnZXRDb25zdHJhaW50Rm9yU29ydChzb3J0LCBoZWFkZXJzKTtcbiAgY29uc3QgdmFsdWVzTWFwID0gY3JlYXRlSGVhZGVyc1ZhbHVlc01hcChoZWFkZXJzLCBzb3J0LCBvdGhlclNpZGVIZWFkZXJzLCB2YWx1ZXMsIHZhbHVlVGl0bGVzLCBpc1Jvd3MpO1xuICByZXR1cm4gaGVhZGVyc1xuICAgIC5tYXAoaGVhZGVyID0+ICh7XG4gICAgICAuLi5oZWFkZXIsXG4gICAgICBjaGlsZHJlbjpcbiAgICAgICAgaGVhZGVyLmNoaWxkcmVuICYmXG4gICAgICAgIHNvcnRQaXZvdERhdGFIZWFkZXJzUmVjdXJzaXZlKFxuICAgICAgICAgIGhlYWRlci5jaGlsZHJlbixcbiAgICAgICAgICBpbmRleCArIDEsXG4gICAgICAgICAgc29ydHMsXG4gICAgICAgICAgb3RoZXJTaWRlSGVhZGVycyxcbiAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgdmFsdWVUaXRsZXMsXG4gICAgICAgICAgaXNSb3dzLFxuICAgICAgICAgIGNvbnN0cmFpbnREYXRhXG4gICAgICAgICksXG4gICAgfSkpXG4gICAgLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgY29uc3QgcjFWYWx1ZSA9IGNvbnN0cmFpbnQuY3JlYXRlRGF0YVZhbHVlKHZhbHVlc01hcFtyMS50aXRsZV0sIGNvbnN0cmFpbnREYXRhKTtcbiAgICAgIGNvbnN0IHIyVmFsdWUgPSBjb25zdHJhaW50LmNyZWF0ZURhdGFWYWx1ZSh2YWx1ZXNNYXBbcjIudGl0bGVdLCBjb25zdHJhaW50RGF0YSk7XG4gICAgICBjb25zdCBtdWx0aXBsaWVyID0gIXNvcnQgfHwgc29ydC5hc2MgPyAxIDogLTE7XG4gICAgICByZXR1cm4gcjFWYWx1ZS5jb21wYXJlVG8ocjJWYWx1ZSkgKiBtdWx0aXBsaWVyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRDb25zdHJhaW50Rm9yU29ydChzb3J0OiBMbXJQaXZvdFNvcnQsIGhlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdKTogQ29uc3RyYWludCB7XG4gIGlmICgoc29ydD8ubGlzdD8udmFsdWVzIHx8IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgLy8gc29ydCBpcyBkb25lIGJ5IHZhbHVlcyBpbiBjb2x1bW5zXG4gICAgcmV0dXJuIG5ldyBOdW1iZXJDb25zdHJhaW50KHt9KTtcbiAgfVxuICByZXR1cm4gKChoZWFkZXJzIHx8IFtdKVswXSAmJiAoaGVhZGVycyB8fCBbXSlbMF0uY29uc3RyYWludCkgfHwgbmV3IFVua25vd25Db25zdHJhaW50KCk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVzSGVhZGVycyhoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSwgdmFsdWVUaXRsZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWVUaXRsZXMubGVuZ3RoID4gMSAmJlxuICAgIChoZWFkZXJzIHx8IFtdKS5ldmVyeShcbiAgICAgIChoZWFkZXIsIGluZGV4KSA9PiBpc05vdE51bGxPclVuZGVmaW5lZChoZWFkZXIudGFyZ2V0SW5kZXgpICYmIGhlYWRlci50aXRsZSA9PT0gdmFsdWVUaXRsZXNbaW5kZXhdXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJzVmFsdWVzTWFwKFxuICBoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgc29ydDogTG1yUGl2b3RTb3J0LFxuICBvdGhlclNpZGVIZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgdmFsdWVzOiBhbnlbXVtdLFxuICB2YWx1ZVRpdGxlczogc3RyaW5nW10sXG4gIGlzUm93czogYm9vbGVhblxuKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGNvbnN0IHNvcnRUYXJnZXRJbmRleGVzID0gc29ydFZhbHVlVGFyZ2V0SW5kZXhlcyhzb3J0LCBvdGhlclNpZGVIZWFkZXJzLCB2YWx1ZVRpdGxlcyk7XG4gIGlmICghc29ydFRhcmdldEluZGV4ZXMpIHtcbiAgICByZXR1cm4gKGhlYWRlcnMgfHwgW10pLnJlZHVjZSgodmFsdWVzTWFwLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlc01hcFtoZWFkZXIudGl0bGVdID0gaGVhZGVyLnRpdGxlO1xuICAgICAgcmV0dXJuIHZhbHVlc01hcDtcbiAgICB9LCB7fSk7XG4gIH1cblxuICByZXR1cm4gKGhlYWRlcnMgfHwgW10pLnJlZHVjZSgodmFsdWVzTWFwLCBoZWFkZXIpID0+IHtcbiAgICBjb25zdCByb3dzID0gaXNSb3dzID8gZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcihoZWFkZXIpIDogc29ydFRhcmdldEluZGV4ZXM7XG4gICAgY29uc3QgY29sdW1ucyA9IGlzUm93cyA/IHNvcnRUYXJnZXRJbmRleGVzIDogZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcihoZWFkZXIpO1xuICAgIHZhbHVlc01hcFtoZWFkZXIudGl0bGVdID0gZ2V0TnVtZXJpY1ZhbHVlc1N1bW1hcnkodmFsdWVzLCByb3dzLCBjb2x1bW5zKTtcbiAgICByZXR1cm4gdmFsdWVzTWFwO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGdldE51bWVyaWNWYWx1ZXNTdW1tYXJ5KHZhbHVlczogYW55W11bXSwgcm93czogbnVtYmVyW10sIGNvbHVtbnM6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgbGV0IHN1bSA9IDA7XG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tyb3ddW2NvbHVtbl07XG4gICAgICBpZiAoaXNOb3ROdWxsT3JVbmRlZmluZWQodmFsdWUpICYmIGlzTnVtZXJpYyh2YWx1ZSkpIHtcbiAgICAgICAgc3VtICs9IHRvTnVtYmVyKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZnVuY3Rpb24gc29ydFZhbHVlVGFyZ2V0SW5kZXhlcyhcbiAgc29ydDogTG1yUGl2b3RTb3J0LFxuICBvdGhlclNpZGVIZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgdmFsdWVUaXRsZXM6IHN0cmluZ1tdXG4pOiBudW1iZXJbXSB8IG51bGwge1xuICBpZiAoc29ydCAmJiBzb3J0Lmxpc3QpIHtcbiAgICBsZXQgdmFsdWVJbmRleCA9IHZhbHVlVGl0bGVzLmZpbmRJbmRleCh0aXRsZSA9PiB0aXRsZSA9PT0gc29ydC5saXN0LnZhbHVlVGl0bGUpO1xuICAgIGlmICh2YWx1ZUluZGV4ID09PSAtMSkge1xuICAgICAgaWYgKHZhbHVlVGl0bGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YWx1ZUluZGV4ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwaXZvdEhlYWRlcjogTG1yUGl2b3REYXRhSGVhZGVyID0gbnVsbDtcbiAgICBsZXQgY3VycmVudE90aGVyU2lkZUhlYWRlcnMgPSBvdGhlclNpZGVIZWFkZXJzO1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc29ydC5saXN0LnZhbHVlcyB8fCBbXSkge1xuICAgICAgaWYgKHZhbHVlLmlzU3VtbWFyeSkge1xuICAgICAgICBjb25zdCBpbmRleGVzID0gZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcnMoY3VycmVudE90aGVyU2lkZUhlYWRlcnMgfHwgW10pIHx8IFtdO1xuICAgICAgICByZXR1cm4gZmlsdGVySW5kZXhlc0J5TW9kKGluZGV4ZXMsIHZhbHVlVGl0bGVzLmxlbmd0aCwgdmFsdWVJbmRleCk7XG4gICAgICB9XG5cbiAgICAgIHBpdm90SGVhZGVyID0gKGN1cnJlbnRPdGhlclNpZGVIZWFkZXJzIHx8IFtdKS5maW5kKGhlYWRlciA9PiBoZWFkZXIudGl0bGUgPT09IHZhbHVlLnRpdGxlKTtcbiAgICAgIGlmICghcGl2b3RIZWFkZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRPdGhlclNpZGVIZWFkZXJzID0gcGl2b3RIZWFkZXIuY2hpbGRyZW4gfHwgW107XG4gICAgfVxuXG4gICAgaWYgKHBpdm90SGVhZGVyKSB7XG4gICAgICBjb25zdCB0YXJnZXRJbmRleGVzID0gaXNOb3ROdWxsT3JVbmRlZmluZWQocGl2b3RIZWFkZXIudGFyZ2V0SW5kZXgpXG4gICAgICAgID8gW3Bpdm90SGVhZGVyLnRhcmdldEluZGV4XVxuICAgICAgICA6IGdldFRhcmdldEluZGV4ZXNGb3JIZWFkZXJzKGN1cnJlbnRPdGhlclNpZGVIZWFkZXJzKTtcbiAgICAgIHJldHVybiBmaWx0ZXJJbmRleGVzQnlNb2QodGFyZ2V0SW5kZXhlcywgdmFsdWVUaXRsZXMubGVuZ3RoLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmlsdGVySW5kZXhlc0J5TW9kKGluZGV4ZXM6IG51bWJlcltdLCBtb2Q6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IG51bWJlcltdIHtcbiAgcmV0dXJuIChpbmRleGVzIHx8IFtdKS5maWx0ZXIoaW5kZXggPT4gaW5kZXggJSBtb2QgPT09IHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZGl2aWRlVmFsdWVzKHZhbHVlOiBhbnksIGRpdmlkZXI6IGFueSk6IG51bWJlciB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChpc051bWVyaWModmFsdWUpICYmIGlzTnVtZXJpYyhkaXZpZGVyKSkge1xuICAgIGlmIChkaXZpZGVyICE9PSAwKSB7XG4gICAgICByZXR1cm4gdmFsdWUgLyBkaXZpZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==
999
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtdGFibGUtY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbG1yLXBpdm90LXRhYmxlL3NyYy9saWIvdXRpbC9waXZvdC10YWJsZS1jb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsT0FBTyxFQUFDLG1CQUFtQixFQUE4QixtQkFBbUIsRUFBZ0Isa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEdBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4TSxPQUFPLEVBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsWUFBWSxHQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTVKLE9BQU8sRUFBOEYsaUJBQWlCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNsSixPQUFPLEVBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBZ0JoSCxNQUFNLE9BQU8sbUJBQW1CO0lBQ3ZCLE1BQU0sQ0FBVSxVQUFVLEdBQUcsa0JBQWtCLENBQUM7SUFDaEQsTUFBTSxDQUFVLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztJQUM5QyxNQUFNLENBQVUsY0FBYyxHQUFHLHVCQUF1QixDQUFDO0lBQ3pELE1BQU0sQ0FBVSxjQUFjLEdBQUcsdUJBQXVCLENBQUM7SUFDekQsTUFBTSxDQUFVLG1CQUFtQixHQUFHLDZCQUE2QixDQUFDO0lBQ3BFLE1BQU0sQ0FBVSx1QkFBdUIsR0FBRyxpQ0FBaUMsQ0FBQztJQUM1RSxNQUFNLENBQVUsaUJBQWlCLEdBQUcsMEJBQTBCLENBQUM7SUFDL0QsTUFBTSxDQUFVLHNCQUFzQixHQUFHLGdDQUFnQyxDQUFD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QXVCLENBQUMsQ0FBQztZQUN4RCxPQUFPLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQzFFO0tBQ0Y7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLE9BQWlCLEVBQUUsR0FBVyxFQUFFLEtBQWE7SUFDdkUsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFVLEVBQUUsT0FBWTtJQUM1QyxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDMUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sS0FBSyxHQUFHLE9BQU8sQ0FBQztTQUN4QjthQUFNO1lBQ0wsT0FBTyxDQUFDLENBQUM7U0FDVjtLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEx1bWVlcjogTW9kZXJuIERhdGEgRGVmaW5pdGlvbiBhbmQgUHJvY2Vzc2luZyBQbGF0Zm9ybVxuICpcbiAqIENvcHlyaWdodCAoQykgc2luY2UgMjAxNyBMdW1lZXIuaW8sIHMuci5vLiBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuaW1wb3J0IHthZ2dyZWdhdGVEYXRhVmFsdWVzLCBDb25zdHJhaW50LCBDb25zdHJhaW50RGF0YSwgRGF0YUFnZ3JlZ2F0aW9uVHlwZSwgRGF0YVJlc291cmNlLCBpc1ZhbHVlQWdncmVnYXRpb24sIE51bWJlckNvbnN0cmFpbnQsIFBlcmNlbnRhZ2VDb25zdHJhaW50LCBVbmtub3duQ29uc3RyYWludCx9IGZyb20gJ0BsdW1lZXIvZGF0YS1maWx0ZXJzJztcbmltcG9ydCB7Y3JlYXRlUmFuZ2UsIGRlZXBPYmplY3RDb3B5LCBpc0FycmF5LCBpc05vdE51bGxPclVuZGVmaW5lZCwgaXNOdWxsT3JVbmRlZmluZWQsIGlzTnVtZXJpYywgc2hhZGVDb2xvciwgdG9OdW1iZXIsIHVuaXF1ZVZhbHVlcyx9IGZyb20gJ0BsdW1lZXIvdXRpbHMnO1xuXG5pbXBvcnQge0xtclBpdm90RGF0YSwgTG1yUGl2b3REYXRhSGVhZGVyLCBMbXJQaXZvdERhdGFIZWFkZXJFeHByZXNzaW9uLCBMbXJQaXZvdERhdGFIZWFkZXJPcGVyYW5kLCBMbXJQaXZvdERpbWVuc2lvbkNvbmZpZywgTG1yUGl2b3RTdGVtRGF0YX0gZnJvbSAnLi9sbXItcGl2b3QtZGF0YSc7XG5pbXBvcnQge0xtclBpdm90VGFibGUsIExtclBpdm90VGFibGVDZWxsfSBmcm9tICcuL2xtci1waXZvdC10YWJsZSc7XG5pbXBvcnQge0xtclBpdm90RXhwcmVzc2lvbiwgTG1yUGl2b3RIZWFkZXJPcGVyYW5kLCBMbXJQaXZvdE9wZXJhbmQsIExtclBpdm90U29ydCwgTG1yUGl2b3RUcmFuc2Zvcm0sIExtclBpdm90VmFsdWVUeXBlfSBmcm9tICcuL2xtci1waXZvdC1jb25maWcnO1xuaW1wb3J0IHtDT0xPUl9HUkFZMTAwLCBDT0xPUl9HUkFZMjAwLCBDT0xPUl9HUkFZMzAwLCBDT0xPUl9HUkFZNDAwLCBDT0xPUl9HUkFZNTAwfSBmcm9tICcuL2xtci1waXZvdC1jb25zdGFudHMnO1xuXG5pbnRlcmZhY2UgSGVhZGVyR3JvdXBJbmZvIHtcbiAgYmFja2dyb3VuZDogc3RyaW5nO1xuICBpbmRleGVzOiBudW1iZXJbXTtcbiAgZXhwcmVzc2lvbj86IExtclBpdm90RGF0YUhlYWRlckV4cHJlc3Npb247XG4gIGxldmVsOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBWYWx1ZVR5cGVJbmZvIHtcbiAgc3VtPzogbnVtYmVyO1xuICBzdW1zUm93cz86IG51bWJlcltdO1xuICBzdW1zQ29sdW1ucz86IG51bWJlcltdO1xuICBkZWZhdWx0Q29uc3RyYWludD86IENvbnN0cmFpbnQ7XG59XG5cbmV4cG9ydCBjbGFzcyBQaXZvdFRhYmxlQ29udmVydGVyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBlbXB0eUNsYXNzID0gJ3Bpdm90LWVtcHR5LWNlbGwnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGRhdGFDbGFzcyA9ICdwaXZvdC1kYXRhLWNlbGwnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGdyb3VwRGF0YUNsYXNzID0gJ3Bpdm90LWRhdGEtZ3JvdXAtY2VsbCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgcm93SGVhZGVyQ2xhc3MgPSAncGl2b3Qtcm93LWhlYWRlci1jZWxsJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSByb3dHcm91cEhlYWRlckNsYXNzID0gJ3Bpdm90LXJvdy1ncm91cC1oZWFkZXItY2VsbCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgcm93QXR0cmlidXRlSGVhZGVyQ2xhc3MgPSAncGl2b3Qtcm93LWF0dHJpYnV0ZS1oZWFkZXItY2VsbCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgY29sdW1uSGVhZGVyQ2xhc3MgPSAncGl2b3QtY29sdW1uLWhlYWRlci1jZWxsJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBjb2x1bW5Hcm91cEhlYWRlckNsYXNzID0gJ3Bpdm90LWNvbHVtbi1ncm91cC1oZWFkZXItY2VsbCc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBncm91cENvbG9ycyA9IFtDT0xPUl9HUkFZMTAwLCBDT0xPUl9HUkFZMjAwLCBDT0xPUl9HUkFZMzAwLCBDT0xPUl9HUkFZNDAwLCBDT0xPUl9HUkFZNTAwXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBlcmNlbnRhZ2VDb25zdHJhaW50ID0gbmV3IFBlcmNlbnRhZ2VDb25zdHJhaW50KHtkZWNpbWFsczogMn0pO1xuXG4gIHByaXZhdGUgZGF0YTogTG1yUGl2b3RTdGVtRGF0YTtcbiAgcHJpdmF0ZSB0cmFuc2Zvcm06IExtclBpdm90VHJhbnNmb3JtO1xuICBwcml2YXRlIHZhbHVlczogYW55W11bXTtcbiAgcHJpdmF0ZSBkYXRhUmVzb3VyY2VzOiBEYXRhUmVzb3VyY2VbXVtdW107XG4gIHByaXZhdGUgY29uc3RyYWludERhdGE6IENvbnN0cmFpbnREYXRhO1xuICBwcml2YXRlIHJvd0xldmVsczogbnVtYmVyO1xuICBwcml2YXRlIHJvd3NUcmFuc2Zvcm1hdGlvbkFycmF5OiBudW1iZXJbXTtcbiAgcHJpdmF0ZSBjb2x1bW5MZXZlbHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBjb2x1bW5zVHJhbnNmb3JtYXRpb25BcnJheTogbnVtYmVyW107XG4gIHByaXZhdGUgdmFsdWVUeXBlSW5mbzogVmFsdWVUeXBlSW5mb1tdO1xuICBwcml2YXRlIG5vblN0aWNreVJvd0luZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgbm9uU3RpY2t5Q29sdW1uSW5kZXg6IG51bWJlcjtcblxuICBwdWJsaWMgY3JlYXRlVGFibGVzKHBpdm90RGF0YTogTG1yUGl2b3REYXRhLCB0cmFuc2Zvcm06IExtclBpdm90VHJhbnNmb3JtKTogTG1yUGl2b3RUYWJsZVtdIHtcbiAgICBpZiAoIXBpdm90RGF0YSkge1xuICAgICAgcmV0dXJuIFt7Y2VsbHM6IFtdfV07XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgdGhpcy5jb25zdHJhaW50RGF0YSA9IHBpdm90RGF0YS5jb25zdHJhaW50RGF0YTtcblxuICAgIHJldHVybiAocGl2b3REYXRhLmRhdGEgfHwgW10pLm1hcChkID0+IHtcbiAgICAgIGlmICh0aGlzLmRhdGFBcmVFbXB0eShkKSkge1xuICAgICAgICByZXR1cm4ge2NlbGxzOiBbXX07XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZURhdGEoZCk7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1EYXRhKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRhdGFBcmVFbXB0eShkYXRhOiBMbXJQaXZvdFN0ZW1EYXRhKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChkYXRhLnJvd0hlYWRlcnMgfHwgW10pLmxlbmd0aCA9PT0gMCAmJiAoZGF0YS5jb2x1bW5IZWFkZXJzIHx8IFtdKS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGEoZGF0YTogTG1yUGl2b3RTdGVtRGF0YSkge1xuICAgIGNvbnN0IG51bWJlck9mU3VtcyA9IE1hdGgubWF4KDEsIChkYXRhLnZhbHVlVGl0bGVzIHx8IFtdKS5sZW5ndGgpO1xuICAgIHRoaXMudmFsdWVUeXBlSW5mbyA9IGdldFZhbHVlc1R5cGVJbmZvKGRhdGEudmFsdWVzLCBkYXRhLnZhbHVlVHlwZXMsIG51bWJlck9mU3Vtcyk7XG4gICAgdGhpcy5kYXRhID0gcHJlcGFyZVBpdm90RGF0YShkYXRhLCB0aGlzLmNvbnN0cmFpbnREYXRhLCB0aGlzLnZhbHVlVHlwZUluZm8pO1xuICAgIHRoaXMudmFsdWVzID0gZGF0YS52YWx1ZXMgfHwgW107XG4gICAgdGhpcy5kYXRhUmVzb3VyY2VzID0gZGF0YS5kYXRhUmVzb3VyY2VzIHx8IFtdO1xuICAgIHRoaXMucm93TGV2ZWxzID0gKGRhdGEucm93c0NvbmZpZyB8fCBbXSkubGVuZ3RoO1xuICAgIHRoaXMuY29sdW1uTGV2ZWxzID0gKGRhdGEuY29sdW1uc0NvbmZpZyB8fCBbXSkubGVuZ3RoICsgKGRhdGEuaGFzQWRkaXRpb25hbENvbHVtbkxldmVsID8gMSA6IDApO1xuICAgIGNvbnN0IHJvd0FsbFN0aWNreSA9IHRoaXMuZGF0YS5yb3dzQ29uZmlnPy5sZW5ndGggJiYgdGhpcy5kYXRhLnJvd3NDb25maWcuZXZlcnkoY29uZmlnID0+ICEhY29uZmlnPy5zdGlja3kpXG4gICAgdGhpcy5ub25TdGlja3lSb3dJbmRleCA9IE1hdGgubWF4KHJvd0FsbFN0aWNreSA/IHRoaXMucm93TGV2ZWxzIDogKHRoaXMuZGF0YS5yb3dzQ29uZmlnPy5maW5kSW5kZXgoY29uZmlnID0+ICFjb25maWc/LnN0aWNreSkgfHwgMCksIDApO1xuICAgIGNvbnN0IGNvbHVtbkFsbFN0aWNreSA9IHRoaXMuZGF0YS5jb2x1bW5zQ29uZmlnPy5sZW5ndGggJiYgdGhpcy5kYXRhLmNvbHVtbnNDb25maWcuZXZlcnkoY29uZmlnID0+ICEhY29uZmlnPy5zdGlja3kpXG4gICAgdGhpcy5ub25TdGlja3lDb2x1bW5JbmRleCA9IE1hdGgubWF4KGNvbHVtbkFsbFN0aWNreSA/IHRoaXMuY29sdW1uTGV2ZWxzIDogKHRoaXMuZGF0YS5jb2x1bW5zQ29uZmlnPy5maW5kSW5kZXgoY29uZmlnID0+ICFjb25maWc/LnN0aWNreSkgfHwgMCksIDApO1xuICAgIGNvbnN0IGhhc1ZhbHVlID0gKGRhdGEudmFsdWVUaXRsZXMgfHwgW10pLmxlbmd0aCA+IDA7XG4gICAgaWYgKCh0aGlzLmRhdGEucm93SGVhZGVycyB8fCBbXSkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yb3dzVHJhbnNmb3JtYXRpb25BcnJheSA9IGNyZWF0ZVRyYW5zZm9ybWF0aW9uTWFwKFxuICAgICAgICB0aGlzLmRhdGEucm93SGVhZGVycyxcbiAgICAgICAgdGhpcy5yb3dTaG93U3VtcyxcbiAgICAgICAgdGhpcy5jb2x1bW5MZXZlbHMsXG4gICAgICAgIDFcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm93c1RyYW5zZm9ybWF0aW9uQXJyYXkgPSBoYXNWYWx1ZSA/IFt0aGlzLmNvbHVtbkxldmVsc10gOiBbXTtcbiAgICB9XG5cbiAgICBpZiAoKHRoaXMuZGF0YS5jb2x1bW5IZWFkZXJzIHx8IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvbHVtbnNUcmFuc2Zvcm1hdGlvbkFycmF5ID0gY3JlYXRlVHJhbnNmb3JtYXRpb25NYXAoXG4gICAgICAgIHRoaXMuZGF0YS5jb2x1bW5IZWFkZXJzLFxuICAgICAgICB0aGlzLmNvbHVtblNob3dTdW1zLFxuICAgICAgICB0aGlzLnJvd0xldmVscyxcbiAgICAgICAgbnVtYmVyT2ZTdW1zXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtbnNUcmFuc2Zvcm1hdGlvbkFycmF5ID0gaGFzVmFsdWUgPyBbdGhpcy5yb3dMZXZlbHNdIDogW107XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcm93U2hvd1N1bXMoKTogYm9vbGVhbltdIHtcbiAgICByZXR1cm4gKHRoaXMuZGF0YS5yb3dzQ29uZmlnIHx8IFtdKS5tYXAoY29uZmlnID0+IGNvbmZpZy5zaG93U3Vtcyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb2x1bW5TaG93U3VtcygpOiBib29sZWFuW10ge1xuICAgIHJldHVybiAodGhpcy5kYXRhLmNvbHVtbnNDb25maWcgfHwgW10pLm1hcChjb25maWcgPT4gY29uZmlnLnNob3dTdW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRGF0YSgpOiBMbXJQaXZvdFRhYmxlIHtcbiAgICBjb25zdCBjZWxscyA9IHRoaXMuaW5pdENlbGxzKCk7XG4gICAgY29uc3Qgcm93R3JvdXBzID0gdGhpcy5maWxsQ2VsbHNCeVJvd3MoY2VsbHMpO1xuICAgIGNvbnN0IGNvbHVtbkdyb3VwcyA9IHRoaXMuZmlsbENlbGxzQnlDb2x1bW5zKGNlbGxzKTtcbiAgICB0aGlzLmZpbGxDZWxsc0J5R3JvdXBJbnRlcnNlY3Rpb24oY2VsbHMsIHJvd0dyb3VwcywgY29sdW1uR3JvdXBzKTtcbiAgICByZXR1cm4ge2NlbGxzfTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsbENlbGxzQnlSb3dzKGNlbGxzOiBMbXJQaXZvdFRhYmxlQ2VsbFtdW10pOiBIZWFkZXJHcm91cEluZm9bXSB7XG4gICAgY29uc3Qgcm93R3JvdXBzID0gW107XG4gICAgdGhpcy5pdGVyYXRlQW5kRmlsbENlbGxzQnlSb3dzKGNlbGxzLCByb3dHcm91cHMsIHRoaXMuZGF0YS5yb3dIZWFkZXJzLCB0aGlzLmNvbHVtbkxldmVscywgdGhpcy5yb3dTaG93U3VtcywgMCk7XG4gICAgcmV0dXJuIHJvd0dyb3VwcztcbiAgfVxuXG4gIHByaXZhdGUgaXRlcmF0ZUFuZEZpbGxDZWxsc0J5Um93cyhcbiAgICBjZWxsczogTG1yUGl2b3RUYWJsZUNlbGxbXVtdLFxuICAgIHJvd0dyb3Vwc0luZm86IEhlYWRlckdyb3VwSW5mb1tdLFxuICAgIGhlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdLFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzaG93U3VtczogYm9vbGVhbltdLFxuICAgIGxldmVsOiBudW1iZXIsXG4gICAgcGFyZW50SGVhZGVyPzogTG1yUGl2b3REYXRhSGVhZGVyXG4gICkge1xuICAgIGxldCBjdXJyZW50SW5kZXggPSBzdGFydEluZGV4O1xuICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IHJvd1NwYW4gPSBnZXREaXJlY3RIZWFkZXJDaGlsZENvdW50KGhlYWRlciwgbGV2ZWwsIHNob3dTdW1zKTtcbiAgICAgIGNlbGxzW2N1cnJlbnRJbmRleF1bbGV2ZWxdID0ge1xuICAgICAgICB2YWx1ZTogdGhpcy5mb3JtYXRSb3dIZWFkZXIoaGVhZGVyLnRpdGxlLCBsZXZlbCksXG4gICAgICAgIGNzc0NsYXNzOiBQaXZvdFRhYmxlQ29udmVydGVyLnJvd0hlYWRlckNsYXNzLFxuICAgICAgICBpc0hlYWRlcjogdHJ1ZSxcbiAgICAgICAgc3RpY2t5U3RhcnQ6IHRoaXMuaXNSb3dMZXZlbFN0aWNreShsZXZlbCksXG4gICAgICAgIHJvd1NwYW4sXG4gICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgIGJhY2tncm91bmQ6IHRoaXMuZ2V0SGVhZGVyQmFja2dyb3VuZChoZWFkZXIsIGxldmVsKSxcbiAgICAgICAgY29uc3RyYWludDogaGVhZGVyLmNvbnN0cmFpbnQsXG4gICAgICAgIGxhYmVsOiBoZWFkZXIuYXR0cmlidXRlTmFtZSxcbiAgICAgICAgY2hpbGRJbmRleGVzOiBjcmVhdGVSYW5nZShjdXJyZW50SW5kZXgsIGN1cnJlbnRJbmRleCArIChoZWFkZXIuY2hpbGRyZW4/Lmxlbmd0aCB8fCAxKSlcbiAgICAgIH07XG5cbiAgICAgIGlmIChoZWFkZXIuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5pdGVyYXRlQW5kRmlsbENlbGxzQnlSb3dzKFxuICAgICAgICAgIGNlbGxzLFxuICAgICAgICAgIHJvd0dyb3Vwc0luZm8sXG4gICAgICAgICAgaGVhZGVyLmNoaWxkcmVuLFxuICAgICAgICAgIGN1cnJlbnRJbmRleCxcbiAgICAgICAgICBzaG93U3VtcyxcbiAgICAgICAgICBsZXZlbCArIDEsXG4gICAgICAgICAgaGVhZGVyXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKGhlYWRlci50YXJnZXRJbmRleCkpIHtcbiAgICAgICAgdGhpcy5maWxsQ2VsbHNGb3JSb3coY2VsbHMsIGhlYWRlci50YXJnZXRJbmRleCk7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRJbmRleCArPSBnZXRIZWFkZXJDaGlsZENvdW50KGhlYWRlciwgbGV2ZWwsIHNob3dTdW1zKTtcblxuICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBoZWFkZXIuZXhwcmVzc2lvbnMgfHwgW11cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbkluZGV4ID0gY3VycmVudEluZGV4IC0gKGV4cHJlc3Npb25zLmxlbmd0aCAtIGkpXG4gICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmdldFN1bW1hcnlCYWNrZ3JvdW5kKGxldmVsKTtcbiAgICAgICAgY29uc3Qge2luZGV4ZXN9ID0gdGhpcy5maWxsQ2VsbHNGb3JFeHByZXNzaW9uUm93KGNlbGxzLCBleHByZXNzaW9uc1tpXSwgZXhwcmVzc2lvbkluZGV4LCBiYWNrZ3JvdW5kKVxuICAgICAgICB0aGlzLnNwbGl0Um93R3JvdXBIZWFkZXIoY2VsbHMsIGxldmVsLCBleHByZXNzaW9uSW5kZXgsIGJhY2tncm91bmQsIGV4cHJlc3Npb25zW2ldLnRpdGxlLCBpbmRleGVzKVxuICAgICAgICByb3dHcm91cHNJbmZvW2V4cHJlc3Npb25JbmRleF0gPSB7YmFja2dyb3VuZCwgaW5kZXhlczogW10sIGV4cHJlc3Npb246IGV4cHJlc3Npb25zW2ldLCBsZXZlbH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3dTdW1zW2xldmVsXSkge1xuICAgICAgY29uc3QgeyB0aXRsZSwgc3VtbWFyeSB9ID0gdGhpcy5mb3JtYXRTdW1tYXJ5SGVhZGVyKHBhcmVudEhlYWRlciwgbGV2ZWwpXG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5nZXRTdW1tYXJ5QmFja2dyb3VuZChsZXZlbCk7XG4gICAgICBjb25zdCBjb2x1bW5JbmRleCA9IE1hdGgubWF4KGxldmVsIC0gMSwgMCk7XG4gICAgICB0aGlzLnNwbGl0Um93R3JvdXBIZWFkZXIoY2VsbHMsIGNvbHVtbkluZGV4LCBjdXJyZW50SW5kZXgsIGJhY2tncm91bmQsIHN1bW1hcnksIFtdLCB0aXRsZSwgcGFyZW50SGVhZGVyPy5jb25zdHJhaW50LCBwYXJlbnRIZWFkZXI/LmF0dHJpYnV0ZU5hbWUpXG5cbiAgICAgIGNvbnN0IHJvd0luZGV4ZXMgPSBnZXRUYXJnZXRJbmRleGVzRm9ySGVhZGVycyhoZWFkZXJzKTtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUm93SW5kZXhlcyA9IHRoaXMudHJhbnNmb3JtUm93SW5kZXhlcyhyb3dJbmRleGVzKTtcbiAgICAgIHJvd0dyb3Vwc0luZm9bY3VycmVudEluZGV4XSA9IHtiYWNrZ3JvdW5kLCBpbmRleGVzOiB0cmFuc2Zvcm1lZFJvd0luZGV4ZXMsIGxldmVsfTtcblxuICAgICAgdGhpcy5maWxsQ2VsbHNGb3JHcm91cGVkUm93KGNlbGxzLCByb3dJbmRleGVzLCBjdXJyZW50SW5kZXgsIGJhY2tncm91bmQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3BsaXRSb3dHcm91cEhlYWRlcihjZWxsczogTG1yUGl2b3RUYWJsZUNlbGxbXVtdLCBjb2x1bW5JbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlciwgYmFja2dyb3VuZDogc3RyaW5nLCBzdW1tYXJ5OiBzdHJpbmcsIHJvd0luZGV4ZXM6IG51bWJlcltdLCB0aXRsZT86IHN0cmluZywgY29uc3RyYWludD86IENvbnN0cmFpbnQsIGxhYmVsPzogc3RyaW5nKSB7XG4gICAgbGV0IGNvbFNwYW4gPSB0aGlzLnJvd0xldmVscyAtIGNvbHVtbkluZGV4O1xuICAgIGNvbnN0IHN0aWNreVN0YXJ0ID0gdGhpcy5pc1Jvd0xldmVsU3RpY2t5KGNvbHVtbkluZGV4KTtcblxuICAgIC8vIHNwbGl0IHJvdyBncm91cCBoZWFkZXIgY2VsbCBiZWNhdXNlIG9mIGNvcnJlY3Qgc3RpY2t5IHNjcm9sbFxuICAgIGlmIChzdGlja3lTdGFydCAmJiB0aGlzLm5vblN0aWNreVJvd0luZGV4ID4gMCAmJiB0aGlzLm5vblN0aWNreVJvd0luZGV4IDwgdGhpcy5yb3dMZXZlbHMgJiYgY29sU3BhbiA+IDEpIHtcbiAgICAgIGNvbnN0IG5ld0NvbHNwYW4gPSB0aGlzLm5vblN0aWNreVJvd0luZGV4IC0gY29sdW1uSW5kZXg7XG5cbiAgICAgIGNlbGxzW2N1cnJlbnRJbmRleF1bdGhpcy5ub25TdGlja3lSb3dJbmRleF0gPSB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbnN0cmFpbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAgICAgY3NzQ2xhc3M6IFBpdm90VGFibGVDb252ZXJ0ZXIucm93R3JvdXBIZWFkZXJDbGFzcyxcbiAgICAgICAgaXNTdW1tYXJ5OiB0cnVlLFxuICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICBjb2xTcGFuOiBjb2xTcGFuIC0gbmV3Q29sc3BhbixcbiAgICAgICAgYmFja2dyb3VuZCxcbiAgICAgICAgc3VtbWFyeTogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgY29sU3BhbiA9IG5ld0NvbHNwYW47XG4gICAgfVxuXG4gICAgY2VsbHNbY3VycmVudEluZGV4XVtjb2x1bW5JbmRleF0gPSB7XG4gICAgICB2YWx1ZTogdGl0bGUsXG4gICAgICBjb25zdHJhaW50LFxuICAgICAgbGFiZWwsXG4gICAgICBjc3NDbGFzczogUGl2b3RUYWJsZUNvbnZlcnRlci5yb3dHcm91cEhlYWRlckNsYXNzLFxuICAgICAgaXNTdW1tYXJ5OiB0cnVlLFxuICAgICAgc3RpY2t5U3RhcnQsXG4gICAgICByb3dTcGFuOiAxLFxuICAgICAgY29sU3BhbixcbiAgICAgIGJhY2tncm91bmQsXG4gICAgICBzdW1tYXJ5LFxuICAgICAgcm93SW5kZXhlcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRTdW1tYXJ5SGVhZGVyKGhlYWRlcjogTG1yUGl2b3REYXRhSGVhZGVyLCBsZXZlbDogbnVtYmVyKToge3RpdGxlPzogc3RyaW5nOyBzdW1tYXJ5OiBzdHJpbmd9IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0uZm9ybWF0U3VtbWFyeUhlYWRlcj8uKGhlYWRlciwgbGV2ZWwpIHx8IHtcbiAgICAgIHRpdGxlOiBoZWFkZXI/LnRpdGxlLFxuICAgICAgc3VtbWFyeTogJycsXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRSb3dIZWFkZXIodGl0bGU6IHN0cmluZywgbGV2ZWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtPy5mb3JtYXRSb3dIZWFkZXI/Lih0aXRsZSwgbGV2ZWwpIHx8IHRpdGxlXG4gIH1cblxuICBwcml2YXRlIGZvcm1hdENvbHVtbkhlYWRlcih0aXRsZTogc3RyaW5nLCBsZXZlbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0/LmZvcm1hdENvbHVtbkhlYWRlcj8uKHRpdGxlLCBsZXZlbCkgfHwgdGl0bGVcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SGVhZGVyQmFja2dyb3VuZChoZWFkZXI6IHsgY29sb3I6IHN0cmluZyB9LCBsZXZlbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaGVhZGVyPy5jb2xvcikge1xuICAgICAgcmV0dXJuIHNoYWRlQ29sb3IoaGVhZGVyLmNvbG9yLCB0aGlzLmdldExldmVsT3BhY2l0eShsZXZlbCkpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldExldmVsT3BhY2l0eShsZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5taW4oODAsIDUwICsgbGV2ZWwgKiA1KSAvIDEwMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNSb3dMZXZlbFN0aWNreShsZXZlbDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ucm93c0NvbmZpZz8uW2xldmVsXT8uc3RpY2t5O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbHVtbkxldmVsU3RpY2t5KGxldmVsOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXhMZXZlbCA9IE1hdGgubWluKGxldmVsLCAodGhpcy5kYXRhPy5jb2x1bW5zQ29uZmlnPy5sZW5ndGggPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIC0gMSk7XG4gICAgcmV0dXJuIHRoaXMuZGF0YT8uY29sdW1uc0NvbmZpZz8uW21heExldmVsXT8uc3RpY2t5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdW1tYXJ5QmFja2dyb3VuZChsZXZlbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbmRleCA9IE1hdGgubWluKGxldmVsLCB0aGlzLmdyb3VwQ29sb3JzLmxlbmd0aCAtIDEpO1xuICAgIHJldHVybiB0aGlzLmdyb3VwQ29sb3JzW2luZGV4XTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsbENlbGxzRm9yUm93KGNlbGxzOiBMbXJQaXZvdFRhYmxlQ2VsbFtdW10sIHJvdzogbnVtYmVyKSB7XG4gICAgY29uc3Qgcm93SW5kZXhJbkNlbGxzID0gdGhpcy5yb3dzVHJhbnNmb3JtYXRpb25BcnJheVtyb3ddO1xuICAgIGlmIChpc05vdE51bGxPclVuZGVmaW5lZChyb3dJbmRleEluQ2VsbHMpKSB7XG4gICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnNUcmFuc2Zvcm1hdGlvbkFycmF5Lmxlbmd0aDsgY29sdW1uKyspIHtcbiAgICAgICAgY29uc3QgY29sdW1uSW5kZXhJbkNlbGxzID0gdGhpcy5jb2x1bW5zVHJhbnNmb3JtYXRpb25BcnJheVtjb2x1bW5dO1xuICAgICAgICBpZiAoaXNOb3ROdWxsT3JVbmRlZmluZWQoY29sdW1uSW5kZXhJbkNlbGxzKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhLnZhbHVlc1tyb3ddW2NvbHVtbl07XG4gICAgICAgICAgY29uc3QgZGF0YVJlc291cmNlcyA9IHRoaXMuZGF0YVJlc291cmNlcz8uW3Jvd10/Lltjb2x1bW5dIHx8IFtdO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy5hZ2dyZWdhdGVPckZvcm1hdFNpbmdsZVZhbHVlKHZhbHVlLCBjb2x1bW4pO1xuICAgICAgICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gaXNOb3ROdWxsT3JVbmRlZmluZWQoZm9ybWF0dGVkVmFsdWUpID8gU3RyaW5nKGZvcm1hdHRlZFZhbHVlKSA6ICcnO1xuICAgICAgICAgIGNlbGxzW3Jvd0luZGV4SW5DZWxsc11bY29sdW1uSW5kZXhJbkNlbGxzXSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmdWYWx1ZSxcbiAgICAgICAgICAgIGRhdGFSZXNvdXJjZXMsXG4gICAgICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICAgIGNzc0NsYXNzOiBQaXZvdFRhYmxlQ29udmVydGVyLmRhdGFDbGFzcyxcbiAgICAgICAgICAgIGlzVmFsdWU6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVJbmRleEZvckNvbHVtbnMoY29sdW1uczogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIHJldHVybiBjb2x1bW5zWzBdICUgdGhpcy5kYXRhLnZhbHVlVGl0bGVzLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VmFsdWVCeVZhbHVlVHlwZSh2YWx1ZTogYW55LCB2YWx1ZUluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9ICh0aGlzLmRhdGEudmFsdWVUeXBlcyB8fCBbXSlbdmFsdWVJbmRleF07XG4gICAgaWYgKCF2YWx1ZVR5cGUgfHwgdmFsdWVUeXBlID09PSBMbXJQaXZvdFZhbHVlVHlwZS5EZWZhdWx0KSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRWYWx1ZUJ5Q29uc3RyYWludCh2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0xtclBpdm90VmFsdWVUeXBlLkFsbFBlcmNlbnRhZ2UsIExtclBpdm90VmFsdWVUeXBlLkNvbHVtblBlcmNlbnRhZ2UsIExtclBpdm90VmFsdWVUeXBlLlJvd1BlcmNlbnRhZ2VdLmluY2x1ZGVzKHZhbHVlVHlwZSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbHVlQnlQZXJjZW50YWdlKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mb3JtYXRWYWx1ZUJ5Q29uc3RyYWludCh2YWx1ZSwgdmFsdWVJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEdyb3VwZWRWYWx1ZUJ5VmFsdWVUeXBlKHZhbHVlOiBhbnksIHJvd3M6IG51bWJlcltdLCBjb2x1bW5zOiBudW1iZXJbXSk6IGFueSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGNvbHVtbnNbMF0gJSB0aGlzLmRhdGEudmFsdWVUaXRsZXMubGVuZ3RoO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZGF0YS52YWx1ZVR5cGVzICYmIHRoaXMuZGF0YS52YWx1ZVR5cGVzW3ZhbHVlSW5kZXhdO1xuICAgIGNvbnN0IHZhbHVlVHlwZUluZm8gPSB0aGlzLnZhbHVlVHlwZUluZm9bdmFsdWVJbmRleF07XG4gICAgaWYgKCF2YWx1ZVR5cGVJbmZvIHx8ICF2YWx1ZVR5cGUgfHwgdmFsdWVUeXBlID09PSBMbXJQaXZvdFZhbHVlVHlwZS5EZWZhdWx0KSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRWYWx1ZUJ5Q29uc3RyYWludCh2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlVHlwZSA9PT0gTG1yUGl2b3RWYWx1ZVR5cGUuQWxsUGVyY2VudGFnZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0VmFsdWVCeVBlcmNlbnRhZ2UoZGl2aWRlVmFsdWVzKHZhbHVlLCB2YWx1ZVR5cGVJbmZvLnN1bSkpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSBMbXJQaXZvdFZhbHVlVHlwZS5Db2x1bW5QZXJjZW50YWdlKSB7XG4gICAgICBjb25zdCBjb2x1bW5zRGl2aWRlcnMgPSBjb2x1bW5zLnJlZHVjZSgoZGl2aWRlcnMsIGNvbHVtbikgPT4ge1xuICAgICAgICBkaXZpZGVycy5wdXNoKHZhbHVlVHlwZUluZm8uc3Vtc0NvbHVtbnNbY29sdW1uXSk7XG4gICAgICAgIHJldHVybiBkaXZpZGVycztcbiAgICAgIH0sIFtdKTtcbiAgICAgIGNvbnN0IGNvbHVtbnNEaXZpZGVyID0gYWdncmVnYXRlRGF0YVZhbHVlcyhEYXRhQWdncmVnYXRpb25UeXBlLlN1bSwgY29sdW1uc0RpdmlkZXJzKTtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbHVlQnlQZXJjZW50YWdlKGRpdmlkZVZhbHVlcyh2YWx1ZSwgY29sdW1uc0RpdmlkZXIpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PT0gTG1yUGl2b3RWYWx1ZVR5cGUuUm93UGVyY2VudGFnZSkge1xuICAgICAgY29uc3Qgcm93c0RpdmlkZXJzID0gcm93cy5yZWR1Y2UoKGRpdmlkZXJzLCByb3cpID0+IHtcbiAgICAgICAgZGl2aWRlcnMucHVzaCh2YWx1ZVR5cGVJbmZvLnN1bXNSb3dzW3Jvd10pO1xuICAgICAgICByZXR1cm4gZGl2aWRlcnM7XG4gICAgICB9LCBbXSk7XG4gICAgICBjb25zdCByb3dzRGl2aWRlciA9IGFnZ3JlZ2F0ZURhdGFWYWx1ZXMoRGF0YUFnZ3JlZ2F0aW9uVHlwZS5TdW0sIHJvd3NEaXZpZGVycyk7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRWYWx1ZUJ5UGVyY2VudGFnZShkaXZpZGVWYWx1ZXModmFsdWUsIHJvd3NEaXZpZGVyKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0VmFsdWVCeUNvbnN0cmFpbnQodmFsdWUsIHZhbHVlSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZUJ5UGVyY2VudGFnZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wZXJjZW50YWdlQ29uc3RyYWludC5jcmVhdGVEYXRhVmFsdWUodmFsdWUpLmZvcm1hdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZUJ5Q29uc3RyYWludCh2YWx1ZTogYW55LCB2YWx1ZUluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIGNvbnN0IGNvbnN0cmFpbnQgPSB0aGlzLmRhdGEudmFsdWVzQ29uc3RyYWludHM/Llt2YWx1ZUluZGV4XSB8fCB0aGlzLnZhbHVlVHlwZUluZm9bdmFsdWVJbmRleF0/LmRlZmF1bHRDb25zdHJhaW50O1xuICAgIGlmIChjb25zdHJhaW50KSB7XG4gICAgICByZXR1cm4gY29uc3RyYWludC5jcmVhdGVEYXRhVmFsdWUodmFsdWUsIHRoaXMuY29uc3RyYWludERhdGEpLnByZXZpZXcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsQ2VsbHNGb3JHcm91cGVkUm93KFxuICAgIGNlbGxzOiBMbXJQaXZvdFRhYmxlQ2VsbFtdW10sXG4gICAgcm93czogbnVtYmVyW10sXG4gICAgcm93SW5kZXhJbkNlbGxzOiBudW1iZXIsXG4gICAgYmFja2dyb3VuZDogc3RyaW5nXG4gICkge1xuICAgIGZvciAobGV0IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRoaXMuY29sdW1uc1RyYW5zZm9ybWF0aW9uQXJyYXkubGVuZ3RoOyBjb2x1bW4rKykge1xuICAgICAgY29uc3QgY29sdW1uSW5kZXhJbkNlbGxzID0gdGhpcy5jb2x1bW5zVHJhbnNmb3JtYXRpb25BcnJheVtjb2x1bW5dO1xuICAgICAgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKGNvbHVtbkluZGV4SW5DZWxscykpIHtcbiAgICAgICAgY29uc3Qge3ZhbHVlcywgZGF0YVJlc291cmNlc30gPSB0aGlzLmdldEdyb3VwZWRWYWx1ZXNGb3JSb3dzQW5kQ29scyhyb3dzLCBbY29sdW1uXSk7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy5hZ2dyZWdhdGVBbmRGb3JtYXREYXRhVmFsdWVzKHZhbHVlcywgcm93cywgW2NvbHVtbl0pO1xuICAgICAgICBjZWxsc1tyb3dJbmRleEluQ2VsbHNdW2NvbHVtbkluZGV4SW5DZWxsc10gPSB7XG4gICAgICAgICAgdmFsdWU6IFN0cmluZyhmb3JtYXR0ZWRWYWx1ZSksXG4gICAgICAgICAgZGF0YVJlc291cmNlcyxcbiAgICAgICAgICBjb2xTcGFuOiAxLFxuICAgICAgICAgIHJvd1NwYW46IDEsXG4gICAgICAgICAgY3NzQ2xhc3M6IFBpdm90VGFibGVDb252ZXJ0ZXIuZ3JvdXBEYXRhQ2xhc3MsXG4gICAgICAgICAgYmFja2dyb3VuZCxcbiAgICAgICAgICBpc1ZhbHVlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsbENlbGxzRm9yRXhwcmVzc2lvblJvdyhcbiAgICBjZWxsczogTG1yUGl2b3RUYWJsZUNlbGxbXVtdLFxuICAgIGV4cHJlc3Npb246IExtclBpdm90RGF0YUhlYWRlckV4cHJlc3Npb24sXG4gICAgcm93SW5kZXhJbkNlbGxzOiBudW1iZXIsXG4gICAgYmFja2dyb3VuZDogc3RyaW5nXG4gICk6e2luZGV4ZXM6IG51bWJlcltdfSB7XG4gICAgbGV0IHJvd0luZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zVHJhbnNmb3JtYXRpb25BcnJheS5sZW5ndGg7IGNvbHVtbisrKSB7XG4gICAgICBjb25zdCBjb2x1bW5JbmRleEluQ2VsbHMgPSB0aGlzLmNvbHVtbnNUcmFuc2Zvcm1hdGlvbkFycmF5W2NvbHVtbl07XG4gICAgICBpZiAoaXNOb3ROdWxsT3JVbmRlZmluZWQoY29sdW1uSW5kZXhJbkNlbGxzKSkge1xuICAgICAgICBjb25zdCB7dmFsdWUsIGRhdGFSZXNvdXJjZXMsIGluZGV4ZXN9ID0gdGhpcy5ldmFsdWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgW2NvbHVtbl0pO1xuICAgICAgICByb3dJbmRleGVzID0gaW5kZXhlc1xuICAgICAgICBjb25zdCB2YWx1ZUluZGV4ID0gY29sdW1uICUgdGhpcy5kYXRhLnZhbHVlVGl0bGVzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlQnlDb25zdHJhaW50KHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICAgICAgY2VsbHNbcm93SW5kZXhJbkNlbGxzXVtjb2x1bW5JbmRleEluQ2VsbHNdID0ge1xuICAgICAgICAgIHZhbHVlOiBTdHJpbmcoZm9ybWF0dGVkVmFsdWUpLFxuICAgICAgICAgIGRhdGFSZXNvdXJjZXMsXG4gICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICAgIGNzc0NsYXNzOiBQaXZvdFRhYmxlQ29udmVydGVyLmdyb3VwRGF0YUNsYXNzLFxuICAgICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgICAgaXNWYWx1ZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtpbmRleGVzOiB1bmlxdWVWYWx1ZXMoWy4uLnJvd0luZGV4ZXMsIHJvd0luZGV4SW5DZWxsc10pfVxuICB9XG5cbiAgcHJpdmF0ZSBldmFsdWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbjogTG1yUGl2b3REYXRhSGVhZGVyRXhwcmVzc2lvbiwgY29sdW1uczogbnVtYmVyW10pOiB7dmFsdWU6IG51bWJlcjsgZGF0YVJlc291cmNlczogRGF0YVJlc291cmNlW107IGluZGV4ZXM6IG51bWJlcltdICB9IHtcbiAgICByZXR1cm4gKGV4cHJlc3Npb24ub3BlcmFuZHMgfHwgW10pLnJlZHVjZSgocmVzdWx0LCBvcGVyYW5kLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qge3ZhbHVlLCBkYXRhUmVzb3VyY2VzLCBpbmRleGVzIH0gPSB0aGlzLmV2YWx1YXRlT3BlcmFuZChvcGVyYW5kLCBjb2x1bW5zKVxuICAgICAgcmVzdWx0LmRhdGFSZXNvdXJjZXMucHVzaCguLi5kYXRhUmVzb3VyY2VzKVxuICAgICAgcmVzdWx0LmluZGV4ZXMucHVzaCguLi5pbmRleGVzKVxuICAgICAgc3dpdGNoIChleHByZXNzaW9uLm9wZXJhdGlvbikge1xuICAgICAgICBjYXNlICdhZGQnOlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSArPSB2YWx1ZVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdWJ0cmFjdCc6XG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gKGluZGV4ID09PSAwID8gdmFsdWUgOiByZXN1bHQudmFsdWUgLSB2YWx1ZSlcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbXVsdGlwbHknOlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IGluZGV4ID09PSAwID8gdmFsdWUgOiByZXN1bHQudmFsdWUgKiB2YWx1ZVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkaXZpZGUnOlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IGluZGV4ID09PSAwID8gdmFsdWUgOiB2YWx1ZSA/IHJlc3VsdC52YWx1ZSAvIHZhbHVlIDogcmVzdWx0LnZhbHVlXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9ICwge3ZhbHVlOiAwLCBkYXRhUmVzb3VyY2VzOiBbXSwgaW5kZXhlczogW119KVxuICB9XG5cbiAgcHJpdmF0ZSBldmFsdWF0ZU9wZXJhbmQob3BlcmFuZDogTG1yUGl2b3REYXRhSGVhZGVyT3BlcmFuZCwgY29sdW1uczogbnVtYmVyW10pOiB7dmFsdWU6IG51bWJlcjsgZGF0YVJlc291cmNlczogRGF0YVJlc291cmNlW107IGluZGV4ZXM6IG51bWJlcltdIH0ge1xuICAgIHN3aXRjaCAob3BlcmFuZC50eXBlKSB7XG4gICAgICBjYXNlICdleHByZXNzaW9uJzogcmV0dXJuIHRoaXMuZXZhbHVhdGVFeHByZXNzaW9uKG9wZXJhbmQsIGNvbHVtbnMpXG4gICAgICBjYXNlICd2YWx1ZSc6IHJldHVybiB7dmFsdWU6IG9wZXJhbmQudmFsdWUsIGRhdGFSZXNvdXJjZXM6IFtdLCBpbmRleGVzOiBbXX1cbiAgICAgIGNhc2UgJ2hlYWRlcic6IHtcbiAgICAgICAgY29uc3Qgcm93cyA9IGdldFRhcmdldEluZGV4ZXNGb3JIZWFkZXJzKG9wZXJhbmQuaGVhZGVycyk7XG4gICAgICAgIGNvbnN0IHt2YWx1ZXMsIGRhdGFSZXNvdXJjZXN9ID0gdGhpcy5nZXRHcm91cGVkVmFsdWVzRm9yUm93c0FuZENvbHMocm93cywgY29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHt2YWx1ZX0gPSB0aGlzLmFnZ3JlZ2F0ZURhdGFWYWx1ZXModmFsdWVzLCBjb2x1bW5zKTtcbiAgICAgICAgcmV0dXJuIHt2YWx1ZSwgZGF0YVJlc291cmNlcywgaW5kZXhlczogdGhpcy50cmFuc2Zvcm1Sb3dJbmRleGVzKHJvd3MpfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtUm93SW5kZXhlcyhyb3dzOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gcm93c1xuICAgICAgLm1hcCh2ID0+IHRoaXMucm93c1RyYW5zZm9ybWF0aW9uQXJyYXlbdl0pXG4gICAgICAuZmlsdGVyKHYgPT4gaXNOb3ROdWxsT3JVbmRlZmluZWQodikpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRHcm91cGVkVmFsdWVzRm9yUm93c0FuZENvbHMoXG4gICAgcm93czogbnVtYmVyW10sXG4gICAgY29sdW1uczogbnVtYmVyW11cbiAgKTogeyB2YWx1ZXM6IGFueVtdOyBkYXRhUmVzb3VyY2VzOiBEYXRhUmVzb3VyY2VbXSB9IHtcbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICBjb25zdCBkYXRhUmVzb3VyY2VzID0gW107XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICBjb25zdCByb3dDb2x1bW5WYWx1ZSA9IHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXTtcbiAgICAgICAgaWYgKGlzQXJyYXkocm93Q29sdW1uVmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2goLi4ucm93Q29sdW1uVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKHJvd0NvbHVtblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhUmVzb3VyY2VzLnB1c2goLi4uKHRoaXMuZGF0YVJlc291cmNlcz8uW3Jvd10/Lltjb2x1bW5dIHx8IFtdKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7dmFsdWVzLCBkYXRhUmVzb3VyY2VzfTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsbENlbGxzQnlDb2x1bW5zKGNlbGxzOiBMbXJQaXZvdFRhYmxlQ2VsbFtdW10pOiBIZWFkZXJHcm91cEluZm9bXSB7XG4gICAgY29uc3QgY29sdW1uR3JvdXBzID0gW107XG4gICAgdGhpcy5pdGVyYXRlQW5kRmlsbENlbGxzQnlDb2x1bW5zKFxuICAgICAgY2VsbHMsXG4gICAgICBjb2x1bW5Hcm91cHMsXG4gICAgICB0aGlzLmRhdGEuY29sdW1uSGVhZGVycyxcbiAgICAgIHRoaXMucm93TGV2ZWxzLFxuICAgICAgdGhpcy5jb2x1bW5TaG93U3VtcyxcbiAgICAgIDBcbiAgICApO1xuICAgIHJldHVybiBjb2x1bW5Hcm91cHM7XG4gIH1cblxuICBwcml2YXRlIGl0ZXJhdGVBbmRGaWxsQ2VsbHNCeUNvbHVtbnMoXG4gICAgY2VsbHM6IExtclBpdm90VGFibGVDZWxsW11bXSxcbiAgICBjb2x1bW5Hcm91cHNJbmZvOiBIZWFkZXJHcm91cEluZm9bXSxcbiAgICBoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2hvd1N1bXM6IGJvb2xlYW5bXSxcbiAgICBsZXZlbDogbnVtYmVyLFxuICAgIHBhcmVudEhlYWRlcj86IExtclBpdm90RGF0YUhlYWRlclxuICApIHtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICBjb25zdCBudW1iZXJPZlN1bXMgPSBNYXRoLm1heCgxLCB0aGlzLmRhdGEudmFsdWVUaXRsZXMubGVuZ3RoKTtcbiAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJzKSB7XG4gICAgICBjb25zdCBjb2xTcGFuID0gZ2V0RGlyZWN0SGVhZGVyQ2hpbGRDb3VudChoZWFkZXIsIGxldmVsLCBzaG93U3VtcywgbnVtYmVyT2ZTdW1zKTtcbiAgICAgIGNlbGxzW2xldmVsXVtjdXJyZW50SW5kZXhdID0ge1xuICAgICAgICB2YWx1ZTogdGhpcy5mb3JtYXRDb2x1bW5IZWFkZXIoaGVhZGVyLnRpdGxlLCBsZXZlbCksXG4gICAgICAgIGNzc0NsYXNzOiBQaXZvdFRhYmxlQ29udmVydGVyLmNvbHVtbkhlYWRlckNsYXNzLFxuICAgICAgICBpc0hlYWRlcjogdHJ1ZSxcbiAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgY29sU3BhbixcbiAgICAgICAgc3RpY2t5VG9wOiB0aGlzLmlzQ29sdW1uTGV2ZWxTdGlja3kobGV2ZWwpLFxuICAgICAgICBiYWNrZ3JvdW5kOiB0aGlzLmdldEhlYWRlckJhY2tncm91bmQoaGVhZGVyLCBsZXZlbCksXG4gICAgICAgIGNvbnN0cmFpbnQ6IGhlYWRlci5jb25zdHJhaW50LFxuICAgICAgICBsYWJlbDogaGVhZGVyLmF0dHJpYnV0ZU5hbWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoaGVhZGVyLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuaXRlcmF0ZUFuZEZpbGxDZWxsc0J5Q29sdW1ucyhcbiAgICAgICAgICBjZWxscyxcbiAgICAgICAgICBjb2x1bW5Hcm91cHNJbmZvLFxuICAgICAgICAgIGhlYWRlci5jaGlsZHJlbixcbiAgICAgICAgICBjdXJyZW50SW5kZXgsXG4gICAgICAgICAgc2hvd1N1bXMsXG4gICAgICAgICAgbGV2ZWwgKyAxLFxuICAgICAgICAgIGhlYWRlclxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChpc05vdE51bGxPclVuZGVmaW5lZChoZWFkZXIudGFyZ2V0SW5kZXgpKSB7XG4gICAgICAgIHRoaXMuZmlsbENlbGxzRm9yQ29sdW1uKGNlbGxzLCBoZWFkZXIudGFyZ2V0SW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50SW5kZXggKz0gZ2V0SGVhZGVyQ2hpbGRDb3VudChoZWFkZXIsIGxldmVsLCBzaG93U3VtcywgbnVtYmVyT2ZTdW1zKTtcbiAgICB9XG5cbiAgICBpZiAoc2hvd1N1bXNbbGV2ZWxdKSB7XG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5nZXRTdW1tYXJ5QmFja2dyb3VuZChsZXZlbCk7XG4gICAgICBjb25zdCB7IHRpdGxlLCBzdW1tYXJ5IH0gPSB0aGlzLmZvcm1hdFN1bW1hcnlIZWFkZXIocGFyZW50SGVhZGVyLCBsZXZlbClcbiAgICAgIGNvbnN0IG51bWJlck9mVmFsdWVzID0gdGhpcy5kYXRhLnZhbHVlVGl0bGVzLmxlbmd0aDtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gTWF0aC5tYXgobGV2ZWwgLSAxLCAwKTtcbiAgICAgIGNvbnN0IHNob3VsZEFkZFZhbHVlSGVhZGVycyA9IG51bWJlck9mVmFsdWVzID4gMTtcblxuICAgICAgY2VsbHNbcm93SW5kZXhdW2N1cnJlbnRJbmRleF0gPSB7XG4gICAgICAgIHZhbHVlOiB0aXRsZSxcbiAgICAgICAgY29uc3RyYWludDogcGFyZW50SGVhZGVyPy5jb25zdHJhaW50LFxuICAgICAgICBsYWJlbDogcGFyZW50SGVhZGVyPy5hdHRyaWJ1dGVOYW1lLFxuICAgICAgICBjc3NDbGFzczogUGl2b3RUYWJsZUNvbnZlcnRlci5jb2x1bW5Hcm91cEhlYWRlckNsYXNzLFxuICAgICAgICBpc1N1bW1hcnk6IHRydWUsXG4gICAgICAgIHN0aWNreVRvcDogdGhpcy5pc0NvbHVtbkxldmVsU3RpY2t5KGxldmVsKSxcbiAgICAgICAgcm93U3BhbjogdGhpcy5jb2x1bW5MZXZlbHMgLSByb3dJbmRleCAtIChzaG91bGRBZGRWYWx1ZUhlYWRlcnMgPyAxIDogMCksXG4gICAgICAgIGNvbFNwYW46IG51bWJlck9mU3VtcyxcbiAgICAgICAgYmFja2dyb3VuZCxcbiAgICAgICAgc3VtbWFyeSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChudW1iZXJPZlZhbHVlcyA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZlZhbHVlczsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY29sdW1uSW5kZXhJbkNlbGxzID0gY3VycmVudEluZGV4ICsgaTtcbiAgICAgICAgICBpZiAoc2hvdWxkQWRkVmFsdWVIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVRpdGxlID0gdGhpcy5kYXRhLnZhbHVlVGl0bGVzW2ldO1xuICAgICAgICAgICAgY2VsbHNbdGhpcy5jb2x1bW5MZXZlbHMgLSAxXVtjb2x1bW5JbmRleEluQ2VsbHNdID0ge1xuICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVUaXRsZSxcbiAgICAgICAgICAgICAgY3NzQ2xhc3M6IFBpdm90VGFibGVDb252ZXJ0ZXIuY29sdW1uR3JvdXBIZWFkZXJDbGFzcyxcbiAgICAgICAgICAgICAgaXNTdW1tYXJ5OiB0cnVlLFxuICAgICAgICAgICAgICBzdGlja3lUb3A6IHRoaXMuaXNDb2x1bW5MZXZlbFN0aWNreShsZXZlbCksXG4gICAgICAgICAgICAgIHJvd1NwYW46IDEsXG4gICAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbHVtbnNJbmRleGVzID0gZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcnMoaGVhZGVycyk7XG4gICAgICAgICAgY29uc3QgdmFsdWVDb2x1bW5zSW5kZXhlcyA9IGNvbHVtbnNJbmRleGVzLmZpbHRlcihpbmRleCA9PiBpbmRleCAlIG51bWJlck9mVmFsdWVzID09PSBpKTtcbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZENvbHVtbkluZGV4ZXMgPSB2YWx1ZUNvbHVtbnNJbmRleGVzXG4gICAgICAgICAgICAubWFwKHYgPT4gdGhpcy5jb2x1bW5zVHJhbnNmb3JtYXRpb25BcnJheVt2XSlcbiAgICAgICAgICAgIC5maWx0ZXIodiA9PiBpc05vdE51bGxPclVuZGVmaW5lZCh2KSk7XG4gICAgICAgICAgY29sdW1uR3JvdXBzSW5mb1tjb2x1bW5JbmRleEluQ2VsbHNdID0ge2JhY2tncm91bmQsIGluZGV4ZXM6IHRyYW5zZm9ybWVkQ29sdW1uSW5kZXhlcywgbGV2ZWx9O1xuXG4gICAgICAgICAgdGhpcy5maWxsQ2VsbHNGb3JHcm91cGVkQ29sdW1uKGNlbGxzLCB2YWx1ZUNvbHVtbnNJbmRleGVzLCBjb2x1bW5JbmRleEluQ2VsbHMsIGJhY2tncm91bmQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW5Hcm91cHNJbmZvW2N1cnJlbnRJbmRleF0gPSB7YmFja2dyb3VuZCwgaW5kZXhlczogW10sIGxldmVsfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxDZWxsc0Zvckdyb3VwZWRDb2x1bW4oXG4gICAgY2VsbHM6IExtclBpdm90VGFibGVDZWxsW11bXSxcbiAgICBjb2x1bW5zOiBudW1iZXJbXSxcbiAgICBjb2x1bW5JbmRleEluQ2VsbHM6IG51bWJlcixcbiAgICBiYWNrZ3JvdW5kOiBzdHJpbmdcbiAgKSB7XG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy5yb3dzVHJhbnNmb3JtYXRpb25BcnJheS5sZW5ndGg7IHJvdysrKSB7XG4gICAgICBjb25zdCByb3dJbmRleEluQ2VsbHMgPSB0aGlzLnJvd3NUcmFuc2Zvcm1hdGlvbkFycmF5W3Jvd107XG4gICAgICBpZiAoaXNOb3ROdWxsT3JVbmRlZmluZWQocm93SW5kZXhJbkNlbGxzKSkge1xuICAgICAgICBjb25zdCB7dmFsdWVzLCBkYXRhUmVzb3VyY2VzfSA9IHRoaXMuZ2V0R3JvdXBlZFZhbHVlc0ZvclJvd3NBbmRDb2xzKFtyb3ddLCBjb2x1bW5zKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmFnZ3JlZ2F0ZUFuZEZvcm1hdERhdGFWYWx1ZXModmFsdWVzLCBbcm93XSwgY29sdW1ucyk7XG4gICAgICAgIGNlbGxzW3Jvd0luZGV4SW5DZWxsc11bY29sdW1uSW5kZXhJbkNlbGxzXSA9IHtcbiAgICAgICAgICB2YWx1ZTogU3RyaW5nKGZvcm1hdHRlZFZhbHVlKSxcbiAgICAgICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgICBjc3NDbGFzczogUGl2b3RUYWJsZUNvbnZlcnRlci5ncm91cERhdGFDbGFzcyxcbiAgICAgICAgICBiYWNrZ3JvdW5kLFxuICAgICAgICAgIGlzVmFsdWU6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZ2dyZWdhdGVBbmRGb3JtYXREYXRhVmFsdWVzKHZhbHVlczogYW55W10sIHJvd3M6IG51bWJlcltdLCBjb2x1bW5zOiBudW1iZXJbXSk6IGFueSB7XG4gICAgY29uc3Qge3ZhbHVlLCBhZ2dyZWdhdGlvbn0gPSB0aGlzLmFnZ3JlZ2F0ZURhdGFWYWx1ZXModmFsdWVzLCBjb2x1bW5zKTtcbiAgICByZXR1cm4gYWdncmVnYXRpb24gPT09IERhdGFBZ2dyZWdhdGlvblR5cGUuSm9pbiA/IHZhbHVlIDogdGhpcy5mb3JtYXRHcm91cGVkVmFsdWVCeVZhbHVlVHlwZSh2YWx1ZSwgcm93cywgY29sdW1ucylcbiAgfVxuXG4gIHByaXZhdGUgYWdncmVnYXRlRGF0YVZhbHVlcyh2YWx1ZXM6IGFueVtdLCBjb2x1bW5zOiBudW1iZXJbXSk6IHt2YWx1ZTogYW55OyBhZ2dyZWdhdGlvbjogRGF0YUFnZ3JlZ2F0aW9uVHlwZX0ge1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uID0gdGhpcy5hZ2dyZWdhdGlvbkJ5Q29sdW1ucyhjb2x1bW5zKTtcbiAgICBpZiAoYWdncmVnYXRpb24gPT09IERhdGFBZ2dyZWdhdGlvblR5cGUuSm9pbikge1xuICAgICAgY29uc3QgdmFsdWVJbmRleCA9IHRoaXMuZ2V0VmFsdWVJbmRleEZvckNvbHVtbnMoY29sdW1ucyk7XG4gICAgICBjb25zdCBjb25zdHJhaW50ID0gdGhpcy5kYXRhLnZhbHVlc0NvbnN0cmFpbnRzPy5bdmFsdWVJbmRleF0gfHwgdGhpcy52YWx1ZVR5cGVJbmZvW3ZhbHVlSW5kZXhdPy5kZWZhdWx0Q29uc3RyYWludDtcbiAgICAgIHJldHVybiB7dmFsdWU6IGFnZ3JlZ2F0ZURhdGFWYWx1ZXMoYWdncmVnYXRpb24sIHZhbHVlcywgY29uc3RyYWludCwgZmFsc2UsIHRoaXMuY29uc3RyYWludERhdGEpLCBhZ2dyZWdhdGlvbn07XG4gICAgfVxuICAgIHJldHVybiB7dmFsdWU6IGFnZ3JlZ2F0ZURhdGFWYWx1ZXMoYWdncmVnYXRpb24sIHZhbHVlcyksIGFnZ3JlZ2F0aW9ufTtcbiAgfVxuXG4gIHByaXZhdGUgYWdncmVnYXRpb25CeUNvbHVtbnMoY29sdW1uczogbnVtYmVyW10pOiBEYXRhQWdncmVnYXRpb25UeXBlIHtcbiAgICBjb25zdCB2YWx1ZUluZGV4ID0gY29sdW1uc1swXSAlIHRoaXMuZGF0YS52YWx1ZVRpdGxlcy5sZW5ndGg7XG4gICAgY29uc3QgYWdncmVnYXRpb24gPSB0aGlzLmRhdGEudmFsdWVBZ2dyZWdhdGlvbnM/Llt2YWx1ZUluZGV4XTtcbiAgICByZXR1cm4gaXNWYWx1ZUFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uKSA/IGFnZ3JlZ2F0aW9uIDogRGF0YUFnZ3JlZ2F0aW9uVHlwZS5TdW07XG4gIH1cblxuICBwcml2YXRlIGZpbGxDZWxsc0ZvckNvbHVtbihjZWxsczogTG1yUGl2b3RUYWJsZUNlbGxbXVtdLCBjb2x1bW46IG51bWJlcikge1xuICAgIGNvbnN0IGNvbHVtbkluZGV4SW5DZWxscyA9IHRoaXMuY29sdW1uc1RyYW5zZm9ybWF0aW9uQXJyYXlbY29sdW1uXTtcbiAgICBpZiAoaXNOb3ROdWxsT3JVbmRlZmluZWQoY29sdW1uSW5kZXhJbkNlbGxzKSkge1xuICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy5yb3dzVHJhbnNmb3JtYXRpb25BcnJheS5sZW5ndGg7IHJvdysrKSB7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4SW5DZWxscyA9IHRoaXMucm93c1RyYW5zZm9ybWF0aW9uQXJyYXlbcm93XTtcbiAgICAgICAgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKHJvd0luZGV4SW5DZWxscykpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS52YWx1ZXNbcm93XVtjb2x1bW5dO1xuICAgICAgICAgIGNvbnN0IGRhdGFSZXNvdXJjZXMgPSB0aGlzLmRhdGFSZXNvdXJjZXM/Lltyb3ddPy5bY29sdW1uXSB8fCBbXTtcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuYWdncmVnYXRlT3JGb3JtYXRTaW5nbGVWYWx1ZSh2YWx1ZSwgY29sdW1uKTtcbiAgICAgICAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IGlzTm90TnVsbE9yVW5kZWZpbmVkKGZvcm1hdHRlZFZhbHVlKSA/IFN0cmluZyhmb3JtYXR0ZWRWYWx1ZSkgOiAnJztcbiAgICAgICAgICBjZWxsc1tyb3dJbmRleEluQ2VsbHNdW2NvbHVtbkluZGV4SW5DZWxsc10gPSB7XG4gICAgICAgICAgICB2YWx1ZTogc3RyaW5nVmFsdWUsXG4gICAgICAgICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICBjc3NDbGFzczogUGl2b3RUYWJsZUNvbnZlcnRlci5kYXRhQ2xhc3MsXG4gICAgICAgICAgICBpc1ZhbHVlOiB0cnVlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFnZ3JlZ2F0ZU9yRm9ybWF0U2luZ2xlVmFsdWUodmFsdWU6IGFueSwgY29sdW1uOiBudW1iZXIpOiBhbnkge1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uID0gdGhpcy5hZ2dyZWdhdGlvbkJ5Q29sdW1ucyhbY29sdW1uXSk7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IHRoaXMuZ2V0VmFsdWVJbmRleEZvckNvbHVtbnMoW2NvbHVtbl0pO1xuICAgIGlmIChhZ2dyZWdhdGlvbiA9PT0gRGF0YUFnZ3JlZ2F0aW9uVHlwZS5Kb2luKSB7XG4gICAgICBjb25zdCBjb25zdHJhaW50ID0gdGhpcy5kYXRhLnZhbHVlc0NvbnN0cmFpbnRzPy5bdmFsdWVJbmRleF0gfHwgdGhpcy52YWx1ZVR5cGVJbmZvW3ZhbHVlSW5kZXhdPy5kZWZhdWx0Q29uc3RyYWludDtcbiAgICAgIHJldHVybiBhZ2dyZWdhdGVEYXRhVmFsdWVzKGFnZ3JlZ2F0aW9uLCBbdmFsdWVdLCBjb25zdHJhaW50LCBmYWxzZSwgdGhpcy5jb25zdHJhaW50RGF0YSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbHVlQnlWYWx1ZVR5cGUodmFsdWUsIHZhbHVlSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsQ2VsbHNCeUdyb3VwSW50ZXJzZWN0aW9uKFxuICAgIGNlbGxzOiBMbXJQaXZvdFRhYmxlQ2VsbFtdW10sXG4gICAgcm93R3JvdXBzSW5mbzogSGVhZGVyR3JvdXBJbmZvW10sXG4gICAgY29sdW1uR3JvdXBzSW5mbzogSGVhZGVyR3JvdXBJbmZvW11cbiAgKSB7XG4gICAgY29uc3Qgcm93c0NvdW50ID0gY2VsbHMubGVuZ3RoO1xuICAgIGNvbnN0IGNvbHVtbnNDb3VudCA9IGNlbGxzWzBdPy5sZW5ndGggfHwgMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93R3JvdXBzSW5mby5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgcm93R3JvdXBJbmZvID0gcm93R3JvdXBzSW5mb1tpXTtcbiAgICAgIGlmICghcm93R3JvdXBJbmZvKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uR3JvdXBzSW5mby5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoIWNvbHVtbkdyb3Vwc0luZm9bal0pIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sdW1ucyA9IGNvbHVtbkdyb3Vwc0luZm9bal0uaW5kZXhlc1xuICAgICAgICBjb25zdCB7cm93c0luZGV4ZXMsIGNvbHVtbnNJbmRleGVzfSA9IHRoaXMuZ2V0VmFsdWVzSW5kZXhlc0Zyb21DZWxsc0luZGV4ZXMoXG4gICAgICAgICAgcm93R3JvdXBJbmZvLmluZGV4ZXMsXG4gICAgICAgICAgY29sdW1uc1xuICAgICAgICApO1xuICAgICAgICBsZXQgZm9ybWF0dGVkVmFsdWU6IHN0cmluZztcbiAgICAgICAgbGV0IGRhdGFSZXNvdXJjZXM6IERhdGFSZXNvdXJjZVtdO1xuICAgICAgICBpZiAocm93R3JvdXBJbmZvLmV4cHJlc3Npb24pIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV2YWx1YXRlRXhwcmVzc2lvbihyb3dHcm91cEluZm8uZXhwcmVzc2lvbiwgY29sdW1uc0luZGV4ZXMpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlSW5kZXggPSBjb2x1bW5zSW5kZXhlc1swXSAlIHRoaXMuZGF0YS52YWx1ZVRpdGxlcy5sZW5ndGg7XG4gICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlQnlDb25zdHJhaW50KHJlc3VsdC52YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgICAgICAgZGF0YVJlc291cmNlcyA9IHJlc3VsdC5kYXRhUmVzb3VyY2VzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaXQncyBlbm91Z2ggdG8gZmlsbCBncm91cCB2YWx1ZXMgb25seSBmcm9tIHJvdyBzaWRlXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRHcm91cGVkVmFsdWVzRm9yUm93c0FuZENvbHMocm93c0luZGV4ZXMsIGNvbHVtbnNJbmRleGVzKTtcbiAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuYWdncmVnYXRlQW5kRm9ybWF0RGF0YVZhbHVlcyhyZXN1bHQudmFsdWVzLCByb3dzSW5kZXhlcywgY29sdW1uc0luZGV4ZXMpO1xuICAgICAgICAgIGRhdGFSZXNvdXJjZXMgPSByZXN1bHQuZGF0YVJlc291cmNlc1xuICAgICAgICB9XG4gICAgICAgIGNlbGxzW2ldW2pdID0ge1xuICAgICAgICAgIHZhbHVlOiBTdHJpbmcoZm9ybWF0dGVkVmFsdWUpLFxuICAgICAgICAgIGRhdGFSZXNvdXJjZXMsXG4gICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICAgIGNzc0NsYXNzOiBQaXZvdFRhYmxlQ29udmVydGVyLmdyb3VwRGF0YUNsYXNzLFxuICAgICAgICAgIGlzVmFsdWU6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgIH1cblxuICAgICAgdGhpcy5maWxsUm93V2l0aENvbG9yKGNlbGxzLCBpLCByb3dHcm91cEluZm8sIGNvbHVtbnNDb3VudCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5Hcm91cHNJbmZvLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoY29sdW1uR3JvdXBzSW5mb1tqXSkge1xuICAgICAgICB0aGlzLmZpbGxDb2x1bW5XaXRoQ29sb3IoY2VsbHMsIGosIGNvbHVtbkdyb3Vwc0luZm9bal0sIHJvd0dyb3Vwc0luZm8sIHJvd3NDb3VudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNJbmRleGVzRnJvbUNlbGxzSW5kZXhlcyhcbiAgICByb3dzOiBudW1iZXJbXSxcbiAgICBjb2x1bW5zOiBudW1iZXJbXVxuICApOiB7IHJvd3NJbmRleGVzOiBudW1iZXJbXTsgY29sdW1uc0luZGV4ZXM6IG51bWJlcltdIH0ge1xuICAgIGNvbnN0IHJvd3NJbmRleGVzID0gcm93c1xuICAgICAgLm1hcChyb3cgPT4gdGhpcy5yb3dzVHJhbnNmb3JtYXRpb25BcnJheS5maW5kSW5kZXgodFJvdyA9PiB0Um93ID09PSByb3cpKVxuICAgICAgLmZpbHRlcihpbmRleCA9PiBpbmRleCA+PSAwKTtcbiAgICBjb25zdCBjb2x1bW5zSW5kZXhlcyA9IGNvbHVtbnNcbiAgICAgIC5tYXAoY29sdW1uID0+IHRoaXMuY29sdW1uc1RyYW5zZm9ybWF0aW9uQXJyYXkuZmluZEluZGV4KHRDb2x1bW4gPT4gdENvbHVtbiA9PT0gY29sdW1uKSlcbiAgICAgIC5maWx0ZXIoaW5kZXggPT4gaW5kZXggPj0gMCk7XG4gICAgcmV0dXJuIHtyb3dzSW5kZXhlcywgY29sdW1uc0luZGV4ZXN9O1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsUm93V2l0aENvbG9yKFxuICAgIGNlbGxzOiBMbXJQaXZvdFRhYmxlQ2VsbFtdW10sXG4gICAgcm93OiBudW1iZXIsXG4gICAgcm93R3JvdXBJbmZvOiBIZWFkZXJHcm91cEluZm8sXG4gICAgY29sdW1uc0NvdW50OiBudW1iZXJcbiAgKSB7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMucm93TGV2ZWxzOyBpIDwgY29sdW1uc0NvdW50OyBpKyspIHtcbiAgICAgIGNlbGxzW3Jvd11baV0gJiYgKGNlbGxzW3Jvd11baV0uYmFja2dyb3VuZCA9IHJvd0dyb3VwSW5mby5iYWNrZ3JvdW5kKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxDb2x1bW5XaXRoQ29sb3IoXG4gICAgY2VsbHM6IExtclBpdm90VGFibGVDZWxsW11bXSxcbiAgICBjb2x1bW46IG51bWJlcixcbiAgICBjb2x1bW5Hcm91cEluZm86IEhlYWRlckdyb3VwSW5mbyxcbiAgICByb3dHcm91cHNJbmZvOiBIZWFkZXJHcm91cEluZm9bXSxcbiAgICByb3dDb3VudDogbnVtYmVyXG4gICkge1xuICAgIGZvciAobGV0IGkgPSB0aGlzLmNvbHVtbkxldmVsczsgaSA8IHJvd0NvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IHJvd0dyb3VwSW5mbyA9IHJvd0dyb3Vwc0luZm9baV07XG4gICAgICBpZiAoIXJvd0dyb3VwSW5mbyB8fCByb3dHcm91cEluZm8ubGV2ZWwgPiBjb2x1bW5Hcm91cEluZm8ubGV2ZWwpIHtcbiAgICAgICAgY2VsbHNbaV1bY29sdW1uXSAmJiAoY2VsbHNbaV1bY29sdW1uXS5iYWNrZ3JvdW5kID0gY29sdW1uR3JvdXBJbmZvLmJhY2tncm91bmQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdENlbGxzKCk6IExtclBpdm90VGFibGVDZWxsW11bXSB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuZ2V0Um93c0NvdW50KCkgKyB0aGlzLmNvbHVtbkxldmVscztcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zQ291bnQoKSArIHRoaXMucm93TGV2ZWxzO1xuXG4gICAgY29uc3QgbWF0cml4OiBMbXJQaXZvdFRhYmxlQ2VsbFtdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW107XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAoaSA+PSB0aGlzLmNvbHVtbkxldmVscyAmJiBqID49IHRoaXMucm93TGV2ZWxzKSB7XG4gICAgICAgICAgY29uc3QgaXNEYXRhQ2xhc3MgPSB0aGlzLnJvd3NUcmFuc2Zvcm1hdGlvbkFycmF5LmluY2x1ZGVzKGkpICYmIHRoaXMuY29sdW1uc1RyYW5zZm9ybWF0aW9uQXJyYXkuaW5jbHVkZXMoaik7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0ge1xuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgZGF0YVJlc291cmNlczogW10sXG4gICAgICAgICAgICBjc3NDbGFzczogaXNEYXRhQ2xhc3MgPyBQaXZvdFRhYmxlQ29udmVydGVyLmRhdGFDbGFzcyA6IFBpdm90VGFibGVDb252ZXJ0ZXIuZ3JvdXBEYXRhQ2xhc3MsXG4gICAgICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICAgIGlzVmFsdWU6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXRyaXhbaV1bal0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5yb3dMZXZlbHMgPiAwICYmIHRoaXMuY29sdW1uTGV2ZWxzID4gMCkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnJvd0xldmVsczsgaisrKSB7XG4gICAgICAgIGNvbnN0IHJvd0hlYWRlckF0dHJpYnV0ZSA9IHRoaXMuZGF0YS5yb3dIZWFkZXJBdHRyaWJ1dGVzW2pdO1xuICAgICAgICBpZiAocm93SGVhZGVyQXR0cmlidXRlKSB7XG4gICAgICAgICAgY29uc3QgdGl0bGVSb3dTcGFuID0gdGhpcy5ub25TdGlja3lDb2x1bW5JbmRleCB8fCB0aGlzLmNvbHVtbkxldmVsc1xuICAgICAgICAgIG1hdHJpeFswXVtqXSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiByb3dIZWFkZXJBdHRyaWJ1dGUudGl0bGUsXG4gICAgICAgICAgICBjc3NDbGFzczogUGl2b3RUYWJsZUNvbnZlcnRlci5yb3dBdHRyaWJ1dGVIZWFkZXJDbGFzcyxcbiAgICAgICAgICAgIGlzQXR0cmlidXRlSGVhZGVyOiB0cnVlLFxuICAgICAgICAgICAgcm93U3BhbjogdGl0bGVSb3dTcGFuLFxuICAgICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICAgIHN0aWNreVRvcDogdGhpcy5pc0NvbHVtbkxldmVsU3RpY2t5KDApLFxuICAgICAgICAgICAgc3RpY2t5U3RhcnQ6IHRoaXMuaXNSb3dMZXZlbFN0aWNreShqKSxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJvd0hlYWRlckF0dHJpYnV0ZS5jb2xvcixcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHRoaXMuY29sdW1uTGV2ZWxzIC0gdGl0bGVSb3dTcGFuID4gMCkge1xuICAgICAgICAgICAgbWF0cml4W3RoaXMubm9uU3RpY2t5Q29sdW1uSW5kZXhdW2pdID0ge1xuICAgICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICAgIGNzc0NsYXNzOiBQaXZvdFRhYmxlQ29udmVydGVyLnJvd0F0dHJpYnV0ZUhlYWRlckNsYXNzLFxuICAgICAgICAgICAgICBpc0F0dHJpYnV0ZUhlYWRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgcm93U3BhbjogdGhpcy5jb2x1bW5MZXZlbHMgLSB0aXRsZVJvd1NwYW4sXG4gICAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJvd0hlYWRlckF0dHJpYnV0ZS5jb2xvcixcbiAgICAgICAgICAgICAgc3RpY2t5U3RhcnQ6IHRoaXMuaXNSb3dMZXZlbFN0aWNreShqKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbkxldmVsczsgaSsrKSB7XG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSB7XG4gICAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICAgICAgY3NzQ2xhc3M6IFBpdm90VGFibGVDb252ZXJ0ZXIuZW1wdHlDbGFzcyxcbiAgICAgICAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICAgICAgc3RpY2t5U3RhcnQ6IHRoaXMuaXNSb3dMZXZlbFN0aWNreShqKSxcbiAgICAgICAgICAgICAgc3RpY2t5VG9wOiB0aGlzLmlzQ29sdW1uTGV2ZWxTdGlja3koaSksXG4gICAgICAgICAgICAgIGlzSGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3dzQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5kYXRhLnJvd0hlYWRlcnMubGVuZ3RoID09PSAwICYmICh0aGlzLmRhdGEudmFsdWVUaXRsZXMgfHwgW10pLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0SGVhZGVyc0NoaWxkQ291bnQodGhpcy5kYXRhLnJvd0hlYWRlcnMsIHRoaXMucm93U2hvd1N1bXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5zQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5kYXRhLmNvbHVtbkhlYWRlcnMubGVuZ3RoID09PSAwICYmICh0aGlzLmRhdGEudmFsdWVUaXRsZXMgfHwgW10pLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBjb25zdCBudW1iZXJPZlN1bXMgPSBNYXRoLm1heCgxLCAodGhpcy5kYXRhLnZhbHVlVGl0bGVzIHx8IFtdKS5sZW5ndGgpO1xuICAgIHJldHVybiBnZXRIZWFkZXJzQ2hpbGRDb3VudCh0aGlzLmRhdGEuY29sdW1uSGVhZGVycywgdGhpcy5jb2x1bW5TaG93U3VtcywgbnVtYmVyT2ZTdW1zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlUGl2b3REYXRhKFxuICBkYXRhOiBMbXJQaXZvdFN0ZW1EYXRhLFxuICBjb25zdHJhaW50RGF0YTogQ29uc3RyYWludERhdGEsXG4gIHZhbHVlVHlwZUluZm86IFZhbHVlVHlwZUluZm9bXVxuKTogTG1yUGl2b3RTdGVtRGF0YSB7XG4gIGNvbnN0IG51bWJlck9mU3VtcyA9IE1hdGgubWF4KDEsIChkYXRhLnZhbHVlVGl0bGVzIHx8IFtdKS5sZW5ndGgpO1xuICBjb25zdCB2YWx1ZXMgPSBjb21wdXRlVmFsdWVzQnlWYWx1ZVR5cGUoZGF0YS52YWx1ZXMsIGRhdGEudmFsdWVUeXBlcywgbnVtYmVyT2ZTdW1zLCB2YWx1ZVR5cGVJbmZvKTtcbiAgY29uc3Qgc29ydGVkID0gc29ydFBpdm90RGF0YSh7Li4uZGF0YSwgdmFsdWVzfSwgY29uc3RyYWludERhdGEpO1xuICByZXR1cm4gZmlsbEV4cHJlc3Npb25zVG9EYXRhKHNvcnRlZClcbn1cblxuZnVuY3Rpb24gZmlsbEV4cHJlc3Npb25zVG9EYXRhKGRhdGE6IExtclBpdm90U3RlbURhdGEpOiBMbXJQaXZvdFN0ZW1EYXRhIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhLFxuICAgIHJvd0hlYWRlcnM6IGZpbGxFeHByZXNzaW9uc1RvSGVhZGVycyhkYXRhLnJvd0hlYWRlcnMsIGRhdGEucm93c0NvbmZpZywgMCksXG4gICAgY29sdW1uSGVhZGVyczogZmlsbEV4cHJlc3Npb25zVG9IZWFkZXJzKGRhdGEuY29sdW1uSGVhZGVycywgZGF0YS5jb2x1bW5zQ29uZmlnLCAwKSxcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWxsRXhwcmVzc2lvbnNUb0hlYWRlcnMoaGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sIGNvbmZpZ3M6IExtclBpdm90RGltZW5zaW9uQ29uZmlnW10sIGluZGV4OiBudW1iZXIpOiBMbXJQaXZvdERhdGFIZWFkZXJbXSB7XG4gIGNvbnN0IGV4cHJlc3Npb25zID0gY29uZmlncz8uW2luZGV4XT8uZXhwcmVzc2lvbnMgfHwgW11cbiAgY29uc3QgaGVhZGVyc0NvcHkgPSBbLi4uKGhlYWRlcnMgfHwgW10pXVxuICBmb3IgKGNvbnN0IGV4cHJlc3Npb24gb2YgZXhwcmVzc2lvbnMpIHtcbiAgICBjb25zdCBkYXRhSGVhZGVyRXhwcmVzc2lvbiA9IGV4dGVuZFBpdm90RXhwcmVzc2lvbihleHByZXNzaW9uLCBoZWFkZXJzKVxuICAgIGlmIChkYXRhSGVhZGVyRXhwcmVzc2lvbi5sYXN0SGVhZGVySW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgbGFzdEhlYWRlckluZGV4ID0gZGF0YUhlYWRlckV4cHJlc3Npb24ubGFzdEhlYWRlckluZGV4XG4gICAgICBjb25zdCBuZXdIZWFkZXI6IExtclBpdm90RGF0YUhlYWRlciA9IHsuLi5oZWFkZXJzQ29weVtsYXN0SGVhZGVySW5kZXhdLCBleHByZXNzaW9uczogWy4uLihoZWFkZXJzQ29weVtsYXN0SGVhZGVySW5kZXhdLmV4cHJlc3Npb25zIHx8IFtdKSwgZGF0YUhlYWRlckV4cHJlc3Npb25dfVxuICAgICAgaGVhZGVyc0NvcHkuc3BsaWNlKGxhc3RIZWFkZXJJbmRleCwgMSwgbmV3SGVhZGVyKVxuICAgIH1cbiAgfVxuXG4gIGlmIChjb25maWdzPy5baW5kZXggKyAxXSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVyc0NvcHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhlYWRlcnNDb3B5LnNwbGljZShpLCAxLCB7Li4uaGVhZGVyc0NvcHlbaV0sIGNoaWxkcmVuOiBmaWxsRXhwcmVzc2lvbnNUb0hlYWRlcnMoaGVhZGVyc0NvcHlbaV0uY2hpbGRyZW4sIGNvbmZpZ3MsIGluZGV4ICsgMSl9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzQ29weVxufVxuXG5mdW5jdGlvbiBleHRlbmRQaXZvdEV4cHJlc3Npb24oZXhwcmVzc2lvbjogTG1yUGl2b3RFeHByZXNzaW9uLCBoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSk6IExtclBpdm90RGF0YUhlYWRlckV4cHJlc3Npb24ge1xuICBjb25zdCBkYXRhSGVhZGVyT3BlcmFuZHM6IExtclBpdm90RGF0YUhlYWRlck9wZXJhbmRbXSA9IFtdO1xuICBsZXQgbGFzdEhlYWRlckluZGV4OiBudW1iZXIgPSAtMVxuXG4gIGZ1bmN0aW9uIHRyYXZlcnNlKG9wZXJhbmRzOiBMbXJQaXZvdE9wZXJhbmRbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgb3BlcmFuZCBvZiBvcGVyYW5kcyl7XG4gICAgICBpZiAob3BlcmFuZC50eXBlID09PSAnaGVhZGVyJykge1xuICAgICAgICBjb25zdCBpbmRleGVzID0gZ2V0T3BlcmFuZEluZGV4ZXNJbkhlYWRlcnMob3BlcmFuZCwgaGVhZGVycylcbiAgICAgICAgbGFzdEhlYWRlckluZGV4ID0gTWF0aC5tYXgobGFzdEhlYWRlckluZGV4LCAuLi5pbmRleGVzKVxuICAgICAgICBjb25zdCBvcGVyYW5kSGVhZGVycyA9IGluZGV4ZXMubWFwKGluZGV4ID0+IGhlYWRlcnNbaW5kZXhdKVxuICAgICAgICBkYXRhSGVhZGVyT3BlcmFuZHMucHVzaCh7Li4ub3BlcmFuZCwgaGVhZGVyczogb3BlcmFuZEhlYWRlcnN9KTtcbiAgICAgIH0gZWxzZSBpZiAob3BlcmFuZC50eXBlID09PSAnZXhwcmVzc2lvbicpIHtcbiAgICAgICAgdHJhdmVyc2Uob3BlcmFuZC5vcGVyYW5kcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhSGVhZGVyT3BlcmFuZHMucHVzaChvcGVyYW5kKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyYXZlcnNlKGV4cHJlc3Npb24ub3BlcmFuZHMpO1xuXG4gIHJldHVybiB7Li4uZXhwcmVzc2lvbiwgbGFzdEhlYWRlckluZGV4LCBvcGVyYW5kczogZGF0YUhlYWRlck9wZXJhbmRzfTtcbn1cblxuZnVuY3Rpb24gZ2V0T3BlcmFuZEluZGV4ZXNJbkhlYWRlcnMob3BlcmFuZDogTG1yUGl2b3RIZWFkZXJPcGVyYW5kLCBoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSk6IG51bWJlcltdIHtcbiAgcmV0dXJuIChoZWFkZXJzIHx8IFtdKS5yZWR1Y2U8bnVtYmVyW10+KChpbmRleGVzLCBoZWFkZXIsIGluZGV4KSA9PiB7XG4gICAgaWYgKG9wZXJhbmRDb250YWluc0hlYWRlcihvcGVyYW5kLCBoZWFkZXIpKSB7XG4gICAgICBpbmRleGVzLnB1c2goaW5kZXgpXG4gICAgfVxuICAgIHJldHVybiBpbmRleGVzXG4gIH0sIFtdKVxufVxuXG5mdW5jdGlvbiBvcGVyYW5kQ29udGFpbnNIZWFkZXIob3BlcmFuZDogTG1yUGl2b3RIZWFkZXJPcGVyYW5kLCBoZWFkZXI6IExtclBpdm90RGF0YUhlYWRlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gaGVhZGVyLnRpdGxlLm1hdGNoKG5ldyBSZWdFeHAob3BlcmFuZC52YWx1ZSkpPy5sZW5ndGggPiAwXG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVWYWx1ZXNCeVZhbHVlVHlwZShcbiAgdmFsdWVzOiBhbnlbXVtdLFxuICB2YWx1ZVR5cGVzOiBMbXJQaXZvdFZhbHVlVHlwZVtdLFxuICBudW1WYWx1ZXM6IG51bWJlcixcbiAgdmFsdWVUeXBlSW5mbzogVmFsdWVUeXBlSW5mb1tdXG4pOiBhbnlbXVtdIHtcbiAgY29uc3Qgcm93c0luZGV4ZXMgPSBbLi4uQXJyYXkodmFsdWVzLmxlbmd0aCkua2V5cygpXTtcbiAgY29uc3QgbW9kaWZpZWRWYWx1ZXMgPSBkZWVwT2JqZWN0Q29weSh2YWx1ZXMpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtVmFsdWVzOyBpKyspIHtcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSB2YWx1ZVR5cGVzICYmIHZhbHVlVHlwZXNbaV07XG4gICAgaWYgKCF2YWx1ZVR5cGUgfHwgdmFsdWVUeXBlID09PSBMbXJQaXZvdFZhbHVlVHlwZS5EZWZhdWx0KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5zQ291bnQgPSAodmFsdWVzWzBdICYmIHZhbHVlc1swXS5sZW5ndGgpIHx8IDA7XG4gICAgY29uc3QgY29sdW1uSW5kZXhlcyA9IFsuLi5BcnJheShjb2x1bW5zQ291bnQpLmtleXMoKV0uZmlsdGVyKGtleSA9PiBrZXkgJSBudW1WYWx1ZXMgPT09IGkpO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZVR5cGVJbmZvW2ldO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93c0luZGV4ZXMpIHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbkluZGV4ZXMpIHtcbiAgICAgICAgaWYgKHZhbHVlVHlwZSA9PT0gTG1yUGl2b3RWYWx1ZVR5cGUuQWxsUGVyY2VudGFnZSkge1xuICAgICAgICAgIG1vZGlmaWVkVmFsdWVzW3Jvd11bY29sdW1uXSA9IGRpdmlkZVZhbHVlcyh2YWx1ZXNbcm93XVtjb2x1bW5dLCBpbmZvLnN1bSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSBMbXJQaXZvdFZhbHVlVHlwZS5Sb3dQZXJjZW50YWdlKSB7XG4gICAgICAgICAgbW9kaWZpZWRWYWx1ZXNbcm93XVtjb2x1bW5dID0gZGl2aWRlVmFsdWVzKHZhbHVlc1tyb3ddW2NvbHVtbl0sIGluZm8uc3Vtc1Jvd3Nbcm93XSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSBMbXJQaXZvdFZhbHVlVHlwZS5Db2x1bW5QZXJjZW50YWdlKSB7XG4gICAgICAgICAgbW9kaWZpZWRWYWx1ZXNbcm93XVtjb2x1bW5dID0gZGl2aWRlVmFsdWVzKHZhbHVlc1tyb3ddW2NvbHVtbl0sIGluZm8uc3Vtc0NvbHVtbnNbY29sdW1uXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW9kaWZpZWRWYWx1ZXM7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlc1R5cGVJbmZvKHZhbHVlczogYW55W11bXSwgdmFsdWVUeXBlczogTG1yUGl2b3RWYWx1ZVR5cGVbXSwgbnVtVmFsdWVzOiBudW1iZXIpOiBWYWx1ZVR5cGVJbmZvW10ge1xuICBjb25zdCB2YWx1ZVR5cGVJbmZvID0gW107XG4gIGNvbnN0IHJvd3NJbmRleGVzID0gWy4uLkFycmF5KHZhbHVlcy5sZW5ndGgpLmtleXMoKV07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WYWx1ZXM7IGkrKykge1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHZhbHVlVHlwZXMgJiYgdmFsdWVUeXBlc1tpXTtcbiAgICBjb25zdCBjb2x1bW5zQ291bnQgPSAodmFsdWVzWzBdICYmIHZhbHVlc1swXS5sZW5ndGgpIHx8IDA7XG4gICAgY29uc3QgY29sdW1uSW5kZXhlcyA9IFsuLi5BcnJheShjb2x1bW5zQ291bnQpLmtleXMoKV0uZmlsdGVyKGtleSA9PiBrZXkgJSBudW1WYWx1ZXMgPT09IGkpO1xuXG4gICAgdmFsdWVUeXBlSW5mb1tpXSA9IGdldFZhbHVlVHlwZUluZm8odmFsdWVzLCB2YWx1ZVR5cGUsIHJvd3NJbmRleGVzLCBjb2x1bW5JbmRleGVzKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZVR5cGVJbmZvO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZVR5cGVJbmZvKHZhbHVlczogYW55W11bXSwgdHlwZTogTG1yUGl2b3RWYWx1ZVR5cGUsIHJvd3M6IG51bWJlcltdLCBjb2x1bW5zOiBudW1iZXJbXSk6IFZhbHVlVHlwZUluZm8ge1xuICBjb25zdCBjb250YWluc0RlY2ltYWwgPSBjb250YWluc0RlY2ltYWxWYWx1ZSh2YWx1ZXMsIHJvd3MsIGNvbHVtbnMpO1xuICBjb25zdCB2YWx1ZVR5cGVJbmZvOiBWYWx1ZVR5cGVJbmZvID0ge1xuICAgIGRlZmF1bHRDb25zdHJhaW50OiBjb250YWluc0RlY2ltYWwgPyBuZXcgTnVtYmVyQ29uc3RyYWludCh7ZGVjaW1hbHM6IDJ9KSA6IG51bGwsXG4gIH07XG5cbiAgaWYgKHR5cGUgPT09IExtclBpdm90VmFsdWVUeXBlLkFsbFBlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gey4uLnZhbHVlVHlwZUluZm8sIHN1bTogZ2V0TnVtZXJpY1ZhbHVlc1N1bW1hcnkodmFsdWVzLCByb3dzLCBjb2x1bW5zKX07XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTG1yUGl2b3RWYWx1ZVR5cGUuUm93UGVyY2VudGFnZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZVR5cGVJbmZvLFxuICAgICAgc3Vtc1Jvd3M6IHJvd3MucmVkdWNlKChhcnIsIHJvdykgPT4ge1xuICAgICAgICBhcnJbcm93XSA9IGdldE51bWVyaWNWYWx1ZXNTdW1tYXJ5KHZhbHVlcywgW3Jvd10sIGNvbHVtbnMpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgfSwgW10pLFxuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTG1yUGl2b3RWYWx1ZVR5cGUuQ29sdW1uUGVyY2VudGFnZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZVR5cGVJbmZvLFxuICAgICAgc3Vtc0NvbHVtbnM6IGNvbHVtbnMucmVkdWNlKChhcnIsIGNvbHVtbikgPT4ge1xuICAgICAgICBhcnJbY29sdW1uXSA9IGdldE51bWVyaWNWYWx1ZXNTdW1tYXJ5KHZhbHVlcywgcm93cywgW2NvbHVtbl0pO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgfSwgW10pLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnZhbHVlVHlwZUluZm99O1xufVxuXG5mdW5jdGlvbiBjb250YWluc0RlY2ltYWxWYWx1ZSh2YWx1ZXM6IGFueVtdW10sIHJvd3M6IG51bWJlcltdLCBjb2x1bW5zOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgaWYgKGlzVmFsdWVEZWNpbWFsKHZhbHVlc1tyb3ddW2NvbHVtbl0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVEZWNpbWFsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc051bWVyaWModmFsdWUpKSB7XG4gICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKSAlIDEgIT09IDA7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm1hdGlvbk1hcChcbiAgaGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gIHNob3dTdW1zOiBib29sZWFuW10sXG4gIGFkZGl0aW9uYWxOdW06IG51bWJlcixcbiAgbnVtYmVyT2ZTdW1zOiBudW1iZXJcbik6IG51bWJlcltdIHtcbiAgY29uc3QgYXJyYXkgPSBbXTtcbiAgaXRlcmF0ZVRocm91Z2hUcmFuc2Zvcm1hdGlvbk1hcChoZWFkZXJzLCBhZGRpdGlvbmFsTnVtLCBhcnJheSwgMCwgc2hvd1N1bXMsIG51bWJlck9mU3Vtcyk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gaXRlcmF0ZVRocm91Z2hUcmFuc2Zvcm1hdGlvbk1hcChcbiAgaGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gIGFkZGl0aW9uYWxOdW06IG51bWJlcixcbiAgYXJyYXk6IG51bWJlcltdLFxuICBsZXZlbDogbnVtYmVyLFxuICBzaG93U3VtczogYm9vbGVhbltdLFxuICBudW1iZXJPZlN1bXM6IG51bWJlclxuKSB7XG4gIGxldCBhZGRpdGlvbmFsID0gYWRkaXRpb25hbE51bTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaGVhZGVyID0gaGVhZGVyc1tpXTtcbiAgICBpZiAoaGVhZGVyLmNoaWxkcmVuKSB7XG4gICAgICBpdGVyYXRlVGhyb3VnaFRyYW5zZm9ybWF0aW9uTWFwKGhlYWRlci5jaGlsZHJlbiwgYWRkaXRpb25hbCwgYXJyYXksIGxldmVsICsgMSwgc2hvd1N1bXMsIG51bWJlck9mU3Vtcyk7XG4gICAgICBhZGRpdGlvbmFsICs9IGdldEhlYWRlckNoaWxkQ291bnQoaGVhZGVyLCBsZXZlbCwgc2hvd1N1bXMsIG51bWJlck9mU3Vtcyk7XG4gICAgfSBlbHNlIGlmIChpc05vdE51bGxPclVuZGVmaW5lZChoZWFkZXIudGFyZ2V0SW5kZXgpKSB7XG4gICAgICBhcnJheVtoZWFkZXIudGFyZ2V0SW5kZXhdID0gaSArIGFkZGl0aW9uYWw7XG4gICAgICBhZGRpdGlvbmFsICs9IChoZWFkZXIuZXhwcmVzc2lvbnMgfHwgW10pLmxlbmd0aDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcnMoaGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGFsbFJvd3MgPSAoaGVhZGVycyB8fCBbXSkucmVkdWNlKChyb3dzLCBoZWFkZXIpID0+IHtcbiAgICByb3dzLnB1c2goLi4uZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcihoZWFkZXIpKTtcbiAgICByZXR1cm4gcm93cztcbiAgfSwgW10pO1xuICByZXR1cm4gdW5pcXVlVmFsdWVzPG51bWJlcj4oYWxsUm93cyk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluZGV4ZXNGb3JIZWFkZXIocGl2b3REYXRhSGVhZGVyOiBMbXJQaXZvdERhdGFIZWFkZXIpOiBudW1iZXJbXSB7XG4gIGlmIChwaXZvdERhdGFIZWFkZXIuY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gcGl2b3REYXRhSGVhZGVyLmNoaWxkcmVuLnJlZHVjZSgocm93cywgaGVhZGVyKSA9PiB7XG4gICAgICByb3dzLnB1c2goLi4uZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcihoZWFkZXIpKTtcbiAgICAgIHJldHVybiByb3dzO1xuICAgIH0sIFtdKTtcbiAgfVxuICByZXR1cm4gW3Bpdm90RGF0YUhlYWRlci50YXJnZXRJbmRleF07XG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlcnNDaGlsZENvdW50KGhlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdLCBzaG93U3VtczogYm9vbGVhbltdLCBudW1iZXJPZlN1bXMgPSAxKTogbnVtYmVyIHtcbiAgcmV0dXJuIChoZWFkZXJzIHx8IFtdKS5yZWR1Y2UoXG4gICAgKHN1bSwgaGVhZGVyKSA9PiBzdW0gKyBnZXRIZWFkZXJDaGlsZENvdW50KGhlYWRlciwgMCwgc2hvd1N1bXMsIG51bWJlck9mU3VtcyksXG4gICAgc2hvd1N1bXNbMF0gPyBudW1iZXJPZlN1bXMgOiAwXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlckNoaWxkQ291bnQoXG4gIHBpdm90RGF0YUhlYWRlcjogTG1yUGl2b3REYXRhSGVhZGVyLFxuICBsZXZlbDogbnVtYmVyLFxuICBzaG93U3VtczogYm9vbGVhbltdLFxuICBudW1iZXJPZlN1bXMgPSAxLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgbnVtRXhwcmVzc2lvbnMgPSAocGl2b3REYXRhSGVhZGVyLmV4cHJlc3Npb25zIHx8IFtdKS5sZW5ndGhcbiAgaWYgKHBpdm90RGF0YUhlYWRlci5jaGlsZHJlbikge1xuICAgIHJldHVybiBwaXZvdERhdGFIZWFkZXIuY2hpbGRyZW4ucmVkdWNlKFxuICAgICAgKHN1bSwgaGVhZGVyKSA9PiBzdW0gKyBnZXRIZWFkZXJDaGlsZENvdW50KGhlYWRlciwgbGV2ZWwgKyAxLCBzaG93U3VtcywgbnVtYmVyT2ZTdW1zKSxcbiAgICAgIChzaG93U3Vtc1tsZXZlbCArIDFdID8gbnVtYmVyT2ZTdW1zIDogMCkgKyBudW1FeHByZXNzaW9uc1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIDEgKyBudW1FeHByZXNzaW9ucztcbn1cblxuZnVuY3Rpb24gZ2V0RGlyZWN0SGVhZGVyQ2hpbGRDb3VudChcbiAgcGl2b3REYXRhSGVhZGVyOiBMbXJQaXZvdERhdGFIZWFkZXIsXG4gIGxldmVsOiBudW1iZXIsXG4gIHNob3dTdW1zOiBib29sZWFuW10sXG4gIG51bWJlck9mU3VtcyA9IDFcbik6IG51bWJlciB7XG4gIGlmIChwaXZvdERhdGFIZWFkZXIuY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gcGl2b3REYXRhSGVhZGVyLmNoaWxkcmVuLnJlZHVjZShcbiAgICAgIChzdW0sIGhlYWRlcikgPT4gc3VtICsgZ2V0SGVhZGVyQ2hpbGRDb3VudChoZWFkZXIsIGxldmVsICsgMSwgc2hvd1N1bXMsIG51bWJlck9mU3VtcyksXG4gICAgICAwXG4gICAgKTtcbiAgfVxuICByZXR1cm4gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRQaXZvdERhdGEoZGF0YTogTG1yUGl2b3RTdGVtRGF0YSwgY29uc3RyYWludERhdGE6IENvbnN0cmFpbnREYXRhKTogTG1yUGl2b3RTdGVtRGF0YSB7XG4gIGNvbnN0IHJvd1NvcnRzID0gKGRhdGEucm93c0NvbmZpZyB8fCBbXSkubWFwKGNvbmZpZyA9PiBjb25maWcuc29ydClcbiAgY29uc3QgY29sdW1uU29ydHMgPSAoZGF0YS5jb2x1bW5zQ29uZmlnIHx8IFtdKS5tYXAoY29uZmlnID0+IGNvbmZpZy5zb3J0KVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGEsXG4gICAgcm93SGVhZGVyczogc29ydFBpdm90Um93RGF0YUhlYWRlcnMoZGF0YS5yb3dIZWFkZXJzLCByb3dTb3J0cywgZGF0YSwgY29uc3RyYWludERhdGEpLFxuICAgIGNvbHVtbkhlYWRlcnM6IHNvcnRQaXZvdENvbHVtbkRhdGFIZWFkZXJzKGRhdGEuY29sdW1uSGVhZGVycywgY29sdW1uU29ydHMsIGRhdGEsIGNvbnN0cmFpbnREYXRhKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gc29ydFBpdm90Um93RGF0YUhlYWRlcnMoXG4gIHJvd0hlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdLFxuICByb3dTb3J0czogTG1yUGl2b3RTb3J0W10sXG4gIHBpdm90RGF0YTogTG1yUGl2b3RTdGVtRGF0YSxcbiAgY29uc3RyYWludERhdGE6IENvbnN0cmFpbnREYXRhXG4pOiBMbXJQaXZvdERhdGFIZWFkZXJbXSB7XG4gIHJldHVybiBzb3J0UGl2b3REYXRhSGVhZGVyc1JlY3Vyc2l2ZShcbiAgICByb3dIZWFkZXJzLFxuICAgIDAsXG4gICAgcm93U29ydHMsXG4gICAgcGl2b3REYXRhLmNvbHVtbkhlYWRlcnMsXG4gICAgcGl2b3REYXRhLnZhbHVlcyxcbiAgICBwaXZvdERhdGEudmFsdWVUaXRsZXMgfHwgW10sXG4gICAgdHJ1ZSxcbiAgICBjb25zdHJhaW50RGF0YVxuICApO1xufVxuXG5mdW5jdGlvbiBzb3J0UGl2b3RDb2x1bW5EYXRhSGVhZGVycyhcbiAgY29sdW1uSGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gIGNvbHVtblNvcnRzOiBMbXJQaXZvdFNvcnRbXSxcbiAgcGl2b3REYXRhOiBMbXJQaXZvdFN0ZW1EYXRhLFxuICBjb25zdHJhaW50RGF0YTogQ29uc3RyYWludERhdGFcbik6IExtclBpdm90RGF0YUhlYWRlcltdIHtcbiAgcmV0dXJuIHNvcnRQaXZvdERhdGFIZWFkZXJzUmVjdXJzaXZlKFxuICAgIGNvbHVtbkhlYWRlcnMsXG4gICAgMCxcbiAgICBjb2x1bW5Tb3J0cyxcbiAgICBwaXZvdERhdGEucm93SGVhZGVycyxcbiAgICBwaXZvdERhdGEudmFsdWVzLFxuICAgIHBpdm90RGF0YS52YWx1ZVRpdGxlcyB8fCBbXSxcbiAgICBmYWxzZSxcbiAgICBjb25zdHJhaW50RGF0YVxuICApO1xufVxuXG5mdW5jdGlvbiBzb3J0UGl2b3REYXRhSGVhZGVyc1JlY3Vyc2l2ZShcbiAgaGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gIGluZGV4OiBudW1iZXIsXG4gIHNvcnRzOiBMbXJQaXZvdFNvcnRbXSxcbiAgb3RoZXJTaWRlSGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gIHZhbHVlczogYW55W11bXSxcbiAgdmFsdWVUaXRsZXM6IHN0cmluZ1tdLFxuICBpc1Jvd3M6IGJvb2xlYW4sXG4gIGNvbnN0cmFpbnREYXRhOiBDb25zdHJhaW50RGF0YVxuKTogTG1yUGl2b3REYXRhSGVhZGVyW10ge1xuICAvLyB3ZSBkb24ndCB3YW50IHRvIHNvcnQgdmFsdWVzIGhlYWRlcnNcbiAgaWYgKCFpc1Jvd3MgJiYgaXNWYWx1ZXNIZWFkZXJzKGhlYWRlcnMsIHZhbHVlVGl0bGVzKSkge1xuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG4gIGNvbnN0IHNvcnQgPSBzb3J0cyAmJiBzb3J0c1tpbmRleF07XG4gIGNvbnN0IGNvbnN0cmFpbnQgPSBnZXRDb25zdHJhaW50Rm9yU29ydChzb3J0LCBoZWFkZXJzKTtcbiAgY29uc3QgdmFsdWVzTWFwID0gY3JlYXRlSGVhZGVyc1ZhbHVlc01hcChoZWFkZXJzLCBzb3J0LCBvdGhlclNpZGVIZWFkZXJzLCB2YWx1ZXMsIHZhbHVlVGl0bGVzLCBpc1Jvd3MpO1xuICByZXR1cm4gaGVhZGVyc1xuICAgIC5tYXAoaGVhZGVyID0+ICh7XG4gICAgICAuLi5oZWFkZXIsXG4gICAgICBjaGlsZHJlbjpcbiAgICAgICAgaGVhZGVyLmNoaWxkcmVuICYmXG4gICAgICAgIHNvcnRQaXZvdERhdGFIZWFkZXJzUmVjdXJzaXZlKFxuICAgICAgICAgIGhlYWRlci5jaGlsZHJlbixcbiAgICAgICAgICBpbmRleCArIDEsXG4gICAgICAgICAgc29ydHMsXG4gICAgICAgICAgb3RoZXJTaWRlSGVhZGVycyxcbiAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgdmFsdWVUaXRsZXMsXG4gICAgICAgICAgaXNSb3dzLFxuICAgICAgICAgIGNvbnN0cmFpbnREYXRhXG4gICAgICAgICksXG4gICAgfSkpXG4gICAgLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgY29uc3QgcjFWYWx1ZSA9IGNvbnN0cmFpbnQuY3JlYXRlRGF0YVZhbHVlKHZhbHVlc01hcFtyMS50aXRsZV0sIGNvbnN0cmFpbnREYXRhKTtcbiAgICAgIGNvbnN0IHIyVmFsdWUgPSBjb25zdHJhaW50LmNyZWF0ZURhdGFWYWx1ZSh2YWx1ZXNNYXBbcjIudGl0bGVdLCBjb25zdHJhaW50RGF0YSk7XG4gICAgICBjb25zdCBtdWx0aXBsaWVyID0gIXNvcnQgfHwgc29ydC5hc2MgPyAxIDogLTE7XG4gICAgICByZXR1cm4gcjFWYWx1ZS5jb21wYXJlVG8ocjJWYWx1ZSkgKiBtdWx0aXBsaWVyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRDb25zdHJhaW50Rm9yU29ydChzb3J0OiBMbXJQaXZvdFNvcnQsIGhlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdKTogQ29uc3RyYWludCB7XG4gIGlmICgoc29ydD8ubGlzdD8udmFsdWVzIHx8IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgLy8gc29ydCBpcyBkb25lIGJ5IHZhbHVlcyBpbiBjb2x1bW5zXG4gICAgcmV0dXJuIG5ldyBOdW1iZXJDb25zdHJhaW50KHt9KTtcbiAgfVxuICByZXR1cm4gKChoZWFkZXJzIHx8IFtdKVswXSAmJiAoaGVhZGVycyB8fCBbXSlbMF0uY29uc3RyYWludCkgfHwgbmV3IFVua25vd25Db25zdHJhaW50KCk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVzSGVhZGVycyhoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSwgdmFsdWVUaXRsZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWVUaXRsZXMubGVuZ3RoID4gMSAmJlxuICAgIChoZWFkZXJzIHx8IFtdKS5ldmVyeShcbiAgICAgIChoZWFkZXIsIGluZGV4KSA9PiBpc05vdE51bGxPclVuZGVmaW5lZChoZWFkZXIudGFyZ2V0SW5kZXgpICYmIGhlYWRlci50aXRsZSA9PT0gdmFsdWVUaXRsZXNbaW5kZXhdXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJzVmFsdWVzTWFwKFxuICBoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgc29ydDogTG1yUGl2b3RTb3J0LFxuICBvdGhlclNpZGVIZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgdmFsdWVzOiBhbnlbXVtdLFxuICB2YWx1ZVRpdGxlczogc3RyaW5nW10sXG4gIGlzUm93czogYm9vbGVhblxuKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGNvbnN0IHNvcnRUYXJnZXRJbmRleGVzID0gc29ydFZhbHVlVGFyZ2V0SW5kZXhlcyhzb3J0LCBvdGhlclNpZGVIZWFkZXJzLCB2YWx1ZVRpdGxlcyk7XG4gIGlmICghc29ydFRhcmdldEluZGV4ZXMpIHtcbiAgICByZXR1cm4gKGhlYWRlcnMgfHwgW10pLnJlZHVjZSgodmFsdWVzTWFwLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlc01hcFtoZWFkZXIudGl0bGVdID0gaGVhZGVyLnRpdGxlO1xuICAgICAgcmV0dXJuIHZhbHVlc01hcDtcbiAgICB9LCB7fSk7XG4gIH1cblxuICByZXR1cm4gKGhlYWRlcnMgfHwgW10pLnJlZHVjZSgodmFsdWVzTWFwLCBoZWFkZXIpID0+IHtcbiAgICBjb25zdCByb3dzID0gaXNSb3dzID8gZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcihoZWFkZXIpIDogc29ydFRhcmdldEluZGV4ZXM7XG4gICAgY29uc3QgY29sdW1ucyA9IGlzUm93cyA/IHNvcnRUYXJnZXRJbmRleGVzIDogZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcihoZWFkZXIpO1xuICAgIHZhbHVlc01hcFtoZWFkZXIudGl0bGVdID0gZ2V0TnVtZXJpY1ZhbHVlc1N1bW1hcnkodmFsdWVzLCByb3dzLCBjb2x1bW5zKTtcbiAgICByZXR1cm4gdmFsdWVzTWFwO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGdldE51bWVyaWNWYWx1ZXNTdW1tYXJ5KHZhbHVlczogYW55W11bXSwgcm93czogbnVtYmVyW10sIGNvbHVtbnM6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgbGV0IHN1bSA9IDA7XG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tyb3ddW2NvbHVtbl07XG4gICAgICBpZiAoaXNOb3ROdWxsT3JVbmRlZmluZWQodmFsdWUpICYmIGlzTnVtZXJpYyh2YWx1ZSkpIHtcbiAgICAgICAgc3VtICs9IHRvTnVtYmVyKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZnVuY3Rpb24gc29ydFZhbHVlVGFyZ2V0SW5kZXhlcyhcbiAgc29ydDogTG1yUGl2b3RTb3J0LFxuICBvdGhlclNpZGVIZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgdmFsdWVUaXRsZXM6IHN0cmluZ1tdXG4pOiBudW1iZXJbXSB8IG51bGwge1xuICBpZiAoc29ydCAmJiBzb3J0Lmxpc3QpIHtcbiAgICBsZXQgdmFsdWVJbmRleCA9IHZhbHVlVGl0bGVzLmZpbmRJbmRleCh0aXRsZSA9PiB0aXRsZSA9PT0gc29ydC5saXN0LnZhbHVlVGl0bGUpO1xuICAgIGlmICh2YWx1ZUluZGV4ID09PSAtMSkge1xuICAgICAgaWYgKHZhbHVlVGl0bGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YWx1ZUluZGV4ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwaXZvdEhlYWRlcjogTG1yUGl2b3REYXRhSGVhZGVyID0gbnVsbDtcbiAgICBsZXQgY3VycmVudE90aGVyU2lkZUhlYWRlcnMgPSBvdGhlclNpZGVIZWFkZXJzO1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc29ydC5saXN0LnZhbHVlcyB8fCBbXSkge1xuICAgICAgaWYgKHZhbHVlLmlzU3VtbWFyeSkge1xuICAgICAgICBjb25zdCBpbmRleGVzID0gZ2V0VGFyZ2V0SW5kZXhlc0ZvckhlYWRlcnMoY3VycmVudE90aGVyU2lkZUhlYWRlcnMgfHwgW10pIHx8IFtdO1xuICAgICAgICByZXR1cm4gZmlsdGVySW5kZXhlc0J5TW9kKGluZGV4ZXMsIHZhbHVlVGl0bGVzLmxlbmd0aCwgdmFsdWVJbmRleCk7XG4gICAgICB9XG5cbiAgICAgIHBpdm90SGVhZGVyID0gKGN1cnJlbnRPdGhlclNpZGVIZWFkZXJzIHx8IFtdKS5maW5kKGhlYWRlciA9PiBoZWFkZXIudGl0bGUgPT09IHZhbHVlLnRpdGxlKTtcbiAgICAgIGlmICghcGl2b3RIZWFkZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRPdGhlclNpZGVIZWFkZXJzID0gcGl2b3RIZWFkZXIuY2hpbGRyZW4gfHwgW107XG4gICAgfVxuXG4gICAgaWYgKHBpdm90SGVhZGVyKSB7XG4gICAgICBjb25zdCB0YXJnZXRJbmRleGVzID0gaXNOb3ROdWxsT3JVbmRlZmluZWQocGl2b3RIZWFkZXIudGFyZ2V0SW5kZXgpXG4gICAgICAgID8gW3Bpdm90SGVhZGVyLnRhcmdldEluZGV4XVxuICAgICAgICA6IGdldFRhcmdldEluZGV4ZXNGb3JIZWFkZXJzKGN1cnJlbnRPdGhlclNpZGVIZWFkZXJzKTtcbiAgICAgIHJldHVybiBmaWx0ZXJJbmRleGVzQnlNb2QodGFyZ2V0SW5kZXhlcywgdmFsdWVUaXRsZXMubGVuZ3RoLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmlsdGVySW5kZXhlc0J5TW9kKGluZGV4ZXM6IG51bWJlcltdLCBtb2Q6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IG51bWJlcltdIHtcbiAgcmV0dXJuIChpbmRleGVzIHx8IFtdKS5maWx0ZXIoaW5kZXggPT4gaW5kZXggJSBtb2QgPT09IHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZGl2aWRlVmFsdWVzKHZhbHVlOiBhbnksIGRpdmlkZXI6IGFueSk6IG51bWJlciB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChpc051bWVyaWModmFsdWUpICYmIGlzTnVtZXJpYyhkaXZpZGVyKSkge1xuICAgIGlmIChkaXZpZGVyICE9PSAwKSB7XG4gICAgICByZXR1cm4gdmFsdWUgLyBkaXZpZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==