@aws-cdk/cloudformation-diff 2.139.0 → 2.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/format.js CHANGED
@@ -420,4 +420,4 @@ function _diffStrings(oldStr, newStr, context) {
420
420
  return indent;
421
421
  }
422
422
  }
423
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUE4QjtBQUM5QiwrQkFBK0I7QUFFL0Isc0NBQXdDO0FBQ3hDLG1EQUF1RztBQUN2RyxpREFBNkM7QUFJN0MsY0FBYztBQUNkLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDO0FBRXpDLDBEQUEwRDtBQUMxRCxNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBTzVDOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQy9CLE1BQW9CLEVBQ3BCLFlBQTBCLEVBQzFCLG1CQUFvRCxFQUFFLEVBQ3RELFVBQWtCLENBQUM7SUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVqRixJQUFJLFlBQVksQ0FBQyx3QkFBd0IsSUFBSSxZQUFZLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUU7UUFDL0YsU0FBUyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxZQUFZLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUMxSCxTQUFTLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0UsU0FBUyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25GLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0tBQ2hDO0lBRUQsK0JBQStCLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRXpELFNBQVMsQ0FBQyxhQUFhLENBQUMs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QUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDNUQsTUFBTTtnQkFDUixLQUFLLEdBQUc7b0JBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3pELE1BQU07Z0JBQ1I7b0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsTUFBTSxnQkFBZ0IsSUFBSSxHQUFHLENBQUMsQ0FBQzthQUM3RTtTQUNGO0tBQ0Y7SUFDRCxPQUFPLE1BQU0sQ0FBQztJQUVkLFNBQVMsV0FBVyxDQUFDLEtBQWU7UUFDbEMsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ3JDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO29CQUMxQixNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDekMsTUFBTTtpQkFDUDthQUNGO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgRGlmZmVyZW5jZUNvbGxlY3Rpb24sIFRlbXBsYXRlRGlmZiB9IGZyb20gJy4vZGlmZi90eXBlcyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuL2RpZmYvdXRpbCc7XG5pbXBvcnQgeyBEaWZmZXJlbmNlLCBpc1Byb3BlcnR5RGlmZmVyZW5jZSwgUmVzb3VyY2VEaWZmZXJlbmNlLCBSZXNvdXJjZUltcGFjdCB9IGZyb20gJy4vZGlmZi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBmb3JtYXRUYWJsZSB9IGZyb20gJy4vZm9ybWF0LXRhYmxlJztcbmltcG9ydCB7IElhbUNoYW5nZXMgfSBmcm9tICcuL2lhbS9pYW0tY2hhbmdlcyc7XG5pbXBvcnQgeyBTZWN1cml0eUdyb3VwQ2hhbmdlcyB9IGZyb20gJy4vbmV0d29yay9zZWN1cml0eS1ncm91cC1jaGFuZ2VzJztcblxuLy8gZnJvbSBjeC1hcGlcbmNvbnN0IFBBVEhfTUVUQURBVEFfS0VZID0gJ2F3czpjZGs6cGF0aCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbmNvbnN0IHsgc3RydWN0dXJlZFBhdGNoIH0gPSByZXF1aXJlKCdkaWZmJyk7XG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0U3RyZWFtIGV4dGVuZHMgTm9kZUpTLldyaXRhYmxlU3RyZWFtIHtcbiAgY29sdW1ucz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRlbXBsYXRlIGRpZmZlcmVuY2VzIHRvIHRoZSBwcm9jZXNzJyBjb25zb2xlLlxuICpcbiAqIEBwYXJhbSBzdHJlYW0gICAgICAgICAgIFRoZSBJTyBzdHJlYW0gd2hlcmUgdG8gb3V0cHV0IHRoZSByZW5kZXJlZCBkaWZmLlxuICogQHBhcmFtIHRlbXBsYXRlRGlmZiAgICAgVGVtcGxhdGVEaWZmIHRvIGJlIHJlbmRlcmVkIHRvIHRoZSBjb25zb2xlLlxuICogQHBhcmFtIGxvZ2ljYWxUb1BhdGhNYXAgQSBtYXAgZnJvbSBsb2dpY2FsIElEIHRvIGNvbnN0cnVjdCBwYXRoLiBVc2VmdWwgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdGhlcmUgaXMgbm8gYXdzOmNkazpwYXRoIG1ldGFkYXRhIGluIHRoZSB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSBjb250ZXh0ICAgICAgICAgIHRoZSBudW1iZXIgb2YgY29udGV4dCBsaW5lcyB0byB1c2UgaW4gYXJiaXRyYXJ5IEpTT04gZGlmZiAoZGVmYXVsdHMgdG8gMykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREaWZmZXJlbmNlcyhcbiAgc3RyZWFtOiBGb3JtYXRTdHJlYW0sXG4gIHRlbXBsYXRlRGlmZjogVGVtcGxhdGVEaWZmLFxuICBsb2dpY2FsVG9QYXRoTWFwOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IHN0cmluZyB9ID0ge30sXG4gIGNvbnRleHQ6IG51bWJlciA9IDMpIHtcbiAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihzdHJlYW0sIGxvZ2ljYWxUb1BhdGhNYXAsIHRlbXBsYXRlRGlmZiwgY29udGV4dCk7XG5cbiAgaWYgKHRlbXBsYXRlRGlmZi5hd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24gfHwgdGVtcGxhdGVEaWZmLnRyYW5zZm9ybSB8fCB0ZW1wbGF0ZURpZmYuZGVzY3JpcHRpb24pIHtcbiAgICBmb3JtYXR0ZXIucHJpbnRTZWN0aW9uSGVhZGVyKCdUZW1wbGF0ZScpO1xuICAgIGZvcm1hdHRlci5mb3JtYXREaWZmZXJlbmNlKCdBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb24nLCAnQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uJywgdGVtcGxhdGVEaWZmLmF3c1RlbXBsYXRlRm9ybWF0VmVyc2lvbik7XG4gICAgZm9ybWF0dGVyLmZvcm1hdERpZmZlcmVuY2UoJ1RyYW5zZm9ybScsICdUcmFuc2Zvcm0nLCB0ZW1wbGF0ZURpZmYudHJhbnNmb3JtKTtcbiAgICBmb3JtYXR0ZXIuZm9ybWF0RGlmZmVyZW5jZSgnRGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nLCB0ZW1wbGF0ZURpZmYuZGVzY3JpcHRpb24pO1xuICAgIGZvcm1hdHRlci5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgfVxuXG4gIGZvcm1hdFNlY3VyaXR5Q2hhbmdlc1dpdGhCYW5uZXIoZm9ybWF0dGVyLCB0ZW1wbGF0ZURpZmYpO1xuXG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdQYXJhbWV0ZXJzJywgJ1BhcmFtZXRlcicsIHRlbXBsYXRlRGlmZi5wYXJhbWV0ZXJzKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ01ldGFkYXRhJywgJ01ldGFkYXRhJywgdGVtcGxhdGVEaWZmLm1ldGFkYXRhKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ01hcHBpbmdzJywgJ01hcHBpbmcnLCB0ZW1wbGF0ZURpZmYubWFwcGluZ3MpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignQ29uZGl0aW9ucycsICdDb25kaXRpb24nLCB0ZW1wbGF0ZURpZmYuY29uZGl0aW9ucyk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdSZXNvdXJjZXMnLCAnUmVzb3VyY2UnLCB0ZW1wbGF0ZURpZmYucmVzb3VyY2VzLCBmb3JtYXR0ZXIuZm9ybWF0UmVzb3VyY2VEaWZmZXJlbmNlLmJpbmQoZm9ybWF0dGVyKSk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdPdXRwdXRzJywgJ091dHB1dCcsIHRlbXBsYXRlRGlmZi5vdXRwdXRzKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ090aGVyIENoYW5nZXMnLCAnVW5rbm93bicsIHRlbXBsYXRlRGlmZi51bmtub3duKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgZGlmZiBvZiBzZWN1cml0eSBjaGFuZ2VzIHRvIHRoZSBnaXZlbiBzdHJlYW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFNlY3VyaXR5Q2hhbmdlcyhcbiAgc3RyZWFtOiBOb2RlSlMuV3JpdGFibGVTdHJlYW0sXG4gIHRlbXBsYXRlRGlmZjogVGVtcGxhdGVEaWZmLFxuICBsb2dpY2FsVG9QYXRoTWFwOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IHN0cmluZyB9ID0ge30sXG4gIGNvbnRleHQ/OiBudW1iZXIpIHtcbiAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihzdHJlYW0sIGxvZ2ljYWxUb1BhdGhNYXAsIHRlbXBsYXRlRGlmZiwgY29udGV4dCk7XG5cbiAgZm9ybWF0U2VjdXJpdHlDaGFuZ2VzV2l0aEJhbm5lcihmb3JtYXR0ZXIsIHRlbXBsYXRlRGlmZik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFNlY3VyaXR5Q2hhbmdlc1dpdGhCYW5uZXIoZm9ybWF0dGVyOiBGb3JtYXR0ZXIsIHRlbXBsYXRlRGlmZjogVGVtcGxhdGVEaWZmKSB7XG4gIGlmICghdGVtcGxhdGVEaWZmLmlhbUNoYW5nZXMuaGFzQ2hhbmdlcyAmJiAhdGVtcGxhdGVEaWZmLnNlY3VyaXR5R3JvdXBDaGFuZ2VzLmhhc0NoYW5nZXMpIHsgcmV0dXJuOyB9XG4gIGZvcm1hdHRlci5mb3JtYXRJYW1DaGFuZ2VzKHRlbXBsYXRlRGlmZi5pYW1DaGFuZ2VzKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3VyaXR5R3JvdXBDaGFuZ2VzKHRlbXBsYXRlRGlmZi5zZWN1cml0eUdyb3VwQ2hhbmdlcyk7XG5cbiAgZm9ybWF0dGVyLndhcm5pbmcoJyhOT1RFOiBUaGVyZSBtYXkgYmUgc2VjdXJpdHktcmVsYXRlZCBjaGFuZ2VzIG5vdCBpbiB0aGlzIGxpc3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzEyOTkpJyk7XG4gIGZvcm1hdHRlci5wcmludFNlY3Rpb25Gb290ZXIoKTtcbn1cblxuY29uc3QgQURESVRJT04gPSBjaGFsay5ncmVlbignWytdJyk7XG5jb25zdCBDT05URVhUID0gY2hhbGsuZ3JleSgnWyBdJyk7XG5jb25zdCBVUERBVEUgPSBjaGFsay55ZWxsb3coJ1t+XScpO1xuY29uc3QgUkVNT1ZBTCA9IGNoYWxrLnJlZCgnWy1dJyk7XG5jb25zdCBJTVBPUlQgPSBjaGFsay5ibHVlKCdb4oaQXScpO1xuXG5jbGFzcyBGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbTogRm9ybWF0U3RyZWFtLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBkaWZmPzogVGVtcGxhdGVEaWZmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogbnVtYmVyID0gMykge1xuICAgIC8vIFJlYWQgYWRkaXRpb25hbCBjb25zdHJ1Y3QgcGF0aHMgZnJvbSB0aGUgZGlmZiBpZiBpdCBpcyBzdXBwbGllZFxuICAgIGlmIChkaWZmKSB7XG4gICAgICB0aGlzLnJlYWRDb25zdHJ1Y3RQYXRoc0Zyb20oZGlmZik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByaW50KGZtdDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHRoaXMuc3RyZWFtLndyaXRlKGNoYWxrLndoaXRlKGZvcm1hdChmbXQsIC4uLmFyZ3MpKSArICdcXG4nKTtcbiAgfVxuXG4gIHB1YmxpYyB3YXJuaW5nKGZtdDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHRoaXMuc3RyZWFtLndyaXRlKGNoYWxrLnllbGxvdyhmb3JtYXQoZm10LCAuLi5hcmdzKSkgKyAnXFxuJyk7XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0U2VjdGlvbjxWLCBUIGV4dGVuZHMgRGlmZmVyZW5jZTxWPj4oXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBlbnRyeVR5cGU6IHN0cmluZyxcbiAgICBjb2xsZWN0aW9uOiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxWLCBUPixcbiAgICBmb3JtYXR0ZXI6ICh0eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRpZmY6IFQpID0+IHZvaWQgPSB0aGlzLmZvcm1hdERpZmZlcmVuY2UuYmluZCh0aGlzKSkge1xuXG4gICAgaWYgKGNvbGxlY3Rpb24uZGlmZmVyZW5jZUNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcmludFNlY3Rpb25IZWFkZXIodGl0bGUpO1xuICAgIGNvbGxlY3Rpb24uZm9yRWFjaERpZmZlcmVuY2UoKGlkLCBkaWZmKSA9PiBmb3JtYXR0ZXIoZW50cnlUeXBlLCBpZCwgZGlmZikpO1xuICAgIHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gIH1cblxuICBwdWJsaWMgcHJpbnRTZWN0aW9uSGVhZGVyKHRpdGxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByaW50KGNoYWxrLnVuZGVybGluZShjaGFsay5ib2xkKHRpdGxlKSkpO1xuICB9XG5cbiAgcHVibGljIHByaW50U2VjdGlvbkZvb3RlcigpIHtcbiAgICB0aGlzLnByaW50KCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmludCBhIHNpbXBsZSBkaWZmZXJlbmNlIGZvciBhIGdpdmVuIG5hbWVkIGVudGl0eS5cbiAgICpcbiAgICogQHBhcmFtIGxvZ2ljYWxJZCB0aGUgbmFtZSBvZiB0aGUgZW50aXR5IHRoYXQgaXMgZGlmZmVyZW50LlxuICAgKiBAcGFyYW0gZGlmZiB0aGUgZGlmZmVyZW5jZSB0byBiZSByZW5kZXJlZC5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXREaWZmZXJlbmNlKHR5cGU6IHN0cmluZywgbG9naWNhbElkOiBzdHJpbmcsIGRpZmY6IERpZmZlcmVuY2U8YW55PiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZGlmZiB8fCAhZGlmZi5pc0RpZmZlcmVudCkgeyByZXR1cm47IH1cblxuICAgIGxldCB2YWx1ZTtcblxuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShkaWZmLm9sZFZhbHVlLCBjaGFsay5yZWQpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShkaWZmLm5ld1ZhbHVlLCBjaGFsay5ncmVlbik7XG4gICAgaWYgKGRpZmYuaXNBZGRpdGlvbikge1xuICAgICAgdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGRpZmYuaXNVcGRhdGUpIHtcbiAgICAgIHZhbHVlID0gYCR7b2xkVmFsdWV9IHRvICR7bmV3VmFsdWV9YDtcbiAgICB9IGVsc2UgaWYgKGRpZmYuaXNSZW1vdmFsKSB7XG4gICAgICB2YWx1ZSA9IG9sZFZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMucHJpbnQoYCR7dGhpcy5mb3JtYXRQcmVmaXgoZGlmZil9ICR7Y2hhbGsuY3lhbih0eXBlKX0gJHt0aGlzLmZvcm1hdExvZ2ljYWxJZChsb2dpY2FsSWQpfTogJHt2YWx1ZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmludCBhIHJlc291cmNlIGRpZmZlcmVuY2UgZm9yIGEgZ2l2ZW4gbG9naWNhbCBJRC5cbiAgICpcbiAgICogQHBhcmFtIGxvZ2ljYWxJZCB0aGUgbG9naWNhbCBJRCBvZiB0aGUgcmVzb3VyY2UgdGhhdCBjaGFuZ2VkLlxuICAgKiBAcGFyYW0gZGlmZiAgICAgIHRoZSBjaGFuZ2UgdG8gYmUgcmVuZGVyZWQuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0UmVzb3VyY2VEaWZmZXJlbmNlKF90eXBlOiBzdHJpbmcsIGxvZ2ljYWxJZDogc3RyaW5nLCBkaWZmOiBSZXNvdXJjZURpZmZlcmVuY2UpIHtcbiAgICBpZiAoIWRpZmYuaXNEaWZmZXJlbnQpIHsgcmV0dXJuOyB9XG5cbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBkaWZmLmlzUmVtb3ZhbCA/IGRpZmYub2xkUmVzb3VyY2VUeXBlIDogZGlmZi5uZXdSZXNvdXJjZVR5cGU7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgIHRoaXMucHJpbnQoYCR7dGhpcy5mb3JtYXRSZXNvdXJjZVByZWZpeChkaWZmKX0gJHt0aGlzLmZvcm1hdFZhbHVlKHJlc291cmNlVHlwZSwgY2hhbGsuY3lhbil9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbElkKX0gJHt0aGlzLmZvcm1hdEltcGFjdChkaWZmLmNoYW5nZUltcGFjdCl9YCk7XG5cbiAgICBpZiAoZGlmZi5pc1VwZGF0ZSkge1xuICAgICAgY29uc3QgZGlmZmVyZW5jZUNvdW50ID0gZGlmZi5kaWZmZXJlbmNlQ291bnQ7XG4gICAgICBsZXQgcHJvY2Vzc2VkQ291bnQgPSAwO1xuICAgICAgZGlmZi5mb3JFYWNoRGlmZmVyZW5jZSgoXywgbmFtZSwgdmFsdWVzKSA9PiB7XG4gICAgICAgIHByb2Nlc3NlZENvdW50ICs9IDE7XG4gICAgICAgIHRoaXMuZm9ybWF0VHJlZURpZmYobmFtZSwgdmFsdWVzLCBwcm9jZXNzZWRDb3VudCA9PT0gZGlmZmVyZW5jZUNvdW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRSZXNvdXJjZVByZWZpeChkaWZmOiBSZXNvdXJjZURpZmZlcmVuY2UpIHtcbiAgICBpZiAoZGlmZi5pc0ltcG9ydCkgeyByZXR1cm4gSU1QT1JUOyB9XG5cbiAgICByZXR1cm4gdGhpcy5mb3JtYXRQcmVmaXgoZGlmZik7XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0UHJlZml4PFQ+KGRpZmY6IERpZmZlcmVuY2U8VD4pIHtcbiAgICBpZiAoZGlmZi5pc0FkZGl0aW9uKSB7IHJldHVybiBBRERJVElPTjsgfVxuICAgIGlmIChkaWZmLmlzVXBkYXRlKSB7IHJldHVybiBVUERBVEU7IH1cbiAgICBpZiAoZGlmZi5pc1JlbW92YWwpIHsgcmV0dXJuIFJFTU9WQUw7IH1cbiAgICByZXR1cm4gY2hhbGsud2hpdGUoJ1s/XScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYmUgZm9ybWF0dGVkLlxuICAgKiBAcGFyYW0gY29sb3IgdGhlIGNvbG9yIHRvIGJlIHVzZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHRoZSBmb3JtYXR0ZWQgc3RyaW5nLCB3aXRoIGNvbG9yIGFwcGxpZWQuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0VmFsdWUodmFsdWU6IGFueSwgY29sb3I6IChzdHI6IHN0cmluZykgPT4gc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7IHJldHVybiBjb2xvcih2YWx1ZSk7IH1cbiAgICByZXR1cm4gY29sb3IoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaW1wYWN0IHRoZSBpbXBhY3QgdG8gYmUgZm9ybWF0dGVkXG4gICAqIEByZXR1cm5zIGEgdXNlci1mcmllbmRseSwgY29sb3JlZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBpbXBhY3QuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0SW1wYWN0KGltcGFjdDogUmVzb3VyY2VJbXBhY3QpIHtcbiAgICBzd2l0Y2ggKGltcGFjdCkge1xuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5NQVlfUkVQTEFDRTpcbiAgICAgICAgcmV0dXJuIGNoYWxrLml0YWxpYyhjaGFsay55ZWxsb3coJ21heSBiZSByZXBsYWNlZCcpKTtcbiAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFOlxuICAgICAgICByZXR1cm4gY2hhbGsuaXRhbGljKGNoYWxrLmJvbGQoY2hhbGsucmVkKCdyZXBsYWNlJykpKTtcbiAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9ERVNUUk9ZOlxuICAgICAgICByZXR1cm4gY2hhbGsuaXRhbGljKGNoYWxrLmJvbGQoY2hhbGsucmVkKCdkZXN0cm95JykpKTtcbiAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9PUlBIQU46XG4gICAgICAgIHJldHVybiBjaGFsay5pdGFsaWMoY2hhbGsueWVsbG93KCdvcnBoYW4nKSk7XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfSU1QT1JUOlxuICAgICAgICByZXR1cm4gY2hhbGsuaXRhbGljKGNoYWxrLmJsdWUoJ2ltcG9ydCcpKTtcbiAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9VUERBVEU6XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfQ1JFQVRFOlxuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5OT19DSEFOR0U6XG4gICAgICAgIHJldHVybiAnJzsgLy8gbm8gZXh0cmEgaW5mbyBpcyBnYWluZWQgaGVyZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgdHJlZSBvZiBkaWZmZXJlbmNlcyB1bmRlciBhIHBhcnRpY3VsYXIgbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgICAgdGhlIG5hbWUgb2YgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuXG4gICAqIEBwYXJhbSBkaWZmICAgIHRoZSBkaWZmZXJlbmNlIG9uIHRoZSB0cmVlLlxuICAgKiBAcGFyYW0gbGFzdCAgICB3aGV0aGVyIHRoaXMgaXMgdGhlIGxhc3Qgbm9kZSBvZiBhIHBhcmVudCB0cmVlLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFRyZWVEaWZmKG5hbWU6IHN0cmluZywgZGlmZjogRGlmZmVyZW5jZTxhbnk+LCBsYXN0OiBib29sZWFuKSB7XG4gICAgbGV0IGFkZGl0aW9uYWxJbmZvID0gJyc7XG4gICAgaWYgKGlzUHJvcGVydHlEaWZmZXJlbmNlKGRpZmYpKSB7XG4gICAgICBpZiAoZGlmZi5jaGFuZ2VJbXBhY3QgPT09IFJlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFKSB7XG4gICAgICAgIGFkZGl0aW9uYWxJbmZvID0gJyAobWF5IGNhdXNlIHJlcGxhY2VtZW50KSc7XG4gICAgICB9IGVsc2UgaWYgKGRpZmYuY2hhbmdlSW1wYWN0ID09PSBSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0UpIHtcbiAgICAgICAgYWRkaXRpb25hbEluZm8gPSAnIChyZXF1aXJlcyByZXBsYWNlbWVudCknO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByaW50KCcgJXPilIAgJXMgJXMlcycsIGxhc3QgPyAn4pSUJyA6ICfilJwnLCB0aGlzLmNoYW5nZVRhZyhkaWZmLm9sZFZhbHVlLCBkaWZmLm5ld1ZhbHVlKSwgbmFtZSwgYWRkaXRpb25hbEluZm8pO1xuICAgIHJldHVybiB0aGlzLmZvcm1hdE9iamVjdERpZmYoZGlmZi5vbGRWYWx1ZSwgZGlmZi5uZXdWYWx1ZSwgYCAke2xhc3QgPyAnICcgOiAn4pSCJ31gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG9iamVjdHMsIGxvb2tpbmcgZm9yIHRoZSBkaWZmZXJlbmNlcyBhcyBkZWVwIGFzIHBvc3NpYmxlLFxuICAgKiBhbmQgcmVuZGVyaW5nIGEgdHJlZSBncmFwaCBvZiB0aGUgcGF0aCB1bnRpbCB0aGUgZGlmZmVyZW5jZSBpcyBmb3VuZC5cbiAgICpcbiAgICogQHBhcmFtIG9sZE9iamVjdCAgdGhlIG9sZCBvYmplY3QuXG4gICAqIEBwYXJhbSBuZXdPYmplY3QgIHRoZSBuZXcgb2JqZWN0LlxuICAgKiBAcGFyYW0gbGluZVByZWZpeCBhIHByZWZpeCAoaW5kZW50LWxpa2UpIHRvIGJlIHVzZWQgb24gZXZlcnkgbGluZS5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRPYmplY3REaWZmKG9sZE9iamVjdDogYW55LCBuZXdPYmplY3Q6IGFueSwgbGluZVByZWZpeDogc3RyaW5nKSB7XG4gICAgaWYgKCh0eXBlb2Ygb2xkT2JqZWN0ICE9PSB0eXBlb2YgbmV3T2JqZWN0KSB8fCBBcnJheS5pc0FycmF5KG9sZE9iamVjdCkgfHwgdHlwZW9mIG9sZE9iamVjdCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG9sZE9iamVjdCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChvbGRPYmplY3QgIT09IHVuZGVmaW5lZCAmJiBuZXdPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIG9sZE9iamVjdCA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld09iamVjdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjb25zdCBvbGRTdHIgPSBKU09OLnN0cmluZ2lmeShvbGRPYmplY3QsIG51bGwsIDIpO1xuICAgICAgICAgIGNvbnN0IG5ld1N0ciA9IEpTT04uc3RyaW5naWZ5KG5ld09iamVjdCwgbnVsbCwgMik7XG4gICAgICAgICAgY29uc3QgZGlmZiA9IF9kaWZmU3RyaW5ncyhvbGRTdHIsIG5ld1N0ciwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZmYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucHJpbnQoJyVzICAgJXMgJXMnLCBsaW5lUHJlZml4LCBpID09PSAwID8gJ+KUlOKUgCcgOiAnICAnLCBkaWZmW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcmludCgnJXMgICDilJzilIAgJXMgJXMnLCBsaW5lUHJlZml4LCBSRU1PVkFMLCB0aGlzLmZvcm1hdFZhbHVlKG9sZE9iamVjdCwgY2hhbGsucmVkKSk7XG4gICAgICAgICAgdGhpcy5wcmludCgnJXMgICDilJTilIAgJXMgJXMnLCBsaW5lUHJlZml4LCBBRERJVElPTiwgdGhpcy5mb3JtYXRWYWx1ZShuZXdPYmplY3QsIGNoYWxrLmdyZWVuKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAob2xkT2JqZWN0ICE9PSB1bmRlZmluZWQgLyogJiYgbmV3T2JqZWN0ID09PSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICDilJTilIAgJXMnLCBsaW5lUHJlZml4LCB0aGlzLmZvcm1hdFZhbHVlKG9sZE9iamVjdCwgY2hhbGsucmVkKSk7XG4gICAgICB9IGVsc2UgLyogaWYgKG9sZE9iamVjdCA9PT0gdW5kZWZpbmVkICYmIG5ld09iamVjdCAhPT0gdW5kZWZpbmVkKSAqLyB7XG4gICAgICAgIHRoaXMucHJpbnQoJyVzICAg4pSU4pSAICVzJywgbGluZVByZWZpeCwgdGhpcy5mb3JtYXRWYWx1ZShuZXdPYmplY3QsIGNoYWxrLmdyZWVuKSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleVNldCA9IG5ldyBTZXQoT2JqZWN0LmtleXMob2xkT2JqZWN0KSk7XG4gICAgT2JqZWN0LmtleXMobmV3T2JqZWN0KS5mb3JFYWNoKGsgPT4ga2V5U2V0LmFkZChrKSk7XG4gICAgY29uc3Qga2V5cyA9IG5ldyBBcnJheSguLi5rZXlTZXQpLmZpbHRlcihrID0+ICFkZWVwRXF1YWwob2xkT2JqZWN0W2tdLCBuZXdPYmplY3Rba10pKS5zb3J0KCk7XG4gICAgY29uc3QgbGFzdEtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IG9sZE9iamVjdFtrZXldO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXdPYmplY3Rba2V5XTtcbiAgICAgIGNvbnN0IHRyZWVQcmVmaXggPSBrZXkgPT09IGxhc3RLZXkgPyAn4pSUJyA6ICfilJwnO1xuICAgICAgaWYgKG9sZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnByaW50KCclcyAgICVz4pSAICVzICVzOicsIGxpbmVQcmVmaXgsIHRyZWVQcmVmaXgsIHRoaXMuY2hhbmdlVGFnKG9sZFZhbHVlLCBuZXdWYWx1ZSksIGNoYWxrLmJsdWUoYC4ke2tleX1gKSk7XG4gICAgICAgIHRoaXMuZm9ybWF0T2JqZWN0RGlmZihvbGRWYWx1ZSwgbmV3VmFsdWUsIGAke2xpbmVQcmVmaXh9ICAgJHtrZXkgPT09IGxhc3RLZXkgPyAnICcgOiAn4pSCJ31gKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZCAvKiAmJiBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHRoaXMucHJpbnQoJyVzICAgJXPilIAgJXMgUmVtb3ZlZDogJXMnLCBsaW5lUHJlZml4LCB0cmVlUHJlZml4LCBSRU1PVkFMLCBjaGFsay5ibHVlKGAuJHtrZXl9YCkpO1xuICAgICAgfSBlbHNlIC8qIGlmIChvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQgKi8ge1xuICAgICAgICB0aGlzLnByaW50KCclcyAgICVz4pSAICVzIEFkZGVkOiAlcycsIGxpbmVQcmVmaXgsIHRyZWVQcmVmaXgsIEFERElUSU9OLCBjaGFsay5ibHVlKGAuJHtrZXl9YCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb2xkVmFsdWUgdGhlIG9sZCB2YWx1ZSBvZiBhIGRpZmZlcmVuY2UuXG4gICAqIEBwYXJhbSBuZXdWYWx1ZSB0aGUgbmV3IHZhbHVlIG9mIGEgZGlmZmVyZW5jZS5cbiAgICpcbiAgICogQHJldHVybnMgYSB0YWcgdG8gYmUgcmVuZGVyZWQgaW4gdGhlIGRpZmYsIHJlZmxlY3Rpbmcgd2hldGhlciB0aGUgZGlmZmVyZW5jZVxuICAgKiAgICAgIHdhcyBhbiBBRERJVElPTiwgVVBEQVRFIG9yIFJFTU9WQUwuXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlVGFnKG9sZFZhbHVlOiBhbnkgfCB1bmRlZmluZWQsIG5ld1ZhbHVlOiBhbnkgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBVUERBVEU7XG4gICAgfSBlbHNlIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkIC8qICYmIG5ld1ZhbHVlID09PSB1bmRlZmluZWQqLykge1xuICAgICAgcmV0dXJuIFJFTU9WQUw7XG4gICAgfSBlbHNlIC8qIGlmIChvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpICovIHtcbiAgICAgIHJldHVybiBBRERJVElPTjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCAnYXdzOmNkazpwYXRoJyBtZXRhZGF0YSBpbiB0aGUgZGlmZiBhbmQgYWRkIGl0IHRvIHRoZSBsb2dpY2FsVG9QYXRoTWFwXG4gICAqXG4gICAqIFRoZXJlIGFyZSBtdWx0aXBsZSBzb3VyY2VzIG9mIGxvZ2ljYWxJRCAtPiBwYXRoIG1hcHBpbmdzOiBzeW50aCBtZXRhZGF0YVxuICAgKiBhbmQgcmVzb3VyY2UgbWV0YWRhdGEsIGFuZCB3ZSBjb21iaW5lIGFsbCBzb3VyY2VzIGludG8gYSBzaW5nbGUgbWFwLlxuICAgKi9cbiAgcHVibGljIHJlYWRDb25zdHJ1Y3RQYXRoc0Zyb20odGVtcGxhdGVEaWZmOiBUZW1wbGF0ZURpZmYpIHtcbiAgICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIHJlc291cmNlRGlmZl0gb2YgT2JqZWN0LmVudHJpZXModGVtcGxhdGVEaWZmLnJlc291cmNlcykpIHtcbiAgICAgIGlmICghcmVzb3VyY2VEaWZmKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgIGNvbnN0IG9sZFBhdGhNZXRhZGF0YSA9IHJlc291cmNlRGlmZi5vbGRWYWx1ZT8uTWV0YWRhdGE/LltQQVRIX01FVEFEQVRBX0tFWV07XG4gICAgICBpZiAob2xkUGF0aE1ldGFkYXRhICYmICEobG9naWNhbElkIGluIHRoaXMubG9naWNhbFRvUGF0aE1hcCkpIHtcbiAgICAgICAgdGhpcy5sb2dpY2FsVG9QYXRoTWFwW2xvZ2ljYWxJZF0gPSBvbGRQYXRoTWV0YWRhdGE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1BhdGhNZXRhZGF0YSA9IHJlc291cmNlRGlmZi5uZXdWYWx1ZT8uTWV0YWRhdGE/LltQQVRIX01FVEFEQVRBX0tFWV07XG4gICAgICBpZiAobmV3UGF0aE1ldGFkYXRhICYmICEobG9naWNhbElkIGluIHRoaXMubG9naWNhbFRvUGF0aE1hcCkpIHtcbiAgICAgICAgdGhpcy5sb2dpY2FsVG9QYXRoTWFwW2xvZ2ljYWxJZF0gPSBuZXdQYXRoTWV0YWRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcm1hdExvZ2ljYWxJZChsb2dpY2FsSWQ6IHN0cmluZykge1xuICAgIC8vIGlmIHdlIGhhdmUgYSBwYXRoIGluIHRoZSBtYXAsIHJldHVybiBpdFxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZWRMb2dpY2FsSWRQYXRoKGxvZ2ljYWxJZCk7XG5cbiAgICBpZiAobm9ybWFsaXplZCkge1xuICAgICAgcmV0dXJuIGAke25vcm1hbGl6ZWR9ICR7Y2hhbGsuZ3JheShsb2dpY2FsSWQpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvZ2ljYWxJZDtcbiAgfVxuXG4gIHB1YmxpYyBub3JtYWxpemVkTG9naWNhbElkUGF0aChsb2dpY2FsSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIHBhdGggaW4gdGhlIG1hcCwgcmV0dXJuIGl0XG4gICAgY29uc3QgcGF0aCA9IHRoaXMubG9naWNhbFRvUGF0aE1hcFtsb2dpY2FsSWRdO1xuICAgIHJldHVybiBwYXRoID8gbm9ybWFsaXplUGF0aChwYXRoKSA6IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFBhdGggaXMgc3VwcG9zZWQgdG8gc3RhcnQgd2l0aCBcIi9zdGFjay1uYW1lXCIuIElmIHRoaXMgaXMgdGhlIGNhc2UgKGkuZS4gcGF0aCBoYXMgbW9yZSB0aGFuXG4gICAgICogdHdvIGNvbXBvbmVudHMsIHdlIHJlbW92ZSB0aGUgZmlyc3QgcGFydC4gT3RoZXJ3aXNlLCB3ZSBqdXN0IHVzZSB0aGUgZnVsbCBwYXRoLlxuICAgICAqIEBwYXJhbSBwXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwOiBzdHJpbmcpIHtcbiAgICAgIGlmIChwLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwID0gcC5zbGljZSgxKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHBhcnRzID0gcC5zcGxpdCgnLycpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgxKTtcblxuICAgICAgICAvLyByZW1vdmUgdGhlIGxhc3QgY29tcG9uZW50IGlmIGl0J3MgXCJSZXNvdXJjZVwiIG9yIFwiRGVmYXVsdFwiIChpZiB3ZSBoYXZlIG1vcmUgdGhhbiBhIHNpbmdsZSBjb21wb25lbnQpXG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgY29uc3QgbGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0ID09PSAnUmVzb3VyY2UnIHx8IGxhc3QgPT09ICdEZWZhdWx0Jykge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcGFydHMuam9pbignLycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcm1hdElhbUNoYW5nZXMoY2hhbmdlczogSWFtQ2hhbmdlcykge1xuICAgIGlmICghY2hhbmdlcy5oYXNDaGFuZ2VzKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKGNoYW5nZXMuc3RhdGVtZW50cy5oYXNDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignSUFNIFN0YXRlbWVudCBDaGFuZ2VzJyk7XG4gICAgICB0aGlzLnByaW50KGZvcm1hdFRhYmxlKHRoaXMuZGVlcFN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKGNoYW5nZXMuc3VtbWFyaXplU3RhdGVtZW50cygpKSwgdGhpcy5zdHJlYW0uY29sdW1ucykpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLm1hbmFnZWRQb2xpY2llcy5oYXNDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignSUFNIFBvbGljeSBDaGFuZ2VzJyk7XG4gICAgICB0aGlzLnByaW50KGZvcm1hdFRhYmxlKHRoaXMuZGVlcFN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKGNoYW5nZXMuc3VtbWFyaXplTWFuYWdlZFBvbGljaWVzKCkpLCB0aGlzLnN0cmVhbS5jb2x1bW5zKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcm1hdFNlY3VyaXR5R3JvdXBDaGFuZ2VzKGNoYW5nZXM6IFNlY3VyaXR5R3JvdXBDaGFuZ2VzKSB7XG4gICAgaWYgKCFjaGFuZ2VzLmhhc0NoYW5nZXMpIHsgcmV0dXJuOyB9XG5cbiAgICB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignU2VjdXJpdHkgR3JvdXAgQ2hhbmdlcycpO1xuICAgIHRoaXMucHJpbnQoZm9ybWF0VGFibGUodGhpcy5kZWVwU3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMoY2hhbmdlcy5zdW1tYXJpemUoKSksIHRoaXMuc3RyZWFtLmNvbHVtbnMpKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWVwU3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMocm93czogc3RyaW5nW11bXSk6IHN0cmluZ1tdW10ge1xuICAgIHJldHVybiByb3dzLm1hcChyb3cgPT4gcm93Lm1hcCh0aGlzLnN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzLmJpbmQodGhpcykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzdGl0dXRlIGFsbCBzdHJpbmdzIGxpa2UgJHtMb2dJZC54eHh9IHdpdGggdGhlIHBhdGggaW5zdGVhZCBvZiB0aGUgbG9naWNhbCBJRFxuICAgKi9cbiAgcHVibGljIHN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc291cmNlLnJlcGxhY2UoL1xcJFxceyhbXi59XSspKC5bXn1dKyk/XFx9L2lnLCAoX21hdGNoLCBsb2dJZCwgc3VmZml4KSA9PiB7XG4gICAgICByZXR1cm4gJyR7JyArICh0aGlzLm5vcm1hbGl6ZWRMb2dpY2FsSWRQYXRoKGxvZ0lkKSB8fCBsb2dJZCkgKyAoc3VmZml4IHx8ICcnKSArICd9JztcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcGF0Y2ggYXMgcmV0dXJuZWQgYnkgYGBkaWZmLnN0cnVjdHVyZWRQYXRjaGBgLlxuICovXG5pbnRlcmZhY2UgUGF0Y2gge1xuICAvKipcbiAgICogSHVua3MgaW4gdGhlIHBhdGNoLlxuICAgKi9cbiAgaHVua3M6IFJlYWRvbmx5QXJyYXk8UGF0Y2hIdW5rPjtcbn1cblxuLyoqXG4gKiBBIGh1bmsgaW4gYSBwYXRjaCBwcm9kdWNlZCBieSBgYGRpZmYuc3RydWN0dXJlZFBhdGNoYGAuXG4gKi9cbmludGVyZmFjZSBQYXRjaEh1bmsge1xuICBvbGRTdGFydDogbnVtYmVyO1xuICBvbGRMaW5lczogbnVtYmVyO1xuICBuZXdTdGFydDogbnVtYmVyO1xuICBuZXdMaW5lczogbnVtYmVyO1xuICBsaW5lczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHVuaWZpZWQgZGlmZiBvZiB0d28gc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0gb2xkU3RyICB0aGUgXCJvbGRcIiB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0gbmV3U3RyICB0aGUgXCJuZXdcIiB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0gY29udGV4dCB0aGUgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgdG8gdXNlIGluIGFyYml0cmFyeSBKU09OIGRpZmYuXG4gKlxuICogQHJldHVybnMgYW4gYXJyYXkgb2YgZGlmZiBsaW5lcy5cbiAqL1xuZnVuY3Rpb24gX2RpZmZTdHJpbmdzKG9sZFN0cjogc3RyaW5nLCBuZXdTdHI6IHN0cmluZywgY29udGV4dDogbnVtYmVyKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXRjaDogUGF0Y2ggPSBzdHJ1Y3R1cmVkUGF0Y2gobnVsbCwgbnVsbCwgb2xkU3RyLCBuZXdTdHIsIG51bGwsIG51bGwsIHsgY29udGV4dCB9KTtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBodW5rIG9mIHBhdGNoLmh1bmtzKSB7XG4gICAgcmVzdWx0LnB1c2goY2hhbGsubWFnZW50YShgQEAgLSR7aHVuay5vbGRTdGFydH0sJHtodW5rLm9sZExpbmVzfSArJHtodW5rLm5ld1N0YXJ0fSwke2h1bmsubmV3TGluZXN9IEBAYCkpO1xuICAgIGNvbnN0IGJhc2VJbmRlbnQgPSBfZmluZEluZGVudChodW5rLmxpbmVzKTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaHVuay5saW5lcykge1xuICAgICAgLy8gRG9uJ3QgY2FyZSBhYm91dCB0ZXJtaW5hdGlvbiBuZXdsaW5lLlxuICAgICAgaWYgKGxpbmUgPT09ICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKSB7IGNvbnRpbnVlOyB9XG4gICAgICBjb25zdCBtYXJrZXIgPSBsaW5lLmNoYXJBdCgwKTtcbiAgICAgIGNvbnN0IHRleHQgPSBsaW5lLnNsaWNlKDEgKyBiYXNlSW5kZW50KTtcbiAgICAgIHN3aXRjaCAobWFya2VyKSB7XG4gICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgIHJlc3VsdC5wdXNoKGAke0NPTlRFWFR9ICR7dGV4dH1gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgcmVzdWx0LnB1c2goY2hhbGsuYm9sZChgJHtBRERJVElPTn0gJHtjaGFsay5ncmVlbih0ZXh0KX1gKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgIHJlc3VsdC5wdXNoKGNoYWxrLmJvbGQoYCR7UkVNT1ZBTH0gJHtjaGFsay5yZWQodGV4dCl9YCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBkaWZmIG1hcmtlcjogJHttYXJrZXJ9IChmdWxsIGxpbmU6ICR7bGluZX0pYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG5cbiAgZnVuY3Rpb24gX2ZpbmRJbmRlbnQobGluZXM6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZW50ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGxpbmUuY2hhckF0KGkpICE9PSAnICcpIHtcbiAgICAgICAgICBpbmRlbnQgPSBpbmRlbnQgPiBpIC0gMSA/IGkgLSAxIDogaW5kZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbmRlbnQ7XG4gIH1cbn1cbiJdfQ==
423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUE4QjtBQUM5QiwrQkFBK0I7QUFFL0Isc0NBQXdDO0FBQ3hDLG1EQUF1RztBQUN2RyxpREFBNkM7QUFJN0MsY0FBYztBQUNkLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDO0FBRXpDLDBEQUEwRDtBQUMxRCxNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBTzVDOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQy9CLE1BQW9CLEVBQ3BCLFlBQTBCLEVBQzFCLG1CQUFvRCxFQUFFLEVBQ3RELFVBQWtCLENBQUM7SUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVqRixJQUFJLFlBQVksQ0FBQyx3QkFBd0IsSUFBSSxZQUFZLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzFILFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkYsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELCtCQUErQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUV6RCxTQUFTLENBQUMs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RSxDQUFDO1lBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IERpZmZlcmVuY2VDb2xsZWN0aW9uLCBUZW1wbGF0ZURpZmYgfSBmcm9tICcuL2RpZmYvdHlwZXMnO1xuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnLi9kaWZmL3V0aWwnO1xuaW1wb3J0IHsgRGlmZmVyZW5jZSwgaXNQcm9wZXJ0eURpZmZlcmVuY2UsIFJlc291cmNlRGlmZmVyZW5jZSwgUmVzb3VyY2VJbXBhY3QgfSBmcm9tICcuL2RpZmYtdGVtcGxhdGUnO1xuaW1wb3J0IHsgZm9ybWF0VGFibGUgfSBmcm9tICcuL2Zvcm1hdC10YWJsZSc7XG5pbXBvcnQgeyBJYW1DaGFuZ2VzIH0gZnJvbSAnLi9pYW0vaWFtLWNoYW5nZXMnO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cENoYW5nZXMgfSBmcm9tICcuL25ldHdvcmsvc2VjdXJpdHktZ3JvdXAtY2hhbmdlcyc7XG5cbi8vIGZyb20gY3gtYXBpXG5jb25zdCBQQVRIX01FVEFEQVRBX0tFWSA9ICdhd3M6Y2RrOnBhdGgnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5jb25zdCB7IHN0cnVjdHVyZWRQYXRjaCB9ID0gcmVxdWlyZSgnZGlmZicpO1xuLyogZXNsaW50LWVuYWJsZSAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdFN0cmVhbSBleHRlbmRzIE5vZGVKUy5Xcml0YWJsZVN0cmVhbSB7XG4gIGNvbHVtbnM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVuZGVycyB0ZW1wbGF0ZSBkaWZmZXJlbmNlcyB0byB0aGUgcHJvY2VzcycgY29uc29sZS5cbiAqXG4gKiBAcGFyYW0gc3RyZWFtICAgICAgICAgICBUaGUgSU8gc3RyZWFtIHdoZXJlIHRvIG91dHB1dCB0aGUgcmVuZGVyZWQgZGlmZi5cbiAqIEBwYXJhbSB0ZW1wbGF0ZURpZmYgICAgIFRlbXBsYXRlRGlmZiB0byBiZSByZW5kZXJlZCB0byB0aGUgY29uc29sZS5cbiAqIEBwYXJhbSBsb2dpY2FsVG9QYXRoTWFwIEEgbWFwIGZyb20gbG9naWNhbCBJRCB0byBjb25zdHJ1Y3QgcGF0aC4gVXNlZnVsIGluXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHRoZXJlIGlzIG5vIGF3czpjZGs6cGF0aCBtZXRhZGF0YSBpbiB0aGUgdGVtcGxhdGUuXG4gKiBAcGFyYW0gY29udGV4dCAgICAgICAgICB0aGUgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgdG8gdXNlIGluIGFyYml0cmFyeSBKU09OIGRpZmYgKGRlZmF1bHRzIHRvIDMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGlmZmVyZW5jZXMoXG4gIHN0cmVhbTogRm9ybWF0U3RyZWFtLFxuICB0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZixcbiAgbG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICBjb250ZXh0OiBudW1iZXIgPSAzKSB7XG4gIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoc3RyZWFtLCBsb2dpY2FsVG9QYXRoTWFwLCB0ZW1wbGF0ZURpZmYsIGNvbnRleHQpO1xuXG4gIGlmICh0ZW1wbGF0ZURpZmYuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uIHx8IHRlbXBsYXRlRGlmZi50cmFuc2Zvcm0gfHwgdGVtcGxhdGVEaWZmLmRlc2NyaXB0aW9uKSB7XG4gICAgZm9ybWF0dGVyLnByaW50U2VjdGlvbkhlYWRlcignVGVtcGxhdGUnKTtcbiAgICBmb3JtYXR0ZXIuZm9ybWF0RGlmZmVyZW5jZSgnQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uJywgJ0FXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbicsIHRlbXBsYXRlRGlmZi5hd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24pO1xuICAgIGZvcm1hdHRlci5mb3JtYXREaWZmZXJlbmNlKCdUcmFuc2Zvcm0nLCAnVHJhbnNmb3JtJywgdGVtcGxhdGVEaWZmLnRyYW5zZm9ybSk7XG4gICAgZm9ybWF0dGVyLmZvcm1hdERpZmZlcmVuY2UoJ0Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJywgdGVtcGxhdGVEaWZmLmRlc2NyaXB0aW9uKTtcbiAgICBmb3JtYXR0ZXIucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gIH1cblxuICBmb3JtYXRTZWN1cml0eUNoYW5nZXNXaXRoQmFubmVyKGZvcm1hdHRlciwgdGVtcGxhdGVEaWZmKTtcblxuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignUGFyYW1ldGVycycsICdQYXJhbWV0ZXInLCB0ZW1wbGF0ZURpZmYucGFyYW1ldGVycyk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdNZXRhZGF0YScsICdNZXRhZGF0YScsIHRlbXBsYXRlRGlmZi5tZXRhZGF0YSk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdNYXBwaW5ncycsICdNYXBwaW5nJywgdGVtcGxhdGVEaWZmLm1hcHBpbmdzKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ0NvbmRpdGlvbnMnLCAnQ29uZGl0aW9uJywgdGVtcGxhdGVEaWZmLmNvbmRpdGlvbnMpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignUmVzb3VyY2VzJywgJ1Jlc291cmNlJywgdGVtcGxhdGVEaWZmLnJlc291cmNlcywgZm9ybWF0dGVyLmZvcm1hdFJlc291cmNlRGlmZmVyZW5jZS5iaW5kKGZvcm1hdHRlcikpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignT3V0cHV0cycsICdPdXRwdXQnLCB0ZW1wbGF0ZURpZmYub3V0cHV0cyk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdPdGhlciBDaGFuZ2VzJywgJ1Vua25vd24nLCB0ZW1wbGF0ZURpZmYudW5rbm93bik7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIGRpZmYgb2Ygc2VjdXJpdHkgY2hhbmdlcyB0byB0aGUgZ2l2ZW4gc3RyZWFtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTZWN1cml0eUNoYW5nZXMoXG4gIHN0cmVhbTogTm9kZUpTLldyaXRhYmxlU3RyZWFtLFxuICB0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZixcbiAgbG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICBjb250ZXh0PzogbnVtYmVyKSB7XG4gIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoc3RyZWFtLCBsb2dpY2FsVG9QYXRoTWFwLCB0ZW1wbGF0ZURpZmYsIGNvbnRleHQpO1xuXG4gIGZvcm1hdFNlY3VyaXR5Q2hhbmdlc1dpdGhCYW5uZXIoZm9ybWF0dGVyLCB0ZW1wbGF0ZURpZmYpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTZWN1cml0eUNoYW5nZXNXaXRoQmFubmVyKGZvcm1hdHRlcjogRm9ybWF0dGVyLCB0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZikge1xuICBpZiAoIXRlbXBsYXRlRGlmZi5pYW1DaGFuZ2VzLmhhc0NoYW5nZXMgJiYgIXRlbXBsYXRlRGlmZi5zZWN1cml0eUdyb3VwQ2hhbmdlcy5oYXNDaGFuZ2VzKSB7IHJldHVybjsgfVxuICBmb3JtYXR0ZXIuZm9ybWF0SWFtQ2hhbmdlcyh0ZW1wbGF0ZURpZmYuaWFtQ2hhbmdlcyk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN1cml0eUdyb3VwQ2hhbmdlcyh0ZW1wbGF0ZURpZmYuc2VjdXJpdHlHcm91cENoYW5nZXMpO1xuXG4gIGZvcm1hdHRlci53YXJuaW5nKCcoTk9URTogVGhlcmUgbWF5IGJlIHNlY3VyaXR5LXJlbGF0ZWQgY2hhbmdlcyBub3QgaW4gdGhpcyBsaXN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xMjk5KScpO1xuICBmb3JtYXR0ZXIucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG59XG5cbmNvbnN0IEFERElUSU9OID0gY2hhbGsuZ3JlZW4oJ1srXScpO1xuY29uc3QgQ09OVEVYVCA9IGNoYWxrLmdyZXkoJ1sgXScpO1xuY29uc3QgVVBEQVRFID0gY2hhbGsueWVsbG93KCdbfl0nKTtcbmNvbnN0IFJFTU9WQUwgPSBjaGFsay5yZWQoJ1stXScpO1xuY29uc3QgSU1QT1JUID0gY2hhbGsuYmx1ZSgnW+KGkF0nKTtcblxuY2xhc3MgRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdHJlYW06IEZvcm1hdFN0cmVhbSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2ljYWxUb1BhdGhNYXA6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgZGlmZj86IFRlbXBsYXRlRGlmZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ6IG51bWJlciA9IDMpIHtcbiAgICAvLyBSZWFkIGFkZGl0aW9uYWwgY29uc3RydWN0IHBhdGhzIGZyb20gdGhlIGRpZmYgaWYgaXQgaXMgc3VwcGxpZWRcbiAgICBpZiAoZGlmZikge1xuICAgICAgdGhpcy5yZWFkQ29uc3RydWN0UGF0aHNGcm9tKGRpZmYpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcmludChmbXQ6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICB0aGlzLnN0cmVhbS53cml0ZShjaGFsay53aGl0ZShmb3JtYXQoZm10LCAuLi5hcmdzKSkgKyAnXFxuJyk7XG4gIH1cblxuICBwdWJsaWMgd2FybmluZyhmbXQ6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICB0aGlzLnN0cmVhbS53cml0ZShjaGFsay55ZWxsb3coZm9ybWF0KGZtdCwgLi4uYXJncykpICsgJ1xcbicpO1xuICB9XG5cbiAgcHVibGljIGZvcm1hdFNlY3Rpb248ViwgVCBleHRlbmRzIERpZmZlcmVuY2U8Vj4+KFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgZW50cnlUeXBlOiBzdHJpbmcsXG4gICAgY29sbGVjdGlvbjogRGlmZmVyZW5jZUNvbGxlY3Rpb248ViwgVD4sXG4gICAgZm9ybWF0dGVyOiAodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nLCBkaWZmOiBUKSA9PiB2b2lkID0gdGhpcy5mb3JtYXREaWZmZXJlbmNlLmJpbmQodGhpcykpIHtcblxuICAgIGlmIChjb2xsZWN0aW9uLmRpZmZlcmVuY2VDb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKHRpdGxlKTtcbiAgICBjb2xsZWN0aW9uLmZvckVhY2hEaWZmZXJlbmNlKChpZCwgZGlmZikgPT4gZm9ybWF0dGVyKGVudHJ5VHlwZSwgaWQsIGRpZmYpKTtcbiAgICB0aGlzLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICB9XG5cbiAgcHVibGljIHByaW50U2VjdGlvbkhlYWRlcih0aXRsZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wcmludChjaGFsay51bmRlcmxpbmUoY2hhbGsuYm9sZCh0aXRsZSkpKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmludFNlY3Rpb25Gb290ZXIoKSB7XG4gICAgdGhpcy5wcmludCgnJyk7XG4gIH1cblxuICAvKipcbiAgICogUHJpbnQgYSBzaW1wbGUgZGlmZmVyZW5jZSBmb3IgYSBnaXZlbiBuYW1lZCBlbnRpdHkuXG4gICAqXG4gICAqIEBwYXJhbSBsb2dpY2FsSWQgdGhlIG5hbWUgb2YgdGhlIGVudGl0eSB0aGF0IGlzIGRpZmZlcmVudC5cbiAgICogQHBhcmFtIGRpZmYgdGhlIGRpZmZlcmVuY2UgdG8gYmUgcmVuZGVyZWQuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0RGlmZmVyZW5jZSh0eXBlOiBzdHJpbmcsIGxvZ2ljYWxJZDogc3RyaW5nLCBkaWZmOiBEaWZmZXJlbmNlPGFueT4gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWRpZmYgfHwgIWRpZmYuaXNEaWZmZXJlbnQpIHsgcmV0dXJuOyB9XG5cbiAgICBsZXQgdmFsdWU7XG5cbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUoZGlmZi5vbGRWYWx1ZSwgY2hhbGsucmVkKTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUoZGlmZi5uZXdWYWx1ZSwgY2hhbGsuZ3JlZW4pO1xuICAgIGlmIChkaWZmLmlzQWRkaXRpb24pIHtcbiAgICAgIHZhbHVlID0gbmV3VmFsdWU7XG4gICAgfSBlbHNlIGlmIChkaWZmLmlzVXBkYXRlKSB7XG4gICAgICB2YWx1ZSA9IGAke29sZFZhbHVlfSB0byAke25ld1ZhbHVlfWA7XG4gICAgfSBlbHNlIGlmIChkaWZmLmlzUmVtb3ZhbCkge1xuICAgICAgdmFsdWUgPSBvbGRWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnByaW50KGAke3RoaXMuZm9ybWF0UHJlZml4KGRpZmYpfSAke2NoYWxrLmN5YW4odHlwZSl9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbElkKX06ICR7dmFsdWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogUHJpbnQgYSByZXNvdXJjZSBkaWZmZXJlbmNlIGZvciBhIGdpdmVuIGxvZ2ljYWwgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBsb2dpY2FsSWQgdGhlIGxvZ2ljYWwgSUQgb2YgdGhlIHJlc291cmNlIHRoYXQgY2hhbmdlZC5cbiAgICogQHBhcmFtIGRpZmYgICAgICB0aGUgY2hhbmdlIHRvIGJlIHJlbmRlcmVkLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFJlc291cmNlRGlmZmVyZW5jZShfdHlwZTogc3RyaW5nLCBsb2dpY2FsSWQ6IHN0cmluZywgZGlmZjogUmVzb3VyY2VEaWZmZXJlbmNlKSB7XG4gICAgaWYgKCFkaWZmLmlzRGlmZmVyZW50KSB7IHJldHVybjsgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VUeXBlID0gZGlmZi5pc1JlbW92YWwgPyBkaWZmLm9sZFJlc291cmNlVHlwZSA6IGRpZmYubmV3UmVzb3VyY2VUeXBlO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICB0aGlzLnByaW50KGAke3RoaXMuZm9ybWF0UmVzb3VyY2VQcmVmaXgoZGlmZil9ICR7dGhpcy5mb3JtYXRWYWx1ZShyZXNvdXJjZVR5cGUsIGNoYWxrLmN5YW4pfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxJZCl9ICR7dGhpcy5mb3JtYXRJbXBhY3QoZGlmZi5jaGFuZ2VJbXBhY3QpfWApO1xuXG4gICAgaWYgKGRpZmYuaXNVcGRhdGUpIHtcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2VDb3VudCA9IGRpZmYuZGlmZmVyZW5jZUNvdW50O1xuICAgICAgbGV0IHByb2Nlc3NlZENvdW50ID0gMDtcbiAgICAgIGRpZmYuZm9yRWFjaERpZmZlcmVuY2UoKF8sIG5hbWUsIHZhbHVlcykgPT4ge1xuICAgICAgICBwcm9jZXNzZWRDb3VudCArPSAxO1xuICAgICAgICB0aGlzLmZvcm1hdFRyZWVEaWZmKG5hbWUsIHZhbHVlcywgcHJvY2Vzc2VkQ291bnQgPT09IGRpZmZlcmVuY2VDb3VudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0UmVzb3VyY2VQcmVmaXgoZGlmZjogUmVzb3VyY2VEaWZmZXJlbmNlKSB7XG4gICAgaWYgKGRpZmYuaXNJbXBvcnQpIHsgcmV0dXJuIElNUE9SVDsgfVxuXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0UHJlZml4KGRpZmYpO1xuICB9XG5cbiAgcHVibGljIGZvcm1hdFByZWZpeDxUPihkaWZmOiBEaWZmZXJlbmNlPFQ+KSB7XG4gICAgaWYgKGRpZmYuaXNBZGRpdGlvbikgeyByZXR1cm4gQURESVRJT047IH1cbiAgICBpZiAoZGlmZi5pc1VwZGF0ZSkgeyByZXR1cm4gVVBEQVRFOyB9XG4gICAgaWYgKGRpZmYuaXNSZW1vdmFsKSB7IHJldHVybiBSRU1PVkFMOyB9XG4gICAgcmV0dXJuIGNoYWxrLndoaXRlKCdbP10nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZC5cbiAgICogQHBhcmFtIGNvbG9yIHRoZSBjb2xvciB0byBiZSB1c2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyB0aGUgZm9ybWF0dGVkIHN0cmluZywgd2l0aCBjb2xvciBhcHBsaWVkLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFZhbHVlKHZhbHVlOiBhbnksIGNvbG9yOiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgeyByZXR1cm4gY29sb3IodmFsdWUpOyB9XG4gICAgcmV0dXJuIGNvbG9yKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGltcGFjdCB0aGUgaW1wYWN0IHRvIGJlIGZvcm1hdHRlZFxuICAgKiBAcmV0dXJucyBhIHVzZXItZnJpZW5kbHksIGNvbG9yZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaW1wYWN0LlxuICAgKi9cbiAgcHVibGljIGZvcm1hdEltcGFjdChpbXBhY3Q6IFJlc291cmNlSW1wYWN0KSB7XG4gICAgc3dpdGNoIChpbXBhY3QpIHtcbiAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuTUFZX1JFUExBQ0U6XG4gICAgICAgIHJldHVybiBjaGFsay5pdGFsaWMoY2hhbGsueWVsbG93KCdtYXkgYmUgcmVwbGFjZWQnKSk7XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRTpcbiAgICAgICAgcmV0dXJuIGNoYWxrLml0YWxpYyhjaGFsay5ib2xkKGNoYWxrLnJlZCgncmVwbGFjZScpKSk7XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfREVTVFJPWTpcbiAgICAgICAgcmV0dXJuIGNoYWxrLml0YWxpYyhjaGFsay5ib2xkKGNoYWxrLnJlZCgnZGVzdHJveScpKSk7XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfT1JQSEFOOlxuICAgICAgICByZXR1cm4gY2hhbGsuaXRhbGljKGNoYWxrLnllbGxvdygnb3JwaGFuJykpO1xuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX0lNUE9SVDpcbiAgICAgICAgcmV0dXJuIGNoYWxrLml0YWxpYyhjaGFsay5ibHVlKCdpbXBvcnQnKSk7XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfVVBEQVRFOlxuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX0NSRUFURTpcbiAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuTk9fQ0hBTkdFOlxuICAgICAgICByZXR1cm4gJyc7IC8vIG5vIGV4dHJhIGluZm8gaXMgZ2FpbmVkIGhlcmVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIHRyZWUgb2YgZGlmZmVyZW5jZXMgdW5kZXIgYSBwYXJ0aWN1bGFyIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lICAgIHRoZSBuYW1lIG9mIHRoZSByb290IG9mIHRoZSB0cmVlLlxuICAgKiBAcGFyYW0gZGlmZiAgICB0aGUgZGlmZmVyZW5jZSBvbiB0aGUgdHJlZS5cbiAgICogQHBhcmFtIGxhc3QgICAgd2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IG5vZGUgb2YgYSBwYXJlbnQgdHJlZS5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRUcmVlRGlmZihuYW1lOiBzdHJpbmcsIGRpZmY6IERpZmZlcmVuY2U8YW55PiwgbGFzdDogYm9vbGVhbikge1xuICAgIGxldCBhZGRpdGlvbmFsSW5mbyA9ICcnO1xuICAgIGlmIChpc1Byb3BlcnR5RGlmZmVyZW5jZShkaWZmKSkge1xuICAgICAgaWYgKGRpZmYuY2hhbmdlSW1wYWN0ID09PSBSZXNvdXJjZUltcGFjdC5NQVlfUkVQTEFDRSkge1xuICAgICAgICBhZGRpdGlvbmFsSW5mbyA9ICcgKG1heSBjYXVzZSByZXBsYWNlbWVudCknO1xuICAgICAgfSBlbHNlIGlmIChkaWZmLmNoYW5nZUltcGFjdCA9PT0gUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFKSB7XG4gICAgICAgIGFkZGl0aW9uYWxJbmZvID0gJyAocmVxdWlyZXMgcmVwbGFjZW1lbnQpJztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcmludCgnICVz4pSAICVzICVzJXMnLCBsYXN0ID8gJ+KUlCcgOiAn4pScJywgdGhpcy5jaGFuZ2VUYWcoZGlmZi5vbGRWYWx1ZSwgZGlmZi5uZXdWYWx1ZSksIG5hbWUsIGFkZGl0aW9uYWxJbmZvKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXRPYmplY3REaWZmKGRpZmYub2xkVmFsdWUsIGRpZmYubmV3VmFsdWUsIGAgJHtsYXN0ID8gJyAnIDogJ+KUgid9YCk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBvYmplY3RzLCBsb29raW5nIGZvciB0aGUgZGlmZmVyZW5jZXMgYXMgZGVlcCBhcyBwb3NzaWJsZSxcbiAgICogYW5kIHJlbmRlcmluZyBhIHRyZWUgZ3JhcGggb2YgdGhlIHBhdGggdW50aWwgdGhlIGRpZmZlcmVuY2UgaXMgZm91bmQuXG4gICAqXG4gICAqIEBwYXJhbSBvbGRPYmplY3QgIHRoZSBvbGQgb2JqZWN0LlxuICAgKiBAcGFyYW0gbmV3T2JqZWN0ICB0aGUgbmV3IG9iamVjdC5cbiAgICogQHBhcmFtIGxpbmVQcmVmaXggYSBwcmVmaXggKGluZGVudC1saWtlKSB0byBiZSB1c2VkIG9uIGV2ZXJ5IGxpbmUuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0T2JqZWN0RGlmZihvbGRPYmplY3Q6IGFueSwgbmV3T2JqZWN0OiBhbnksIGxpbmVQcmVmaXg6IHN0cmluZykge1xuICAgIGlmICgodHlwZW9mIG9sZE9iamVjdCAhPT0gdHlwZW9mIG5ld09iamVjdCkgfHwgQXJyYXkuaXNBcnJheShvbGRPYmplY3QpIHx8IHR5cGVvZiBvbGRPYmplY3QgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvbGRPYmplY3QgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAob2xkT2JqZWN0ICE9PSB1bmRlZmluZWQgJiYgbmV3T2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvbGRPYmplY3QgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXdPYmplY3QgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3Qgb2xkU3RyID0gSlNPTi5zdHJpbmdpZnkob2xkT2JqZWN0LCBudWxsLCAyKTtcbiAgICAgICAgICBjb25zdCBuZXdTdHIgPSBKU09OLnN0cmluZ2lmeShuZXdPYmplY3QsIG51bGwsIDIpO1xuICAgICAgICAgIGNvbnN0IGRpZmYgPSBfZGlmZlN0cmluZ3Mob2xkU3RyLCBuZXdTdHIsIHRoaXMuY29udGV4dCk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnByaW50KCclcyAgICVzICVzJywgbGluZVByZWZpeCwgaSA9PT0gMCA/ICfilJTilIAnIDogJyAgJywgZGlmZltpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJpbnQoJyVzICAg4pSc4pSAICVzICVzJywgbGluZVByZWZpeCwgUkVNT1ZBTCwgdGhpcy5mb3JtYXRWYWx1ZShvbGRPYmplY3QsIGNoYWxrLnJlZCkpO1xuICAgICAgICAgIHRoaXMucHJpbnQoJyVzICAg4pSU4pSAICVzICVzJywgbGluZVByZWZpeCwgQURESVRJT04sIHRoaXMuZm9ybWF0VmFsdWUobmV3T2JqZWN0LCBjaGFsay5ncmVlbikpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9sZE9iamVjdCAhPT0gdW5kZWZpbmVkIC8qICYmIG5ld09iamVjdCA9PT0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHRoaXMucHJpbnQoJyVzICAg4pSU4pSAICVzJywgbGluZVByZWZpeCwgdGhpcy5mb3JtYXRWYWx1ZShvbGRPYmplY3QsIGNoYWxrLnJlZCkpO1xuICAgICAgfSBlbHNlIC8qIGlmIChvbGRPYmplY3QgPT09IHVuZGVmaW5lZCAmJiBuZXdPYmplY3QgIT09IHVuZGVmaW5lZCkgKi8ge1xuICAgICAgICB0aGlzLnByaW50KCclcyAgIOKUlOKUgCAlcycsIGxpbmVQcmVmaXgsIHRoaXMuZm9ybWF0VmFsdWUobmV3T2JqZWN0LCBjaGFsay5ncmVlbikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXlTZXQgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG9sZE9iamVjdCkpO1xuICAgIE9iamVjdC5rZXlzKG5ld09iamVjdCkuZm9yRWFjaChrID0+IGtleVNldC5hZGQoaykpO1xuICAgIGNvbnN0IGtleXMgPSBuZXcgQXJyYXkoLi4ua2V5U2V0KS5maWx0ZXIoayA9PiAhZGVlcEVxdWFsKG9sZE9iamVjdFtrXSwgbmV3T2JqZWN0W2tdKSkuc29ydCgpO1xuICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBvbGRPYmplY3Rba2V5XTtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3T2JqZWN0W2tleV07XG4gICAgICBjb25zdCB0cmVlUHJlZml4ID0ga2V5ID09PSBsYXN0S2V5ID8gJ+KUlCcgOiAn4pScJztcbiAgICAgIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICAlc+KUgCAlcyAlczonLCBsaW5lUHJlZml4LCB0cmVlUHJlZml4LCB0aGlzLmNoYW5nZVRhZyhvbGRWYWx1ZSwgbmV3VmFsdWUpLCBjaGFsay5ibHVlKGAuJHtrZXl9YCkpO1xuICAgICAgICB0aGlzLmZvcm1hdE9iamVjdERpZmYob2xkVmFsdWUsIG5ld1ZhbHVlLCBgJHtsaW5lUHJlZml4fSAgICR7a2V5ID09PSBsYXN0S2V5ID8gJyAnIDogJ+KUgid9YCk7XG4gICAgICB9IGVsc2UgaWYgKG9sZFZhbHVlICE9PSB1bmRlZmluZWQgLyogJiYgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB0aGlzLnByaW50KCclcyAgICVz4pSAICVzIFJlbW92ZWQ6ICVzJywgbGluZVByZWZpeCwgdHJlZVByZWZpeCwgUkVNT1ZBTCwgY2hhbGsuYmx1ZShgLiR7a2V5fWApKTtcbiAgICAgIH0gZWxzZSAvKiBpZiAob2xkVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkICovIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICAlc+KUgCAlcyBBZGRlZDogJXMnLCBsaW5lUHJlZml4LCB0cmVlUHJlZml4LCBBRERJVElPTiwgY2hhbGsuYmx1ZShgLiR7a2V5fWApKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG9sZFZhbHVlIHRoZSBvbGQgdmFsdWUgb2YgYSBkaWZmZXJlbmNlLlxuICAgKiBAcGFyYW0gbmV3VmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiBhIGRpZmZlcmVuY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIGEgdGFnIHRvIGJlIHJlbmRlcmVkIGluIHRoZSBkaWZmLCByZWZsZWN0aW5nIHdoZXRoZXIgdGhlIGRpZmZlcmVuY2VcbiAgICogICAgICB3YXMgYW4gQURESVRJT04sIFVQREFURSBvciBSRU1PVkFMLlxuICAgKi9cbiAgcHVibGljIGNoYW5nZVRhZyhvbGRWYWx1ZTogYW55IHwgdW5kZWZpbmVkLCBuZXdWYWx1ZTogYW55IHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gVVBEQVRFO1xuICAgIH0gZWxzZSBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZCAvKiAmJiBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKi8pIHtcbiAgICAgIHJldHVybiBSRU1PVkFMO1xuICAgIH0gZWxzZSAvKiBpZiAob2xkVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSAqLyB7XG4gICAgICByZXR1cm4gQURESVRJT047XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgJ2F3czpjZGs6cGF0aCcgbWV0YWRhdGEgaW4gdGhlIGRpZmYgYW5kIGFkZCBpdCB0byB0aGUgbG9naWNhbFRvUGF0aE1hcFxuICAgKlxuICAgKiBUaGVyZSBhcmUgbXVsdGlwbGUgc291cmNlcyBvZiBsb2dpY2FsSUQgLT4gcGF0aCBtYXBwaW5nczogc3ludGggbWV0YWRhdGFcbiAgICogYW5kIHJlc291cmNlIG1ldGFkYXRhLCBhbmQgd2UgY29tYmluZSBhbGwgc291cmNlcyBpbnRvIGEgc2luZ2xlIG1hcC5cbiAgICovXG4gIHB1YmxpYyByZWFkQ29uc3RydWN0UGF0aHNGcm9tKHRlbXBsYXRlRGlmZjogVGVtcGxhdGVEaWZmKSB7XG4gICAgZm9yIChjb25zdCBbbG9naWNhbElkLCByZXNvdXJjZURpZmZdIG9mIE9iamVjdC5lbnRyaWVzKHRlbXBsYXRlRGlmZi5yZXNvdXJjZXMpKSB7XG4gICAgICBpZiAoIXJlc291cmNlRGlmZikgeyBjb250aW51ZTsgfVxuXG4gICAgICBjb25zdCBvbGRQYXRoTWV0YWRhdGEgPSByZXNvdXJjZURpZmYub2xkVmFsdWU/Lk1ldGFkYXRhPy5bUEFUSF9NRVRBREFUQV9LRVldO1xuICAgICAgaWYgKG9sZFBhdGhNZXRhZGF0YSAmJiAhKGxvZ2ljYWxJZCBpbiB0aGlzLmxvZ2ljYWxUb1BhdGhNYXApKSB7XG4gICAgICAgIHRoaXMubG9naWNhbFRvUGF0aE1hcFtsb2dpY2FsSWRdID0gb2xkUGF0aE1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdQYXRoTWV0YWRhdGEgPSByZXNvdXJjZURpZmYubmV3VmFsdWU/Lk1ldGFkYXRhPy5bUEFUSF9NRVRBREFUQV9LRVldO1xuICAgICAgaWYgKG5ld1BhdGhNZXRhZGF0YSAmJiAhKGxvZ2ljYWxJZCBpbiB0aGlzLmxvZ2ljYWxUb1BhdGhNYXApKSB7XG4gICAgICAgIHRoaXMubG9naWNhbFRvUGF0aE1hcFtsb2dpY2FsSWRdID0gbmV3UGF0aE1ldGFkYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRMb2dpY2FsSWQobG9naWNhbElkOiBzdHJpbmcpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGEgcGF0aCBpbiB0aGUgbWFwLCByZXR1cm4gaXRcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVkTG9naWNhbElkUGF0aChsb2dpY2FsSWQpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWQpIHtcbiAgICAgIHJldHVybiBgJHtub3JtYWxpemVkfSAke2NoYWxrLmdyYXkobG9naWNhbElkKX1gO1xuICAgIH1cblxuICAgIHJldHVybiBsb2dpY2FsSWQ7XG4gIH1cblxuICBwdWJsaWMgbm9ybWFsaXplZExvZ2ljYWxJZFBhdGgobG9naWNhbElkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIGlmIHdlIGhhdmUgYSBwYXRoIGluIHRoZSBtYXAsIHJldHVybiBpdFxuICAgIGNvbnN0IHBhdGggPSB0aGlzLmxvZ2ljYWxUb1BhdGhNYXBbbG9naWNhbElkXTtcbiAgICByZXR1cm4gcGF0aCA/IG5vcm1hbGl6ZVBhdGgocGF0aCkgOiB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBQYXRoIGlzIHN1cHBvc2VkIHRvIHN0YXJ0IHdpdGggXCIvc3RhY2stbmFtZVwiLiBJZiB0aGlzIGlzIHRoZSBjYXNlIChpLmUuIHBhdGggaGFzIG1vcmUgdGhhblxuICAgICAqIHR3byBjb21wb25lbnRzLCB3ZSByZW1vdmUgdGhlIGZpcnN0IHBhcnQuIE90aGVyd2lzZSwgd2UganVzdCB1c2UgdGhlIGZ1bGwgcGF0aC5cbiAgICAgKiBAcGFyYW0gcFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocDogc3RyaW5nKSB7XG4gICAgICBpZiAocC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcCA9IHAuc2xpY2UoMSk7XG4gICAgICB9XG5cbiAgICAgIGxldCBwYXJ0cyA9IHAuc3BsaXQoJy8nKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMSk7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBsYXN0IGNvbXBvbmVudCBpZiBpdCdzIFwiUmVzb3VyY2VcIiBvciBcIkRlZmF1bHRcIiAoaWYgd2UgaGF2ZSBtb3JlIHRoYW4gYSBzaW5nbGUgY29tcG9uZW50KVxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGNvbnN0IGxhc3QgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdCA9PT0gJ1Jlc291cmNlJyB8fCBsYXN0ID09PSAnRGVmYXVsdCcpIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHBhcnRzLmpvaW4oJy8nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRJYW1DaGFuZ2VzKGNoYW5nZXM6IElhbUNoYW5nZXMpIHtcbiAgICBpZiAoIWNoYW5nZXMuaGFzQ2hhbmdlcykgeyByZXR1cm47IH1cblxuICAgIGlmIChjaGFuZ2VzLnN0YXRlbWVudHMuaGFzQ2hhbmdlcykge1xuICAgICAgdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ0lBTSBTdGF0ZW1lbnQgQ2hhbmdlcycpO1xuICAgICAgdGhpcy5wcmludChmb3JtYXRUYWJsZSh0aGlzLmRlZXBTdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhjaGFuZ2VzLnN1bW1hcml6ZVN0YXRlbWVudHMoKSksIHRoaXMuc3RyZWFtLmNvbHVtbnMpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5tYW5hZ2VkUG9saWNpZXMuaGFzQ2hhbmdlcykge1xuICAgICAgdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ0lBTSBQb2xpY3kgQ2hhbmdlcycpO1xuICAgICAgdGhpcy5wcmludChmb3JtYXRUYWJsZSh0aGlzLmRlZXBTdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhjaGFuZ2VzLnN1bW1hcml6ZU1hbmFnZWRQb2xpY2llcygpKSwgdGhpcy5zdHJlYW0uY29sdW1ucykpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRTZWN1cml0eUdyb3VwQ2hhbmdlcyhjaGFuZ2VzOiBTZWN1cml0eUdyb3VwQ2hhbmdlcykge1xuICAgIGlmICghY2hhbmdlcy5oYXNDaGFuZ2VzKSB7IHJldHVybjsgfVxuXG4gICAgdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1NlY3VyaXR5IEdyb3VwIENoYW5nZXMnKTtcbiAgICB0aGlzLnByaW50KGZvcm1hdFRhYmxlKHRoaXMuZGVlcFN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKGNoYW5nZXMuc3VtbWFyaXplKCkpLCB0aGlzLnN0cmVhbS5jb2x1bW5zKSk7XG4gIH1cblxuICBwdWJsaWMgZGVlcFN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKHJvd3M6IHN0cmluZ1tdW10pOiBzdHJpbmdbXVtdIHtcbiAgICByZXR1cm4gcm93cy5tYXAocm93ID0+IHJvdy5tYXAodGhpcy5zdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcy5iaW5kKHRoaXMpKSk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic3RpdHV0ZSBhbGwgc3RyaW5ncyBsaWtlICR7TG9nSWQueHh4fSB3aXRoIHRoZSBwYXRoIGluc3RlYWQgb2YgdGhlIGxvZ2ljYWwgSURcbiAgICovXG4gIHB1YmxpYyBzdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKC9cXCRcXHsoW14ufV0rKSguW159XSspP1xcfS9pZywgKF9tYXRjaCwgbG9nSWQsIHN1ZmZpeCkgPT4ge1xuICAgICAgcmV0dXJuICckeycgKyAodGhpcy5ub3JtYWxpemVkTG9naWNhbElkUGF0aChsb2dJZCkgfHwgbG9nSWQpICsgKHN1ZmZpeCB8fCAnJykgKyAnfSc7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHBhdGNoIGFzIHJldHVybmVkIGJ5IGBgZGlmZi5zdHJ1Y3R1cmVkUGF0Y2hgYC5cbiAqL1xuaW50ZXJmYWNlIFBhdGNoIHtcbiAgLyoqXG4gICAqIEh1bmtzIGluIHRoZSBwYXRjaC5cbiAgICovXG4gIGh1bmtzOiBSZWFkb25seUFycmF5PFBhdGNoSHVuaz47XG59XG5cbi8qKlxuICogQSBodW5rIGluIGEgcGF0Y2ggcHJvZHVjZWQgYnkgYGBkaWZmLnN0cnVjdHVyZWRQYXRjaGBgLlxuICovXG5pbnRlcmZhY2UgUGF0Y2hIdW5rIHtcbiAgb2xkU3RhcnQ6IG51bWJlcjtcbiAgb2xkTGluZXM6IG51bWJlcjtcbiAgbmV3U3RhcnQ6IG51bWJlcjtcbiAgbmV3TGluZXM6IG51bWJlcjtcbiAgbGluZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB1bmlmaWVkIGRpZmYgb2YgdHdvIHN0cmluZ3MuXG4gKlxuICogQHBhcmFtIG9sZFN0ciAgdGhlIFwib2xkXCIgdmVyc2lvbiBvZiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIG5ld1N0ciAgdGhlIFwibmV3XCIgdmVyc2lvbiBvZiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIGNvbnRleHQgdGhlIG51bWJlciBvZiBjb250ZXh0IGxpbmVzIHRvIHVzZSBpbiBhcmJpdHJhcnkgSlNPTiBkaWZmLlxuICpcbiAqIEByZXR1cm5zIGFuIGFycmF5IG9mIGRpZmYgbGluZXMuXG4gKi9cbmZ1bmN0aW9uIF9kaWZmU3RyaW5ncyhvbGRTdHI6IHN0cmluZywgbmV3U3RyOiBzdHJpbmcsIGNvbnRleHQ6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGF0Y2g6IFBhdGNoID0gc3RydWN0dXJlZFBhdGNoKG51bGwsIG51bGwsIG9sZFN0ciwgbmV3U3RyLCBudWxsLCBudWxsLCB7IGNvbnRleHQgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgaHVuayBvZiBwYXRjaC5odW5rcykge1xuICAgIHJlc3VsdC5wdXNoKGNoYWxrLm1hZ2VudGEoYEBAIC0ke2h1bmsub2xkU3RhcnR9LCR7aHVuay5vbGRMaW5lc30gKyR7aHVuay5uZXdTdGFydH0sJHtodW5rLm5ld0xpbmVzfSBAQGApKTtcbiAgICBjb25zdCBiYXNlSW5kZW50ID0gX2ZpbmRJbmRlbnQoaHVuay5saW5lcyk7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGh1bmsubGluZXMpIHtcbiAgICAgIC8vIERvbid0IGNhcmUgYWJvdXQgdGVybWluYXRpb24gbmV3bGluZS5cbiAgICAgIGlmIChsaW5lID09PSAnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJykgeyBjb250aW51ZTsgfVxuICAgICAgY29uc3QgbWFya2VyID0gbGluZS5jaGFyQXQoMCk7XG4gICAgICBjb25zdCB0ZXh0ID0gbGluZS5zbGljZSgxICsgYmFzZUluZGVudCk7XG4gICAgICBzd2l0Y2ggKG1hcmtlcikge1xuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICByZXN1bHQucHVzaChgJHtDT05URVhUfSAke3RleHR9YCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJysnOlxuICAgICAgICAgIHJlc3VsdC5wdXNoKGNoYWxrLmJvbGQoYCR7QURESVRJT059ICR7Y2hhbGsuZ3JlZW4odGV4dCl9YCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICByZXN1bHQucHVzaChjaGFsay5ib2xkKGAke1JFTU9WQUx9ICR7Y2hhbGsucmVkKHRleHQpfWApKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZGlmZiBtYXJrZXI6ICR7bWFya2VyfSAoZnVsbCBsaW5lOiAke2xpbmV9KWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xuXG4gIGZ1bmN0aW9uIF9maW5kSW5kZW50KGxpbmVzOiBzdHJpbmdbXSk6IG51bWJlciB7XG4gICAgbGV0IGluZGVudCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChsaW5lLmNoYXJBdChpKSAhPT0gJyAnKSB7XG4gICAgICAgICAgaW5kZW50ID0gaW5kZW50ID4gaSAtIDEgPyBpIC0gMSA6IGluZGVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5kZW50O1xuICB9XG59XG4iXX0=
@@ -243,4 +243,4 @@ function defaultResource(resource, statements) {
243
243
  statements.forEach(s => s.resources.replaceStar(resource));
244
244
  return statements;
245
245
  }
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtLWNoYW5nZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpYW0tY2hhbmdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvRUFBeUY7QUFDekYsK0JBQStCO0FBQy9CLHFEQUE4RTtBQUM5RSwyQ0FBK0Y7QUFHL0YsMENBQWlEO0FBQ2pELDREQUF3RDtBQUN4RCxrQ0FBb0Y7QUFPcEY7O0dBRUc7QUFDSCxNQUFhLFVBQVU7SUFnQnJCLFlBQVksS0FBc0I7UUFIbEIsZUFBVSxHQUFHLElBQUksNkJBQWtCLEVBQWEsQ0FBQztRQUNqRCxvQkFBZSxHQUFHLElBQUksNkJBQWtCLEVBQTJCLENBQUM7UUFHbEYsS0FBSyxNQUFNLGNBQWMsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFO1lBQ2xELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN6QztRQUNELEtBQUssTUFBTSxjQUFjLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRTtZQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDekM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQVcsb0JBQW9CO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUM7ZUFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxD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QyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWdCLEVBQUUsVUFBdUI7SUFDaEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDM0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3BlcnR5U2NydXRpbnlUeXBlLCBSZXNvdXJjZVNjcnV0aW55VHlwZSB9IGZyb20gJ0Bhd3MtY2RrL3NlcnZpY2Utc3BlYy10eXBlcyc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBNYW5hZ2VkUG9saWN5QXR0YWNobWVudCwgTWFuYWdlZFBvbGljeUpzb24gfSBmcm9tICcuL21hbmFnZWQtcG9saWN5JztcbmltcG9ydCB7IHBhcnNlTGFtYmRhUGVybWlzc2lvbiwgcGFyc2VTdGF0ZW1lbnRzLCBTdGF0ZW1lbnQsIFN0YXRlbWVudEpzb24gfSBmcm9tICcuL3N0YXRlbWVudCc7XG5pbXBvcnQgeyBNYXliZVBhcnNlZCB9IGZyb20gJy4uL2RpZmYvbWF5YmUtcGFyc2VkJztcbmltcG9ydCB7IFByb3BlcnR5Q2hhbmdlLCBQcm9wZXJ0eU1hcCwgUmVzb3VyY2VDaGFuZ2UgfSBmcm9tICcuLi9kaWZmL3R5cGVzJztcbmltcG9ydCB7IERpZmZhYmxlQ29sbGVjdGlvbiB9IGZyb20gJy4uL2RpZmZhYmxlJztcbmltcG9ydCB7IHJlbmRlckludHJpbnNpY3MgfSBmcm9tICcuLi9yZW5kZXItaW50cmluc2ljcyc7XG5pbXBvcnQgeyBkZWVwUmVtb3ZlVW5kZWZpbmVkLCBkcm9wSWZFbXB0eSwgZmxhdE1hcCwgbWFrZUNvbXBhcmF0b3IgfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBJYW1DaGFuZ2VzUHJvcHMge1xuICBwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5Q2hhbmdlW107XG4gIHJlc291cmNlQ2hhbmdlczogUmVzb3VyY2VDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBDaGFuZ2VzIHRvIElBTSBzdGF0ZW1lbnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBJYW1DaGFuZ2VzIHtcbiAgcHVibGljIHN0YXRpYyBJYW1Qcm9wZXJ0eVNjcnV0aW5pZXMgPSBbXG4gICAgUHJvcGVydHlTY3J1dGlueVR5cGUuSW5saW5lSWRlbnRpdHlQb2xpY2llcyxcbiAgICBQcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVSZXNvdXJjZVBvbGljeSxcbiAgICBQcm9wZXJ0eVNjcnV0aW55VHlwZS5NYW5hZ2VkUG9saWNpZXMsXG4gIF07XG5cbiAgcHVibGljIHN0YXRpYyBJYW1SZXNvdXJjZVNjcnV0aW5pZXMgPSBbXG4gICAgUmVzb3VyY2VTY3J1dGlueVR5cGUuUmVzb3VyY2VQb2xpY3lSZXNvdXJjZSxcbiAgICBSZXNvdXJjZVNjcnV0aW55VHlwZS5JZGVudGl0eVBvbGljeVJlc291cmNlLFxuICAgIFJlc291cmNlU2NydXRpbnlUeXBlLkxhbWJkYVBlcm1pc3Npb24sXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXRlbWVudHMgPSBuZXcgRGlmZmFibGVDb2xsZWN0aW9uPFN0YXRlbWVudD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IG1hbmFnZWRQb2xpY2llcyA9IG5ldyBEaWZmYWJsZUNvbGxlY3Rpb248TWFuYWdlZFBvbGljeUF0dGFjaG1lbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElhbUNoYW5nZXNQcm9wcykge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlDaGFuZ2Ugb2YgcHJvcHMucHJvcGVydHlDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnJlYWRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eUNoYW5nZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVzb3VyY2VDaGFuZ2Ugb2YgcHJvcHMucmVzb3VyY2VDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnJlYWRSZXNvdXJjZUNoYW5nZShyZXNvdXJjZUNoYW5nZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZW1lbnRzLmNhbGN1bGF0ZURpZmYoKTtcbiAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5jYWxjdWxhdGVEaWZmKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0NoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50cy5oYXNDaGFuZ2VzIHx8IHRoaXMubWFuYWdlZFBvbGljaWVzLmhhc0NoYW5nZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGNoYW5nZXMgaW5jbHVkZSBicm9hZGVuZWQgcGVybWlzc2lvbnNcbiAgICpcbiAgICogUGVybWlzc2lvbnMgYXJlIGJyb2FkZW5lZCBpZiBwb3NpdGl2ZSBzdGF0ZW1lbnRzIGFyZSBhZGRlZCBvclxuICAgKiBuZWdhdGl2ZSBzdGF0ZW1lbnRzIGFyZSByZW1vdmVkLCBvciBpZiBtYW5hZ2VkIHBvbGljaWVzIGFyZSBhZGRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGVybWlzc2lvbnNCcm9hZGVuZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50cy5hZGRpdGlvbnMuc29tZShzID0+ICFzLmlzTmVnYXRpdmVTdGF0ZW1lbnQpXG4gICAgICAgIHx8IHRoaXMuc3RhdGVtZW50cy5yZW1vdmFscy5zb21lKHMgPT4gcy5pc05lZ2F0aXZlU3RhdGVtZW50KVxuICAgICAgICB8fCB0aGlzLm1hbmFnZWRQb2xpY2llcy5oYXNBZGRpdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3VtbWFyeSB0YWJsZSBvZiBjaGFuZ2VzXG4gICAqL1xuICBwdWJsaWMgc3VtbWFyaXplU3RhdGVtZW50cygpOiBzdHJpbmdbXVtdIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdW10gPSBbXTtcblxuICAgIGNvbnN0IGhlYWRlciA9IFsnJywgJ1Jlc291cmNlJywgJ0VmZmVjdCcsICdBY3Rpb24nLCAnUHJpbmNpcGFsJywgJ0NvbmRpdGlvbiddO1xuXG4gICAgLy8gRmlyc3QgZ2VuZXJhdGUgYWxsIGxpbmVzLCB0aGVuIHNvcnQgb24gUmVzb3VyY2Ugc28gdGhhdCBzaW1pbGFyIHJlc291cmNlcyBhcmUgdG9nZXRoZXJcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiB0aGlzLnN0YXRlbWVudHMuYWRkaXRpb25zKSB7XG4gICAgICBjb25zdCByZW5kZXJlZFN0YXRlbWVudCA9IHN0YXRlbWVudC5yZW5kZXIoKTtcbiAgICAgIHJldC5wdXNoKFtcbiAgICAgICAgJysnLFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5yZXNvdXJjZSxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuZWZmZWN0LFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5hY3Rpb24sXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LnByaW5jaXBhbCxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuY29uZGl0aW9uLFxuICAgICAgXS5tYXAocyA9PiBjaGFsay5ncmVlbihzKSkpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiB0aGlzLnN0YXRlbWVudHMucmVtb3ZhbHMpIHtcbiAgICAgIGNvbnN0IHJlbmRlcmVkU3RhdGVtZW50ID0gc3RhdGVtZW50LnJlbmRlcigpO1xuICAgICAgcmV0LnB1c2goW1xuICAgICAgICBjaGFsay5yZWQoJy0nKSxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQucmVzb3VyY2UsXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LmVmZmVjdCxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuYWN0aW9uLFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5wcmluY2lwYWwsXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LmNvbmRpdGlvbixcbiAgICAgIF0ubWFwKHMgPT4gY2hhbGsucmVkKHMpKSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSAybmQgY29sdW1uXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV1dKSk7XG5cbiAgICByZXQuc3BsaWNlKDAsIDAsIGhlYWRlcik7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHN1bW1hcml6ZU1hbmFnZWRQb2xpY2llcygpOiBzdHJpbmdbXVtdIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdW10gPSBbXTtcbiAgICBjb25zdCBoZWFkZXIgPSBbJycsICdSZXNvdXJjZScsICdNYW5hZ2VkIFBvbGljeSBBUk4nXTtcblxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMubWFuYWdlZFBvbGljaWVzLmFkZGl0aW9ucykge1xuICAgICAgcmV0LnB1c2goW1xuICAgICAgICAnKycsXG4gICAgICAgIGF0dC5pZGVudGl0eUFybixcbiAgICAgICAgYXR0Lm1hbmFnZWRQb2xpY3lBcm4sXG4gICAgICBdLm1hcChzID0+IGNoYWxrLmdyZWVuKHMpKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMubWFuYWdlZFBvbGljaWVzLnJlbW92YWxzKSB7XG4gICAgICByZXQucHVzaChbXG4gICAgICAgICctJyxcbiAgICAgICAgYXR0LmlkZW50aXR5QXJuLFxuICAgICAgICBhdHQubWFuYWdlZFBvbGljeUFybixcbiAgICAgIF0ubWFwKHMgPT4gY2hhbGsucmVkKHMpKSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSAybmQgY29sdW1uXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV1dKSk7XG5cbiAgICByZXQuc3BsaWNlKDAsIDAsIGhlYWRlcik7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hY2hpbmUtcmVhZGFibGUgdmVyc2lvbiBvZiB0aGUgY2hhbmdlcy5cbiAgICogVGhpcyBpcyBvbmx5IHVzZWQgaW4gdGVzdHMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0pzb24oKTogSWFtQ2hhbmdlc0pzb24ge1xuICAgIHJldHVybiBkZWVwUmVtb3ZlVW5kZWZpbmVkKHtcbiAgICAgIHN0YXRlbWVudEFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5zdGF0ZW1lbnRzLmFkZGl0aW9ucy5tYXAocyA9PiBzLl90b0pzb24oKSkpLFxuICAgICAgc3RhdGVtZW50UmVtb3ZhbHM6IGRyb3BJZkVtcHR5KHRoaXMuc3RhdGVtZW50cy5yZW1vdmFscy5tYXAocyA9PiBzLl90b0pzb24oKSkpLFxuICAgICAgbWFuYWdlZFBvbGljeUFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5tYW5hZ2VkUG9saWNpZXMuYWRkaXRpb25zLm1hcChzID0+IHMuX3RvSnNvbigpKSksXG4gICAgICBtYW5hZ2VkUG9saWN5UmVtb3ZhbHM6IGRyb3BJZkVtcHR5KHRoaXMubWFuYWdlZFBvbGljaWVzLnJlbW92YWxzLm1hcChzID0+IHMuX3RvSnNvbigpKSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eUNoYW5nZTogUHJvcGVydHlDaGFuZ2UpIHtcbiAgICBzd2l0Y2ggKHByb3BlcnR5Q2hhbmdlLnNjcnV0aW55VHlwZSkge1xuICAgICAgY2FzZSBQcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVJZGVudGl0eVBvbGljaWVzOlxuICAgICAgICAvLyBBV1M6OklBTTo6eyBSb2xlIHwgVXNlciB8IEdyb3VwIH0uUG9saWNpZXNcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRzLmFkZE9sZCguLi50aGlzLnJlYWRJZGVudGl0eVBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm9sZFZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZElkZW50aXR5UG9saWNpZXMocHJvcGVydHlDaGFuZ2UubmV3VmFsdWUsIHByb3BlcnR5Q2hhbmdlLnJlc291cmNlTG9naWNhbElkKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVSZXNvdXJjZVBvbGljeTpcbiAgICAgICAgLy8gQW55IFBvbGljeURvY3VtZW50IG9uIGEgcmVzb3VyY2UgKGluY2x1ZGluZyBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQpXG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkUmVzb3VyY2VTdGF0ZW1lbnRzKHByb3BlcnR5Q2hhbmdlLm9sZFZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZFJlc291cmNlU3RhdGVtZW50cyhwcm9wZXJ0eUNoYW5nZS5uZXdWYWx1ZSwgcHJvcGVydHlDaGFuZ2UucmVzb3VyY2VMb2dpY2FsSWQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFByb3BlcnR5U2NydXRpbnlUeXBlLk1hbmFnZWRQb2xpY2llczpcbiAgICAgICAgLy8gSnVzdCBhIGxpc3Qgb2YgbWFuYWdlZCBwb2xpY2llc1xuICAgICAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5hZGRPbGQoLi4udGhpcy5yZWFkTWFuYWdlZFBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm9sZFZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5hZGROZXcoLi4udGhpcy5yZWFkTWFuYWdlZFBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm5ld1ZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRSZXNvdXJjZUNoYW5nZShyZXNvdXJjZUNoYW5nZTogUmVzb3VyY2VDaGFuZ2UpIHtcbiAgICBzd2l0Y2ggKHJlc291cmNlQ2hhbmdlLnNjcnV0aW55VHlwZSkge1xuICAgICAgY2FzZSBSZXNvdXJjZVNjcnV0aW55VHlwZS5JZGVudGl0eVBvbGljeVJlc291cmNlOlxuICAgICAgICAvLyBBV1M6OklBTTo6UG9saWN5XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkSWRlbnRpdHlQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzKSk7XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGROZXcoLi4udGhpcy5yZWFkSWRlbnRpdHlQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSZXNvdXJjZVNjcnV0aW55VHlwZS5SZXNvdXJjZVBvbGljeVJlc291cmNlOlxuICAgICAgICAvLyBBV1M6Oio6OntCdWNrZXQsUXVldWUsVG9waWN9UG9saWN5XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkUmVzb3VyY2VQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzKSk7XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGROZXcoLi4udGhpcy5yZWFkUmVzb3VyY2VQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSZXNvdXJjZVNjcnV0aW55VHlwZS5MYW1iZGFQZXJtaXNzaW9uOlxuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkT2xkKC4uLnRoaXMucmVhZExhbWJkYVN0YXRlbWVudHMocmVzb3VyY2VDaGFuZ2Uub2xkUHJvcGVydGllcykpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZExhbWJkYVN0YXRlbWVudHMocmVzb3VyY2VDaGFuZ2UubmV3UHJvcGVydGllcykpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYSBsaXN0IG9mIHBvbGljaWVzIG9uIGFuIGlkZW50aXR5XG4gICAqL1xuICBwcml2YXRlIHJlYWRJZGVudGl0eVBvbGljaWVzKHBvbGljaWVzOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU3RhdGVtZW50W10ge1xuICAgIGlmIChwb2xpY2llcyA9PT0gdW5kZWZpbmVkIHx8ICFBcnJheS5pc0FycmF5KHBvbGljaWVzKSkgeyByZXR1cm4gW107IH1cblxuICAgIGNvbnN0IGFwcGxpZXNUb1ByaW5jaXBhbCA9ICdBV1M6JHsnICsgbG9naWNhbElkICsgJ30nO1xuXG4gICAgcmV0dXJuIGZsYXRNYXAocG9saWNpZXMsIChwb2xpY3k6IGFueSkgPT4ge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIFBvbGljeSBpdHNlbGYgaXMgbm90IGFuIGludHJpbnNpYywgbGlrZSBhbiBGbjo6SWZcbiAgICAgIGNvbnN0IHVucGFyc2VkU3RhdGVtZW50ID0gcG9saWN5LlBvbGljeURvY3VtZW50Py5TdGF0ZW1lbnRcbiAgICAgICAgPyBwb2xpY3kuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50XG4gICAgICAgIDogcG9saWN5O1xuICAgICAgcmV0dXJuIGRlZmF1bHRQcmluY2lwYWwoYXBwbGllc1RvUHJpbmNpcGFsLCBwYXJzZVN0YXRlbWVudHMocmVuZGVySW50cmluc2ljcyh1bnBhcnNlZFN0YXRlbWVudCkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBJQU06OlBvbGljeSByZXNvdXJjZVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkSWRlbnRpdHlQb2xpY3lSZXNvdXJjZShwcm9wZXJ0aWVzOiBhbnkpOiBTdGF0ZW1lbnRbXSB7XG4gICAgaWYgKHByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gW107IH1cblxuICAgIHByb3BlcnRpZXMgPSByZW5kZXJJbnRyaW5zaWNzKHByb3BlcnRpZXMpO1xuXG4gICAgY29uc3QgcHJpbmNpcGFscyA9IChwcm9wZXJ0aWVzLkdyb3VwcyB8fCBbXSkuY29uY2F0KHByb3BlcnRpZXMuVXNlcnMgfHwgW10pLmNvbmNhdChwcm9wZXJ0aWVzLlJvbGVzIHx8IFtdKTtcbiAgICByZXR1cm4gZmxhdE1hcChwcmluY2lwYWxzLCAocHJpbmNpcGFsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9ICdBV1M6JyArIHByaW5jaXBhbDtcbiAgICAgIHJldHVybiBkZWZhdWx0UHJpbmNpcGFsKHJlZiwgcGFyc2VTdGF0ZW1lbnRzKHByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRSZXNvdXJjZVN0YXRlbWVudHMocG9saWN5OiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU3RhdGVtZW50W10ge1xuICAgIGlmIChwb2xpY3kgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gW107IH1cblxuICAgIGNvbnN0IGFwcGxpZXNUb1Jlc291cmNlID0gJyR7JyArIGxvZ2ljYWxJZCArICcuQXJufSc7XG4gICAgcmV0dXJuIGRlZmF1bHRSZXNvdXJjZShhcHBsaWVzVG9SZXNvdXJjZSwgcGFyc2VTdGF0ZW1lbnRzKHJlbmRlckludHJpbnNpY3MocG9saWN5LlN0YXRlbWVudCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBBV1M6Oio6OntCdWNrZXQsVG9waWMsUXVldWV9cG9saWN5XG4gICAqL1xuICBwcml2YXRlIHJlYWRSZXNvdXJjZVBvbGljeVJlc291cmNlKHByb3BlcnRpZXM6IGFueSk6IFN0YXRlbWVudFtdIHtcbiAgICBpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBbXTsgfVxuXG4gICAgcHJvcGVydGllcyA9IHJlbmRlckludHJpbnNpY3MocHJvcGVydGllcyk7XG5cbiAgICBjb25zdCBwb2xpY3lLZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykuZmlsdGVyKGtleSA9PiBrZXkuaW5kZXhPZignUG9saWN5JykgPiAtMSk7XG5cbiAgICAvLyBGaW5kIHRoZSBrZXkgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZShzKSB0aGlzIHBvbGljeSBhcHBsaWVzIHRvXG4gICAgY29uc3QgcmVzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykuZmlsdGVyKGtleSA9PiAhcG9saWN5S2V5cy5pbmNsdWRlcyhrZXkpICYmICFrZXkuZW5kc1dpdGgoJ05hbWUnKSk7XG4gICAgbGV0IHJlc291cmNlcyA9IHJlc291cmNlS2V5cy5sZW5ndGggPT09IDEgPyBwcm9wZXJ0aWVzW3Jlc291cmNlS2V5c1swXV0gOiBbJz8/PyddO1xuXG4gICAgLy8gRm9yIHNvbWUgcmVzb3VyY2VzLCB0aGlzIGlzIGEgc2luZ2xldG9uIHN0cmluZywgZm9yIHNvbWUgaXQncyBhbiBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShyZXNvdXJjZXMpKSB7XG4gICAgICByZXNvdXJjZXMgPSBbcmVzb3VyY2VzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdE1hcChyZXNvdXJjZXMsIChyZXNvdXJjZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gZGVmYXVsdFJlc291cmNlKHJlc291cmNlLCBwYXJzZVN0YXRlbWVudHMocHJvcGVydGllc1twb2xpY3lLZXlzWzBdXS5TdGF0ZW1lbnQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZE1hbmFnZWRQb2xpY2llcyhwb2xpY3lBcm5zOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogTWFuYWdlZFBvbGljeUF0dGFjaG1lbnRbXSB7XG4gICAgaWYgKCFwb2xpY3lBcm5zKSB7IHJldHVybiBbXTsgfVxuXG4gICAgY29uc3QgcmVwID0gJyR7JyArIGxvZ2ljYWxJZCArICd9JztcbiAgICByZXR1cm4gTWFuYWdlZFBvbGljeUF0dGFjaG1lbnQucGFyc2VNYW5hZ2VkUG9saWNpZXMocmVwLCByZW5kZXJJbnRyaW5zaWNzKHBvbGljeUFybnMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZExhbWJkYVN0YXRlbWVudHMocHJvcGVydGllcz86IFByb3BlcnR5TWFwKTogU3RhdGVtZW50W10ge1xuICAgIGlmICghcHJvcGVydGllcykgeyByZXR1cm4gW107IH1cblxuICAgIHJldHVybiBbcGFyc2VMYW1iZGFQZXJtaXNzaW9uKHJlbmRlckludHJpbnNpY3MocHJvcGVydGllcykpXTtcbiAgfVxufVxuXG4vKipcbiAqIFNldCBhbiB1bmRlZmluZWQgb3Igd2lsZGNhcmRlZCBwcmluY2lwYWwgb24gdGhlc2Ugc3RhdGVtZW50c1xuICovXG5mdW5jdGlvbiBkZWZhdWx0UHJpbmNpcGFsKHByaW5jaXBhbDogc3RyaW5nLCBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSkge1xuICBzdGF0ZW1lbnRzLmZvckVhY2gocyA9PiBzLnByaW5jaXBhbHMucmVwbGFjZUVtcHR5KHByaW5jaXBhbCkpO1xuICBzdGF0ZW1lbnRzLmZvckVhY2gocyA9PiBzLnByaW5jaXBhbHMucmVwbGFjZVN0YXIocHJpbmNpcGFsKSk7XG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG4vKipcbiAqIFNldCBhbiB1bmRlZmluZWQgb3Igd2lsZGNhcmRlZCByZXNvdXJjZSBvbiB0aGVzZSBzdGF0ZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRSZXNvdXJjZShyZXNvdXJjZTogc3RyaW5nLCBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSkge1xuICBzdGF0ZW1lbnRzLmZvckVhY2gocyA9PiBzLnJlc291cmNlcy5yZXBsYWNlRW1wdHkocmVzb3VyY2UpKTtcbiAgc3RhdGVtZW50cy5mb3JFYWNoKHMgPT4gcy5yZXNvdXJjZXMucmVwbGFjZVN0YXIocmVzb3VyY2UpKTtcbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWFtQ2hhbmdlc0pzb24ge1xuICBzdGF0ZW1lbnRBZGRpdGlvbnM/OiBBcnJheTxNYXliZVBhcnNlZDxTdGF0ZW1lbnRKc29uPj47XG4gIHN0YXRlbWVudFJlbW92YWxzPzogQXJyYXk8TWF5YmVQYXJzZWQ8U3RhdGVtZW50SnNvbj4+O1xuICBtYW5hZ2VkUG9saWN5QWRkaXRpb25zPzogQXJyYXk8TWF5YmVQYXJzZWQ8TWFuYWdlZFBvbGljeUpzb24+PjtcbiAgbWFuYWdlZFBvbGljeVJlbW92YWxzPzogQXJyYXk8TWF5YmVQYXJzZWQ8TWFuYWdlZFBvbGljeUpzb24+Pjtcbn1cbiJdfQ==
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtLWNoYW5nZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpYW0tY2hhbmdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvRUFBeUY7QUFDekYsK0JBQStCO0FBQy9CLHFEQUE4RTtBQUM5RSwyQ0FBK0Y7QUFHL0YsMENBQWlEO0FBQ2pELDREQUF3RDtBQUN4RCxrQ0FBb0Y7QUFPcEY7O0dBRUc7QUFDSCxNQUFhLFVBQVU7SUFnQnJCLFlBQVksS0FBc0I7UUFIbEIsZUFBVSxHQUFHLElBQUksNkJBQWtCLEVBQWEsQ0FBQztRQUNqRCxvQkFBZSxHQUFHLElBQUksNkJBQWtCLEVBQTJCLENBQUM7UUFHbEYsS0FBSyxNQUFNLGNBQWMsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxLQUFLLE1BQU0sY0FBYyxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7SUFDdkUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztlQUMzRCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxD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QUFFLFVBQXVCO0lBQ2xFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzlELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWdCLEVBQUUsVUFBdUI7SUFDaEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDM0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3BlcnR5U2NydXRpbnlUeXBlLCBSZXNvdXJjZVNjcnV0aW55VHlwZSB9IGZyb20gJ0Bhd3MtY2RrL3NlcnZpY2Utc3BlYy10eXBlcyc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBNYW5hZ2VkUG9saWN5QXR0YWNobWVudCwgTWFuYWdlZFBvbGljeUpzb24gfSBmcm9tICcuL21hbmFnZWQtcG9saWN5JztcbmltcG9ydCB7IHBhcnNlTGFtYmRhUGVybWlzc2lvbiwgcGFyc2VTdGF0ZW1lbnRzLCBTdGF0ZW1lbnQsIFN0YXRlbWVudEpzb24gfSBmcm9tICcuL3N0YXRlbWVudCc7XG5pbXBvcnQgeyBNYXliZVBhcnNlZCB9IGZyb20gJy4uL2RpZmYvbWF5YmUtcGFyc2VkJztcbmltcG9ydCB7IFByb3BlcnR5Q2hhbmdlLCBQcm9wZXJ0eU1hcCwgUmVzb3VyY2VDaGFuZ2UgfSBmcm9tICcuLi9kaWZmL3R5cGVzJztcbmltcG9ydCB7IERpZmZhYmxlQ29sbGVjdGlvbiB9IGZyb20gJy4uL2RpZmZhYmxlJztcbmltcG9ydCB7IHJlbmRlckludHJpbnNpY3MgfSBmcm9tICcuLi9yZW5kZXItaW50cmluc2ljcyc7XG5pbXBvcnQgeyBkZWVwUmVtb3ZlVW5kZWZpbmVkLCBkcm9wSWZFbXB0eSwgZmxhdE1hcCwgbWFrZUNvbXBhcmF0b3IgfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBJYW1DaGFuZ2VzUHJvcHMge1xuICBwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5Q2hhbmdlW107XG4gIHJlc291cmNlQ2hhbmdlczogUmVzb3VyY2VDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBDaGFuZ2VzIHRvIElBTSBzdGF0ZW1lbnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBJYW1DaGFuZ2VzIHtcbiAgcHVibGljIHN0YXRpYyBJYW1Qcm9wZXJ0eVNjcnV0aW5pZXMgPSBbXG4gICAgUHJvcGVydHlTY3J1dGlueVR5cGUuSW5saW5lSWRlbnRpdHlQb2xpY2llcyxcbiAgICBQcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVSZXNvdXJjZVBvbGljeSxcbiAgICBQcm9wZXJ0eVNjcnV0aW55VHlwZS5NYW5hZ2VkUG9saWNpZXMsXG4gIF07XG5cbiAgcHVibGljIHN0YXRpYyBJYW1SZXNvdXJjZVNjcnV0aW5pZXMgPSBbXG4gICAgUmVzb3VyY2VTY3J1dGlueVR5cGUuUmVzb3VyY2VQb2xpY3lSZXNvdXJjZSxcbiAgICBSZXNvdXJjZVNjcnV0aW55VHlwZS5JZGVudGl0eVBvbGljeVJlc291cmNlLFxuICAgIFJlc291cmNlU2NydXRpbnlUeXBlLkxhbWJkYVBlcm1pc3Npb24sXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXRlbWVudHMgPSBuZXcgRGlmZmFibGVDb2xsZWN0aW9uPFN0YXRlbWVudD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IG1hbmFnZWRQb2xpY2llcyA9IG5ldyBEaWZmYWJsZUNvbGxlY3Rpb248TWFuYWdlZFBvbGljeUF0dGFjaG1lbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElhbUNoYW5nZXNQcm9wcykge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlDaGFuZ2Ugb2YgcHJvcHMucHJvcGVydHlDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnJlYWRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eUNoYW5nZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVzb3VyY2VDaGFuZ2Ugb2YgcHJvcHMucmVzb3VyY2VDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnJlYWRSZXNvdXJjZUNoYW5nZShyZXNvdXJjZUNoYW5nZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZW1lbnRzLmNhbGN1bGF0ZURpZmYoKTtcbiAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5jYWxjdWxhdGVEaWZmKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0NoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50cy5oYXNDaGFuZ2VzIHx8IHRoaXMubWFuYWdlZFBvbGljaWVzLmhhc0NoYW5nZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGNoYW5nZXMgaW5jbHVkZSBicm9hZGVuZWQgcGVybWlzc2lvbnNcbiAgICpcbiAgICogUGVybWlzc2lvbnMgYXJlIGJyb2FkZW5lZCBpZiBwb3NpdGl2ZSBzdGF0ZW1lbnRzIGFyZSBhZGRlZCBvclxuICAgKiBuZWdhdGl2ZSBzdGF0ZW1lbnRzIGFyZSByZW1vdmVkLCBvciBpZiBtYW5hZ2VkIHBvbGljaWVzIGFyZSBhZGRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGVybWlzc2lvbnNCcm9hZGVuZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50cy5hZGRpdGlvbnMuc29tZShzID0+ICFzLmlzTmVnYXRpdmVTdGF0ZW1lbnQpXG4gICAgICAgIHx8IHRoaXMuc3RhdGVtZW50cy5yZW1vdmFscy5zb21lKHMgPT4gcy5pc05lZ2F0aXZlU3RhdGVtZW50KVxuICAgICAgICB8fCB0aGlzLm1hbmFnZWRQb2xpY2llcy5oYXNBZGRpdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3VtbWFyeSB0YWJsZSBvZiBjaGFuZ2VzXG4gICAqL1xuICBwdWJsaWMgc3VtbWFyaXplU3RhdGVtZW50cygpOiBzdHJpbmdbXVtdIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdW10gPSBbXTtcblxuICAgIGNvbnN0IGhlYWRlciA9IFsnJywgJ1Jlc291cmNlJywgJ0VmZmVjdCcsICdBY3Rpb24nLCAnUHJpbmNpcGFsJywgJ0NvbmRpdGlvbiddO1xuXG4gICAgLy8gRmlyc3QgZ2VuZXJhdGUgYWxsIGxpbmVzLCB0aGVuIHNvcnQgb24gUmVzb3VyY2Ugc28gdGhhdCBzaW1pbGFyIHJlc291cmNlcyBhcmUgdG9nZXRoZXJcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiB0aGlzLnN0YXRlbWVudHMuYWRkaXRpb25zKSB7XG4gICAgICBjb25zdCByZW5kZXJlZFN0YXRlbWVudCA9IHN0YXRlbWVudC5yZW5kZXIoKTtcbiAgICAgIHJldC5wdXNoKFtcbiAgICAgICAgJysnLFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5yZXNvdXJjZSxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuZWZmZWN0LFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5hY3Rpb24sXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LnByaW5jaXBhbCxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuY29uZGl0aW9uLFxuICAgICAgXS5tYXAocyA9PiBjaGFsay5ncmVlbihzKSkpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiB0aGlzLnN0YXRlbWVudHMucmVtb3ZhbHMpIHtcbiAgICAgIGNvbnN0IHJlbmRlcmVkU3RhdGVtZW50ID0gc3RhdGVtZW50LnJlbmRlcigpO1xuICAgICAgcmV0LnB1c2goW1xuICAgICAgICBjaGFsay5yZWQoJy0nKSxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQucmVzb3VyY2UsXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LmVmZmVjdCxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuYWN0aW9uLFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5wcmluY2lwYWwsXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LmNvbmRpdGlvbixcbiAgICAgIF0ubWFwKHMgPT4gY2hhbGsucmVkKHMpKSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSAybmQgY29sdW1uXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV1dKSk7XG5cbiAgICByZXQuc3BsaWNlKDAsIDAsIGhlYWRlcik7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHN1bW1hcml6ZU1hbmFnZWRQb2xpY2llcygpOiBzdHJpbmdbXVtdIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdW10gPSBbXTtcbiAgICBjb25zdCBoZWFkZXIgPSBbJycsICdSZXNvdXJjZScsICdNYW5hZ2VkIFBvbGljeSBBUk4nXTtcblxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMubWFuYWdlZFBvbGljaWVzLmFkZGl0aW9ucykge1xuICAgICAgcmV0LnB1c2goW1xuICAgICAgICAnKycsXG4gICAgICAgIGF0dC5pZGVudGl0eUFybixcbiAgICAgICAgYXR0Lm1hbmFnZWRQb2xpY3lBcm4sXG4gICAgICBdLm1hcChzID0+IGNoYWxrLmdyZWVuKHMpKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMubWFuYWdlZFBvbGljaWVzLnJlbW92YWxzKSB7XG4gICAgICByZXQucHVzaChbXG4gICAgICAgICctJyxcbiAgICAgICAgYXR0LmlkZW50aXR5QXJuLFxuICAgICAgICBhdHQubWFuYWdlZFBvbGljeUFybixcbiAgICAgIF0ubWFwKHMgPT4gY2hhbGsucmVkKHMpKSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSAybmQgY29sdW1uXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV1dKSk7XG5cbiAgICByZXQuc3BsaWNlKDAsIDAsIGhlYWRlcik7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hY2hpbmUtcmVhZGFibGUgdmVyc2lvbiBvZiB0aGUgY2hhbmdlcy5cbiAgICogVGhpcyBpcyBvbmx5IHVzZWQgaW4gdGVzdHMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0pzb24oKTogSWFtQ2hhbmdlc0pzb24ge1xuICAgIHJldHVybiBkZWVwUmVtb3ZlVW5kZWZpbmVkKHtcbiAgICAgIHN0YXRlbWVudEFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5zdGF0ZW1lbnRzLmFkZGl0aW9ucy5tYXAocyA9PiBzLl90b0pzb24oKSkpLFxuICAgICAgc3RhdGVtZW50UmVtb3ZhbHM6IGRyb3BJZkVtcHR5KHRoaXMuc3RhdGVtZW50cy5yZW1vdmFscy5tYXAocyA9PiBzLl90b0pzb24oKSkpLFxuICAgICAgbWFuYWdlZFBvbGljeUFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5tYW5hZ2VkUG9saWNpZXMuYWRkaXRpb25zLm1hcChzID0+IHMuX3RvSnNvbigpKSksXG4gICAgICBtYW5hZ2VkUG9saWN5UmVtb3ZhbHM6IGRyb3BJZkVtcHR5KHRoaXMubWFuYWdlZFBvbGljaWVzLnJlbW92YWxzLm1hcChzID0+IHMuX3RvSnNvbigpKSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eUNoYW5nZTogUHJvcGVydHlDaGFuZ2UpIHtcbiAgICBzd2l0Y2ggKHByb3BlcnR5Q2hhbmdlLnNjcnV0aW55VHlwZSkge1xuICAgICAgY2FzZSBQcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVJZGVudGl0eVBvbGljaWVzOlxuICAgICAgICAvLyBBV1M6OklBTTo6eyBSb2xlIHwgVXNlciB8IEdyb3VwIH0uUG9saWNpZXNcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRzLmFkZE9sZCguLi50aGlzLnJlYWRJZGVudGl0eVBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm9sZFZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZElkZW50aXR5UG9saWNpZXMocHJvcGVydHlDaGFuZ2UubmV3VmFsdWUsIHByb3BlcnR5Q2hhbmdlLnJlc291cmNlTG9naWNhbElkKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVSZXNvdXJjZVBvbGljeTpcbiAgICAgICAgLy8gQW55IFBvbGljeURvY3VtZW50IG9uIGEgcmVzb3VyY2UgKGluY2x1ZGluZyBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQpXG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkUmVzb3VyY2VTdGF0ZW1lbnRzKHByb3BlcnR5Q2hhbmdlLm9sZFZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZFJlc291cmNlU3RhdGVtZW50cyhwcm9wZXJ0eUNoYW5nZS5uZXdWYWx1ZSwgcHJvcGVydHlDaGFuZ2UucmVzb3VyY2VMb2dpY2FsSWQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFByb3BlcnR5U2NydXRpbnlUeXBlLk1hbmFnZWRQb2xpY2llczpcbiAgICAgICAgLy8gSnVzdCBhIGxpc3Qgb2YgbWFuYWdlZCBwb2xpY2llc1xuICAgICAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5hZGRPbGQoLi4udGhpcy5yZWFkTWFuYWdlZFBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm9sZFZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5hZGROZXcoLi4udGhpcy5yZWFkTWFuYWdlZFBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm5ld1ZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRSZXNvdXJjZUNoYW5nZShyZXNvdXJjZUNoYW5nZTogUmVzb3VyY2VDaGFuZ2UpIHtcbiAgICBzd2l0Y2ggKHJlc291cmNlQ2hhbmdlLnNjcnV0aW55VHlwZSkge1xuICAgICAgY2FzZSBSZXNvdXJjZVNjcnV0aW55VHlwZS5JZGVudGl0eVBvbGljeVJlc291cmNlOlxuICAgICAgICAvLyBBV1M6OklBTTo6UG9saWN5XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkSWRlbnRpdHlQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzKSk7XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGROZXcoLi4udGhpcy5yZWFkSWRlbnRpdHlQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSZXNvdXJjZVNjcnV0aW55VHlwZS5SZXNvdXJjZVBvbGljeVJlc291cmNlOlxuICAgICAgICAvLyBBV1M6Oio6OntCdWNrZXQsUXVldWUsVG9waWN9UG9saWN5XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkUmVzb3VyY2VQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzKSk7XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGROZXcoLi4udGhpcy5yZWFkUmVzb3VyY2VQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSZXNvdXJjZVNjcnV0aW55VHlwZS5MYW1iZGFQZXJtaXNzaW9uOlxuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkT2xkKC4uLnRoaXMucmVhZExhbWJkYVN0YXRlbWVudHMocmVzb3VyY2VDaGFuZ2Uub2xkUHJvcGVydGllcykpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZExhbWJkYVN0YXRlbWVudHMocmVzb3VyY2VDaGFuZ2UubmV3UHJvcGVydGllcykpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYSBsaXN0IG9mIHBvbGljaWVzIG9uIGFuIGlkZW50aXR5XG4gICAqL1xuICBwcml2YXRlIHJlYWRJZGVudGl0eVBvbGljaWVzKHBvbGljaWVzOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU3RhdGVtZW50W10ge1xuICAgIGlmIChwb2xpY2llcyA9PT0gdW5kZWZpbmVkIHx8ICFBcnJheS5pc0FycmF5KHBvbGljaWVzKSkgeyByZXR1cm4gW107IH1cblxuICAgIGNvbnN0IGFwcGxpZXNUb1ByaW5jaXBhbCA9ICdBV1M6JHsnICsgbG9naWNhbElkICsgJ30nO1xuXG4gICAgcmV0dXJuIGZsYXRNYXAocG9saWNpZXMsIChwb2xpY3k6IGFueSkgPT4ge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIFBvbGljeSBpdHNlbGYgaXMgbm90IGFuIGludHJpbnNpYywgbGlrZSBhbiBGbjo6SWZcbiAgICAgIGNvbnN0IHVucGFyc2VkU3RhdGVtZW50ID0gcG9saWN5LlBvbGljeURvY3VtZW50Py5TdGF0ZW1lbnRcbiAgICAgICAgPyBwb2xpY3kuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50XG4gICAgICAgIDogcG9saWN5O1xuICAgICAgcmV0dXJuIGRlZmF1bHRQcmluY2lwYWwoYXBwbGllc1RvUHJpbmNpcGFsLCBwYXJzZVN0YXRlbWVudHMocmVuZGVySW50cmluc2ljcyh1bnBhcnNlZFN0YXRlbWVudCkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBJQU06OlBvbGljeSByZXNvdXJjZVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkSWRlbnRpdHlQb2xpY3lSZXNvdXJjZShwcm9wZXJ0aWVzOiBhbnkpOiBTdGF0ZW1lbnRbXSB7XG4gICAgaWYgKHByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gW107IH1cblxuICAgIHByb3BlcnRpZXMgPSByZW5kZXJJbnRyaW5zaWNzKHByb3BlcnRpZXMpO1xuXG4gICAgY29uc3QgcHJpbmNpcGFscyA9IChwcm9wZXJ0aWVzLkdyb3VwcyB8fCBbXSkuY29uY2F0KHByb3BlcnRpZXMuVXNlcnMgfHwgW10pLmNvbmNhdChwcm9wZXJ0aWVzLlJvbGVzIHx8IFtdKTtcbiAgICByZXR1cm4gZmxhdE1hcChwcmluY2lwYWxzLCAocHJpbmNpcGFsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9ICdBV1M6JyArIHByaW5jaXBhbDtcbiAgICAgIHJldHVybiBkZWZhdWx0UHJpbmNpcGFsKHJlZiwgcGFyc2VTdGF0ZW1lbnRzKHByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRSZXNvdXJjZVN0YXRlbWVudHMocG9saWN5OiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU3RhdGVtZW50W10ge1xuICAgIGlmIChwb2xpY3kgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gW107IH1cblxuICAgIGNvbnN0IGFwcGxpZXNUb1Jlc291cmNlID0gJyR7JyArIGxvZ2ljYWxJZCArICcuQXJufSc7XG4gICAgcmV0dXJuIGRlZmF1bHRSZXNvdXJjZShhcHBsaWVzVG9SZXNvdXJjZSwgcGFyc2VTdGF0ZW1lbnRzKHJlbmRlckludHJpbnNpY3MocG9saWN5LlN0YXRlbWVudCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBBV1M6Oio6OntCdWNrZXQsVG9waWMsUXVldWV9cG9saWN5XG4gICAqL1xuICBwcml2YXRlIHJlYWRSZXNvdXJjZVBvbGljeVJlc291cmNlKHByb3BlcnRpZXM6IGFueSk6IFN0YXRlbWVudFtdIHtcbiAgICBpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBbXTsgfVxuXG4gICAgcHJvcGVydGllcyA9IHJlbmRlckludHJpbnNpY3MocHJvcGVydGllcyk7XG5cbiAgICBjb25zdCBwb2xpY3lLZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykuZmlsdGVyKGtleSA9PiBrZXkuaW5kZXhPZignUG9saWN5JykgPiAtMSk7XG5cbiAgICAvLyBGaW5kIHRoZSBrZXkgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZShzKSB0aGlzIHBvbGljeSBhcHBsaWVzIHRvXG4gICAgY29uc3QgcmVzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykuZmlsdGVyKGtleSA9PiAhcG9saWN5S2V5cy5pbmNsdWRlcyhrZXkpICYmICFrZXkuZW5kc1dpdGgoJ05hbWUnKSk7XG4gICAgbGV0IHJlc291cmNlcyA9IHJlc291cmNlS2V5cy5sZW5ndGggPT09IDEgPyBwcm9wZXJ0aWVzW3Jlc291cmNlS2V5c1swXV0gOiBbJz8/PyddO1xuXG4gICAgLy8gRm9yIHNvbWUgcmVzb3VyY2VzLCB0aGlzIGlzIGEgc2luZ2xldG9uIHN0cmluZywgZm9yIHNvbWUgaXQncyBhbiBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShyZXNvdXJjZXMpKSB7XG4gICAgICByZXNvdXJjZXMgPSBbcmVzb3VyY2VzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdE1hcChyZXNvdXJjZXMsIChyZXNvdXJjZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gZGVmYXVsdFJlc291cmNlKHJlc291cmNlLCBwYXJzZVN0YXRlbWVudHMocHJvcGVydGllc1twb2xpY3lLZXlzWzBdXS5TdGF0ZW1lbnQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZE1hbmFnZWRQb2xpY2llcyhwb2xpY3lBcm5zOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogTWFuYWdlZFBvbGljeUF0dGFjaG1lbnRbXSB7XG4gICAgaWYgKCFwb2xpY3lBcm5zKSB7IHJldHVybiBbXTsgfVxuXG4gICAgY29uc3QgcmVwID0gJyR7JyArIGxvZ2ljYWxJZCArICd9JztcbiAgICByZXR1cm4gTWFuYWdlZFBvbGljeUF0dGFjaG1lbnQucGFyc2VNYW5hZ2VkUG9saWNpZXMocmVwLCByZW5kZXJJbnRyaW5zaWNzKHBvbGljeUFybnMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZExhbWJkYVN0YXRlbWVudHMocHJvcGVydGllcz86IFByb3BlcnR5TWFwKTogU3RhdGVtZW50W10ge1xuICAgIGlmICghcHJvcGVydGllcykgeyByZXR1cm4gW107IH1cblxuICAgIHJldHVybiBbcGFyc2VMYW1iZGFQZXJtaXNzaW9uKHJlbmRlckludHJpbnNpY3MocHJvcGVydGllcykpXTtcbiAgfVxufVxuXG4vKipcbiAqIFNldCBhbiB1bmRlZmluZWQgb3Igd2lsZGNhcmRlZCBwcmluY2lwYWwgb24gdGhlc2Ugc3RhdGVtZW50c1xuICovXG5mdW5jdGlvbiBkZWZhdWx0UHJpbmNpcGFsKHByaW5jaXBhbDogc3RyaW5nLCBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSkge1xuICBzdGF0ZW1lbnRzLmZvckVhY2gocyA9PiBzLnByaW5jaXBhbHMucmVwbGFjZUVtcHR5KHByaW5jaXBhbCkpO1xuICBzdGF0ZW1lbnRzLmZvckVhY2gocyA9PiBzLnByaW5jaXBhbHMucmVwbGFjZVN0YXIocHJpbmNpcGFsKSk7XG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG4vKipcbiAqIFNldCBhbiB1bmRlZmluZWQgb3Igd2lsZGNhcmRlZCByZXNvdXJjZSBvbiB0aGVzZSBzdGF0ZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRSZXNvdXJjZShyZXNvdXJjZTogc3RyaW5nLCBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSkge1xuICBzdGF0ZW1lbnRzLmZvckVhY2gocyA9PiBzLnJlc291cmNlcy5yZXBsYWNlRW1wdHkocmVzb3VyY2UpKTtcbiAgc3RhdGVtZW50cy5mb3JFYWNoKHMgPT4gcy5yZXNvdXJjZXMucmVwbGFjZVN0YXIocmVzb3VyY2UpKTtcbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWFtQ2hhbmdlc0pzb24ge1xuICBzdGF0ZW1lbnRBZGRpdGlvbnM/OiBBcnJheTxNYXliZVBhcnNlZDxTdGF0ZW1lbnRKc29uPj47XG4gIHN0YXRlbWVudFJlbW92YWxzPzogQXJyYXk8TWF5YmVQYXJzZWQ8U3RhdGVtZW50SnNvbj4+O1xuICBtYW5hZ2VkUG9saWN5QWRkaXRpb25zPzogQXJyYXk8TWF5YmVQYXJzZWQ8TWFuYWdlZFBvbGljeUpzb24+PjtcbiAgbWFuYWdlZFBvbGljeVJlbW92YWxzPzogQXJyYXk8TWF5YmVQYXJzZWQ8TWFuYWdlZFBvbGljeUpzb24+Pjtcbn1cbiJdfQ==
@@ -45,7 +45,7 @@ class Statement {
45
45
  resource: this.serializedIntrinsic,
46
46
  effect: '',
47
47
  action: '',
48
- principal: this.principals.render(),
48
+ principal: this.principals.render(), // these will be replaced by the call to replaceEmpty() from IamChanges
49
49
  condition: '',
50
50
  }
