@vendure/admin-ui 2.0.5 → 2.0.7

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 (113) hide show
  1. package/catalog/components/collection-detail/collection-detail.component.d.ts +3 -1
  2. package/catalog/components/create-product-variant-dialog/create-product-variant-dialog.component.d.ts +6 -4
  3. package/catalog/components/facet-detail/facet-detail.component.d.ts +3 -1
  4. package/catalog/components/product-detail/product-detail.component.d.ts +3 -1
  5. package/catalog/components/stock-location-detail/stock-location-detail.component.d.ts +3 -1
  6. package/core/common/utilities/custom-field-default-value.d.ts +6 -0
  7. package/core/common/version.d.ts +1 -1
  8. package/core/providers/dashboard-widget/dashboard-widget.service.d.ts +4 -1
  9. package/core/providers/data-table/data-table-filter-collection.d.ts +10 -6
  10. package/core/providers/data-table/data-table-filter.d.ts +13 -2
  11. package/core/public_api.d.ts +1 -0
  12. package/customer/components/customer-detail/customer-detail.component.d.ts +3 -1
  13. package/customer/components/customer-group-detail/customer-group-detail.component.d.ts +3 -1
  14. package/customer/components/customer-list/customer-list.component.d.ts +1 -0
  15. package/dashboard/components/dashboard/dashboard.component.d.ts +4 -1
  16. package/esm2022/catalog/components/asset-detail/asset-detail.component.mjs +3 -3
  17. package/esm2022/catalog/components/collection-data-table/collection-data-table.component.mjs +3 -3
  18. package/esm2022/catalog/components/collection-detail/collection-detail.component.mjs +3 -3
  19. package/esm2022/catalog/components/collection-list/collection-list.component.mjs +2 -1
  20. package/esm2022/catalog/components/create-product-variant-dialog/create-product-variant-dialog.component.mjs +8 -5
  21. package/esm2022/catalog/components/facet-detail/facet-detail.component.mjs +3 -3
  22. package/esm2022/catalog/components/facet-list/facet-list.component.mjs +2 -1
  23. package/esm2022/catalog/components/product-detail/product-detail.component.mjs +5 -5
  24. package/esm2022/catalog/components/product-list/product-list.component.mjs +2 -7
  25. package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs +4 -4
  26. package/esm2022/catalog/components/product-variant-list/product-variant-list.component.mjs +2 -7
  27. package/esm2022/catalog/components/product-variants-editor/product-variants-editor.component.mjs +7 -5
  28. package/esm2022/catalog/components/stock-location-detail/stock-location-detail.component.mjs +3 -3
  29. package/esm2022/catalog/components/stock-location-list/stock-location-list.component.mjs +2 -7
  30. package/esm2022/core/common/utilities/create-updated-translatable.mjs +5 -23
  31. package/esm2022/core/common/utilities/custom-field-default-value.mjs +28 -0
  32. package/esm2022/core/common/version.mjs +2 -2
  33. package/esm2022/core/components/channel-switcher/channel-switcher.component.mjs +3 -3
  34. package/esm2022/core/data/data.module.mjs +1 -1
  35. package/esm2022/core/providers/dashboard-widget/dashboard-widget.service.mjs +5 -5
  36. package/esm2022/core/providers/dashboard-widget/register-dashboard-widget.mjs +1 -1
  37. package/esm2022/core/providers/data-table/data-table-filter-collection.mjs +51 -22
  38. package/esm2022/core/providers/data-table/data-table-filter.mjs +8 -1
  39. package/esm2022/core/providers/local-storage/local-storage.service.mjs +1 -1
  40. package/esm2022/core/public_api.mjs +2 -1
  41. package/esm2022/core/shared/components/affixed-input/affixed-input.component.mjs +2 -2
  42. package/esm2022/core/shared/components/asset-gallery/asset-gallery.component.mjs +3 -3
  43. package/esm2022/core/shared/components/card/card.component.mjs +1 -1
  44. package/esm2022/core/shared/components/chip/chip.component.mjs +2 -2
  45. package/esm2022/core/shared/components/data-table-2/data-table2.component.mjs +3 -3
  46. package/esm2022/core/shared/components/data-table-filter-label/data-table-filter-label.component.mjs +3 -3
  47. package/esm2022/core/shared/components/data-table-filters/data-table-filters.component.mjs +23 -4
  48. package/esm2022/core/shared/components/facet-value-chip/facet-value-chip.component.mjs +2 -2
  49. package/esm2022/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.mjs +2 -2
  50. package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +2 -2
  51. package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +3 -3
  52. package/esm2022/customer/components/customer-group-detail/customer-group-detail.component.mjs +3 -3
  53. package/esm2022/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.mjs +3 -2
  54. package/esm2022/customer/components/customer-group-list/customer-group-list.component.mjs +2 -1
  55. package/esm2022/customer/components/customer-list/customer-list.component.mjs +34 -30
  56. package/esm2022/dashboard/components/dashboard/dashboard.component.mjs +4 -4
  57. package/esm2022/dashboard/components/dashboard-widget/dashboard-widget.component.mjs +1 -1
  58. package/esm2022/marketing/components/promotion-detail/promotion-detail.component.mjs +3 -3
  59. package/esm2022/marketing/components/promotion-list/promotion-list.component.mjs +2 -1
  60. package/esm2022/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +5 -3
  61. package/esm2022/order/components/order-data-table/order-data-table.component.mjs +3 -3
  62. package/esm2022/order/components/order-detail/order-detail.component.mjs +15 -13
  63. package/esm2022/order/components/order-list/order-list.component.mjs +2 -1
  64. package/esm2022/settings/components/admin-detail/admin-detail.component.mjs +3 -3
  65. package/esm2022/settings/components/administrator-list/administrator-list.component.mjs +2 -1
  66. package/esm2022/settings/components/channel-detail/channel-detail.component.mjs +10 -10
  67. package/esm2022/settings/components/channel-list/channel-list.component.mjs +2 -1
  68. package/esm2022/settings/components/country-detail/country-detail.component.mjs +3 -3
  69. package/esm2022/settings/components/country-list/country-list.component.mjs +3 -2
  70. package/esm2022/settings/components/global-settings/global-settings.component.mjs +3 -3
  71. package/esm2022/settings/components/payment-method-detail/payment-method-detail.component.mjs +3 -3
  72. package/esm2022/settings/components/payment-method-list/payment-method-list.component.mjs +2 -1
  73. package/esm2022/settings/components/profile/profile.component.mjs +3 -3
  74. package/esm2022/settings/components/role-list/role-list.component.mjs +2 -1
  75. package/esm2022/settings/components/seller-detail/seller-detail.component.mjs +3 -3
  76. package/esm2022/settings/components/seller-list/seller-list.component.mjs +2 -1
  77. package/esm2022/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +3 -3
  78. package/esm2022/settings/components/shipping-method-list/shipping-method-list.component.mjs +2 -1
  79. package/esm2022/settings/components/tax-category-detail/tax-category-detail.component.mjs +3 -3
  80. package/esm2022/settings/components/tax-category-list/tax-category-list.component.mjs +2 -1
  81. package/esm2022/settings/components/tax-rate-detail/tax-rate-detail.component.mjs +3 -3
  82. package/esm2022/settings/components/tax-rate-list/tax-rate-list.component.mjs +2 -1
  83. package/esm2022/settings/components/zone-detail/zone-detail.component.mjs +3 -3
  84. package/esm2022/settings/components/zone-list/zone-list.component.mjs +2 -1
  85. package/fesm2022/vendure-admin-ui-catalog.mjs +30 -39
  86. package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
  87. package/fesm2022/vendure-admin-ui-core.mjs +131 -68
  88. package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
  89. package/fesm2022/vendure-admin-ui-customer.mjs +34 -29
  90. package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
  91. package/fesm2022/vendure-admin-ui-dashboard.mjs +3 -3
  92. package/fesm2022/vendure-admin-ui-dashboard.mjs.map +1 -1
  93. package/fesm2022/vendure-admin-ui-marketing.mjs +3 -2
  94. package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
  95. package/fesm2022/vendure-admin-ui-order.mjs +21 -16
  96. package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
  97. package/fesm2022/vendure-admin-ui-settings.mjs +30 -20
  98. package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
  99. package/marketing/components/promotion-detail/promotion-detail.component.d.ts +3 -1
  100. package/order/components/order-detail/order-detail.component.d.ts +3 -1
  101. package/package.json +2 -2
  102. package/settings/components/admin-detail/admin-detail.component.d.ts +3 -1
  103. package/settings/components/channel-detail/channel-detail.component.d.ts +5 -3
  104. package/settings/components/country-detail/country-detail.component.d.ts +3 -1
  105. package/settings/components/global-settings/global-settings.component.d.ts +3 -1
  106. package/settings/components/payment-method-detail/payment-method-detail.component.d.ts +3 -1
  107. package/settings/components/profile/profile.component.d.ts +3 -1
  108. package/settings/components/seller-detail/seller-detail.component.d.ts +3 -1
  109. package/settings/components/shipping-method-detail/shipping-method-detail.component.d.ts +3 -1
  110. package/settings/components/tax-category-detail/tax-category-detail.component.d.ts +3 -1
  111. package/settings/components/tax-rate-detail/tax-rate-detail.component.d.ts +3 -1
  112. package/settings/components/zone-detail/zone-detail.component.d.ts +3 -1
  113. package/static/i18n-messages/it.json +169 -169
