@magicx-eng/ai-autocomplete-angular 0.42.1 → 0.44.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.
@@ -1,8 +1,17 @@
1
1
  import { CommonModule } from "@angular/common";
2
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, } from "@angular/core";
3
- import { attachProductRowWheel, productImageSources, productInitial, uiStringsFor, } from "@magicx-eng/ai-autocomplete-vanilla";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, inject, Output, ViewChild, ViewEncapsulation, } from "@angular/core";
3
+ import { attachProductRowWheel, productImageSources, productInitial, productPhotoFill, uiStringsFor, } from "@magicx-eng/ai-autocomplete-vanilla";
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/common";
6
+ /**
7
+ * What makes a card's product "the same" for its cart button: every field
8
+ * vanilla's `cardKey` rebuilds the card on. A price-only change keeps it.
9
+ */
10
+ function cartIdentity(product) {
11
+ return [product.id, product.title, product.url, product.imageUrl, product.vendor]
12
+ .map((field) => field ?? "")
13
+ .join("\0");
14
+ }
6
15
  /**
7
16
  * Internal product strip rendered below the dropdown's options grid. Mirrors
8
17
  * `packages/react/src/components/ProductStrip.tsx` and the vanilla core's
@@ -39,6 +48,11 @@ export class ProductStripComponent {
39
48
  this.imageFallback = "image";
40
49
  /** The words of the widget language. Default: English. */
41
50
  this.strings = uiStringsFor();
51
+ /**
52
+ * Set when the integration adds to cart: each card that is not sold out
53
+ * draws a cart button, whose press calls this instead of emitting `select`.
54
+ */
55
+ this.addToCart = null;
42
56
  this.initial = productInitial;
43
57
  /**
44
58
  * Per product id, the `src`s that failed to load: a card moves on to the
@@ -48,6 +62,8 @@ export class ProductStripComponent {
48
62
  this.failedImages = new Map();
49
63
  /** Per product id, the `src` that last finished loading; its tile drops the fill. */
50
64
  this.loadedImages = new Map();
65
+ /** Per product id, how much of the tile the loaded photo fills (productPhotoFill). */
66
+ this.photoFills = new Map();
51
67
  this.select = new EventEmitter();
52
68
  /**
53
69
  * Focus moved into / out of the strip. The panel closes on blur by default
@@ -57,6 +73,14 @@ export class ProductStripComponent {
57
73
  */
58
74
  this.focusChange = new EventEmitter();
59
75
  this.detachWheel = null;
76
+ this.cdr = inject(ChangeDetectorRef);
77
+ /**
78
+ * Per product id, the cart button's state while it isn't at rest, with the
79
+ * product identity it belongs to and the press that set it (a settle from an
80
+ * earlier press, or for a card since reset, is dropped).
81
+ */
82
+ this.carts = new Map();
83
+ this.destroyed = false;
60
84
  this.trackByProduct = (_, product) => product.id;
61
85
  }
62
86
  ngOnChanges() {
@@ -66,6 +90,15 @@ export class ProductStripComponent {
66
90
  if (!failed.every((src) => current.includes(src)))
67
91
  this.failedImages.delete(id);
68
92
  }
93
+ // A card whose product changed, left the strip or lost its button puts the
94
+ // button back at rest — what rebuilding the card does in vanilla.
95
+ const byId = new Map(this.products.map((product) => [product.id, product]));
96
+ for (const [id, cart] of this.carts) {
97
+ const product = byId.get(id);
98
+ if (!product || !this.hasCart(product) || cartIdentity(product) !== cart.identity) {
99
+ this.carts.delete(id);
100
+ }
101
+ }
69
102
  }