51
51
  : {
@@ -267,4 +267,4 @@ function renderCondition(condition) {
267
267
  return lines.slice(1, lines.length - 1).map(s => s.slice(2)).join('\n');
268
268
  }
269
269
  exports.renderCondition = renderCondition;
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhdGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUE0RTtBQUM1RSxrQ0FBOEM7QUFFOUMseUVBQXlFO0FBQ3pFLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUU3QyxNQUFhLFNBQVM7SUFpQ3BCLFlBQVksU0FBOEI7UUFDeEMsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUM7U0FDdEM7YUFBTTtZQUNMLElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFP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QUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBaEJELDBDQWdCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1heWJlUGFyc2VkLCBta1BhcnNlZCwgbWtVbnBhcnNlYWJsZSB9IGZyb20gJy4uL2RpZmYvbWF5YmUtcGFyc2VkJztcbmltcG9ydCB7IGRlZXBSZW1vdmVVbmRlZmluZWQgfSBmcm9tICcuLi91dGlsJztcblxuLy8gbmFtZXNwYWNlIG9iamVjdCBpbXBvcnRzIHdvbid0IHdvcmsgaW4gdGhlIGJ1bmRsZSBmb3IgZnVuY3Rpb24gZXhwb3J0c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IGRlZXBFcXVhbCA9IHJlcXVpcmUoJ2Zhc3QtZGVlcC1lcXVhbCcpO1xuXG5leHBvcnQgY2xhc3MgU3RhdGVtZW50IHtcbiAgLyoqXG4gICAqIFN0YXRlbWVudCBJRFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTdGF0ZW1lbnQgZWZmZWN0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWZmZWN0OiBFZmZlY3Q7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlczogVGFyZ2V0cztcblxuICAvKipcbiAgICogUHJpbmNpcGFsc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByaW5jaXBhbHM6IFRhcmdldHM7XG5cbiAgLyoqXG4gICAqIEFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhY3Rpb25zOiBUYXJnZXRzO1xuXG4gIC8qKlxuICAgKiBPYmplY3Qgd2l0aCBjb25kaXRpb25zXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29uZGl0aW9uPzogYW55O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VyaWFsaXplZEludHJpbnNpYzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHN0YXRlbWVudDogVW5rbm93bk1hcCB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2Ygc3RhdGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5zaWQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmVmZmVjdCA9IEVmZmVjdC5Vbmtub3duO1xuICAgICAgdGhpcy5yZXNvdXJjZXMgPSBuZXcgVGFyZ2V0cyh7fSwgJycsICcnKTtcbiAgICAgIHRoaXMuYWN0aW9ucyA9IG5ldyBUYXJnZXRzKHt9LCAnJywgJycpO1xuICAgICAgdGhpcy5wcmluY2lwYWxzID0gbmV3IFRhcmdldHMoe30sICcnLCAnJyk7XG4gICAgICB0aGlzLmNvbmRpdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2VyaWFsaXplZEludHJpbnNpYyA9IHN0YXRlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaWQgPSBleHBlY3RTdHJpbmcoc3RhdGVtZW50LlNpZCk7XG4gICAgICB0aGlzLmVmZmVjdCA9IGV4cGVjdEVmZmVjdChzdGF0ZW1lbnQuRWZmZWN0KTtcbiAgICAgIHRoaXMucmVzb3VyY2VzID0gbmV3IFRhcmdldHMoc3RhdGVtZW50LCAnUmVzb3VyY2UnLCAnTm90UmVzb3VyY2UnKTtcbiAgICAgIHRoaXMuYWN0aW9ucyA9IG5ldyBUYXJnZXRzKHN0YXRlbWVudCwgJ0FjdGlvbicsICdOb3RBY3Rpb24nKTtcbiAgICAgIHRoaXMucHJpbmNpcGFscyA9IG5ldyBUYXJnZXRzKHN0YXRlbWVudCwgJ1ByaW5jaXBhbCcsICdOb3RQcmluY2lwYWwnKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uID0gc3RhdGVtZW50LkNvbmRpdGlvbjtcbiAgICAgIHRoaXMuc2VyaWFsaXplZEludHJpbnNpYyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHN0YXRlbWVudCBpcyBlcXVhbCB0byB0aGUgb3RoZXIgc3RhdGVtZW50XG4gICAqL1xuICBwdWJsaWMgZXF1YWwob3RoZXI6IFN0YXRlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5zaWQgPT09IG90aGVyLnNpZFxuICAgICAgJiYgdGhpcy5lZmZlY3QgPT09IG90aGVyLmVmZmVjdFxuICAgICAgJiYgdGhpcy5zZXJpYWxpemVkSW50cmluc2ljID09PSBvdGhlci5zZXJpYWxpemVkSW50cmluc2ljXG4gICAgICAmJiB0aGlzLnJlc291cmNlcy5lcXVhbChvdGhlci5yZXNvdXJjZXMpXG4gICAgICAmJiB0aGlzLmFjdGlvbnMuZXF1YWwob3RoZXIuYWN0aW9ucylcbiAgICAgICYmIHRoaXMucHJpbmNpcGFscy5lcXVhbChvdGhlci5wcmluY2lwYWxzKVxuICAgICAgJiYgZGVlcEVxdWFsKHRoaXMuY29uZGl0aW9uLCBvdGhlci5jb25kaXRpb24pKTtcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIoKTogUmVuZGVyZWRTdGF0ZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZWRJbnRyaW5zaWNcbiAgICAgID8ge1xuICAgICAgICByZXNvdXJjZTogdGhpcy5zZXJpYWxpemVkSW50cmluc2ljLFxuICAgICAgICBlZmZlY3Q6ICcnLFxuICAgICAgICBhY3Rpb246ICcnLFxuICAgICAgICBwcmluY2lwYWw6IHRoaXMucHJpbmNpcGFscy5yZW5kZXIoKSwgLy8gdGhlc2Ugd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgY2FsbCB0byByZXBsYWNlRW1wdHkoKSBmcm9tIElhbUNoYW5nZXNcbiAgICAgICAgY29uZGl0aW9uOiAnJyxcbiAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICByZXNvdXJjZTogdGhpcy5yZXNvdXJjZXMucmVuZGVyKCksXG4gICAgICAgIGVmZmVjdDogdGhpcy5lZmZlY3QsXG4gICAgICAgIGFjdGlvbjogdGhpcy5hY3Rpb25zLnJlbmRlcigpLFxuICAgICAgICBwcmluY2lwYWw6IHRoaXMucHJpbmNpcGFscy5yZW5kZXIoKSxcbiAgICAgICAgY29uZGl0aW9uOiByZW5kZXJDb25kaXRpb24odGhpcy5jb25kaXRpb24pLFxuICAgICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtYWNoaW5lLXJlYWRhYmxlIHZlcnNpb24gb2YgdGhlIGNoYW5nZXMuXG4gICAqIFRoaXMgaXMgb25seSB1c2VkIGluIHRlc3RzLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfdG9Kc29uKCk6IE1heWJlUGFyc2VkPFN0YXRlbWVudEpzb24+IHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVkSW50cmluc2ljXG4gICAgICA/IG1rVW5wYXJzZWFibGUodGhpcy5zZXJpYWxpemVkSW50cmluc2ljKVxuICAgICAgOiBta1BhcnNlZChkZWVwUmVtb3ZlVW5kZWZpbmVkKHtcbiAgICAgICAgc2lkOiB0aGlzLnNpZCxcbiAgICAgICAgZWZmZWN0OiB0aGlzLmVmZmVjdCxcbiAgICAgICAgcmVzb3VyY2VzOiB0aGlzLnJlc291cmNlcy5fdG9Kc29uKCksXG4gICAgICAgIHByaW5jaXBhbHM6IHRoaXMucHJpbmNpcGFscy5fdG9Kc29uKCksXG4gICAgICAgIGFjdGlvbnM6IHRoaXMuYWN0aW9ucy5fdG9Kc29uKCksXG4gICAgICAgIGNvbmRpdGlvbjogdGhpcy5jb25kaXRpb24sXG4gICAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGlzIGEgbmVnYXRpdmUgc3RhdGVtZW50XG4gICAqXG4gICAqIEEgc3RhdGVtZW50IGlzIG5lZ2F0aXZlIGlmIGFueSBvZiBpdHMgdGFyZ2V0cyBhcmUgbmVnYXRpdmUsIGludmVydGVkXG4gICAqIGlmIHRoZSBFZmZlY3QgaXMgRGVueS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNOZWdhdGl2ZVN0YXRlbWVudCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBub3RUYXJnZXQgPSB0aGlzLmFjdGlvbnMubm90IHx8IHRoaXMucHJpbmNpcGFscy5ub3QgfHwgdGhpcy5yZXNvdXJjZXMubm90O1xuICAgIHJldHVybiB0aGlzLmVmZmVjdCA9PT0gRWZmZWN0LkFsbG93ID8gbm90VGFyZ2V0IDogIW5vdFRhcmdldDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlcmVkU3RhdGVtZW50IHtcbiAgcmVhZG9ubHkgcmVzb3VyY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgZWZmZWN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFjdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBwcmluY2lwYWw6IHN0cmluZztcbiAgcmVhZG9ubHkgY29uZGl0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGVtZW50SnNvbiB7XG4gIHNpZD86IHN0cmluZztcbiAgZWZmZWN0OiBzdHJpbmc7XG4gIHJlc291cmNlczogVGFyZ2V0c0pzb247XG4gIGFjdGlvbnM6IFRhcmdldHNKc29uO1xuICBwcmluY2lwYWxzOiBUYXJnZXRzSnNvbjtcbiAgY29uZGl0aW9uPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldHNKc29uIHtcbiAgbm90OiBib29sZWFuO1xuICB2YWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgbGlzdCBvZiBzdGF0ZW1lbnRzIGZyb20gdW5kZWZpbmVkLCBhIFN0YXRlbWVudCwgb3IgYSBsaXN0IG9mIHN0YXRlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50cyh4OiBhbnkpOiBTdGF0ZW1lbnRbXSB7XG4gIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IFtdOyB9XG4gIGlmICghQXJyYXkuaXNBcnJheSh4KSkgeyB4ID0gW3hdOyB9XG4gIHJldHVybiB4Lm1hcCgoczogYW55KSA9PiBuZXcgU3RhdGVtZW50KHMpKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIFN0YXRlbWVudCBmcm9tIGEgTGFtYmRhOjpQZXJtaXNzaW9uIG9iamVjdFxuICpcbiAqIFRoaXMgaXMgYWN0dWFsbHkgd2hhdCBMYW1iZGEgYWRkcyB0byB0aGUgcG9saWN5IGRvY3VtZW50IGlmIHlvdSBjYWxsIEFkZFBlcm1pc3Npb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxhbWJkYVBlcm1pc3Npb24oeDogYW55KTogU3RhdGVtZW50IHtcbiAgLy8gQ29uc3RydWN0IGEgc3RhdGVtZW50IGZyb21cbiAgY29uc3Qgc3RhdGVtZW50OiBhbnkgPSB7XG4gICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgIEFjdGlvbjogeC5BY3Rpb24sXG4gICAgUmVzb3VyY2U6IHguRnVuY3Rpb25OYW1lLFxuICB9O1xuXG4gIGlmICh4LlByaW5jaXBhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHguUHJpbmNpcGFsID09PSAnKicpIHtcbiAgICAgIC8vICpcbiAgICAgIHN0YXRlbWVudC5QcmluY2lwYWwgPSAnKic7XG4gICAgfSBlbHNlIGlmICgvXlxcZHsxMn0kLy50ZXN0KHguUHJpbmNpcGFsKSkge1xuICAgICAgLy8gQWNjb3VudCBudW1iZXJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXdzLWNkay9uby1saXRlcmFsLXBhcnRpdGlvblxuICAgICAgc3RhdGVtZW50LlByaW5jaXBhbCA9IHsgQVdTOiBgYXJuOmF3czppYW06OiR7eC5QcmluY2lwYWx9OnJvb3RgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFzc3VtZSBpdCdzIGEgc2VydmljZSBwcmluY2lwYWxcbiAgICAgIC8vIFdlIG1pZ2h0IGdldCB0aGlzIHdyb25nIHZzLiB0aGUgcHJldmlvdXMgb25lIGZvciB0b2tlbnMuIE5vdGhpbmcgdG8gYmUgZG9uZVxuICAgICAgLy8gYWJvdXQgdGhhdC4gSXQncyBvbmx5IGZvciBodW1hbiByZWFkYWJsZSBjb25zdW1wdGlvbiBhZnRlciBhbGwuXG4gICAgICBzdGF0ZW1lbnQuUHJpbmNpcGFsID0geyBTZXJ2aWNlOiB4LlByaW5jaXBhbCB9O1xuICAgIH1cbiAgfVxuICBpZiAoeC5Tb3VyY2VBcm4gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChzdGF0ZW1lbnQuQ29uZGl0aW9uID09PSB1bmRlZmluZWQpIHsgc3RhdGVtZW50LkNvbmRpdGlvbiA9IHt9OyB9XG4gICAgc3RhdGVtZW50LkNvbmRpdGlvbi5Bcm5MaWtlID0geyAnQVdTOlNvdXJjZUFybic6IHguU291cmNlQXJuIH07XG4gIH1cbiAgaWYgKHguU291cmNlQWNjb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHN0YXRlbWVudC5Db25kaXRpb24gPT09IHVuZGVmaW5lZCkgeyBzdGF0ZW1lbnQuQ29uZGl0aW9uID0ge307IH1cbiAgICBzdGF0ZW1lbnQuQ29uZGl0aW9uLlN0cmluZ0VxdWFscyA9IHsgJ0FXUzpTb3VyY2VBY2NvdW50JzogeC5Tb3VyY2VBY2NvdW50IH07XG4gIH1cbiAgaWYgKHguRXZlbnRTb3VyY2VUb2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHN0YXRlbWVudC5Db25kaXRpb24gPT09IHVuZGVmaW5lZCkgeyBzdGF0ZW1lbnQuQ29uZGl0aW9uID0ge307IH1cbiAgICBzdGF0ZW1lbnQuQ29uZGl0aW9uLlN0cmluZ0VxdWFscyA9IHsgJ2xhbWJkYTpFdmVudFNvdXJjZVRva2VuJzogeC5FdmVudFNvdXJjZVRva2VuIH07XG4gIH1cblxuICByZXR1cm4gbmV3IFN0YXRlbWVudChzdGF0ZW1lbnQpO1xufVxuXG4vKipcbiAqIFRhcmdldHMgZm9yIGEgZmllbGRcbiAqL1xuZXhwb3J0IGNsYXNzIFRhcmdldHMge1xuICAvKipcbiAgICogVGhlIHZhbHVlcyBvZiB0aGUgdGFyZ2V0c1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcG9zaXRpdmUgb3IgbmVnYXRpdmUgbWF0Y2hlcnNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBub3Q6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc3RhdGVtZW50OiBVbmtub3duTWFwLCBwb3NpdGl2ZUtleTogc3RyaW5nLCBuZWdhdGl2ZUtleTogc3RyaW5nKSB7XG4gICAgaWYgKG5lZ2F0aXZlS2V5IGluIHN0YXRlbWVudCkge1xuICAgICAgdGhpcy52YWx1ZXMgPSBmb3JjZUxpc3RPZlN0cmluZ3Moc3RhdGVtZW50W25lZ2F0aXZlS2V5XSk7XG4gICAgICB0aGlzLm5vdCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVzID0gZm9yY2VMaXN0T2ZTdHJpbmdzKHN0YXRlbWVudFtwb3NpdGl2ZUtleV0pO1xuICAgICAgdGhpcy5ub3QgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZXMuc29ydCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBlbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBzZXQgb2YgdGFyZ2V0cyBpcyBlcXVhbCB0byB0aGUgb3RoZXIgc2V0IG9mIHRhcmdldHNcbiAgICovXG4gIHB1YmxpYyBlcXVhbChvdGhlcjogVGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLm5vdCA9PT0gb3RoZXIubm90ICYmIGRlZXBFcXVhbCh0aGlzLnZhbHVlcy5zb3J0KCksIG90aGVyLnZhbHVlcy5zb3J0KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBjdXJyZW50IHZhbHVlIHNldCBpcyBlbXB0eSwgcHV0IHRoaXMgaW4gaXRcbiAgICovXG4gIHB1YmxpYyByZXBsYWNlRW1wdHkocmVwbGFjZW1lbnQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmVtcHR5KSB7XG4gICAgICB0aGlzLnZhbHVlcy5wdXNoKHJlcGxhY2VtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGFjdGlvbnMgY29udGFpbnMgYSAnKicsIHJlcGxhY2Ugd2l0aCB0aGlzIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyByZXBsYWNlU3RhcihyZXBsYWNlbWVudDogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMudmFsdWVzW2ldID09PSAnKicpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSByZXBsYWNlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52YWx1ZXMuc29ydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBpbnRvIGEgc3VtbWFyeSB0YWJsZSBjZWxsXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubm90XG4gICAgICA/IHRoaXMudmFsdWVzLm1hcChzID0+IGBOT1QgJHtzfWApLmpvaW4oJ1xcbicpXG4gICAgICA6IHRoaXMudmFsdWVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hY2hpbmUtcmVhZGFibGUgdmVyc2lvbiBvZiB0aGUgY2hhbmdlcy5cbiAgICogVGhpcyBpcyBvbmx5IHVzZWQgaW4gdGVzdHMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0pzb24oKTogVGFyZ2V0c0pzb24ge1xuICAgIHJldHVybiB7IG5vdDogdGhpcy5ub3QsIHZhbHVlczogdGhpcy52YWx1ZXMgfTtcbiAgfVxufVxuXG50eXBlIFVua25vd25NYXAgPSB7W2tleTogc3RyaW5nXTogdW5rbm93bn07XG5cbmV4cG9ydCBlbnVtIEVmZmVjdCB7XG4gIFVua25vd24gPSAnVW5rbm93bicsXG4gIEFsbG93ID0gJ0FsbG93JyxcbiAgRGVueSA9ICdEZW55Jyxcbn1cblxuZnVuY3Rpb24gZXhwZWN0U3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnID8geCA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZXhwZWN0RWZmZWN0KHg6IHVua25vd24pOiBFZmZlY3Qge1xuICBpZiAoeCA9PT0gRWZmZWN0LkFsbG93IHx8IHggPT09IEVmZmVjdC5EZW55KSB7IHJldHVybiB4IGFzIEVmZmVjdDsgfVxuICByZXR1cm4gRWZmZWN0LlVua25vd247XG59XG5cbmZ1bmN0aW9uIGZvcmNlTGlzdE9mU3RyaW5ncyh4OiB1bmtub3duKTogc3RyaW5nW10ge1xuICBpZiAodHlwZW9mIHggPT09ICdzdHJpbmcnKSB7IHJldHVybiBbeF07IH1cbiAgaWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJyB8fCB4ID09PSBudWxsKSB7IHJldHVybiBbXTsgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgcmV0dXJuIHgubWFwKGUgPT4gZm9yY2VMaXN0T2ZTdHJpbmdzKGUpLmpvaW4oJywnKSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwpIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoeCkpIHtcbiAgICAgIHJldC5wdXNoKC4uLmZvcmNlTGlzdE9mU3RyaW5ncyh2YWx1ZSkubWFwKHMgPT4gYCR7a2V5fToke3N9YCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcmV0dXJuIFtgJHt4fWBdO1xufVxuXG4vKipcbiAqIFJlbmRlciB0aGUgQ29uZGl0aW9uIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQ29uZGl0aW9uKGNvbmRpdGlvbjogYW55KTogc3RyaW5nIHtcbiAgaWYgKCFjb25kaXRpb24gfHwgT2JqZWN0LmtleXMoY29uZGl0aW9uKS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gIGNvbnN0IGpzb25SZXByZXNlbnRhdGlvbiA9IEpTT04uc3RyaW5naWZ5KGNvbmRpdGlvbiwgdW5kZWZpbmVkLCAyKTtcblxuICAvLyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBsb29rcyBsaWtlIHRoaXM6XG4gIC8vXG4gIC8vICB7XG4gIC8vICAgIFwiQXJuTGlrZVwiOiB7XG4gIC8vICAgICAgXCJBV1M6U291cmNlQXJuXCI6IFwiJHtNeVRvcGljODY4Njk0MzR9XCJcbiAgLy8gICAgfVxuICAvLyAgfVxuICAvL1xuICAvLyBXZSBjYW4gbWFrZSBpdCBtb3JlIGNvbXBhY3Qgd2l0aG91dCBsb3NpbmcgaW5mb3JtYXRpb24gYnkgZ2V0dGluZyByaWQgb2YgdGhlIG91dGVybW9zdCBicmFjZXNcbiAgLy8gYW5kIHRoZSBpbmRlbnRhdGlvbi5cbiAgY29uc3QgbGluZXMgPSBqc29uUmVwcmVzZW50YXRpb24uc3BsaXQoJ1xcbicpO1xuICByZXR1cm4gbGluZXMuc2xpY2UoMSwgbGluZXMubGVuZ3RoIC0gMSkubWFwKHMgPT4gcy5zbGljZSgyKSkuam9pbignXFxuJyk7XG59XG4iXX0=
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhdGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUE0RTtBQUM1RSxrQ0FBOEM7QUFFOUMseUVBQXlFO0FBQ3pFLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUU3QyxNQUFhLFNBQVM7SUFpQ3BCLFlBQVksU0FBOEI7UUFDeEMsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxPQUFP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LElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVuRSwyQ0FBMkM7SUFDM0MsRUFBRTtJQUNGLEtBQUs7SUFDTCxrQkFBa0I7SUFDbEIsNkNBQTZDO0lBQzdDLE9BQU87SUFDUCxLQUFLO0lBQ0wsRUFBRTtJQUNGLGdHQUFnRztJQUNoRyx1QkFBdUI7SUFDdkIsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFoQkQsMENBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWF5YmVQYXJzZWQsIG1rUGFyc2VkLCBta1VucGFyc2VhYmxlIH0gZnJvbSAnLi4vZGlmZi9tYXliZS1wYXJzZWQnO1xuaW1wb3J0IHsgZGVlcFJlbW92ZVVuZGVmaW5lZCB9IGZyb20gJy4uL3V0aWwnO1xuXG4vLyBuYW1lc3BhY2Ugb2JqZWN0IGltcG9ydHMgd29uJ3Qgd29yayBpbiB0aGUgYnVuZGxlIGZvciBmdW5jdGlvbiBleHBvcnRzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgZGVlcEVxdWFsID0gcmVxdWlyZSgnZmFzdC1kZWVwLWVxdWFsJyk7XG5cbmV4cG9ydCBjbGFzcyBTdGF0ZW1lbnQge1xuICAvKipcbiAgICogU3RhdGVtZW50IElEXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFN0YXRlbWVudCBlZmZlY3RcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlZmZlY3Q6IEVmZmVjdDtcblxuICAvKipcbiAgICogUmVzb3VyY2VzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VzOiBUYXJnZXRzO1xuXG4gIC8qKlxuICAgKiBQcmluY2lwYWxzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpbmNpcGFsczogVGFyZ2V0cztcblxuICAvKipcbiAgICogQWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFjdGlvbnM6IFRhcmdldHM7XG5cbiAgLyoqXG4gICAqIE9iamVjdCB3aXRoIGNvbmRpdGlvbnNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25kaXRpb24/OiBhbnk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZXJpYWxpemVkSW50cmluc2ljOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioc3RhdGVtZW50OiBVbmtub3duTWFwIHwgc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnNpZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZWZmZWN0ID0gRWZmZWN0LlVua25vd247XG4gICAgICB0aGlzLnJlc291cmNlcyA9IG5ldyBUYXJnZXRzKHt9LCAnJywgJycpO1xuICAgICAgdGhpcy5hY3Rpb25zID0gbmV3IFRhcmdldHMoe30sICcnLCAnJyk7XG4gICAgICB0aGlzLnByaW5jaXBhbHMgPSBuZXcgVGFyZ2V0cyh7fSwgJycsICcnKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zZXJpYWxpemVkSW50cmluc2ljID0gc3RhdGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNpZCA9IGV4cGVjdFN0cmluZyhzdGF0ZW1lbnQuU2lkKTtcbiAgICAgIHRoaXMuZWZmZWN0ID0gZXhwZWN0RWZmZWN0KHN0YXRlbWVudC5FZmZlY3QpO1xuICAgICAgdGhpcy5yZXNvdXJjZXMgPSBuZXcgVGFyZ2V0cyhzdGF0ZW1lbnQsICdSZXNvdXJjZScsICdOb3RSZXNvdXJjZScpO1xuICAgICAgdGhpcy5hY3Rpb25zID0gbmV3IFRhcmdldHMoc3RhdGVtZW50LCAnQWN0aW9uJywgJ05vdEFjdGlvbicpO1xuICAgICAgdGhpcy5wcmluY2lwYWxzID0gbmV3IFRhcmdldHMoc3RhdGVtZW50LCAnUHJpbmNpcGFsJywgJ05vdFByaW5jaXBhbCcpO1xuICAgICAgdGhpcy5jb25kaXRpb24gPSBzdGF0ZW1lbnQuQ29uZGl0aW9uO1xuICAgICAgdGhpcy5zZXJpYWxpemVkSW50cmluc2ljID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgc3RhdGVtZW50IGlzIGVxdWFsIHRvIHRoZSBvdGhlciBzdGF0ZW1lbnRcbiAgICovXG4gIHB1YmxpYyBlcXVhbChvdGhlcjogU3RhdGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnNpZCA9PT0gb3RoZXIuc2lkXG4gICAgICAmJiB0aGlzLmVmZmVjdCA9PT0gb3RoZXIuZWZmZWN0XG4gICAgICAmJiB0aGlzLnNlcmlhbGl6ZWRJbnRyaW5zaWMgPT09IG90aGVyLnNlcmlhbGl6ZWRJbnRyaW5zaWNcbiAgICAgICYmIHRoaXMucmVzb3VyY2VzLmVxdWFsKG90aGVyLnJlc291cmNlcylcbiAgICAgICYmIHRoaXMuYWN0aW9ucy5lcXVhbChvdGhlci5hY3Rpb25zKVxuICAgICAgJiYgdGhpcy5wcmluY2lwYWxzLmVxdWFsKG90aGVyLnByaW5jaXBhbHMpXG4gICAgICAmJiBkZWVwRXF1YWwodGhpcy5jb25kaXRpb24sIG90aGVyLmNvbmRpdGlvbikpO1xuICB9XG5cbiAgcHVibGljIHJlbmRlcigpOiBSZW5kZXJlZFN0YXRlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplZEludHJpbnNpY1xuICAgICAgPyB7XG4gICAgICAgIHJlc291cmNlOiB0aGlzLnNlcmlhbGl6ZWRJbnRyaW5zaWMsXG4gICAgICAgIGVmZmVjdDogJycsXG4gICAgICAgIGFjdGlvbjogJycsXG4gICAgICAgIHByaW5jaXBhbDogdGhpcy5wcmluY2lwYWxzLnJlbmRlcigpLCAvLyB0aGVzZSB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBjYWxsIHRvIHJlcGxhY2VFbXB0eSgpIGZyb20gSWFtQ2hhbmdlc1xuICAgICAgICBjb25kaXRpb246ICcnLFxuICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgIHJlc291cmNlOiB0aGlzLnJlc291cmNlcy5yZW5kZXIoKSxcbiAgICAgICAgZWZmZWN0OiB0aGlzLmVmZmVjdCxcbiAgICAgICAgYWN0aW9uOiB0aGlzLmFjdGlvbnMucmVuZGVyKCksXG4gICAgICAgIHByaW5jaXBhbDogdGhpcy5wcmluY2lwYWxzLnJlbmRlcigpLFxuICAgICAgICBjb25kaXRpb246IHJlbmRlckNvbmRpdGlvbih0aGlzLmNvbmRpdGlvbiksXG4gICAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hY2hpbmUtcmVhZGFibGUgdmVyc2lvbiBvZiB0aGUgY2hhbmdlcy5cbiAgICogVGhpcyBpcyBvbmx5IHVzZWQgaW4gdGVzdHMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0pzb24oKTogTWF5YmVQYXJzZWQ8U3RhdGVtZW50SnNvbj4ge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZWRJbnRyaW5zaWNcbiAgICAgID8gbWtVbnBhcnNlYWJsZSh0aGlzLnNlcmlhbGl6ZWRJbnRyaW5zaWMpXG4gICAgICA6IG1rUGFyc2VkKGRlZXBSZW1vdmVVbmRlZmluZWQoe1xuICAgICAgICBzaWQ6IHRoaXMuc2lkLFxuICAgICAgICBlZmZlY3Q6IHRoaXMuZWZmZWN0LFxuICAgICAgICByZXNvdXJjZXM6IHRoaXMucmVzb3VyY2VzLl90b0pzb24oKSxcbiAgICAgICAgcHJpbmNpcGFsczogdGhpcy5wcmluY2lwYWxzLl90b0pzb24oKSxcbiAgICAgICAgYWN0aW9uczogdGhpcy5hY3Rpb25zLl90b0pzb24oKSxcbiAgICAgICAgY29uZGl0aW9uOiB0aGlzLmNvbmRpdGlvbixcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSBuZWdhdGl2ZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogQSBzdGF0ZW1lbnQgaXMgbmVnYXRpdmUgaWYgYW55IG9mIGl0cyB0YXJnZXRzIGFyZSBuZWdhdGl2ZSwgaW52ZXJ0ZWRcbiAgICogaWYgdGhlIEVmZmVjdCBpcyBEZW55LlxuICAgKi9cbiAgcHVibGljIGdldCBpc05lZ2F0aXZlU3RhdGVtZW50KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vdFRhcmdldCA9IHRoaXMuYWN0aW9ucy5ub3QgfHwgdGhpcy5wcmluY2lwYWxzLm5vdCB8fCB0aGlzLnJlc291cmNlcy5ub3Q7XG4gICAgcmV0dXJuIHRoaXMuZWZmZWN0ID09PSBFZmZlY3QuQWxsb3cgPyBub3RUYXJnZXQgOiAhbm90VGFyZ2V0O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyZWRTdGF0ZW1lbnQge1xuICByZWFkb25seSByZXNvdXJjZTogc3RyaW5nO1xuICByZWFkb25seSBlZmZlY3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgYWN0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByaW5jaXBhbDogc3RyaW5nO1xuICByZWFkb25seSBjb25kaXRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0ZW1lbnRKc29uIHtcbiAgc2lkPzogc3RyaW5nO1xuICBlZmZlY3Q6IHN0cmluZztcbiAgcmVzb3VyY2VzOiBUYXJnZXRzSnNvbjtcbiAgYWN0aW9uczogVGFyZ2V0c0pzb247XG4gIHByaW5jaXBhbHM6IFRhcmdldHNKc29uO1xuICBjb25kaXRpb24/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0c0pzb24ge1xuICBub3Q6IGJvb2xlYW47XG4gIHZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogUGFyc2UgYSBsaXN0IG9mIHN0YXRlbWVudHMgZnJvbSB1bmRlZmluZWQsIGEgU3RhdGVtZW50LCBvciBhIGxpc3Qgb2Ygc3RhdGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRzKHg6IGFueSk6IFN0YXRlbWVudFtdIHtcbiAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gW107IH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KHgpKSB7IHggPSBbeF07IH1cbiAgcmV0dXJuIHgubWFwKChzOiBhbnkpID0+IG5ldyBTdGF0ZW1lbnQocykpO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgU3RhdGVtZW50IGZyb20gYSBMYW1iZGE6OlBlcm1pc3Npb24gb2JqZWN0XG4gKlxuICogVGhpcyBpcyBhY3R1YWxseSB3aGF0IExhbWJkYSBhZGRzIHRvIHRoZSBwb2xpY3kgZG9jdW1lbnQgaWYgeW91IGNhbGwgQWRkUGVybWlzc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGFtYmRhUGVybWlzc2lvbih4OiBhbnkpOiBTdGF0ZW1lbnQge1xuICAvLyBDb25zdHJ1Y3QgYSBzdGF0ZW1lbnQgZnJvbVxuICBjb25zdCBzdGF0ZW1lbnQ6IGFueSA9IHtcbiAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgQWN0aW9uOiB4LkFjdGlvbixcbiAgICBSZXNvdXJjZTogeC5GdW5jdGlvbk5hbWUsXG4gIH07XG5cbiAgaWYgKHguUHJpbmNpcGFsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoeC5QcmluY2lwYWwgPT09ICcqJykge1xuICAgICAgLy8gKlxuICAgICAgc3RhdGVtZW50LlByaW5jaXBhbCA9ICcqJztcbiAgICB9IGVsc2UgaWYgKC9eXFxkezEyfSQvLnRlc3QoeC5QcmluY2lwYWwpKSB7XG4gICAgICAvLyBBY2NvdW50IG51bWJlclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhd3MtY2RrL25vLWxpdGVyYWwtcGFydGl0aW9uXG4gICAgICBzdGF0ZW1lbnQuUHJpbmNpcGFsID0geyBBV1M6IGBhcm46YXdzOmlhbTo6JHt4LlByaW5jaXBhbH06cm9vdGAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXNzdW1lIGl0J3MgYSBzZXJ2aWNlIHByaW5jaXBhbFxuICAgICAgLy8gV2UgbWlnaHQgZ2V0IHRoaXMgd3JvbmcgdnMuIHRoZSBwcmV2aW91cyBvbmUgZm9yIHRva2Vucy4gTm90aGluZyB0byBiZSBkb25lXG4gICAgICAvLyBhYm91dCB0aGF0LiBJdCdzIG9ubHkgZm9yIGh1bWFuIHJlYWRhYmxlIGNvbnN1bXB0aW9uIGFmdGVyIGFsbC5cbiAgICAgIHN0YXRlbWVudC5QcmluY2lwYWwgPSB7IFNlcnZpY2U6IHguUHJpbmNpcGFsIH07XG4gICAgfVxuICB9XG4gIGlmICh4LlNvdXJjZUFybiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHN0YXRlbWVudC5Db25kaXRpb24gPT09IHVuZGVmaW5lZCkgeyBzdGF0ZW1lbnQuQ29uZGl0aW9uID0ge307IH1cbiAgICBzdGF0ZW1lbnQuQ29uZGl0aW9uLkFybkxpa2UgPSB7ICdBV1M6U291cmNlQXJuJzogeC5Tb3VyY2VBcm4gfTtcbiAgfVxuICBpZiAoeC5Tb3VyY2VBY2NvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoc3RhdGVtZW50LkNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7IHN0YXRlbWVudC5Db25kaXRpb24gPSB7fTsgfVxuICAgIHN0YXRlbWVudC5Db25kaXRpb24uU3RyaW5nRXF1YWxzID0geyAnQVdTOlNvdXJjZUFjY291bnQnOiB4LlNvdXJjZUFjY291bnQgfTtcbiAgfVxuICBpZiAoeC5FdmVudFNvdXJjZVRva2VuICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoc3RhdGVtZW50LkNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7IHN0YXRlbWVudC5Db25kaXRpb24gPSB7fTsgfVxuICAgIHN0YXRlbWVudC5Db25kaXRpb24uU3RyaW5nRXF1YWxzID0geyAnbGFtYmRhOkV2ZW50U291cmNlVG9rZW4nOiB4LkV2ZW50U291cmNlVG9rZW4gfTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU3RhdGVtZW50KHN0YXRlbWVudCk7XG59XG5cbi8qKlxuICogVGFyZ2V0cyBmb3IgYSBmaWVsZFxuICovXG5leHBvcnQgY2xhc3MgVGFyZ2V0cyB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWVzIG9mIHRoZSB0YXJnZXRzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWVzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hldGhlciBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBtYXRjaGVyc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vdDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzdGF0ZW1lbnQ6IFVua25vd25NYXAsIHBvc2l0aXZlS2V5OiBzdHJpbmcsIG5lZ2F0aXZlS2V5OiBzdHJpbmcpIHtcbiAgICBpZiAobmVnYXRpdmVLZXkgaW4gc3RhdGVtZW50KSB7XG4gICAgICB0aGlzLnZhbHVlcyA9IGZvcmNlTGlzdE9mU3RyaW5ncyhzdGF0ZW1lbnRbbmVnYXRpdmVLZXldKTtcbiAgICAgIHRoaXMubm90ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZXMgPSBmb3JjZUxpc3RPZlN0cmluZ3Moc3RhdGVtZW50W3Bvc2l0aXZlS2V5XSk7XG4gICAgICB0aGlzLm5vdCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlcy5zb3J0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGggPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHNldCBvZiB0YXJnZXRzIGlzIGVxdWFsIHRvIHRoZSBvdGhlciBzZXQgb2YgdGFyZ2V0c1xuICAgKi9cbiAgcHVibGljIGVxdWFsKG90aGVyOiBUYXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMubm90ID09PSBvdGhlci5ub3QgJiYgZGVlcEVxdWFsKHRoaXMudmFsdWVzLnNvcnQoKSwgb3RoZXIudmFsdWVzLnNvcnQoKSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGN1cnJlbnQgdmFsdWUgc2V0IGlzIGVtcHR5LCBwdXQgdGhpcyBpbiBpdFxuICAgKi9cbiAgcHVibGljIHJlcGxhY2VFbXB0eShyZXBsYWNlbWVudDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuZW1wdHkpIHtcbiAgICAgIHRoaXMudmFsdWVzLnB1c2gocmVwbGFjZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgYWN0aW9ucyBjb250YWlucyBhICcqJywgcmVwbGFjZSB3aXRoIHRoaXMgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIHJlcGxhY2VTdGFyKHJlcGxhY2VtZW50OiBzdHJpbmcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy52YWx1ZXNbaV0gPT09ICcqJykge1xuICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IHJlcGxhY2VtZW50O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnZhbHVlcy5zb3J0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIGludG8gYSBzdW1tYXJ5IHRhYmxlIGNlbGxcbiAgICovXG4gIHB1YmxpYyByZW5kZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ub3RcbiAgICAgID8gdGhpcy52YWx1ZXMubWFwKHMgPT4gYE5PVCAke3N9YCkuam9pbignXFxuJylcbiAgICAgIDogdGhpcy52YWx1ZXMuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgbWFjaGluZS1yZWFkYWJsZSB2ZXJzaW9uIG9mIHRoZSBjaGFuZ2VzLlxuICAgKiBUaGlzIGlzIG9ubHkgdXNlZCBpbiB0ZXN0cy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3RvSnNvbigpOiBUYXJnZXRzSnNvbiB7XG4gICAgcmV0dXJuIHsgbm90OiB0aGlzLm5vdCwgdmFsdWVzOiB0aGlzLnZhbHVlcyB9O1xuICB9XG59XG5cbnR5cGUgVW5rbm93bk1hcCA9IHtba2V5OiBzdHJpbmddOiB1bmtub3dufTtcblxuZXhwb3J0IGVudW0gRWZmZWN0IHtcbiAgVW5rbm93biA9ICdVbmtub3duJyxcbiAgQWxsb3cgPSAnQWxsb3cnLFxuICBEZW55ID0gJ0RlbnknLFxufVxuXG5mdW5jdGlvbiBleHBlY3RTdHJpbmcoeDogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ3N0cmluZycgPyB4IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBleHBlY3RFZmZlY3QoeDogdW5rbm93bik6IEVmZmVjdCB7XG4gIGlmICh4ID09PSBFZmZlY3QuQWxsb3cgfHwgeCA9PT0gRWZmZWN0LkRlbnkpIHsgcmV0dXJuIHggYXMgRWZmZWN0OyB9XG4gIHJldHVybiBFZmZlY3QuVW5rbm93bjtcbn1cblxuZnVuY3Rpb24gZm9yY2VMaXN0T2ZTdHJpbmdzKHg6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIFt4XTsgfVxuICBpZiAodHlwZW9mIHggPT09ICd1bmRlZmluZWQnIHx8IHggPT09IG51bGwpIHsgcmV0dXJuIFtdOyB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICByZXR1cm4geC5tYXAoZSA9PiBmb3JjZUxpc3RPZlN0cmluZ3MoZSkuam9pbignLCcpKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJldDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh4KSkge1xuICAgICAgcmV0LnB1c2goLi4uZm9yY2VMaXN0T2ZTdHJpbmdzKHZhbHVlKS5tYXAocyA9PiBgJHtrZXl9OiR7c31gKSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICByZXR1cm4gW2Ake3h9YF07XG59XG5cbi8qKlxuICogUmVuZGVyIHRoZSBDb25kaXRpb24gY29sdW1uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJDb25kaXRpb24oY29uZGl0aW9uOiBhbnkpOiBzdHJpbmcge1xuICBpZiAoIWNvbmRpdGlvbiB8fCBPYmplY3Qua2V5cyhjb25kaXRpb24pLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cbiAgY29uc3QganNvblJlcHJlc2VudGF0aW9uID0gSlNPTi5zdHJpbmdpZnkoY29uZGl0aW9uLCB1bmRlZmluZWQsIDIpO1xuXG4gIC8vIFRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGxvb2tzIGxpa2UgdGhpczpcbiAgLy9cbiAgLy8gIHtcbiAgLy8gICAgXCJBcm5MaWtlXCI6IHtcbiAgLy8gICAgICBcIkFXUzpTb3VyY2VBcm5cIjogXCIke015VG9waWM4Njg2OTQzNH1cIlxuICAvLyAgICB9XG4gIC8vICB9XG4gIC8vXG4gIC8vIFdlIGNhbiBtYWtlIGl0IG1vcmUgY29tcGFjdCB3aXRob3V0IGxvc2luZyBpbmZvcm1hdGlvbiBieSBnZXR0aW5nIHJpZCBvZiB0aGUgb3V0ZXJtb3N0IGJyYWNlc1xuICAvLyBhbmQgdGhlIGluZGVudGF0aW9uLlxuICBjb25zdCBsaW5lcyA9IGpzb25SZXByZXNlbnRhdGlvbi5zcGxpdCgnXFxuJyk7XG4gIHJldHVybiBsaW5lcy5zbGljZSgxLCBsaW5lcy5sZW5ndGggLSAxKS5tYXAocyA9PiBzLnNsaWNlKDIpKS5qb2luKCdcXG4nKTtcbn1cbiJdfQ==
@@ -96,4 +96,4 @@ class SecurityGroupChanges {
96
96
  }
97
97
  }