@@ -19,14 +19,9 @@ export class ProductListComponent extends TypedBaseListComponent {
19
19
  this.pendingSearchIndexUpdates = 0;
20
20
  this.customFields = this.getCustomFieldConfig('Product');
21
21
  this.filters = this.createFilterCollection()
22
+ .addIdFilter()
22
23
  .addDateFilters()
23
24
  .addFilters([
24
- {
25
- name: 'id',
26
- type: { kind: 'text' },
27
- label: _('common.id'),
28
- filterField: 'id',
29
- },
30
25
  {
31
26
  name: 'enabled',
32
27
  type: { kind: 'boolean' },
@@ -149,4 +144,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
149
144
  type: Component,
150
145
  args: [{ selector: 'vdr-products-list', template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"button primary mr-1\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateProduct']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-product' | translate }}\r\n </a>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button type=\"button\" vdrDropdownItem (click)=\"rebuildSearchIndex()\">\r\n <clr-icon shape=\"refresh\" class=\"\"></clr-icon>\r\n {{ 'catalog.rebuild-search-index' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n id=\"product-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"product-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <!--<ng-template #vdrDt2CustomSearch>\r\n <div class=\"search-form\">\r\n <vdr-product-search-input\r\n #productSearchInputComponent\r\n [facetValueResults]=\"facetValues$ | async\"\r\n (searchTermChange)=\"setSearchTerm($event)\"\r\n (facetValueChange)=\"setFacetValueIds($event)\"\r\n ></vdr-product-search-input>\r\n <vdr-dropdown class=\"search-settings-menu mr3\">\r\n <button\r\n type=\"button\"\r\n class=\"icon-button search-index-button\"\r\n [title]=\"\r\n (pendingSearchIndexUpdates\r\n ? 'catalog.pending-search-index-updates'\r\n : 'catalog.search-index-controls'\r\n ) | translate\r\n \"\r\n vdrDropdownTrigger\r\n >\r\n <clr-icon shape=\"cog\"></clr-icon>\r\n <vdr-status-badge *ngIf=\"pendingSearchIndexUpdates\" type=\"warning\"></vdr-status-badge>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <h4 class=\"dropdown-header\">{{ 'catalog.search-index-controls' | translate }}</h4>\r\n <ng-container *ngIf=\"pendingSearchIndexUpdates\">\r\n <button\r\n type=\"button\"\r\n class=\"run-updates-button\"\r\n vdrDropdownItem\r\n (click)=\"runPendingSearchIndexUpdates()\"\r\n [disabled]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n >\r\n <vdr-status-badge type=\"warning\"></vdr-status-badge>\r\n {{\r\n 'catalog.run-pending-search-index-updates'\r\n | translate : { count: pendingSearchIndexUpdates }\r\n }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n </ng-container>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"rebuildSearchIndex()\"\r\n [disabled]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n >\r\n {{ 'catalog.rebuild-search-index' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-template>-->\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-product=\"item\">\r\n {{ product.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-product=\"item\">\r\n {{ product.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-product=\"item\">\r\n {{ product.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.image' | translate\">\r\n <ng-template let-product=\"item\">\r\n <div class=\"image-placeholder\">\r\n <img\r\n *ngIf=\"product.featuredAsset as asset; else imagePlaceholder\"\r\n [src]=\"asset | assetPreview : 'tiny'\"\r\n />\r\n <ng-template #imagePlaceholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.name' | translate\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-product=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', product.id]\"\r\n ><span>{{ product.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" [sort]=\"sorts.get('slug')\">\r\n <ng-template let-product=\"item\">\r\n {{ product.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\">\r\n <ng-template let-product=\"item\">\r\n <vdr-chip *ngIf=\"product.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!product.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.number-of-variants' | translate\">\r\n <ng-template let-product=\"item\">\r\n {{ 'catalog.variant-count' | translate : { count: product.variantList?.totalItems } }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n", styles: [".image-col{width:70px}.image-placeholder{width:50px;height:50px;margin-top:calc(var(--space-unit) * -1);margin-bottom:calc(var(--space-unit) * -1);background-color:var(--color-component-bg-200)}.image-placeholder img{border-radius:var(--border-radius-img)}.image-placeholder .placeholder{text-align:center;color:var(--color-grey-300)}.search-form{display:flex;align-items:center;width:100%}vdr-product-search-input{min-width:300px}@media screen and (max-width: 768px){vdr-product-search-input{min-width:100px}}.search-settings-menu{margin:0 12px}td.disabled{background-color:var(--color-component-bg-200)}.search-index-button{position:relative}.search-index-button vdr-status-badge{right:0;top:0}.run-updates-button{position:relative}.run-updates-button vdr-status-badge{left:10px;top:10px}.edit-button{margin-right:24px}.sku{color:var(--color-text-300)}\n"] }]
151
146
  }], ctorParameters: function () { return [{ type: i1.DataService }, { type: i1.ModalService }, { type: i1.NotificationService }, { type: i1.JobQueueService }]; } });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LWxpc3QvcHJvZHVjdC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LWxpc3QvcHJvZHVjdC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBRUgsNEJBQTRCLEVBRTVCLFFBQVEsRUFHUix3QkFBd0IsRUFDeEIsc0JBQXNCLEdBQ3pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQU9sRCxNQUFNLE9BQU8sb0JBQ1QsU0FBUSxzQkFBbUU7SUF5RTNFLFlBQ2MsV0FBd0IsRUFDMUIsWUFBMEIsRUFDMUIsbUJBQXdDLEVBQ3hDLGVBQWdDO1FBRXhDLEtBQUssRUFBRSxDQUFDO1FBTEUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUExRTVDLDhCQUF5QixHQUFHLENBQUMsQ0FBQztRQUNyQixpQkFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxZQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixF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LFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3Riw4RUFBOEU7UUFDOUUsY0FBYztRQUNkLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FDYjthQUNBLFNBQVMsQ0FDTixHQUFHLEVBQUU7WUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO2dCQUNoRSxNQUFNLEVBQUUsU0FBUzthQUNwQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxFQUNELEdBQUcsQ0FBQyxFQUFFO1lBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsRUFBRTtnQkFDNUQsTUFBTSxFQUFFLFNBQVM7YUFDcEIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUNKLENBQUM7SUFDVixDQUFDOzhHQW5KUSxvQkFBb0I7a0dBQXBCLG9CQUFvQixnRkNwQmpDLG92UUFrTEE7OzJGRDlKYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0ksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBGYWNldFZhbHVlRm9ybUlucHV0Q29tcG9uZW50LFxyXG4gICAgSm9iUXVldWVTZXJ2aWNlLFxyXG4gICAgSm9iU3RhdGUsXHJcbiAgICBNb2RhbFNlcnZpY2UsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgUHJvZHVjdExpc3RRdWVyeURvY3VtZW50LFxyXG4gICAgVHlwZWRCYXNlTGlzdENvbXBvbmVudCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgRU1QVFksIGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvZHVjdHMtbGlzdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdExpc3RDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlTGlzdENvbXBvbmVudDx0eXBlb2YgUHJvZHVjdExpc3RRdWVyeURvY3VtZW50LCAncHJvZHVjdHMnPlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXRcclxue1xyXG4gICAgcGVuZGluZ1NlYXJjaEluZGV4VXBkYXRlcyA9IDA7XHJcbiAgICByZWFkb25seSBjdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9kdWN0Jyk7XHJcbiAgICByZWFkb25seSBmaWx0ZXJzID0gdGhpcy5jcmVhdGVGaWx0ZXJDb2xsZWN0aW9uKClcclxuICAgICAgICAuYWRkRGF0ZUZpbHRlcnMoKVxyXG4gICAgICAgIC5hZGRGaWx0ZXJzKFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHsga2luZDogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogXygnY29tbW9uLmlkJyksXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ2lkJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ2VuYWJsZWQnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogeyBraW5kOiAnYm9vbGVhbicgfSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBfKCdjb21tb24uZW5hYmxlZCcpLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICdlbmFibGVkJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3NsdWcnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogeyBraW5kOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBfKCdjb21tb24uc2x1ZycpLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICdzbHVnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdKVxyXG4gICAgICAgIC5hZGRGaWx0ZXIoe1xyXG4gICAgICAgICAgICBuYW1lOiAnZmFjZXRWYWx1ZXMnLFxyXG4gICAgICAgICAgICB0eXBlOiB7XHJcbiAgICAgICAgICAgICAgICBraW5kOiAnY3VzdG9tJyxcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogRmFjZXRWYWx1ZUZvcm1JbnB1dENvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZVZhbHVlOiB2YWx1ZSA9PiB2YWx1ZS5tYXAodiA9PiB2LmlkKS5qb2luKCcsJyksXHJcbiAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZVZhbHVlOiB2YWx1ZSA9PiB2YWx1ZS5zcGxpdCgnLCcpLm1hcChpZCA9PiAoeyBpZCB9KSksXHJcbiAgICAgICAgICAgICAgICBnZXRMYWJlbDogdmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbMF0ubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKHYgPT4gdi5uYW1lKS5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5mYWNldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRGYWNldFZhbHVlcyh7IGZpbHRlcjogeyBpZDogeyBpbjogdmFsdWUubWFwKHYgPT4gdi5pZCkgfSB9IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcFNpbmdsZSgoeyBmYWNldFZhbHVlcyB9KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNldFZhbHVlcy5pdGVtcy5tYXAoZnYgPT4gZnYubmFtZSkuam9pbignLCAnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxhYmVsOiBfKCdjYXRhbG9nLmZhY2V0LXZhbHVlcycpLFxyXG4gICAgICAgICAgICB0b0ZpbHRlcklucHV0OiAodmFsdWU6IGFueVtdKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgZmFjZXRWYWx1ZUlkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW46IHZhbHVlLm1hcCh2ID0+IHYuaWQpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYWRkQ3VzdG9tRmllbGRGaWx0ZXJzKHRoaXMuY3VzdG9tRmllbGRzKVxyXG4gICAgICAgIC5jb25uZWN0VG9Sb3V0ZSh0aGlzLnJvdXRlKTtcclxuXHJcbiAgICByZWFkb25seSBzb3J0cyA9IHRoaXMuY3JlYXRlU29ydENvbGxlY3Rpb24oKVxyXG4gICAgICAgIC5kZWZhdWx0U29ydCgnY3JlYXRlZEF0JywgJ0RFU0MnKVxyXG4gICAgICAgIC5hZGRTb3J0cyhbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjcmVhdGVkQXQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3VwZGF0ZWRBdCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbmFtZScgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnc2x1ZycgfSxcclxuICAgICAgICBdKVxyXG4gICAgICAgIC5hZGRDdXN0b21GaWVsZFNvcnRzKHRoaXMuY3VzdG9tRmllbGRzKVxyXG4gICAgICAgIC5jb25uZWN0VG9Sb3V0ZSh0aGlzLnJvdXRlKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgam9iUXVldWVTZXJ2aWNlOiBKb2JRdWV1ZVNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJlKHtcclxuICAgICAgICAgICAgZG9jdW1lbnQ6IFByb2R1Y3RMaXN0UXVlcnlEb2N1bWVudCxcclxuICAgICAgICAgICAgZ2V0SXRlbXM6IGRhdGEgPT4gZGF0YS5wcm9kdWN0cyxcclxuICAgICAgICAgICAgc2V0VmFyaWFibGVzOiAoc2tpcCwgdGFrZSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBza2lwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRha2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiB0aGlzLnNlYXJjaFRlcm1Db250cm9sLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmZpbHRlcnMuY3JlYXRlRmlsdGVySW5wdXQoKSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMuc29ydHMuY3JlYXRlU29ydElucHV0KCksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgcmVmcmVzaExpc3RPbkNoYW5nZXM6IFt0aGlzLnNvcnRzLnZhbHVlQ2hhbmdlcywgdGhpcy5maWx0ZXJzLnZhbHVlQ2hhbmdlc10sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVidWlsZFNlYXJjaEluZGV4KCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC5yZWluZGV4KCkuc3Vic2NyaWJlKCh7IHJlaW5kZXggfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyhfKCdjYXRhbG9nLnJlaW5kZXhpbmcnKSk7XHJcbiAgICAgICAgICAgIHRoaXMuam9iUXVldWVTZXJ2aWNlLmFkZEpvYihyZWluZGV4LmlkLCBqb2IgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGpvYi5zdGF0ZSA9PT0gSm9iU3RhdGUuQ09NUExFVEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgpLmZvcm1hdChqb2IuZHVyYXRpb24gfHwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY2F0YWxvZy5yZWluZGV4LXN1Y2Nlc3NmdWwnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudDogam9iLnJlc3VsdC5pbmRleGVkSXRlbUNvdW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY2F0YWxvZy5yZWluZGV4LWVycm9yJykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQcm9kdWN0KHByb2R1Y3RJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmRpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXygnY2F0YWxvZy5jb25maXJtLWRlbGV0ZS1wcm9kdWN0JyksXHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnc2Vjb25kYXJ5JywgbGFiZWw6IF8oJ2NvbW1vbi5jYW5jZWwnKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ2RhbmdlcicsIGxhYmVsOiBfKCdjb21tb24uZGVsZXRlJyksIHJldHVyblZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PiAocmVzcG9uc2UgPyB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QuZGVsZXRlUHJvZHVjdChwcm9kdWN0SWQpIDogRU1QVFkpKSxcclxuICAgICAgICAgICAgICAgIC8vIFNob3J0IGRlbGF5IHRvIGFsbG93IHRoZSBwcm9kdWN0IHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VhcmNoIGluZGV4IGJlZm9yZVxyXG4gICAgICAgICAgICAgICAgLy8gcmVmcmVzaGluZy5cclxuICAgICAgICAgICAgICAgIGRlbGF5KDUwMCksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWRlbGV0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS1kZWxldGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIFtjdXJyZW50TGFuZ3VhZ2VDb2RlXT1cImNvbnRlbnRMYW5ndWFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgPC92ZHItYWItbGVmdD5cclxuICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICA8dmRyLWFjdGlvbi1iYXItaXRlbXMgbG9jYXRpb25JZD1cInByb2R1Y3QtbGlzdFwiPjwvdmRyLWFjdGlvbi1iYXItaXRlbXM+XHJcbiAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5IG1yLTFcIlxyXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycuL2NyZWF0ZSddXCJcclxuICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwiWydDcmVhdGVDYXRhbG9nJywgJ0NyZWF0ZVByb2R1Y3QnXVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuY3JlYXRlLW5ldy1wcm9kdWN0JyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDx2ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idXR0b25cIiB2ZHJEcm9wZG93blRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZWxsaXBzaXMtdmVydGljYWxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnUgdmRyUG9zaXRpb249XCJib3R0b20tcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB2ZHJEcm9wZG93bkl0ZW0gKGNsaWNrKT1cInJlYnVpbGRTZWFyY2hJbmRleCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInJlZnJlc2hcIiBjbGFzcz1cIlwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLnJlYnVpbGQtc2VhcmNoLWluZGV4JyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgPC92ZHItYWItcmlnaHQ+XHJcbiAgICA8L3Zkci1hY3Rpb24tYmFyPlxyXG48L3Zkci1wYWdlLWJsb2NrPlxyXG48dmRyLWRhdGEtdGFibGUtMlxyXG4gICAgY2xhc3M9XCJtdC0yXCJcclxuICAgIGlkPVwicHJvZHVjdC1saXN0XCJcclxuICAgIFtpdGVtc109XCJpdGVtcyQgfCBhc3luY1wiXHJcbiAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXHJcbiAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zJCB8IGFzeW5jXCJcclxuICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZSQgfCBhc3luY1wiXHJcbiAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICAgIChwYWdlQ2hhbmdlKT1cInNldFBhZ2VOdW1iZXIoJGV2ZW50KVwiXHJcbiAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cInNldEl0ZW1zUGVyUGFnZSgkZXZlbnQpXCJcclxuPlxyXG4gICAgPHZkci1idWxrLWFjdGlvbi1tZW51XHJcbiAgICAgICAgbG9jYXRpb25JZD1cInByb2R1Y3QtbGlzdFwiXHJcbiAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXHJcbiAgICAgICAgW3NlbGVjdGlvbk1hbmFnZXJdPVwic2VsZWN0aW9uTWFuYWdlclwiXHJcbiAgICA+PC92ZHItYnVsay1hY3Rpb24tbWVudT5cclxuICAgIDwhLS08bmctdGVtcGxhdGUgI3ZkckR0MkN1c3RvbVNlYXJjaD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1mb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLXByb2R1Y3Qtc2VhcmNoLWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgI3Byb2R1Y3RTZWFyY2hJbnB1dENvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICAgIFtmYWNldFZhbHVlUmVzdWx0c109XCJmYWNldFZhbHVlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNlYXJjaFRlcm1DaGFuZ2UpPVwic2V0U2VhcmNoVGVybSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAoZmFjZXRWYWx1ZUNoYW5nZSk9XCJzZXRGYWNldFZhbHVlSWRzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLXByb2R1Y3Qtc2VhcmNoLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgPHZkci1kcm9wZG93biBjbGFzcz1cInNlYXJjaC1zZXR0aW5ncy1tZW51IG1yM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1idXR0b24gc2VhcmNoLWluZGV4LWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwZW5kaW5nU2VhcmNoSW5kZXhVcGRhdGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnY2F0YWxvZy5wZW5kaW5nLXNlYXJjaC1pbmRleC11cGRhdGVzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2NhdGFsb2cuc2VhcmNoLWluZGV4LWNvbnRyb2xzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93blRyaWdnZXJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImNvZ1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItc3RhdHVzLWJhZGdlICpuZ0lmPVwicGVuZGluZ1NlYXJjaEluZGV4VXBkYXRlc1wiIHR5cGU9XCJ3YXJuaW5nXCI+PC92ZHItc3RhdHVzLWJhZGdlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24tbWVudSB2ZHJQb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJkcm9wZG93bi1oZWFkZXJcIj57eyAnY2F0YWxvZy5zZWFyY2gtaW5kZXgtY29udHJvbHMnIHwgdHJhbnNsYXRlIH19PC9oND5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBlbmRpbmdTZWFyY2hJbmRleFVwZGF0ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJ1bi11cGRhdGVzLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmRyRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1blBlbmRpbmdTZWFyY2hJbmRleFVwZGF0ZXMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEoWydVcGRhdGVDYXRhbG9nJywgJ1VwZGF0ZVByb2R1Y3QnXSB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXN0YXR1cy1iYWRnZSB0eXBlPVwid2FybmluZ1wiPjwvdmRyLXN0YXR1cy1iYWRnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F0YWxvZy5ydW4tcGVuZGluZy1zZWFyY2gtaW5kZXgtdXBkYXRlcydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlIDogeyBjb3VudDogcGVuZGluZ1NlYXJjaEluZGV4VXBkYXRlcyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmRyRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVidWlsZFNlYXJjaEluZGV4KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEoWydVcGRhdGVDYXRhbG9nJywgJ1VwZGF0ZVByb2R1Y3QnXSB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cucmVidWlsZC1zZWFyY2gtaW5kZXgnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT4tLT5cclxuICAgIDx2ZHItZHQyLXNlYXJjaFxyXG4gICAgICAgIFtzZWFyY2hUZXJtQ29udHJvbF09XCJzZWFyY2hUZXJtQ29udHJvbFwiXHJcbiAgICAgICAgW3NlYXJjaFRlcm1QbGFjZWhvbGRlcl09XCInY2F0YWxvZy5maWx0ZXItYnktbmFtZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgLz5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmlkJyB8IHRyYW5zbGF0ZVwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiIFtzb3J0XT1cInNvcnRzLmdldCgnaWQnKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcHJvZHVjdD1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgcHJvZHVjdC5pZCB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uXHJcbiAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi5jcmVhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCJcclxuICAgICAgICBbc29ydF09XCJzb3J0cy5nZXQoJ2NyZWF0ZWRBdCcpXCJcclxuICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb2R1Y3Q9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IHByb2R1Y3QuY3JlYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgIFtoZWFkaW5nXT1cIidjb21tb24udXBkYXRlZC1hdCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3NvcnRdPVwic29ydHMuZ2V0KCd1cGRhdGVkQXQnKVwiXHJcbiAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1wcm9kdWN0PVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyBwcm9kdWN0LnVwZGF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5pbWFnZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb2R1Y3Q9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1wbGFjZWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvZHVjdC5mZWF0dXJlZEFzc2V0IGFzIGFzc2V0OyBlbHNlIGltYWdlUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYXNzZXQgfCBhc3NldFByZXZpZXcgOiAndGlueSdcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW1hZ2VQbGFjZWhvbGRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGxhY2Vob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiaW1hZ2VcIiBzaXplPVwiNDhcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NhdGFsb2cubmFtZScgfCB0cmFuc2xhdGVcIiBbb3B0aW9uYWxdPVwiZmFsc2VcIiBbc29ydF09XCJzb3J0cy5nZXQoJ25hbWUnKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcHJvZHVjdD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9XCJidXR0b24tZ2hvc3RcIiBbcm91dGVyTGlua109XCJbJy4vJywgcHJvZHVjdC5pZF1cIlxyXG4gICAgICAgICAgICAgICAgPjxzcGFuPnt7IHByb2R1Y3QubmFtZSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgPjxjbHItaWNvbiBzaGFwZT1cImFycm93IHJpZ2h0XCJcclxuICAgICAgICAgICAgLz48L2E+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5zbHVnJyB8IHRyYW5zbGF0ZVwiIFtzb3J0XT1cInNvcnRzLmdldCgnc2x1ZycpXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1wcm9kdWN0PVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyBwcm9kdWN0LnNsdWcgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmVuYWJsZWQnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1wcm9kdWN0PVwiaXRlbVwiPlxyXG4gICAgICAgICAgICA8dmRyLWNoaXAgKm5nSWY9XCJwcm9kdWN0LmVuYWJsZWRcIiBjb2xvclR5cGU9XCJzdWNjZXNzXCI+e3tcclxuICAgICAgICAgICAgICAgICdjb21tb24uZW5hYmxlZCcgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICA8dmRyLWNoaXAgKm5nSWY9XCIhcHJvZHVjdC5lbmFibGVkXCIgY29sb3JUeXBlPVwid2FybmluZ1wiPnt7XHJcbiAgICAgICAgICAgICAgICAnY29tbW9uLmRpc2FibGVkJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9fTwvdmRyLWNoaXA+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NhdGFsb2cubnVtYmVyLW9mLXZhcmlhbnRzJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcHJvZHVjdD1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgJ2NhdGFsb2cudmFyaWFudC1jb3VudCcgfCB0cmFuc2xhdGUgOiB7IGNvdW50OiBwcm9kdWN0LnZhcmlhbnRMaXN0Py50b3RhbEl0ZW1zIH0gfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWN1c3RvbS1maWVsZC1jb2x1bW5cclxuICAgICAgICAqbmdGb3I9XCJsZXQgY3VzdG9tRmllbGQgb2YgY3VzdG9tRmllbGRzXCJcclxuICAgICAgICBbY3VzdG9tRmllbGRdPVwiY3VzdG9tRmllbGRcIlxyXG4gICAgICAgIFtzb3J0c109XCJzb3J0c1wiXHJcbiAgICAvPlxyXG48L3Zkci1kYXRhLXRhYmxlLTI+XHJcbiJdfQ==
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LWxpc3QvcHJvZHVjdC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LWxpc3QvcHJvZHVjdC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBRUgsNEJBQTRCLEVBRTVCLFFBQVEsRUFHUix3QkFBd0IsRUFDeEIsc0JBQXNCLEdBQ3pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQU9sRCxNQUFNLE9BQU8sb0JBQ1QsU0FBUSxzQkFBbUU7SUFvRTNFLFlBQ2MsV0FBd0IsRUFDMUIsWUFBMEIsRUFDMUIsbUJBQXdDLEVBQ3hDLGVBQWdDO1FBRXhDLEtBQUssRUFBRSxDQUFDO1FBTEUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFyRTVDLDhCQUF5QixHQUFHLENBQUMsQ0FBQztRQUNyQixpQkFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxZQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixF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QUMsQ0FDYjthQUNBLFNBQVMsQ0FDTixHQUFHLEVBQUU7WUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO2dCQUNoRSxNQUFNLEVBQUUsU0FBUzthQUNwQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxFQUNELEdBQUcsQ0FBQyxFQUFFO1lBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsRUFBRTtnQkFDNUQsTUFBTSxFQUFFLFNBQVM7YUFDcEIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUNKLENBQUM7SUFDVixDQUFDOzhHQTlJUSxvQkFBb0I7a0dBQXBCLG9CQUFvQixnRkNwQmpDLG92UUFrTEE7OzJGRDlKYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0ksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBGYWNldFZhbHVlRm9ybUlucHV0Q29tcG9uZW50LFxyXG4gICAgSm9iUXVldWVTZXJ2aWNlLFxyXG4gICAgSm9iU3RhdGUsXHJcbiAgICBNb2RhbFNlcnZpY2UsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgUHJvZHVjdExpc3RRdWVyeURvY3VtZW50LFxyXG4gICAgVHlwZWRCYXNlTGlzdENvbXBvbmVudCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgRU1QVFksIGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvZHVjdHMtbGlzdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdExpc3RDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlTGlzdENvbXBvbmVudDx0eXBlb2YgUHJvZHVjdExpc3RRdWVyeURvY3VtZW50LCAncHJvZHVjdHMnPlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXRcclxue1xyXG4gICAgcGVuZGluZ1NlYXJjaEluZGV4VXBkYXRlcyA9IDA7XHJcbiAgICByZWFkb25seSBjdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9kdWN0Jyk7XHJcbiAgICByZWFkb25seSBmaWx0ZXJzID0gdGhpcy5jcmVhdGVGaWx0ZXJDb2xsZWN0aW9uKClcclxuICAgICAgICAuYWRkSWRGaWx0ZXIoKVxyXG4gICAgICAgIC5hZGREYXRlRmlsdGVycygpXHJcbiAgICAgICAgLmFkZEZpbHRlcnMoW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZW5hYmxlZCcsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICdib29sZWFuJyB9LFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IF8oJ2NvbW1vbi5lbmFibGVkJyksXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ2VuYWJsZWQnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2x1ZycsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IF8oJ2NvbW1vbi5zbHVnJyksXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ3NsdWcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgLmFkZEZpbHRlcih7XHJcbiAgICAgICAgICAgIG5hbWU6ICdmYWNldFZhbHVlcycsXHJcbiAgICAgICAgICAgIHR5cGU6IHtcclxuICAgICAgICAgICAgICAgIGtpbmQ6ICdjdXN0b20nLFxyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBGYWNldFZhbHVlRm9ybUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplVmFsdWU6IHZhbHVlID0+IHZhbHVlLm1hcCh2ID0+IHYuaWQpLmpvaW4oJywnKSxcclxuICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplVmFsdWU6IHZhbHVlID0+IHZhbHVlLnNwbGl0KCcsJykubWFwKGlkID0+ICh7IGlkIH0pKSxcclxuICAgICAgICAgICAgICAgIGdldExhYmVsOiB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZVswXS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAodiA9PiB2Lm5hbWUpLmpvaW4oJywgJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZhY2V0VmFsdWVzKHsgZmlsdGVyOiB7IGlkOiB7IGluOiB2YWx1ZS5tYXAodiA9PiB2LmlkKSB9IH0gfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwU2luZ2xlKCh7IGZhY2V0VmFsdWVzIH0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2V0VmFsdWVzLml0ZW1zLm1hcChmdiA9PiBmdi5uYW1lKS5qb2luKCcsICcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGFiZWw6IF8oJ2NhdGFsb2cuZmFjZXQtdmFsdWVzJyksXHJcbiAgICAgICAgICAgIHRvRmlsdGVySW5wdXQ6ICh2YWx1ZTogYW55W10pID0+ICh7XHJcbiAgICAgICAgICAgICAgICBmYWNldFZhbHVlSWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBpbjogdmFsdWUubWFwKHYgPT4gdi5pZCksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hZGRDdXN0b21GaWVsZEZpbHRlcnModGhpcy5jdXN0b21GaWVsZHMpXHJcbiAgICAgICAgLmNvbm5lY3RUb1JvdXRlKHRoaXMucm91dGUpO1xyXG5cclxuICAgIHJlYWRvbmx5IHNvcnRzID0gdGhpcy5jcmVhdGVTb3J0Q29sbGVjdGlvbigpXHJcbiAgICAgICAgLmRlZmF1bHRTb3J0KCdjcmVhdGVkQXQnLCAnREVTQycpXHJcbiAgICAgICAgLmFkZFNvcnRzKFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnaWQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NyZWF0ZWRBdCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndXBkYXRlZEF0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICduYW1lJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdzbHVnJyB9LFxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgLmFkZEN1c3RvbUZpZWxkU29ydHModGhpcy5jdXN0b21GaWVsZHMpXHJcbiAgICAgICAgLmNvbm5lY3RUb1JvdXRlKHRoaXMucm91dGUpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBqb2JRdWV1ZVNlcnZpY2U6IEpvYlF1ZXVlU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmUoe1xyXG4gICAgICAgICAgICBkb2N1bWVudDogUHJvZHVjdExpc3RRdWVyeURvY3VtZW50LFxyXG4gICAgICAgICAgICBnZXRJdGVtczogZGF0YSA9PiBkYXRhLnByb2R1Y3RzLFxyXG4gICAgICAgICAgICBzZXRWYXJpYWJsZXM6IChza2lwLCB0YWtlKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHNraXAsXHJcbiAgICAgICAgICAgICAgICAgICAgdGFrZSxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6IHRoaXMuc2VhcmNoVGVybUNvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZmlsdGVycy5jcmVhdGVGaWx0ZXJJbnB1dCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydDogdGhpcy5zb3J0cy5jcmVhdGVTb3J0SW5wdXQoKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICByZWZyZXNoTGlzdE9uQ2hhbmdlczogW3RoaXMuc29ydHMudmFsdWVDaGFuZ2VzLCB0aGlzLmZpbHRlcnMudmFsdWVDaGFuZ2VzXSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWJ1aWxkU2VhcmNoSW5kZXgoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnJlaW5kZXgoKS5zdWJzY3JpYmUoKHsgcmVpbmRleCB9KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5pbmZvKF8oJ2NhdGFsb2cucmVpbmRleGluZycpKTtcclxuICAgICAgICAgICAgdGhpcy5qb2JRdWV1ZVNlcnZpY2UuYWRkSm9iKHJlaW5kZXguaWQsIGpvYiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoam9iLnN0YXRlID09PSBKb2JTdGF0ZS5DT01QTEVURUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KGpvYi5kdXJhdGlvbiB8fCAwKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjYXRhbG9nLnJlaW5kZXgtc3VjY2Vzc2Z1bCcpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBqb2IucmVzdWx0LmluZGV4ZWRJdGVtQ291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjYXRhbG9nLnJlaW5kZXgtZXJyb3InKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZVByb2R1Y3QocHJvZHVjdElkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZVxyXG4gICAgICAgICAgICAuZGlhbG9nKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBfKCdjYXRhbG9nLmNvbmZpcm0tZGVsZXRlLXByb2R1Y3QnKSxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdzZWNvbmRhcnknLCBsYWJlbDogXygnY29tbW9uLmNhbmNlbCcpIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnZGFuZ2VyJywgbGFiZWw6IF8oJ2NvbW1vbi5kZWxldGUnKSwgcmV0dXJuVmFsdWU6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IChyZXNwb25zZSA/IHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC5kZWxldGVQcm9kdWN0KHByb2R1Y3RJZCkgOiBFTVBUWSkpLFxyXG4gICAgICAgICAgICAgICAgLy8gU2hvcnQgZGVsYXkgdG8gYWxsb3cgdGhlIHByb2R1Y3QgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZWFyY2ggaW5kZXggYmVmb3JlXHJcbiAgICAgICAgICAgICAgICAvLyByZWZyZXNoaW5nLlxyXG4gICAgICAgICAgICAgICAgZGVsYXkoNTAwKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktZGVsZXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LWRlbGV0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iLCI8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLWFjdGlvbi1iYXI+XHJcbiAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc109XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwiY29udGVudExhbmd1YWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIChsYW5ndWFnZUNvZGVDaGFuZ2UpPVwic2V0TGFuZ3VhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L3Zkci1sYW5ndWFnZS1zZWxlY3Rvcj5cclxuICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG4gICAgICAgIDx2ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgICAgIDx2ZHItYWN0aW9uLWJhci1pdGVtcyBsb2NhdGlvbklkPVwicHJvZHVjdC1saXN0XCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIHByaW1hcnkgbXItMVwiXHJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy4vY3JlYXRlJ11cIlxyXG4gICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJbJ0NyZWF0ZUNhdGFsb2cnLCAnQ3JlYXRlUHJvZHVjdCddXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5jcmVhdGUtbmV3LXByb2R1Y3QnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ1dHRvblwiIHZkckRyb3Bkb3duVHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlbGxpcHNpcy12ZXJ0aWNhbFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24tbWVudSB2ZHJQb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHZkckRyb3Bkb3duSXRlbSAoY2xpY2spPVwicmVidWlsZFNlYXJjaEluZGV4KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicmVmcmVzaFwiIGNsYXNzPVwiXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cucmVidWlsZC1zZWFyY2gtaW5kZXgnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bi1tZW51PlxyXG4gICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cclxuICAgICAgICA8L3Zkci1hYi1yaWdodD5cclxuICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbjwvdmRyLXBhZ2UtYmxvY2s+XHJcbjx2ZHItZGF0YS10YWJsZS0yXHJcbiAgICBjbGFzcz1cIm10LTJcIlxyXG4gICAgaWQ9XCJwcm9kdWN0LWxpc3RcIlxyXG4gICAgW2l0ZW1zXT1cIml0ZW1zJCB8IGFzeW5jXCJcclxuICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlJCB8IGFzeW5jXCJcclxuICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlJCB8IGFzeW5jXCJcclxuICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxyXG4gICAgKHBhZ2VDaGFuZ2UpPVwic2V0UGFnZU51bWJlcigkZXZlbnQpXCJcclxuICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwic2V0SXRlbXNQZXJQYWdlKCRldmVudClcIlxyXG4+XHJcbiAgICA8dmRyLWJ1bGstYWN0aW9uLW1lbnVcclxuICAgICAgICBsb2NhdGlvbklkPVwicHJvZHVjdC1saXN0XCJcclxuICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcclxuICAgICAgICBbc2VsZWN0aW9uTWFuYWdlcl09XCJzZWxlY3Rpb25NYW5hZ2VyXCJcclxuICAgID48L3Zkci1idWxrLWFjdGlvbi1tZW51PlxyXG4gICAgPCEtLTxuZy10ZW1wbGF0ZSAjdmRyRHQyQ3VzdG9tU2VhcmNoPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWZvcm1cIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItcHJvZHVjdC1zZWFyY2gtaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAjcHJvZHVjdFNlYXJjaElucHV0Q29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgW2ZhY2V0VmFsdWVSZXN1bHRzXT1cImZhY2V0VmFsdWVzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAoc2VhcmNoVGVybUNoYW5nZSk9XCJzZXRTZWFyY2hUZXJtKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChmYWNldFZhbHVlQ2hhbmdlKT1cInNldEZhY2V0VmFsdWVJZHMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC92ZHItcHJvZHVjdC1zZWFyY2gtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duIGNsYXNzPVwic2VhcmNoLXNldHRpbmdzLW1lbnUgbXIzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLWJ1dHRvbiBzZWFyY2gtaW5kZXgtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBlbmRpbmdTZWFyY2hJbmRleFVwZGF0ZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdjYXRhbG9nLnBlbmRpbmctc2VhcmNoLWluZGV4LXVwZGF0ZXMnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnY2F0YWxvZy5zZWFyY2gtaW5kZXgtY29udHJvbHMnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duVHJpZ2dlclxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiY29nXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1zdGF0dXMtYmFkZ2UgKm5nSWY9XCJwZW5kaW5nU2VhcmNoSW5kZXhVcGRhdGVzXCIgdHlwZT1cIndhcm5pbmdcIj48L3Zkci1zdGF0dXMtYmFkZ2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bi1tZW51IHZkclBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cImRyb3Bkb3duLWhlYWRlclwiPnt7ICdjYXRhbG9nLnNlYXJjaC1pbmRleC1jb250cm9scycgfCB0cmFuc2xhdGUgfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVuZGluZ1NlYXJjaEluZGV4VXBkYXRlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnVuLXVwZGF0ZXMtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuUGVuZGluZ1NlYXJjaEluZGV4VXBkYXRlcygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIShbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItc3RhdHVzLWJhZGdlIHR5cGU9XCJ3YXJuaW5nXCI+PC92ZHItc3RhdHVzLWJhZGdlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRhbG9nLnJ1bi1wZW5kaW5nLXNlYXJjaC1pbmRleC11cGRhdGVzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGUgOiB7IGNvdW50OiBwZW5kaW5nU2VhcmNoSW5kZXhVcGRhdGVzIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZWJ1aWxkU2VhcmNoSW5kZXgoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIShbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5yZWJ1aWxkLXNlYXJjaC1pbmRleCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPi0tPlxyXG4gICAgPHZkci1kdDItc2VhcmNoXHJcbiAgICAgICAgW3NlYXJjaFRlcm1Db250cm9sXT1cInNlYXJjaFRlcm1Db250cm9sXCJcclxuICAgICAgICBbc2VhcmNoVGVybVBsYWNlaG9sZGVyXT1cIidjYXRhbG9nLmZpbHRlci1ieS1uYW1lJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAvPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCIgW3NvcnRdPVwic29ydHMuZ2V0KCdpZCcpXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1wcm9kdWN0PVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyBwcm9kdWN0LmlkIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICAgICAgICBbaGVhZGluZ109XCInY29tbW9uLmNyZWF0ZWQtYXQnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIlxyXG4gICAgICAgIFtzb3J0XT1cInNvcnRzLmdldCgnY3JlYXRlZEF0JylcIlxyXG4gICAgPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcHJvZHVjdD1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgcHJvZHVjdC5jcmVhdGVkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uXHJcbiAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi51cGRhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCJcclxuICAgICAgICBbc29ydF09XCJzb3J0cy5nZXQoJ3VwZGF0ZWRBdCcpXCJcclxuICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb2R1Y3Q9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IHByb2R1Y3QudXBkYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmltYWdlJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcHJvZHVjdD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLXBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9kdWN0LmZlYXR1cmVkQXNzZXQgYXMgYXNzZXQ7IGVsc2UgaW1hZ2VQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJhc3NldCB8IGFzc2V0UHJldmlldyA6ICd0aW55J1wiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbWFnZVBsYWNlaG9sZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbGFjZWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJpbWFnZVwiIHNpemU9XCI0OFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY2F0YWxvZy5uYW1lJyB8IHRyYW5zbGF0ZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiIFtzb3J0XT1cInNvcnRzLmdldCgnbmFtZScpXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1wcm9kdWN0PVwiaXRlbVwiPlxyXG4gICAgICAgICAgICA8YSBjbGFzcz1cImJ1dHRvbi1naG9zdFwiIFtyb3V0ZXJMaW5rXT1cIlsnLi8nLCBwcm9kdWN0LmlkXVwiXHJcbiAgICAgICAgICAgICAgICA+PHNwYW4+e3sgcHJvZHVjdC5uYW1lIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICA+PGNsci1pY29uIHNoYXBlPVwiYXJyb3cgcmlnaHRcIlxyXG4gICAgICAgICAgICAvPjwvYT5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLnNsdWcnIHwgdHJhbnNsYXRlXCIgW3NvcnRdPVwic29ydHMuZ2V0KCdzbHVnJylcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb2R1Y3Q9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IHByb2R1Y3Quc2x1ZyB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uZW5hYmxlZCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXByb2R1Y3Q9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIDx2ZHItY2hpcCAqbmdJZj1cInByb2R1Y3QuZW5hYmxlZFwiIGNvbG9yVHlwZT1cInN1Y2Nlc3NcIj57e1xyXG4gICAgICAgICAgICAgICAgJ2NvbW1vbi5lbmFibGVkJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9fTwvdmRyLWNoaXA+XHJcbiAgICAgICAgICAgIDx2ZHItY2hpcCAqbmdJZj1cIiFwcm9kdWN0LmVuYWJsZWRcIiBjb2xvclR5cGU9XCJ3YXJuaW5nXCI+e3tcclxuICAgICAgICAgICAgICAgICdjb21tb24uZGlzYWJsZWQnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgIH19PC92ZHItY2hpcD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY2F0YWxvZy5udW1iZXItb2YtdmFyaWFudHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1wcm9kdWN0PVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyAnY2F0YWxvZy52YXJpYW50LWNvdW50JyB8IHRyYW5zbGF0ZSA6IHsgY291bnQ6IHByb2R1Y3QudmFyaWFudExpc3Q/LnRvdGFsSXRlbXMgfSB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY3VzdG9tLWZpZWxkLWNvbHVtblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBjdXN0b21GaWVsZCBvZiBjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgIFtjdXN0b21GaWVsZF09XCJjdXN0b21GaWVsZFwiXHJcbiAgICAgICAgW3NvcnRzXT1cInNvcnRzXCJcclxuICAgIC8+XHJcbjwvdmRyLWRhdGEtdGFibGUtMj5cclxuIl19
@@ -1,6 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component } from '@angular/core';
2
2
  import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
3
- import { createUpdatedTranslatable, findTranslation, GlobalFlag, Permission, ProductVariantUpdateMutationDocument, TypedBaseDetailComponent, } from '@vendure/admin-ui/core';
3
+ import { createUpdatedTranslatable, findTranslation, getCustomFieldsDefaults, GlobalFlag, Permission, ProductVariantUpdateMutationDocument, TypedBaseDetailComponent, } from '@vendure/admin-ui/core';
4
4
  import { pick } from '@vendure/common/lib/pick';
5
5
  import { unique } from '@vendure/common/lib/unique';
6
6
  import { combineLatest, concat } from 'rxjs';
@@ -40,7 +40,7 @@ export class ProductVariantDetailComponent extends TypedBaseDetailComponent {
40
40
  outOfStockThreshold: 0,
41
41
  trackInventory: GlobalFlag.TRUE,
42
42
  facetValueIds: [],
43
- customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {})),
43
+ customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),
44
44
  });
