@hitsoft/smart-warehouse 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/README.md +24 -0
  2. package/config/enums/index.d.ts +1 -0
  3. package/config/enums/route-names.d.ts +12 -0
  4. package/config/index.d.ts +5 -0
  5. package/config/providers/connector-params-route.provider.d.ts +8 -0
  6. package/config/providers/index.d.ts +7 -0
  7. package/config/providers/order-station-route.provider.d.ts +8 -0
  8. package/config/providers/orders-route.provider.d.ts +8 -0
  9. package/config/providers/quantity-correction-route.provider.d.ts +8 -0
  10. package/config/providers/route.provider.d.ts +8 -0
  11. package/config/providers/shelf-placement-route.provider.d.ts +8 -0
  12. package/config/providers/shelf-transfer-route.provider.d.ts +8 -0
  13. package/config/providers/shortages-route.provider.d.ts +8 -0
  14. package/config/providers/station.provider.d.ts +8 -0
  15. package/config/providers/stock-report.d.ts +8 -0
  16. package/config/public-api.d.ts +3 -0
  17. package/config/smart-warehouse-config.module.d.ts +8 -0
  18. package/esm2020/config/enums/index.mjs +2 -0
  19. package/esm2020/config/enums/route-names.mjs +2 -0
  20. package/esm2020/config/hitsoft-smart-warehouse-config.mjs +5 -0
  21. package/esm2020/config/providers/connector-params-route.provider.mjs +25 -0
  22. package/esm2020/config/providers/index.mjs +8 -0
  23. package/esm2020/config/providers/order-station-route.provider.mjs +25 -0
  24. package/esm2020/config/providers/orders-route.provider.mjs +25 -0
  25. package/esm2020/config/providers/quantity-correction-route.provider.mjs +25 -0
  26. package/esm2020/config/providers/route.provider.mjs +24 -0
  27. package/esm2020/config/providers/shelf-placement-route.provider.mjs +25 -0
  28. package/esm2020/config/providers/shelf-transfer-route.provider.mjs +25 -0
  29. package/esm2020/config/providers/shortages-route.provider.mjs +25 -0
  30. package/esm2020/config/providers/station.provider.mjs +25 -0
  31. package/esm2020/config/providers/stock-report.mjs +25 -0
  32. package/esm2020/config/public-api.mjs +4 -0
  33. package/esm2020/config/smart-warehouse-config.module.mjs +37 -0
  34. package/esm2020/hitsoft-smart-warehouse.mjs +5 -0
  35. package/esm2020/lib/components/connector-params/connector-params.component.mjs +182 -0
  36. package/esm2020/lib/components/connector-params/connector-params.module.mjs +41 -0
  37. package/esm2020/lib/components/order-station/order-station.component.mjs +160 -0
  38. package/esm2020/lib/components/order-station/order-station.module.mjs +57 -0
  39. package/esm2020/lib/components/orders/orders.component.mjs +445 -0
  40. package/esm2020/lib/components/orders/orders.module.mjs +75 -0
  41. package/esm2020/lib/components/quantity-correction/quantity-correction.component.mjs +231 -0
  42. package/esm2020/lib/components/quantity-correction/quantity-correction.module.mjs +41 -0
  43. package/esm2020/lib/components/shelf-placement/shelf-placement.component.mjs +297 -0
  44. package/esm2020/lib/components/shelf-placement/shelf-placement.module.mjs +66 -0
  45. package/esm2020/lib/components/shelf-transfer/shelf-transfer.component.mjs +146 -0
  46. package/esm2020/lib/components/shelf-transfer/shelf-transfer.module.mjs +41 -0
  47. package/esm2020/lib/components/shortages/shortages.component.mjs +75 -0
  48. package/esm2020/lib/components/shortages/shortages.module.mjs +42 -0
  49. package/esm2020/lib/components/smart-warehouse.component.mjs +18 -0
  50. package/esm2020/lib/components/stock-report/stock-report.component.mjs +29 -0
  51. package/esm2020/lib/components/stock-report/stock-report.module.mjs +42 -0
  52. package/esm2020/lib/guards/connector-params.guard.mjs +58 -0
  53. package/esm2020/lib/hit-proxy/connector-params/connector-params.service.mjs +27 -0
  54. package/esm2020/lib/hit-proxy/devexpress-query-builder/devexpress-load-options.model.mjs +2 -0
  55. package/esm2020/lib/hit-proxy/devexpress-query-builder/devexpress-query-builder.mjs +62 -0
  56. package/esm2020/lib/hit-proxy/inventory/inventory.service.mjs +21 -0
  57. package/esm2020/lib/hit-proxy/order-station/order-station.service.mjs +18 -0
  58. package/esm2020/lib/hit-proxy/orders/model.mjs +2 -0
  59. package/esm2020/lib/hit-proxy/orders/order.service.mjs +81 -0
  60. package/esm2020/lib/hit-proxy/quantity-correction/quantity-correction.service.mjs +47 -0
  61. package/esm2020/lib/hit-proxy/shortages/model.mjs +2 -0
  62. package/esm2020/lib/hit-proxy/shortages/shortages.service.mjs +26 -0
  63. package/esm2020/lib/hit-proxy/stations/station.service.mjs +86 -0
  64. package/esm2020/lib/hit-proxy/stock-report/stock-report.service.mjs +22 -0
  65. package/esm2020/lib/hit-proxy/stock-transfer/stock-transfer.service.mjs +21 -0
  66. package/esm2020/lib/hit-proxy/warehouse/warehouse.service.mjs +65 -0
  67. package/esm2020/lib/services/smart-warehouse.service.mjs +21 -0
  68. package/esm2020/lib/smart-warehouse-routing.module.mjs +79 -0
  69. package/esm2020/lib/smart-warehouse.module.mjs +34 -0
  70. package/esm2020/lib/stations/station.component.mjs +43 -0
  71. package/esm2020/lib/stations/station.module.mjs +42 -0
  72. package/esm2020/public-api.mjs +20 -0
  73. package/fesm2015/hitsoft-smart-warehouse-config.mjs +264 -0
  74. package/fesm2015/hitsoft-smart-warehouse-config.mjs.map +1 -0
  75. package/fesm2015/hitsoft-smart-warehouse.mjs +2577 -0
  76. package/fesm2015/hitsoft-smart-warehouse.mjs.map +1 -0
  77. package/fesm2020/hitsoft-smart-warehouse-config.mjs +264 -0
  78. package/fesm2020/hitsoft-smart-warehouse-config.mjs.map +1 -0
  79. package/fesm2020/hitsoft-smart-warehouse.mjs +2515 -0
  80. package/fesm2020/hitsoft-smart-warehouse.mjs.map +1 -0
  81. package/index.d.ts +5 -0
  82. package/lib/components/connector-params/connector-params.component.d.ts +44 -0
  83. package/lib/components/connector-params/connector-params.module.d.ts +13 -0
  84. package/lib/components/order-station/order-station.component.d.ts +31 -0
  85. package/lib/components/order-station/order-station.module.d.ts +16 -0
  86. package/lib/components/orders/orders.component.d.ts +63 -0
  87. package/lib/components/orders/orders.module.d.ts +17 -0
  88. package/lib/components/quantity-correction/quantity-correction.component.d.ts +52 -0
  89. package/lib/components/quantity-correction/quantity-correction.module.d.ts +16 -0
  90. package/lib/components/shelf-placement/shelf-placement.component.d.ts +93 -0
  91. package/lib/components/shelf-placement/shelf-placement.module.d.ts +17 -0
  92. package/lib/components/shelf-transfer/shelf-transfer.component.d.ts +26 -0
  93. package/lib/components/shelf-transfer/shelf-transfer.module.d.ts +16 -0
  94. package/lib/components/shortages/shortages.component.d.ts +25 -0
  95. package/lib/components/shortages/shortages.module.d.ts +17 -0
  96. package/lib/components/smart-warehouse.component.d.ts +10 -0
  97. package/lib/components/stock-report/stock-report.component.d.ts +16 -0
  98. package/lib/components/stock-report/stock-report.module.d.ts +17 -0
  99. package/lib/guards/connector-params.guard.d.ts +21 -0
  100. package/lib/hit-proxy/connector-params/connector-params.service.d.ts +46 -0
  101. package/lib/hit-proxy/devexpress-query-builder/devexpress-load-options.model.d.ts +8 -0
  102. package/lib/hit-proxy/devexpress-query-builder/devexpress-query-builder.d.ts +17 -0
  103. package/lib/hit-proxy/inventory/inventory.service.d.ts +22 -0
  104. package/lib/hit-proxy/order-station/order-station.service.d.ts +24 -0
  105. package/lib/hit-proxy/orders/model.d.ts +74 -0
  106. package/lib/hit-proxy/orders/order.service.d.ts +26 -0
  107. package/lib/hit-proxy/quantity-correction/quantity-correction.service.d.ts +88 -0
  108. package/lib/hit-proxy/shortages/model.d.ts +17 -0
  109. package/lib/hit-proxy/shortages/shortages.service.d.ts +13 -0
  110. package/lib/hit-proxy/stations/station.service.d.ts +25 -0
  111. package/lib/hit-proxy/stock-report/stock-report.service.d.ts +12 -0
  112. package/lib/hit-proxy/stock-transfer/stock-transfer.service.d.ts +19 -0
  113. package/lib/hit-proxy/warehouse/warehouse.service.d.ts +59 -0
  114. package/lib/services/smart-warehouse.service.d.ts +10 -0
  115. package/lib/smart-warehouse-routing.module.d.ts +7 -0
  116. package/lib/smart-warehouse.module.d.ts +13 -0
  117. package/lib/stations/station.component.d.ts +14 -0
  118. package/lib/stations/station.module.d.ts +17 -0
  119. package/package.json +45 -0
  120. package/public-api.d.ts +16 -0