70
103
  imageSource(product) {
71
104
  const failed = this.failedImages.get(product.id) ?? [];
@@ -76,13 +109,35 @@ export class ProductStripComponent {
76
109
  const src = this.imageSource(product);
77
110
  return src !== null && this.loadedImages.get(product.id) === src;
78
111
  }
79
- onImageLoad(product, src) {
112
+ onImageLoad(product, src, event) {
80
113
  this.loadedImages.set(product.id, src);
114
+ const img = event?.target;
115
+ const fill = img ? productPhotoFill(img.naturalWidth, img.naturalHeight) : null;
116
+ if (fill)
117
+ this.photoFills.set(product.id, fill);
118
+ else
119
+ this.photoFills.delete(product.id);
81
120
  }
82
121
  onImageError(product) {
83
122
  const src = this.imageSource(product);
84
123
  if (src)
85
124
  this.failedImages.set(product.id, [...(this.failedImages.get(product.id) ?? []), src]);
125
+ // The next source, or the placeholder, fills the tile until it loads.
126
+ this.photoFills.delete(product.id);
127
+ }
128
+ /**
129
+ * The card's photo-fill custom properties, which put the cart button inside
130
+ * the photo's own corner. Null until the photo loads.
131
+ */
132
+ photoFillStyle(product) {
133
+ const fill = this.photoFills.get(product.id);
134
+ // Only the photo on screen counts: a changed or removed image drops it.
135
+ if (!fill || !this.imageLoaded(product))
136
+ return null;
137
+ return {
138
+ "--aia-product-photo-fill-x": String(fill.x),
139
+ "--aia-product-photo-fill-y": String(fill.y),
140
+ };
86
141
  }
87
142
  /**
88
143
  * A mouse wheel over the row scrolls it sideways. The row sits inside the
@@ -94,9 +149,56 @@ export class ProductStripComponent {
94
149
  this.detachWheel = ref ? attachProductRowWheel(ref.nativeElement) : null;
95
150
  }
96
151
  ngOnDestroy() {
152
+ this.destroyed = true;
97
153
  this.detachWheel?.();
98
154
  this.detachWheel = null;
99
155
  }
156
+ /** A sold-out product can't be added, so its card has no button at all. */
157
+ hasCart(product) {
158
+ return this.addToCart !== null && product.available !== false;
159
+ }
160
+ cartState(product) {
161
+ return this.carts.get(product.id)?.state ?? null;
162
+ }
163
+ onCartKeyDown(event, product) {
164
+ // Keys never reach the card, whose own Enter / Space would select it.
165
+ if (event.key !== "Enter" && event.key !== " ")
166
+ return;
167
+ this.onCartPress(event, product);
168
+ }
169
+ /**
170
+ * Mirrors vanilla's `buildCartButton` press: adding → added, or rest on a
171
+ * rejection. The check stays until the product changes; another press adds again.
172
+ */
173
+ onCartPress(event, product) {
174
+ event.preventDefault();
175
+ event.stopPropagation();
176
+ const handler = this.addToCart;
177
+ if (!handler || this.cartState(product) === "adding")
178
+ return;
179
+ const id = product.id;
180
+ const press = {};
181
+ this.carts.set(id, { state: "adding", identity: cartIdentity(product), press });
182
+ this.cdr.markForCheck();
183
+ let pending;
184
+ try {
185
+ pending = Promise.resolve(handler(product));
186
+ }
187
+ catch (error) {
188
+ pending = Promise.reject(error);
189
+ }
190
+ pending.then(() => this.settleCart(id, press, "added"), () => this.settleCart(id, press, null));
191
+ }
192
+ settleCart(id, press, state) {
193
+ const cart = this.carts.get(id);
194
+ if (this.destroyed || cart?.press !== press)
195
+ return;
196
+ if (state)
197
+ cart.state = state;
198
+ else
199
+ this.carts.delete(id);
200
+ this.cdr.markForCheck();
201
+ }
100
202
  get labelId() {
101
203
  return `${this.listboxId}-products-label`;
102
204
  }
@@ -130,10 +232,10 @@ export class ProductStripComponent {
130
232
  }
131
233
  }
132
234
  ProductStripComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProductStripComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
133
- ProductStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ProductStripComponent, isStandalone: true, selector: "aia-product-strip", inputs: { products: "products", listboxId: "listboxId", focusable: "focusable", layout: "layout", imageFallback: "imageFallback", strings: "strings" }, outputs: { select: "select", focusChange: "focusChange" }, viewQueries: [{ propertyName: "row", first: true, predicate: ["row"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">{{ strings.products }}</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n [attr.data-aia-image-loaded]=\"imageLoaded(product) ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (load)=\"onImageLoad(product, src)\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">{{ strings.soldOut }}</span>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-media[data-aia-image-loaded]{background:transparent}.aia-product-image{display:block;width:auto;max-width:100%;height:100%;margin:0 auto;border-radius:var(--aia-product-image-radius, 8px);object-fit:contain}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
235
+ ProductStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ProductStripComponent, isStandalone: true, selector: "aia-product-strip", inputs: { products: "products", listboxId: "listboxId", focusable: "focusable", layout: "layout", imageFallback: "imageFallback", strings: "strings", addToCart: "addToCart" }, outputs: { select: "select", focusChange: "focusChange" }, viewQueries: [{ propertyName: "row", first: true, predicate: ["row"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">{{ strings.products }}</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n [attr.data-aia-product-has-cart]=\"hasCart(product) ? '' : null\"\n [style]=\"photoFillStyle(product)\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n [attr.data-aia-image-loaded]=\"imageLoaded(product) ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (load)=\"onImageLoad(product, src, $event)\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">{{ strings.soldOut }}</span>\n </span>\n\n <!-- The add-to-cart button: a child of the card rather than of the\n aria-hidden media tile; the stylesheet lifts it over the tile's\n bottom right corner. A role=\"button\" span, not a <button>:\n interactive content inside an <a> is invalid HTML. Its press never\n reaches the card, so it never selects. Sold-out cards have none. -->\n <span\n *ngIf=\"hasCart(product)\"\n class=\"aia-product-cart\"\n data-aia-product-cart=\"\"\n role=\"button\"\n [attr.aria-label]=\"strings.addToCart + ': ' + product.title\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n [attr.data-aia-cart-state]=\"cartState(product)\"\n [attr.aria-busy]=\"cartState(product) === 'adding' ? 'true' : null\"\n (click)=\"onCartPress($event, product)\"\n (keydown)=\"onCartKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path class=\"aia-product-cart-glyph\" d=\"M2 3h2.2l2.4 11.2a2 2 0 0 0 2 1.6h8.9a2 2 0 0 0 1.9-1.5L21 8H6\" />\n <path class=\"aia-product-cart-glyph\" d=\"M13.5 6.5v-4M11.5 4.5h4\" />\n <path class=\"aia-product-cart-check\" d=\"M5 12.5l4.5 4.5L19 7.5\" />\n <path class=\"aia-product-cart-spinner\" d=\"M12 4a8 8 0 1 0 8 8\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"9\" cy=\"20\" r=\"1.3\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"17.5\" cy=\"20\" r=\"1.3\" />\n </svg>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-media[data-aia-image-loaded]{background:transparent}.aia-product-image{display:block;width:auto;max-width:100%;height:100%;margin:0 auto;border-radius:var(--aia-product-image-radius, 8px);object-fit:contain}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product-cart{position:absolute;top:calc(var(--aia-product-card-width, 116px) - 12px - var(--aia-product-cart-size, 28px) - (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-y, 1)) / 2);right:calc(12px + (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-x, 1)) / 2);display:flex;align-items:center;justify-content:center;width:var(--aia-product-cart-size, 28px);height:var(--aia-product-cart-size, 28px);border-radius:999px;background:var(--aia-product-cart-bg, rgba(255, 255, 255, .94));color:var(--aia-product-cart-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 3px #00000038;cursor:pointer;transition:transform .15s ease,opacity .15s ease}.aia-product-cart:hover{transform:scale(1.08)}.aia-product-cart:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:2px}.aia-product-cart svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.aia-product-cart svg path{fill:none;stroke:currentColor}.aia-product-cart svg circle{fill:none;stroke:currentColor}.aia-product-cart-check{display:none}.aia-product-cart[data-aia-cart-state=adding]{cursor:progress}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-check{display:inline}.aia-product-cart-spinner,.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-spinner{display:inline}.aia-product-cart[data-aia-cart-state=adding] svg{animation:magicx-aia-product-cart-spin .8s linear infinite}@keyframes magicx-aia-product-cart-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.aia-product-cart[data-aia-cart-state=adding] svg{animation-duration:2s}}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}.aia-products[data-aia-products-layout=list] .aia-product-cart{top:50%;right:8px;transform:translateY(-50%)}.aia-products[data-aia-products-layout=list] .aia-product-cart:hover{transform:translateY(-50%) scale(1.08)}.aia-products[data-aia-products-layout=list] .aia-product[data-aia-product-has-cart]{padding-right:calc(var(--aia-product-cart-size, 28px) + 16px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
134
236
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProductStripComponent, decorators: [{
135
237
  type: Component,
136
- args: [{ selector: "aia-product-strip", standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">{{ strings.products }}</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n [attr.data-aia-image-loaded]=\"imageLoaded(product) ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (load)=\"onImageLoad(product, src)\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">{{ strings.soldOut }}</span>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-media[data-aia-image-loaded]{background:transparent}.aia-product-image{display:block;width:auto;max-width:100%;height:100%;margin:0 auto;border-radius:var(--aia-product-image-radius, 8px);object-fit:contain}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}\n"] }]
238
+ args: [{ selector: "aia-product-strip", standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">{{ strings.products }}</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n [attr.data-aia-product-has-cart]=\"hasCart(product) ? '' : null\"\n [style]=\"photoFillStyle(product)\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n [attr.data-aia-image-loaded]=\"imageLoaded(product) ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (load)=\"onImageLoad(product, src, $event)\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">{{ strings.soldOut }}</span>\n </span>\n\n <!-- The add-to-cart button: a child of the card rather than of the\n aria-hidden media tile; the stylesheet lifts it over the tile's\n bottom right corner. A role=\"button\" span, not a <button>:\n interactive content inside an <a> is invalid HTML. Its press never\n reaches the card, so it never selects. Sold-out cards have none. -->\n <span\n *ngIf=\"hasCart(product)\"\n class=\"aia-product-cart\"\n data-aia-product-cart=\"\"\n role=\"button\"\n [attr.aria-label]=\"strings.addToCart + ': ' + product.title\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n [attr.data-aia-cart-state]=\"cartState(product)\"\n [attr.aria-busy]=\"cartState(product) === 'adding' ? 'true' : null\"\n (click)=\"onCartPress($event, product)\"\n (keydown)=\"onCartKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path class=\"aia-product-cart-glyph\" d=\"M2 3h2.2l2.4 11.2a2 2 0 0 0 2 1.6h8.9a2 2 0 0 0 1.9-1.5L21 8H6\" />\n <path class=\"aia-product-cart-glyph\" d=\"M13.5 6.5v-4M11.5 4.5h4\" />\n <path class=\"aia-product-cart-check\" d=\"M5 12.5l4.5 4.5L19 7.5\" />\n <path class=\"aia-product-cart-spinner\" d=\"M12 4a8 8 0 1 0 8 8\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"9\" cy=\"20\" r=\"1.3\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"17.5\" cy=\"20\" r=\"1.3\" />\n </svg>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-media[data-aia-image-loaded]{background:transparent}.aia-product-image{display:block;width:auto;max-width:100%;height:100%;margin:0 auto;border-radius:var(--aia-product-image-radius, 8px);object-fit:contain}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product-cart{position:absolute;top:calc(var(--aia-product-card-width, 116px) - 12px - var(--aia-product-cart-size, 28px) - (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-y, 1)) / 2);right:calc(12px + (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-x, 1)) / 2);display:flex;align-items:center;justify-content:center;width:var(--aia-product-cart-size, 28px);height:var(--aia-product-cart-size, 28px);border-radius:999px;background:var(--aia-product-cart-bg, rgba(255, 255, 255, .94));color:var(--aia-product-cart-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 3px #00000038;cursor:pointer;transition:transform .15s ease,opacity .15s ease}.aia-product-cart:hover{transform:scale(1.08)}.aia-product-cart:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:2px}.aia-product-cart svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.aia-product-cart svg path{fill:none;stroke:currentColor}.aia-product-cart svg circle{fill:none;stroke:currentColor}.aia-product-cart-check{display:none}.aia-product-cart[data-aia-cart-state=adding]{cursor:progress}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-check{display:inline}.aia-product-cart-spinner,.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-spinner{display:inline}.aia-product-cart[data-aia-cart-state=adding] svg{animation:magicx-aia-product-cart-spin .8s linear infinite}@keyframes magicx-aia-product-cart-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.aia-product-cart[data-aia-cart-state=adding] svg{animation-duration:2s}}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}.aia-products[data-aia-products-layout=list] .aia-product-cart{top:50%;right:8px;transform:translateY(-50%)}.aia-products[data-aia-products-layout=list] .aia-product-cart:hover{transform:translateY(-50%) scale(1.08)}.aia-products[data-aia-products-layout=list] .aia-product[data-aia-product-has-cart]{padding-right:calc(var(--aia-product-cart-size, 28px) + 16px)}\n"] }]
137
239
  }], propDecorators: { products: [{
138
240
  type: Input
139
241
  }], listboxId: [{
@@ -146,6 +248,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
146
248
  type: Input
147
249
  }], strings: [{
148
250
  type: Input
251
+ }], addToCart: [{
252
+ type: Input
149
253
  }], select: [{
150
254
  type: Output
151
255
  }], focusChange: [{
@@ -154,4 +258,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
154
258
  type: ViewChild,
155
259
  args: ["row"]
156
260
  }] } });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zdHJpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wscUJBQXFCLEVBSXJCLG1CQUFtQixFQUNuQixjQUFjLEVBRWQsWUFBWSxHQUNiLE1BQU0scUNBQXFDLENBQUM7OztBQUU3Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQVVILE1BQU0sT0FBTyxxQkFBcUI7SUFUbEM7UUFVVyxhQUFRLEdBQWMsRUFBRSxDQUFDO1FBQ2xDLDJEQUEyRDtRQUNsRCxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3hCOzs7O1dBSUc7UUFDTSxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFCLDhGQUE4RjtRQUNyRixXQUFNLEdBQW1CLEtBQUssQ0FBQztRQUMvQixrQkFBYSxHQUF5QixPQUFPLENBQUM7UUFDdkQsMERBQTBEO1FBQ2pELFlBQU8sR0FBYyxZQUFZLEVBQUUsQ0FBQztRQUNwQyxZQUFPLEdBQUcsY0FBYyxDQUFDO1FBQ2xDOzs7O1dBSUc7UUFDYyxpQkFBWSxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDO1FBQzVELHFGQUFxRjtRQUNwRSxpQkFBWSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBZ0N2QyxXQUFNLEdBQUcs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bEMsc2dIQXlFQSxxb1JEMUJZLFlBQVk7NEZBTVgscUJBQXFCO2tCQVRqQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBQ04sdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFLNUIsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQXlDYSxNQUFNO3NCQUF4QixNQUFNO2dCQU9ZLFdBQVc7c0JBQTdCLE1BQU07Z0JBVUgsR0FBRztzQkFETixTQUFTO3VCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICB0eXBlIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIHR5cGUgT25DaGFuZ2VzLFxuICB0eXBlIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoUHJvZHVjdFJvd1doZWVsLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgUHJvZHVjdEltYWdlRmFsbGJhY2ssXG4gIHR5cGUgUHJvZHVjdHNMYXlvdXQsXG4gIHByb2R1Y3RJbWFnZVNvdXJjZXMsXG4gIHByb2R1Y3RJbml0aWFsLFxuICB0eXBlIFVJU3RyaW5ncyxcbiAgdWlTdHJpbmdzRm9yLFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcblxuLyoqXG4gKiBJbnRlcm5hbCBwcm9kdWN0IHN0cmlwIHJlbmRlcmVkIGJlbG93IHRoZSBkcm9wZG93bidzIG9wdGlvbnMgZ3JpZC4gTWlycm9yc1xuICogYHBhY2thZ2VzL3JlYWN0L3NyYy9jb21wb25lbnRzL1Byb2R1Y3RTdHJpcC50c3hgIGFuZCB0aGUgdmFuaWxsYSBjb3JlJ3NcbiAqIGByZW5kZXJQcm9kdWN0U3RyaXBgLCBzbyBhbGwgdGhyZWUgcGFja2FnZXMgZW1pdCB0aGUgc2FtZSBzdHJ1Y3R1cmUgYW5kXG4gKiB0aGVtZSBpZGVudGljYWxseS5cbiAqXG4gKiBUd28gbGF5b3V0IG5vdGVzIGNhcnJpZWQgb3ZlciBmcm9tIHRoZSB2YW5pbGxhIGltcGxlbWVudGF0aW9uOlxuICpcbiAqIC0gVGhlIGRyb3Bkb3duIHBhaW50cyBhIGJhY2tncm91bmQgYnV0IG5ldmVyIHNldHMgYGNvbG9yYCwgc28gYW55dGhpbmcgaGVyZVxuICogICByZWx5aW5nIG9uIGBjb2xvcjogaW5oZXJpdGAgd291bGQgcGljayB1cCB0aGUgKmhvc3QgcGFnZSdzKiB0ZXh0IGNvbG91ciDigJRcbiAqICAgYmxhY2sgdGV4dCBvbiBhIGRhcmsgcGFuZWwuIEV2ZXJ5IHRleHQgbm9kZSByZXNvbHZlcyBpdHMgY29sb3VyIHRocm91Z2hcbiAqICAgdGhlIHNhbWUgYC0tYWlhLW9wdGlvbi0qYCBjaGFpbiB0aGUgb3B0aW9ucyB1c2UuXG4gKiAtIFRoZSBvcHRpb25zIGdyaWQgY2FycmllcyBhIG5lZ2F0aXZlIGJvdHRvbSBtYXJnaW4gc28gdGhlIGZvb3RlciByaWRlcyB1cFxuICogICBvdmVyIGl0cyByZXNlcnZlZCBiYW5kLCBhbmQgd2hhdGV2ZXIgZm9sbG93cyB0aGUgZ3JpZCBpbmhlcml0cyB0aGF0IHB1bGwuXG4gKiAgIFRoZSBkcm9wZG93biByb290IGlzIG1hcmtlZCBgZGF0YS1haWEtaGFzLXByb2R1Y3RzYCBhbmQgdGhlIGFwcGVhcmFuY2VcbiAqICAgbGF5ZXIgemVyb2VzIHRoZSBiYW5kIGF0IGl0cyBzb3VyY2UgcmF0aGVyIHRoYW4gdGhlIHN0cmlwIGNhbmNlbGxpbmcgaXRcbiAqICAgZnJvbSBoZXJlLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYWlhLXByb2R1Y3Qtc3RyaXBcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZVVybDogXCIuL3Byb2R1Y3Qtc3RyaXAuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3Byb2R1Y3Qtc3RyaXAuY29tcG9uZW50LmNzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdFN0cmlwQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwcm9kdWN0czogUHJvZHVjdFtdID0gW107XG4gIC8qKiBTY29wZXMgdGhlIHNlY3Rpb24gbGFiZWwncyBpZCB0byB0aGUgb3duaW5nIGxpc3Rib3guICovXG4gIEBJbnB1dCgpIGxpc3Rib3hJZCA9IFwiXCI7XG4gIC8qKlxuICAgKiBGYWxzZSB3aGlsZSB0aGUgcGFuZWwgaXMgZmFkaW5nIG91dC4gVGhlIGNsb3NlZCBkcm9wZG93biBrZWVwcyByZW5kZXJpbmdcbiAgICogaXRzIGxhc3QgY29udGVudCBmb3IgdGhlIGZhZGUsIGFuZCBmb2N1c2FibGUgY2FyZHMgaW5zaWRlIGl0IHdvdWxkIHN0aWxsXG4gICAqIGFuc3dlciBUYWIuXG4gICAqL1xuICBASW5wdXQoKSBmb2N1c2FibGUgPSB0cnVlO1xuICAvKiogSG93IHRoZSBjYXJkcyBsYXkgb3V0IOKAlCBhIHNjcm9sbGluZyByb3csIG9yIHN0YWNrZWQgYXMgZnVsbC13aWR0aCByb3dzLiBEZWZhdWx0OiBcInJvd1wiLiAqL1xuICBASW5wdXQoKSBsYXlvdXQ6IFByb2R1Y3RzTGF5b3V0ID0gXCJyb3dcIjtcbiAgQElucHV0KCkgaW1hZ2VGYWxsYmFjazogUHJvZHVjdEltYWdlRmFsbGJhY2sgPSBcImltYWdlXCI7XG4gIC8qKiBUaGUgd29yZHMgb2YgdGhlIHdpZGdldCBsYW5ndWFnZS4gRGVmYXVsdDogRW5nbGlzaC4gKi9cbiAgQElucHV0KCkgc3RyaW5nczogVUlTdHJpbmdzID0gdWlTdHJpbmdzRm9yKCk7XG4gIHJlYWRvbmx5IGluaXRpYWwgPSBwcm9kdWN0SW5pdGlhbDtcbiAgLyoqXG4gICAqIFBlciBwcm9kdWN0IGlkLCB0aGUgYHNyY2BzIHRoYXQgZmFpbGVkIHRvIGxvYWQ6IGEgY2FyZCBtb3ZlcyBvbiB0byB0aGVcbiAgICogbmV4dCBzb3VyY2UgKGEgU2hvcGlmeSB0aHVtYm5haWwgZmFsbHMgYmFjayB0byB0aGUgb3JpZ2luYWwpIGFuZCBzaG93cyBpdHNcbiAgICogcGxhY2Vob2xkZXIgb25jZSBub25lIGlzIGxlZnQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZhaWxlZEltYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgLyoqIFBlciBwcm9kdWN0IGlkLCB0aGUgYHNyY2AgdGhhdCBsYXN0IGZpbmlzaGVkIGxvYWRpbmc7IGl0cyB0aWxlIGRyb3BzIHRoZSBmaWxsLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRlZEltYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlcyA9IG5ldyBNYXAoXG4gICAgICB0aGlzLnByb2R1Y3RzLm1hcCgocHJvZHVjdCkgPT4gW3Byb2R1Y3QuaWQsIHByb2R1Y3RJbWFnZVNvdXJjZXMocHJvZHVjdC5pbWFnZVVybCldKSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgW2lkLCBmYWlsZWRdIG9mIHRoaXMuZmFpbGVkSW1hZ2VzKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gc291cmNlcy5nZXQoaWQpID8/IFtdO1xuICAgICAgaWYgKCFmYWlsZWQuZXZlcnkoKHNyYykgPT4gY3VycmVudC5pbmNsdWRlcyhzcmMpKSkgdGhpcy5mYWlsZWRJbWFnZXMuZGVsZXRlKGlkKTtcbiAgICB9XG4gIH1cblxuICBpbWFnZVNvdXJjZShwcm9kdWN0OiBQcm9kdWN0KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgZmFpbGVkID0gdGhpcy5mYWlsZWRJbWFnZXMuZ2V0KHByb2R1Y3QuaWQpID8/IFtdO1xuICAgIHJldHVybiBwcm9kdWN0SW1hZ2VTb3VyY2VzKHByb2R1Y3QuaW1hZ2VVcmwpLmZpbmQoKHNyYykgPT4gIWZhaWxlZC5pbmNsdWRlcyhzcmMpKSA/PyBudWxsO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGNhcmQncyBwaG90byBoYXMgbG9hZGVkLCBzbyB0aGUgcGxhY2Vob2xkZXIgZmlsbCBzdGVwcyBhc2lkZS4gKi9cbiAgaW1hZ2VMb2FkZWQocHJvZHVjdDogUHJvZHVjdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNyYyA9IHRoaXMuaW1hZ2VTb3VyY2UocHJvZHVjdCk7XG4gICAgcmV0dXJuIHNyYyAhPT0gbnVsbCAmJiB0aGlzLmxvYWRlZEltYWdlcy5nZXQocHJvZHVjdC5pZCkgPT09IHNyYztcbiAgfVxuXG4gIG9uSW1hZ2VMb2FkKHByb2R1Y3Q6IFByb2R1Y3QsIHNyYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkZWRJbWFnZXMuc2V0KHByb2R1Y3QuaWQsIHNyYyk7XG4gIH1cblxuICBvbkltYWdlRXJyb3IocHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIGNvbnN0IHNyYyA9IHRoaXMuaW1hZ2VTb3VyY2UocHJvZHVjdCk7XG4gICAgaWYgKHNyYykgdGhpcy5mYWlsZWRJbWFnZXMuc2V0KHByb2R1Y3QuaWQsIFsuLi4odGhpcy5mYWlsZWRJbWFnZXMuZ2V0KHByb2R1Y3QuaWQpID8/IFtdKSwgc3JjXSk7XG4gIH1cblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9kdWN0PigpO1xuICAvKipcbiAgICogRm9jdXMgbW92ZWQgaW50byAvIG91dCBvZiB0aGUgc3RyaXAuIFRoZSBwYW5lbCBjbG9zZXMgb24gYmx1ciBieSBkZWZhdWx0XG4gICAqIGFuZCB0aGUgZWRpdG9yIGJsdXJzIHRoZSBtb21lbnQgYSBjYXJkIHRha2VzIGZvY3VzLCBzbyB0aGUgZHJvcGRvd25cbiAgICogcmVwb3J0cyBmb2N1cyBhcyBzdGlsbC1pbnNpZGUgcmF0aGVyIHRoYW4gc2h1dHRpbmcgb3V0IGZyb20gdW5kZXIgdGhlIGNhcmRcbiAgICogdGhlIHVzZXIganVzdCB0YWJiZWQgdG8uXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZm9jdXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBkZXRhY2hXaGVlbDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgbW91c2Ugd2hlZWwgb3ZlciB0aGUgcm93IHNjcm9sbHMgaXQgc2lkZXdheXMuIFRoZSByb3cgc2l0cyBpbnNpZGUgdGhlXG4gICAqIHNlY3Rpb24ncyBgKm5nSWZgLCBzbyB0aGUgcXVlcnkgZmlyZXMgd2l0aCB0aGUgZWxlbWVudCBhcyBwcm9kdWN0cyBhcnJpdmVcbiAgICogYW5kIHdpdGggYHVuZGVmaW5lZGAgYXMgdGhleSBnbzsgdGhlIGJpbmRpbmcgZm9sbG93cyBpdCBlaXRoZXIgd2F5LlxuICAgKi9cbiAgQFZpZXdDaGlsZChcInJvd1wiKVxuICBzZXQgcm93KHJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmRldGFjaFdoZWVsPy4oKTtcbiAgICB0aGlzLmRldGFjaFdoZWVsID0gcmVmID8gYXR0YWNoUHJvZHVjdFJvd1doZWVsKHJlZi5uYXRpdmVFbGVtZW50KSA6IG51bGw7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRldGFjaFdoZWVsPy4oKTtcbiAgICB0aGlzLmRldGFjaFdoZWVsID0gbnVsbDtcbiAgfVxuXG4gIGdldCBsYWJlbElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubGlzdGJveElkfS1wcm9kdWN0cy1sYWJlbGA7XG4gIH1cblxuICBjYXJkSWQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubGlzdGJveElkfS1wcm9kdWN0LSR7aW5kZXh9YDtcbiAgfVxuXG4gIHRyYWNrQnlQcm9kdWN0ID0gKF86IG51bWJlciwgcHJvZHVjdDogUHJvZHVjdCk6IHN0cmluZyA9PiBwcm9kdWN0LmlkO1xuXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICAvLyBMZXQgdGhlIGJyb3dzZXIga2VlcCB0aGUgY2xpY2tzIHRoYXQgbWVhbiBcIm9wZW4gdGhpcyBzb21ld2hlcmUgZWxzZVwiIOKAlFxuICAgIC8vIGludGVyY2VwdGluZyB0aGVtIHdvdWxkIGRlZmVhdCB0aGUgcG9pbnQgb2YgcmVuZGVyaW5nIGFuIDxhPi4gVGhvc2UgYXJlXG4gICAgLy8gbmF2aWdhdGlvbnMgdGhlIHVzZXIgYXNrZWQgZm9yIGV4cGxpY2l0bHksIHNvIHRoZXkgZG9uJ3QgZW1pdC5cbiAgICBpZiAoZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnNlbGVjdC5lbWl0KHByb2R1Y3QpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gXCJFbnRlclwiICYmIGV2ZW50LmtleSAhPT0gXCIgXCIpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc2VsZWN0LmVtaXQocHJvZHVjdCk7XG4gIH1cblxuICBvbkNhcmRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBvbkNhcmRCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmIChuZXh0Py5jbG9zZXN0KFwiW2RhdGEtYWlhLWRyb3Bkb3duXVwiKSkgcmV0dXJuO1xuICAgIHRoaXMuZm9jdXNDaGFuZ2UuZW1pdChmYWxzZSk7XG4gIH1cbn1cbiIsIjwhLS0gYGdyb3VwYCBpcyB0aGUgb25lIHJvbGUgYSBsaXN0Ym94IGFjY2VwdHMgYXJvdW5kIGEgc2V0IG9mIG9wdGlvbnMsIHNvIHRoZVxuICAgICBzdHJpcCBzdGF5cyBpbnNpZGUgdGhlIGxpc3Rib3ggd2l0aG91dCBicmVha2luZyBpdHMgY29udGVudCBtb2RlbC4gLS0+XG48c2VjdGlvblxuICAqbmdJZj1cInByb2R1Y3RzLmxlbmd0aCA+IDBcIlxuICBjbGFzcz1cImFpYS1wcm9kdWN0c1wiXG4gIGRhdGEtYWlhLXByb2R1Y3RzPVwiXCJcbiAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdHMtbGF5b3V0XT1cImxheW91dFwiXG4gIHJvbGU9XCJncm91cFwiXG4gIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJsYWJlbElkXCJcbj5cbiAgPCEtLSBkYXRhLWFpYS1wcm9kdWN0cy1sYWJlbDogdGhlIHNjcm9sbCBhcnJvdyBjZW50cmVzIGl0c2VsZiBvbiB0aGlzIHJvdy4gLS0+XG4gIDxkaXYgY2xhc3M9XCJhaWEtcHJvZHVjdHMtbGFiZWxcIiBbaWRdPVwibGFiZWxJZFwiIGRhdGEtYWlhLXByb2R1Y3RzLWxhYmVsPVwiXCI+e3sgc3RyaW5ncy5wcm9kdWN0cyB9fTwvZGl2PlxuXG4gIDwhLS0gI3JvdzogdGhlIGNvbXBvbmVudCBiaW5kcyB3aGVlbC10by1zaWRld2F5cyBzY3JvbGxpbmcgb24gaXQuIC0tPlxuICA8ZGl2ICNyb3cgY2xhc3M9XCJhaWEtcHJvZHVjdHMtcm93XCIgZGF0YS1haWEtcHJvZHVjdHMtcm93PVwiXCI+XG4gICAgPCEtLSBBIHJlYWwgPGEgaHJlZj4gcmF0aGVyIHRoYW4gYSA8ZGl2PjogaXQga2VlcHMgdGhlIGJyb3dzZXIncyBvd24gbGlua1xuICAgICAgICAgYWZmb3JkYW5jZXMg4oCUIGNtZC9jdHJsLWNsaWNrIGZvciBhIG5ldyB0YWIsIG1pZGRsZS1jbGljaywgcmlnaHQtY2xpY2sg4oaSXG4gICAgICAgICBcImNvcHkgbGluayBhZGRyZXNzXCIuIHJvbGU9XCJvcHRpb25cIiBvdmVycmlkZXMgaG93IGFzc2lzdGl2ZSB0ZWNoXG4gICAgICAgICBhbm5vdW5jZXMgaXQsIHdoaWNoIGlzIGNvcnJlY3QgaW5zaWRlIGEgbGlzdGJveDsgdGhlIGRlbGliZXJhdGUgdHJhZGVcbiAgICAgICAgIGlzIHRoYXQgQVQgbm8gbG9uZ2VyIGNhbGxzIGl0IGEgbGluay4gQW4gYXR0cmlidXRlIGJpbmRpbmcsIHNvIGFcbiAgICAgICAgIHByb2R1Y3Qgd2l0aG91dCBhIHVybCBnZXRzIG5vIGhyZWYgYXQgYWxsIHJhdGhlciB0aGFuIFwibnVsbFwiLiAtLT5cbiAgICA8YVxuICAgICAgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgcHJvZHVjdHM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlQcm9kdWN0XCJcbiAgICAgIFtpZF09XCJjYXJkSWQoaSlcIlxuICAgICAgY2xhc3M9XCJhaWEtcHJvZHVjdFwiXG4gICAgICBkYXRhLWFpYS1wcm9kdWN0PVwiXCJcbiAgICAgIFthdHRyLmRhdGEtYWlhLXByb2R1Y3Qtc29sZC1vdXRdPVwicHJvZHVjdC5hdmFpbGFibGUgPT09IGZhbHNlID8gJycgOiBudWxsXCJcbiAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJmYWxzZVwiXG4gICAgICBbYXR0ci5ocmVmXT1cInByb2R1Y3QudXJsID8/IG51bGxcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZm9jdXNhYmxlID8gMCA6IC0xXCJcbiAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudCwgcHJvZHVjdClcIlxuICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgcHJvZHVjdClcIlxuICAgICAgKGZvY3VzKT1cIm9uQ2FyZEZvY3VzKClcIlxuICAgICAgKGJsdXIpPVwib25DYXJkQmx1cigkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImFpYS1wcm9kdWN0LW1lZGlhXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdC1wbGFjZWhvbGRlcl09XCIhaW1hZ2VTb3VyY2UocHJvZHVjdCkgJiYgaW1hZ2VGYWxsYmFjayA9PT0gJ2ltYWdlJyA/ICcnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLXByb2R1Y3QtaW5pdGlhbF09XCIhaW1hZ2VTb3VyY2UocHJvZHVjdCkgJiYgaW1hZ2VGYWxsYmFjayA9PT0gJ2luaXRpYWwnID8gJycgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuZGF0YS1haWEtaW1hZ2UtbG9hZGVkXT1cImltYWdlTG9hZGVkKHByb2R1Y3QpID8gJycgOiBudWxsXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBhbHQ9XCJcIiBvbiBwdXJwb3NlOiB0aGUgdGl0bGUgaXMgYWxyZWFkeSB0aGUgY2FyZCdzIGFjY2Vzc2libGVcbiAgICAgICAgICAgICBuYW1lLCBhbmQgcmVwZWF0aW5nIGl0IHdvdWxkIGhhdmUgYSBzY3JlZW4gcmVhZGVyIHJlYWQgaXQgdHdpY2UuIC0tPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJpbWFnZVNvdXJjZShwcm9kdWN0KSBhcyBzcmNcIlxuICAgICAgICAgIGNsYXNzPVwiYWlhLXByb2R1Y3QtaW1hZ2VcIlxuICAgICAgICAgIFtzcmNdPVwic3JjXCJcbiAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZChwcm9kdWN0LCBzcmMpXCJcbiAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKHByb2R1Y3QpXCJcbiAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICBkZWNvZGluZz1cImFzeW5jXCJcbiAgICAgICAgLz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbWFnZVNvdXJjZShwcm9kdWN0KSAmJiBpbWFnZUZhbGxiYWNrID09PSAnaW5pdGlhbCdcIj57eyBpbml0aWFsKHByb2R1Y3QudGl0bGUpIH19PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gRXZlcnkgZmllbGQgYnV0IHRoZSB0aXRsZSBpcyBvcHRpb25hbCwgc28gYWJzZW50IG9uZXMgcmVuZGVyIG5vXG4gICAgICAgICAgIGVsZW1lbnQgYXQgYWxsIOKAlCB0aGUgY29sdW1uIGdhcCBjYW4ndCBsZWF2ZSBhIGhvbGUgZm9yIGEgYm94IHRoYXRcbiAgICAgICAgICAgaXNuJ3QgdGhlcmUuIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhaWEtcHJvZHVjdC1ib2R5XCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicHJvZHVjdC52ZW5kb3JcIiBjbGFzcz1cImFpYS1wcm9kdWN0LXZlbmRvclwiPnt7IHByb2R1Y3QudmVuZG9yIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImFpYS1wcm9kdWN0LXRpdGxlXCI+e3sgcHJvZHVjdC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJwcm9kdWN0LnByaWNlXCIgY2xhc3M9XCJhaWEtcHJvZHVjdC1wcmljZVwiPnt7IHByb2R1Y3QucHJpY2UgfX08L3NwYW4+XG4gICAgICAgIDwhLS0gSW4gdGhlIHRleHQgY29sdW1uIHJhdGhlciB0aGFuIHRoZSBhcmlhLWhpZGRlbiBtZWRpYSB0aWxlLCBzbyB0aGVcbiAgICAgICAgICAgICBjYXJkJ3MgYWNjZXNzaWJsZSBuYW1lIHNheXMgaXQ7IHRoZSBzdHlsZXNoZWV0IGxpZnRzIGl0IG92ZXIgdGhlXG4gICAgICAgICAgICAgaW1hZ2UuIC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInByb2R1Y3QuYXZhaWxhYmxlID09PSBmYWxzZVwiIGNsYXNzPVwiYWlhLXByb2R1Y3QtYmFkZ2VcIj57eyBzdHJpbmdzLnNvbGRPdXQgfX08L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9hPlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zdHJpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxxQkFBcUIsRUFJckIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxnQkFBZ0IsRUFFaEIsWUFBWSxHQUNiLE1BQU0scUNBQXFDLENBQUM7OztBQUk3Qzs7O0dBR0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxPQUFnQjtJQUNwQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQzlFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBVUgsTUFBTSxPQUFPLHFCQUFxQjtJQVRsQztRQVVXLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDbEMsMkRBQTJEO1FBQ2xELGNBQVMsR0FBRyxFQUFFLENBQUM7UUFD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QU07c0JBQXhCLE1BQU07Z0JBT1ksV0FBVztzQkFBN0IsTUFBTTtnQkFrQkgsR0FBRztzQkFETixTQUFTO3VCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgdHlwZSBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIHR5cGUgT25DaGFuZ2VzLFxuICB0eXBlIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoUHJvZHVjdFJvd1doZWVsLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgUHJvZHVjdEltYWdlRmFsbGJhY2ssXG4gIHR5cGUgUHJvZHVjdHNMYXlvdXQsXG4gIHByb2R1Y3RJbWFnZVNvdXJjZXMsXG4gIHByb2R1Y3RJbml0aWFsLFxuICBwcm9kdWN0UGhvdG9GaWxsLFxuICB0eXBlIFVJU3RyaW5ncyxcbiAgdWlTdHJpbmdzRm9yLFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcblxudHlwZSBDYXJ0U3RhdGUgPSBcImFkZGluZ1wiIHwgXCJhZGRlZFwiO1xuXG4vKipcbiAqIFdoYXQgbWFrZXMgYSBjYXJkJ3MgcHJvZHVjdCBcInRoZSBzYW1lXCIgZm9yIGl0cyBjYXJ0IGJ1dHRvbjogZXZlcnkgZmllbGRcbiAqIHZhbmlsbGEncyBgY2FyZEtleWAgcmVidWlsZHMgdGhlIGNhcmQgb24uIEEgcHJpY2Utb25seSBjaGFuZ2Uga2VlcHMgaXQuXG4gKi9cbmZ1bmN0aW9uIGNhcnRJZGVudGl0eShwcm9kdWN0OiBQcm9kdWN0KTogc3RyaW5nIHtcbiAgcmV0dXJuIFtwcm9kdWN0LmlkLCBwcm9kdWN0LnRpdGxlLCBwcm9kdWN0LnVybCwgcHJvZHVjdC5pbWFnZVVybCwgcHJvZHVjdC52ZW5kb3JdXG4gICAgLm1hcCgoZmllbGQpID0+IGZpZWxkID8/IFwiXCIpXG4gICAgLmpvaW4oXCJcXDBcIik7XG59XG5cbi8qKlxuICogSW50ZXJuYWwgcHJvZHVjdCBzdHJpcCByZW5kZXJlZCBiZWxvdyB0aGUgZHJvcGRvd24ncyBvcHRpb25zIGdyaWQuIE1pcnJvcnNcbiAqIGBwYWNrYWdlcy9yZWFjdC9zcmMvY29tcG9uZW50cy9Qcm9kdWN0U3RyaXAudHN4YCBhbmQgdGhlIHZhbmlsbGEgY29yZSdzXG4gKiBgcmVuZGVyUHJvZHVjdFN0cmlwYCwgc28gYWxsIHRocmVlIHBhY2thZ2VzIGVtaXQgdGhlIHNhbWUgc3RydWN0dXJlIGFuZFxuICogdGhlbWUgaWRlbnRpY2FsbHkuXG4gKlxuICogVHdvIGxheW91dCBub3RlcyBjYXJyaWVkIG92ZXIgZnJvbSB0aGUgdmFuaWxsYSBpbXBsZW1lbnRhdGlvbjpcbiAqXG4gKiAtIFRoZSBkcm9wZG93biBwYWludHMgYSBiYWNrZ3JvdW5kIGJ1dCBuZXZlciBzZXRzIGBjb2xvcmAsIHNvIGFueXRoaW5nIGhlcmVcbiAqICAgcmVseWluZyBvbiBgY29sb3I6IGluaGVyaXRgIHdvdWxkIHBpY2sgdXAgdGhlICpob3N0IHBhZ2UncyogdGV4dCBjb2xvdXIg4oCUXG4gKiAgIGJsYWNrIHRleHQgb24gYSBkYXJrIHBhbmVsLiBFdmVyeSB0ZXh0IG5vZGUgcmVzb2x2ZXMgaXRzIGNvbG91ciB0aHJvdWdoXG4gKiAgIHRoZSBzYW1lIGAtLWFpYS1vcHRpb24tKmAgY2hhaW4gdGhlIG9wdGlvbnMgdXNlLlxuICogLSBUaGUgb3B0aW9ucyBncmlkIGNhcnJpZXMgYSBuZWdhdGl2ZSBib3R0b20gbWFyZ2luIHNvIHRoZSBmb290ZXIgcmlkZXMgdXBcbiAqICAgb3ZlciBpdHMgcmVzZXJ2ZWQgYmFuZCwgYW5kIHdoYXRldmVyIGZvbGxvd3MgdGhlIGdyaWQgaW5oZXJpdHMgdGhhdCBwdWxsLlxuICogICBUaGUgZHJvcGRvd24gcm9vdCBpcyBtYXJrZWQgYGRhdGEtYWlhLWhhcy1wcm9kdWN0c2AgYW5kIHRoZSBhcHBlYXJhbmNlXG4gKiAgIGxheWVyIHplcm9lcyB0aGUgYmFuZCBhdCBpdHMgc291cmNlIHJhdGhlciB0aGFuIHRoZSBzdHJpcCBjYW5jZWxsaW5nIGl0XG4gKiAgIGZyb20gaGVyZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpYS1wcm9kdWN0LXN0cmlwXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9wcm9kdWN0LXN0cmlwLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9wcm9kdWN0LXN0cmlwLmNvbXBvbmVudC5jc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RTdHJpcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcHJvZHVjdHM6IFByb2R1Y3RbXSA9IFtdO1xuICAvKiogU2NvcGVzIHRoZSBzZWN0aW9uIGxhYmVsJ3MgaWQgdG8gdGhlIG93bmluZyBsaXN0Ym94LiAqL1xuICBASW5wdXQoKSBsaXN0Ym94SWQgPSBcIlwiO1xuICAvKipcbiAgICogRmFsc2Ugd2hpbGUgdGhlIHBhbmVsIGlzIGZhZGluZyBvdXQuIFRoZSBjbG9zZWQgZHJvcGRvd24ga2VlcHMgcmVuZGVyaW5nXG4gICAqIGl0cyBsYXN0IGNvbnRlbnQgZm9yIHRoZSBmYWRlLCBhbmQgZm9jdXNhYmxlIGNhcmRzIGluc2lkZSBpdCB3b3VsZCBzdGlsbFxuICAgKiBhbnN3ZXIgVGFiLlxuICAgKi9cbiAgQElucHV0KCkgZm9jdXNhYmxlID0gdHJ1ZTtcbiAgLyoqIEhvdyB0aGUgY2FyZHMgbGF5IG91dCDigJQgYSBzY3JvbGxpbmcgcm93LCBvciBzdGFja2VkIGFzIGZ1bGwtd2lkdGggcm93cy4gRGVmYXVsdDogXCJyb3dcIi4gKi9cbiAgQElucHV0KCkgbGF5b3V0OiBQcm9kdWN0c0xheW91dCA9IFwicm93XCI7XG4gIEBJbnB1dCgpIGltYWdlRmFsbGJhY2s6IFByb2R1Y3RJbWFnZUZhbGxiYWNrID0gXCJpbWFnZVwiO1xuICAvKiogVGhlIHdvcmRzIG9mIHRoZSB3aWRnZXQgbGFuZ3VhZ2UuIERlZmF1bHQ6IEVuZ2xpc2guICovXG4gIEBJbnB1dCgpIHN0cmluZ3M6IFVJU3RyaW5ncyA9IHVpU3RyaW5nc0ZvcigpO1xuICAvKipcbiAgICogU2V0IHdoZW4gdGhlIGludGVncmF0aW9uIGFkZHMgdG8gY2FydDogZWFjaCBjYXJkIHRoYXQgaXMgbm90IHNvbGQgb3V0XG4gICAqIGRyYXdzIGEgY2FydCBidXR0b24sIHdob3NlIHByZXNzIGNhbGxzIHRoaXMgaW5zdGVhZCBvZiBlbWl0dGluZyBgc2VsZWN0YC5cbiAgICovXG4gIEBJbnB1dCgpIGFkZFRvQ2FydDogKChwcm9kdWN0OiBQcm9kdWN0KSA9PiB2b2lkIHwgUHJvbWlzZUxpa2U8dW5rbm93bj4pIHwgbnVsbCA9IG51bGw7XG4gIHJlYWRvbmx5IGluaXRpYWwgPSBwcm9kdWN0SW5pdGlhbDtcbiAgLyoqXG4gICAqIFBlciBwcm9kdWN0IGlkLCB0aGUgYHNyY2BzIHRoYXQgZmFpbGVkIHRvIGxvYWQ6IGEgY2FyZCBtb3ZlcyBvbiB0byB0aGVcbiAgICogbmV4dCBzb3VyY2UgKGEgU2hvcGlmeSB0aHVtYm5haWwgZmFsbHMgYmFjayB0byB0aGUgb3JpZ2luYWwpIGFuZCBzaG93cyBpdHNcbiAgICogcGxhY2Vob2xkZXIgb25jZSBub25lIGlzIGxlZnQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZhaWxlZEltYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgLyoqIFBlciBwcm9kdWN0IGlkLCB0aGUgYHNyY2AgdGhhdCBsYXN0IGZpbmlzaGVkIGxvYWRpbmc7IGl0cyB0aWxlIGRyb3BzIHRoZSBmaWxsLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRlZEltYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlcyA9IG5ldyBNYXAoXG4gICAgICB0aGlzLnByb2R1Y3RzLm1hcCgocHJvZHVjdCkgPT4gW3Byb2R1Y3QuaWQsIHByb2R1Y3RJbWFnZVNvdXJjZXMocHJvZHVjdC5pbWFnZVVybCldKSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgW2lkLCBmYWlsZWRdIG9mIHRoaXMuZmFpbGVkSW1hZ2VzKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gc291cmNlcy5nZXQoaWQpID8/IFtdO1xuICAgICAgaWYgKCFmYWlsZWQuZXZlcnkoKHNyYykgPT4gY3VycmVudC5pbmNsdWRlcyhzcmMpKSkgdGhpcy5mYWlsZWRJbWFnZXMuZGVsZXRlKGlkKTtcbiAgICB9XG4gICAgLy8gQSBjYXJkIHdob3NlIHByb2R1Y3QgY2hhbmdlZCwgbGVmdCB0aGUgc3RyaXAgb3IgbG9zdCBpdHMgYnV0dG9uIHB1dHMgdGhlXG4gICAgLy8gYnV0dG9uIGJhY2sgYXQgcmVzdCDigJQgd2hhdCByZWJ1aWxkaW5nIHRoZSBjYXJkIGRvZXMgaW4gdmFuaWxsYS5cbiAgICBjb25zdCBieUlkID0gbmV3IE1hcCh0aGlzLnByb2R1Y3RzLm1hcCgocHJvZHVjdCkgPT4gW3Byb2R1Y3QuaWQsIHByb2R1Y3RdKSk7XG4gICAgZm9yIChjb25zdCBbaWQsIGNhcnRdIG9mIHRoaXMuY2FydHMpIHtcbiAgICAgIGNvbnN0IHByb2R1Y3QgPSBieUlkLmdldChpZCk7XG4gICAgICBpZiAoIXByb2R1Y3QgfHwgIXRoaXMuaGFzQ2FydChwcm9kdWN0KSB8fCBjYXJ0SWRlbnRpdHkocHJvZHVjdCkgIT09IGNhcnQuaWRlbnRpdHkpIHtcbiAgICAgICAgdGhpcy5jYXJ0cy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltYWdlU291cmNlKHByb2R1Y3Q6IFByb2R1Y3QpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBmYWlsZWQgPSB0aGlzLmZhaWxlZEltYWdlcy5nZXQocHJvZHVjdC5pZCkgPz8gW107XG4gICAgcmV0dXJuIHByb2R1Y3RJbWFnZVNvdXJjZXMocHJvZHVjdC5pbWFnZVVybCkuZmluZCgoc3JjKSA9PiAhZmFpbGVkLmluY2x1ZGVzKHNyYykpID8/IG51bGw7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgY2FyZCdzIHBob3RvIGhhcyBsb2FkZWQsIHNvIHRoZSBwbGFjZWhvbGRlciBmaWxsIHN0ZXBzIGFzaWRlLiAqL1xuICBpbWFnZUxvYWRlZChwcm9kdWN0OiBQcm9kdWN0KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3JjID0gdGhpcy5pbWFnZVNvdXJjZShwcm9kdWN0KTtcbiAgICByZXR1cm4gc3JjICE9PSBudWxsICYmIHRoaXMubG9hZGVkSW1hZ2VzLmdldChwcm9kdWN0LmlkKSA9PT0gc3JjO1xuICB9XG5cbiAgb25JbWFnZUxvYWQocHJvZHVjdDogUHJvZHVjdCwgc3JjOiBzdHJpbmcsIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRlZEltYWdlcy5zZXQocHJvZHVjdC5pZCwgc3JjKTtcbiAgICBjb25zdCBpbWcgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IGZpbGwgPSBpbWcgPyBwcm9kdWN0UGhvdG9GaWxsKGltZy5uYXR1cmFsV2lkdGgsIGltZy5uYXR1cmFsSGVpZ2h0KSA6IG51bGw7XG4gICAgaWYgKGZpbGwpIHRoaXMucGhvdG9GaWxscy5zZXQocHJvZHVjdC5pZCwgZmlsbCk7XG4gICAgZWxzZSB0aGlzLnBob3RvRmlsbHMuZGVsZXRlKHByb2R1Y3QuaWQpO1xuICB9XG5cbiAgb25JbWFnZUVycm9yKHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBzcmMgPSB0aGlzLmltYWdlU291cmNlKHByb2R1Y3QpO1xuICAgIGlmIChzcmMpIHRoaXMuZmFpbGVkSW1hZ2VzLnNldChwcm9kdWN0LmlkLCBbLi4uKHRoaXMuZmFpbGVkSW1hZ2VzLmdldChwcm9kdWN0LmlkKSA/PyBbXSksIHNyY10pO1xuICAgIC8vIFRoZSBuZXh0IHNvdXJjZSwgb3IgdGhlIHBsYWNlaG9sZGVyLCBmaWxscyB0aGUgdGlsZSB1bnRpbCBpdCBsb2Fkcy5cbiAgICB0aGlzLnBob3RvRmlsbHMuZGVsZXRlKHByb2R1Y3QuaWQpO1xuICB9XG5cbiAgLyoqIFBlciBwcm9kdWN0IGlkLCBob3cgbXVjaCBvZiB0aGUgdGlsZSB0aGUgbG9hZGVkIHBob3RvIGZpbGxzIChwcm9kdWN0UGhvdG9GaWxsKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwaG90b0ZpbGxzID0gbmV3IE1hcDxzdHJpbmcsIHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfT4oKTtcblxuICAvKipcbiAgICogVGhlIGNhcmQncyBwaG90by1maWxsIGN1c3RvbSBwcm9wZXJ0aWVzLCB3aGljaCBwdXQgdGhlIGNhcnQgYnV0dG9uIGluc2lkZVxuICAgKiB0aGUgcGhvdG8ncyBvd24gY29ybmVyLiBOdWxsIHVudGlsIHRoZSBwaG90byBsb2Fkcy5cbiAgICovXG4gIHBob3RvRmlsbFN0eWxlKHByb2R1Y3Q6IFByb2R1Y3QpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCB7XG4gICAgY29uc3QgZmlsbCA9IHRoaXMucGhvdG9GaWxscy5nZXQocHJvZHVjdC5pZCk7XG4gICAgLy8gT25seSB0aGUgcGhvdG8gb24gc2NyZWVuIGNvdW50czogYSBjaGFuZ2VkIG9yIHJlbW92ZWQgaW1hZ2UgZHJvcHMgaXQuXG4gICAgaWYgKCFmaWxsIHx8ICF0aGlzLmltYWdlTG9hZGVkKHByb2R1Y3QpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgXCItLWFpYS1wcm9kdWN0LXBob3RvLWZpbGwteFwiOiBTdHJpbmcoZmlsbC54KSxcbiAgICAgIFwiLS1haWEtcHJvZHVjdC1waG90by1maWxsLXlcIjogU3RyaW5nKGZpbGwueSksXG4gICAgfTtcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFByb2R1Y3Q+KCk7XG4gIC8qKlxuICAgKiBGb2N1cyBtb3ZlZCBpbnRvIC8gb3V0IG9mIHRoZSBzdHJpcC4gVGhlIHBhbmVsIGNsb3NlcyBvbiBibHVyIGJ5IGRlZmF1bHRcbiAgICogYW5kIHRoZSBlZGl0b3IgYmx1cnMgdGhlIG1vbWVudCBhIGNhcmQgdGFrZXMgZm9jdXMsIHNvIHRoZSBkcm9wZG93blxuICAgKiByZXBvcnRzIGZvY3VzIGFzIHN0aWxsLWluc2lkZSByYXRoZXIgdGhhbiBzaHV0dGluZyBvdXQgZnJvbSB1bmRlciB0aGUgY2FyZFxuICAgKiB0aGUgdXNlciBqdXN0IHRhYmJlZCB0by5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBmb2N1c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIGRldGFjaFdoZWVsOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAvKipcbiAgICogUGVyIHByb2R1Y3QgaWQsIHRoZSBjYXJ0IGJ1dHRvbidzIHN0YXRlIHdoaWxlIGl0IGlzbid0IGF0IHJlc3QsIHdpdGggdGhlXG4gICAqIHByb2R1Y3QgaWRlbnRpdHkgaXQgYmVsb25ncyB0byBhbmQgdGhlIHByZXNzIHRoYXQgc2V0IGl0IChhIHNldHRsZSBmcm9tIGFuXG4gICAqIGVhcmxpZXIgcHJlc3MsIG9yIGZvciBhIGNhcmQgc2luY2UgcmVzZXQsIGlzIGRyb3BwZWQpLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjYXJ0cyA9IG5ldyBNYXA8c3RyaW5nLCB7IHN0YXRlOiBDYXJ0U3RhdGU7IGlkZW50aXR5OiBzdHJpbmc7IHByZXNzOiBvYmplY3QgfT4oKTtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBtb3VzZSB3aGVlbCBvdmVyIHRoZSByb3cgc2Nyb2xscyBpdCBzaWRld2F5cy4gVGhlIHJvdyBzaXRzIGluc2lkZSB0aGVcbiAgICogc2VjdGlvbidzIGAqbmdJZmAsIHNvIHRoZSBxdWVyeSBmaXJlcyB3aXRoIHRoZSBlbGVtZW50IGFzIHByb2R1Y3RzIGFycml2ZVxuICAgKiBhbmQgd2l0aCBgdW5kZWZpbmVkYCBhcyB0aGV5IGdvOyB0aGUgYmluZGluZyBmb2xsb3dzIGl0IGVpdGhlciB3YXkuXG4gICAqL1xuICBAVmlld0NoaWxkKFwicm93XCIpXG4gIHNldCByb3cocmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZGV0YWNoV2hlZWw/LigpO1xuICAgIHRoaXMuZGV0YWNoV2hlZWwgPSByZWYgPyBhdHRhY2hQcm9kdWN0Um93V2hlZWwocmVmLm5hdGl2ZUVsZW1lbnQpIDogbnVsbDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLmRldGFjaFdoZWVsPy4oKTtcbiAgICB0aGlzLmRldGFjaFdoZWVsID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBBIHNvbGQtb3V0IHByb2R1Y3QgY2FuJ3QgYmUgYWRkZWQsIHNvIGl0cyBjYXJkIGhhcyBubyBidXR0b24gYXQgYWxsLiAqL1xuICBoYXNDYXJ0KHByb2R1Y3Q6IFByb2R1Y3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUb0NhcnQgIT09IG51bGwgJiYgcHJvZHVjdC5hdmFpbGFibGUgIT09IGZhbHNlO1xuICB9XG5cbiAgY2FydFN0YXRlKHByb2R1Y3Q6IFByb2R1Y3QpOiBDYXJ0U3RhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jYXJ0cy5nZXQocHJvZHVjdC5pZCk/LnN0YXRlID8/IG51bGw7XG4gIH1cblxuICBvbkNhcnRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgLy8gS2V5cyBuZXZlciByZWFjaCB0aGUgY2FyZCwgd2hvc2Ugb3duIEVudGVyIC8gU3BhY2Ugd291bGQgc2VsZWN0IGl0LlxuICAgIGlmIChldmVudC5rZXkgIT09IFwiRW50ZXJcIiAmJiBldmVudC5rZXkgIT09IFwiIFwiKSByZXR1cm47XG4gICAgdGhpcy5vbkNhcnRQcmVzcyhldmVudCwgcHJvZHVjdCk7XG4gIH1cblxuICAvKipcbiAgICogTWlycm9ycyB2YW5pbGxhJ3MgYGJ1aWxkQ2FydEJ1dHRvbmAgcHJlc3M6IGFkZGluZyDihpIgYWRkZWQsIG9yIHJlc3Qgb24gYVxuICAgKiByZWplY3Rpb24uIFRoZSBjaGVjayBzdGF5cyB1bnRpbCB0aGUgcHJvZHVjdCBjaGFuZ2VzOyBhbm90aGVyIHByZXNzIGFkZHMgYWdhaW4uXG4gICAqL1xuICBvbkNhcnRQcmVzcyhldmVudDogRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmFkZFRvQ2FydDtcbiAgICBpZiAoIWhhbmRsZXIgfHwgdGhpcy5jYXJ0U3RhdGUocHJvZHVjdCkgPT09IFwiYWRkaW5nXCIpIHJldHVybjtcbiAgICBjb25zdCBpZCA9IHByb2R1Y3QuaWQ7XG4gICAgY29uc3QgcHJlc3MgPSB7fTtcbiAgICB0aGlzLmNhcnRzLnNldChpZCwgeyBzdGF0ZTogXCJhZGRpbmdcIiwgaWRlbnRpdHk6IGNhcnRJZGVudGl0eShwcm9kdWN0KSwgcHJlc3MgfSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgbGV0IHBlbmRpbmc6IFByb21pc2VMaWtlPHVua25vd24+O1xuICAgIHRyeSB7XG4gICAgICBwZW5kaW5nID0gUHJvbWlzZS5yZXNvbHZlKGhhbmRsZXIocHJvZHVjdCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwZW5kaW5nID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICBwZW5kaW5nLnRoZW4oXG4gICAgICAoKSA9PiB0aGlzLnNldHRsZUNhcnQoaWQsIHByZXNzLCBcImFkZGVkXCIpLFxuICAgICAgKCkgPT4gdGhpcy5zZXR0bGVDYXJ0KGlkLCBwcmVzcywgbnVsbCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dGxlQ2FydChpZDogc3RyaW5nLCBwcmVzczogb2JqZWN0LCBzdGF0ZTogQ2FydFN0YXRlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGNhcnQgPSB0aGlzLmNhcnRzLmdldChpZCk7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8IGNhcnQ/LnByZXNzICE9PSBwcmVzcykgcmV0dXJuO1xuICAgIGlmIChzdGF0ZSkgY2FydC5zdGF0ZSA9IHN0YXRlO1xuICAgIGVsc2UgdGhpcy5jYXJ0cy5kZWxldGUoaWQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5saXN0Ym94SWR9LXByb2R1Y3RzLWxhYmVsYDtcbiAgfVxuXG4gIGNhcmRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5saXN0Ym94SWR9LXByb2R1Y3QtJHtpbmRleH1gO1xuICB9XG5cbiAgdHJhY2tCeVByb2R1Y3QgPSAoXzogbnVtYmVyLCBwcm9kdWN0OiBQcm9kdWN0KTogc3RyaW5nID0+IHByb2R1Y3QuaWQ7XG5cbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCwgcHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIC8vIExldCB0aGUgYnJvd3NlciBrZWVwIHRoZSBjbGlja3MgdGhhdCBtZWFuIFwib3BlbiB0aGlzIHNvbWV3aGVyZSBlbHNlXCIg4oCUXG4gICAgLy8gaW50ZXJjZXB0aW5nIHRoZW0gd291bGQgZGVmZWF0IHRoZSBwb2ludCBvZiByZW5kZXJpbmcgYW4gPGE+LiBUaG9zZSBhcmVcbiAgICAvLyBuYXZpZ2F0aW9ucyB0aGUgdXNlciBhc2tlZCBmb3IgZXhwbGljaXRseSwgc28gdGhleSBkb24ndCBlbWl0LlxuICAgIGlmIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc2VsZWN0LmVtaXQocHJvZHVjdCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBcIkVudGVyXCIgJiYgZXZlbnQua2V5ICE9PSBcIiBcIikgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zZWxlY3QuZW1pdChwcm9kdWN0KTtcbiAgfVxuXG4gIG9uQ2FyZEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG9uQ2FyZEJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKG5leHQ/LmNsb3Nlc3QoXCJbZGF0YS1haWEtZHJvcGRvd25dXCIpKSByZXR1cm47XG4gICAgdGhpcy5mb2N1c0NoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxufVxuIiwiPCEtLSBgZ3JvdXBgIGlzIHRoZSBvbmUgcm9sZSBhIGxpc3Rib3ggYWNjZXB0cyBhcm91bmQgYSBzZXQgb2Ygb3B0aW9ucywgc28gdGhlXG4gICAgIHN0cmlwIHN0YXlzIGluc2lkZSB0aGUgbGlzdGJveCB3aXRob3V0IGJyZWFraW5nIGl0cyBjb250ZW50IG1vZGVsLiAtLT5cbjxzZWN0aW9uXG4gICpuZ0lmPVwicHJvZHVjdHMubGVuZ3RoID4gMFwiXG4gIGNsYXNzPVwiYWlhLXByb2R1Y3RzXCJcbiAgZGF0YS1haWEtcHJvZHVjdHM9XCJcIlxuICBbYXR0ci5kYXRhLWFpYS1wcm9kdWN0cy1sYXlvdXRdPVwibGF5b3V0XCJcbiAgcm9sZT1cImdyb3VwXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIlxuPlxuICA8IS0tIGRhdGEtYWlhLXByb2R1Y3RzLWxhYmVsOiB0aGUgc2Nyb2xsIGFycm93IGNlbnRyZXMgaXRzZWxmIG9uIHRoaXMgcm93LiAtLT5cbiAgPGRpdiBjbGFzcz1cImFpYS1wcm9kdWN0cy1sYWJlbFwiIFtpZF09XCJsYWJlbElkXCIgZGF0YS1haWEtcHJvZHVjdHMtbGFiZWw9XCJcIj57eyBzdHJpbmdzLnByb2R1Y3RzIH19PC9kaXY+XG5cbiAgPCEtLSAjcm93OiB0aGUgY29tcG9uZW50IGJpbmRzIHdoZWVsLXRvLXNpZGV3YXlzIHNjcm9sbGluZyBvbiBpdC4gLS0+XG4gIDxkaXYgI3JvdyBjbGFzcz1cImFpYS1wcm9kdWN0cy1yb3dcIiBkYXRhLWFpYS1wcm9kdWN0cy1yb3c9XCJcIj5cbiAgICA8IS0tIEEgcmVhbCA8YSBocmVmPiByYXRoZXIgdGhhbiBhIDxkaXY+OiBpdCBrZWVwcyB0aGUgYnJvd3NlcidzIG93biBsaW5rXG4gICAgICAgICBhZmZvcmRhbmNlcyDigJQgY21kL2N0cmwtY2xpY2sgZm9yIGEgbmV3IHRhYiwgbWlkZGxlLWNsaWNrLCByaWdodC1jbGljayDihpJcbiAgICAgICAgIFwiY29weSBsaW5rIGFkZHJlc3NcIi4gcm9sZT1cIm9wdGlvblwiIG92ZXJyaWRlcyBob3cgYXNzaXN0aXZlIHRlY2hcbiAgICAgICAgIGFubm91bmNlcyBpdCwgd2hpY2ggaXMgY29ycmVjdCBpbnNpZGUgYSBsaXN0Ym94OyB0aGUgZGVsaWJlcmF0ZSB0cmFkZVxuICAgICAgICAgaXMgdGhhdCBBVCBubyBsb25nZXIgY2FsbHMgaXQgYSBsaW5rLiBBbiBhdHRyaWJ1dGUgYmluZGluZywgc28gYVxuICAgICAgICAgcHJvZHVjdCB3aXRob3V0IGEgdXJsIGdldHMgbm8gaHJlZiBhdCBhbGwgcmF0aGVyIHRoYW4gXCJudWxsXCIuIC0tPlxuICAgIDxhXG4gICAgICAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBwcm9kdWN0czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVByb2R1Y3RcIlxuICAgICAgW2lkXT1cImNhcmRJZChpKVwiXG4gICAgICBjbGFzcz1cImFpYS1wcm9kdWN0XCJcbiAgICAgIGRhdGEtYWlhLXByb2R1Y3Q9XCJcIlxuICAgICAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdC1zb2xkLW91dF09XCJwcm9kdWN0LmF2YWlsYWJsZSA9PT0gZmFsc2UgPyAnJyA6IG51bGxcIlxuICAgICAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdC1oYXMtY2FydF09XCJoYXNDYXJ0KHByb2R1Y3QpID8gJycgOiBudWxsXCJcbiAgICAgIFtzdHlsZV09XCJwaG90b0ZpbGxTdHlsZShwcm9kdWN0KVwiXG4gICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiZmFsc2VcIlxuICAgICAgW2F0dHIuaHJlZl09XCJwcm9kdWN0LnVybCA/PyBudWxsXCJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cImZvY3VzYWJsZSA/IDAgOiAtMVwiXG4gICAgICAoY2xpY2spPVwib25DbGljaygkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgIChmb2N1cyk9XCJvbkNhcmRGb2N1cygpXCJcbiAgICAgIChibHVyKT1cIm9uQ2FyZEJsdXIoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJhaWEtcHJvZHVjdC1tZWRpYVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLXByb2R1Y3QtcGxhY2Vob2xkZXJdPVwiIWltYWdlU291cmNlKHByb2R1Y3QpICYmIGltYWdlRmFsbGJhY2sgPT09ICdpbWFnZScgPyAnJyA6IG51bGxcIlxuICAgICAgICBbYXR0ci5kYXRhLWFpYS1wcm9kdWN0LWluaXRpYWxdPVwiIWltYWdlU291cmNlKHByb2R1Y3QpICYmIGltYWdlRmFsbGJhY2sgPT09ICdpbml0aWFsJyA/ICcnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLWltYWdlLWxvYWRlZF09XCJpbWFnZUxvYWRlZChwcm9kdWN0KSA/ICcnIDogbnVsbFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gYWx0PVwiXCIgb24gcHVycG9zZTogdGhlIHRpdGxlIGlzIGFscmVhZHkgdGhlIGNhcmQncyBhY2Nlc3NpYmxlXG4gICAgICAgICAgICAgbmFtZSwgYW5kIHJlcGVhdGluZyBpdCB3b3VsZCBoYXZlIGEgc2NyZWVuIHJlYWRlciByZWFkIGl0IHR3aWNlLiAtLT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiaW1hZ2VTb3VyY2UocHJvZHVjdCkgYXMgc3JjXCJcbiAgICAgICAgICBjbGFzcz1cImFpYS1wcm9kdWN0LWltYWdlXCJcbiAgICAgICAgICBbc3JjXT1cInNyY1wiXG4gICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQocHJvZHVjdCwgc3JjLCAkZXZlbnQpXCJcbiAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKHByb2R1Y3QpXCJcbiAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICBkZWNvZGluZz1cImFzeW5jXCJcbiAgICAgICAgLz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbWFnZVNvdXJjZShwcm9kdWN0KSAmJiBpbWFnZUZhbGxiYWNrID09PSAnaW5pdGlhbCdcIj57eyBpbml0aWFsKHByb2R1Y3QudGl0bGUpIH19PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gRXZlcnkgZmllbGQgYnV0IHRoZSB0aXRsZSBpcyBvcHRpb25hbCwgc28gYWJzZW50IG9uZXMgcmVuZGVyIG5vXG4gICAgICAgICAgIGVsZW1lbnQgYXQgYWxsIOKAlCB0aGUgY29sdW1uIGdhcCBjYW4ndCBsZWF2ZSBhIGhvbGUgZm9yIGEgYm94IHRoYXRcbiAgICAgICAgICAgaXNuJ3QgdGhlcmUuIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhaWEtcHJvZHVjdC1ib2R5XCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicHJvZHVjdC52ZW5kb3JcIiBjbGFzcz1cImFpYS1wcm9kdWN0LXZlbmRvclwiPnt7IHByb2R1Y3QudmVuZG9yIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImFpYS1wcm9kdWN0LXRpdGxlXCI+e3sgcHJvZHVjdC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJwcm9kdWN0LnByaWNlXCIgY2xhc3M9XCJhaWEtcHJvZHVjdC1wcmljZVwiPnt7IHByb2R1Y3QucHJpY2UgfX08L3NwYW4+XG4gICAgICAgIDwhLS0gSW4gdGhlIHRleHQgY29sdW1uIHJhdGhlciB0aGFuIHRoZSBhcmlhLWhpZGRlbiBtZWRpYSB0aWxlLCBzbyB0aGVcbiAgICAgICAgICAgICBjYXJkJ3MgYWNjZXNzaWJsZSBuYW1lIHNheXMgaXQ7IHRoZSBzdHlsZXNoZWV0IGxpZnRzIGl0IG92ZXIgdGhlXG4gICAgICAgICAgICAgaW1hZ2UuIC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInByb2R1Y3QuYXZhaWxhYmxlID09PSBmYWxzZVwiIGNsYXNzPVwiYWlhLXByb2R1Y3QtYmFkZ2VcIj57eyBzdHJpbmdzLnNvbGRPdXQgfX08L3NwYW4+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gVGhlIGFkZC10by1jYXJ0IGJ1dHRvbjogYSBjaGlsZCBvZiB0aGUgY2FyZCByYXRoZXIgdGhhbiBvZiB0aGVcbiAgICAgICAgICAgYXJpYS1oaWRkZW4gbWVkaWEgdGlsZTsgdGhlIHN0eWxlc2hlZXQgbGlmdHMgaXQgb3ZlciB0aGUgdGlsZSdzXG4gICAgICAgICAgIGJvdHRvbSByaWdodCBjb3JuZXIuIEEgcm9sZT1cImJ1dHRvblwiIHNwYW4sIG5vdCBhIDxidXR0b24+OlxuICAgICAgICAgICBpbnRlcmFjdGl2ZSBjb250ZW50IGluc2lkZSBhbiA8YT4gaXMgaW52YWxpZCBIVE1MLiBJdHMgcHJlc3MgbmV2ZXJcbiAgICAgICAgICAgcmVhY2hlcyB0aGUgY2FyZCwgc28gaXQgbmV2ZXIgc2VsZWN0cy4gU29sZC1vdXQgY2FyZHMgaGF2ZSBub25lLiAtLT5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ0lmPVwiaGFzQ2FydChwcm9kdWN0KVwiXG4gICAgICAgIGNsYXNzPVwiYWlhLXByb2R1Y3QtY2FydFwiXG4gICAgICAgIGRhdGEtYWlhLXByb2R1Y3QtY2FydD1cIlwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0cmluZ3MuYWRkVG9DYXJ0ICsgJzogJyArIHByb2R1Y3QudGl0bGVcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJmb2N1c2FibGUgPyAwIDogLTFcIlxuICAgICAgICBbYXR0ci5kYXRhLWFpYS1jYXJ0LXN0YXRlXT1cImNhcnRTdGF0ZShwcm9kdWN0KVwiXG4gICAgICAgIFthdHRyLmFyaWEtYnVzeV09XCJjYXJ0U3RhdGUocHJvZHVjdCkgPT09ICdhZGRpbmcnID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgIChjbGljayk9XCJvbkNhcnRQcmVzcygkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25DYXJ0S2V5RG93bigkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uQ2FyZEZvY3VzKClcIlxuICAgICAgICAoYmx1cik9XCJvbkNhcmRCbHVyKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmb2N1c2FibGU9XCJmYWxzZVwiPlxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiYWlhLXByb2R1Y3QtY2FydC1nbHlwaFwiIGQ9XCJNMiAzaDIuMmwyLjQgMTEuMmEyIDIgMCAwIDAgMiAxLjZoOC45YTIgMiAwIDAgMCAxLjktMS41TDIxIDhINlwiIC8+XG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJhaWEtcHJvZHVjdC1jYXJ0LWdseXBoXCIgZD1cIk0xMy41IDYuNXYtNE0xMS41IDQuNWg0XCIgLz5cbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImFpYS1wcm9kdWN0LWNhcnQtY2hlY2tcIiBkPVwiTTUgMTIuNWw0LjUgNC41TDE5IDcuNVwiIC8+XG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJhaWEtcHJvZHVjdC1jYXJ0LXNwaW5uZXJcIiBkPVwiTTEyIDRhOCA4IDAgMSAwIDggOFwiIC8+XG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImFpYS1wcm9kdWN0LWNhcnQtZ2x5cGhcIiBjeD1cIjlcIiBjeT1cIjIwXCIgcj1cIjEuM1wiIC8+XG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImFpYS1wcm9kdWN0LWNhcnQtZ2x5cGhcIiBjeD1cIjE3LjVcIiBjeT1cIjIwXCIgcj1cIjEuM1wiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9zcGFuPlxuICAgIDwvYT5cbiAgPC9kaXY+XG48L3NlY3Rpb24+XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NoYXJlZC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBBUElDb25maWcsXG4gIEF1dG9jb21wbGV0ZVJlc3VsdCxcbiAgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgQ3VycmVuY3lPcHRpb25zLFxuICBDdXN0b21GaWVsZHNSZXBvcnQsXG4gIERhdGVNb250aFZpZXcsXG4gIERhdGVSYW5nZSxcbiAgRm9ybWF0VHlwZSxcbiAgSWRlbnRpZmllZFBhcmFtU3RhdGUsXG4gIE1hdGNoZWRJdGVtLFxuICBPcHRpb25PdmVycmlkZXMsXG4gIFByb2R1Y3QsXG4gIFByb2R1Y3RzQ29uZmlnLFxuICBTZWdtZW50LFxuICBTa2lwcGVkUGFyYW1TdGF0ZSxcbiAgU3VnZ2VzdGlvbixcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5cbi8qKlxuICogQ29uc3RydWN0aW9uLXRpbWUgb3B0aW9ucyBmb3Ige0BsaW5rIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcn0uXG4gKlxuICogTWlycm9ycyB0aGUgcHJvcHMgdGhlIFJlYWN0IGB1c2VBSUF1dG9jb21wbGV0ZSgpYCBob29rIGFjY2VwdHMsIG1pbnVzIHRoZVxuICogZmllbGRzIHRoYXQgb25seSBtYWtlIHNlbnNlIGZvciBhIFJlYWN0IGNvbXBvbmVudCBzaGVsbCAoYGNvbHVtbnNgIGlzIGhlcmU7XG4gKiBgYXV0b0ZvY3VzYCwgYGNsYXNzTmFtZWAsIGBwaWxsUGxhY2VtZW50YCwgZXRjLiBsaXZlIG9uIHRoZSBUaWVyIDFcbiAqIGA8YWktYXV0b2NvbXBsZXRlPmAgY29tcG9uZW50KS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyB7XG4gIC8qKiBSdW50aW1lIEFQSSBjb25maWd1cmF0aW9uIChhcGlLZXksIGVuZHBvaW50LCBldGMuKS4gKi9cbiAgYXBpQ29uZmlnPzogQVBJQ29uZmlnO1xuICAvKipcbiAgICogT3B0aW9uYWwgdXNlciBjb250ZXh0LiBJbmNsdWRlIHdoYXRldmVyIHlvdSBrbm93IGFib3V0IHRoZSB1c2VyIOKAlCBhXG4gICAqIHByb2ZpbGUsIHByZWZlcmVuY2VzLCB3b3Jrc3BhY2UsIGFueXRoaW5nIOKAlCB0byBwZXJzb25hbGl6ZSBzdWdnZXN0ZWRcbiAgICogcGFyYW1ldGVycyBhbmQgb3B0aW9ucyB0byB0aGVtLlxuICAgKi9cbiAgYWRkaXRpb25hbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEJDUCA0NyBsYW5ndWFnZSB0YWcgKGUuZy4gYFwiZXNcImApLCBzZW50IHdpdGggZXZlcnkgc3VnZ2VzdGlvbiByZXF1ZXN0LlxuICAgKiBEZWZhdWx0OiB0aGUgYnJvd3NlciBsYW5ndWFnZSAoYG5hdmlnYXRvci5sYW5ndWFnZWApLCBlbHNlIGBcImVuLVVTXCJgLlxuICAgKi9cbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIC8qKiBTZW5kcyBjdXJyZW5jeSBjb250ZXh0IHdpdGggc3VnZ2VzdGlvbnMgd2hlbiB0aGUgY29kZSBhbmQgYSBmaW5pdGUgcG9zaXRpdmUgcmF0ZSBhcmUgc2V0LiAqL1xuICBjdXJyZW5jeT86IEN1cnJlbmN5T3B0aW9ucztcbiAgLyoqXG4gICAqIFlvdXIgcHJvZHVjdCBpZC4gV2hlbiBzZXQsIHdoYXQgdGhlIGRyb3Bkb3duIG9mZmVycyBiZWZvcmUgYW55dGhpbmcgaXNcbiAgICogdHlwZWQgaXMgcmVhZCBmcm9tIGEgY2FjaGVhYmxlIFVSTCBmb3IgeW91ciBwcm9kdWN0LCB3aXRoIG5vIGNyZWRlbnRpYWwsXG4gICAqIGluc3RlYWQgb2YgYSBzdWdnZXN0aW9uIHJlcXVlc3Q7IGl0IGZhbGxzIGJhY2sgdG8gYSBzdWdnZXN0aW9uIHJlcXVlc3RcbiAgICogd2hlbiBpdCBjYW5ub3QgYmUgcmVhZC5cbiAgICovXG4gIHByb2R1Y3RJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFN0YWJsZSBpZCBmb3IgdGhpcyB2aXNpdG9yLCBrZXB0IGJ5IHRoZSBob3N0IGFjcm9zcyBwYWdlIGxvYWRzLiBSaWRlcyBvblxuICAgKiB0ZWxlbWV0cnkgZXZlbnRzIHNvIHNlYXJjaGVzIGNhbiBiZSBqb2luZWQgdG8gd2hhdCB0aGUgdmlzaXRvciBkb2VzXG4gICAqIGFmdGVyd2FyZHMuIE11c3QgYmUgYSBVVUlEIHY0OyBvbWl0IHRvIHNlbmQgbm9uZS4gQSBmdW5jdGlvbiBpcyBjYWxsZWRcbiAgICogb25seSBvbmNlIHRoZSBzZXJ2ZXIgaGFzIGZ1bm5lbCB0ZWxlbWV0cnkgb24uXG4gICAqL1xuICB2aXNpdG9ySWQ/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgLyoqIFBlci1zdWdnZXN0aW9uLXR5cGUgY2xpZW50LXNpZGUgb3B0aW9uIG92ZXJyaWRlcy4gKi9cbiAgb3B0aW9uT3ZlcnJpZGVzPzogT3B0aW9uT3ZlcnJpZGVzO1xuICAvKiogV2hlbiB0cnVlLCBjb21wbGV0ZWQgcGFyYW1zJyBsaXRlcmFsIHRleHQgaXMgb21pdHRlZCBmcm9tIEFQSSByZXF1ZXN0cy4gKi9cbiAgbWFza0NvbXBsZXRlZFRleHQ/OiBib29sZWFuO1xuICAvKiogTnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGRyb3Bkb3duIGdyaWQuIERlZmF1bHQ6IDIuICovXG4gIGNvbHVtbnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgZHJvcGRvd24gb3BlbnMgcmVsYXRpdmUgdG8gdGhlIGlucHV0LiBEZWZhdWx0OiBcImJlbG93XCIuXG4gICAqXG4gICAqIFJlYWQgYnkgdGhlIGtleWJvYXJkIGNvbnRyb2xsZXIgdG8gZGVjaWRlIHdoaWNoIHZlcnRpY2FsLWFycm93IGtleSBvcGVuc1xuICAgKiB0aGUgZHJvcGRvd24gZnJvbSB0aGUgaW5wdXQg4oCUIEFycm93RG93biB3aGVuIHRoZSBkcm9wZG93biBpcyBiZWxvdyxcbiAgICogQXJyb3dVcCB3aGVuIGl0J3MgYWJvdmUuXG4gICAqL1xuICBvcHRpb25zUG9zaXRpb24/OiBcImFib3ZlXCIgfCBcImJlbG93XCI7XG4gIC8qKlxuICAgKiBXaGVuIHRoZSBkcm9wZG93biBhcHBlYXJzLiBcImF1dG9cIiAoZGVmYXVsdCkgc2hvd3Mgd2hlbiBvcHRpb25zIGFyZVxuICAgKiBhdmFpbGFibGU7IFwibWFudWFsXCIgc2hvd3Mgb25seSBvbiBwaWxsIHRhcDsgXCJoaWRkZW5cIiBuZXZlciBzaG93cy5cbiAgICovXG4gIGRyb3Bkb3duVHJpZ2dlcj86IFwiYXV0b1wiIHwgXCJtYW51YWxcIiB8IFwiaGlkZGVuXCI7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZHJvcGRvd24gY2xvc2VzIGlmIHRoZSBpbnB1dCBsb3NlcyBmb2N1cy4gKi9cbiAgY2xvc2VEcm9wZG93bk9uQmx1cj86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBub24tdGFwcGFibGUgb3B0aW9ucyByZW5kZXIgYWxvbmdzaWRlIHRhcHBhYmxlIG9uZXMuICovXG4gIHNob3dOb25UYXBwYWJsZU9wdGlvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogU0RLIHN1cmZhY2UgaWRlbnRpZmllciDigJQgc2VudCBhcyBtZXRhLnNvdXJjZSBvbiBib3RoIC9hcGkvc3VnZ2VzdCBhbmRcbiAgICogdGVsZW1ldHJ5IGV2ZW50cy4gU2V0IGF1dG9tYXRpY2FsbHkgdG8gXCJmdWxsLXNka1wiIGJ5IHRoZSBUaWVyIDFcbiAgICogYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQuIERlZmF1bHRzIHRvIFwiaGVhZGxlc3Mtc2RrXCIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc291cmNlPzogXCJmdWxsLXNka1wiIHwgXCJoZWFkbGVzcy1zZGtcIjtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHN1Ym1pdHMgKEVudGVyIGtleSBvciBgc3VibWl0KClgIGFjdGlvbikuICovXG4gIG9uU3VibWl0PzogKHJlc3VsdDogQXV0b2NvbXBsZXRlUmVzdWx0KSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGV2ZXJ5IHN1Y2Nlc3NmdWwgc3VnZ2VzdGlvbiByb3VuZC10cmlwIHdpdGggdGhlIHN0cnVjdHVyZWRcbiAgICogcXVlcnkgYXMgdGhlIFNESyBub3cgdW5kZXJzdGFuZHMgaXQg4oCUIHRoZSBzYW1lIGBBdXRvY29tcGxldGVSZXN1bHRgIHNoYXBlXG4gICAqIGBvblN1Ym1pdGAgZGVsaXZlcnMsIHNvIGEgY29uc3VtZXIgY2FuIG1pcnJvciB0aGUgcXVlcnkgYXMgaXQgaXMgYnVpbHRcbiAgICogKGEgbGl2ZSBwcmV2aWV3LCBhIGRyYWZ0LCBhbmFseXRpY3MpIHdpdGhvdXQgd2FpdGluZyBmb3Igc3VibWl0LlxuICAgKlxuICAgKiBGaXJlcyBvbmNlIHBlciByZXNwb25zZSB0aGF0IHdhcyBhcHBsaWVkLCBpbmNsdWRpbmcgdGhlIGluaXRpYWwgcmVxdWVzdFxuICAgKiBvbiBjb25zdHJ1Y3Rpb24gKGFuIGVtcHR5IHJlc3VsdCkuIERvZXMgbm90IGZpcmUgZm9yIGEgcmVxdWVzdCB0aGF0XG4gICAqIGZhaWxlZCwgd2FzIGFib3J0ZWQsIG9yIHdhcyBzdXBlcnNlZGVkIGJlZm9yZSBpdCByZXR1cm5lZCwgYW5kIG5vdGhpbmdcbiAgICogZmlyZXMgZm9yIGEga2V5c3Ryb2tlIHRoYXQgaGFzbid0IGJlZW4gc2VudCB5ZXQg4oCUIHJlYWQgYGdldFJlc3VsdCgpYCBmb3JcbiAgICogdGhlIGN1cnJlbnQgdmFsdWUgb24gZGVtYW5kLlxuICAgKi9cbiAgb25SZXN1bHQ/OiAocmVzdWx0OiBBdXRvY29tcGxldGVSZXN1bHQpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2hlbiBhIGZldGNoIGZhaWxzLiAqL1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSBlZGl0b3IgdGV4dCBjaGFuZ2VzIChjb250cm9sbGVkLW1vZGUgc2lnbmFsKS4gKi9cbiAgb25DaGFuZ2U/OiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gY29tcGxldGVkIHBhcmFtcyBjaGFuZ2UgKGNvbnRyb2xsZWQtbW9kZSBzaWduYWwpLiAqL1xuICBvblBhcmFtc0NoYW5nZT86IChwYXJhbXM6IENvbXBsZXRlZFBhcmFtU3RhdGVbXSkgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSBpbnB1dCBnYWlucyBmb2N1cy4gKi9cbiAgb25Gb2N1cz86ICgpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuICovXG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZHJvcGRvd24gcmVuZGVycyBhIGhvcml6b250YWwgcm93IG9mIHByb2R1Y3RcbiAgICogY2FyZHMgYmVsb3cgdGhlIG9wdGlvbnMgZ3JpZCB3aGVuZXZlciBpdCBoYXMgcHJvZHVjdHMgdG8gc2hvdzogYnkgZGVmYXVsdFxuICAgKiB0aGUgaXRlbXMgdGhlIGAvc3VnZ2VzdGAgcmVzcG9uc2UgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIG9yIHRoZVxuICAgKiByZXN1bHRzIG9mIGEgY3VzdG9tIGBwcm9kdWN0c2Agc2VhcmNoLiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIG5vIHN0cmlwXG4gICAqIGFuZCBydW4gbm8gY3VzdG9tIHNlYXJjaC5cbiAgICovXG4gIHNob3dQcm9kdWN0cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gc291cmNlIGZvciB0aGUgcHJvZHVjdCBzdHJpcC4gT21pdCBpdCBhbmQgdGhlIHN0cmlwIHNob3dzIHRoZVxuICAgKiBpdGVtcyB0aGUgYC9zdWdnZXN0YCByZXNwb25zZSBpdHNlbGYgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIHdpdGhcbiAgICogbm8gZXh0cmEgcmVxdWVzdC4gU2V0IGl0IGFuZCB0aGUgZHJvcGRvd24gaXMgZmVkIGJ5IHRoZSBpbnRlZ3JhdGlvbidzIG93blxuICAgKiBzZWFyY2ggZW5kcG9pbnQgb24gdGhlIFNESydzIGV4aXN0aW5nIGZldGNoIGNhZGVuY2UgaW5zdGVhZDsgdGhlIHNlcnZlcidzXG4gICAqIGl0ZW1zIGFyZSB0aGVuIG5vdCByZW5kZXJlZC5cbiAgICovXG4gIHByb2R1Y3RzPzogUHJvZHVjdHNDb25maWc7XG4gIC8qKlxuICAgKiBSdW5zIHN5bmNocm9ub3VzbHkgd2l0aCB0aGUgU0RLJ3MgY2FyZHMgYW5kIHRoZWlyIHJlc3BvbnNlIGl0ZW1zIGluIHRoZSBzYW1lIG9yZGVyLlxuICAgKiBUaGUgcHJvZHVjdCBzdHJpcCBzaG93cyB0aGUgcmV0dXJuZWQgYXJyYXkuXG4gICAqIERvZXMgbm90IGFwcGx5IHRvIGEgY3VzdG9tIHByb2R1Y3RzIGludGVncmF0aW9uLlxuICAgKiBBIHRocm93IG9yIGEgcmVzdWx0IHRoYXQgaXMgbm90IGFuIGFycmF5IGtlZXBzIHRoZSBTREsncyBjYXJkcy5cbiAgICovXG4gIG1hcFByb2R1Y3RzPzogKHByb2R1Y3RzOiBQcm9kdWN0W10sIGl0ZW1zOiBNYXRjaGVkSXRlbVtdKSA9PiBQcm9kdWN0W107XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBhY3RpdmF0ZXMgYSBwcm9kdWN0IGNhcmQuIFRoZSBTREsgZG9lcyBub3QgbmF2aWdhdGUg4oCUXG4gICAqIHRoZSBpbnRlZ3JhdGlvbiBkZWNpZGVzIHdoYXQgYSBzZWxlY3Rpb24gbWVhbnMuIE1vZGlmaWVyIC8gbWlkZGxlIGNsaWNrc1xuICAgKiBhcmUgbGVmdCB0byB0aGUgYnJvd3NlciAoY21kLWNsaWNrIHN0aWxsIG9wZW5zIGEgdGFiKSBhbmQgZG9uJ3QgZmlyZSB0aGlzLlxuICAgKi9cbiAgb25Qcm9kdWN0U2VsZWN0PzogKHByb2R1Y3Q6IFByb2R1Y3QpID0+IHZvaWQ7XG4gIC8qKiBJbml0aWFsIGNvbnRyb2xsZWQgdGV4dCB2YWx1ZS4gKi9cbiAgdmFsdWU/OiBzdHJpbmc7XG4gIC8qKiBJbml0aWFsIGNvbnRyb2xsZWQgY29tcGxldGVkIHBhcmFtcy4gKi9cbiAgY29tcGxldGVkUGFyYW1zPzogQ29tcGxldGVkUGFyYW1TdGF0ZVtdO1xuICAvKipcbiAgICogQ2FyZXQtc2V0IGNhbGxiYWNrLiBJbnZva2VkIGJ5IHRoZSBjb3JlIHdoZW4gcmUtZWRpdCAvIEJhY2tzcGFjZSBmbG93c1xuICAgKiBuZWVkIHRoZSBlZGl0b3IgY2FyZXQgcGFya2VkIGF0IGEgc3BlY2lmaWMgcGxhaW4tdGV4dCBvZmZzZXQuIFRoZSBUaWVyIDFcbiAgICogYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQgd2lyZXMgdGhpcyBmcm9tIGl0cyBlZGl0b3IgaG9zdDsgaGVhZGxlc3NcbiAgICogY29uc3VtZXJzIGNhbiBsZWF2ZSBpdCB1bnNldC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBzZXRDdXJzb3I/OiAob2Zmc2V0OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogU3Vic2V0IG9mIHtAbGluayBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJPcHRpb25zfSB0aGF0IGNhbiBiZSBjaGFuZ2VkIGFmdGVyXG4gKiBjb25zdHJ1Y3Rpb24uIEV4Y2x1ZGVzIGV2ZW50IGNhbGxiYWNrcyAodGhvc2UgYXJlIHJlZ2lzdGVyZWQgb25jZSBhdFxuICogY29uc3RydWN0aW9uIOKAlCBzZWUgdmFuaWxsYSBgQ29yZVVwZGF0ZU9wdGlvbnNgKS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclVwZGF0ZSA9IFBhcnRpYWw8XG4gIE9taXQ8XG4gICAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyxcbiAgICB8IFwib25TdWJtaXRcIlxuICAgIHwgXCJvblJlc3VsdFwiXG4gICAgfCBcIm9uRXJyb3JcIlxuICAgIHwgXCJvbkNoYW5nZVwiXG4gICAgfCBcIm9uUGFyYW1zQ2hhbmdlXCJcbiAgICB8IFwib25Gb2N1c1wiXG4gICAgfCBcIm9uQmx1clwiXG4gICAgfCBcIm9uUHJvZHVjdFNlbGVjdFwiXG4gICAgfCBcInNldEN1cnNvclwiXG4gID5cbj47XG5cbi8qKlxuICogU25hcHNob3Qgb2YgdGhlIGNvbnRyb2xsZXIncyByZWFjdGl2ZSBzdGF0ZS4gRWFjaCBmaWVsZCBpcyBhbHNvIGV4cG9zZWQgYXNcbiAqIGEgc3RhbmQtYWxvbmUgb2JzZXJ2YWJsZSBvbiB0aGUgY29udHJvbGxlciAoZS5nLiBgY29udHJvbGxlci50ZXh0JGApLlxuICpcbiAqIGBzdWdnZXN0aW9uUGlsbHNgIG1pcnJvcnMgUmVhY3QncyBgc3VnZ2VzdGlvblBpbGxzYCDigJQgdGhlIGFjdGlvbmFibGVcbiAqIHN1YnNldCBvZiBgc3VnZ2VzdGlvbnNgIHJlYWR5IGZvciBwaWxsIHJlbmRlcmluZy4gYGlzTG9hZGluZ2AgaXMgdGhlXG4gKiBVSS12aXNpYmxlIGxvYWRpbmcgZmxhZyAoc3VwcHJlc3NlZCBkdXJpbmcgdGhlIHBvc3Qtc2VsZWN0IHByZXNzXG4gKiBhbmltYXRpb24gYW5kIGR1cmluZyByZS1lZGl0LCB3aGVyZSBjYWNoZWQgb3B0aW9ucyBzdGF5IHZpc2libGUpLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSB7XG4gIHRleHQ6IHN0cmluZztcbiAgY29tcGxldGVkUGFyYW1zOiBDb21wbGV0ZWRQYXJhbVN0YXRlW107XG4gIC8qKlxuICAgKiBTdWdnZXN0aW9ucyB0aGUgdXNlciBkaXNtaXNzZWQgd2l0aCB0aGUgc2tpcCBrZXkgKOKGkikuIE5vdGhpbmcgcmVuZGVyc1xuICAgKiB0aGVtIOKAlCBwYXNzIHRoZW0gdG8gYGJ1aWxkU3VibWl0UmVzdWx0YCBzbyBhIGhhbmQtcm9sbGVkIHN1Ym1pdCBjYXJyaWVzXG4gICAqIHRoZSBzYW1lIGB0ZXh0OiBcInNraXBwZWRcImAgZW50cmllcyB0aGUgU0RLJ3Mgb3duIHJlcXVlc3RzIGRvLlxuICAgKi9cbiAgc2tpcHBlZFBhcmFtczogU2tpcHBlZFBhcmFtU3RhdGVbXTtcbiAgLyoqXG4gICAqIFBhcmFtcyB0aGUgc2VydmVyIGlkZW50aWZpZWQgaW4gdGhlIHVzZXIncyBvd24gd29yZHMuIEFscmVhZHkgcmVuZGVyZWRcbiAgICogdGhyb3VnaCBgc2VnbWVudHNgOyBleHBvc2VkIHNvIGEgaGFuZC1yb2xsZWQgc3VibWl0IGNhbiBwYXNzIHRoZW0gdG9cbiAgICogYGJ1aWxkU3VibWl0UmVzdWx0YCBhbmQgcmVwb3J0IHRoZSBzYW1lIGBpZGVudGlmaWVkX3BhcmFtc2AgdGhlIFNESydzXG4gICAqIG93biByZXN1bHRzIGNhcnJ5LlxuICAgKi9cbiAgaWRlbnRpZmllZFBhcmFtczogSWRlbnRpZmllZFBhcmFtU3RhdGVbXTtcbiAgc3VnZ2VzdGlvblBpbGxzOiBTdWdnZXN0aW9uW107XG4gIHNlZ21lbnRzOiBTZWdtZW50W107XG4gIG5ld1BhcmFtSWQ6IHN0cmluZyB8IG51bGw7XG4gIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW107XG4gIC8qKlxuICAgKiBXaGF0IHRoZSBwcm9kdWN0IHN0cmlwIHNob3dzOiB0aGUgaXRlbXMgdGhlIGxhdGVzdCBgL3N1Z2dlc3RgIHJlc3BvbnNlXG4gICAqIHJlcG9ydGVkIGFzIG1hdGNoaW5nIHRoZSBxdWVyeSwgb3IgdGhlIHJlc3VsdHMgb2YgYSBjdXN0b20gYHByb2R1Y3RzYFxuICAgKiBzZWFyY2guIEFscmVhZHkgZm9sZGVkIGludG8gdGhlIGRyb3Bkb3duIHNuYXBzaG90IOKAlCByZWFkIGl0IGhlcmUgb25seVxuICAgKiB3aGVuIHJlbmRlcmluZyB5b3VyIG93biBzdHJpcC5cbiAgICovXG4gIHByb2R1Y3RzOiBQcm9kdWN0W107XG4gIC8qKlxuICAgKiBUaGUgY2F0YWxvZyBncm91bmRpbmcgcmVwb3J0IHRoZSBsYXRlc3QgcmVzcG9uc2UgY2FycmllZCwgb3IgbnVsbCB3aGVuIGl0XG4gICAqIGNhcnJpZWQgbm9uZTogd2hpY2ggb2YgdGhlIHF1ZXJ5J3MgY29uc3RyYWludHMgdGhlIGNhdGFsb2cgYXBwbGllZCwgd2hpY2hcbiAgICogaXQgZHJvcHBlZCwgYW5kIGhvdyBtYW55IGl0ZW1zIChhbmQgd2hpY2gpIHRoZSBhcHBsaWVkIG9uZXMgbGVmdFxuICAgKiBzdGFuZGluZy4gTnVsbCBpcyBcIm5vIG5ld3NcIiwgbm90IGFuIGVtcHR5IGNhdGFsb2cuXG4gICAqL1xuICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkc1JlcG9ydCB8IG51bGw7XG4gIGFjdGl2ZUluZGV4OiBudW1iZXI7XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgaXNSZWFkeTogYm9vbGVhbjtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Ryb3Bkb3duT3BlbjogYm9vbGVhbjtcbiAgcGxhY2Vob2xkZXJUZXh0OiBzdHJpbmc7XG4gIGVycm9yOiBFcnJvciB8IG51bGw7XG4gIGVkaXRpbmdQYXJhbTogQ29tcGxldGVkUGFyYW1TdGF0ZSB8IG51bGw7XG4gIC8qKlxuICAgKiBTZXQgd2hpbGUgdGhlIHVzZXIgaXMgcGlja2luZyBhIGRhdGUgZm9yIGEgc3BhbiB0aGUgc2VydmVyIGlkZW50aWZpZWQgYXNcbiAgICogb25lIOKAlCBcInNlcHRlbWJlciA1dGhcIiBpbiBcImZseSB0byB2ZWdhcyBvbiBzZXB0ZW1iZXIgNXRoXCIuIE51bGwgb3RoZXJ3aXNlLlxuICAgKi9cbiAgZWRpdGluZ0lkZW50aWZpZWQ6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHBhcmFtZXRlcjogc3RyaW5nO1xuICAgIGFuY2hvcjogbnVtYmVyO1xuICAgIHRhaWw6IG51bWJlcjtcbiAgICAvKiogVGhlIGRhdGUgdGhlIHNwYW4gd2FzIHJlYWQgYXMsIG9yIGEgcmFuZ2UncyBzdGFydC4gTnVsbCB3aGVuIGl0IGNvdWxkbid0IGJlIHJlYWQuICovXG4gICAgaXNvOiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKiBUaGUgb3RoZXIgZW5kLCB3aGVuIHRoZSBzcGFuIHJlYWRzIGFzIGEgcmFuZ2UgcmF0aGVyIHRoYW4gYXMgb25lIGRheS4gKi9cbiAgICBpc29FbmQ6IHN0cmluZyB8IG51bGw7XG4gICAgLyoqIFdoZXRoZXIgdGhhdCBzcGFuIGlzIGFuc3dlcmVkIGJ5IGEgY2FsZW5kYXIsIG9yIGEgY2FsZW5kYXIgaW4gdHdvIHRhcHMuICovXG4gICAgZm9ybWF0OiBGb3JtYXRUeXBlO1xuICB9IHwgbnVsbDtcbiAgZWRpdGluZ0FuY2hvcjogbnVtYmVyIHwgbnVsbDtcbiAgY2FyZXRPZmZzZXQ6IG51bWJlciB8IG51bGw7XG59XG5cbi8qKlxuICogQ29tcG9zaXRlIHN0YXRlIHNoYXBlIGZvciB0aGUgZHJvcGRvd24gdmlldyBsYXllci4gVGllciAyIGNvbnN1bWVycyBiaW5kXG4gKiB0aGUgZHJvcGRvd24gY29tcG9uZW50IHRvIHRoaXMgc25hcHNob3Q7IFRpZXIgMSB1c2VzIHRoZSBzYW1lIHNoYXBlXG4gKiBpbnRlcm5hbGx5LlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUge1xuICAvKiogQWN0aXZlIHN1Z2dlc3Rpb24gKyBmaWx0ZXJlZCBvcHRpb25zIHRvIHJlbmRlciBpbiB0aGUgZ3JpZC4gKi9cbiAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgLyoqIEN1cnJlbnRseSBoaWdobGlnaHRlZCBvcHRpb24gaW5kZXguIC0xIHdoZW4gbm9uZS4gKi9cbiAgYWN0aXZlSW5kZXg6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdGhlIGRyb3Bkb3duIHNob3VsZCBiZSB2aXNpYmxlLiAqL1xuICBpc09wZW46IGJvb2xlYW47XG4gIC8qKiBQaWxscyB0byByZW5kZXIgaW4gdGhlIGRyb3Bkb3duJ3MgcGlsbGJhciAocmUtZWRpdCBwaWxsIG9yIGFsbCBzdWdnZXN0aW9uIHBpbGxzKS4gKi9cbiAgcGlsbHM6IFN1Z2dlc3Rpb25bXTtcbiAgLyoqIFdoZXRoZXIgdGhlIGFjdGl2ZSBwaWxsIHJlbmRlcnMgc2VsZWN0ZWQgKGZ1bGwgb3BhY2l0eSkgdnMuIHRoZSBgZmlyc3RgIHRpZXIuICovXG4gIGlzQWN0aXZlUGlsbFNlbGVjdGVkOiBib29sZWFuO1xuICAvKiogVHJ1ZSB3aGVuIHRoZSBkcm9wZG93biBzaG91bGQgcmVuZGVyIGl0cyBsb2FkaW5nIHNrZWxldG9uLiAqL1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBpbnB1dCBoYXMgbm8gdHlwZWQgdGV4dCDigJQgdGhlIHNvbGUgc3RhdGUgdGhhdCBzdXJmYWNlcyBcInRhYiB0byBzZWxlY3RcIiBpbiB0aGUgZm9vdGVyIGhpbnQuICovXG4gIGlzSW5wdXRFbXB0eTogYm9vbGVhbjtcbiAgLyoqIFByb2R1Y3QgY2FyZHMgdG8gcmVuZGVyIGJlbG93IHRoZSBvcHRpb25zIGdyaWQuIEVtcHR5IHJlbmRlcnMgbm8gc3RyaXAuICovXG4gIHByb2R1Y3RzOiBQcm9kdWN0W107XG4gIC8qKlxuICAgKiBUcnVlIHdoaWxlIGEgY29tcGxldGVkIHBhcmFtIGlzIGJlaW5nIHJlLWVkaXRlZC4gVGhlIHBpbGxiYXIgdGhlbiBzaG93c1xuICAgKiB0aGUgcGFyYW0gYmVpbmcgcmUtZWRpdGVkIOKAlCBub3Qgc2tpcHBhYmxlIOKAlCBzbyB0aGUgc2tpcCBidXR0b24gaGlkZXMuXG4gICAqIE9wdGlvbmFsICh1bmRlZmluZWQg4oeSIG5vdCBlZGl0aW5nKSBzbyBleGlzdGluZyBjb25zdW1lciBjb2RlIGNvbnN0cnVjdGluZ1xuICAgKiB0aGlzIHN0YXRlIOKAlCB0ZXN0IGZpeHR1cmVzLCBmYWtlIGNvbnRyb2xsZXJzIOKAlCBrZWVwcyBjb21waWxpbmcgYWNyb3NzIHRoZVxuICAgKiBtaW5vciBidW1wIHRoYXQgaW50cm9kdWNlZCBpdC5cbiAgICovXG4gIGlzRWRpdGluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIGZvciB0aGUgfjE3MG1zIHdpbmRvdyBhZnRlciBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHdoaWxlIHRoZSBhbnN3ZXJlZFxuICAgKiBzdWdnZXN0aW9uIGFuaW1hdGVzIG91dC4gYGlzTG9hZGluZ2AgaXMgZGVsaWJlcmF0ZWx5IHN1cHByZXNzZWQgaW4gdGhhdFxuICAgKiB3aW5kb3csIGJ1dCB0aGUgY29yZSdzIGBza2lwQWN0aXZlUGlsbCgpYCBuby1vcHMgaW4gaXQg4oCUIHRoZSBza2lwIGJ1dHRvblxuICAgKiByZW5kZXJzIGRpc2FibGVkIG9mZiB0aGlzIGZsYWcgaW5zdGVhZCBvZiBzd2FsbG93aW5nIGNsaWNrcyBzaWxlbnRseS5cbiAgICogT3B0aW9uYWwgKHVuZGVmaW5lZCDih5IgZmFsc2UpIGZvciB0aGUgc2FtZSBjb21waWxlLWNvbXBhdCByZWFzb24gYXNcbiAgICogYGlzRWRpdGluZ2AuXG4gICAqL1xuICBpblNlbGVjdGlvbkFuaW1hdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIHdoaWxlIHRoZSBsb2FkaW5nIHNrZWxldG9uIGZhZGVzIG91dCBiZWZvcmUgdGhlIHJlc3BvbnNlJ3Mgb3B0aW9uc1xuICAgKiByZXBsYWNlIGl0LiBPcHRpb25hbCAodW5kZWZpbmVkIOKHkiBmYWxzZSkgZm9yIHRoZSBzYW1lIGNvbXBpbGUtY29tcGF0XG4gICAqIHJlYXNvbiBhcyBgaXNFZGl0aW5nYC5cbiAgICovXG4gIHNrZWxldG9uRXhpdGluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgZHJvcGRvd24gb3BlbnMgcmVsYXRpdmUgdG8gdGhlIGlucHV0IOKAlCBtaXJyb3JzIHRoZSBjb250cm9sbGVyJ3NcbiAgICogYG9wdGlvbnNQb3NpdGlvbmAgb3B0aW9uLiBgPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93bj5gIHJlYWRzIGl0IGZyb20gaGVyZSwgc29cbiAgICogcGxhY2VtZW50IGlzIGNvbmZpZ3VyZWQgb25jZSBvbiB0aGUgY29udHJvbGxlciAobm8gc2VwYXJhdGUgaW5wdXQgdG8gc3luYykuXG4gICAqL1xuICBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIjtcbiAgLyoqXG4gICAqIEhvdyB0aGUgYWN0aXZlIHBpbGwgaXMgYW5zd2VyZWQuIGBcImRhdGVcImAgYW5kIGBcImRhdGUtcmFuZ2VcImAgcmVuZGVyIGFcbiAgICogY2FsZW5kYXIgaW4gcGxhY2Ugb2YgdGhlIG9wdGlvbnMgZ3JpZCwgYW5kIGBzdWdnZXN0aW9uc1swXS5vcHRpb25zYCB0aGVuXG4gICAqIGNhcnJpZXMgdGhhdCBtb250aCdzIGNlbGxzIHJhdGhlciB0aGFuIHRoZSBwYXJhbWV0ZXIncyBvd24gb3B0aW9ucyDigJQgdGhlXG4gICAqIGNvcmUgc3dhcHMgdGhlbSBiZWZvcmUgdGhleSByZWFjaCBoZXJlLiBBIGBcImRhdGUtcmFuZ2VcImAgcGFyYW1ldGVyIGlzXG4gICAqIGFuc3dlcmVkIGJ5IHR3byB0YXBzIG9mIHRoYXQgY2FsZW5kYXIsIGEgc3RhcnQgYW5kIGFuIGVuZCwgY29tbWl0dGVkIGFzIG9uZVxuICAgKiBzcGFuLiBPcHRpb25hbCAodW5kZWZpbmVkIOKHkiBgXCJvcHRpb25zXCJgKSBmb3IgdGhlIHNhbWUgY29tcGlsZS1jb21wYXQgcmVhc29uXG4gICAqIGFzIGBpc0VkaXRpbmdgLlxuICAgKi9cbiAgZm9ybWF0VHlwZT86IEZvcm1hdFR5cGU7XG4gIC8qKiBUaGUgbW9udGggdGhlIGNhbGVuZGFyIHNob3dzLiBOdWxsL3VuZGVmaW5lZCB1bmxlc3MgYGZvcm1hdFR5cGVgIGlzIGEgY2FsZW5kYXIgb25lLiAqL1xuICBkYXRlVmlldz86IERhdGVNb250aFZpZXcgfCBudWxsO1xuICAvKiogYFlZWVktTU0tRERgIGFscmVhZHkgaGVsZCBieSB0aGUgcGFyYW0gYmVpbmcgcmUtZWRpdGVkLCBzbyBpdHMgY2VsbCByZWFkcyBhcyB0aGUgY3VycmVudCBhbnN3ZXIuICovXG4gIHNlbGVjdGVkRGF0ZUlzbz86IHN0cmluZyB8IG51bGw7XG4gIC8qKiBCb3RoIGVuZHMgb2YgYSByYW5nZSBwYXJhbSBiZWluZyByZS1lZGl0ZWQsIHNvIGJvdGggY2VsbHMgcmVhZCBhcyB0aGUgY3VycmVudCBhbnN3ZXIuICovXG4gIHNlbGVjdGVkRGF0ZVJhbmdlPzogRGF0ZVJhbmdlIHwgbnVsbDtcbiAgLyoqIFRoZSBmaXJzdCBlbmQgb2YgYSByYW5nZSBwaWNrZWQgc28gZmFyLCB3aGlsZSB0aGUgdXNlciBjaG9vc2VzIHRoZSBzZWNvbmQuICovXG4gIGRhdGVSYW5nZVN0YXJ0Pzogc3RyaW5nIHwgbnVsbDtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NoYXJlZC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBBUElDb25maWcsXG4gIEF1dG9jb21wbGV0ZVJlc3VsdCxcbiAgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgQ3VycmVuY3lPcHRpb25zLFxuICBDdXN0b21GaWVsZHNSZXBvcnQsXG4gIERhdGVNb250aFZpZXcsXG4gIERhdGVSYW5nZSxcbiAgRm9ybWF0VHlwZSxcbiAgSWRlbnRpZmllZFBhcmFtU3RhdGUsXG4gIE1hdGNoZWRJdGVtLFxuICBPcHRpb25PdmVycmlkZXMsXG4gIFByb2R1Y3QsXG4gIFByb2R1Y3RzQ29uZmlnLFxuICBTZWdtZW50LFxuICBTa2lwcGVkUGFyYW1TdGF0ZSxcbiAgU3VnZ2VzdGlvbixcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5cbi8qKlxuICogQ29uc3RydWN0aW9uLXRpbWUgb3B0aW9ucyBmb3Ige0BsaW5rIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcn0uXG4gKlxuICogTWlycm9ycyB0aGUgcHJvcHMgdGhlIFJlYWN0IGB1c2VBSUF1dG9jb21wbGV0ZSgpYCBob29rIGFjY2VwdHMsIG1pbnVzIHRoZVxuICogZmllbGRzIHRoYXQgb25seSBtYWtlIHNlbnNlIGZvciBhIFJlYWN0IGNvbXBvbmVudCBzaGVsbCAoYGNvbHVtbnNgIGlzIGhlcmU7XG4gKiBgYXV0b0ZvY3VzYCwgYGNsYXNzTmFtZWAsIGBwaWxsUGxhY2VtZW50YCwgZXRjLiBsaXZlIG9uIHRoZSBUaWVyIDFcbiAqIGA8YWktYXV0b2NvbXBsZXRlPmAgY29tcG9uZW50KS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyB7XG4gIC8qKiBSdW50aW1lIEFQSSBjb25maWd1cmF0aW9uIChhcGlLZXksIGVuZHBvaW50LCBldGMuKS4gKi9cbiAgYXBpQ29uZmlnPzogQVBJQ29uZmlnO1xuICAvKipcbiAgICogT3B0aW9uYWwgdXNlciBjb250ZXh0LiBJbmNsdWRlIHdoYXRldmVyIHlvdSBrbm93IGFib3V0IHRoZSB1c2VyIOKAlCBhXG4gICAqIHByb2ZpbGUsIHByZWZlcmVuY2VzLCB3b3Jrc3BhY2UsIGFueXRoaW5nIOKAlCB0byBwZXJzb25hbGl6ZSBzdWdnZXN0ZWRcbiAgICogcGFyYW1ldGVycyBhbmQgb3B0aW9ucyB0byB0aGVtLlxuICAgKi9cbiAgYWRkaXRpb25hbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEJDUCA0NyBsYW5ndWFnZSB0YWcgKGUuZy4gYFwiZXNcImApLCBzZW50IHdpdGggZXZlcnkgc3VnZ2VzdGlvbiByZXF1ZXN0LlxuICAgKiBEZWZhdWx0OiB0aGUgYnJvd3NlciBsYW5ndWFnZSAoYG5hdmlnYXRvci5sYW5ndWFnZWApLCBlbHNlIGBcImVuLVVTXCJgLlxuICAgKi9cbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIC8qKiBTZW5kcyBjdXJyZW5jeSBjb250ZXh0IHdpdGggc3VnZ2VzdGlvbnMgd2hlbiB0aGUgY29kZSBhbmQgYSBmaW5pdGUgcG9zaXRpdmUgcmF0ZSBhcmUgc2V0LiAqL1xuICBjdXJyZW5jeT86IEN1cnJlbmN5T3B0aW9ucztcbiAgLyoqXG4gICAqIFlvdXIgcHJvZHVjdCBpZC4gV2hlbiBzZXQsIHdoYXQgdGhlIGRyb3Bkb3duIG9mZmVycyBiZWZvcmUgYW55dGhpbmcgaXNcbiAgICogdHlwZWQgaXMgcmVhZCBmcm9tIGEgY2FjaGVhYmxlIFVSTCBmb3IgeW91ciBwcm9kdWN0LCB3aXRoIG5vIGNyZWRlbnRpYWwsXG4gICAqIGluc3RlYWQgb2YgYSBzdWdnZXN0aW9uIHJlcXVlc3Q7IGl0IGZhbGxzIGJhY2sgdG8gYSBzdWdnZXN0aW9uIHJlcXVlc3RcbiAgICogd2hlbiBpdCBjYW5ub3QgYmUgcmVhZC5cbiAgICovXG4gIHByb2R1Y3RJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFN0YWJsZSBpZCBmb3IgdGhpcyB2aXNpdG9yLCBrZXB0IGJ5IHRoZSBob3N0IGFjcm9zcyBwYWdlIGxvYWRzLiBSaWRlcyBvblxuICAgKiB0ZWxlbWV0cnkgZXZlbnRzIHNvIHNlYXJjaGVzIGNhbiBiZSBqb2luZWQgdG8gd2hhdCB0aGUgdmlzaXRvciBkb2VzXG4gICAqIGFmdGVyd2FyZHMuIE11c3QgYmUgYSBVVUlEIHY0OyBvbWl0IHRvIHNlbmQgbm9uZS4gQSBmdW5jdGlvbiBpcyBjYWxsZWRcbiAgICogb25seSBvbmNlIHRoZSBzZXJ2ZXIgaGFzIGZ1bm5lbCB0ZWxlbWV0cnkgb24uXG4gICAqL1xuICB2aXNpdG9ySWQ/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgLyoqIFBlci1zdWdnZXN0aW9uLXR5cGUgY2xpZW50LXNpZGUgb3B0aW9uIG92ZXJyaWRlcy4gKi9cbiAgb3B0aW9uT3ZlcnJpZGVzPzogT3B0aW9uT3ZlcnJpZGVzO1xuICAvKiogV2hlbiB0cnVlLCBjb21wbGV0ZWQgcGFyYW1zJyBsaXRlcmFsIHRleHQgaXMgb21pdHRlZCBmcm9tIEFQSSByZXF1ZXN0cy4gKi9cbiAgbWFza0NvbXBsZXRlZFRleHQ/OiBib29sZWFuO1xuICAvKiogTnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGRyb3Bkb3duIGdyaWQuIERlZmF1bHQ6IDIuICovXG4gIGNvbHVtbnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgZHJvcGRvd24gb3BlbnMgcmVsYXRpdmUgdG8gdGhlIGlucHV0LiBEZWZhdWx0OiBcImJlbG93XCIuXG4gICAqXG4gICAqIFJlYWQgYnkgdGhlIGtleWJvYXJkIGNvbnRyb2xsZXIgdG8gZGVjaWRlIHdoaWNoIHZlcnRpY2FsLWFycm93IGtleSBvcGVuc1xuICAgKiB0aGUgZHJvcGRvd24gZnJvbSB0aGUgaW5wdXQg4oCUIEFycm93RG93biB3aGVuIHRoZSBkcm9wZG93biBpcyBiZWxvdyxcbiAgICogQXJyb3dVcCB3aGVuIGl0J3MgYWJvdmUuXG4gICAqL1xuICBvcHRpb25zUG9zaXRpb24/OiBcImFib3ZlXCIgfCBcImJlbG93XCI7XG4gIC8qKlxuICAgKiBXaGVuIHRoZSBkcm9wZG93biBhcHBlYXJzLiBcImF1dG9cIiAoZGVmYXVsdCkgc2hvd3Mgd2hlbiBvcHRpb25zIGFyZVxuICAgKiBhdmFpbGFibGU7IFwibWFudWFsXCIgc2hvd3Mgb25seSBvbiBwaWxsIHRhcDsgXCJoaWRkZW5cIiBuZXZlciBzaG93cy5cbiAgICovXG4gIGRyb3Bkb3duVHJpZ2dlcj86IFwiYXV0b1wiIHwgXCJtYW51YWxcIiB8IFwiaGlkZGVuXCI7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZHJvcGRvd24gY2xvc2VzIGlmIHRoZSBpbnB1dCBsb3NlcyBmb2N1cy4gKi9cbiAgY2xvc2VEcm9wZG93bk9uQmx1cj86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBub24tdGFwcGFibGUgb3B0aW9ucyByZW5kZXIgYWxvbmdzaWRlIHRhcHBhYmxlIG9uZXMuICovXG4gIHNob3dOb25UYXBwYWJsZU9wdGlvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogU0RLIHN1cmZhY2UgaWRlbnRpZmllciDigJQgc2VudCBhcyBtZXRhLnNvdXJjZSBvbiBib3RoIC9hcGkvc3VnZ2VzdCBhbmRcbiAgICogdGVsZW1ldHJ5IGV2ZW50cy4gU2V0IGF1dG9tYXRpY2FsbHkgdG8gXCJmdWxsLXNka1wiIGJ5IHRoZSBUaWVyIDFcbiAgICogYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQuIERlZmF1bHRzIHRvIFwiaGVhZGxlc3Mtc2RrXCIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc291cmNlPzogXCJmdWxsLXNka1wiIHwgXCJoZWFkbGVzcy1zZGtcIjtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHN1Ym1pdHMgKEVudGVyIGtleSBvciBgc3VibWl0KClgIGFjdGlvbikuICovXG4gIG9uU3VibWl0PzogKHJlc3VsdDogQXV0b2NvbXBsZXRlUmVzdWx0KSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGV2ZXJ5IHN1Y2Nlc3NmdWwgc3VnZ2VzdGlvbiByb3VuZC10cmlwIHdpdGggdGhlIHN0cnVjdHVyZWRcbiAgICogcXVlcnkgYXMgdGhlIFNESyBub3cgdW5kZXJzdGFuZHMgaXQg4oCUIHRoZSBzYW1lIGBBdXRvY29tcGxldGVSZXN1bHRgIHNoYXBlXG4gICAqIGBvblN1Ym1pdGAgZGVsaXZlcnMsIHNvIGEgY29uc3VtZXIgY2FuIG1pcnJvciB0aGUgcXVlcnkgYXMgaXQgaXMgYnVpbHRcbiAgICogKGEgbGl2ZSBwcmV2aWV3LCBhIGRyYWZ0LCBhbmFseXRpY3MpIHdpdGhvdXQgd2FpdGluZyBmb3Igc3VibWl0LlxuICAgKlxuICAgKiBGaXJlcyBvbmNlIHBlciByZXNwb25zZSB0aGF0IHdhcyBhcHBsaWVkLCBpbmNsdWRpbmcgdGhlIGluaXRpYWwgcmVxdWVzdFxuICAgKiBvbiBjb25zdHJ1Y3Rpb24gKGFuIGVtcHR5IHJlc3VsdCkuIERvZXMgbm90IGZpcmUgZm9yIGEgcmVxdWVzdCB0aGF0XG4gICAqIGZhaWxlZCwgd2FzIGFib3J0ZWQsIG9yIHdhcyBzdXBlcnNlZGVkIGJlZm9yZSBpdCByZXR1cm5lZCwgYW5kIG5vdGhpbmdcbiAgICogZmlyZXMgZm9yIGEga2V5c3Ryb2tlIHRoYXQgaGFzbid0IGJlZW4gc2VudCB5ZXQg4oCUIHJlYWQgYGdldFJlc3VsdCgpYCBmb3JcbiAgICogdGhlIGN1cnJlbnQgdmFsdWUgb24gZGVtYW5kLlxuICAgKi9cbiAgb25SZXN1bHQ/OiAocmVzdWx0OiBBdXRvY29tcGxldGVSZXN1bHQpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2hlbiBhIGZldGNoIGZhaWxzLiAqL1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSBlZGl0b3IgdGV4dCBjaGFuZ2VzIChjb250cm9sbGVkLW1vZGUgc2lnbmFsKS4gKi9cbiAgb25DaGFuZ2U/OiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gY29tcGxldGVkIHBhcmFtcyBjaGFuZ2UgKGNvbnRyb2xsZWQtbW9kZSBzaWduYWwpLiAqL1xuICBvblBhcmFtc0NoYW5nZT86IChwYXJhbXM6IENvbXBsZXRlZFBhcmFtU3RhdGVbXSkgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSBpbnB1dCBnYWlucyBmb2N1cy4gKi9cbiAgb25Gb2N1cz86ICgpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuICovXG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZHJvcGRvd24gcmVuZGVycyBhIGhvcml6b250YWwgcm93IG9mIHByb2R1Y3RcbiAgICogY2FyZHMgYmVsb3cgdGhlIG9wdGlvbnMgZ3JpZCB3aGVuZXZlciBpdCBoYXMgcHJvZHVjdHMgdG8gc2hvdzogYnkgZGVmYXVsdFxuICAgKiB0aGUgaXRlbXMgdGhlIGAvc3VnZ2VzdGAgcmVzcG9uc2UgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIG9yIHRoZVxuICAgKiByZXN1bHRzIG9mIGEgY3VzdG9tIGBwcm9kdWN0c2Agc2VhcmNoLiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIG5vIHN0cmlwXG4gICAqIGFuZCBydW4gbm8gY3VzdG9tIHNlYXJjaC5cbiAgICovXG4gIHNob3dQcm9kdWN0cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gc291cmNlIGZvciB0aGUgcHJvZHVjdCBzdHJpcC4gT21pdCBpdCBhbmQgdGhlIHN0cmlwIHNob3dzIHRoZVxuICAgKiBpdGVtcyB0aGUgYC9zdWdnZXN0YCByZXNwb25zZSBpdHNlbGYgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIHdpdGhcbiAgICogbm8gZXh0cmEgcmVxdWVzdC4gU2V0IGl0IGFuZCB0aGUgZHJvcGRvd24gaXMgZmVkIGJ5IHRoZSBpbnRlZ3JhdGlvbidzIG93blxuICAgKiBzZWFyY2ggZW5kcG9pbnQgb24gdGhlIFNESydzIGV4aXN0aW5nIGZldGNoIGNhZGVuY2UgaW5zdGVhZDsgdGhlIHNlcnZlcidzXG4gICAqIGl0ZW1zIGFyZSB0aGVuIG5vdCByZW5kZXJlZC5cbiAgICovXG4gIHByb2R1Y3RzPzogUHJvZHVjdHNDb25maWc7XG4gIC8qKlxuICAgKiBSdW5zIHN5bmNocm9ub3VzbHkgd2l0aCB0aGUgU0RLJ3MgY2FyZHMgYW5kIHRoZWlyIHJlc3BvbnNlIGl0ZW1zIGluIHRoZSBzYW1lIG9yZGVyLlxuICAgKiBUaGUgcHJvZHVjdCBzdHJpcCBzaG93cyB0aGUgcmV0dXJuZWQgYXJyYXkuXG4gICAqIERvZXMgbm90IGFwcGx5IHRvIGEgY3VzdG9tIHByb2R1Y3RzIGludGVncmF0aW9uLlxuICAgKiBBIHRocm93IG9yIGEgcmVzdWx0IHRoYXQgaXMgbm90IGFuIGFycmF5IGtlZXBzIHRoZSBTREsncyBjYXJkcy5cbiAgICovXG4gIG1hcFByb2R1Y3RzPzogKHByb2R1Y3RzOiBQcm9kdWN0W10sIGl0ZW1zOiBNYXRjaGVkSXRlbVtdKSA9PiBQcm9kdWN0W107XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBhY3RpdmF0ZXMgYSBwcm9kdWN0IGNhcmQuIFRoZSBTREsgZG9lcyBub3QgbmF2aWdhdGUg4oCUXG4gICAqIHRoZSBpbnRlZ3JhdGlvbiBkZWNpZGVzIHdoYXQgYSBzZWxlY3Rpb24gbWVhbnMuIE1vZGlmaWVyIC8gbWlkZGxlIGNsaWNrc1xuICAgKiBhcmUgbGVmdCB0byB0aGUgYnJvd3NlciAoY21kLWNsaWNrIHN0aWxsIG9wZW5zIGEgdGFiKSBhbmQgZG9uJ3QgZmlyZSB0aGlzLlxuICAgKi9cbiAgb25Qcm9kdWN0U2VsZWN0PzogKHByb2R1Y3Q6IFByb2R1Y3QpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGRzIGEgcHJvZHVjdCB0byB0aGUgY2FydCBmcm9tIGl0cyBjYXJkLiBXaGVuIHNldCwgZXZlcnkgY2FyZCB0aGF0IGlzbid0XG4gICAqIHNvbGQgb3V0IChgYXZhaWxhYmxlOiBmYWxzZWApIHNob3dzIGFuIGFkZC10by1jYXJ0IGJ1dHRvbiBpbiB0aGUgYm90dG9tXG4gICAqIHJpZ2h0IGNvcm5lciBvZiBpdHMgaW1hZ2U7IHdoZW4gdW5zZXQsIG5vIGNhcmQgaGFzIG9uZS4gUHJlc3NpbmcgdGhlIGJ1dHRvblxuICAgKiBjYWxscyB0aGlzLCBub3QgYG9uUHJvZHVjdFNlbGVjdGAsIGFuZCB0aGUgcGFuZWwgc3RheXMgb3Blbi4gVGhlIFNESyBuZXZlclxuICAgKiB0b3VjaGVzIGEgY2FydCBpdHNlbGYuXG4gICAqXG4gICAqIFJldHVybiBhIHByb21pc2UgdG8gaGF2ZSB0aGUgYnV0dG9uIHNob3cgcHJvZ3Jlc3M6IGl0IGNhcnJpZXNcbiAgICogYGRhdGEtYWlhLWNhcnQtc3RhdGU9XCJhZGRpbmdcImAgdW50aWwgdGhlIHByb21pc2Ugc2V0dGxlcywgdGhlbiBgXCJhZGRlZFwiYFxuICAgKiBpZiBpdCByZXNvbHZlZC4gYFwiYWRkZWRcImAgc3RheXMgdW50aWwgdGhlIGNhcmQncyBwcm9kdWN0IGNoYW5nZXM7IHByZXNzaW5nXG4gICAqIGFnYWluIGFkZHMgYW5vdGhlciB1bml0IChhZGRpbmcg4oaSIGFkZGVkIGFnYWluKS4gQSByZWplY3Rpb24gcHV0cyB0aGVcbiAgICogYnV0dG9uIGJhY2sgYXQgcmVzdC5cbiAgICpcbiAgICogVW5saWtlIHRoZSBvdGhlciBjYWxsYmFja3MgaXQgY2FuIGJlIHN3YXBwZWQgb3IgcmVtb3ZlZCB0aHJvdWdoXG4gICAqIGB1cGRhdGUoKWAsIHdoaWNoIGFkZHMgb3IgcmVtb3ZlcyB0aGUgYnV0dG9ucy5cbiAgICovXG4gIG9uUHJvZHVjdEFkZFRvQ2FydD86IChwcm9kdWN0OiBQcm9kdWN0KSA9PiB2b2lkIHwgUHJvbWlzZUxpa2U8dW5rbm93bj47XG4gIC8qKiBJbml0aWFsIGNvbnRyb2xsZWQgdGV4dCB2YWx1ZS4gKi9cbiAgdmFsdWU/OiBzdHJpbmc7XG4gIC8qKiBJbml0aWFsIGNvbnRyb2xsZWQgY29tcGxldGVkIHBhcmFtcy4gKi9cbiAgY29tcGxldGVkUGFyYW1zPzogQ29tcGxldGVkUGFyYW1TdGF0ZVtdO1xuICAvKipcbiAgICogQ2FyZXQtc2V0IGNhbGxiYWNrLiBJbnZva2VkIGJ5IHRoZSBjb3JlIHdoZW4gcmUtZWRpdCAvIEJhY2tzcGFjZSBmbG93c1xuICAgKiBuZWVkIHRoZSBlZGl0b3IgY2FyZXQgcGFya2VkIGF0IGEgc3BlY2lmaWMgcGxhaW4tdGV4dCBvZmZzZXQuIFRoZSBUaWVyIDFcbiAgICogYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQgd2lyZXMgdGhpcyBmcm9tIGl0cyBlZGl0b3IgaG9zdDsgaGVhZGxlc3NcbiAgICogY29uc3VtZXJzIGNhbiBsZWF2ZSBpdCB1bnNldC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBzZXRDdXJzb3I/OiAob2Zmc2V0OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogU3Vic2V0IG9mIHtAbGluayBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJPcHRpb25zfSB0aGF0IGNhbiBiZSBjaGFuZ2VkIGFmdGVyXG4gKiBjb25zdHJ1Y3Rpb24uIEV4Y2x1ZGVzIGV2ZW50IGNhbGxiYWNrcyAodGhvc2UgYXJlIHJlZ2lzdGVyZWQgb25jZSBhdFxuICogY29uc3RydWN0aW9uIOKAlCBzZWUgdmFuaWxsYSBgQ29yZVVwZGF0ZU9wdGlvbnNgKS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclVwZGF0ZSA9IFBhcnRpYWw8XG4gIE9taXQ8XG4gICAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyxcbiAgICB8IFwib25TdWJtaXRcIlxuICAgIHwgXCJvblJlc3VsdFwiXG4gICAgfCBcIm9uRXJyb3JcIlxuICAgIHwgXCJvbkNoYW5nZVwiXG4gICAgfCBcIm9uUGFyYW1zQ2hhbmdlXCJcbiAgICB8IFwib25Gb2N1c1wiXG4gICAgfCBcIm9uQmx1clwiXG4gICAgfCBcIm9uUHJvZHVjdFNlbGVjdFwiXG4gICAgfCBcInNldEN1cnNvclwiXG4gID5cbj47XG5cbi8qKlxuICogU25hcHNob3Qgb2YgdGhlIGNvbnRyb2xsZXIncyByZWFjdGl2ZSBzdGF0ZS4gRWFjaCBmaWVsZCBpcyBhbHNvIGV4cG9zZWQgYXNcbiAqIGEgc3RhbmQtYWxvbmUgb2JzZXJ2YWJsZSBvbiB0aGUgY29udHJvbGxlciAoZS5nLiBgY29udHJvbGxlci50ZXh0JGApLlxuICpcbiAqIGBzdWdnZXN0aW9uUGlsbHNgIG1pcnJvcnMgUmVhY3QncyBgc3VnZ2VzdGlvblBpbGxzYCDigJQgdGhlIGFjdGlvbmFibGVcbiAqIHN1YnNldCBvZiBgc3VnZ2VzdGlvbnNgIHJlYWR5IGZvciBwaWxsIHJlbmRlcmluZy4gYGlzTG9hZGluZ2AgaXMgdGhlXG4gKiBVSS12aXNpYmxlIGxvYWRpbmcgZmxhZyAoc3VwcHJlc3NlZCBkdXJpbmcgdGhlIHBvc3Qtc2VsZWN0IHByZXNzXG4gKiBhbmltYXRpb24gYW5kIGR1cmluZyByZS1lZGl0LCB3aGVyZSBjYWNoZWQgb3B0aW9ucyBzdGF5IHZpc2libGUpLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSB7XG4gIHRleHQ6IHN0cmluZztcbiAgY29tcGxldGVkUGFyYW1zOiBDb21wbGV0ZWRQYXJhbVN0YXRlW107XG4gIC8qKlxuICAgKiBTdWdnZXN0aW9ucyB0aGUgdXNlciBkaXNtaXNzZWQgd2l0aCB0aGUgc2tpcCBrZXkgKOKGkikuIE5vdGhpbmcgcmVuZGVyc1xuICAgKiB0aGVtIOKAlCBwYXNzIHRoZW0gdG8gYGJ1aWxkU3VibWl0UmVzdWx0YCBzbyBhIGhhbmQtcm9sbGVkIHN1Ym1pdCBjYXJyaWVzXG4gICAqIHRoZSBzYW1lIGB0ZXh0OiBcInNraXBwZWRcImAgZW50cmllcyB0aGUgU0RLJ3Mgb3duIHJlcXVlc3RzIGRvLlxuICAgKi9cbiAgc2tpcHBlZFBhcmFtczogU2tpcHBlZFBhcmFtU3RhdGVbXTtcbiAgLyoqXG4gICAqIFBhcmFtcyB0aGUgc2VydmVyIGlkZW50aWZpZWQgaW4gdGhlIHVzZXIncyBvd24gd29yZHMuIEFscmVhZHkgcmVuZGVyZWRcbiAgICogdGhyb3VnaCBgc2VnbWVudHNgOyBleHBvc2VkIHNvIGEgaGFuZC1yb2xsZWQgc3VibWl0IGNhbiBwYXNzIHRoZW0gdG9cbiAgICogYGJ1aWxkU3VibWl0UmVzdWx0YCBhbmQgcmVwb3J0IHRoZSBzYW1lIGBpZGVudGlmaWVkX3BhcmFtc2AgdGhlIFNESydzXG4gICAqIG93biByZXN1bHRzIGNhcnJ5LlxuICAgKi9cbiAgaWRlbnRpZmllZFBhcmFtczogSWRlbnRpZmllZFBhcmFtU3RhdGVbXTtcbiAgc3VnZ2VzdGlvblBpbGxzOiBTdWdnZXN0aW9uW107XG4gIHNlZ21lbnRzOiBTZWdtZW50W107XG4gIG5ld1BhcmFtSWQ6IHN0cmluZyB8IG51bGw7XG4gIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW107XG4gIC8qKlxuICAgKiBXaGF0IHRoZSBwcm9kdWN0IHN0cmlwIHNob3dzOiB0aGUgaXRlbXMgdGhlIGxhdGVzdCBgL3N1Z2dlc3RgIHJlc3BvbnNlXG4gICAqIHJlcG9ydGVkIGFzIG1hdGNoaW5nIHRoZSBxdWVyeSwgb3IgdGhlIHJlc3VsdHMgb2YgYSBjdXN0b20gYHByb2R1Y3RzYFxuICAgKiBzZWFyY2guIEFscmVhZHkgZm9sZGVkIGludG8gdGhlIGRyb3Bkb3duIHNuYXBzaG90IOKAlCByZWFkIGl0IGhlcmUgb25seVxuICAgKiB3aGVuIHJlbmRlcmluZyB5b3VyIG93biBzdHJpcC5cbiAgICovXG4gIHByb2R1Y3RzOiBQcm9kdWN0W107XG4gIC8qKlxuICAgKiBUaGUgY2F0YWxvZyBncm91bmRpbmcgcmVwb3J0IHRoZSBsYXRlc3QgcmVzcG9uc2UgY2FycmllZCwgb3IgbnVsbCB3aGVuIGl0XG4gICAqIGNhcnJpZWQgbm9uZTogd2hpY2ggb2YgdGhlIHF1ZXJ5J3MgY29uc3RyYWludHMgdGhlIGNhdGFsb2cgYXBwbGllZCwgd2hpY2hcbiAgICogaXQgZHJvcHBlZCwgYW5kIGhvdyBtYW55IGl0ZW1zIChhbmQgd2hpY2gpIHRoZSBhcHBsaWVkIG9uZXMgbGVmdFxuICAgKiBzdGFuZGluZy4gTnVsbCBpcyBcIm5vIG5ld3NcIiwgbm90IGFuIGVtcHR5IGNhdGFsb2cuXG4gICAqL1xuICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkc1JlcG9ydCB8IG51bGw7XG4gIGFjdGl2ZUluZGV4OiBudW1iZXI7XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgaXNSZWFkeTogYm9vbGVhbjtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Ryb3Bkb3duT3BlbjogYm9vbGVhbjtcbiAgcGxhY2Vob2xkZXJUZXh0OiBzdHJpbmc7XG4gIGVycm9yOiBFcnJvciB8IG51bGw7XG4gIGVkaXRpbmdQYXJhbTogQ29tcGxldGVkUGFyYW1TdGF0ZSB8IG51bGw7XG4gIC8qKlxuICAgKiBTZXQgd2hpbGUgdGhlIHVzZXIgaXMgcGlja2luZyBhIGRhdGUgZm9yIGEgc3BhbiB0aGUgc2VydmVyIGlkZW50aWZpZWQgYXNcbiAgICogb25lIOKAlCBcInNlcHRlbWJlciA1dGhcIiBpbiBcImZseSB0byB2ZWdhcyBvbiBzZXB0ZW1iZXIgNXRoXCIuIE51bGwgb3RoZXJ3aXNlLlxuICAgKi9cbiAgZWRpdGluZ0lkZW50aWZpZWQ6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHBhcmFtZXRlcjogc3RyaW5nO1xuICAgIGFuY2hvcjogbnVtYmVyO1xuICAgIHRhaWw6IG51bWJlcjtcbiAgICAvKiogVGhlIGRhdGUgdGhlIHNwYW4gd2FzIHJlYWQgYXMsIG9yIGEgcmFuZ2UncyBzdGFydC4gTnVsbCB3aGVuIGl0IGNvdWxkbid0IGJlIHJlYWQuICovXG4gICAgaXNvOiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKiBUaGUgb3RoZXIgZW5kLCB3aGVuIHRoZSBzcGFuIHJlYWRzIGFzIGEgcmFuZ2UgcmF0aGVyIHRoYW4gYXMgb25lIGRheS4gKi9cbiAgICBpc29FbmQ6IHN0cmluZyB8IG51bGw7XG4gICAgLyoqIFdoZXRoZXIgdGhhdCBzcGFuIGlzIGFuc3dlcmVkIGJ5IGEgY2FsZW5kYXIsIG9yIGEgY2FsZW5kYXIgaW4gdHdvIHRhcHMuICovXG4gICAgZm9ybWF0OiBGb3JtYXRUeXBlO1xuICB9IHwgbnVsbDtcbiAgZWRpdGluZ0FuY2hvcjogbnVtYmVyIHwgbnVsbDtcbiAgY2FyZXRPZmZzZXQ6IG51bWJlciB8IG51bGw7XG59XG5cbi8qKlxuICogQ29tcG9zaXRlIHN0YXRlIHNoYXBlIGZvciB0aGUgZHJvcGRvd24gdmlldyBsYXllci4gVGllciAyIGNvbnN1bWVycyBiaW5kXG4gKiB0aGUgZHJvcGRvd24gY29tcG9uZW50IHRvIHRoaXMgc25hcHNob3Q7IFRpZXIgMSB1c2VzIHRoZSBzYW1lIHNoYXBlXG4gKiBpbnRlcm5hbGx5LlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUge1xuICAvKiogQWN0aXZlIHN1Z2dlc3Rpb24gKyBmaWx0ZXJlZCBvcHRpb25zIHRvIHJlbmRlciBpbiB0aGUgZ3JpZC4gKi9cbiAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgLyoqIEN1cnJlbnRseSBoaWdobGlnaHRlZCBvcHRpb24gaW5kZXguIC0xIHdoZW4gbm9uZS4gKi9cbiAgYWN0aXZlSW5kZXg6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdGhlIGRyb3Bkb3duIHNob3VsZCBiZSB2aXNpYmxlLiAqL1xuICBpc09wZW46IGJvb2xlYW47XG4gIC8qKiBQaWxscyB0byByZW5kZXIgaW4gdGhlIGRyb3Bkb3duJ3MgcGlsbGJhciAocmUtZWRpdCBwaWxsIG9yIGFsbCBzdWdnZXN0aW9uIHBpbGxzKS4gKi9cbiAgcGlsbHM6IFN1Z2dlc3Rpb25bXTtcbiAgLyoqIFdoZXRoZXIgdGhlIGFjdGl2ZSBwaWxsIHJlbmRlcnMgc2VsZWN0ZWQgKGZ1bGwgb3BhY2l0eSkgdnMuIHRoZSBgZmlyc3RgIHRpZXIuICovXG4gIGlzQWN0aXZlUGlsbFNlbGVjdGVkOiBib29sZWFuO1xuICAvKiogVHJ1ZSB3aGVuIHRoZSBkcm9wZG93biBzaG91bGQgcmVuZGVyIGl0cyBsb2FkaW5nIHNrZWxldG9uLiAqL1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBpbnB1dCBoYXMgbm8gdHlwZWQgdGV4dCDigJQgdGhlIHNvbGUgc3RhdGUgdGhhdCBzdXJmYWNlcyBcInRhYiB0byBzZWxlY3RcIiBpbiB0aGUgZm9vdGVyIGhpbnQuICovXG4gIGlzSW5wdXRFbXB0eTogYm9vbGVhbjtcbiAgLyoqIFByb2R1Y3QgY2FyZHMgdG8gcmVuZGVyIGJlbG93IHRoZSBvcHRpb25zIGdyaWQuIEVtcHR5IHJlbmRlcnMgbm8gc3RyaXAuICovXG4gIHByb2R1Y3RzOiBQcm9kdWN0W107XG4gIC8qKlxuICAgKiBUcnVlIHdoaWxlIGEgY29tcGxldGVkIHBhcmFtIGlzIGJlaW5nIHJlLWVkaXRlZC4gVGhlIHBpbGxiYXIgdGhlbiBzaG93c1xuICAgKiB0aGUgcGFyYW0gYmVpbmcgcmUtZWRpdGVkIOKAlCBub3Qgc2tpcHBhYmxlIOKAlCBzbyB0aGUgc2tpcCBidXR0b24gaGlkZXMuXG4gICAqIE9wdGlvbmFsICh1bmRlZmluZWQg4oeSIG5vdCBlZGl0aW5nKSBzbyBleGlzdGluZyBjb25zdW1lciBjb2RlIGNvbnN0cnVjdGluZ1xuICAgKiB0aGlzIHN0YXRlIOKAlCB0ZXN0IGZpeHR1cmVzLCBmYWtlIGNvbnRyb2xsZXJzIOKAlCBrZWVwcyBjb21waWxpbmcgYWNyb3NzIHRoZVxuICAgKiBtaW5vciBidW1wIHRoYXQgaW50cm9kdWNlZCBpdC5cbiAgICovXG4gIGlzRWRpdGluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIGZvciB0aGUgfjE3MG1zIHdpbmRvdyBhZnRlciBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHdoaWxlIHRoZSBhbnN3ZXJlZFxuICAgKiBzdWdnZXN0aW9uIGFuaW1hdGVzIG91dC4gYGlzTG9hZGluZ2AgaXMgZGVsaWJlcmF0ZWx5IHN1cHByZXNzZWQgaW4gdGhhdFxuICAgKiB3aW5kb3csIGJ1dCB0aGUgY29yZSdzIGBza2lwQWN0aXZlUGlsbCgpYCBuby1vcHMgaW4gaXQg4oCUIHRoZSBza2lwIGJ1dHRvblxuICAgKiByZW5kZXJzIGRpc2FibGVkIG9mZiB0aGlzIGZsYWcgaW5zdGVhZCBvZiBzd2FsbG93aW5nIGNsaWNrcyBzaWxlbnRseS5cbiAgICogT3B0aW9uYWwgKHVuZGVmaW5lZCDih5IgZmFsc2UpIGZvciB0aGUgc2FtZSBjb21waWxlLWNvbXBhdCByZWFzb24gYXNcbiAgICogYGlzRWRpdGluZ2AuXG4gICAqL1xuICBpblNlbGVjdGlvbkFuaW1hdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIHdoaWxlIHRoZSBsb2FkaW5nIHNrZWxldG9uIGZhZGVzIG91dCBiZWZvcmUgdGhlIHJlc3BvbnNlJ3Mgb3B0aW9uc1xuICAgKiByZXBsYWNlIGl0LiBPcHRpb25hbCAodW5kZWZpbmVkIOKHkiBmYWxzZSkgZm9yIHRoZSBzYW1lIGNvbXBpbGUtY29tcGF0XG4gICAqIHJlYXNvbiBhcyBgaXNFZGl0aW5nYC5cbiAgICovXG4gIHNrZWxldG9uRXhpdGluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgZHJvcGRvd24gb3BlbnMgcmVsYXRpdmUgdG8gdGhlIGlucHV0IOKAlCBtaXJyb3JzIHRoZSBjb250cm9sbGVyJ3NcbiAgICogYG9wdGlvbnNQb3NpdGlvbmAgb3B0aW9uLiBgPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93bj5gIHJlYWRzIGl0IGZyb20gaGVyZSwgc29cbiAgICogcGxhY2VtZW50IGlzIGNvbmZpZ3VyZWQgb25jZSBvbiB0aGUgY29udHJvbGxlciAobm8gc2VwYXJhdGUgaW5wdXQgdG8gc3luYykuXG4gICAqL1xuICBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgcHJvZHVjdCBjYXJkcyBkcmF3IGFuIGFkZC10by1jYXJ0IGJ1dHRvbiDigJQgdGhlIGNvbnRyb2xsZXIgaGFzIGFuXG4gICAqIGBvblByb2R1Y3RBZGRUb0NhcnRgIGhhbmRsZXIuIE9wdGlvbmFsICh1bmRlZmluZWQg4oeSIGZhbHNlKSBmb3IgdGhlIHNhbWVcbiAgICogY29tcGlsZS1jb21wYXQgcmVhc29uIGFzIGBpc0VkaXRpbmdgLlxuICAgKi9cbiAgaGFzUHJvZHVjdEFkZFRvQ2FydD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBIb3cgdGhlIGFjdGl2ZSBwaWxsIGlzIGFuc3dlcmVkLiBgXCJkYXRlXCJgIGFuZCBgXCJkYXRlLXJhbmdlXCJgIHJlbmRlciBhXG4gICAqIGNhbGVuZGFyIGluIHBsYWNlIG9mIHRoZSBvcHRpb25zIGdyaWQsIGFuZCBgc3VnZ2VzdGlvbnNbMF0ub3B0aW9uc2AgdGhlblxuICAgKiBjYXJyaWVzIHRoYXQgbW9udGgncyBjZWxscyByYXRoZXIgdGhhbiB0aGUgcGFyYW1ldGVyJ3Mgb3duIG9wdGlvbnMg4oCUIHRoZVxuICAgKiBjb3JlIHN3YXBzIHRoZW0gYmVmb3JlIHRoZXkgcmVhY2ggaGVyZS4gQSBgXCJkYXRlLXJhbmdlXCJgIHBhcmFtZXRlciBpc1xuICAgKiBhbnN3ZXJlZCBieSB0d28gdGFwcyBvZiB0aGF0IGNhbGVuZGFyLCBhIHN0YXJ0IGFuZCBhbiBlbmQsIGNvbW1pdHRlZCBhcyBvbmVcbiAgICogc3Bhbi4gT3B0aW9uYWwgKHVuZGVmaW5lZCDih5IgYFwib3B0aW9uc1wiYCkgZm9yIHRoZSBzYW1lIGNvbXBpbGUtY29tcGF0IHJlYXNvblxuICAgKiBhcyBgaXNFZGl0aW5nYC5cbiAgICovXG4gIGZvcm1hdFR5cGU/OiBGb3JtYXRUeXBlO1xuICAvKiogVGhlIG1vbnRoIHRoZSBjYWxlbmRhciBzaG93cy4gTnVsbC91bmRlZmluZWQgdW5sZXNzIGBmb3JtYXRUeXBlYCBpcyBhIGNhbGVuZGFyIG9uZS4gKi9cbiAgZGF0ZVZpZXc/OiBEYXRlTW9udGhWaWV3IHwgbnVsbDtcbiAgLyoqIGBZWVlZLU1NLUREYCBhbHJlYWR5IGhlbGQgYnkgdGhlIHBhcmFtIGJlaW5nIHJlLWVkaXRlZCwgc28gaXRzIGNlbGwgcmVhZHMgYXMgdGhlIGN1cnJlbnQgYW5zd2VyLiAqL1xuICBzZWxlY3RlZERhdGVJc28/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogQm90aCBlbmRzIG9mIGEgcmFuZ2UgcGFyYW0gYmVpbmcgcmUtZWRpdGVkLCBzbyBib3RoIGNlbGxzIHJlYWQgYXMgdGhlIGN1cnJlbnQgYW5zd2VyLiAqL1xuICBzZWxlY3RlZERhdGVSYW5nZT86IERhdGVSYW5nZSB8IG51bGw7XG4gIC8qKiBUaGUgZmlyc3QgZW5kIG9mIGEgcmFuZ2UgcGlja2VkIHNvIGZhciwgd2hpbGUgdGhlIHVzZXIgY2hvb3NlcyB0aGUgc2Vjb25kLiAqL1xuICBkYXRlUmFuZ2VTdGFydD86IHN0cmluZyB8IG51bGw7XG59XG4iXX0=