98
98
  exports.SecurityGroupChanges = SecurityGroupChanges;
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAtY2hhbmdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlY3VyaXR5LWdyb3VwLWNoYW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLCtEQUFvRTtBQUVwRSwwQ0FBaUQ7QUFDakQsNERBQXdEO0FBQ3hELGtDQUEyRTtBQVMzRTs7R0FFRztBQUNILE1BQWEsb0JBQW9CO0lBSS9CLFlBQVksS0FBZ0M7UUFINUIsWUFBTyxHQUFHLElBQUksNkJBQWtCLEVBQXFCLENBQUM7UUFDdEQsV0FBTSxHQUFHLElBQUksNkJBQWtCLEVBQXFCLENBQUM7UUFHbkUsY0FBYztRQUNkLEtBQUssTUFBTSxXQUFXLElBQUksS0FBSyxDQUFDLDBCQUEwQixFQUFFO1lBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDbEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztTQUNuRztRQUNELEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxDQUFDLHlCQUF5QixFQUFFO1lBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDL0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztTQUNoRztRQUVELGlCQUFpQjtRQUNqQixLQUFLLE1BQU0sVUFBVSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsRUFBRTtZQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUN6RTtRQUNELEtBQUssTUFBTSxTQUFTLElBQUksS0FBSyxDQUFDLHlCQUF5QixFQUFFO1lBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ2QsTUFBTSxHQUFHLEdBQWUsRUFBRSxDQUFDO1FBRTNCLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXhELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQztRQUNwQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFFdEIsbUhBQW1IO1FBQ25ILE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBZSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUF1QixFQUFFLEVBQUUsQ0FBQztZQUNsRixPQUFPO1lBQ1AsSUFBSSxDQUFDLE9BQU87WUFDWixLQUFLO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUU7U0FDcEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUQsdUNBQXVDO1FBQ3ZDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEUseURBQXlEO1FBQ3pELEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBQSxxQkFBYyxFQUFDLENBQUMsR0FBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRixHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFekIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTTtRQUNYLE9BQU8sSUFBQSwwQkFBbUIsRUFBQztZQUN6QixvQkFBb0IsRUFBRSxJQUFBLGtCQUFXLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDOUUsbUJBQW1CLEVBQUUsSUFBQSxrQkFBVyxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLG1CQUFtQixFQUFFLElBQUEsa0JBQVcsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM1RSxrQkFBa0IsRUFBRSxJQUFBLGtCQUFXLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDM0UsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTtlQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNsQyxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQVUsRUFBRSxTQUFpQjtRQUNuRCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUFFLE9BQU8sRUFBRSxDQUFDO1NBQUU7UUFFbkQsMkRBQTJEO1FBRTNELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQzNDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUEsb0NBQWdCLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsMkRBQTJEO1lBQzNELE9BQU8sT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksdUNBQWlCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxRQUFhO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztTQUFFO1FBRTdCLDJEQUEyRDtRQUUzRCxPQUFPLENBQUMsSUFBSSx1Q0FBaUIsQ0FBQyxJQUFBLG9DQUFnQixFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0NBQ0Y7QUFyR0Qsb0RBcUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgUnVsZUpzb24sIFNlY3VyaXR5R3JvdXBSdWxlIH0gZnJvbSAnLi9zZWN1cml0eS1ncm91cC1ydWxlJztcbmltcG9ydCB7IFByb3BlcnR5Q2hhbmdlLCBSZXNvdXJjZUNoYW5nZSB9IGZyb20gJy4uL2RpZmYvdHlwZXMnO1xuaW1wb3J0IHsgRGlmZmFibGVDb2xsZWN0aW9uIH0gZnJvbSAnLi4vZGlmZmFibGUnO1xuaW1wb3J0IHsgcmVuZGVySW50cmluc2ljcyB9IGZyb20gJy4uL3JlbmRlci1pbnRyaW5zaWNzJztcbmltcG9ydCB7IGRlZXBSZW1vdmVVbmRlZmluZWQsIGRyb3BJZkVtcHR5LCBtYWtlQ29tcGFyYXRvciB9IGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBDaGFuZ2VzUHJvcHMge1xuICBpbmdyZXNzUnVsZVByb3BlcnR5Q2hhbmdlczogUHJvcGVydHlDaGFuZ2VbXTtcbiAgaW5ncmVzc1J1bGVSZXNvdXJjZUNoYW5nZXM6IFJlc291cmNlQ2hhbmdlW107XG4gIGVncmVzc1J1bGVSZXNvdXJjZUNoYW5nZXM6IFJlc291cmNlQ2hhbmdlW107XG4gIGVncmVzc1J1bGVQcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5Q2hhbmdlW107XG59XG5cbi8qKlxuICogQ2hhbmdlcyB0byBJQU0gc3RhdGVtZW50c1xuICovXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlHcm91cENoYW5nZXMge1xuICBwdWJsaWMgcmVhZG9ubHkgaW5ncmVzcyA9IG5ldyBEaWZmYWJsZUNvbGxlY3Rpb248U2VjdXJpdHlHcm91cFJ1bGU+KCk7XG4gIHB1YmxpYyByZWFkb25seSBlZ3Jlc3MgPSBuZXcgRGlmZmFibGVDb2xsZWN0aW9uPFNlY3VyaXR5R3JvdXBSdWxlPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTZWN1cml0eUdyb3VwQ2hhbmdlc1Byb3BzKSB7XG4gICAgLy8gR3JvdXAgcnVsZXNcbiAgICBmb3IgKGNvbnN0IGluZ3Jlc3NQcm9wIG9mIHByb3BzLmluZ3Jlc3NSdWxlUHJvcGVydHlDaGFuZ2VzKSB7XG4gICAgICB0aGlzLmluZ3Jlc3MuYWRkT2xkKC4uLnRoaXMucmVhZElubGluZVJ1bGVzKGluZ3Jlc3NQcm9wLm9sZFZhbHVlLCBpbmdyZXNzUHJvcC5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgdGhpcy5pbmdyZXNzLmFkZE5ldyguLi50aGlzLnJlYWRJbmxpbmVSdWxlcyhpbmdyZXNzUHJvcC5uZXdWYWx1ZSwgaW5ncmVzc1Byb3AucmVzb3VyY2VMb2dpY2FsSWQpKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBlZ3Jlc3NQcm9wIG9mIHByb3BzLmVncmVzc1J1bGVQcm9wZXJ0eUNoYW5nZXMpIHtcbiAgICAgIHRoaXMuZWdyZXNzLmFkZE9sZCguLi50aGlzLnJlYWRJbmxpbmVSdWxlcyhlZ3Jlc3NQcm9wLm9sZFZhbHVlLCBlZ3Jlc3NQcm9wLnJlc291cmNlTG9naWNhbElkKSk7XG4gICAgICB0aGlzLmVncmVzcy5hZGROZXcoLi4udGhpcy5yZWFkSW5saW5lUnVsZXMoZWdyZXNzUHJvcC5uZXdWYWx1ZSwgZWdyZXNzUHJvcC5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgIH1cblxuICAgIC8vIFJ1bGUgcmVzb3VyY2VzXG4gICAgZm9yIChjb25zdCBpbmdyZXNzUmVzIG9mIHByb3BzLmluZ3Jlc3NSdWxlUmVzb3VyY2VDaGFuZ2VzKSB7XG4gICAgICB0aGlzLmluZ3Jlc3MuYWRkT2xkKC4uLnRoaXMucmVhZFJ1bGVSZXNvdXJjZShpbmdyZXNzUmVzLm9sZFByb3BlcnRpZXMpKTtcbiAgICAgIHRoaXMuaW5ncmVzcy5hZGROZXcoLi4udGhpcy5yZWFkUnVsZVJlc291cmNlKGluZ3Jlc3NSZXMubmV3UHJvcGVydGllcykpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVncmVzc1JlcyBvZiBwcm9wcy5lZ3Jlc3NSdWxlUmVzb3VyY2VDaGFuZ2VzKSB7XG4gICAgICB0aGlzLmVncmVzcy5hZGRPbGQoLi4udGhpcy5yZWFkUnVsZVJlc291cmNlKGVncmVzc1Jlcy5vbGRQcm9wZXJ0aWVzKSk7XG4gICAgICB0aGlzLmVncmVzcy5hZGROZXcoLi4udGhpcy5yZWFkUnVsZVJlc291cmNlKGVncmVzc1Jlcy5uZXdQcm9wZXJ0aWVzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbmdyZXNzLmNhbGN1bGF0ZURpZmYoKTtcbiAgICB0aGlzLmVncmVzcy5jYWxjdWxhdGVEaWZmKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0NoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5ncmVzcy5oYXNDaGFuZ2VzIHx8IHRoaXMuZWdyZXNzLmhhc0NoYW5nZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3VtbWFyeSB0YWJsZSBvZiBjaGFuZ2VzXG4gICAqL1xuICBwdWJsaWMgc3VtbWFyaXplKCk6IHN0cmluZ1tdW10ge1xuICAgIGNvbnN0IHJldDogc3RyaW5nW11bXSA9IFtdO1xuXG4gICAgY29uc3QgaGVhZGVyID0gWycnLCAnR3JvdXAnLCAnRGlyJywgJ1Byb3RvY29sJywgJ1BlZXInXTtcblxuICAgIGNvbnN0IGluV29yZCA9ICdJbic7XG4gICAgY29uc3Qgb3V0V29yZCA9ICdPdXQnO1xuXG4gICAgLy8gUmVuZGVyIGEgc2luZ2xlIHJ1bGUgdG8gdGhlIHRhYmxlIChjdXJyaWVkIGZ1bmN0aW9uIHNvIHdlIGNhbiBtYXAgaXQgYWNyb3NzIHJ1bGVzIGVhc2lseS0tdGhhbmsgeW91IEphdmFTY3JpcHQhKVxuICAgIGNvbnN0IHJlbmRlclJ1bGUgPSAocGx1c01pbjogc3RyaW5nLCBpbk91dDogc3RyaW5nKSA9PiAocnVsZTogU2VjdXJpdHlHcm91cFJ1bGUpID0+IFtcbiAgICAgIHBsdXNNaW4sXG4gICAgICBydWxlLmdyb3VwSWQsXG4gICAgICBpbk91dCxcbiAgICAgIHJ1bGUuZGVzY3JpYmVQcm90b2NvbCgpLFxuICAgICAgcnVsZS5kZXNjcmliZVBlZXIoKSxcbiAgICBdLm1hcChzID0+IHBsdXNNaW4gPT09ICcrJyA/IGNoYWxrLmdyZWVuKHMpIDogY2hhbGsucmVkKHMpKTtcblxuICAgIC8vIEZpcnN0IGdlbmVyYXRlIGFsbCBsaW5lcywgc29ydCBsYXRlclxuICAgIHJldC5wdXNoKC4uLnRoaXMuaW5ncmVzcy5hZGRpdGlvbnMubWFwKHJlbmRlclJ1bGUoJysnLCBpbldvcmQpKSk7XG4gICAgcmV0LnB1c2goLi4udGhpcy5lZ3Jlc3MuYWRkaXRpb25zLm1hcChyZW5kZXJSdWxlKCcrJywgb3V0V29yZCkpKTtcbiAgICByZXQucHVzaCguLi50aGlzLmluZ3Jlc3MucmVtb3ZhbHMubWFwKHJlbmRlclJ1bGUoJy0nLCBpbldvcmQpKSk7XG4gICAgcmV0LnB1c2goLi4udGhpcy5lZ3Jlc3MucmVtb3ZhbHMubWFwKHJlbmRlclJ1bGUoJy0nLCBvdXRXb3JkKSkpO1xuXG4gICAgLy8gU29ydCBieSBncm91cCBuYW1lIHRoZW4gaW5ncmVzcy9lZ3Jlc3MgKGluZ3Jlc3MgZmlyc3QpXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV0sIHJvd1syXS5pbmRleE9mKGluV29yZCkgPiAtMSA/IDAgOiAxXSkpO1xuXG4gICAgcmV0LnNwbGljZSgwLCAwLCBoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pzb24oKTogU2VjdXJpdHlHcm91cENoYW5nZXNKc29uIHtcbiAgICByZXR1cm4gZGVlcFJlbW92ZVVuZGVmaW5lZCh7XG4gICAgICBpbmdyZXNzUnVsZUFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5pbmdyZXNzLmFkZGl0aW9ucy5tYXAocyA9PiBzLnRvSnNvbigpKSksXG4gICAgICBpbmdyZXNzUnVsZVJlbW92YWxzOiBkcm9wSWZFbXB0eSh0aGlzLmluZ3Jlc3MucmVtb3ZhbHMubWFwKHMgPT4gcy50b0pzb24oKSkpLFxuICAgICAgZWdyZXNzUnVsZUFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5lZ3Jlc3MuYWRkaXRpb25zLm1hcChzID0+IHMudG9Kc29uKCkpKSxcbiAgICAgIGVncmVzc1J1bGVSZW1vdmFsczogZHJvcElmRW1wdHkodGhpcy5lZ3Jlc3MucmVtb3ZhbHMubWFwKHMgPT4gcy50b0pzb24oKSkpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBydWxlc0FkZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluZ3Jlc3MuaGFzQWRkaXRpb25zXG4gICAgICAgIHx8IHRoaXMuZWdyZXNzLmhhc0FkZGl0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgcmVhZElubGluZVJ1bGVzKHJ1bGVzOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU2VjdXJpdHlHcm91cFJ1bGVbXSB7XG4gICAgaWYgKCFydWxlcyB8fCAhQXJyYXkuaXNBcnJheShydWxlcykpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICAvLyBVbkNsb3VkRm9ybWF0aW9uIHNvIHRoZSBwYXJzZXIgd29ya3MgaW4gYW4gZWFzaWVyIGRvbWFpblxuXG4gICAgY29uc3QgcmVmID0gJyR7JyArIGxvZ2ljYWxJZCArICcuR3JvdXBJZH0nO1xuICAgIHJldHVybiBydWxlcy5mbGF0TWFwKChyOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJlbmRlcmVkID0gcmVuZGVySW50cmluc2ljcyhyKTtcbiAgICAgIC8vIFNlY3VyaXR5R3JvdXBSdWxlIGlzIG5vdCByb2J1c3QgYWdhaW5zdCB1bnBhcnNlZCBvYmplY3RzXG4gICAgICByZXR1cm4gdHlwZW9mIHJlbmRlcmVkID09PSAnb2JqZWN0JyA/IFtuZXcgU2VjdXJpdHlHcm91cFJ1bGUocmVuZGVyZWQsIHJlZildIDogW107XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRSdWxlUmVzb3VyY2UocmVzb3VyY2U6IGFueSk6IFNlY3VyaXR5R3JvdXBSdWxlW10ge1xuICAgIGlmICghcmVzb3VyY2UpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICAvLyBVbkNsb3VkRm9ybWF0aW9uIHNvIHRoZSBwYXJzZXIgd29ya3MgaW4gYW4gZWFzaWVyIGRvbWFpblxuXG4gICAgcmV0dXJuIFtuZXcgU2VjdXJpdHlHcm91cFJ1bGUocmVuZGVySW50cmluc2ljcyhyZXNvdXJjZSkpXTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBDaGFuZ2VzSnNvbiB7XG4gIGluZ3Jlc3NSdWxlQWRkaXRpb25zPzogUnVsZUpzb25bXTtcbiAgaW5ncmVzc1J1bGVSZW1vdmFscz86IFJ1bGVKc29uW107XG4gIGVncmVzc1J1bGVBZGRpdGlvbnM/OiBSdWxlSnNvbltdO1xuICBlZ3Jlc3NSdWxlUmVtb3ZhbHM/OiBSdWxlSnNvbltdO1xufVxuIl19
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAtY2hhbmdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlY3VyaXR5LWdyb3VwLWNoYW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLCtEQUFvRTtBQUVwRSwwQ0FBaUQ7QUFDakQsNERBQXdEO0FBQ3hELGtDQUEyRTtBQVMzRTs7R0FFRztBQUNILE1BQWEsb0JBQW9CO0lBSS9CLFlBQVksS0FBZ0M7UUFINUIsWUFBTyxHQUFHLElBQUksNkJBQWtCLEVBQXFCLENBQUM7UUFDdEQsV0FBTSxHQUFHLElBQUksNkJBQWtCLEVBQXFCLENBQUM7UUFHbkUsY0FBYztRQUNkLEtBQUssTUFBTSxXQUFXLElBQUksS0FBSyxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUNsRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7UUFDRCxLQUFLLE1BQU0sVUFBVSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDL0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBRUQsaUJBQWlCO1FBQ2pCLEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUNELEtBQUssTUFBTSxTQUFTLElBQUksS0FBSyxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLE1BQU0sR0FBRyxHQUFlLEVBQUUsQ0FBQztRQUUzQixNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXRCLG1IQUFtSDtRQUNuSCxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQWUsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBdUIsRUFBRSxFQUFFLENBQUM7WUFDbEYsT0FBTztZQUNQLElBQUksQ0FBQyxPQUFPO1lBQ1osS0FBSztZQUNMLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFO1NBQ3BCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVELHVDQUF1QztRQUN2QyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhFLHlEQUF5RDtRQUN6RCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUEscUJBQWMsRUFBQyxDQUFDLEdBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXpCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLElBQUEsMEJBQW1CLEVBQUM7WUFDekIsb0JBQW9CLEVBQUUsSUFBQSxrQkFBVyxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLG1CQUFtQixFQUFFLElBQUEsa0JBQVcsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM1RSxtQkFBbUIsRUFBRSxJQUFBLGtCQUFXLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDNUUsa0JBQWtCLEVBQUUsSUFBQSxrQkFBVyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQzNFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVk7ZUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDbEMsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFVLEVBQUUsU0FBaUI7UUFDbkQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUFDLE9BQU8sRUFBRSxDQUFDO1FBQUMsQ0FBQztRQUVuRCwyREFBMkQ7UUFFM0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLFNBQVMsR0FBRyxXQUFXLENBQUM7UUFDM0MsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBQSxvQ0FBZ0IsRUFBQyxDQUFDLENBQUMsQ0FBQztZQUNyQywyREFBMkQ7WUFDM0QsT0FBTyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSx1Q0FBaUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQWE7UUFDcEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQUMsT0FBTyxFQUFFLENBQUM7UUFBQyxDQUFDO1FBRTdCLDJEQUEyRDtRQUUzRCxPQUFPLENBQUMsSUFBSSx1Q0FBaUIsQ0FBQyxJQUFBLG9DQUFnQixFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0NBQ0Y7QUFyR0Qsb0RBcUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgUnVsZUpzb24sIFNlY3VyaXR5R3JvdXBSdWxlIH0gZnJvbSAnLi9zZWN1cml0eS1ncm91cC1ydWxlJztcbmltcG9ydCB7IFByb3BlcnR5Q2hhbmdlLCBSZXNvdXJjZUNoYW5nZSB9IGZyb20gJy4uL2RpZmYvdHlwZXMnO1xuaW1wb3J0IHsgRGlmZmFibGVDb2xsZWN0aW9uIH0gZnJvbSAnLi4vZGlmZmFibGUnO1xuaW1wb3J0IHsgcmVuZGVySW50cmluc2ljcyB9IGZyb20gJy4uL3JlbmRlci1pbnRyaW5zaWNzJztcbmltcG9ydCB7IGRlZXBSZW1vdmVVbmRlZmluZWQsIGRyb3BJZkVtcHR5LCBtYWtlQ29tcGFyYXRvciB9IGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBDaGFuZ2VzUHJvcHMge1xuICBpbmdyZXNzUnVsZVByb3BlcnR5Q2hhbmdlczogUHJvcGVydHlDaGFuZ2VbXTtcbiAgaW5ncmVzc1J1bGVSZXNvdXJjZUNoYW5nZXM6IFJlc291cmNlQ2hhbmdlW107XG4gIGVncmVzc1J1bGVSZXNvdXJjZUNoYW5nZXM6IFJlc291cmNlQ2hhbmdlW107XG4gIGVncmVzc1J1bGVQcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5Q2hhbmdlW107XG59XG5cbi8qKlxuICogQ2hhbmdlcyB0byBJQU0gc3RhdGVtZW50c1xuICovXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlHcm91cENoYW5nZXMge1xuICBwdWJsaWMgcmVhZG9ubHkgaW5ncmVzcyA9IG5ldyBEaWZmYWJsZUNvbGxlY3Rpb248U2VjdXJpdHlHcm91cFJ1bGU+KCk7XG4gIHB1YmxpYyByZWFkb25seSBlZ3Jlc3MgPSBuZXcgRGlmZmFibGVDb2xsZWN0aW9uPFNlY3VyaXR5R3JvdXBSdWxlPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTZWN1cml0eUdyb3VwQ2hhbmdlc1Byb3BzKSB7XG4gICAgLy8gR3JvdXAgcnVsZXNcbiAgICBmb3IgKGNvbnN0IGluZ3Jlc3NQcm9wIG9mIHByb3BzLmluZ3Jlc3NSdWxlUHJvcGVydHlDaGFuZ2VzKSB7XG4gICAgICB0aGlzLmluZ3Jlc3MuYWRkT2xkKC4uLnRoaXMucmVhZElubGluZVJ1bGVzKGluZ3Jlc3NQcm9wLm9sZFZhbHVlLCBpbmdyZXNzUHJvcC5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgdGhpcy5pbmdyZXNzLmFkZE5ldyguLi50aGlzLnJlYWRJbmxpbmVSdWxlcyhpbmdyZXNzUHJvcC5uZXdWYWx1ZSwgaW5ncmVzc1Byb3AucmVzb3VyY2VMb2dpY2FsSWQpKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBlZ3Jlc3NQcm9wIG9mIHByb3BzLmVncmVzc1J1bGVQcm9wZXJ0eUNoYW5nZXMpIHtcbiAgICAgIHRoaXMuZWdyZXNzLmFkZE9sZCguLi50aGlzLnJlYWRJbmxpbmVSdWxlcyhlZ3Jlc3NQcm9wLm9sZFZhbHVlLCBlZ3Jlc3NQcm9wLnJlc291cmNlTG9naWNhbElkKSk7XG4gICAgICB0aGlzLmVncmVzcy5hZGROZXcoLi4udGhpcy5yZWFkSW5saW5lUnVsZXMoZWdyZXNzUHJvcC5uZXdWYWx1ZSwgZWdyZXNzUHJvcC5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgIH1cblxuICAgIC8vIFJ1bGUgcmVzb3VyY2VzXG4gICAgZm9yIChjb25zdCBpbmdyZXNzUmVzIG9mIHByb3BzLmluZ3Jlc3NSdWxlUmVzb3VyY2VDaGFuZ2VzKSB7XG4gICAgICB0aGlzLmluZ3Jlc3MuYWRkT2xkKC4uLnRoaXMucmVhZFJ1bGVSZXNvdXJjZShpbmdyZXNzUmVzLm9sZFByb3BlcnRpZXMpKTtcbiAgICAgIHRoaXMuaW5ncmVzcy5hZGROZXcoLi4udGhpcy5yZWFkUnVsZVJlc291cmNlKGluZ3Jlc3NSZXMubmV3UHJvcGVydGllcykpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVncmVzc1JlcyBvZiBwcm9wcy5lZ3Jlc3NSdWxlUmVzb3VyY2VDaGFuZ2VzKSB7XG4gICAgICB0aGlzLmVncmVzcy5hZGRPbGQoLi4udGhpcy5yZWFkUnVsZVJlc291cmNlKGVncmVzc1Jlcy5vbGRQcm9wZXJ0aWVzKSk7XG4gICAgICB0aGlzLmVncmVzcy5hZGROZXcoLi4udGhpcy5yZWFkUnVsZVJlc291cmNlKGVncmVzc1Jlcy5uZXdQcm9wZXJ0aWVzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbmdyZXNzLmNhbGN1bGF0ZURpZmYoKTtcbiAgICB0aGlzLmVncmVzcy5jYWxjdWxhdGVEaWZmKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0NoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5ncmVzcy5oYXNDaGFuZ2VzIHx8IHRoaXMuZWdyZXNzLmhhc0NoYW5nZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3VtbWFyeSB0YWJsZSBvZiBjaGFuZ2VzXG4gICAqL1xuICBwdWJsaWMgc3VtbWFyaXplKCk6IHN0cmluZ1tdW10ge1xuICAgIGNvbnN0IHJldDogc3RyaW5nW11bXSA9IFtdO1xuXG4gICAgY29uc3QgaGVhZGVyID0gWycnLCAnR3JvdXAnLCAnRGlyJywgJ1Byb3RvY29sJywgJ1BlZXInXTtcblxuICAgIGNvbnN0IGluV29yZCA9ICdJbic7XG4gICAgY29uc3Qgb3V0V29yZCA9ICdPdXQnO1xuXG4gICAgLy8gUmVuZGVyIGEgc2luZ2xlIHJ1bGUgdG8gdGhlIHRhYmxlIChjdXJyaWVkIGZ1bmN0aW9uIHNvIHdlIGNhbiBtYXAgaXQgYWNyb3NzIHJ1bGVzIGVhc2lseS0tdGhhbmsgeW91IEphdmFTY3JpcHQhKVxuICAgIGNvbnN0IHJlbmRlclJ1bGUgPSAocGx1c01pbjogc3RyaW5nLCBpbk91dDogc3RyaW5nKSA9PiAocnVsZTogU2VjdXJpdHlHcm91cFJ1bGUpID0+IFtcbiAgICAgIHBsdXNNaW4sXG4gICAgICBydWxlLmdyb3VwSWQsXG4gICAgICBpbk91dCxcbiAgICAgIHJ1bGUuZGVzY3JpYmVQcm90b2NvbCgpLFxuICAgICAgcnVsZS5kZXNjcmliZVBlZXIoKSxcbiAgICBdLm1hcChzID0+IHBsdXNNaW4gPT09ICcrJyA/IGNoYWxrLmdyZWVuKHMpIDogY2hhbGsucmVkKHMpKTtcblxuICAgIC8vIEZpcnN0IGdlbmVyYXRlIGFsbCBsaW5lcywgc29ydCBsYXRlclxuICAgIHJldC5wdXNoKC4uLnRoaXMuaW5ncmVzcy5hZGRpdGlvbnMubWFwKHJlbmRlclJ1bGUoJysnLCBpbldvcmQpKSk7XG4gICAgcmV0LnB1c2goLi4udGhpcy5lZ3Jlc3MuYWRkaXRpb25zLm1hcChyZW5kZXJSdWxlKCcrJywgb3V0V29yZCkpKTtcbiAgICByZXQucHVzaCguLi50aGlzLmluZ3Jlc3MucmVtb3ZhbHMubWFwKHJlbmRlclJ1bGUoJy0nLCBpbldvcmQpKSk7XG4gICAgcmV0LnB1c2goLi4udGhpcy5lZ3Jlc3MucmVtb3ZhbHMubWFwKHJlbmRlclJ1bGUoJy0nLCBvdXRXb3JkKSkpO1xuXG4gICAgLy8gU29ydCBieSBncm91cCBuYW1lIHRoZW4gaW5ncmVzcy9lZ3Jlc3MgKGluZ3Jlc3MgZmlyc3QpXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV0sIHJvd1syXS5pbmRleE9mKGluV29yZCkgPiAtMSA/IDAgOiAxXSkpO1xuXG4gICAgcmV0LnNwbGljZSgwLCAwLCBoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pzb24oKTogU2VjdXJpdHlHcm91cENoYW5nZXNKc29uIHtcbiAgICByZXR1cm4gZGVlcFJlbW92ZVVuZGVmaW5lZCh7XG4gICAgICBpbmdyZXNzUnVsZUFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5pbmdyZXNzLmFkZGl0aW9ucy5tYXAocyA9PiBzLnRvSnNvbigpKSksXG4gICAgICBpbmdyZXNzUnVsZVJlbW92YWxzOiBkcm9wSWZFbXB0eSh0aGlzLmluZ3Jlc3MucmVtb3ZhbHMubWFwKHMgPT4gcy50b0pzb24oKSkpLFxuICAgICAgZWdyZXNzUnVsZUFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5lZ3Jlc3MuYWRkaXRpb25zLm1hcChzID0+IHMudG9Kc29uKCkpKSxcbiAgICAgIGVncmVzc1J1bGVSZW1vdmFsczogZHJvcElmRW1wdHkodGhpcy5lZ3Jlc3MucmVtb3ZhbHMubWFwKHMgPT4gcy50b0pzb24oKSkpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBydWxlc0FkZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluZ3Jlc3MuaGFzQWRkaXRpb25zXG4gICAgICAgIHx8IHRoaXMuZWdyZXNzLmhhc0FkZGl0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgcmVhZElubGluZVJ1bGVzKHJ1bGVzOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU2VjdXJpdHlHcm91cFJ1bGVbXSB7XG4gICAgaWYgKCFydWxlcyB8fCAhQXJyYXkuaXNBcnJheShydWxlcykpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICAvLyBVbkNsb3VkRm9ybWF0aW9uIHNvIHRoZSBwYXJzZXIgd29ya3MgaW4gYW4gZWFzaWVyIGRvbWFpblxuXG4gICAgY29uc3QgcmVmID0gJyR7JyArIGxvZ2ljYWxJZCArICcuR3JvdXBJZH0nO1xuICAgIHJldHVybiBydWxlcy5mbGF0TWFwKChyOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJlbmRlcmVkID0gcmVuZGVySW50cmluc2ljcyhyKTtcbiAgICAgIC8vIFNlY3VyaXR5R3JvdXBSdWxlIGlzIG5vdCByb2J1c3QgYWdhaW5zdCB1bnBhcnNlZCBvYmplY3RzXG4gICAgICByZXR1cm4gdHlwZW9mIHJlbmRlcmVkID09PSAnb2JqZWN0JyA/IFtuZXcgU2VjdXJpdHlHcm91cFJ1bGUocmVuZGVyZWQsIHJlZildIDogW107XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRSdWxlUmVzb3VyY2UocmVzb3VyY2U6IGFueSk6IFNlY3VyaXR5R3JvdXBSdWxlW10ge1xuICAgIGlmICghcmVzb3VyY2UpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICAvLyBVbkNsb3VkRm9ybWF0aW9uIHNvIHRoZSBwYXJzZXIgd29ya3MgaW4gYW4gZWFzaWVyIGRvbWFpblxuXG4gICAgcmV0dXJuIFtuZXcgU2VjdXJpdHlHcm91cFJ1bGUocmVuZGVySW50cmluc2ljcyhyZXNvdXJjZSkpXTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBDaGFuZ2VzSnNvbiB7XG4gIGluZ3Jlc3NSdWxlQWRkaXRpb25zPzogUnVsZUpzb25bXTtcbiAgaW5ncmVzc1J1bGVSZW1vdmFscz86IFJ1bGVKc29uW107XG4gIGVncmVzc1J1bGVBZGRpdGlvbnM/OiBSdWxlSnNvbltdO1xuICBlZ3Jlc3NSdWxlUmVtb3ZhbHM/OiBSdWxlSnNvbltdO1xufVxuIl19
@@ -93,4 +93,4 @@ function findFirst(obj, keys, fn) {
93
93
  }