@@ -0,0 +1,75 @@
1
+ import { CoreModule } from '@abp/ng.core';
2
+ import { ThemeSharedModule } from '@abp/ng.theme.shared';
3
+ import { NgModule } from '@angular/core';
4
+ import { FormsModule } from '@angular/forms';
5
+ import { RouterModule } from '@angular/router';
6
+ import { NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
7
+ import { NgxValidateCoreModule } from '@ngx-validate/core';
8
+ import { CommercialUiModule } from '@volo/abp.commercial.ng.ui';
9
+ import { PageModule } from '@abp/ng.components/page';
10
+ import { OrdersComponent } from './orders.component';
11
+ import { DxDataGridModule, DxPopupModule, DxNumberBoxModule, DxButtonModule } from 'devextreme-angular';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/router";
14
+ const routes = [
15
+ {
16
+ path: '',
17
+ component: OrdersComponent,
18
+ },
19
+ ];
20
+ export class OrdersModule {
21
+ }
22
+ OrdersModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OrdersModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23
+ OrdersModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: OrdersModule, declarations: [OrdersComponent], imports: [CoreModule,
24
+ ThemeSharedModule,
25
+ FormsModule,
26
+ CommercialUiModule,
27
+ NgxValidateCoreModule,
28
+ NgbCollapseModule,
29
+ NgbDatepickerModule,
30
+ NgbDropdownModule,
31
+ DxDataGridModule,
32
+ DxPopupModule,
33
+ DxNumberBoxModule,
34
+ DxButtonModule,
35
+ PageModule, i1.RouterModule] });
36
+ OrdersModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OrdersModule, imports: [CoreModule,
37
+ ThemeSharedModule,
38
+ FormsModule,
39
+ CommercialUiModule,
40
+ NgxValidateCoreModule,
41
+ NgbCollapseModule,
42
+ NgbDatepickerModule,
43
+ NgbDropdownModule,
44
+ DxDataGridModule,
45
+ DxPopupModule,
46
+ DxNumberBoxModule,
47
+ DxButtonModule,
48
+ PageModule,
49
+ RouterModule.forChild(routes)] });
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OrdersModule, decorators: [{
51
+ type: NgModule,
52
+ args: [{
53
+ declarations: [OrdersComponent],
54
+ imports: [
55
+ CoreModule,
56
+ ThemeSharedModule,
57
+ FormsModule,
58
+ CommercialUiModule,
59
+ NgxValidateCoreModule,
60
+ NgbCollapseModule,
61
+ NgbDatepickerModule,
62
+ NgbDropdownModule,
63
+ DxDataGridModule,
64
+ DxPopupModule,
65
+ DxNumberBoxModule,
66
+ DxButtonModule,
67
+ PageModule,
68
+ RouterModule.forChild(routes),
69
+ ],
70
+ }]
71
+ }] });
72
+ export function loadOrdersModuleAsChild() {
73
+ return Promise.resolve(OrdersModule);
74
+ }
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXdhcmVob3VzZS9zcmMvbGliL2NvbXBvbmVudHMvb3JkZXJzL29yZGVycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFFeEcsTUFBTSxNQUFNLEdBQVc7SUFDbkI7UUFDSSxJQUFJLEVBQUUsRUFBRTtRQUNSLFNBQVMsRUFBRSxlQUFlO0tBQzdCO0NBQ0osQ0FBQztBQXFCRixNQUFNLE9BQU8sWUFBWTs7eUdBQVosWUFBWTswR0FBWixZQUFZLGlCQWxCTixlQUFlLGFBRTFCLFVBQVU7UUFDVixpQkFBaUI7UUFDakIsV0FBVztRQUNYLGtCQUFrQjtRQUNsQixxQkFBcUI7UUFDckIsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsY0FBYztRQUNkLFVBQVU7MEdBSUwsWUFBWSxZQWhCakIsVUFBVTtRQUNWLGlCQUFpQjtRQUNqQixXQUFXO1FBQ1gsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixjQUFjO1FBQ2QsVUFBVTtRQUNWLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDOzJGQUd4QixZQUFZO2tCQW5CeEIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyxlQUFlLENBQUM7b0JBQy9CLE9BQU8sRUFBRTt3QkFDTCxVQUFVO3dCQUNWLGlCQUFpQjt3QkFDakIsV0FBVzt3QkFDWCxrQkFBa0I7d0JBQ2xCLHFCQUFxQjt3QkFDckIsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxVQUFVO3dCQUNWLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO3FCQUNoQztpQkFDSjs7QUFHRCxNQUFNLFVBQVUsdUJBQXVCO0lBQ25DLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29yZU1vZHVsZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7IFRoZW1lU2hhcmVkTW9kdWxlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBOZ2JDb2xsYXBzZU1vZHVsZSwgTmdiRGF0ZXBpY2tlck1vZHVsZSwgTmdiRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IE5neFZhbGlkYXRlQ29yZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdmFsaWRhdGUvY29yZSc7XHJcbmltcG9ydCB7IENvbW1lcmNpYWxVaU1vZHVsZSB9IGZyb20gJ0B2b2xvL2FicC5jb21tZXJjaWFsLm5nLnVpJztcclxuaW1wb3J0IHsgUGFnZU1vZHVsZSB9IGZyb20gJ0BhYnAvbmcuY29tcG9uZW50cy9wYWdlJztcclxuaW1wb3J0IHsgT3JkZXJzQ29tcG9uZW50IH0gZnJvbSAnLi9vcmRlcnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRHhEYXRhR3JpZE1vZHVsZSwgRHhQb3B1cE1vZHVsZSwgRHhOdW1iZXJCb3hNb2R1bGUsIER4QnV0dG9uTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyJztcclxuXHJcbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICcnLFxyXG4gICAgICAgIGNvbXBvbmVudDogT3JkZXJzQ29tcG9uZW50LFxyXG4gICAgfSxcclxuXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBkZWNsYXJhdGlvbnM6IFtPcmRlcnNDb21wb25lbnRdLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvcmVNb2R1bGUsXHJcbiAgICAgICAgVGhlbWVTaGFyZWRNb2R1bGUsXHJcbiAgICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgICAgQ29tbWVyY2lhbFVpTW9kdWxlLFxyXG4gICAgICAgIE5neFZhbGlkYXRlQ29yZU1vZHVsZSxcclxuICAgICAgICBOZ2JDb2xsYXBzZU1vZHVsZSxcclxuICAgICAgICBOZ2JEYXRlcGlja2VyTW9kdWxlLFxyXG4gICAgICAgIE5nYkRyb3Bkb3duTW9kdWxlLFxyXG4gICAgICAgIER4RGF0YUdyaWRNb2R1bGUsXHJcbiAgICAgICAgRHhQb3B1cE1vZHVsZSxcclxuICAgICAgICBEeE51bWJlckJveE1vZHVsZSxcclxuICAgICAgICBEeEJ1dHRvbk1vZHVsZSxcclxuICAgICAgICBQYWdlTW9kdWxlLFxyXG4gICAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChyb3V0ZXMpLFxyXG4gICAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE9yZGVyc01vZHVsZSB7fVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRPcmRlcnNNb2R1bGVBc0NoaWxkKCkge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShPcmRlcnNNb2R1bGUpO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,231 @@
1
+ import { Component, ViewEncapsulation } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../hit-proxy/quantity-correction/quantity-correction.service";
4
+ import * as i2 from "@abp/ng.theme.shared";
5
+ import * as i3 from "@angular/common";
6
+ import * as i4 from "@angular/forms";
7
+ import * as i5 from "@abp/ng.components/page";
8
+ export class QuantityCorrectionComponent {
9
+ constructor(quantityCorrectionService, confirmationService, toasterService) {
10
+ this.quantityCorrectionService = quantityCorrectionService;
11
+ this.confirmationService = confirmationService;
12
+ this.toasterService = toasterService;
13
+ this.boxBarcode = '';
14
+ this.lines = [];
15
+ this.selectedLine = null;
16
+ this.lastSearchedBoxBarcode = '';
17
+ this.hasSearched = false;
18
+ this.suppressNextBlurSearch = false;
19
+ this.updateType = 'shelfAndOrder'; // default: Raf ve Sipariş
20
+ this.newQuantity = null;
21
+ this.isLoading = false;
22
+ this.isSaving = false;
23
+ }
24
+ onBoxBarcodeChange(value) {
25
+ this.boxBarcode = value;
26
+ if (value.trim() === '') {
27
+ this.resetLineState();
28
+ this.hasSearched = false;
29
+ this.lastSearchedBoxBarcode = '';
30
+ return;
31
+ }
32
+ if (this.lastSearchedBoxBarcode && value.trim() !== this.lastSearchedBoxBarcode) {
33
+ this.resetLineState();
34
+ this.hasSearched = false;
35
+ }
36
+ }
37
+ onBoxBarcodeEnterKeydown() {
38
+ this.suppressNextBlurSearch = true;
39
+ this.onBoxBarcodeEnter();
40
+ }
41
+ onBoxBarcodeBlur() {
42
+ if (this.suppressNextBlurSearch) {
43
+ this.suppressNextBlurSearch = false;
44
+ return;
45
+ }
46
+ this.onBoxBarcodeEnter();
47
+ }
48
+ /**
49
+ * Kasa barkodu girilip Enter veya blur yapıldığında çalışır.
50
+ * Barkoda göre açık görev taslağı satırlarını yükler.
51
+ */
52
+ onBoxBarcodeEnter() {
53
+ if (this.isLoading) {
54
+ return;
55
+ }
56
+ const trimmedBarcode = this.boxBarcode.trim();
57
+ this.resetLineState();
58
+ if (!trimmedBarcode) {
59
+ this.hasSearched = false;
60
+ this.lastSearchedBoxBarcode = '';
61
+ return;
62
+ }
63
+ this.hasSearched = true;
64
+ this.lastSearchedBoxBarcode = trimmedBarcode;
65
+ this.isLoading = true;
66
+ this.quantityCorrectionService.getLinesByBoxBarcode(trimmedBarcode).subscribe({
67
+ next: (data) => {
68
+ this.lines = data || [];
69
+ this.isLoading = false;
70
+ if (this.lines.length === 0) {
71
+ this.toasterService.warn('Bu kasada açık görev bulunamadı.');
72
+ }
73
+ },
74
+ error: (error) => {
75
+ const errorMessage = error?.error?.error?.message || 'Kasa içeriği yüklenirken bir hata oluştu.';
76
+ this.toasterService.error(errorMessage);
77
+ this.isLoading = false;
78
+ },
79
+ });
80
+ }
81
+ /**
82
+ * Grid'den satır seçildiğinde çalışır.
83
+ */
84
+ onSelectLine(line) {
85
+ this.selectedLine = line;
86
+ this.newQuantity = line.CurrentQuantity;
87
+ }
88
+ /**
89
+ * Güncelle butonuna basıldığında seçili moda göre miktar düzeltme akışını başlatır.
90
+ */
91
+ onUpdate() {
92
+ if (!this.selectedLine) {
93
+ this.toasterService.warn('Lütfen bir satır seçiniz.');
94
+ return;
95
+ }
96
+ if (this.newQuantity === null || this.newQuantity < 0) {
97
+ this.toasterService.warn('Geçerli bir miktar giriniz.');
98
+ return;
99
+ }
100
+ if (this.updateType === 'orderOnly') {
101
+ this.updateOrderOnly();
102
+ }
103
+ else {
104
+ this.previewAndApplyShelfAndOrder();
105
+ }
106
+ }
107
+ /**
108
+ * "Sadece Sipariş": stok hareketi yok, sipariş iptali/miktar değişikliği senaryosu.
109
+ */
110
+ updateOrderOnly() {
111
+ const line = this.selectedLine;
112
+ if (this.newQuantity === line.CurrentQuantity) {
113
+ this.toasterService.warn('Yeni miktar mevcut miktar ile aynı.');
114
+ return;
115
+ }
116
+ const dto = {
117
+ ItrDocEntry: line.ItrDocEntry,
118
+ ItrLineNum: line.ItrLineNum,
119
+ ReservationCode: line.ReservationCode,
120
+ OrderDocEntry: line.OrderDocEntry,
121
+ LineNum: 0,
122
+ ItemCode: line.ItemCode,
123
+ NewQuantity: this.newQuantity,
124
+ UpdateType: this.updateType,
125
+ BinAbs: line.BinAbs,
126
+ BinCode: line.BinCode,
127
+ BatchNumber: line.BatchNumber,
128
+ WarehouseCode: line.WarehouseCode,
129
+ };
130
+ this.isSaving = true;
131
+ this.quantityCorrectionService.updateQuantity(dto).subscribe({
132
+ next: (result) => {
133
+ this.toasterService.success(result);
134
+ this.isSaving = false;
135
+ this.onBoxBarcodeEnter();
136
+ },
137
+ error: (error) => {
138
+ const errorMessage = error?.error?.error?.message || 'Miktar düzeltme sırasında bir hata oluştu.';
139
+ this.toasterService.error(errorMessage);
140
+ this.isSaving = false;
141
+ },
142
+ });
143
+ }
144
+ /**
145
+ * "Raf ve Sipariş": kasada fiilen sayılan miktar farklıysa Dummy Kasa / çapraz kasa kesin algoritması.
146
+ * Önce önizleme yapılır; çapraz kasa önerisi varsa kullanıcıya onay penceresi gösterilir.
147
+ */
148
+ previewAndApplyShelfAndOrder() {
149
+ const line = this.selectedLine;
150
+ const previewDto = {
151
+ TaskDraftDocEntry: line.ItrDocEntry,
152
+ TaskDraftLineNum: line.ItrLineNum,
153
+ BinAbs: line.BinAbs,
154
+ BinCode: line.BinCode,
155
+ ItemCode: line.ItemCode,
156
+ WarehouseCode: line.WarehouseCode,
157
+ CountedQuantity: this.newQuantity,
158
+ };
159
+ this.isSaving = true;
160
+ this.quantityCorrectionService.previewQuantityCorrection(previewDto).subscribe({
161
+ next: (preview) => {
162
+ if (preview.RequiresConfirmation) {
163
+ this.isSaving = false;
164
+ this.confirmationService.warn(preview.ConfirmationMessage, 'Çapraz Kasa').subscribe((status) => {
165
+ const accepted = status === 'confirm';
166
+ this.applyShelfAndOrder(line, accepted, preview.ReplacementBinCode, preview.ReplacementBinAbs);
167
+ });
168
+ return;
169
+ }
170
+ this.applyShelfAndOrder(line, false, '', 0);
171
+ },
172
+ error: (error) => {
173
+ const errorMessage = error?.error?.error?.message || 'Kasa düzeltmesi önizlenirken bir hata oluştu.';
174
+ this.toasterService.error(errorMessage);
175
+ this.isSaving = false;
176
+ },
177
+ });
178
+ }
179
+ applyShelfAndOrder(line, useReplacementBox, replacementBinCode, replacementBinAbs) {
180
+ const applyDto = {
181
+ TaskDraftDocEntry: line.ItrDocEntry,
182
+ TaskDraftLineNum: line.ItrLineNum,
183
+ BinAbs: line.BinAbs,
184
+ BinCode: line.BinCode,
185
+ OrderDocEntry: line.OrderDocEntry,
186
+ OrderDocNum: line.OrderDocNum,
187
+ ItemCode: line.ItemCode,
188
+ ItemDescription: line.ItemName,
189
+ WarehouseCode: line.WarehouseCode,
190
+ CountedQuantity: this.newQuantity,
191
+ UseReplacementBox: useReplacementBox,
192
+ ReplacementBinCode: replacementBinCode,
193
+ ReplacementBinAbs: replacementBinAbs,
194
+ };
195
+ this.isSaving = true;
196
+ this.quantityCorrectionService.applyQuantityCorrection(applyDto).subscribe({
197
+ next: (result) => {
198
+ this.toasterService.success(result);
199
+ this.isSaving = false;
200
+ this.onBoxBarcodeEnter();
201
+ },
202
+ error: (error) => {
203
+ const errorMessage = error?.error?.error?.message || 'Kasa düzeltmesi uygulanırken bir hata oluştu.';
204
+ this.toasterService.error(errorMessage);
205
+ this.isSaving = false;
206
+ },
207
+ });
208
+ }
209
+ /**
210
+ * Formu temizler.
211
+ */
212
+ onClear() {
213
+ this.boxBarcode = '';
214
+ this.resetLineState();
215
+ this.hasSearched = false;
216
+ this.lastSearchedBoxBarcode = '';
217
+ this.updateType = 'shelfAndOrder';
218
+ }
219
+ resetLineState() {
220
+ this.lines = [];
221
+ this.selectedLine = null;
222
+ this.newQuantity = null;
223
+ }
224
+ }
225
+ QuantityCorrectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: QuantityCorrectionComponent, deps: [{ token: i1.QuantityCorrectionService }, { token: i2.ConfirmationService }, { token: i2.ToasterService }], target: i0.ɵɵFactoryTarget.Component });
226
+ QuantityCorrectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: QuantityCorrectionComponent, selector: "lib-quantity-correction", ngImport: i0, template: "<abp-page [title]=\"'Al\u0131nacak Miktar D\u00FCzeltme'\">\n <div class=\"quantity-correction-container\">\n <div class=\"quantity-correction-layout\">\n <div class=\"qc-form-card\">\n\n <!-- Kasa Barkodu Giri\u015Fi -->\n <div class=\"form-section\">\n <label class=\"section-label\" for=\"boxBarcodeInput\">Kasa Kodu</label>\n <input type=\"text\" class=\"form-control form-input\" id=\"boxBarcodeInput\"\n [ngModel]=\"boxBarcode\"\n (ngModelChange)=\"onBoxBarcodeChange($event)\"\n (keydown.enter)=\"onBoxBarcodeEnterKeydown()\"\n (blur)=\"onBoxBarcodeBlur()\"\n placeholder=\"Kasa barkodunu girin veya taray\u0131n...\"\n [disabled]=\"isLoading\" />\n </div>\n\n <!-- Y\u00FCkleniyor -->\n <div class=\"form-section\" *ngIf=\"isLoading\">\n <div class=\"content-loading\">\n <i class=\"fa fa-spinner fa-spin\"></i> Kasa i\u00E7eri\u011Fi y\u00FCkleniyor...\n </div>\n </div>\n\n <!-- Sat\u0131r Listesi (Grid) -->\n <div class=\"form-section reservation-section\" *ngIf=\"lines.length > 0 && !isLoading\">\n <label class=\"section-label\">Kasadaki G\u00F6rev Sat\u0131rlar\u0131</label>\n <div class=\"reservation-table-wrap\">\n <table class=\"table table-bordered table-hover table-sm\">\n <thead class=\"table-header\">\n <tr>\n <th>Sipari\u015F No</th>\n <th>\u00DCr\u00FCn Kodu</th>\n <th>\u00DCr\u00FCn Ad\u0131</th>\n <th>Parti</th>\n <th>Miktar</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let l of lines\"\n (click)=\"onSelectLine(l)\"\n [class.selected-row]=\"selectedLine?.ReservationCode === l.ReservationCode\"\n class=\"clickable-row\">\n <td>{{ l.OrderDocNum }}</td>\n <td>{{ l.ItemCode }}</td>\n <td>{{ l.ItemName }}</td>\n <td>{{ l.BatchNumber }}</td>\n <td class=\"text-end\">{{ l.CurrentQuantity }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Bo\u015F sonu\u00E7 -->\n <div class=\"form-section\" *ngIf=\"hasSearched && lastSearchedBoxBarcode && lines.length === 0 && !isLoading\">\n <div class=\"content-empty\">\n <i class=\"fa fa-info-circle\"></i> Bu kasada a\u00E7\u0131k g\u00F6rev bulunamad\u0131.\n </div>\n </div>\n\n <!-- D\u00FCzenleme Paneli (Sat\u0131r se\u00E7ilince aktif) -->\n <div *ngIf=\"selectedLine\" class=\"edit-panel\">\n <hr class=\"form-divider\" />\n\n <!-- \u00DCr\u00FCn Bilgileri (readonly) -->\n <div class=\"form-section product-info\">\n <div class=\"info-row\">\n <span class=\"info-label\">\u00DCr\u00FCn Kodu:</span>\n <span class=\"info-value\">{{ selectedLine.ItemCode }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">\u00DCr\u00FCn Ad\u0131:</span>\n <span class=\"info-value\">{{ selectedLine.ItemName }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Beklenen Miktar:</span>\n <span class=\"info-value info-qty\">{{ selectedLine.CurrentQuantity }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Sipari\u015F No:</span>\n <span class=\"info-value\">{{ selectedLine.OrderDocNum }}</span>\n </div>\n </div>\n\n <hr class=\"form-divider\" />\n\n <!-- G\u00FCncelleme Tipi - Radio Buttons -->\n <div class=\"form-section\">\n <label class=\"section-label\">G\u00FCncelleme Tipi</label>\n <div class=\"radio-group\">\n <label class=\"radio-option\">\n <input type=\"radio\" name=\"updateType\"\n value=\"shelfAndOrder\"\n [(ngModel)]=\"updateType\" />\n <span class=\"radio-text\">Raf ve Sipari\u015F</span>\n </label>\n <label class=\"radio-option\">\n <input type=\"radio\" name=\"updateType\"\n value=\"orderOnly\"\n [(ngModel)]=\"updateType\" />\n <span class=\"radio-text\">Sadece Sipari\u015F</span>\n </label>\n </div>\n </div>\n\n <hr class=\"form-divider\" />\n\n <!-- Miktar -->\n <div class=\"form-section\">\n <label class=\"section-label\" for=\"newQuantityInput\">\n {{ updateType === 'orderOnly' ? 'Yeni Sipari\u015F Miktar\u0131' : 'Kasada Say\u0131lan Miktar' }}\n </label>\n <input type=\"number\" class=\"form-control form-input\" id=\"newQuantityInput\"\n [(ngModel)]=\"newQuantity\"\n (keydown.enter)=\"onUpdate()\"\n placeholder=\"Miktar\u0131 girin...\"\n min=\"0\" />\n </div>\n\n <hr class=\"form-divider\" />\n\n <!-- Butonlar -->\n <div class=\"form-section button-group\">\n <button class=\"btn btn-action-success btn-sm\" (click)=\"onUpdate()\"\n [disabled]=\"isSaving || newQuantity === null || newQuantity < 0\">\n <i class=\"fa\" [ngClass]=\"isSaving ? 'fa-spinner fa-spin' : 'fa-check'\"></i>\n {{ isSaving ? 'G\u00FCncelleniyor...' : 'G\u00FCncelle' }}\n </button>\n <button class=\"btn btn-action-outline btn-sm\" (click)=\"onClear()\" [disabled]=\"isSaving\">\n <i class=\"fa fa-eraser\"></i> Temizle\n </button>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</abp-page>\n", styles: ["lib-quantity-correction .abp-page-content{display:block!important;flex:unset!important;min-height:unset!important;height:auto!important}lib-quantity-correction .abp-page-content>.row{display:block!important;flex:unset!important;min-height:unset!important}lib-quantity-correction .abp-page-content>.row>.col,lib-quantity-correction .abp-page-content>.row>[class*=col-]{display:block!important;flex:unset!important;min-height:unset!important}.quantity-correction-container{padding:1rem}.quantity-correction-layout{max-width:800px;margin:0 auto}.qc-form-card{background:#fff;border-radius:8px;box-shadow:0 2px 8px #00000014;padding:1.5rem}.form-section{margin-bottom:1rem}.section-label{font-weight:600;font-size:.9rem;color:#333;margin-bottom:.4rem;display:block}.form-input{font-size:1rem;padding:.5rem .75rem}.content-loading{color:#666;padding:.5rem 0;font-size:.9rem}.content-empty{background:#f8f9fa;border:1px solid #e2e6ea;border-radius:6px;padding:.75rem 1rem;color:#6c757d;font-size:.9rem}.reservation-section{margin-bottom:.25rem}.reservation-table-wrap{overflow-x:auto;width:100%}.reservation-section .table{margin-bottom:0}.table-header{background-color:#f0f2f5}.table-header th{font-weight:600;font-size:.85rem;color:#444;white-space:nowrap}.clickable-row{cursor:pointer;transition:background-color .15s}.clickable-row:hover{background-color:#e9f5ff}.selected-row{background-color:#cce5ff!important;font-weight:500}.edit-panel{margin-top:0}.product-info{background:#f8f9fa;border-radius:6px;padding:.75rem 1rem}.info-row{display:flex;gap:.5rem;margin-bottom:.3rem;align-items:baseline}.info-label{font-weight:600;font-size:.85rem;color:#555;min-width:120px}.info-value{font-size:.9rem;color:#222}.info-qty{font-weight:700;color:#0d6efd}.radio-group{display:flex;gap:1.5rem}.radio-option{display:flex;align-items:center;gap:.4rem;cursor:pointer;font-size:.9rem}.radio-text{color:#333}.form-divider{border:none;border-top:1px solid #e9ecef;margin:.75rem 0}.button-group{display:flex;gap:.5rem}.btn-action-success{background-color:#28a745;border-color:#28a745;color:#fff;padding:.4rem 1.2rem;font-size:.9rem}.btn-action-success:hover:not(:disabled){background-color:#218838}.btn-action-success:disabled{opacity:.6}.btn-action-outline{background-color:transparent;border:1px solid #6c757d;color:#6c757d;padding:.4rem 1.2rem;font-size:.9rem}.btn-action-outline:hover:not(:disabled){background-color:#f8f9fa}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }], encapsulation: i0.ViewEncapsulation.None });
227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: QuantityCorrectionComponent, decorators: [{
228
+ type: Component,
229
+ args: [{ selector: 'lib-quantity-correction', encapsulation: ViewEncapsulation.None, template: "<abp-page [title]=\"'Al\u0131nacak Miktar D\u00FCzeltme'\">\n <div class=\"quantity-correction-container\">\n <div class=\"quantity-correction-layout\">\n <div class=\"qc-form-card\">\n\n <!-- Kasa Barkodu Giri\u015Fi -->\n <div class=\"form-section\">\n <label class=\"section-label\" for=\"boxBarcodeInput\">Kasa Kodu</label>\n <input type=\"text\" class=\"form-control form-input\" id=\"boxBarcodeInput\"\n [ngModel]=\"boxBarcode\"\n (ngModelChange)=\"onBoxBarcodeChange($event)\"\n (keydown.enter)=\"onBoxBarcodeEnterKeydown()\"\n (blur)=\"onBoxBarcodeBlur()\"\n placeholder=\"Kasa barkodunu girin veya taray\u0131n...\"\n [disabled]=\"isLoading\" />\n </div>\n\n <!-- Y\u00FCkleniyor -->\n <div class=\"form-section\" *ngIf=\"isLoading\">\n <div class=\"content-loading\">\n <i class=\"fa fa-spinner fa-spin\"></i> Kasa i\u00E7eri\u011Fi y\u00FCkleniyor...\n </div>\n </div>\n\n <!-- Sat\u0131r Listesi (Grid) -->\n <div class=\"form-section reservation-section\" *ngIf=\"lines.length > 0 && !isLoading\">\n <label class=\"section-label\">Kasadaki G\u00F6rev Sat\u0131rlar\u0131</label>\n <div class=\"reservation-table-wrap\">\n <table class=\"table table-bordered table-hover table-sm\">\n <thead class=\"table-header\">\n <tr>\n <th>Sipari\u015F No</th>\n <th>\u00DCr\u00FCn Kodu</th>\n <th>\u00DCr\u00FCn Ad\u0131</th>\n <th>Parti</th>\n <th>Miktar</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let l of lines\"\n (click)=\"onSelectLine(l)\"\n [class.selected-row]=\"selectedLine?.ReservationCode === l.ReservationCode\"\n class=\"clickable-row\">\n <td>{{ l.OrderDocNum }}</td>\n <td>{{ l.ItemCode }}</td>\n <td>{{ l.ItemName }}</td>\n <td>{{ l.BatchNumber }}</td>\n <td class=\"text-end\">{{ l.CurrentQuantity }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Bo\u015F sonu\u00E7 -->\n <div class=\"form-section\" *ngIf=\"hasSearched && lastSearchedBoxBarcode && lines.length === 0 && !isLoading\">\n <div class=\"content-empty\">\n <i class=\"fa fa-info-circle\"></i> Bu kasada a\u00E7\u0131k g\u00F6rev bulunamad\u0131.\n </div>\n </div>\n\n <!-- D\u00FCzenleme Paneli (Sat\u0131r se\u00E7ilince aktif) -->\n <div *ngIf=\"selectedLine\" class=\"edit-panel\">\n <hr class=\"form-divider\" />\n\n <!-- \u00DCr\u00FCn Bilgileri (readonly) -->\n <div class=\"form-section product-info\">\n <div class=\"info-row\">\n <span class=\"info-label\">\u00DCr\u00FCn Kodu:</span>\n <span class=\"info-value\">{{ selectedLine.ItemCode }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">\u00DCr\u00FCn Ad\u0131:</span>\n <span class=\"info-value\">{{ selectedLine.ItemName }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Beklenen Miktar:</span>\n <span class=\"info-value info-qty\">{{ selectedLine.CurrentQuantity }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Sipari\u015F No:</span>\n <span class=\"info-value\">{{ selectedLine.OrderDocNum }}</span>\n </div>\n </div>\n\n <hr class=\"form-divider\" />\n\n <!-- G\u00FCncelleme Tipi - Radio Buttons -->\n <div class=\"form-section\">\n <label class=\"section-label\">G\u00FCncelleme Tipi</label>\n <div class=\"radio-group\">\n <label class=\"radio-option\">\n <input type=\"radio\" name=\"updateType\"\n value=\"shelfAndOrder\"\n [(ngModel)]=\"updateType\" />\n <span class=\"radio-text\">Raf ve Sipari\u015F</span>\n </label>\n <label class=\"radio-option\">\n <input type=\"radio\" name=\"updateType\"\n value=\"orderOnly\"\n [(ngModel)]=\"updateType\" />\n <span class=\"radio-text\">Sadece Sipari\u015F</span>\n </label>\n </div>\n </div>\n\n <hr class=\"form-divider\" />\n\n <!-- Miktar -->\n <div class=\"form-section\">\n <label class=\"section-label\" for=\"newQuantityInput\">\n {{ updateType === 'orderOnly' ? 'Yeni Sipari\u015F Miktar\u0131' : 'Kasada Say\u0131lan Miktar' }}\n </label>\n <input type=\"number\" class=\"form-control form-input\" id=\"newQuantityInput\"\n [(ngModel)]=\"newQuantity\"\n (keydown.enter)=\"onUpdate()\"\n placeholder=\"Miktar\u0131 girin...\"\n min=\"0\" />\n </div>\n\n <hr class=\"form-divider\" />\n\n <!-- Butonlar -->\n <div class=\"form-section button-group\">\n <button class=\"btn btn-action-success btn-sm\" (click)=\"onUpdate()\"\n [disabled]=\"isSaving || newQuantity === null || newQuantity < 0\">\n <i class=\"fa\" [ngClass]=\"isSaving ? 'fa-spinner fa-spin' : 'fa-check'\"></i>\n {{ isSaving ? 'G\u00FCncelleniyor...' : 'G\u00FCncelle' }}\n </button>\n <button class=\"btn btn-action-outline btn-sm\" (click)=\"onClear()\" [disabled]=\"isSaving\">\n <i class=\"fa fa-eraser\"></i> Temizle\n </button>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</abp-page>\n", styles: ["lib-quantity-correction .abp-page-content{display:block!important;flex:unset!important;min-height:unset!important;height:auto!important}lib-quantity-correction .abp-page-content>.row{display:block!important;flex:unset!important;min-height:unset!important}lib-quantity-correction .abp-page-content>.row>.col,lib-quantity-correction .abp-page-content>.row>[class*=col-]{display:block!important;flex:unset!important;min-height:unset!important}.quantity-correction-container{padding:1rem}.quantity-correction-layout{max-width:800px;margin:0 auto}.qc-form-card{background:#fff;border-radius:8px;box-shadow:0 2px 8px #00000014;padding:1.5rem}.form-section{margin-bottom:1rem}.section-label{font-weight:600;font-size:.9rem;color:#333;margin-bottom:.4rem;display:block}.form-input{font-size:1rem;padding:.5rem .75rem}.content-loading{color:#666;padding:.5rem 0;font-size:.9rem}.content-empty{background:#f8f9fa;border:1px solid #e2e6ea;border-radius:6px;padding:.75rem 1rem;color:#6c757d;font-size:.9rem}.reservation-section{margin-bottom:.25rem}.reservation-table-wrap{overflow-x:auto;width:100%}.reservation-section .table{margin-bottom:0}.table-header{background-color:#f0f2f5}.table-header th{font-weight:600;font-size:.85rem;color:#444;white-space:nowrap}.clickable-row{cursor:pointer;transition:background-color .15s}.clickable-row:hover{background-color:#e9f5ff}.selected-row{background-color:#cce5ff!important;font-weight:500}.edit-panel{margin-top:0}.product-info{background:#f8f9fa;border-radius:6px;padding:.75rem 1rem}.info-row{display:flex;gap:.5rem;margin-bottom:.3rem;align-items:baseline}.info-label{font-weight:600;font-size:.85rem;color:#555;min-width:120px}.info-value{font-size:.9rem;color:#222}.info-qty{font-weight:700;color:#0d6efd}.radio-group{display:flex;gap:1.5rem}.radio-option{display:flex;align-items:center;gap:.4rem;cursor:pointer;font-size:.9rem}.radio-text{color:#333}.form-divider{border:none;border-top:1px solid #e9ecef;margin:.75rem 0}.button-group{display:flex;gap:.5rem}.btn-action-success{background-color:#28a745;border-color:#28a745;color:#fff;padding:.4rem 1.2rem;font-size:.9rem}.btn-action-success:hover:not(:disabled){background-color:#218838}.btn-action-success:disabled{opacity:.6}.btn-action-outline{background-color:transparent;border:1px solid #6c757d;color:#6c757d;padding:.4rem 1.2rem;font-size:.9rem}.btn-action-outline:hover:not(:disabled){background-color:#f8f9fa}\n"] }]
230
+ }], ctorParameters: function () { return [{ type: i1.QuantityCorrectionService }, { type: i2.ConfirmationService }, { type: i2.ToasterService }]; } });
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbnRpdHktY29ycmVjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC13YXJlaG91c2Uvc3JjL2xpYi9jb21wb25lbnRzL3F1YW50aXR5LWNvcnJlY3Rpb24vcXVhbnRpdHktY29ycmVjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC13YXJlaG91c2Uvc3JjL2xpYi9jb21wb25lbnRzL3F1YW50aXR5LWNvcnJlY3Rpb24vcXVhbnRpdHktY29ycmVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBZ0I3RCxNQUFNLE9BQU8sMkJBQTJCO0lBY3RDLFlBQ1UseUJBQW9ELEVBQ3BELG1CQUF3QyxFQUN4QyxjQUE4QjtRQUY5Qiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBaEJ4QyxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLFVBQUssR0FBNEIsRUFBRSxDQUFDO1FBQ3BDLGlCQUFZLEdBQWlDLElBQUksQ0FBQztRQUNsRCwyQkFBc0IsR0FBVyxFQUFFLENBQUM7UUFDcEMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBRXhDLGVBQVUsR0FBVyxlQUFlLENBQUMsQ0FBQywwQkFBMEI7UUFDaEUsZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO1FBRWxDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsYUFBUSxHQUFZLEtBQUssQ0FBQztJQU12QixDQUFDO0lBRUosa0JBQWtCLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV4QixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7WUFDakMsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUMvRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQy9CLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7WUFDcEMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQjtRQUNmLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixPQUFPO1NBQ1I7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTlDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7WUFDakMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGNBQWMsQ0FBQztRQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMseUJBQXlCLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO2lCQUM5RDtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixNQUFNLFlBQVksR0FDaEIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLDJDQUEyQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDekIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVksQ0FBQyxJQUEyQjtRQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDdEQsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQ3hELE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO2FBQU07WUFDTCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWU7UUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQWEsQ0FBQztRQUVoQyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUM3QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQ2hFLE9BQU87U0FDUjtRQUVELE1BQU0sR0FBRyxHQUEwQjtZQUNqQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsT0FBTyxFQUFFLENBQUM7WUFDVixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFZO1lBQzlCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDbEMsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNELElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLE1BQU0sWUFBWSxHQUNoQixLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksNENBQTRDLENBQUM7Z0JBQy9FLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLDRCQUE0QjtRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBYSxDQUFDO1FBRWhDLE1BQU0sVUFBVSxHQUFvQztZQUNsRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVztZQUNuQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUNqQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsZUFBZSxFQUFFLElBQUksQ0FBQyxXQUFZO1NBQ25DLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMseUJBQXlCLENBQUMseUJBQXlCLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzdFLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNoQixJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO3dCQUM3RixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssU0FBUyxDQUFDO3dCQUN0QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBQ2pHLENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU87aUJBQ1I7Z0JBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixNQUFNLFlBQVksR0FDaEIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLCtDQUErQyxDQUFDO2dCQUNsRixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0IsQ0FDeEIsSUFBMkIsRUFDM0IsaUJBQTBCLEVBQzFCLGtCQUEwQixFQUMxQixpQkFBeUI7UUFFekIsTUFBTSxRQUFRLEdBQWtDO1lBQzlDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ25DLGdCQUFnQixFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ2pDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsZUFBZSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQzlCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVk7WUFDbEMsaUJBQWlCLEVBQUUsaUJBQWlCO1lBQ3BDLGtCQUFrQixFQUFFLGtCQUFrQjtZQUN0QyxpQkFBaUIsRUFBRSxpQkFBaUI7U0FDckMsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDekUsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsTUFBTSxZQUFZLEdBQ2hCLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSwrQ0FBK0MsQ0FBQztnQkFDbEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUM7SUFDcEMsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQzs7d0hBNVBVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLCtEQ2hCeEMseS9MQTJJQTsyRkQzSGEsMkJBQTJCO2tCQU52QyxTQUFTOytCQUNFLHlCQUF5QixpQkFHcEIsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFF1YW50aXR5Q29ycmVjdGlvblNlcnZpY2UsXG4gIEJpblJlc2VydmF0aW9uSW5mb0R0byxcbiAgUXVhbnRpdHlDb3JyZWN0aW9uRHRvLFxuICBCb3hRdWFudGl0eUNvcnJlY3Rpb25QcmV2aWV3RHRvLFxuICBCb3hRdWFudGl0eUNvcnJlY3Rpb25BcHBseUR0byxcbn0gZnJvbSAnLi4vLi4vaGl0LXByb3h5L3F1YW50aXR5LWNvcnJlY3Rpb24vcXVhbnRpdHktY29ycmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItcXVhbnRpdHktY29ycmVjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWFudGl0eS1jb3JyZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVhbnRpdHktY29ycmVjdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBRdWFudGl0eUNvcnJlY3Rpb25Db21wb25lbnQge1xuICBib3hCYXJjb2RlOiBzdHJpbmcgPSAnJztcbiAgbGluZXM6IEJpblJlc2VydmF0aW9uSW5mb0R0b1tdID0gW107XG4gIHNlbGVjdGVkTGluZTogQmluUmVzZXJ2YXRpb25JbmZvRHRvIHwgbnVsbCA9IG51bGw7XG4gIGxhc3RTZWFyY2hlZEJveEJhcmNvZGU6IHN0cmluZyA9ICcnO1xuICBoYXNTZWFyY2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzdXBwcmVzc05leHRCbHVyU2VhcmNoOiBib29sZWFuID0gZmFsc2U7XG5cbiAgdXBkYXRlVHlwZTogc3RyaW5nID0gJ3NoZWxmQW5kT3JkZXInOyAvLyBkZWZhdWx0OiBSYWYgdmUgU2lwYXJpxZ9cbiAgbmV3UXVhbnRpdHk6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcXVhbnRpdHlDb3JyZWN0aW9uU2VydmljZTogUXVhbnRpdHlDb3JyZWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdGVyU2VydmljZTogVG9hc3RlclNlcnZpY2VcbiAgKSB7fVxuXG4gIG9uQm94QmFyY29kZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5ib3hCYXJjb2RlID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgdGhpcy5yZXNldExpbmVTdGF0ZSgpO1xuICAgICAgdGhpcy5oYXNTZWFyY2hlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5sYXN0U2VhcmNoZWRCb3hCYXJjb2RlID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGFzdFNlYXJjaGVkQm94QmFyY29kZSAmJiB2YWx1ZS50cmltKCkgIT09IHRoaXMubGFzdFNlYXJjaGVkQm94QmFyY29kZSkge1xuICAgICAgdGhpcy5yZXNldExpbmVTdGF0ZSgpO1xuICAgICAgdGhpcy5oYXNTZWFyY2hlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG9uQm94QmFyY29kZUVudGVyS2V5ZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnN1cHByZXNzTmV4dEJsdXJTZWFyY2ggPSB0cnVlO1xuICAgIHRoaXMub25Cb3hCYXJjb2RlRW50ZXIoKTtcbiAgfVxuXG4gIG9uQm94QmFyY29kZUJsdXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3VwcHJlc3NOZXh0Qmx1clNlYXJjaCkge1xuICAgICAgdGhpcy5zdXBwcmVzc05leHRCbHVyU2VhcmNoID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbkJveEJhcmNvZGVFbnRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEthc2EgYmFya29kdSBnaXJpbGlwIEVudGVyIHZleWEgYmx1ciB5YXDEsWxkxLHEn8SxbmRhIMOnYWzEscWfxLFyLlxuICAgKiBCYXJrb2RhIGfDtnJlIGHDp8SxayBnw7ZyZXYgdGFzbGHEn8SxIHNhdMSxcmxhcsSxbsSxIHnDvGtsZXIuXG4gICAqL1xuICBvbkJveEJhcmNvZGVFbnRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0cmltbWVkQmFyY29kZSA9IHRoaXMuYm94QmFyY29kZS50cmltKCk7XG5cbiAgICB0aGlzLnJlc2V0TGluZVN0YXRlKCk7XG5cbiAgICBpZiAoIXRyaW1tZWRCYXJjb2RlKSB7XG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmxhc3RTZWFyY2hlZEJveEJhcmNvZGUgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmxhc3RTZWFyY2hlZEJveEJhcmNvZGUgPSB0cmltbWVkQmFyY29kZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5xdWFudGl0eUNvcnJlY3Rpb25TZXJ2aWNlLmdldExpbmVzQnlCb3hCYXJjb2RlKHRyaW1tZWRCYXJjb2RlKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5saW5lcyA9IGRhdGEgfHwgW107XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmxpbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignQnUga2FzYWRhIGHDp8SxayBnw7ZyZXYgYnVsdW5hbWFkxLEuJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgZXJyb3I/LmVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCAnS2FzYSBpw6dlcmnEn2kgecO8a2xlbmlya2VuIGJpciBoYXRhIG9sdcWfdHUuJztcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmlkJ2RlbiBzYXTEsXIgc2XDp2lsZGnEn2luZGUgw6dhbMSxxZ/EsXIuXG4gICAqL1xuICBvblNlbGVjdExpbmUobGluZTogQmluUmVzZXJ2YXRpb25JbmZvRHRvKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZExpbmUgPSBsaW5lO1xuICAgIHRoaXMubmV3UXVhbnRpdHkgPSBsaW5lLkN1cnJlbnRRdWFudGl0eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHw7xuY2VsbGUgYnV0b251bmEgYmFzxLFsZMSxxJ/EsW5kYSBzZcOnaWxpIG1vZGEgZ8O2cmUgbWlrdGFyIGTDvHplbHRtZSBha8SxxZ/EsW7EsSBiYcWfbGF0xLFyLlxuICAgKi9cbiAgb25VcGRhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkTGluZSkge1xuICAgICAgdGhpcy50b2FzdGVyU2VydmljZS53YXJuKCdMw7x0ZmVuIGJpciBzYXTEsXIgc2XDp2luaXouJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm5ld1F1YW50aXR5ID09PSBudWxsIHx8IHRoaXMubmV3UXVhbnRpdHkgPCAwKSB7XG4gICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oJ0dlw6dlcmxpIGJpciBtaWt0YXIgZ2lyaW5pei4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy51cGRhdGVUeXBlID09PSAnb3JkZXJPbmx5Jykge1xuICAgICAgdGhpcy51cGRhdGVPcmRlck9ubHkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmV2aWV3QW5kQXBwbHlTaGVsZkFuZE9yZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFwiU2FkZWNlIFNpcGFyacWfXCI6IHN0b2sgaGFyZWtldGkgeW9rLCBzaXBhcmnFnyBpcHRhbGkvbWlrdGFyIGRlxJ9pxZ9pa2xpxJ9pIHNlbmFyeW9zdS5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlT3JkZXJPbmx5KCk6IHZvaWQge1xuICAgIGNvbnN0IGxpbmUgPSB0aGlzLnNlbGVjdGVkTGluZSE7XG5cbiAgICBpZiAodGhpcy5uZXdRdWFudGl0eSA9PT0gbGluZS5DdXJyZW50UXVhbnRpdHkpIHtcbiAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignWWVuaSBtaWt0YXIgbWV2Y3V0IG1pa3RhciBpbGUgYXluxLEuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZHRvOiBRdWFudGl0eUNvcnJlY3Rpb25EdG8gPSB7XG4gICAgICBJdHJEb2NFbnRyeTogbGluZS5JdHJEb2NFbnRyeSxcbiAgICAgIEl0ckxpbmVOdW06IGxpbmUuSXRyTGluZU51bSxcbiAgICAgIFJlc2VydmF0aW9uQ29kZTogbGluZS5SZXNlcnZhdGlvbkNvZGUsXG4gICAgICBPcmRlckRvY0VudHJ5OiBsaW5lLk9yZGVyRG9jRW50cnksXG4gICAgICBMaW5lTnVtOiAwLCAvLyBCYWNrZW5kIHNpcGFyacWfdGVuIG90b21hdGlrIGJ1bGFjYWtcbiAgICAgIEl0ZW1Db2RlOiBsaW5lLkl0ZW1Db2RlLFxuICAgICAgTmV3UXVhbnRpdHk6IHRoaXMubmV3UXVhbnRpdHkhLFxuICAgICAgVXBkYXRlVHlwZTogdGhpcy51cGRhdGVUeXBlLFxuICAgICAgQmluQWJzOiBsaW5lLkJpbkFicyxcbiAgICAgIEJpbkNvZGU6IGxpbmUuQmluQ29kZSxcbiAgICAgIEJhdGNoTnVtYmVyOiBsaW5lLkJhdGNoTnVtYmVyLFxuICAgICAgV2FyZWhvdXNlQ29kZTogbGluZS5XYXJlaG91c2VDb2RlLFxuICAgIH07XG5cbiAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnF1YW50aXR5Q29ycmVjdGlvblNlcnZpY2UudXBkYXRlUXVhbnRpdHkoZHRvKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0KTtcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQm94QmFyY29kZUVudGVyKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgIGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ01pa3RhciBkw7x6ZWx0bWUgc8SxcmFzxLFuZGEgYmlyIGhhdGEgb2x1xZ90dS4nO1xuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogXCJSYWYgdmUgU2lwYXJpxZ9cIjoga2FzYWRhIGZpaWxlbiBzYXnEsWxhbiBtaWt0YXIgZmFya2zEsXlzYSBEdW1teSBLYXNhIC8gw6dhcHJheiBrYXNhIGtlc2luIGFsZ29yaXRtYXPEsS5cbiAgICogw5ZuY2Ugw7ZuaXpsZW1lIHlhcMSxbMSxcjsgw6dhcHJheiBrYXNhIMO2bmVyaXNpIHZhcnNhIGt1bGxhbsSxY8SxeWEgb25heSBwZW5jZXJlc2kgZ8O2c3RlcmlsaXIuXG4gICAqL1xuICBwcml2YXRlIHByZXZpZXdBbmRBcHBseVNoZWxmQW5kT3JkZXIoKTogdm9pZCB7XG4gICAgY29uc3QgbGluZSA9IHRoaXMuc2VsZWN0ZWRMaW5lITtcblxuICAgIGNvbnN0IHByZXZpZXdEdG86IEJveFF1YW50aXR5Q29ycmVjdGlvblByZXZpZXdEdG8gPSB7XG4gICAgICBUYXNrRHJhZnREb2NFbnRyeTogbGluZS5JdHJEb2NFbnRyeSxcbiAgICAgIFRhc2tEcmFmdExpbmVOdW06IGxpbmUuSXRyTGluZU51bSxcbiAgICAgIEJpbkFiczogbGluZS5CaW5BYnMsXG4gICAgICBCaW5Db2RlOiBsaW5lLkJpbkNvZGUsXG4gICAgICBJdGVtQ29kZTogbGluZS5JdGVtQ29kZSxcbiAgICAgIFdhcmVob3VzZUNvZGU6IGxpbmUuV2FyZWhvdXNlQ29kZSxcbiAgICAgIENvdW50ZWRRdWFudGl0eTogdGhpcy5uZXdRdWFudGl0eSEsXG4gICAgfTtcblxuICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xuICAgIHRoaXMucXVhbnRpdHlDb3JyZWN0aW9uU2VydmljZS5wcmV2aWV3UXVhbnRpdHlDb3JyZWN0aW9uKHByZXZpZXdEdG8pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocHJldmlldykgPT4ge1xuICAgICAgICBpZiAocHJldmlldy5SZXF1aXJlc0NvbmZpcm1hdGlvbikge1xuICAgICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2Uud2FybihwcmV2aWV3LkNvbmZpcm1hdGlvbk1lc3NhZ2UsICfDh2FwcmF6IEthc2EnKS5zdWJzY3JpYmUoKHN0YXR1cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWNjZXB0ZWQgPSBzdGF0dXMgPT09ICdjb25maXJtJztcbiAgICAgICAgICAgIHRoaXMuYXBwbHlTaGVsZkFuZE9yZGVyKGxpbmUsIGFjY2VwdGVkLCBwcmV2aWV3LlJlcGxhY2VtZW50QmluQ29kZSwgcHJldmlldy5SZXBsYWNlbWVudEJpbkFicyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hcHBseVNoZWxmQW5kT3JkZXIobGluZSwgZmFsc2UsICcnLCAwKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgZXJyb3I/LmVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCAnS2FzYSBkw7x6ZWx0bWVzaSDDtm5pemxlbmlya2VuIGJpciBoYXRhIG9sdcWfdHUuJztcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNoZWxmQW5kT3JkZXIoXG4gICAgbGluZTogQmluUmVzZXJ2YXRpb25JbmZvRHRvLFxuICAgIHVzZVJlcGxhY2VtZW50Qm94OiBib29sZWFuLFxuICAgIHJlcGxhY2VtZW50QmluQ29kZTogc3RyaW5nLFxuICAgIHJlcGxhY2VtZW50QmluQWJzOiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgYXBwbHlEdG86IEJveFF1YW50aXR5Q29ycmVjdGlvbkFwcGx5RHRvID0ge1xuICAgICAgVGFza0RyYWZ0RG9jRW50cnk6IGxpbmUuSXRyRG9jRW50cnksXG4gICAgICBUYXNrRHJhZnRMaW5lTnVtOiBsaW5lLkl0ckxpbmVOdW0sXG4gICAgICBCaW5BYnM6IGxpbmUuQmluQWJzLFxuICAgICAgQmluQ29kZTogbGluZS5CaW5Db2RlLFxuICAgICAgT3JkZXJEb2NFbnRyeTogbGluZS5PcmRlckRvY0VudHJ5LFxuICAgICAgT3JkZXJEb2NOdW06IGxpbmUuT3JkZXJEb2NOdW0sXG4gICAgICBJdGVtQ29kZTogbGluZS5JdGVtQ29kZSxcbiAgICAgIEl0ZW1EZXNjcmlwdGlvbjogbGluZS5JdGVtTmFtZSxcbiAgICAgIFdhcmVob3VzZUNvZGU6IGxpbmUuV2FyZWhvdXNlQ29kZSxcbiAgICAgIENvdW50ZWRRdWFudGl0eTogdGhpcy5uZXdRdWFudGl0eSEsXG4gICAgICBVc2VSZXBsYWNlbWVudEJveDogdXNlUmVwbGFjZW1lbnRCb3gsXG4gICAgICBSZXBsYWNlbWVudEJpbkNvZGU6IHJlcGxhY2VtZW50QmluQ29kZSxcbiAgICAgIFJlcGxhY2VtZW50QmluQWJzOiByZXBsYWNlbWVudEJpbkFicyxcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XG4gICAgdGhpcy5xdWFudGl0eUNvcnJlY3Rpb25TZXJ2aWNlLmFwcGx5UXVhbnRpdHlDb3JyZWN0aW9uKGFwcGx5RHRvKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0KTtcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQm94QmFyY29kZUVudGVyKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgIGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0thc2EgZMO8emVsdG1lc2kgdXlndWxhbsSxcmtlbiBiaXIgaGF0YSBvbHXFn3R1Lic7XG4gICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtdSB0ZW1pemxlci5cbiAgICovXG4gIG9uQ2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5ib3hCYXJjb2RlID0gJyc7XG4gICAgdGhpcy5yZXNldExpbmVTdGF0ZSgpO1xuICAgIHRoaXMuaGFzU2VhcmNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxhc3RTZWFyY2hlZEJveEJhcmNvZGUgPSAnJztcbiAgICB0aGlzLnVwZGF0ZVR5cGUgPSAnc2hlbGZBbmRPcmRlcic7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0TGluZVN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMubGluZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkTGluZSA9IG51bGw7XG4gICAgdGhpcy5uZXdRdWFudGl0eSA9IG51bGw7XG4gIH1cbn1cbiIsIjxhYnAtcGFnZSBbdGl0bGVdPVwiJ0FsxLFuYWNhayBNaWt0YXIgRMO8emVsdG1lJ1wiPlxuICA8ZGl2IGNsYXNzPVwicXVhbnRpdHktY29ycmVjdGlvbi1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicXVhbnRpdHktY29ycmVjdGlvbi1sYXlvdXRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJxYy1mb3JtLWNhcmRcIj5cblxuICAgICAgICA8IS0tIEthc2EgQmFya29kdSBHaXJpxZ9pIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic2VjdGlvbi1sYWJlbFwiIGZvcj1cImJveEJhcmNvZGVJbnB1dFwiPkthc2EgS29kdTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1pbnB1dFwiIGlkPVwiYm94QmFyY29kZUlucHV0XCJcbiAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiYm94QmFyY29kZVwiXG4gICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQm94QmFyY29kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uQm94QmFyY29kZUVudGVyS2V5ZG93bigpXCJcbiAgICAgICAgICAgICAgIChibHVyKT1cIm9uQm94QmFyY29kZUJsdXIoKVwiXG4gICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiS2FzYSBiYXJrb2R1bnUgZ2lyaW4gdmV5YSB0YXJhecSxbi4uLlwiXG4gICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIiAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFnDvGtsZW5peW9yIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1zZWN0aW9uXCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1sb2FkaW5nXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNwaW5uZXIgZmEtc3BpblwiPjwvaT4gS2FzYSBpw6dlcmnEn2kgecO8a2xlbml5b3IuLi5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBTYXTEsXIgTGlzdGVzaSAoR3JpZCkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlY3Rpb24gcmVzZXJ2YXRpb24tc2VjdGlvblwiICpuZ0lmPVwibGluZXMubGVuZ3RoID4gMCAmJiAhaXNMb2FkaW5nXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic2VjdGlvbi1sYWJlbFwiPkthc2FkYWtpIEfDtnJldiBTYXTEsXJsYXLEsTwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2VydmF0aW9uLXRhYmxlLXdyYXBcIj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCI+XG4gICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cInRhYmxlLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0aD5TaXBhcmnFnyBObzwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGg+w5xyw7xuIEtvZHU8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPsOccsO8biBBZMSxPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5QYXJ0aTwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGg+TWlrdGFyPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBsIG9mIGxpbmVzXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0TGluZShsKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZC1yb3ddPVwic2VsZWN0ZWRMaW5lPy5SZXNlcnZhdGlvbkNvZGUgPT09IGwuUmVzZXJ2YXRpb25Db2RlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbGlja2FibGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICA8dGQ+e3sgbC5PcmRlckRvY051bSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8dGQ+e3sgbC5JdGVtQ29kZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8dGQ+e3sgbC5JdGVtTmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8dGQ+e3sgbC5CYXRjaE51bWJlciB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWVuZFwiPnt7IGwuQ3VycmVudFF1YW50aXR5IH19PC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBCb8WfIHNvbnXDpyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VjdGlvblwiICpuZ0lmPVwiaGFzU2VhcmNoZWQgJiYgbGFzdFNlYXJjaGVkQm94QmFyY29kZSAmJiBsaW5lcy5sZW5ndGggPT09IDAgJiYgIWlzTG9hZGluZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWVtcHR5XCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiBCdSBrYXNhZGEgYcOnxLFrIGfDtnJldiBidWx1bmFtYWTEsS5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBEw7x6ZW5sZW1lIFBhbmVsaSAoU2F0xLFyIHNlw6dpbGluY2UgYWt0aWYpIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRMaW5lXCIgY2xhc3M9XCJlZGl0LXBhbmVsXCI+XG4gICAgICAgICAgPGhyIGNsYXNzPVwiZm9ybS1kaXZpZGVyXCIgLz5cblxuICAgICAgICAgIDwhLS0gw5xyw7xuIEJpbGdpbGVyaSAocmVhZG9ubHkpIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlY3Rpb24gcHJvZHVjdC1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWxhYmVsXCI+w5xyw7xuIEtvZHU6PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tdmFsdWVcIj57eyBzZWxlY3RlZExpbmUuSXRlbUNvZGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tbGFiZWxcIj7DnHLDvG4gQWTEsTo8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby12YWx1ZVwiPnt7IHNlbGVjdGVkTGluZS5JdGVtTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1sYWJlbFwiPkJla2xlbmVuIE1pa3Rhcjo8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby12YWx1ZSBpbmZvLXF0eVwiPnt7IHNlbGVjdGVkTGluZS5DdXJyZW50UXVhbnRpdHkgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tbGFiZWxcIj5TaXBhcmnFnyBObzo8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby12YWx1ZVwiPnt7IHNlbGVjdGVkTGluZS5PcmRlckRvY051bSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGhyIGNsYXNzPVwiZm9ybS1kaXZpZGVyXCIgLz5cblxuICAgICAgICAgIDwhLS0gR8O8bmNlbGxlbWUgVGlwaSAtIFJhZGlvIEJ1dHRvbnMgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VjdGlvblwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic2VjdGlvbi1sYWJlbFwiPkfDvG5jZWxsZW1lIFRpcGk8L2xhYmVsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvLW9wdGlvblwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwidXBkYXRlVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwic2hlbGZBbmRPcmRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXBkYXRlVHlwZVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYWRpby10ZXh0XCI+UmFmIHZlIFNpcGFyacWfPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpby1vcHRpb25cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInVwZGF0ZVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIm9yZGVyT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXBkYXRlVHlwZVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYWRpby10ZXh0XCI+U2FkZWNlIFNpcGFyacWfPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8aHIgY2xhc3M9XCJmb3JtLWRpdmlkZXJcIiAvPlxuXG4gICAgICAgICAgPCEtLSBNaWt0YXIgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VjdGlvblwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic2VjdGlvbi1sYWJlbFwiIGZvcj1cIm5ld1F1YW50aXR5SW5wdXRcIj5cbiAgICAgICAgICAgICAge3sgdXBkYXRlVHlwZSA9PT0gJ29yZGVyT25seScgPyAnWWVuaSBTaXBhcmnFnyBNaWt0YXLEsScgOiAnS2FzYWRhIFNhecSxbGFuIE1pa3RhcicgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0taW5wdXRcIiBpZD1cIm5ld1F1YW50aXR5SW5wdXRcIlxuICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3UXVhbnRpdHlcIlxuICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uVXBkYXRlKClcIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTWlrdGFyxLEgZ2lyaW4uLi5cIlxuICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGhyIGNsYXNzPVwiZm9ybS1kaXZpZGVyXCIgLz5cblxuICAgICAgICAgIDwhLS0gQnV0b25sYXIgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VjdGlvbiBidXR0b24tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1zdWNjZXNzIGJ0bi1zbVwiIChjbGljayk9XCJvblVwZGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzU2F2aW5nIHx8IG5ld1F1YW50aXR5ID09PSBudWxsIHx8IG5ld1F1YW50aXR5IDwgMFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhXCIgW25nQ2xhc3NdPVwiaXNTYXZpbmcgPyAnZmEtc3Bpbm5lciBmYS1zcGluJyA6ICdmYS1jaGVjaydcIj48L2k+XG4gICAgICAgICAgICAgIHt7IGlzU2F2aW5nID8gJ0fDvG5jZWxsZW5peW9yLi4uJyA6ICdHw7xuY2VsbGUnIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1vdXRsaW5lIGJ0bi1zbVwiIChjbGljayk9XCJvbkNsZWFyKClcIiBbZGlzYWJsZWRdPVwiaXNTYXZpbmdcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lcmFzZXJcIj48L2k+IFRlbWl6bGVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9hYnAtcGFnZT5cbiJdfQ==
@@ -0,0 +1,41 @@
1
+ import { CoreModule } from '@abp/ng.core';
2
+ import { ThemeSharedModule } from '@abp/ng.theme.shared';
3
+ import { NgModule } from '@angular/core';
4
+ import { FormsModule } from '@angular/forms';
5
+ import { RouterModule } from '@angular/router';
6
+ import { NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
7
+ import { NgxValidateCoreModule } from '@ngx-validate/core';
8
+ import { CommercialUiModule } from '@volo/abp.commercial.ng.ui';
9
+ import { PageModule } from '@abp/ng.components/page';
10
+ import { QuantityCorrectionComponent } from './quantity-correction.component';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/router";
13
+ const routes = [
14
+ { path: '', component: QuantityCorrectionComponent },
15
+ ];
16
+ export class QuantityCorrectionModule {
17
+ }
18
+ QuantityCorrectionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: QuantityCorrectionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
19
+ QuantityCorrectionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: QuantityCorrectionModule, declarations: [QuantityCorrectionComponent], imports: [CoreModule, ThemeSharedModule, FormsModule, CommercialUiModule,
20
+ NgxValidateCoreModule, NgbCollapseModule, NgbDatepickerModule,
21
+ NgbDropdownModule, PageModule, i1.RouterModule] });
22
+ QuantityCorrectionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: QuantityCorrectionModule, imports: [CoreModule, ThemeSharedModule, FormsModule, CommercialUiModule,
23
+ NgxValidateCoreModule, NgbCollapseModule, NgbDatepickerModule,
24
+ NgbDropdownModule, PageModule,
25
+ RouterModule.forChild(routes)] });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: QuantityCorrectionModule, decorators: [{
27
+ type: NgModule,
28
+ args: [{
29
+ declarations: [QuantityCorrectionComponent],
30
+ imports: [
31
+ CoreModule, ThemeSharedModule, FormsModule, CommercialUiModule,
32
+ NgxValidateCoreModule, NgbCollapseModule, NgbDatepickerModule,
33
+ NgbDropdownModule, PageModule,
34
+ RouterModule.forChild(routes),
35
+ ],
36
+ }]
37
+ }] });
38
+ export function loadQuantityCorrectionModuleAsChild() {
39
+ return Promise.resolve(QuantityCorrectionModule);
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbnRpdHktY29ycmVjdGlvbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC13YXJlaG91c2Uvc3JjL2xpYi9jb21wb25lbnRzL3F1YW50aXR5LWNvcnJlY3Rpb24vcXVhbnRpdHktY29ycmVjdGlvbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFFOUUsTUFBTSxNQUFNLEdBQVc7SUFDbkIsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRTtDQUN2RCxDQUFDO0FBV0YsTUFBTSxPQUFPLHdCQUF3Qjs7cUhBQXhCLHdCQUF3QjtzSEFBeEIsd0JBQXdCLGlCQVJsQiwyQkFBMkIsYUFFdEMsVUFBVSxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxrQkFBa0I7UUFDOUQscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CO1FBQzdELGlCQUFpQixFQUFFLFVBQVU7c0hBSXhCLHdCQUF3QixZQU43QixVQUFVLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQjtRQUM5RCxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUI7UUFDN0QsaUJBQWlCLEVBQUUsVUFBVTtRQUM3QixZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzsyRkFHeEIsd0JBQXdCO2tCQVRwQyxRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLDJCQUEyQixDQUFDO29CQUMzQyxPQUFPLEVBQUU7d0JBQ0wsVUFBVSxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxrQkFBa0I7d0JBQzlELHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLG1CQUFtQjt3QkFDN0QsaUJBQWlCLEVBQUUsVUFBVTt3QkFDN0IsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7cUJBQ2hDO2lCQUNKOztBQUdELE1BQU0sVUFBVSxtQ0FBbUM7SUFDL0MsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvcmVNb2R1bGUgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBUaGVtZVNoYXJlZE1vZHVsZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSwgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTmdiQ29sbGFwc2VNb2R1bGUsIE5nYkRhdGVwaWNrZXJNb2R1bGUsIE5nYkRyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBOZ3hWYWxpZGF0ZUNvcmVNb2R1bGUgfSBmcm9tICdAbmd4LXZhbGlkYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tZXJjaWFsVWlNb2R1bGUgfSBmcm9tICdAdm9sby9hYnAuY29tbWVyY2lhbC5uZy51aSc7XHJcbmltcG9ydCB7IFBhZ2VNb2R1bGUgfSBmcm9tICdAYWJwL25nLmNvbXBvbmVudHMvcGFnZSc7XHJcbmltcG9ydCB7IFF1YW50aXR5Q29ycmVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vcXVhbnRpdHktY29ycmVjdGlvbi5jb21wb25lbnQnO1xyXG5cclxuY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXHJcbiAgICB7IHBhdGg6ICcnLCBjb21wb25lbnQ6IFF1YW50aXR5Q29ycmVjdGlvbkNvbXBvbmVudCB9LFxyXG5dO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1F1YW50aXR5Q29ycmVjdGlvbkNvbXBvbmVudF0sXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29yZU1vZHVsZSwgVGhlbWVTaGFyZWRNb2R1bGUsIEZvcm1zTW9kdWxlLCBDb21tZXJjaWFsVWlNb2R1bGUsXHJcbiAgICAgICAgTmd4VmFsaWRhdGVDb3JlTW9kdWxlLCBOZ2JDb2xsYXBzZU1vZHVsZSwgTmdiRGF0ZXBpY2tlck1vZHVsZSxcclxuICAgICAgICBOZ2JEcm9wZG93bk1vZHVsZSwgUGFnZU1vZHVsZSxcclxuICAgICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQocm91dGVzKSxcclxuICAgIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWFudGl0eUNvcnJlY3Rpb25Nb2R1bGUge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUXVhbnRpdHlDb3JyZWN0aW9uTW9kdWxlQXNDaGlsZCgpIHtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoUXVhbnRpdHlDb3JyZWN0aW9uTW9kdWxlKTtcclxufVxyXG4iXX0=