@churchillliving/se-ui-toolkit 6.53.366 → 6.53.367

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.
@@ -977,9 +977,6 @@ export class GridService {
977
977
  newRow[field].displayText = col.displayText
978
978
  ? row[col.displayText.toLowerCase()]
979
979
  : row[col.field.toLowerCase()];
980
- if (col.format && newRow[field].displayText) {
981
- newRow[field].displayText = this.datepipe.transform(newRow[field].displayText, col.format);
982
- }
983
980
  if (col.data && col.data.data) {
984
981
  newRow[field].dialogData = utilities.findKeysAndValue(col.data.data, row);
985
982
  }
@@ -1298,4 +1295,4 @@ GridService.ctorParameters = () => [
1298
1295
  { type: AlertService },
1299
1296
  { type: RequestService }
1300
1297
  ];
1301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUlyQixlQUFlLEVBS2YsY0FBYyxFQUtkLGNBQWMsRUFFZCxjQUFjLEdBQ2YsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7O0FBT25ELE1BQU0sT0FBTyxXQUFXO0lBSXRCLFlBQ1MsUUFBa0IsRUFDakIsZ0JBQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLFlBQTBCLEVBQzFCLGNBQThCO1FBSi9CLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBUnhDLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUM3QixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFDMUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO0lBT3RDLENBQUM7SUFFSjs7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LENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7cUJBQ2xDO2lCQUNEO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxnQkFBZ0IsQ0FBQyxPQUFPO1FBQ3RCLElBQUksQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtZQUN2QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRTtvQkFDakIsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3pCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Ozs7WUE3OUNGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQS9CUSxRQUFRO1lBdUJSLGdCQUFnQjtZQURoQixlQUFlO1lBRGYsWUFBWTtZQUlaLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXp5TG9hZEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgSUF1dG9Db21wbGV0ZVNhdmUsIElEcm9wRG93blJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBFR3JpZFNvcnREaXJlY3Rpb24sXG4gIEdyaWRGaWx0ZXJDb250cm9sVHlwZSxcbiAgSUdsb2JhbEZpbHRlcixcbiAgSUdyaWRGaWx0ZXIsXG4gIElHcmlkU29ydCxcbiAgRUdyaWRDb2x1bW5UeXBlLFxuICBhZGRDb2x1bW4sXG4gIGFkZEZpbHRlckNvbHVtbixcbiAgYWRkR2xvYmFsRmlsdGVyLFxuICBJR3JpZENvbHVtbixcbiAgRUdyaWRWYWxpZGF0b3IsXG4gIElHcmlkUHJvcCxcbiAgSUdyaWRQcm9wRmlsdGVyLFxuICBJR3JpZFJvd1Byb3AsXG4gIElHcmlkUmVwb3J0QnRuLFxuICBFR3JpZFJvd0FjdGlvbixcbiAgSURpYWxvZ0NvbHVtbixcbiAgRUdyaWRGb3JtYXR0ZXIsXG59IGZyb20gJy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4vYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBEcm9wZG93blNlcnZpY2UgfSBmcm9tICcuL2Ryb3Bkb3duLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4vaHlwZXJsaW5rLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4vdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJRGljdGlvbmFyeSB9IGZyb20gJy4uL21vZGVscy9jb21tb24ubW9kZWwnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHcmlkU2VydmljZSB7XG4gIHNvZnRDYWNoaW5nRmlsdGVyczogYW55ID0ge307XG4gIGFwcGx5RmlsdGVyRXZlbnQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgY29sdW1uRm9jdXNlZE91dDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGF0ZXBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgaHlwZXJsaW5rU2VydmljZTogSHlwZXJsaW5rU2VydmljZSxcbiAgICBwcml2YXRlIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXF1ZXN0U2VydmljZTogUmVxdWVzdFNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUmVjZWl2ZXMgbGF6eSBldmVudCBhbmQgcmV0dXJucyBhZnRlciBwcm9wZXIgbWFwcGluZ1xuICAgKi9cbiAgZ2V0R3JpZEZpbHRlcnMoZXZlbnQ6IExhenlMb2FkRXZlbnQsIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pOiBJR3JpZEZpbHRlcltdIHtcbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5tYXBGaWx0ZXJzKGV2ZW50LCBjb2x1bW5zKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVNdWx0aUZpbHRlckZpZWxkKGZpbHRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBmaWx0ZXJzXG4gICAqIFJlY2VpdmVzIGZpbHRlcnMgYW5kIHJldHVybnMgYXJyYXkgYWZ0ZXIgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICAgKiBhbmQgY3JlYXRpbmcgY29tbWEgc2VwYXJhdGVkIHZhbHVlcyBmb3Igc2FtZSBmaWx0ZXJzXG4gICAqL1xuICBoYW5kbGVNdWx0aUZpbHRlckZpZWxkKGZpbHRlcnM6IElHcmlkRmlsdGVyW10pOiBJR3JpZEZpbHRlcltdIHtcbiAgICByZXR1cm4gZmlsdGVyc1xuICAgICAgLm1hcCgoeCwgaSwgYXJyKSA9PlxuICAgICAgICBhcnIuc29tZShcbiAgICAgICAgICAoeSwgaWR4KSA9PlxuICAgICAgICAgICAgeS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0geC5maWVsZD8udG9Mb3dlckNhc2UoKSAmJiBpICE9PSBpZHhcbiAgICAgICAgKVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgICB2YWx1ZTogYXJyXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICh6KSA9PiB6LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5tYXAoKGEpID0+IGEudmFsdWUpXG4gICAgICAgICAgICAgICAgLmpvaW4oKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHhcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoKGYsIGksIGFycikgPT4gYXJyLmZpbmRJbmRleCgoeCkgPT4geC52YWx1ZSA9PT0gZi52YWx1ZSkgPT09IGkpO1xuICB9XG5cbiAgLy8gUHJlcGFyZSBiYXNpYyBncmlkIGZpbHRlcnNcbiAgcHJlcGFyZUJhc2ljRmlsdGVycyhcbiAgICBldmVudDogTGF6eUxvYWRFdmVudCxcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdXG4gICk6IElHcmlkRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLm1hcEZpbHRlcnMoZXZlbnQsIGNvbHVtbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBmaWx0ZXJzIGhhcyB2YWx1ZXMgdGhlbiBjb252ZXJ0cyBnbG9iYWwgZmlsdGVyIHZhbHVlcyB0eXBlIGludG8gSUdyaWRGaWx0ZXIuXG4gICAqL1xuICBwcmVwYXJlR2xvYmFsRmlsdGVycyhnbG9iYWxGaWx0ZXJzOiBJR2xvYmFsRmlsdGVyW10pOiBJR3JpZEZpbHRlcltdIHtcbiAgICBjb25zdCBnbG9iYWxEYXRhOiBJR3JpZEZpbHRlcltdID0gW107XG5cbiAgICBnbG9iYWxGaWx0ZXJzPy5mb3JFYWNoKChmaWx0ZXI6IElHbG9iYWxGaWx0ZXIpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgKCh0eXBlb2YgZmlsdGVyLnZhbHVlID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGZpbHRlci52YWx1ZSkpICYmXG4gICAgICAgICAgZmlsdGVyLnZhbHVlLmxlbmd0aCkgfHxcbiAgICAgICAgKHR5cGVvZiBmaWx0ZXIudmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKSAmJlxuICAgICAgICAgIGZpbHRlci52YWx1ZSkgfHxcbiAgICAgICAgKHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdib29sZWFuJyAmJiBmaWx0ZXIudmFsdWUgIT09IG51bGwpIHx8XG4gICAgICAgIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0VcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSAmJlxuICAgICAgICAgIGZpbHRlci52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ3wnKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBhZGQgZmlsdGVyIGZvciBzdGFydCBkYXRlXG4gICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLnNldEdsb2JhbEZpbHRlckZpZWxkKGZpbHRlciksXG4gICAgICAgICAgICBtYXRjaE1vZGU6IGZpbHRlci5tYXRjaE1vZGUgPyBmaWx0ZXIubWF0Y2hNb2RlIDogJ2d0ZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIpLFxuICAgICAgICAgICAgdGFibGVBbGlhczogZmlsdGVyLnRhYmxlQWxpYXMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBhZGQgZmlsdGVyIGZvciBlbmQgZGF0ZVxuICAgICAgICAgIGdsb2JhbERhdGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXIsIGZhbHNlKSxcbiAgICAgICAgICAgIG1hdGNoTW9kZTogZmlsdGVyLm1hdGNoTW9kZSA/IGZpbHRlci5tYXRjaE1vZGUgOiAnbHRlJyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3IgPyBmaWx0ZXIub3BlcmF0b3IgOiAnYW5kJyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEdsb2JhbEZpbHRlclZhbHVlKGZpbHRlciwgZmFsc2UpLFxuICAgICAgICAgICAgdGFibGVBbGlhczogZmlsdGVyLnRhYmxlQWxpYXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLnR5cGUgIT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSkge1xuICAgICAgICAgIGdsb2JhbERhdGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXIpLFxuICAgICAgICAgICAgbWF0Y2hNb2RlOlxuICAgICAgICAgICAgICBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUXG4gICAgICAgICAgICAgICAgPyAnaW4nXG4gICAgICAgICAgICAgICAgOiBmaWx0ZXIubWF0Y2hNb2RlLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdsb2JhbERhdGE7XG4gIH1cblxuICBzZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXI6IGFueSwgaXNTdGFydERhdGU6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nIHtcbiAgICBpZiAoZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSkge1xuICAgICAgaWYgKGlzU3RhcnREYXRlKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXIuZnJvbUZpZWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlci50b0ZpZWxkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsdGVyLmZpZWxkO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBnbG9iYWwgZmlsdGVyIHZhbHVlXG4gIHNldEdsb2JhbEZpbHRlclZhbHVlKFxuICAgIGZpbHRlcjogSUdsb2JhbEZpbHRlcixcbiAgICBpc1N0YXJ0RGF0ZTogYm9vbGVhbiA9IHRydWVcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAoZmlsdGVyLnR5cGUpIHtcbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUOlxuICAgICAgICByZXR1cm4gKGZpbHRlci52YWx1ZSBhcyBhbnlbXSkuam9pbignLCcpO1xuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVI6XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZmlsdGVyLnZhbHVlIGFzIERhdGUpO1xuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0U6XG4gICAgICAgIGxldCBkYXRlVmFsdWVzOiBzdHJpbmdbXSA9IGZpbHRlci52YWx1ZVxuICAgICAgICAgID8gZmlsdGVyLnZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJ3wnKVxuICAgICAgICAgIDogW107XG4gICAgICAgIGlmIChkYXRlVmFsdWVzICYmIGRhdGVWYWx1ZXMubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICBsZXQgZGF0ZVZhbHVlOiBEYXRlID0gaXNTdGFydERhdGVcbiAgICAgICAgICAgID8gbmV3IERhdGUoZGF0ZVZhbHVlc1swXSlcbiAgICAgICAgICAgIDogbmV3IERhdGUoZGF0ZVZhbHVlc1sxXSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZShkYXRlVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g6XG4gICAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICBjaGVja1ZhbGlkaXR5KGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIHJvdzogYW55KSB7XG4gICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGNvbHVtbnMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGlmIChpdGVtLnZhbGlkYXRpb25zICYmICFpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgIGl0ZW0uZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICAgIGl0ZW0uaXN2YWxpZCA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS52YWxpZGF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG1pbk1heFZhbGlkRGF0ZSA9IHV0aWxpdGllcy5jYWxlbmRlck1pbk1heFZhbHVlKFxuICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSxcbiAgICAgICAgICAgIGlcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gaXRlbS52YWxpZGF0aW9ucyAmJiBpdGVtLmhlYWRlcjtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUkVRVUlSRUQgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICFpdGVtLmhpZGRlbiAmJlxuICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSByb3dbaXRlbS5maWVsZF1cbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYCR7dmFsaWR9IGlzIHJlcXVpcmVkYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUlOTEVOR1RIICYmXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPiBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWluaW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUFYTEVOR1RIICYmXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWF4aW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IFxuICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUFYT1BUSU9OUyBcblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIG9wdGlvbnM6bnVtYmVyPTE7XG4gICAgICAgICAgICB2YXIgdmFsdWU9cm93W2l0ZW0uZmllbGRdO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocm93W2l0ZW0uZmllbGRdLCAnaXRlbS52YWx1ZScpO1xuICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB2YWx1ZS5sZW5ndGggLSAxOyB4KyspIHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlW3hdID09ICc7Jykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9ibHVlO3JlZDtncmVlbiBtYXg9M1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIC8vIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICBvcHRpb25zIDw9IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBtYXhpbXVtICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufSBvcHRpb24ke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbj4xPydzJzonJ31gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUlOSU1VTSAmJlxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgICAgbWluTWF4VmFsaWREYXRlID09PSAnbWluaW11bSdcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgTWluaW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2l0ZW0uZmllbGRdIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPiBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBNaW5pbXVtICR7dmFsaWR9ICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufWBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUFYSU1VTSAmJlxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgICAgbWluTWF4VmFsaWREYXRlID09PSAnZ3JlYXRlcidcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgTWF4aW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2l0ZW0uZmllbGRdID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBNYXhpbXVtICR7dmFsaWR9ICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufWBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUEFUVEVSTiAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXS5tYXRjaChpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5tYXRjaChpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5OVU1FUklDICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdLnRvU3RyaW5nKCkubWF0Y2goL14oMHxbLSgpMS05XVxcZCopJC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmIHJvd1tpdGVtLmZpZWxkXS5tYXRjaCgvXigwfFsxLTldXFxkKikkLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgRW50ZXIgJHtpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGV9IGZvciAke3ZhbGlkfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUEhPTkUgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oPz0uKlswLTldKVstKCkwLTlcXHNdKyQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oPz0uKlswLTldKVstKCkwLTlcXHNdKyQvKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYEVudGVyIHZhbGlkICR7dmFsaWR9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuREVDSU1BTCAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXigwfFstKCkxLTldXFxkKikoXFwuXFxkKyk/JC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXigwfFsxLTldXFxkKikoXFwuXFxkKyk/JC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYEVudGVyICR7aXRlbS52YWxpZGF0aW9uc1tpXS50eXBlfSBmb3IgJHt2YWxpZH1gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLkVNQUlMICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAubWF0Y2goL15bYS16QS1aMC05Ll8tXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLDZ9JC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXVxuICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5tYXRjaCgvXlthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsNn0kLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGBFbnRlciB2YWxpZCAke3ZhbGlkfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzVmFsaWQ7XG4gIH1cblxuICBzZXRFcnJvck1lc3NhZ2UoaXRlbTogSUdyaWRDb2x1bW4sIGVycm9yTWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaXRlbS5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgaXRlbS5pc3ZhbGlkID0gZmFsc2U7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gc2V0IGJhc2ljIGZpbHRlciB2YWx1ZVxuICBzZXRCYXNpY0ZpbHRlclZhbHVlKGZpbHRlcjogYW55KTogYW55IHtcbiAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZShmaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZmlsdGVyID8gMSA6IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbVxuICAgKiBSZWNlaXZlcyBsYXp5IGV2ZW50IGFuZCByZXR1cm5zIHNvcnQgYXJyYXlcbiAgICovXG4gIGdldEdyaWRTb3J0cyhcbiAgICB7IG11bHRpU29ydE1ldGEgfTogTGF6eUxvYWRFdmVudCxcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdXG4gICk6IElHcmlkU29ydFtdIHtcbiAgICByZXR1cm4gKG11bHRpU29ydE1ldGEgfHwgW10pLm1hcCgoeyBmaWVsZCwgb3JkZXIgfSwgaSk6IGFueSA9PiAoe1xuICAgICAgZmllbGQsXG4gICAgICBkaXJlY3Rpb246IG9yZGVyID4gMCA/IEVHcmlkU29ydERpcmVjdGlvbi5BU0MgOiBFR3JpZFNvcnREaXJlY3Rpb24uREVTQyxcbiAgICAgIHByaW9yaXR5OiBpICsgMSxcbiAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBIYW5kbGVzIGRlZmF1bHQgYW5kIGxvb2t1cCBmaWx0ZXJzXG4gICAqL1xuICBtYXBGaWx0ZXJzKGV2ZW50OiBhbnksIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pOiBJR3JpZEZpbHRlcltdIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBJR3JpZEZpbHRlcltdID0gW107XG4gICAgT2JqZWN0LmVudHJpZXMoZXZlbnQuZmlsdGVycykuZm9yRWFjaCgoW2ZpZWxkLCB2YWx1ZV06IGFueSkgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICh2YWx1ZSBhcyBJR3JpZEZpbHRlcltdKS5mb3JFYWNoKFxuICAgICAgICAgICh7IG1hdGNoTW9kZSwgb3BlcmF0b3IsIHZhbHVlOiBmaWx0ZXIgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRCYXNpY0ZpbHRlclZhbHVlKGZpbHRlciksXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlLnZhbHVlICE9PSAnJykge1xuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGU6ICdlcXVhbHMnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgICBpZiAodmFsdWUudmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiAnZXF1YWwnLFxuICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKHZhbHVlLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICh2YWx1ZS52YWx1ZSB8fCBbXSkuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHgudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgcGFnZSBudW1iZXJcbiAgICovXG4gIGdldEdyaWRQYWdpbmF0aW9uKGV2ZW50OiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiBpc05hTihldmVudC5maXJzdCAvIGV2ZW50LnJvd3MpID8gMSA6IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cyArIDE7XG4gIH1cblxuICAvLyBnZXQgZm9ybWF0dGVkIGRhdGVcbiAgZ2V0Rm9ybWF0dGVkRGF0ZSh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGAke3ZhbHVlfSBaYCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG4gIH1cblxuICAgLy8gY2hhbmdlIHJvdyBrZXkgYW5kIHZhbHVlIHdoZW4gdXNpbmcgc2V0R3JpZFJvd1Byb3BWYWx1ZSBmdW5jdGlvblxuICAgc2V0Um93VmFsdWUocm93RGF0YTogYW55KSB7XG4gICAgT2JqZWN0LmtleXMocm93RGF0YSk/LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgaWYocm93ID09PSBFR3JpZFJvd0FjdGlvbi5ERUxFVEVCVE4gfHwgcm93ID09PSBFR3JpZFJvd0FjdGlvbi5FRElUQlROKXtcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbcm93XTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICByb3dEYXRhW3Jvd10gJiZcbiAgICAgICAgdHlwZW9mKHJvd0RhdGFbcm93XSkgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHJvd0RhdGFbcm93XT8uYWN0aW9uPy5maWVsZFxuICAgICAgKSB7XG4gICAgICAgIGlmKHJvd0RhdGFbcm93XT8uZXh0cmFGaWVsZCl7XG4gICAgICAgICAgZGVsZXRlIHJvd0RhdGFbcm93XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3dEYXRhW3Jvd10gPSByb3dEYXRhW3Jvd10/LnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcm93RGF0YTtcbiAgfVxuXG4gIC8vIGNvbnZlcnQgcm93IGFjdGlvbnMgb2JqZWN0IGludG8gc2ltcGxlIHZhbHVlXG4gIHNldEdyaWRSb3dEYXRhKHJvd0RhdGEpe1xuICAgIGlmKEFycmF5LmlzQXJyYXkocm93RGF0YSkpe1xuICAgICAgcm93RGF0YS5mb3JFYWNoKChyb3cpPT57XG4gICAgICAgIHJvdyA9IHRoaXMuc2V0Um93VmFsdWUocm93KTtcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd0RhdGEgPSB0aGlzLnNldFJvd1ZhbHVlKHJvd0RhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gcm93RGF0YTtcbiAgfVxuXG4gIC8vIGdldCBhbGxvd1NhdmUgdHJ1ZSByb3cgbGlzdFxuICBnZXRBbGxvd1NhdmVSb3dsaXN0KHJvd3NEYXRhOiBhbnlbXSA9IFtdLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKSB7XG4gICAgcm93c0RhdGEgPSB0aGlzLnNldERhdGFGaWVsZHMocm93c0RhdGEpO1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBJR3JpZENvbHVtbikgPT4ge1xuICAgICAgbGV0IGZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dTYXZlID09PSBmYWxzZSkge1xuICAgICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBsZXQgb2JqID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgICAgICBpZiAob2JqPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvYmouZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoeC5pbmNsdWRlcygnX29iaicpICYmIHR5cGVvZiByb3dbeF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHJvd1t4XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIHJvd1tmaWVsZF07XG4gICAgICAgICAgcm93ID0gdGhpcy5zZXRSb3dWYWx1ZShyb3cpO1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTikge1xuICAgICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSByb3dbZmllbGRdXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkNIQVIpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnWScgOiAnTic7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5OVU1FUklDKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJzEnIDogJzAnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQk9PTEVBTikge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICdoaDptbSBhJyk7XG4gICAgICAgICAgfSBlbHNlIGlmICghY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zaG93VGltZSkge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmICFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHJvd1tmaWVsZF0udG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHJvd3NEYXRhO1xuICB9XG5cbiAgLy8gZ2V0IGFsbG93U2F2ZSB0cnVlIHx8IHVuZGVmaW5lIHJvd1xuICBnZXRBbGxvd1NhdmVSb3cocm93SW5mbzoge30gPSB7fSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIGxldCByb3cgPSB7IC4uLnJvd0luZm8gfTtcbiAgICByb3cgPSB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIocm93KTtcbiAgICByb3cgPSB0aGlzLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGxldCBmaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoY29sdW1uLmFsbG93U2F2ZSA9PSBmYWxzZSkge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93KVxuICAgICAgICBrZXlzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICBpZiAoeC5pbmNsdWRlcygnX29iaicpICYmIHR5cGVvZiByb3dbeF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBkZWxldGUgcm93W3hdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5cy5maW5kKCh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gcm93W2ZpZWxkXVxuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQ0hBUikge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnWScgOiAnTic7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuTlVNRVJJQykge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnMScgOiAnMCc7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQk9PTEVBTikge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICdoaDptbSBhJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2hvd1RpbWUpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0ocm93W2ZpZWxkXSwgJ3l5eXktTU0tZGQgSEg6bW06c3MnKTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmICFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSByb3dbZmllbGRdLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZENvbHVtbihjb2x1bW5JbmZvOiBhZGRDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKGNvbHVtbkluZm8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgICA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgICAgOiAnbGFiZWwnO1xuICAgICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICAgIDogJ3ZhbHVlJztcbiAgICB9IGVsc2UgaWYgKGNvbHVtbkluZm8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRykge1xuICAgICAgaWYgKCFjb2x1bW5JbmZvLmZpbHRlcmluZyAmJiAhY29sdW1uSW5mby5maWx0ZXIpIHtcbiAgICAgICAgY29sdW1uSW5mby5maWx0ZXJpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW5JbmZvLnBhcmFtcyAmJiAhY29sdW1uSW5mby5kYXRhKSB7XG4gICAgICAgIGNvbHVtbkluZm8uZGF0YSA9IGNvbHVtbkluZm8ucGFyYW1zO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb2x1bW46IElHcmlkQ29sdW1uID0ge1xuICAgICAgYWxsb3dTZWFyY2g6IGNvbHVtbkluZm8uYWxsb3dTZWFyY2gsXG4gICAgICBhbGxvd0F1dG9Db21wbGV0ZVNhdmU6IGNvbHVtbkluZm8uYWxsb3dBdXRvQ29tcGxldGVTYXZlLFxuICAgICAgdW5pcXVlS2V5OiBjb2x1bW5JbmZvLnVuaXF1ZUtleSxcbiAgICAgIGZpZWxkOiBjb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBjb2x1bW5JbmZvLmhlYWRlcixcbiAgICAgIHN0eWxlOiBjb2x1bW5JbmZvLnN0eWxlLFxuICAgICAgdHlwZTogY29sdW1uSW5mby50eXBlLFxuICAgICAgZm9ybWF0OiBjb2x1bW5JbmZvLmZvcm1hdCxcbiAgICAgIGRhdGE6IGNvbHVtbkluZm8uZGF0YSxcbiAgICAgIGZpbHRlcmluZzogY29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBoaWRkZW46IGNvbHVtbkluZm8uaGlkZGVuLFxuICAgICAgc29ydGluZzogY29sdW1uSW5mby5zb3J0aW5nLFxuICAgICAgZmlsdGVyOiBjb2x1bW5JbmZvLmZpbHRlcixcbiAgICAgIGh5cGVybGluazogY29sdW1uSW5mby5oeXBlcmxpbmssXG4gICAgICB0YWJsZUFsaWFzOiBjb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBsaW5rSWQ6IGNvbHVtbkluZm8ubGlua0lkLFxuICAgICAgbWludXRlc0ludGVydmFsOiBjb2x1bW5JbmZvLm1pbnV0ZXNJbnRlcnZhbCxcbiAgICAgIHBhcmFtczogY29sdW1uSW5mby5wYXJhbXMsXG4gICAgICBzaG93T3B0aW9uOiBjb2x1bW5JbmZvLnNob3dPcHRpb24sXG4gICAgICBkaXNwbGF5VGV4dDogY29sdW1uSW5mby5kaXNwbGF5VGV4dCxcbiAgICAgIHRhcmdldDogY29sdW1uSW5mby50YXJnZXQsXG4gICAgICBkaXNhYmxlZDogY29sdW1uSW5mby5kaXNhYmxlZCxcbiAgICAgIGFsbG93U2F2ZTogY29sdW1uSW5mby5hbGxvd1NhdmUsXG4gICAgICBhbGxvd0VkaXQ6IGNvbHVtbkluZm8uYWxsb3dFZGl0LFxuICAgICAgZWRpdGFibGU6IGNvbHVtbkluZm8uZWRpdGFibGUsXG4gICAgICBlZGl0TGluazogY29sdW1uSW5mby5lZGl0TGluayxcbiAgICAgIHNhdmVBc1N0cmluZzogY29sdW1uSW5mby5zYXZlQXNTdHJpbmcsXG4gICAgICBjb21wb25lbnQ6IGNvbHVtbkluZm8uY29tcG9uZW50LFxuICAgICAgb25DbGljazogY29sdW1uSW5mby5vbkNsaWNrLFxuICAgICAgb25SZXR1cm46IGNvbHVtbkluZm8ub25SZXR1cm4sXG4gICAgICBvbkZvY3VzT3V0OiBjb2x1bW5JbmZvLm9uRm9jdXNPdXQsXG4gICAgICBvbkNoYW5nZTogY29sdW1uSW5mby5vbkNoYW5nZSxcbiAgICAgIGFnZ3JlZ2F0ZTogY29sdW1uSW5mby5hZ2dyZWdhdGUsXG4gICAgICBmb3JtYXR0ZXI6IGNvbHVtbkluZm8uZm9ybWF0dGVyLFxuICAgICAgcGVybWlzc2lvbnM6IGNvbHVtbkluZm8ucGVybWlzc2lvbnMsXG4gICAgICBvcHRpb25MYWJlbDogY29sdW1uSW5mby5vcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvblZhbHVlOiBjb2x1bW5JbmZvLm9wdGlvblZhbHVlLFxuICAgICAgZHJvcERvd25Qcm9wOiBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCxcbiAgICAgIHNob3dUaW1lOiBjb2x1bW5JbmZvLnNob3dUaW1lLFxuICAgICAgdGltZU9ubHk6IGNvbHVtbkluZm8udGltZU9ubHksXG4gICAgICBsb29rdXBDb250cm9sOiBjb2x1bW5JbmZvLmxvb2t1cENvbnRyb2wsXG4gICAgICBkaXNwbGF5RmllbGQ6IGNvbHVtbkluZm8uZGlzcGxheUZpZWxkLFxuICAgICAgaWNvbjogY29sdW1uSW5mby5pY29uLFxuICAgICAgY29sb3I6IGNvbHVtbkluZm8uY29sb3IsXG4gICAgICBpZDogY29sdW1uSW5mby5pZCxcbiAgICAgIHZhbHVlOiBjb2x1bW5JbmZvLnZhbHVlLFxuICAgICAgdmFsaWRhdGlvbnM6IGNvbHVtbkluZm8udmFsaWRhdGlvbnMsXG4gICAgfTtcblxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBBZGRpbmcgUmVwb3J0IEJ1dHRvbiBGdW5jdGlvbiBmb3IgR3JpZFxuICBhZGRSZXBvcnRCdG4oY29sdW1uSW5mbzogSUdyaWRSZXBvcnRCdG4pIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuUkVQT1JUO1xuICAgIHJldHVybiBjb2x1bW5JbmZvO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBpbnB1dCBncmlkIGNvbHVtblxuICBhZGRJbnB1dENvbHVtbihcbiAgICBmaWx0ZXJDb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBmaWx0ZXJDb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVULFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGZpbHRlckNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGZpbHRlckNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBudW1lcmljIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkTnVtZXJpY0NvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVCxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgY2FsZW5kYXIgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRDYWxlbmRhckNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29sdW1uSW5mby50eXBlID0gY29sdW1uSW5mby50eXBlID8gY29sdW1uSW5mby50eXBlIDogRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBib29sZWFuIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkQm9vbGVhbkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICAoY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pLFxuICAgICAgICAoY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YLFxuICAgICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuIC8vIGFkZCBMb29rVXAgY29sdW1uIGZvciBHcmlkXG4gYWRkTG9va1VwQ29sdW1uKGNvbHVtbkluZm86IElEaWFsb2dDb2x1bW4sIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlKTogSUdyaWRDb2x1bW4ge1xuICBpZiAoc2hvd0ZpbHRlcikge1xuICAgIGNvbHVtbkluZm8uZmlsdGVyID0geyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVULCBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pIH07XG4gIH1cbiAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVDtcbiAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xufVxuXG4vLyBhZGQgZGlhbG9nIGNvbHVtbiBmb3IgR3JpZFxuIGFkZERpYWxvZ0NvbHVtbihjb2x1bW5JbmZvOiBJRGlhbG9nQ29sdW1uLCBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSk6IElHcmlkQ29sdW1uIHtcbiAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVULCBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pIH07XG4gIH1cbiAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRztcbiAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuIH1cblxuICAvLyBhZGQgQnV0dG9uIGZvciBncmlkIGNvbHVtblxuICBhZGRCdXR0b25Db2x1bW4oY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5BRERfQlVUVE9OO1xuICAgIGlmICghY29sdW1uSW5mby5maWVsZCkge1xuICAgICAgY29sdW1uSW5mby5maWVsZCA9IGNvbHVtbkluZm8udmFsdWUgPyBjb2x1bW5JbmZvLnZhbHVlIDogY29sdW1uSW5mby5pY29uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgQXV0b0NvbXBsZXRlIGZvciBncmlkIGNvbHVtblxuICBhZGRBdXRvQ29tcGxldGUoY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEU7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gU2VhcmNoIEF1dG9Db21wbGV0ZSBEYXRhIGZvciBHcmlkXG4gIGdldEF1dG9Db21wbGV0ZURhdGEoXG4gICAgY29sdW1uPzogYW55LFxuICAgIHVuaXF1ZUtleT86IHN0cmluZyxcbiAgICBmaWx0ZXJzPzogYW55W10sXG4gICAgc2VhcmNoOiBzdHJpbmcgPSAnJ1xuICApOiBhbnkge1xuICAgIHRoaXMucmVxdWVzdFNlcnZpY2VcbiAgICAgIC5nZXQ8YW55W10sIGFueT4oJy9EYXRhL0ZldGNoJywgeyB1bmlxdWVLZXk6IHVuaXF1ZUtleSwgZmlsdGVycyB9KVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgLy8gIGNvbnNvbGUubG9nKCdnZXQgcmVzcG9uc2UnLCByZXNwb25zZSwgJ3NlYXJjaCB3YXMnLCBzZWFyY2gpXG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBsZXQgZXhpc3RJblJlY29yZCA9IHJlc3BvbnNlLnJlY29yZHM/LnNvbWUoXG4gICAgICAgICAgICAocmVjb3JkKSA9PlxuICAgICAgICAgICAgICByZWNvcmRbY29sdW1uLmRpc3BsYXlGaWVsZF0gJiZcbiAgICAgICAgICAgICAgcmVjb3JkW2NvbHVtbi5kaXNwbGF5RmllbGRdPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgIHNlYXJjaD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFleGlzdEluUmVjb3JkKSB7XG4gICAgICAgICAgICByZXNwb25zZS5yZWNvcmRzLnVuc2hpZnQoeyBbY29sdW1uLmRpc3BsYXlGaWVsZF06IHNlYXJjaCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29sdW1uLmRhdGEgPSB0aGlzLnNldERhdGFGaWVsZHMocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICB9KTtcbiAgfVxuIGFzeW5jIGFkZEF1dG9Db21wbGV0ZVZhbHVlKHVuaXF1ZUtleTogSUF1dG9Db21wbGV0ZVNhdmUsIHZhbHVlOmFueSwgY29sdW1uOmFueSwgcm93OmFueSkge1xuICBsZXQgbmV3VmFsdWUgPSB7fVxuXG4gIGZvcih2YXIgaSA9MDtpPHVuaXF1ZUtleS52YWx1ZXMubGVuZ3RoOyBpKyspe1xuICAgIGlmKHVuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpPT1jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCl8fHVuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpPT1jb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpKXtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdtYXRjaGluZyBOYW1lJywgY29sdW1uLmZpZWxkLCBjb2x1bW4uZGlzcGxheUZpZWxkLCB1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIG5ld1ZhbHVlW3VuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZV09dmFsdWU7XG4gICAgXG4gICAgfWVsc2V7XG4gICAgICBuZXdWYWx1ZVt1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWVdPXRoaXMuZ2V0U29mdENvZGluZ1ZhbHVlKHVuaXF1ZUtleS52YWx1ZXNbaV0udmFsdWUsIHJvdylcbiAgICB9IFxuICB9XG5cblxuICAgIHRoaXMucmVxdWVzdFNlcnZpY2VcbiAgICAgIC5nZXQ8YW55W10sIGFueT4oJy9EYXRhL1NhdmUnLCB7IHVuaXF1ZUtleTp1bmlxdWVLZXkubmFtZSwgIHZhbHVlczogbmV3VmFsdWUgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgKHtlcnJvcn0pPT57XG4gICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdzdWNjZXNzJztcbiAgICAgIH0pO1xuICB9XG4gIGdldFNvZnRDb2RpbmdWYWx1ZSh2YWx1ZSwgcm93KXtcbiAgICBsZXQgcmV0dXJuVmFsdWU7XG4gICAgaWYodmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygneycpJiZ2YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd9Jykpe1xuICAgICAgdmFsdWU9dmFsdWUucmVwbGFjZShcIntcIixcIlwiKS5yZXBsYWNlKFwifVwiLFwiXCIpO1xuICAgICAgbGV0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgbGV0IGtleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIHJldHVyblZhbHVlPXJvd1trZXldO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuVmFsdWU9dmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBkcm9wZG93biBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZERyb3Bkb3duQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSxcbiAgICBkcm9wRG93blByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuRFJPUERPV047XG4gICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgOiAnbGFiZWwnO1xuICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgIDogJ3ZhbHVlJztcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EUk9QRE9XTixcbiAgICAgICAgZGF0YTpcbiAgICAgICAgICAhY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhICYmICFkcm9wRG93blByb3AgJiYgY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgOiBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGRyb3BEb3duUHJvcCkge1xuICAgICAgY29sdW1uSW5mby5kcm9wRG93blByb3AgPSBkcm9wRG93blByb3A7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBkcm9wRG93blByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBjb2x1bW5JbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICAgIH1cbiAgfVxuICAvLyBhZGQgTXVsdGlTZWxlY3REcm9wRG93biBncmlkIGNvbHVtblxuICBhZGRNdWx0aVNlbGVjdERyb3BEb3duQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSxcbiAgICBtdWx0aVNlbGVjdFByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA6ICdsYWJlbCc7XG4gICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgOiAndmFsdWUnO1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVDtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVCxcbiAgICAgICAgZGF0YTpcbiAgICAgICAgICAhY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhICYmICFtdWx0aVNlbGVjdFByb3AgJiYgY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgOiBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG11bHRpU2VsZWN0UHJvcCkge1xuICAgICAgY29sdW1uSW5mby5kcm9wRG93blByb3AgPSBtdWx0aVNlbGVjdFByb3A7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gbXVsdGlTZWxlY3RQcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBtdWx0aVNlbGVjdFByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IG11bHRpU2VsZWN0UHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IG11bHRpU2VsZWN0UHJvcC5maWx0ZXJzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBjb2x1bW5JbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm86IGFkZENvbHVtbikge1xuICAgIGlmIChjb2x1bW5JbmZvLmZpbHRlciAmJiBjb2x1bW5JbmZvLmZpbHRlci5zaG93RmlsdGVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHNldERyb3Bkb3duRGF0YShcbiAgICBjb2x1bW46IElHcmlkQ29sdW1uLFxuICAgIHVuaXF1ZUtleTogc3RyaW5nLFxuICAgIHZhbHVlUHJvcDogc3RyaW5nLFxuICAgIGxhYmVsUHJvcDogc3RyaW5nLFxuICAgIGZpbHRlcnM6IGFueVtdLFxuICAgIHJvdz86IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgKTogUHJvbWlzZTxhbnk+IHwgYW55IHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93blNlcnZpY2VcbiAgICAgIC5zZXREcm9wRG93bkxpc3QodW5pcXVlS2V5LCB2YWx1ZVByb3AsIGxhYmVsUHJvcCwgZmlsdGVycylcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfZGF0YSddID0gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHVtbi5kYXRhID0gcmVzO1xuICAgICAgICAgIGlmIChjb2x1bW4uZmlsdGVyICYmIGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ2Ryb3Bkb3duJykge1xuICAgICAgICAgICAgY29sdW1uLmZpbHRlci5kYXRhID0gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgY29sdW1uIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEZpbHRlckNvbHVtbihmaWx0ZXJDb2x1bW5JbmZvOiBhZGRGaWx0ZXJDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29uc3QgY29sdW1uOiBhbnkgPSB7XG4gICAgICBmaWVsZDogZmlsdGVyQ29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogZmlsdGVyQ29sdW1uSW5mby5oZWFkZXIsXG4gICAgICBmaWx0ZXI6IHsgdHlwZTogZmlsdGVyQ29sdW1uSW5mby5maWx0ZXIgfSxcbiAgICAgIGZpbHRlcmluZzogZmlsdGVyQ29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBoaWRkZW46IGZpbHRlckNvbHVtbkluZm8uaGlkZGVuLFxuICAgICAgc3R5bGU6IGZpbHRlckNvbHVtbkluZm8uc3R5bGUsXG4gICAgICB0YWJsZUFsaWFzOiBmaWx0ZXJDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBwZXJtaXNzaW9uczogZmlsdGVyQ29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBkYXRlIGdyaWQgY29sdW1uIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZERhdGVDb2x1bW4oZGF0ZUNvbHVtbkluZm86IGFkZEZpbHRlckNvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb25zdCBjb2x1bW46IElHcmlkQ29sdW1uID0ge1xuICAgICAgZmllbGQ6IGRhdGVDb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBkYXRlQ29sdW1uSW5mby5oZWFkZXIsXG4gICAgICB0eXBlOiBkYXRlQ29sdW1uSW5mby50eXBlID8gZGF0ZUNvbHVtbkluZm8udHlwZSA6IEVHcmlkQ29sdW1uVHlwZS5EQVRFLFxuICAgICAgZmlsdGVyaW5nOiBkYXRlQ29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBmaWx0ZXI6IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSIH0sXG4gICAgICBmb3JtYXQ6IGRhdGVDb2x1bW5JbmZvLmZvcm1hdCxcbiAgICAgIHN0eWxlOiBkYXRlQ29sdW1uSW5mby5zdHlsZSxcbiAgICAgIHRhYmxlQWxpYXM6IGRhdGVDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBkaXNhYmxlZDogZGF0ZUNvbHVtbkluZm8uZGlzYWJsZWQsXG4gICAgICBhbGxvd1NhdmU6IGRhdGVDb2x1bW5JbmZvLmFsbG93U2F2ZSxcbiAgICAgIHBlcm1pc3Npb25zOiBkYXRlQ29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICAgIGNvbXBvbmVudDogZGF0ZUNvbHVtbkluZm8uY29tcG9uZW50LFxuICAgICAgc2hvd1RpbWU6IGRhdGVDb2x1bW5JbmZvLnNob3dUaW1lLFxuICAgICAgdGltZU9ubHk6IGRhdGVDb2x1bW5JbmZvLnRpbWVPbmx5LFxuICAgICAgZGF0YTogZGF0ZUNvbHVtbkluZm8uZGF0YSxcbiAgICAgIGhpZGRlbjogZGF0ZUNvbHVtbkluZm8uaGlkZGVuLFxuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIHNldExvb2tVcEZpbHRlcihjb2x1bW46IGFueSwgZGlhbG9nU2VydmljZTogYW55KSB7XG4gICAgaWYgKGNvbHVtbi5sb29rdXBDb250cm9sKSB7XG4gICAgICBsZXQgZGF0YVZhbHVlOiBhbnlbXSA9IFtdO1xuICAgICAgbGV0IGRhdGFLZXk6IGFueVtdID0gW107XG4gICAgICBsZXQgZGF0YSA9IGNvbHVtbi5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhO1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgaWYgKGRhdGEgJiYga2V5cz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhW2tleV0udG9TdHJpbmcoKS5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgICBkYXRhVmFsdWUudW5zaGlmdChkYXRhW2tleV0pO1xuICAgICAgICAgICAgZGF0YUtleS51bnNoaWZ0KGtleSk7XG4gICAgICAgICAgICBkYXRhW2tleV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVmID0gZGlhbG9nU2VydmljZS5vcGVuKFxuICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbC5jb21wb25lbnQsXG4gICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLmRhdGFcbiAgICAgICk7XG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGF0YUtleT8ubGVuZ3RoID4gMCAmJiBkYXRhVmFsdWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRhdGFLZXkuZm9yRWFjaCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgICAgICAgICBkYXRhVmFsdWUuZm9yRWFjaCgodmFsdWUsIHZhbHVlSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5SW5kZXggPT09IHZhbHVlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvb2tVcF9maWx0ZXInKT8uZm9jdXMoKTtcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbHVtbi5maWVsZDtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgICBjb2x1bW4/Lmxvb2t1cENvbnRyb2wsXG4gICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbHVtbi52YWx1ZSA9IHZhbHVlPy52YWx1ZVxuICAgICAgICAgICAgICA/IHZhbHVlLnZhbHVlXG4gICAgICAgICAgICAgIDogcmVzW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKHsgZXJyb3IgfTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBIeXBlcmxpbmsgZmllbGQgYXMgYSBwYXJhbSBWYWx1ZVxuICBzZXRGaWVsZEFzTGlua1BhcmFtKGNvbHVtbnM6IGFueSwgZmllbGQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNvbHVtbnMgJiZcbiAgICAgIGNvbHVtbnMubGVuZ3RoID4gMCAmJlxuICAgICAgZmllbGQgJiZcbiAgICAgIHJlc3BvbnNlLnJlY29yZHMgJiZcbiAgICAgIHJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpLmZvckVhY2goKHJlczogYW55KSA9PiB7XG4gICAgICAgIGxldCBvYmogPSBjb2x1bW5zLmZpbmQoKHg6IGFueSkgPT4geC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgICBpZiAob2JqICYmIG9iai5wYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqLnBhcmFtcyk7XG4gICAgICAgICAga2V5cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKG9iai5wYXJhbXNba2V5XSAmJiBvYmoucGFyYW1zW2tleV0udG9TdHJpbmcoKS5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG9iai5wYXJhbXNba2V5XVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJylcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgb2JqLnBhcmFtc1trZXldID0gcmVzW3ZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFzQW55TGlua0NvbHVtbihjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvbHVtbnMgJiZcbiAgICAgIGNvbHVtbnMuc29tZShcbiAgICAgICAgKHgpID0+XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHxcbiAgICAgICAgICB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyB8fFxuICAgICAgICAgICh4LmxpbmtJZCAmJiB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgc2V0SHlwZXJsaW5rcyhmZXRjaFJlc3BvbnNlOiBhbnksIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pOiBhbnkge1xuICAgIGxldCByZWNvcmRzOiBhbnkgPSBbXTtcbiAgICBsZXQgZGF0YSA9XG4gICAgICBmZXRjaFJlc3BvbnNlICYmIGZldGNoUmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXREYXRhRmllbGRzKGZldGNoUmVzcG9uc2UucmVjb3JkcylcbiAgICAgICAgOiBbXTtcbiAgICBsZXQgbmV3Um93OiBhbnk7XG5cbiAgICByZXR1cm4gdGhpcy5oeXBlcmxpbmtTZXJ2aWNlXG4gICAgICAuYWRkSHlwZXJsaW5rcyhjb2x1bW5zKVxuICAgICAgLnRoZW4oKGxpbmtzUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBkYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICAgICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cpIHtcbiAgICAgICAgICAgICAgbGV0IGZpZWxkID0gY29sLmZpZWxkICsgJ19vYmonO1xuICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdID0geyAuLi5jb2wgfTtcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaXNwbGF5VGV4dCA9IGNvbC5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgID8gcm93W2NvbC5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgICAgIDogcm93W2NvbC5maWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgICAgaWYgKGNvbC5mb3JtYXQgJiYgbmV3Um93W2ZpZWxkXS5kaXNwbGF5VGV4dCkge1xuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQsXG4gICAgICAgICAgICAgICAgICBjb2wuZm9ybWF0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29sLmRhdGEgJiYgY29sLmRhdGEuZGF0YSkge1xuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlhbG9nRGF0YSA9IHV0aWxpdGllcy5maW5kS2V5c0FuZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgY29sLmRhdGEuZGF0YSxcbiAgICAgICAgICAgICAgICAgIHJvd1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmtzUmVzcG9uc2UuZm9yRWFjaCgobGlua1Jlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgfHxcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuSUZSQU1FIHx8XG4gICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCkgJiZcbiAgICAgICAgICAgICAgICBjb2wubGlua0lkICYmXG4gICAgICAgICAgICAgICAgY29sLnBhcmFtcyAmJlxuICAgICAgICAgICAgICAgIGNvbC5saW5rSWQgPT09IGxpbmtSZXNwb25zZS5saW5rSWRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGNvbC5wYXJhbXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbms6IGFueSA9IHV0aWxpdGllcy5zZXRIeXBlcmxpbmsoXG4gICAgICAgICAgICAgICAgICBrZXlzLFxuICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgbGlua1Jlc3BvbnNlLnVybCxcbiAgICAgICAgICAgICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgICAgICAgICAgIGNvbC5wYXJhbXNcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gY29sLmZpZWxkICsgJ19vYmonO1xuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0gPSB7IC4uLmNvbCB9O1xuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uaHlwZXJsaW5rID0gbGluaztcbiAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdLmRpc3BsYXlUZXh0ID0gY29sLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgICAgIDogcm93W2NvbC5maWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVjb3Jkcy5wdXNoKG5ld1Jvdyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVjb3JkcztcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgZ2xvYmFsIGZpbHRlciB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgY29uc3QgY29sdW1uOiBhZGRHbG9iYWxGaWx0ZXIgPSB7XG4gICAgICBmaWVsZDogZ2xvYmVsRmlsdGVySW5mby5maWVsZCxcbiAgICAgIGRpc3BsYXlUZXh0OiBnbG9iZWxGaWx0ZXJJbmZvLmRpc3BsYXlUZXh0LFxuICAgICAgdmFsaWRhdGlvbnM6IGdsb2JlbEZpbHRlckluZm8udmFsaWRhdGlvbnMsXG4gICAgICB0eXBlOiBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUsXG4gICAgICBkYXRhOiBnbG9iZWxGaWx0ZXJJbmZvLmRhdGEsXG4gICAgICB2YWx1ZTogZ2xvYmVsRmlsdGVySW5mby52YWx1ZSxcbiAgICAgIHZhbHVlVHdvOiBnbG9iZWxGaWx0ZXJJbmZvLnZhbHVlVHdvLFxuICAgICAgbWF0Y2hNb2RlOiBnbG9iZWxGaWx0ZXJJbmZvLm1hdGNoTW9kZSxcbiAgICAgIG9wZXJhdG9yOiBnbG9iZWxGaWx0ZXJJbmZvLm9wZXJhdG9yLFxuICAgICAgdGFibGVBbGlhczogZ2xvYmVsRmlsdGVySW5mby50YWJsZUFsaWFzLFxuICAgICAgb3B0aW9uTGFiZWw6IGdsb2JlbEZpbHRlckluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogZ2xvYmVsRmlsdGVySW5mby5vcHRpb25WYWx1ZSxcbiAgICAgIG9uRm9jdXNPdXQ6IGdsb2JlbEZpbHRlckluZm8ub25Gb2N1c091dCxcbiAgICAgIG9uUmV0dXJuOiBnbG9iZWxGaWx0ZXJJbmZvLm9uUmV0dXJuLFxuICAgICAgZmlsdGVyaW5nOiBnbG9iZWxGaWx0ZXJJbmZvLmZpbHRlcmluZyxcbiAgICAgIGNvbHVtbjogZ2xvYmVsRmlsdGVySW5mby5jb2x1bW4sXG4gICAgICBkYXlSYW5nZTogZ2xvYmVsRmlsdGVySW5mby5kYXlSYW5nZSxcbiAgICAgIGZyb21GaWVsZDogZ2xvYmVsRmlsdGVySW5mby5mcm9tRmllbGQsXG4gICAgICB0b0ZpZWxkOiBnbG9iZWxGaWx0ZXJJbmZvLnRvRmllbGQsXG4gICAgICBsb29rdXBDb250cm9sOiBnbG9iZWxGaWx0ZXJJbmZvLmxvb2t1cENvbnRyb2wsXG4gICAgICBhbGxvd1NlYXJjaDogZ2xvYmVsRmlsdGVySW5mby5hbGxvd1NlYXJjaCxcbiAgICAgIGRpc2FibGVkOiBnbG9iZWxGaWx0ZXJJbmZvLmRpc2FibGVkLFxuICAgICAgaGlkZGVuOiBnbG9iZWxGaWx0ZXJJbmZvLmhpZGRlbixcbiAgICAgIGxhYmVsVGV4dDogZ2xvYmVsRmlsdGVySW5mby5sYWJlbFRleHQsXG4gICAgICBwcmVmaXg6IGdsb2JlbEZpbHRlckluZm8ucHJlZml4LFxuICAgICAgY29sb3I6IGdsb2JlbEZpbHRlckluZm8uY29sb3IsXG4gICAgICBmb3JtYXQ6IGdsb2JlbEZpbHRlckluZm8uZm9ybWF0LFxuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgaW5wdXQgZmlsdGVyXG4gIGFkZEdsb2JhbElucHV0RmlsdGVyKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ2xvYmFsIGRyb3Bkb3duIGZpbHRlclxuICBhZGRHbG9iYWxEcm9wZG93bkZpbHRlcihcbiAgICBnbG9iZWxGaWx0ZXJJbmZvOiBJR2xvYmFsRmlsdGVyLFxuICAgIGRyb3BEb3duUHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogYW55IHtcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV047XG4gICAgaWYgKGRyb3BEb3duUHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IGRyb3BEb3duUHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBkcm9wRG93blByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IGRyb3BEb3duUHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ2xvYmVsRmlsdGVySW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIHNvcnRzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcbiAgICB9XG4gIH1cbiAgLy8gYWRkIGdsb2JhbCBNdWx0aVNlbGVjdCBkcm9wZG93biBmaWx0ZXJcbiAgYWRkR2xvYmFsTXVsdGlTZWxlY3REcm9wRG93bkZpbHRlcihcbiAgICBnbG9iZWxGaWx0ZXJJbmZvOiBJR2xvYmFsRmlsdGVyLFxuICAgIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogYW55IHtcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1Q7XG4gICAgaWYgKG11bHRpU2VsZWN0UHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IG11bHRpU2VsZWN0UHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gbXVsdGlTZWxlY3RQcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBtdWx0aVNlbGVjdFByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBtdWx0aVNlbGVjdFByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IG11bHRpU2VsZWN0UHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ2xvYmVsRmlsdGVySW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIHNvcnRzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcbiAgICB9XG4gIH1cblxuICBnZXREcm9wZG93bkRhdGEoXG4gICAgZmllbGRJbmZvOiBhbnksXG4gICAgdW5pcXVlS2V5OiBzdHJpbmcsXG4gICAgdmFsdWVQcm9wOiBzdHJpbmcsXG4gICAgbGFiZWxQcm9wOiBzdHJpbmcsXG4gICAgZmlsdGVyczogYW55LFxuICAgIHNvcnRzOiBJR3JpZFNvcnRbXSA9IFtdXG4gICkge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duU2VydmljZVxuICAgICAgLnNldERyb3BEb3duTGlzdCh1bmlxdWVLZXksIHZhbHVlUHJvcCwgbGFiZWxQcm9wLCBmaWx0ZXJzLCBzb3J0cylcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBmaWVsZEluZm8uZGF0YSA9IHJlcztcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGZpZWxkSW5mbyk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihmaWVsZEluZm8pO1xuICAgICAgfSk7XG4gIH1cbiAgXG4gIC8vIGFkZCBnbG9iYWwgZmlsdGVyIFNwYWNlIEZpZWxkXG4gIGFkZEdsb2JhbEZpbHRlclNwYWNlRmllbGQoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLlNQQUNFUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ2xvYmFsIGJvb2xlYW4gZmlsdGVyXG4gIGFkZEdsb2JhbEJvb2xlYW5GaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkUmFuZ2VGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsRGF0ZVJhbmdlRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EQVRFX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcbiAgfVxuICBcbiAgLy8gYWRkIE51bWVyaWMgUmFuZ2UgRmlsdGVyIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbE51bWVyaWNSYW5nZUZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ19SQU5HRTtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XG4gIH1cbiAgLy8gYWRkIE51bWVyaWMgaW5wdXQgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsTnVtZXJpY0lucHV0KGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIExvb2tVcCBGaWVsZCBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxMb29rdXBGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XG4gIH1cblxuICAgLy9hZGQgY2FsZW5kYXIgZmlsdGVyIGZvciBnbG9iYWwgZmlsdGVyXG4gICBhZGRHbG9iYWxEYXRlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcil7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlPUdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICBzZXREYXRhRmllbGRzKHJlc3BvbnNlOiBhbnksIGRhdGFLZXk6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBsZXQgZGF0YTogYW55ID0gW107XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3BvbnNlLm1hcCgoeDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh4ID8/IHt9KT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gT2JqZWN0LmtleXMoeCk/LnJlZHVjZShcbiAgICAgICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3VycmVudC50b0xvd2VyQ2FzZSgpXTogeFtjdXJyZW50XSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGFLZXkgJiZcbiAgICAgICAgICAgIGRhdGFLZXkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIU9iamVjdC5rZXlzKHJlc3VsdCk/LmluY2x1ZGVzKGRhdGFLZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXN1bHRbZGF0YUtleV0gPSBpbmRleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc2V0Q29sdW1uRmllbGRzKGNvbHVtbnM6IGFueVtdKSB7XG4gICAgbGV0IGNvbHVtbjogYW55ID0gW107XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb2x1bW5zLm1hcCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgY29sdW1uLnB1c2goeyAuLi5jb2wsIGZpZWxkOiBjb2w/LmZpZWxkPy50b0xvd2VyQ2FzZSgpIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNoYW5nZSBsaW5rSWQgaW4gZWRpdCBtb2RlLCBpZiBjaGFuZ2VMaW5rIGlzIHRydWUgdGhlbiBpdCBjaGFuZ2UgdGhlIGVkaXRlZCByb3cgaHlwZXJsaW5rIHZhbHVlXG4gIHNldExpbmtJZChcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdLFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgbGlua0lkOiBzdHJpbmcsXG4gICAgcmVjb3JkOiBhbnksXG4gICAgdXNlcnM6IGFueSxcbiAgICBwYXJhbXM6IGFueSA9IG51bGwsXG4gICAgY2hhbmdlTGluazogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjb2x1bW4ubGlua0lkID0gbGlua0lkO1xuICAgICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbHVtbi5wYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEh5cGVybGlua3MoeyByZWNvcmRzOiBbcmVjb3JkXSB9LCBjb2x1bW5zKS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZUxpbmspIHtcbiAgICAgICAgZGVsZXRlIHJlc1swXVtmaWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXTtcbiAgICAgICAgbGV0IGluZGV4ID0gdXNlcnMuZmluZEluZGV4KFxuICAgICAgICAgIChpOiBhbnkpID0+IGlbZmllbGQudG9Mb3dlckNhc2UoKV0gPT09IHJlY29yZFtmaWVsZC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICApO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgaWYgKHVzZXJzW2luZGV4XVtmaWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgICAgIHVzZXJzW2luZGV4XVtmaWVsZCArICdfb2JqJ10uaHlwZXJsaW5rID1cbiAgICAgICAgICAgICAgcmVzWzBdW2ZpZWxkICsgJ19vYmonXS5oeXBlcmxpbms7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZ3JpZCBkYXRhIGFuZCBzZXQgc2VsZWN0ZWQgcm93IGJhc2VkIG9uIHNlbGVjdGlvbiB2YWx1ZVxuICBzZXREYXRhV2l0aFNlbGVjdGVkUm93KHJlY29yZHM6IGFueSwgY29uZmlnRGF0YTogYW55KSB7XG4gICAgaWYgKGNvbmZpZ0RhdGE/LnNlbGVjdGVkVmFsdWUgJiYgY29uZmlnRGF0YS5kYXRhLnNlbGVjdGlvbikge1xuICAgICAgcmVjb3Jkcy5mb3JFYWNoKChyZWNvcmQ6IGFueSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhyZWNvcmQpPy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09IGNvbmZpZ0RhdGEuc2VsZWN0ZWRWYWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNvbmZpZ0RhdGEuZGF0YS52YWx1ZSAmJlxuICAgICAgICAgICAgICByZWNvcmRba2V5XSA9PT0gY29uZmlnRGF0YS5kYXRhLnZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmVjb3JkWydoaWdobGlnaHRSb3cnXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlY29yZFtrZXldID09PSBjb25maWdEYXRhLmRhdGEuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgIHJlY29yZFsnaGlnaGxpZ2h0Um93J10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxuXG4gIHNldFRhYmxlQWxpYXMoZmllbGQ6IHN0cmluZywgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKFxuICAgICAgICAoeDogYW55KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuXG4gICAgICBpZiAoY29sdW1uICE9IG51bGwgJiYgY29sdW1uLnRhYmxlQWxpYXMgJiYgY29sdW1uLnRhYmxlQWxpYXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gY29sdW1uLnRhYmxlQWxpYXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgc2V0R3JpZFByb3BWYWx1ZXMoXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXSxcbiAgICBwcm9wczogSUdyaWRQcm9wW10sXG4gICAgZmlsdGVyPzogSUdyaWRQcm9wRmlsdGVyLFxuICAgIHJlY29yZHM/OiBhbnlbXVxuICApIHtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDAgJiYgcHJvcHMgJiYgcHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGlzTWF0Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgaWYgKGZpbHRlciAmJiBmaWx0ZXIuZmllbGQgJiYgcmVjb3JkcyAmJiByZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaXNNYXRjaGVkID0gcmVjb3Jkcy5zb21lKFxuICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKHgpW2ZpbHRlci5maWVsZC50b0xvd2VyQ2FzZSgpXSA9PT1cbiAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcHJvcHMubWFwKChwcm9wOiBJR3JpZFByb3ApID0+IHtcbiAgICAgICAgbGV0IGNvbDogYW55ID0ge307XG4gICAgICAgIGlmIChwcm9wLmZpZWxkICYmICFpc01hdGNoZWQgJiYgIWZpbHRlcj8uZmllbGQpIHtcbiAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTWF0Y2hlZCkge1xuICAgICAgICAgIGlmIChwcm9wLmZpZWxkKSB7XG4gICAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXI/LmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sICYmIGNvbC5oYXNPd25Qcm9wZXJ0eShwcm9wLm5hbWUpKSB7XG4gICAgICAgICAgY29sW3Byb3AubmFtZV0gPSBwcm9wLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZ3JpZCByb3cgcHJvcFZhbHVlc1xuICBzZXRHcmlkUm93UHJvcFZhbHVlKHJvdzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgcHJvcHM6IElHcmlkUm93UHJvcFtdLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW10pIHtcbiAgICBwcm9wcz8uZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgaWYgKHByb3AucHJvcE5hbWUgJiYgKHByb3AucHJvcFZhbHVlIHx8IHByb3AucHJvcFZhbHVlID09PSBmYWxzZSB8fCBwcm9wLnByb3BWYWx1ZSA9PT0gJycpKSB7XG4gICAgICAgIGlmIChwcm9wLmZpZWxkKSB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXk/LnRvTG93ZXJDYXNlKCkgPT09IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICBpZiAoZmllbGROYW1lKSB7XG4gICAgICAgICAgICBpZiAocm93W2ZpZWxkTmFtZV0/LmFjdGlvbikge1xuICAgICAgICAgICAgICByb3dbZmllbGROYW1lXS5hY3Rpb24gPSBPYmplY3QuYXNzaWduKHJvd1tmaWVsZE5hbWVdPy5hY3Rpb24sIHsgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1tmaWVsZE5hbWVdID0geyB0ZXh0OiByb3dbZmllbGROYW1lXSwgYWN0aW9uOiB7IFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUsIGZpZWxkOiBmaWVsZE5hbWUgfSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1ucz8uc29tZSgoY29sdW1uKSA9PiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgcm93W3Byb3AuZmllbGQ/LnRvTG93ZXJDYXNlKCldID0geyB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIGV4dHJhRmllbGQ6IHRydWUsIGFjdGlvbjogeyBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlLCBmaWVsZDogcHJvcC5maWVsZCB9IH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocHJvcD8uYWN0aW9uID09PSBFR3JpZFJvd0FjdGlvbi5ERUxFVEVCVE4pIHtcbiAgICAgICAgICAgIHJvd1twcm9wLmFjdGlvbl0gPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICBlbHNlIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkVESVRCVE4pIHtcbiAgICAgICAgICByb3dbcHJvcC5hY3Rpb25dID0gcHJvcC5wcm9wVmFsdWU7XG4gICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgLy8gcmVtb3ZlIHRoZSByb3dBY3Rpb25zIGZyb20gdGhlIHJlY29yZHNcbiAgcmVtb3ZlUm93QWN0aW9ucyhyZWNvcmRzKSB7XG4gICAgaWYgKHJlY29yZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJlY29yZHMuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGlmIChyb3cucm93QWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1sncm93QWN0aW9uJ107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxufSJdfQ==
1298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUlyQixlQUFlLEVBS2YsY0FBYyxFQUtkLGNBQWMsRUFFZCxjQUFjLEdBQ2YsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7O0FBT25ELE1BQU0sT0FBTyxXQUFXO0lBSXRCLFlBQ1MsUUFBa0IsRUFDakIsZ0JBQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLFlBQTBCLEVBQzFCLGNBQThCO1FBSi9CLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBUnhDLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUM3QixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFDMUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO0lBT3RDLENBQUM7SUFFSjs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLEtBQW9CLEVBQUUsT0FBc0I7UUFDekQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxzQkFBc0IsQ0FBQyxPQUFzQjtRQUMzQyxPQUFPLE9BQU87YUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQ2pCLEdBQUcsQ0FBQyxJQUFJLENBQ04sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsZUFDVCxPQUFBLENBQUEsTUFBQSxDQUFDLENBQUMsS0FBSywwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLENBQUMsQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQSxFQUFBLENBQ2pFO1lBQ0MsQ0FBQyxpQ0FDTSxDQUFDLEtBQ0osS0FBSyxFQUFFLEdBQUc7cUJBQ1AsTUFBTSxDQUNMLENBQUMsQ0FBQyxFQUFFLEVBQUUsZUFBQyxPQUFBLENBQUEsTUFBQSxDQUFDLENBQUMsS0FBSywwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLENBQUMsQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUEsRUFBQSxDQUN6RDtxQkFDQSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7cUJBQ25CLElBQUksRUFBRSxJQUViLENBQUMsQ0FBQyxDQUFDLENBQ047YUFDQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixtQkFBbUIsQ0FDakIsS0FBb0IsRUFDcEIsT0FBc0I7UUFFdEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxhQUE4QjtRQUNqRCxNQUFNLFVBQVUsR0FBa0IsRUFBRSxDQUFDO1FBRXJDLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxPQUFPLENBQUMsQ0FBQyxNQUFxQixFQUFFLEVBQUU7O1lBQy9DLElBQ0UsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUN0QixDQUFDLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRO29CQUMvQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDZixDQUFDLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7Z0JBQzVELE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsY0FBYyxFQUNwRDtnQkFDQSxJQUNFLE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsY0FBYztxQkFDcEQsTUFBQSxNQUFBLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFFBQVEsRUFBRSwwQ0FBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUEsRUFDdkM7b0JBQ0EsNEJBQTRCO29CQUM1QixVQUFVLENBQUMsSUFBSSxDQUFDO3dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO3dCQUN4QyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSzt3QkFDdEQsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUs7d0JBQ25ELEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO3dCQUN4QyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7cUJBQzlCLENBQUMsQ0FBQztvQkFFSCwwQkFBMEI7b0JBQzFCLFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO3dCQUMvQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSzt3QkFDdEQsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUs7d0JBQ25ELEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQzt3QkFDL0MsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO3FCQUM5QixDQUFDLENBQUM7aUJBQ0o7cUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLGNBQWMsRUFBRTtvQkFDL0QsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQzt3QkFDeEMsU0FBUyxFQUNQLE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsV0FBVzs0QkFDL0MsQ0FBQyxDQUFDLElBQUk7NEJBQ04sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTO3dCQUN0QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSzt3QkFDbkQsS0FBSyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7d0JBQ3hDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtxQkFDOUIsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUFXLEVBQUUsY0FBdUIsSUFBSTtRQUMzRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsY0FBYyxFQUFFO1lBQ3hELElBQUksV0FBVyxFQUFFO2dCQUNmLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQzthQUN6QjtpQkFBTTtnQkFDTCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDdkI7U0FDRjthQUFNO1lBQ0wsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixvQkFBb0IsQ0FDbEIsTUFBcUIsRUFDckIsY0FBdUIsSUFBSTtRQUUzQixRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDbkIsS0FBSyxxQkFBcUIsQ0FBQyxXQUFXO2dCQUNwQyxPQUFRLE1BQU0sQ0FBQyxLQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLEtBQUsscUJBQXFCLENBQUMsUUFBUTtnQkFDakMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQWEsQ0FBQyxDQUFDO1lBQ3JELEtBQUsscUJBQXFCLENBQUMsY0FBYztnQkFDdkMsSUFBSSxVQUFVLEdBQWEsTUFBTSxDQUFDLEtBQUs7b0JBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7b0JBQ3BDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQ3hDLElBQUksU0FBUyxHQUFTLFdBQVc7d0JBQy9CLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3pCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3pDO3FCQUFNO29CQUNMLE9BQU8sRUFBRSxDQUFDO2lCQUNYO1lBQ0gsS0FBSyxxQkFBcUIsQ0FBQyxRQUFRO2dCQUNqQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3JDO2dCQUNFLE9BQU8sTUFBTSxDQUFDLEtBQWUsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsT0FBc0IsRUFBRSxHQUFRO1FBQzVDLElBQUksT0FBTyxHQUFZLElBQUksQ0FBQztRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7O1lBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNoRCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsbUJBQW1CLENBQ25ELElBQUksRUFDSixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNmLENBQUMsQ0FDRixDQUFDO29CQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFDOUMsSUFDRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsUUFBUTt3QkFDbkQsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDaEIsQ0FBQyxJQUFJLENBQUMsTUFBTTt3QkFDWixLQUFLLEVBQ0w7d0JBQ0EsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDOzRCQUN2QixDQUFDLENBQUMsSUFBSTs0QkFDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLGNBQWMsQ0FBQyxDQUFDO3dCQUN2RCxNQUFNO3FCQUNQO3lCQUFNLElBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLFNBQVM7d0JBQ3BELEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUN2RDt3QkFDQSxPQUFPOzRCQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dDQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVTtnQ0FDckQsQ0FBQyxDQUFDLElBQUk7Z0NBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQ2xCLElBQUksRUFDSixHQUFHLElBQUksQ0FBQyxNQUFNLFlBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLGFBQWEsQ0FDdEUsQ0FBQzt3QkFDUixNQUFNO3FCQUNQO3lCQUFNLElBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLFNBQVM7d0JBQ3BELEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUN2RDt3QkFDQSxPQUFPOzRCQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dDQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVTtnQ0FDckQsQ0FBQyxDQUFDLElBQUk7Z0NBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQ2xCLElBQUksRUFDSixHQUFHLElBQUksQ0FBQyxNQUFNLFlBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLGFBQWEsQ0FDdEUsQ0FBQzt3QkFDUixNQUFNO3FCQUNQO3lCQUNJLElBQ0gsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLFVBQVUsRUFFckQ7d0JBQ0EsSUFBSSxPQUFPLEdBQVEsQ0FBQyxDQUFDO3dCQUNyQixJQUFJLEtBQUssR0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7d0JBQzNDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDekMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFO2dDQUNuQixPQUFPLEVBQUUsQ0FBQzs2QkFDWDt5QkFDRjt3QkFDRCxzQkFBc0I7d0JBQ3RCLE9BQU87NEJBQ0wscUJBQXFCOzRCQUNyQixPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO2dDQUN2QyxDQUFDLENBQUMsSUFBSTtnQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsVUFBVSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQUcsQ0FBQSxDQUFDLENBQUEsRUFBRSxFQUFFLENBQzVHLENBQUM7d0JBQ1IsTUFBTTtxQkFDUDt5QkFFSSxJQUNILEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxPQUFPO3dCQUNsRCxPQUFPLEVBQ1A7d0JBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7NEJBQ3RDLE9BQU87Z0NBQ0wsZUFBZSxLQUFLLFNBQVM7b0NBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLEVBQ0osV0FBVyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDckQ7b0NBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQzt5QkFDWjs2QkFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7NEJBQzNELE9BQU87Z0NBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7b0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO29DQUNyRCxDQUFDLENBQUMsSUFBSTtvQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDcEUsQ0FBQzt5QkFDVDtxQkFDRjt5QkFBTSxJQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxPQUFPO3dCQUNsRCxPQUFPLEVBQ1A7d0JBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7NEJBQ3RDLE9BQU87Z0NBQ0wsZUFBZSxLQUFLLFNBQVM7b0NBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLEVBQ0osV0FBVyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDckQ7b0NBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQzt5QkFDWjs2QkFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7NEJBQzNELE9BQU87Z0NBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7b0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO29DQUNyRCxDQUFDLENBQUMsSUFBSTtvQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDcEUsQ0FBQzt5QkFDVDtxQkFDRjt5QkFBTSxJQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxPQUFPO3dCQUNsRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQ3REO3dCQUNBLE9BQU87NEJBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0NBQ25ELENBQUMsQ0FBQyxJQUFJO2dDQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxlQUFlLEtBQUssRUFBRSxDQUFDLENBQUM7d0JBQ3pELE1BQU07cUJBQ1A7eUJBQU0sSUFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDZixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsT0FBTzt3QkFDbEQsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUN0RDt3QkFDQSxPQUFPOzRCQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0NBQ3hELENBQUMsQ0FBQyxJQUFJO2dDQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLEVBQ0osU0FBUyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxLQUFLLEVBQUUsQ0FDakQsQ0FBQzt3QkFDUixNQUFNO3FCQUNQO3lCQUFNLElBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLEtBQUs7d0JBQ2hELENBQUMsQ0FBQSxNQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDBDQUFFLFFBQVEsR0FBRyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQSxFQUM5RDt3QkFDQSxPQUFPOzRCQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2lDQUNmLE1BQUEsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsMENBQUUsUUFBUSxHQUFHLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO2dDQUMzRCxDQUFDLENBQUMsSUFBSTtnQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUN6RCxNQUFNO3FCQUNQO3lCQUFNLElBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLE9BQU87d0JBQ2xELENBQUMsQ0FBQSxNQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDBDQUFFLFFBQVEsR0FBRyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQSxFQUMvRDt3QkFDQSxPQUFPOzRCQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2lDQUNmLE1BQUEsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsMENBQUUsUUFBUSxHQUFHLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO2dDQUN6RCxDQUFDLENBQUMsSUFBSTtnQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsS0FBSyxFQUFFLENBQ2pELENBQUM7d0JBQ1IsTUFBTTtxQkFDUDt5QkFBTSxJQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxLQUFLO3dCQUNoRCxDQUFDLENBQUEsTUFBQSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywwQ0FDWixRQUFRLEdBQ1QsS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUEsRUFDM0Q7d0JBQ0EsT0FBTzs0QkFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztpQ0FDZixNQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDBDQUNYLFFBQVEsR0FDVCxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQTtnQ0FDekQsQ0FBQyxDQUFDLElBQUk7Z0NBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFDekQsTUFBTTtxQkFDUDtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsZUFBZSxDQUFDLElBQWlCLEVBQUUsWUFBb0I7UUFDckQsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLG1CQUFtQixDQUFDLE1BQVc7UUFDN0IsSUFBSSxNQUFNLFlBQVksSUFBSSxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3RDO2FBQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDdEMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO2FBQU07WUFDTCxPQUFPLE1BQU0sQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQ1YsRUFBRSxhQUFhLEVBQWlCLEVBQ2hDLE9BQXNCO1FBRXRCLE9BQU8sQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzlELEtBQUs7WUFDTCxTQUFTLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJO1lBQ3ZFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQztZQUNmLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7U0FDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxLQUFVLEVBQUUsT0FBc0I7UUFDM0MsTUFBTSxPQUFPLEdBQWtCLEVBQUUsQ0FBQztRQUNsQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQU0sRUFBRSxFQUFFO1lBQzVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdkIsS0FBdUIsQ0FBQyxPQUFPLENBQzlCLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO29CQUN6QyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7d0JBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUM7NEJBQ1gsS0FBSzs0QkFDTCxTQUFTOzRCQUNULFFBQVE7NEJBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7NEJBQ3ZDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7eUJBQy9DLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLENBQ0YsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7b0JBQ3RCLFFBQVEsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFO3dCQUMxQixLQUFLLFNBQVM7NEJBQ1osT0FBTyxDQUFDLElBQUksQ0FBQztnQ0FDWCxLQUFLO2dDQUNMLFNBQVMsRUFBRSxRQUFRO2dDQUNuQixRQUFRLEVBQUUsS0FBSztnQ0FDZixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO2dDQUNqQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDOzZCQUMvQyxDQUFDLENBQUM7NEJBQ0gsTUFBTTt3QkFDUixLQUFLLFFBQVE7NEJBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQztnQ0FDWCxLQUFLO2dDQUNMLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQ0FDMUIsUUFBUSxFQUFFLEtBQUs7Z0NBQ2YsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2dDQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDOzZCQUMvQyxDQUFDLENBQUM7NEJBQ0gsTUFBTTt3QkFDUixLQUFLLFFBQVE7NEJBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQztnQ0FDWCxLQUFLO2dDQUNMLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQ0FDMUIsUUFBUSxFQUFFLEtBQUs7Z0NBQ2YsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2dDQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDOzZCQUMvQyxDQUFDLENBQUM7NEJBQ0gsTUFBTTt3QkFDUixLQUFLLFFBQVE7NEJBQ1gsSUFBSSxLQUFLLENBQUMsS0FBSyxZQUFZLElBQUksRUFBRTtnQ0FDL0IsT0FBTyxDQUFDLElBQUksQ0FBQztvQ0FDWCxLQUFLO29DQUNMLFNBQVMsRUFBRSxPQUFPO29DQUNsQixRQUFRLEVBQUUsS0FBSztvQ0FDZixLQUFLLEVBQ0gsS0FBSyxDQUFDLEtBQUssWUFBWSxJQUFJO3dDQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7d0NBQ3BDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSztvQ0FDakIsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztpQ0FDL0MsQ0FBQyxDQUFDOzZCQUNKO2lDQUFNO2dDQUNMLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtvQ0FDckMsT0FBTyxDQUFDLElBQUksQ0FBQzt3Q0FDWCxLQUFLO3dDQUNMLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUzt3Q0FDMUIsUUFBUSxFQUFFLEtBQUs7d0NBQ2YsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO3dDQUNkLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7cUNBQy9DLENBQUMsQ0FBQztnQ0FDTCxDQUFDLENBQUMsQ0FBQzs2QkFDSjs0QkFDRCxNQUFNO3dCQUNSOzRCQUNFLElBQUksQ0FBQztxQkFDUjtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLEtBQVU7UUFDMUIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLGdCQUFnQixDQUFDLEtBQVc7UUFDMUIsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUEsbUVBQW1FO0lBQ25FLFdBQVcsQ0FBQyxPQUFZOztRQUN2QixNQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFOztZQUNwQyxJQUFHLEdBQUcsS0FBSyxjQUFjLENBQUMsU0FBUyxJQUFJLEdBQUcsS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFDO2dCQUNwRSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNyQjtpQkFDSSxJQUNILE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ1osT0FBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLFFBQVE7aUJBQ2pDLE1BQUEsTUFBQSxPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUFFLE1BQU0sMENBQUUsS0FBSyxDQUFBLEVBQzNCO2dCQUNBLElBQUcsTUFBQSxPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUFFLFVBQVUsRUFBQztvQkFDMUIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3JCO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsMENBQUUsSUFBSSxDQUFDO2lCQUNuQzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsK0NBQStDO0lBQy9DLGNBQWMsQ0FBQyxPQUFPO1FBQ3BCLElBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBQztZQUN4QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFDLEVBQUU7Z0JBQ3JCLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFBO1NBQ0g7YUFBTTtZQUNMLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELDhCQUE4QjtJQUM5QixtQkFBbUIsQ0FBQyxXQUFrQixFQUFFLEVBQUUsT0FBc0I7UUFDOUQsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQW1CLEVBQUUsRUFBRTs7WUFDdEMsSUFBSSxLQUFLLEdBQUcsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSywwQ0FBRSxXQUFXLEVBQUUsQ0FBQztZQUN6QyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO2dCQUM5QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ3ZCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNCLElBQUksQ0FBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTt3QkFDbkIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFOzRCQUNoQixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO2dDQUNwRCxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDZjt3QkFDSCxDQUFDLENBQUMsQ0FBQTtxQkFDSDtvQkFDRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbEIsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxDQUFBO2FBQ0g7aUJBQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE9BQU8sRUFBRTtnQkFDdEUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUN2QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQ3RCLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsSUFBSSxFQUFFO3dCQUM1QyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxRQUFRLEVBQUUsTUFBSyxHQUFHLElBQUksQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxFQUFFLE1BQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztxQkFDbkc7eUJBQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxPQUFPLEVBQUU7d0JBQ3RELEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsRUFBRSxNQUFLLEdBQUcsSUFBSSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxRQUFRLEVBQUUsTUFBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO3FCQUNuRzt5QkFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLE9BQU8sRUFBRTt3QkFDdEQsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxFQUFFLE1BQUssR0FBRyxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsRUFBRSxNQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7cUJBQ3RHO2dCQUNILENBQUMsQ0FBQyxDQUFBO2FBQ0g7aUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7Z0JBQy9DLCtCQUErQjtnQkFDL0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUN2QixJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTt3QkFDMUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztxQkFDN0Q7eUJBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTt3QkFDOUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO3FCQUN6RTt5QkFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTt3QkFDaEUsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO3FCQUM5QztnQkFDSCxDQUFDLENBQUMsQ0FBQTthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLGVBQWUsQ0FBQyxVQUFjLEVBQUUsRUFBRSxPQUFzQjtRQUN0RCxJQUFJLEdBQUcscUJBQVEsT0FBTyxDQUFFLENBQUM7UUFDekIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7O1lBQ3pCLElBQUksS0FBSyxHQUFHLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssMENBQUUsV0FBVyxFQUFFLENBQUM7WUFDekMsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssRUFBRTtnQkFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO3dCQUNwRCxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDZjtnQkFDSCxDQUFDLENBQUMsQ0FBQTtnQkFDRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsV0FBQyxPQUFBLENBQUMsQ0FBQyxXQUFXLEVBQUUsTUFBSyxNQUFBLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUEsRUFBQSxDQUFDLENBQUM7Z0JBQzlFLElBQUksR0FBRyxFQUFFO29CQUNQLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNqQjthQUNGO2lCQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RFLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDdEIsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQUU7b0JBQzVDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsRUFBRSxNQUFLLEdBQUcsSUFBSSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxRQUFRLEVBQUUsTUFBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2lCQUNuRztxQkFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLE9BQU8sRUFBRTtvQkFDdEQsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxFQUFFLE1BQUssR0FBRyxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsRUFBRSxNQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7aUJBQ25HO3FCQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFFO29CQUN0RCxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxRQUFRLEVBQUUsTUFBSyxHQUFHLElBQUksQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxFQUFFLE1BQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztpQkFDdEc7YUFDRjtpQkFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtnQkFDL0MsK0JBQStCO2dCQUMvQixJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtvQkFDMUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztpQkFDN0Q7cUJBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtvQkFDOUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO2lCQUN6RTtxQkFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtvQkFDaEUsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2lCQUM5QzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsU0FBUyxDQUFDLFVBQXFCO1FBQzdCLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQ2hELFVBQVUsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVc7Z0JBQzdDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVztnQkFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNaLFVBQVUsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVc7Z0JBQzdDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVztnQkFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUNiO2FBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUMvQyxVQUFVLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUM5QjtZQUNELElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNyQztTQUNGO1FBQ0QsTUFBTSxNQUFNLEdBQWdCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztZQUNuQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMscUJBQXFCO1lBQ3ZELFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztZQUMvQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDdkIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1lBQ3pCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztZQUN2QixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDckIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1lBQ3pCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDL0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1lBQ3pCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztZQUMzQixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO1lBQy9CLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtZQUNqQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsZUFBZSxFQUFFLFVBQVUsQ0FBQyxlQUFlO1lBQzNDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtZQUN6QixVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7WUFDakMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtZQUN6QixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDN0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO1lBQy9CLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztZQUMvQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDN0IsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLFlBQVksRUFBRSxVQUFVLENBQUMsWUFBWTtZQUNyQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDL0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1lBQzNCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM3QixVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7WUFDakMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztZQUMvQixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDL0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztZQUNuQyxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7WUFDbkMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxZQUFZO1lBQ3JDLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM3QixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDN0IsYUFBYSxFQUFFLFVBQVUsQ0FBQyxhQUFhO1lBQ3ZDLFlBQVksRUFBRSxVQUFVLENBQUMsWUFBWTtZQUNyQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDckIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1lBQ3ZCLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRTtZQUNqQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDdkIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1NBQ3BDLENBQUM7UUFFRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLFlBQVksQ0FBQyxVQUEwQjtRQUNyQyxVQUFVLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDekMsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELCtCQUErQjtJQUMvQixjQUFjLENBQ1osZ0JBQTJCLEVBQzNCLGFBQXNCLElBQUk7UUFFMUIsSUFBSSxVQUFVLEVBQUU7WUFDZCxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUc7Z0JBQ3hCLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxLQUFLO2dCQUNqQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQzthQUNsRCxDQUFDO1NBQ0g7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLGdCQUFnQixDQUNkLFVBQXFCLEVBQ3JCLGFBQXNCLElBQUk7UUFFMUIsSUFBSSxVQUFVLEVBQUU7WUFDZCxVQUFVLENBQUMsTUFBTSxHQUFHO2dCQUNsQixJQUFJLEVBQUUscUJBQXFCLENBQUMsWUFBWTtnQkFDeEMsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO2FBQzVDLENBQUM7U0FDSDtRQUNELFVBQVUsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxpQkFBaUIsQ0FDZixVQUFxQixFQUNyQixhQUFzQixJQUFJO1FBRTFCLElBQUksVUFBVSxFQUFFO1lBQ2QsVUFBVSxDQUFDLE1BQU0sR0FBRztnQkFDbEIsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFFBQVE7Z0JBQ3BDLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzthQUM1QyxDQUFDO1NBQ0g7UUFDRCxVQUFVLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7UUFDM0UsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsZ0JBQWdCLENBQ2QsVUFBcUIsRUFDckIsYUFBc0IsSUFBSTtRQUUxQixJQUFJLFVBQVUsRUFBRTtZQUNkLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO2dCQUN6QyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUc7b0JBQ25CLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxRQUFRO29CQUNwQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7aUJBQzVDLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRiw2QkFBNkI7SUFDN0IsZUFBZSxDQUFDLFVBQXlCLEVBQUUsYUFBc0IsSUFBSTtRQUNwRSxJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7U0FDL0c7UUFDRCxVQUFVLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCw2QkFBNkI7SUFDNUIsZUFBZSxDQUFDLFVBQXlCLEVBQUUsYUFBc0IsSUFBSTtRQUNwRSxJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7U0FDeEc7UUFDRCxVQUFVLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFQSw2QkFBNkI7SUFDN0IsZUFBZSxDQUFDLFVBQXFCO1FBQ25DLFVBQVUsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtZQUNyQixVQUFVLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7U0FDMUU7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxlQUFlLENBQUMsVUFBcUI7UUFDbkMsVUFBVSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLG1CQUFtQixDQUNqQixNQUFZLEVBQ1osU0FBa0IsRUFDbEIsT0FBZSxFQUNmLFNBQWlCLEVBQUU7UUFFbkIsSUFBSSxDQUFDLGNBQWM7YUFDaEIsR0FBRyxDQUFhLGFBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDakUsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7O1lBQzdCLCtEQUErRDtZQUM3RCxJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLGFBQWEsR0FBRyxNQUFBLFFBQVEsQ0FBQyxPQUFPLDBDQUFFLElBQUksQ0FDeEMsQ0FBQyxNQUFNLEVBQUUsRUFBRTs7b0JBQ1QsT0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQzt3QkFDM0IsQ0FBQSxNQUFBLE1BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsMENBQUUsUUFBUSxFQUFFLDBDQUFFLFdBQVcsRUFBRTs2QkFDcEQsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUE7aUJBQUEsQ0FDMUIsQ0FBQztnQkFDRixJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNsQixRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7aUJBQzdEO2FBQ0Y7WUFDRCxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNJLG9CQUFvQixDQUFDLFNBQTRCLEVBQUUsS0FBUyxFQUFFLE1BQVUsRUFBRSxHQUFPOzs7WUFDdEYsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFBO1lBRWpCLEtBQUksSUFBSSxDQUFDLEdBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztnQkFDMUMsSUFBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBRSxNQUFBLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFBLElBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUUsTUFBQSxNQUFNLENBQUMsWUFBWSwwQ0FBRSxXQUFXLEVBQUUsQ0FBQSxFQUFDO29CQUNqSiwwR0FBMEc7b0JBQzFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFDLEtBQUssQ0FBQztpQkFFMUM7cUJBQUk7b0JBQ0gsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO2lCQUMzRjthQUNGO1lBR0MsSUFBSSxDQUFDLGNBQWM7aUJBQ2hCLEdBQUcsQ0FBYSxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUMsU0FBUyxDQUFDLElBQUksRUFBRyxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7aUJBQzlFLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUMzQixDQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBRTtvQkFDVCxPQUFPLEtBQUssQ0FBQTtnQkFDZCxDQUFDLENBQUE7Z0JBQ0QsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7O0tBQ047SUFDRCxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsR0FBRztRQUMzQixJQUFJLFdBQVcsQ0FBQztRQUNoQixJQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBQztZQUNoRSxLQUFLLEdBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsQ0FBQztZQUM1QyxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLElBQUksR0FBRyxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxXQUFDLE9BQUEsQ0FBQSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsV0FBVyxFQUFFLE9BQUssTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxFQUFFLDBDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUEsRUFBQSxDQUFDLENBQUM7WUFDdEYsV0FBVyxHQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjthQUFJO1lBQ0gsV0FBVyxHQUFDLEtBQUssQ0FBQTtTQUNsQjtRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsaUJBQWlCLENBQ2YsVUFBcUIsRUFDckIsYUFBc0IsSUFBSSxFQUMxQixZQUErQjs7UUFFL0IsVUFBVSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDO1FBQzNDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVc7WUFDN0MsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXO1lBQ3hCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDWixVQUFVLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXO1lBQzdDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVztZQUN4QixDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ1osSUFBSSxVQUFVLEVBQUU7WUFDZCxVQUFVLENBQUMsTUFBTSxHQUFHO2dCQUNsQixJQUFJLEVBQUUscUJBQXFCLENBQUMsUUFBUTtnQkFDcEMsSUFBSSxFQUNGLENBQUMsQ0FBQSxNQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxNQUFNLDBDQUFFLElBQUksQ0FBQSxJQUFJLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxJQUFJO29CQUMzRCxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUk7b0JBQ2pCLENBQUMsQ0FBQyxDQUFBLE1BQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLE1BQU0sMENBQUUsSUFBSTt3QkFDMUIsQ0FBQyxDQUFDLE1BQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLE1BQU0sMENBQUUsSUFBSTt3QkFDMUIsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1IsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO2FBQzVDLENBQUM7U0FDSDtRQUNELElBQUksWUFBWSxFQUFFO1lBQ2hCLFVBQVUsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1lBQ3ZDLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDdkMsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztZQUN2QyxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7WUFDbkMsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTtnQkFDdkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUN6QixVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsT0FBTyxDQUNSLENBQUM7YUFDSDtTQUNGO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDO0lBQ0Qsc0NBQXNDO0lBQ3RDLDRCQUE0QixDQUMxQixVQUFxQixFQUNyQixhQUFzQixJQUFJLEVBQzFCLGVBQWtDOztRQUVsQyxVQUFVLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXO1lBQzdDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVztZQUN4QixDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ1osVUFBVSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVztZQUM3QyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNaLFVBQVUsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQztRQUM5QyxJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxNQUFNLEdBQUc7Z0JBQ2xCLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxXQUFXO2dCQUN2QyxJQUFJLEVBQ0YsQ0FBQyxDQUFBLE1BQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLE1BQU0sMENBQUUsSUFBSSxDQUFBLElBQUksQ0FBQyxlQUFlLElBQUksVUFBVSxDQUFDLElBQUk7b0JBQzlELENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSTtvQkFDakIsQ0FBQyxDQUFDLENBQUEsTUFBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsTUFBTSwwQ0FBRSxJQUFJO3dCQUMxQixDQUFDLENBQUMsTUFBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsTUFBTSwwQ0FBRSxJQUFJO3dCQUMxQixDQUFDLENBQUMsRUFBRTtnQkFDUixVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7YUFDNUMsQ0FBQztTQUNIO1FBQ0QsSUFBSSxlQUFlLEVBQUU7WUFDbkIsVUFBVSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUM7WUFDMUMsSUFBSSxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQzFDLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUM7WUFDMUMsSUFBSSxPQUFPLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztZQUN0QyxJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksU0FBUyxFQUFFO2dCQUN2QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQ3pCLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxPQUFPLENBQ1IsQ0FBQzthQUNIO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsVUFBcUI7UUFDbEMsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3JELE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUNiLE1BQW1CLEVBQ25CLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLE9BQWMsRUFDZCxHQUE0QjtRQUU1QixPQUFPLElBQUksQ0FBQyxlQUFlO2FBQ3hCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUM7YUFDekQsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDakIsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ25DO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2dCQUNsQixJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO29CQUN0RCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7aUJBQzFCO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsZUFBZSxDQUFDLGdCQUFpQztRQUMvQyxNQUFNLE1BQU0sR0FBUTtZQUNsQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztZQUM3QixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtZQUMvQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQ3pDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTO1lBQ3JDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNO1lBQy9CLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO1lBQzdCLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVO1lBQ3ZDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXO1NBQzFDLENBQUM7UUFFRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLGFBQWEsQ0FBQyxjQUErQjtRQUMzQyxNQUFNLE1BQU0sR0FBZ0I7WUFDMUIsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLO1lBQzNCLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTtZQUM3QixJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUk7WUFDdEUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUU7WUFDaEQsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO1lBQzdCLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSztZQUMzQixVQUFVLEVBQUUsY0FBYyxDQUFDLFVBQVU7WUFDckMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxRQUFRO1lBQ2pDLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztZQUNuQyxXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVc7WUFDdkMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtZQUNqQyxRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVE7WUFDakMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJO1lBQ3pCLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTtTQUM5QixDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFXLEVBQUUsYUFBa0I7O1FBQzdDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUN4QixJQUFJLFNBQVMsR0FBVSxFQUFFLENBQUM7WUFDMUIsSUFBSSxPQUFPLEdBQVUsRUFBRSxDQUFDO1lBQ3hCLElBQUksSUFBSSxHQUFHLE1BQUEsTUFBQSxNQUFNLENBQUMsYUFBYSwwQ0FBRSxJQUFJLDBDQUFFLElBQUksQ0FBQztZQUM1QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksSUFBSSxJQUFJLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUN0QyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUM3QixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO3FCQUNoQjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FDNUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQzlCLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUMxQixDQUFDO1lBQ0YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ25CLENBQUMsR0FBUSxFQUFFLEVBQUU7O2dCQUNYLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtvQkFDbkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDdEI7Z0JBQ0QsSUFBSSxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLElBQUcsQ0FBQyxJQUFJLENBQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7b0JBQ2hELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7d0JBQ2hDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUU7NEJBQ3RDLElBQUksUUFBUSxLQUFLLFVBQVUsRUFBRTtnQ0FDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzs2QkFDbkI7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsTUFBQSxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQywwQ0FBRSxLQUFLLEVBQUUsQ0FBQztvQkFDbEQsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDekIsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUNyQyxNQUFNLEVBQ04sTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGFBQWEsRUFDckIsR0FBRyxDQUNKLENBQUM7b0JBQ0YsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxLQUFLO3dCQUN6QixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs7d0JBQ2IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztpQkFDOUI7WUFDSCxDQUFDLEVBQ0QsQ0FBQyxFQUFFLEtBQUssRUFBTyxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FDRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLG1CQUFtQixDQUFDLE9BQVksRUFBRSxLQUFhLEVBQUUsUUFBYTtRQUM1RCxJQUNFLE9BQU87WUFDUCxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDbEIsS0FBSztZQUNMLFFBQVEsQ0FBQyxPQUFPO1lBQ2hCLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDM0I7WUFDQSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDeEQsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtvQkFDckIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3QkFDeEIsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUMvRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztpQ0FDeEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7aUNBQ2hCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2lDQUNoQixXQUFXLEVBQUUsQ0FBQzs0QkFDakIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQzlCO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFzQjtRQUNyQyxPQUFPLENBQ0wsT0FBTztZQUNQLE9BQU8sQ0FBQyxJQUFJLENBQ1YsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLENBQUMsQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLElBQUk7Z0JBQzlCLENBQUMsQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLE1BQU07Z0JBQ2hDLENBQUMsQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLE1BQU07Z0JBQ2hDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FDdkQsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxhQUFrQixFQUFFLE9BQXNCO1FBQ3RELElBQUksT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksR0FDTixhQUFhLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDVCxJQUFJLE1BQVcsQ0FBQztRQUVoQixPQUFPLElBQUksQ0FBQyxnQkFBZ0I7YUFDekIsYUFBYSxDQUFDLE9BQU8sQ0FBQzthQUN0QixJQUFJLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUN4QixNQUFNLHFCQUFRLEdBQUcsQ0FBRSxDQUFDO2dCQUNwQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQzNCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzVCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO3dCQUN2QyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQzt3QkFDL0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBUSxHQUFHLENBQUUsQ0FBQzt3QkFDM0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVzs0QkFDekMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNwQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzt3QkFDakMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFOzRCQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FDbkQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQ2IsR0FBRyxDQUNKLENBQUM7eUJBQ0g7cUJBQ0Y7b0JBQ0QsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRTt3QkFDMUMsSUFDRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUk7NEJBQ2hDLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE1BQU07NEJBQ25DLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFlBQVksQ0FBQzs0QkFDNUMsR0FBRyxDQUFDLE1BQU07NEJBQ1YsR0FBRyxDQUFDLE1BQU07NEJBQ1YsR0FBRyxDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUMsTUFBTSxFQUNsQzs0QkFDQSxNQUFNLFNBQVMsR0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDcEQsTUFBTSxJQUFJLEdBQVEsU0FBUyxDQUFDLFlBQVksQ0FDdEMsSUFBSSxFQUNKLEdBQUcsRUFDSCxZQUFZLENBQUMsR0FBRyxFQUNoQixTQUFTLEVBQ1QsR0FBRyxDQUFDLE1BQU0sQ0FDWCxDQUFDOzRCQUVGLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDOzRCQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFRLEdBQUcsQ0FBRSxDQUFDOzRCQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzs0QkFDL0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVztnQ0FDekMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dDQUNwQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzt5QkFDbEM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxlQUFlLENBQUMsZ0JBQWlDO1FBQy9DLE1BQU0sTUFBTSxHQUFvQjtZQUM5QixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztZQUM3QixXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtZQUMzQixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtZQUMzQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztZQUM3QixRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztZQUNyQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTtZQUN2QyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTtZQUN2QyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztZQUNyQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtZQUMvQixRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztZQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsT0FBTztZQUNqQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsYUFBYTtZQUM3QyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtZQUMvQixTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztZQUNyQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtZQUMvQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztZQUM3QixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtTQUNoQyxDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixvQkFBb0IsQ0FBQyxnQkFBaUM7UUFDcEQsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLHVCQUF1QixDQUNyQixnQkFBK0IsRUFDL0IsWUFBK0I7UUFFL0IsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztRQUN2RCxJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDdkMsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztZQUN2QyxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQ25DLElBQUksS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFDL0IsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTtnQkFDdkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUN6QixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsT0FBTyxFQUNQLEtBQUssQ0FDTixDQUFDO2FBQ0g7U0FDRjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBQ0QseUNBQXlDO0lBQ3pDLGtDQUFrQyxDQUNoQyxnQkFBK0IsRUFDL0IsZUFBa0M7UUFFbEMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLFdBQVcsQ0FBQztRQUMxRCxJQUFJLGVBQWUsRUFBRTtZQUNuQixJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQzFDLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUM7WUFDMUMsSUFBSSxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxJQUFJLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO1lBQ3RDLElBQUksS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFDbEMsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTtnQkFDdkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUN6QixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsT0FBTyxFQUNQLEtBQUssQ0FDTixDQUFDO2FBQ0g7U0FDRjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUNiLFNBQWMsRUFDZCxTQUFpQixFQUNqQixTQUFpQixFQUNqQixTQUFpQixFQUNqQixPQUFZLEVBQ1osUUFBcUIsRUFBRTtRQUV2QixPQUFPLElBQUksQ0FBQyxlQUFlO2FBQ3hCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDO2FBQ2hFLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2pCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMseUJBQXlCLENBQUMsZ0JBQWlDO1FBQ3pELGdCQUFnQixDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELDRCQUE0QjtJQUM1QixzQkFBc0IsQ0FBQyxnQkFBaUM7UUFDdEQsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLGNBQWMsQ0FBQyxnQkFBaUM7UUFDOUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLGNBQWMsQ0FBQztRQUM3RCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLHdCQUF3QixDQUFDLGdCQUFpQztRQUN4RCxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsVUFBVSxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCw2Q0FBNkM7SUFDN0MsMkJBQTJCLENBQUMsZ0JBQWlDO1FBQzNELGdCQUFnQixDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxhQUFhLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELHNDQUFzQztJQUN0QyxxQkFBcUIsQ0FBQyxnQkFBaUM7UUFDckQsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLFlBQVksQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLHFCQUFxQixDQUFDLGdCQUFpQztRQUNyRCxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFQSx1Q0FBdUM7SUFDdkMsbUJBQW1CLENBQUMsZ0JBQWlDO1FBQ3BELGdCQUFnQixDQUFDLElBQUksR0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFhLEVBQUUsVUFBa0IsRUFBRTtRQUMvQyxJQUFJLElBQUksR0FBUSxFQUFFLENBQUM7UUFDbkIsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxLQUFhLEVBQUUsRUFBRTs7Z0JBQ3JDLElBQUksQ0FBQSxNQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFELENBQUMsY0FBRCxDQUFDLEdBQUksRUFBRSxDQUFDLDBDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7b0JBQ3BDLE1BQU0sTUFBTSxHQUFRLE1BQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsMENBQUUsTUFBTSxDQUN4QyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLGlDQUNkLElBQUksS0FDUCxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFDbkMsRUFDRixFQUFFLENBQ0gsQ0FBQztvQkFDRixJQUNFLE9BQU87d0JBQ1AsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO3dCQUNsQixDQUFDLENBQUEsTUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUEsRUFDdkM7d0JBQ0EsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQztxQkFDekI7b0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDbkI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQWM7UUFDNUIsSUFBSSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ3JCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTs7Z0JBQ3ZCLE1BQU0sQ0FBQyxJQUFJLGlDQUFNLEdBQUcsS0FBRSxLQUFLLEVBQUUsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsS0FBSywwQ0FBRSxXQUFXLEVBQUUsSUFBRyxDQUFDO1lBQzVELENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUM7U0FDZjtJQUNILENBQUM7SUFFRCxrR0FBa0c7SUFDbEcsU0FBUyxDQUNQLE9BQXNCLEVBQ3RCLEtBQWEsRUFDYixNQUFjLEVBQ2QsTUFBVyxFQUNYLEtBQVUsRUFDVixTQUFjLElBQUksRUFDbEIsYUFBc0IsS0FBSztRQUUzQixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7O2dCQUM5QixJQUFJLENBQUEsTUFBQSxNQUFNLENBQUMsS0FBSywwQ0FBRSxXQUFXLEVBQUUsTUFBSyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQ3ZELE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO29CQUN2QixJQUFJLE1BQU0sRUFBRTt3QkFDVixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztxQkFDeEI7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDbkUsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUN6QixDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDbkUsQ0FBQztnQkFDRixJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDaEIsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFO3dCQUNoQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLFNBQVM7NEJBQ3BDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDO3FCQUNwQztpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsOERBQThEO0lBQzlELHNCQUFzQixDQUFDLE9BQVksRUFBRSxVQUFlO1FBQ2xELElBQUksQ0FBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsYUFBYSxLQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzFELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTs7Z0JBQzlCLE1BQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsMENBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ25DLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLFVBQVUsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLEVBQUU7d0JBQ2hFLElBQ0UsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQ3JDOzRCQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7eUJBQy9COzZCQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFOzRCQUNwRCxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWEsRUFBRSxPQUFzQjtRQUNqRCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUN6QixDQUFDLENBQU0sRUFBRSxFQUFFLFdBQUMsT0FBQSxDQUFBLE1BQUEsQ0FBQyxDQUFDLEtBQUssMENBQUUsV0FBVyxFQUFFLE1BQUksS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUEsRUFBQSxDQUMzRCxDQUFDO1lBRUYsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN2RSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUM7YUFDMUI7U0FDRjtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGlCQUFpQixDQUNmLE9BQXNCLEVBQ3RCLEtBQWtCLEVBQ2xCLE1BQXdCLEVBQ3hCLE9BQWU7UUFFZixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDOUQsSUFBSSxTQUFTLEdBQVksS0FBSyxDQUFDO1lBQy9CLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMzRCxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FDdEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUMxRCxNQUFNLENBQUMsS0FBSyxDQUNmLENBQUM7YUFDSDtZQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFlLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxHQUFHLEdBQVEsRUFBRSxDQUFDO2dCQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxLQUFLLENBQUEsRUFBRTtvQkFDOUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQ2hCLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFDVCxPQUFBLENBQUEsTUFBQSxNQUFNLENBQUMsS0FBSywwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUEsRUFBQSxDQUM1RCxDQUFDO2lCQUNIO3FCQUFNLElBQUksU0FBUyxFQUFFO29CQUNwQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7d0JBQ2QsR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQ2hCLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFDVCxPQUFBLENBQUEsTUFBQSxNQUFNLENBQUMsS0FBSywwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUEsRUFBQSxDQUM1RCxDQUFDO3FCQUNIO3lCQUFNO3dCQUNMLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUNoQixDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQ1QsT0FBQSxDQUFBLE1BQUEsTUFBTSxDQUFDLEtBQUssMENBQUUsV0FBVyxFQUFFLE9BQUssTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSywwQ0FBRSxXQUFXLEVBQUUsQ0FBQSxDQUFBLEVBQUEsQ0FDL0QsQ0FBQztxQkFDSDtpQkFDRjtnQkFDRCxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDeEMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUM3QjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsMEJBQTBCO0lBQzFCLG1CQUFtQixDQUFDLEdBQTJCLEVBQUUsS0FBcUIsRUFBRSxVQUF5QixFQUFFO1FBQ2pHLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs7WUFDdEIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUMxRixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsTUFBTSxTQUFTLEdBQUcsTUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQywwQ0FBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFDLE9BQUEsQ0FBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsV0FBVyxFQUFFLE9BQUssTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsS0FBSywwQ0FBRSxXQUFXLEVBQUUsQ0FBQSxDQUFBLEVBQUEsQ0FBQyxDQUFDO29CQUNyRyxJQUFJLFNBQVMsRUFBRTt3QkFDYixJQUFJLE1BQUEsR0FBRyxDQUFDLFNBQVMsQ0FBQywwQ0FBRSxNQUFNLEVBQUU7NEJBQzFCLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFBLEdBQUcsQ0FBQyxTQUFTLENBQUMsMENBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7eUJBQ3BHOzZCQUFNOzRCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQzt5QkFDMUc7cUJBQ0Y7eUJBQU0sSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBQyxPQUFBLENBQUEsTUFBQSxNQUFNLENBQUMsS0FBSywwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUEsRUFBQSxDQUFDLEVBQUU7d0JBQ2hHLEdBQUcsQ0FBQyxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO3FCQUM5STtvQkFBQSxDQUFDO2lCQUNIO3FCQUFNO29CQUNMLElBQUksQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsTUFBTSxNQUFLLGNBQWMsQ0FBQyxTQUFTLEVBQUU7d0JBQzdDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztxQkFDbkM7eUJBQ0csSUFBSSxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxNQUFNLE1BQUssY0FBYyxDQUFDLE9BQU8sRUFBRTt3QkFDakQsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO3FCQUNsQztpQkFDRDthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsZ0JBQWdCLENBQUMsT0FBTztRQUN0QixJQUFJLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN0QixJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUU7b0JBQ2pCLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUN6QjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzs7O1lBdjlDRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUEvQlEsUUFBUTtZQXVCUixnQkFBZ0I7WUFEaEIsZUFBZTtZQURmLFlBQVk7WUFJWixjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGF6eUxvYWRFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IElBdXRvQ29tcGxldGVTYXZlLCBJRHJvcERvd25SZXF1ZXN0IH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgRUdyaWRTb3J0RGlyZWN0aW9uLFxuICBHcmlkRmlsdGVyQ29udHJvbFR5cGUsXG4gIElHbG9iYWxGaWx0ZXIsXG4gIElHcmlkRmlsdGVyLFxuICBJR3JpZFNvcnQsXG4gIEVHcmlkQ29sdW1uVHlwZSxcbiAgYWRkQ29sdW1uLFxuICBhZGRGaWx0ZXJDb2x1bW4sXG4gIGFkZEdsb2JhbEZpbHRlcixcbiAgSUdyaWRDb2x1bW4sXG4gIEVHcmlkVmFsaWRhdG9yLFxuICBJR3JpZFByb3AsXG4gIElHcmlkUHJvcEZpbHRlcixcbiAgSUdyaWRSb3dQcm9wLFxuICBJR3JpZFJlcG9ydEJ0bixcbiAgRUdyaWRSb3dBY3Rpb24sXG4gIElEaWFsb2dDb2x1bW4sXG4gIEVHcmlkRm9ybWF0dGVyLFxufSBmcm9tICcuLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuL2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRHJvcGRvd25TZXJ2aWNlIH0gZnJvbSAnLi9kcm9wZG93bi5zZXJ2aWNlJztcbmltcG9ydCB7IEh5cGVybGlua1NlcnZpY2UgfSBmcm9tICcuL2h5cGVybGluay5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIHV0aWxpdGllcyBmcm9tICcuL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi9tb2RlbHMvY29tbW9uLm1vZGVsJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZFNlcnZpY2Uge1xuICBzb2Z0Q2FjaGluZ0ZpbHRlcnM6IGFueSA9IHt9O1xuICBhcHBseUZpbHRlckV2ZW50OiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGNvbHVtbkZvY3VzZWRPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRhdGVwaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGh5cGVybGlua1NlcnZpY2U6IEh5cGVybGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkcm9wZG93blNlcnZpY2U6IERyb3Bkb3duU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IFJlcXVlc3RTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgYWZ0ZXIgcHJvcGVyIG1hcHBpbmdcbiAgICovXG4gIGdldEdyaWRGaWx0ZXJzKGV2ZW50OiBMYXp5TG9hZEV2ZW50LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMubWFwRmlsdGVycyhldmVudCwgY29sdW1ucyk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTXVsdGlGaWx0ZXJGaWVsZChmaWx0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKiBSZWNlaXZlcyBmaWx0ZXJzIGFuZCByZXR1cm5zIGFycmF5IGFmdGVyIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAgICogYW5kIGNyZWF0aW5nIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMgZm9yIHNhbWUgZmlsdGVyc1xuICAgKi9cbiAgaGFuZGxlTXVsdGlGaWx0ZXJGaWVsZChmaWx0ZXJzOiBJR3JpZEZpbHRlcltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIGZpbHRlcnNcbiAgICAgIC5tYXAoKHgsIGksIGFycikgPT5cbiAgICAgICAgYXJyLnNvbWUoXG4gICAgICAgICAgKHksIGlkeCkgPT5cbiAgICAgICAgICAgIHkuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgJiYgaSAhPT0gaWR4XG4gICAgICAgIClcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4ueCxcbiAgICAgICAgICAgICAgdmFsdWU6IGFyclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoeikgPT4gei5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0geC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKChhKSA9PiBhLnZhbHVlKVxuICAgICAgICAgICAgICAgIC5qb2luKCksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB4XG4gICAgICApXG4gICAgICAuZmlsdGVyKChmLCBpLCBhcnIpID0+IGFyci5maW5kSW5kZXgoKHgpID0+IHgudmFsdWUgPT09IGYudmFsdWUpID09PSBpKTtcbiAgfVxuXG4gIC8vIFByZXBhcmUgYmFzaWMgZ3JpZCBmaWx0ZXJzXG4gIHByZXBhcmVCYXNpY0ZpbHRlcnMoXG4gICAgZXZlbnQ6IExhenlMb2FkRXZlbnQsXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXVxuICApOiBJR3JpZEZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5tYXBGaWx0ZXJzKGV2ZW50LCBjb2x1bW5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZmlsdGVycyBoYXMgdmFsdWVzIHRoZW4gY29udmVydHMgZ2xvYmFsIGZpbHRlciB2YWx1ZXMgdHlwZSBpbnRvIElHcmlkRmlsdGVyLlxuICAgKi9cbiAgcHJlcGFyZUdsb2JhbEZpbHRlcnMoZ2xvYmFsRmlsdGVyczogSUdsb2JhbEZpbHRlcltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgY29uc3QgZ2xvYmFsRGF0YTogSUdyaWRGaWx0ZXJbXSA9IFtdO1xuXG4gICAgZ2xvYmFsRmlsdGVycz8uZm9yRWFjaCgoZmlsdGVyOiBJR2xvYmFsRmlsdGVyKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICgodHlwZW9mIGZpbHRlci52YWx1ZSA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheShmaWx0ZXIudmFsdWUpKSAmJlxuICAgICAgICAgIGZpbHRlci52YWx1ZS5sZW5ndGgpIHx8XG4gICAgICAgICh0eXBlb2YgZmlsdGVyLnZhbHVlICE9PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICFBcnJheS5pc0FycmF5KGZpbHRlci52YWx1ZSkgJiZcbiAgICAgICAgICBmaWx0ZXIudmFsdWUpIHx8XG4gICAgICAgICh0eXBlb2YgZmlsdGVyLnZhbHVlID09PSAnYm9vbGVhbicgJiYgZmlsdGVyLnZhbHVlICE9PSBudWxsKSB8fFxuICAgICAgICBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UgJiZcbiAgICAgICAgICBmaWx0ZXIudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCd8JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gYWRkIGZpbHRlciBmb3Igc3RhcnQgZGF0ZVxuICAgICAgICAgIGdsb2JhbERhdGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXIpLFxuICAgICAgICAgICAgbWF0Y2hNb2RlOiBmaWx0ZXIubWF0Y2hNb2RlID8gZmlsdGVyLm1hdGNoTW9kZSA6ICdndGUnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gYWRkIGZpbHRlciBmb3IgZW5kIGRhdGVcbiAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyLCBmYWxzZSksXG4gICAgICAgICAgICBtYXRjaE1vZGU6IGZpbHRlci5tYXRjaE1vZGUgPyBmaWx0ZXIubWF0Y2hNb2RlIDogJ2x0ZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIsIGZhbHNlKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci50eXBlICE9PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UpIHtcbiAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyKSxcbiAgICAgICAgICAgIG1hdGNoTW9kZTpcbiAgICAgICAgICAgICAgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVFxuICAgICAgICAgICAgICAgID8gJ2luJ1xuICAgICAgICAgICAgICAgIDogZmlsdGVyLm1hdGNoTW9kZSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3IgPyBmaWx0ZXIub3BlcmF0b3IgOiAnYW5kJyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEdsb2JhbEZpbHRlclZhbHVlKGZpbHRlciksXG4gICAgICAgICAgICB0YWJsZUFsaWFzOiBmaWx0ZXIudGFibGVBbGlhcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBnbG9iYWxEYXRhO1xuICB9XG5cbiAgc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyOiBhbnksIGlzU3RhcnREYXRlOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgaWYgKGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UpIHtcbiAgICAgIGlmIChpc1N0YXJ0RGF0ZSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyLmZyb21GaWVsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXIudG9GaWVsZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbHRlci5maWVsZDtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZ2xvYmFsIGZpbHRlciB2YWx1ZVxuICBzZXRHbG9iYWxGaWx0ZXJWYWx1ZShcbiAgICBmaWx0ZXI6IElHbG9iYWxGaWx0ZXIsXG4gICAgaXNTdGFydERhdGU6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHN0cmluZyB8IG51bWJlciB8IERhdGUgfCBib29sZWFuIHtcbiAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVDpcbiAgICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgYXMgYW55W10pLmpvaW4oJywnKTtcbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKGZpbHRlci52YWx1ZSBhcyBEYXRlKTtcbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFOlxuICAgICAgICBsZXQgZGF0ZVZhbHVlczogc3RyaW5nW10gPSBmaWx0ZXIudmFsdWVcbiAgICAgICAgICA/IGZpbHRlci52YWx1ZS50b1N0cmluZygpLnNwbGl0KCd8JylcbiAgICAgICAgICA6IFtdO1xuICAgICAgICBpZiAoZGF0ZVZhbHVlcyAmJiBkYXRlVmFsdWVzLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgbGV0IGRhdGVWYWx1ZTogRGF0ZSA9IGlzU3RhcnREYXRlXG4gICAgICAgICAgICA/IG5ldyBEYXRlKGRhdGVWYWx1ZXNbMF0pXG4gICAgICAgICAgICA6IG5ldyBEYXRlKGRhdGVWYWx1ZXNbMV0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZGF0ZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YOlxuICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZSBhcyBzdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tWYWxpZGl0eShjb2x1bW5zOiBJR3JpZENvbHVtbltdLCByb3c6IGFueSkge1xuICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gdHJ1ZTtcbiAgICBjb2x1bW5zLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICBpZiAoaXRlbS52YWxpZGF0aW9ucyAmJiAhaXRlbS5kaXNhYmxlZCkge1xuICAgICAgICBpdGVtLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgICBpdGVtLmlzdmFsaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0udmFsaWRhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBtaW5NYXhWYWxpZERhdGUgPSB1dGlsaXRpZXMuY2FsZW5kZXJNaW5NYXhWYWx1ZShcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0sXG4gICAgICAgICAgICBpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2YWxpZCA9IGl0ZW0udmFsaWRhdGlvbnMgJiYgaXRlbS5oZWFkZXI7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlJFUVVJUkVEICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAhaXRlbS5oaWRkZW4gJiZcbiAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gcm93W2l0ZW0uZmllbGRdXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGAke3ZhbGlkfSBpcyByZXF1aXJlZGApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1JTkxFTkdUSCAmJlxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IE1pbmltdW0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWExFTkdUSCAmJlxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IE1heGltdW0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBcbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWE9QVElPTlMgXG5cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBvcHRpb25zOm51bWJlcj0xO1xuICAgICAgICAgICAgdmFyIHZhbHVlPXJvd1tpdGVtLmZpZWxkXTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvd1tpdGVtLmZpZWxkXSwgJ2l0ZW0udmFsdWUnKTtcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdmFsdWUubGVuZ3RoIC0gMTsgeCsrKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZVt4XSA9PSAnOycpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vYmx1ZTtyZWQ7Z3JlZW4gbWF4PTNcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAvLyByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgb3B0aW9ucyA8PSBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gbWF4aW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gb3B0aW9uJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24+MT8ncyc6Jyd9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1JTklNVU0gJiZcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIG1pbk1heFZhbGlkRGF0ZSA9PT0gJ21pbmltdW0nXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgYE1pbmltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tpdGVtLmZpZWxkXSA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWluaW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWElNVU0gJiZcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIG1pbk1heFZhbGlkRGF0ZSA9PT0gJ2dyZWF0ZXInXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgYE1heGltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tpdGVtLmZpZWxkXSA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWF4aW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlBBVFRFUk4gJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0ubWF0Y2goaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubWF0Y2goaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYEVudGVyIHZhbGlkICR7dmFsaWR9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTlVNRVJJQyAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXS50b1N0cmluZygpLm1hdGNoKC9eKDB8Wy0oKTEtOV1cXGQqKSQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJiByb3dbaXRlbS5maWVsZF0ubWF0Y2goL14oMHxbMS05XVxcZCopJC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYEVudGVyICR7aXRlbS52YWxpZGF0aW9uc1tpXS50eXBlfSBmb3IgJHt2YWxpZH1gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlBIT05FICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKD89LipbMC05XSlbLSgpMC05XFxzXSskLylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKD89LipbMC05XSlbLSgpMC05XFxzXSskLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGBFbnRlciB2YWxpZCAke3ZhbGlkfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLkRFQ0lNQUwgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oMHxbLSgpMS05XVxcZCopKFxcLlxcZCspPyQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oMHxbMS05XVxcZCopKFxcLlxcZCspPyQvKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGBFbnRlciAke2l0ZW0udmFsaWRhdGlvbnNbaV0udHlwZX0gZm9yICR7dmFsaWR9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5FTUFJTCAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXVxuICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgLm1hdGNoKC9eW2EtekEtWjAtOS5fLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Miw2fSQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF1cbiAgICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAubWF0Y2goL15bYS16QS1aMC05Ll8tXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLDZ9JC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgc2V0RXJyb3JNZXNzYWdlKGl0ZW06IElHcmlkQ29sdW1uLCBlcnJvck1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGl0ZW0uZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgIGl0ZW0uaXN2YWxpZCA9IGZhbHNlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHNldCBiYXNpYyBmaWx0ZXIgdmFsdWVcbiAgc2V0QmFzaWNGaWx0ZXJWYWx1ZShmaWx0ZXI6IGFueSk6IGFueSB7XG4gICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGZpbHRlciA/IDEgOiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1cbiAgICogUmVjZWl2ZXMgbGF6eSBldmVudCBhbmQgcmV0dXJucyBzb3J0IGFycmF5XG4gICAqL1xuICBnZXRHcmlkU29ydHMoXG4gICAgeyBtdWx0aVNvcnRNZXRhIH06IExhenlMb2FkRXZlbnQsXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXVxuICApOiBJR3JpZFNvcnRbXSB7XG4gICAgcmV0dXJuIChtdWx0aVNvcnRNZXRhIHx8IFtdKS5tYXAoKHsgZmllbGQsIG9yZGVyIH0sIGkpOiBhbnkgPT4gKHtcbiAgICAgIGZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiBvcmRlciA+IDAgPyBFR3JpZFNvcnREaXJlY3Rpb24uQVNDIDogRUdyaWRTb3J0RGlyZWN0aW9uLkRFU0MsXG4gICAgICBwcmlvcml0eTogaSArIDEsXG4gICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogSGFuZGxlcyBkZWZhdWx0IGFuZCBsb29rdXAgZmlsdGVyc1xuICAgKi9cbiAgbWFwRmlsdGVycyhldmVudDogYW55LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgY29uc3QgZmlsdGVyczogSUdyaWRGaWx0ZXJbXSA9IFtdO1xuICAgIE9iamVjdC5lbnRyaWVzKGV2ZW50LmZpbHRlcnMpLmZvckVhY2goKFtmaWVsZCwgdmFsdWVdOiBhbnkpID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAodmFsdWUgYXMgSUdyaWRGaWx0ZXJbXSkuZm9yRWFjaChcbiAgICAgICAgICAoeyBtYXRjaE1vZGUsIG9wZXJhdG9yLCB2YWx1ZTogZmlsdGVyIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0QmFzaWNGaWx0ZXJWYWx1ZShmaWx0ZXIpLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWx1ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZS52YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiAnZXF1YWxzJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogdmFsdWUubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogJ2VxdWFsJyxcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZSh2YWx1ZS52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAodmFsdWUudmFsdWUgfHwgW10pLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogdmFsdWUubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB4LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBSZWNlaXZlcyBsYXp5IGV2ZW50IGFuZCByZXR1cm5zIHBhZ2UgbnVtYmVyXG4gICAqL1xuICBnZXRHcmlkUGFnaW5hdGlvbihldmVudDogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXNOYU4oZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzKSA/IDEgOiBldmVudC5maXJzdCAvIGV2ZW50LnJvd3MgKyAxO1xuICB9XG5cbiAgLy8gZ2V0IGZvcm1hdHRlZCBkYXRlXG4gIGdldEZvcm1hdHRlZERhdGUodmFsdWU6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgRGF0ZShgJHt2YWx1ZX0gWmApLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApO1xuICB9XG5cbiAgIC8vIGNoYW5nZSByb3cga2V5IGFuZCB2YWx1ZSB3aGVuIHVzaW5nIHNldEdyaWRSb3dQcm9wVmFsdWUgZnVuY3Rpb25cbiAgIHNldFJvd1ZhbHVlKHJvd0RhdGE6IGFueSkge1xuICAgIE9iamVjdC5rZXlzKHJvd0RhdGEpPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGlmKHJvdyA9PT0gRUdyaWRSb3dBY3Rpb24uREVMRVRFQlROIHx8IHJvdyA9PT0gRUdyaWRSb3dBY3Rpb24uRURJVEJUTil7XG4gICAgICAgIGRlbGV0ZSByb3dEYXRhW3Jvd107XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgcm93RGF0YVtyb3ddICYmXG4gICAgICAgIHR5cGVvZihyb3dEYXRhW3Jvd10pID09PSAnb2JqZWN0JyAmJlxuICAgICAgICByb3dEYXRhW3Jvd10/LmFjdGlvbj8uZmllbGRcbiAgICAgICkge1xuICAgICAgICBpZihyb3dEYXRhW3Jvd10/LmV4dHJhRmllbGQpe1xuICAgICAgICAgIGRlbGV0ZSByb3dEYXRhW3Jvd107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm93RGF0YVtyb3ddID0gcm93RGF0YVtyb3ddPy50ZXh0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvd0RhdGE7XG4gIH1cblxuICAvLyBjb252ZXJ0IHJvdyBhY3Rpb25zIG9iamVjdCBpbnRvIHNpbXBsZSB2YWx1ZVxuICBzZXRHcmlkUm93RGF0YShyb3dEYXRhKXtcbiAgICBpZihBcnJheS5pc0FycmF5KHJvd0RhdGEpKXtcbiAgICAgIHJvd0RhdGEuZm9yRWFjaCgocm93KT0+e1xuICAgICAgICByb3cgPSB0aGlzLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByb3dEYXRhID0gdGhpcy5zZXRSb3dWYWx1ZShyb3dEYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd0RhdGE7XG4gIH1cblxuICAvLyBnZXQgYWxsb3dTYXZlIHRydWUgcm93IGxpc3RcbiAgZ2V0QWxsb3dTYXZlUm93bGlzdChyb3dzRGF0YTogYW55W10gPSBbXSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIHJvd3NEYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJvd3NEYXRhKTtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSUdyaWRDb2x1bW4pID0+IHtcbiAgICAgIGxldCBmaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgbGV0IG9iaiA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICAgICAgaWYgKG9iaj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgb2JqLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHguaW5jbHVkZXMoJ19vYmonKSAmJiB0eXBlb2Ygcm93W3hdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSByb3dbeF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSByb3dbZmllbGRdO1xuICAgICAgICAgIHJvdyA9IHRoaXMuc2V0Um93VmFsdWUocm93KTtcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gcm93W2ZpZWxkXVxuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5DSEFSKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJ1knIDogJ04nO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuTlVNRVJJQykge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICcxJyA6ICcwJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkJPT0xFQU4pIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGZvcm1hdFxuICAgICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAnaGg6bW0gYScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2hvd1RpbWUpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSByb3dbZmllbGRdLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiByb3dzRGF0YTtcbiAgfVxuXG4gIC8vIGdldCBhbGxvd1NhdmUgdHJ1ZSB8fCB1bmRlZmluZSByb3dcbiAgZ2V0QWxsb3dTYXZlUm93KHJvd0luZm86IHt9ID0ge30sIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pIHtcbiAgICBsZXQgcm93ID0geyAuLi5yb3dJbmZvIH07XG4gICAgcm93ID0gdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKHJvdyk7XG4gICAgcm93ID0gdGhpcy5zZXRSb3dWYWx1ZShyb3cpO1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBsZXQgZmllbGQgPSBjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNvbHVtbi5hbGxvd1NhdmUgPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdylcbiAgICAgICAga2V5cy5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgaWYgKHguaW5jbHVkZXMoJ19vYmonKSAmJiB0eXBlb2Ygcm93W3hdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZGVsZXRlIHJvd1t4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHJvd1tmaWVsZF1cbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkNIQVIpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJ1knIDogJ04nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLk5VTUVSSUMpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJzEnIDogJzAnO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkJPT0xFQU4pIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAnaGg6bW0gYScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNob3dUaW1lKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gcm93W2ZpZWxkXS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRDb2x1bW4oY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICAgIDogJ2xhYmVsJztcbiAgICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgICA6ICd2YWx1ZSc7XG4gICAgfSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cpIHtcbiAgICAgIGlmICghY29sdW1uSW5mby5maWx0ZXJpbmcgJiYgIWNvbHVtbkluZm8uZmlsdGVyKSB7XG4gICAgICAgIGNvbHVtbkluZm8uZmlsdGVyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY29sdW1uSW5mby5wYXJhbXMgJiYgIWNvbHVtbkluZm8uZGF0YSkge1xuICAgICAgICBjb2x1bW5JbmZvLmRhdGEgPSBjb2x1bW5JbmZvLnBhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29sdW1uOiBJR3JpZENvbHVtbiA9IHtcbiAgICAgIGFsbG93U2VhcmNoOiBjb2x1bW5JbmZvLmFsbG93U2VhcmNoLFxuICAgICAgYWxsb3dBdXRvQ29tcGxldGVTYXZlOiBjb2x1bW5JbmZvLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSxcbiAgICAgIHVuaXF1ZUtleTogY29sdW1uSW5mby51bmlxdWVLZXksXG4gICAgICBmaWVsZDogY29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogY29sdW1uSW5mby5oZWFkZXIsXG4gICAgICBzdHlsZTogY29sdW1uSW5mby5zdHlsZSxcbiAgICAgIHR5cGU6IGNvbHVtbkluZm8udHlwZSxcbiAgICAgIGZvcm1hdDogY29sdW1uSW5mby5mb3JtYXQsXG4gICAgICBkYXRhOiBjb2x1bW5JbmZvLmRhdGEsXG4gICAgICBmaWx0ZXJpbmc6IGNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgaGlkZGVuOiBjb2x1bW5JbmZvLmhpZGRlbixcbiAgICAgIHNvcnRpbmc6IGNvbHVtbkluZm8uc29ydGluZyxcbiAgICAgIGZpbHRlcjogY29sdW1uSW5mby5maWx0ZXIsXG4gICAgICBoeXBlcmxpbms6IGNvbHVtbkluZm8uaHlwZXJsaW5rLFxuICAgICAgdGFibGVBbGlhczogY29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgbGlua0lkOiBjb2x1bW5JbmZvLmxpbmtJZCxcbiAgICAgIG1pbnV0ZXNJbnRlcnZhbDogY29sdW1uSW5mby5taW51dGVzSW50ZXJ2YWwsXG4gICAgICBwYXJhbXM6IGNvbHVtbkluZm8ucGFyYW1zLFxuICAgICAgc2hvd09wdGlvbjogY29sdW1uSW5mby5zaG93T3B0aW9uLFxuICAgICAgZGlzcGxheVRleHQ6IGNvbHVtbkluZm8uZGlzcGxheVRleHQsXG4gICAgICB0YXJnZXQ6IGNvbHVtbkluZm8udGFyZ2V0LFxuICAgICAgZGlzYWJsZWQ6IGNvbHVtbkluZm8uZGlzYWJsZWQsXG4gICAgICBhbGxvd1NhdmU6IGNvbHVtbkluZm8uYWxsb3dTYXZlLFxuICAgICAgYWxsb3dFZGl0OiBjb2x1bW5JbmZvLmFsbG93RWRpdCxcbiAgICAgIGVkaXRhYmxlOiBjb2x1bW5JbmZvLmVkaXRhYmxlLFxuICAgICAgZWRpdExpbms6IGNvbHVtbkluZm8uZWRpdExpbmssXG4gICAgICBzYXZlQXNTdHJpbmc6IGNvbHVtbkluZm8uc2F2ZUFzU3RyaW5nLFxuICAgICAgY29tcG9uZW50OiBjb2x1bW5JbmZvLmNvbXBvbmVudCxcbiAgICAgIG9uQ2xpY2s6IGNvbHVtbkluZm8ub25DbGljayxcbiAgICAgIG9uUmV0dXJuOiBjb2x1bW5JbmZvLm9uUmV0dXJuLFxuICAgICAgb25Gb2N1c091dDogY29sdW1uSW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25DaGFuZ2U6IGNvbHVtbkluZm8ub25DaGFuZ2UsXG4gICAgICBhZ2dyZWdhdGU6IGNvbHVtbkluZm8uYWdncmVnYXRlLFxuICAgICAgZm9ybWF0dGVyOiBjb2x1bW5JbmZvLmZvcm1hdHRlcixcbiAgICAgIHBlcm1pc3Npb25zOiBjb2x1bW5JbmZvLnBlcm1pc3Npb25zLFxuICAgICAgb3B0aW9uTGFiZWw6IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogY29sdW1uSW5mby5vcHRpb25WYWx1ZSxcbiAgICAgIGRyb3BEb3duUHJvcDogY29sdW1uSW5mby5kcm9wRG93blByb3AsXG4gICAgICBzaG93VGltZTogY29sdW1uSW5mby5zaG93VGltZSxcbiAgICAgIHRpbWVPbmx5OiBjb2x1bW5JbmZvLnRpbWVPbmx5LFxuICAgICAgbG9va3VwQ29udHJvbDogY29sdW1uSW5mby5sb29rdXBDb250cm9sLFxuICAgICAgZGlzcGxheUZpZWxkOiBjb2x1bW5JbmZvLmRpc3BsYXlGaWVsZCxcbiAgICAgIGljb246IGNvbHVtbkluZm8uaWNvbixcbiAgICAgIGNvbG9yOiBjb2x1bW5JbmZvLmNvbG9yLFxuICAgICAgaWQ6IGNvbHVtbkluZm8uaWQsXG4gICAgICB2YWx1ZTogY29sdW1uSW5mby52YWx1ZSxcbiAgICAgIHZhbGlkYXRpb25zOiBjb2x1bW5JbmZvLnZhbGlkYXRpb25zLFxuICAgIH07XG5cbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gQWRkaW5nIFJlcG9ydCBCdXR0b24gRnVuY3Rpb24gZm9yIEdyaWRcbiAgYWRkUmVwb3J0QnRuKGNvbHVtbkluZm86IElHcmlkUmVwb3J0QnRuKSB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLlJFUE9SVDtcbiAgICByZXR1cm4gY29sdW1uSW5mbztcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgaW5wdXQgZ3JpZCBjb2x1bW5cbiAgYWRkSW5wdXRDb2x1bW4oXG4gICAgZmlsdGVyQ29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgZmlsdGVyQ29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVCxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihmaWx0ZXJDb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihmaWx0ZXJDb2x1bW5JbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgbnVtZXJpYyBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZE51bWVyaWNDb2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQztcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGNhbGVuZGFyIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkQ2FsZW5kYXJDb2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUixcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbHVtbkluZm8udHlwZSA9IGNvbHVtbkluZm8udHlwZSA/IGNvbHVtbkluZm8udHlwZSA6IEVHcmlkQ29sdW1uVHlwZS5EQVRFO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgYm9vbGVhbiBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZEJvb2xlYW5Db2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgKGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSxcbiAgICAgICAgKGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWCxcbiAgICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAvLyBhZGQgTG9va1VwIGNvbHVtbiBmb3IgR3JpZFxuIGFkZExvb2tVcENvbHVtbihjb2x1bW5JbmZvOiBJRGlhbG9nQ29sdW1uLCBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSk6IElHcmlkQ29sdW1uIHtcbiAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVCwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xuICB9XG4gIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQ7XG4gIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbn1cblxuLy8gYWRkIGRpYWxvZyBjb2x1bW4gZm9yIEdyaWRcbiBhZGREaWFsb2dDb2x1bW4oY29sdW1uSW5mbzogSURpYWxvZ0NvbHVtbiwgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUpOiBJR3JpZENvbHVtbiB7XG4gIGlmIChzaG93RmlsdGVyKSB7XG4gICAgY29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVCwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xuICB9XG4gIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0c7XG4gIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiB9XG5cbiAgLy8gYWRkIEJ1dHRvbiBmb3IgZ3JpZCBjb2x1bW5cbiAgYWRkQnV0dG9uQ29sdW1uKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQUREX0JVVFRPTjtcbiAgICBpZiAoIWNvbHVtbkluZm8uZmllbGQpIHtcbiAgICAgIGNvbHVtbkluZm8uZmllbGQgPSBjb2x1bW5JbmZvLnZhbHVlID8gY29sdW1uSW5mby52YWx1ZSA6IGNvbHVtbkluZm8uaWNvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gYWRkIEF1dG9Db21wbGV0ZSBmb3IgZ3JpZCBjb2x1bW5cbiAgYWRkQXV0b0NvbXBsZXRlKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIC8vIFNlYXJjaCBBdXRvQ29tcGxldGUgRGF0YSBmb3IgR3JpZFxuICBnZXRBdXRvQ29tcGxldGVEYXRhKFxuICAgIGNvbHVtbj86IGFueSxcbiAgICB1bmlxdWVLZXk/OiBzdHJpbmcsXG4gICAgZmlsdGVycz86IGFueVtdLFxuICAgIHNlYXJjaDogc3RyaW5nID0gJydcbiAgKTogYW55IHtcbiAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlXG4gICAgICAuZ2V0PGFueVtdLCBhbnk+KCcvRGF0YS9GZXRjaCcsIHsgdW5pcXVlS2V5OiB1bmlxdWVLZXksIGZpbHRlcnMgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIC8vICBjb25zb2xlLmxvZygnZ2V0IHJlc3BvbnNlJywgcmVzcG9uc2UsICdzZWFyY2ggd2FzJywgc2VhcmNoKVxuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgbGV0IGV4aXN0SW5SZWNvcmQgPSByZXNwb25zZS5yZWNvcmRzPy5zb21lKFxuICAgICAgICAgICAgKHJlY29yZCkgPT5cbiAgICAgICAgICAgICAgcmVjb3JkW2NvbHVtbi5kaXNwbGF5RmllbGRdICYmXG4gICAgICAgICAgICAgIHJlY29yZFtjb2x1bW4uZGlzcGxheUZpZWxkXT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT1cbiAgICAgICAgICAgICAgICBzZWFyY2g/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghZXhpc3RJblJlY29yZCkge1xuICAgICAgICAgICAgcmVzcG9uc2UucmVjb3Jkcy51bnNoaWZ0KHsgW2NvbHVtbi5kaXNwbGF5RmllbGRdOiBzZWFyY2ggfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbHVtbi5kYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpO1xuICAgICAgfSk7XG4gIH1cbiBhc3luYyBhZGRBdXRvQ29tcGxldGVWYWx1ZSh1bmlxdWVLZXk6IElBdXRvQ29tcGxldGVTYXZlLCB2YWx1ZTphbnksIGNvbHVtbjphbnksIHJvdzphbnkpIHtcbiAgbGV0IG5ld1ZhbHVlID0ge31cblxuICBmb3IodmFyIGkgPTA7aTx1bmlxdWVLZXkudmFsdWVzLmxlbmd0aDsgaSsrKXtcbiAgICBpZih1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWUudG9Mb3dlckNhc2UoKT09Y29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpfHx1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWUudG9Mb3dlckNhc2UoKT09Y29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSl7XG4gICAgICAvLyBjb25zb2xlLmxvZygnbWF0Y2hpbmcgTmFtZScsIGNvbHVtbi5maWVsZCwgY29sdW1uLmRpc3BsYXlGaWVsZCwgdW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICBuZXdWYWx1ZVt1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWVdPXZhbHVlO1xuICAgIFxuICAgIH1lbHNle1xuICAgICAgbmV3VmFsdWVbdW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lXT10aGlzLmdldFNvZnRDb2RpbmdWYWx1ZSh1bmlxdWVLZXkudmFsdWVzW2ldLnZhbHVlLCByb3cpXG4gICAgfSBcbiAgfVxuXG5cbiAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlXG4gICAgICAuZ2V0PGFueVtdLCBhbnk+KCcvRGF0YS9TYXZlJywgeyB1bmlxdWVLZXk6dW5pcXVlS2V5Lm5hbWUsICB2YWx1ZXM6IG5ld1ZhbHVlIH0pXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICh7ZXJyb3J9KT0+e1xuICAgICAgICAgIHJldHVybiBlcnJvclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnc3VjY2Vzcyc7XG4gICAgICB9KTtcbiAgfVxuICBnZXRTb2Z0Q29kaW5nVmFsdWUodmFsdWUsIHJvdyl7XG4gICAgbGV0IHJldHVyblZhbHVlO1xuICAgIGlmKHZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSYmdmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygnfScpKXtcbiAgICAgIHZhbHVlPXZhbHVlLnJlcGxhY2UoXCJ7XCIsXCJcIikucmVwbGFjZShcIn1cIixcIlwiKTtcbiAgICAgIGxldCByb3dLZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGxldCBrZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICByZXR1cm5WYWx1ZT1yb3dba2V5XTtcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVyblZhbHVlPXZhbHVlXG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgZHJvcGRvd24gZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGREcm9wZG93bkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOO1xuICAgIGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPSBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgIDogJ2xhYmVsJztcbiAgICBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID0gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA6ICd2YWx1ZSc7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV04sXG4gICAgICAgIGRhdGE6XG4gICAgICAgICAgIWNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSAmJiAhZHJvcERvd25Qcm9wICYmIGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgIDogY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChkcm9wRG93blByb3ApIHtcbiAgICAgIGNvbHVtbkluZm8uZHJvcERvd25Qcm9wID0gZHJvcERvd25Qcm9wO1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IGRyb3BEb3duUHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBkcm9wRG93blByb3AuZmlsdGVycztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgY29sdW1uSW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgICB9XG4gIH1cbiAgLy8gYWRkIE11bHRpU2VsZWN0RHJvcERvd24gZ3JpZCBjb2x1bW5cbiAgYWRkTXVsdGlTZWxlY3REcm9wRG93bkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUsXG4gICAgbXVsdGlTZWxlY3RQcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgOiAnbGFiZWwnO1xuICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgIDogJ3ZhbHVlJztcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1Q7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1QsXG4gICAgICAgIGRhdGE6XG4gICAgICAgICAgIWNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSAmJiAhbXVsdGlTZWxlY3RQcm9wICYmIGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgIDogY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChtdWx0aVNlbGVjdFByb3ApIHtcbiAgICAgIGNvbHVtbkluZm8uZHJvcERvd25Qcm9wID0gbXVsdGlTZWxlY3RQcm9wO1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IG11bHRpU2VsZWN0UHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gbXVsdGlTZWxlY3RQcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBtdWx0aVNlbGVjdFByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBtdWx0aVNlbGVjdFByb3AuZmlsdGVycztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgY29sdW1uSW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgICB9XG4gIH1cblxuICBzaG93RmlsdGVySWNvbihjb2x1bW5JbmZvOiBhZGRDb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uSW5mby5maWx0ZXIgJiYgY29sdW1uSW5mby5maWx0ZXIuc2hvd0ZpbHRlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZXREcm9wZG93bkRhdGEoXG4gICAgY29sdW1uOiBJR3JpZENvbHVtbixcbiAgICB1bmlxdWVLZXk6IHN0cmluZyxcbiAgICB2YWx1ZVByb3A6IHN0cmluZyxcbiAgICBsYWJlbFByb3A6IHN0cmluZyxcbiAgICBmaWx0ZXJzOiBhbnlbXSxcbiAgICByb3c/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XG4gICk6IFByb21pc2U8YW55PiB8IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25TZXJ2aWNlXG4gICAgICAuc2V0RHJvcERvd25MaXN0KHVuaXF1ZUtleSwgdmFsdWVQcm9wLCBsYWJlbFByb3AsIGZpbHRlcnMpXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX2RhdGEnXSA9IHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW4uZGF0YSA9IHJlcztcbiAgICAgICAgICBpZiAoY29sdW1uLmZpbHRlciAmJiBjb2x1bW4uZmlsdGVyLnR5cGUgPT09ICdkcm9wZG93bicpIHtcbiAgICAgICAgICAgIGNvbHVtbi5maWx0ZXIuZGF0YSA9IHJlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbik7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIGNvbHVtbiB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGRGaWx0ZXJDb2x1bW4oZmlsdGVyQ29sdW1uSW5mbzogYWRkRmlsdGVyQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbnN0IGNvbHVtbjogYW55ID0ge1xuICAgICAgZmllbGQ6IGZpbHRlckNvbHVtbkluZm8uZmllbGQsXG4gICAgICBoZWFkZXI6IGZpbHRlckNvbHVtbkluZm8uaGVhZGVyLFxuICAgICAgZmlsdGVyOiB7IHR5cGU6IGZpbHRlckNvbHVtbkluZm8uZmlsdGVyIH0sXG4gICAgICBmaWx0ZXJpbmc6IGZpbHRlckNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgaGlkZGVuOiBmaWx0ZXJDb2x1bW5JbmZvLmhpZGRlbixcbiAgICAgIHN0eWxlOiBmaWx0ZXJDb2x1bW5JbmZvLnN0eWxlLFxuICAgICAgdGFibGVBbGlhczogZmlsdGVyQ29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgcGVybWlzc2lvbnM6IGZpbHRlckNvbHVtbkluZm8ucGVybWlzc2lvbnMsXG4gICAgfTtcblxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBhZGQgZGF0ZSBncmlkIGNvbHVtbiB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGREYXRlQ29sdW1uKGRhdGVDb2x1bW5JbmZvOiBhZGRGaWx0ZXJDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29uc3QgY29sdW1uOiBJR3JpZENvbHVtbiA9IHtcbiAgICAgIGZpZWxkOiBkYXRlQ29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogZGF0ZUNvbHVtbkluZm8uaGVhZGVyLFxuICAgICAgdHlwZTogZGF0ZUNvbHVtbkluZm8udHlwZSA/IGRhdGVDb2x1bW5JbmZvLnR5cGUgOiBFR3JpZENvbHVtblR5cGUuREFURSxcbiAgICAgIGZpbHRlcmluZzogZGF0ZUNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgZmlsdGVyOiB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUiB9LFxuICAgICAgZm9ybWF0OiBkYXRlQ29sdW1uSW5mby5mb3JtYXQsXG4gICAgICBzdHlsZTogZGF0ZUNvbHVtbkluZm8uc3R5bGUsXG4gICAgICB0YWJsZUFsaWFzOiBkYXRlQ29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgZGlzYWJsZWQ6IGRhdGVDb2x1bW5JbmZvLmRpc2FibGVkLFxuICAgICAgYWxsb3dTYXZlOiBkYXRlQ29sdW1uSW5mby5hbGxvd1NhdmUsXG4gICAgICBwZXJtaXNzaW9uczogZGF0ZUNvbHVtbkluZm8ucGVybWlzc2lvbnMsXG4gICAgICBjb21wb25lbnQ6IGRhdGVDb2x1bW5JbmZvLmNvbXBvbmVudCxcbiAgICAgIHNob3dUaW1lOiBkYXRlQ29sdW1uSW5mby5zaG93VGltZSxcbiAgICAgIHRpbWVPbmx5OiBkYXRlQ29sdW1uSW5mby50aW1lT25seSxcbiAgICAgIGRhdGE6IGRhdGVDb2x1bW5JbmZvLmRhdGEsXG4gICAgICBoaWRkZW46IGRhdGVDb2x1bW5JbmZvLmhpZGRlbixcbiAgICB9O1xuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICBzZXRMb29rVXBGaWx0ZXIoY29sdW1uOiBhbnksIGRpYWxvZ1NlcnZpY2U6IGFueSkge1xuICAgIGlmIChjb2x1bW4ubG9va3VwQ29udHJvbCkge1xuICAgICAgbGV0IGRhdGFWYWx1ZTogYW55W10gPSBbXTtcbiAgICAgIGxldCBkYXRhS2V5OiBhbnlbXSA9IFtdO1xuICAgICAgbGV0IGRhdGEgPSBjb2x1bW4ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICAgIGlmIChkYXRhICYmIGtleXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YVtrZXldLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSkge1xuICAgICAgICAgICAgZGF0YVZhbHVlLnVuc2hpZnQoZGF0YVtrZXldKTtcbiAgICAgICAgICAgIGRhdGFLZXkudW5zaGlmdChrZXkpO1xuICAgICAgICAgICAgZGF0YVtrZXldID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZiA9IGRpYWxvZ1NlcnZpY2Uub3BlbihcbiAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wuY29tcG9uZW50LFxuICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhXG4gICAgICApO1xuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRhdGFLZXk/Lmxlbmd0aCA+IDAgJiYgZGF0YVZhbHVlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkYXRhS2V5LmZvckVhY2goKGtleSwga2V5SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgZGF0YVZhbHVlLmZvckVhY2goKHZhbHVlLCB2YWx1ZUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGtleUluZGV4ID09PSB2YWx1ZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb29rVXBfZmlsdGVyJyk/LmZvY3VzKCk7XG4gICAgICAgICAgICBsZXQgZmllbGQgPSBjb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB1dGlsaXRpZXMuc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgY29sdW1uPy5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgICByZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb2x1bW4udmFsdWUgPSB2YWx1ZT8udmFsdWVcbiAgICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgICA6IHJlc1tmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICh7IGVycm9yIH06IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgSHlwZXJsaW5rIGZpZWxkIGFzIGEgcGFyYW0gVmFsdWVcbiAgc2V0RmllbGRBc0xpbmtQYXJhbShjb2x1bW5zOiBhbnksIGZpZWxkOiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBjb2x1bW5zICYmXG4gICAgICBjb2x1bW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgIGZpZWxkICYmXG4gICAgICByZXNwb25zZS5yZWNvcmRzICYmXG4gICAgICByZXNwb25zZS5yZWNvcmRzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKS5mb3JFYWNoKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4OiBhbnkpID0+IHguZmllbGQgPT09IGZpZWxkKTtcbiAgICAgICAgaWYgKG9iaiAmJiBvYmoucGFyYW1zKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iai5wYXJhbXMpO1xuICAgICAgICAgIGtleXMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChvYmoucGFyYW1zW2tleV0gJiYgb2JqLnBhcmFtc1trZXldLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSkge1xuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBvYmoucGFyYW1zW2tleV1cbiAgICAgICAgICAgICAgICAucmVwbGFjZSgneycsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd9JywgJycpXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIG9iai5wYXJhbXNba2V5XSA9IHJlc1t2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhc0FueUxpbmtDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjb2x1bW5zICYmXG4gICAgICBjb2x1bW5zLnNvbWUoXG4gICAgICAgICh4KSA9PlxuICAgICAgICAgIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICAgIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuSUZSQU1FIHx8XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHxcbiAgICAgICAgICAoeC5saW5rSWQgJiYgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHNldEh5cGVybGlua3MoZmV0Y2hSZXNwb25zZTogYW55LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogYW55IHtcbiAgICBsZXQgcmVjb3JkczogYW55ID0gW107XG4gICAgbGV0IGRhdGEgPVxuICAgICAgZmV0Y2hSZXNwb25zZSAmJiBmZXRjaFJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuc2V0RGF0YUZpZWxkcyhmZXRjaFJlc3BvbnNlLnJlY29yZHMpXG4gICAgICAgIDogW107XG4gICAgbGV0IG5ld1JvdzogYW55O1xuXG4gICAgcmV0dXJuIHRoaXMuaHlwZXJsaW5rU2VydmljZVxuICAgICAgLmFkZEh5cGVybGlua3MoY29sdW1ucylcbiAgICAgIC50aGVuKChsaW5rc1Jlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgZGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgIG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HKSB7XG4gICAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbC5maWVsZCArICdfb2JqJztcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXSA9IHsgLi4uY29sIH07XG4gICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSBjb2wuZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgICA6IHJvd1tjb2wuZmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgIGlmIChjb2wuZGF0YSAmJiBjb2wuZGF0YS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaWFsb2dEYXRhID0gdXRpbGl0aWVzLmZpbmRLZXlzQW5kVmFsdWUoXG4gICAgICAgICAgICAgICAgICBjb2wuZGF0YS5kYXRhLFxuICAgICAgICAgICAgICAgICAgcm93XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGlua3NSZXNwb25zZS5mb3JFYWNoKChsaW5rUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHxcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUKSAmJlxuICAgICAgICAgICAgICAgIGNvbC5saW5rSWQgJiZcbiAgICAgICAgICAgICAgICBjb2wucGFyYW1zICYmXG4gICAgICAgICAgICAgICAgY29sLmxpbmtJZCA9PT0gbGlua1Jlc3BvbnNlLmxpbmtJZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbUtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoY29sLnBhcmFtcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluazogYW55ID0gdXRpbGl0aWVzLnNldEh5cGVybGluayhcbiAgICAgICAgICAgICAgICAgIGtleXMsXG4gICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICBsaW5rUmVzcG9uc2UudXJsLFxuICAgICAgICAgICAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICAgICAgICAgICAgY29sLnBhcmFtc1xuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBjb2wuZmllbGQgKyAnX29iaic7XG4gICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXSA9IHsgLi4uY29sIH07XG4gICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5oeXBlcmxpbmsgPSBsaW5rO1xuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSBjb2wuZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgID8gcm93W2NvbC5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgICAgICAgOiByb3dbY29sLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZWNvcmRzLnB1c2gobmV3Um93KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZWNvcmRzO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCBnbG9iYWwgZmlsdGVyIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBjb25zdCBjb2x1bW46IGFkZEdsb2JhbEZpbHRlciA9IHtcbiAgICAgIGZpZWxkOiBnbG9iZWxGaWx0ZXJJbmZvLmZpZWxkLFxuICAgICAgZGlzcGxheVRleHQ6IGdsb2JlbEZpbHRlckluZm8uZGlzcGxheVRleHQsXG4gICAgICB2YWxpZGF0aW9uczogZ2xvYmVsRmlsdGVySW5mby52YWxpZGF0aW9ucyxcbiAgICAgIHR5cGU6IGdsb2JlbEZpbHRlckluZm8udHlwZSxcbiAgICAgIGRhdGE6IGdsb2JlbEZpbHRlckluZm8uZGF0YSxcbiAgICAgIHZhbHVlOiBnbG9iZWxGaWx0ZXJJbmZvLnZhbHVlLFxuICAgICAgdmFsdWVUd286IGdsb2JlbEZpbHRlckluZm8udmFsdWVUd28sXG4gICAgICBtYXRjaE1vZGU6IGdsb2JlbEZpbHRlckluZm8ubWF0Y2hNb2RlLFxuICAgICAgb3BlcmF0b3I6IGdsb2JlbEZpbHRlckluZm8ub3BlcmF0b3IsXG4gICAgICB0YWJsZUFsaWFzOiBnbG9iZWxGaWx0ZXJJbmZvLnRhYmxlQWxpYXMsXG4gICAgICBvcHRpb25MYWJlbDogZ2xvYmVsRmlsdGVySW5mby5vcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvblZhbHVlOiBnbG9iZWxGaWx0ZXJJbmZvLm9wdGlvblZhbHVlLFxuICAgICAgb25Gb2N1c091dDogZ2xvYmVsRmlsdGVySW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25SZXR1cm46IGdsb2JlbEZpbHRlckluZm8ub25SZXR1cm4sXG4gICAgICBmaWx0ZXJpbmc6IGdsb2JlbEZpbHRlckluZm8uZmlsdGVyaW5nLFxuICAgICAgY29sdW1uOiBnbG9iZWxGaWx0ZXJJbmZvLmNvbHVtbixcbiAgICAgIGRheVJhbmdlOiBnbG9iZWxGaWx0ZXJJbmZvLmRheVJhbmdlLFxuICAgICAgZnJvbUZpZWxkOiBnbG9iZWxGaWx0ZXJJbmZvLmZyb21GaWVsZCxcbiAgICAgIHRvRmllbGQ6IGdsb2JlbEZpbHRlckluZm8udG9GaWVsZCxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGdsb2JlbEZpbHRlckluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGFsbG93U2VhcmNoOiBnbG9iZWxGaWx0ZXJJbmZvLmFsbG93U2VhcmNoLFxuICAgICAgZGlzYWJsZWQ6IGdsb2JlbEZpbHRlckluZm8uZGlzYWJsZWQsXG4gICAgICBoaWRkZW46IGdsb2JlbEZpbHRlckluZm8uaGlkZGVuLFxuICAgICAgbGFiZWxUZXh0OiBnbG9iZWxGaWx0ZXJJbmZvLmxhYmVsVGV4dCxcbiAgICAgIHByZWZpeDogZ2xvYmVsRmlsdGVySW5mby5wcmVmaXgsXG4gICAgICBjb2xvcjogZ2xvYmVsRmlsdGVySW5mby5jb2xvcixcbiAgICAgIGZvcm1hdDogZ2xvYmVsRmlsdGVySW5mby5mb3JtYXQsXG4gICAgfTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gYWRkIGdsb2JhbCBpbnB1dCBmaWx0ZXJcbiAgYWRkR2xvYmFsSW5wdXRGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgZHJvcGRvd24gZmlsdGVyXG4gIGFkZEdsb2JhbERyb3Bkb3duRmlsdGVyKFxuICAgIGdsb2JlbEZpbHRlckluZm86IElHbG9iYWxGaWx0ZXIsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EUk9QRE9XTjtcbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBkcm9wRG93blByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xuICAgICAgbGV0IHNvcnRzID0gZHJvcERvd25Qcm9wLnNvcnRzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBnbG9iZWxGaWx0ZXJJbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgc29ydHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xuICAgIH1cbiAgfVxuICAvLyBhZGQgZ2xvYmFsIE11bHRpU2VsZWN0IGRyb3Bkb3duIGZpbHRlclxuICBhZGRHbG9iYWxNdWx0aVNlbGVjdERyb3BEb3duRmlsdGVyKFxuICAgIGdsb2JlbEZpbHRlckluZm86IElHbG9iYWxGaWx0ZXIsXG4gICAgbXVsdGlTZWxlY3RQcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVDtcbiAgICBpZiAobXVsdGlTZWxlY3RQcm9wKSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gbXVsdGlTZWxlY3RQcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBtdWx0aVNlbGVjdFByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IG11bHRpU2VsZWN0UHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IG11bHRpU2VsZWN0UHJvcC5maWx0ZXJzO1xuICAgICAgbGV0IHNvcnRzID0gbXVsdGlTZWxlY3RQcm9wLnNvcnRzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBnbG9iZWxGaWx0ZXJJbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgc29ydHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xuICAgIH1cbiAgfVxuXG4gIGdldERyb3Bkb3duRGF0YShcbiAgICBmaWVsZEluZm86IGFueSxcbiAgICB1bmlxdWVLZXk6IHN0cmluZyxcbiAgICB2YWx1ZVByb3A6IHN0cmluZyxcbiAgICBsYWJlbFByb3A6IHN0cmluZyxcbiAgICBmaWx0ZXJzOiBhbnksXG4gICAgc29ydHM6IElHcmlkU29ydFtdID0gW11cbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25TZXJ2aWNlXG4gICAgICAuc2V0RHJvcERvd25MaXN0KHVuaXF1ZUtleSwgdmFsdWVQcm9wLCBsYWJlbFByb3AsIGZpbHRlcnMsIHNvcnRzKVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGZpZWxkSW5mby5kYXRhID0gcmVzO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZmllbGRJbmZvKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGZpZWxkSW5mbyk7XG4gICAgICB9KTtcbiAgfVxuICBcbiAgLy8gYWRkIGdsb2JhbCBmaWx0ZXIgU3BhY2UgRmllbGRcbiAgYWRkR2xvYmFsRmlsdGVyU3BhY2VGaWVsZChnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuU1BBQ0VSO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgYm9vbGVhbiBmaWx0ZXJcbiAgYWRkR2xvYmFsQm9vbGVhbkZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRSYW5nZUZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0U7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxEYXRlUmFuZ2VGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRBVEVfUkFOR0U7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xuICB9XG4gIFxuICAvLyBhZGQgTnVtZXJpYyBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsTnVtZXJpY1JhbmdlRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcbiAgfVxuICAvLyBhZGQgTnVtZXJpYyBpbnB1dCBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxOdW1lcmljSW5wdXQoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgTG9va1VwIEZpZWxkIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbExvb2t1cEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gICAvL2FkZCBjYWxlbmRhciBmaWx0ZXIgZm9yIGdsb2JhbCBmaWx0ZXJcbiAgIGFkZEdsb2JhbERhdGVGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKXtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGU9R3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIHNldERhdGFGaWVsZHMocmVzcG9uc2U6IGFueSwgZGF0YUtleTogc3RyaW5nID0gXCJcIikge1xuICAgIGxldCBkYXRhOiBhbnkgPSBbXTtcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgICAgcmVzcG9uc2UubWFwKCh4OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHggPz8ge30pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBPYmplY3Qua2V5cyh4KT8ucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50LnRvTG93ZXJDYXNlKCldOiB4W2N1cnJlbnRdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0YUtleSAmJlxuICAgICAgICAgICAgZGF0YUtleS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAhT2JqZWN0LmtleXMocmVzdWx0KT8uaW5jbHVkZXMoZGF0YUtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJlc3VsdFtkYXRhS2V5XSA9IGluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGEucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBzZXRDb2x1bW5GaWVsZHMoY29sdW1uczogYW55W10pIHtcbiAgICBsZXQgY29sdW1uOiBhbnkgPSBbXTtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbHVtbnMubWFwKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBjb2x1bW4ucHVzaCh7IC4uLmNvbCwgZmllbGQ6IGNvbD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuICB9XG5cbiAgLy8gY2hhbmdlIGxpbmtJZCBpbiBlZGl0IG1vZGUsIGlmIGNoYW5nZUxpbmsgaXMgdHJ1ZSB0aGVuIGl0IGNoYW5nZSB0aGUgZWRpdGVkIHJvdyBoeXBlcmxpbmsgdmFsdWVcbiAgc2V0TGlua0lkKFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW10sXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBsaW5rSWQ6IHN0cmluZyxcbiAgICByZWNvcmQ6IGFueSxcbiAgICB1c2VyczogYW55LFxuICAgIHBhcmFtczogYW55ID0gbnVsbCxcbiAgICBjaGFuZ2VMaW5rOiBib29sZWFuID0gZmFsc2VcbiAgKTogYW55IHtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNvbHVtbi5saW5rSWQgPSBsaW5rSWQ7XG4gICAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgY29sdW1uLnBhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SHlwZXJsaW5rcyh7IHJlY29yZHM6IFtyZWNvcmRdIH0sIGNvbHVtbnMpLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICBpZiAoY2hhbmdlTGluaykge1xuICAgICAgICBkZWxldGUgcmVzWzBdW2ZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddO1xuICAgICAgICBsZXQgaW5kZXggPSB1c2Vycy5maW5kSW5kZXgoXG4gICAgICAgICAgKGk6IGFueSkgPT4gaVtmaWVsZC50b0xvd2VyQ2FzZSgpXSA9PT0gcmVjb3JkW2ZpZWxkLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBpZiAodXNlcnNbaW5kZXhdW2ZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICAgICAgdXNlcnNbaW5kZXhdW2ZpZWxkICsgJ19vYmonXS5oeXBlcmxpbmsgPVxuICAgICAgICAgICAgICByZXNbMF1bZmllbGQgKyAnX29iaiddLmh5cGVybGluaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNldCBncmlkIGRhdGEgYW5kIHNldCBzZWxlY3RlZCByb3cgYmFzZWQgb24gc2VsZWN0aW9uIHZhbHVlXG4gIHNldERhdGFXaXRoU2VsZWN0ZWRSb3cocmVjb3JkczogYW55LCBjb25maWdEYXRhOiBhbnkpIHtcbiAgICBpZiAoY29uZmlnRGF0YT8uc2VsZWN0ZWRWYWx1ZSAmJiBjb25maWdEYXRhLmRhdGEuc2VsZWN0aW9uKSB7XG4gICAgICByZWNvcmRzLmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHJlY29yZCk/LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gY29uZmlnRGF0YS5zZWxlY3RlZFZhbHVlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY29uZmlnRGF0YS5kYXRhLnZhbHVlICYmXG4gICAgICAgICAgICAgIHJlY29yZFtrZXldID09PSBjb25maWdEYXRhLmRhdGEudmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZWNvcmRbJ2hpZ2hsaWdodFJvdyddID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkW2tleV0gPT09IGNvbmZpZ0RhdGEuZGF0YS5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgcmVjb3JkWydoaWdobGlnaHRSb3cnXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRzO1xuICB9XG5cbiAgc2V0VGFibGVBbGlhcyhmaWVsZDogc3RyaW5nLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKSB7XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICh4OiBhbnkpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG5cbiAgICAgIGlmIChjb2x1bW4gIT0gbnVsbCAmJiBjb2x1bW4udGFibGVBbGlhcyAmJiBjb2x1bW4udGFibGVBbGlhcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4udGFibGVBbGlhcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBzZXRHcmlkUHJvcFZhbHVlcyhcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdLFxuICAgIHByb3BzOiBJR3JpZFByb3BbXSxcbiAgICBmaWx0ZXI/OiBJR3JpZFByb3BGaWx0ZXIsXG4gICAgcmVjb3Jkcz86IGFueVtdXG4gICkge1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCAmJiBwcm9wcyAmJiBwcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaXNNYXRjaGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyICYmIGZpbHRlci5maWVsZCAmJiByZWNvcmRzICYmIHJlY29yZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBpc01hdGNoZWQgPSByZWNvcmRzLnNvbWUoXG4gICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIoeClbZmlsdGVyLmZpZWxkLnRvTG93ZXJDYXNlKCldID09PVxuICAgICAgICAgICAgZmlsdGVyLnZhbHVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwcm9wcy5tYXAoKHByb3A6IElHcmlkUHJvcCkgPT4ge1xuICAgICAgICBsZXQgY29sOiBhbnkgPSB7fTtcbiAgICAgICAgaWYgKHByb3AuZmllbGQgJiYgIWlzTWF0Y2hlZCAmJiAhZmlsdGVyPy5maWVsZCkge1xuICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgIGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaGVkKSB7XG4gICAgICAgICAgaWYgKHByb3AuZmllbGQpIHtcbiAgICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpbHRlcj8uZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wgJiYgY29sLmhhc093blByb3BlcnR5KHByb3AubmFtZSkpIHtcbiAgICAgICAgICBjb2xbcHJvcC5uYW1lXSA9IHByb3AudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBncmlkIHJvdyBwcm9wVmFsdWVzXG4gIHNldEdyaWRSb3dQcm9wVmFsdWUocm93OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBwcm9wczogSUdyaWRSb3dQcm9wW10sIGNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXSkge1xuICAgIHByb3BzPy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICBpZiAocHJvcC5wcm9wTmFtZSAmJiAocHJvcC5wcm9wVmFsdWUgfHwgcHJvcC5wcm9wVmFsdWUgPT09IGZhbHNlIHx8IHByb3AucHJvcFZhbHVlID09PSAnJykpIHtcbiAgICAgICAgaWYgKHByb3AuZmllbGQpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXkpID0+IGtleT8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIGlmIChmaWVsZE5hbWUpIHtcbiAgICAgICAgICAgIGlmIChyb3dbZmllbGROYW1lXT8uYWN0aW9uKSB7XG4gICAgICAgICAgICAgIHJvd1tmaWVsZE5hbWVdLmFjdGlvbiA9IE9iamVjdC5hc3NpZ24ocm93W2ZpZWxkTmFtZV0/LmFjdGlvbiwgeyBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZV0gPSB7IHRleHQ6IHJvd1tmaWVsZE5hbWVdLCBhY3Rpb246IHsgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSwgZmllbGQ6IGZpZWxkTmFtZSB9IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW5zPy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByb3dbcHJvcC5maWVsZD8udG9Mb3dlckNhc2UoKV0gPSB7IHRleHQ6IHJvd1twcm9wLmZpZWxkXSwgZXh0cmFGaWVsZDogdHJ1ZSwgYWN0aW9uOiB7IFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUsIGZpZWxkOiBwcm9wLmZpZWxkIH0gfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkRFTEVURUJUTikge1xuICAgICAgICAgICAgcm93W3Byb3AuYWN0aW9uXSA9IHByb3AucHJvcFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgIGVsc2UgaWYgKHByb3A/LmFjdGlvbiA9PT0gRUdyaWRSb3dBY3Rpb24uRURJVEJUTikge1xuICAgICAgICAgIHJvd1twcm9wLmFjdGlvbl0gPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByb3c7XG4gIH1cblxuICAvLyByZW1vdmUgdGhlIHJvd0FjdGlvbnMgZnJvbSB0aGUgcmVjb3Jkc1xuICByZW1vdmVSb3dBY3Rpb25zKHJlY29yZHMpIHtcbiAgICBpZiAocmVjb3Jkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgcmVjb3Jkcy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgaWYgKHJvdy5yb3dBY3Rpb24pIHtcbiAgICAgICAgICBkZWxldGUgcm93Wydyb3dBY3Rpb24nXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZWNvcmRzO1xuICB9XG59Il19