@sbb-esta/lyne-elements-experimental 4.10.0 → 4.12.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.
Files changed (41) hide show
  1. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +2 -1
  2. package/custom-elements.json +240 -240
  3. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +3 -2
  4. package/development/date-helper-qNdwgC9O.js +1 -1
  5. package/development/format-DFx4997p.js +1 -1
  6. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +1 -1
  7. package/development/{pearl-chain-vertical-item.component-DcmH13Vb.js → pearl-chain-vertical-item.component-D4clzjjQ.js} +2 -2
  8. package/development/pearl-chain-vertical-item.js +1 -1
  9. package/development/pearl-chain-vertical-item.pure.js +1 -1
  10. package/development/pearl-chain.component-oQZUzsyW.js +1 -1
  11. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +1 -1
  12. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +1 -1
  13. package/development/seat-reservation-place-control.component-CM9efId7.js +1 -1
  14. package/development/seat-reservation.component-DFJVFmrI.js +1 -1
  15. package/development/svgs-kDpBCto5.js +1 -1
  16. package/development/timetable-row.component-Dko8laRT.js +1 -1
  17. package/development/toDate-DOFAOjP-.js +1 -1
  18. package/{format-CM5exOsN.js → format-DbUuNYFU.js} +1 -1
  19. package/journey-summary/journey-summary.component.js +1 -1
  20. package/{journey-summary.component-DC7-qPHY.js → journey-summary.component-OFYXlkzg.js} +1 -1
  21. package/journey-summary.js +1 -1
  22. package/journey-summary.pure.js +1 -1
  23. package/{mapper-DkiDDseD.js → mapper-Cqie5ivY.js} +1 -1
  24. package/package.json +2 -2
  25. package/pearl-chain-time/pearl-chain-time.component.js +1 -1
  26. package/{pearl-chain-time.component-CkKsrbgQ.js → pearl-chain-time.component-CNKsGfIp.js} +1 -1
  27. package/pearl-chain-time.js +1 -1
  28. package/pearl-chain-time.pure.js +1 -1
  29. package/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +1 -1
  30. package/{pearl-chain-vertical-item.component-BUqZ-3Ay.js → pearl-chain-vertical-item.component-CGYNzFlK.js} +1 -1
  31. package/pearl-chain-vertical-item.js +1 -1
  32. package/pearl-chain-vertical-item.pure.js +1 -1
  33. package/seat-reservation/common/mapper/mapper.js +1 -1
  34. package/seat-reservation/common/mapper.js +1 -1
  35. package/seat-reservation/common.js +1 -1
  36. package/seat-reservation.js +1 -1
  37. package/seat-reservation.pure.js +1 -1
  38. package/timetable-row/timetable-row.component.js +1 -1
  39. package/{timetable-row.component-DbzBCpKR.js → timetable-row.component-Cd_7Pu_E.js} +1 -1
  40. package/timetable-row.js +1 -1
  41. package/timetable-row.pure.js +1 -1
@@ -45,7 +45,8 @@ var o = 0, s = r, c = class extends t {
45
45
  this.activeOption = null;
46
46
  return;
47
47
  }
48
- this.activeOption = r[n(t, this.activeOption ? r.indexOf(this.activeOption) : -1, r.length)], this.activeOption.setActive(!0), this.triggerElement?.setAttribute("aria-activedescendant", this.activeOption.id), this.activeOption.scrollIntoView({ block: "nearest" }), t && t.preventDefault(), this.autoSelectActiveOption && t && this.setPendingSelection(this.activeOption);
48
+ let i = n(t, this.activeOption ? r.indexOf(this.activeOption) : -1, r.length);
49
+ this.activeOption = r[i], this.activeOption.setActive(!0), this.triggerElement?.setAttribute("aria-activedescendant", this.activeOption.id), this.activeOption.scrollIntoView({ block: "nearest" }), t && t.preventDefault(), this.autoSelectActiveOption && t && this.setPendingSelection(this.activeOption);
49
50
  }
50
51
  _setNextHorizontalActiveElement(t) {
51
52
  if (!this.activeOption) return;
@@ -3124,6 +3124,246 @@
3124
3124
  "declarations": [],
3125
3125
  "exports": []
3126
3126
  },