45
45
  this.stockLevelsForm = this.formBuilder.array([]);
46
46
  this.pricesForm = this.formBuilder.array([]);
@@ -100,7 +100,6 @@ export class ProductVariantDetailComponent extends TypedBaseDetailComponent {
100
100
  save() {
101
101
  combineLatest(this.entity$, this.languageCode$)
102
102
  .pipe(take(1), mergeMap(([variant, languageCode]) => {
103
- const formValue = this.detailForm.value;
104
103
  const input = pick(this.getUpdatedVariant(variant, this.detailForm, languageCode), [
105
104
  'id',
106
105
  'enabled',
@@ -254,6 +253,7 @@ export class ProductVariantDetailComponent extends TypedBaseDetailComponent {
254
253
  assetIds: this.assetChanges.assets?.map(a => a.id),
255
254
  featuredAssetId: this.assetChanges.featuredAsset?.id,
256
255
  facetValueIds: variantFormGroup.value.facetValueIds,
256
+ taxCategoryId: variantFormGroup.value.taxCategoryId,
257
257
  };
258
258
  }
259
259
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: ProductVariantDetailComponent, deps: [{ token: i1.ProductDetailService }, { token: i2.FormBuilder }, { token: i3.ModalService }, { token: i3.NotificationService }, { token: i3.DataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
@@ -263,4 +263,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
263
263
  type: Component,
264
264
  args: [{ selector: 'vdr-product-variant-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left [grow]=\"true\">\r\n <div class=\"flex center\">\r\n <ng-container *ngIf=\"availableLanguages$ | async as availableLanguages\">\r\n <vdr-language-selector\r\n *ngIf=\"availableLanguages.length > 1\"\r\n class=\"mr-2\"\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </ng-container>\r\n <vdr-product-variant-quick-jump [productId]=\"entity?.product.id\" />\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-variant-detail\"></vdr-action-bar-items>\r\n <button\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"\r\n (detailForm.invalid ||\r\n stockLevelsForm.invalid ||\r\n pricesForm.invalid ||\r\n (detailForm.pristine && stockLevelsForm.pristine && pricesForm.pristine)) &&\r\n !assetsChanged()\r\n \"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as variant\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar\r\n ><vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\">\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n [formControl]=\"detailForm.get(['enabled'])\"\r\n />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"variant.options.length\" [title]=\"'catalog.product-options' | translate\">\r\n <div class=\"options\">\r\n <vdr-chip\r\n *ngFor=\"let option of variant.options | sort : 'groupId'\"\r\n [colorFrom]=\"optionGroupCode(option.groupId)\"\r\n [invert]=\"true\"\r\n >\r\n <span>{{ optionGroupCode(option.groupId) }}:</span>\r\n {{ optionName(option) }}\r\n </vdr-chip>\r\n </div>\r\n <div>\r\n <a\r\n [routerLink]=\"['../../', 'options']\"\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n >\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'catalog.edit-options' | translate }}\r\n </a>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.facets' | translate\">\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of facetValues$ | async\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermissions | hasPermission\"\r\n (remove)=\"removeFacetValue(facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n </div>\r\n <div>\r\n <button\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n (click)=\"selectFacetValue()\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n\r\n <vdr-page-block>\r\n <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.sku' | translate\" for=\"sku\">\r\n <input\r\n id=\"sku\"\r\n type=\"text\"\r\n formControlName=\"sku\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductVariant\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"product-variant-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n />\r\n <vdr-card [title]=\"'catalog.assets' | translate\">\r\n <vdr-assets\r\n [assets]=\"assetChanges.assets || variant.assets\"\r\n [featuredAsset]=\"assetChanges.featuredAsset || variant.featuredAsset\"\r\n [updatePermissions]=\"updatePermissions\"\r\n (change)=\"assetChanges = $event\"\r\n />\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.price-and-tax' | translate\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'catalog.tax-category' | translate\" for=\"taxCategory\">\r\n <select name=\"taxCategory\" formControlName=\"taxCategoryId\">\r\n <option\r\n *ngFor=\"let taxCategory of taxCategories$ | async\"\r\n [value]=\"taxCategory.id\"\r\n >\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n <div class=\"form-grid prices\" *ngFor=\"let price of pricesForm.controls\" [formGroup]=\"price\">\r\n <vdr-form-field\r\n [label]=\"\r\n ('catalog.price' | translate) +\r\n (1 < pricesForm.length ? ' (' + price.value.currencyCode + ')' : '')\r\n \"\r\n [tooltip]=\"\r\n 1 < pricesForm.length && price.value.currencyCode === channelDefaultCurrencyCode\r\n ? ('catalog.default-currency' | translate)\r\n : undefined\r\n \"\r\n for=\"price\"\r\n >\r\n <div class=\"price-wrapper\" [class.pending-deletion]=\"price.value.delete === true\">\r\n <vdr-currency-input\r\n name=\"price\"\r\n [currencyCode]=\"price.value.currencyCode\"\r\n [readonly]=\"\r\n !(updatePermissions | hasPermission) || price.value.delete === true\r\n \"\r\n formControlName=\"price\"\r\n />\r\n <div *ngIf=\"1 < pricesForm.controls.length\">\r\n <button\r\n class=\"button-small delete-button\"\r\n [disabled]=\"price.value.currencyCode === channelDefaultCurrencyCode\"\r\n (click)=\"toggleDeletePrice(price.get('delete'))\"\r\n >\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </vdr-form-field>\r\n <vdr-variant-price-detail\r\n [price]=\"price.value.price\"\r\n [currencyCode]=\"price.value.currencyCode\"\r\n [priceIncludesTax]=\"channelPriceIncludesTax$ | async\"\r\n [taxCategoryId]=\"detailForm.get('taxCategoryId')!.value\"\r\n />\r\n </div>\r\n <ng-container *ngIf=\"unusedCurrencyCodes$ | async as unusedCurrencyCodes\">\r\n <div *ngIf=\"unusedCurrencyCodes.length\">\r\n <vdr-dropdown>\r\n <button class=\"button mt-2\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-price-in-another-currency' | translate }}\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n *ngFor=\"let currencyCode of unusedCurrencyCodes\"\r\n (click)=\"addPriceInCurrency(currencyCode)\"\r\n >\r\n {{ currencyCode | localeCurrencyName }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.stock-levels' | translate\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field\r\n for=\"track-inventory\"\r\n [label]=\"'catalog.track-inventory' | translate\"\r\n [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\r\n >\r\n <select\r\n name=\"track-inventory\"\r\n formControlName=\"trackInventory\"\r\n [disabled]=\"!(updatePermissions | hasPermission)\"\r\n >\r\n <option [value]=\"GlobalFlag.TRUE\">\r\n {{ 'catalog.track-inventory-true' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.FALSE\">\r\n {{ 'catalog.track-inventory-false' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.INHERIT\">\r\n {{ 'catalog.track-inventory-inherit' | translate }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n\r\n <vdr-form-item\r\n [label]=\"'catalog.out-of-stock-threshold' | translate\"\r\n [tooltip]=\"'catalog.out-of-stock-threshold-tooltip' | translate\"\r\n >\r\n <input\r\n type=\"number\"\r\n formControlName=\"outOfStockThreshold\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n [vdrDisabled]=\"\r\n detailForm.get('useGlobalOutOfStockThreshold')?.value !== false ||\r\n inventoryIsNotTracked(detailForm)\r\n \"\r\n />\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"useGlobalOutOfStockThreshold\"\r\n formControlName=\"useGlobalOutOfStockThreshold\"\r\n [vdrDisabled]=\"\r\n !(updatePermissions | hasPermission) || inventoryIsNotTracked(detailForm)\r\n \"\r\n />\r\n <label\r\n >{{ 'catalog.use-global-value' | translate }} ({{\r\n globalOutOfStockThreshold\r\n }})</label\r\n >\r\n </clr-toggle-wrapper>\r\n </vdr-form-item>\r\n </div>\r\n <div\r\n class=\"form-grid stock-levels\"\r\n *ngFor=\"let stockLevel of stockLevelsForm.controls\"\r\n [formGroup]=\"stockLevel\"\r\n >\r\n <vdr-form-field\r\n [label]=\"\r\n stockLevel.get('stockLocationName')?.value +\r\n ': ' +\r\n ('catalog.stock-on-hand' | translate)\r\n \"\r\n [for]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\r\n >\r\n <input\r\n [id]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\r\n type=\"number\"\r\n formControlName=\"stockOnHand\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-item\r\n [label]=\"\r\n stockLevel.get('stockLocationName')?.value +\r\n ': ' +\r\n ('catalog.stock-allocated' | translate)\r\n \"\r\n >\r\n {{ stockLevel.get('stockAllocated')?.value }}\r\n </vdr-form-item>\r\n </div>\r\n <ng-container *ngIf=\"unusedStockLocation$ | async as unusedStockLocations\">\r\n <div *ngIf=\"unusedStockLocations.length\">\r\n <vdr-dropdown>\r\n <button class=\"button mt-2\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-stock-location' | translate }}\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n *ngFor=\"let stockLocation of unusedStockLocations\"\r\n (click)=\"addStockLocation(stockLocation)\"\r\n >\r\n <clr-icon shape=\"map-marker\"></clr-icon> {{ stockLocation.name }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n", styles: [".facets,.options{display:flex;flex-wrap:wrap;gap:3px}vdr-product-variant-quick-jump{flex:1;margin-right:calc(var(--space-unit) * 2)}.stock-levels,.prices{margin-top:calc(var(--space-unit) * 2);padding-top:calc(var(--space-unit) * 2);border-top:1px solid var(--color-weight-150)}.price-wrapper{display:flex;align-items:center;gap:var(--space-unit);width:100%}.price-wrapper.pending-deletion vdr-currency-input{opacity:.7}.price-wrapper.pending-deletion .delete-button{background-color:var(--color-error-700);color:var(--color-error-100)}\n"] }]
265
265
  }], ctorParameters: function () { return [{ type: i1.ProductDetailService }, { type: i2.FormBuilder }, { type: i3.ModalService }, { type: i3.NotificationService }, { type: i3.DataService }, { type: i0.ChangeDetectorRef }]; } });
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC12YXJpYW50LWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvcHJvZHVjdC12YXJpYW50LWRldGFpbC9wcm9kdWN0LXZhcmlhbnQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LXZhcmlhbnQtZGV0YWlsL3Byb2R1Y3QtdmFyaWFudC1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRXpHLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUdILHlCQUF5QixFQUd6QixlQUFlLEVBR2YsVUFBVSxFQUtWLFVBQVUsRUFFVixvQ0FBb0MsRUFDcEMsd0JBQXdCLEdBRTNCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxRQUFRLEVBQ1IsV0FBVyxFQUNYLElBQUksRUFDSixTQUFTLEVBQ1QsV0FBVyxFQUNYLElBQUksRUFDSixHQUFHLEdBQ04sTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7Ozs7O0FBNEIvRixNQUFNLE9BQU8sNkJBQ1QsU0FBUSx3QkFBa0Y7SUFnRDFGLFlBQ1ks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O09BR0c7SUFDSyxpQkFBaUIsQ0FDckIsT0FBb0UsRUFDcEUsZ0JBQXdDLEVBQ3hDLFlBQTBCO1FBRTFCLE1BQU0sY0FBYyxHQUFHLHlCQUF5QixDQUFDO1lBQzdDLFlBQVksRUFBRSxPQUFPO1lBQ3JCLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO1lBQ3JDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3BDLFlBQVk7WUFDWixrQkFBa0IsRUFBRTtnQkFDaEIsWUFBWTtnQkFDWixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFO2FBQzNCO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsT0FBTztZQUNILEdBQUcsY0FBYztZQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxlQUFlLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUNwRCxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGFBQWE7U0FDRyxDQUFDO0lBQy9ELENBQUM7OEdBalZRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLHlGQ2xFMUMseThoQkF1VUE7OzJGRHJRYSw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0ksNEJBQTRCLG1CQUdyQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBBc3NldCxcclxuICAgIENyZWF0ZVByb2R1Y3RWYXJpYW50SW5wdXQsXHJcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxyXG4gICAgQ3VycmVuY3lDb2RlLFxyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBmaW5kVHJhbnNsYXRpb24sXHJcbiAgICBHZXRQcm9kdWN0VmFyaWFudERldGFpbERvY3VtZW50LFxyXG4gICAgR2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeSxcclxuICAgIEdsb2JhbEZsYWcsXHJcbiAgICBJdGVtT2YsXHJcbiAgICBMYW5ndWFnZUNvZGUsXHJcbiAgICBNb2RhbFNlcnZpY2UsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgUGVybWlzc2lvbixcclxuICAgIFByb2R1Y3RPcHRpb25GcmFnbWVudCxcclxuICAgIFByb2R1Y3RWYXJpYW50VXBkYXRlTXV0YXRpb25Eb2N1bWVudCxcclxuICAgIFR5cGVkQmFzZURldGFpbENvbXBvbmVudCxcclxuICAgIFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IHBpY2sgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3BpY2snO1xyXG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3VuaXF1ZSc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGNvbmNhdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcbiAgICBtYXAsXHJcbiAgICBtZXJnZU1hcCxcclxuICAgIHNoYXJlUmVwbGF5LFxyXG4gICAgc2tpcCxcclxuICAgIHN3aXRjaE1hcCxcclxuICAgIHN3aXRjaE1hcFRvLFxyXG4gICAgdGFrZSxcclxuICAgIHRhcCxcclxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFByb2R1Y3REZXRhaWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3Byb2R1Y3QtZGV0YWlsL3Byb2R1Y3QtZGV0YWlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBseUZhY2V0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vYXBwbHktZmFjZXQtZGlhbG9nL2FwcGx5LWZhY2V0LWRpYWxvZy5jb21wb25lbnQnO1xyXG5cclxuaW50ZXJmYWNlIFNlbGVjdGVkQXNzZXRzIHtcclxuICAgIGFzc2V0cz86IEFzc2V0W107XHJcbiAgICBmZWF0dXJlZEFzc2V0PzogQXNzZXQ7XHJcbn1cclxuXHJcbmludGVyZmFjZSBWYXJpYW50Rm9ybVZhbHVlIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBlbmFibGVkOiBib29sZWFuO1xyXG4gICAgc2t1OiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB0YXhDYXRlZ29yeUlkOiBzdHJpbmc7XHJcbiAgICBzdG9ja09uSGFuZDogbnVtYmVyO1xyXG4gICAgdXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZDogYm9vbGVhbjtcclxuICAgIG91dE9mU3RvY2tUaHJlc2hvbGQ6IG51bWJlcjtcclxuICAgIHRyYWNrSW52ZW50b3J5OiBHbG9iYWxGbGFnO1xyXG4gICAgZmFjZXRWYWx1ZUlkczogc3RyaW5nW11bXTtcclxuICAgIGN1c3RvbUZpZWxkcz86IGFueTtcclxufVxyXG50eXBlIFQgPSBOb25OdWxsYWJsZTxHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5Wydwcm9kdWN0VmFyaWFudCddPjtcclxudHlwZSBUMSA9IFRbJ3N0b2NrTGV2ZWxzJ107XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvZHVjdC12YXJpYW50LWRldGFpbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC12YXJpYW50LWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LXZhcmlhbnQtZGV0YWlsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3RWYXJpYW50RGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIFR5cGVkQmFzZURldGFpbENvbXBvbmVudDx0eXBlb2YgR2V0UHJvZHVjdFZhcmlhbnREZXRhaWxEb2N1bWVudCwgJ3Byb2R1Y3RWYXJpYW50Jz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZVBlcm1pc3Npb25zID0gW1Blcm1pc3Npb24uVXBkYXRlQ2F0YWxvZywgUGVybWlzc2lvbi5VcGRhdGVQcm9kdWN0XTtcclxuICAgIHJlYWRvbmx5IGN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3RWYXJpYW50Jyk7XHJcbiAgICByZWFkb25seSBjdXN0b21PcHRpb25GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9kdWN0T3B0aW9uJyk7XHJcbiAgICBzdG9ja0xldmVscyQ6IE9ic2VydmFibGU8Tm9uTnVsbGFibGU8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeVsncHJvZHVjdFZhcmlhbnQnXT5bJ3N0b2NrTGV2ZWxzJ10+O1xyXG4gICAgZGV0YWlsRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXA8VmFyaWFudEZvcm1WYWx1ZT4oe1xyXG4gICAgICAgIGlkOiAnJyxcclxuICAgICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgICAgICBza3U6ICcnLFxyXG4gICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgIHRheENhdGVnb3J5SWQ6ICcnLFxyXG4gICAgICAgIHN0b2NrT25IYW5kOiAwLFxyXG4gICAgICAgIHVzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQ6IHRydWUsXHJcbiAgICAgICAgb3V0T2ZTdG9ja1RocmVzaG9sZDogMCxcclxuICAgICAgICB0cmFja0ludmVudG9yeTogR2xvYmFsRmxhZy5UUlVFLFxyXG4gICAgICAgIGZhY2V0VmFsdWVJZHM6IFtdLFxyXG4gICAgICAgIGN1c3RvbUZpZWxkczogdGhpcy5mb3JtQnVpbGRlci5ncm91cChcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxyXG4gICAgICAgICksXHJcbiAgICB9KTtcclxuICAgIHN0b2NrTGV2ZWxzRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXk8XHJcbiAgICAgICAgRm9ybUdyb3VwPHtcclxuICAgICAgICAgICAgc3RvY2tMb2NhdGlvbklkOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICAgICAgICAgICAgc3RvY2tMb2NhdGlvbk5hbWU6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gICAgICAgICAgICBzdG9ja09uSGFuZDogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XHJcbiAgICAgICAgICAgIHN0b2NrQWxsb2NhdGVkOiBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPjtcclxuICAgICAgICB9PlxyXG4gICAgPihbXSk7XHJcbiAgICBwcmljZXNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheTxcclxuICAgICAgICBGb3JtR3JvdXA8e1xyXG4gICAgICAgICAgICBwcmljZTogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XHJcbiAgICAgICAgICAgIGN1cnJlbmN5Q29kZTogRm9ybUNvbnRyb2w8Q3VycmVuY3lDb2RlIHwgbnVsbD47XHJcbiAgICAgICAgICAgIGRlbGV0ZTogRm9ybUNvbnRyb2w8Ym9vbGVhbiB8IG51bGw+O1xyXG4gICAgICAgIH0+XHJcbiAgICA+KFtdKTtcclxuICAgIGFzc2V0Q2hhbmdlczogU2VsZWN0ZWRBc3NldHMgPSB7fTtcclxuICAgIHRheENhdGVnb3JpZXMkOiBPYnNlcnZhYmxlPEFycmF5PEl0ZW1PZjxHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5LCAndGF4Q2F0ZWdvcmllcyc+Pj47XHJcbiAgICB1bnVzZWRTdG9ja0xvY2F0aW9uJDogT2JzZXJ2YWJsZTxBcnJheTxJdGVtT2Y8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeSwgJ3N0b2NrTG9jYXRpb25zJz4+PjtcclxuICAgIHVudXNlZEN1cnJlbmN5Q29kZXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcclxuICAgIGNoYW5uZWxQcmljZUluY2x1ZGVzVGF4JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHJlYWRvbmx5IEdsb2JhbEZsYWcgPSBHbG9iYWxGbGFnO1xyXG4gICAgZ2xvYmFsVHJhY2tJbnZlbnRvcnk6IGJvb2xlYW47XHJcbiAgICBnbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkOiBudW1iZXI7XHJcbiAgICBmYWNldFZhbHVlcyQ6IE9ic2VydmFibGU8Tm9uTnVsbGFibGU8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeVsncHJvZHVjdFZhcmlhbnQnXT5bJ2ZhY2V0VmFsdWVzJ10+O1xyXG4gICAgY2hhbm5lbERlZmF1bHRDdXJyZW5jeUNvZGU6IEN1cnJlbmN5Q29kZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHByb2R1Y3REZXRhaWxTZXJ2aWNlOiBQcm9kdWN0RGV0YWlsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnNldHRpbmdzLmdldEdsb2JhbFNldHRpbmdzKCdjYWNoZS1maXJzdCcpLnNpbmdsZSQuc3Vic2NyaWJlKCh7IGdsb2JhbFNldHRpbmdzIH0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nbG9iYWxUcmFja0ludmVudG9yeSA9IGdsb2JhbFNldHRpbmdzLnRyYWNrSW52ZW50b3J5O1xyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQgPSBnbG9iYWxTZXR0aW5ncy5vdXRPZlN0b2NrVGhyZXNob2xkO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudGF4Q2F0ZWdvcmllcyQgPSB0aGlzLnJlc3VsdCQucGlwZShtYXAoZGF0YSA9PiBkYXRhLnRheENhdGVnb3JpZXMuaXRlbXMpKTtcclxuICAgICAgICBjb25zdCBhdmFpbGFibGVDdXJyZW5jeUNvZGVzJCA9IHRoaXMucmVzdWx0JC5waXBlKFxyXG4gICAgICAgICAgICB0YXAoZGF0YSA9PiAodGhpcy5jaGFubmVsRGVmYXVsdEN1cnJlbmN5Q29kZSA9IGRhdGEuYWN0aXZlQ2hhbm5lbC5kZWZhdWx0Q3VycmVuY3lDb2RlKSksXHJcbiAgICAgICAgICAgIG1hcChkYXRhID0+IGRhdGEuYWN0aXZlQ2hhbm5lbC5hdmFpbGFibGVDdXJyZW5jeUNvZGVzKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudW51c2VkQ3VycmVuY3lDb2RlcyQgPSBjb21iaW5lTGF0ZXN0KHRoaXMucHJpY2VzRm9ybS52YWx1ZUNoYW5nZXMsIGF2YWlsYWJsZUN1cnJlbmN5Q29kZXMkKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFtwcmljZXMsIGN1cnJlbmN5Q29kZXNdKSA9PlxyXG4gICAgICAgICAgICAgICAgY3VycmVuY3lDb2Rlcy5maWx0ZXIoY29kZSA9PiAhcHJpY2VzLm1hcChwID0+IHAuY3VycmVuY3lDb2RlKS5pbmNsdWRlcyhjb2RlKSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzdG9ja0xvY2F0aW9ucyQgPSB0aGlzLnJlc3VsdCQucGlwZShtYXAoZGF0YSA9PiBkYXRhLnN0b2NrTG9jYXRpb25zLml0ZW1zKSk7XHJcbiAgICAgICAgdGhpcy51bnVzZWRTdG9ja0xvY2F0aW9uJCA9IGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCBzdG9ja0xvY2F0aW9ucyQpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2VudGl0eSwgc3RvY2tMb2NhdGlvbnNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VkSWRzID0gZW50aXR5LnN0b2NrTGV2ZWxzLm1hcChsID0+IGwuc3RvY2tMb2NhdGlvbi5pZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvY2tMb2NhdGlvbnMuZmlsdGVyKGwgPT4gIXVzZWRJZHMuaW5jbHVkZXMobC5pZCkpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbFByaWNlSW5jbHVkZXNUYXgkID0gdGhpcy5kYXRhU2VydmljZS5zZXR0aW5nc1xyXG4gICAgICAgICAgICAuZ2V0QWN0aXZlQ2hhbm5lbCgnY2FjaGUtZmlyc3QnKVxyXG4gICAgICAgICAgICAucmVmZXRjaE9uQ2hhbm5lbENoYW5nZSgpXHJcbiAgICAgICAgICAgIC5tYXBTdHJlYW0oZGF0YSA9PiBkYXRhLmFjdGl2ZUNoYW5uZWwucHJpY2VzSW5jbHVkZVRheClcclxuICAgICAgICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xyXG4gICAgICAgIHRoaXMuc3RvY2tMZXZlbHMkID0gdGhpcy5lbnRpdHkkLnBpcGUobWFwKGVudGl0eSA9PiBlbnRpdHk/LnN0b2NrTGV2ZWxzID8/IFtdKSk7XHJcbiAgICAgICAgY29uc3QgZmFjZXRWYWx1ZXMkID0gdGhpcy5lbnRpdHkkLnBpcGUobWFwKHZhcmlhbnQgPT4gdmFyaWFudC5mYWNldFZhbHVlcyA/PyBbXSkpO1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgY29uc3QgZm9ybUZhY2V0VmFsdWVJZENoYW5nZXMkID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmFjZXRWYWx1ZUlkcycpIS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgc2tpcCgxKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKGlkcyA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5mYWNldFxyXG4gICAgICAgICAgICAgICAgICAgIC5nZXRGYWNldFZhbHVlcyh7IGZpbHRlcjogeyBpZDogeyBpbjogaWRzIH0gfSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXBTaW5nbGUoKHsgZmFjZXRWYWx1ZXMgfSkgPT4gZmFjZXRWYWx1ZXMuaXRlbXMpLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmFjZXRWYWx1ZXMkID0gY29uY2F0KFxyXG4gICAgICAgICAgICBmYWNldFZhbHVlcyQucGlwZSh0YWtlKDEpKSxcclxuICAgICAgICAgICAgZmFjZXRWYWx1ZXMkLnBpcGUoc3dpdGNoTWFwVG8oZm9ybUZhY2V0VmFsdWVJZENoYW5nZXMkKSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRQcmljZUluQ3VycmVuY3koY3VycmVuY3lDb2RlOiBDdXJyZW5jeUNvZGUpIHtcclxuICAgICAgICB0aGlzLnByaWNlc0Zvcm0ucHVzaChcclxuICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogMCxcclxuICAgICAgICAgICAgICAgIGRlbGV0ZTogZmFsc2UgYXMgYm9vbGVhbixcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVEZWxldGVQcmljZShkZWxldGVGb3JtQ29udHJvbDogRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBkZWxldGVGb3JtQ29udHJvbC5zZXRWYWx1ZSghZGVsZXRlRm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gICAgICAgIGRlbGV0ZUZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU3RvY2tMb2NhdGlvbihzdG9ja0xvY2F0aW9uOiBJdGVtT2Y8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeSwgJ3N0b2NrTG9jYXRpb25zJz4pIHtcclxuICAgICAgICB0aGlzLnN0b2NrTGV2ZWxzRm9ybS5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgICAgIHN0b2NrTG9jYXRpb25JZDogc3RvY2tMb2NhdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgIHN0b2NrTG9jYXRpb25OYW1lOiBzdG9ja0xvY2F0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBzdG9ja09uSGFuZDogMCxcclxuICAgICAgICAgICAgICAgIHN0b2NrQWxsb2NhdGVkOiAwLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmVudGl0eSQsIHRoaXMubGFuZ3VhZ2VDb2RlJClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFt2YXJpYW50LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5kZXRhaWxGb3JtLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gcGljayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRVcGRhdGVkVmFyaWFudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmFibGVkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGlvbnMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NrdScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGF4Q2F0ZWdvcnlJZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFjZXRWYWx1ZUlkcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmVhdHVyZWRBc3NldElkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc3NldElkcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhY2tJbnZlbnRvcnknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dE9mU3RvY2tUaHJlc2hvbGQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N1c3RvbUZpZWxkcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0b2NrTGV2ZWxzRm9ybS5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5zdG9ja0xldmVscyA9IHRoaXMuc3RvY2tMZXZlbHNGb3JtLmNvbnRyb2xzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGNvbnRyb2wgPT4gY29udHJvbC5kaXJ0eSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoY29udHJvbCA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvY2tMb2NhdGlvbklkOiBjb250cm9sLnZhbHVlLnN0b2NrTG9jYXRpb25JZCEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9ja09uSGFuZDogY29udHJvbC52YWx1ZS5zdG9ja09uSGFuZCEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByaWNlc0Zvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQucHJpY2VzID0gdGhpcy5wcmljZXNGb3JtLmNvbnRyb2xzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGNvbnRyb2wgPT4gY29udHJvbC5kaXJ0eSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoY29udHJvbCA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IGNvbnRyb2wudmFsdWUucHJpY2UhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lDb2RlOiBjb250cm9sLnZhbHVlLmN1cnJlbmN5Q29kZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlOiBjb250cm9sLnZhbHVlLmRlbGV0ZSA9PT0gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UubXV0YXRlKFByb2R1Y3RWYXJpYW50VXBkYXRlTXV0YXRpb25Eb2N1bWVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogW2lucHV0XSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvY2tMZXZlbHNGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmljZXNGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NldENoYW5nZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdFZhcmlhbnQnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0VmFyaWFudCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzc2V0c0NoYW5nZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhT2JqZWN0LnZhbHVlcyh0aGlzLmFzc2V0Q2hhbmdlcykubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGludmVudG9yeUlzTm90VHJhY2tlZChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB0cmFja0ludmVudG9yeSA9IGZvcm1Hcm91cC5nZXQoJ3RyYWNrSW52ZW50b3J5Jyk/LnZhbHVlO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRyYWNrSW52ZW50b3J5ID09PSBHbG9iYWxGbGFnLkZBTFNFIHx8XHJcbiAgICAgICAgICAgICh0cmFja0ludmVudG9yeSA9PT0gR2xvYmFsRmxhZy5JTkhFUklUICYmIHRoaXMuZ2xvYmFsVHJhY2tJbnZlbnRvcnkgPT09IGZhbHNlKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9uR3JvdXBDb2RlKG9wdGlvbkdyb3VwSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmVudGl0eT8ucHJvZHVjdC5vcHRpb25Hcm91cHMuZmluZChnID0+IGcuaWQgPT09IG9wdGlvbkdyb3VwSWQpO1xyXG4gICAgICAgIHJldHVybiBncm91cD8uY29kZTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25OYW1lKG9wdGlvbjogUHJvZHVjdE9wdGlvbkZyYWdtZW50KSB7XHJcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPVxyXG4gICAgICAgICAgICBvcHRpb24udHJhbnNsYXRpb25zLmZpbmQodCA9PiB0Lmxhbmd1YWdlQ29kZSA9PT0gdGhpcy5sYW5ndWFnZUNvZGUpID8/IG9wdGlvbi50cmFuc2xhdGlvbnNbMF07XHJcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRmFjZXRWYWx1ZShmYWNldFZhbHVlSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHByb2R1Y3RHcm91cCA9IHRoaXMuZGV0YWlsRm9ybTtcclxuICAgICAgICBjb25zdCBjdXJyZW50RmFjZXRWYWx1ZUlkcyA9IHByb2R1Y3RHcm91cC52YWx1ZS5mYWNldFZhbHVlSWRzID8/IFtdO1xyXG4gICAgICAgIHByb2R1Y3RHcm91cC5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgZmFjZXRWYWx1ZUlkczogY3VycmVudEZhY2V0VmFsdWVJZHMuZmlsdGVyKGlkID0+IGlkICE9PSBmYWNldFZhbHVlSWQpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHByb2R1Y3RHcm91cC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdEZhY2V0VmFsdWUoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5RmFjZXRWYWx1ZU1vZGFsKCkuc3Vic2NyaWJlKGZhY2V0VmFsdWVJZHMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmFjZXRWYWx1ZUlkcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEZhY2V0VmFsdWVJZHMgPSB0aGlzLmRldGFpbEZvcm0udmFsdWUuZmFjZXRWYWx1ZUlkcyA/PyBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgICAgICAgICBmYWNldFZhbHVlSWRzOiB1bmlxdWUoWy4uLmN1cnJlbnRGYWNldFZhbHVlSWRzLCAuLi5mYWNldFZhbHVlSWRzXSksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkaXNwbGF5RmFjZXRWYWx1ZU1vZGFsKCk6IE9ic2VydmFibGU8c3RyaW5nW10gfCB1bmRlZmluZWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoQXBwbHlGYWNldERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgc2l6ZTogJ21kJyxcclxuICAgICAgICAgICAgICAgIGNsb3NhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZShtYXAoZmFjZXRWYWx1ZXMgPT4gZmFjZXRWYWx1ZXMgJiYgZmFjZXRWYWx1ZXMubWFwKHYgPT4gdi5pZCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhcclxuICAgICAgICB2YXJpYW50OiBOb25OdWxsYWJsZTxHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5Wydwcm9kdWN0VmFyaWFudCddPixcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHZhcmlhbnRUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbih2YXJpYW50LCBsYW5ndWFnZUNvZGUpO1xyXG4gICAgICAgIGNvbnN0IGZhY2V0VmFsdWVJZHMgPSB2YXJpYW50LmZhY2V0VmFsdWVzLm1hcChmdiA9PiBmdi5pZCk7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBpZDogdmFyaWFudC5pZCxcclxuICAgICAgICAgICAgZW5hYmxlZDogdmFyaWFudC5lbmFibGVkLFxyXG4gICAgICAgICAgICBza3U6IHZhcmlhbnQuc2t1LFxyXG4gICAgICAgICAgICBuYW1lOiB2YXJpYW50VHJhbnNsYXRpb24gPyB2YXJpYW50VHJhbnNsYXRpb24ubmFtZSA6ICcnLFxyXG4gICAgICAgICAgICB0YXhDYXRlZ29yeUlkOiB2YXJpYW50LnRheENhdGVnb3J5LmlkLFxyXG4gICAgICAgICAgICBzdG9ja09uSGFuZDogdmFyaWFudC5zdG9ja0xldmVsc1swXT8uc3RvY2tPbkhhbmQgPz8gMCxcclxuICAgICAgICAgICAgdXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZDogdmFyaWFudC51c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkLFxyXG4gICAgICAgICAgICBvdXRPZlN0b2NrVGhyZXNob2xkOiB2YXJpYW50Lm91dE9mU3RvY2tUaHJlc2hvbGQsXHJcbiAgICAgICAgICAgIHRyYWNrSW52ZW50b3J5OiB2YXJpYW50LnRyYWNrSW52ZW50b3J5LFxyXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3RvY2tMZXZlbHNGb3JtLmNsZWFyKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBzdG9ja0xldmVsIG9mIHZhcmlhbnQuc3RvY2tMZXZlbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9ja0xldmVsc0Zvcm0ucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0b2NrTG9jYXRpb25JZDogc3RvY2tMZXZlbC5zdG9ja0xvY2F0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b2NrTG9jYXRpb25OYW1lOiBzdG9ja0xldmVsLnN0b2NrTG9jYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9ja09uSGFuZDogc3RvY2tMZXZlbC5zdG9ja09uSGFuZCxcclxuICAgICAgICAgICAgICAgICAgICBzdG9ja0FsbG9jYXRlZDogc3RvY2tMZXZlbC5zdG9ja0FsbG9jYXRlZCxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByaWNlc0Zvcm0uY2xlYXIoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IHByaWNlIG9mIHZhcmlhbnQucHJpY2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJpY2VzRm9ybS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJpY2U6IHByaWNlLnByaWNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZTogcHJpY2UuY3VycmVuY3lDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZTogZmFsc2UgYXMgYm9vbGVhbixcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jdXN0b21GaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0uZ2V0KCdjdXN0b21GaWVsZHMnKSxcclxuICAgICAgICAgICAgICAgIHZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50VHJhbnNsYXRpb24sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBwcm9kdWN0IGFuZCB0aGUgdmFsdWUgb2YgdGhlIGRldGFpbEZvcm0sIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gdXBkYXRlZCBjb3B5IG9mIHRoZSBwcm9kdWN0IHdoaWNoXHJcbiAgICAgKiBjYW4gdGhlbiBiZSBwZXJzaXN0ZWQgdG8gdGhlIEFQSS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkVmFyaWFudChcclxuICAgICAgICB2YXJpYW50OiBOb25OdWxsYWJsZTxHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5Wydwcm9kdWN0VmFyaWFudCddPixcclxuICAgICAgICB2YXJpYW50Rm9ybUdyb3VwOiB0eXBlb2YgdGhpcy5kZXRhaWxGb3JtLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCB8IENyZWF0ZVByb2R1Y3RWYXJpYW50SW5wdXQge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRQcm9kdWN0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogdmFyaWFudCxcclxuICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogdmFyaWFudEZvcm1Hcm91cC52YWx1ZSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdmFyaWFudC5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnVwZGF0ZWRQcm9kdWN0LFxyXG4gICAgICAgICAgICBhc3NldElkczogdGhpcy5hc3NldENoYW5nZXMuYXNzZXRzPy5tYXAoYSA9PiBhLmlkKSxcclxuICAgICAgICAgICAgZmVhdHVyZWRBc3NldElkOiB0aGlzLmFzc2V0Q2hhbmdlcy5mZWF0dXJlZEFzc2V0Py5pZCxcclxuICAgICAgICAgICAgZmFjZXRWYWx1ZUlkczogdmFyaWFudEZvcm1Hcm91cC52YWx1ZS5mYWNldFZhbHVlSWRzLFxyXG4gICAgICAgIH0gYXMgVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCB8IENyZWF0ZVByb2R1Y3RWYXJpYW50SW5wdXQ7XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgIDx2ZHItYWItbGVmdCBbZ3Jvd109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImF2YWlsYWJsZUxhbmd1YWdlcyQgfCBhc3luYyBhcyBhdmFpbGFibGVMYW5ndWFnZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNOZXckIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc109XCJhdmFpbGFibGVMYW5ndWFnZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVudExhbmd1YWdlQ29kZV09XCJsYW5ndWFnZUNvZGUkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L3Zkci1sYW5ndWFnZS1zZWxlY3Rvcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPHZkci1wcm9kdWN0LXZhcmlhbnQtcXVpY2stanVtcCBbcHJvZHVjdElkXT1cImVudGl0eT8ucHJvZHVjdC5pZFwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdmRyLWFiLWxlZnQ+XHJcblxyXG4gICAgICAgIDx2ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgICAgIDx2ZHItYWN0aW9uLWJhci1pdGVtcyBsb2NhdGlvbklkPVwicHJvZHVjdC12YXJpYW50LWRldGFpbFwiPjwvdmRyLWFjdGlvbi1iYXItaXRlbXM+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwiWydVcGRhdGVDYXRhbG9nJywgJ1VwZGF0ZVByb2R1Y3QnXVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgICAgICAoZGV0YWlsRm9ybS5pbnZhbGlkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b2NrTGV2ZWxzRm9ybS5pbnZhbGlkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlc0Zvcm0uaW52YWxpZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGV0YWlsRm9ybS5wcmlzdGluZSAmJiBzdG9ja0xldmVsc0Zvcm0ucHJpc3RpbmUgJiYgcHJpY2VzRm9ybS5wcmlzdGluZSkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgIWFzc2V0c0NoYW5nZWQoKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgJ2NvbW1vbi51cGRhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgPC92ZHItYWN0aW9uLWJhcj5cclxuPC92ZHItcGFnZS1ibG9jaz5cclxuPGZvcm0gY2xhc3M9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtXCIgKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgdmFyaWFudFwiPlxyXG4gICAgPHZkci1wYWdlLWRldGFpbC1sYXlvdXQ+XHJcbiAgICAgICAgPHZkci1wYWdlLWRldGFpbC1zaWRlYmFyXHJcbiAgICAgICAgICAgID48dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjYXRhbG9nLnZpc2liaWxpdHknIHwgdHJhbnNsYXRlXCIgZm9yPVwidmlzaWJpbGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItdG9nZ2xlLXdyYXBwZXIgKnZkcklmUGVybWlzc2lvbnM9XCJbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsclRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImVuYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImRldGFpbEZvcm0uZ2V0KFsnZW5hYmxlZCddKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY29tbW9uLmVuYWJsZWQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Nsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCAqbmdJZj1cInZhcmlhbnQub3B0aW9ucy5sZW5ndGhcIiBbdGl0bGVdPVwiJ2NhdGFsb2cucHJvZHVjdC1vcHRpb25zJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiB2YXJpYW50Lm9wdGlvbnMgfCBzb3J0IDogJ2dyb3VwSWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yRnJvbV09XCJvcHRpb25Hcm91cENvZGUob3B0aW9uLmdyb3VwSWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ludmVydF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG9wdGlvbkdyb3VwQ29kZShvcHRpb24uZ3JvdXBJZCkgfX06PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb25OYW1lKG9wdGlvbikgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLi4vLi4vJywgJ29wdGlvbnMnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXNtYWxsIG10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25zXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBlbmNpbFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmVkaXQtb3B0aW9ucycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY2F0YWxvZy5mYWNldHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmFjZXRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mYWNldC12YWx1ZS1jaGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmYWNldFZhbHVlIG9mIGZhY2V0VmFsdWVzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZhY2V0VmFsdWVdPVwiZmFjZXRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwidXBkYXRlUGVybWlzc2lvbnMgfCBoYXNQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVGYWNldFZhbHVlKGZhY2V0VmFsdWUuaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC92ZHItZmFjZXQtdmFsdWUtY2hpcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXNtYWxsIG10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEZhY2V0VmFsdWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuYWRkLWZhY2V0cycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG5cclxuICAgICAgICAgICAgPHZkci1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPHZkci1wYWdlLWVudGl0eS1pbmZvICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIGVudGl0eVwiIFtlbnRpdHldPVwiZW50aXR5XCIgLz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8L3Zkci1wYWdlLWRldGFpbC1zaWRlYmFyPlxyXG5cclxuICAgICAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGhpZGRlbiB4LWRhdGE9XCJwcmV2ZW50cyBlbnRlciBrZXkgZnJvbSB0cmlnZ2VyaW5nIG90aGVyIGJ1dHRvbnNcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPHZkci1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIGZvcj1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIShbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY2F0YWxvZy5za3UnIHwgdHJhbnNsYXRlXCIgZm9yPVwic2t1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJza3VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2t1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY29tbW9uLmN1c3RvbS1maWVsZHMnIHwgdHJhbnNsYXRlXCIgKm5nSWY9XCJjdXN0b21GaWVsZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLXRhYmJlZC1jdXN0b20tZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIlByb2R1Y3RWYXJpYW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtLmdldCgnY3VzdG9tRmllbGRzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbklkPVwicHJvZHVjdC12YXJpYW50LWRldGFpbFwiXHJcbiAgICAgICAgICAgICAgICBbZW50aXR5JF09XCJlbnRpdHkkXCJcclxuICAgICAgICAgICAgICAgIFtkZXRhaWxGb3JtXT1cImRldGFpbEZvcm1cIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidjYXRhbG9nLmFzc2V0cycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItYXNzZXRzXHJcbiAgICAgICAgICAgICAgICAgICAgW2Fzc2V0c109XCJhc3NldENoYW5nZXMuYXNzZXRzIHx8IHZhcmlhbnQuYXNzZXRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbZmVhdHVyZWRBc3NldF09XCJhc3NldENoYW5nZXMuZmVhdHVyZWRBc3NldCB8fCB2YXJpYW50LmZlYXR1cmVkQXNzZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt1cGRhdGVQZXJtaXNzaW9uc109XCJ1cGRhdGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJhc3NldENoYW5nZXMgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY2F0YWxvZy5wcmljZS1hbmQtdGF4JyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NhdGFsb2cudGF4LWNhdGVnb3J5JyB8IHRyYW5zbGF0ZVwiIGZvcj1cInRheENhdGVnb3J5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cInRheENhdGVnb3J5XCIgZm9ybUNvbnRyb2xOYW1lPVwidGF4Q2F0ZWdvcnlJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0YXhDYXRlZ29yeSBvZiB0YXhDYXRlZ29yaWVzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidGF4Q2F0ZWdvcnkuaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRheENhdGVnb3J5Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkIHByaWNlc1wiICpuZ0Zvcj1cImxldCBwcmljZSBvZiBwcmljZXNGb3JtLmNvbnRyb2xzXCIgW2Zvcm1Hcm91cF09XCJwcmljZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2NhdGFsb2cucHJpY2UnIHwgdHJhbnNsYXRlKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8IHByaWNlc0Zvcm0ubGVuZ3RoID8gJyAoJyArIHByaWNlLnZhbHVlLmN1cnJlbmN5Q29kZSArICcpJyA6ICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPCBwcmljZXNGb3JtLmxlbmd0aCAmJiBwcmljZS52YWx1ZS5jdXJyZW5jeUNvZGUgPT09IGNoYW5uZWxEZWZhdWx0Q3VycmVuY3lDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoJ2NhdGFsb2cuZGVmYXVsdC1jdXJyZW5jeScgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwicHJpY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlLXdyYXBwZXJcIiBbY2xhc3MucGVuZGluZy1kZWxldGlvbl09XCJwcmljZS52YWx1ZS5kZWxldGUgPT09IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY3VycmVuY3ktaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicHJpY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeUNvZGVdPVwicHJpY2UudmFsdWUuY3VycmVuY3lDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEodXBkYXRlUGVybWlzc2lvbnMgfCBoYXNQZXJtaXNzaW9uKSB8fCBwcmljZS52YWx1ZS5kZWxldGUgPT09IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByaWNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiMSA8IHByaWNlc0Zvcm0uY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1zbWFsbCBkZWxldGUtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInByaWNlLnZhbHVlLmN1cnJlbmN5Q29kZSA9PT0gY2hhbm5lbERlZmF1bHRDdXJyZW5jeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGVsZXRlUHJpY2UocHJpY2UuZ2V0KCdkZWxldGUnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwidHJhc2hcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci12YXJpYW50LXByaWNlLWRldGFpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcHJpY2VdPVwicHJpY2UudmFsdWUucHJpY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3lDb2RlXT1cInByaWNlLnZhbHVlLmN1cnJlbmN5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwcmljZUluY2x1ZGVzVGF4XT1cImNoYW5uZWxQcmljZUluY2x1ZGVzVGF4JCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RheENhdGVnb3J5SWRdPVwiZGV0YWlsRm9ybS5nZXQoJ3RheENhdGVnb3J5SWQnKSEudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1bnVzZWRDdXJyZW5jeUNvZGVzJCB8IGFzeW5jIGFzIHVudXNlZEN1cnJlbmN5Q29kZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidW51c2VkQ3VycmVuY3lDb2Rlcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gbXQtMlwiIHZkckRyb3Bkb3duVHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5hZGQtcHJpY2UtaW4tYW5vdGhlci1jdXJyZW5jeScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlbGxpcHNpcy12ZXJ0aWNhbFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY3VycmVuY3lDb2RlIG9mIHVudXNlZEN1cnJlbmN5Q29kZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkUHJpY2VJbkN1cnJlbmN5KGN1cnJlbmN5Q29kZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVuY3lDb2RlIHwgbG9jYWxlQ3VycmVuY3lOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bi1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidjYXRhbG9nLnN0b2NrLWxldmVscycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwidHJhY2staW52ZW50b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjYXRhbG9nLnRyYWNrLWludmVudG9yeScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInY2F0YWxvZy50cmFjay1pbnZlbnRvcnktdG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRyYWNrLWludmVudG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0cmFja0ludmVudG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiR2xvYmFsRmxhZy5UUlVFXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cudHJhY2staW52ZW50b3J5LXRydWUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIkdsb2JhbEZsYWcuRkFMU0VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy50cmFjay1pbnZlbnRvcnktZmFsc2UnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIkdsb2JhbEZsYWcuSU5IRVJJVFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLnRyYWNrLWludmVudG9yeS1pbmhlcml0JyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY2F0YWxvZy5vdXQtb2Ytc3RvY2stdGhyZXNob2xkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidjYXRhbG9nLm91dC1vZi1zdG9jay10aHJlc2hvbGQtdG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm91dE9mU3RvY2tUaHJlc2hvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbnMgfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmRyRGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsRm9ybS5nZXQoJ3VzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQnKT8udmFsdWUgIT09IGZhbHNlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52ZW50b3J5SXNOb3RUcmFja2VkKGRldGFpbEZvcm0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLXRvZ2dsZS13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJUb2dnbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZkckRpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbikgfHwgaW52ZW50b3J5SXNOb3RUcmFja2VkKGRldGFpbEZvcm0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgJ2NhdGFsb2cudXNlLWdsb2JhbC12YWx1ZScgfCB0cmFuc2xhdGUgfX0gKHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk8L2xhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLXRvZ2dsZS13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0taXRlbT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncmlkIHN0b2NrLWxldmVsc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN0b2NrTGV2ZWwgb2Ygc3RvY2tMZXZlbHNGb3JtLmNvbnRyb2xzXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cInN0b2NrTGV2ZWxcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9ja0xldmVsLmdldCgnc3RvY2tMb2NhdGlvbk5hbWUnKT8udmFsdWUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2NhdGFsb2cuc3RvY2stb24taGFuZCcgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ3N0b2NrT25IYW5kXycgKyBzdG9ja0xldmVsLmdldCgnc3RvY2tMb2NhdGlvbklkJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidzdG9ja09uSGFuZF8nICsgc3RvY2tMZXZlbC5nZXQoJ3N0b2NrTG9jYXRpb25JZCcpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN0b2NrT25IYW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvY2tMZXZlbC5nZXQoJ3N0b2NrTG9jYXRpb25OYW1lJyk/LnZhbHVlICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6ICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjYXRhbG9nLnN0b2NrLWFsbG9jYXRlZCcgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzdG9ja0xldmVsLmdldCgnc3RvY2tBbGxvY2F0ZWQnKT8udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1bnVzZWRTdG9ja0xvY2F0aW9uJCB8IGFzeW5jIGFzIHVudXNlZFN0b2NrTG9jYXRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVudXNlZFN0b2NrTG9jYXRpb25zLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBtdC0yXCIgdmRyRHJvcGRvd25UcmlnZ2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmFkZC1zdG9jay1sb2NhdGlvbicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlbGxpcHNpcy12ZXJ0aWNhbFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RvY2tMb2NhdGlvbiBvZiB1bnVzZWRTdG9ja0xvY2F0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRTdG9ja0xvY2F0aW9uKHN0b2NrTG9jYXRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cIm1hcC1tYXJrZXJcIj48L2Nsci1pY29uPiB7eyBzdG9ja0xvY2F0aW9uLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPC92ZHItcGFnZS1ibG9jaz5cclxuICAgIDwvdmRyLXBhZ2UtZGV0YWlsLWxheW91dD5cclxuPC9mb3JtPlxyXG4iXX0=
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC12YXJpYW50LWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvcHJvZHVjdC12YXJpYW50LWRldGFpbC9wcm9kdWN0LXZhcmlhbnQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LXZhcmlhbnQtZGV0YWlsL3Byb2R1Y3QtdmFyaWFudC1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRXpHLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUdILHlCQUF5QixFQUd6QixlQUFlLEVBQ2YsdUJBQXVCLEVBR3ZCLFVBQVUsRUFLVixVQUFVLEVBRVYsb0NBQW9DLEVBQ3BDLHdCQUF3QixHQUUzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUNILG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsUUFBUSxFQUNSLFdBQVcsRUFDWCxJQUFJLEVBQ0osU0FBUyxFQUNULFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxHQUNOLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7Ozs7OztBQTRCL0YsTUFBTSxPQUFPLDZCQUNULFNBQVEsd0JBQWtG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QUUsSUFBSSxDQUFDLFlBQVk7WUFDcEMsWUFBWTtZQUNaLGtCQUFrQixFQUFFO2dCQUNoQixZQUFZO2dCQUNaLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUU7YUFDM0I7U0FDSixDQUFDLENBQUM7UUFDSCxPQUFPO1lBQ0gsR0FBRyxjQUFjO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xELGVBQWUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3BELGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsYUFBYTtZQUNuRCxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGFBQWE7U0FDRyxDQUFDO0lBQy9ELENBQUM7OEdBL1VRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLHlGQ25FMUMseThoQkF1VUE7OzJGRHBRYSw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0ksNEJBQTRCLG1CQUdyQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBBc3NldCxcclxuICAgIENyZWF0ZVByb2R1Y3RWYXJpYW50SW5wdXQsXHJcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxyXG4gICAgQ3VycmVuY3lDb2RlLFxyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBmaW5kVHJhbnNsYXRpb24sXHJcbiAgICBnZXRDdXN0b21GaWVsZHNEZWZhdWx0cyxcclxuICAgIEdldFByb2R1Y3RWYXJpYW50RGV0YWlsRG9jdW1lbnQsXHJcbiAgICBHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5LFxyXG4gICAgR2xvYmFsRmxhZyxcclxuICAgIEl0ZW1PZixcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIE1vZGFsU2VydmljZSxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBQZXJtaXNzaW9uLFxyXG4gICAgUHJvZHVjdE9wdGlvbkZyYWdtZW50LFxyXG4gICAgUHJvZHVjdFZhcmlhbnRVcGRhdGVNdXRhdGlvbkRvY3VtZW50LFxyXG4gICAgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgcGljayB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvcGljayc7XHJcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvdW5pcXVlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgY29uY2F0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcclxuICAgIG1hcCxcclxuICAgIG1lcmdlTWFwLFxyXG4gICAgc2hhcmVSZXBsYXksXHJcbiAgICBza2lwLFxyXG4gICAgc3dpdGNoTWFwLFxyXG4gICAgc3dpdGNoTWFwVG8sXHJcbiAgICB0YWtlLFxyXG4gICAgdGFwLFxyXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUHJvZHVjdERldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvcHJvZHVjdC1kZXRhaWwvcHJvZHVjdC1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcGx5RmFjZXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hcHBseS1mYWNldC1kaWFsb2cvYXBwbHktZmFjZXQtZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgU2VsZWN0ZWRBc3NldHMge1xyXG4gICAgYXNzZXRzPzogQXNzZXRbXTtcclxuICAgIGZlYXR1cmVkQXNzZXQ/OiBBc3NldDtcclxufVxyXG5cclxuaW50ZXJmYWNlIFZhcmlhbnRGb3JtVmFsdWUge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBza3U6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHRheENhdGVnb3J5SWQ6IHN0cmluZztcclxuICAgIHN0b2NrT25IYW5kOiBudW1iZXI7XHJcbiAgICB1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkOiBib29sZWFuO1xyXG4gICAgb3V0T2ZTdG9ja1RocmVzaG9sZDogbnVtYmVyO1xyXG4gICAgdHJhY2tJbnZlbnRvcnk6IEdsb2JhbEZsYWc7XHJcbiAgICBmYWNldFZhbHVlSWRzOiBzdHJpbmdbXVtdO1xyXG4gICAgY3VzdG9tRmllbGRzPzogYW55O1xyXG59XHJcbnR5cGUgVCA9IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50RGV0YWlsUXVlcnlbJ3Byb2R1Y3RWYXJpYW50J10+O1xyXG50eXBlIFQxID0gVFsnc3RvY2tMZXZlbHMnXTtcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1wcm9kdWN0LXZhcmlhbnQtZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LXZhcmlhbnQtZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtdmFyaWFudC1kZXRhaWwuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdFZhcmlhbnREZXRhaWxDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50PHR5cGVvZiBHZXRQcm9kdWN0VmFyaWFudERldGFpbERvY3VtZW50LCAncHJvZHVjdFZhcmlhbnQnPlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlUGVybWlzc2lvbnMgPSBbUGVybWlzc2lvbi5VcGRhdGVDYXRhbG9nLCBQZXJtaXNzaW9uLlVwZGF0ZVByb2R1Y3RdO1xyXG4gICAgcmVhZG9ubHkgY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdFZhcmlhbnQnKTtcclxuICAgIHJlYWRvbmx5IGN1c3RvbU9wdGlvbkZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3RPcHRpb24nKTtcclxuICAgIHN0b2NrTGV2ZWxzJDogT2JzZXJ2YWJsZTxOb25OdWxsYWJsZTxHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5Wydwcm9kdWN0VmFyaWFudCddPlsnc3RvY2tMZXZlbHMnXT47XHJcbiAgICBkZXRhaWxGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cDxWYXJpYW50Rm9ybVZhbHVlPih7XHJcbiAgICAgICAgaWQ6ICcnLFxyXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIHNrdTogJycsXHJcbiAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgdGF4Q2F0ZWdvcnlJZDogJycsXHJcbiAgICAgICAgc3RvY2tPbkhhbmQ6IDAsXHJcbiAgICAgICAgdXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZDogdHJ1ZSxcclxuICAgICAgICBvdXRPZlN0b2NrVGhyZXNob2xkOiAwLFxyXG4gICAgICAgIHRyYWNrSW52ZW50b3J5OiBHbG9iYWxGbGFnLlRSVUUsXHJcbiAgICAgICAgZmFjZXRWYWx1ZUlkczogW10sXHJcbiAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdldEN1c3RvbUZpZWxkc0RlZmF1bHRzKHRoaXMuY3VzdG9tRmllbGRzKSksXHJcbiAgICB9KTtcclxuICAgIHN0b2NrTGV2ZWxzRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXk8XHJcbiAgICAgICAgRm9ybUdyb3VwPHtcclxuICAgICAgICAgICAgc3RvY2tMb2NhdGlvbklkOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICAgICAgICAgICAgc3RvY2tMb2NhdGlvbk5hbWU6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gICAgICAgICAgICBzdG9ja09uSGFuZDogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XHJcbiAgICAgICAgICAgIHN0b2NrQWxsb2NhdGVkOiBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPjtcclxuICAgICAgICB9PlxyXG4gICAgPihbXSk7XHJcbiAgICBwcmljZXNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheTxcclxuICAgICAgICBGb3JtR3JvdXA8e1xyXG4gICAgICAgICAgICBwcmljZTogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XHJcbiAgICAgICAgICAgIGN1cnJlbmN5Q29kZTogRm9ybUNvbnRyb2w8Q3VycmVuY3lDb2RlIHwgbnVsbD47XHJcbiAgICAgICAgICAgIGRlbGV0ZTogRm9ybUNvbnRyb2w8Ym9vbGVhbiB8IG51bGw+O1xyXG4gICAgICAgIH0+XHJcbiAgICA+KFtdKTtcclxuICAgIGFzc2V0Q2hhbmdlczogU2VsZWN0ZWRBc3NldHMgPSB7fTtcclxuICAgIHRheENhdGVnb3JpZXMkOiBPYnNlcnZhYmxlPEFycmF5PEl0ZW1PZjxHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5LCAndGF4Q2F0ZWdvcmllcyc+Pj47XHJcbiAgICB1bnVzZWRTdG9ja0xvY2F0aW9uJDogT2JzZXJ2YWJsZTxBcnJheTxJdGVtT2Y8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeSwgJ3N0b2NrTG9jYXRpb25zJz4+PjtcclxuICAgIHVudXNlZEN1cnJlbmN5Q29kZXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcclxuICAgIGNoYW5uZWxQcmljZUluY2x1ZGVzVGF4JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHJlYWRvbmx5IEdsb2JhbEZsYWcgPSBHbG9iYWxGbGFnO1xyXG4gICAgZ2xvYmFsVHJhY2tJbnZlbnRvcnk6IGJvb2xlYW47XHJcbiAgICBnbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkOiBudW1iZXI7XHJcbiAgICBmYWNldFZhbHVlcyQ6IE9ic2VydmFibGU8Tm9uTnVsbGFibGU8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeVsncHJvZHVjdFZhcmlhbnQnXT5bJ2ZhY2V0VmFsdWVzJ10+O1xyXG4gICAgY2hhbm5lbERlZmF1bHRDdXJyZW5jeUNvZGU6IEN1cnJlbmN5Q29kZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHByb2R1Y3REZXRhaWxTZXJ2aWNlOiBQcm9kdWN0RGV0YWlsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnNldHRpbmdzLmdldEdsb2JhbFNldHRpbmdzKCdjYWNoZS1maXJzdCcpLnNpbmdsZSQuc3Vic2NyaWJlKCh7IGdsb2JhbFNldHRpbmdzIH0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nbG9iYWxUcmFja0ludmVudG9yeSA9IGdsb2JhbFNldHRpbmdzLnRyYWNrSW52ZW50b3J5O1xyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQgPSBnbG9iYWxTZXR0aW5ncy5vdXRPZlN0b2NrVGhyZXNob2xkO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudGF4Q2F0ZWdvcmllcyQgPSB0aGlzLnJlc3VsdCQucGlwZShtYXAoZGF0YSA9PiBkYXRhLnRheENhdGVnb3JpZXMuaXRlbXMpKTtcclxuICAgICAgICBjb25zdCBhdmFpbGFibGVDdXJyZW5jeUNvZGVzJCA9IHRoaXMucmVzdWx0JC5waXBlKFxyXG4gICAgICAgICAgICB0YXAoZGF0YSA9PiAodGhpcy5jaGFubmVsRGVmYXVsdEN1cnJlbmN5Q29kZSA9IGRhdGEuYWN0aXZlQ2hhbm5lbC5kZWZhdWx0Q3VycmVuY3lDb2RlKSksXHJcbiAgICAgICAgICAgIG1hcChkYXRhID0+IGRhdGEuYWN0aXZlQ2hhbm5lbC5hdmFpbGFibGVDdXJyZW5jeUNvZGVzKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudW51c2VkQ3VycmVuY3lDb2RlcyQgPSBjb21iaW5lTGF0ZXN0KHRoaXMucHJpY2VzRm9ybS52YWx1ZUNoYW5nZXMsIGF2YWlsYWJsZUN1cnJlbmN5Q29kZXMkKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFtwcmljZXMsIGN1cnJlbmN5Q29kZXNdKSA9PlxyXG4gICAgICAgICAgICAgICAgY3VycmVuY3lDb2Rlcy5maWx0ZXIoY29kZSA9PiAhcHJpY2VzLm1hcChwID0+IHAuY3VycmVuY3lDb2RlKS5pbmNsdWRlcyhjb2RlKSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzdG9ja0xvY2F0aW9ucyQgPSB0aGlzLnJlc3VsdCQucGlwZShtYXAoZGF0YSA9PiBkYXRhLnN0b2NrTG9jYXRpb25zLml0ZW1zKSk7XHJcbiAgICAgICAgdGhpcy51bnVzZWRTdG9ja0xvY2F0aW9uJCA9IGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCBzdG9ja0xvY2F0aW9ucyQpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2VudGl0eSwgc3RvY2tMb2NhdGlvbnNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VkSWRzID0gZW50aXR5LnN0b2NrTGV2ZWxzLm1hcChsID0+IGwuc3RvY2tMb2NhdGlvbi5pZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvY2tMb2NhdGlvbnMuZmlsdGVyKGwgPT4gIXVzZWRJZHMuaW5jbHVkZXMobC5pZCkpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbFByaWNlSW5jbHVkZXNUYXgkID0gdGhpcy5kYXRhU2VydmljZS5zZXR0aW5nc1xyXG4gICAgICAgICAgICAuZ2V0QWN0aXZlQ2hhbm5lbCgnY2FjaGUtZmlyc3QnKVxyXG4gICAgICAgICAgICAucmVmZXRjaE9uQ2hhbm5lbENoYW5nZSgpXHJcbiAgICAgICAgICAgIC5tYXBTdHJlYW0oZGF0YSA9PiBkYXRhLmFjdGl2ZUNoYW5uZWwucHJpY2VzSW5jbHVkZVRheClcclxuICAgICAgICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xyXG4gICAgICAgIHRoaXMuc3RvY2tMZXZlbHMkID0gdGhpcy5lbnRpdHkkLnBpcGUobWFwKGVudGl0eSA9PiBlbnRpdHk/LnN0b2NrTGV2ZWxzID8/IFtdKSk7XHJcbiAgICAgICAgY29uc3QgZmFjZXRWYWx1ZXMkID0gdGhpcy5lbnRpdHkkLnBpcGUobWFwKHZhcmlhbnQgPT4gdmFyaWFudC5mYWNldFZhbHVlcyA/PyBbXSkpO1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgY29uc3QgZm9ybUZhY2V0VmFsdWVJZENoYW5nZXMkID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmFjZXRWYWx1ZUlkcycpIS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgc2tpcCgxKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKGlkcyA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5mYWNldFxyXG4gICAgICAgICAgICAgICAgICAgIC5nZXRGYWNldFZhbHVlcyh7IGZpbHRlcjogeyBpZDogeyBpbjogaWRzIH0gfSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXBTaW5nbGUoKHsgZmFjZXRWYWx1ZXMgfSkgPT4gZmFjZXRWYWx1ZXMuaXRlbXMpLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmFjZXRWYWx1ZXMkID0gY29uY2F0KFxyXG4gICAgICAgICAgICBmYWNldFZhbHVlcyQucGlwZSh0YWtlKDEpKSxcclxuICAgICAgICAgICAgZmFjZXRWYWx1ZXMkLnBpcGUoc3dpdGNoTWFwVG8oZm9ybUZhY2V0VmFsdWVJZENoYW5nZXMkKSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRQcmljZUluQ3VycmVuY3koY3VycmVuY3lDb2RlOiBDdXJyZW5jeUNvZGUpIHtcclxuICAgICAgICB0aGlzLnByaWNlc0Zvcm0ucHVzaChcclxuICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogMCxcclxuICAgICAgICAgICAgICAgIGRlbGV0ZTogZmFsc2UgYXMgYm9vbGVhbixcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVEZWxldGVQcmljZShkZWxldGVGb3JtQ29udHJvbDogRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBkZWxldGVGb3JtQ29udHJvbC5zZXRWYWx1ZSghZGVsZXRlRm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gICAgICAgIGRlbGV0ZUZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU3RvY2tMb2NhdGlvbihzdG9ja0xvY2F0aW9uOiBJdGVtT2Y8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeSwgJ3N0b2NrTG9jYXRpb25zJz4pIHtcclxuICAgICAgICB0aGlzLnN0b2NrTGV2ZWxzRm9ybS5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgICAgIHN0b2NrTG9jYXRpb25JZDogc3RvY2tMb2NhdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgIHN0b2NrTG9jYXRpb25OYW1lOiBzdG9ja0xvY2F0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBzdG9ja09uSGFuZDogMCxcclxuICAgICAgICAgICAgICAgIHN0b2NrQWxsb2NhdGVkOiAwLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmVudGl0eSQsIHRoaXMubGFuZ3VhZ2VDb2RlJClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFt2YXJpYW50LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBwaWNrKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFVwZGF0ZWRWYXJpYW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuYWJsZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0aW9ucycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2t1JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YXhDYXRlZ29yeUlkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWNldFZhbHVlSWRzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmZWF0dXJlZEFzc2V0SWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fzc2V0SWRzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFja0ludmVudG9yeScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0T2ZTdG9ja1RocmVzaG9sZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3VzdG9tRmllbGRzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICApIGFzIFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RvY2tMZXZlbHNGb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnN0b2NrTGV2ZWxzID0gdGhpcy5zdG9ja0xldmVsc0Zvcm0uY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY29udHJvbCA9PiBjb250cm9sLmRpcnR5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChjb250cm9sID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9ja0xvY2F0aW9uSWQ6IGNvbnRyb2wudmFsdWUuc3RvY2tMb2NhdGlvbklkISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b2NrT25IYW5kOiBjb250cm9sLnZhbHVlLnN0b2NrT25IYW5kISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJpY2VzRm9ybS5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5wcmljZXMgPSB0aGlzLnByaWNlc0Zvcm0uY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY29udHJvbCA9PiBjb250cm9sLmRpcnR5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChjb250cm9sID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogY29udHJvbC52YWx1ZS5wcmljZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGU6IGNvbnRyb2wudmFsdWUuY3VycmVuY3lDb2RlISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGU6IGNvbnRyb2wudmFsdWUuZGVsZXRlID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5tdXRhdGUoUHJvZHVjdFZhcmlhbnRVcGRhdGVNdXRhdGlvbkRvY3VtZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBbaW5wdXRdLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9ja0xldmVsc0Zvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaWNlc0Zvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2V0Q2hhbmdlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0VmFyaWFudCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3RWYXJpYW50JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzZXRzQ2hhbmdlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFPYmplY3QudmFsdWVzKHRoaXMuYXNzZXRDaGFuZ2VzKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgaW52ZW50b3J5SXNOb3RUcmFja2VkKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRyYWNrSW52ZW50b3J5ID0gZm9ybUdyb3VwLmdldCgndHJhY2tJbnZlbnRvcnknKT8udmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdHJhY2tJbnZlbnRvcnkgPT09IEdsb2JhbEZsYWcuRkFMU0UgfHxcclxuICAgICAgICAgICAgKHRyYWNrSW52ZW50b3J5ID09PSBHbG9iYWxGbGFnLklOSEVSSVQgJiYgdGhpcy5nbG9iYWxUcmFja0ludmVudG9yeSA9PT0gZmFsc2UpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25Hcm91cENvZGUob3B0aW9uR3JvdXBJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZW50aXR5Py5wcm9kdWN0Lm9wdGlvbkdyb3Vwcy5maW5kKGcgPT4gZy5pZCA9PT0gb3B0aW9uR3JvdXBJZCk7XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwPy5jb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbk5hbWUob3B0aW9uOiBQcm9kdWN0T3B0aW9uRnJhZ21lbnQpIHtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9XHJcbiAgICAgICAgICAgIG9wdGlvbi50cmFuc2xhdGlvbnMuZmluZCh0ID0+IHQubGFuZ3VhZ2VDb2RlID09PSB0aGlzLmxhbmd1YWdlQ29kZSkgPz8gb3B0aW9uLnRyYW5zbGF0aW9uc1swXTtcclxuICAgICAgICByZXR1cm4gdHJhbnNsYXRpb24ubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGYWNldFZhbHVlKGZhY2V0VmFsdWVJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcHJvZHVjdEdyb3VwID0gdGhpcy5kZXRhaWxGb3JtO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGYWNldFZhbHVlSWRzID0gcHJvZHVjdEdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHMgPz8gW107XHJcbiAgICAgICAgcHJvZHVjdEdyb3VwLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiBjdXJyZW50RmFjZXRWYWx1ZUlkcy5maWx0ZXIoaWQgPT4gaWQgIT09IGZhY2V0VmFsdWVJZCksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcHJvZHVjdEdyb3VwLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0RmFjZXRWYWx1ZSgpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlGYWNldFZhbHVlTW9kYWwoKS5zdWJzY3JpYmUoZmFjZXRWYWx1ZUlkcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmYWNldFZhbHVlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RmFjZXRWYWx1ZUlkcyA9IHRoaXMuZGV0YWlsRm9ybS52YWx1ZS5mYWNldFZhbHVlSWRzID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2V0VmFsdWVJZHM6IHVuaXF1ZShbLi4uY3VycmVudEZhY2V0VmFsdWVJZHMsIC4uLmZhY2V0VmFsdWVJZHNdKSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRpc3BsYXlGYWNldFZhbHVlTW9kYWwoKTogT2JzZXJ2YWJsZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZVxyXG4gICAgICAgICAgICAuZnJvbUNvbXBvbmVudChBcHBseUZhY2V0RGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiAnbWQnLFxyXG4gICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKG1hcChmYWNldFZhbHVlcyA9PiBmYWNldFZhbHVlcyAmJiBmYWNldFZhbHVlcy5tYXAodiA9PiB2LmlkKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKFxyXG4gICAgICAgIHZhcmlhbnQ6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50RGV0YWlsUXVlcnlbJ3Byb2R1Y3RWYXJpYW50J10+LFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmFyaWFudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKHZhcmlhbnQsIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgY29uc3QgZmFjZXRWYWx1ZUlkcyA9IHZhcmlhbnQuZmFjZXRWYWx1ZXMubWFwKGZ2ID0+IGZ2LmlkKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGlkOiB2YXJpYW50LmlkLFxyXG4gICAgICAgICAgICBlbmFibGVkOiB2YXJpYW50LmVuYWJsZWQsXHJcbiAgICAgICAgICAgIHNrdTogdmFyaWFudC5za3UsXHJcbiAgICAgICAgICAgIG5hbWU6IHZhcmlhbnRUcmFuc2xhdGlvbiA/IHZhcmlhbnRUcmFuc2xhdGlvbi5uYW1lIDogJycsXHJcbiAgICAgICAgICAgIHRheENhdGVnb3J5SWQ6IHZhcmlhbnQudGF4Q2F0ZWdvcnkuaWQsXHJcbiAgICAgICAgICAgIHN0b2NrT25IYW5kOiB2YXJpYW50LnN0b2NrTGV2ZWxzWzBdPy5zdG9ja09uSGFuZCA/PyAwLFxyXG4gICAgICAgICAgICB1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkOiB2YXJpYW50LnVzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQsXHJcbiAgICAgICAgICAgIG91dE9mU3RvY2tUaHJlc2hvbGQ6IHZhcmlhbnQub3V0T2ZTdG9ja1RocmVzaG9sZCxcclxuICAgICAgICAgICAgdHJhY2tJbnZlbnRvcnk6IHZhcmlhbnQudHJhY2tJbnZlbnRvcnksXHJcbiAgICAgICAgICAgIGZhY2V0VmFsdWVJZHMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zdG9ja0xldmVsc0Zvcm0uY2xlYXIoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IHN0b2NrTGV2ZWwgb2YgdmFyaWFudC5zdG9ja0xldmVscykge1xyXG4gICAgICAgICAgICB0aGlzLnN0b2NrTGV2ZWxzRm9ybS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RvY2tMb2NhdGlvbklkOiBzdG9ja0xldmVsLnN0b2NrTG9jYXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RvY2tMb2NhdGlvbk5hbWU6IHN0b2NrTGV2ZWwuc3RvY2tMb2NhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b2NrT25IYW5kOiBzdG9ja0xldmVsLnN0b2NrT25IYW5kLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b2NrQWxsb2NhdGVkOiBzdG9ja0xldmVsLnN0b2NrQWxsb2NhdGVkLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJpY2VzRm9ybS5jbGVhcigpO1xyXG4gICAgICAgIGZvciAoY29uc3QgcHJpY2Ugb2YgdmFyaWFudC5wcmljZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmljZXNGb3JtLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgICBwcmljZTogcHJpY2UucHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lDb2RlOiBwcmljZS5jdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlOiBmYWxzZSBhcyBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpLFxyXG4gICAgICAgICAgICAgICAgdmFyaWFudCxcclxuICAgICAgICAgICAgICAgIHZhcmlhbnRUcmFuc2xhdGlvbixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIHByb2R1Y3QgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZGV0YWlsRm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiB1cGRhdGVkIGNvcHkgb2YgdGhlIHByb2R1Y3Qgd2hpY2hcclxuICAgICAqIGNhbiB0aGVuIGJlIHBlcnNpc3RlZCB0byB0aGUgQVBJLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFVwZGF0ZWRWYXJpYW50KFxyXG4gICAgICAgIHZhcmlhbnQ6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50RGV0YWlsUXVlcnlbJ3Byb2R1Y3RWYXJpYW50J10+LFxyXG4gICAgICAgIHZhcmlhbnRGb3JtR3JvdXA6IHR5cGVvZiB0aGlzLmRldGFpbEZvcm0sXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0IHwgQ3JlYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFByb2R1Y3QgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiB2YXJpYW50LFxyXG4gICAgICAgICAgICB1cGRhdGVkRmllbGRzOiB2YXJpYW50Rm9ybUdyb3VwLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgZGVmYXVsdFRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2YXJpYW50Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udXBkYXRlZFByb2R1Y3QsXHJcbiAgICAgICAgICAgIGFzc2V0SWRzOiB0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHM/Lm1hcChhID0+IGEuaWQpLFxyXG4gICAgICAgICAgICBmZWF0dXJlZEFzc2V0SWQ6IHRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ/LmlkLFxyXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiB2YXJpYW50Rm9ybUdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHMsXHJcbiAgICAgICAgICAgIHRheENhdGVnb3J5SWQ6IHZhcmlhbnRGb3JtR3JvdXAudmFsdWUudGF4Q2F0ZWdvcnlJZCxcclxuICAgICAgICB9IGFzIFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQgfCBDcmVhdGVQcm9kdWN0VmFyaWFudElucHV0O1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1ibG9jaz5cclxuICAgIDx2ZHItYWN0aW9uLWJhcj5cclxuICAgICAgICA8dmRyLWFiLWxlZnQgW2dyb3ddPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmMgYXMgYXZhaWxhYmxlTGFuZ3VhZ2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTmV3JCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwibGFuZ3VhZ2VDb2RlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGxhbmd1YWdlQ29kZUNoYW5nZSk9XCJzZXRMYW5ndWFnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDx2ZHItcHJvZHVjdC12YXJpYW50LXF1aWNrLWp1bXAgW3Byb2R1Y3RJZF09XCJlbnRpdHk/LnByb2R1Y3QuaWRcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG5cclxuICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICA8dmRyLWFjdGlvbi1iYXItaXRlbXMgbG9jYXRpb25JZD1cInByb2R1Y3QtdmFyaWFudC1kZXRhaWxcIj48L3Zkci1hY3Rpb24tYmFyLWl0ZW1zPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cIlsnVXBkYXRlQ2F0YWxvZycsICdVcGRhdGVQcm9kdWN0J11cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGRldGFpbEZvcm0uaW52YWxpZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9ja0xldmVsc0Zvcm0uaW52YWxpZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZXNGb3JtLmludmFsaWQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGRldGFpbEZvcm0ucHJpc3RpbmUgJiYgc3RvY2tMZXZlbHNGb3JtLnByaXN0aW5lICYmIHByaWNlc0Zvcm0ucHJpc3RpbmUpKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICFhc3NldHNDaGFuZ2VkKClcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L3Zkci1hYi1yaWdodD5cclxuICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbjwvdmRyLXBhZ2UtYmxvY2s+XHJcbjxmb3JtIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZGV0YWlsRm9ybVwiICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIHZhcmlhbnRcIj5cclxuICAgIDx2ZHItcGFnZS1kZXRhaWwtbGF5b3V0PlxyXG4gICAgICAgIDx2ZHItcGFnZS1kZXRhaWwtc2lkZWJhclxyXG4gICAgICAgICAgICA+PHZkci1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY2F0YWxvZy52aXNpYmlsaXR5JyB8IHRyYW5zbGF0ZVwiIGZvcj1cInZpc2liaWxpdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLXRvZ2dsZS13cmFwcGVyICp2ZHJJZlBlcm1pc3Npb25zPVwiWydVcGRhdGVDYXRhbG9nJywgJ1VwZGF0ZVByb2R1Y3QnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJUb2dnbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJlbmFibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJkZXRhaWxGb3JtLmdldChbJ2VuYWJsZWQnXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ2NvbW1vbi5lbmFibGVkJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgKm5nSWY9XCJ2YXJpYW50Lm9wdGlvbnMubGVuZ3RoXCIgW3RpdGxlXT1cIidjYXRhbG9nLnByb2R1Y3Qtb3B0aW9ucycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1jaGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdmFyaWFudC5vcHRpb25zIHwgc29ydCA6ICdncm91cElkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvckZyb21dPVwib3B0aW9uR3JvdXBDb2RlKG9wdGlvbi5ncm91cElkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnZlcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBvcHRpb25Hcm91cENvZGUob3B0aW9uLmdyb3VwSWQpIH19Ojwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uTmFtZShvcHRpb24pIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy4uLy4uLycsICdvcHRpb25zJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1zbWFsbCBtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwZW5jaWxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5lZGl0LW9wdGlvbnMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NhdGFsb2cuZmFjZXRzJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhY2V0c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZmFjZXQtdmFsdWUtY2hpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmFjZXRWYWx1ZSBvZiBmYWNldFZhbHVlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmYWNldFZhbHVlXT1cImZhY2V0VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlRmFjZXRWYWx1ZShmYWNldFZhbHVlLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWZhY2V0LXZhbHVlLWNoaXA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1zbWFsbCBtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RGYWNldFZhbHVlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmFkZC1mYWNldHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuXHJcbiAgICAgICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgICAgIDx2ZHItcGFnZS1lbnRpdHktaW5mbyAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBlbnRpdHlcIiBbZW50aXR5XT1cImVudGl0eVwiIC8+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPC92ZHItcGFnZS1kZXRhaWwtc2lkZWJhcj5cclxuXHJcbiAgICAgICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBoaWRkZW4geC1kYXRhPVwicHJldmVudHMgZW50ZXIga2V5IGZyb20gdHJpZ2dlcmluZyBvdGhlciBidXR0b25zXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEoWydVcGRhdGVDYXRhbG9nJywgJ1VwZGF0ZVByb2R1Y3QnXSB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NhdGFsb2cuc2t1JyB8IHRyYW5zbGF0ZVwiIGZvcj1cInNrdVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2t1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNrdVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiICpuZ0lmPVwiY3VzdG9tRmllbGRzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJQcm9kdWN0VmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiZGV0YWlsRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdFxyXG4gICAgICAgICAgICAgICAgbG9jYXRpb25JZD1cInByb2R1Y3QtdmFyaWFudC1kZXRhaWxcIlxyXG4gICAgICAgICAgICAgICAgW2VudGl0eSRdPVwiZW50aXR5JFwiXHJcbiAgICAgICAgICAgICAgICBbZGV0YWlsRm9ybV09XCJkZXRhaWxGb3JtXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY2F0YWxvZy5hc3NldHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWFzc2V0c1xyXG4gICAgICAgICAgICAgICAgICAgIFthc3NldHNdPVwiYXNzZXRDaGFuZ2VzLmFzc2V0cyB8fCB2YXJpYW50LmFzc2V0c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2ZlYXR1cmVkQXNzZXRdPVwiYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQgfHwgdmFyaWFudC5mZWF0dXJlZEFzc2V0XCJcclxuICAgICAgICAgICAgICAgICAgICBbdXBkYXRlUGVybWlzc2lvbnNdPVwidXBkYXRlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYXNzZXRDaGFuZ2VzID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NhdGFsb2cucHJpY2UtYW5kLXRheCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjYXRhbG9nLnRheC1jYXRlZ29yeScgfCB0cmFuc2xhdGVcIiBmb3I9XCJ0YXhDYXRlZ29yeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJ0YXhDYXRlZ29yeVwiIGZvcm1Db250cm9sTmFtZT1cInRheENhdGVnb3J5SWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdGF4Q2F0ZWdvcnkgb2YgdGF4Q2F0ZWdvcmllcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRheENhdGVnb3J5LmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0YXhDYXRlZ29yeS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JpZCBwcmljZXNcIiAqbmdGb3I9XCJsZXQgcHJpY2Ugb2YgcHJpY2VzRm9ybS5jb250cm9sc1wiIFtmb3JtR3JvdXBdPVwicHJpY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjYXRhbG9nLnByaWNlJyB8IHRyYW5zbGF0ZSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPCBwcmljZXNGb3JtLmxlbmd0aCA/ICcgKCcgKyBwcmljZS52YWx1ZS5jdXJyZW5jeUNvZGUgKyAnKScgOiAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDwgcHJpY2VzRm9ybS5sZW5ndGggJiYgcHJpY2UudmFsdWUuY3VycmVuY3lDb2RlID09PSBjaGFubmVsRGVmYXVsdEN1cnJlbmN5Q29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKCdjYXRhbG9nLmRlZmF1bHQtY3VycmVuY3knIHwgdHJhbnNsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInByaWNlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmljZS13cmFwcGVyXCIgW2NsYXNzLnBlbmRpbmctZGVsZXRpb25dPVwicHJpY2UudmFsdWUuZGVsZXRlID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWN1cnJlbmN5LWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInByaWNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3lDb2RlXT1cInByaWNlLnZhbHVlLmN1cnJlbmN5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbikgfHwgcHJpY2UudmFsdWUuZGVsZXRlID09PSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcmljZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIjEgPCBwcmljZXNGb3JtLmNvbnRyb2xzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tc21hbGwgZGVsZXRlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcmljZS52YWx1ZS5jdXJyZW5jeUNvZGUgPT09IGNoYW5uZWxEZWZhdWx0Q3VycmVuY3lDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURlbGV0ZVByaWNlKHByaWNlLmdldCgnZGVsZXRlJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItdmFyaWFudC1wcmljZS1kZXRhaWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ByaWNlXT1cInByaWNlLnZhbHVlLnByaWNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29kZV09XCJwcmljZS52YWx1ZS5jdXJyZW5jeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcHJpY2VJbmNsdWRlc1RheF09XCJjaGFubmVsUHJpY2VJbmNsdWRlc1RheCQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YXhDYXRlZ29yeUlkXT1cImRldGFpbEZvcm0uZ2V0KCd0YXhDYXRlZ29yeUlkJykhLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidW51c2VkQ3VycmVuY3lDb2RlcyQgfCBhc3luYyBhcyB1bnVzZWRDdXJyZW5jeUNvZGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVudXNlZEN1cnJlbmN5Q29kZXMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIG10LTJcIiB2ZHJEcm9wZG93blRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuYWRkLXByaWNlLWluLWFub3RoZXItY3VycmVuY3knIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZWxsaXBzaXMtdmVydGljYWxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGN1cnJlbmN5Q29kZSBvZiB1bnVzZWRDdXJyZW5jeUNvZGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFByaWNlSW5DdXJyZW5jeShjdXJyZW5jeUNvZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbmN5Q29kZSB8IGxvY2FsZUN1cnJlbmN5TmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY2F0YWxvZy5zdG9jay1sZXZlbHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInRyYWNrLWludmVudG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY2F0YWxvZy50cmFjay1pbnZlbnRvcnknIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ2NhdGFsb2cudHJhY2staW52ZW50b3J5LXRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0cmFjay1pbnZlbnRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHJhY2tJbnZlbnRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEodXBkYXRlUGVybWlzc2lvbnMgfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIkdsb2JhbEZsYWcuVFJVRVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLnRyYWNrLWludmVudG9yeS10cnVlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJHbG9iYWxGbGFnLkZBTFNFXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cudHJhY2staW52ZW50b3J5LWZhbHNlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJHbG9iYWxGbGFnLklOSEVSSVRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy50cmFjay1pbnZlbnRvcnktaW5oZXJpdCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0taXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NhdGFsb2cub3V0LW9mLXN0b2NrLXRocmVzaG9sZCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInY2F0YWxvZy5vdXQtb2Ytc3RvY2stdGhyZXNob2xkLXRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvdXRPZlN0b2NrVGhyZXNob2xkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZkckRpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbEZvcm0uZ2V0KCd1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkJyk/LnZhbHVlICE9PSBmYWxzZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmVudG9yeUlzTm90VHJhY2tlZChkZXRhaWxGb3JtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyVG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInVzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2ZHJEaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pIHx8IGludmVudG9yeUlzTm90VHJhY2tlZChkZXRhaWxGb3JtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7ICdjYXRhbG9nLnVzZS1nbG9iYWwtdmFsdWUnIHwgdHJhbnNsYXRlIH19ICh7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pPC9sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JpZCBzdG9jay1sZXZlbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdG9ja0xldmVsIG9mIHN0b2NrTGV2ZWxzRm9ybS5jb250cm9sc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJzdG9ja0xldmVsXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvY2tMZXZlbC5nZXQoJ3N0b2NrTG9jYXRpb25OYW1lJyk/LnZhbHVlICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6ICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjYXRhbG9nLnN0b2NrLW9uLWhhbmQnIHwgdHJhbnNsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidzdG9ja09uSGFuZF8nICsgc3RvY2tMZXZlbC5nZXQoJ3N0b2NrTG9jYXRpb25JZCcpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInc3RvY2tPbkhhbmRfJyArIHN0b2NrTGV2ZWwuZ2V0KCdzdG9ja0xvY2F0aW9uSWQnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdG9ja09uSGFuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b2NrTGV2ZWwuZ2V0KCdzdG9ja0xvY2F0aW9uTmFtZScpPy52YWx1ZSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnY2F0YWxvZy5zdG9jay1hbGxvY2F0ZWQnIHwgdHJhbnNsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc3RvY2tMZXZlbC5nZXQoJ3N0b2NrQWxsb2NhdGVkJyk/LnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1pdGVtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidW51c2VkU3RvY2tMb2NhdGlvbiQgfCBhc3luYyBhcyB1bnVzZWRTdG9ja0xvY2F0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1bnVzZWRTdG9ja0xvY2F0aW9ucy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gbXQtMlwiIHZkckRyb3Bkb3duVHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5hZGQtc3RvY2stbG9jYXRpb24nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZWxsaXBzaXMtdmVydGljYWxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN0b2NrTG9jYXRpb24gb2YgdW51c2VkU3RvY2tMb2NhdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkU3RvY2tMb2NhdGlvbihzdG9ja0xvY2F0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJtYXAtbWFya2VyXCI+PC9jbHItaWNvbj4ge3sgc3RvY2tMb2NhdGlvbi5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bi1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8L3Zkci1wYWdlLWRldGFpbC1sYXlvdXQ+XHJcbjwvZm9ybT5cclxuIl19