@gravitee/ui-components 3.24.5-renovate-github-markdown-css-5-x-6cd8067 → 3.25.1

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.
Files changed (115) hide show
  1. package/assets/css/github-markdown-css/github-markdown.css +545 -500
  2. package/assets/i18n/en.json +3 -0
  3. package/assets/i18n/fr.json +3 -0
  4. package/assets/icons/design.svg +1 -1
  5. package/package.json +2 -9
  6. package/src/atoms/gv-autocomplete.js +132 -156
  7. package/src/atoms/gv-button.js +73 -248
  8. package/src/atoms/gv-checkbox.js +45 -103
  9. package/src/atoms/gv-date-picker-calendar.js +312 -393
  10. package/src/atoms/gv-date-picker-cell.js +57 -81
  11. package/src/atoms/gv-date-picker.js +180 -319
  12. package/src/atoms/gv-file-upload.js +85 -195
  13. package/src/atoms/gv-icon.js +13 -34
  14. package/src/atoms/gv-image.js +31 -66
  15. package/src/atoms/gv-input-message.js +12 -37
  16. package/src/atoms/gv-input.js +117 -148
  17. package/src/atoms/gv-link.js +47 -125
  18. package/src/atoms/gv-message.js +18 -69
  19. package/src/atoms/gv-metric.js +19 -68
  20. package/src/atoms/gv-relative-time.js +67 -38
  21. package/src/atoms/gv-select-native.js +96 -215
  22. package/src/atoms/gv-select.js +110 -230
  23. package/src/atoms/gv-spinner.js +5 -26
  24. package/src/atoms/gv-state.js +25 -66
  25. package/src/atoms/gv-switch.js +40 -160
  26. package/src/atoms/gv-tag.js +26 -78
  27. package/src/atoms/gv-text.js +22 -83
  28. package/src/charts/gv-chart-bar.js +22 -18
  29. package/src/charts/gv-chart-gauge.js +28 -31
  30. package/src/charts/gv-chart-histogram.js +18 -10
  31. package/src/charts/gv-chart-line.js +70 -59
  32. package/src/charts/gv-chart-map.js +44 -42
  33. package/src/charts/gv-chart-pie.js +18 -14
  34. package/src/index.js +1 -0
  35. package/src/lib/cron-expression.js +40 -35
  36. package/src/lib/date.js +10 -1
  37. package/src/lib/events.js +3 -1
  38. package/src/lib/http-client-schema-form.js +13 -12
  39. package/src/lib/http.js +57 -56
  40. package/src/lib/i18n.js +30 -22
  41. package/src/lib/item.js +13 -12
  42. package/src/lib/properties.js +77 -42
  43. package/src/lib/schema-form.js +4 -5
  44. package/src/lib/studio.js +13 -60
  45. package/src/lib/style.js +8 -8
  46. package/src/lib/text-format.js +14 -7
  47. package/src/lib/theme.js +8 -5
  48. package/src/lib/utils.js +17 -18
  49. package/src/mixins/chart-element.js +31 -54
  50. package/src/mixins/input-element.js +60 -47
  51. package/src/mixins/item-resource.js +34 -32
  52. package/src/mixins/keyboard-element.js +6 -5
  53. package/src/mixins/update-after-browser.js +4 -1
  54. package/src/mixins/with-resize-observer.js +23 -13
  55. package/src/mixins/with-skeleton-attribute.js +54 -48
  56. package/src/molecules/gv-card-full.js +26 -147
  57. package/src/molecules/gv-card-list.js +13 -42
  58. package/src/molecules/gv-card.js +17 -91
  59. package/src/molecules/gv-category-list.js +6 -17
  60. package/src/molecules/gv-category.js +23 -103
  61. package/src/molecules/gv-code.js +81 -143
  62. package/src/molecules/gv-confirm.js +41 -71
  63. package/src/molecules/gv-cron-editor.js +143 -389
  64. package/src/molecules/gv-dropdown-menu.js +14 -46
  65. package/src/molecules/gv-expandable.js +31 -59
  66. package/src/molecules/gv-expression-language.js +176 -138
  67. package/src/molecules/gv-identity-picture.js +42 -65
  68. package/src/molecules/gv-list.js +42 -134
  69. package/src/molecules/gv-metrics.js +37 -49
  70. package/src/molecules/gv-modal.js +28 -95
  71. package/src/molecules/gv-nav.js +49 -75
  72. package/src/molecules/gv-option.js +57 -130
  73. package/src/molecules/gv-plans.js +86 -209
  74. package/src/molecules/gv-popover.js +57 -177
  75. package/src/molecules/gv-promote.js +28 -146
  76. package/src/molecules/gv-rating-list.js +69 -195
  77. package/src/molecules/gv-rating.js +52 -105
  78. package/src/molecules/gv-row-expandable.js +5 -11
  79. package/src/molecules/gv-row.js +21 -147
  80. package/src/molecules/gv-stats.js +23 -48
  81. package/src/molecules/gv-stepper.js +43 -187
  82. package/src/molecules/gv-table.js +199 -309
  83. package/src/molecules/gv-tree.js +33 -156
  84. package/src/organisms/gv-documentation.js +45 -128
  85. package/src/organisms/gv-header.js +37 -195
  86. package/src/organisms/gv-http-client.js +32 -168
  87. package/src/organisms/gv-menu.js +37 -158
  88. package/src/organisms/gv-newsletter-subscription.js +48 -189
  89. package/src/organisms/gv-pagination.js +49 -77
  90. package/src/organisms/gv-properties.js +271 -492
  91. package/src/organisms/gv-resizable-views.js +41 -259
  92. package/src/organisms/gv-resources.js +168 -275
  93. package/src/organisms/gv-schema-form-array.js +49 -159
  94. package/src/organisms/gv-schema-form-control-object.js +59 -73
  95. package/src/organisms/gv-schema-form-control.js +107 -134
  96. package/src/organisms/gv-schema-form.js +219 -280
  97. package/src/organisms/gv-tabs.js +66 -98
  98. package/src/organisms/gv-user-menu.js +36 -201
  99. package/src/organisms/gv-vertical-menu.js +20 -61
  100. package/src/policy-studio/gv-flow-step.js +106 -245
  101. package/src/policy-studio/gv-flow.js +125 -304
  102. package/src/policy-studio/gv-policy-studio-menu.js +157 -471
  103. package/src/policy-studio/gv-policy-studio.js +714 -760
  104. package/src/styles/empty.js +3 -20
  105. package/src/styles/input.js +3 -247
  106. package/src/styles/link.js +3 -16
  107. package/src/styles/shapes.js +1 -0
  108. package/src/styles/skeleton.js +3 -37
  109. package/src/styles/zoom.js +3 -24
  110. package/src/theme/gv-theme.js +21 -60
  111. package/CHANGELOG.md +0 -1260
  112. package/LICENSE.txt +0 -202
  113. package/README.md +0 -195
  114. package/src/.eslintrc.js +0 -19
  115. package/src/theme/definition.json +0 -1762
@@ -16,7 +16,6 @@
16
16
  import { css, LitElement, html } from 'lit';
17
17
  import '../molecules/gv-option';
18
18
  import { dispatchCustomEvent } from '../lib/events';