3127
+ {
3128
+ "kind": "javascript-module",
3129
+ "path": "seat-reservation/seat-reservation-graphic/seat-reservation-assets.js",
3130
+ "declarations": [
3131
+ {
3132
+ "kind": "function",
3133
+ "name": "svgImageByOSDMCode",
3134
+ "return": {
3135
+ "type": {
3136
+ "text": ""
3137
+ }
3138
+ },
3139
+ "parameters": [
3140
+ {
3141
+ "name": "osdmCode",
3142
+ "type": {
3143
+ "text": "string"
3144
+ }
3145
+ }
3146
+ ],
3147
+ "description": "svgImageByOSDMCode Function returns the corresponding svg image by OSDM Code"
3148
+ },
3149
+ {
3150
+ "kind": "variable",
3151
+ "name": "assetsTemplate",
3152
+ "type": {
3153
+ "text": "TemplateResult"
3154
+ },
3155
+ "default": "html` <style> .story-asset { width: max-content; background-color: var(--sbb-color-white); } </style> <h1>List of all currently available assets.</h1> <h2>Interior</h2> ${interiorTable} <h2>Layout</h2> ${layoutItemsTable} <h2>Service Icons</h2> ${serviceIconTable} <h2>Chassis</h2> ${chassisTable} `"
3156
+ }
3157
+ ],
3158
+ "exports": [
3159
+ {
3160
+ "kind": "js",
3161
+ "name": "svgImageByOSDMCode",
3162
+ "declaration": {
3163
+ "name": "svgImageByOSDMCode",
3164
+ "module": "seat-reservation/seat-reservation-graphic/seat-reservation-assets.js"
3165
+ }
3166
+ },
3167
+ {
3168
+ "kind": "js",
3169
+ "name": "assetsTemplate",
3170
+ "declaration": {
3171
+ "name": "assetsTemplate",
3172
+ "module": "seat-reservation/seat-reservation-graphic/seat-reservation-assets.js"
3173
+ }
3174
+ }
3175
+ ]
3176
+ },
3177
+ {
3178
+ "kind": "javascript-module",
3179
+ "path": "seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js",
3180
+ "declarations": [
3181
+ {
3182
+ "kind": "class",
3183
+ "description": "Output one of the SVG graphics based on its code.",
3184
+ "name": "SbbSeatReservationGraphicElement",
3185
+ "members": [
3186
+ {
3187
+ "kind": "field",
3188
+ "name": "elementName",
3189
+ "type": {
3190
+ "text": "string"
3191
+ },
3192
+ "privacy": "public",
3193
+ "static": true,
3194
+ "readonly": true,
3195
+ "default": "'sbb-seat-reservation-graphic'"
3196
+ },
3197
+ {
3198
+ "kind": "field",
3199
+ "name": "name",
3200
+ "type": {
3201
+ "text": "string"
3202
+ },
3203
+ "privacy": "public",
3204
+ "default": "''",
3205
+ "description": "Name of the SVG graphic to be displayed.",
3206
+ "attribute": "name"
3207
+ },
3208
+ {
3209
+ "kind": "field",
3210
+ "name": "stretch",
3211
+ "type": {
3212
+ "text": "boolean"
3213
+ },
3214
+ "privacy": "public",
3215
+ "default": "false",
3216
+ "description": "if true, scale the graphic content of the given element non-uniformly if necessary",
3217
+ "attribute": "stretch"
3218
+ },
3219
+ {
3220
+ "kind": "field",
3221
+ "name": "_language",
3222
+ "privacy": "private",
3223
+ "default": "new SbbLanguageController(this)"
3224
+ },
3225
+ {
3226
+ "kind": "method",
3227
+ "name": "_getSvgElement",
3228
+ "privacy": "private",
3229
+ "return": {
3230
+ "type": {
3231
+ "text": "Element | null"
3232
+ }
3233
+ },
3234
+ "parameters": [
3235
+ {
3236
+ "name": "svg",
3237
+ "type": {
3238
+ "text": "string"
3239
+ }
3240
+ }
3241
+ ]
3242
+ }
3243
+ ],
3244
+ "attributes": [
3245
+ {
3246
+ "name": "name",
3247
+ "type": {
3248
+ "text": "string"
3249
+ },
3250
+ "default": "''",
3251
+ "description": "Name of the SVG graphic to be displayed.",
3252
+ "fieldName": "name"
3253
+ },
3254
+ {
3255
+ "name": "stretch",
3256
+ "type": {
3257
+ "text": "boolean"
3258
+ },
3259
+ "default": "false",
3260
+ "description": "if true, scale the graphic content of the given element non-uniformly if necessary",
3261
+ "fieldName": "stretch"
3262
+ }
3263
+ ],
3264
+ "superclass": {
3265
+ "name": "SbbElement",
3266
+ "package": "@sbb-esta/lyne-elements/core/base-elements.js"
3267
+ },
3268
+ "tagName": "sbb-seat-reservation-graphic",
3269
+ "customElement": true
3270
+ }
3271
+ ],
3272
+ "exports": [
3273
+ {
3274
+ "kind": "js",
3275
+ "name": "SbbSeatReservationGraphicElement",
3276
+ "declaration": {
3277
+ "name": "SbbSeatReservationGraphicElement",
3278
+ "module": "seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js"
3279
+ }
3280
+ }
3281
+ ]
3282
+ },
3283
+ {
3284
+ "kind": "javascript-module",
3285
+ "path": "seat-reservation/seat-reservation-area/seat-reservation-area.component.js",
3286
+ "declarations": [
3287
+ {
3288
+ "kind": "class",
3289
+ "description": "Visualize an area with a special meaning within a wagon.",
3290
+ "name": "SbbSeatReservationAreaElement",
3291
+ "members": [
3292
+ {
3293
+ "kind": "field",
3294
+ "name": "elementName",
3295
+ "type": {
3296
+ "text": "string"
3297
+ },
3298
+ "privacy": "public",
3299
+ "static": true,
3300
+ "readonly": true,
3301
+ "default": "'sbb-seat-reservation-area'"
3302
+ },
3303
+ {
3304
+ "kind": "field",
3305
+ "name": "mounting",
3306
+ "type": {
3307
+ "text": "'free' | 'upper-border' | 'lower-border' | 'upper-to-lower-border'"
3308
+ },
3309
+ "privacy": "public",
3310
+ "default": "'free'",
3311
+ "description": "Mounting Prop",
3312
+ "attribute": "mounting",
3313
+ "reflects": true
3314
+ },
3315
+ {
3316
+ "kind": "field",
3317
+ "name": "background",
3318
+ "type": {
3319
+ "text": "'light' | 'dark'"
3320
+ },
3321
+ "privacy": "public",
3322
+ "default": "'light'",
3323
+ "description": "the background of the area",
3324
+ "attribute": "background",
3325
+ "reflects": true
3326
+ }
3327
+ ],
3328
+ "attributes": [
3329
+ {
3330
+ "name": "mounting",
3331
+ "type": {
3332
+ "text": "'free' | 'upper-border' | 'lower-border' | 'upper-to-lower-border'"
3333
+ },
3334
+ "default": "'free'",
3335
+ "description": "Mounting Prop",
3336
+ "fieldName": "mounting"
3337
+ },
3338
+ {
3339
+ "name": "background",
3340
+ "type": {
3341
+ "text": "'light' | 'dark'"
3342
+ },
3343
+ "default": "'light'",
3344
+ "description": "the background of the area",
3345
+ "fieldName": "background"
3346
+ }
3347
+ ],
3348
+ "superclass": {
3349
+ "name": "SbbElement",
3350
+ "package": "@sbb-esta/lyne-elements/core/base-elements.js"
3351
+ },
3352
+ "tagName": "sbb-seat-reservation-area",
3353
+ "customElement": true
3354
+ }
3355
+ ],
3356
+ "exports": [
3357
+ {
3358
+ "kind": "js",
3359
+ "name": "SbbSeatReservationAreaElement",
3360
+ "declaration": {
3361
+ "name": "SbbSeatReservationAreaElement",
3362
+ "module": "seat-reservation/seat-reservation-area/seat-reservation-area.component.js"
3363
+ }
3364
+ }
3365
+ ]
3366
+ },
3127
3367
  {
3128
3368
  "kind": "javascript-module",
3129
3369
  "path": "seat-reservation/seat-reservation/seat-reservation-base-element.js",
@@ -7293,246 +7533,6 @@
7293
7533
  }
7294
7534
  ]
7295
7535
  },