94
94
  return undefined;
95
95
  }
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAtcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlY3VyaXR5LWdyb3VwLXJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxNQUFhLGlCQUFpQjtJQTBCNUIsWUFBWSxVQUFlLEVBQUUsUUFBaUI7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQztRQUNuRSxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxRQUFRLElBQUksV0FBVyxDQUFDLENBQUMsNEJBQTRCO1FBRTFGLElBQUksQ0FBQyxJQUFJO1lBQ0wsU0FBUyxDQUFDLFVBQVUsRUFDbEIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQ3RCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQWlCLENBQUEsQ0FBQzs7b0JBRWxELFNBQVMsQ0FBQyxVQUFVLEVBQ2xCLENBQUMsNEJBQTRCLEVBQUUsdUJBQXVCLENBQUMsRUFDdkQsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUF3QixDQUFBLENBQUM7O29CQUUxRixTQUFTLENBQUMsVUFBVSxFQUNsQixDQUFDLHlCQUF5QixFQUFFLG9CQUFvQixDQUFDLEVBQ2pELENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQXFCLENBQUEsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBd0I7UUFDbkMs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YyxDQUFDLFlBQVksQ0FBQztLQUM1RTtBQUNILENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBSSxHQUFRLEVBQUUsSUFBYyxFQUFFLEVBQW9CO0lBQ2xFLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1FBQ3RCLElBQUk7WUFDRixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDckI7U0FDRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsUUFBUSxDQUFDO1NBQ1Y7S0FDRjtJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgc2luZ2xlIHNlY3VyaXR5IGdyb3VwIHJ1bGUsIGVpdGhlciBlZ3Jlc3Mgb3IgaW5ncmVzc1xuICovXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlHcm91cFJ1bGUge1xuICAvKipcbiAgICogR3JvdXAgSUQgb2YgdGhlIGdyb3VwIHRoaXMgcnVsZSBhcHBsaWVzIHRvXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JvdXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUCBwcm90b2NvbCB0aGlzIHJ1bGUgYXBwbGllcyB0b1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwUHJvdG9jb2w6IHN0cmluZztcblxuICAvKipcbiAgICogU3RhcnQgb2YgcG9ydCByYW5nZSB0aGlzIHJ1bGUgYXBwbGllcyB0bywgb3IgSUNNUCB0eXBlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZnJvbVBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEVuZCBvZiBwb3J0IHJhbmdlIHRoaXMgcnVsZSBhcHBsaWVzIHRvLCBvciBJQ01QIGNvZGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0b1BvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBlZXIgb2YgdGhpcyBydWxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGVlcj86IFJ1bGVQZWVyO1xuXG4gIGNvbnN0cnVjdG9yKHJ1bGVPYmplY3Q6IGFueSwgZ3JvdXBSZWY/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlwUHJvdG9jb2wgPSBydWxlT2JqZWN0LklwUHJvdG9jb2w/LnRvU3RyaW5nKCkgfHwgJyp1bmtub3duKic7XG4gICAgdGhpcy5mcm9tUG9ydCA9IHJ1bGVPYmplY3QuRnJvbVBvcnQ7XG4gICAgdGhpcy50b1BvcnQgPSBydWxlT2JqZWN0LlRvUG9ydDtcbiAgICB0aGlzLmdyb3VwSWQgPSBydWxlT2JqZWN0Lkdyb3VwSWQgfHwgZ3JvdXBSZWYgfHwgJyp1bmtub3duKic7IC8vIEluIGNhc2Ugb2YgYW4gaW5saW5lIHJ1bGVcblxuICAgIHRoaXMucGVlciA9XG4gICAgICAgIGZpbmRGaXJzdChydWxlT2JqZWN0LFxuICAgICAgICAgIFsnQ2lkcklwJywgJ0NpZHJJcHY2J10sXG4gICAgICAgICAgKGlwKSA9PiAoeyBraW5kOiAnY2lkci1pcCcsIGlwIH0gYXMgQ2lkcklwUGVlcikpXG4gICAgICAgIHx8XG4gICAgICAgIGZpbmRGaXJzdChydWxlT2JqZWN0LFxuICAgICAgICAgIFsnRGVzdGluYXRpb25TZWN1cml0eUdyb3VwSWQnLCAnU291cmNlU2VjdXJpdHlHcm91cElkJ10sXG4gICAgICAgICAgKHNlY3VyaXR5R3JvdXBJZCkgPT4gKHsga2luZDogJ3NlY3VyaXR5LWdyb3VwJywgc2VjdXJpdHlHcm91cElkIH0gYXMgU2VjdXJpdHlHcm91cFBlZXIpKVxuICAgICAgICB8fFxuICAgICAgICBmaW5kRmlyc3QocnVsZU9iamVjdCxcbiAgICAgICAgICBbJ0Rlc3RpbmF0aW9uUHJlZml4TGlzdElkJywgJ1NvdXJjZVByZWZpeExpc3RJZCddLFxuICAgICAgICAgIChwcmVmaXhMaXN0SWQpID0+ICh7IGtpbmQ6ICdwcmVmaXgtbGlzdCcsIHByZWZpeExpc3RJZCB9IGFzIFByZWZpeExpc3RQZWVyKSk7XG4gIH1cblxuICBwdWJsaWMgZXF1YWwob3RoZXI6IFNlY3VyaXR5R3JvdXBSdWxlKSB7XG4gICAgcmV0dXJuIHRoaXMuaXBQcm90b2NvbCA9PT0gb3RoZXIuaXBQcm90b2NvbFxuICAgICAgICAmJiB0aGlzLmZyb21Qb3J0ID09PSBvdGhlci5mcm9tUG9ydFxuICAgICAgICAmJiB0aGlzLnRvUG9ydCA9PT0gb3RoZXIudG9Qb3J0XG4gICAgICAgICYmIHBlZXJFcXVhbCh0aGlzLnBlZXIsIG90aGVyLnBlZXIpO1xuICB9XG5cbiAgcHVibGljIGRlc2NyaWJlUHJvdG9jb2woKSB7XG4gICAgaWYgKHRoaXMuaXBQcm90b2NvbCA9PT0gJy0xJykgeyByZXR1cm4gJ0V2ZXJ5dGhpbmcnOyB9XG5cbiAgICBjb25zdCBpcFByb3RvY29sID0gdGhpcy5pcFByb3RvY29sLnRvVXBwZXJDYXNlKCk7XG5cbiAgICBpZiAodGhpcy5mcm9tUG9ydCA9PT0gLTEpIHsgcmV0dXJuIGBBbGwgJHtpcFByb3RvY29sfWA7IH1cbiAgICBpZiAodGhpcy5mcm9tUG9ydCA9PT0gdGhpcy50b1BvcnQpIHsgcmV0dXJuIGAke2lwUHJvdG9jb2x9ICR7dGhpcy5mcm9tUG9ydH1gOyB9XG4gICAgcmV0dXJuIGAke2lwUHJvdG9jb2x9ICR7dGhpcy5mcm9tUG9ydH0tJHt0aGlzLnRvUG9ydH1gO1xuICB9XG5cbiAgcHVibGljIGRlc2NyaWJlUGVlcigpIHtcbiAgICBpZiAodGhpcy5wZWVyKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMucGVlci5raW5kKSB7XG4gICAgICAgIGNhc2UgJ2NpZHItaXAnOlxuICAgICAgICAgIGlmICh0aGlzLnBlZXIuaXAgPT09ICcwLjAuMC4wLzAnKSB7IHJldHVybiAnRXZlcnlvbmUgKElQdjQpJzsgfVxuICAgICAgICAgIGlmICh0aGlzLnBlZXIuaXAgPT09ICc6Oi8wJykgeyByZXR1cm4gJ0V2ZXJ5b25lIChJUHY2KSc7IH1cbiAgICAgICAgICByZXR1cm4gYCR7dGhpcy5wZWVyLmlwfWA7XG4gICAgICAgIGNhc2UgJ3ByZWZpeC1saXN0JzogcmV0dXJuIGAke3RoaXMucGVlci5wcmVmaXhMaXN0SWR9YDtcbiAgICAgICAgY2FzZSAnc2VjdXJpdHktZ3JvdXAnOiByZXR1cm4gYCR7dGhpcy5wZWVyLnNlY3VyaXR5R3JvdXBJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnPyc7XG4gIH1cblxuICBwdWJsaWMgdG9Kc29uKCk6IFJ1bGVKc29uIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cElkLFxuICAgICAgaXBQcm90b2NvbDogdGhpcy5pcFByb3RvY29sLFxuICAgICAgZnJvbVBvcnQ6IHRoaXMuZnJvbVBvcnQsXG4gICAgICB0b1BvcnQ6IHRoaXMudG9Qb3J0LFxuICAgICAgcGVlcjogdGhpcy5wZWVyLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaWRySXBQZWVyIHtcbiAga2luZDogJ2NpZHItaXAnO1xuICBpcDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBQZWVyIHtcbiAga2luZDogJ3NlY3VyaXR5LWdyb3VwJztcbiAgc2VjdXJpdHlHcm91cElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlZml4TGlzdFBlZXIge1xuICBraW5kOiAncHJlZml4LWxpc3QnO1xuICBwcmVmaXhMaXN0SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUnVsZVBlZXIgPSBDaWRySXBQZWVyIHwgU2VjdXJpdHlHcm91cFBlZXIgfCBQcmVmaXhMaXN0UGVlcjtcblxuZnVuY3Rpb24gcGVlckVxdWFsKGE/OiBSdWxlUGVlciwgYj86IFJ1bGVQZWVyKSB7XG4gIGlmICgoYSA9PT0gdW5kZWZpbmVkKSAhPT0gKGIgPT09IHVuZGVmaW5lZCkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGlmIChhID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHRydWU7IH1cblxuICBpZiAoYS5raW5kICE9PSBiIS5raW5kKSB7IHJldHVybiBmYWxzZTsgfVxuICBzd2l0Y2ggKGEua2luZCkge1xuICAgIGNhc2UgJ2NpZHItaXAnOiByZXR1cm4gYS5pcCA9PT0gKGIgYXMgdHlwZW9mIGEpLmlwO1xuICAgIGNhc2UgJ3NlY3VyaXR5LWdyb3VwJzogcmV0dXJuIGEuc2VjdXJpdHlHcm91cElkID09PSAoYiBhcyB0eXBlb2YgYSkuc2VjdXJpdHlHcm91cElkO1xuICAgIGNhc2UgJ3ByZWZpeC1saXN0JzogcmV0dXJuIGEucHJlZml4TGlzdElkID09PSAoYiBhcyB0eXBlb2YgYSkucHJlZml4TGlzdElkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRGaXJzdDxUPihvYmo6IGFueSwga2V5czogc3RyaW5nW10sIGZuOiAoeDogc3RyaW5nKSA9PiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGtleSBpbiBvYmopIHtcbiAgICAgICAgcmV0dXJuIGZuKG9ialtrZXldKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWxlSnNvbiB7XG4gIGdyb3VwSWQ6IHN0cmluZztcbiAgaXBQcm90b2NvbDogc3RyaW5nO1xuICBmcm9tUG9ydD86IG51bWJlcjtcbiAgdG9Qb3J0PzogbnVtYmVyO1xuICBwZWVyPzogUnVsZVBlZXI7XG59Il19
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAtcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlY3VyaXR5LWdyb3VwLXJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxNQUFhLGlCQUFpQjtJQTBCNUIsWUFBWSxVQUFlLEVBQUUsUUFBaUI7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQztRQUNuRSxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxRQUFRLElBQUksV0FBVyxDQUFDLENBQUMsNEJBQTRCO1FBRTFGLElBQUksQ0FBQyxJQUFJO1lBQ0wsU0FBUyxDQUFDLFVBQVUsRUFDbEIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQ3RCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQWlCLENBQUEsQ0FBQzs7b0JBRWxELFNBQVMsQ0FBQyxVQUFVLEVBQ2xCLENBQUMsNEJBQTRCLEVBQUUsdUJBQXVCLENBQUMsRUFDdkQsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUF3QixDQUFBLENBQUM7O29CQUUxRixTQUFTLENBQUMsVUFBVSxFQUNsQixDQUFDLHlCQUF5QixFQUFFLG9CQUFvQixDQUFDLEVBQ2pELENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQXFCLENBQUEsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBd0I7UUFDbkMs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LENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxLQUFNLENBQWMsQ0FBQyxlQUFlLENBQUM7UUFDcEYsS0FBSyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEtBQU0sQ0FBYyxDQUFDLFlBQVksQ0FBQztJQUM3RSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFJLEdBQVEsRUFBRSxJQUFjLEVBQUUsRUFBb0I7SUFDbEUsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUM7WUFDSCxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDZixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxRQUFRLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgc2luZ2xlIHNlY3VyaXR5IGdyb3VwIHJ1bGUsIGVpdGhlciBlZ3Jlc3Mgb3IgaW5ncmVzc1xuICovXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlHcm91cFJ1bGUge1xuICAvKipcbiAgICogR3JvdXAgSUQgb2YgdGhlIGdyb3VwIHRoaXMgcnVsZSBhcHBsaWVzIHRvXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JvdXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUCBwcm90b2NvbCB0aGlzIHJ1bGUgYXBwbGllcyB0b1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwUHJvdG9jb2w6IHN0cmluZztcblxuICAvKipcbiAgICogU3RhcnQgb2YgcG9ydCByYW5nZSB0aGlzIHJ1bGUgYXBwbGllcyB0bywgb3IgSUNNUCB0eXBlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZnJvbVBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEVuZCBvZiBwb3J0IHJhbmdlIHRoaXMgcnVsZSBhcHBsaWVzIHRvLCBvciBJQ01QIGNvZGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0b1BvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBlZXIgb2YgdGhpcyBydWxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGVlcj86IFJ1bGVQZWVyO1xuXG4gIGNvbnN0cnVjdG9yKHJ1bGVPYmplY3Q6IGFueSwgZ3JvdXBSZWY/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlwUHJvdG9jb2wgPSBydWxlT2JqZWN0LklwUHJvdG9jb2w/LnRvU3RyaW5nKCkgfHwgJyp1bmtub3duKic7XG4gICAgdGhpcy5mcm9tUG9ydCA9IHJ1bGVPYmplY3QuRnJvbVBvcnQ7XG4gICAgdGhpcy50b1BvcnQgPSBydWxlT2JqZWN0LlRvUG9ydDtcbiAgICB0aGlzLmdyb3VwSWQgPSBydWxlT2JqZWN0Lkdyb3VwSWQgfHwgZ3JvdXBSZWYgfHwgJyp1bmtub3duKic7IC8vIEluIGNhc2Ugb2YgYW4gaW5saW5lIHJ1bGVcblxuICAgIHRoaXMucGVlciA9XG4gICAgICAgIGZpbmRGaXJzdChydWxlT2JqZWN0LFxuICAgICAgICAgIFsnQ2lkcklwJywgJ0NpZHJJcHY2J10sXG4gICAgICAgICAgKGlwKSA9PiAoeyBraW5kOiAnY2lkci1pcCcsIGlwIH0gYXMgQ2lkcklwUGVlcikpXG4gICAgICAgIHx8XG4gICAgICAgIGZpbmRGaXJzdChydWxlT2JqZWN0LFxuICAgICAgICAgIFsnRGVzdGluYXRpb25TZWN1cml0eUdyb3VwSWQnLCAnU291cmNlU2VjdXJpdHlHcm91cElkJ10sXG4gICAgICAgICAgKHNlY3VyaXR5R3JvdXBJZCkgPT4gKHsga2luZDogJ3NlY3VyaXR5LWdyb3VwJywgc2VjdXJpdHlHcm91cElkIH0gYXMgU2VjdXJpdHlHcm91cFBlZXIpKVxuICAgICAgICB8fFxuICAgICAgICBmaW5kRmlyc3QocnVsZU9iamVjdCxcbiAgICAgICAgICBbJ0Rlc3RpbmF0aW9uUHJlZml4TGlzdElkJywgJ1NvdXJjZVByZWZpeExpc3RJZCddLFxuICAgICAgICAgIChwcmVmaXhMaXN0SWQpID0+ICh7IGtpbmQ6ICdwcmVmaXgtbGlzdCcsIHByZWZpeExpc3RJZCB9IGFzIFByZWZpeExpc3RQZWVyKSk7XG4gIH1cblxuICBwdWJsaWMgZXF1YWwob3RoZXI6IFNlY3VyaXR5R3JvdXBSdWxlKSB7XG4gICAgcmV0dXJuIHRoaXMuaXBQcm90b2NvbCA9PT0gb3RoZXIuaXBQcm90b2NvbFxuICAgICAgICAmJiB0aGlzLmZyb21Qb3J0ID09PSBvdGhlci5mcm9tUG9ydFxuICAgICAgICAmJiB0aGlzLnRvUG9ydCA9PT0gb3RoZXIudG9Qb3J0XG4gICAgICAgICYmIHBlZXJFcXVhbCh0aGlzLnBlZXIsIG90aGVyLnBlZXIpO1xuICB9XG5cbiAgcHVibGljIGRlc2NyaWJlUHJvdG9jb2woKSB7XG4gICAgaWYgKHRoaXMuaXBQcm90b2NvbCA9PT0gJy0xJykgeyByZXR1cm4gJ0V2ZXJ5dGhpbmcnOyB9XG5cbiAgICBjb25zdCBpcFByb3RvY29sID0gdGhpcy5pcFByb3RvY29sLnRvVXBwZXJDYXNlKCk7XG5cbiAgICBpZiAodGhpcy5mcm9tUG9ydCA9PT0gLTEpIHsgcmV0dXJuIGBBbGwgJHtpcFByb3RvY29sfWA7IH1cbiAgICBpZiAodGhpcy5mcm9tUG9ydCA9PT0gdGhpcy50b1BvcnQpIHsgcmV0dXJuIGAke2lwUHJvdG9jb2x9ICR7dGhpcy5mcm9tUG9ydH1gOyB9XG4gICAgcmV0dXJuIGAke2lwUHJvdG9jb2x9ICR7dGhpcy5mcm9tUG9ydH0tJHt0aGlzLnRvUG9ydH1gO1xuICB9XG5cbiAgcHVibGljIGRlc2NyaWJlUGVlcigpIHtcbiAgICBpZiAodGhpcy5wZWVyKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMucGVlci5raW5kKSB7XG4gICAgICAgIGNhc2UgJ2NpZHItaXAnOlxuICAgICAgICAgIGlmICh0aGlzLnBlZXIuaXAgPT09ICcwLjAuMC4wLzAnKSB7IHJldHVybiAnRXZlcnlvbmUgKElQdjQpJzsgfVxuICAgICAgICAgIGlmICh0aGlzLnBlZXIuaXAgPT09ICc6Oi8wJykgeyByZXR1cm4gJ0V2ZXJ5b25lIChJUHY2KSc7IH1cbiAgICAgICAgICByZXR1cm4gYCR7dGhpcy5wZWVyLmlwfWA7XG4gICAgICAgIGNhc2UgJ3ByZWZpeC1saXN0JzogcmV0dXJuIGAke3RoaXMucGVlci5wcmVmaXhMaXN0SWR9YDtcbiAgICAgICAgY2FzZSAnc2VjdXJpdHktZ3JvdXAnOiByZXR1cm4gYCR7dGhpcy5wZWVyLnNlY3VyaXR5R3JvdXBJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnPyc7XG4gIH1cblxuICBwdWJsaWMgdG9Kc29uKCk6IFJ1bGVKc29uIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cElkLFxuICAgICAgaXBQcm90b2NvbDogdGhpcy5pcFByb3RvY29sLFxuICAgICAgZnJvbVBvcnQ6IHRoaXMuZnJvbVBvcnQsXG4gICAgICB0b1BvcnQ6IHRoaXMudG9Qb3J0LFxuICAgICAgcGVlcjogdGhpcy5wZWVyLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaWRySXBQZWVyIHtcbiAga2luZDogJ2NpZHItaXAnO1xuICBpcDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBQZWVyIHtcbiAga2luZDogJ3NlY3VyaXR5LWdyb3VwJztcbiAgc2VjdXJpdHlHcm91cElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlZml4TGlzdFBlZXIge1xuICBraW5kOiAncHJlZml4LWxpc3QnO1xuICBwcmVmaXhMaXN0SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUnVsZVBlZXIgPSBDaWRySXBQZWVyIHwgU2VjdXJpdHlHcm91cFBlZXIgfCBQcmVmaXhMaXN0UGVlcjtcblxuZnVuY3Rpb24gcGVlckVxdWFsKGE/OiBSdWxlUGVlciwgYj86IFJ1bGVQZWVyKSB7XG4gIGlmICgoYSA9PT0gdW5kZWZpbmVkKSAhPT0gKGIgPT09IHVuZGVmaW5lZCkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGlmIChhID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHRydWU7IH1cblxuICBpZiAoYS5raW5kICE9PSBiIS5raW5kKSB7IHJldHVybiBmYWxzZTsgfVxuICBzd2l0Y2ggKGEua2luZCkge1xuICAgIGNhc2UgJ2NpZHItaXAnOiByZXR1cm4gYS5pcCA9PT0gKGIgYXMgdHlwZW9mIGEpLmlwO1xuICAgIGNhc2UgJ3NlY3VyaXR5LWdyb3VwJzogcmV0dXJuIGEuc2VjdXJpdHlHcm91cElkID09PSAoYiBhcyB0eXBlb2YgYSkuc2VjdXJpdHlHcm91cElkO1xuICAgIGNhc2UgJ3ByZWZpeC1saXN0JzogcmV0dXJuIGEucHJlZml4TGlzdElkID09PSAoYiBhcyB0eXBlb2YgYSkucHJlZml4TGlzdElkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRGaXJzdDxUPihvYmo6IGFueSwga2V5czogc3RyaW5nW10sIGZuOiAoeDogc3RyaW5nKSA9PiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGtleSBpbiBvYmopIHtcbiAgICAgICAgcmV0dXJuIGZuKG9ialtrZXldKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWxlSnNvbiB7XG4gIGdyb3VwSWQ6IHN0cmluZztcbiAgaXBQcm90b2NvbDogc3RyaW5nO1xuICBmcm9tUG9ydD86IG51bWJlcjtcbiAgdG9Qb3J0PzogbnVtYmVyO1xuICBwZWVyPzogUnVsZVBlZXI7XG59Il19