@libs-ui/components-tags 0.2.315-0 → 0.2.316-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.
@@ -7,13 +7,13 @@ export class LibsUiComponentsTagsGetColorPipe {
7
7
  return {};
8
8
  }
9
9
  let color = get(style, 'color');
10
- let backgroundColor = get(style, 'backgroundColor') || get(style, 'background');
10
+ let backgroundColor = (get(style, 'backgroundColor') || get(style, 'background'));
11
11
  if (color && color.includes('rgb') && color.match(/d+/g)?.length) {
12
- const [red, green, blue] = color.match(/d+/g);
12
+ const [red, green, blue] = Array.from(color.match(/d+/g) || []);
13
13
  color = rgbToHex({ red, green, blue });
14
14
  }
15
15
  if (backgroundColor && backgroundColor.includes('rgb') && backgroundColor.match(/\d+/g)?.length) {
16
- const [red, green, blue] = backgroundColor.match(/\d+/g);
16
+ const [red, green, blue] = Array.from(backgroundColor.match(/\d+/g) || []);
17
17
  backgroundColor = rgbToHex({ red, green, blue });
18
18
  }
19
19
  if (color && /(^#)[a-z0-9]{3,6}/gi.test(color)) {
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37
37
  standalone: true,
38
38
  }]
39
39
  }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNvbG9yLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFncy9zcmMvcGlwZXMvZ2V0LWNvbG9yLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFNNUUsTUFBTSxPQUFPLGdDQUFnQztJQUMzQyxTQUFTLENBQUMsS0FBYyxFQUFFLE9BQW9CO1FBQzVDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxlQUFlLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDaEYsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2pFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxlQUFlLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2hHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekQsZUFBZSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBSSxLQUFLLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckUsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEYsQ0FBQztRQUNELElBQUksZUFBZSxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ25FLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzdFLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGlDQUFpQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzlFLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLDRDQUE0QyxFQUFFLDJCQUEyQixDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekksQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzt3R0F6QlUsZ0NBQWdDO3NHQUFoQyxnQ0FBZ0M7OzRGQUFoQyxnQ0FBZ0M7a0JBSjVDLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGtDQUFrQztvQkFDeEMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luLCBnZXQsIHJnYlRvSGV4IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdMaWJzVWlDb21wb25lbnRzVGFnc0dldENvbG9yUGlwZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNUYWdzR2V0Q29sb3JQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShzdHlsZTogdW5rbm93biwgZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGxldCBjb2xvciA9IGdldChzdHlsZSwgJ2NvbG9yJyk7XG4gICAgbGV0IGJhY2tncm91bmRDb2xvciA9IGdldChzdHlsZSwgJ2JhY2tncm91bmRDb2xvcicpIHx8IGdldChzdHlsZSwgJ2JhY2tncm91bmQnKTtcbiAgICBpZiAoY29sb3IgJiYgY29sb3IuaW5jbHVkZXMoJ3JnYicpICYmIGNvbG9yLm1hdGNoKC9kKy9nKT8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBbcmVkLCBncmVlbiwgYmx1ZV0gPSBjb2xvci5tYXRjaCgvZCsvZyk7XG4gICAgICBjb2xvciA9IHJnYlRvSGV4KHsgcmVkLCBncmVlbiwgYmx1ZSB9KTtcbiAgICB9XG4gICAgaWYgKGJhY2tncm91bmRDb2xvciAmJiBiYWNrZ3JvdW5kQ29sb3IuaW5jbHVkZXMoJ3JnYicpICYmIGJhY2tncm91bmRDb2xvci5tYXRjaCgvXFxkKy9nKT8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBbcmVkLCBncmVlbiwgYmx1ZV0gPSBiYWNrZ3JvdW5kQ29sb3IubWF0Y2goL1xcZCsvZyk7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb0hleCh7IHJlZCwgZ3JlZW4sIGJsdWUgfSk7XG4gICAgfVxuICAgIGlmIChjb2xvciAmJiAvKF4jKVthLXowLTldezMsNn0vZ2kudGVzdChjb2xvcikpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tbGlicy11aS10YWdzLWl0ZW0taWNvbi1kZWZhdWx0JywgY29sb3IpO1xuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXRhZ3MtaXRlbS1pY29uLWJhY2tncm91bmQtaG92ZXInLCBjb2xvcik7XG4gICAgfVxuICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IgJiYgLyheIylbYS16MC05XXszLDZ9L2dpLnRlc3QoYmFja2dyb3VuZENvbG9yKSkge1xuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXRhZ3MtaXRlbS1pY29uLWhvdmVyJywgYmFja2dyb3VuZENvbG9yKTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tbGlicy11aS10YWdzLWl0ZW0taWNvbi1hY3RpdmUnLCBiYWNrZ3JvdW5kQ29sb3IpO1xuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXRhZ3MtaXRlbS1pY29uLWJhY2tncm91bmQtYWN0aXZlJywgY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKGJhY2tncm91bmRDb2xvciwgNjApPy5saWdodCB8fCAnJyk7XG4gICAgfVxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNvbG9yLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFncy9zcmMvcGlwZXMvZ2V0LWNvbG9yLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFNNUUsTUFBTSxPQUFPLGdDQUFnQztJQUMzQyxTQUFTLENBQUMsS0FBYyxFQUFFLE9BQW9CO1FBQzVDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBVSxLQUFLLEVBQUUsT0FBTyxDQUFXLENBQUM7UUFDbkQsSUFBSSxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQVUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLElBQUksR0FBRyxDQUFVLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBVyxDQUFDO1FBQzlHLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNqRSxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEUsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxlQUFlLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2hHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMzRSxlQUFlLEdBQUcsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLEtBQUssSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBQ0QsSUFBSSxlQUFlLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDbkUsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsZ0NBQWdDLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDN0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsaUNBQWlDLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDOUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsNENBQTRDLEVBQUUsMkJBQTJCLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6SSxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO3dHQXpCVSxnQ0FBZ0M7c0dBQWhDLGdDQUFnQzs7NEZBQWhDLGdDQUFnQztrQkFKNUMsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsa0NBQWtDO29CQUN4QyxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb2xvclN0ZXBDb250cmFzdEZyb21PcmlnaW4sIGdldCwgcmdiVG9IZXggfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ0xpYnNVaUNvbXBvbmVudHNUYWdzR2V0Q29sb3JQaXBlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1RhZ3NHZXRDb2xvclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHN0eWxlOiB1bmtub3duLCBlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghc3R5bGUpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgbGV0IGNvbG9yID0gZ2V0PHVua25vd24+KHN0eWxlLCAnY29sb3InKSBhcyBzdHJpbmc7XG4gICAgbGV0IGJhY2tncm91bmRDb2xvciA9IChnZXQ8dW5rbm93bj4oc3R5bGUsICdiYWNrZ3JvdW5kQ29sb3InKSB8fCBnZXQ8dW5rbm93bj4oc3R5bGUsICdiYWNrZ3JvdW5kJykpIGFzIHN0cmluZztcbiAgICBpZiAoY29sb3IgJiYgY29sb3IuaW5jbHVkZXMoJ3JnYicpICYmIGNvbG9yLm1hdGNoKC9kKy9nKT8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBbcmVkLCBncmVlbiwgYmx1ZV0gPSBBcnJheS5mcm9tKGNvbG9yLm1hdGNoKC9kKy9nKSB8fCBbXSk7XG4gICAgICBjb2xvciA9IHJnYlRvSGV4KHsgcmVkLCBncmVlbiwgYmx1ZSB9KTtcbiAgICB9XG4gICAgaWYgKGJhY2tncm91bmRDb2xvciAmJiBiYWNrZ3JvdW5kQ29sb3IuaW5jbHVkZXMoJ3JnYicpICYmIGJhY2tncm91bmRDb2xvci5tYXRjaCgvXFxkKy9nKT8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBbcmVkLCBncmVlbiwgYmx1ZV0gPSBBcnJheS5mcm9tKGJhY2tncm91bmRDb2xvci5tYXRjaCgvXFxkKy9nKSB8fCBbXSk7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb0hleCh7IHJlZCwgZ3JlZW4sIGJsdWUgfSk7XG4gICAgfVxuICAgIGlmIChjb2xvciAmJiAvKF4jKVthLXowLTldezMsNn0vZ2kudGVzdChjb2xvcikpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tbGlicy11aS10YWdzLWl0ZW0taWNvbi1kZWZhdWx0JywgY29sb3IpO1xuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXRhZ3MtaXRlbS1pY29uLWJhY2tncm91bmQtaG92ZXInLCBjb2xvcik7XG4gICAgfVxuICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IgJiYgLyheIylbYS16MC05XXszLDZ9L2dpLnRlc3QoYmFja2dyb3VuZENvbG9yKSkge1xuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXRhZ3MtaXRlbS1pY29uLWhvdmVyJywgYmFja2dyb3VuZENvbG9yKTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tbGlicy11aS10YWdzLWl0ZW0taWNvbi1hY3RpdmUnLCBiYWNrZ3JvdW5kQ29sb3IpO1xuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXRhZ3MtaXRlbS1pY29uLWJhY2tncm91bmQtYWN0aXZlJywgY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKGJhY2tncm91bmRDb2xvciwgNjApPy5saWdodCB8fCAnJyk7XG4gICAgfVxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIl19
@@ -2,17 +2,17 @@
2
2
  import { NgStyle, NgTemplateOutlet } from '@angular/common';
3
3
  import { ChangeDetectionStrategy, Component, computed, effect, inject, input, model, output, signal, untracked, viewChild } from '@angular/core';
4
4
  import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
5
+ import { LibsUiComponentsClickOutsideDirective } from '@libs-ui/components-click-outside';
5
6
  import { LibsUiComponentsInputsInputComponent } from '@libs-ui/components-inputs-input';
6
7
  import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
7
8
  import { getFieldKeyByType, LibsUiComponentsListComponent } from '@libs-ui/components-list';
8
9
  import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
10
+ import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
9
11
  import { LibsUiHttpRequestService } from '@libs-ui/services-http-request';
10
12
  import { cloneDeep, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_PATTEN_VALID, escapeHtml, get, isNil, set, uuid } from '@libs-ui/utils';
11
13
  import { TranslateModule } from '@ngx-translate/core';
12
14
  import { debounceTime, Subject, takeUntil } from 'rxjs';
13
15
  import { LibsUiComponentsTagsGetColorPipe } from './pipes/get-color.pipe';
14
- import { LibsUiComponentsClickOutsideDirective } from '@libs-ui/components-click-outside';
15
- import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
16
16
  import * as i0 from "@angular/core";
17
17
  import * as i1 from "@ngx-translate/core";
18
18
  export class LibsUiComponentsTagsComponent {
@@ -236,7 +236,7 @@ export class LibsUiComponentsTagsComponent {
236
236
  updateFieldLabel(item) {
237
237
  const ref = get(item, 'ref') || item;
238
238
  const getValue = this.config()?.getValue;
239
- set(item, 'fieldLabel', `${get(ref, this.fieldLabel()) || ref.label || ref.name || ' '}`);
239
+ set(item, 'fieldLabel', `${get(ref, this.fieldLabel()) || get(ref, 'label') || get(ref, 'name') || ' '}`);
240
240
  if (getValue) {
241
241
  set(item, 'fieldLabel', getValue(ref) || ' ');
242
242
  }
@@ -778,4 +778,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
778
778
  LibsUiComponentsScrollOverlayDirective,
779
779
  ], template: "<div class=\"flex flex-col w-full h-full\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required\"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable() || loading() || loadingDetail()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable() || loading() || loadingDetail()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleActive]=\"labelConfig.toggleDisable || disable() || loading() || loadingDetail()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n <libs_ui-components-popover\n class=\"w-full h-full\"\n [ignoreShowPopover]=\"disable() || readonly() || !!config()?.ignoreShowList || false\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [elementRefCustom]=\"tagsEl\"\n [mode]=\"!config()?.ignoreInput ? 'click' : 'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [flagMouse]=\"flagMouse()\"\n [config]=\"{\n animationConfig: config()?.animationConfig || {},\n zIndex: zIndex(),\n widthByParent: true,\n parentBorderWidth: parentBorderWidth() ?? 0,\n maxHeight: 2048,\n maxWidth: 2048,\n direction: config()?.directionList || 'bottom',\n directionDistance: 2,\n template: !showListBellow() ? listViewEl : undefined,\n whiteTheme: true,\n ignoreArrow: true,\n classInclude: 'rounded-[4px] ' + classIncludePopover() + (!listConfig()?.ignoreShowDataWhenNotSearch || keySearch() ? ' libs-ui-border-general' : ''),\n position: { mode: 'start', distance: 0 },\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outEventPopoverContent)=\"handlerPopoverContentEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n <div\n class=\"relative\"\n [class.cursor-pointer]=\"!disable() && !readonly()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\">\n @if (config()?.uiLikeDropdown) {\n <i\n class=\"flex text-[16px] absolute right-[16px] top-[8px] libs-ui-icon-move-right rotate-90 z-[1]\"\n [class.text-[#6a7383]]=\"!readonly() && !disable()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n <div\n #tagsEl\n [class]=\"'libs-ui-tags ' + (config()?.classInclude || '') + (readonly() ? config()?.classCustomWhenReadOnly || ' libs-ui-readonly' : '')\"\n [class.libs-ui-tags-not-popup]=\"(!showList() && !showBorderActiveWhenFocusInput()) || (!focus() && showBorderActiveWhenFocusInput())\"\n [class.libs-ui-tags-error]=\"!!error() && !config()?.ignoreShowError\"\n [class.!pr-[32px]]=\"config()?.uiLikeDropdown\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [class.libs-ui-border-primary-general]=\"focus() && showBorderActiveWhenFocusInput()\"\n LibsUiComponentsClickOutsideDirective\n LibsUiComponentsScrollOverlayDirective\n (outOutside)=\"handlerClickOutside($event)\">\n @for (item of itemsSelected(); track item[fieldKey()]) {\n <div\n LibsUiComponentsPopoverDirective\n [type]=\"item?.tooltip?.type || 'other'\"\n [config]=\"item?.tooltip?.config || { zIndex: zIndex() + 2 }\"\n [ignoreShowPopover]=\"!item?.tooltip || item.tooltip.ignoreShowPopover\"\n [ngStyle]=\"item?.bullet || item?.ngStyles\"\n [class]=\"classIncludeTagItem() || ''\"\n [class.libs-ui-tags-readonly]=\"item.disableItem\"\n [class.libs-ui-tags-item]=\"!item.disableItem\"\n [class.cursor-default]=\"disable() || readonly()\"\n (pointerdown)=\"handlerClickTagItem($event)\">\n @if (fieldGetImage() || config()?.fieldGetImage; as fieldGetImage) {\n <div class=\"flex items-center justify-center h-full\">\n <libs_ui-components-avatar\n [classInclude]=\"classAvatarInclude() || config()?.classAvatarInclude || 'mr-[8px]'\"\n [size]=\"imageSize() || config()?.imageSize\"\n [linkAvatar]=\"item[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError() || config()?.linkImageError\"\n [idGenColor]=\"item[fieldGetTextAvatar() || config()?.fieldGetTextAvatar || '']\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace() || config()?.getLastTextAfterSpace\"\n [textAvatar]=\"item[fieldGetTextAvatar() || config()?.fieldGetTextAvatar || 'user']\" />\n </div>\n }\n <span\n class=\"libs-ui-font-h6r\"\n [innerHtml]=\"item.fieldLabel || ' ' | translate\"></span>\n @if (!disable() && !item.disableItem && !readonly()) {\n <div class=\"flex items-center justify-center ml-[8px]\">\n <i\n #iconCloseEl\n [attr.specificStyle]=\"!!(item?.bullet || item?.ngStyles)\"\n [class]=\"'flex text-[16px] ' + (classIconRemoveTagItem() || 'libs-ui-icon-close')\"\n [class.cursor-pointer]=\"!disable() && !loading() && !loadingDetail()\"\n [class.pointer-events-none]=\"disable() || loading() || loadingDetail()\"\n [ngStyle]=\"item?.bullet || item?.ngStyles | LibsUiComponentsTagsGetColorPipe: iconCloseEl\"\n (pointerdown)=\"handlerRemoveItemSelected($event, item)\"></i>\n </div>\n }\n </div>\n }\n @if (!singleSelected() || (singleSelected() && !itemsSelected().length)) {\n @if (!config()?.ignoreInput && !config()?.uiLikeDropdown && (!hiddenInputWhenReadonly() || (hiddenInputWhenReadonly() && !readonly()))) {\n <libs_ui-components-inputs-input\n class=\"grow\"\n [class.mb-[4px]]=\"itemsSelected().length\"\n [classInclude]=\"'w-full bg-transparent ' + (config()?.classInputInclude || 'px-[4px] min-w-[30px]')\"\n [defaultHeight]=\"24\"\n [placeholder]=\"readonly() ? '' : placeholder() || 'i18n_import_content'\"\n [noBorder]=\"true\"\n [(value)]=\"valueInput\"\n [disable]=\"disable() || loading() || loadingDetail() || disableWhenMaxItem()\"\n [readonly]=\"readonly()\"\n (outEnterEvent)=\"handlerEnterEvent()\"\n (valueChange)=\"handlerValueChangeSearch($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurEvent($event)\"\n (outFunctionsControl)=\"handlerInputFunctionControl($event)\" />\n }\n @if (config()?.ignoreInput && config()?.uiLikeDropdown && !itemsSelected().length) {\n <div\n class=\"flex items-center pb-[4px] pt-[2px] ml-[11px] libs-ui-font-h5r\"\n [class.text-[#9ca2ad]]=\"disable()\">\n {{ placeholder() || 'i18n_select_value' | translate }}\n </div>\n }\n }\n </div>\n @if (error() && !config()?.ignoreShowError) {\n <div class=\"text-[#ee2d41] libs-ui-font-h7r mt-[8px]\">{{ error()?.message || ' ' | translate: error()?.interpolateParams || {} }}</div>\n }\n </div>\n </libs_ui-components-popover>\n</div>\n@if (showListBellow()) {\n <ng-container *ngTemplateOutlet=\"listViewEl\"></ng-container>\n}\n<ng-template #listViewEl>\n @if (listConfig(); as listConfig) {\n <libs_ui-components-list\n [searchConfig]=\"listSearchConfig() || { classInclude: 'hidden', iconLeftClass: 'hidden' }\"\n [isSearchOnline]=\"isSearchOnline()\"\n [zIndex]=\"zIndex()\"\n [keySearch]=\"keySearch()\"\n [config]=\"listConfig\"\n [disable]=\"disable() || loadingDetail() || disableWhenMaxItem()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"listMaxItemShow() || 6\"\n [multiKeySelected]=\"keysSelected()\"\n [clickExactly]=\"false\"\n [keysHiddenItem]=\"keysHiddenItem()\"\n [keysDisableItem]=\"listKeyDisable()\"\n [dividerClassInclude]=\"listDividerClassInclude() ?? 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundListCustom()\"\n [functionGetItemsAutoAddList]=\"functionGetItemAutoAddList()\"\n [hiddenInputSearch]=\"listHiddenInputSearchWhenHasSearchConfig()\"\n (outFunctionsControl)=\"handlerFunctionControlList($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoading($event)\" />\n }\n</ng-template>\n", styles: [".libs-ui-tags{position:relative;display:flex;flex-wrap:wrap;border:1px solid var(--libs-ui-color-default, #226ff5);max-height:100px;overflow:auto;border-radius:4px;padding:3px 0 0 4px;min-height:32px}.libs-ui-tags-not-popup{border:1px solid #e6e7ea}.libs-ui-tags-error{border-color:#ff5454}.libs-ui-tags .libs-ui-tags-item{display:flex;align-items:center;margin:0 4px 3px 0;padding:4px 8px;color:var(--libs-ui-color-default, #226ff5);border-radius:20px;background-color:var(--libs-ui-color-light-2, #e9f1fe);word-break:break-word!important;overflow-wrap:break-word!important;cursor:default}.libs-ui-tags .libs-ui-tags-item i[class*=libs-ui-icon-],.libs-ui-tags .libs-ui-tags-item i[class*=icon-font-3rd]{border-radius:50%}.libs-ui-tags .libs-ui-tags-item i[class*=libs-ui-icon-]:before,.libs-ui-tags .libs-ui-tags-item i[class*=icon-font-3rd]:before{border-radius:50%;font-size:16px;color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tags .libs-ui-tags-item i[class*=libs-ui-icon-]:hover:before,.libs-ui-tags .libs-ui-tags-item i[class*=icon-font-3rd]:hover:before{background:var(--libs-ui-color-light-6, #d3e2fd)}.libs-ui-tags .libs-ui-tags-item i[class*=libs-ui-icon-]:active:before,.libs-ui-tags .libs-ui-tags-item i[class*=icon-font-3rd]:active:before{background:var(--libs-ui-color-light-5, #bdd4fc)}.libs-ui-tags .libs-ui-tags-item [specificStyle=true] i[class*=libs-ui-icon-],.libs-ui-tags .libs-ui-tags-item [specificStyle=true] i[class*=icon-font-3rd]{border-radius:50%}.libs-ui-tags .libs-ui-tags-item [specificStyle=true] i[class*=libs-ui-icon-]:before,.libs-ui-tags .libs-ui-tags-item [specificStyle=true] i[class*=icon-font-3rd]:before{border-radius:50%;font-size:16px;color:var(--libs-ui-tags-item-icon-default)}.libs-ui-tags .libs-ui-tags-item [specificStyle=true] i[class*=libs-ui-icon-]:hover:before,.libs-ui-tags .libs-ui-tags-item [specificStyle=true] i[class*=icon-font-3rd]:hover:before{color:var(--libs-ui-tags-item-icon-hover);background:var(--libs-ui-tags-item-icon-background-hover)}.libs-ui-tags .libs-ui-tags-item [specificStyle=true] i[class*=libs-ui-icon-]:active:before,.libs-ui-tags .libs-ui-tags-item [specificStyle=true] i[class*=icon-font-3rd]:active:before{color:var(--libs-ui-tags-item-icon-active);background:var(--libs-ui-tags-item-icon-background-active)}.libs-ui-tags-disable{background:#f8f9fa;color:#9ca2ad}.libs-ui-tags-readonly{background:#f1ebfd;color:#7239ea;display:flex;align-items:center;margin:0 4px 4px 0;padding:4px 8px;border-radius:20px;word-break:break-word!important;overflow-wrap:break-word!important}\n"] }]
780
780
  }], ctorParameters: () => [] });
781
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFncy9zcmMvdGFncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFncy9zcmMvdGFncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hMLE9BQU8sRUFBRSwrQkFBK0IsRUFBMkIsTUFBTSw0QkFBNEIsQ0FBQztBQUd0RyxPQUFPLEVBQWtELG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHeEksT0FBTyxFQUFVLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUF1Riw2QkFBNkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2pMLE9BQU8sRUFBNEMsZ0NBQWdDLEVBQThDLE1BQU0sNkJBQTZCLENBQUM7QUFFckssT0FBTyxFQUFzQix3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsMEJBQTBCLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlKLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFP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LEdBQUcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3RFLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFJLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUMsQ0FBQztRQUNELFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUNuQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDckYsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUs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LENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1TyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqSixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlGLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNySCxJQUFJLENBQUMs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QzFDLHk2VEEwTEEsMmpGRDVKSSxlQUFlLDRGQUNmLGdCQUFnQixvSkFDaEIsT0FBTywyRUFDUCxxQ0FBcUMsMEhBQ3JDLDhCQUE4Qiw0cUJBQzlCLGdDQUFnQyxvZ0JBQ2hDLG9DQUFvQyx3aERBQ3BDLCtCQUErQiw2WEFDL0IsNkJBQTZCLHcvQkFDN0IsZ0NBQWdDLHlFQUNoQyxzQ0FBc0M7OzRGQUc3Qiw2QkFBNkI7a0JBckJ6QyxTQUFTOytCQUVFLHlCQUF5QixjQUd2QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AscUNBQXFDO3dCQUNyQyw4QkFBOEI7d0JBQzlCLGdDQUFnQzt3QkFDaEMsb0NBQW9DO3dCQUNwQywrQkFBK0I7d0JBQy9CLDZCQUE2Qjt3QkFDN0IsZ0NBQWdDO3dCQUNoQyxzQ0FBc0M7cUJBQ3ZDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCwgVFlQRV9TSVpFX0FWQVRBUl9DT05GSUcgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWF2YXRhcic7XG5pbXBvcnQgeyBJQnV0dG9uIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJVmFsaWRNYXhJdGVtU2VsZWN0ZWQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duJztcbmltcG9ydCB7IElGb2N1c0FuZEJsdXJFdmVudCwgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWlucHV0JztcbmltcG9ydCB7IElJbnB1dFNlYXJjaENvbmZpZyB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXNlYXJjaCc7XG5pbXBvcnQgeyBJVmFsaWRQYXR0ZXJuIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgSUxhYmVsLCBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxhYmVsJztcbmltcG9ydCB7IGdldEZpZWxkS2V5QnlUeXBlLCBJTGlzdENvbmZpZ0l0ZW0sIElMaXN0RGF0YUVtaXRLZXksIElMaXN0RGF0YUVtaXRNdWx0aUtleSwgSUxpc3RGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxpc3QnO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSwgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04sIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBJSHR0cFJlc3BvbnNlLCBJTWVzc2FnZVRyYW5zbGF0ZSB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgSUh0dHBSZXF1ZXN0Q29uZmlnLCBMaWJzVWlIdHRwUmVxdWVzdFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1odHRwLXJlcXVlc3QnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCwgRVJST1JfTUVTU0FHRV9QQVRURU5fVkFMSUQsIGVzY2FwZUh0bWwsIGdldCwgaXNOaWwsIHNldCwgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSVRhZ3NDb25maWcsIElUYWdzRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvdGFncy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1RhZ3NHZXRDb2xvclBpcGUgfSBmcm9tICcuL3BpcGVzL2dldC1jb2xvci5waXBlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNDbGlja091dHNpZGVEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWNsaWNrLW91dHNpZGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXRhZ3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFncy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi90YWdzLmNvbXBvbmVudC5zY3NzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBOZ1N0eWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNDbGlja091dHNpZGVEaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNMaXN0Q29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNUYWdzR2V0Q29sb3JQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzVGFnc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgZmxhZ01vdXNlID0gc2lnbmFsPElGbGFnTW91c2U+KHsgaXNNb3VzZUVudGVyOiBmYWxzZSwgaXNNb3VzZUVudGVyQ29udGVudDogZmFsc2UgfSk7XG4gIHByb3RlY3RlZCBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmdEZXRhaWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQga2V5U2VhcmNoID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgdmFsdWVJbnB1dCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGl0ZW1zU2VsZWN0ZWQgPSBzaWduYWw8QXJyYXk8YW55Pj4oW10pO1xuICBwcm90ZWN0ZWQgc2hvd0xpc3QgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgcG9zaXRpb25MaXN0ID0gc2lnbmFsPFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBrZXlzU2VsZWN0ZWQgPSBzaWduYWw8QXJyYXk8dW5rbm93bj4+KFtdKTtcbiAgcHJvdGVjdGVkIGRpc2FibGVXaGVuTWF4SXRlbSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBmb2N1cyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBlcnJvciA9IHNpZ25hbDxJTWVzc2FnZVRyYW5zbGF0ZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGZpZWxkS2V5ID0gc2lnbmFsPHN0cmluZz4oJ2lkJyk7XG4gIHByb3RlY3RlZCBmdW5jdGlvbkdldEl0ZW1BdXRvQWRkTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuZW50ZXJBdXRvQWRkVGFnVG9MaXN0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+XG4gICAgICB0aGlzLml0ZW1zU2VsZWN0ZWQoKVxuICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBgJHtnZXQoaXRlbSwgdGhpcy5maWVsZEtleSgpLCAnJyl9YC5zZWFyY2godGhpcy5mYWtlSWQoKSkgPT09IDApXG4gICAgICAgIC5yZXZlcnNlKCk7XG4gIH0pO1xuICBwcm90ZWN0ZWQgbGlzdEtleURpc2FibGUgPSBzaWduYWw8QXJyYXk8dW5rbm93bj4+KFtdKTtcblxuICBwcml2YXRlIGZha2VJZCA9IHNpZ25hbDxzdHJpbmc+KHV1aWQoKSk7XG4gIHByaXZhdGUgdGltZU91dEZsYWcgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHRpbWVPdXRDaGFuZ2VTZWFyY2ggPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHRpbWVPdXRDaGVja1ZpZXdDaGFuZ2UgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHRpbWVvdXRDbGlja091dHNpZGUgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGNsaWVudEhlaWdodCA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgaXRlbXNPZkxpc3QgPSBzaWduYWw8QXJyYXk8dW5rbm93bj4+KFtdKTtcbiAgcHJpdmF0ZSBrZXlTZWFyY2hDaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUga2V5U2VhcmNoQ2hhbmdlU3ViID0gc2lnbmFsPFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB0ZW1wSWdub3JlRW1pdCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcG9wb3ZlckZ1bmN0aW9uQ29udHJvbCA9IHNpZ25hbDxJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGlucHV0RnVuY3Rpb25Db250cm9sID0gc2lnbmFsPElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHR5cGVQb3BvdmVyID0gc2lnbmFsPFRZUEVfUE9QT1ZFUl9FVkVOVCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBsaXN0RnVuY3Rpb25Db250cm9sID0gc2lnbmFsPElMaXN0RnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgZGVmYXVsdEl0ZW1zU2VsZWN0ZWRDdXJyZW50ID0gc2lnbmFsPEFycmF5PHVua25vd24+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSBjbGFzc0luY2x1ZGVQb3BvdmVyID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBlbnRlckF1dG9BZGRUYWdUb0xpc3QgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNoZWNrRXhpdElzTGFiZWxJbmNsdWRlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgY2hlY2tFeGl0QnlGaWVsZHMgPSBpbnB1dDxBcnJheTxzdHJpbmc+PigpO1xuICByZWFkb25seSBwYXJlbnRCb3JkZXJXaWR0aCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgZnVuY3Rpb25DaGVja1Blcm1pc3Npb25DcmVhdGVUYWcgPSBpbnB1dDwoKSA9PiBib29sZWFuPigoKSA9PiB0cnVlKTtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRzID0gaW5wdXQ8SUh0dHBSZXF1ZXN0Q29uZmlnPigpO1xuICByZWFkb25seSBmaWVsZExhYmVsID0gaW5wdXQ8c3RyaW5nPignbGFiZWwnKTtcbiAgcmVhZG9ubHkgbWF4SXRlbUlucHV0ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAwMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMTAwMCB9KTtcbiAgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQ8SVRhZ3NDb25maWc+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxhYmVsQ29uZmlnID0gaW5wdXQ8SUxhYmVsPigpO1xuICByZWFkb25seSBkZWZhdWx0SXRlbXNTZWxlY3RlZCA9IGlucHV0PEFycmF5PHVua25vd24+PigpO1xuICByZWFkb25seSBkZWZhdWx0S2V5c1NlbGVjdGVkID0gaW5wdXQ8QXJyYXk8dW5rbm93bj4+KCk7XG4gIHJlYWRvbmx5IGxpc3RTZWFyY2hDb25maWcgPSBpbnB1dDxJSW5wdXRTZWFyY2hDb25maWc+KCk7XG4gIHJlYWRvbmx5IGlzU2VhcmNoT25saW5lID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBsaXN0U2VhcmNoUGFkZGluZyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxpc3REaXZpZGVyQ2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsaXN0Q29uZmlnID0gaW5wdXQ8SUxpc3RDb25maWdJdGVtPigpO1xuICByZWFkb25seSBsaXN0QnV0dG9uc090aGVyID0gaW5wdXQ8QXJyYXk8SUJ1dHRvbj4+KCk7XG4gIHJlYWRvbmx5IGxpc3RDbGlja0V4YWN0bHkgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsaXN0QmFja2dyb3VuZExpc3RDdXN0b20gPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxpc3RNYXhJdGVtU2hvdyA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgbGlzdEhpZGRlbklucHV0U2VhcmNoV2hlbkhhc1NlYXJjaENvbmZpZyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHJlbW92ZVRleHRTZWFyY2hXaGVuQmx1cklucHV0ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGtleXNIaWRkZW5JdGVtID0gbW9kZWw8QXJyYXk8dW5rbm93bj4+KCk7XG4gIHJlYWRvbmx5IGtleXNEaXNhYmxlSXRlbSA9IGlucHV0PEFycmF5PHVua25vd24+PigpO1xuICByZWFkb25seSBpZ25vcmVFbWl0V2hlblNhbWVEYXRhU2VsZWN0ZWQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBzaW5nbGVTZWxlY3RlZCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRhZ0l0ZW0gPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSWNvblJlbW92ZVRhZ0l0ZW0gPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHNob3dCb3JkZXJBY3RpdmVXaGVuRm9jdXNJbnB1dCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGZpZWxkR2V0SW1hZ2UgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGltYWdlU2l6ZSA9IGlucHV0PFRZUEVfU0laRV9BVkFUQVJfQ09ORklHPigxNik7XG4gIHJlYWRvbmx5IGxpbmtJbWFnZUVycm9yID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBmaWVsZEdldFRleHRBdmF0YXIgPSBpbnB1dDxzdHJpbmc+KCd1c2VyJyk7XG4gIHJlYWRvbmx5IGNsYXNzQXZhdGFySW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZ2V0TGFzdFRleHRBZnRlclNwYWNlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdmFsaWRSZXF1aXJlZCA9IGlucHV0PElNZXNzYWdlVHJhbnNsYXRlPigpO1xuICByZWFkb25seSB2YWxpZE1heEl0ZW1TZWxlY3RlZCA9IGlucHV0PElWYWxpZE1heEl0ZW1TZWxlY3RlZD4oKTtcbiAgcmVhZG9ubHkgdmFsaWRQYXR0ZXJuID0gaW5wdXQ8QXJyYXk8SVZhbGlkUGF0dGVybj4+KCk7XG4gIHJlYWRvbmx5IHNob3dMaXN0QmVsbG93ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaGlkZGVuSW5wdXRXaGVuUmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dFNlbGVjdE11bHRpSXRlbSA9IG91dHB1dDxBcnJheTx1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgb3V0VmFsaWRFdmVudCA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElUYWdzRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dENsaWNrQnV0dG9uT3RoZXIgPSBvdXRwdXQ8SUJ1dHRvbj4oKTtcbiAgcmVhZG9ubHkgb3V0U2hvd0xpc3RFdmVudCA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlID0gb3V0cHV0PElGbGFnTW91c2U+KCk7XG4gIHJlYWRvbmx5IG91dExvYWRpbmdHZXREZXRhaWxTZWxlY3RlZCA9IG91dHB1dDxib29sZWFuPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0YWdzRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ3RhZ3NFbCcpO1xuXG4gIC8qIElOSkVDVCovXG4gIHByaXZhdGUgaHR0cFJlcXVlc3RTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUh0dHBSZXF1ZXN0U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IG1heEl0ZW1JbnB1dCA9IHRoaXMubWF4SXRlbUlucHV0KCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc2FibGVXaGVuTWF4SXRlbS5zZXQoZmFsc2UpO1xuICAgICAgICBpZiAobWF4SXRlbUlucHV0ICYmIG1heEl0ZW1JbnB1dCA8PSB0aGlzLml0ZW1zU2VsZWN0ZWQoKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVXaGVuTWF4SXRlbS5zZXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBsaXN0Q29uZmlnID0gdGhpcy5saXN0Q29uZmlnKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAobGlzdENvbmZpZykge1xuICAgICAgICAgIHRoaXMuZmllbGRLZXkuc2V0KGdldEZpZWxkS2V5QnlUeXBlKGxpc3RDb25maWcsICdpZCcpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJdGVtcyA9IHRoaXMuZGVmYXVsdEl0ZW1zU2VsZWN0ZWQoKSB8fCBbXTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzSXRlbXMgPSB0aGlzLmRlZmF1bHRJdGVtc1NlbGVjdGVkQ3VycmVudCgpIHx8IFtdO1xuICAgICAgICB0aGlzLmRlZmF1bHRJdGVtc1NlbGVjdGVkQ3VycmVudC5zZXQodGhpcy5kZWZhdWx0SXRlbXNTZWxlY3RlZCgpKTtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMubGVuZ3RoICE9PSBjdXJyZW50SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVJdGVtc1NlbGVjdGVkKGN1cnJlbnRJdGVtcyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcHJldkl0ZW0gb2YgcHJldmlvdXNJdGVtcykge1xuICAgICAgICAgIGlmICghY3VycmVudEl0ZW1zLnNvbWUoKGl0ZW0pID0+IGdldChpdGVtLCB0aGlzLmZpZWxkS2V5KCkpID09PSBnZXQocHJldkl0ZW0sIHRoaXMuZmllbGRLZXkoKSkpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1zU2VsZWN0ZWQoY3VycmVudEl0ZW1zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZGVmYXVsdEtleXNTZWxlY3RlZCgpIHx8IFtdO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMua2V5c1NlbGVjdGVkKCkgfHwgW107XG4gICAgICAgIGlmIChwcmV2aW91c1ZhbHVlLmxlbmd0aCAhPT0gY3VycmVudFZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuZ2V0RGV0YWlsQnlJZHMoY3VycmVudFZhbHVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5c05ldyA9IGN1cnJlbnRWYWx1ZS5maWx0ZXIoKGtleSkgPT4gIXRoaXMuaXRlbXNTZWxlY3RlZCgpLnNvbWUoKGl0ZW0pID0+IGdldChpdGVtLCB0aGlzLmZpZWxkS2V5KCksICcnKSA9PT0ga2V5KSk7XG4gICAgICAgIGlmIChrZXlzTmV3Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuZ2V0RGV0YWlsQnlJZHMoa2V5c05ldyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBsZXQgbGlzdEtleURpc2FibGU6IEFycmF5PHVua25vd24+ID0gW107XG4gICAgICBjb25zdCBrZXlzRGlzYWJsZUl0ZW0gPSB0aGlzLmtleXNEaXNhYmxlSXRlbSgpO1xuICAgICAgY29uc3QgaXRlbXNTZWxlY3RlZCA9IHRoaXMuaXRlbXNTZWxlY3RlZCgpO1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAoa2V5c0Rpc2FibGVJdGVtPy5sZW5ndGgpIHtcbiAgICAgICAgICBsaXN0S2V5RGlzYWJsZSA9IFsuLi5rZXlzRGlzYWJsZUl0ZW1dO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zU2VsZWN0ZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLmRpc2FibGVJdGVtICYmICFsaXN0S2V5RGlzYWJsZS5maW5kKChrZXkpID0+IGtleSA9PT0gaXRlbVt0aGlzLmZpZWxkS2V5KCldKSkge1xuICAgICAgICAgICAgbGlzdEtleURpc2FibGUucHVzaChpdGVtW3RoaXMuZmllbGRLZXkoKV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGlzdEtleURpc2FibGUuc2V0KGxpc3RLZXlEaXNhYmxlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRzID0gdGhpcy5odHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkcygpO1xuICAgIGlmIChodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkcyAmJiAoIWh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRzLmd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlIHx8ICFodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkcy5ndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZT8uZGV0YWlsQnlJZCkpIHtcbiAgICAgIHRocm93ICdDb25maWcgZ2V0RGV0YWlsQnlJZHMgecOqdSBj4bqndSB04buRaSB0aGnhu4N1IGPDoWMgdGhhbSBz4buRICBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSwgZGV0YWlsQnlJZCc7XG4gICAgfVxuICAgIGNvbnN0IHByZXByb2Nlc3NvciA9IChrZXlzOiBBcnJheTx1bmtub3duPikgPT4ge1xuICAgICAgaWYgKCFrZXlzIHx8ICEoa2V5cyBpbnN0YW5jZW9mIEFycmF5KSB8fCAha2V5cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleXMuam9pbignOycpO1xuICAgIH07XG4gICAgaWYgKGh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRzPy5ndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZT8uZGV0YWlsQnlJZCkge1xuICAgICAgaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZHMuZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUuZGV0YWlsQnlJZC5maWVsZEdldFZhbHVlID0gaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZHMuZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUuZGV0YWlsQnlJZC5maWVsZEdldFZhbHVlID8/ICdrZXlzJztcbiAgICAgIGh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRzLmd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlLmRldGFpbEJ5SWQucHJlcHJvY2Vzc29yID0gaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZHMuZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUuZGV0YWlsQnlJZC5wcmVwcm9jZXNzb3IgPz8gcHJlcHJvY2Vzc29yO1xuICAgIH1cbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICB9XG5cbiAgcHVibGljIGdldCBGdW5jdGlvbnNDb250cm9sKCk6IElUYWdzRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja0lzVmFsaWQ6IHRoaXMuY2hlY2tWYWxpZC5iaW5kKHRoaXMpLFxuICAgICAgcmVtb3ZlTGlzdDogYXN5bmMgKCkgPT4gdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCksXG4gICAgICB1cGRhdGVMYWJlbDogdGhpcy51cGRhdGVMYWJlbC5iaW5kKHRoaXMpLFxuICAgICAgY2xlYXJJdGVtU2VsZWN0ZWQ6IHRoaXMuY2xlYXJJdGVtU2VsZWN0ZWQuYmluZCh0aGlzKSxcbiAgICAgIGNsZWFyS2V5U2VhcmNoOiAoKSA9PiB0aGlzLmhhbmRsZXJWYWx1ZUNoYW5nZVNlYXJjaCgnJyksXG4gICAgICBmb2N1c0lucHV0OiAoKSA9PiB0aGlzLmZvY3VzSW5wdXQoKSxcbiAgICAgIGdldEZha2VJZDogYXN5bmMgKCkgPT4gdGhpcy5mYWtlSWQoKSxcbiAgICAgIGNyZWF0ZVRhZzogdGhpcy5oYW5kbGVyRW50ZXJFdmVudC5iaW5kKHRoaXMpLFxuICAgICAgcmVtb3ZlSXRlbVNlbGVjdGVkOiB0aGlzLmhhbmRsZXJSZW1vdmVJdGVtU2VsZWN0ZWQuYmluZCh0aGlzKSxcbiAgICAgIHJlc2V0RXJyb3I6IHRoaXMucmVzZXRFcnJvci5iaW5kKHRoaXMpLFxuICAgICAgcmVzZXRUb0RlZmF1bHREYXRhU2VsZWN0ZWQ6IHRoaXMucmVzZXRUb0RlZmF1bHREYXRhU2VsZWN0ZWQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUl0ZW1TZWxlY3RlZERpc2FibGU6IHRoaXMudXBkYXRlSXRlbVNlbGVjdGVkRGlzYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgcmVmcmVzaExpc3REYXRhOiB0aGlzLnJlZnJlc2hMaXN0RGF0YS5iaW5kKHRoaXMpLFxuICAgICAgc2V0RXJyb3I6IHRoaXMuc2V0RXJyb3IuYmluZCh0aGlzKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRFcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVycm9yLnNldCh7IG1lc3NhZ2UgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVMYWJlbCgpIHtcbiAgICBpZiAoIXRoaXMuaXRlbXNTZWxlY3RlZCgpIHx8ICF0aGlzLml0ZW1zU2VsZWN0ZWQoKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtc1NlbGVjdGVkLnVwZGF0ZSgoaXRlbXMpID0+IHtcbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHRoaXMudXBkYXRlRmllbGRMYWJlbChpdGVtKSk7XG4gICAgICByZXR1cm4gWy4uLml0ZW1zXTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmllbGRMYWJlbChpdGVtOiB1bmtub3duKSB7XG4gICAgY29uc3QgcmVmID0gZ2V0KGl0ZW0sICdyZWYnKSB8fCBpdGVtO1xuICAgIGNvbnN0IGdldFZhbHVlID0gdGhpcy5jb25maWcoKT8uZ2V0VmFsdWU7XG4gICAgc2V0KGl0ZW0sICdmaWVsZExhYmVsJywgYCR7Z2V0KHJlZiwgdGhpcy5maWVsZExhYmVsKCkpIHx8IHJlZi5sYWJlbCB8fCByZWYubmFtZSB8fCAnICd9YCk7XG4gICAgaWYgKGdldFZhbHVlKSB7XG4gICAgICBzZXQoaXRlbSwgJ2ZpZWxkTGFiZWwnLCBnZXRWYWx1ZShyZWYpIHx8ICcgJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGVhckl0ZW1TZWxlY3RlZChpZ25vcmVWYWxpZCA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLml0ZW1zU2VsZWN0ZWQoKSB8fCAhdGhpcy5pdGVtc1NlbGVjdGVkKCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuaXRlbXNTZWxlY3RlZCgpLmxlbmd0aCAtIDE7XG4gICAgdGhpcy50ZW1wSWdub3JlRW1pdC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5pdGVtc1NlbGVjdGVkKCkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudGVtcElnbm9yZUVtaXQuc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFuZGxlclJlbW92ZUl0ZW1TZWxlY3RlZChcbiAgICAgICAge1xuICAgICAgICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgRXZlbnQsXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIGlnbm9yZVZhbGlkXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJdGVtc1NlbGVjdGVkKGl0ZW1zU2VsZWN0ZWQ6IEFycmF5PHVua25vd24+LCBpZ25vcmVWYWxpZGF0ZSA9IHRydWUsIGlnbm9yZUVtaXRLZXlTZWxlY3RlZFdoZW5JdGVtc05vdEV4aXRzRW1wdHk/OiBib29sZWFuKSB7XG4gICAgaWYgKCFpdGVtc1NlbGVjdGVkIHx8ICFpdGVtc1NlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtc05vdEV4aXRzOiBBcnJheTx1bmtub3duPiA9IFtdO1xuICAgIGl0ZW1zU2VsZWN0ZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBmaWVsZExhYmVsID0gYCR7Z2V0KGl0ZW0sIHRoaXMuZmllbGRMYWJlbCgpKSB8fCBnZXQoaXRlbSwgJ2xhYmVsJykgfHwgZ2V0KGl0ZW0sICduYW1lJykgfHwgJyAnfWA7XG4gICAgICBjb25zdCBnZXRWYWx1ZSA9IHRoaXMuY29uZmlnKCk/LmdldFZhbHVlO1xuICAgICAgaWYgKGdldFZhbHVlKSB7XG4gICAgICAgIGZpZWxkTGFiZWwgPSBnZXRWYWx1ZShpdGVtKSB8fCAnICc7XG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtRXhpdHMgPSB0aGlzLmNoZWNrRXhpdHMoZmllbGRMYWJlbCwgZ2V0KGl0ZW0sIHRoaXMuZmllbGRLZXkoKSkpO1xuICAgICAgaWYgKGl0ZW1FeGl0cz8uaXNJdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihpdGVtRXhpdHMuaXRlbSwgaXRlbSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW1zTm90RXhpdHMucHVzaChpdGVtKTtcbiAgICB9KTtcbiAgICB0aGlzLnByb2Nlc3NEYXRhKGl0ZW1zTm90RXhpdHMsIGlnbm9yZVZhbGlkYXRlLCBpZ25vcmVFbWl0S2V5U2VsZWN0ZWRXaGVuSXRlbXNOb3RFeGl0c0VtcHR5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckV2ZW50KHR5cGU6IFRZUEVfUE9QT1ZFUl9FVkVOVCkge1xuICAgIHRoaXMudHlwZVBvcG92ZXIuc2V0KHR5cGUpO1xuICAgIGlmICh0eXBlID09PSAnY2xpY2snKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAncmVtb3ZlJykge1xuICAgICAgdGhpcy5zaG93TGlzdC5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRTaG93TGlzdEV2ZW50LmVtaXQoZmFsc2UpO1xuICAgICAgdGhpcy5pbnB1dEZ1bmN0aW9uQ29udHJvbCgpPy5ibHVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2hvd0xpc3Quc2V0KHRydWUpO1xuICAgIHRoaXMub3V0U2hvd0xpc3RFdmVudC5lbWl0KHRydWUpO1xuICAgIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKT8uZm9jdXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckNvbnRlbnRFdmVudChwb3NpdGlvbjogVFlQRV9QT1BPVkVSX0RJUkVDVElPTikge1xuICAgIGlmICh0aGlzLnBvc2l0aW9uTGlzdCgpID09PSBwb3NpdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBvc2l0aW9uTGlzdC5zZXQocG9zaXRpb24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJSZW1vdmVJdGVtU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50LCBpdGVtUmVtb3ZlOiB1bmtub3duLCBpZ25vcmVWYWxpZD86IGJvb2xlYW4pIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmZsYWdNb3VzZS5zZXQoeyBpc01vdXNlRW50ZXI6IHRydWUsIGlzTW91c2VFbnRlckNvbnRlbnQ6IHRydWUgfSk7XG4gICAgdGhpcy50aW1lT3V0RmxhZy5zZXQoc2V0VGltZW91dCgoKSA9PiB0aGlzLmZsYWdNb3VzZS5zZXQoeyBpc01vdXNlRW50ZXI6IGZhbHNlLCBpc01vdXNlRW50ZXJDb250ZW50OiBmYWxzZSB9KSwgMjUwKSk7XG4gICAgdGhpcy5pdGVtc1NlbGVjdGVkLnVwZGF0ZSgoaXRlbXMpID0+XG4gICAgICBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3Qga2V5UmVtb3ZlID0gZ2V0KGl0ZW1SZW1vdmUsIHRoaXMuZmllbGRLZXkoKSk7XG4gICAgICAgIGNvbnN0IGtleUl0ZW0gPSBnZXQoaXRlbSwgdGhpcy5maWVsZEtleSgpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZW1vdmUgPSBnZXQoaXRlbVJlbW92ZSwgJ2ZpZWxkTGFiZWwnKS50cmltKCk7XG4gICAgICAgIGNvbnN0IGxhYmVsSXRlbSA9IGdldChpdGVtLCAnZmllbGRMYWJlbCcpLnRyaW0oKTtcblxuICAgICAgICByZXR1cm4gKChpc05pbChrZXlSZW1vdmUpIHx8IGlzTmlsKGtleUl0ZW0pKSAmJiBsYWJlbFJlbW92ZSAhPT0gbGFiZWxJdGVtKSB8fCAoIWlzTmlsKGtleVJlbW92ZSkgJiYgIWlzTmlsKGtleUl0ZW0pICYmIGtleVJlbW92ZSAhPT0ga2V5SXRlbSk7XG4gICAgICB9KVxuICAgICk7XG4gICAgaWYgKGl0ZW1SZW1vdmUgJiYgIWlzTmlsKGdldChpdGVtUmVtb3ZlLCB0aGlzLmZpZWxkS2V5KCkpKSAmJiBgJHtnZXQoaXRlbVJlbW92ZSwgdGhpcy5maWVsZEtleSgpKX1gLnNlYXJjaCh0aGlzLmZha2VJZCgpKSA+PSAwKSB7XG4gICAgICB0aGlzLmtleXNIaWRkZW5JdGVtLnVwZGF0ZSgoaXRlbXMpID0+IEFycmF5LmZyb20obmV3IFNldChbLi4uKGl0ZW1zIHx8IFtdKSwgZ2V0KGl0ZW1SZW1vdmUsIHRoaXMuZmllbGRLZXkoKSldKSkpO1xuICAgIH1cbiAgICB0aGlzLmtleXNTZWxlY3RlZC5zZXQoQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMuaXRlbXNTZWxlY3RlZCgpLm1hcCgoaXRlbSkgPT4gZ2V0KGl0ZW0sIGByZWYuJHt0aGlzLmZpZWxkS2V5KCl9YCkpKSkpO1xuICAgIHRoaXMuZGlzYWJsZVdoZW5NYXhJdGVtLnNldChmYWxzZSk7XG4gICAgY29uc3QgbWF4SXRlbUlucHV0ID0gdGhpcy5tYXhJdGVtSW5wdXQoKTtcbiAgICBpZiAobWF4SXRlbUlucHV0ICYmIG1heEl0ZW1JbnB1dCA8PSB0aGlzLml0ZW1zU2VsZWN0ZWQoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGlzYWJsZVdoZW5NYXhJdGVtLnNldCh0cnVlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNob3dMaXN0KCkpIHtcbiAgICAgIHRoaXMub3V0U2VsZWN0TXVsdGlJdGVtLmVtaXQodGhpcy5nZXRJdGVtU2VsZWN0ZWQoKSk7XG4gICAgICB0aGlzLmNoZWNrVmlld0NoYW5nZSh0cnVlLCBpZ25vcmVWYWxpZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dMaXN0KCkpIHtcbiAgICAgIHRoaXMudGVtcElnbm9yZUVtaXQuc2V0KHRydWUpO1xuICAgIH1cbiAgICBpZiAoIWlnbm9yZVZhbGlkKSB7XG4gICAgICB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgICB9XG4gICAgdGhpcy50ZW1wSWdub3JlRW1pdC5zZXQoZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbnB1dEZ1bmN0aW9uQ29udHJvbChldmVudDogSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmlucHV0RnVuY3Rpb25Db250cm9sLnNldChldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZvY3VzQW5kQmx1ckV2ZW50KGV2ZW50OiBJRm9jdXNBbmRCbHVyRXZlbnQpIHtcbiAgICB0aGlzLmZvY3VzLnNldChmYWxzZSk7XG4gICAgaWYgKGV2ZW50Lm5hbWUgPT09ICdmb2N1cycpIHtcbiAgICAgIHRoaXMuZm9jdXMuc2V0KHRydWUpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQubmFtZSA9PT0gJ2JsdXInICYmIHRoaXMudHlwZVBvcG92ZXIoKT8uaW5jbHVkZXMoJ21vdXNlbGVhdmUnKSAmJiB0aGlzLnZhbGlkUmVxdWlyZWQoKSAmJiAoIXRoaXMuaXRlbXNTZWxlY3RlZCgpIHx8ICF0aGlzLml0ZW1zU2VsZWN0ZWQoKS5sZW5ndGgpKSB7XG4gICAgICB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrT3V0c2lkZShldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0Q2xpY2tPdXRzaWRlKCkpO1xuICAgIHRoaXMudGltZW91dENsaWNrT3V0c2lkZS5zZXQoXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0xpc3QoKSB8fCAhdGhpcy5yZW1vdmVUZXh0U2VhcmNoV2hlbkJsdXJJbnB1dCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWVJbnB1dC5zZXQoJycpO1xuICAgICAgICB0aGlzLmtleVNlYXJjaC5zZXQoJycpO1xuICAgICAgICB0aGlzLmlucHV0RnVuY3Rpb25Db250cm9sKCk/LnJlc2V0VmFsdWUoKTtcbiAgICAgIH0sIDI1MClcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJFbnRlckV2ZW50KCkge1xuICAgIGlmICghdGhpcy52YWx1ZUlucHV0KCkgfHwgIWAke3RoaXMudmFsdWVJbnB1dCgpfWAudHJpbSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZygpPy5pZ25vcmVFbnRlckNyZWF0ZU5ld0l0ZW0pIHtcbiAgICAgIGNvbnN0IGl0ZW1FeGl0cyA9IHRoaXMuY2hlY2tFeGl0cygpO1xuICAgICAgaWYgKCFpdGVtRXhpdHMgfHwgaXRlbUV4aXRzLmlzSXRlbVNlbGVjdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvY2Vzc0RhdGEoW2l0ZW1FeGl0cy5pdGVtXSk7XG4gICAgICB0aGlzLmhhbmRsZXJWYWx1ZUNoYW5nZVNlYXJjaCgnJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5mdW5jdGlvbkNoZWNrUGVybWlzc2lvbkNyZWF0ZVRhZygpKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXRlbUV4aXRzID0gdGhpcy5jaGVja0V4aXRzKCk7XG4gICAgY29uc3QgdmFsdWVJbnB1dCA9IGAke3RoaXMudmFsdWVJbnB1dCgpfWAudHJpbSgpO1xuICAgIGNvbnN0IG5ld0l0ZW0gPSB7IFt0aGlzLmZpZWxkTGFiZWwoKV06IHZhbHVlSW5wdXQgfTtcbiAgICBpZiAodGhpcy5maWVsZEtleSgpKSB7XG4gICAgICBzZXQobmV3SXRlbSwgdGhpcy5maWVsZEtleSgpLCBgJHt0aGlzLmZha2VJZCgpfSR7dmFsdWVJbnB1dH0ke3V1aWQoKX1gKTtcbiAgICB9XG4gICAgaWYgKCFpdGVtRXhpdHMpIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrUGF0dGVybihbbmV3SXRlbV0pKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1CdWlsZFZhbHVlID0geyAuLi5uZXdJdGVtIH07XG4gICAgICAgIGNvbnN0IGJ1aWxkVmFsdWUgPSB0aGlzLmNvbmZpZygpPy5idWlsZFZhbHVlO1xuICAgICAgICBpZiAoYnVpbGRWYWx1ZSkge1xuICAgICAgICAgIGJ1aWxkVmFsdWUoaXRlbUJ1aWxkVmFsdWUsIG5ld0l0ZW1bdGhpcy5maWVsZExhYmVsKCldKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdJdGVtW3RoaXMuZmllbGRMYWJlbCgpXSA9IGl0ZW1CdWlsZFZhbHVlW3RoaXMuZmllbGRMYWJlbCgpXTtcbiAgICAgICAgaWYgKHRoaXMuZW50ZXJBdXRvQWRkVGFnVG9MaXN0KCkpIHtcbiAgICAgICAgICB0aGlzLmxpc3RGdW5jdGlvbkNvbnRyb2woKT8udXBkYXRlRGF0YSh7IG5ld0RhdGE6IHNpZ25hbChbc2lnbmFsKG5ld0l0ZW0pXSksIGZ1bmN0aW9uQ3VzdG9tQWRkRGF0YVRvU3RvcmU6IChuZXdEYXRhLCBzdG9yZSkgPT4gc3RvcmUudXBkYXRlKCh2YWx1ZSkgPT4gWy4uLm5ld0RhdGEoKSwgLi4udmFsdWVdKSB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NEYXRhKFtuZXdJdGVtXSk7XG4gICAgICAgIHRoaXMuaGFuZGxlclZhbHVlQ2hhbmdlU2VhcmNoKCcnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGl0ZW1FeGl0cy5pc0l0ZW1TZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NEYXRhKFtpdGVtRXhpdHMuaXRlbV0pO1xuICAgIHRoaXMuaGFuZGxlclZhbHVlQ2hhbmdlU2VhcmNoKCcnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyVmFsdWVDaGFuZ2VTZWFyY2godmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICAgIHRoaXMudmFsdWVJbnB1dC5zZXQoYCR7dmFsdWV9YCk7XG4gICAgaWYgKCFgJHt2YWx1ZSB8fCAnJ31gLnRyaW0oKSkge1xuICAgICAgdGhpcy5rZXlTZWFyY2hDaGFuZ2VTdWIoKT8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMua2V5U2VhcmNoQ2hhbmdlU3ViLnNldCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy50aW1lT3V0Q2hhbmdlU2VhcmNoLnNldChzZXRUaW1lb3V0KCgpID0+IHRoaXMua2V5U2VhcmNoLnNldCgnJykpKTtcbiAgICAgIGlmICghdGhpcy5jb25maWcoKT8uaWdub3JlRW50ZXJDcmVhdGVOZXdJdGVtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tWYWxpZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcoKT8uaWdub3JlSW5wdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmtleVNlYXJjaENoYW5nZVN1YigpKSB7XG4gICAgICB0aGlzLnNldEV2ZW50S2V5U2VhcmNoKCk7XG4gICAgfVxuICAgIHRoaXMua2V5U2VhcmNoQ2hhbmdlLm5leHQoYCR7dmFsdWUgfHwgJyd9YC50cmltKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFdmVudEtleVNlYXJjaCgpIHtcbiAgICBpZiAodGhpcy5rZXlTZWFyY2hDaGFuZ2VTdWIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmtleVNlYXJjaENoYW5nZVN1Yi5zZXQodGhpcy5rZXlTZWFyY2hDaGFuZ2UucGlwZShkZWJvdW5jZVRpbWUoMTUwMCksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMua2V5U2VhcmNoLnNldChgJHt2YWx1ZSB8fCAnJ31gLnRyaW0oKSkpKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0RhdGEoaXRlbXM6IEFycmF5PHVua25vd24+LCBpZ25vcmVWYWxpZGF0ZSA9IGZhbHNlLCBpZ25vcmVFbWl0S2V5U2VsZWN0ZWRXaGVuSXRlbXNOb3RFeGl0c0VtcHR5PzogYm9vbGVhbikge1xuICAgIGlmICghaXRlbXMgfHwgIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgY29uc3QgaXRlbXNTZWxlY3RlZCA9IHRoaXMuZ2V0SXRlbVNlbGVjdGVkKCk7XG4gICAgICBpZiAoIWlnbm9yZUVtaXRLZXlTZWxlY3RlZFdoZW5JdGVtc05vdEV4aXRzRW1wdHkpIHtcbiAgICAgICAgdGhpcy5vdXRTZWxlY3RNdWx0aUl0ZW0uZW1pdChpdGVtc1NlbGVjdGVkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldChBcnJheS5mcm9tKG5ldyBTZXQoaXRlbXNTZWxlY3RlZD8ubWFwKChpdGVtKSA9PiBnZXQoaXRlbSwgYHJlZi4ke3RoaXMuZmllbGRLZXkoKX1gKSkpKSk7XG4gICAgICB0aGlzLmNoZWNrVmlld0NoYW5nZShmYWxzZSwgaWdub3JlVmFsaWRhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtc01hcHBpbmcgPSBpdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IGdldChpdGVtLCAncmVmJykgfHwgaXRlbTtcbiAgICAgIGl0ZW0gPSBjbG9uZURlZXAocmVmKTtcbiAgICAgIHNldChpdGVtLCAncmVmJywgcmVmKTtcbiAgICAgIHRoaXMudXBkYXRlRmllbGRMYWJlbChpdGVtKTtcbiAgICAgIGNvbnN0IHsgZ2V0RGlzYWJsZUl0ZW0sIGdldFN0eWxlcywgZ2V0U3R5bGVzVGFnU3BlY2lmaWMsIGdldFRvb2x0aXAgfSA9IHRoaXMuY29uZmlnKCkgfHwge307XG4gICAgICBpZiAoZ2V0RGlzYWJsZUl0ZW0pIHtcbiAgICAgICAgc2V0KGl0ZW0sICdkaXNhYmxlSXRlbScsIGdldERpc2FibGVJdGVtKGl0ZW0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChnZXRTdHlsZXMpIHtcbiAgICAgICAgc2V0KGl0ZW0sICduZ1N0eWxlcycsIGdldFN0eWxlcyhpdGVtKSk7XG4gICAgICB9XG4gICAgICBpZiAoZ2V0U3R5bGVzVGFnU3BlY2lmaWMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGdldFN0eWxlc1RhZ1NwZWNpZmljKGl0ZW0pO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3NwZWNpZmljX3Zpb2xldF9jb2xvcicpIHtcbiAgICAgICAgICBzZXQoaXRlbSwgJ25nU3R5bGVzJywgeyBjb2xvcjogJyM3MjM5RUEnLCBiYWNrZ3JvdW5kQ29sb3I6ICcjRjFFQkZEJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGdldFRvb2x0aXApIHtcbiAgICAgICAgc2V0KGl0ZW0sICd0b29sdGlwJywgZ2V0VG9vbHRpcChpdGVtKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9KTtcbiAgICB0aGlzLml0ZW1zU2VsZWN0ZWQudXBkYXRlKChpdGVtcykgPT4gWy4uLml0ZW1zLCAuLi5pdGVtc01hcHBpbmddKTtcbiAgICB0aGlzLmtleXNTZWxlY3RlZC5zZXQoQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMuaXRlbXNTZWxlY3RlZCgpLm1hcCgoaXRlbSkgPT4gZ2V0KGl0ZW0sIGByZWYuJHt0aGlzLmZpZWxkS2V5KCl9YCkpKSkpO1xuICAgIHRoaXMub3V0U2VsZWN0TXVsdGlJdGVtLmVtaXQodGhpcy5nZXRJdGVtU2VsZWN0ZWQoKSk7XG4gICAgdGhpcy5jaGVja1ZpZXdDaGFuZ2UoZmFsc2UsIGlnbm9yZVZhbGlkYXRlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRGF0YUNoYW5nZShpdGVtczogQXJyYXk8dW5rbm93bj4pIHtcbiAgICB0aGlzLml0ZW1zT2ZMaXN0LnNldChpdGVtcyk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnVwZGF0ZVBvcG92ZXJPdmVybGF5UG9zaXRpb24oKTtcbiAgICBpZiAoIXRoaXMuY29uZmlnKCk/Lmlnbm9yZUlucHV0KSB7XG4gICAgICB0aGlzLmlucHV0RnVuY3Rpb25Db250cm9sKCk/LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJMb2FkaW5nKGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy5sb2FkaW5nLnNldChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrVmlld0NoYW5nZShpZ25vcmVTY3JvbGxCb3R0b206IGJvb2xlYW4sIGlnbm9yZVZhbGlkYXRlID0gZmFsc2UpIHtcbiAgICB0aGlzLmRpc2FibGVXaGVuTWF4SXRlbS5zZXQoZmFsc2UpO1xuICAgIGNvbnN0IG1heEl0ZW1JbnB1dCA9IHRoaXMubWF4SXRlbUlucHV0KCk7XG4gICAgaWYgKG1heEl0ZW1JbnB1dCAmJiBtYXhJdGVtSW5wdXQgPD0gdGhpcy5pdGVtc1NlbGVjdGVkKCkubGVuZ3RoKSB7XG4gICAgICB0aGlzLmRpc2FibGVXaGVuTWF4SXRlbS5zZXQodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMudGltZU91dENoZWNrVmlld0NoYW5nZS5zZXQoXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gdGhpcy50YWdzRWwoKT8ubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGlmICghaXNOaWwoc2Nyb2xsSGVpZ2h0KSAmJiB0aGlzLmNsaWVudEhlaWdodCgpICE9PSBzY3JvbGxIZWlnaHQgJiYgdGhpcy5wb3NpdGlvbkxpc3QoKSAhPT0gJ3RvcCcpIHtcbiAgICAgICAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2woKT8udXBkYXRlUG9wb3Zlck92ZXJsYXlQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaWdub3JlU2Nyb2xsQm90dG9tICYmIHRoaXMudGFnc0VsKCkgJiYgdGhpcy50YWdzRWwoKS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50YWdzRWwoKS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbEhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsaWVudEhlaWdodC5zZXQoc2Nyb2xsSGVpZ2h0KTtcbiAgICAgIH0sIDI1MClcbiAgICApO1xuICAgIGlmICghaWdub3JlVmFsaWRhdGUpIHtcbiAgICAgIHRoaXMuY2hlY2tWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tFeGl0cyhsYWJlbD86IHN0cmluZywgaWQ/OiBzdHJpbmcpIHtcbiAgICBsZXQgaXRlbUV4aXRzO1xuICAgIGlmICghaXNOaWwoaWQpICYmICFgJHtpZH1gLmluY2x1ZGVzKHRoaXMuZmFrZUlkKCkpICYmIHRoaXMuZmllbGRLZXkoKSkge1xuICAgICAgaXRlbUV4aXRzID0gdGhpcy5pdGVtc1NlbGVjdGVkKCkuZmluZCgoaXRlbSkgPT4gIWlzTmlsKGdldChpdGVtLCB0aGlzLmZpZWxkS2V5KCkpKSAmJiBgJHtnZXQoaXRlbSwgdGhpcy5maWVsZEtleSgpKX1gLnRyaW0oKSA9PT0gYCR7aWR9YCk7XG4gICAgICBpZiAoaXRlbUV4aXRzKSB7XG4gICAgICAgIHJldHVybiB7IGl0ZW06IGl0ZW1FeGl0cywgaXNJdGVtU2VsZWN0ZWQ6ICEhaXRlbUV4aXRzIH07XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghbGFiZWwpIHtcbiAgICAgIGxhYmVsID0gYCR7dGhpcy52YWx1ZUlucHV0KCkgfHwgJyd9YC50cmltKCk7XG4gICAgfVxuICAgIGl0ZW1FeGl0cyA9IHRoaXMuaXRlbXNTZWxlY3RlZCgpLmZpbmQoXG4gICAgICAoaXRlbSkgPT5cbiAgICAgICAgKCFpc05pbChnZXQoaXRlbSwgJ2ZpZWxkTGFiZWwnKSkgJiYgZ2V0KGl0ZW0sICdmaWVsZExhYmVsJykudHJpbSgpID09PSBsYWJlbD8udHJpbSgpKSB8fFxuICAgICAgICAodGhpcy5jaGVja0V4aXRJc0xhYmVsSW5jbHVkZSgpICYmIGdldChpdGVtLCAnZmllbGRMYWJlbCcpLnRyaW0oKS5pbmNsdWRlcyhsYWJlbD8udHJpbSgpKSkgfHxcbiAgICAgICAgKHRoaXMuY2hlY2tFeGl0QnlGaWVsZHMoKSAmJlxuICAgICAgICAgIHRoaXMuY2hlY2tFeGl0QnlGaWVsZHMoKT8uc29tZSgoZmllbGQpID0+IGdldChpdGVtLCBmaWVsZCk/LnRyaW0oKSA9PT0gbGFiZWw/LnRyaW0oKSB8fCBnZXQoaXRlbSwgZmllbGQpPy50cmltKCkgPT09IGVzY2FwZUh0bWwobGFiZWw/LnRyaW0oKSB8fCAnJykgfHwgZXNjYXBlSHRtbChnZXQoaXRlbSwgZmllbGQpPy50cmltKCkgfHwgJyAnKSA9PT0gZXNjYXBlSHRtbChsYWJlbD8udHJpbSgpIHx8ICcnKSkpXG4gICAgKTtcbiAgICBpZiAoaXRlbUV4aXRzKSB7XG4gICAgICByZXR1cm4geyBpdGVtOiBpdGVtRXhpdHMsIGlzSXRlbVNlbGVjdGVkOiB0cnVlIH07XG4gICAgfVxuICAgIGl0ZW1FeGl0cyA9IHRoaXMuaXRlbXNPZkxpc3QoKS5maW5kKFxuICAgICAgKGl0ZW0pID0+XG4gICAgICAgICghaXNOaWwoZ2V0KGl0ZW0sICdmaWVsZExhYmVsJykpICYmIGdldChpdGVtLCAnZmllbGRMYWJlbCcpLnRyaW0oKSA9PT0gbGFiZWw/LnRyaW0oKSkgfHxcbiAgICAgICAgKHRoaXMuY2hlY2tFeGl0SXNMYWJlbEluY2x1ZGUoKSAmJiBnZXQoaXRlbSwgJ2ZpZWxkTGFiZWwnKS50cmltKCkuaW5jbHVkZXMobGFiZWw/LnRyaW0oKSkpIHx8XG4gICAgICAgICh0aGlzLmNoZWNrRXhpdEJ5RmllbGRzKCkgJiZcbiAgICAgICAgICB0aGlzLmNoZWNrRXhpdEJ5RmllbGRzKCk/LnNvbWUoKGZpZWxkKSA9PiBnZXQoaXRlbSwgZmllbGQpPy50cmltKCkgPT09IGxhYmVsPy50cmltKCkgfHwgZXNjYXBlSHRtbChnZXQoaXRlbSwgZmllbGQpPy50cmltKCkgfHwgJyAnKSA9PT0gZXNjYXBlSHRtbChsYWJlbD8udHJpbSgpIHx8ICcnKSB8fCBnZXQoaXRlbSwgZmllbGQpPy50cmltKCkgPT09IGVzY2FwZUh0bWwobGFiZWw/LnRyaW0oKSB8fCAnJykpKVxuICAgICk7XG4gICAgaWYgKGl0ZW1FeGl0cykge1xuICAgICAgcmV0dXJuIHsgaXRlbTogaXRlbUV4aXRzLCBpc0l0ZW1TZWxlY3RlZDogZmFsc2UgfTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50Lml0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc05pbChldmVudD8ua2V5KSkge1xuICAgICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLml0ZW1zU2VsZWN0ZWQoKVswXSkge1xuICAgICAgdGhpcy50ZW1wSWdub3JlRW1pdC5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLmhhbmRsZXJSZW1vdmVJdGVtU2VsZWN0ZWQoXG4gICAgICAgIHtcbiAgICAgICAgICBzdG9wUHJvcGFnYXRpb246ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIEV2ZW50LFxuICAgICAgICB0aGlzLml0ZW1zU2VsZWN0ZWQoKVswXSxcbiAgICAgICAgdGhpcy5pdGVtc1NlbGVjdGVkKClbMF0uZGlzYWJsZUl0ZW1cbiAgICAgICk7XG4gICAgICB0aGlzLnRlbXBJZ25vcmVFbWl0LnNldChmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlSXRlbXNTZWxlY3RlZChbZXZlbnQuaXRlbV0sICEhdGhpcy5pdGVtc1NlbGVjdGVkKClbMF0pOyAvLyBCdWcgIzM2MDc1XG4gIH1cblxuICBwcml2YXRlIGdldEZsYWdFbWl0U2VsZWN0ZWRJdGVtKGtleXM6IEFycmF5PHVua25vd24+KSB7XG4gICAgaWYgKCF0aGlzLmlnbm9yZUVtaXRXaGVuU2FtZURhdGFTZWxlY3RlZCgpIHx8IGtleXMubGVuZ3RoICE9PSB0aGlzLml0ZW1zU2VsZWN0ZWQoKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKCF0aGlzLml0ZW1zU2VsZWN0ZWQoKS5zb21lKChpdGVtKSA9PiBnZXQoaXRlbSwgdGhpcy5maWVsZEtleSgpKSA9PT0ga2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTZWxlY3RNdWx0aUtleShldmVudDogSUxpc3REYXRhRW1pdE11bHRpS2V5IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gW107XG4gICAgY29uc3QgaXRlbXM6IEFycmF5PHVua25vd24+ID0gW107XG4gICAgaWYgKGV2ZW50LmtleXMgJiYgZXZlbnQua2V5cy5sZW5ndGggJiYgKCFldmVudC5tYXBLZXlzIHx8ICFldmVudC5tYXBLZXlzLmxlbmd0aCkpIHtcbiAgICAgIGtleXMucHVzaCguLi5ldmVudC5rZXlzKTtcbiAgICB9XG4gICAgY29uc3QgaWdub3JlRW1pdEtleVNlbGVjdGVkV2hlbkl0ZW1zTm90RXhpdHNFbXB0eSA9IHRoaXMuZ2V0RmxhZ0VtaXRTZWxlY3RlZEl0ZW0oY2xvbmVEZWVwKGV2ZW50LmtleXMgPz8gW10pKTtcbiAgICBldmVudC5tYXBLZXlzLmZvckVhY2goKG1hcEtleSkgPT4ge1xuICAgICAgaWYgKGlzTmlsKG1hcEtleS5rZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChtYXBLZXkuaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbXMucHVzaChtYXBLZXkuaXRlbSk7XG4gICAgICB9XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5pdGVtc1NlbGVjdGVkKCkpKSB7XG4gICAgICAgIHJldHVybiBrZXlzLnB1c2gobWFwS2V5LmtleSk7XG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc1NlbGVjdGVkKCkuZmluZCgoaXRlbSkgPT4gZ2V0KGl0ZW0sIHRoaXMuZmllbGRLZXkoKSkgPT09IG1hcEtleS5rZXkpO1xuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ga2V5cy5wdXNoKG1hcEtleS5rZXkpO1xuICAgIH0pO1xuICAgIGlmIChrZXlzLmxlbmd0aCkge1xuICAgICAgY29uc3QgcmVzdWx0RGF0YTogQXJyYXk8dW5rbm93bj4gPSBhd2FpdCB0aGlzLmdldERldGFpbEJ5SWRzKGtleXMsIHRydWUpO1xuICAgICAgaXRlbXMucHVzaCguLi5yZXN1bHREYXRhKTtcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZUVtcHR5ID0gdGhpcy52YWxpZFJlcXVpcmVkKCk/Lm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRDtcbiAgICBsZXQgaWdub3JlVmFsaWRhdGUgPSB0cnVlO1xuICAgIGlmIChtZXNzYWdlRW1wdHkgPT09IHRoaXMuZXJyb3IoKT8ubWVzc2FnZSkge1xuICAgICAgaWdub3JlVmFsaWRhdGUgPSBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaXRlbVJlbW92ZSA9IHRoaXMuaXRlbXNTZWxlY3RlZCgpLmZpbmQoKGl0ZW1TZWxlY3RlZCkgPT4gZ2V0KGl0ZW1TZWxlY3RlZCwgdGhpcy5maWVsZEtleSgpKSAmJiAhaXRlbXMuc29tZSgoaXRlbSkgPT4gZ2V0KGl0ZW1TZWxlY3RlZCwgdGhpcy5maWVsZEtleSgpKSA9PT0gZ2V0KGl0ZW0sIHRoaXMuZmllbGRLZXkoKSkpKTtcbiAgICB0aGlzLml0ZW1zU2VsZWN0ZWQudXBkYXRlKChpdGVtc1NlbGVjdGVkKSA9PiBpdGVtc1NlbGVjdGVkLmZpbHRlcigoaXRlbVNlbGVjdGVkKSA9PiAhZ2V0KGl0ZW1TZWxlY3RlZCwgdGhpcy5maWVsZEtleSgpKSB8fCAoZXZlbnQua2V5cy5sZW5ndGggJiYgaXRlbXMuc29tZSgoaXRlbSkgPT4gZ2V0KGl0ZW1TZWxlY3RlZCwgdGhpcy5maWVsZEtleSgpKSA9PT0gZ2V0KGl0ZW0sIHRoaXMuZmllbGRLZXkoKSkpKSkpO1xuICAgIGlmIChpdGVtUmVtb3ZlKSB7XG4gICAgICBpZiAodGhpcy5lbnRlckF1dG9BZGRUYWdUb0xpc3QoKSAmJiAhaXNOaWwoZ2V0KGl0ZW1SZW1vdmUsIHRoaXMuZmllbGRLZXkoKSkpICYmIGAke2dldChpdGVtUmVtb3ZlLCB0aGlzLmZpZWxkS2V5KCkpfWAuc2VhcmNoKHRoaXMuZmFrZUlkKCkpID49IDApIHtcbiAgICAgICAgdGhpcy5rZXlzSGlkZGVuSXRlbS51cGRhdGUoKGl0ZW1zKSA9PiBbLi4uKGl0ZW1zIHx8IFtdKSwgZ2V0KGl0ZW1SZW1vdmUsIHRoaXMuZmllbGRLZXkoKSldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFldmVudC5rZXlzLmxlbmd0aCkge1xuICAgICAgdGhpcy5jaGVja1ZhbGlkKCk7XG4gICAgICB0aGlzLmtleXNTZWxlY3RlZC5zZXQoQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMuaXRlbXNTZWxlY3RlZCgpPy5tYXAoKGl0ZW0pID0+IGdldChpdGVtLCBgcmVmLiR7dGhpcy5maWVsZEtleSgpfWApKSkpKTtcbiAgICAgIHRoaXMub3V0U2VsZWN0TXVsdGlJdGVtLmVtaXQodGhpcy5nZXRJdGVtU2VsZWN0ZWQoKSk7XG4gICAgICB0aGlzLmNoZWNrVmlld0NoYW5nZShmYWxzZSwgaWdub3JlVmFsaWRhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUl0ZW1zU2VsZWN0ZWQoaXRlbXMsIGlnbm9yZVZhbGlkYXRlLCBpZ25vcmVFbWl0S2V5U2VsZWN0ZWRXaGVuSXRlbXNOb3RFeGl0c0VtcHR5KTtcbiAgICB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGV0YWlsQnlJZHMoa2V5czogQXJyYXk8dW5rbm93bj4sIGlzUmVzcG9uc2VEYXRhPzogYm9vbGVhbik6IFByb21pc2U8QXJyYXk8dW5rbm93bj4+IHtcbiAgICBjb25zdCBodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkcyA9IHRoaXMuaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZHMoKTtcbiAgICBpZiAoIWh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRzIHx8IHRoaXMubG9hZGluZ0RldGFpbCgpIHx8ICEoa2V5cyBpbnN0YW5jZW9mIEFycmF5KSB8fCAha2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVMb2FkaW5nRGV0YWlsKHRydWUpO1xuICAgIGNvbnN0IGNsb25lSHR0cERldGFpbENvbmZpZyA9IGNsb25lRGVlcChodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkcyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYXJndW1lbnRzVmFsdWUsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlIH0gPSBjbG9uZUh0dHBEZXRhaWxDb25maWc7XG4gICAgICBpZiAoIWd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlIHx8ICFndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZS5kZXRhaWxCeUlkKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlLmRldGFpbEJ5SWQuZmllbGRHZXRWYWx1ZSA9ICdrZXlzJztcbiAgICAgIHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUFyZ3VtZW50cyhhcmd1bWVudHNWYWx1ZSwgeyBrZXlzOiBrZXlzIH0sIHt9LCAnJywgZmFsc2UsIGZhbHNlLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSk7XG4gICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UuY2FsbEFwaShjbG9uZUh0dHBEZXRhaWxDb25maWcpKSBhcyBJSHR0cFJlc3BvbnNlPEFycmF5PHVua25vd24+PjtcbiAgICAgIGlmICghaXNSZXNwb25zZURhdGEpIHtcbiAgICAgICAgdGhpcy51cGRhdGVJdGVtc1NlbGVjdGVkKHJlc3VsdC5kYXRhIHx8IFtdKTtcbiAgICAgICAgdGhpcy51cGRhdGVMb2FkaW5nRGV0YWlsKGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVMb2FkaW5nRGV0YWlsKGZhbHNlKTtcbiAgICAgIHJldHVybiByZXN1bHQuZGF0YSB8fCBbXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgdGhpcy51cGRhdGVMb2FkaW5nRGV0YWlsKGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja1ZhbGlkKCkge1xuICAgIGNvbnN0IHZhbGlkID0gdGhpcy5pdGVtc1NlbGVjdGVkKCkgJiYgdGhpcy5pdGVtc1NlbGVjdGVkKCkubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGNvbnN0IHN0YXRlRXJyb3IgPSAhIXRoaXMuZXJyb3IoKTtcbiAgICB0aGlzLmVycm9yLnNldCh1bmRlZmluZWQpO1xuICAgIGlmICh0aGlzLnZhbGlkUmVxdWlyZWQoKSAmJiAhdmFsaWQpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KHsgLi4udGhpcy52YWxpZFJlcXVpcmVkKCksIG1lc3NhZ2U6IHRoaXMudmFsaWRSZXF1aXJlZCgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQgfSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5lcnJvcigpKSB7XG4gICAgICB0aGlzLmNoZWNrUGF0dGVybih0aGlzLml0ZW1zU2VsZWN0ZWQoKSk7XG4gICAgICB0aGlzLmNoZWNrTWF4SXRlbVNlbGVjdGVkVmFsaWQoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRlbXBJZ25vcmVFbWl0KCkpIHtcbiAgICAgIHRoaXMub3V0VmFsaWRFdmVudC5lbWl0KCF0aGlzLmVycm9yKCkpO1xuICAgIH1cbiAgICBpZiAoc3RhdGVFcnJvciAhPT0gISF0aGlzLmVycm9yKCkpIHtcbiAgICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy51cGRhdGVQb3BvdmVyT3ZlcmxheVBvc2l0aW9uKCk7XG4gICAgfVxuICAgIHJldHVybiAhdGhpcy5lcnJvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja01heEl0ZW1TZWxlY3RlZFZhbGlkKCkge1xuICAgIGNvbnN0IHZhbGlkTWF4SXRlbVNlbGVjdGVkID0gdGhpcy52YWxpZE1heEl0ZW1TZWxlY3RlZCgpO1xuICAgIGlmICh2YWxpZE1heEl0ZW1TZWxlY3RlZCAmJiB0aGlzLml0ZW1zU2VsZWN0ZWQoKS5sZW5ndGggPiB2YWxpZE1heEl0ZW1TZWxlY3RlZC52YWx1ZSkge1xuICAgICAgdGhpcy5lcnJvci5zZXQoeyAuLi52YWxpZE1heEl0ZW1TZWxlY3RlZCwgbWVzc2FnZTogdmFsaWRNYXhJdGVtU2VsZWN0ZWQubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCwgaW50ZXJwb2xhdGVQYXJhbXM6IHsgdmFsdWU6IHZhbGlkTWF4SXRlbVNlbGVjdGVkLnZhbHVlIH0gfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1BhdHRlcm4oaXRlbXM6IEFycmF5PHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsaWRQYXR0ZXJuID0gdGhpcy52YWxpZFBhdHRlcm4oKTtcbiAgICBpZiAoIXZhbGlkUGF0dGVybiB8fCAhdmFsaWRQYXR0ZXJuLmxlbmd0aCB8fCAhaXRlbXMgfHwgIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdmFsaWQgb2YgdmFsaWRQYXR0ZXJuKSB7XG4gICAgICBpZiAodmFsaWQucGF0dGVybiAmJiBpdGVtcy5zb21lKChpdGVtKSA9PiAhdmFsaWQucGF0dGVybi50ZXN0KGdldChpdGVtLCB0aGlzLmZpZWxkTGFiZWwoKSkpKSkge1xuICAgICAgICB0aGlzLmVycm9yLnNldCh7IC4uLnZhbGlkLCBtZXNzYWdlOiB2YWxpZC5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfUEFUVEVOX1ZBTElEIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja0J1dHRvbk90aGVyKGV2ZW50OiBJQnV0dG9uKSB7XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbk90aGVyLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJdGVtU2VsZWN0ZWQoKTogQXJyYXk8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zU2VsZWN0ZWQoKS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1NYXAgPSB7IC4uLml0ZW0gfTtcbiAgICAgIGlmICghaXNOaWwoZ2V0KGl0ZW1NYXAsIHRoaXMuZmllbGRLZXkoKSkpICYmIGAke2dldChpdGVtTWFwLCB0aGlzLmZpZWxkS2V5KCkpfWAuc2VhcmNoKHRoaXMuZmFrZUlkKCkpID09PSAwKSB7XG4gICAgICAgIHNldChpdGVtTWFwLCB0aGlzLmZpZWxkS2V5KCksICcnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtTWFwO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc2V0VG9EZWZhdWx0RGF0YVNlbGVjdGVkKGl0ZW1TZWxlY3RlZD86IEFycmF5PHVua25vd24+KSB7XG4gICAgaWYgKGl0ZW1TZWxlY3RlZCAmJiBBcnJheS5pc0FycmF5KGl0ZW1TZWxlY3RlZCkpIHtcbiAgICAgIHRoaXMuaXRlbXNTZWxlY3RlZC5zZXQoW10pO1xuICAgICAgdGhpcy51cGRhdGVJdGVtc1NlbGVjdGVkKGl0ZW1TZWxlY3RlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZW1TZWxlY3RlZCA9IG5ldyBBcnJheTx1bmtub3duPigpO1xuICAgIGlmICghdGhpcy5maWVsZEtleSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRLZXlzU2VsZWN0ZWQgPSB0aGlzLmRlZmF1bHRLZXlzU2VsZWN0ZWQoKTtcbiAgICBpZiAoZGVmYXVsdEtleXNTZWxlY3RlZCAmJiBBcnJheS5pc0FycmF5KGRlZmF1bHRLZXlzU2VsZWN0ZWQpKSB7XG4gICAgICB0aGlzLml0ZW1zU2VsZWN0ZWQuc2V0KFtdKTtcbiAgICAgIHRoaXMuZ2V0RGV0YWlsQnlJZHMoZGVmYXVsdEtleXNTZWxlY3RlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRJdGVtc1NlbGVjdGVkID0gdGhpcy5kZWZhdWx0SXRlbXNTZWxlY3RlZCgpO1xuICAgIGlmIChkZWZhdWx0SXRlbXNTZWxlY3RlZCAmJiBBcnJheS5pc0FycmF5KGRlZmF1bHRJdGVtc1NlbGVjdGVkKSkge1xuICAgICAgdGhpcy5pdGVtc1NlbGVjdGVkLnNldChbXSk7XG4gICAgICB0aGlzLnVwZGF0ZUl0ZW1zU2VsZWN0ZWQoZGVmYXVsdEl0ZW1zU2VsZWN0ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRnVuY3Rpb25Db250cm9sTGlzdChldmVudDogSUxpc3RGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMubGlzdEZ1bmN0aW9uQ29udHJvbC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGZvY3VzSW5wdXQoKSB7XG4gICAgdGhpcy5pbnB1dEZ1bmN0aW9uQ29udHJvbCgpPy5mb2N1cygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoZXZlbnQ6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdChldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoZmxhZzogSUZsYWdNb3VzZSkge1xuICAgIHRoaXMuZmxhZ01vdXNlLnNldChmbGFnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2tUYWdJdGVtKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICghdGhpcy5zaG93TGlzdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZmxhZ01vdXNlLnNldCh7IGlzTW91c2VFbnRlcjogdHJ1ZSwgaXNNb3VzZUVudGVyQ29udGVudDogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzZXRFcnJvcigpIHtcbiAgICB0aGlzLmVycm9yLnNldCh1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMb2FkaW5nRGV0YWlsKGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy5sb2FkaW5nRGV0YWlsLnNldChldmVudCk7XG4gICAgdGhpcy5vdXRMb2FkaW5nR2V0RGV0YWlsU2VsZWN0ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUl0ZW1TZWxlY3RlZERpc2FibGUoKSB7XG4gICAgY29uc3QgZ2V0RGlzYWJsZUl0ZW0gPSB0aGlzLmNvbmZpZygpPy5nZXREaXNhYmxlSXRlbTtcbiAgICBpZiAoIWdldERpc2FibGVJdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXRlbXNTZWxlY3RlZC51cGRhdGUoKGl0ZW1zU2VsZWN0ZWQpID0+IGl0ZW1zU2VsZWN0ZWQubWFwKChpdGVtKSA9PiAoeyAuLi5pdGVtLCBkaXNhYmxlSXRlbTogZ2V0RGlzYWJsZUl0ZW0oaXRlbSkgfSkpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaExpc3REYXRhKCkge1xuICAgIHRoaXMubGlzdEZ1bmN0aW9uQ29udHJvbCgpPy5yZWZyZXNoKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcblxuICAgIGlmICh0aGlzLnRpbWVPdXRGbGFnKCkpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVPdXRGbGFnKCkpO1xuICAgIGlmICh0aGlzLnRpbWVPdXRDaGFuZ2VTZWFyY2goKSkgY2xlYXJUaW1lb3V0KHRoaXMudGltZU91dENoYW5nZVNlYXJjaCgpKTtcbiAgICBpZiAodGhpcy50aW1lT3V0Q2hlY2tWaWV3Q2hhbmdlKCkpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVPdXRDaGVja1ZpZXdDaGFuZ2UoKSk7XG4gICAgaWYgKHRoaXMudGltZW91dENsaWNrT3V0c2lkZSgpKSBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0Q2xpY2tPdXRzaWRlKCkpO1xuXG4gICAgaWYgKHRoaXMua2V5U2VhcmNoQ2hhbmdlU3ViKCkpIHRoaXMua2V5U2VhcmNoQ2hhbmdlU3ViKCk/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIj5cbiAgQGlmIChsYWJlbENvbmZpZygpOyBhcyBsYWJlbENvbmZpZykge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWxcbiAgICAgIFtjbGFzc0luY2x1ZGVdPVwibGFiZWxDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICAgIFtsYWJlbExlZnRdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0XCJcbiAgICAgIFtsYWJlbExlZnRDbGFzc109XCJsYWJlbENvbmZpZy5sYWJlbExlZnRDbGFzc1wiXG4gICAgICBbcmVxdWlyZWRdPVwibGFiZWxDb25maWcucmVxdWlyZWRcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbkNsYXNzXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uQ2xhc3NcIlxuICAgICAgW2xhYmVsUmlnaHRdPVwibGFiZWxDb25maWcubGFiZWxSaWdodFwiXG4gICAgICBbbGFiZWxSaWdodENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtidXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5idXR0b25zTGVmdFwiXG4gICAgICBbYnV0dG9uc1JpZ2h0XT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNSaWdodFwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zTGVmdCB8fCBkaXNhYmxlKCkgfHwgbG9hZGluZygpIHx8IGxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNSaWdodF09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc1JpZ2h0IHx8IGRpc2FibGUoKSB8fCBsb2FkaW5nKCkgfHwgbG9hZGluZ0RldGFpbCgpXCJcbiAgICAgIFtoYXNUb2dnbGVdPVwibGFiZWxDb25maWcuaGFzVG9nZ2xlXCJcbiAgICAgIFt0b2dnbGVBY3RpdmVdPVwibGFiZWxDb25maWcudG9nZ2xlQWN0aXZlXCJcbiAgICAgIFt0b2dnbGVBY3RpdmVdPVwibGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZSB8fCBkaXNhYmxlKCkgfHwgbG9hZGluZygpIHx8IGxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICBbcG9wb3Zlcl09XCJsYWJlbENvbmZpZy5wb3BvdmVyXCJcbiAgICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImxhYmVsQ29uZmlnLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgICAgW29ubHlTaG93Q291bnRdPVwibGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICBbbGltaXRMZW5ndGhdPVwibGFiZWxDb25maWcubGltaXRMZW5ndGhcIlxuICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgW2Rpc2FibGVCdXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbiB8fCBkaXNhYmxlKClcIlxuICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgIFtjb3VudF09XCJsYWJlbENvbmZpZy5jb3VudFwiIC8+XG4gIH1cbiAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsXCJcbiAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiZGlzYWJsZSgpIHx8IHJlYWRvbmx5KCkgfHwgISFjb25maWcoKT8uaWdub3JlU2hvd0xpc3QgfHwgZmFsc2VcIlxuICAgIFtpZ25vcmVDdXJzb3JQb2ludGVyTW9kZUxpa2VDbGlja109XCJ0cnVlXCJcbiAgICBbZWxlbWVudFJlZkN1c3RvbV09XCJ0YWdzRWxcIlxuICAgIFttb2RlXT1cIiFjb25maWcoKT8uaWdub3JlSW5wdXQgPyAnY2xpY2snIDogJ2NsaWNrLXRvZ2dsZSdcIlxuICAgIFtpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlXT1cInRydWVcIlxuICAgIFtmbGFnTW91c2VdPVwiZmxhZ01vdXNlKClcIlxuICAgIFtjb25maWddPVwie1xuICAgICAgYW5pbWF0aW9uQ29uZmlnOiBjb25maWcoKT8uYW5pbWF0aW9uQ29uZmlnIHx8IHt9LFxuICAgICAgekluZGV4OiB6SW5kZXgoKSxcbiAgICAgIHdpZHRoQnlQYXJlbnQ6IHRydWUsXG4gICAgICBwYXJlbnRCb3JkZXJXaWR0aDogcGFyZW50Qm9yZGVyV2lkdGgoKSA/PyAwLFxuICAgICAgbWF4SGVpZ2h0OiAyMDQ4LFxuICAgICAgbWF4V2lkdGg6IDIwNDgsXG4gICAgICBkaXJlY3Rpb246IGNvbmZpZygpPy5kaXJlY3Rpb25MaXN0IHx8ICdib3R0b20nLFxuICAgICAgZGlyZWN0aW9uRGlzdGFuY2U6IDIsXG4gICAgICB0ZW1wbGF0ZTogIXNob3dMaXN0QmVsbG93KCkgPyBsaXN0Vmlld0VsIDogdW5kZWZpbmVkLFxuICAgICAgd2hpdGVUaGVtZTogdHJ1ZSxcbiAgICAgIGlnbm9yZUFycm93OiB0cnVlLFxuICAgICAgY2xhc3NJbmNsdWRlOiAncm91bmRlZC1bNHB4XSAnICsgY2xhc3NJbmNsdWRlUG9wb3ZlcigpICsgKCFsaXN0Q29uZmlnKCk/Lmlnbm9yZVNob3dEYXRhV2hlbk5vdFNlYXJjaCB8fCBrZXlTZWFyY2goKSA/ICcgbGlicy11aS1ib3JkZXItZ2VuZXJhbCcgOiAnJyksXG4gICAgICBwb3NpdGlvbjogeyBtb2RlOiAnc3RhcnQnLCBkaXN0YW5jZTogMCB9LFxuICAgIH1cIlxuICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoJGV2ZW50KVwiXG4gICAgKG91dEV2ZW50KT1cImhhbmRsZXJQb3BvdmVyRXZlbnQoJGV2ZW50KVwiXG4gICAgKG91dEV2ZW50UG9wb3ZlckNvbnRlbnQpPVwiaGFuZGxlclBvcG92ZXJDb250ZW50RXZlbnQoJGV2ZW50KVwiXG4gICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nZUZsYWdNb3VzZSgkZXZlbnQpXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICBbY2xhc3MuY3Vyc29yLXBvaW50ZXJdPVwiIWRpc2FibGUoKSAmJiAhcmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5LWJhY2tncm91bmRdPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlLWJhY2tncm91bmRdPVwiZGlzYWJsZSgpXCI+XG4gICAgICBAaWYgKGNvbmZpZygpPy51aUxpa2VEcm9wZG93bikge1xuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiZmxleCB0ZXh0LVsxNnB4XSBhYnNvbHV0ZSByaWdodC1bMTZweF0gdG9wLVs4cHhdIGxpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCB6LVsxXVwiXG4gICAgICAgICAgW2NsYXNzLnRleHQtWyM2YTczODNdXT1cIiFyZWFkb25seSgpICYmICFkaXNhYmxlKClcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCI+PC9pPlxuICAgICAgfVxuICAgICAgPGRpdlxuICAgICAgICAjdGFnc0VsXG4gICAgICAgIFtjbGFzc109XCInbGlicy11aS10YWdzICcgKyAoY29uZmlnKCk/LmNsYXNzSW5jbHVkZSB8fCAnJykgKyAocmVhZG9ubHkoKSA/IGNvbmZpZygpPy5jbGFzc0N1c3RvbVdoZW5SZWFkT25seSB8fCAnIGxpYnMtdWktcmVhZG9ubHknIDogJycpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktdGFncy1ub3QtcG9wdXBdPVwiKCFzaG93TGlzdCgpICYmICFzaG93Qm9yZGVyQWN0aXZlV2hlbkZvY3VzSW5wdXQoKSkgfHwgKCFmb2N1cygpICYmIHNob3dCb3JkZXJBY3RpdmVXaGVuRm9jdXNJbnB1dCgpKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLXRhZ3MtZXJyb3JdPVwiISFlcnJvcigpICYmICFjb25maWcoKT8uaWdub3JlU2hvd0Vycm9yXCJcbiAgICAgICAgW2NsYXNzLiFwci1bMzJweF1dPVwiY29uZmlnKCk/LnVpTGlrZURyb3Bkb3duXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHktYmFja2dyb3VuZF09XCJyZWFkb25seSgpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZS1iYWNrZ3JvdW5kXT1cImRpc2FibGUoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1wcmltYXJ5LWdlbmVyYWxdPVwiZm9jdXMoKSAmJiBzaG93Qm9yZGVyQWN0aXZlV2hlbkZvY3VzSW5wdXQoKVwiXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNDbGlja091dHNpZGVEaXJlY3RpdmVcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgICAgKG91dE91dHNpZGUpPVwiaGFuZGxlckNsaWNrT3V0c2lkZSgkZXZlbnQpXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXNTZWxlY3RlZCgpOyB0cmFjayBpdGVtW2ZpZWxkS2V5KCldKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgICAgIFt0eXBlXT1cIml0ZW0/LnRvb2x0aXA/LnR5cGUgfHwgJ290aGVyJ1wiXG4gICAgICAgICAgICBbY29uZmlnXT1cIml0ZW0/LnRvb2x0aXA/LmNvbmZpZyB8fCB7IHpJbmRleDogekluZGV4KCkgKyAyIH1cIlxuICAgICAgICAgICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cIiFpdGVtPy50b29sdGlwIHx8IGl0ZW0udG9vbHRpcC5pZ25vcmVTaG93UG9wb3ZlclwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJpdGVtPy5idWxsZXQgfHwgaXRlbT8ubmdTdHlsZXNcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImNsYXNzSW5jbHVkZVRhZ0l0ZW0oKSB8fCAnJ1wiXG4gICAgICAgICAgICBbY2xhc3MubGlicy11aS10YWdzLXJlYWRvbmx5XT1cIml0ZW0uZGlzYWJsZUl0ZW1cIlxuICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktdGFncy1pdGVtXT1cIiFpdGVtLmRpc2FibGVJdGVtXCJcbiAgICAgICAgICAgIFtjbGFzcy5jdXJzb3ItZGVmYXVsdF09XCJkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiaGFuZGxlckNsaWNrVGFnSXRlbSgkZXZlbnQpXCI+XG4gICAgICAgICAgICBAaWYgKGZpZWxkR2V0SW1hZ2UoKSB8fCBjb25maWcoKT8uZmllbGRHZXRJbWFnZTsgYXMgZmllbGRHZXRJbWFnZSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1hdmF0YXJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY2xhc3NBdmF0YXJJbmNsdWRlKCkgfHwgY29uZmlnKCk/LmNsYXNzQXZhdGFySW5jbHVkZSB8fCAnbXItWzhweF0nXCJcbiAgICAgICAgICAgICAgICAgIFtzaXplXT1cImltYWdlU2l6ZSgpIHx8IGNvbmZpZygpPy5pbWFnZVNpemVcIlxuICAgICAgICAgICAgICAgICAgW2xpbmtBdmF0YXJdPVwiaXRlbVtmaWVsZEdldEltYWdlXVwiXG4gICAgICAgICAgICAgICAgICBbbGlua0F2YXRhckVycm9yXT1cImxpbmtJbWFnZUVycm9yKCkgfHwgY29uZmlnKCk/LmxpbmtJbWFnZUVycm9yXCJcbiAgICAgICAgICAgICAgICAgIFtpZEdlbkNvbG9yXT1cIml0ZW1bZmllbGRHZXRUZXh0QXZhdGFyKCkgfHwgY29uZmlnKCk/LmZpZWxkR2V0VGV4dEF2YXRhciB8fCAnJ11cIlxuICAgICAgICAgICAgICAgICAgW2dldExhc3RUZXh0QWZ0ZXJTcGFjZV09XCJnZXRMYXN0VGV4dEFmdGVyU3BhY2UoKSB8fCBjb25maWcoKT8uZ2V0TGFzdFRleHRBZnRlclNwYWNlXCJcbiAgICAgICAgICAgICAgICAgIFt0ZXh0QXZhdGFyXT1cIml0ZW1bZmllbGRHZXRUZXh0QXZhdGFyKCkgfHwgY29uZmlnKCk/LmZpZWxkR2V0VGV4dEF2YXRhciB8fCAndXNlciddXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZm9udC1oNnJcIlxuICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cIml0ZW0uZmllbGRMYWJlbCB8fCAnICcgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICAgICAgICBAaWYgKCFkaXNhYmxlKCkgJiYgIWl0ZW0uZGlzYWJsZUl0ZW0gJiYgIXJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1sLVs4cHhdXCI+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICNpY29uQ2xvc2VFbFxuICAgICAgICAgICAgICAgICAgW2F0dHIuc3BlY2lmaWNTdHlsZV09XCIhIShpdGVtPy5idWxsZXQgfHwgaXRlbT8ubmdTdHlsZXMpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInZmxleCB0ZXh0LVsxNnB4XSAnICsgKGNsYXNzSWNvblJlbW92ZVRhZ0l0ZW0oKSB8fCAnbGlicy11aS1pY29uLWNsb3NlJylcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cIiFkaXNhYmxlKCkgJiYgIWxvYWRpbmcoKSAmJiAhbG9hZGluZ0RldGFpbCgpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImRpc2FibGUoKSB8fCBsb2FkaW5nKCkgfHwgbG9hZGluZ0RldGFpbCgpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIml0ZW0/LmJ1bGxldCB8fCBpdGVtPy5uZ1N0eWxlcyB8IExpYnNVaUNvbXBvbmVudHNUYWdzR2V0Q29sb3JQaXBlOiBpY29uQ2xvc2VFbFwiXG4gICAgICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiaGFuZGxlclJlbW92ZUl0ZW1TZWxlY3RlZCgkZXZlbnQsIGl0ZW0pXCI+PC9pPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFzaW5nbGVTZWxlY3RlZCgpIHx8IChzaW5nbGVTZWxlY3RlZCgpICYmICFpdGVtc1NlbGVjdGVkKCkubGVuZ3RoKSkge1xuICAgICAgICAgIEBpZiAoIWNvbmZpZygpPy5pZ25vcmVJbnB1dCAmJiAhY29uZmlnKCk/LnVpTGlrZURyb3Bkb3duICYmICghaGlkZGVuSW5wdXRXaGVuUmVhZG9ubHkoKSB8fCAoaGlkZGVuSW5wdXRXaGVuUmVhZG9ubHkoKSAmJiAhcmVhZG9ubHkoKSkpKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1pbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImdyb3dcIlxuICAgICAgICAgICAgICBbY2xhc3MubWItWzRweF1dPVwiaXRlbXNTZWxlY3RlZCgpLmxlbmd0aFwiXG4gICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3ctZnVsbCBiZy10cmFuc3BhcmVudCAnICsgKGNvbmZpZygpPy5jbGFzc0lucHV0SW5jbHVkZSB8fCAncHgtWzRweF0gbWluLXctWzMwcHhdJylcIlxuICAgICAgICAgICAgICBbZGVmYXVsdEhlaWdodF09XCIyNFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJyZWFkb25seSgpID8gJycgOiBwbGFjZWhvbGRlcigpIHx8ICdpMThuX2ltcG9ydF9jb250ZW50J1wiXG4gICAgICAgICAgICAgIFtub0JvcmRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgWyh2YWx1ZSldPVwidmFsdWVJbnB1dFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCBsb2FkaW5nKCkgfHwgbG9hZGluZ0RldGFpbCgpIHx8IGRpc2FibGVXaGVuTWF4SXRlbSgpXCJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAob3V0RW50ZXJFdmVudCk9XCJoYW5kbGVyRW50ZXJFdmVudCgpXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZXJWYWx1ZUNoYW5nZVNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG91dEZvY3VzQW5kQmx1ckV2ZW50KT1cImhhbmRsZXJGb2N1c0FuZEJsdXJFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlcklucHV0RnVuY3Rpb25Db250cm9sKCRldmVudClcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGNvbmZpZygpPy5pZ25vcmVJbnB1dCAmJiBjb25maWcoKT8udWlMaWtlRHJvcGRvd24gJiYgIWl0ZW1zU2VsZWN0ZWQoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBwYi1bNHB4XSBwdC1bMnB4XSBtbC1bMTFweF0gbGlicy11aS1mb250LWg1clwiXG4gICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjOWNhMmFkXV09XCJkaXNhYmxlKClcIj5cbiAgICAgICAgICAgICAge3sgcGxhY2Vob2xkZXIoKSB8fCAnaTE4bl9zZWxlY3RfdmFsdWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChlcnJvcigpICYmICFjb25maWcoKT8uaWdub3JlU2hvd0Vycm9yKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LVsjZWUyZDQxXSBsaWJzLXVpLWZvbnQtaDdyIG10LVs4cHhdXCI+e3sgZXJyb3IoKT8ubWVzc2FnZSB8fCAnICcgfCB0cmFuc2xhdGU6IGVycm9yKCk/LmludGVycG9sYXRlUGFyYW1zIHx8IHt9IH19PC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG48L2Rpdj5cbkBpZiAoc2hvd0xpc3RCZWxsb3coKSkge1xuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdFZpZXdFbFwiPjwvbmctY29udGFpbmVyPlxufVxuPG5nLXRlbXBsYXRlICNsaXN0Vmlld0VsPlxuICBAaWYgKGxpc3RDb25maWcoKTsgYXMgbGlzdENvbmZpZykge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGlzdFxuICAgICAgW3NlYXJjaENvbmZpZ109XCJsaXN0U2VhcmNoQ29uZmlnKCkgfHwgeyBjbGFzc0luY2x1ZGU6ICdoaWRkZW4nLCBpY29uTGVmdENsYXNzOiAnaGlkZGVuJyB9XCJcbiAgICAgIFtpc1NlYXJjaE9ubGluZV09XCJpc1NlYXJjaE9ubGluZSgpXCJcbiAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgW2tleVNlYXJjaF09XCJrZXlTZWFyY2goKVwiXG4gICAgICBbY29uZmlnXT1cImxpc3RDb25maWdcIlxuICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKSB8fCBkaXNhYmxlV2hlbk1heEl0ZW0oKVwiXG4gICAgICBbc2VhcmNoUGFkZGluZ109XCJsaXN0U2VhcmNoUGFkZGluZygpXCJcbiAgICAgIFttYXhJdGVtU2hvd109XCJsaXN0TWF4SXRlbVNob3coKSB8fCA2XCJcbiAgICAgIFttdWx0aUtleVNlbGVjdGVkXT1cImtleXNTZWxlY3RlZCgpXCJcbiAgICAgIFtjbGlja0V4YWN0bHldPVwiZmFsc2VcIlxuICAgICAgW2tleXNIaWRkZW5JdGVtXT1cImtleXNIaWRkZW5JdGVtKClcIlxuICAgICAgW2tleXNEaXNhYmxlSXRlbV09XCJsaXN0S2V5RGlzYWJsZSgpXCJcbiAgICAgIFtkaXZpZGVyQ2xhc3NJbmNsdWRlXT1cImxpc3REaXZpZGVyQ2xhc3NJbmNsdWRlKCkgPz8gJ2hpZGRlbidcIlxuICAgICAgW2J1dHRvbnNPdGhlcl09XCJsaXN0QnV0dG9uc090aGVyKClcIlxuICAgICAgW2JhY2tncm91bmRMaXN0Q3VzdG9tXT1cImxpc3RCYWNrZ3JvdW5kTGlzdEN1c3RvbSgpXCJcbiAgICAgIFtmdW5jdGlvbkdldEl0ZW1zQXV0b0FkZExpc3RdPVwiZnVuY3Rpb25HZXRJdGVtQXV0b0FkZExpc3QoKVwiXG4gICAgICBbaGlkZGVuSW5wdXRTZWFyY2hdPVwibGlzdEhpZGRlbklucHV0U2VhcmNoV2hlbkhhc1NlYXJjaENvbmZpZygpXCJcbiAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2xMaXN0KCRldmVudClcIlxuICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWRLZXkoJGV2ZW50KVwiXG4gICAgICAob3V0U2VsZWN0TXVsdGlLZXkpPVwiaGFuZGxlclNlbGVjdE11bHRpS2V5KCRldmVudClcIlxuICAgICAgKG91dENoYW5nZVZpZXcpPVwiaGFuZGxlckRhdGFDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAob3V0Q2xpY2tCdXR0b25PdGhlcik9XCJoYW5kbGVyQ2xpY2tCdXR0b25PdGhlcigkZXZlbnQpXCJcbiAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9XCJoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpXCJcbiAgICAgIChvdXRMb2FkaW5nKT1cImhhbmRsZXJMb2FkaW5nKCRldmVudClcIiAvPlxuICB9XG48L25nLXRlbXBsYXRlPlxuIl19
781
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFncy9zcmMvdGFncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFncy9zcmMvdGFncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hMLE9BQU8sRUFBRSwrQkFBK0IsRUFBMkIsTUFBTSw0QkFBNEIsQ0FBQztBQUV0RyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRixPQUFPLEVBQWtELG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHeEksT0FBTyxFQUFVLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUF1Riw2QkFBNkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2pMLE9BQU8sRUFBNEMsZ0NBQWdDLEVBQThDLE1BQU0sNkJBQTZCLENBQUM7QUFDckssT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFNUYsT0FBTyxFQUFzQix3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsMEJBQTBCLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUs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LEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3RFLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFJLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUMsQ0FBQztRQUNELFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUNuQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDckYsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUks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NXlCVSw2QkFBNkI7NEZBQTdCLDZCQUE2Qixzb1BDM0MxQyx5NlRBMExBLDJqRkQ1SkksZUFBZSw0RkFDZixnQkFBZ0Isb0pBQ2hCLE9BQU8sMkVBQ1AscUNBQXFDLDBIQUNyQyw4QkFBOEIsNHFCQUM5QixnQ0FBZ0Msb2dCQUNoQyxvQ0FBb0Msd2hEQUNwQywrQkFBK0IsNlhBQy9CLDZCQUE2Qix3L0JBQzdCLGdDQUFnQyx5RUFDaEMsc0NBQXNDOzs0RkFHN0IsNkJBQTZCO2tCQXJCekMsU0FBUzsrQkFFRSx5QkFBeUIsY0FHdkIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixPQUFPO3dCQUNQLHFDQUFxQzt3QkFDckMsOEJBQThCO3dCQUM5QixnQ0FBZ0M7d0JBQ2hDLG9DQUFvQzt3QkFDcEMsK0JBQStCO3dCQUMvQiw2QkFBNkI7d0JBQzdCLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3FCQUN2QyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNBdmF0YXJDb21wb25lbnQsIFRZUEVfU0laRV9BVkFUQVJfQ09ORklHIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1hdmF0YXInO1xuaW1wb3J0IHsgSUJ1dHRvbiB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0NsaWNrT3V0c2lkZURpcmVjdGl2ZSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtY2xpY2stb3V0c2lkZSc7XG5pbXBvcnQgeyBJVmFsaWRNYXhJdGVtU2VsZWN0ZWQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duJztcbmltcG9ydCB7IElGb2N1c0FuZEJsdXJFdmVudCwgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWlucHV0JztcbmltcG9ydCB7IElJbnB1dFNlYXJjaENvbmZpZyB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXNlYXJjaCc7XG5pbXBvcnQgeyBJVmFsaWRQYXR0ZXJuIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgSUxhYmVsLCBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxhYmVsJztcbmltcG9ydCB7IGdldEZpZWxkS2V5QnlUeXBlLCBJTGlzdENvbmZpZ0l0ZW0sIElMaXN0RGF0YUVtaXRLZXksIElMaXN0RGF0YUVtaXRNdWx0aUtleSwgSUxpc3RGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxpc3QnO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSwgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04sIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc2Nyb2xsLW92ZXJsYXknO1xuaW1wb3J0IHsgSUh0dHBSZXNwb25zZSwgSU1lc3NhZ2VUcmFuc2xhdGUgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IElIdHRwUmVxdWVzdENvbmZpZywgTGlic1VpSHR0cFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtaHR0cC1yZXF1ZXN0JztcbmltcG9ydCB7IGNsb25lRGVlcCwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCwgRVJST1JfTUVTU0FHRV9NQVhfVkFMSUQsIEVSUk9SX01FU1NBR0VfUEFUVEVOX1ZBTElELCBlc2NhcGVIdG1sLCBnZXQsIGlzTmlsLCBzZXQsIHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElUYWdzQ29uZmlnLCBJVGFnc0Z1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3RhZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNUYWdzR2V0Q29sb3JQaXBlIH0gZnJvbSAnLi9waXBlcy9nZXQtY29sb3IucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy10YWdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhZ3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGFncy5jb21wb25lbnQuc2NzcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgTmdTdHlsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzQ2xpY2tPdXRzaWRlRGlyZWN0aXZlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzSW5wdXRzSW5wdXRDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzVGFnc0dldENvbG9yUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1RhZ3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIGZsYWdNb3VzZSA9IHNpZ25hbDxJRmxhZ01vdXNlPih7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlIH0pO1xuICBwcm90ZWN0ZWQgbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBsb2FkaW5nRGV0YWlsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGtleVNlYXJjaCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIHZhbHVlSW5wdXQgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByb3RlY3RlZCBpdGVtc1NlbGVjdGVkID0gc2lnbmFsPEFycmF5PGFueT4+KFtdKTtcbiAgcHJvdGVjdGVkIHNob3dMaXN0ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIHBvc2l0aW9uTGlzdCA9IHNpZ25hbDxUWVBFX1BPUE9WRVJfRElSRUNUSU9OIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQga2V5c1NlbGVjdGVkID0gc2lnbmFsPEFycmF5PHVua25vd24+PihbXSk7XG4gIHByb3RlY3RlZCBkaXNhYmxlV2hlbk1heEl0ZW0gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgZm9jdXMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgZXJyb3IgPSBzaWduYWw8SU1lc3NhZ2VUcmFuc2xhdGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBmaWVsZEtleSA9IHNpZ25hbDxzdHJpbmc+KCdpZCcpO1xuICBwcm90ZWN0ZWQgZnVuY3Rpb25HZXRJdGVtQXV0b0FkZExpc3QgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmVudGVyQXV0b0FkZFRhZ1RvTGlzdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiAoKSA9PlxuICAgICAgdGhpcy5pdGVtc1NlbGVjdGVkKClcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gYCR7Z2V0KGl0ZW0sIHRoaXMuZmllbGRLZXkoKSwgJycpfWAuc2VhcmNoKHRoaXMuZmFrZUlkKCkpID09PSAwKVxuICAgICAgICAucmV2ZXJzZSgpO1xuICB9KTtcbiAgcHJvdGVjdGVkIGxpc3RLZXlEaXNhYmxlID0gc2lnbmFsPEFycmF5PHVua25vd24+PihbXSk7XG5cbiAgcHJpdmF0ZSBmYWtlSWQgPSBzaWduYWw8c3RyaW5nPih1dWlkKCkpO1xuICBwcml2YXRlIHRpbWVPdXRGbGFnID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB0aW1lT3V0Q2hhbmdlU2VhcmNoID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB0aW1lT3V0Q2hlY2tWaWV3Q2hhbmdlID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB0aW1lb3V0Q2xpY2tPdXRzaWRlID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBjbGllbnRIZWlnaHQgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGl0ZW1zT2ZMaXN0ID0gc2lnbmFsPEFycmF5PHVua25vd24+PihbXSk7XG4gIHByaXZhdGUga2V5U2VhcmNoQ2hhbmdlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIGtleVNlYXJjaENoYW5nZVN1YiA9IHNpZ25hbDxTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdGVtcElnbm9yZUVtaXQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHBvcG92ZXJGdW5jdGlvbkNvbnRyb2wgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBpbnB1dEZ1bmN0aW9uQ29udHJvbCA9IHNpZ25hbDxJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB0eXBlUG9wb3ZlciA9IHNpZ25hbDxUWVBFX1BPUE9WRVJfRVZFTlQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgbGlzdEZ1bmN0aW9uQ29udHJvbCA9IHNpZ25hbDxJTGlzdEZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGRlZmF1bHRJdGVtc1NlbGVjdGVkQ3VycmVudCA9IHNpZ25hbDxBcnJheTx1bmtub3duPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlUG9wb3ZlciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZW50ZXJBdXRvQWRkVGFnVG9MaXN0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBjaGVja0V4aXRJc0xhYmVsSW5jbHVkZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNoZWNrRXhpdEJ5RmllbGRzID0gaW5wdXQ8QXJyYXk8c3RyaW5nPj4oKTtcbiAgcmVhZG9ubHkgcGFyZW50Qm9yZGVyV2lkdGggPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGZ1bmN0aW9uQ2hlY2tQZXJtaXNzaW9uQ3JlYXRlVGFnID0gaW5wdXQ8KCkgPT4gYm9vbGVhbj4oKCkgPT4gdHJ1ZSk7XG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkcyA9IGlucHV0PElIdHRwUmVxdWVzdENvbmZpZz4oKTtcbiAgcmVhZG9ubHkgZmllbGRMYWJlbCA9IGlucHV0PHN0cmluZz4oJ2xhYmVsJyk7XG4gIHJlYWRvbmx5IG1heEl0ZW1JbnB1dCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDEwMDAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IDEwMDAgfSk7XG4gIHJlYWRvbmx5IGNvbmZpZyA9IGlucHV0PElUYWdzQ29uZmlnPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsYWJlbENvbmZpZyA9IGlucHV0PElMYWJlbD4oKTtcbiAgcmVhZG9ubHkgZGVmYXVsdEl0ZW1zU2VsZWN0ZWQgPSBpbnB1dDxBcnJheTx1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgZGVmYXVsdEtleXNTZWxlY3RlZCA9IGlucHV0PEFycmF5PHVua25vd24+PigpO1xuICByZWFkb25seSBsaXN0U2VhcmNoQ29uZmlnID0gaW5wdXQ8SUlucHV0U2VhcmNoQ29uZmlnPigpO1xuICByZWFkb25seSBpc1NlYXJjaE9ubGluZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbGlzdFNlYXJjaFBhZGRpbmcgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsaXN0RGl2aWRlckNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgbGlzdENvbmZpZyA9IGlucHV0PElMaXN0Q29uZmlnSXRlbT4oKTtcbiAgcmVhZG9ubHkgbGlzdEJ1dHRvbnNPdGhlciA9IGlucHV0PEFycmF5PElCdXR0b24+PigpO1xuICByZWFkb25seSBsaXN0Q2xpY2tFeGFjdGx5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdEJhY2tncm91bmRMaXN0Q3VzdG9tID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsaXN0TWF4SXRlbVNob3cgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGxpc3RIaWRkZW5JbnB1dFNlYXJjaFdoZW5IYXNTZWFyY2hDb25maWcgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSByZW1vdmVUZXh0U2VhcmNoV2hlbkJsdXJJbnB1dCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBrZXlzSGlkZGVuSXRlbSA9IG1vZGVsPEFycmF5PHVua25vd24+PigpO1xuICByZWFkb25seSBrZXlzRGlzYWJsZUl0ZW0gPSBpbnB1dDxBcnJheTx1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlRW1pdFdoZW5TYW1lRGF0YVNlbGVjdGVkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgc2luZ2xlU2VsZWN0ZWQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVUYWdJdGVtID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjbGFzc0ljb25SZW1vdmVUYWdJdGVtID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBzaG93Qm9yZGVyQWN0aXZlV2hlbkZvY3VzSW5wdXQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBmaWVsZEdldEltYWdlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBpbWFnZVNpemUgPSBpbnB1dDxUWVBFX1NJWkVfQVZBVEFSX0NPTkZJRz4oMTYpO1xuICByZWFkb25seSBsaW5rSW1hZ2VFcnJvciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZmllbGRHZXRUZXh0QXZhdGFyID0gaW5wdXQ8c3RyaW5nPigndXNlcicpO1xuICByZWFkb25seSBjbGFzc0F2YXRhckluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGdldExhc3RUZXh0QWZ0ZXJTcGFjZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHZhbGlkUmVxdWlyZWQgPSBpbnB1dDxJTWVzc2FnZVRyYW5zbGF0ZT4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNYXhJdGVtU2VsZWN0ZWQgPSBpbnB1dDxJVmFsaWRNYXhJdGVtU2VsZWN0ZWQ+KCk7XG4gIHJlYWRvbmx5IHZhbGlkUGF0dGVybiA9IGlucHV0PEFycmF5PElWYWxpZFBhdHRlcm4+PigpO1xuICByZWFkb25seSBzaG93TGlzdEJlbGxvdyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGhpZGRlbklucHV0V2hlblJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRTZWxlY3RNdWx0aUl0ZW0gPSBvdXRwdXQ8QXJyYXk8dW5rbm93bj4+KCk7XG4gIHJlYWRvbmx5IG91dFZhbGlkRXZlbnQgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJVGFnc0Z1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuICByZWFkb25seSBvdXRDbGlja0J1dHRvbk90aGVyID0gb3V0cHV0PElCdXR0b24+KCk7XG4gIHJlYWRvbmx5IG91dFNob3dMaXN0RXZlbnQgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuICByZWFkb25seSBvdXRMb2FkaW5nR2V0RGV0YWlsU2VsZWN0ZWQgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdGFnc0VsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCd0YWdzRWwnKTtcblxuICAvKiBJTkpFQ1QqL1xuICBwcml2YXRlIGh0dHBSZXF1ZXN0U2VydmljZSA9IGluamVjdChMaWJzVWlIdHRwUmVxdWVzdFNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBtYXhJdGVtSW5wdXQgPSB0aGlzLm1heEl0ZW1JbnB1dCgpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNhYmxlV2hlbk1heEl0ZW0uc2V0KGZhbHNlKTtcbiAgICAgICAgaWYgKG1heEl0ZW1JbnB1dCAmJiBtYXhJdGVtSW5wdXQgPD0gdGhpcy5pdGVtc1NlbGVjdGVkKCkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlV2hlbk1heEl0ZW0uc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgbGlzdENvbmZpZyA9IHRoaXMubGlzdENvbmZpZygpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKGxpc3RDb25maWcpIHtcbiAgICAgICAgICB0aGlzLmZpZWxkS2V5LnNldChnZXRGaWVsZEtleUJ5VHlwZShsaXN0Q29uZmlnLCAnaWQnKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SXRlbXMgPSB0aGlzLmRlZmF1bHRJdGVtc1NlbGVjdGVkKCkgfHwgW107XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwcmV2aW91c0l0ZW1zID0gdGhpcy5kZWZhdWx0SXRlbXNTZWxlY3RlZEN1cnJlbnQoKSB8fCBbXTtcbiAgICAgICAgdGhpcy5kZWZhdWx0SXRlbXNTZWxlY3RlZEN1cnJlbnQuc2V0KHRoaXMuZGVmYXVsdEl0ZW1zU2VsZWN0ZWQoKSk7XG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLmxlbmd0aCAhPT0gY3VycmVudEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlSXRlbXNTZWxlY3RlZChjdXJyZW50SXRlbXMpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHByZXZJdGVtIG9mIHByZXZpb3VzSXRlbXMpIHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnRJdGVtcy5zb21lKChpdGVtKSA9PiBnZXQoaXRlbSwgdGhpcy5maWVsZEtleSgpKSA9PT0gZ2V0KHByZXZJdGVtLCB0aGlzLmZpZWxkS2V5KCkpKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtc1NlbGVjdGVkKGN1cnJlbnRJdGVtcyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmRlZmF1bHRLZXlzU2VsZWN0ZWQoKSB8fCBbXTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSB0aGlzLmtleXNTZWxlY3RlZCgpIHx8IFtdO1xuICAgICAgICBpZiAocHJldmlvdXNWYWx1ZS5sZW5ndGggIT09IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmdldERldGFpbEJ5SWRzKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleXNOZXcgPSBjdXJyZW50VmFsdWUuZmlsdGVyKChrZXkpID0+ICF0aGlzLml0ZW1zU2VsZWN0ZWQoKS5zb21lKChpdGVtKSA9PiBnZXQoaXRlbSwgdGhpcy5maWVsZEtleSgpLCAnJykgPT09IGtleSkpO1xuICAgICAgICBpZiAoa2V5c05ldy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmdldERldGFpbEJ5SWRzKGtleXNOZXcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgbGV0IGxpc3RLZXlEaXNhYmxlOiBBcnJheTx1bmtub3duPiA9IFtdO1xuICAgICAgY29uc3Qga2V5c0Rpc2FibGVJdGVtID0gdGhpcy5rZXlzRGlzYWJsZUl0ZW0oKTtcbiAgICAgIGNvbnN0IGl0ZW1zU2VsZWN0ZWQgPSB0aGlzLml0ZW1zU2VsZWN0ZWQoKTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKGtleXNEaXNhYmxlSXRlbT8ubGVuZ3RoKSB7XG4gICAgICAgICAgbGlzdEtleURpc2FibGUgPSBbLi4ua2V5c0Rpc2FibGVJdGVtXTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtc1NlbGVjdGVkLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXRlbS5kaXNhYmxlSXRlbSAmJiAhbGlzdEtleURpc2FibGUuZmluZCgoa2V5KSA9PiBrZXkgPT09IGl0ZW1bdGhpcy5maWVsZEtleSgpXSkpIHtcbiAgICAgICAgICAgIGxpc3RLZXlEaXNhYmxlLnB1c2goaXRlbVt0aGlzLmZpZWxkS2V5KCldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxpc3RLZXlEaXNhYmxlLnNldChsaXN0S2V5RGlzYWJsZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5jb25maWcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkcyA9IHRoaXMuaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZHMoKTtcbiAgICBpZiAoaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZHMgJiYgKCFodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkcy5ndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSB8fCAhaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZHMuZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWU/LmRldGFpbEJ5SWQpKSB7XG4gICAgICB0aHJvdyAnQ29uZmlnIGdldERldGFpbEJ5SWRzIHnDqnUgY+G6p3UgdOG7kWkgdGhp4buDdSBjw6FjIHRoYW0gc+G7kSAgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUsIGRldGFpbEJ5SWQnO1xuICAgIH1cbiAgICBjb25zdCBwcmVwcm9jZXNzb3IgPSAoa2V5czogQXJyYXk8dW5rbm93bj4pID0+IHtcbiAgICAgIGlmICgha2V5cyB8fCAhKGtleXMgaW5zdGFuY2VvZiBBcnJheSkgfHwgIWtleXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXlzLmpvaW4oJzsnKTtcbiAgICB9O1xuICAgIGlmIChodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkcz8uZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWU/LmRldGFpbEJ5SWQpIHtcbiAgICAgIGh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRzLmd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlLmRldGFpbEJ5SWQuZmllbGRHZXRWYWx1ZSA9IGh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRzLmd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlLmRldGFpbEJ5SWQuZmllbGRHZXRWYWx1ZSA/PyAna2V5cyc7XG4gICAgICBodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkcy5ndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZS5kZXRhaWxCeUlkLnByZXByb2Nlc3NvciA9IGh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRzLmd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlLmRldGFpbEJ5SWQucHJlcHJvY2Vzc29yID8/IHByZXByb2Nlc3NvcjtcbiAgICB9XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQodGhpcy5GdW5jdGlvbnNDb250cm9sKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJVGFnc0Z1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tJc1ZhbGlkOiB0aGlzLmNoZWNrVmFsaWQuYmluZCh0aGlzKSxcbiAgICAgIHJlbW92ZUxpc3Q6IGFzeW5jICgpID0+IHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpLFxuICAgICAgdXBkYXRlTGFiZWw6IHRoaXMudXBkYXRlTGFiZWwuYmluZCh0aGlzKSxcbiAgICAgIGNsZWFySXRlbVNlbGVjdGVkOiB0aGlzLmNsZWFySXRlbVNlbGVjdGVkLmJpbmQodGhpcyksXG4gICAgICBjbGVhcktleVNlYXJjaDogKCkgPT4gdGhpcy5oYW5kbGVyVmFsdWVDaGFuZ2VTZWFyY2goJycpLFxuICAgICAgZm9jdXNJbnB1dDogKCkgPT4gdGhpcy5mb2N1c0lucHV0KCksXG4gICAgICBnZXRGYWtlSWQ6IGFzeW5jICgpID0+IHRoaXMuZmFrZUlkKCksXG4gICAgICBjcmVhdGVUYWc6IHRoaXMuaGFuZGxlckVudGVyRXZlbnQuYmluZCh0aGlzKSxcbiAgICAgIHJlbW92ZUl0ZW1TZWxlY3RlZDogdGhpcy5oYW5kbGVyUmVtb3ZlSXRlbVNlbGVjdGVkLmJpbmQodGhpcyksXG4gICAgICByZXNldEVycm9yOiB0aGlzLnJlc2V0RXJyb3IuYmluZCh0aGlzKSxcbiAgICAgIHJlc2V0VG9EZWZhdWx0RGF0YVNlbGVjdGVkOiB0aGlzLnJlc2V0VG9EZWZhdWx0RGF0YVNlbGVjdGVkLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVJdGVtU2VsZWN0ZWREaXNhYmxlOiB0aGlzLnVwZGF0ZUl0ZW1TZWxlY3RlZERpc2FibGUuYmluZCh0aGlzKSxcbiAgICAgIHJlZnJlc2hMaXN0RGF0YTogdGhpcy5yZWZyZXNoTGlzdERhdGEuYmluZCh0aGlzKSxcbiAgICAgIHNldEVycm9yOiB0aGlzLnNldEVycm9yLmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0RXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5lcnJvci5zZXQoeyBtZXNzYWdlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoZXZlbnQ6IElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2wuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlTGFiZWwoKSB7XG4gICAgaWYgKCF0aGlzLml0ZW1zU2VsZWN0ZWQoKSB8fCAhdGhpcy5pdGVtc1NlbGVjdGVkKCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXRlbXNTZWxlY3RlZC51cGRhdGUoKGl0ZW1zKSA9PiB7XG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB0aGlzLnVwZGF0ZUZpZWxkTGFiZWwoaXRlbSkpO1xuICAgICAgcmV0dXJuIFsuLi5pdGVtc107XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpZWxkTGFiZWwoaXRlbTogdW5rbm93bikge1xuICAgIGNvbnN0IHJlZiA9IGdldChpdGVtLCAncmVmJykgfHwgaXRlbTtcbiAgICBjb25zdCBnZXRWYWx1ZSA9IHRoaXMuY29uZmlnKCk/LmdldFZhbHVlO1xuICAgIHNldDxhbnk+KGl0ZW0sICdmaWVsZExhYmVsJywgYCR7Z2V0KHJlZiwgdGhpcy5maWVsZExhYmVsKCkpIHx8IGdldChyZWYsICdsYWJlbCcpIHx8IGdldChyZWYsICduYW1lJykgfHwgJyAnfWApO1xuICAgIGlmIChnZXRWYWx1ZSkge1xuICAgICAgc2V0PGFueT4oaXRlbSwgJ2ZpZWxkTGFiZWwnLCBnZXRWYWx1ZShyZWYpIHx8ICcgJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGVhckl0ZW1TZWxlY3RlZChpZ25vcmVWYWxpZCA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLml0ZW1zU2VsZWN0ZWQoKSB8fCAhdGhpcy5pdGVtc1NlbGVjdGVkKCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuaXRlbXNTZWxlY3RlZCgpLmxlbmd0aCAtIDE7XG4gICAgdGhpcy50ZW1wSWdub3JlRW1pdC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5pdGVtc1NlbGVjdGVkKCkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudGVtcElnbm9yZUVtaXQuc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFuZGxlclJlbW92ZUl0ZW1TZWxlY3RlZChcbiAgICAgICAge1xuICAgICAgICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgRXZlbnQsXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIGlnbm9yZVZhbGlkXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJdGVtc1NlbGVjdGVkKGl0ZW1zU2VsZWN0ZWQ6IEFycmF5PHVua25vd24+LCBpZ25vcmVWYWxpZGF0ZSA9IHRydWUsIGlnbm9yZUVtaXRLZXlTZWxlY3RlZFdoZW5JdGVtc05vdEV4aXRzRW1wdHk/OiBib29sZWFuKSB7XG4gICAgaWYgKCFpdGVtc1NlbGVjdGVkIHx8ICFpdGVtc1NlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtc05vdEV4aXRzOiBBcnJheTx1bmtub3duPiA9IFtdO1xuICAgIGl0ZW1zU2VsZWN0ZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBmaWVsZExhYmVsID0gYCR7Z2V0PHVua25vd24+KGl0ZW0sIHRoaXMuZmllbGRMYWJlbCgpKSB8fCBnZXQ8dW5rbm93bj4oaXRlbSwgJ2xhYmVsJykgfHwgZ2V0PHVua25vd24+KGl0ZW0sICduYW1lJykgfHwgJyAnfWA7XG4gICAgICBjb25zdCBnZXRWYWx1ZSA9IHRoaXMuY29uZmlnKCk/LmdldFZhbHVlO1xuICAgICAgaWYgKGdldFZhbHVlKSB7XG4gICAgICAgIGZpZWxkTGFiZWwgPSBnZXRWYWx1ZShpdGVtKSB8fCAnICc7XG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtRXhpdHMgPSB0aGlzLmNoZWNrRXhpdHMoZmllbGRMYWJlbCwgZ2V0PHVua25vd24+KGl0ZW0sIHRoaXMuZmllbGRLZXkoKSkpO1xuICAgICAgaWYgKGl0ZW1FeGl0cz8uaXNJdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihpdGVtRXhpdHMuaXRlbSwgaXRlbSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW1zTm90RXhpdHMucHVzaChpdGVtKTtcbiAgICB9KTtcbiAgICB0aGlzLnByb2Nlc3NEYXRhKGl0ZW1zTm90RXhpdHMsIGlnbm9yZVZhbGlkYXRlLCBpZ25vcmVFbWl0S2V5U2VsZWN0ZWRXaGVuSXRlbXNOb3RFeGl0c0VtcHR5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckV2ZW50KHR5cGU6IFRZUEVfUE9QT1ZFUl9FVkVOVCkge1xuICAgIHRoaXMudHlwZVBvcG92ZXIuc2V0KHR5cGUpO1xuICAgIGlmICh0eXBlID09PSAnY2xpY2snKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAncmVtb3ZlJykge1xuICAgICAgdGhpcy5zaG93TGlzdC5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRTaG93TGlzdEV2ZW50LmVtaXQoZmFsc2UpO1xuICAgICAgdGhpcy5pbnB1dEZ1bmN0aW9uQ29udHJvbCgpPy5ibHVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2hvd0xpc3Quc2V0KHRydWUpO1xuICAgIHRoaXMub3V0U2hvd0xpc3RFdmVudC5lbWl0KHRydWUpO1xuICAgIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKT8uZm9jdXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckNvbnRlbnRFdmVudChwb3NpdGlvbjogVFlQRV9QT1BPVkVSX0RJUkVDVElPTikge1xuICAgIGlmICh0aGlzLnBvc2l0aW9uTGlzdCgpID09PSBwb3NpdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBvc2l0aW9uTGlzdC5zZXQocG9zaXRpb24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJSZW1vdmVJdGVtU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50LCBpdGVtUmVtb3ZlOiB1bmtub3duLCBpZ25vcmVWYWxpZD86IGJvb2xlYW4pIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmZsYWdNb3VzZS5zZXQoeyBpc01vdXNlRW50ZXI6IHRydWUsIGlzTW91c2VFbnRlckNvbnRlbnQ6IHRydWUgfSk7XG4gICAgdGhpcy50aW1lT3V0RmxhZy5zZXQoc2V0VGltZW91dCgoKSA9PiB0aGlzLmZsYWdNb3VzZS5zZXQoeyBpc01vdXNlRW50ZXI6IGZhbHNlLCBpc01vdXNlRW50ZXJDb250ZW50OiBmYWxzZSB9KSwgMjUwKSk7XG4gICAgdGhpcy5pdGVtc1NlbGVjdGVkLnVwZGF0ZSgoaXRlbXMpID0+XG4gICAgICBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3Qga2V5UmVtb3ZlID0gZ2V0KGl0ZW1SZW1vdmUsIHRoaXMuZmllbGRLZXkoKSk7XG4gICAgICAgIGNvbnN0IGtleUl0ZW0gPSBnZXQoaXRlbSwgdGhpcy5maWVsZEtleSgpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZW1vdmUgPSBnZXQ8YW55PihpdGVtUmVtb3ZlLCAnZmllbGRMYWJlbCcpLnRyaW0oKTtcbiAgICAgICAgY29uc3QgbGFiZWxJdGVtID0gZ2V0KGl0ZW0sICdmaWVsZExhYmVsJykudHJpbSgpO1xuXG4gICAgICAgIHJldHVybiAoKGlzTmlsKGtleVJlbW92ZSkgfHwgaXNOaWwoa2V5SXRlbSkpICYmIGxhYmVsUmVtb3ZlICE9PSBsYWJlbEl0ZW0pIHx8ICghaXNOaWwoa2V5UmVtb3ZlKSAmJiAhaXNOaWwoa2V5SXRlbSkgJiYga2V5UmVtb3ZlICE9PSBrZXlJdGVtKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICBpZiAoaXRlbVJlbW92ZSAmJiAhaXNOaWwoZ2V0PHVua25vd24+KGl0ZW1SZW1vdmUsIHRoaXMuZmllbGRLZXkoKSkpICYmIGAke2dldDx1bmtub3duPihpdGVtUmVtb3ZlLCB0aGlzLmZpZWxkS2V5KCkpfWAuc2VhcmNoKHRoaXMuZmFrZUlkKCkpID49IDApIHtcbiAgICAgIHRoaXMua2V5c0hpZGRlbkl0ZW0udXBkYXRlKChpdGVtcykgPT4gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi4oaXRlbXMgfHwgW10pLCBnZXQ8dW5rbm93bj4oaXRlbVJlbW92ZSwgdGhpcy5maWVsZEtleSgpKV0pKSk7XG4gICAgfVxuICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldChBcnJheS5mcm9tKG5ldyBTZXQodGhpcy5pdGVtc1NlbGVjdGVkKCkubWFwKChpdGVtKSA9PiBnZXQoaXRlbSwgYHJlZi4ke3RoaXMuZmllbGRLZXkoKX1gKSkpKSk7XG4gICAgdGhpcy5kaXNhYmxlV2hlbk1heEl0ZW0uc2V0KGZhbHNlKTtcbiAgICBjb25zdCBtYXhJdGVtSW5wdXQgPSB0aGlzLm1heEl0ZW1JbnB1dCgpO1xuICAgIGlmIChtYXhJdGVtSW5wdXQgJiYgbWF4SXRlbUlucHV0IDw9IHRoaXMuaXRlbXNTZWxlY3RlZCgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5kaXNhYmxlV2hlbk1heEl0ZW0uc2V0KHRydWUpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2hvd0xpc3QoKSkge1xuICAgICAgdGhpcy5vdXRTZWxlY3RNdWx0aUl0ZW0uZW1pdCh0aGlzLmdldEl0ZW1TZWxlY3RlZCgpKTtcbiAgICAgIHRoaXMuY2hlY2tWaWV3Q2hhbmdlKHRydWUsIGlnbm9yZVZhbGlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd0xpc3QoKSkge1xuICAgICAgdGhpcy50ZW1wSWdub3JlRW1pdC5zZXQodHJ1ZSk7XG4gICAgfVxuICAgIGlmICghaWdub3JlVmFsaWQpIHtcbiAgICAgIHRoaXMuY2hlY2tWYWxpZCgpO1xuICAgIH1cbiAgICB0aGlzLnRlbXBJZ25vcmVFbWl0LnNldChmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlcklucHV0RnVuY3Rpb25Db250cm9sKGV2ZW50OiBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2wuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRm9jdXNBbmRCbHVyRXZlbnQoZXZlbnQ6IElGb2N1c0FuZEJsdXJFdmVudCkge1xuICAgIHRoaXMuZm9jdXMuc2V0KGZhbHNlKTtcbiAgICBpZiAoZXZlbnQubmFtZSA9PT0gJ2ZvY3VzJykge1xuICAgICAgdGhpcy5mb2N1cy5zZXQodHJ1ZSk7XG4gICAgfVxuICAgIGlmIChldmVudC5uYW1lID09PSAnYmx1cicgJiYgdGhpcy50eXBlUG9wb3ZlcigpPy5pbmNsdWRlcygnbW91c2VsZWF2ZScpICYmIHRoaXMudmFsaWRSZXF1aXJlZCgpICYmICghdGhpcy5pdGVtc1NlbGVjdGVkKCkgfHwgIXRoaXMuaXRlbXNTZWxlY3RlZCgpLmxlbmd0aCkpIHtcbiAgICAgIHRoaXMuY2hlY2tWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2tPdXRzaWRlKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRDbGlja091dHNpZGUoKSk7XG4gICAgdGhpcy50aW1lb3V0Q2xpY2tPdXRzaWRlLnNldChcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zaG93TGlzdCgpIHx8ICF0aGlzLnJlbW92ZVRleHRTZWFyY2hXaGVuQmx1cklucHV0KCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZUlucHV0LnNldCgnJyk7XG4gICAgICAgIHRoaXMua2V5U2VhcmNoLnNldCgnJyk7XG4gICAgICAgIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKT8ucmVzZXRWYWx1ZSgpO1xuICAgICAgfSwgMjUwKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckVudGVyRXZlbnQoKSB7XG4gICAgaWYgKCF0aGlzLnZhbHVlSW5wdXQoKSB8fCAhYCR7dGhpcy52YWx1ZUlucHV0KCl9YC50cmltKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnKCk/Lmlnbm9yZUVudGVyQ3JlYXRlTmV3SXRlbSkge1xuICAgICAgY29uc3QgaXRlbUV4aXRzID0gdGhpcy5jaGVja0V4aXRzKCk7XG4gICAgICBpZiAoIWl0ZW1FeGl0cyB8fCBpdGVtRXhpdHMuaXNJdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jZXNzRGF0YShbaXRlbUV4aXRzLml0ZW1dKTtcbiAgICAgIHRoaXMuaGFuZGxlclZhbHVlQ2hhbmdlU2VhcmNoKCcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZ1bmN0aW9uQ2hlY2tQZXJtaXNzaW9uQ3JlYXRlVGFnKCkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtRXhpdHMgPSB0aGlzLmNoZWNrRXhpdHMoKTtcbiAgICBjb25zdCB2YWx1ZUlucHV0ID0gYCR7dGhpcy52YWx1ZUlucHV0KCl9YC50cmltKCk7XG4gICAgY29uc3QgbmV3SXRlbSA9IHsgW3RoaXMuZmllbGRMYWJlbCgpXTogdmFsdWVJbnB1dCB9O1xuICAgIGlmICh0aGlzLmZpZWxkS2V5KCkpIHtcbiAgICAgIHNldChuZXdJdGVtLCB0aGlzLmZpZWxkS2V5KCksIGAke3RoaXMuZmFrZUlkKCl9JHt2YWx1ZUlucHV0fSR7dXVpZCgpfWApO1xuICAgIH1cbiAgICBpZiAoIWl0ZW1FeGl0cykge1xuICAgICAgaWYgKHRoaXMuY2hlY2tQYXR0ZXJuKFtuZXdJdGVtXSkpIHtcbiAgICAgICAgY29uc3QgaXRlbUJ1aWxkVmFsdWUgPSB7IC4uLm5ld0l0ZW0gfTtcbiAgICAgICAgY29uc3QgYnVpbGRWYWx1ZSA9IHRoaXMuY29uZmlnKCk/LmJ1aWxkVmFsdWU7XG4gICAgICAgIGlmIChidWlsZFZhbHVlKSB7XG4gICAgICAgICAgYnVpbGRWYWx1ZShpdGVtQnVpbGRWYWx1ZSwgbmV3SXRlbVt0aGlzLmZpZWxkTGFiZWwoKV0pO1xuICAgICAgICB9XG4gICAgICAgIG5ld0l0ZW1bdGhpcy5maWVsZExhYmVsKCldID0gaXRlbUJ1aWxkVmFsdWVbdGhpcy5maWVsZExhYmVsKCldO1xuICAgICAgICBpZiAodGhpcy5lbnRlckF1dG9BZGRUYWdUb0xpc3QoKSkge1xuICAgICAgICAgIHRoaXMubGlzdEZ1bmN0aW9uQ29udHJvbCgpPy51cGRhdGVEYXRhKHsgbmV3RGF0YTogc2lnbmFsKFtzaWduYWwobmV3SXRlbSldKSwgZnVuY3Rpb25DdXN0b21BZGREYXRhVG9TdG9yZTogKG5ld0RhdGEsIHN0b3JlKSA9PiBzdG9yZS51cGRhdGUoKHZhbHVlKSA9PiBbLi4ubmV3RGF0YSgpLCAuLi52YWx1ZV0pIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc0RhdGEoW25ld0l0ZW1dKTtcbiAgICAgICAgdGhpcy5oYW5kbGVyVmFsdWVDaGFuZ2VTZWFyY2goJycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXRlbUV4aXRzLmlzSXRlbVNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc0RhdGEoW2l0ZW1FeGl0cy5pdGVtXSk7XG4gICAgdGhpcy5oYW5kbGVyVmFsdWVDaGFuZ2VTZWFyY2goJycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJWYWx1ZUNoYW5nZVNlYXJjaCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgdGhpcy52YWx1ZUlucHV0LnNldChgJHt2YWx1ZX1gKTtcbiAgICBpZiAoIWAke3ZhbHVlIHx8ICcnfWAudHJpbSgpKSB7XG4gICAgICB0aGlzLmtleVNlYXJjaENoYW5nZVN1YigpPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5rZXlTZWFyY2hDaGFuZ2VTdWIuc2V0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLnRpbWVPdXRDaGFuZ2VTZWFyY2guc2V0KHNldFRpbWVvdXQoKCkgPT4gdGhpcy5rZXlTZWFyY2guc2V0KCcnKSkpO1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZygpPy5pZ25vcmVFbnRlckNyZWF0ZU5ld0l0ZW0pIHtcbiAgICAgICAgdGhpcy5jaGVja1ZhbGlkKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZygpPy5pZ25vcmVJbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMua2V5U2VhcmNoQ2hhbmdlU3ViKCkpIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRLZXlTZWFyY2goKTtcbiAgICB9XG4gICAgdGhpcy5rZXlTZWFyY2hDaGFuZ2UubmV4dChgJHt2YWx1ZSB8fCAnJ31gLnRyaW0oKSk7XG4gIH1cblxuICBwcml2YXRlIHNldEV2ZW50S2V5U2VhcmNoKCkge1xuICAgIGlmICh0aGlzLmtleVNlYXJjaENoYW5nZVN1YigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMua2V5U2VhcmNoQ2hhbmdlU3ViLnNldCh0aGlzLmtleVNlYXJjaENoYW5nZS5waXBlKGRlYm91bmNlVGltZSgxNTAwKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5rZXlTZWFyY2guc2V0KGAke3ZhbHVlIHx8ICcnfWAudHJpbSgpKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRGF0YShpdGVtczogQXJyYXk8dW5rbm93bj4sIGlnbm9yZVZhbGlkYXRlID0gZmFsc2UsIGlnbm9yZUVtaXRLZXlTZWxlY3RlZFdoZW5JdGVtc05vdEV4aXRzRW1wdHk/OiBib29sZWFuKSB7XG4gICAgaWYgKCFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpdGVtc1NlbGVjdGVkID0gdGhpcy5nZXRJdGVtU2VsZWN0ZWQoKTtcbiAgICAgIGlmICghaWdub3JlRW1pdEtleVNlbGVjdGVkV2hlbkl0ZW1zTm90RXhpdHNFbXB0eSkge1xuICAgICAgICB0aGlzLm91dFNlbGVjdE11bHRpSXRlbS5lbWl0KGl0ZW1zU2VsZWN0ZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5rZXlzU2VsZWN0ZWQuc2V0KEFycmF5LmZyb20obmV3IFNldChpdGVtc1NlbGVjdGVkPy5tYXAoKGl0ZW0pID0+IGdldChpdGVtLCBgcmVmLiR7dGhpcy5maWVsZEtleSgpfWApKSkpKTtcbiAgICAgIHRoaXMuY2hlY2tWaWV3Q2hhbmdlKGZhbHNlLCBpZ25vcmVWYWxpZGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGl0ZW1zTWFwcGluZyA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgcmVmID0gZ2V0KGl0ZW0sICdyZWYnKSB8fCBpdGVtO1xuICAgICAgaXRlbSA9IGNsb25lRGVlcChyZWYpO1xuICAgICAgc2V0KGl0ZW0sICdyZWYnLCByZWYpO1xuICAgICAgdGhpcy51cGRhdGVGaWVsZExhYmVsKGl0ZW0pO1xuICAgICAgY29uc3QgeyBnZXREaXNhYmxlSXRlbSwgZ2V0U3R5bGVzLCBnZXRTdHlsZXNUYWdTcGVjaWZpYywgZ2V0VG9vbHRpcCB9ID0gdGhpcy5jb25maWcoKSB8fCB7fTtcbiAgICAgIGlmIChnZXREaXNhYmxlSXRlbSkge1xuICAgICAgICBzZXQ8YW55PihpdGVtLCAnZGlzYWJsZUl0ZW0nLCBnZXREaXNhYmxlSXRlbShpdGVtKSk7XG4gICAgICB9XG4gICAgICBpZiAoZ2V0U3R5bGVzKSB7XG4gICAgICAgIHNldDxhbnk+KGl0ZW0sICduZ1N0eWxlcycsIGdldFN0eWxlcyhpdGVtKSk7XG4gICAgICB9XG4gICAgICBpZiAoZ2V0U3R5bGVzVGFnU3BlY2lmaWMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGdldFN0eWxlc1RhZ1NwZWNpZmljKGl0ZW0pO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3NwZWNpZmljX3Zpb2xldF9jb2xvcicpIHtcbiAgICAgICAgICBzZXQ8YW55PihpdGVtLCAnbmdTdHlsZXMnLCB7IGNvbG9yOiAnIzcyMzlFQScsIGJhY2tncm91bmRDb2xvcjogJyNGMUVCRkQnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZ2V0VG9vbHRpcCkge1xuICAgICAgICBzZXQ8YW55PihpdGVtLCAndG9vbHRpcCcsIGdldFRvb2x0aXAoaXRlbSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfSk7XG4gICAgdGhpcy5pdGVtc1NlbGVjdGVkLnVwZGF0ZSgoaXRlbXMpID0+IFsuLi5pdGVtcywgLi4uaXRlbXNNYXBwaW5nXSk7XG4gICAgdGhpcy5rZXlzU2VsZWN0ZWQuc2V0KEFycmF5LmZyb20obmV3IFNldCh0aGlzLml0ZW1zU2VsZWN0ZWQoKS5tYXAoKGl0ZW0pID0+IGdldChpdGVtLCBgcmVmLiR7dGhpcy5maWVsZEtleSgpfWApKSkpKTtcbiAgICB0aGlzLm91dFNlbGVjdE11bHRpSXRlbS5lbWl0KHRoaXMuZ2V0SXRlbVNlbGVjdGVkKCkpO1xuICAgIHRoaXMuY2hlY2tWaWV3Q2hhbmdlKGZhbHNlLCBpZ25vcmVWYWxpZGF0ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckRhdGFDaGFuZ2UoaXRlbXM6IEFycmF5PHVua25vd24+KSB7XG4gICAgdGhpcy5pdGVtc09mTGlzdC5zZXQoaXRlbXMpO1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy51cGRhdGVQb3BvdmVyT3ZlcmxheVBvc2l0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmNvbmZpZygpPy5pZ25vcmVJbnB1dCkge1xuICAgICAgdGhpcy5pbnB1dEZ1bmN0aW9uQ29udHJvbCgpPy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyTG9hZGluZyhldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMubG9hZGluZy5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1ZpZXdDaGFuZ2UoaWdub3JlU2Nyb2xsQm90dG9tOiBib29sZWFuLCBpZ25vcmVWYWxpZGF0ZSA9IGZhbHNlKSB7XG4gICAgdGhpcy5kaXNhYmxlV2hlbk1heEl0ZW0uc2V0KGZhbHNlKTtcbiAgICBjb25zdCBtYXhJdGVtSW5wdXQgPSB0aGlzLm1heEl0ZW1JbnB1dCgpO1xuICAgIGlmIChtYXhJdGVtSW5wdXQgJiYgbWF4SXRlbUlucHV0IDw9IHRoaXMuaXRlbXNTZWxlY3RlZCgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5kaXNhYmxlV2hlbk1heEl0ZW0uc2V0KHRydWUpO1xuICAgIH1cbiAgICB0aGlzLnRpbWVPdXRDaGVja1ZpZXdDaGFuZ2Uuc2V0KFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbEhlaWdodCA9IHRoaXMudGFnc0VsKCk/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICBpZiAoIWlzTmlsKHNjcm9sbEhlaWdodCkgJiYgdGhpcy5jbGllbnRIZWlnaHQoKSAhPT0gc2Nyb2xsSGVpZ2h0ICYmIHRoaXMucG9zaXRpb25MaXN0KCkgIT09ICd0b3AnKSB7XG4gICAgICAgICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnVwZGF0ZVBvcG92ZXJPdmVybGF5UG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlnbm9yZVNjcm9sbEJvdHRvbSAmJiB0aGlzLnRhZ3NFbCgpICYmIHRoaXMudGFnc0VsKCkubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMudGFnc0VsKCkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGllbnRIZWlnaHQuc2V0KHNjcm9sbEhlaWdodCk7XG4gICAgICB9LCAyNTApXG4gICAgKTtcbiAgICBpZiAoIWlnbm9yZVZhbGlkYXRlKSB7XG4gICAgICB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRXhpdHMobGFiZWw/OiBzdHJpbmcsIGlkPzogc3RyaW5nKSB7XG4gICAgbGV0IGl0ZW1FeGl0cztcbiAgICBpZiAoIWlzTmlsKGlkKSAmJiAhYCR7aWR9YC5pbmNsdWRlcyh0aGlzLmZha2VJZCgpKSAmJiB0aGlzLmZpZWxkS2V5KCkpIHtcbiAgICAgIGl0ZW1FeGl0cyA9IHRoaXMuaXRlbXNTZWxlY3RlZCgpLmZpbmQoKGl0ZW0pID0+ICFpc05pbChnZXQoaXRlbSwgdGhpcy5maWVsZEtleSgpKSkgJiYgYCR7Z2V0KGl0ZW0sIHRoaXMuZmllbGRLZXkoKSl9YC50cmltKCkgPT09IGAke2lkfWApO1xuICAgICAgaWYgKGl0ZW1FeGl0cykge1xuICAgICAgICByZXR1cm4geyBpdGVtOiBpdGVtRXhpdHMsIGlzSXRlbVNlbGVjdGVkOiAhIWl0ZW1FeGl0cyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWxhYmVsKSB7XG4gICAgICBsYWJlbCA9IGAke3RoaXMudmFsdWVJbnB1dCgpIHx8ICcnfWAudHJpbSgpO1xuICAgIH1cbiAgICBpdGVtRXhpdHMgPSB0aGlzLml0ZW1zU2VsZWN0ZWQoKS5maW5kKFxuICAgICAgKGl0ZW0pID0+XG4gICAgICAgICghaXNOaWwoZ2V0KGl0ZW0sICdmaWVsZExhYmVsJykpICYmIGdldChpdGVtLCAnZmllbGRMYWJlbCcpLnRyaW0oKSA9PT0gbGFiZWw/LnRyaW0oKSkgfHxcbiAgICAgICAgKHRoaXMuY2hlY2tFeGl0SXNMYWJlbEluY2x1ZGUoKSAmJiBnZXQoaXRlbSwgJ2ZpZWxkTGFiZWwnKS50cmltKCkuaW5jbHVkZXMobGFiZWw/LnRyaW0oKSkpIHx8XG4gICAgICAgICh0aGlzLmNoZWNrRXhpdEJ5RmllbGRzKCkgJiZcbiAgICAgICAgICB0aGlzLmNoZWNrRXhpdEJ5RmllbGRzKCk/LnNvbWUoKGZpZWxkKSA9PiBnZXQoaXRlbSwgZmllbGQpPy50cmltKCkgPT09IGxhYmVsPy50cmltKCkgfHwgZ2V0KGl0ZW0sIGZpZWxkKT8udHJpbSgpID09PSBlc2NhcGVIdG1sKGxhYmVsPy50cmltKCkgfHwgJycpIHx8IGVzY2FwZUh0bWwoZ2V0KGl0ZW0sIGZpZWxkKT8udHJpbSgpIHx8ICcgJykgPT09IGVzY2FwZUh0bWwobGFiZWw/LnRyaW0oKSB8fCAnJykpKVxuICAgICk7XG4gICAgaWYgKGl0ZW1FeGl0cykge1xuICAgICAgcmV0dXJuIHsgaXRlbTogaXRlbUV4aXRzLCBpc0l0ZW1TZWxlY3RlZDogdHJ1ZSB9O1xuICAgIH1cbiAgICBpdGVtRXhpdHMgPSB0aGlzLml0ZW1zT2ZMaXN0KCkuZmluZChcbiAgICAgIChpdGVtKSA9PlxuICAgICAgICAoIWlzTmlsKGdldChpdGVtLCAnZmllbGRMYWJlbCcpKSAmJiBnZXQ8YW55PihpdGVtLCAnZmllbGRMYWJlbCcpLnRyaW0oKSA9PT0gbGFiZWw/LnRyaW0oKSkgfHxcbiAgICAgICAgKHRoaXMuY2hlY2tFeGl0SXNMYWJlbEluY2x1ZGUoKSAmJiBnZXQ8YW55PihpdGVtLCAnZmllbGRMYWJlbCcpLnRyaW0oKS5pbmNsdWRlcyhsYWJlbD8udHJpbSgpKSkgfHxcbiAgICAgICAgKHRoaXMuY2hlY2tFeGl0QnlGaWVsZHMoKSAmJlxuICAgICAgICAgIHRoaXMuY2hlY2tFeGl0QnlGaWVsZHMoKT8uc29tZShcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZ2V0PGFueT4oaXRlbSwgZmllbGQpPy50cmltKCkgPT09IGxhYmVsPy50cmltKCkgfHwgZXNjYXBlSHRtbChnZXQ8YW55PihpdGVtLCBmaWVsZCk/LnRyaW0oKSB8fCAnICcpID09PSBlc2NhcGVIdG1sKGxhYmVsPy50cmltKCkgfHwgJycpIHx8IGdldDxhbnk+KGl0ZW0sIGZpZWxkKT8udHJpbSgpID09PSBlc2NhcGVIdG1sKGxhYmVsPy50cmltKCkgfHwgJycpXG4gICAgICAgICAgKSlcbiAgICApO1xuICAgIGlmIChpdGVtRXhpdHMpIHtcbiAgICAgIHJldHVybiB7IGl0ZW06IGl0ZW1FeGl0cywgaXNJdGVtU2VsZWN0ZWQ6IGZhbHNlIH07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0ZWRLZXkoZXZlbnQ6IElMaXN0RGF0YUVtaXRLZXkgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5pdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNOaWwoZXZlbnQ/LmtleSkpIHtcbiAgICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pdGVtc1NlbGVjdGVkKClbMF0pIHtcbiAgICAgIHRoaXMudGVtcElnbm9yZUVtaXQuc2V0KHRydWUpO1xuICAgICAgdGhpcy5oYW5kbGVyUmVtb3ZlSXRlbVNlbGVjdGVkKFxuICAgICAgICB7XG4gICAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBFdmVudCxcbiAgICAgICAgdGhpcy5pdGVtc1NlbGVjdGVkKClbMF0sXG4gICAgICAgIHRoaXMuaXRlbXNTZWxlY3RlZCgpWzBdLmRpc2FibGVJdGVtXG4gICAgICApO1xuICAgICAgdGhpcy50ZW1wSWdub3JlRW1pdC5zZXQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUl0ZW1zU2VsZWN0ZWQoW2V2ZW50Lml0ZW1dLCAhIXRoaXMuaXRlbXNTZWxlY3RlZCgpWzBdKTsgLy8gQnVnICMzNjA3NVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGbGFnRW1pdFNlbGVjdGVkSXRlbShrZXlzOiBBcnJheTx1bmtub3duPikge1xuICAgIGlmICghdGhpcy5pZ25vcmVFbWl0V2hlblNhbWVEYXRhU2VsZWN0ZWQoKSB8fCBrZXlzLmxlbmd0aCAhPT0gdGhpcy5pdGVtc1NlbGVjdGVkKCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGlmICghdGhpcy5pdGVtc1NlbGVjdGVkKCkuc29tZSgoaXRlbSkgPT4gZ2V0KGl0ZW0sIHRoaXMuZmllbGRLZXkoKSkgPT09IGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0TXVsdGlLZXkoZXZlbnQ6IElMaXN0RGF0YUVtaXRNdWx0aUtleSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIGNvbnN0IGl0ZW1zOiBBcnJheTx1bmtub3duPiA9IFtdO1xuICAgIGlmIChldmVudC5rZXlzICYmIGV2ZW50LmtleXMubGVuZ3RoICYmICghZXZlbnQubWFwS2V5cyB8fCAhZXZlbnQubWFwS2V5cy5sZW5ndGgpKSB7XG4gICAgICBrZXlzLnB1c2goLi4uZXZlbnQua2V5cyk7XG4gICAgfVxuICAgIGNvbnN0IGlnbm9yZUVtaXRLZXlTZWxlY3RlZFdoZW5JdGVtc05vdEV4aXRzRW1wdHkgPSB0aGlzLmdldEZsYWdFbWl0U2VsZWN0ZWRJdGVtKGNsb25lRGVlcChldmVudC5rZXlzID8/IFtdKSk7XG4gICAgZXZlbnQubWFwS2V5cy5mb3JFYWNoKChtYXBLZXkpID0+IHtcbiAgICAgIGlmIChpc05pbChtYXBLZXkua2V5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAobWFwS2V5Lml0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLnB1c2gobWFwS2V5Lml0ZW0pO1xuICAgICAgfVxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXNTZWxlY3RlZCgpKSkge1xuICAgICAgICByZXR1cm4ga2V5cy5wdXNoKG1hcEtleS5rZXkpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXNTZWxlY3RlZCgpLmZpbmQoKGl0ZW0pID0+IGdldChpdGVtLCB0aGlzLmZpZWxkS2V5KCkpID09PSBtYXBLZXkua2V5KTtcbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleXMucHVzaChtYXBLZXkua2V5KTtcbiAgICB9KTtcbiAgICBpZiAoa2V5cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdERhdGE6IEFycmF5PHVua25vd24+ID0gYXdhaXQgdGhpcy5nZXREZXRhaWxCeUlkcyhrZXlzLCB0cnVlKTtcbiAgICAgIGl0ZW1zLnB1c2goLi4ucmVzdWx0RGF0YSk7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2VFbXB0eSA9IHRoaXMudmFsaWRSZXF1aXJlZCgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQ7XG4gICAgbGV0IGlnbm9yZVZhbGlkYXRlID0gdHJ1ZTtcbiAgICBpZiAobWVzc2FnZUVtcHR5ID09PSB0aGlzLmVycm9yKCk/Lm1lc3NhZ2UpIHtcbiAgICAgIGlnbm9yZVZhbGlkYXRlID0gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGl0ZW1SZW1vdmUgPSB0aGlzLml0ZW1zU2VsZWN0ZWQoKS5maW5kKChpdGVtU2VsZWN0ZWQpID0+IGdldChpdGVtU2VsZWN0ZWQsIHRoaXMuZmllbGRLZXkoKSkgJiYgIWl0ZW1zLnNvbWUoKGl0ZW0pID0+IGdldChpdGVtU2VsZWN0ZWQsIHRoaXMuZmllbGRLZXkoKSkgPT09IGdldChpdGVtLCB0aGlzLmZpZWxkS2V5KCkpKSk7XG4gICAgdGhpcy5pdGVtc1NlbGVjdGVkLnVwZGF0ZSgoaXRlbXNTZWxlY3RlZCkgPT4gaXRlbXNTZWxlY3RlZC5maWx0ZXIoKGl0ZW1TZWxlY3RlZCkgPT4gIWdldChpdGVtU2VsZWN0ZWQsIHRoaXMuZmllbGRLZXkoKSkgfHwgKGV2ZW50LmtleXMubGVuZ3RoICYmIGl0ZW1zLnNvbWUoKGl0ZW0pID0+IGdldChpdGVtU2VsZWN0ZWQsIHRoaXMuZmllbGRLZXkoKSkgPT09IGdldChpdGVtLCB0aGlzLmZpZWxkS2V5KCkpKSkpKTtcbiAgICBpZiAoaXRlbVJlbW92ZSkge1xuICAgICAgaWYgKHRoaXMuZW50ZXJBdXRvQWRkVGFnVG9MaXN0KCkgJiYgIWlzTmlsKGdldChpdGVtUmVtb3ZlLCB0aGlzLmZpZWxkS2V5KCkpKSAmJiBgJHtnZXQoaXRlbVJlbW92ZSwgdGhpcy5maWVsZEtleSgpKX1gLnNlYXJjaCh0aGlzLmZha2VJZCgpKSA+PSAwKSB7XG4gICAgICAgIHRoaXMua2V5c0hpZGRlbkl0ZW0udXBkYXRlKChpdGVtcykgPT4gWy4uLihpdGVtcyB8fCBbXSksIGdldChpdGVtUmVtb3ZlLCB0aGlzLmZpZWxkS2V5KCkpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZXZlbnQua2V5cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2hlY2tWYWxpZCgpO1xuICAgICAgdGhpcy5rZXlzU2VsZWN0ZWQuc2V0KEFycmF5LmZyb20obmV3IFNldCh0aGlzLml0ZW1zU2VsZWN0ZWQoKT8ubWFwKChpdGVtKSA9PiBnZXQoaXRlbSwgYHJlZi4ke3RoaXMuZmllbGRLZXkoKX1gKSkpKSk7XG4gICAgICB0aGlzLm91dFNlbGVjdE11bHRpSXRlbS5lbWl0KHRoaXMuZ2V0SXRlbVNlbGVjdGVkKCkpO1xuICAgICAgdGhpcy5jaGVja1ZpZXdDaGFuZ2UoZmFsc2UsIGlnbm9yZVZhbGlkYXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVJdGVtc1NlbGVjdGVkKGl0ZW1zLCBpZ25vcmVWYWxpZGF0ZSwgaWdub3JlRW1pdEtleVNlbGVjdGVkV2hlbkl0ZW1zTm90RXhpdHNFbXB0eSk7XG4gICAgdGhpcy5jaGVja1ZhbGlkKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldERldGFpbEJ5SWRzKGtleXM6IEFycmF5PHVua25vd24+LCBpc1Jlc3BvbnNlRGF0YT86IGJvb2xlYW4pOiBQcm9taXNlPEFycmF5PHVua25vd24+PiB7XG4gICAgY29uc3QgaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZHMgPSB0aGlzLmh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRzKCk7XG4gICAgaWYgKCFodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkcyB8fCB0aGlzLmxvYWRpbmdEZXRhaWwoKSB8fCAhKGtleXMgaW5zdGFuY2VvZiBBcnJheSkgfHwgIWtleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHRoaXMudXBkYXRlTG9hZGluZ0RldGFpbCh0cnVlKTtcbiAgICBjb25zdCBjbG9uZUh0dHBEZXRhaWxDb25maWcgPSBjbG9uZURlZXAoaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGFyZ3VtZW50c1ZhbHVlLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSB9ID0gY2xvbmVIdHRwRGV0YWlsQ29uZmlnO1xuICAgICAgaWYgKCFndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSB8fCAhZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUuZGV0YWlsQnlJZCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZS5kZXRhaWxCeUlkLmZpZWxkR2V0VmFsdWUgPSAna2V5cyc7XG4gICAgICB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS51cGRhdGVBcmd1bWVudHMoYXJndW1lbnRzVmFsdWUsIHsga2V5czoga2V5cyB9LCB7fSwgJycsIGZhbHNlLCBmYWxzZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLmNhbGxBcGkoY2xvbmVIdHRwRGV0YWlsQ29uZmlnKSkgYXMgSUh0dHBSZXNwb25zZTxBcnJheTx1bmtub3duPj47XG4gICAgICBpZiAoIWlzUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSXRlbXNTZWxlY3RlZChyZXN1bHQuZGF0YSB8fCBbXSk7XG4gICAgICAgIHRoaXMudXBkYXRlTG9hZGluZ0RldGFpbChmYWxzZSk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlTG9hZGluZ0RldGFpbChmYWxzZSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmRhdGEgfHwgW107XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgIHRoaXMudXBkYXRlTG9hZGluZ0RldGFpbChmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tWYWxpZCgpIHtcbiAgICBjb25zdCB2YWxpZCA9IHRoaXMuaXRlbXNTZWxlY3RlZCgpICYmIHRoaXMuaXRlbXNTZWxlY3RlZCgpLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcbiAgICBjb25zdCBzdGF0ZUVycm9yID0gISF0aGlzLmVycm9yKCk7XG4gICAgdGhpcy5lcnJvci5zZXQodW5kZWZpbmVkKTtcbiAgICBpZiAodGhpcy52YWxpZFJlcXVpcmVkKCkgJiYgIXZhbGlkKSB7XG4gICAgICB0aGlzLmVycm9yLnNldCh7IC4uLnRoaXMudmFsaWRSZXF1aXJlZCgpLCBtZXNzYWdlOiB0aGlzLnZhbGlkUmVxdWlyZWQoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEIH0pO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZXJyb3IoKSkge1xuICAgICAgdGhpcy5jaGVja1BhdHRlcm4odGhpcy5pdGVtc1NlbGVjdGVkKCkpO1xuICAgICAgdGhpcy5jaGVja01heEl0ZW1TZWxlY3RlZFZhbGlkKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy50ZW1wSWdub3JlRW1pdCgpKSB7XG4gICAgICB0aGlzLm91dFZhbGlkRXZlbnQuZW1pdCghdGhpcy5lcnJvcigpKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlRXJyb3IgIT09ICEhdGhpcy5lcnJvcigpKSB7XG4gICAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2woKT8udXBkYXRlUG9wb3Zlck92ZXJsYXlQb3NpdGlvbigpO1xuICAgIH1cbiAgICByZXR1cm4gIXRoaXMuZXJyb3IoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tNYXhJdGVtU2VsZWN0ZWRWYWxpZCgpIHtcbiAgICBjb25zdCB2YWxpZE1heEl0ZW1TZWxlY3RlZCA9IHRoaXMudmFsaWRNYXhJdGVtU2VsZWN0ZWQoKTtcbiAgICBpZiAodmFsaWRNYXhJdGVtU2VsZWN0ZWQgJiYgdGhpcy5pdGVtc1NlbGVjdGVkKCkubGVuZ3RoID4gdmFsaWRNYXhJdGVtU2VsZWN0ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KHsgLi4udmFsaWRNYXhJdGVtU2VsZWN0ZWQsIG1lc3NhZ2U6IHZhbGlkTWF4SXRlbVNlbGVjdGVkLm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9NQVhfVkFMSUQsIGludGVycG9sYXRlUGFyYW1zOiB7IHZhbHVlOiB2YWxpZE1heEl0ZW1TZWxlY3RlZC52YWx1ZSB9IH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tQYXR0ZXJuKGl0ZW1zOiBBcnJheTx1bmtub3duPik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbGlkUGF0dGVybiA9IHRoaXMudmFsaWRQYXR0ZXJuKCk7XG4gICAgaWYgKCF2YWxpZFBhdHRlcm4gfHwgIXZhbGlkUGF0dGVybi5sZW5ndGggfHwgIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHZhbGlkIG9mIHZhbGlkUGF0dGVybikge1xuICAgICAgaWYgKHZhbGlkLnBhdHRlcm4gJiYgaXRlbXMuc29tZSgoaXRlbSkgPT4gIXZhbGlkLnBhdHRlcm4udGVzdChnZXQoaXRlbSwgdGhpcy5maWVsZExhYmVsKCkpKSkpIHtcbiAgICAgICAgdGhpcy5lcnJvci5zZXQoeyAuLi52YWxpZCwgbWVzc2FnZTogdmFsaWQubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX1BBVFRFTl9WQUxJRCB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2tCdXR0b25PdGhlcihldmVudDogSUJ1dHRvbikge1xuICAgIHRoaXMub3V0Q2xpY2tCdXR0b25PdGhlci5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SXRlbVNlbGVjdGVkKCk6IEFycmF5PHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1NlbGVjdGVkKCkubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBpdGVtTWFwID0geyAuLi5pdGVtIH07XG4gICAgICBpZiAoIWlzTmlsKGdldChpdGVtTWFwLCB0aGlzLmZpZWxkS2V5KCkpKSAmJiBgJHtnZXQoaXRlbU1hcCwgdGhpcy5maWVsZEtleSgpKX1gLnNlYXJjaCh0aGlzLmZha2VJZCgpKSA9PT0gMCkge1xuICAgICAgICBzZXQoaXRlbU1hcCwgdGhpcy5maWVsZEtleSgpLCAnJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbU1hcDtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZXNldFRvRGVmYXVsdERhdGFTZWxlY3RlZChpdGVtU2VsZWN0ZWQ/OiBBcnJheTx1bmtub3duPikge1xuICAgIGlmIChpdGVtU2VsZWN0ZWQgJiYgQXJyYXkuaXNBcnJheShpdGVtU2VsZWN0ZWQpKSB7XG4gICAgICB0aGlzLml0ZW1zU2VsZWN0ZWQuc2V0KFtdKTtcbiAgICAgIHRoaXMudXBkYXRlSXRlbXNTZWxlY3RlZChpdGVtU2VsZWN0ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtU2VsZWN0ZWQgPSBuZXcgQXJyYXk8dW5rbm93bj4oKTtcbiAgICBpZiAoIXRoaXMuZmllbGRLZXkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0S2V5c1NlbGVjdGVkID0gdGhpcy5kZWZhdWx0S2V5c1NlbGVjdGVkKCk7XG4gICAgaWYgKGRlZmF1bHRLZXlzU2VsZWN0ZWQgJiYgQXJyYXkuaXNBcnJheShkZWZhdWx0S2V5c1NlbGVjdGVkKSkge1xuICAgICAgdGhpcy5pdGVtc1NlbGVjdGVkLnNldChbXSk7XG4gICAgICB0aGlzLmdldERldGFpbEJ5SWRzKGRlZmF1bHRLZXlzU2VsZWN0ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0SXRlbXNTZWxlY3RlZCA9IHRoaXMuZGVmYXVsdEl0ZW1zU2VsZWN0ZWQoKTtcbiAgICBpZiAoZGVmYXVsdEl0ZW1zU2VsZWN0ZWQgJiYgQXJyYXkuaXNBcnJheShkZWZhdWx0SXRlbXNTZWxlY3RlZCkpIHtcbiAgICAgIHRoaXMuaXRlbXNTZWxlY3RlZC5zZXQoW10pO1xuICAgICAgdGhpcy51cGRhdGVJdGVtc1NlbGVjdGVkKGRlZmF1bHRJdGVtc1NlbGVjdGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbExpc3QoZXZlbnQ6IElMaXN0RnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmxpc3RGdW5jdGlvbkNvbnRyb2wuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBmb2N1c0lucHV0KCkge1xuICAgIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKT8uZm9jdXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKGV2ZW50OiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKGZsYWc6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLmZsYWdNb3VzZS5zZXQoZmxhZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrVGFnSXRlbShldmVudDogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuc2hvd0xpc3QoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmZsYWdNb3VzZS5zZXQoeyBpc01vdXNlRW50ZXI6IHRydWUsIGlzTW91c2VFbnRlckNvbnRlbnQ6IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc2V0RXJyb3IoKSB7XG4gICAgdGhpcy5lcnJvci5zZXQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTG9hZGluZ0RldGFpbChldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMubG9hZGluZ0RldGFpbC5zZXQoZXZlbnQpO1xuICAgIHRoaXMub3V0TG9hZGluZ0dldERldGFpbFNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVJdGVtU2VsZWN0ZWREaXNhYmxlKCkge1xuICAgIGNvbnN0IGdldERpc2FibGVJdGVtID0gdGhpcy5jb25maWcoKT8uZ2V0RGlzYWJsZUl0ZW07XG4gICAgaWYgKCFnZXREaXNhYmxlSXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLml0ZW1zU2VsZWN0ZWQudXBkYXRlKChpdGVtc1NlbGVjdGVkKSA9PiBpdGVtc1NlbGVjdGVkLm1hcCgoaXRlbSkgPT4gKHsgLi4uaXRlbSwgZGlzYWJsZUl0ZW06IGdldERpc2FibGVJdGVtKGl0ZW0pIH0pKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2hMaXN0RGF0YSgpIHtcbiAgICB0aGlzLmxpc3RGdW5jdGlvbkNvbnRyb2woKT8ucmVmcmVzaCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG5cbiAgICBpZiAodGhpcy50aW1lT3V0RmxhZygpKSBjbGVhclRpbWVvdXQodGhpcy50aW1lT3V0RmxhZygpKTtcbiAgICBpZiAodGhpcy50aW1lT3V0Q2hhbmdlU2VhcmNoKCkpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVPdXRDaGFuZ2VTZWFyY2goKSk7XG4gICAgaWYgKHRoaXMudGltZU91dENoZWNrVmlld0NoYW5nZSgpKSBjbGVhclRpbWVvdXQodGhpcy50aW1lT3V0Q2hlY2tWaWV3Q2hhbmdlKCkpO1xuICAgIGlmICh0aGlzLnRpbWVvdXRDbGlja091dHNpZGUoKSkgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dENsaWNrT3V0c2lkZSgpKTtcblxuICAgIGlmICh0aGlzLmtleVNlYXJjaENoYW5nZVN1YigpKSB0aGlzLmtleVNlYXJjaENoYW5nZVN1YigpPy51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCI+XG4gIEBpZiAobGFiZWxDb25maWcoKTsgYXMgbGFiZWxDb25maWcpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsXG4gICAgICBbY2xhc3NJbmNsdWRlXT1cImxhYmVsQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbbGFiZWxMZWZ0XT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgW3JlcXVpcmVkXT1cImxhYmVsQ29uZmlnLnJlcXVpcmVkXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICBbZGVzY3JpcHRpb25DbGFzc109XCJsYWJlbENvbmZpZy5kZXNjcmlwdGlvbkNsYXNzXCJcbiAgICAgIFtsYWJlbFJpZ2h0XT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRcIlxuICAgICAgW2xhYmVsUmlnaHRDbGFzc109XCJsYWJlbENvbmZpZy5sYWJlbFJpZ2h0Q2xhc3NcIlxuICAgICAgW29ubHlTaG93Q291bnRdPVwibGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICBbYnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuYnV0dG9uc0xlZnRcIlxuICAgICAgW2J1dHRvbnNSaWdodF09XCJsYWJlbENvbmZpZy5idXR0b25zUmlnaHRcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnQgfHwgZGlzYWJsZSgpIHx8IGxvYWRpbmcoKSB8fCBsb2FkaW5nRGV0YWlsKClcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNSaWdodCB8fCBkaXNhYmxlKCkgfHwgbG9hZGluZygpIHx8IGxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICBbaGFzVG9nZ2xlXT1cImxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICBbdG9nZ2xlQWN0aXZlXT1cImxhYmVsQ29uZmlnLnRvZ2dsZUFjdGl2ZVwiXG4gICAgICBbdG9nZ2xlQWN0aXZlXT1cImxhYmVsQ29uZmlnLnRvZ2dsZURpc2FibGUgfHwgZGlzYWJsZSgpIHx8IGxvYWRpbmcoKSB8fCBsb2FkaW5nRGV0YWlsKClcIlxuICAgICAgW3BvcG92ZXJdPVwibGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJsYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICBbY291bnRdPVwibGFiZWxDb25maWcuY291bnRcIiAvPlxuICB9XG4gIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlclxuICAgIGNsYXNzPVwidy1mdWxsIGgtZnVsbFwiXG4gICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cImRpc2FibGUoKSB8fCByZWFkb25seSgpIHx8ICEhY29uZmlnKCk/Lmlnbm9yZVNob3dMaXN0IHx8IGZhbHNlXCJcbiAgICBbaWdub3JlQ3Vyc29yUG9pbnRlck1vZGVMaWtlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgW2VsZW1lbnRSZWZDdXN0b21dPVwidGFnc0VsXCJcbiAgICBbbW9kZV09XCIhY29uZmlnKCk/Lmlnbm9yZUlucHV0ID8gJ2NsaWNrJyA6ICdjbGljay10b2dnbGUnXCJcbiAgICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgICBbZmxhZ01vdXNlXT1cImZsYWdNb3VzZSgpXCJcbiAgICBbY29uZmlnXT1cIntcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzogY29uZmlnKCk/LmFuaW1hdGlvbkNvbmZpZyB8fCB7fSxcbiAgICAgIHpJbmRleDogekluZGV4KCksXG4gICAgICB3aWR0aEJ5UGFyZW50OiB0cnVlLFxuICAgICAgcGFyZW50Qm9yZGVyV2lkdGg6IHBhcmVudEJvcmRlcldpZHRoKCkgPz8gMCxcbiAgICAgIG1heEhlaWdodDogMjA0OCxcbiAgICAgIG1heFdpZHRoOiAyMDQ4LFxuICAgICAgZGlyZWN0aW9uOiBjb25maWcoKT8uZGlyZWN0aW9uTGlzdCB8fCAnYm90dG9tJyxcbiAgICAgIGRpcmVjdGlvbkRpc3RhbmNlOiAyLFxuICAgICAgdGVtcGxhdGU6ICFzaG93TGlzdEJlbGxvdygpID8gbGlzdFZpZXdFbCA6IHVuZGVmaW5lZCxcbiAgICAgIHdoaXRlVGhlbWU6IHRydWUsXG4gICAgICBpZ25vcmVBcnJvdzogdHJ1ZSxcbiAgICAgIGNsYXNzSW5jbHVkZTogJ3JvdW5kZWQtWzRweF0gJyArIGNsYXNzSW5jbHVkZVBvcG92ZXIoKSArICghbGlzdENvbmZpZygpPy5pZ25vcmVTaG93RGF0YVdoZW5Ob3RTZWFyY2ggfHwga2V5U2VhcmNoKCkgPyAnIGxpYnMtdWktYm9yZGVyLWdlbmVyYWwnIDogJycpLFxuICAgICAgcG9zaXRpb246IHsgbW9kZTogJ3N0YXJ0JywgZGlzdGFuY2U6IDAgfSxcbiAgICB9XCJcbiAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KCRldmVudClcIlxuICAgIChvdXRFdmVudCk9XCJoYW5kbGVyUG9wb3ZlckV2ZW50KCRldmVudClcIlxuICAgIChvdXRFdmVudFBvcG92ZXJDb250ZW50KT1cImhhbmRsZXJQb3BvdmVyQ29udGVudEV2ZW50KCRldmVudClcIlxuICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoJGV2ZW50KVwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cIiFkaXNhYmxlKCkgJiYgIXJlYWRvbmx5KClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seS1iYWNrZ3JvdW5kXT1cInJlYWRvbmx5KClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZS1iYWNrZ3JvdW5kXT1cImRpc2FibGUoKVwiPlxuICAgICAgQGlmIChjb25maWcoKT8udWlMaWtlRHJvcGRvd24pIHtcbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImZsZXggdGV4dC1bMTZweF0gYWJzb2x1dGUgcmlnaHQtWzE2cHhdIHRvcC1bOHB4XSBsaWJzLXVpLWljb24tbW92ZS1yaWdodCByb3RhdGUtOTAgei1bMV1cIlxuICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCIhcmVhZG9ubHkoKSAmJiAhZGlzYWJsZSgpXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKVwiPjwvaT5cbiAgICAgIH1cbiAgICAgIDxkaXZcbiAgICAgICAgI3RhZ3NFbFxuICAgICAgICBbY2xhc3NdPVwiJ2xpYnMtdWktdGFncyAnICsgKGNvbmZpZygpPy5jbGFzc0luY2x1ZGUgfHwgJycpICsgKHJlYWRvbmx5KCkgPyBjb25maWcoKT8uY2xhc3NDdXN0b21XaGVuUmVhZE9ubHkgfHwgJyBsaWJzLXVpLXJlYWRvbmx5JyA6ICcnKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLXRhZ3Mtbm90LXBvcHVwXT1cIighc2hvd0xpc3QoKSAmJiAhc2hvd0JvcmRlckFjdGl2ZVdoZW5Gb2N1c0lucHV0KCkpIHx8ICghZm9jdXMoKSAmJiBzaG93Qm9yZGVyQWN0aXZlV2hlbkZvY3VzSW5wdXQoKSlcIlxuICAgICAgICBbY2xhc3MubGlicy11aS10YWdzLWVycm9yXT1cIiEhZXJyb3IoKSAmJiAhY29uZmlnKCk/Lmlnbm9yZVNob3dFcnJvclwiXG4gICAgICAgIFtjbGFzcy4hcHItWzMycHhdXT1cImNvbmZpZygpPy51aUxpa2VEcm9wZG93blwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5LWJhY2tncm91bmRdPVwicmVhZG9ubHkoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGUtYmFja2dyb3VuZF09XCJkaXNhYmxlKClcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItcHJpbWFyeS1nZW5lcmFsXT1cImZvY3VzKCkgJiYgc2hvd0JvcmRlckFjdGl2ZVdoZW5Gb2N1c0lucHV0KClcIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzQ2xpY2tPdXRzaWRlRGlyZWN0aXZlXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXG4gICAgICAgIChvdXRPdXRzaWRlKT1cImhhbmRsZXJDbGlja091dHNpZGUoJGV2ZW50KVwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zU2VsZWN0ZWQoKTsgdHJhY2sgaXRlbVtmaWVsZEtleSgpXSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgICAgICBbdHlwZV09XCJpdGVtPy50b29sdGlwPy50eXBlIHx8ICdvdGhlcidcIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJpdGVtPy50b29sdGlwPy5jb25maWcgfHwgeyB6SW5kZXg6IHpJbmRleCgpICsgMiB9XCJcbiAgICAgICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCIhaXRlbT8udG9vbHRpcCB8fCBpdGVtLnRvb2x0aXAuaWdub3JlU2hvd1BvcG92ZXJcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwiaXRlbT8uYnVsbGV0IHx8IGl0ZW0/Lm5nU3R5bGVzXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJjbGFzc0luY2x1ZGVUYWdJdGVtKCkgfHwgJydcIlxuICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktdGFncy1yZWFkb25seV09XCJpdGVtLmRpc2FibGVJdGVtXCJcbiAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLXRhZ3MtaXRlbV09XCIhaXRlbS5kaXNhYmxlSXRlbVwiXG4gICAgICAgICAgICBbY2xhc3MuY3Vyc29yLWRlZmF1bHRdPVwiZGlzYWJsZSgpIHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cImhhbmRsZXJDbGlja1RhZ0l0ZW0oJGV2ZW50KVwiPlxuICAgICAgICAgICAgQGlmIChmaWVsZEdldEltYWdlKCkgfHwgY29uZmlnKCk/LmZpZWxkR2V0SW1hZ2U7IGFzIGZpZWxkR2V0SW1hZ2UpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYXZhdGFyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImNsYXNzQXZhdGFySW5jbHVkZSgpIHx8IGNvbmZpZygpPy5jbGFzc0F2YXRhckluY2x1ZGUgfHwgJ21yLVs4cHhdJ1wiXG4gICAgICAgICAgICAgICAgICBbc2l6ZV09XCJpbWFnZVNpemUoKSB8fCBjb25maWcoKT8uaW1hZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAgIFtsaW5rQXZhdGFyXT1cIml0ZW1bZmllbGRHZXRJbWFnZV1cIlxuICAgICAgICAgICAgICAgICAgW2xpbmtBdmF0YXJFcnJvcl09XCJsaW5rSW1hZ2VFcnJvcigpIHx8IGNvbmZpZygpPy5saW5rSW1hZ2VFcnJvclwiXG4gICAgICAgICAgICAgICAgICBbaWRHZW5Db2xvcl09XCJpdGVtW2ZpZWxkR2V0VGV4dEF2YXRhcigpIHx8IGNvbmZpZygpPy5maWVsZEdldFRleHRBdmF0YXIgfHwgJyddXCJcbiAgICAgICAgICAgICAgICAgIFtnZXRMYXN0VGV4dEFmdGVyU3BhY2VdPVwiZ2V0TGFzdFRleHRBZnRlclNwYWNlKCkgfHwgY29uZmlnKCk/LmdldExhc3RUZXh0QWZ0ZXJTcGFjZVwiXG4gICAgICAgICAgICAgICAgICBbdGV4dEF2YXRhcl09XCJpdGVtW2ZpZWxkR2V0VGV4dEF2YXRhcigpIHx8IGNvbmZpZygpPy5maWVsZEdldFRleHRBdmF0YXIgfHwgJ3VzZXInXVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDZyXCJcbiAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJpdGVtLmZpZWxkTGFiZWwgfHwgJyAnIHwgdHJhbnNsYXRlXCI+PC9zcGFuPlxuICAgICAgICAgICAgQGlmICghZGlzYWJsZSgpICYmICFpdGVtLmRpc2FibGVJdGVtICYmICFyZWFkb25seSgpKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtbC1bOHB4XVwiPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAjaWNvbkNsb3NlRWxcbiAgICAgICAgICAgICAgICAgIFthdHRyLnNwZWNpZmljU3R5bGVdPVwiISEoaXRlbT8uYnVsbGV0IHx8IGl0ZW0/Lm5nU3R5bGVzKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ2ZsZXggdGV4dC1bMTZweF0gJyArIChjbGFzc0ljb25SZW1vdmVUYWdJdGVtKCkgfHwgJ2xpYnMtdWktaWNvbi1jbG9zZScpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCIhZGlzYWJsZSgpICYmICFsb2FkaW5nKCkgJiYgIWxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJkaXNhYmxlKCkgfHwgbG9hZGluZygpIHx8IGxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJpdGVtPy5idWxsZXQgfHwgaXRlbT8ubmdTdHlsZXMgfCBMaWJzVWlDb21wb25lbnRzVGFnc0dldENvbG9yUGlwZTogaWNvbkNsb3NlRWxcIlxuICAgICAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cImhhbmRsZXJSZW1vdmVJdGVtU2VsZWN0ZWQoJGV2ZW50LCBpdGVtKVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghc2luZ2xlU2VsZWN0ZWQoKSB8fCAoc2luZ2xlU2VsZWN0ZWQoKSAmJiAhaXRlbXNTZWxlY3RlZCgpLmxlbmd0aCkpIHtcbiAgICAgICAgICBAaWYgKCFjb25maWcoKT8uaWdub3JlSW5wdXQgJiYgIWNvbmZpZygpPy51aUxpa2VEcm9wZG93biAmJiAoIWhpZGRlbklucHV0V2hlblJlYWRvbmx5KCkgfHwgKGhpZGRlbklucHV0V2hlblJlYWRvbmx5KCkgJiYgIXJlYWRvbmx5KCkpKSkge1xuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJncm93XCJcbiAgICAgICAgICAgICAgW2NsYXNzLm1iLVs0cHhdXT1cIml0ZW1zU2VsZWN0ZWQoKS5sZW5ndGhcIlxuICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIid3LWZ1bGwgYmctdHJhbnNwYXJlbnQgJyArIChjb25maWcoKT8uY2xhc3NJbnB1dEluY2x1ZGUgfHwgJ3B4LVs0cHhdIG1pbi13LVszMHB4XScpXCJcbiAgICAgICAgICAgICAgW2RlZmF1bHRIZWlnaHRdPVwiMjRcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicmVhZG9ubHkoKSA/ICcnIDogcGxhY2Vob2xkZXIoKSB8fCAnaTE4bl9pbXBvcnRfY29udGVudCdcIlxuICAgICAgICAgICAgICBbbm9Cb3JkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFsodmFsdWUpXT1cInZhbHVlSW5wdXRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgbG9hZGluZygpIHx8IGxvYWRpbmdEZXRhaWwoKSB8fCBkaXNhYmxlV2hlbk1heEl0ZW0oKVwiXG4gICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgKG91dEVudGVyRXZlbnQpPVwiaGFuZGxlckVudGVyRXZlbnQoKVwiXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVyVmFsdWVDaGFuZ2VTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJJbnB1dEZ1bmN0aW9uQ29udHJvbCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChjb25maWcoKT8uaWdub3JlSW5wdXQgJiYgY29uZmlnKCk/LnVpTGlrZURyb3Bkb3duICYmICFpdGVtc1NlbGVjdGVkKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcGItWzRweF0gcHQtWzJweF0gbWwtWzExcHhdIGxpYnMtdWktZm9udC1oNXJcIlxuICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzljYTJhZF1dPVwiZGlzYWJsZSgpXCI+XG4gICAgICAgICAgICAgIHt7IHBsYWNlaG9sZGVyKCkgfHwgJ2kxOG5fc2VsZWN0X3ZhbHVlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoZXJyb3IoKSAmJiAhY29uZmlnKCk/Lmlnbm9yZVNob3dFcnJvcikge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1bI2VlMmQ0MV0gbGlicy11aS1mb250LWg3ciBtdC1bOHB4XVwiPnt7IGVycm9yKCk/Lm1lc3NhZ2UgfHwgJyAnIHwgdHJhbnNsYXRlOiBlcnJvcigpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7fSB9fTwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuPC9kaXY+XG5AaWYgKHNob3dMaXN0QmVsbG93KCkpIHtcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3RWaWV3RWxcIj48L25nLWNvbnRhaW5lcj5cbn1cbjxuZy10ZW1wbGF0ZSAjbGlzdFZpZXdFbD5cbiAgQGlmIChsaXN0Q29uZmlnKCk7IGFzIGxpc3RDb25maWcpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWxpc3RcbiAgICAgIFtzZWFyY2hDb25maWddPVwibGlzdFNlYXJjaENvbmZpZygpIHx8IHsgY2xhc3NJbmNsdWRlOiAnaGlkZGVuJywgaWNvbkxlZnRDbGFzczogJ2hpZGRlbicgfVwiXG4gICAgICBbaXNTZWFyY2hPbmxpbmVdPVwiaXNTZWFyY2hPbmxpbmUoKVwiXG4gICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgIFtrZXlTZWFyY2hdPVwia2V5U2VhcmNoKClcIlxuICAgICAgW2NvbmZpZ109XCJsaXN0Q29uZmlnXCJcbiAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKCkgfHwgZGlzYWJsZVdoZW5NYXhJdGVtKClcIlxuICAgICAgW3NlYXJjaFBhZGRpbmddPVwibGlzdFNlYXJjaFBhZGRpbmcoKVwiXG4gICAgICBbbWF4SXRlbVNob3ddPVwibGlzdE1heEl0ZW1TaG93KCkgfHwgNlwiXG4gICAgICBbbXVsdGlLZXlTZWxlY3RlZF09XCJrZXlzU2VsZWN0ZWQoKVwiXG4gICAgICBbY2xpY2tFeGFjdGx5XT1cImZhbHNlXCJcbiAgICAgIFtrZXlzSGlkZGVuSXRlbV09XCJrZXlzSGlkZGVuSXRlbSgpXCJcbiAgICAgIFtrZXlzRGlzYWJsZUl0ZW1dPVwibGlzdEtleURpc2FibGUoKVwiXG4gICAgICBbZGl2aWRlckNsYXNzSW5jbHVkZV09XCJsaXN0RGl2aWRlckNsYXNzSW5jbHVkZSgpID8/ICdoaWRkZW4nXCJcbiAgICAgIFtidXR0b25zT3RoZXJdPVwibGlzdEJ1dHRvbnNPdGhlcigpXCJcbiAgICAgIFtiYWNrZ3JvdW5kTGlzdEN1c3RvbV09XCJsaXN0QmFja2dyb3VuZExpc3RDdXN0b20oKVwiXG4gICAgICBbZnVuY3Rpb25HZXRJdGVtc0F1dG9BZGRMaXN0XT1cImZ1bmN0aW9uR2V0SXRlbUF1dG9BZGRMaXN0KClcIlxuICAgICAgW2hpZGRlbklucHV0U2VhcmNoXT1cImxpc3RIaWRkZW5JbnB1dFNlYXJjaFdoZW5IYXNTZWFyY2hDb25maWcoKVwiXG4gICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sTGlzdCgkZXZlbnQpXCJcbiAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkS2V5KCRldmVudClcIlxuICAgICAgKG91dFNlbGVjdE11bHRpS2V5KT1cImhhbmRsZXJTZWxlY3RNdWx0aUtleSgkZXZlbnQpXCJcbiAgICAgIChvdXRDaGFuZ2VWaWV3KT1cImhhbmRsZXJEYXRhQ2hhbmdlKCRldmVudClcIlxuICAgICAgKG91dENsaWNrQnV0dG9uT3RoZXIpPVwiaGFuZGxlckNsaWNrQnV0dG9uT3RoZXIoJGV2ZW50KVwiXG4gICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAob3V0TG9hZGluZyk9XCJoYW5kbGVyTG9hZGluZygkZXZlbnQpXCIgLz5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -2,17 +2,17 @@ import { NgTemplateOutlet, NgStyle } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
3
  import { Pipe, signal, computed, input, model, output, viewChild, inject, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
4
4
  import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
5
+ import { LibsUiComponentsClickOutsideDirective } from '@libs-ui/components-click-outside';
5
6
  import { LibsUiComponentsInputsInputComponent } from '@libs-ui/components-inputs-input';
6
7
  import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
7
8
  import { getFieldKeyByType, LibsUiComponentsListComponent } from '@libs-ui/components-list';
8
9
  import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
10
+ import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
9
11
  import { LibsUiHttpRequestService } from '@libs-ui/services-http-request';
10
12
  import { get, rgbToHex, colorStepContrastFromOrigin, uuid, set, isNil, cloneDeep, escapeHtml, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_PATTEN_VALID } from '@libs-ui/utils';
11
13
  import * as i1 from '@ngx-translate/core';
12
14
  import { TranslateModule } from '@ngx-translate/core';
13
15
  import { Subject, debounceTime, takeUntil } from 'rxjs';
14
- import { LibsUiComponentsClickOutsideDirective } from '@libs-ui/components-click-outside';
15
- import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
16
16
 
17
17
  class LibsUiComponentsTagsGetColorPipe {
18
18
  transform(style, element) {
@@ -20,13 +20,13 @@ class LibsUiComponentsTagsGetColorPipe {
20
20
  return {};
21
21
  }
22
22
  let color = get(style, 'color');
23
- let backgroundColor = get(style, 'backgroundColor') || get(style, 'background');
23
+ let backgroundColor = (get(style, 'backgroundColor') || get(style, 'background'));
24
24
  if (color && color.includes('rgb') && color.match(/d+/g)?.length) {
25
- const [red, green, blue] = color.match(/d+/g);
25
+ const [red, green, blue] = Array.from(color.match(/d+/g) || []);
26
26
  color = rgbToHex({ red, green, blue });
27
27
  }
28
28
  if (backgroundColor && backgroundColor.includes('rgb') && backgroundColor.match(/\d+/g)?.length) {
29
- const [red, green, blue] = backgroundColor.match(/\d+/g);
29
+ const [red, green, blue] = Array.from(backgroundColor.match(/\d+/g) || []);
30
30
  backgroundColor = rgbToHex({ red, green, blue });
31
31
  }
32
32
  if (color && /(^#)[a-z0-9]{3,6}/gi.test(color)) {
@@ -273,7 +273,7 @@ class LibsUiComponentsTagsComponent {
273
273
  updateFieldLabel(item) {
274
274
  const ref = get(item, 'ref') || item;
275
275
  const getValue = this.config()?.getValue;
276
- set(item, 'fieldLabel', `${get(ref, this.fieldLabel()) || ref.label || ref.name || ' '}`);
276
+ set(item, 'fieldLabel', `${get(ref, this.fieldLabel()) || get(ref, 'label') || get(ref, 'name') || ' '}`);
277
277
  if (getValue) {
278
278
  set(item, 'fieldLabel', getValue(ref) || ' ');
279
279
  }
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-tags.mjs","sources":["../../../../../libs-ui/components/tags/src/pipes/get-color.pipe.ts","../../../../../libs-ui/components/tags/src/tags.component.ts","../../../../../libs-ui/components/tags/src/tags.component.html","../../../../../libs-ui/components/tags/src/libs-ui-components-tags.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { colorStepContrastFromOrigin, get, rgbToHex } from '@libs-ui/utils';\n\n@Pipe({\n name: 'LibsUiComponentsTagsGetColorPipe',\n standalone: true,\n})\nexport class LibsUiComponentsTagsGetColorPipe implements PipeTransform {\n transform(style: unknown, element: HTMLElement) {\n if (!style) {\n return {};\n }\n let color = get(style, 'color');\n let backgroundColor = get(style, 'backgroundColor') || get(style, 'background');\n if (color && color.includes('rgb') && color.match(/d+/g)?.length) {\n const [red, green, blue] = color.match(/d+/g);\n color = rgbToHex({ red, green, blue });\n }\n if (backgroundColor && backgroundColor.includes('rgb') && backgroundColor.match(/\\d+/g)?.length) {\n const [red, green, blue] = backgroundColor.match(/\\d+/g);\n backgroundColor = rgbToHex({ red, green, blue });\n }\n if (color && /(^#)[a-z0-9]{3,6}/gi.test(color)) {\n element.style.setProperty('--libs-ui-tags-item-icon-default', color);\n element.style.setProperty('--libs-ui-tags-item-icon-background-hover', color);\n }\n if (backgroundColor && /(^#)[a-z0-9]{3,6}/gi.test(backgroundColor)) {\n element.style.setProperty('--libs-ui-tags-item-icon-hover', backgroundColor);\n element.style.setProperty('--libs-ui-tags-item-icon-active', backgroundColor);\n element.style.setProperty('--libs-ui-tags-item-icon-background-active', colorStepContrastFromOrigin(backgroundColor, 60)?.light || '');\n }\n return style;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, model, OnDestroy, OnInit, output, signal, untracked, viewChild } from '@angular/core';\nimport { LibsUiComponentsAvatarComponent, TYPE_SIZE_AVATAR_CONFIG } from '@libs-ui/components-avatar';\nimport { IButton } from '@libs-ui/components-buttons-button';\nimport { IValidMaxItemSelected } from '@libs-ui/components-dropdown';\nimport { IFocusAndBlurEvent, IInputFunctionControlEvent, LibsUiComponentsInputsInputComponent } from '@libs-ui/components-inputs-input';\nimport { IInputSearchConfig } from '@libs-ui/components-inputs-search';\nimport { IValidPattern } from '@libs-ui/components-inputs-valid';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { getFieldKeyByType, IListConfigItem, IListDataEmitKey, IListDataEmitMultiKey, IListFunctionControlEvent, LibsUiComponentsListComponent } from '@libs-ui/components-list';\nimport { IFlagMouse, IPopoverFunctionControlEvent, LibsUiComponentsPopoverComponent, TYPE_POPOVER_DIRECTION, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { IHttpResponse, IMessageTranslate } from '@libs-ui/interfaces-types';\nimport { IHttpRequestConfig, LibsUiHttpRequestService } from '@libs-ui/services-http-request';\nimport { cloneDeep, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_PATTEN_VALID, escapeHtml, get, isNil, set, uuid } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { debounceTime, Subject, Subscription, takeUntil } from 'rxjs';\nimport { ITagsConfig, ITagsFunctionControlEvent } from './interfaces/tags.interface';\nimport { LibsUiComponentsTagsGetColorPipe } from './pipes/get-color.pipe';\nimport { LibsUiComponentsClickOutsideDirective } from '@libs-ui/components-click-outside';\nimport { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-tags',\n templateUrl: './tags.component.html',\n styleUrl: './tags.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TranslateModule,\n NgTemplateOutlet,\n NgStyle,\n LibsUiComponentsClickOutsideDirective,\n LibsUiComponentsLabelComponent,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsInputsInputComponent,\n LibsUiComponentsAvatarComponent,\n LibsUiComponentsListComponent,\n LibsUiComponentsTagsGetColorPipe,\n LibsUiComponentsScrollOverlayDirective,\n ],\n})\nexport class LibsUiComponentsTagsComponent implements OnInit, OnDestroy {\n // #region PROPERTY\n protected flagMouse = signal<IFlagMouse>({ isMouseEnter: false, isMouseEnterContent: false });\n protected loading = signal<boolean>(false);\n protected loadingDetail = signal<boolean>(false);\n protected keySearch = signal<string>('');\n protected valueInput = signal<string>('');\n protected itemsSelected = signal<Array<any>>([]);\n protected showList = signal<boolean>(false);\n protected positionList = signal<TYPE_POPOVER_DIRECTION | undefined>(undefined);\n protected keysSelected = signal<Array<unknown>>([]);\n protected disableWhenMaxItem = signal<boolean>(false);\n protected focus = signal<boolean>(false);\n protected error = signal<IMessageTranslate | undefined>(undefined);\n protected fieldKey = signal<string>('id');\n protected functionGetItemAutoAddList = computed(() => {\n if (!this.enterAutoAddTagToList()) {\n return;\n }\n return () =>\n this.itemsSelected()\n .filter((item) => `${get(item, this.fieldKey(), '')}`.search(this.fakeId()) === 0)\n .reverse();\n });\n protected listKeyDisable = signal<Array<unknown>>([]);\n\n private fakeId = signal<string>(uuid());\n private timeOutFlag = signal<number | undefined>(undefined);\n private timeOutChangeSearch = signal<number | undefined>(undefined);\n private timeOutCheckViewChange = signal<number | undefined>(undefined);\n private timeoutClickOutside = signal<number | undefined>(undefined);\n private clientHeight = signal<number | undefined>(undefined);\n private itemsOfList = signal<Array<unknown>>([]);\n private keySearchChange = new Subject<string>();\n private keySearchChangeSub = signal<Subscription | undefined>(undefined);\n private tempIgnoreEmit = signal<boolean>(false);\n private popoverFunctionControl = signal<IPopoverFunctionControlEvent | undefined>(undefined);\n private inputFunctionControl = signal<IInputFunctionControlEvent | undefined>(undefined);\n private typePopover = signal<TYPE_POPOVER_EVENT | undefined>(undefined);\n private listFunctionControl = signal<IListFunctionControlEvent | undefined>(undefined);\n private defaultItemsSelectedCurrent = signal<Array<unknown> | undefined>(undefined);\n private onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly classIncludePopover = input<string>();\n readonly enterAutoAddTagToList = input<boolean>(false);\n readonly checkExitIsLabelInclude = input<boolean>();\n readonly checkExitByFields = input<Array<string>>();\n readonly parentBorderWidth = input<number>();\n readonly functionCheckPermissionCreateTag = input<() => boolean>(() => true);\n readonly placeholder = input<string>();\n readonly httpRequestDetailItemByIds = input<IHttpRequestConfig>();\n readonly fieldLabel = input<string>('label');\n readonly maxItemInput = input<number>();\n readonly zIndex = input<number, number | undefined>(1000, { transform: (value) => value ?? 1000 });\n readonly config = input<ITagsConfig>();\n readonly disable = input<boolean>();\n readonly readonly = input<boolean>();\n readonly labelConfig = input<ILabel>();\n readonly defaultItemsSelected = input<Array<unknown>>();\n readonly defaultKeysSelected = input<Array<unknown>>();\n readonly listSearchConfig = input<IInputSearchConfig>();\n readonly isSearchOnline = input<boolean>(false);\n readonly listSearchPadding = input<boolean>();\n readonly listDividerClassInclude = input<string>();\n readonly listConfig = input<IListConfigItem>();\n readonly listButtonsOther = input<Array<IButton>>();\n readonly listClickExactly = input<boolean>();\n readonly listBackgroundListCustom = input<string>();\n readonly listMaxItemShow = input<number>();\n readonly listHiddenInputSearchWhenHasSearchConfig = input<boolean>();\n readonly removeTextSearchWhenBlurInput = input<boolean>(true);\n readonly keysHiddenItem = model<Array<unknown>>();\n readonly keysDisableItem = input<Array<unknown>>();\n readonly ignoreEmitWhenSameDataSelected = input<boolean>();\n readonly singleSelected = input<boolean>();\n readonly classIncludeTagItem = input<string>();\n readonly classIconRemoveTagItem = input<string>();\n readonly showBorderActiveWhenFocusInput = input<boolean>();\n readonly fieldGetImage = input<string>();\n readonly imageSize = input<TYPE_SIZE_AVATAR_CONFIG>(16);\n readonly linkImageError = input<string>();\n readonly fieldGetTextAvatar = input<string>('user');\n readonly classAvatarInclude = input<string>();\n readonly getLastTextAfterSpace = input<boolean>();\n readonly validRequired = input<IMessageTranslate>();\n readonly validMaxItemSelected = input<IValidMaxItemSelected>();\n readonly validPattern = input<Array<IValidPattern>>();\n readonly showListBellow = input<boolean>();\n readonly hiddenInputWhenReadonly = input<boolean>();\n\n // #region OUTPUT\n readonly outSelectMultiItem = output<Array<unknown>>();\n readonly outValidEvent = output<boolean>();\n readonly outFunctionsControl = output<ITagsFunctionControlEvent>();\n readonly outClickButtonOther = output<IButton>();\n readonly outShowListEvent = output<boolean>();\n readonly outChangStageFlagMouse = output<IFlagMouse>();\n readonly outLoadingGetDetailSelected = output<boolean>();\n\n /* VIEW CHILD */\n private readonly tagsEl = viewChild.required<ElementRef>('tagsEl');\n\n /* INJECT*/\n private httpRequestService = inject(LibsUiHttpRequestService);\n\n constructor() {\n effect(() => {\n const maxItemInput = this.maxItemInput();\n untracked(() => {\n this.disableWhenMaxItem.set(false);\n if (maxItemInput && maxItemInput <= this.itemsSelected().length) {\n this.disableWhenMaxItem.set(true);\n }\n });\n });\n effect(() => {\n const listConfig = this.listConfig();\n untracked(() => {\n if (listConfig) {\n this.fieldKey.set(getFieldKeyByType(listConfig, 'id'));\n }\n });\n });\n effect(() => {\n const currentItems = this.defaultItemsSelected() || [];\n untracked(() => {\n const previousItems = this.defaultItemsSelectedCurrent() || [];\n this.defaultItemsSelectedCurrent.set(this.defaultItemsSelected());\n if (previousItems.length !== currentItems.length) {\n this.updateItemsSelected(currentItems);\n return;\n }\n for (const prevItem of previousItems) {\n if (!currentItems.some((item) => get(item, this.fieldKey()) === get(prevItem, this.fieldKey()))) {\n this.updateItemsSelected(currentItems);\n break;\n }\n }\n });\n });\n effect(() => {\n const currentValue = this.defaultKeysSelected() || [];\n untracked(() => {\n const previousValue = this.keysSelected() || [];\n if (previousValue.length !== currentValue.length) {\n this.getDetailByIds(currentValue);\n return;\n }\n const keysNew = currentValue.filter((key) => !this.itemsSelected().some((item) => get(item, this.fieldKey(), '') === key));\n if (keysNew.length) {\n this.getDetailByIds(keysNew);\n }\n });\n });\n effect(() => {\n let listKeyDisable: Array<unknown> = [];\n const keysDisableItem = this.keysDisableItem();\n const itemsSelected = this.itemsSelected();\n\n untracked(() => {\n if (keysDisableItem?.length) {\n listKeyDisable = [...keysDisableItem];\n }\n itemsSelected.forEach((item) => {\n if (item.disableItem && !listKeyDisable.find((key) => key === item[this.fieldKey()])) {\n listKeyDisable.push(item[this.fieldKey()]);\n }\n });\n this.listKeyDisable.set(listKeyDisable);\n });\n });\n }\n\n ngOnInit() {\n if (!this.config()) {\n return;\n }\n const httpRequestDetailItemByIds = this.httpRequestDetailItemByIds();\n if (httpRequestDetailItemByIds && (!httpRequestDetailItemByIds.guideAutoUpdateArgumentsValue || !httpRequestDetailItemByIds.guideAutoUpdateArgumentsValue?.detailById)) {\n throw 'Config getDetailByIds yêu cầu tối thiểu các tham số guideAutoUpdateArgumentsValue, detailById';\n }\n const preprocessor = (keys: Array<unknown>) => {\n if (!keys || !(keys instanceof Array) || !keys.length) {\n return '';\n }\n return keys.join(';');\n };\n if (httpRequestDetailItemByIds?.guideAutoUpdateArgumentsValue?.detailById) {\n httpRequestDetailItemByIds.guideAutoUpdateArgumentsValue.detailById.fieldGetValue = httpRequestDetailItemByIds.guideAutoUpdateArgumentsValue.detailById.fieldGetValue ?? 'keys';\n httpRequestDetailItemByIds.guideAutoUpdateArgumentsValue.detailById.preprocessor = httpRequestDetailItemByIds.guideAutoUpdateArgumentsValue.detailById.preprocessor ?? preprocessor;\n }\n this.outFunctionsControl.emit(this.FunctionsControl);\n }\n\n public get FunctionsControl(): ITagsFunctionControlEvent {\n return {\n checkIsValid: this.checkValid.bind(this),\n removeList: async () => this.popoverFunctionControl()?.removePopoverOverlay(),\n updateLabel: this.updateLabel.bind(this),\n clearItemSelected: this.clearItemSelected.bind(this),\n clearKeySearch: () => this.handlerValueChangeSearch(''),\n focusInput: () => this.focusInput(),\n getFakeId: async () => this.fakeId(),\n createTag: this.handlerEnterEvent.bind(this),\n removeItemSelected: this.handlerRemoveItemSelected.bind(this),\n resetError: this.resetError.bind(this),\n resetToDefaultDataSelected: this.resetToDefaultDataSelected.bind(this),\n updateItemSelectedDisable: this.updateItemSelectedDisable.bind(this),\n refreshListData: this.refreshListData.bind(this),\n setError: this.setError.bind(this),\n };\n }\n\n private async setError(message: string) {\n this.error.set({ message });\n }\n\n protected handlerPopoverFunctionControlEvent(event: IPopoverFunctionControlEvent) {\n this.popoverFunctionControl.set(event);\n }\n\n private async updateLabel() {\n if (!this.itemsSelected() || !this.itemsSelected().length) {\n return;\n }\n this.itemsSelected.update((items) => {\n items.forEach((item) => this.updateFieldLabel(item));\n return [...items];\n });\n }\n\n private updateFieldLabel(item: unknown) {\n const ref = get(item, 'ref') || item;\n const getValue = this.config()?.getValue;\n set(item, 'fieldLabel', `${get(ref, this.fieldLabel()) || ref.label || ref.name || ' '}`);\n if (getValue) {\n set(item, 'fieldLabel', getValue(ref) || ' ');\n }\n }\n\n private async clearItemSelected(ignoreValid = false) {\n if (!this.itemsSelected() || !this.itemsSelected().length) {\n return;\n }\n const length = this.itemsSelected().length - 1;\n this.tempIgnoreEmit.set(true);\n this.itemsSelected().forEach((item, index) => {\n if (index === length) {\n this.tempIgnoreEmit.set(false);\n }\n this.handlerRemoveItemSelected(\n {\n stopPropagation: () => {\n return;\n },\n } as Event,\n item,\n ignoreValid\n );\n });\n }\n\n private updateItemsSelected(itemsSelected: Array<unknown>, ignoreValidate = true, ignoreEmitKeySelectedWhenItemsNotExitsEmpty?: boolean) {\n if (!itemsSelected || !itemsSelected.length) {\n return;\n }\n const itemsNotExits: Array<unknown> = [];\n itemsSelected.forEach((item) => {\n if (!item) {\n return;\n }\n let fieldLabel = `${get(item, this.fieldLabel()) || get(item, 'label') || get(item, 'name') || ' '}`;\n const getValue = this.config()?.getValue;\n if (getValue) {\n fieldLabel = getValue(item) || ' ';\n }\n const itemExits = this.checkExits(fieldLabel, get(item, this.fieldKey()));\n if (itemExits?.isItemSelected) {\n Object.assign(itemExits.item, item);\n return;\n }\n itemsNotExits.push(item);\n });\n this.processData(itemsNotExits, ignoreValidate, ignoreEmitKeySelectedWhenItemsNotExitsEmpty);\n }\n\n protected handlerPopoverEvent(type: TYPE_POPOVER_EVENT) {\n this.typePopover.set(type);\n if (type === 'click') {\n return;\n }\n if (type === 'remove') {\n this.showList.set(false);\n this.outShowListEvent.emit(false);\n this.inputFunctionControl()?.blur();\n return;\n }\n this.showList.set(true);\n this.outShowListEvent.emit(true);\n this.inputFunctionControl()?.focus();\n }\n\n protected handlerPopoverContentEvent(position: TYPE_POPOVER_DIRECTION) {\n if (this.positionList() === position) {\n return;\n }\n this.positionList.set(position);\n }\n\n protected async handlerRemoveItemSelected(event: Event, itemRemove: unknown, ignoreValid?: boolean) {\n event.stopPropagation();\n this.flagMouse.set({ isMouseEnter: true, isMouseEnterContent: true });\n this.timeOutFlag.set(setTimeout(() => this.flagMouse.set({ isMouseEnter: false, isMouseEnterContent: false }), 250));\n this.itemsSelected.update((items) =>\n items.filter((item) => {\n const keyRemove = get(itemRemove, this.fieldKey());\n const keyItem = get(item, this.fieldKey());\n const labelRemove = get(itemRemove, 'fieldLabel').trim();\n const labelItem = get(item, 'fieldLabel').trim();\n\n return ((isNil(keyRemove) || isNil(keyItem)) && labelRemove !== labelItem) || (!isNil(keyRemove) && !isNil(keyItem) && keyRemove !== keyItem);\n })\n );\n if (itemRemove && !isNil(get(itemRemove, this.fieldKey())) && `${get(itemRemove, this.fieldKey())}`.search(this.fakeId()) >= 0) {\n this.keysHiddenItem.update((items) => Array.from(new Set([...(items || []), get(itemRemove, this.fieldKey())])));\n }\n this.keysSelected.set(Array.from(new Set(this.itemsSelected().map((item) => get(item, `ref.${this.fieldKey()}`)))));\n this.disableWhenMaxItem.set(false);\n const maxItemInput = this.maxItemInput();\n if (maxItemInput && maxItemInput <= this.itemsSelected().length) {\n this.disableWhenMaxItem.set(true);\n }\n if (!this.showList()) {\n this.outSelectMultiItem.emit(this.getItemSelected());\n this.checkViewChange(true, ignoreValid);\n return;\n }\n if (this.showList()) {\n this.tempIgnoreEmit.set(true);\n }\n if (!ignoreValid) {\n this.checkValid();\n }\n this.tempIgnoreEmit.set(false);\n }\n\n protected handlerInputFunctionControl(event: IInputFunctionControlEvent) {\n this.inputFunctionControl.set(event);\n }\n\n protected handlerFocusAndBlurEvent(event: IFocusAndBlurEvent) {\n this.focus.set(false);\n if (event.name === 'focus') {\n this.focus.set(true);\n }\n if (event.name === 'blur' && this.typePopover()?.includes('mouseleave') && this.validRequired() && (!this.itemsSelected() || !this.itemsSelected().length)) {\n this.checkValid();\n }\n }\n\n protected handlerClickOutside(event: Event) {\n event.stopPropagation();\n clearTimeout(this.timeoutClickOutside());\n this.timeoutClickOutside.set(\n setTimeout(() => {\n if (this.showList() || !this.removeTextSearchWhenBlurInput()) {\n return;\n }\n this.valueInput.set('');\n this.keySearch.set('');\n this.inputFunctionControl()?.resetValue();\n }, 250)\n );\n }\n\n protected async handlerEnterEvent() {\n if (!this.valueInput() || !`${this.valueInput()}`.trim()) {\n return;\n }\n if (this.config()?.ignoreEnterCreateNewItem) {\n const itemExits = this.checkExits();\n if (!itemExits || itemExits.isItemSelected) {\n return;\n }\n this.processData([itemExits.item]);\n this.handlerValueChangeSearch('');\n return;\n }\n if (!this.functionCheckPermissionCreateTag()()) {\n return;\n }\n const itemExits = this.checkExits();\n const valueInput = `${this.valueInput()}`.trim();\n const newItem = { [this.fieldLabel()]: valueInput };\n if (this.fieldKey()) {\n set(newItem, this.fieldKey(), `${this.fakeId()}${valueInput}${uuid()}`);\n }\n if (!itemExits) {\n if (this.checkPattern([newItem])) {\n const itemBuildValue = { ...newItem };\n const buildValue = this.config()?.buildValue;\n if (buildValue) {\n buildValue(itemBuildValue, newItem[this.fieldLabel()]);\n }\n newItem[this.fieldLabel()] = itemBuildValue[this.fieldLabel()];\n if (this.enterAutoAddTagToList()) {\n this.listFunctionControl()?.updateData({ newData: signal([signal(newItem)]), functionCustomAddDataToStore: (newData, store) => store.update((value) => [...newData(), ...value]) });\n }\n this.processData([newItem]);\n this.handlerValueChangeSearch('');\n }\n return;\n }\n if (itemExits.isItemSelected) {\n return;\n }\n this.processData([itemExits.item]);\n this.handlerValueChangeSearch('');\n }\n\n protected async handlerValueChangeSearch(value: string | number) {\n this.valueInput.set(`${value}`);\n if (!`${value || ''}`.trim()) {\n this.keySearchChangeSub()?.unsubscribe();\n this.keySearchChangeSub.set(undefined);\n this.timeOutChangeSearch.set(setTimeout(() => this.keySearch.set('')));\n if (!this.config()?.ignoreEnterCreateNewItem) {\n this.checkValid();\n }\n return;\n }\n if (this.config()?.ignoreInput) {\n return;\n }\n if (!this.keySearchChangeSub()) {\n this.setEventKeySearch();\n }\n this.keySearchChange.next(`${value || ''}`.trim());\n }\n\n private setEventKeySearch() {\n if (this.keySearchChangeSub()) {\n return;\n }\n this.keySearchChangeSub.set(this.keySearchChange.pipe(debounceTime(1500), takeUntil(this.onDestroy)).subscribe((value) => this.keySearch.set(`${value || ''}`.trim())));\n }\n\n private processData(items: Array<unknown>, ignoreValidate = false, ignoreEmitKeySelectedWhenItemsNotExitsEmpty?: boolean) {\n if (!items || !items.length) {\n const itemsSelected = this.getItemSelected();\n if (!ignoreEmitKeySelectedWhenItemsNotExitsEmpty) {\n this.outSelectMultiItem.emit(itemsSelected);\n }\n this.keysSelected.set(Array.from(new Set(itemsSelected?.map((item) => get(item, `ref.${this.fieldKey()}`)))));\n this.checkViewChange(false, ignoreValidate);\n return;\n }\n const itemsMapping = items.map((item) => {\n const ref = get(item, 'ref') || item;\n item = cloneDeep(ref);\n set(item, 'ref', ref);\n this.updateFieldLabel(item);\n const { getDisableItem, getStyles, getStylesTagSpecific, getTooltip } = this.config() || {};\n if (getDisableItem) {\n set(item, 'disableItem', getDisableItem(item));\n }\n if (getStyles) {\n set(item, 'ngStyles', getStyles(item));\n }\n if (getStylesTagSpecific) {\n const type = getStylesTagSpecific(item);\n if (type === 'specific_violet_color') {\n set(item, 'ngStyles', { color: '#7239EA', backgroundColor: '#F1EBFD' });\n }\n }\n if (getTooltip) {\n set(item, 'tooltip', getTooltip(item));\n }\n return item;\n });\n this.itemsSelected.update((items) => [...items, ...itemsMapping]);\n this.keysSelected.set(Array.from(new Set(this.itemsSelected().map((item) => get(item, `ref.${this.fieldKey()}`)))));\n this.outSelectMultiItem.emit(this.getItemSelected());\n this.checkViewChange(false, ignoreValidate);\n }\n\n protected handlerDataChange(items: Array<unknown>) {\n this.itemsOfList.set(items);\n this.popoverFunctionControl()?.updatePopoverOverlayPosition();\n if (!this.config()?.ignoreInput) {\n this.inputFunctionControl()?.focus();\n }\n }\n\n protected handlerLoading(event: boolean) {\n this.loading.set(event);\n }\n\n private checkViewChange(ignoreScrollBottom: boolean, ignoreValidate = false) {\n this.disableWhenMaxItem.set(false);\n const maxItemInput = this.maxItemInput();\n if (maxItemInput && maxItemInput <= this.itemsSelected().length) {\n this.disableWhenMaxItem.set(true);\n }\n this.timeOutCheckViewChange.set(\n setTimeout(() => {\n const scrollHeight = this.tagsEl()?.nativeElement.scrollHeight;\n if (!isNil(scrollHeight) && this.clientHeight() !== scrollHeight && this.positionList() !== 'top') {\n this.popoverFunctionControl()?.updatePopoverOverlayPosition();\n }\n if (!ignoreScrollBottom && this.tagsEl() && this.tagsEl().nativeElement) {\n this.tagsEl().nativeElement.scrollTop = scrollHeight;\n }\n this.clientHeight.set(scrollHeight);\n }, 250)\n );\n if (!ignoreValidate) {\n this.checkValid();\n }\n }\n\n private checkExits(label?: string, id?: string) {\n let itemExits;\n if (!isNil(id) && !`${id}`.includes(this.fakeId()) && this.fieldKey()) {\n itemExits = this.itemsSelected().find((item) => !isNil(get(item, this.fieldKey())) && `${get(item, this.fieldKey())}`.trim() === `${id}`);\n if (itemExits) {\n return { item: itemExits, isItemSelected: !!itemExits };\n }\n return;\n }\n if (!label) {\n label = `${this.valueInput() || ''}`.trim();\n }\n itemExits = this.itemsSelected().find(\n (item) =>\n (!isNil(get(item, 'fieldLabel')) && get(item, 'fieldLabel').trim() === label?.trim()) ||\n (this.checkExitIsLabelInclude() && get(item, 'fieldLabel').trim().includes(label?.trim())) ||\n (this.checkExitByFields() &&\n this.checkExitByFields()?.some((field) => get(item, field)?.trim() === label?.trim() || get(item, field)?.trim() === escapeHtml(label?.trim() || '') || escapeHtml(get(item, field)?.trim() || ' ') === escapeHtml(label?.trim() || '')))\n );\n if (itemExits) {\n return { item: itemExits, isItemSelected: true };\n }\n itemExits = this.itemsOfList().find(\n (item) =>\n (!isNil(get(item, 'fieldLabel')) && get(item, 'fieldLabel').trim() === label?.trim()) ||\n (this.checkExitIsLabelInclude() && get(item, 'fieldLabel').trim().includes(label?.trim())) ||\n (this.checkExitByFields() &&\n this.checkExitByFields()?.some((field) => get(item, field)?.trim() === label?.trim() || escapeHtml(get(item, field)?.trim() || ' ') === escapeHtml(label?.trim() || '') || get(item, field)?.trim() === escapeHtml(label?.trim() || '')))\n );\n if (itemExits) {\n return { item: itemExits, isItemSelected: false };\n }\n return;\n }\n\n protected handlerSelectedKey(event: IListDataEmitKey | undefined) {\n if (!event || !event.item) {\n return;\n }\n if (!isNil(event?.key)) {\n this.popoverFunctionControl()?.removePopoverOverlay();\n }\n if (this.itemsSelected()[0]) {\n this.tempIgnoreEmit.set(true);\n this.handlerRemoveItemSelected(\n {\n stopPropagation: () => {\n return;\n },\n } as Event,\n this.itemsSelected()[0],\n this.itemsSelected()[0].disableItem\n );\n this.tempIgnoreEmit.set(false);\n }\n this.updateItemsSelected([event.item], !!this.itemsSelected()[0]); // Bug #36075\n }\n\n private getFlagEmitSelectedItem(keys: Array<unknown>) {\n if (!this.ignoreEmitWhenSameDataSelected() || keys.length !== this.itemsSelected().length) {\n return false;\n }\n for (const key of keys) {\n if (!this.itemsSelected().some((item) => get(item, this.fieldKey()) === key)) {\n return false;\n }\n }\n return true;\n }\n\n protected async handlerSelectMultiKey(event: IListDataEmitMultiKey | undefined) {\n if (!event) {\n return;\n }\n const keys = [];\n const items: Array<unknown> = [];\n if (event.keys && event.keys.length && (!event.mapKeys || !event.mapKeys.length)) {\n keys.push(...event.keys);\n }\n const ignoreEmitKeySelectedWhenItemsNotExitsEmpty = this.getFlagEmitSelectedItem(cloneDeep(event.keys ?? []));\n event.mapKeys.forEach((mapKey) => {\n if (isNil(mapKey.key)) {\n return;\n }\n if (mapKey.item) {\n return items.push(mapKey.item);\n }\n if (!Array.isArray(this.itemsSelected())) {\n return keys.push(mapKey.key);\n }\n const item = this.itemsSelected().find((item) => get(item, this.fieldKey()) === mapKey.key);\n if (item) {\n return items.push(item);\n }\n return keys.push(mapKey.key);\n });\n if (keys.length) {\n const resultData: Array<unknown> = await this.getDetailByIds(keys, true);\n items.push(...resultData);\n }\n const messageEmpty = this.validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID;\n let ignoreValidate = true;\n if (messageEmpty === this.error()?.message) {\n ignoreValidate = false;\n }\n const itemRemove = this.itemsSelected().find((itemSelected) => get(itemSelected, this.fieldKey()) && !items.some((item) => get(itemSelected, this.fieldKey()) === get(item, this.fieldKey())));\n this.itemsSelected.update((itemsSelected) => itemsSelected.filter((itemSelected) => !get(itemSelected, this.fieldKey()) || (event.keys.length && items.some((item) => get(itemSelected, this.fieldKey()) === get(item, this.fieldKey())))));\n if (itemRemove) {\n if (this.enterAutoAddTagToList() && !isNil(get(itemRemove, this.fieldKey())) && `${get(itemRemove, this.fieldKey())}`.search(this.fakeId()) >= 0) {\n this.keysHiddenItem.update((items) => [...(items || []), get(itemRemove, this.fieldKey())]);\n }\n }\n if (!event.keys.length) {\n this.checkValid();\n this.keysSelected.set(Array.from(new Set(this.itemsSelected()?.map((item) => get(item, `ref.${this.fieldKey()}`)))));\n this.outSelectMultiItem.emit(this.getItemSelected());\n this.checkViewChange(false, ignoreValidate);\n return;\n }\n this.updateItemsSelected(items, ignoreValidate, ignoreEmitKeySelectedWhenItemsNotExitsEmpty);\n this.checkValid();\n }\n\n private async getDetailByIds(keys: Array<unknown>, isResponseData?: boolean): Promise<Array<unknown>> {\n const httpRequestDetailItemByIds = this.httpRequestDetailItemByIds();\n if (!httpRequestDetailItemByIds || this.loadingDetail() || !(keys instanceof Array) || !keys.length) {\n return [];\n }\n this.updateLoadingDetail(true);\n const cloneHttpDetailConfig = cloneDeep(httpRequestDetailItemByIds);\n try {\n const { argumentsValue, guideAutoUpdateArgumentsValue } = cloneHttpDetailConfig;\n if (!guideAutoUpdateArgumentsValue || !guideAutoUpdateArgumentsValue.detailById) {\n return [];\n }\n guideAutoUpdateArgumentsValue.detailById.fieldGetValue = 'keys';\n this.httpRequestService.updateArguments(argumentsValue, { keys: keys }, {}, '', false, false, guideAutoUpdateArgumentsValue);\n const result = (await this.httpRequestService.callApi(cloneHttpDetailConfig)) as IHttpResponse<Array<unknown>>;\n if (!isResponseData) {\n this.updateItemsSelected(result.data || []);\n this.updateLoadingDetail(false);\n return [];\n }\n this.updateLoadingDetail(false);\n return result.data || [];\n } catch (error) {\n console.log(error);\n this.updateLoadingDetail(false);\n }\n return [];\n }\n\n private async checkValid() {\n const valid = this.itemsSelected() && this.itemsSelected().length ? true : false;\n const stateError = !!this.error();\n this.error.set(undefined);\n if (this.validRequired() && !valid) {\n this.error.set({ ...this.validRequired(), message: this.validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID });\n }\n if (!this.error()) {\n this.checkPattern(this.itemsSelected());\n this.checkMaxItemSelectedValid();\n }\n if (!this.tempIgnoreEmit()) {\n this.outValidEvent.emit(!this.error());\n }\n if (stateError !== !!this.error()) {\n this.popoverFunctionControl()?.updatePopoverOverlayPosition();\n }\n return !this.error();\n }\n\n private checkMaxItemSelectedValid() {\n const validMaxItemSelected = this.validMaxItemSelected();\n if (validMaxItemSelected && this.itemsSelected().length > validMaxItemSelected.value) {\n this.error.set({ ...validMaxItemSelected, message: validMaxItemSelected.message || ERROR_MESSAGE_MAX_VALID, interpolateParams: { value: validMaxItemSelected.value } });\n return false;\n }\n return true;\n }\n\n private checkPattern(items: Array<unknown>): boolean {\n const validPattern = this.validPattern();\n if (!validPattern || !validPattern.length || !items || !items.length) {\n return true;\n }\n for (const valid of validPattern) {\n if (valid.pattern && items.some((item) => !valid.pattern.test(get(item, this.fieldLabel())))) {\n this.error.set({ ...valid, message: valid.message || ERROR_MESSAGE_PATTEN_VALID });\n return false;\n }\n }\n return true;\n }\n\n protected handlerClickButtonOther(event: IButton) {\n this.outClickButtonOther.emit(event);\n }\n\n private getItemSelected(): Array<unknown> {\n return this.itemsSelected().map((item) => {\n const itemMap = { ...item };\n if (!isNil(get(itemMap, this.fieldKey())) && `${get(itemMap, this.fieldKey())}`.search(this.fakeId()) === 0) {\n set(itemMap, this.fieldKey(), '');\n }\n return itemMap;\n });\n }\n\n protected async resetToDefaultDataSelected(itemSelected?: Array<unknown>) {\n if (itemSelected && Array.isArray(itemSelected)) {\n this.itemsSelected.set([]);\n this.updateItemsSelected(itemSelected);\n return;\n }\n itemSelected = new Array<unknown>();\n if (!this.fieldKey()) {\n return;\n }\n const defaultKeysSelected = this.defaultKeysSelected();\n if (defaultKeysSelected && Array.isArray(defaultKeysSelected)) {\n this.itemsSelected.set([]);\n this.getDetailByIds(defaultKeysSelected);\n return;\n }\n const defaultItemsSelected = this.defaultItemsSelected();\n if (defaultItemsSelected && Array.isArray(defaultItemsSelected)) {\n this.itemsSelected.set([]);\n this.updateItemsSelected(defaultItemsSelected);\n return;\n }\n }\n\n protected handlerFunctionControlList(event: IListFunctionControlEvent) {\n this.listFunctionControl.set(event);\n }\n\n protected async focusInput() {\n this.inputFunctionControl()?.focus();\n }\n\n protected handlerChangeFlagMouse(event: IFlagMouse) {\n this.outChangStageFlagMouse.emit(event);\n }\n\n protected handlerChangStageFlagMouse(flag: IFlagMouse) {\n this.flagMouse.set(flag);\n }\n\n protected handlerClickTagItem(event: Event) {\n if (!this.showList()) {\n return;\n }\n event.stopPropagation();\n this.flagMouse.set({ isMouseEnter: true, isMouseEnterContent: true });\n }\n\n private async resetError() {\n this.error.set(undefined);\n }\n\n private updateLoadingDetail(event: boolean) {\n this.loadingDetail.set(event);\n this.outLoadingGetDetailSelected.emit(event);\n }\n\n private async updateItemSelectedDisable() {\n const getDisableItem = this.config()?.getDisableItem;\n if (!getDisableItem) {\n return;\n }\n this.itemsSelected.update((itemsSelected) => itemsSelected.map((item) => ({ ...item, disableItem: getDisableItem(item) })));\n }\n\n private async refreshListData() {\n this.listFunctionControl()?.refresh();\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n\n if (this.timeOutFlag()) clearTimeout(this.timeOutFlag());\n if (this.timeOutChangeSearch()) clearTimeout(this.timeOutChangeSearch());\n if (this.timeOutCheckViewChange()) clearTimeout(this.timeOutCheckViewChange());\n if (this.timeoutClickOutside()) clearTimeout(this.timeoutClickOutside());\n\n if (this.keySearchChangeSub()) this.keySearchChangeSub()?.unsubscribe();\n }\n}\n","<div class=\"flex flex-col w-full h-full\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required\"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable() || loading() || loadingDetail()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable() || loading() || loadingDetail()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleActive]=\"labelConfig.toggleDisable || disable() || loading() || loadingDetail()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n <libs_ui-components-popover\n class=\"w-full h-full\"\n [ignoreShowPopover]=\"disable() || readonly() || !!config()?.ignoreShowList || false\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [elementRefCustom]=\"tagsEl\"\n [mode]=\"!config()?.ignoreInput ? 'click' : 'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [flagMouse]=\"flagMouse()\"\n [config]=\"{\n animationConfig: config()?.animationConfig || {},\n zIndex: zIndex(),\n widthByParent: true,\n parentBorderWidth: parentBorderWidth() ?? 0,\n maxHeight: 2048,\n maxWidth: 2048,\n direction: config()?.directionList || 'bottom',\n directionDistance: 2,\n template: !showListBellow() ? listViewEl : undefined,\n whiteTheme: true,\n ignoreArrow: true,\n classInclude: 'rounded-[4px] ' + classIncludePopover() + (!listConfig()?.ignoreShowDataWhenNotSearch || keySearch() ? ' libs-ui-border-general' : ''),\n position: { mode: 'start', distance: 0 },\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outEventPopoverContent)=\"handlerPopoverContentEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n <div\n class=\"relative\"\n [class.cursor-pointer]=\"!disable() && !readonly()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\">\n @if (config()?.uiLikeDropdown) {\n <i\n class=\"flex text-[16px] absolute right-[16px] top-[8px] libs-ui-icon-move-right rotate-90 z-[1]\"\n [class.text-[#6a7383]]=\"!readonly() && !disable()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n <div\n #tagsEl\n [class]=\"'libs-ui-tags ' + (config()?.classInclude || '') + (readonly() ? config()?.classCustomWhenReadOnly || ' libs-ui-readonly' : '')\"\n [class.libs-ui-tags-not-popup]=\"(!showList() && !showBorderActiveWhenFocusInput()) || (!focus() && showBorderActiveWhenFocusInput())\"\n [class.libs-ui-tags-error]=\"!!error() && !config()?.ignoreShowError\"\n [class.!pr-[32px]]=\"config()?.uiLikeDropdown\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [class.libs-ui-border-primary-general]=\"focus() && showBorderActiveWhenFocusInput()\"\n LibsUiComponentsClickOutsideDirective\n LibsUiComponentsScrollOverlayDirective\n (outOutside)=\"handlerClickOutside($event)\">\n @for (item of itemsSelected(); track item[fieldKey()]) {\n <div\n LibsUiComponentsPopoverDirective\n [type]=\"item?.tooltip?.type || 'other'\"\n [config]=\"item?.tooltip?.config || { zIndex: zIndex() + 2 }\"\n [ignoreShowPopover]=\"!item?.tooltip || item.tooltip.ignoreShowPopover\"\n [ngStyle]=\"item?.bullet || item?.ngStyles\"\n [class]=\"classIncludeTagItem() || ''\"\n [class.libs-ui-tags-readonly]=\"item.disableItem\"\n [class.libs-ui-tags-item]=\"!item.disableItem\"\n [class.cursor-default]=\"disable() || readonly()\"\n (pointerdown)=\"handlerClickTagItem($event)\">\n @if (fieldGetImage() || config()?.fieldGetImage; as fieldGetImage) {\n <div class=\"flex items-center justify-center h-full\">\n <libs_ui-components-avatar\n [classInclude]=\"classAvatarInclude() || config()?.classAvatarInclude || 'mr-[8px]'\"\n [size]=\"imageSize() || config()?.imageSize\"\n [linkAvatar]=\"item[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError() || config()?.linkImageError\"\n [idGenColor]=\"item[fieldGetTextAvatar() || config()?.fieldGetTextAvatar || '']\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace() || config()?.getLastTextAfterSpace\"\n [textAvatar]=\"item[fieldGetTextAvatar() || config()?.fieldGetTextAvatar || 'user']\" />\n </div>\n }\n <span\n class=\"libs-ui-font-h6r\"\n [innerHtml]=\"item.fieldLabel || ' ' | translate\"></span>\n @if (!disable() && !item.disableItem && !readonly()) {\n <div class=\"flex items-center justify-center ml-[8px]\">\n <i\n #iconCloseEl\n [attr.specificStyle]=\"!!(item?.bullet || item?.ngStyles)\"\n [class]=\"'flex text-[16px] ' + (classIconRemoveTagItem() || 'libs-ui-icon-close')\"\n [class.cursor-pointer]=\"!disable() && !loading() && !loadingDetail()\"\n [class.pointer-events-none]=\"disable() || loading() || loadingDetail()\"\n [ngStyle]=\"item?.bullet || item?.ngStyles | LibsUiComponentsTagsGetColorPipe: iconCloseEl\"\n (pointerdown)=\"handlerRemoveItemSelected($event, item)\"></i>\n </div>\n }\n </div>\n }\n @if (!singleSelected() || (singleSelected() && !itemsSelected().length)) {\n @if (!config()?.ignoreInput && !config()?.uiLikeDropdown && (!hiddenInputWhenReadonly() || (hiddenInputWhenReadonly() && !readonly()))) {\n <libs_ui-components-inputs-input\n class=\"grow\"\n [class.mb-[4px]]=\"itemsSelected().length\"\n [classInclude]=\"'w-full bg-transparent ' + (config()?.classInputInclude || 'px-[4px] min-w-[30px]')\"\n [defaultHeight]=\"24\"\n [placeholder]=\"readonly() ? '' : placeholder() || 'i18n_import_content'\"\n [noBorder]=\"true\"\n [(value)]=\"valueInput\"\n [disable]=\"disable() || loading() || loadingDetail() || disableWhenMaxItem()\"\n [readonly]=\"readonly()\"\n (outEnterEvent)=\"handlerEnterEvent()\"\n (valueChange)=\"handlerValueChangeSearch($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurEvent($event)\"\n (outFunctionsControl)=\"handlerInputFunctionControl($event)\" />\n }\n @if (config()?.ignoreInput && config()?.uiLikeDropdown && !itemsSelected().length) {\n <div\n class=\"flex items-center pb-[4px] pt-[2px] ml-[11px] libs-ui-font-h5r\"\n [class.text-[#9ca2ad]]=\"disable()\">\n {{ placeholder() || 'i18n_select_value' | translate }}\n </div>\n }\n }\n </div>\n @if (error() && !config()?.ignoreShowError) {\n <div class=\"text-[#ee2d41] libs-ui-font-h7r mt-[8px]\">{{ error()?.message || ' ' | translate: error()?.interpolateParams || {} }}</div>\n }\n </div>\n </libs_ui-components-popover>\n</div>\n@if (showListBellow()) {\n <ng-container *ngTemplateOutlet=\"listViewEl\"></ng-container>\n}\n<ng-template #listViewEl>\n @if (listConfig(); as listConfig) {\n <libs_ui-components-list\n [searchConfig]=\"listSearchConfig() || { classInclude: 'hidden', iconLeftClass: 'hidden' }\"\n [isSearchOnline]=\"isSearchOnline()\"\n [zIndex]=\"zIndex()\"\n [keySearch]=\"keySearch()\"\n [config]=\"listConfig\"\n [disable]=\"disable() || loadingDetail() || disableWhenMaxItem()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"listMaxItemShow() || 6\"\n [multiKeySelected]=\"keysSelected()\"\n [clickExactly]=\"false\"\n [keysHiddenItem]=\"keysHiddenItem()\"\n [keysDisableItem]=\"listKeyDisable()\"\n [dividerClassInclude]=\"listDividerClassInclude() ?? 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundListCustom()\"\n [functionGetItemsAutoAddList]=\"functionGetItemAutoAddList()\"\n [hiddenInputSearch]=\"listHiddenInputSearchWhenHasSearchConfig()\"\n (outFunctionsControl)=\"handlerFunctionControlList($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoading($event)\" />\n }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;MAOa,gCAAgC,CAAA;IAC3C,SAAS,CAAC,KAAc,EAAE,OAAoB,EAAA;QAC5C,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE;QACX;QACA,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;AAC/B,QAAA,IAAI,eAAe,GAAG,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC;AAC/E,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE;AAChE,YAAA,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;YAC7C,KAAK,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACxC;AACA,QAAA,IAAI,eAAe,IAAI,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE;AAC/F,YAAA,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;YACxD,eAAe,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAClD;QACA,IAAI,KAAK,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC9C,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,kCAAkC,EAAE,KAAK,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,2CAA2C,EAAE,KAAK,CAAC;QAC/E;QACA,IAAI,eAAe,IAAI,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;YAClE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,EAAE,eAAe,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,iCAAiC,EAAE,eAAe,CAAC;AAC7E,YAAA,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,4CAA4C,EAAE,2BAA2B,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;QACxI;AACA,QAAA,OAAO,KAAK;IACd;wGAzBW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,kCAAA,EAAA,CAAA;;4FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAJ5C,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,kCAAkC;AACxC,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACND;MA2Ca,6BAA6B,CAAA;;AAE9B,IAAA,SAAS,GAAG,MAAM,CAAa,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;AACnF,IAAA,OAAO,GAAG,MAAM,CAAU,KAAK,CAAC;AAChC,IAAA,aAAa,GAAG,MAAM,CAAU,KAAK,CAAC;AACtC,IAAA,SAAS,GAAG,MAAM,CAAS,EAAE,CAAC;AAC9B,IAAA,UAAU,GAAG,MAAM,CAAS,EAAE,CAAC;AAC/B,IAAA,aAAa,GAAG,MAAM,CAAa,EAAE,CAAC;AACtC,IAAA,QAAQ,GAAG,MAAM,CAAU,KAAK,CAAC;AACjC,IAAA,YAAY,GAAG,MAAM,CAAqC,SAAS,CAAC;AACpE,IAAA,YAAY,GAAG,MAAM,CAAiB,EAAE,CAAC;AACzC,IAAA,kBAAkB,GAAG,MAAM,CAAU,KAAK,CAAC;AAC3C,IAAA,KAAK,GAAG,MAAM,CAAU,KAAK,CAAC;AAC9B,IAAA,KAAK,GAAG,MAAM,CAAgC,SAAS,CAAC;AACxD,IAAA,QAAQ,GAAG,MAAM,CAAS,IAAI,CAAC;AAC/B,IAAA,0BAA0B,GAAG,QAAQ,CAAC,MAAK;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE;YACjC;QACF;AACA,QAAA,OAAO,MACL,IAAI,CAAC,aAAa;AACf,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,CAAA,EAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA,CAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC;AAChF,aAAA,OAAO,EAAE;AAChB,IAAA,CAAC,CAAC;AACQ,IAAA,cAAc,GAAG,MAAM,CAAiB,EAAE,CAAC;AAE7C,IAAA,MAAM,GAAG,MAAM,CAAS,IAAI,EAAE,CAAC;AAC/B,IAAA,WAAW,GAAG,MAAM,CAAqB,SAAS,CAAC;AACnD,IAAA,mBAAmB,GAAG,MAAM,CAAqB,SAAS,CAAC;AAC3D,IAAA,sBAAsB,GAAG,MAAM,CAAqB,SAAS,CAAC;AAC9D,IAAA,mBAAmB,GAAG,MAAM,CAAqB,SAAS,CAAC;AAC3D,IAAA,YAAY,GAAG,MAAM,CAAqB,SAAS,CAAC;AACpD,IAAA,WAAW,GAAG,MAAM,CAAiB,EAAE,CAAC;AACxC,IAAA,eAAe,GAAG,IAAI,OAAO,EAAU;AACvC,IAAA,kBAAkB,GAAG,MAAM,CAA2B,SAAS,CAAC;AAChE,IAAA,cAAc,GAAG,MAAM,CAAU,KAAK,CAAC;AACvC,IAAA,sBAAsB,GAAG,MAAM,CAA2C,SAAS,CAAC;AACpF,IAAA,oBAAoB,GAAG,MAAM,CAAyC,SAAS,CAAC;AAChF,IAAA,WAAW,GAAG,MAAM,CAAiC,SAAS,CAAC;AAC/D,IAAA,mBAAmB,GAAG,MAAM,CAAwC,SAAS,CAAC;AAC9E,IAAA,2BAA2B,GAAG,MAAM,CAA6B,SAAS,CAAC;AAC3E,IAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;;IAG9B,mBAAmB,GAAG,KAAK,EAAU;AACrC,IAAA,qBAAqB,GAAG,KAAK,CAAU,KAAK,CAAC;IAC7C,uBAAuB,GAAG,KAAK,EAAW;IAC1C,iBAAiB,GAAG,KAAK,EAAiB;IAC1C,iBAAiB,GAAG,KAAK,EAAU;IACnC,gCAAgC,GAAG,KAAK,CAAgB,MAAM,IAAI,CAAC;IACnE,WAAW,GAAG,KAAK,EAAU;IAC7B,0BAA0B,GAAG,KAAK,EAAsB;AACxD,IAAA,UAAU,GAAG,KAAK,CAAS,OAAO,CAAC;IACnC,YAAY,GAAG,KAAK,EAAU;AAC9B,IAAA,MAAM,GAAG,KAAK,CAA6B,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,EAAE,CAAC;IACzF,MAAM,GAAG,KAAK,EAAe;IAC7B,OAAO,GAAG,KAAK,EAAW;IAC1B,QAAQ,GAAG,KAAK,EAAW;IAC3B,WAAW,GAAG,KAAK,EAAU;IAC7B,oBAAoB,GAAG,KAAK,EAAkB;IAC9C,mBAAmB,GAAG,KAAK,EAAkB;IAC7C,gBAAgB,GAAG,KAAK,EAAsB;AAC9C,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC;IACtC,iBAAiB,GAAG,KAAK,EAAW;IACpC,uBAAuB,GAAG,KAAK,EAAU;IACzC,UAAU,GAAG,KAAK,EAAmB;IACrC,gBAAgB,GAAG,KAAK,EAAkB;IAC1C,gBAAgB,GAAG,KAAK,EAAW;IACnC,wBAAwB,GAAG,KAAK,EAAU;IAC1C,eAAe,GAAG,KAAK,EAAU;IACjC,wCAAwC,GAAG,KAAK,EAAW;AAC3D,IAAA,6BAA6B,GAAG,KAAK,CAAU,IAAI,CAAC;IACpD,cAAc,GAAG,KAAK,EAAkB;IACxC,eAAe,GAAG,KAAK,EAAkB;IACzC,8BAA8B,GAAG,KAAK,EAAW;IACjD,cAAc,GAAG,KAAK,EAAW;IACjC,mBAAmB,GAAG,KAAK,EAAU;IACrC,sBAAsB,GAAG,KAAK,EAAU;IACxC,8BAA8B,GAAG,KAAK,EAAW;IACjD,aAAa,GAAG,KAAK,EAAU;AAC/B,IAAA,SAAS,GAAG,KAAK,CAA0B,EAAE,CAAC;IAC9C,cAAc,GAAG,KAAK,EAAU;AAChC,IAAA,kBAAkB,GAAG,KAAK,CAAS,MAAM,CAAC;IAC1C,kBAAkB,GAAG,KAAK,EAAU;IACpC,qBAAqB,GAAG,KAAK,EAAW;IACxC,aAAa,GAAG,KAAK,EAAqB;IAC1C,oBAAoB,GAAG,KAAK,EAAyB;IACrD,YAAY,GAAG,KAAK,EAAwB;IAC5C,cAAc,GAAG,KAAK,EAAW;IACjC,uBAAuB,GAAG,KAAK,EAAW;;IAG1C,kBAAkB,GAAG,MAAM,EAAkB;IAC7C,aAAa,GAAG,MAAM,EAAW;IACjC,mBAAmB,GAAG,MAAM,EAA6B;IACzD,mBAAmB,GAAG,MAAM,EAAW;IACvC,gBAAgB,GAAG,MAAM,EAAW;IACpC,sBAAsB,GAAG,MAAM,EAAc;IAC7C,2BAA2B,GAAG,MAAM,EAAW;;AAGvC,IAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAa,QAAQ,CAAC;;AAG1D,IAAA,kBAAkB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAE7D,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;YACxC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;gBAClC,IAAI,YAAY,IAAI,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE;AAC/D,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;gBACnC;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,SAAS,CAAC,MAAK;gBACb,IAAI,UAAU,EAAE;AACd,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBACxD;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;YACV,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,EAAE,IAAI,EAAE;YACtD,SAAS,CAAC,MAAK;gBACb,MAAM,aAAa,GAAG,IAAI,CAAC,2BAA2B,EAAE,IAAI,EAAE;gBAC9D,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACjE,IAAI,aAAa,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE;AAChD,oBAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;oBACtC;gBACF;AACA,gBAAA,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE;AACpC,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;AAC/F,wBAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;wBACtC;oBACF;gBACF;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;YACV,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE;YACrD,SAAS,CAAC,MAAK;gBACb,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE;gBAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE;AAChD,oBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;oBACjC;gBACF;AACA,gBAAA,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1H,gBAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,oBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;gBAC9B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;YACV,IAAI,cAAc,GAAmB,EAAE;AACvC,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;YAE1C,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,eAAe,EAAE,MAAM,EAAE;AAC3B,oBAAA,cAAc,GAAG,CAAC,GAAG,eAAe,CAAC;gBACvC;AACA,gBAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBAC7B,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;wBACpF,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC5C;AACF,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC;AACzC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB;QACF;AACA,QAAA,MAAM,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,EAAE;AACpE,QAAA,IAAI,0BAA0B,KAAK,CAAC,0BAA0B,CAAC,6BAA6B,IAAI,CAAC,0BAA0B,CAAC,6BAA6B,EAAE,UAAU,CAAC,EAAE;AACtK,YAAA,MAAM,gGAAgG;QACxG;AACA,QAAA,MAAM,YAAY,GAAG,CAAC,IAAoB,KAAI;AAC5C,YAAA,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACrD,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACvB,QAAA,CAAC;AACD,QAAA,IAAI,0BAA0B,EAAE,6BAA6B,EAAE,UAAU,EAAE;AACzE,YAAA,0BAA0B,CAAC,6BAA6B,CAAC,UAAU,CAAC,aAAa,GAAG,0BAA0B,CAAC,6BAA6B,CAAC,UAAU,CAAC,aAAa,IAAI,MAAM;AAC/K,YAAA,0BAA0B,CAAC,6BAA6B,CAAC,UAAU,CAAC,YAAY,GAAG,0BAA0B,CAAC,6BAA6B,CAAC,UAAU,CAAC,YAAY,IAAI,YAAY;QACrL;QACA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACtD;AAEA,IAAA,IAAW,gBAAgB,GAAA;QACzB,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YACxC,UAAU,EAAE,YAAY,IAAI,CAAC,sBAAsB,EAAE,EAAE,oBAAoB,EAAE;YAC7E,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACxC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YACpD,cAAc,EAAE,MAAM,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC;AACvD,YAAA,UAAU,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;YACnC,SAAS,EAAE,YAAY,IAAI,CAAC,MAAM,EAAE;YACpC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5C,kBAAkB,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7D,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC,0BAA0B,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;YACtE,yBAAyB,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;YACpE,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YAChD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;SACnC;IACH;IAEQ,MAAM,QAAQ,CAAC,OAAe,EAAA;QACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC;IAC7B;AAEU,IAAA,kCAAkC,CAAC,KAAmC,EAAA;AAC9E,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC;IACxC;AAEQ,IAAA,MAAM,WAAW,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE;YACzD;QACF;QACA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AAClC,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACpD,YAAA,OAAO,CAAC,GAAG,KAAK,CAAC;AACnB,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,gBAAgB,CAAC,IAAa,EAAA;QACpC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ;QACxC,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,CAAA,EAAG,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAA,CAAE,CAAC;QACzF,IAAI,QAAQ,EAAE;AACZ,YAAA,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QAC/C;IACF;AAEQ,IAAA,MAAM,iBAAiB,CAAC,WAAW,GAAG,KAAK,EAAA;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE;YACzD;QACF;QACA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC3C,YAAA,IAAI,KAAK,KAAK,MAAM,EAAE;AACpB,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;YAChC;YACA,IAAI,CAAC,yBAAyB,CAC5B;gBACE,eAAe,EAAE,MAAK;oBACpB;gBACF,CAAC;AACO,aAAA,EACV,IAAI,EACJ,WAAW,CACZ;AACH,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,mBAAmB,CAAC,aAA6B,EAAE,cAAc,GAAG,IAAI,EAAE,2CAAqD,EAAA;QACrI,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC3C;QACF;QACA,MAAM,aAAa,GAAmB,EAAE;AACxC,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,IAAI,CAAC,IAAI,EAAE;gBACT;YACF;AACA,YAAA,IAAI,UAAU,GAAG,CAAA,EAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE;YACpG,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ;YACxC,IAAI,QAAQ,EAAE;AACZ,gBAAA,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG;YACpC;AACA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACzE,YAAA,IAAI,SAAS,EAAE,cAAc,EAAE;gBAC7B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;gBACnC;YACF;AACA,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,2CAA2C,CAAC;IAC9F;AAEU,IAAA,mBAAmB,CAAC,IAAwB,EAAA;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;YACpB;QACF;AACA,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE;YACnC;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE;IACtC;AAEU,IAAA,0BAA0B,CAAC,QAAgC,EAAA;AACnE,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,EAAE;YACpC;QACF;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjC;AAEU,IAAA,MAAM,yBAAyB,CAAC,KAAY,EAAE,UAAmB,EAAE,WAAqB,EAAA;QAChG,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACpH,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAC9B,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YACpB,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE;YACxD,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE;AAEhD,YAAA,OAAO,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,WAAW,KAAK,SAAS,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,SAAS,KAAK,OAAO,CAAC;QAC/I,CAAC,CAAC,CACH;AACD,QAAA,IAAI,UAAU,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC9H,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClH;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACnH,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;QACxC,IAAI,YAAY,IAAI,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE;AAC/D,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;QACnC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC;YACvC;QACF;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/B;QACA,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,CAAC,UAAU,EAAE;QACnB;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC;AAEU,IAAA,2BAA2B,CAAC,KAAiC,EAAA;AACrE,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;IACtC;AAEU,IAAA,wBAAwB,CAAC,KAAyB,EAAA;AAC1D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB;AACA,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE;YAC1J,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;AAEU,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACxC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAC1B,UAAU,CAAC,MAAK;YACd,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE;gBAC5D;YACF;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,oBAAoB,EAAE,EAAE,UAAU,EAAE;AAC3C,QAAA,CAAC,EAAE,GAAG,CAAC,CACR;IACH;AAEU,IAAA,MAAM,iBAAiB,GAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,UAAU,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE,EAAE;YACxD;QACF;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,EAAE;AAC3C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,cAAc,EAAE;gBAC1C;YACF;YACA,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC;YACjC;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,EAAE;YAC9C;QACF;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE;QACnC,MAAM,UAAU,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE;AAChD,QAAA,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE;AACnD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAA,EAAG,IAAI,EAAE,CAAA,CAAE,CAAC;QACzE;QACA,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE;AAChC,gBAAA,MAAM,cAAc,GAAG,EAAE,GAAG,OAAO,EAAE;gBACrC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU;gBAC5C,IAAI,UAAU,EAAE;oBACd,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBACxD;AACA,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9D,gBAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;oBAChC,IAAI,CAAC,mBAAmB,EAAE,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,4BAA4B,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrL;AACA,gBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;AAC3B,gBAAA,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC;YACnC;YACA;QACF;AACA,QAAA,IAAI,SAAS,CAAC,cAAc,EAAE;YAC5B;QACF;QACA,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC;IACnC;IAEU,MAAM,wBAAwB,CAAC,KAAsB,EAAA;QAC7D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA,EAAG,KAAK,CAAA,CAAE,CAAC;QAC/B,IAAI,CAAC,CAAA,EAAG,KAAK,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,kBAAkB,EAAE,EAAE,WAAW,EAAE;AACxC,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;YACtC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,EAAE;gBAC5C,IAAI,CAAC,UAAU,EAAE;YACnB;YACA;QACF;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE;YAC9B;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;YAC9B,IAAI,CAAC,iBAAiB,EAAE;QAC1B;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA,EAAG,KAAK,IAAI,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE,CAAC;IACpD;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;YAC7B;QACF;QACA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzK;AAEQ,IAAA,WAAW,CAAC,KAAqB,EAAE,cAAc,GAAG,KAAK,EAAE,2CAAqD,EAAA;QACtH,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC3B,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE;YAC5C,IAAI,CAAC,2CAA2C,EAAE;AAChD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;YAC7C;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7G,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC;YAC3C;QACF;QACA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YACtC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI;AACpC,YAAA,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC;AACrB,YAAA,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;AACrB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC3B,YAAA,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,oBAAoB,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;YAC3F,IAAI,cAAc,EAAE;gBAClB,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;YAChD;YACA,IAAI,SAAS,EAAE;gBACb,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACxC;YACA,IAAI,oBAAoB,EAAE;AACxB,gBAAA,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC;AACvC,gBAAA,IAAI,IAAI,KAAK,uBAAuB,EAAE;AACpC,oBAAA,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;gBACzE;YACF;YACA,IAAI,UAAU,EAAE;gBACd,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YACxC;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,EAAE,GAAG,YAAY,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC;IAC7C;AAEU,IAAA,iBAAiB,CAAC,KAAqB,EAAA;AAC/C,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,sBAAsB,EAAE,EAAE,4BAA4B,EAAE;QAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE;AAC/B,YAAA,IAAI,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE;QACtC;IACF;AAEU,IAAA,cAAc,CAAC,KAAc,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;AAEQ,IAAA,eAAe,CAAC,kBAA2B,EAAE,cAAc,GAAG,KAAK,EAAA;AACzE,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;QACxC,IAAI,YAAY,IAAI,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE;AAC/D,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;QACnC;QACA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAC7B,UAAU,CAAC,MAAK;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,YAAY;YAC9D,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,EAAE;AACjG,gBAAA,IAAI,CAAC,sBAAsB,EAAE,EAAE,4BAA4B,EAAE;YAC/D;AACA,YAAA,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE;gBACvE,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,YAAY;YACtD;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;AACrC,QAAA,CAAC,EAAE,GAAG,CAAC,CACR;QACD,IAAI,CAAC,cAAc,EAAE;YACnB,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;IAEQ,UAAU,CAAC,KAAc,EAAE,EAAW,EAAA;AAC5C,QAAA,IAAI,SAAS;QACb,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA,EAAG,EAAE,CAAA,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACrE,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAA,EAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA,CAAE,CAAC,IAAI,EAAE,KAAK,CAAA,EAAG,EAAE,CAAA,CAAE,CAAC;YACzI,IAAI,SAAS,EAAE;gBACb,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC,SAAS,EAAE;YACzD;YACA;QACF;QACA,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE;QAC7C;AACA,QAAA,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CACnC,CAAC,IAAI,KACH,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,IAAI,EAAE;aACnF,IAAI,CAAC,uBAAuB,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aACzF,IAAI,CAAC,iBAAiB,EAAE;AACvB,gBAAA,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,KAAK,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAC9O;QACD,IAAI,SAAS,EAAE;YACb,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE;QAClD;AACA,QAAA,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CACjC,CAAC,IAAI,KACH,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,IAAI,EAAE;aACnF,IAAI,CAAC,uBAAuB,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aACzF,IAAI,CAAC,iBAAiB,EAAE;AACvB,gBAAA,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,KAAK,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAC9O;QACD,IAAI,SAAS,EAAE;YACb,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE;QACnD;QACA;IACF;AAEU,IAAA,kBAAkB,CAAC,KAAmC,EAAA;QAC9D,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACzB;QACF;QACA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,sBAAsB,EAAE,EAAE,oBAAoB,EAAE;QACvD;QACA,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAC7B,IAAI,CAAC,yBAAyB,CAC5B;gBACE,eAAe,EAAE,MAAK;oBACpB;gBACF,CAAC;AACO,aAAA,EACV,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EACvB,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CACpC;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC;QACA,IAAI,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE;AAEQ,IAAA,uBAAuB,CAAC,IAAoB,EAAA;AAClD,QAAA,IAAI,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE;AACzF,YAAA,OAAO,KAAK;QACd;AACA,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE;AAC5E,gBAAA,OAAO,KAAK;YACd;QACF;AACA,QAAA,OAAO,IAAI;IACb;IAEU,MAAM,qBAAqB,CAAC,KAAwC,EAAA;QAC5E,IAAI,CAAC,KAAK,EAAE;YACV;QACF;QACA,MAAM,IAAI,GAAG,EAAE;QACf,MAAM,KAAK,GAAmB,EAAE;QAChC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAChF,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QAC1B;AACA,QAAA,MAAM,2CAA2C,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC7G,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC/B,YAAA,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBACrB;YACF;AACA,YAAA,IAAI,MAAM,CAAC,IAAI,EAAE;gBACf,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC;YACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE;gBACxC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAC9B;AACA,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC;YAC3F,IAAI,IAAI,EAAE;AACR,gBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB;YACA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,UAAU,GAAmB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;AACxE,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;QAC3B;QACA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,IAAI,yBAAyB;QAC/E,IAAI,cAAc,GAAG,IAAI;QACzB,IAAI,YAAY,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE;YAC1C,cAAc,GAAG,KAAK;QACxB;QACA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC9L,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3O,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAA,EAAG,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA,CAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAChJ,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC7F;QACF;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACpH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC;YAC3C;QACF;QACA,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,2CAA2C,CAAC;QAC5F,IAAI,CAAC,UAAU,EAAE;IACnB;AAEQ,IAAA,MAAM,cAAc,CAAC,IAAoB,EAAE,cAAwB,EAAA;AACzE,QAAA,MAAM,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,EAAE;QACpE,IAAI,CAAC,0BAA0B,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACnG,YAAA,OAAO,EAAE;QACX;AACA,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC9B,QAAA,MAAM,qBAAqB,GAAG,SAAS,CAAC,0BAA0B,CAAC;AACnE,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,cAAc,EAAE,6BAA6B,EAAE,GAAG,qBAAqB;YAC/E,IAAI,CAAC,6BAA6B,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAE;AAC/E,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,6BAA6B,CAAC,UAAU,CAAC,aAAa,GAAG,MAAM;YAC/D,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,CAAC;AAC5H,YAAA,MAAM,MAAM,IAAI,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAkC;YAC9G,IAAI,CAAC,cAAc,EAAE;gBACnB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AAC3C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC/B,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC/B,YAAA,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE;QAC1B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAClB,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;QACjC;AACA,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,MAAM,UAAU,GAAA;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK;QAChF,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QACzB,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,IAAI,yBAAyB,EAAE,CAAC;QAClH;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;YACjB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,IAAI,CAAC,yBAAyB,EAAE;QAClC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACxC;QACA,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;AACjC,YAAA,IAAI,CAAC,sBAAsB,EAAE,EAAE,4BAA4B,EAAE;QAC/D;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE;IACtB;IAEQ,yBAAyB,GAAA;AAC/B,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACxD,QAAA,IAAI,oBAAoB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,oBAAoB,CAAC,KAAK,EAAE;AACpF,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,oBAAoB,EAAE,OAAO,EAAE,oBAAoB,CAAC,OAAO,IAAI,uBAAuB,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC;AACvK,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,YAAY,CAAC,KAAqB,EAAA;AACxC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACpE,YAAA,OAAO,IAAI;QACb;AACA,QAAA,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;AAChC,YAAA,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;AAC5F,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,0BAA0B,EAAE,CAAC;AAClF,gBAAA,OAAO,KAAK;YACd;QACF;AACA,QAAA,OAAO,IAAI;IACb;AAEU,IAAA,uBAAuB,CAAC,KAAc,EAAA;AAC9C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;IACtC;IAEQ,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACvC,YAAA,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAA,EAAG,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA,CAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE;gBAC3G,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;YACnC;AACA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC;IACJ;IAEU,MAAM,0BAA0B,CAAC,YAA6B,EAAA;QACtE,IAAI,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;YACtC;QACF;AACA,QAAA,YAAY,GAAG,IAAI,KAAK,EAAW;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB;QACF;AACA,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE;QACtD,IAAI,mBAAmB,IAAI,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;AAC7D,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC;YACxC;QACF;AACA,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE;QACxD,IAAI,oBAAoB,IAAI,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE;AAC/D,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC;YAC9C;QACF;IACF;AAEU,IAAA,0BAA0B,CAAC,KAAgC,EAAA;AACnE,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;IACrC;AAEU,IAAA,MAAM,UAAU,GAAA;AACxB,QAAA,IAAI,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE;IACtC;AAEU,IAAA,sBAAsB,CAAC,KAAiB,EAAA;AAChD,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;IACzC;AAEU,IAAA,0BAA0B,CAAC,IAAgB,EAAA;AACnD,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1B;AAEU,IAAA,mBAAmB,CAAC,KAAY,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB;QACF;QACA,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;IACvE;AAEQ,IAAA,MAAM,UAAU,GAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAC3B;AAEQ,IAAA,mBAAmB,CAAC,KAAc,EAAA;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9C;AAEQ,IAAA,MAAM,yBAAyB,GAAA;QACrC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc;QACpD,IAAI,CAAC,cAAc,EAAE;YACnB;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7H;AAEQ,IAAA,MAAM,eAAe,GAAA;AAC3B,QAAA,IAAI,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE;IACvC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;QAEzB,IAAI,IAAI,CAAC,WAAW,EAAE;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACxD,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACxE,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9E,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAExE,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAAE,YAAA,IAAI,CAAC,kBAAkB,EAAE,EAAE,WAAW,EAAE;IACzE;wGA1yBW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gCAAA,EAAA,EAAA,iBAAA,EAAA,kCAAA,EAAA,UAAA,EAAA,kCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,0BAAA,EAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,wBAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,wCAAA,EAAA,EAAA,iBAAA,EAAA,0CAAA,EAAA,UAAA,EAAA,0CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,6BAAA,EAAA,EAAA,iBAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,8BAAA,EAAA,EAAA,iBAAA,EAAA,gCAAA,EAAA,UAAA,EAAA,gCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,8BAAA,EAAA,EAAA,iBAAA,EAAA,gCAAA,EAAA,UAAA,EAAA,gCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3C1C,y6TA0LA,EAAA,MAAA,EAAA,CAAA,ogFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5JI,eAAe,4FACf,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,qCAAqC,EAAA,QAAA,EAAA,yCAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrC,8BAA8B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,SAAA,EAAA,UAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,2BAAA,EAAA,kCAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,gCAAgC,EAAA,QAAA,EAAA,+DAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,6BAAA,EAAA,cAAA,EAAA,0CAAA,EAAA,4BAAA,EAAA,kCAAA,EAAA,8BAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChC,oCAAoC,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,mBAAA,EAAA,gCAAA,EAAA,0BAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,qBAAA,EAAA,2CAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,4BAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,8BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpC,+BAA+B,6XAC/B,6BAA6B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,2CAAA,EAAA,6BAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,kCAAA,EAAA,iDAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,+BAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAC7B,gCAAgC,EAAA,IAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChC,sCAAsC,EAAA,QAAA,EAAA,0CAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAG7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBArBzC,SAAS;AAEE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,cAGvB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,eAAe;wBACf,gBAAgB;wBAChB,OAAO;wBACP,qCAAqC;wBACrC,8BAA8B;wBAC9B,gCAAgC;wBAChC,oCAAoC;wBACpC,+BAA+B;wBAC/B,6BAA6B;wBAC7B,gCAAgC;wBAChC,sCAAsC;AACvC,qBAAA,EAAA,QAAA,EAAA,y6TAAA,EAAA,MAAA,EAAA,CAAA,ogFAAA,CAAA,EAAA;;;AEzCH;;AAEG;;;;"}
1
+ {"version":3,"file":"libs-ui-components-tags.mjs","sources":["../../../../../libs-ui/components/tags/src/pipes/get-color.pipe.ts","../../../../../libs-ui/components/tags/src/tags.component.ts","../../../../../libs-ui/components/tags/src/tags.component.html","../../../../../libs-ui/components/tags/src/libs-ui-components-tags.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { colorStepContrastFromOrigin, get, rgbToHex } from '@libs-ui/utils';\n\n@Pipe({\n name: 'LibsUiComponentsTagsGetColorPipe',\n standalone: true,\n})\nexport class LibsUiComponentsTagsGetColorPipe implements PipeTransform {\n transform(style: unknown, element: HTMLElement) {\n if (!style) {\n return {};\n }\n let color = get<unknown>(style, 'color') as string;\n let backgroundColor = (get<unknown>(style, 'backgroundColor') || get<unknown>(style, 'background')) as string;\n if (color && color.includes('rgb') && color.match(/d+/g)?.length) {\n const [red, green, blue] = Array.from(color.match(/d+/g) || []);\n color = rgbToHex({ red, green, blue });\n }\n if (backgroundColor && backgroundColor.includes('rgb') && backgroundColor.match(/\\d+/g)?.length) {\n const [red, green, blue] = Array.from(backgroundColor.match(/\\d+/g) || []);\n backgroundColor = rgbToHex({ red, green, blue });\n }\n if (color && /(^#)[a-z0-9]{3,6}/gi.test(color)) {\n element.style.setProperty('--libs-ui-tags-item-icon-default', color);\n element.style.setProperty('--libs-ui-tags-item-icon-background-hover', color);\n }\n if (backgroundColor && /(^#)[a-z0-9]{3,6}/gi.test(backgroundColor)) {\n element.style.setProperty('--libs-ui-tags-item-icon-hover', backgroundColor);\n element.style.setProperty('--libs-ui-tags-item-icon-active', backgroundColor);\n element.style.setProperty('--libs-ui-tags-item-icon-background-active', colorStepContrastFromOrigin(backgroundColor, 60)?.light || '');\n }\n return style;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, model, OnDestroy, OnInit, output, signal, untracked, viewChild } from '@angular/core';\nimport { LibsUiComponentsAvatarComponent, TYPE_SIZE_AVATAR_CONFIG } from '@libs-ui/components-avatar';\nimport { IButton } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsClickOutsideDirective } from '@libs-ui/components-click-outside';\nimport { IValidMaxItemSelected } from '@libs-ui/components-dropdown';\nimport { IFocusAndBlurEvent, IInputFunctionControlEvent, LibsUiComponentsInputsInputComponent } from '@libs-ui/components-inputs-input';\nimport { IInputSearchConfig } from '@libs-ui/components-inputs-search';\nimport { IValidPattern } from '@libs-ui/components-inputs-valid';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { getFieldKeyByType, IListConfigItem, IListDataEmitKey, IListDataEmitMultiKey, IListFunctionControlEvent, LibsUiComponentsListComponent } from '@libs-ui/components-list';\nimport { IFlagMouse, IPopoverFunctionControlEvent, LibsUiComponentsPopoverComponent, TYPE_POPOVER_DIRECTION, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';\nimport { IHttpResponse, IMessageTranslate } from '@libs-ui/interfaces-types';\nimport { IHttpRequestConfig, LibsUiHttpRequestService } from '@libs-ui/services-http-request';\nimport { cloneDeep, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_PATTEN_VALID, escapeHtml, get, isNil, set, uuid } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { debounceTime, Subject, Subscription, takeUntil } from 'rxjs';\nimport { ITagsConfig, ITagsFunctionControlEvent } from './interfaces/tags.interface';\nimport { LibsUiComponentsTagsGetColorPipe } from './pipes/get-color.pipe';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-tags',\n templateUrl: './tags.component.html',\n styleUrl: './tags.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TranslateModule,\n NgTemplateOutlet,\n NgStyle,\n LibsUiComponentsClickOutsideDirective,\n LibsUiComponentsLabelComponent,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsInputsInputComponent,\n LibsUiComponentsAvatarComponent,\n LibsUiComponentsListComponent,\n LibsUiComponentsTagsGetColorPipe,\n LibsUiComponentsScrollOverlayDirective,\n ],\n})\nexport class LibsUiComponentsTagsComponent implements OnInit, OnDestroy {\n // #region PROPERTY\n protected flagMouse = signal<IFlagMouse>({ isMouseEnter: false, isMouseEnterContent: false });\n protected loading = signal<boolean>(false);\n protected loadingDetail = signal<boolean>(false);\n protected keySearch = signal<string>('');\n protected valueInput = signal<string>('');\n protected itemsSelected = signal<Array<any>>([]);\n protected showList = signal<boolean>(false);\n protected positionList = signal<TYPE_POPOVER_DIRECTION | undefined>(undefined);\n protected keysSelected = signal<Array<unknown>>([]);\n protected disableWhenMaxItem = signal<boolean>(false);\n protected focus = signal<boolean>(false);\n protected error = signal<IMessageTranslate | undefined>(undefined);\n protected fieldKey = signal<string>('id');\n protected functionGetItemAutoAddList = computed(() => {\n if (!this.enterAutoAddTagToList()) {\n return;\n }\n return () =>\n this.itemsSelected()\n .filter((item) => `${get(item, this.fieldKey(), '')}`.search(this.fakeId()) === 0)\n .reverse();\n });\n protected listKeyDisable = signal<Array<unknown>>([]);\n\n private fakeId = signal<string>(uuid());\n private timeOutFlag = signal<number | undefined>(undefined);\n private timeOutChangeSearch = signal<number | undefined>(undefined);\n private timeOutCheckViewChange = signal<number | undefined>(undefined);\n private timeoutClickOutside = signal<number | undefined>(undefined);\n private clientHeight = signal<number | undefined>(undefined);\n private itemsOfList = signal<Array<unknown>>([]);\n private keySearchChange = new Subject<string>();\n private keySearchChangeSub = signal<Subscription | undefined>(undefined);\n private tempIgnoreEmit = signal<boolean>(false);\n private popoverFunctionControl = signal<IPopoverFunctionControlEvent | undefined>(undefined);\n private inputFunctionControl = signal<IInputFunctionControlEvent | undefined>(undefined);\n private typePopover = signal<TYPE_POPOVER_EVENT | undefined>(undefined);\n private listFunctionControl = signal<IListFunctionControlEvent | undefined>(undefined);\n private defaultItemsSelectedCurrent = signal<Array<unknown> | undefined>(undefined);\n private onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly classIncludePopover = input<string>();\n readonly enterAutoAddTagToList = input<boolean>(false);\n readonly checkExitIsLabelInclude = input<boolean>();\n readonly checkExitByFields = input<Array<string>>();\n readonly parentBorderWidth = input<number>();\n readonly functionCheckPermissionCreateTag = input<() => boolean>(() => true);\n readonly placeholder = input<string>();\n readonly httpRequestDetailItemByIds = input<IHttpRequestConfig>();\n readonly fieldLabel = input<string>('label');\n readonly maxItemInput = input<number>();\n readonly zIndex = input<number, number | undefined>(1000, { transform: (value) => value ?? 1000 });\n readonly config = input<ITagsConfig>();\n readonly disable = input<boolean>();\n readonly readonly = input<boolean>();\n readonly labelConfig = input<ILabel>();\n readonly defaultItemsSelected = input<Array<unknown>>();\n readonly defaultKeysSelected = input<Array<unknown>>();\n readonly listSearchConfig = input<IInputSearchConfig>();\n readonly isSearchOnline = input<boolean>(false);\n readonly listSearchPadding = input<boolean>();\n readonly listDividerClassInclude = input<string>();\n readonly listConfig = input<IListConfigItem>();\n readonly listButtonsOther = input<Array<IButton>>();\n readonly listClickExactly = input<boolean>();\n readonly listBackgroundListCustom = input<string>();\n readonly listMaxItemShow = input<number>();\n readonly listHiddenInputSearchWhenHasSearchConfig = input<boolean>();\n readonly removeTextSearchWhenBlurInput = input<boolean>(true);\n readonly keysHiddenItem = model<Array<unknown>>();\n readonly keysDisableItem = input<Array<unknown>>();\n readonly ignoreEmitWhenSameDataSelected = input<boolean>();\n readonly singleSelected = input<boolean>();\n readonly classIncludeTagItem = input<string>();\n readonly classIconRemoveTagItem = input<string>();\n readonly showBorderActiveWhenFocusInput = input<boolean>();\n readonly fieldGetImage = input<string>();\n readonly imageSize = input<TYPE_SIZE_AVATAR_CONFIG>(16);\n readonly linkImageError = input<string>();\n readonly fieldGetTextAvatar = input<string>('user');\n readonly classAvatarInclude = input<string>();\n readonly getLastTextAfterSpace = input<boolean>();\n readonly validRequired = input<IMessageTranslate>();\n readonly validMaxItemSelected = input<IValidMaxItemSelected>();\n readonly validPattern = input<Array<IValidPattern>>();\n readonly showListBellow = input<boolean>();\n readonly hiddenInputWhenReadonly = input<boolean>();\n\n // #region OUTPUT\n readonly outSelectMultiItem = output<Array<unknown>>();\n readonly outValidEvent = output<boolean>();\n readonly outFunctionsControl = output<ITagsFunctionControlEvent>();\n readonly outClickButtonOther = output<IButton>();\n readonly outShowListEvent = output<boolean>();\n readonly outChangStageFlagMouse = output<IFlagMouse>();\n readonly outLoadingGetDetailSelected = output<boolean>();\n\n /* VIEW CHILD */\n private readonly tagsEl = viewChild.required<ElementRef>('tagsEl');\n\n /* INJECT*/\n private httpRequestService = inject(LibsUiHttpRequestService);\n\n constructor() {\n effect(() => {\n const maxItemInput = this.maxItemInput();\n untracked(() => {\n this.disableWhenMaxItem.set(false);\n if (maxItemInput && maxItemInput <= this.itemsSelected().length) {\n this.disableWhenMaxItem.set(true);\n }\n });\n });\n effect(() => {\n const listConfig = this.listConfig();\n untracked(() => {\n if (listConfig) {\n this.fieldKey.set(getFieldKeyByType(listConfig, 'id'));\n }\n });\n });\n effect(() => {\n const currentItems = this.defaultItemsSelected() || [];\n untracked(() => {\n const previousItems = this.defaultItemsSelectedCurrent() || [];\n this.defaultItemsSelectedCurrent.set(this.defaultItemsSelected());\n if (previousItems.length !== currentItems.length) {\n this.updateItemsSelected(currentItems);\n return;\n }\n for (const prevItem of previousItems) {\n if (!currentItems.some((item) => get(item, this.fieldKey()) === get(prevItem, this.fieldKey()))) {\n this.updateItemsSelected(currentItems);\n break;\n }\n }\n });\n });\n effect(() => {\n const currentValue = this.defaultKeysSelected() || [];\n untracked(() => {\n const previousValue = this.keysSelected() || [];\n if (previousValue.length !== currentValue.length) {\n this.getDetailByIds(currentValue);\n return;\n }\n const keysNew = currentValue.filter((key) => !this.itemsSelected().some((item) => get(item, this.fieldKey(), '') === key));\n if (keysNew.length) {\n this.getDetailByIds(keysNew);\n }\n });\n });\n effect(() => {\n let listKeyDisable: Array<unknown> = [];\n const keysDisableItem = this.keysDisableItem();\n const itemsSelected = this.itemsSelected();\n\n untracked(() => {\n if (keysDisableItem?.length) {\n listKeyDisable = [...keysDisableItem];\n }\n itemsSelected.forEach((item) => {\n if (item.disableItem && !listKeyDisable.find((key) => key === item[this.fieldKey()])) {\n listKeyDisable.push(item[this.fieldKey()]);\n }\n });\n this.listKeyDisable.set(listKeyDisable);\n });\n });\n }\n\n ngOnInit() {\n if (!this.config()) {\n return;\n }\n const httpRequestDetailItemByIds = this.httpRequestDetailItemByIds();\n if (httpRequestDetailItemByIds && (!httpRequestDetailItemByIds.guideAutoUpdateArgumentsValue || !httpRequestDetailItemByIds.guideAutoUpdateArgumentsValue?.detailById)) {\n throw 'Config getDetailByIds yêu cầu tối thiểu các tham số guideAutoUpdateArgumentsValue, detailById';\n }\n const preprocessor = (keys: Array<unknown>) => {\n if (!keys || !(keys instanceof Array) || !keys.length) {\n return '';\n }\n return keys.join(';');\n };\n if (httpRequestDetailItemByIds?.guideAutoUpdateArgumentsValue?.detailById) {\n httpRequestDetailItemByIds.guideAutoUpdateArgumentsValue.detailById.fieldGetValue = httpRequestDetailItemByIds.guideAutoUpdateArgumentsValue.detailById.fieldGetValue ?? 'keys';\n httpRequestDetailItemByIds.guideAutoUpdateArgumentsValue.detailById.preprocessor = httpRequestDetailItemByIds.guideAutoUpdateArgumentsValue.detailById.preprocessor ?? preprocessor;\n }\n this.outFunctionsControl.emit(this.FunctionsControl);\n }\n\n public get FunctionsControl(): ITagsFunctionControlEvent {\n return {\n checkIsValid: this.checkValid.bind(this),\n removeList: async () => this.popoverFunctionControl()?.removePopoverOverlay(),\n updateLabel: this.updateLabel.bind(this),\n clearItemSelected: this.clearItemSelected.bind(this),\n clearKeySearch: () => this.handlerValueChangeSearch(''),\n focusInput: () => this.focusInput(),\n getFakeId: async () => this.fakeId(),\n createTag: this.handlerEnterEvent.bind(this),\n removeItemSelected: this.handlerRemoveItemSelected.bind(this),\n resetError: this.resetError.bind(this),\n resetToDefaultDataSelected: this.resetToDefaultDataSelected.bind(this),\n updateItemSelectedDisable: this.updateItemSelectedDisable.bind(this),\n refreshListData: this.refreshListData.bind(this),\n setError: this.setError.bind(this),\n };\n }\n\n private async setError(message: string) {\n this.error.set({ message });\n }\n\n protected handlerPopoverFunctionControlEvent(event: IPopoverFunctionControlEvent) {\n this.popoverFunctionControl.set(event);\n }\n\n private async updateLabel() {\n if (!this.itemsSelected() || !this.itemsSelected().length) {\n return;\n }\n this.itemsSelected.update((items) => {\n items.forEach((item) => this.updateFieldLabel(item));\n return [...items];\n });\n }\n\n private updateFieldLabel(item: unknown) {\n const ref = get(item, 'ref') || item;\n const getValue = this.config()?.getValue;\n set<any>(item, 'fieldLabel', `${get(ref, this.fieldLabel()) || get(ref, 'label') || get(ref, 'name') || ' '}`);\n if (getValue) {\n set<any>(item, 'fieldLabel', getValue(ref) || ' ');\n }\n }\n\n private async clearItemSelected(ignoreValid = false) {\n if (!this.itemsSelected() || !this.itemsSelected().length) {\n return;\n }\n const length = this.itemsSelected().length - 1;\n this.tempIgnoreEmit.set(true);\n this.itemsSelected().forEach((item, index) => {\n if (index === length) {\n this.tempIgnoreEmit.set(false);\n }\n this.handlerRemoveItemSelected(\n {\n stopPropagation: () => {\n return;\n },\n } as Event,\n item,\n ignoreValid\n );\n });\n }\n\n private updateItemsSelected(itemsSelected: Array<unknown>, ignoreValidate = true, ignoreEmitKeySelectedWhenItemsNotExitsEmpty?: boolean) {\n if (!itemsSelected || !itemsSelected.length) {\n return;\n }\n const itemsNotExits: Array<unknown> = [];\n itemsSelected.forEach((item) => {\n if (!item) {\n return;\n }\n let fieldLabel = `${get<unknown>(item, this.fieldLabel()) || get<unknown>(item, 'label') || get<unknown>(item, 'name') || ' '}`;\n const getValue = this.config()?.getValue;\n if (getValue) {\n fieldLabel = getValue(item) || ' ';\n }\n const itemExits = this.checkExits(fieldLabel, get<unknown>(item, this.fieldKey()));\n if (itemExits?.isItemSelected) {\n Object.assign(itemExits.item, item);\n return;\n }\n itemsNotExits.push(item);\n });\n this.processData(itemsNotExits, ignoreValidate, ignoreEmitKeySelectedWhenItemsNotExitsEmpty);\n }\n\n protected handlerPopoverEvent(type: TYPE_POPOVER_EVENT) {\n this.typePopover.set(type);\n if (type === 'click') {\n return;\n }\n if (type === 'remove') {\n this.showList.set(false);\n this.outShowListEvent.emit(false);\n this.inputFunctionControl()?.blur();\n return;\n }\n this.showList.set(true);\n this.outShowListEvent.emit(true);\n this.inputFunctionControl()?.focus();\n }\n\n protected handlerPopoverContentEvent(position: TYPE_POPOVER_DIRECTION) {\n if (this.positionList() === position) {\n return;\n }\n this.positionList.set(position);\n }\n\n protected async handlerRemoveItemSelected(event: Event, itemRemove: unknown, ignoreValid?: boolean) {\n event.stopPropagation();\n this.flagMouse.set({ isMouseEnter: true, isMouseEnterContent: true });\n this.timeOutFlag.set(setTimeout(() => this.flagMouse.set({ isMouseEnter: false, isMouseEnterContent: false }), 250));\n this.itemsSelected.update((items) =>\n items.filter((item) => {\n const keyRemove = get(itemRemove, this.fieldKey());\n const keyItem = get(item, this.fieldKey());\n const labelRemove = get<any>(itemRemove, 'fieldLabel').trim();\n const labelItem = get(item, 'fieldLabel').trim();\n\n return ((isNil(keyRemove) || isNil(keyItem)) && labelRemove !== labelItem) || (!isNil(keyRemove) && !isNil(keyItem) && keyRemove !== keyItem);\n })\n );\n if (itemRemove && !isNil(get<unknown>(itemRemove, this.fieldKey())) && `${get<unknown>(itemRemove, this.fieldKey())}`.search(this.fakeId()) >= 0) {\n this.keysHiddenItem.update((items) => Array.from(new Set([...(items || []), get<unknown>(itemRemove, this.fieldKey())])));\n }\n this.keysSelected.set(Array.from(new Set(this.itemsSelected().map((item) => get(item, `ref.${this.fieldKey()}`)))));\n this.disableWhenMaxItem.set(false);\n const maxItemInput = this.maxItemInput();\n if (maxItemInput && maxItemInput <= this.itemsSelected().length) {\n this.disableWhenMaxItem.set(true);\n }\n if (!this.showList()) {\n this.outSelectMultiItem.emit(this.getItemSelected());\n this.checkViewChange(true, ignoreValid);\n return;\n }\n if (this.showList()) {\n this.tempIgnoreEmit.set(true);\n }\n if (!ignoreValid) {\n this.checkValid();\n }\n this.tempIgnoreEmit.set(false);\n }\n\n protected handlerInputFunctionControl(event: IInputFunctionControlEvent) {\n this.inputFunctionControl.set(event);\n }\n\n protected handlerFocusAndBlurEvent(event: IFocusAndBlurEvent) {\n this.focus.set(false);\n if (event.name === 'focus') {\n this.focus.set(true);\n }\n if (event.name === 'blur' && this.typePopover()?.includes('mouseleave') && this.validRequired() && (!this.itemsSelected() || !this.itemsSelected().length)) {\n this.checkValid();\n }\n }\n\n protected handlerClickOutside(event: Event) {\n event.stopPropagation();\n clearTimeout(this.timeoutClickOutside());\n this.timeoutClickOutside.set(\n setTimeout(() => {\n if (this.showList() || !this.removeTextSearchWhenBlurInput()) {\n return;\n }\n this.valueInput.set('');\n this.keySearch.set('');\n this.inputFunctionControl()?.resetValue();\n }, 250)\n );\n }\n\n protected async handlerEnterEvent() {\n if (!this.valueInput() || !`${this.valueInput()}`.trim()) {\n return;\n }\n if (this.config()?.ignoreEnterCreateNewItem) {\n const itemExits = this.checkExits();\n if (!itemExits || itemExits.isItemSelected) {\n return;\n }\n this.processData([itemExits.item]);\n this.handlerValueChangeSearch('');\n return;\n }\n if (!this.functionCheckPermissionCreateTag()()) {\n return;\n }\n const itemExits = this.checkExits();\n const valueInput = `${this.valueInput()}`.trim();\n const newItem = { [this.fieldLabel()]: valueInput };\n if (this.fieldKey()) {\n set(newItem, this.fieldKey(), `${this.fakeId()}${valueInput}${uuid()}`);\n }\n if (!itemExits) {\n if (this.checkPattern([newItem])) {\n const itemBuildValue = { ...newItem };\n const buildValue = this.config()?.buildValue;\n if (buildValue) {\n buildValue(itemBuildValue, newItem[this.fieldLabel()]);\n }\n newItem[this.fieldLabel()] = itemBuildValue[this.fieldLabel()];\n if (this.enterAutoAddTagToList()) {\n this.listFunctionControl()?.updateData({ newData: signal([signal(newItem)]), functionCustomAddDataToStore: (newData, store) => store.update((value) => [...newData(), ...value]) });\n }\n this.processData([newItem]);\n this.handlerValueChangeSearch('');\n }\n return;\n }\n if (itemExits.isItemSelected) {\n return;\n }\n this.processData([itemExits.item]);\n this.handlerValueChangeSearch('');\n }\n\n protected async handlerValueChangeSearch(value: string | number) {\n this.valueInput.set(`${value}`);\n if (!`${value || ''}`.trim()) {\n this.keySearchChangeSub()?.unsubscribe();\n this.keySearchChangeSub.set(undefined);\n this.timeOutChangeSearch.set(setTimeout(() => this.keySearch.set('')));\n if (!this.config()?.ignoreEnterCreateNewItem) {\n this.checkValid();\n }\n return;\n }\n if (this.config()?.ignoreInput) {\n return;\n }\n if (!this.keySearchChangeSub()) {\n this.setEventKeySearch();\n }\n this.keySearchChange.next(`${value || ''}`.trim());\n }\n\n private setEventKeySearch() {\n if (this.keySearchChangeSub()) {\n return;\n }\n this.keySearchChangeSub.set(this.keySearchChange.pipe(debounceTime(1500), takeUntil(this.onDestroy)).subscribe((value) => this.keySearch.set(`${value || ''}`.trim())));\n }\n\n private processData(items: Array<unknown>, ignoreValidate = false, ignoreEmitKeySelectedWhenItemsNotExitsEmpty?: boolean) {\n if (!items || !items.length) {\n const itemsSelected = this.getItemSelected();\n if (!ignoreEmitKeySelectedWhenItemsNotExitsEmpty) {\n this.outSelectMultiItem.emit(itemsSelected);\n }\n this.keysSelected.set(Array.from(new Set(itemsSelected?.map((item) => get(item, `ref.${this.fieldKey()}`)))));\n this.checkViewChange(false, ignoreValidate);\n return;\n }\n const itemsMapping = items.map((item) => {\n const ref = get(item, 'ref') || item;\n item = cloneDeep(ref);\n set(item, 'ref', ref);\n this.updateFieldLabel(item);\n const { getDisableItem, getStyles, getStylesTagSpecific, getTooltip } = this.config() || {};\n if (getDisableItem) {\n set<any>(item, 'disableItem', getDisableItem(item));\n }\n if (getStyles) {\n set<any>(item, 'ngStyles', getStyles(item));\n }\n if (getStylesTagSpecific) {\n const type = getStylesTagSpecific(item);\n if (type === 'specific_violet_color') {\n set<any>(item, 'ngStyles', { color: '#7239EA', backgroundColor: '#F1EBFD' });\n }\n }\n if (getTooltip) {\n set<any>(item, 'tooltip', getTooltip(item));\n }\n return item;\n });\n this.itemsSelected.update((items) => [...items, ...itemsMapping]);\n this.keysSelected.set(Array.from(new Set(this.itemsSelected().map((item) => get(item, `ref.${this.fieldKey()}`)))));\n this.outSelectMultiItem.emit(this.getItemSelected());\n this.checkViewChange(false, ignoreValidate);\n }\n\n protected handlerDataChange(items: Array<unknown>) {\n this.itemsOfList.set(items);\n this.popoverFunctionControl()?.updatePopoverOverlayPosition();\n if (!this.config()?.ignoreInput) {\n this.inputFunctionControl()?.focus();\n }\n }\n\n protected handlerLoading(event: boolean) {\n this.loading.set(event);\n }\n\n private checkViewChange(ignoreScrollBottom: boolean, ignoreValidate = false) {\n this.disableWhenMaxItem.set(false);\n const maxItemInput = this.maxItemInput();\n if (maxItemInput && maxItemInput <= this.itemsSelected().length) {\n this.disableWhenMaxItem.set(true);\n }\n this.timeOutCheckViewChange.set(\n setTimeout(() => {\n const scrollHeight = this.tagsEl()?.nativeElement.scrollHeight;\n if (!isNil(scrollHeight) && this.clientHeight() !== scrollHeight && this.positionList() !== 'top') {\n this.popoverFunctionControl()?.updatePopoverOverlayPosition();\n }\n if (!ignoreScrollBottom && this.tagsEl() && this.tagsEl().nativeElement) {\n this.tagsEl().nativeElement.scrollTop = scrollHeight;\n }\n this.clientHeight.set(scrollHeight);\n }, 250)\n );\n if (!ignoreValidate) {\n this.checkValid();\n }\n }\n\n private checkExits(label?: string, id?: string) {\n let itemExits;\n if (!isNil(id) && !`${id}`.includes(this.fakeId()) && this.fieldKey()) {\n itemExits = this.itemsSelected().find((item) => !isNil(get(item, this.fieldKey())) && `${get(item, this.fieldKey())}`.trim() === `${id}`);\n if (itemExits) {\n return { item: itemExits, isItemSelected: !!itemExits };\n }\n return;\n }\n if (!label) {\n label = `${this.valueInput() || ''}`.trim();\n }\n itemExits = this.itemsSelected().find(\n (item) =>\n (!isNil(get(item, 'fieldLabel')) && get(item, 'fieldLabel').trim() === label?.trim()) ||\n (this.checkExitIsLabelInclude() && get(item, 'fieldLabel').trim().includes(label?.trim())) ||\n (this.checkExitByFields() &&\n this.checkExitByFields()?.some((field) => get(item, field)?.trim() === label?.trim() || get(item, field)?.trim() === escapeHtml(label?.trim() || '') || escapeHtml(get(item, field)?.trim() || ' ') === escapeHtml(label?.trim() || '')))\n );\n if (itemExits) {\n return { item: itemExits, isItemSelected: true };\n }\n itemExits = this.itemsOfList().find(\n (item) =>\n (!isNil(get(item, 'fieldLabel')) && get<any>(item, 'fieldLabel').trim() === label?.trim()) ||\n (this.checkExitIsLabelInclude() && get<any>(item, 'fieldLabel').trim().includes(label?.trim())) ||\n (this.checkExitByFields() &&\n this.checkExitByFields()?.some(\n (field) => get<any>(item, field)?.trim() === label?.trim() || escapeHtml(get<any>(item, field)?.trim() || ' ') === escapeHtml(label?.trim() || '') || get<any>(item, field)?.trim() === escapeHtml(label?.trim() || '')\n ))\n );\n if (itemExits) {\n return { item: itemExits, isItemSelected: false };\n }\n return;\n }\n\n protected handlerSelectedKey(event: IListDataEmitKey | undefined) {\n if (!event || !event.item) {\n return;\n }\n if (!isNil(event?.key)) {\n this.popoverFunctionControl()?.removePopoverOverlay();\n }\n if (this.itemsSelected()[0]) {\n this.tempIgnoreEmit.set(true);\n this.handlerRemoveItemSelected(\n {\n stopPropagation: () => {\n return;\n },\n } as Event,\n this.itemsSelected()[0],\n this.itemsSelected()[0].disableItem\n );\n this.tempIgnoreEmit.set(false);\n }\n this.updateItemsSelected([event.item], !!this.itemsSelected()[0]); // Bug #36075\n }\n\n private getFlagEmitSelectedItem(keys: Array<unknown>) {\n if (!this.ignoreEmitWhenSameDataSelected() || keys.length !== this.itemsSelected().length) {\n return false;\n }\n for (const key of keys) {\n if (!this.itemsSelected().some((item) => get(item, this.fieldKey()) === key)) {\n return false;\n }\n }\n return true;\n }\n\n protected async handlerSelectMultiKey(event: IListDataEmitMultiKey | undefined) {\n if (!event) {\n return;\n }\n const keys = [];\n const items: Array<unknown> = [];\n if (event.keys && event.keys.length && (!event.mapKeys || !event.mapKeys.length)) {\n keys.push(...event.keys);\n }\n const ignoreEmitKeySelectedWhenItemsNotExitsEmpty = this.getFlagEmitSelectedItem(cloneDeep(event.keys ?? []));\n event.mapKeys.forEach((mapKey) => {\n if (isNil(mapKey.key)) {\n return;\n }\n if (mapKey.item) {\n return items.push(mapKey.item);\n }\n if (!Array.isArray(this.itemsSelected())) {\n return keys.push(mapKey.key);\n }\n const item = this.itemsSelected().find((item) => get(item, this.fieldKey()) === mapKey.key);\n if (item) {\n return items.push(item);\n }\n return keys.push(mapKey.key);\n });\n if (keys.length) {\n const resultData: Array<unknown> = await this.getDetailByIds(keys, true);\n items.push(...resultData);\n }\n const messageEmpty = this.validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID;\n let ignoreValidate = true;\n if (messageEmpty === this.error()?.message) {\n ignoreValidate = false;\n }\n const itemRemove = this.itemsSelected().find((itemSelected) => get(itemSelected, this.fieldKey()) && !items.some((item) => get(itemSelected, this.fieldKey()) === get(item, this.fieldKey())));\n this.itemsSelected.update((itemsSelected) => itemsSelected.filter((itemSelected) => !get(itemSelected, this.fieldKey()) || (event.keys.length && items.some((item) => get(itemSelected, this.fieldKey()) === get(item, this.fieldKey())))));\n if (itemRemove) {\n if (this.enterAutoAddTagToList() && !isNil(get(itemRemove, this.fieldKey())) && `${get(itemRemove, this.fieldKey())}`.search(this.fakeId()) >= 0) {\n this.keysHiddenItem.update((items) => [...(items || []), get(itemRemove, this.fieldKey())]);\n }\n }\n if (!event.keys.length) {\n this.checkValid();\n this.keysSelected.set(Array.from(new Set(this.itemsSelected()?.map((item) => get(item, `ref.${this.fieldKey()}`)))));\n this.outSelectMultiItem.emit(this.getItemSelected());\n this.checkViewChange(false, ignoreValidate);\n return;\n }\n this.updateItemsSelected(items, ignoreValidate, ignoreEmitKeySelectedWhenItemsNotExitsEmpty);\n this.checkValid();\n }\n\n private async getDetailByIds(keys: Array<unknown>, isResponseData?: boolean): Promise<Array<unknown>> {\n const httpRequestDetailItemByIds = this.httpRequestDetailItemByIds();\n if (!httpRequestDetailItemByIds || this.loadingDetail() || !(keys instanceof Array) || !keys.length) {\n return [];\n }\n this.updateLoadingDetail(true);\n const cloneHttpDetailConfig = cloneDeep(httpRequestDetailItemByIds);\n try {\n const { argumentsValue, guideAutoUpdateArgumentsValue } = cloneHttpDetailConfig;\n if (!guideAutoUpdateArgumentsValue || !guideAutoUpdateArgumentsValue.detailById) {\n return [];\n }\n guideAutoUpdateArgumentsValue.detailById.fieldGetValue = 'keys';\n this.httpRequestService.updateArguments(argumentsValue, { keys: keys }, {}, '', false, false, guideAutoUpdateArgumentsValue);\n const result = (await this.httpRequestService.callApi(cloneHttpDetailConfig)) as IHttpResponse<Array<unknown>>;\n if (!isResponseData) {\n this.updateItemsSelected(result.data || []);\n this.updateLoadingDetail(false);\n return [];\n }\n this.updateLoadingDetail(false);\n return result.data || [];\n } catch (error) {\n console.log(error);\n this.updateLoadingDetail(false);\n }\n return [];\n }\n\n private async checkValid() {\n const valid = this.itemsSelected() && this.itemsSelected().length ? true : false;\n const stateError = !!this.error();\n this.error.set(undefined);\n if (this.validRequired() && !valid) {\n this.error.set({ ...this.validRequired(), message: this.validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID });\n }\n if (!this.error()) {\n this.checkPattern(this.itemsSelected());\n this.checkMaxItemSelectedValid();\n }\n if (!this.tempIgnoreEmit()) {\n this.outValidEvent.emit(!this.error());\n }\n if (stateError !== !!this.error()) {\n this.popoverFunctionControl()?.updatePopoverOverlayPosition();\n }\n return !this.error();\n }\n\n private checkMaxItemSelectedValid() {\n const validMaxItemSelected = this.validMaxItemSelected();\n if (validMaxItemSelected && this.itemsSelected().length > validMaxItemSelected.value) {\n this.error.set({ ...validMaxItemSelected, message: validMaxItemSelected.message || ERROR_MESSAGE_MAX_VALID, interpolateParams: { value: validMaxItemSelected.value } });\n return false;\n }\n return true;\n }\n\n private checkPattern(items: Array<unknown>): boolean {\n const validPattern = this.validPattern();\n if (!validPattern || !validPattern.length || !items || !items.length) {\n return true;\n }\n for (const valid of validPattern) {\n if (valid.pattern && items.some((item) => !valid.pattern.test(get(item, this.fieldLabel())))) {\n this.error.set({ ...valid, message: valid.message || ERROR_MESSAGE_PATTEN_VALID });\n return false;\n }\n }\n return true;\n }\n\n protected handlerClickButtonOther(event: IButton) {\n this.outClickButtonOther.emit(event);\n }\n\n private getItemSelected(): Array<unknown> {\n return this.itemsSelected().map((item) => {\n const itemMap = { ...item };\n if (!isNil(get(itemMap, this.fieldKey())) && `${get(itemMap, this.fieldKey())}`.search(this.fakeId()) === 0) {\n set(itemMap, this.fieldKey(), '');\n }\n return itemMap;\n });\n }\n\n protected async resetToDefaultDataSelected(itemSelected?: Array<unknown>) {\n if (itemSelected && Array.isArray(itemSelected)) {\n this.itemsSelected.set([]);\n this.updateItemsSelected(itemSelected);\n return;\n }\n itemSelected = new Array<unknown>();\n if (!this.fieldKey()) {\n return;\n }\n const defaultKeysSelected = this.defaultKeysSelected();\n if (defaultKeysSelected && Array.isArray(defaultKeysSelected)) {\n this.itemsSelected.set([]);\n this.getDetailByIds(defaultKeysSelected);\n return;\n }\n const defaultItemsSelected = this.defaultItemsSelected();\n if (defaultItemsSelected && Array.isArray(defaultItemsSelected)) {\n this.itemsSelected.set([]);\n this.updateItemsSelected(defaultItemsSelected);\n return;\n }\n }\n\n protected handlerFunctionControlList(event: IListFunctionControlEvent) {\n this.listFunctionControl.set(event);\n }\n\n protected async focusInput() {\n this.inputFunctionControl()?.focus();\n }\n\n protected handlerChangeFlagMouse(event: IFlagMouse) {\n this.outChangStageFlagMouse.emit(event);\n }\n\n protected handlerChangStageFlagMouse(flag: IFlagMouse) {\n this.flagMouse.set(flag);\n }\n\n protected handlerClickTagItem(event: Event) {\n if (!this.showList()) {\n return;\n }\n event.stopPropagation();\n this.flagMouse.set({ isMouseEnter: true, isMouseEnterContent: true });\n }\n\n private async resetError() {\n this.error.set(undefined);\n }\n\n private updateLoadingDetail(event: boolean) {\n this.loadingDetail.set(event);\n this.outLoadingGetDetailSelected.emit(event);\n }\n\n private async updateItemSelectedDisable() {\n const getDisableItem = this.config()?.getDisableItem;\n if (!getDisableItem) {\n return;\n }\n this.itemsSelected.update((itemsSelected) => itemsSelected.map((item) => ({ ...item, disableItem: getDisableItem(item) })));\n }\n\n private async refreshListData() {\n this.listFunctionControl()?.refresh();\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n\n if (this.timeOutFlag()) clearTimeout(this.timeOutFlag());\n if (this.timeOutChangeSearch()) clearTimeout(this.timeOutChangeSearch());\n if (this.timeOutCheckViewChange()) clearTimeout(this.timeOutCheckViewChange());\n if (this.timeoutClickOutside()) clearTimeout(this.timeoutClickOutside());\n\n if (this.keySearchChangeSub()) this.keySearchChangeSub()?.unsubscribe();\n }\n}\n","<div class=\"flex flex-col w-full h-full\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required\"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable() || loading() || loadingDetail()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable() || loading() || loadingDetail()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleActive]=\"labelConfig.toggleDisable || disable() || loading() || loadingDetail()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n <libs_ui-components-popover\n class=\"w-full h-full\"\n [ignoreShowPopover]=\"disable() || readonly() || !!config()?.ignoreShowList || false\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [elementRefCustom]=\"tagsEl\"\n [mode]=\"!config()?.ignoreInput ? 'click' : 'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [flagMouse]=\"flagMouse()\"\n [config]=\"{\n animationConfig: config()?.animationConfig || {},\n zIndex: zIndex(),\n widthByParent: true,\n parentBorderWidth: parentBorderWidth() ?? 0,\n maxHeight: 2048,\n maxWidth: 2048,\n direction: config()?.directionList || 'bottom',\n directionDistance: 2,\n template: !showListBellow() ? listViewEl : undefined,\n whiteTheme: true,\n ignoreArrow: true,\n classInclude: 'rounded-[4px] ' + classIncludePopover() + (!listConfig()?.ignoreShowDataWhenNotSearch || keySearch() ? ' libs-ui-border-general' : ''),\n position: { mode: 'start', distance: 0 },\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outEventPopoverContent)=\"handlerPopoverContentEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n <div\n class=\"relative\"\n [class.cursor-pointer]=\"!disable() && !readonly()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\">\n @if (config()?.uiLikeDropdown) {\n <i\n class=\"flex text-[16px] absolute right-[16px] top-[8px] libs-ui-icon-move-right rotate-90 z-[1]\"\n [class.text-[#6a7383]]=\"!readonly() && !disable()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n <div\n #tagsEl\n [class]=\"'libs-ui-tags ' + (config()?.classInclude || '') + (readonly() ? config()?.classCustomWhenReadOnly || ' libs-ui-readonly' : '')\"\n [class.libs-ui-tags-not-popup]=\"(!showList() && !showBorderActiveWhenFocusInput()) || (!focus() && showBorderActiveWhenFocusInput())\"\n [class.libs-ui-tags-error]=\"!!error() && !config()?.ignoreShowError\"\n [class.!pr-[32px]]=\"config()?.uiLikeDropdown\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [class.libs-ui-border-primary-general]=\"focus() && showBorderActiveWhenFocusInput()\"\n LibsUiComponentsClickOutsideDirective\n LibsUiComponentsScrollOverlayDirective\n (outOutside)=\"handlerClickOutside($event)\">\n @for (item of itemsSelected(); track item[fieldKey()]) {\n <div\n LibsUiComponentsPopoverDirective\n [type]=\"item?.tooltip?.type || 'other'\"\n [config]=\"item?.tooltip?.config || { zIndex: zIndex() + 2 }\"\n [ignoreShowPopover]=\"!item?.tooltip || item.tooltip.ignoreShowPopover\"\n [ngStyle]=\"item?.bullet || item?.ngStyles\"\n [class]=\"classIncludeTagItem() || ''\"\n [class.libs-ui-tags-readonly]=\"item.disableItem\"\n [class.libs-ui-tags-item]=\"!item.disableItem\"\n [class.cursor-default]=\"disable() || readonly()\"\n (pointerdown)=\"handlerClickTagItem($event)\">\n @if (fieldGetImage() || config()?.fieldGetImage; as fieldGetImage) {\n <div class=\"flex items-center justify-center h-full\">\n <libs_ui-components-avatar\n [classInclude]=\"classAvatarInclude() || config()?.classAvatarInclude || 'mr-[8px]'\"\n [size]=\"imageSize() || config()?.imageSize\"\n [linkAvatar]=\"item[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError() || config()?.linkImageError\"\n [idGenColor]=\"item[fieldGetTextAvatar() || config()?.fieldGetTextAvatar || '']\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace() || config()?.getLastTextAfterSpace\"\n [textAvatar]=\"item[fieldGetTextAvatar() || config()?.fieldGetTextAvatar || 'user']\" />\n </div>\n }\n <span\n class=\"libs-ui-font-h6r\"\n [innerHtml]=\"item.fieldLabel || ' ' | translate\"></span>\n @if (!disable() && !item.disableItem && !readonly()) {\n <div class=\"flex items-center justify-center ml-[8px]\">\n <i\n #iconCloseEl\n [attr.specificStyle]=\"!!(item?.bullet || item?.ngStyles)\"\n [class]=\"'flex text-[16px] ' + (classIconRemoveTagItem() || 'libs-ui-icon-close')\"\n [class.cursor-pointer]=\"!disable() && !loading() && !loadingDetail()\"\n [class.pointer-events-none]=\"disable() || loading() || loadingDetail()\"\n [ngStyle]=\"item?.bullet || item?.ngStyles | LibsUiComponentsTagsGetColorPipe: iconCloseEl\"\n (pointerdown)=\"handlerRemoveItemSelected($event, item)\"></i>\n </div>\n }\n </div>\n }\n @if (!singleSelected() || (singleSelected() && !itemsSelected().length)) {\n @if (!config()?.ignoreInput && !config()?.uiLikeDropdown && (!hiddenInputWhenReadonly() || (hiddenInputWhenReadonly() && !readonly()))) {\n <libs_ui-components-inputs-input\n class=\"grow\"\n [class.mb-[4px]]=\"itemsSelected().length\"\n [classInclude]=\"'w-full bg-transparent ' + (config()?.classInputInclude || 'px-[4px] min-w-[30px]')\"\n [defaultHeight]=\"24\"\n [placeholder]=\"readonly() ? '' : placeholder() || 'i18n_import_content'\"\n [noBorder]=\"true\"\n [(value)]=\"valueInput\"\n [disable]=\"disable() || loading() || loadingDetail() || disableWhenMaxItem()\"\n [readonly]=\"readonly()\"\n (outEnterEvent)=\"handlerEnterEvent()\"\n (valueChange)=\"handlerValueChangeSearch($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurEvent($event)\"\n (outFunctionsControl)=\"handlerInputFunctionControl($event)\" />\n }\n @if (config()?.ignoreInput && config()?.uiLikeDropdown && !itemsSelected().length) {\n <div\n class=\"flex items-center pb-[4px] pt-[2px] ml-[11px] libs-ui-font-h5r\"\n [class.text-[#9ca2ad]]=\"disable()\">\n {{ placeholder() || 'i18n_select_value' | translate }}\n </div>\n }\n }\n </div>\n @if (error() && !config()?.ignoreShowError) {\n <div class=\"text-[#ee2d41] libs-ui-font-h7r mt-[8px]\">{{ error()?.message || ' ' | translate: error()?.interpolateParams || {} }}</div>\n }\n </div>\n </libs_ui-components-popover>\n</div>\n@if (showListBellow()) {\n <ng-container *ngTemplateOutlet=\"listViewEl\"></ng-container>\n}\n<ng-template #listViewEl>\n @if (listConfig(); as listConfig) {\n <libs_ui-components-list\n [searchConfig]=\"listSearchConfig() || { classInclude: 'hidden', iconLeftClass: 'hidden' }\"\n [isSearchOnline]=\"isSearchOnline()\"\n [zIndex]=\"zIndex()\"\n [keySearch]=\"keySearch()\"\n [config]=\"listConfig\"\n [disable]=\"disable() || loadingDetail() || disableWhenMaxItem()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"listMaxItemShow() || 6\"\n [multiKeySelected]=\"keysSelected()\"\n [clickExactly]=\"false\"\n [keysHiddenItem]=\"keysHiddenItem()\"\n [keysDisableItem]=\"listKeyDisable()\"\n [dividerClassInclude]=\"listDividerClassInclude() ?? 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundListCustom()\"\n [functionGetItemsAutoAddList]=\"functionGetItemAutoAddList()\"\n [hiddenInputSearch]=\"listHiddenInputSearchWhenHasSearchConfig()\"\n (outFunctionsControl)=\"handlerFunctionControlList($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoading($event)\" />\n }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
2
  "name": "@libs-ui/components-tags",
3
- "version": "0.2.315-0",
3
+ "version": "0.2.316-0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0",
7
- "@libs-ui/components-avatar": "0.2.315-0",
8
- "@libs-ui/components-popover": "0.2.315-0",
9
- "@libs-ui/utils": "0.2.315-0",
10
- "@libs-ui/components-buttons-button": "0.2.315-0",
11
- "@libs-ui/components-dropdown": "0.2.315-0",
12
- "@libs-ui/components-inputs-input": "0.2.315-0",
13
- "@libs-ui/components-inputs-search": "0.2.315-0",
14
- "@libs-ui/components-inputs-valid": "0.2.315-0",
15
- "@libs-ui/components-label": "0.2.315-0",
16
- "@libs-ui/components-list": "0.2.315-0",
17
- "@libs-ui/interfaces-types": "0.2.315-0",
18
- "@libs-ui/services-http-request": "0.2.315-0",
7
+ "@libs-ui/components-avatar": "0.2.316-0",
8
+ "@libs-ui/components-popover": "0.2.316-0",
9
+ "@libs-ui/utils": "0.2.316-0",
10
+ "@libs-ui/components-buttons-button": "0.2.316-0",
11
+ "@libs-ui/components-dropdown": "0.2.316-0",
12
+ "@libs-ui/components-inputs-input": "0.2.316-0",
13
+ "@libs-ui/components-inputs-search": "0.2.316-0",
14
+ "@libs-ui/components-inputs-valid": "0.2.316-0",
15
+ "@libs-ui/components-label": "0.2.316-0",
16
+ "@libs-ui/components-list": "0.2.316-0",
17
+ "@libs-ui/interfaces-types": "0.2.316-0",
18
+ "@libs-ui/services-http-request": "0.2.316-0",
19
19
  "@ngx-translate/core": "^15.0.0",
20
20
  "rxjs": "~7.8.0",
21
- "@libs-ui/components-click-outside": "0.2.315-0"
21
+ "@libs-ui/components-click-outside": "0.2.316-0"
22
22
  },
23
23
  "sideEffects": false,
24
24
  "module": "fesm2022/libs-ui-components-tags.mjs",