7296
- {
7297
- "kind": "javascript-module",
7298
- "path": "seat-reservation/seat-reservation-area/seat-reservation-area.component.js",
7299
- "declarations": [
7300
- {
7301
- "kind": "class",
7302
- "description": "Visualize an area with a special meaning within a wagon.",
7303
- "name": "SbbSeatReservationAreaElement",
7304
- "members": [
7305
- {
7306
- "kind": "field",
7307
- "name": "elementName",
7308
- "type": {
7309
- "text": "string"
7310
- },
7311
- "privacy": "public",
7312
- "static": true,
7313
- "readonly": true,
7314
- "default": "'sbb-seat-reservation-area'"
7315
- },
7316
- {
7317
- "kind": "field",
7318
- "name": "mounting",
7319
- "type": {
7320
- "text": "'free' | 'upper-border' | 'lower-border' | 'upper-to-lower-border'"
7321
- },
7322
- "privacy": "public",
7323
- "default": "'free'",
7324
- "description": "Mounting Prop",
7325
- "attribute": "mounting",
7326
- "reflects": true
7327
- },
7328
- {
7329
- "kind": "field",
7330
- "name": "background",
7331
- "type": {
7332
- "text": "'light' | 'dark'"
7333
- },
7334
- "privacy": "public",
7335
- "default": "'light'",
7336
- "description": "the background of the area",
7337
- "attribute": "background",
7338
- "reflects": true
7339
- }
7340
- ],
7341
- "attributes": [
7342
- {
7343
- "name": "mounting",
7344
- "type": {
7345
- "text": "'free' | 'upper-border' | 'lower-border' | 'upper-to-lower-border'"
7346
- },
7347
- "default": "'free'",
7348
- "description": "Mounting Prop",
7349
- "fieldName": "mounting"
7350
- },
7351
- {
7352
- "name": "background",
7353
- "type": {
7354
- "text": "'light' | 'dark'"
7355
- },
7356
- "default": "'light'",
7357
- "description": "the background of the area",
7358
- "fieldName": "background"
7359
- }
7360
- ],
7361
- "superclass": {
7362
- "name": "SbbElement",
7363
- "package": "@sbb-esta/lyne-elements/core/base-elements.js"
7364
- },
7365
- "tagName": "sbb-seat-reservation-area",
7366
- "customElement": true
7367
- }
7368
- ],
7369
- "exports": [
7370
- {
7371
- "kind": "js",
7372
- "name": "SbbSeatReservationAreaElement",
7373
- "declaration": {
7374
- "name": "SbbSeatReservationAreaElement",
7375
- "module": "seat-reservation/seat-reservation-area/seat-reservation-area.component.js"
7376
- }
7377
- }
7378
- ]
7379
- },
7380
- {
7381
- "kind": "javascript-module",
7382
- "path": "seat-reservation/seat-reservation-graphic/seat-reservation-assets.js",
7383
- "declarations": [
7384
- {
7385
- "kind": "function",
7386
- "name": "svgImageByOSDMCode",
7387
- "return": {
7388
- "type": {
7389
- "text": ""
7390
- }
7391
- },
7392
- "parameters": [
7393
- {
7394
- "name": "osdmCode",
7395
- "type": {
7396
- "text": "string"
7397
- }
7398
- }
7399
- ],
7400
- "description": "svgImageByOSDMCode Function returns the corresponding svg image by OSDM Code"
7401
- },
7402
- {
7403
- "kind": "variable",
7404
- "name": "assetsTemplate",
7405
- "type": {
7406
- "text": "TemplateResult"
7407
- },
7408
- "default": "html` <style> .story-asset { width: max-content; background-color: var(--sbb-color-white); } </style> <h1>List of all currently available assets.</h1> <h2>Interior</h2> ${interiorTable} <h2>Layout</h2> ${layoutItemsTable} <h2>Service Icons</h2> ${serviceIconTable} <h2>Chassis</h2> ${chassisTable} `"
7409
- }
7410
- ],
7411
- "exports": [
7412
- {
7413
- "kind": "js",
7414
- "name": "svgImageByOSDMCode",
7415
- "declaration": {
7416
- "name": "svgImageByOSDMCode",
7417
- "module": "seat-reservation/seat-reservation-graphic/seat-reservation-assets.js"
7418
- }
7419
- },
7420
- {
7421
- "kind": "js",
7422
- "name": "assetsTemplate",
7423
- "declaration": {
7424
- "name": "assetsTemplate",
7425
- "module": "seat-reservation/seat-reservation-graphic/seat-reservation-assets.js"
7426
- }
7427
- }
7428
- ]
7429
- },
7430
- {
7431
- "kind": "javascript-module",
7432
- "path": "seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js",
7433
- "declarations": [
7434
- {
7435
- "kind": "class",
7436
- "description": "Output one of the SVG graphics based on its code.",
7437
- "name": "SbbSeatReservationGraphicElement",
7438
- "members": [
7439
- {
7440
- "kind": "field",
7441
- "name": "elementName",
7442
- "type": {
7443
- "text": "string"
7444
- },
7445
- "privacy": "public",
7446
- "static": true,
7447
- "readonly": true,
7448
- "default": "'sbb-seat-reservation-graphic'"
7449
- },
7450
- {
7451
- "kind": "field",
7452
- "name": "name",
7453
- "type": {
7454
- "text": "string"
7455
- },
7456
- "privacy": "public",
7457
- "default": "''",
7458
- "description": "Name of the SVG graphic to be displayed.",
7459
- "attribute": "name"
7460
- },
7461
- {
7462
- "kind": "field",
7463
- "name": "stretch",
7464
- "type": {
7465
- "text": "boolean"
7466
- },
7467
- "privacy": "public",
7468
- "default": "false",
7469
- "description": "if true, scale the graphic content of the given element non-uniformly if necessary",
7470
- "attribute": "stretch"
7471
- },
7472
- {
7473
- "kind": "field",
7474
- "name": "_language",
7475
- "privacy": "private",
7476
- "default": "new SbbLanguageController(this)"
7477
- },
7478
- {
7479
- "kind": "method",
7480
- "name": "_getSvgElement",
7481
- "privacy": "private",
7482
- "return": {
7483
- "type": {
7484
- "text": "Element | null"
7485
- }
7486
- },
7487
- "parameters": [
7488
- {
7489
- "name": "svg",
7490
- "type": {
7491
- "text": "string"
7492
- }
7493
- }
7494
- ]
7495
- }
7496
- ],
7497
- "attributes": [
7498
- {
7499
- "name": "name",
7500
- "type": {
7501
- "text": "string"
7502
- },
7503
- "default": "''",
7504
- "description": "Name of the SVG graphic to be displayed.",
7505
- "fieldName": "name"
7506
- },
7507
- {
7508
- "name": "stretch",
7509
- "type": {
7510
- "text": "boolean"
7511
- },
7512
- "default": "false",
7513
- "description": "if true, scale the graphic content of the given element non-uniformly if necessary",
7514
- "fieldName": "stretch"
7515
- }
7516
- ],
7517
- "superclass": {
7518
- "name": "SbbElement",
7519
- "package": "@sbb-esta/lyne-elements/core/base-elements.js"
7520
- },
7521
- "tagName": "sbb-seat-reservation-graphic",
7522
- "customElement": true
7523
- }
7524
- ],
7525
- "exports": [
7526
- {
7527
- "kind": "js",
7528
- "name": "SbbSeatReservationGraphicElement",
7529
- "declaration": {
7530
- "name": "SbbSeatReservationGraphicElement",
7531
- "module": "seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js"
7532
- }
7533
- }
7534
- ]
7535
- },
7536
7536
  {
7537
7537
  "kind": "javascript-module",
7538
7538
  "path": "seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js",
@@ -81,7 +81,8 @@ var SbbAutocompleteGridElement = class extends SbbAutocompleteBaseElement {
81
81
  this.activeOption = null;
82
82
  return;
83
83
  }
84
- this.activeOption = enabledOptions[getNextElementIndex(event, this.activeOption ? enabledOptions.indexOf(this.activeOption) : -1, enabledOptions.length)];
84
+ const next = getNextElementIndex(event, this.activeOption ? enabledOptions.indexOf(this.activeOption) : -1, enabledOptions.length);
85
+ this.activeOption = enabledOptions[next];
85
86
  this.activeOption.setActive(true);
86
87
  this.triggerElement?.setAttribute("aria-activedescendant", this.activeOption.id);
87
88
  this.activeOption.scrollIntoView({ block: "nearest" });
@@ -117,4 +118,4 @@ var SbbAutocompleteGridElement = class extends SbbAutocompleteBaseElement {
117
118
  //#endregion
118
119
  export { SbbAutocompleteGridElement };
119
120
 
120
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWdyaWQuY29tcG9uZW50LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvYXV0b2NvbXBsZXRlLWdyaWQvYXV0b2NvbXBsZXRlLWdyaWQvYXV0b2NvbXBsZXRlLWdyaWQuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNiYkF1dG9jb21wbGV0ZUJhc2VFbGVtZW50IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvYXV0b2NvbXBsZXRlLmpzJztcbmltcG9ydCB7IGdldE5leHRFbGVtZW50SW5kZXggfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgaXNTYWZhcmkgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyDJtXN0YXRlQ29udHJvbGxlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IHNldEFyaWFDb21ib0JveEF0dHJpYnV0ZXMgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEaXZpZGVyRWxlbWVudCB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2RpdmlkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRHcm91cEVsZW1lbnQsIFNiYk9wdGlvbkhpbnRFbGVtZW50IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvb3B0aW9uLmpzJztcblxuaW1wb3J0IHR5cGUgeyBTYmJBdXRvY29tcGxldGVHcmlkQnV0dG9uRWxlbWVudCB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbi9hdXRvY29tcGxldGUtZ3JpZC1idXR0b24uY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFNiYkF1dG9jb21wbGV0ZUdyaWRPcHRpb25FbGVtZW50IH0gZnJvbSAnLi4vYXV0b2NvbXBsZXRlLWdyaWQtb3B0aW9uL2F1dG9jb21wbGV0ZS1ncmlkLW9wdGlvbi5jb21wb25lbnQudHMnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIFwiY2xvc2VyXCIgdG8gdGhlIG9wdGlvbnMsIG9yIGVsc2Ugb3B0Z3JvdXBzIHdvbid0IHdvcmsuXG4gKi9cbmNvbnN0IGFyaWFSb2xlT25Ib3N0ID0gaXNTYWZhcmk7XG5cbi8qKlxuICogQ29tYmluZWQgd2l0aCBhIG5hdGl2ZSBpbnB1dCwgaXQgZGlzcGxheXMgYSBwYW5lbCB3aXRoIGEgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucyB3aXRoIGNvbm5lY3RlZCBidXR0b25zLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItYXV0b2NvbXBsZXRlLWdyaWQtcm93YCBvciBgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGdyb3VwYCBlbGVtZW50cyB0byB0aGUgYHNiYi1hdXRvY29tcGxldGUtZ3JpZGAuXG4gKiBAY3NzcHJvcCBbLS1zYmItYXV0b2NvbXBsZXRlLXotaW5kZXg9dmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KV0gLSBUbyBzcGVjaWZ5IGEgY3VzdG9tIHN0YWNrIG9yZGVyLFxuICogdGhlIGB6LWluZGV4YCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyB0aGlzIENTUyB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgYHotaW5kZXhgIG9mIHRoZVxuICogY29tcG9uZW50IGlzIHNldCB0byBgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KWAgd2l0aCBhIHZhbHVlIG9mIGAxMDAwYC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1vcHRpb25zLXBhbmVsLW1heC1oZWlnaHRdIC0gTWF4aW11bSBoZWlnaHQgb2YgdGhlIG9wdGlvbnMgcGFuZWwuXG4gKiBJZiB0aGUgY2FsY3VsYXRlZCByZW1haW5pbmcgc3BhY2UgaXMgc21hbGxlciwgdGhlIHZhbHVlIGdldHMgaWdub3JlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkF1dG9jb21wbGV0ZUdyaWRFbGVtZW50PFQgPSBzdHJpbmc+IGV4dGVuZHMgU2JiQXV0b2NvbXBsZXRlQmFzZUVsZW1lbnQ8VD4ge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLWF1dG9jb21wbGV0ZS1ncmlkJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gYXJpYVJvbGVPbkhvc3QgPyAnZ3JpZCcgOiBudWxsO1xuICBwcm90ZWN0ZWQgb3ZlcmxheUlkID0gYHNiYi1hdXRvY29tcGxldGUtZ3JpZC0keysrbmV4dElkfWA7XG4gIHByb3RlY3RlZCBwYW5lbFJvbGUgPSAnZ3JpZCc7XG4gIHByaXZhdGUgX2FjdGl2ZUNvbHVtbkluZGV4ID0gMDtcblxuICBwcm90ZWN0ZWQgZ2V0IG9wdGlvbnMoKTogU2JiQXV0b2NvbXBsZXRlR3JpZE9wdGlvbkVsZW1lbnQ8VD5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudDxUPj4oXG4gICAgICAgICdzYmItYXV0b2NvbXBsZXRlLWdyaWQtb3B0aW9uJyxcbiAgICAgICkgPz8gW10sXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW5jTmVnYXRpdmUoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48XG4gICAgICBTYmJEaXZpZGVyRWxlbWVudCB8IFNiYkF1dG9jb21wbGV0ZUdyaWRCdXR0b25FbGVtZW50IHwgU2JiT3B0aW9uSGludEVsZW1lbnRcbiAgICA+KCdzYmItZGl2aWRlciwgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbiwgc2JiLW9wdGlvbi1oaW50JykuZm9yRWFjaChcbiAgICAgIChlKSA9PiAoZS5uZWdhdGl2ZSA9IHRoaXMubmVnYXRpdmUpLFxuICAgICk7XG5cbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudDxUPiB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLWF1dG9jb21wbGV0ZS1ncmlkLXJvdywgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGlvbiwgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQpID0+IMm1c3RhdGVDb250cm9sbGVyKGVsZW1lbnQpLnRvZ2dsZSgnbmVnYXRpdmUnLCB0aGlzLm5lZ2F0aXZlKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICB0aGlzLnNlbGVjdEJ5S2V5Ym9hcmQoZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLnNldE5leHRBY3RpdmVPcHRpb24oZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLl9zZXROZXh0SG9yaXpvbnRhbEFjdGl2ZUVsZW1lbnQoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGFuIGVsZW1lbnQgb24gJ0VudGVyJyBrZXlwcmVzcy5cbiAgICpcbiAgICogRHVlIHRvIGtleWJvYXJkIG5hdmlnYXRpb24gY29kZSwgdGhlIGBfYWN0aXZlQ29sdW1uSW5kZXhgIGlzIHplcm8gd2hlbiBhbiBvcHRpb24gaXMgJ2ZvY3VzZWQnXG4gICAqIGFuZCBncmVhdGVyIHRoYW4gemVybyB3aGVuIGEgYnV0dG9uIGlzICdmb2N1c2VkJywgc28gYXNraW5nIGZvciBgcXVlcnlTZWxlY3RvckFsbCguLi4pW3RoaXMuX2FjdGl2ZUNvbHVtbkluZGV4XWBcbiAgICogd291bGQgYWx3YXlzIHJldHVybiBhIGBTYmJBdXRvY29tcGxldGVHcmlkQnV0dG9uRWxlbWVudGAuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0QnlLZXlib2FyZChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgLy8gV2UgYXJlIGN1cnJlbnRseSBzZWxlY3RpbmcgYW4gb3B0aW9uIGFuZCB0aGVyZWZvcmUgdGhlIEVudGVyIHByZXNzIHNob3VsZG4ndCB0cmlnZ2VyIGEgZm9ybSBzdWJtaXRcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGlmICh0aGlzLl9hY3RpdmVDb2x1bW5JbmRleCAhPT0gMCkge1xuICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblxuICAgICAgICAgIC5jbG9zZXN0KCdzYmItYXV0b2NvbXBsZXRlLWdyaWQtcm93JylcbiAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NiYi1hdXRvY29tcGxldGUtZ3JpZC1idXR0b24nKVxuICAgICAgICAgIFtcbiAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgb3B0aW9uIGluIHRoZSBzZWxlY3Rvci4gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIHNoaWZ0IHRoZSBhY3RpdmVDb2x1bW5JbmRleCBieSBvbmUuXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVDb2x1bW5JbmRleCAtIDFcbiAgICAgICAgICBdPy5jbGljaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVPcHRpb25bJ3NlbGVjdFZpYVVzZXJJbnRlcmFjdGlvbiddKHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50PzogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVuYWJsZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0KSA9PiAhb3B0Lm1hdGNoZXMoJzpzdGF0ZShkaXNhYmxlZCknKSk7XG5cbiAgICAvLyBSZXNldCBwb3RlbnRpYWxseSBhY3RpdmUgb3B0aW9uXG4gICAgdGhpcy5hY3RpdmVPcHRpb24/LnNldEFjdGl2ZShmYWxzZSk7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgICBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1hdXRvY29tcGxldGUtZ3JpZC1yb3cgOnN0YXRlKGZvY3VzLXZpc2libGUpJykgPz8gW10sXG4gICAgKS5mb3JFYWNoKChyb3cpID0+IMm1c3RhdGVDb250cm9sbGVyKHJvdykuZGVsZXRlKCdmb2N1cy12aXNpYmxlJykpO1xuICAgIHRoaXMuX2FjdGl2ZUNvbHVtbkluZGV4ID0gMDtcblxuICAgIGlmICghZW5hYmxlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFjdGl2ZU9wdGlvbiA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSXRlbUluZGV4ID0gdGhpcy5hY3RpdmVPcHRpb25cbiAgICAgID8gZW5hYmxlZE9wdGlvbnMuaW5kZXhPZih0aGlzLmFjdGl2ZU9wdGlvbiBhcyBTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudDxUPilcbiAgICAgIDogLTE7XG5cbiAgICAvLyBHZXQgYW5kIGFjdGl2YXRlIHRoZSBuZXh0IGFjdGl2ZSBvcHRpb25cbiAgICBjb25zdCBuZXh0ID0gZ2V0TmV4dEVsZW1lbnRJbmRleChldmVudCwgYWN0aXZlSXRlbUluZGV4LCBlbmFibGVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gZW5hYmxlZE9wdGlvbnNbbmV4dF07XG4gICAgdGhpcy5hY3RpdmVPcHRpb24uc2V0QWN0aXZlKHRydWUpO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgdGhpcy5hY3RpdmVPcHRpb24uaWQpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcblxuICAgIC8vIE1vdmluZyB0aGUgYWN0aXZlIG9wdGlvbiBzaG91bGQgbm90IG1vdmUgdGhlIGlucHV0IGN1cnNvciAoY2FyZXQpXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8vIElmICdhdXRvU2VsZWN0QWN0aXZlT3B0aW9uJyBhbmQgaXMgdHJpZ2dlcmVkIGZyb20gYSBrZXlib2FyZCBldmVudFxuICAgIGlmICh0aGlzLmF1dG9TZWxlY3RBY3RpdmVPcHRpb24gJiYgZXZlbnQpIHtcbiAgICAgIHRoaXMuc2V0UGVuZGluZ1NlbGVjdGlvbih0aGlzLmFjdGl2ZU9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmV4dEhvcml6b250YWxBY3RpdmVFbGVtZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRzSW5Sb3cgPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5hY3RpdmVPcHRpb25cbiAgICAgICAgPy5jbG9zZXN0KCdzYmItYXV0b2NvbXBsZXRlLWdyaWQtcm93JylcbiAgICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsPFxuICAgICAgICAgIFNiYkF1dG9jb21wbGV0ZUdyaWRPcHRpb25FbGVtZW50PFQ+IHwgU2JiQXV0b2NvbXBsZXRlR3JpZEJ1dHRvbkVsZW1lbnRcbiAgICAgICAgPignc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGlvbiwgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbicpID8/IFtdLFxuICAgICk/LmZpbHRlcigoZWwpID0+ICFlbC5tYXRjaGVzKCc6c3RhdGUoZGlzYWJsZWQpJykpO1xuXG4gICAgaWYgKCFlbGVtZW50c0luUm93Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHQ6IG51bWJlciA9IGdldE5leHRFbGVtZW50SW5kZXgoZXZlbnQsIHRoaXMuX2FjdGl2ZUNvbHVtbkluZGV4LCBlbGVtZW50c0luUm93Lmxlbmd0aCk7XG4gICAgY29uc3QgbmV4dEVsZW1lbnQ6IFNiYkF1dG9jb21wbGV0ZUdyaWRPcHRpb25FbGVtZW50PFQ+IHwgU2JiQXV0b2NvbXBsZXRlR3JpZEJ1dHRvbkVsZW1lbnQgPVxuICAgICAgZWxlbWVudHNJblJvd1tuZXh0XTtcbiAgICBpZiAobmV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudCkge1xuICAgICAgbmV4dEVsZW1lbnQuc2V0QWN0aXZlKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICDJtXN0YXRlQ29udHJvbGxlcihuZXh0RWxlbWVudCkuYWRkKCdmb2N1cy12aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEFjdGl2ZUVsZW1lbnQgPSBlbGVtZW50c0luUm93W3RoaXMuX2FjdGl2ZUNvbHVtbkluZGV4XTtcbiAgICBpZiAobGFzdEFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudCkge1xuICAgICAgbGFzdEFjdGl2ZUVsZW1lbnQuc2V0QWN0aXZlKGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgybVzdGF0ZUNvbnRyb2xsZXIobGFzdEFjdGl2ZUVsZW1lbnQpLmRlbGV0ZSgnZm9jdXMtdmlzaWJsZScpO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIG5leHRFbGVtZW50LmlkKTtcbiAgICBuZXh0RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgdGhpcy5fYWN0aXZlQ29sdW1uSW5kZXggPSBuZXh0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0QWN0aXZlRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlQ29sdW1uSW5kZXggIT09IDApIHtcbiAgICAgIHRoaXMuYWN0aXZlT3B0aW9uXG4gICAgICAgID8uY2xvc2VzdCgnc2JiLWF1dG9jb21wbGV0ZS1ncmlkLXJvdycpXG4gICAgICAgID8ucXVlcnlTZWxlY3RvckFsbCgnc2JiLWF1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbicpXG4gICAgICAgIC5mb3JFYWNoKChlKSA9PiDJtXN0YXRlQ29udHJvbGxlcihlKS5kZWxldGUoJ2ZvY3VzLXZpc2libGUnKSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlT3B0aW9uPy5zZXRBY3RpdmUoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVDb2x1bW5JbmRleCA9IDA7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRUcmlnZ2VyQXR0cmlidXRlcyhlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgc2V0QXJpYUNvbWJvQm94QXR0cmlidXRlcyhlbGVtZW50LCBhcmlhUm9sZU9uSG9zdCA/IHRoaXMuaWQgOiB0aGlzLm92ZXJsYXlJZCwgZmFsc2UsICdncmlkJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1hdXRvY29tcGxldGUtZ3JpZCc6IFNiYkF1dG9jb21wbGV0ZUdyaWRFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFXQSxJQUFJLFNBQVM7Ozs7O0FBTWIsSUFBTSxpQkFBaUI7Ozs7Ozs7Ozs7O0FBWXZCLElBQWEsNkJBQWIsY0FBNEQsMkJBQTZCO0NBQXpGLGNBQUE7O0FBR1ksT0FBQSxZQUFZLHlCQUF5QixFQUFFO0FBQ3ZDLE9BQUEsWUFBWTtBQUNkLE9BQUEscUJBQXFCOzs7QUFKRyxPQUFBLGNBQXNCOzs7QUFDdEIsT0FBQSxPQUFPLGlCQUFpQixTQUFTOztDQUtqRSxJQUFjLFVBQU87QUFDbkIsU0FBTyxNQUFNLEtBQ1gsS0FBSyxtQkFDSCwrQkFDRCxJQUFJLEVBQUUsQ0FDUjs7Q0FHTyxlQUFZO0FBQ3BCLE9BQUssbUJBRUgsNkRBQTZELENBQUMsU0FDN0QsTUFBTyxFQUFFLFdBQVcsS0FBSyxTQUMzQjtBQUVELE9BQUssbUJBQ0gsMEZBQ0QsQ0FBQyxTQUFTLFlBQVksaUJBQWlCLFFBQVEsQ0FBQyxPQUFPLFlBQVksS0FBSyxTQUFTLENBQUM7O0NBRzNFLCtCQUErQixPQUFvQjtBQUMzRCxNQUFJLENBQUMsS0FBSyxPQUNSO0FBRUYsVUFBUSxNQUFNLEtBQWQ7R0FDRSxLQUFLO0FBQ0gsU0FBSyxpQkFBaUIsTUFBTTtBQUM1QjtHQUVG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
121
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWdyaWQuY29tcG9uZW50LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvYXV0b2NvbXBsZXRlLWdyaWQvYXV0b2NvbXBsZXRlLWdyaWQvYXV0b2NvbXBsZXRlLWdyaWQuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNiYkF1dG9jb21wbGV0ZUJhc2VFbGVtZW50IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvYXV0b2NvbXBsZXRlLmpzJztcbmltcG9ydCB7IGdldE5leHRFbGVtZW50SW5kZXggfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgaXNTYWZhcmkgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyDJtXN0YXRlQ29udHJvbGxlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IHNldEFyaWFDb21ib0JveEF0dHJpYnV0ZXMgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEaXZpZGVyRWxlbWVudCB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2RpdmlkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRHcm91cEVsZW1lbnQsIFNiYk9wdGlvbkhpbnRFbGVtZW50IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvb3B0aW9uLmpzJztcblxuaW1wb3J0IHR5cGUgeyBTYmJBdXRvY29tcGxldGVHcmlkQnV0dG9uRWxlbWVudCB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbi9hdXRvY29tcGxldGUtZ3JpZC1idXR0b24uY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFNiYkF1dG9jb21wbGV0ZUdyaWRPcHRpb25FbGVtZW50IH0gZnJvbSAnLi4vYXV0b2NvbXBsZXRlLWdyaWQtb3B0aW9uL2F1dG9jb21wbGV0ZS1ncmlkLW9wdGlvbi5jb21wb25lbnQudHMnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIFwiY2xvc2VyXCIgdG8gdGhlIG9wdGlvbnMsIG9yIGVsc2Ugb3B0Z3JvdXBzIHdvbid0IHdvcmsuXG4gKi9cbmNvbnN0IGFyaWFSb2xlT25Ib3N0ID0gaXNTYWZhcmk7XG5cbi8qKlxuICogQ29tYmluZWQgd2l0aCBhIG5hdGl2ZSBpbnB1dCwgaXQgZGlzcGxheXMgYSBwYW5lbCB3aXRoIGEgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucyB3aXRoIGNvbm5lY3RlZCBidXR0b25zLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItYXV0b2NvbXBsZXRlLWdyaWQtcm93YCBvciBgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGdyb3VwYCBlbGVtZW50cyB0byB0aGUgYHNiYi1hdXRvY29tcGxldGUtZ3JpZGAuXG4gKiBAY3NzcHJvcCBbLS1zYmItYXV0b2NvbXBsZXRlLXotaW5kZXg9dmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KV0gLSBUbyBzcGVjaWZ5IGEgY3VzdG9tIHN0YWNrIG9yZGVyLFxuICogdGhlIGB6LWluZGV4YCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyB0aGlzIENTUyB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgYHotaW5kZXhgIG9mIHRoZVxuICogY29tcG9uZW50IGlzIHNldCB0byBgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KWAgd2l0aCBhIHZhbHVlIG9mIGAxMDAwYC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1vcHRpb25zLXBhbmVsLW1heC1oZWlnaHRdIC0gTWF4aW11bSBoZWlnaHQgb2YgdGhlIG9wdGlvbnMgcGFuZWwuXG4gKiBJZiB0aGUgY2FsY3VsYXRlZCByZW1haW5pbmcgc3BhY2UgaXMgc21hbGxlciwgdGhlIHZhbHVlIGdldHMgaWdub3JlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkF1dG9jb21wbGV0ZUdyaWRFbGVtZW50PFQgPSBzdHJpbmc+IGV4dGVuZHMgU2JiQXV0b2NvbXBsZXRlQmFzZUVsZW1lbnQ8VD4ge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLWF1dG9jb21wbGV0ZS1ncmlkJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gYXJpYVJvbGVPbkhvc3QgPyAnZ3JpZCcgOiBudWxsO1xuICBwcm90ZWN0ZWQgb3ZlcmxheUlkID0gYHNiYi1hdXRvY29tcGxldGUtZ3JpZC0keysrbmV4dElkfWA7XG4gIHByb3RlY3RlZCBwYW5lbFJvbGUgPSAnZ3JpZCc7XG4gIHByaXZhdGUgX2FjdGl2ZUNvbHVtbkluZGV4ID0gMDtcblxuICBwcm90ZWN0ZWQgZ2V0IG9wdGlvbnMoKTogU2JiQXV0b2NvbXBsZXRlR3JpZE9wdGlvbkVsZW1lbnQ8VD5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudDxUPj4oXG4gICAgICAgICdzYmItYXV0b2NvbXBsZXRlLWdyaWQtb3B0aW9uJyxcbiAgICAgICkgPz8gW10sXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW5jTmVnYXRpdmUoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48XG4gICAgICBTYmJEaXZpZGVyRWxlbWVudCB8IFNiYkF1dG9jb21wbGV0ZUdyaWRCdXR0b25FbGVtZW50IHwgU2JiT3B0aW9uSGludEVsZW1lbnRcbiAgICA+KCdzYmItZGl2aWRlciwgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbiwgc2JiLW9wdGlvbi1oaW50JykuZm9yRWFjaChcbiAgICAgIChlKSA9PiAoZS5uZWdhdGl2ZSA9IHRoaXMubmVnYXRpdmUpLFxuICAgICk7XG5cbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudDxUPiB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLWF1dG9jb21wbGV0ZS1ncmlkLXJvdywgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGlvbiwgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQpID0+IMm1c3RhdGVDb250cm9sbGVyKGVsZW1lbnQpLnRvZ2dsZSgnbmVnYXRpdmUnLCB0aGlzLm5lZ2F0aXZlKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICB0aGlzLnNlbGVjdEJ5S2V5Ym9hcmQoZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLnNldE5leHRBY3RpdmVPcHRpb24oZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLl9zZXROZXh0SG9yaXpvbnRhbEFjdGl2ZUVsZW1lbnQoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGFuIGVsZW1lbnQgb24gJ0VudGVyJyBrZXlwcmVzcy5cbiAgICpcbiAgICogRHVlIHRvIGtleWJvYXJkIG5hdmlnYXRpb24gY29kZSwgdGhlIGBfYWN0aXZlQ29sdW1uSW5kZXhgIGlzIHplcm8gd2hlbiBhbiBvcHRpb24gaXMgJ2ZvY3VzZWQnXG4gICAqIGFuZCBncmVhdGVyIHRoYW4gemVybyB3aGVuIGEgYnV0dG9uIGlzICdmb2N1c2VkJywgc28gYXNraW5nIGZvciBgcXVlcnlTZWxlY3RvckFsbCguLi4pW3RoaXMuX2FjdGl2ZUNvbHVtbkluZGV4XWBcbiAgICogd291bGQgYWx3YXlzIHJldHVybiBhIGBTYmJBdXRvY29tcGxldGVHcmlkQnV0dG9uRWxlbWVudGAuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0QnlLZXlib2FyZChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgLy8gV2UgYXJlIGN1cnJlbnRseSBzZWxlY3RpbmcgYW4gb3B0aW9uIGFuZCB0aGVyZWZvcmUgdGhlIEVudGVyIHByZXNzIHNob3VsZG4ndCB0cmlnZ2VyIGEgZm9ybSBzdWJtaXRcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGlmICh0aGlzLl9hY3RpdmVDb2x1bW5JbmRleCAhPT0gMCkge1xuICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblxuICAgICAgICAgIC5jbG9zZXN0KCdzYmItYXV0b2NvbXBsZXRlLWdyaWQtcm93JylcbiAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NiYi1hdXRvY29tcGxldGUtZ3JpZC1idXR0b24nKVxuICAgICAgICAgIFtcbiAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgb3B0aW9uIGluIHRoZSBzZWxlY3Rvci4gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIHNoaWZ0IHRoZSBhY3RpdmVDb2x1bW5JbmRleCBieSBvbmUuXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVDb2x1bW5JbmRleCAtIDFcbiAgICAgICAgICBdPy5jbGljaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVPcHRpb25bJ3NlbGVjdFZpYVVzZXJJbnRlcmFjdGlvbiddKHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50PzogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVuYWJsZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0KSA9PiAhb3B0Lm1hdGNoZXMoJzpzdGF0ZShkaXNhYmxlZCknKSk7XG5cbiAgICAvLyBSZXNldCBwb3RlbnRpYWxseSBhY3RpdmUgb3B0aW9uXG4gICAgdGhpcy5hY3RpdmVPcHRpb24/LnNldEFjdGl2ZShmYWxzZSk7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgICBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1hdXRvY29tcGxldGUtZ3JpZC1yb3cgOnN0YXRlKGZvY3VzLXZpc2libGUpJykgPz8gW10sXG4gICAgKS5mb3JFYWNoKChyb3cpID0+IMm1c3RhdGVDb250cm9sbGVyKHJvdykuZGVsZXRlKCdmb2N1cy12aXNpYmxlJykpO1xuICAgIHRoaXMuX2FjdGl2ZUNvbHVtbkluZGV4ID0gMDtcblxuICAgIGlmICghZW5hYmxlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFjdGl2ZU9wdGlvbiA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSXRlbUluZGV4ID0gdGhpcy5hY3RpdmVPcHRpb25cbiAgICAgID8gZW5hYmxlZE9wdGlvbnMuaW5kZXhPZih0aGlzLmFjdGl2ZU9wdGlvbiBhcyBTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudDxUPilcbiAgICAgIDogLTE7XG5cbiAgICAvLyBHZXQgYW5kIGFjdGl2YXRlIHRoZSBuZXh0IGFjdGl2ZSBvcHRpb25cbiAgICBjb25zdCBuZXh0ID0gZ2V0TmV4dEVsZW1lbnRJbmRleChldmVudCwgYWN0aXZlSXRlbUluZGV4LCBlbmFibGVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gZW5hYmxlZE9wdGlvbnNbbmV4dF07XG4gICAgdGhpcy5hY3RpdmVPcHRpb24uc2V0QWN0aXZlKHRydWUpO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgdGhpcy5hY3RpdmVPcHRpb24uaWQpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcblxuICAgIC8vIE1vdmluZyB0aGUgYWN0aXZlIG9wdGlvbiBzaG91bGQgbm90IG1vdmUgdGhlIGlucHV0IGN1cnNvciAoY2FyZXQpXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8vIElmICdhdXRvU2VsZWN0QWN0aXZlT3B0aW9uJyBhbmQgaXMgdHJpZ2dlcmVkIGZyb20gYSBrZXlib2FyZCBldmVudFxuICAgIGlmICh0aGlzLmF1dG9TZWxlY3RBY3RpdmVPcHRpb24gJiYgZXZlbnQpIHtcbiAgICAgIHRoaXMuc2V0UGVuZGluZ1NlbGVjdGlvbih0aGlzLmFjdGl2ZU9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmV4dEhvcml6b250YWxBY3RpdmVFbGVtZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRzSW5Sb3cgPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5hY3RpdmVPcHRpb25cbiAgICAgICAgPy5jbG9zZXN0KCdzYmItYXV0b2NvbXBsZXRlLWdyaWQtcm93JylcbiAgICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsPFxuICAgICAgICAgIFNiYkF1dG9jb21wbGV0ZUdyaWRPcHRpb25FbGVtZW50PFQ+IHwgU2JiQXV0b2NvbXBsZXRlR3JpZEJ1dHRvbkVsZW1lbnRcbiAgICAgICAgPignc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGlvbiwgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbicpID8/IFtdLFxuICAgICk/LmZpbHRlcigoZWwpID0+ICFlbC5tYXRjaGVzKCc6c3RhdGUoZGlzYWJsZWQpJykpO1xuXG4gICAgaWYgKCFlbGVtZW50c0luUm93Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHQ6IG51bWJlciA9IGdldE5leHRFbGVtZW50SW5kZXgoZXZlbnQsIHRoaXMuX2FjdGl2ZUNvbHVtbkluZGV4LCBlbGVtZW50c0luUm93Lmxlbmd0aCk7XG4gICAgY29uc3QgbmV4dEVsZW1lbnQ6IFNiYkF1dG9jb21wbGV0ZUdyaWRPcHRpb25FbGVtZW50PFQ+IHwgU2JiQXV0b2NvbXBsZXRlR3JpZEJ1dHRvbkVsZW1lbnQgPVxuICAgICAgZWxlbWVudHNJblJvd1tuZXh0XTtcbiAgICBpZiAobmV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudCkge1xuICAgICAgbmV4dEVsZW1lbnQuc2V0QWN0aXZlKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICDJtXN0YXRlQ29udHJvbGxlcihuZXh0RWxlbWVudCkuYWRkKCdmb2N1cy12aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEFjdGl2ZUVsZW1lbnQgPSBlbGVtZW50c0luUm93W3RoaXMuX2FjdGl2ZUNvbHVtbkluZGV4XTtcbiAgICBpZiAobGFzdEFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudCkge1xuICAgICAgbGFzdEFjdGl2ZUVsZW1lbnQuc2V0QWN0aXZlKGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgybVzdGF0ZUNvbnRyb2xsZXIobGFzdEFjdGl2ZUVsZW1lbnQpLmRlbGV0ZSgnZm9jdXMtdmlzaWJsZScpO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIG5leHRFbGVtZW50LmlkKTtcbiAgICBuZXh0RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgdGhpcy5fYWN0aXZlQ29sdW1uSW5kZXggPSBuZXh0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0QWN0aXZlRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlQ29sdW1uSW5kZXggIT09IDApIHtcbiAgICAgIHRoaXMuYWN0aXZlT3B0aW9uXG4gICAgICAgID8uY2xvc2VzdCgnc2JiLWF1dG9jb21wbGV0ZS1ncmlkLXJvdycpXG4gICAgICAgID8ucXVlcnlTZWxlY3RvckFsbCgnc2JiLWF1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbicpXG4gICAgICAgIC5mb3JFYWNoKChlKSA9PiDJtXN0YXRlQ29udHJvbGxlcihlKS5kZWxldGUoJ2ZvY3VzLXZpc2libGUnKSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlT3B0aW9uPy5zZXRBY3RpdmUoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVDb2x1bW5JbmRleCA9IDA7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRUcmlnZ2VyQXR0cmlidXRlcyhlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgc2V0QXJpYUNvbWJvQm94QXR0cmlidXRlcyhlbGVtZW50LCBhcmlhUm9sZU9uSG9zdCA/IHRoaXMuaWQgOiB0aGlzLm92ZXJsYXlJZCwgZmFsc2UsICdncmlkJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1hdXRvY29tcGxldGUtZ3JpZCc6IFNiYkF1dG9jb21wbGV0ZUdyaWRFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFXQSxJQUFJLFNBQVM7Ozs7O0FBTWIsSUFBTSxpQkFBaUI7Ozs7Ozs7Ozs7O0FBWXZCLElBQWEsNkJBQWIsY0FBNEQsMkJBQTZCO0NBQXpGLGNBQUE7O0FBR1ksT0FBQSxZQUFZLHlCQUF5QixFQUFFO0FBQ3ZDLE9BQUEsWUFBWTtBQUNkLE9BQUEscUJBQXFCOzs7QUFKRyxPQUFBLGNBQXNCOzs7QUFDdEIsT0FBQSxPQUFPLGlCQUFpQixTQUFTOztDQUtqRSxJQUFjLFVBQU87QUFDbkIsU0FBTyxNQUFNLEtBQ1gsS0FBSyxtQkFDSCwrQkFDRCxJQUFJLEVBQUUsQ0FDUjs7Q0FHTyxlQUFZO0FBQ3BCLE9BQUssbUJBRUgsNkRBQTZELENBQUMsU0FDN0QsTUFBTyxFQUFFLFdBQVcsS0FBSyxTQUMzQjtBQUVELE9BQUssbUJBQ0gsMEZBQ0QsQ0FBQyxTQUFTLFlBQVksaUJBQWlCLFFBQVEsQ0FBQyxPQUFPLFlBQVksS0FBSyxTQUFTLENBQUM7O0NBRzNFLCtCQUErQixPQUFvQjtBQUMzRCxNQUFJLENBQUMsS0FBSyxPQUNSO0FBRUYsVUFBUSxNQUFNLEtBQWQ7R0FDRSxLQUFLO0FBQ0gsU0FBSyxpQkFBaUIsTUFBTTtBQUM1QjtHQUVG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