19
-
20
19
  /**
21
20
  * Tabs component
22
21
  *
@@ -34,86 +33,39 @@ import { dispatchCustomEvent } from '../lib/events';
34
33
  *
35
34
  * @cssprop {Length} [--gv-tabs-options--m=0] - Tabs options margin
36
35
  */
36
+
37
37
  export class GvTabs extends LitElement {
38
38
  static get properties() {
39
39
  return {
40
- options: { type: Array },
41
- _options: { type: Array, attribute: false },
42
- value: { type: String, reflect: true },
43
- validator: { type: Function },
44
- disabled: { type: Boolean },
45
- small: { type: Boolean },
46
- truncate: { type: Boolean },
40
+ options: {
41
+ type: Array
42
+ },
43
+ _options: {
44
+ type: Array,
45
+ attribute: false
46
+ },
47
+ value: {
48
+ type: String,
49
+ reflect: true
50
+ },
51
+ validator: {
52
+ type: Function
53
+ },
54
+ disabled: {
55
+ type: Boolean
56
+ },
57
+ small: {
58
+ type: Boolean
59
+ },
60
+ truncate: {
61
+ type: Boolean
62
+ }
47
63
  };
48
64
  }
49
65
 
50
66
  static get styles() {
51
- return [
52
- // language=css
53
- css`
54
- :host {
55
- box-sizing: border-box;
56
- }
57
-
58
- ::slotted([slot='content']) {
59
- opacity: 0;
60
- box-sizing: border-box;
61
- transition: opacity 350ms ease-in-out;
62
- visibility: hidden;
63
- position: absolute;
64
- left: -9999px;
65
- top: -9999px;
66
- }
67
-
68
- ::slotted([slot='content'].current) {
69
- opacity: 1;
70
- visibility: visible;
71
- position: relative;
72
- left: auto;
73
- top: auto;
74
- }
75
-
76
- .header {
77
- display: flex;
78
- border-bottom: 1px solid #d9d9d9;
79
- box-sizing: border-box;
80
- }
81
-
82
- .title {
83
- flex: 1;
84
- display: flex;
85
- align-items: center;
86
- }
87
-
88
- .actions {
89
- display: flex;
90
- align-items: center;
91
- }
92
-
93
- .tabs {
94
- flex: 1;
95
- display: flex;
96
- justify-content: flex-end;
97
- --gv-option--bdrs: 0;
98
- }
99
-
100
- :host([small]) .tabs {
101
- flex-direction: column;
102
- }
103
-
104
- :host([small]) gv-option {
105
- align-self: flex-end;
106
- }
107
-
108
- gv-option {
109
- margin: var(--gv-tabs-options--m, 0);
110
- }
111
-
112
- ::slotted(gv-button) {
113
- padding-bottom: 2px;
114
- }
115
- `,
116
- ];
67
+ return [// language=css
68
+ css`:host{box-sizing:border-box}::slotted([slot=content]){opacity:0;box-sizing:border-box;transition:opacity 350ms ease-in-out;visibility:hidden;position:absolute;left:-9999px;top:-9999px}::slotted([slot=content].current){opacity:1;visibility:visible;position:relative;left:auto;top:auto}.header{display:flex;border-bottom:1px solid #d9d9d9;box-sizing:border-box}.title{flex:1;display:flex;align-items:center}.actions{display:flex;align-items:center}.tabs{flex:1;display:flex;justify-content:flex-end;--gv-option--bdrs:0}:host([small]) .tabs{flex-direction:column}:host([small]) gv-option{align-self:flex-end}gv-option{margin:var(--gv-tabs-options--m,0)}::slotted(gv-button){padding-bottom:2px}`];
117
69
  }
118
70
 
119
71
  _getContent() {
@@ -129,12 +81,19 @@ export class GvTabs extends LitElement {
129
81
 
130
82
  set options(options) {
131
83
  if (options && Array.isArray(options)) {
132
- this._options = options.map((option) => {
84
+ this._options = options.map(option => {
133
85
  if (typeof option === 'string') {
134
- return { id: option, title: option };
86
+ return {
87
+ id: option,
88
+ title: option
89
+ };
135
90
  } else if (typeof option === 'object' && option.title == null) {
136
- return { id: option.id, title: option.id };
91
+ return {
92
+ id: option.id,
93
+ title: option.id
94
+ };
137
95
  }
96
+
138
97
  return option;
139
98
  });
140
99
  }
@@ -146,9 +105,12 @@ export class GvTabs extends LitElement {
146
105
 
147
106
  updated() {
148
107
  const content = this._getContent();
149
- content.forEach((c) => c.classList.remove('current'));
108
+
109
+ content.forEach(c => c.classList.remove('current'));
110
+
150
111
  if (this.value) {
151
112
  const target = this.querySelector(`#${this.value}`);
113
+
152
114
  if (target) {
153
115
  target.classList.add('current');
154
116
  }
@@ -161,20 +123,29 @@ export class GvTabs extends LitElement {
161
123
  from.classList.remove('current');
162
124
  content.classList.add('current');
163
125
  this.value = value;
164
- dispatchCustomEvent(this, 'change', { value, from: from.id, to: content.id });
126
+ dispatchCustomEvent(this, 'change', {
127
+ value,
128
+ from: from.id,
129
+ to: content.id
130
+ });
165
131
  }
166
132
 
167
- _onClick({ detail }) {
133
+ _onClick({
134
+ detail
135
+ }) {
168
136
  if (!this.disabled) {
169
- const from = this._getContent().find((e) => e.classList.contains('current'));
137
+ const from = this._getContent().find(e => e.classList.contains('current'));
138
+
170
139
  const content = this.querySelector(`#${detail.id}`);
171
140
  this.shadowRoot.querySelector('gv-option').value = from.id;
141
+
172
142
  if (this.validator) {
173
- this.validator({ from: from.id, to: content.id })
174
- .then(() => {
175
- this._changeTab(from, content, detail.id);
176
- })
177
- .catch(() => {});
143
+ this.validator({
144
+ from: from.id,
145
+ to: content.id
146
+ }).then(() => {
147
+ this._changeTab(from, content, detail.id);
148
+ }).catch(() => {});
178
149
  } else {
179
150
  this._changeTab(from, content, detail.id);
180
151
  }
@@ -183,28 +154,25 @@ export class GvTabs extends LitElement {
183
154
 
184
155
  get _contextualOptions() {
185
156
  if (this.truncate) {
186
- return this.options.map((option) => {
157
+ return this.options.map(option => {
187
158
  if (this.value !== option.id) {
188
159
  const label = option.label || option.title;
189
- return { ...option, label: label.substring(0, 1) };
160
+ return { ...option,
161
+ label: label.substring(0, 1)
162
+ };
190
163
  }
164
+
191
165
  return option;
192
166
  });
193
167
  }
168
+
194
169
  return this.options;
195
170
  }
196
171
 
197
172
  render() {
198
- return html`<div>
199
- <div class="header">
200
- <div class="tabs">
201
- <slot name="title" class="title"></slot>
202
- <gv-option small .options="${this._contextualOptions}" @gv-option:select="${this._onClick}" .value="${this.value}"></gv-option>
203
- </div>
204
- </div>
205
- <slot name="content"></slot>
206
- </div>`;
173
+ return html`<div> <div class="header"> <div class="tabs"> <slot name="title" class="title"></slot> <gv-option small .options="${this._contextualOptions}" @gv-option:select="${this._onClick}" .value="${this.value}"></gv-option> </div> </div> <slot name="content"></slot> </div>`;
207
174
  }
208
- }
209
175
 
176
+ }
210
177
  window.customElements.define('gv-tabs', GvTabs);
178
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL29yZ2FuaXNtcy9ndi10YWJzLmpzIl0sIm5hbWVzIjpbImNzcyIsIkxpdEVsZW1lbnQiLCJodG1sIiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsIkd2VGFicyIsInByb3BlcnRpZXMiLCJvcHRpb25zIiwidHlwZSIsIkFycmF5IiwiX29wdGlvbnMiLCJhdHRyaWJ1dGUiLCJ2YWx1ZSIsIlN0cmluZyIsInJlZmxlY3QiLCJ2YWxpZGF0b3IiLCJGdW5jdGlvbiIsImRpc2FibGVkIiwiQm9vbGVhbiIsInNtYWxsIiwidHJ1bmNhdGUiLCJzdHlsZXMiLCJfZ2V0Q29udGVudCIsImNvbnRlbnQiLCJzaGFkb3dSb290IiwicXVlcnlTZWxlY3RvciIsImFzc2lnbmVkTm9kZXMiLCJmaXJzdFVwZGF0ZWQiLCJsZW5ndGgiLCJpZCIsImlzQXJyYXkiLCJtYXAiLCJvcHRpb24iLCJ0aXRsZSIsInVwZGF0ZWQiLCJmb3JFYWNoIiwiYyIsImNsYXNzTGlzdCIsInJlbW92ZSIsInRhcmdldCIsImFkZCIsIl9jaGFuZ2VUYWIiLCJmcm9tIiwidG8iLCJfb25DbGljayIsImRldGFpbCIsImZpbmQiLCJlIiwiY29udGFpbnMiLCJ0aGVuIiwiY2F0Y2giLCJfY29udGV4dHVhbE9wdGlvbnMiLCJsYWJlbCIsInN1YnN0cmluZyIsInJlbmRlciIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxHQUFULEVBQWNDLFVBQWQsRUFBMEJDLElBQTFCLFFBQXNDLEtBQXRDO0FBQ0EsT0FBTyx3QkFBUDtBQUNBLFNBQVNDLG1CQUFULFFBQW9DLGVBQXBDO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNzcywgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgJy4uL21vbGVjdWxlcy9ndi1vcHRpb24nO1xuaW1wb3J0IHsgZGlzcGF0Y2hDdXN0b21FdmVudCB9IGZyb20gJy4uL2xpYi9ldmVudHMnO1xuXG4vKipcbiAqIFRhYnMgY29tcG9uZW50XG4gKlxuICogKiAjIyBEZXRhaWxzXG4gKiAqIFRoaXMgY29tcG9uZW50IHVzZSBndi1vcHRpb24gY29tcG9uZW50IHRvIGdlbmVyYXRlIHRhYnMuXG4gKlxuICogQGF0dHIge0FycmF5PGlkOiBzdHJpbmcgfCB7aWQsIHRpdGxlPywgaWNvbj8sIGFjdGl2ZT8sIGRlc2NyaXB0aW9uPywgbGFiZWw/fT59IG9wdGlvbnMgLSBBbiBhcnJheSBvZiBvcHRpb25zIGZvciBndi1vcHRpb24gc3ViIGNvbXBvbmVudFxuICogQHNsb3QgY29udGVudCAtIExpc3Qgb2YgZWxlbWVudHMgZm9yIHRhYnMgY29udGVudC4gU2hvdWxkIGhhdmUgYW4gaWQgcmVsYXRlZCB0byBvcHRpb25zLlxuICpcbiAqIEBhdHRyIHtTdHJpbmd9IHZhbHVlIC0gdGhlIG9wZW5lZCB0YWIgaWRcbiAqIEBhdHRyIHtCb29sZWFufSBkaXNhYmxlZCAtIHRydWUgaWYgZGlzYWJsZWRcbiAqIEBhdHRyIHtCb29sZWFufSBzbWFsbCAtIHRydWUgaWYgeW91IHdhbnQgZGlzcGxheSB0YWJzIGJlbG93IG9mIHRpdGxlXG4gKiBAYXR0ciB7Qm9vbGVhbn0gdHJ1bmNhdGUgLSB0cnVlIGlmIHlvdSB3YW50IHRydW5jYXRlIHRhYnMgdGl0bGVcbiAqIEBhdHRyIHtGdW5jdGlvbn0gdmFsaWRhdG9yIC0gYSBmdW5jdGlvbiB0aGF0J3MgY2FsbHMgd2hlbiB1c2VyIGNoYW5nZSB0YWIsIHRoaXMgaXMgdXNlZnVsIHRvIHZhbGlkYXRlIHRhYiBjaGFuZ2UuXG4gKlxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3YtdGFicy1vcHRpb25zLS1tPTBdIC0gVGFicyBvcHRpb25zIG1hcmdpblxuICovXG5leHBvcnQgY2xhc3MgR3ZUYWJzIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW9uczogeyB0eXBlOiBBcnJheSB9LFxuICAgICAgX29wdGlvbnM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIHZhbHVlOiB7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgdmFsaWRhdG9yOiB7IHR5cGU6IEZ1bmN0aW9uIH0sXG4gICAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICBzbWFsbDogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICB0cnVuY2F0ZTogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBsYW5ndWFnZT1jc3NcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIH1cblxuICAgICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NvbnRlbnQnXSkge1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDM1MG1zIGVhc2UtaW4tb3V0O1xuICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgbGVmdDogLTk5OTlweDtcbiAgICAgICAgICB0b3A6IC05OTk5cHg7XG4gICAgICAgIH1cblxuICAgICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NvbnRlbnQnXS5jdXJyZW50KSB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICAgIHRvcDogYXV0bztcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aXRsZSB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuYWN0aW9ucyB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRhYnMge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgICAgIC0tZ3Ytb3B0aW9uLS1iZHJzOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgOmhvc3QoW3NtYWxsXSkgLnRhYnMge1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICA6aG9zdChbc21hbGxdKSBndi1vcHRpb24ge1xuICAgICAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3Ytb3B0aW9uIHtcbiAgICAgICAgICBtYXJnaW46IHZhcigtLWd2LXRhYnMtb3B0aW9ucy0tbSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICA6OnNsb3R0ZWQoZ3YtYnV0dG9uKSB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDJweDtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgX2dldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdzbG90W25hbWU9XCJjb250ZW50XCJdJyk7XG4gICAgcmV0dXJuIGNvbnRlbnQuYXNzaWduZWROb2RlcygpO1xuICB9XG5cbiAgZmlyc3RVcGRhdGVkKCkge1xuICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwgJiYgdGhpcy5vcHRpb25zICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm9wdGlvbnNbMF0uaWQ7XG4gICAgfVxuICB9XG5cbiAgc2V0IG9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB7IGlkOiBvcHRpb24sIHRpdGxlOiBvcHRpb24gfTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24udGl0bGUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7IGlkOiBvcHRpb24uaWQsIHRpdGxlOiBvcHRpb24uaWQgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICB1cGRhdGVkKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLl9nZXRDb250ZW50KCk7XG4gICAgY29udGVudC5mb3JFYWNoKChjKSA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ2N1cnJlbnQnKSk7XG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucXVlcnlTZWxlY3RvcihgIyR7dGhpcy52YWx1ZX1gKTtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ2N1cnJlbnQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudFswXS5jbGFzc0xpc3QuYWRkKCdjdXJyZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgX2NoYW5nZVRhYihmcm9tLCBjb250ZW50LCB2YWx1ZSkge1xuICAgIGZyb20uY2xhc3NMaXN0LnJlbW92ZSgnY3VycmVudCcpO1xuICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZCgnY3VycmVudCcpO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdjaGFuZ2UnLCB7IHZhbHVlLCBmcm9tOiBmcm9tLmlkLCB0bzogY29udGVudC5pZCB9KTtcbiAgfVxuXG4gIF9vbkNsaWNrKHsgZGV0YWlsIH0pIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGZyb20gPSB0aGlzLl9nZXRDb250ZW50KCkuZmluZCgoZSkgPT4gZS5jbGFzc0xpc3QuY29udGFpbnMoJ2N1cnJlbnQnKSk7XG4gICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKGAjJHtkZXRhaWwuaWR9YCk7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3Ytb3B0aW9uJykudmFsdWUgPSBmcm9tLmlkO1xuICAgICAgaWYgKHRoaXMudmFsaWRhdG9yKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdG9yKHsgZnJvbTogZnJvbS5pZCwgdG86IGNvbnRlbnQuaWQgfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VUYWIoZnJvbSwgY29udGVudCwgZGV0YWlsLmlkKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jaGFuZ2VUYWIoZnJvbSwgY29udGVudCwgZGV0YWlsLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgX2NvbnRleHR1YWxPcHRpb25zKCkge1xuICAgIGlmICh0aGlzLnRydW5jYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlICE9PSBvcHRpb24uaWQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IG9wdGlvbi5sYWJlbCB8fCBvcHRpb24udGl0bGU7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ub3B0aW9uLCBsYWJlbDogbGFiZWwuc3Vic3RyaW5nKDAsIDEpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cInRpdGxlXCIgY2xhc3M9XCJ0aXRsZVwiPjwvc2xvdD5cbiAgICAgICAgICA8Z3Ytb3B0aW9uIHNtYWxsIC5vcHRpb25zPVwiJHt0aGlzLl9jb250ZXh0dWFsT3B0aW9uc31cIiBAZ3Ytb3B0aW9uOnNlbGVjdD1cIiR7dGhpcy5fb25DbGlja31cIiAudmFsdWU9XCIke3RoaXMudmFsdWV9XCI+PC9ndi1vcHRpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8c2xvdCBuYW1lPVwiY29udGVudFwiPjwvc2xvdD5cbiAgICA8L2Rpdj5gO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LXRhYnMnLCBHdlRhYnMpO1xuIl19
@@ -18,7 +18,6 @@ import '../molecules/gv-nav';
18
18
  import { repeat } from 'lit/directives/repeat';
19
19
  import { classMap } from 'lit/directives/class-map';
20
20
  import { isSameRoutes } from '../lib/utils';
21
-
22
21
  /**
23
22
  * User menu
24
23
  *
@@ -43,161 +42,33 @@ import { isSameRoutes } from '../lib/utils';
43
42
  * @cssprop {Length} [--gv-user-menu-link-a--ph=0px] - Link horizontal padding
44
43
  * @cssprop {String} [--gv-user-menu-link--ta=right] - Text align
45
44
  */
45
+
46
46
  export class GvUserMenu extends LitElement {
47
47
  static get properties() {
48
48
  return {
49
- avatar: { type: String },
50
- routes: { type: Array },
51
- _routes: { type: Array, attribute: false },
52
- _isClosed: { type: Boolean, attribute: false },
53
- username: { type: String },
49
+ avatar: {
50
+ type: String
51
+ },
52
+ routes: {
53
+ type: Array
54
+ },
55
+ _routes: {
56
+ type: Array,
57
+ attribute: false
58
+ },
59
+ _isClosed: {
60
+ type: Boolean,
61
+ attribute: false
62
+ },
63
+ username: {
64
+ type: String
65
+ }
54
66
  };
55
67
  }
56
68
 
57
69
  static get styles() {
58
- return [
59
- // language=css
60
- css`
61
- :host {
62
- --bdc: var(--gv-user-menu--bdc, lightgrey);
63
- --c: var(--gv-user-menu--c, var(--gv-theme-font-color-dark, #262626));
64
- --bgc: var(--gv-user-menu--bgc, transparent);
65
- --list-bgc: var(--gv-user-menu-list--bgc, var(--gv-theme-neutral-color-lightest, #ffffff));
66
- --hover-bgc: var(--gv-user-menu-hover--bgc, var(--gv-theme-color-light, #86c3d0));
67
- --gv-link-active--c: var(--gv-user-menu-hover--c, var(--gv-theme-color-dark, #28444f));
68
- --gv-icon--c: var(--gv-user-menu-icon--c, var(--gv-theme-neutral-color-darkest, #000000));
69
- --gv-icon--s: var(--gv-user-menu-icon--s, 16px);
70
- --gv-link-a--ph: var(--gv-user-menu-link-a--ph, 0px);
71
- --gv-link--ta: var(--gv-user-menu-link--ta, right);
72
- user-select: none;
73
- }
74
-
75
- .user-menu {
76
- list-style: none;
77
- margin: 0;
78
- padding: 0;
79
- display: inline-block;
80
- position: relative;
81
- }
82
-
83
- .user-menu__title {
84
- background-color: var(--bgc);
85
- border-left: 1px solid var(--bdc);
86
- color: var(--c);
87
- cursor: pointer;
88
- line-height: 40px;
89
- padding: 8px 24px;
90
- display: inline-flex;
91
- align-items: center;
92
- justify-content: space-between;
93
- min-width: 175px;
94
- text-shadow: var(--gv-user-menu--tsh, none);
95
- }
96
-
97
- ::slotted(*) {
98
- height: 40px;
99
- width: 40px;
100
- }
101
-
102
- .user-menu__title.no-user {
103
- padding: 5px 24px;
104
- }
105
-
106
- .user-menu__title gv-link {
107
- --gv-link-a--ph: 0;
108
- --gv-link-a--pv: 0;
109
- }
110
-
111
- .user-menu__title span {
112
- flex: 1;
113
- text-align: center;
114
- margin: 0 0.4rem;
115
- }
116
-
117
- .user-menu__title > gv-icon {
118
- transition: all 0.3s ease 0s;
119
- }
120
-
121
- .user-menu__list {
122
- position: absolute;
123
- background-color: var(--list-bgc);
124
- list-style: none;
125
- padding: 0;
126
- transition: all 0.3s ease 0s;
127
- width: 100%;
128
- }
129
-
130
- .user-menu__list__item {
131
- border-left: 1px solid var(--bdc);
132
- display: flex;
133
- align-items: center;
134
- transition: all 0.5s ease;
135
- padding: 2px 30px;
136
- }
137
-
138
- .user-menu__list__item:last-child {
139
- border-bottom: 1px solid var(--bdc);
140
- }
141
-
142
- .user-menu__list__item:hover {
143
- background-color: var(--hover-bgc);
144
- border-left: 1px dotted var(--bdc);
145
- font-weight: 500;
146
- }
147
-
148
- gv-link {
149
- margin: 0px;
150
- display: flex;
151
- width: 100%;
152
- }
153
-
154
- .separator {
155
- border-top: 1px solid var(--bdc);
156
- }
157
-
158
- .active {
159
- background-color: var(--gv-theme-neutral-color-dark, #d9d9d9);
160
- font-weight: bold;
161
- }
162
-
163
- /** for animations */
164
- .user-menu__list {
165
- visibility: visible;
166
- opacity: 1;
167
- transform: translateY(0%);
168
- z-index: 100;
169
- transition-delay: 0s, 0s, 0.2s;
170
- }
171
-
172
- .user-menu__list__group {
173
- border-top: 1px solid var(--bdc);
174
- background-color: var(--gv-theme-neutral-color-light, #efefef);
175
- padding-left: 0;
176
- }
177
-
178
- .user-menu__list__group__title {
179
- font-size: small;
180
- color: var(--gv-theme-color-darker, #383e3f);
181
- border-left: 1px solid var(--bdc);
182
- padding-left: 10px;
183
- }
184
-
185
- .closed .user-menu__list {
186
- visibility: hidden;
187
- opacity: 0;
188
- transform: translateY(-2em);
189
- z-index: -1;
190
- }
191
-
192
- gv-icon {
193
- transform: rotate(0deg);
194
- }
195
-
196
- .closed gv-icon {
197
- transform: rotate(-180deg);
198
- }
199
- `,
200
- ];
70
+ return [// language=css
71
+ css`:host{--bdc:var(--gv-user-menu--bdc, lightgrey);--c:var(--gv-user-menu--c, var(--gv-theme-font-color-dark, #262626));--bgc:var(--gv-user-menu--bgc, transparent);--list-bgc:var(--gv-user-menu-list--bgc, var(--gv-theme-neutral-color-lightest, #ffffff));--hover-bgc:var(--gv-user-menu-hover--bgc, var(--gv-theme-color-light, #86c3d0));--gv-link-active--c:var(--gv-user-menu-hover--c, var(--gv-theme-color-dark, #28444f));--gv-icon--c:var(--gv-user-menu-icon--c, var(--gv-theme-neutral-color-darkest, #000000));--gv-icon--s:var(--gv-user-menu-icon--s, 16px);--gv-link-a--ph:var(--gv-user-menu-link-a--ph, 0px);--gv-link--ta:var(--gv-user-menu-link--ta, right);user-select:none}.user-menu{list-style:none;margin:0;padding:0;display:inline-block;position:relative}.user-menu__title{background-color:var(--bgc);border-left:1px solid var(--bdc);color:var(--c);cursor:pointer;line-height:40px;padding:8px 24px;display:inline-flex;align-items:center;justify-content:space-between;min-width:175px;text-shadow:var(--gv-user-menu--tsh,none)}::slotted(*){height:40px;width:40px}.user-menu__title.no-user{padding:5px 24px}.user-menu__title gv-link{--gv-link-a--ph:0;--gv-link-a--pv:0}.user-menu__title span{flex:1;text-align:center;margin:0 .4rem}.user-menu__title>gv-icon{transition:all .3s ease 0s}.user-menu__list{position:absolute;background-color:var(--list-bgc);list-style:none;padding:0;transition:all .3s ease 0s;width:100%}.user-menu__list__item{border-left:1px solid var(--bdc);display:flex;align-items:center;transition:all .5s ease;padding:2px 30px}.user-menu__list__item:last-child{border-bottom:1px solid var(--bdc)}.user-menu__list__item:hover{background-color:var(--hover-bgc);border-left:1px dotted var(--bdc);font-weight:500}gv-link{margin:0;display:flex;width:100%}.separator{border-top:1px solid var(--bdc)}.active{background-color:var(--gv-theme-neutral-color-dark,#d9d9d9);font-weight:700}.user-menu__list{visibility:visible;opacity:1;transform:translateY(0);z-index:100;transition-delay:0s,0s,.2s}.user-menu__list__group{border-top:1px solid var(--bdc);background-color:var(--gv-theme-neutral-color-light,#efefef);padding-left:0}.user-menu__list__group__title{font-size:small;color:var(--gv-theme-color-darker,#383e3f);border-left:1px solid var(--bdc);padding-left:10px}.closed .user-menu__list{visibility:hidden;opacity:0;transform:translateY(-2em);z-index:-1}gv-icon{transform:rotate(0)}.closed gv-icon{transform:rotate(-180deg)}`];
201
72
  }
202
73
 
203
74
  constructor() {
@@ -224,11 +95,11 @@ export class GvUserMenu extends LitElement {
224
95
 
225
96
  set routes(candidate) {
226
97
  if (candidate) {
227
- Promise.resolve(candidate).then((candidates) => {
98
+ Promise.resolve(candidate).then(candidates => {
228
99
  if (candidates) {
229
- Promise.all(candidates).then((futureRoutes) => {
100
+ Promise.all(candidates).then(futureRoutes => {
230
101
  if (!isSameRoutes(this._routes, futureRoutes)) {
231
- this._routes = futureRoutes.filter((r) => r != null);
102
+ this._routes = futureRoutes.filter(r => r != null);
232
103
  }
233
104
  });
234
105
  } else {
@@ -243,72 +114,36 @@ export class GvUserMenu extends LitElement {
243
114
  _renderFirstItem() {
244
115
  if (this._routes) {
245
116
  if (this.username) {
246
- return html`<li class="user-menu__title" @click=${this._onClick}>
247
- <div>
248
- <slot></slot>
249
- </div>
250
- <span>${this.username}</span>
251
- <gv-icon shape="design:triangle"></gv-icon>
252
- </li>`;
117
+ return html`<li class="user-menu__title" @click="${this._onClick}"> <div> <slot></slot> </div> <span>${this.username}</span> <gv-icon shape="design:triangle"></gv-icon> </li>`;
253
118
  } else if (this._hasOneItem()) {
254
119
  const firstItem = this._routes[0];
255
- return html`<li class="user-menu__title no-user" @click=${this._onClick}>
256
- <gv-link .icon="${firstItem.icon}" .path="${firstItem.path}" .title="${firstItem.title}" @click=${this._onSelect}></gv-link>
257
- </li>`;
120
+ return html`<li class="user-menu__title no-user" @click="${this._onClick}"> <gv-link .icon="${firstItem.icon}" .path="${firstItem.path}" .title="${firstItem.title}" @click="${this._onSelect}"></gv-link> </li>`;
258
121
  }
259
122
  }
123
+
260
124
  return html``;
261
125
  }
262
126
 
263
127
  render() {
264
- const classes = { closed: this._isClosed };
265
- if (this._routes) {
266
- return html`
267
- <nav class="${classMap(classes)}">
268
- <ul class="user-menu" @mouseleave=${this._onMouseLeave}>
269
- ${this._renderFirstItem()}
128
+ const classes = {
129
+ closed: this._isClosed
130
+ };
270
131
 
271
- <li class="user-menu__content">
272
- <ul class="user-menu__list">
273
- ${repeat(
274
- this._routes,
275
- (route) => route,
276
- (route, index) => html` ${this._hasOneItem() ? html`` : this._renderItem(route)} `,
277
- )}
278
- </ul>
279
- </li>
280
- </ul>
281
- </nav>
282
- `;
132
+ if (this._routes) {
133
+ return html` <nav class="${classMap(classes)}"> <ul class="user-menu" @mouseleave="${this._onMouseLeave}"> ${this._renderFirstItem()} <li class="user-menu__content"> <ul class="user-menu__list"> ${repeat(this._routes, route => route, (route, index) => html` ${this._hasOneItem() ? html`` : this._renderItem(route)} `)} </ul> </li> </ul> </nav> `;
283
134
  }
135
+
284
136
  return html``;
285
137
  }
286
138
 
287
139
  _renderItem(route) {
288
140
  if (route.routes) {
289
- return html`<ul class="user-menu__list__group">
290
- <span class="user-menu__list__group__title">${route.title}</span>
291
- ${repeat(
292
- route.routes,
293
- (childRoute) => childRoute,
294
- (childRoute, index) => html` ${this._renderItem(childRoute)} `,
295
- )}
296
- </ul>`;
141
+ return html`<ul class="user-menu__list__group"> <span class="user-menu__list__group__title">${route.title}</span> ${repeat(route.routes, childRoute => childRoute, (childRoute, index) => html` ${this._renderItem(childRoute)} `)} </ul>`;
297
142
  } else {
298
- return html`<li
299
- class="user-menu__list__item ${route.separator ? 'separator' : ''} ${route.active ? 'active' : ''}"
300
- style="${route.style}"
301
- >
302
- <gv-link
303
- .icon="${route.icon}"
304
- .path="${route.path}"
305
- .title="${route.title}"
306
- .target="${route.target}"
307
- @click=${this._onSelect}
308
- ></gv-link>
309
- </li>`;
143
+ return html`<li class="user-menu__list__item ${route.separator ? 'separator' : ''} ${route.active ? 'active' : ''}" style="${route.style}"> <gv-link .icon="${route.icon}" .path="${route.path}" .title="${route.title}" .target="${route.target}" @click="${this._onSelect}"></gv-link> </li>`;
310
144
  }
311
145
  }
312
- }
313
146
 
147
+ }
314
148
  window.customElements.define('gv-user-menu', GvUserMenu);
149
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL29yZ2FuaXNtcy9ndi11c2VyLW1lbnUuanMiXSwibmFtZXMiOlsiTGl0RWxlbWVudCIsImh0bWwiLCJjc3MiLCJyZXBlYXQiLCJjbGFzc01hcCIsImlzU2FtZVJvdXRlcyIsIkd2VXNlck1lbnUiLCJwcm9wZXJ0aWVzIiwiYXZhdGFyIiwidHlwZSIsIlN0cmluZyIsInJvdXRlcyIsIkFycmF5IiwiX3JvdXRlcyIsImF0dHJpYnV0ZSIsIl9pc0Nsb3NlZCIsIkJvb2xlYW4iLCJ1c2VybmFtZSIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiX29uQ2xpY2siLCJlIiwicHJldmVudERlZmF1bHQiLCJfb25Nb3VzZUxlYXZlIiwiX29uU2VsZWN0IiwiX2hhc09uZUl0ZW0iLCJsZW5ndGgiLCJjYW5kaWRhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJjYW5kaWRhdGVzIiwiYWxsIiwiZnV0dXJlUm91dGVzIiwiZmlsdGVyIiwiciIsIl9yZW5kZXJGaXJzdEl0ZW0iLCJmaXJzdEl0ZW0iLCJpY29uIiwicGF0aCIsInRpdGxlIiwicmVuZGVyIiwiY2xhc3NlcyIsImNsb3NlZCIsInJvdXRlIiwiaW5kZXgiLCJfcmVuZGVySXRlbSIsImNoaWxkUm91dGUiLCJzZXBhcmF0b3IiLCJhY3RpdmUiLCJzdHlsZSIsInRhcmdldCIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxVQUFULEVBQXFCQyxJQUFyQixFQUEyQkMsR0FBM0IsUUFBc0MsS0FBdEM7QUFDQSxPQUFPLHFCQUFQO0FBQ0EsU0FBU0MsTUFBVCxRQUF1Qix1QkFBdkI7QUFDQSxTQUFTQyxRQUFULFFBQXlCLDBCQUF6QjtBQUNBLFNBQVND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QUFDSyxNQUFOLEdBQWUsUUFBZixHQUEwQixFQUR0RixZQUVBTCxLQUFLLENBQUNNLEtBRk4sc0JBS0VOLEtBQUssQ0FBQ04sSUFMUixZQU1FTSxLQUFLLENBQUNMLElBTlIsYUFPR0ssS0FBSyxDQUFDSixLQVBULGNBUUlJLEtBQUssQ0FBQ08sTUFSVixhQVNFLEtBQUszQixTQVRQLG9CQUFYO0FBWUQ7QUFDRjs7QUF6UXdDO0FBNFEzQzRCLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsY0FBN0IsRUFBNkNoRCxVQUE3QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sLCBjc3MgfSBmcm9tICdsaXQnO1xuaW1wb3J0ICcuLi9tb2xlY3VsZXMvZ3YtbmF2JztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdCc7XG5pbXBvcnQgeyBjbGFzc01hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2NsYXNzLW1hcCc7XG5pbXBvcnQgeyBpc1NhbWVSb3V0ZXMgfSBmcm9tICcuLi9saWIvdXRpbHMnO1xuXG4vKipcbiAqIFVzZXIgbWVudVxuICpcbiAqICMjIERldGFpbHNcbiAqICogaGFzIEB0aGVtZSBmYWNldFxuICpcbiAqIEBmaXJlcyBndi1saW5rOmNsaWNrIC0gQ3VzdG9tIGV2ZW50IHdoZW4gbmF2IGxpbmsgY2xpY2tcbiAqXG4gKiBAYXR0ciB7QXJyYXl9IHJvdXRlcyAtIGRlZmluaXRpb24gb2YgdXNlciByb3V0ZXMgW3tpY29uOiBTdHJpbmcsIHBhdGg6IFN0cmluZywgdGl0bGU6IFByb21pc2U8U3RyaW5nPiwgYWN0aXZlOiBCb29sZWFuLCByb3V0ZXM6IEFycmF5PGFueT5dXG4gKiBAYXR0ciB7U3RyaW5nfSB1c2VybmFtZSAtIG5hbWUgb2YgdGhlIHVzZXJcbiAqIEBhdHRyIHtTdHJpbmd9IGF2YXRhciAtIHVybCBvZiB0aGUgdXNlciBhdmF0YXJcbiAqXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXVzZXItbWVudS0tYz12YXIoLS1ndi10aGVtZS1mb250LWNvbG9yLWRhcmssICMyNjI2MjYpXSAtIENvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXVzZXItbWVudS1ob3Zlci0tYz12YXIoLS1ndi10aGVtZS1jb2xvci1kYXJrLCAjMjg0NDRmKV0gLSBIb3ZlciBjb2xvclxuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi11c2VyLW1lbnUtLWJnYz10cmFuc3BhcmVudF0gLSBCYWNrZ3JvdW5kIGNvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXVzZXItbWVudS1saXN0LS1iZ2M9dmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1saWdodGVzdCwgI2ZmZmZmZildIC0gTGlzdCBiYWNrZ3JvdW5kIGNvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXVzZXItbWVudS1ob3Zlci0tYmdjPXZhcigtLWd2LXRoZW1lLWNvbG9yLWxpZ2h0LCAjODZjM2QwKV0gLSBIb3ZlciBiYWNrZ3JvdW5kIGNvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXVzZXItbWVudS0tYmRjPWxpZ2h0Z3JleV0gLSBCb3JkZXIgY29sb3JcbiAqIEBjc3Nwcm9wIHtTdHJpbmd9IFstLWd2LXVzZXItbWVudS0tdHNoPW5vbmVdIC0gVGV4dCBzaGFkb3dcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3YtdXNlci1tZW51LWljb24tLWM9dmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1kYXJrZXN0LCAjMDAwMDAwKV0gLSBJY29uIGNvbG9yXG4gKiBAY3NzcHJvcCB7TGVuZ3RofSBbLS1ndi11c2VyLW1lbnUtaWNvbi0tcz0xNnB4XSAtIEhlaWdodCBhbmQgaWNvbiB3aWR0aFxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3YtdXNlci1tZW51LWxpbmstYS0tcGg9MHB4XSAtIExpbmsgaG9yaXpvbnRhbCBwYWRkaW5nXG4gKiBAY3NzcHJvcCB7U3RyaW5nfSBbLS1ndi11c2VyLW1lbnUtbGluay0tdGE9cmlnaHRdIC0gVGV4dCBhbGlnblxuICovXG5leHBvcnQgY2xhc3MgR3ZVc2VyTWVudSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF2YXRhcjogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIHJvdXRlczogeyB0eXBlOiBBcnJheSB9LFxuICAgICAgX3JvdXRlczogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2lzQ2xvc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIHVzZXJuYW1lOiB7IHR5cGU6IFN0cmluZyB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLy8gbGFuZ3VhZ2U9Y3NzXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICAtLWJkYzogdmFyKC0tZ3YtdXNlci1tZW51LS1iZGMsIGxpZ2h0Z3JleSk7XG4gICAgICAgICAgLS1jOiB2YXIoLS1ndi11c2VyLW1lbnUtLWMsIHZhcigtLWd2LXRoZW1lLWZvbnQtY29sb3ItZGFyaywgIzI2MjYyNikpO1xuICAgICAgICAgIC0tYmdjOiB2YXIoLS1ndi11c2VyLW1lbnUtLWJnYywgdHJhbnNwYXJlbnQpO1xuICAgICAgICAgIC0tbGlzdC1iZ2M6IHZhcigtLWd2LXVzZXItbWVudS1saXN0LS1iZ2MsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlc3QsICNmZmZmZmYpKTtcbiAgICAgICAgICAtLWhvdmVyLWJnYzogdmFyKC0tZ3YtdXNlci1tZW51LWhvdmVyLS1iZ2MsIHZhcigtLWd2LXRoZW1lLWNvbG9yLWxpZ2h0LCAjODZjM2QwKSk7XG4gICAgICAgICAgLS1ndi1saW5rLWFjdGl2ZS0tYzogdmFyKC0tZ3YtdXNlci1tZW51LWhvdmVyLS1jLCB2YXIoLS1ndi10aGVtZS1jb2xvci1kYXJrLCAjMjg0NDRmKSk7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi11c2VyLW1lbnUtaWNvbi0tYywgdmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1kYXJrZXN0LCAjMDAwMDAwKSk7XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiB2YXIoLS1ndi11c2VyLW1lbnUtaWNvbi0tcywgMTZweCk7XG4gICAgICAgICAgLS1ndi1saW5rLWEtLXBoOiB2YXIoLS1ndi11c2VyLW1lbnUtbGluay1hLS1waCwgMHB4KTtcbiAgICAgICAgICAtLWd2LWxpbmstLXRhOiB2YXIoLS1ndi11c2VyLW1lbnUtbGluay0tdGEsIHJpZ2h0KTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC51c2VyLW1lbnUge1xuICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC51c2VyLW1lbnVfX3RpdGxlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MpO1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tYmRjKTtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tYyk7XG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgIHBhZGRpbmc6IDhweCAyNHB4O1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgIG1pbi13aWR0aDogMTc1cHg7XG4gICAgICAgICAgdGV4dC1zaGFkb3c6IHZhcigtLWd2LXVzZXItbWVudS0tdHNoLCBub25lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIDo6c2xvdHRlZCgqKSB7XG4gICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnVzZXItbWVudV9fdGl0bGUubm8tdXNlciB7XG4gICAgICAgICAgcGFkZGluZzogNXB4IDI0cHg7XG4gICAgICAgIH1cblxuICAgICAgICAudXNlci1tZW51X190aXRsZSBndi1saW5rIHtcbiAgICAgICAgICAtLWd2LWxpbmstYS0tcGg6IDA7XG4gICAgICAgICAgLS1ndi1saW5rLWEtLXB2OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLnVzZXItbWVudV9fdGl0bGUgc3BhbiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgbWFyZ2luOiAwIDAuNHJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC51c2VyLW1lbnVfX3RpdGxlID4gZ3YtaWNvbiB7XG4gICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZSAwcztcbiAgICAgICAgfVxuXG4gICAgICAgIC51c2VyLW1lbnVfX2xpc3Qge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1saXN0LWJnYyk7XG4gICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UgMHM7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAudXNlci1tZW51X19saXN0X19pdGVtIHtcbiAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWJkYyk7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2U7XG4gICAgICAgICAgcGFkZGluZzogMnB4IDMwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAudXNlci1tZW51X19saXN0X19pdGVtOmxhc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1iZGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnVzZXItbWVudV9fbGlzdF9faXRlbTpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taG92ZXItYmdjKTtcbiAgICAgICAgICBib3JkZXItbGVmdDogMXB4IGRvdHRlZCB2YXIoLS1iZGMpO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIH1cblxuICAgICAgICBndi1saW5rIHtcbiAgICAgICAgICBtYXJnaW46IDBweDtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlcGFyYXRvciB7XG4gICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWJkYyk7XG4gICAgICAgIH1cblxuICAgICAgICAuYWN0aXZlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWRhcmssICNkOWQ5ZDkpO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIGZvciBhbmltYXRpb25zICovXG4gICAgICAgIC51c2VyLW1lbnVfX2xpc3Qge1xuICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICAgICAgICAgIHotaW5kZXg6IDEwMDtcbiAgICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAwcywgMHMsIDAuMnM7XG4gICAgICAgIH1cblxuICAgICAgICAudXNlci1tZW51X19saXN0X19ncm91cCB7XG4gICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWJkYyk7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1saWdodCwgI2VmZWZlZik7XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLnVzZXItbWVudV9fbGlzdF9fZ3JvdXBfX3RpdGxlIHtcbiAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ndi10aGVtZS1jb2xvci1kYXJrZXIsICMzODNlM2YpO1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tYmRjKTtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuY2xvc2VkIC51c2VyLW1lbnVfX2xpc3Qge1xuICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMmVtKTtcbiAgICAgICAgICB6LWluZGV4OiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LWljb24ge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNsb3NlZCBndi1pY29uIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9pc0Nsb3NlZCA9IHRydWU7XG4gIH1cblxuICBfb25DbGljayhlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuX2lzQ2xvc2VkID0gIXRoaXMuX2lzQ2xvc2VkO1xuICB9XG5cbiAgX29uTW91c2VMZWF2ZSgpIHtcbiAgICB0aGlzLl9pc0Nsb3NlZCA9IHRydWU7XG4gIH1cblxuICBfb25TZWxlY3QoKSB7XG4gICAgdGhpcy5faXNDbG9zZWQgPSB0cnVlO1xuICB9XG5cbiAgX2hhc09uZUl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMudXNlcm5hbWUgPT0gbnVsbCAmJiB0aGlzLl9yb3V0ZXMgJiYgdGhpcy5fcm91dGVzLmxlbmd0aCA9PT0gMTtcbiAgfVxuXG4gIHNldCByb3V0ZXMoY2FuZGlkYXRlKSB7XG4gICAgaWYgKGNhbmRpZGF0ZSkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKGNhbmRpZGF0ZSkudGhlbigoY2FuZGlkYXRlcykgPT4ge1xuICAgICAgICBpZiAoY2FuZGlkYXRlcykge1xuICAgICAgICAgIFByb21pc2UuYWxsKGNhbmRpZGF0ZXMpLnRoZW4oKGZ1dHVyZVJvdXRlcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFpc1NhbWVSb3V0ZXModGhpcy5fcm91dGVzLCBmdXR1cmVSb3V0ZXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3JvdXRlcyA9IGZ1dHVyZVJvdXRlcy5maWx0ZXIoKHIpID0+IHIgIT0gbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fcm91dGVzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JvdXRlcyA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlckZpcnN0SXRlbSgpIHtcbiAgICBpZiAodGhpcy5fcm91dGVzKSB7XG4gICAgICBpZiAodGhpcy51c2VybmFtZSkge1xuICAgICAgICByZXR1cm4gaHRtbGA8bGkgY2xhc3M9XCJ1c2VyLW1lbnVfX3RpdGxlXCIgQGNsaWNrPSR7dGhpcy5fb25DbGlja30+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3Bhbj4ke3RoaXMudXNlcm5hbWV9PC9zcGFuPlxuICAgICAgICAgIDxndi1pY29uIHNoYXBlPVwiZGVzaWduOnRyaWFuZ2xlXCI+PC9ndi1pY29uPlxuICAgICAgICA8L2xpPmA7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2hhc09uZUl0ZW0oKSkge1xuICAgICAgICBjb25zdCBmaXJzdEl0ZW0gPSB0aGlzLl9yb3V0ZXNbMF07XG4gICAgICAgIHJldHVybiBodG1sYDxsaSBjbGFzcz1cInVzZXItbWVudV9fdGl0bGUgbm8tdXNlclwiIEBjbGljaz0ke3RoaXMuX29uQ2xpY2t9PlxuICAgICAgICAgIDxndi1saW5rIC5pY29uPVwiJHtmaXJzdEl0ZW0uaWNvbn1cIiAucGF0aD1cIiR7Zmlyc3RJdGVtLnBhdGh9XCIgLnRpdGxlPVwiJHtmaXJzdEl0ZW0udGl0bGV9XCIgQGNsaWNrPSR7dGhpcy5fb25TZWxlY3R9PjwvZ3YtbGluaz5cbiAgICAgICAgPC9saT5gO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNsYXNzZXMgPSB7IGNsb3NlZDogdGhpcy5faXNDbG9zZWQgfTtcbiAgICBpZiAodGhpcy5fcm91dGVzKSB7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPG5hdiBjbGFzcz1cIiR7Y2xhc3NNYXAoY2xhc3Nlcyl9XCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwidXNlci1tZW51XCIgQG1vdXNlbGVhdmU9JHt0aGlzLl9vbk1vdXNlTGVhdmV9PlxuICAgICAgICAgICAgJHt0aGlzLl9yZW5kZXJGaXJzdEl0ZW0oKX1cblxuICAgICAgICAgICAgPGxpIGNsYXNzPVwidXNlci1tZW51X19jb250ZW50XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cInVzZXItbWVudV9fbGlzdFwiPlxuICAgICAgICAgICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcm91dGVzLFxuICAgICAgICAgICAgICAgICAgKHJvdXRlKSA9PiByb3V0ZSxcbiAgICAgICAgICAgICAgICAgIChyb3V0ZSwgaW5kZXgpID0+IGh0bWxgICR7dGhpcy5faGFzT25lSXRlbSgpID8gaHRtbGBgIDogdGhpcy5fcmVuZGVySXRlbShyb3V0ZSl9IGAsXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9uYXY+XG4gICAgICBgO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG5cbiAgX3JlbmRlckl0ZW0ocm91dGUpIHtcbiAgICBpZiAocm91dGUucm91dGVzKSB7XG4gICAgICByZXR1cm4gaHRtbGA8dWwgY2xhc3M9XCJ1c2VyLW1lbnVfX2xpc3RfX2dyb3VwXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXNlci1tZW51X19saXN0X19ncm91cF9fdGl0bGVcIj4ke3JvdXRlLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgJHtyZXBlYXQoXG4gICAgICAgICAgcm91dGUucm91dGVzLFxuICAgICAgICAgIChjaGlsZFJvdXRlKSA9PiBjaGlsZFJvdXRlLFxuICAgICAgICAgIChjaGlsZFJvdXRlLCBpbmRleCkgPT4gaHRtbGAgJHt0aGlzLl9yZW5kZXJJdGVtKGNoaWxkUm91dGUpfSBgLFxuICAgICAgICApfVxuICAgICAgPC91bD5gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaHRtbGA8bGlcbiAgICAgICAgY2xhc3M9XCJ1c2VyLW1lbnVfX2xpc3RfX2l0ZW0gJHtyb3V0ZS5zZXBhcmF0b3IgPyAnc2VwYXJhdG9yJyA6ICcnfSAke3JvdXRlLmFjdGl2ZSA/ICdhY3RpdmUnIDogJyd9XCJcbiAgICAgICAgc3R5bGU9XCIke3JvdXRlLnN0eWxlfVwiXG4gICAgICA+XG4gICAgICAgIDxndi1saW5rXG4gICAgICAgICAgLmljb249XCIke3JvdXRlLmljb259XCJcbiAgICAgICAgICAucGF0aD1cIiR7cm91dGUucGF0aH1cIlxuICAgICAgICAgIC50aXRsZT1cIiR7cm91dGUudGl0bGV9XCJcbiAgICAgICAgICAudGFyZ2V0PVwiJHtyb3V0ZS50YXJnZXR9XCJcbiAgICAgICAgICBAY2xpY2s9JHt0aGlzLl9vblNlbGVjdH1cbiAgICAgICAgPjwvZ3YtbGluaz5cbiAgICAgIDwvbGk+YDtcbiAgICB9XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3YtdXNlci1tZW51JywgR3ZVc2VyTWVudSk7XG4iXX0=