@hitsoft/kadooglu.kalite 0.0.0-stage → 1.0.2

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 (62) hide show
  1. package/README.md +23 -2
  2. package/config/enums/index.d.ts +1 -0
  3. package/config/enums/route-names.d.ts +5 -0
  4. package/config/index.d.ts +5 -0
  5. package/config/kalite-config.module.d.ts +8 -0
  6. package/config/providers/index.d.ts +1 -0
  7. package/config/providers/route.provider.d.ts +4 -0
  8. package/config/public-api.d.ts +3 -0
  9. package/esm2020/config/enums/index.mjs +2 -0
  10. package/esm2020/config/enums/route-names.mjs +2 -0
  11. package/esm2020/config/hitsoft-kadooglu.kalite-config.mjs +5 -0
  12. package/esm2020/config/kalite-config.module.mjs +18 -0
  13. package/esm2020/config/providers/index.mjs +2 -0
  14. package/esm2020/config/providers/route.provider.mjs +57 -0
  15. package/esm2020/config/public-api.mjs +4 -0
  16. package/esm2020/hitsoft-kadooglu.kalite.mjs +5 -0
  17. package/esm2020/lib/components/intake-form.component.mjs +162 -0
  18. package/esm2020/lib/components/intake-list.component.mjs +80 -0
  19. package/esm2020/lib/components/kalite.component.mjs +18 -0
  20. package/esm2020/lib/components/process-analysis.component.mjs +197 -0
  21. package/esm2020/lib/components/quality-definitions.component.mjs +97 -0
  22. package/esm2020/lib/components/quality-notifications.component.mjs +64 -0
  23. package/esm2020/lib/components/quality-parameters.component.mjs +332 -0
  24. package/esm2020/lib/components/quality-reports.component.mjs +107 -0
  25. package/esm2020/lib/kalite-notification.module.mjs +23 -0
  26. package/esm2020/lib/kalite-routing.module.mjs +41 -0
  27. package/esm2020/lib/kalite.module.mjs +41 -0
  28. package/esm2020/lib/models/intake.models.mjs +2 -0
  29. package/esm2020/lib/models/quality.models.mjs +2 -0
  30. package/esm2020/lib/services/kalite.service.mjs +21 -0
  31. package/esm2020/lib/services/print-form.mjs +96 -0
  32. package/esm2020/lib/services/quality-api.service.mjs +119 -0
  33. package/esm2020/lib/services/quality-measurements.mjs +127 -0
  34. package/esm2020/public-api.mjs +16 -0
  35. package/fesm2015/hitsoft-kadooglu.kalite-config.mjs +80 -0
  36. package/fesm2015/hitsoft-kadooglu.kalite-config.mjs.map +1 -0
  37. package/fesm2015/hitsoft-kadooglu.kalite.mjs +1483 -0
  38. package/fesm2015/hitsoft-kadooglu.kalite.mjs.map +1 -0
  39. package/fesm2020/hitsoft-kadooglu.kalite-config.mjs +80 -0
  40. package/fesm2020/hitsoft-kadooglu.kalite-config.mjs.map +1 -0
  41. package/fesm2020/hitsoft-kadooglu.kalite.mjs +1442 -0
  42. package/fesm2020/hitsoft-kadooglu.kalite.mjs.map +1 -0
  43. package/index.d.ts +5 -0
  44. package/lib/components/intake-form.component.d.ts +50 -0
  45. package/lib/components/intake-list.component.d.ts +48 -0
  46. package/lib/components/kalite.component.d.ts +10 -0
  47. package/lib/components/process-analysis.component.d.ts +46 -0
  48. package/lib/components/quality-definitions.component.d.ts +46 -0
  49. package/lib/components/quality-notifications.component.d.ts +44 -0
  50. package/lib/components/quality-parameters.component.d.ts +82 -0
  51. package/lib/components/quality-reports.component.d.ts +31 -0
  52. package/lib/kalite-notification.module.d.ts +14 -0
  53. package/lib/kalite-routing.module.d.ts +7 -0
  54. package/lib/kalite.module.d.ts +23 -0
  55. package/lib/models/intake.models.d.ts +185 -0
  56. package/lib/models/quality.models.d.ts +114 -0
  57. package/lib/services/kalite.service.d.ts +10 -0
  58. package/lib/services/print-form.d.ts +2 -0
  59. package/lib/services/quality-api.service.d.ts +71 -0
  60. package/lib/services/quality-measurements.d.ts +8 -0
  61. package/package.json +42 -3
  62. package/public-api.d.ts +12 -0
package/README.md CHANGED
@@ -1,3 +1,24 @@
1
- # Temporary Holding Version
1
+ # Kalite
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.0.4.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project kalite` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project kalite`.
8
+ > Note: Don't forget to add `--project kalite` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build kalite` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build kalite`, go to the dist folder `cd dist/kalite` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test kalite` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1 @@
1
+ export * from './route-names';
@@ -0,0 +1,5 @@
1
+ export declare const enum eKaliteRouteNames {
2
+ Kalite = "Kalite::Menu:Kalite",
3
+ ProcessAnalysis = "Kalite::Menu:ProcessAnalysis",
4
+ Parameters = "Kalite::Menu:Parameters"
5
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@hitsoft/kadooglu.kalite/config" />
5
+ export * from './public-api';
@@ -0,0 +1,8 @@
1
+ import { ModuleWithProviders } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class KaliteConfigModule {
4
+ static forRoot(): ModuleWithProviders<KaliteConfigModule>;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<KaliteConfigModule, never>;
6
+ static ɵmod: i0.ɵɵNgModuleDeclaration<KaliteConfigModule, never, never, never>;
7
+ static ɵinj: i0.ɵɵInjectorDeclaration<KaliteConfigModule>;
8
+ }
@@ -0,0 +1 @@
1
+ export * from './route.provider';
@@ -0,0 +1,4 @@
1
+ import { RoutesService } from '@abp/ng.core';
2
+ import { Provider } from '@angular/core';
3
+ export declare const KALITE_ROUTE_PROVIDERS: Provider[];
4
+ export declare function configureRoutes(routes: RoutesService): () => void;
@@ -0,0 +1,3 @@
1
+ export * from './enums';
2
+ export * from './kalite-config.module';
3
+ export * from './providers';
@@ -0,0 +1,2 @@
1
+ export * from './route-names';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvY29uZmlnL3NyYy9lbnVtcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcm91dGUtbmFtZXMnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtbmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvY29uZmlnL3NyYy9lbnVtcy9yb3V0ZS1uYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVudW0gZUthbGl0ZVJvdXRlTmFtZXMge1xuICBLYWxpdGUgPSAnS2FsaXRlOjpNZW51OkthbGl0ZScsXG4gIFByb2Nlc3NBbmFseXNpcyA9ICdLYWxpdGU6Ok1lbnU6UHJvY2Vzc0FuYWx5c2lzJyxcbiAgUGFyYW1ldGVycyA9ICdLYWxpdGU6Ok1lbnU6UGFyYW1ldGVycycsXG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0c29mdC1rYWRvb2dsdS5rYWxpdGUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMva2FsaXRlL2NvbmZpZy9zcmMvaGl0c29mdC1rYWRvb2dsdS5rYWxpdGUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { KALITE_ROUTE_PROVIDERS } from './providers/route.provider';
3
+ import * as i0 from "@angular/core";
4
+ export class KaliteConfigModule {
5
+ static forRoot() {
6
+ return {
7
+ ngModule: KaliteConfigModule,
8
+ providers: [KALITE_ROUTE_PROVIDERS],
9
+ };
10
+ }
11
+ }
12
+ KaliteConfigModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: KaliteConfigModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
+ KaliteConfigModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: KaliteConfigModule });
14
+ KaliteConfigModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: KaliteConfigModule });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: KaliteConfigModule, decorators: [{
16
+ type: NgModule
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FsaXRlLWNvbmZpZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvY29uZmlnL3NyYy9rYWxpdGUtY29uZmlnLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFHcEUsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixNQUFNLENBQUMsT0FBTztRQUNaLE9BQU87WUFDTCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO1NBQ3BDLENBQUM7SUFDSixDQUFDOzsrR0FOVSxrQkFBa0I7Z0hBQWxCLGtCQUFrQjtnSEFBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgS0FMSVRFX1JPVVRFX1BST1ZJREVSUyB9IGZyb20gJy4vcHJvdmlkZXJzL3JvdXRlLnByb3ZpZGVyJztcblxuQE5nTW9kdWxlKClcbmV4cG9ydCBjbGFzcyBLYWxpdGVDb25maWdNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEthbGl0ZUNvbmZpZ01vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogS2FsaXRlQ29uZmlnTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbS0FMSVRFX1JPVVRFX1BST1ZJREVSU10sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './route.provider';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvY29uZmlnL3NyYy9wcm92aWRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcm91dGUucHJvdmlkZXInO1xuIl19
@@ -0,0 +1,57 @@
1
+ import { RoutesService } from '@abp/ng.core';
2
+ import { APP_INITIALIZER } from '@angular/core';
3
+ export const KALITE_ROUTE_PROVIDERS = [
4
+ {
5
+ provide: APP_INITIALIZER,
6
+ useFactory: configureRoutes,
7
+ deps: [RoutesService],
8
+ multi: true,
9
+ },
10
+ ];
11
+ export function configureRoutes(routes) {
12
+ return () => {
13
+ routes.add([
14
+ {
15
+ path: '/kalite',
16
+ name: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */,
17
+ iconClass: 'fas fa-flask',
18
+ layout: "application" /* eLayoutType.application */,
19
+ order: 3,
20
+ requiredPolicy: 'Hitsoft.Kadooglu.Kalite.ProcessAnalysis || Hitsoft.Kadooglu.Kalite.Parameters || Hitsoft.Kadooglu.Kalite.Definitions || Hitsoft.Kadooglu.Kalite.Reports || Hitsoft.Kadooglu.Kalite.Notifications.Configure',
21
+ },
22
+ {
23
+ path: '/kalite/process-analysis',
24
+ parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */,
25
+ name: "Kalite::Menu:ProcessAnalysis" /* eKaliteRouteNames.ProcessAnalysis */,
26
+ layout: "application" /* eLayoutType.application */,
27
+ order: 1,
28
+ requiredPolicy: 'Hitsoft.Kadooglu.Kalite.ProcessAnalysis',
29
+ },
30
+ {
31
+ path: '/kalite/parameters',
32
+ parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */,
33
+ name: "Kalite::Menu:Parameters" /* eKaliteRouteNames.Parameters */,
34
+ layout: "application" /* eLayoutType.application */,
35
+ order: 2,
36
+ requiredPolicy: 'Hitsoft.Kadooglu.Kalite.Parameters',
37
+ },
38
+ {
39
+ path: '/kalite/intake',
40
+ parentName: 'KadoogluTartim::Menu:KadoogluTartim',
41
+ name: 'Kalite::Menu:Intake', layout: "application" /* eLayoutType.application */,
42
+ order: 4, requiredPolicy: 'Hitsoft.Kadooglu.Kalite.Intake',
43
+ },
44
+ { path: '/kalite/definitions', parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */, name: 'Kalite::Menu:Definitions',
45
+ layout: "application" /* eLayoutType.application */, order: 3, requiredPolicy: 'Hitsoft.Kadooglu.Kalite.Definitions' },
46
+ { path: '/kalite/reports/input', parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */, name: 'Kalite::Menu:InputReports',
47
+ layout: "application" /* eLayoutType.application */, order: 4, requiredPolicy: 'Hitsoft.Kadooglu.Kalite.Reports' },
48
+ { path: '/kalite/reports/process', parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */, name: 'Kalite::Menu:ProcessReports',
49
+ layout: "application" /* eLayoutType.application */, order: 5, requiredPolicy: 'Hitsoft.Kadooglu.Kalite.Reports' },
50
+ { path: '/kalite/reports/rejected', parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */, name: 'Kalite::Menu:RejectionReports',
51
+ layout: "application" /* eLayoutType.application */, order: 6, requiredPolicy: 'Hitsoft.Kadooglu.Kalite.Reports' },
52
+ { path: '/kalite/notification-settings', parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */, name: 'Kalite::Menu:NotificationSettings',
53
+ layout: "application" /* eLayoutType.application */, order: 7, requiredPolicy: 'Hitsoft.Kadooglu.Kalite.Notifications.Configure' },
54
+ ]);
55
+ };
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvY29uZmlnL3NyYy9wcm92aWRlcnMvcm91dGUucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRzFELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFlO0lBQ2hEO1FBQ0UsT0FBTyxFQUFFLGVBQWU7UUFDeEIsVUFBVSxFQUFFLGVBQWU7UUFDM0IsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQ3JCLEtBQUssRUFBRSxJQUFJO0tBQ1o7Q0FDRixDQUFDO0FBRUYsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFxQjtJQUNuRCxPQUFPLEdBQUcsRUFBRTtRQUNWLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDVDtnQkFDRSxJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLHNEQUEwQjtnQkFDOUIsU0FBUyxFQUFFLGNBQWM7Z0JBQ3pCLE1BQU0sNkNBQXlCO2dCQUMvQixLQUFLLEVBQUUsQ0FBQztnQkFDUixjQUFjLEVBQUUsNE1BQTRNO2FBQzdOO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsVUFBVSxzREFBMEI7Z0JBQ3BDLElBQUksd0VBQW1DO2dCQUN2QyxNQUFNLDZDQUF5QjtnQkFDL0IsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsY0FBYyxFQUFFLHlDQUF5QzthQUMxRDtZQUNEO2dCQUNFLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLFVBQVUsc0RBQTBCO2dCQUNwQyxJQUFJLDhEQUE4QjtnQkFDbEMsTUFBTSw2Q0FBeUI7Z0JBQy9CLEtBQUssRUFBRSxDQUFDO2dCQUNSLGNBQWMsRUFBRSxvQ0FBb0M7YUFDckQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixVQUFVLEVBQUUscUNBQXFDO2dCQUNqRCxJQUFJLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2Q0FBeUI7Z0JBQzVELEtBQUssRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLGdDQUFnQzthQUMzRDtZQUNELEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLFVBQVUsc0RBQTBCLEVBQUUsSUFBSSxFQUFFLDBCQUEwQjtnQkFDbkcsTUFBTSw2Q0FBeUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxxQ0FBcUMsRUFBRTtZQUNwRyxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxVQUFVLHNEQUEwQixFQUFFLElBQUksRUFBRSwyQkFBMkI7Z0JBQ3RHLE1BQU0sNkNBQXlCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsaUNBQWlDLEVBQUU7WUFDaEcsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsVUFBVSxzREFBMEIsRUFBRSxJQUFJLEVBQUUsNkJBQTZCO2dCQUMxRyxNQUFNLDZDQUF5QixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLGlDQUFpQyxFQUFFO1lBQ2hHLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixFQUFFLFVBQVUsc0RBQTBCLEVBQUUsSUFBSSxFQUFFLCtCQUErQjtnQkFDN0csTUFBTSw2Q0FBeUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxpQ0FBaUMsRUFBRTtZQUNoRyxFQUFFLElBQUksRUFBRSwrQkFBK0IsRUFBRSxVQUFVLHNEQUEwQixFQUFFLElBQUksRUFBRSxtQ0FBbUM7Z0JBQ3RILE1BQU0sNkNBQXlCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsaURBQWlELEVBQUU7U0FDakgsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVMYXlvdXRUeXBlLCBSb3V0ZXNTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGVLYWxpdGVSb3V0ZU5hbWVzIH0gZnJvbSAnLi4vZW51bXMvcm91dGUtbmFtZXMnO1xuXG5leHBvcnQgY29uc3QgS0FMSVRFX1JPVVRFX1BST1ZJREVSUzogUHJvdmlkZXJbXSA9IFtcbiAge1xuICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICB1c2VGYWN0b3J5OiBjb25maWd1cmVSb3V0ZXMsXG4gICAgZGVwczogW1JvdXRlc1NlcnZpY2VdLFxuICAgIG11bHRpOiB0cnVlLFxuICB9LFxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZVJvdXRlcyhyb3V0ZXM6IFJvdXRlc1NlcnZpY2UpIHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICByb3V0ZXMuYWRkKFtcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJy9rYWxpdGUnLFxuICAgICAgICBuYW1lOiBlS2FsaXRlUm91dGVOYW1lcy5LYWxpdGUsXG4gICAgICAgIGljb25DbGFzczogJ2ZhcyBmYS1mbGFzaycsXG4gICAgICAgIGxheW91dDogZUxheW91dFR5cGUuYXBwbGljYXRpb24sXG4gICAgICAgIG9yZGVyOiAzLFxuICAgICAgICByZXF1aXJlZFBvbGljeTogJ0hpdHNvZnQuS2Fkb29nbHUuS2FsaXRlLlByb2Nlc3NBbmFseXNpcyB8fCBIaXRzb2Z0LkthZG9vZ2x1LkthbGl0ZS5QYXJhbWV0ZXJzIHx8IEhpdHNvZnQuS2Fkb29nbHUuS2FsaXRlLkRlZmluaXRpb25zIHx8IEhpdHNvZnQuS2Fkb29nbHUuS2FsaXRlLlJlcG9ydHMgfHwgSGl0c29mdC5LYWRvb2dsdS5LYWxpdGUuTm90aWZpY2F0aW9ucy5Db25maWd1cmUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJy9rYWxpdGUvcHJvY2Vzcy1hbmFseXNpcycsXG4gICAgICAgIHBhcmVudE5hbWU6IGVLYWxpdGVSb3V0ZU5hbWVzLkthbGl0ZSxcbiAgICAgICAgbmFtZTogZUthbGl0ZVJvdXRlTmFtZXMuUHJvY2Vzc0FuYWx5c2lzLFxuICAgICAgICBsYXlvdXQ6IGVMYXlvdXRUeXBlLmFwcGxpY2F0aW9uLFxuICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgcmVxdWlyZWRQb2xpY3k6ICdIaXRzb2Z0LkthZG9vZ2x1LkthbGl0ZS5Qcm9jZXNzQW5hbHlzaXMnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJy9rYWxpdGUvcGFyYW1ldGVycycsXG4gICAgICAgIHBhcmVudE5hbWU6IGVLYWxpdGVSb3V0ZU5hbWVzLkthbGl0ZSxcbiAgICAgICAgbmFtZTogZUthbGl0ZVJvdXRlTmFtZXMuUGFyYW1ldGVycyxcbiAgICAgICAgbGF5b3V0OiBlTGF5b3V0VHlwZS5hcHBsaWNhdGlvbixcbiAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgIHJlcXVpcmVkUG9saWN5OiAnSGl0c29mdC5LYWRvb2dsdS5LYWxpdGUuUGFyYW1ldGVycycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYXRoOiAnL2thbGl0ZS9pbnRha2UnLFxuICAgICAgICBwYXJlbnROYW1lOiAnS2Fkb29nbHVUYXJ0aW06Ok1lbnU6S2Fkb29nbHVUYXJ0aW0nLFxuICAgICAgICBuYW1lOiAnS2FsaXRlOjpNZW51OkludGFrZScsIGxheW91dDogZUxheW91dFR5cGUuYXBwbGljYXRpb24sXG4gICAgICAgIG9yZGVyOiA0LCByZXF1aXJlZFBvbGljeTogJ0hpdHNvZnQuS2Fkb29nbHUuS2FsaXRlLkludGFrZScsXG4gICAgICB9LFxuICAgICAgeyBwYXRoOiAnL2thbGl0ZS9kZWZpbml0aW9ucycsIHBhcmVudE5hbWU6IGVLYWxpdGVSb3V0ZU5hbWVzLkthbGl0ZSwgbmFtZTogJ0thbGl0ZTo6TWVudTpEZWZpbml0aW9ucycsXG4gICAgICAgIGxheW91dDogZUxheW91dFR5cGUuYXBwbGljYXRpb24sIG9yZGVyOiAzLCByZXF1aXJlZFBvbGljeTogJ0hpdHNvZnQuS2Fkb29nbHUuS2FsaXRlLkRlZmluaXRpb25zJyB9LFxuICAgICAgeyBwYXRoOiAnL2thbGl0ZS9yZXBvcnRzL2lucHV0JywgcGFyZW50TmFtZTogZUthbGl0ZVJvdXRlTmFtZXMuS2FsaXRlLCBuYW1lOiAnS2FsaXRlOjpNZW51OklucHV0UmVwb3J0cycsXG4gICAgICAgIGxheW91dDogZUxheW91dFR5cGUuYXBwbGljYXRpb24sIG9yZGVyOiA0LCByZXF1aXJlZFBvbGljeTogJ0hpdHNvZnQuS2Fkb29nbHUuS2FsaXRlLlJlcG9ydHMnIH0sXG4gICAgICB7IHBhdGg6ICcva2FsaXRlL3JlcG9ydHMvcHJvY2VzcycsIHBhcmVudE5hbWU6IGVLYWxpdGVSb3V0ZU5hbWVzLkthbGl0ZSwgbmFtZTogJ0thbGl0ZTo6TWVudTpQcm9jZXNzUmVwb3J0cycsXG4gICAgICAgIGxheW91dDogZUxheW91dFR5cGUuYXBwbGljYXRpb24sIG9yZGVyOiA1LCByZXF1aXJlZFBvbGljeTogJ0hpdHNvZnQuS2Fkb29nbHUuS2FsaXRlLlJlcG9ydHMnIH0sXG4gICAgICB7IHBhdGg6ICcva2FsaXRlL3JlcG9ydHMvcmVqZWN0ZWQnLCBwYXJlbnROYW1lOiBlS2FsaXRlUm91dGVOYW1lcy5LYWxpdGUsIG5hbWU6ICdLYWxpdGU6Ok1lbnU6UmVqZWN0aW9uUmVwb3J0cycsXG4gICAgICAgIGxheW91dDogZUxheW91dFR5cGUuYXBwbGljYXRpb24sIG9yZGVyOiA2LCByZXF1aXJlZFBvbGljeTogJ0hpdHNvZnQuS2Fkb29nbHUuS2FsaXRlLlJlcG9ydHMnIH0sXG4gICAgICB7IHBhdGg6ICcva2FsaXRlL25vdGlmaWNhdGlvbi1zZXR0aW5ncycsIHBhcmVudE5hbWU6IGVLYWxpdGVSb3V0ZU5hbWVzLkthbGl0ZSwgbmFtZTogJ0thbGl0ZTo6TWVudTpOb3RpZmljYXRpb25TZXR0aW5ncycsXG4gICAgICAgIGxheW91dDogZUxheW91dFR5cGUuYXBwbGljYXRpb24sIG9yZGVyOiA3LCByZXF1aXJlZFBvbGljeTogJ0hpdHNvZnQuS2Fkb29nbHUuS2FsaXRlLk5vdGlmaWNhdGlvbnMuQ29uZmlndXJlJyB9LFxuICAgIF0pO1xuICB9O1xufVxuIl19
@@ -0,0 +1,4 @@
1
+ export * from './enums';
2
+ export * from './kalite-config.module';
3
+ export * from './providers';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2thbGl0ZS9jb25maWcvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi9rYWxpdGUtY29uZmlnLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVycyc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0c29mdC1rYWRvb2dsdS5rYWxpdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvc3JjL2hpdHNvZnQta2Fkb29nbHUua2FsaXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,162 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { takeUntil } from 'rxjs/operators';
4
+ import { applicableLimit, errorMessage, localDate, recalculate, statusLabel } from '../services/quality-measurements';
5
+ import { printForm } from '../services/print-form';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../services/quality-api.service";
8
+ import * as i2 from "@angular/router";
9
+ import * as i3 from "@abp/ng.core";
10
+ import * as i4 from "@angular/common";
11
+ import * as i5 from "@angular/forms";
12
+ export class IntakeFormComponent {
13
+ constructor(api, route, router, permissions) {
14
+ this.api = api;
15
+ this.route = route;
16
+ this.router = router;
17
+ this.permissions = permissions;
18
+ this.form = null;
19
+ this.tanks = [];
20
+ this.busy = false;
21
+ this.error = '';
22
+ this.success = '';
23
+ this.validationError = '';
24
+ this.decision = '';
25
+ this.viewOnly = false;
26
+ this.compositeEditor = false;
27
+ this.compositeMeasurements = [];
28
+ this.statusLabel = statusLabel;
29
+ this.destroy = new Subject();
30
+ }
31
+ ngOnInit() {
32
+ this.route.paramMap.pipe(takeUntil(this.destroy)).subscribe(params => { this.viewOnly = this.route.snapshot.queryParamMap.get('mode') === 'view'; this.load(Number(params.get('id'))); });
33
+ this.api.tanks().subscribe({ next: tanks => this.tanks = tanks.filter(x => x.active), error: e => this.error = errorMessage(e) });
34
+ }
35
+ ngOnDestroy() { this.destroy.next(); this.destroy.complete(); }
36
+ allowed(action) { return this.permissions.getGrantedPolicy('Hitsoft.Kadooglu.Kalite.Intake.' + action); }
37
+ get editable() { return !!this.form?.canEdit && !this.viewOnly && this.allowed('Edit'); }
38
+ get parameters() { return this.form?.inspection.templateSnapshot?.parameters.filter(x => x.active).sort((a, b) => a.order - b.order) || []; }
39
+ get palm() { return this.form?.details.find(x => x.code === this.form?.inspection.movementDetailCode)?.profile === 'PALM'; }
40
+ localTime(value) { const d = new Date(value); return localDate(d) + 'T' + String(d.getHours()).padStart(2, '0') + ':' + String(d.getMinutes()).padStart(2, '0'); }
41
+ load(id) {
42
+ if (!Number.isInteger(id) || id <= 0) {
43
+ this.error = 'Geçerli bir araç kaydı seçin.';
44
+ return;
45
+ }
46
+ this.busy = true;
47
+ this.error = '';
48
+ this.api.intake(id).subscribe({ next: form => { this.form = form; form.inspection.inspectedAt = this.localTime(form.inspection.inspectedAt); this.decision = ''; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });
49
+ }
50
+ detailChanged() {
51
+ if (!this.form)
52
+ return;
53
+ this.busy = true;
54
+ this.api.intakeTemplate(this.form.inspection.movementDetailCode).subscribe({ next: t => { if (this.form) {
55
+ this.form.inspection.templateSnapshot = t;
56
+ this.form.inspection.measurements = [];
57
+ this.form.compositeSample = null;
58
+ this.compositeEditor = false;
59
+ } this.busy = false; this.changed(); }, error: e => { this.error = errorMessage(e); this.busy = false; } });
60
+ }
61
+ measurement(p, composite = false) {
62
+ const values = composite ? this.compositeMeasurements : this.form.inspection.measurements;
63
+ let value = values.find(x => x.parameterCode === p.code);
64
+ if (!value) {
65
+ value = { parameterCode: p.code, number: null, text: '' };
66
+ values.push(value);
67
+ }
68
+ return value;
69
+ }
70
+ limitLabel(p) {
71
+ const i = this.form?.inspection;
72
+ if (!i)
73
+ return '—';
74
+ const l = applicableLimit(i.templateSnapshot?.limits || [], p.code, i.inspectedAt.slice(0, 10), i.oilType, i.origin);
75
+ if (!l)
76
+ return '—';
77
+ const range = l.expectedText || (l.minimum != null && l.maximum != null ? `${l.minimum} – ${l.maximum}` : l.minimum != null ? `≥ ${l.minimum}` : l.maximum != null ? `≤ ${l.maximum}` : '—');
78
+ return range + (l.nominal != null ? ` · Nominal: ${l.nominal}` : '');
79
+ }
80
+ inputStep(p) { return Math.pow(10, -p.decimalPlaces); }
81
+ changed(composite = false) {
82
+ const i = this.form?.inspection;
83
+ if (!i?.templateSnapshot)
84
+ return;
85
+ try {
86
+ recalculate(this.parameters, composite ? this.compositeMeasurements : i.measurements, i.templateSnapshot.limits, i.inspectedAt.slice(0, 10), i.oilType, i.origin);
87
+ this.error = '';
88
+ }
89
+ catch (e) {
90
+ this.error = e instanceof Error ? e.message : 'Hesaplama yapılamadı.';
91
+ }
92
+ }
93
+ payload() {
94
+ const i = this.form.inspection;
95
+ return { vehicleEntryId: i.vehicleEntryId, movementDetailCode: i.movementDetailCode, origin: i.origin || '', tankCode: i.tankCode || '', oilType: i.oilType || '',
96
+ batchNumber: i.batchNumber || '', notes: i.notes || '', analyst: i.analyst, inspectedAt: new Date(i.inspectedAt).toISOString(), revision: i.revision,
97
+ measurements: i.measurements, decision: this.decision || undefined };
98
+ }
99
+ save(approve) {
100
+ if (!this.form || !this.editable)
101
+ return;
102
+ if (!this.form.inspection.inspectedAt || Number.isNaN(Date.parse(this.form.inspection.inspectedAt))) {
103
+ this.validationError = 'Kontrol tarihi ve saatini girin.';
104
+ this.error = this.validationError;
105
+ return;
106
+ }
107
+ if (approve && !this.decision) {
108
+ this.validationError = 'Kabul veya Ret seçin.';
109
+ this.error = this.validationError;
110
+ return;
111
+ }
112
+ if (approve && this.decision === 'Rejected' && !this.form.inspection.notes?.trim()) {
113
+ this.validationError = 'Ret gerekçesi girin.';
114
+ this.error = this.validationError;
115
+ return;
116
+ }
117
+ if (!approve)
118
+ this.decision = '';
119
+ this.busy = true;
120
+ this.error = '';
121
+ this.validationError = '';
122
+ this.api.saveIntake(this.payload()).subscribe({ next: i => { this.success = approve ? 'Kalite kararı kaydedildi.' : 'Taslak kaydedildi.'; this.form.inspection = i; i.inspectedAt = this.localTime(i.inspectedAt); this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });
123
+ }
124
+ beginComposite() { this.compositeEditor = true; this.compositeMeasurements = []; }
125
+ saveComposite() {
126
+ if (!this.form)
127
+ return;
128
+ if (!this.form.inspection.inspectedAt || Number.isNaN(Date.parse(this.form.inspection.inspectedAt))) {
129
+ this.error = 'Numune tarihi ve saatini girin.';
130
+ return;
131
+ }
132
+ this.busy = true;
133
+ this.api.saveComposite({ ...this.payload(), revision: 0, measurements: this.compositeMeasurements }).subscribe({ next: sample => { this.form.compositeSample = sample; this.compositeEditor = false; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });
134
+ }
135
+ refreshComposite() {
136
+ if (!this.form)
137
+ return;
138
+ const i = this.form.inspection;
139
+ this.api.intake(i.vehicleEntryId, i.movementDetailCode, i.batchNumber).subscribe({ next: result => this.form.compositeSample = result.compositeSample, error: e => this.error = errorMessage(e) });
140
+ }
141
+ async print() {
142
+ if (!this.form || !this.printArea || this.busy || !this.allowed('Print'))
143
+ return;
144
+ try {
145
+ await printForm(this.printArea.nativeElement, `Girdi-Kontrol-${this.form.vehicle.docEntry}`);
146
+ }
147
+ catch (e) {
148
+ this.error = errorMessage(e);
149
+ }
150
+ }
151
+ back() { this.router.navigate(['/kalite/intake']); }
152
+ }
153
+ IntakeFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IntakeFormComponent, deps: [{ token: i1.QualityApiService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i3.PermissionService }], target: i0.ɵɵFactoryTarget.Component });
154
+ IntakeFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: IntakeFormComponent, selector: "lib-intake-form", viewQueries: [{ propertyName: "printArea", first: true, predicate: ["printArea"], descendants: true }], ngImport: i0, template: "<div class=\"container-fluid\" #printArea>\n <div class=\"d-flex justify-content-between align-items-center mb-3\"><h3>Ham Ya\u011F Giri\u015F Kalite Kontrol</h3><button class=\"btn btn-outline-secondary\" (click)=\"back()\">Listeye D\u00F6n</button></div>\n <div *ngIf=\"error\" class=\"alert alert-danger\" role=\"alert\">{{ error }}</div><div *ngIf=\"success\" class=\"alert alert-success\">{{ success }}</div>\n <div *ngIf=\"busy\" class=\"quality-loading\" role=\"status\"><span class=\"spinner-border spinner-border-sm mr-2\"></span> \u0130\u015Flem s\u00FCr\u00FCyor\u2026</div>\n <ng-container *ngIf=\"form as f\">\n <div class=\"card mb-3\"><div class=\"card-body\"><h5>Ara\u00E7 / Sevkiyat Bilgileri</h5>\n <div class=\"vehicle-info\">\n <div><label>S\u0131ra / Belge No</label><p>{{ f.vehicle.sequenceNumber }} / {{ f.vehicle.docNum }}</p></div><div><label>Giri\u015F Tarihi / Saati</label><p>{{ f.vehicle.entryDate | date:'dd.MM.yyyy HH:mm' }}</p></div>\n <div><label>Kap\u0131 / Hareket T\u00FCr\u00FC</label><p>{{ f.vehicle.gateCode }} / {{ f.vehicle.movementTypeName }}</p></div><div><label>Kamyon / Dorse</label><p>{{ f.vehicle.plate }} / {{ f.vehicle.trailerPlate || '\u2014' }}</p></div>\n <div><label>\u015Eof\u00F6r / Telefon</label><p>{{ f.vehicle.driver }} / {{ f.vehicle.driverPhone || '\u2014' }}</p></div><div><label>T.C. Kimlik / M\u00FCh\u00FCr</label><p>{{ f.vehicle.identityNumber || '\u2014' }} / {{ f.vehicle.sealNumber || '\u2014' }}</p></div>\n <div><label>Muhatap / Gemi</label><p>{{ f.vehicle.partnerName || '\u2014' }} / {{ f.vehicle.shipName || '\u2014' }}</p></div><div><label>Stok Nakli / Mal Giri\u015Fi / Sipari\u015F</label><p>{{ f.vehicle.stockTransferNumber || '\u2014' }} / {{ f.vehicle.receiptNumber || '\u2014' }} / {{ f.vehicle.orderNumber || '\u2014' }}</p></div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-4\"><label>Ara\u00E7 Hareket T\u00FCr\u00FC Detay\u0131</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.movementDetailCode\" (change)=\"detailChanged()\" [disabled]=\"!editable || busy || (f.details.length === 1 && !f.details[0].detailCode)\"><option value=\"\">Se\u00E7in</option><option *ngFor=\"let d of f.details\" [value]=\"d.code\">{{ d.name || f.vehicle.movementTypeName }}{{ !d.detailCode ? ' (detays\u0131z)' : '' }}</option></select></div>\n <div class=\"col-md-4\"><label>Men\u015Fei</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.origin\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option value=\"Domestic\">\u0130\u00E7 Piyasa</option><option value=\"Imported\">\u0130thal</option></select></div>\n <div class=\"col-md-4\"><label>Kalite Durumu</label><p class=\"mt-2\">\n <span class=\"quality-status\" role=\"status\"\n [class.quality-status-accepted]=\"f.inspection.revision && f.inspection.status === 'Accepted'\"\n [class.quality-status-rejected]=\"f.inspection.revision && f.inspection.status === 'Rejected'\"\n [class.quality-status-draft]=\"f.inspection.revision && f.inspection.status === 'Draft'\"\n [class.quality-status-waiting]=\"!f.inspection.revision || f.inspection.status === 'Waiting'\">\n <i class=\"fa\" aria-hidden=\"true\"\n [class.fa-check-circle]=\"f.inspection.revision && f.inspection.status === 'Accepted'\"\n [class.fa-times-circle]=\"f.inspection.revision && f.inspection.status === 'Rejected'\"\n [class.fa-edit]=\"f.inspection.revision && f.inspection.status === 'Draft'\"\n [class.fa-clock]=\"!f.inspection.revision || f.inspection.status === 'Waiting'\"></i>\n {{ statusLabel(f.inspection.revision ? f.inspection.status : 'Waiting') }}\n </span>\n </p></div>\n </div>\n </div></div>\n <div class=\"card mb-3\"><div class=\"card-body\">\n <h5>{{ f.inspection.templateSnapshot?.form?.name || '\u00D6l\u00E7\u00FCm / Parametreler' }} <small>{{ f.inspection.templateSnapshot?.form?.documentCode }}</small></h5>\n <p class=\"print-only text-muted\">Yay\u0131n: {{ f.inspection.templateSnapshot?.form?.publicationDate | date:'dd.MM.yyyy' }} \u00B7 Revizyon: {{ f.inspection.templateSnapshot?.form?.revisionDate | date:'dd.MM.yyyy' }} / {{ f.inspection.templateSnapshot?.form?.revisionNumber }}</p>\n <p *ngIf=\"!parameters.length\" class=\"text-muted\">Detay se\u00E7in. Bu kaleme ait form ve sorular Kalite Parametreleri ekran\u0131ndan tan\u0131mlanmal\u0131d\u0131r.</p>\n <div class=\"table-responsive\"><table class=\"table table-bordered table-sm measurement-table\" *ngIf=\"parameters.length\">\n <thead><tr><th>Soru / Parametre</th><th>Birim</th><th>Nominal / Limit</th><th>\u00D6l\u00E7\u00FCm De\u011Feri / Yan\u0131t</th><th>Uygunluk</th></tr></thead>\n <tbody><tr *ngFor=\"let p of parameters\" [class.out-of-limit]=\"measurement(p).outOfLimit\">\n <td>{{ p.name }}<span *ngIf=\"p.required\" class=\"text-danger\"> *</span></td><td>{{ p.unit || '\u2014' }}</td><td>{{ limitLabel(p) }}</td>\n <td><input *ngIf=\"p.valueType === 'Number'\" type=\"number\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).number\" (ngModelChange)=\"changed()\" [attr.step]=\"inputStep(p)\" [disabled]=\"!editable || p.calculated || busy\" [attr.aria-label]=\"p.name\" />\n <select *ngIf=\"p.valueType === 'Choice'\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).text\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option *ngFor=\"let option of p.options\" [value]=\"option\">{{ option }}</option></select>\n <input *ngIf=\"p.valueType === 'Text'\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).text\" (ngModelChange)=\"changed()\" [disabled]=\"!editable || busy\" [attr.aria-label]=\"p.name\" />\n </td><td><span *ngIf=\"measurement(p).outOfLimit\" class=\"badge badge-danger\">Limit D\u0131\u015F\u0131</span><span *ngIf=\"!measurement(p).outOfLimit && (measurement(p).number != null || measurement(p).text)\" class=\"badge badge-success\">{{ p.calculated ? 'Otomatik' : 'Uygun' }}</span></td>\n </tr></tbody>\n </table></div>\n <div *ngIf=\"palm\" class=\"border rounded p-3 mt-3\">\n <h6>Gemi / Parti Kompozit Numunesi</h6><label>Parti Kodu</label><div class=\"d-flex\"><input class=\"form-control\" [(ngModel)]=\"f.inspection.batchNumber\" [disabled]=\"!editable || busy\" /><button class=\"btn btn-outline-secondary ml-2\" (click)=\"refreshComposite()\">Numuneyi Getir</button></div>\n <p class=\"text-muted mt-2\">Kaynak mal giri\u015Fi veya parti koduyla ili\u015Fkilendirilen numune di\u011Fer ara\u00E7larda salt okunur g\u00F6sterilir.</p>\n <ng-container *ngIf=\"f.compositeSample as sample\"><p>{{ sample.analyst }} \u00B7 {{ sample.sampledAt | date:'dd.MM.yyyy HH:mm' }}</p><div class=\"row\"><div class=\"col-md-3 mb-2\" *ngFor=\"let value of sample.measurements\"><strong>{{ value.parameterName }}</strong>: {{ value.number != null ? value.number : value.text }} {{ value.unit }}</div></div></ng-container>\n <button *ngIf=\"!f.compositeSample && editable && allowed('Composite') && !compositeEditor\" class=\"btn btn-outline-primary\" (click)=\"beginComposite()\">Kompozit Numune Gir</button>\n <div *ngIf=\"compositeEditor\" class=\"print-exclude\"><div class=\"row\"><div class=\"col-md-3 mb-2\" *ngFor=\"let p of parameters\"><label>{{ p.name }}</label><input *ngIf=\"p.valueType === 'Number'\" type=\"number\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).number\" (ngModelChange)=\"changed(true)\" [disabled]=\"p.calculated || busy\" /><select *ngIf=\"p.valueType === 'Choice'\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).text\" (change)=\"changed(true)\"><option value=\"\"></option><option *ngFor=\"let option of p.options\" [value]=\"option\">{{ option }}</option></select><input *ngIf=\"p.valueType === 'Text'\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).text\" /></div></div><button class=\"btn btn-primary\" (click)=\"saveComposite()\" [disabled]=\"busy\">Numuneyi Kaydet</button><button class=\"btn btn-secondary ml-2\" (click)=\"compositeEditor = false\">Vazge\u00E7</button></div>\n </div>\n </div></div>\n <div class=\"card\"><div class=\"card-body\"><h5>De\u011Ferlendirme</h5><div class=\"row\">\n <div class=\"col-md-3\"><label>Genel De\u011Ferlendirme</label><select class=\"form-control\" [(ngModel)]=\"decision\" [attr.data-print-value]=\"statusLabel(decision || (f.inspection.revision ? f.inspection.status : 'Waiting'))\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option *ngIf=\"allowed('Accept')\" value=\"Accepted\">Kabul</option><option *ngIf=\"allowed('Reject')\" value=\"Rejected\">Ret</option></select></div>\n <div class=\"col-md-3\"><label>Analizi Yapan *</label><input class=\"form-control\" [(ngModel)]=\"f.inspection.analyst\" [disabled]=\"!editable || busy\" /></div>\n <div class=\"col-md-3\"><label>Kontrol Tarihi / Saati *</label><input type=\"datetime-local\" class=\"form-control\" [(ngModel)]=\"f.inspection.inspectedAt\" (change)=\"changed()\" [disabled]=\"!editable || busy\" /></div>\n <div class=\"col-md-3\"><label>Miktar (kg)</label><input class=\"form-control\" [value]=\"f.inspection.quantityKg == null ? 'Tart\u0131m sonras\u0131 gelir' : f.inspection.quantityKg\" disabled /></div>\n <div class=\"col-md-4 mt-3\"><label>Tank No</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.tankCode\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option *ngFor=\"let tank of tanks\" [value]=\"tank.code\">{{ tank.name }}</option></select></div>\n <div class=\"col-md-4 mt-3\"><label>Ya\u011F Cinsi</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.oilType\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option>Ay\u00E7i\u00E7ek</option><option>Rafine Ay\u00E7i\u00E7ek</option><option>Palm Oil</option><option>Palm Olein</option></select></div>\n <div class=\"col-md-12 mt-3\"><label>A\u00E7\u0131klama / Di\u011Fer <span *ngIf=\"decision === 'Rejected'\">*</span></label><textarea rows=\"3\" class=\"form-control\" [(ngModel)]=\"f.inspection.notes\" [disabled]=\"!editable || busy\"></textarea></div>\n </div><div *ngIf=\"validationError\" class=\"alert alert-danger mt-3 mb-2\" role=\"alert\">{{ validationError }}</div><div class=\"mt-3\"><button *ngIf=\"editable\" class=\"btn btn-outline-primary mr-2\" (click)=\"save(false)\" [disabled]=\"busy || !parameters.length\">Kaydet</button><button *ngIf=\"editable && (allowed('Accept') || allowed('Reject'))\" class=\"btn btn-primary mr-2\" (click)=\"save(true)\" [disabled]=\"busy || !parameters.length\">Kaydet ve Onayla</button><button *ngIf=\"allowed('Print')\" class=\"btn btn-outline-secondary mr-2\" (click)=\"print()\" [disabled]=\"busy || !f.inspection.revision\">Formu Yazd\u0131r</button><button class=\"btn btn-secondary\" (click)=\"back()\">Vazge\u00E7</button></div>\n <p *ngIf=\"!f.canEdit\" class=\"text-muted mt-3\">Ara\u00E7 tart\u0131ma girdi\u011Fi, \u00E7\u0131kt\u0131\u011F\u0131 veya iptal edildi\u011Fi i\u00E7in kay\u0131t salt okunur.</p>\n </div></div>\n </ng-container>\n</div>\n", styles: [".quality-loading{padding:1.5rem;text-align:center;color:#5b526c}.print-only{display:none}.quality-status{display:inline-flex;align-items:center;gap:.5rem;padding:.55rem .85rem;border:1px solid transparent;border-radius:.4rem;font-size:.9375rem;font-weight:600;line-height:1.4}.quality-status-accepted{color:#166534;background:#dcfce7;border-color:#86efac}.quality-status-rejected{color:#991b1b;background:#fee2e2;border-color:#fca5a5}.quality-status-draft{color:#1e40af;background:#dbeafe;border-color:#93c5fd}.quality-status-waiting{color:#854d0e;background:#fef3c7;border-color:#fcd34d}.vehicle-table{min-width:1950px;white-space:nowrap}.actions{min-width:130px}.quality-questions-link{display:inline-flex;align-items:center;min-height:calc(1.5em + .5rem + 2px);margin-left:.4rem;padding:.25rem .5rem;color:#9a5a00;background:#fff3d6;border:1px solid #edb85b;border-radius:.2rem;font-size:.875rem;line-height:1.5;text-decoration:none}.quality-questions-link:hover,.quality-questions-link:focus{color:#fff;background:#b86b00;border-color:#b86b00;text-decoration:none}.intake-actions-cell{display:flex;align-items:center}:host ::ng-deep .intake-grid .dx-data-row>td{vertical-align:middle}.intake-actions-toggle{display:inline-flex;align-items:center;gap:.5rem;padding:.3rem .65rem;font-family:inherit;font-size:.8125rem;line-height:1.3}.intake-action-menu{min-width:210px;margin-top:.35rem;padding:.3rem;background:#fff;border:1px solid #dee2e6;border-radius:.375rem;box-shadow:0 .25rem .75rem #0000001a}.intake-action-menu .dropdown-item{display:block;text-align:left;border:0;border-radius:.25rem;background:none;color:#343a40;padding:.5rem .65rem;font-family:inherit;font-size:.8125rem;font-weight:400;line-height:1.4;text-decoration:none;white-space:nowrap;cursor:pointer}.intake-action-menu .dropdown-item:hover,.intake-action-menu .dropdown-item:focus-visible{background:#eef2ff;color:#2446b5}.page-size{width:85px}.vehicle-info{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;margin:1rem 0}.vehicle-info label{font-size:.8rem;color:#6c757d;margin-bottom:.2rem}.vehicle-info p{background:#f5f3f8;padding:.55rem;min-height:2.5rem;overflow-wrap:anywhere}.measurement-table{min-width:700px}.measurement-table th{background:#f2edf7}.measurement-table td{vertical-align:middle}.out-of-limit,.rejected-row{background:#ffe6e9!important}.out-of-limit input,.out-of-limit select{border-color:#dc3545}@media (max-width: 900px){.vehicle-info{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 550px){.vehicle-info{grid-template-columns:1fr}}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IntakeFormComponent, decorators: [{
156
+ type: Component,
157
+ args: [{ selector: 'lib-intake-form', template: "<div class=\"container-fluid\" #printArea>\n <div class=\"d-flex justify-content-between align-items-center mb-3\"><h3>Ham Ya\u011F Giri\u015F Kalite Kontrol</h3><button class=\"btn btn-outline-secondary\" (click)=\"back()\">Listeye D\u00F6n</button></div>\n <div *ngIf=\"error\" class=\"alert alert-danger\" role=\"alert\">{{ error }}</div><div *ngIf=\"success\" class=\"alert alert-success\">{{ success }}</div>\n <div *ngIf=\"busy\" class=\"quality-loading\" role=\"status\"><span class=\"spinner-border spinner-border-sm mr-2\"></span> \u0130\u015Flem s\u00FCr\u00FCyor\u2026</div>\n <ng-container *ngIf=\"form as f\">\n <div class=\"card mb-3\"><div class=\"card-body\"><h5>Ara\u00E7 / Sevkiyat Bilgileri</h5>\n <div class=\"vehicle-info\">\n <div><label>S\u0131ra / Belge No</label><p>{{ f.vehicle.sequenceNumber }} / {{ f.vehicle.docNum }}</p></div><div><label>Giri\u015F Tarihi / Saati</label><p>{{ f.vehicle.entryDate | date:'dd.MM.yyyy HH:mm' }}</p></div>\n <div><label>Kap\u0131 / Hareket T\u00FCr\u00FC</label><p>{{ f.vehicle.gateCode }} / {{ f.vehicle.movementTypeName }}</p></div><div><label>Kamyon / Dorse</label><p>{{ f.vehicle.plate }} / {{ f.vehicle.trailerPlate || '\u2014' }}</p></div>\n <div><label>\u015Eof\u00F6r / Telefon</label><p>{{ f.vehicle.driver }} / {{ f.vehicle.driverPhone || '\u2014' }}</p></div><div><label>T.C. Kimlik / M\u00FCh\u00FCr</label><p>{{ f.vehicle.identityNumber || '\u2014' }} / {{ f.vehicle.sealNumber || '\u2014' }}</p></div>\n <div><label>Muhatap / Gemi</label><p>{{ f.vehicle.partnerName || '\u2014' }} / {{ f.vehicle.shipName || '\u2014' }}</p></div><div><label>Stok Nakli / Mal Giri\u015Fi / Sipari\u015F</label><p>{{ f.vehicle.stockTransferNumber || '\u2014' }} / {{ f.vehicle.receiptNumber || '\u2014' }} / {{ f.vehicle.orderNumber || '\u2014' }}</p></div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-4\"><label>Ara\u00E7 Hareket T\u00FCr\u00FC Detay\u0131</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.movementDetailCode\" (change)=\"detailChanged()\" [disabled]=\"!editable || busy || (f.details.length === 1 && !f.details[0].detailCode)\"><option value=\"\">Se\u00E7in</option><option *ngFor=\"let d of f.details\" [value]=\"d.code\">{{ d.name || f.vehicle.movementTypeName }}{{ !d.detailCode ? ' (detays\u0131z)' : '' }}</option></select></div>\n <div class=\"col-md-4\"><label>Men\u015Fei</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.origin\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option value=\"Domestic\">\u0130\u00E7 Piyasa</option><option value=\"Imported\">\u0130thal</option></select></div>\n <div class=\"col-md-4\"><label>Kalite Durumu</label><p class=\"mt-2\">\n <span class=\"quality-status\" role=\"status\"\n [class.quality-status-accepted]=\"f.inspection.revision && f.inspection.status === 'Accepted'\"\n [class.quality-status-rejected]=\"f.inspection.revision && f.inspection.status === 'Rejected'\"\n [class.quality-status-draft]=\"f.inspection.revision && f.inspection.status === 'Draft'\"\n [class.quality-status-waiting]=\"!f.inspection.revision || f.inspection.status === 'Waiting'\">\n <i class=\"fa\" aria-hidden=\"true\"\n [class.fa-check-circle]=\"f.inspection.revision && f.inspection.status === 'Accepted'\"\n [class.fa-times-circle]=\"f.inspection.revision && f.inspection.status === 'Rejected'\"\n [class.fa-edit]=\"f.inspection.revision && f.inspection.status === 'Draft'\"\n [class.fa-clock]=\"!f.inspection.revision || f.inspection.status === 'Waiting'\"></i>\n {{ statusLabel(f.inspection.revision ? f.inspection.status : 'Waiting') }}\n </span>\n </p></div>\n </div>\n </div></div>\n <div class=\"card mb-3\"><div class=\"card-body\">\n <h5>{{ f.inspection.templateSnapshot?.form?.name || '\u00D6l\u00E7\u00FCm / Parametreler' }} <small>{{ f.inspection.templateSnapshot?.form?.documentCode }}</small></h5>\n <p class=\"print-only text-muted\">Yay\u0131n: {{ f.inspection.templateSnapshot?.form?.publicationDate | date:'dd.MM.yyyy' }} \u00B7 Revizyon: {{ f.inspection.templateSnapshot?.form?.revisionDate | date:'dd.MM.yyyy' }} / {{ f.inspection.templateSnapshot?.form?.revisionNumber }}</p>\n <p *ngIf=\"!parameters.length\" class=\"text-muted\">Detay se\u00E7in. Bu kaleme ait form ve sorular Kalite Parametreleri ekran\u0131ndan tan\u0131mlanmal\u0131d\u0131r.</p>\n <div class=\"table-responsive\"><table class=\"table table-bordered table-sm measurement-table\" *ngIf=\"parameters.length\">\n <thead><tr><th>Soru / Parametre</th><th>Birim</th><th>Nominal / Limit</th><th>\u00D6l\u00E7\u00FCm De\u011Feri / Yan\u0131t</th><th>Uygunluk</th></tr></thead>\n <tbody><tr *ngFor=\"let p of parameters\" [class.out-of-limit]=\"measurement(p).outOfLimit\">\n <td>{{ p.name }}<span *ngIf=\"p.required\" class=\"text-danger\"> *</span></td><td>{{ p.unit || '\u2014' }}</td><td>{{ limitLabel(p) }}</td>\n <td><input *ngIf=\"p.valueType === 'Number'\" type=\"number\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).number\" (ngModelChange)=\"changed()\" [attr.step]=\"inputStep(p)\" [disabled]=\"!editable || p.calculated || busy\" [attr.aria-label]=\"p.name\" />\n <select *ngIf=\"p.valueType === 'Choice'\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).text\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option *ngFor=\"let option of p.options\" [value]=\"option\">{{ option }}</option></select>\n <input *ngIf=\"p.valueType === 'Text'\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).text\" (ngModelChange)=\"changed()\" [disabled]=\"!editable || busy\" [attr.aria-label]=\"p.name\" />\n </td><td><span *ngIf=\"measurement(p).outOfLimit\" class=\"badge badge-danger\">Limit D\u0131\u015F\u0131</span><span *ngIf=\"!measurement(p).outOfLimit && (measurement(p).number != null || measurement(p).text)\" class=\"badge badge-success\">{{ p.calculated ? 'Otomatik' : 'Uygun' }}</span></td>\n </tr></tbody>\n </table></div>\n <div *ngIf=\"palm\" class=\"border rounded p-3 mt-3\">\n <h6>Gemi / Parti Kompozit Numunesi</h6><label>Parti Kodu</label><div class=\"d-flex\"><input class=\"form-control\" [(ngModel)]=\"f.inspection.batchNumber\" [disabled]=\"!editable || busy\" /><button class=\"btn btn-outline-secondary ml-2\" (click)=\"refreshComposite()\">Numuneyi Getir</button></div>\n <p class=\"text-muted mt-2\">Kaynak mal giri\u015Fi veya parti koduyla ili\u015Fkilendirilen numune di\u011Fer ara\u00E7larda salt okunur g\u00F6sterilir.</p>\n <ng-container *ngIf=\"f.compositeSample as sample\"><p>{{ sample.analyst }} \u00B7 {{ sample.sampledAt | date:'dd.MM.yyyy HH:mm' }}</p><div class=\"row\"><div class=\"col-md-3 mb-2\" *ngFor=\"let value of sample.measurements\"><strong>{{ value.parameterName }}</strong>: {{ value.number != null ? value.number : value.text }} {{ value.unit }}</div></div></ng-container>\n <button *ngIf=\"!f.compositeSample && editable && allowed('Composite') && !compositeEditor\" class=\"btn btn-outline-primary\" (click)=\"beginComposite()\">Kompozit Numune Gir</button>\n <div *ngIf=\"compositeEditor\" class=\"print-exclude\"><div class=\"row\"><div class=\"col-md-3 mb-2\" *ngFor=\"let p of parameters\"><label>{{ p.name }}</label><input *ngIf=\"p.valueType === 'Number'\" type=\"number\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).number\" (ngModelChange)=\"changed(true)\" [disabled]=\"p.calculated || busy\" /><select *ngIf=\"p.valueType === 'Choice'\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).text\" (change)=\"changed(true)\"><option value=\"\"></option><option *ngFor=\"let option of p.options\" [value]=\"option\">{{ option }}</option></select><input *ngIf=\"p.valueType === 'Text'\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).text\" /></div></div><button class=\"btn btn-primary\" (click)=\"saveComposite()\" [disabled]=\"busy\">Numuneyi Kaydet</button><button class=\"btn btn-secondary ml-2\" (click)=\"compositeEditor = false\">Vazge\u00E7</button></div>\n </div>\n </div></div>\n <div class=\"card\"><div class=\"card-body\"><h5>De\u011Ferlendirme</h5><div class=\"row\">\n <div class=\"col-md-3\"><label>Genel De\u011Ferlendirme</label><select class=\"form-control\" [(ngModel)]=\"decision\" [attr.data-print-value]=\"statusLabel(decision || (f.inspection.revision ? f.inspection.status : 'Waiting'))\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option *ngIf=\"allowed('Accept')\" value=\"Accepted\">Kabul</option><option *ngIf=\"allowed('Reject')\" value=\"Rejected\">Ret</option></select></div>\n <div class=\"col-md-3\"><label>Analizi Yapan *</label><input class=\"form-control\" [(ngModel)]=\"f.inspection.analyst\" [disabled]=\"!editable || busy\" /></div>\n <div class=\"col-md-3\"><label>Kontrol Tarihi / Saati *</label><input type=\"datetime-local\" class=\"form-control\" [(ngModel)]=\"f.inspection.inspectedAt\" (change)=\"changed()\" [disabled]=\"!editable || busy\" /></div>\n <div class=\"col-md-3\"><label>Miktar (kg)</label><input class=\"form-control\" [value]=\"f.inspection.quantityKg == null ? 'Tart\u0131m sonras\u0131 gelir' : f.inspection.quantityKg\" disabled /></div>\n <div class=\"col-md-4 mt-3\"><label>Tank No</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.tankCode\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option *ngFor=\"let tank of tanks\" [value]=\"tank.code\">{{ tank.name }}</option></select></div>\n <div class=\"col-md-4 mt-3\"><label>Ya\u011F Cinsi</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.oilType\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option>Ay\u00E7i\u00E7ek</option><option>Rafine Ay\u00E7i\u00E7ek</option><option>Palm Oil</option><option>Palm Olein</option></select></div>\n <div class=\"col-md-12 mt-3\"><label>A\u00E7\u0131klama / Di\u011Fer <span *ngIf=\"decision === 'Rejected'\">*</span></label><textarea rows=\"3\" class=\"form-control\" [(ngModel)]=\"f.inspection.notes\" [disabled]=\"!editable || busy\"></textarea></div>\n </div><div *ngIf=\"validationError\" class=\"alert alert-danger mt-3 mb-2\" role=\"alert\">{{ validationError }}</div><div class=\"mt-3\"><button *ngIf=\"editable\" class=\"btn btn-outline-primary mr-2\" (click)=\"save(false)\" [disabled]=\"busy || !parameters.length\">Kaydet</button><button *ngIf=\"editable && (allowed('Accept') || allowed('Reject'))\" class=\"btn btn-primary mr-2\" (click)=\"save(true)\" [disabled]=\"busy || !parameters.length\">Kaydet ve Onayla</button><button *ngIf=\"allowed('Print')\" class=\"btn btn-outline-secondary mr-2\" (click)=\"print()\" [disabled]=\"busy || !f.inspection.revision\">Formu Yazd\u0131r</button><button class=\"btn btn-secondary\" (click)=\"back()\">Vazge\u00E7</button></div>\n <p *ngIf=\"!f.canEdit\" class=\"text-muted mt-3\">Ara\u00E7 tart\u0131ma girdi\u011Fi, \u00E7\u0131kt\u0131\u011F\u0131 veya iptal edildi\u011Fi i\u00E7in kay\u0131t salt okunur.</p>\n </div></div>\n </ng-container>\n</div>\n", styles: [".quality-loading{padding:1.5rem;text-align:center;color:#5b526c}.print-only{display:none}.quality-status{display:inline-flex;align-items:center;gap:.5rem;padding:.55rem .85rem;border:1px solid transparent;border-radius:.4rem;font-size:.9375rem;font-weight:600;line-height:1.4}.quality-status-accepted{color:#166534;background:#dcfce7;border-color:#86efac}.quality-status-rejected{color:#991b1b;background:#fee2e2;border-color:#fca5a5}.quality-status-draft{color:#1e40af;background:#dbeafe;border-color:#93c5fd}.quality-status-waiting{color:#854d0e;background:#fef3c7;border-color:#fcd34d}.vehicle-table{min-width:1950px;white-space:nowrap}.actions{min-width:130px}.quality-questions-link{display:inline-flex;align-items:center;min-height:calc(1.5em + .5rem + 2px);margin-left:.4rem;padding:.25rem .5rem;color:#9a5a00;background:#fff3d6;border:1px solid #edb85b;border-radius:.2rem;font-size:.875rem;line-height:1.5;text-decoration:none}.quality-questions-link:hover,.quality-questions-link:focus{color:#fff;background:#b86b00;border-color:#b86b00;text-decoration:none}.intake-actions-cell{display:flex;align-items:center}:host ::ng-deep .intake-grid .dx-data-row>td{vertical-align:middle}.intake-actions-toggle{display:inline-flex;align-items:center;gap:.5rem;padding:.3rem .65rem;font-family:inherit;font-size:.8125rem;line-height:1.3}.intake-action-menu{min-width:210px;margin-top:.35rem;padding:.3rem;background:#fff;border:1px solid #dee2e6;border-radius:.375rem;box-shadow:0 .25rem .75rem #0000001a}.intake-action-menu .dropdown-item{display:block;text-align:left;border:0;border-radius:.25rem;background:none;color:#343a40;padding:.5rem .65rem;font-family:inherit;font-size:.8125rem;font-weight:400;line-height:1.4;text-decoration:none;white-space:nowrap;cursor:pointer}.intake-action-menu .dropdown-item:hover,.intake-action-menu .dropdown-item:focus-visible{background:#eef2ff;color:#2446b5}.page-size{width:85px}.vehicle-info{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;margin:1rem 0}.vehicle-info label{font-size:.8rem;color:#6c757d;margin-bottom:.2rem}.vehicle-info p{background:#f5f3f8;padding:.55rem;min-height:2.5rem;overflow-wrap:anywhere}.measurement-table{min-width:700px}.measurement-table th{background:#f2edf7}.measurement-table td{vertical-align:middle}.out-of-limit,.rejected-row{background:#ffe6e9!important}.out-of-limit input,.out-of-limit select{border-color:#dc3545}@media (max-width: 900px){.vehicle-info{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 550px){.vehicle-info{grid-template-columns:1fr}}\n"] }]
158
+ }], ctorParameters: function () { return [{ type: i1.QualityApiService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.PermissionService }]; }, propDecorators: { printArea: [{
159
+ type: ViewChild,
160
+ args: ['printArea']
161
+ }] } });
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50YWtlLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2FsaXRlL3NyYy9saWIvY29tcG9uZW50cy9pbnRha2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvc3JjL2xpYi9jb21wb25lbnRzL2ludGFrZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdwRixPQUFPLEVBQUUsT0FBTyxFQUFZLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUkzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQUduRCxNQUFNLE9BQU8sbUJBQW1CO0lBSzlCLFlBQW9CLEdBQXNCLEVBQVUsS0FBcUIsRUFBVSxNQUFjLEVBQVUsV0FBOEI7UUFBckgsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFIekksU0FBSSxHQUFzQixJQUFJLENBQUM7UUFBQyxVQUFLLEdBQWtCLEVBQUUsQ0FBQztRQUFDLFNBQUksR0FBRyxLQUFLLENBQUM7UUFBQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQUMsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUFDLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQUMsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUFDLGFBQVEsR0FBRyxLQUFLLENB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QUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RNLENBQUM7SUFDRCxLQUFLLENBQUMsS0FBSztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPO1FBQ2pGLElBQUk7WUFBRSxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUFFO1FBQ3JHLE9BQU8sQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FBRTtJQUM3QyxDQUFDO0lBQ0QsSUFBSSxLQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Z0hBN0UvQyxtQkFBbUI7b0dBQW5CLG1CQUFtQiwrSkNaaEMsbXZXQWtFQTsyRkR0RGEsbUJBQW1CO2tCQUQvQixTQUFTOytCQUFhLGlCQUFpQjswTEFFZCxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEludGFrZUZvcm0sIFF1YWxpdHlUYW5rIH0gZnJvbSAnLi4vbW9kZWxzL2ludGFrZS5tb2RlbHMnO1xuaW1wb3J0IHsgUXVhbGl0eU1lYXN1cmVtZW50LCBRdWFsaXR5UGFyYW1ldGVyIH0gZnJvbSAnLi4vbW9kZWxzL3F1YWxpdHkubW9kZWxzJztcbmltcG9ydCB7IFF1YWxpdHlBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcXVhbGl0eS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBhcHBsaWNhYmxlTGltaXQsIGVycm9yTWVzc2FnZSwgbG9jYWxEYXRlLCByZWNhbGN1bGF0ZSwgc3RhdHVzTGFiZWwgfSBmcm9tICcuLi9zZXJ2aWNlcy9xdWFsaXR5LW1lYXN1cmVtZW50cyc7XG5pbXBvcnQgeyBwcmludEZvcm0gfSBmcm9tICcuLi9zZXJ2aWNlcy9wcmludC1mb3JtJztcblxuQENvbXBvbmVudCh7IHNlbGVjdG9yOiAnbGliLWludGFrZS1mb3JtJywgdGVtcGxhdGVVcmw6ICcuL2ludGFrZS1mb3JtLmNvbXBvbmVudC5odG1sJywgc3R5bGVVcmxzOiBbJy4vaW50YWtlLmNvbXBvbmVudC5zY3NzJ10gfSlcbmV4cG9ydCBjbGFzcyBJbnRha2VGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdwcmludEFyZWEnKSBwcmludEFyZWE/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgZm9ybTogSW50YWtlRm9ybSB8IG51bGwgPSBudWxsOyB0YW5rczogUXVhbGl0eVRhbmtbXSA9IFtdOyBidXN5ID0gZmFsc2U7IGVycm9yID0gJyc7IHN1Y2Nlc3MgPSAnJzsgdmFsaWRhdGlvbkVycm9yID0gJyc7IGRlY2lzaW9uID0gJyc7IHZpZXdPbmx5ID0gZmFsc2U7XG4gIGNvbXBvc2l0ZUVkaXRvciA9IGZhbHNlOyBjb21wb3NpdGVNZWFzdXJlbWVudHM6IFF1YWxpdHlNZWFzdXJlbWVudFtdID0gW107IHN0YXR1c0xhYmVsID0gc3RhdHVzTGFiZWw7XG4gIHByaXZhdGUgZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpOiBRdWFsaXR5QXBpU2VydmljZSwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25TZXJ2aWNlKSB7fVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlLnBhcmFtTWFwLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSkpLnN1YnNjcmliZShwYXJhbXMgPT4geyB0aGlzLnZpZXdPbmx5ID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnbW9kZScpID09PSAndmlldyc7IHRoaXMubG9hZChOdW1iZXIocGFyYW1zLmdldCgnaWQnKSkpOyB9KTtcbiAgICB0aGlzLmFwaS50YW5rcygpLnN1YnNjcmliZSh7IG5leHQ6IHRhbmtzID0+IHRoaXMudGFua3MgPSB0YW5rcy5maWx0ZXIoeCA9PiB4LmFjdGl2ZSksIGVycm9yOiBlID0+IHRoaXMuZXJyb3IgPSBlcnJvck1lc3NhZ2UoZSkgfSk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7IHRoaXMuZGVzdHJveS5uZXh0KCk7IHRoaXMuZGVzdHJveS5jb21wbGV0ZSgpOyB9XG4gIGFsbG93ZWQoYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMuZ2V0R3JhbnRlZFBvbGljeSgnSGl0c29mdC5LYWRvb2dsdS5LYWxpdGUuSW50YWtlLicgKyBhY3Rpb24pOyB9XG4gIGdldCBlZGl0YWJsZSgpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5mb3JtPy5jYW5FZGl0ICYmICF0aGlzLnZpZXdPbmx5ICYmIHRoaXMuYWxsb3dlZCgnRWRpdCcpOyB9XG4gIGdldCBwYXJhbWV0ZXJzKCk6IFF1YWxpdHlQYXJhbWV0ZXJbXSB7IHJldHVybiB0aGlzLmZvcm0/Lmluc3BlY3Rpb24udGVtcGxhdGVTbmFwc2hvdD8ucGFyYW1ldGVycy5maWx0ZXIoeCA9PiB4LmFjdGl2ZSkuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpIHx8IFtdOyB9XG4gIGdldCBwYWxtKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5mb3JtPy5kZXRhaWxzLmZpbmQoeCA9PiB4LmNvZGUgPT09IHRoaXMuZm9ybT8uaW5zcGVjdGlvbi5tb3ZlbWVudERldGFpbENvZGUpPy5wcm9maWxlID09PSAnUEFMTSc7IH1cbiAgcHJpdmF0ZSBsb2NhbFRpbWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7IGNvbnN0IGQgPSBuZXcgRGF0ZSh2YWx1ZSk7IHJldHVybiBsb2NhbERhdGUoZCkgKyAnVCcgKyBTdHJpbmcoZC5nZXRIb3VycygpKS5wYWRTdGFydCgyLCAnMCcpICsgJzonICsgU3RyaW5nKGQuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpOyB9XG4gIGxvYWQoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihpZCkgfHwgaWQgPD0gMCkgeyB0aGlzLmVycm9yID0gJ0dlw6dlcmxpIGJpciBhcmHDpyBrYXlkxLEgc2XDp2luLic7IHJldHVybjsgfVxuICAgIHRoaXMuYnVzeSA9IHRydWU7IHRoaXMuZXJyb3IgPSAnJztcbiAgICB0aGlzLmFwaS5pbnRha2UoaWQpLnN1YnNjcmliZSh7IG5leHQ6IGZvcm0gPT4geyB0aGlzLmZvcm0gPSBmb3JtOyBmb3JtLmluc3BlY3Rpb24uaW5zcGVjdGVkQXQgPSB0aGlzLmxvY2FsVGltZShmb3JtLmluc3BlY3Rpb24uaW5zcGVjdGVkQXQpOyB0aGlzLmRlY2lzaW9uID0gJyc7IHRoaXMuYnVzeSA9IGZhbHNlOyB9LCBlcnJvcjogZSA9PiB7IHRoaXMuZXJyb3IgPSBlcnJvck1lc3NhZ2UoZSk7IHRoaXMuYnVzeSA9IGZhbHNlOyB9IH0pO1xuICB9XG4gIGRldGFpbENoYW5nZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZvcm0pIHJldHVybjtcbiAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgIHRoaXMuYXBpLmludGFrZVRlbXBsYXRlKHRoaXMuZm9ybS5pbnNwZWN0aW9uLm1vdmVtZW50RGV0YWlsQ29kZSkuc3Vic2NyaWJlKHsgbmV4dDogdCA9PiB7IGlmICh0aGlzLmZvcm0pIHsgdGhpcy5mb3JtLmluc3BlY3Rpb24udGVtcGxhdGVTbmFwc2hvdCA9IHQ7IHRoaXMuZm9ybS5pbnNwZWN0aW9uLm1lYXN1cmVtZW50cyA9IFtdOyB0aGlzLmZvcm0uY29tcG9zaXRlU2FtcGxlID0gbnVsbDsgdGhpcy5jb21wb3NpdGVFZGl0b3IgPSBmYWxzZTsgfSB0aGlzLmJ1c3kgPSBmYWxzZTsgdGhpcy5jaGFuZ2VkKCk7IH0sIGVycm9yOiBlID0+IHsgdGhpcy5lcnJvciA9IGVycm9yTWVzc2FnZShlKTsgdGhpcy5idXN5ID0gZmFsc2U7IH0gfSk7XG4gIH1cbiAgbWVhc3VyZW1lbnQocDogUXVhbGl0eVBhcmFtZXRlciwgY29tcG9zaXRlID0gZmFsc2UpOiBRdWFsaXR5TWVhc3VyZW1lbnQge1xuICAgIGNvbnN0IHZhbHVlcyA9IGNvbXBvc2l0ZSA/IHRoaXMuY29tcG9zaXRlTWVhc3VyZW1lbnRzIDogdGhpcy5mb3JtIS5pbnNwZWN0aW9uLm1lYXN1cmVtZW50cztcbiAgICBsZXQgdmFsdWUgPSB2YWx1ZXMuZmluZCh4ID0+IHgucGFyYW1ldGVyQ29kZSA9PT0gcC5jb2RlKTtcbiAgICBpZiAoIXZhbHVlKSB7IHZhbHVlID0geyBwYXJhbWV0ZXJDb2RlOiBwLmNvZGUsIG51bWJlcjogbnVsbCwgdGV4dDogJycgfTsgdmFsdWVzLnB1c2godmFsdWUpOyB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGxpbWl0TGFiZWwocDogUXVhbGl0eVBhcmFtZXRlcik6IHN0cmluZyB7XG4gICAgY29uc3QgaSA9IHRoaXMuZm9ybT8uaW5zcGVjdGlvbjsgaWYgKCFpKSByZXR1cm4gJ+KAlCc7XG4gICAgY29uc3QgbCA9IGFwcGxpY2FibGVMaW1pdChpLnRlbXBsYXRlU25hcHNob3Q/LmxpbWl0cyB8fCBbXSwgcC5jb2RlLCBpLmluc3BlY3RlZEF0LnNsaWNlKDAsIDEwKSwgaS5vaWxUeXBlLCBpLm9yaWdpbik7XG4gICAgaWYgKCFsKSByZXR1cm4gJ+KAlCc7XG4gICAgY29uc3QgcmFuZ2UgPSBsLmV4cGVjdGVkVGV4dCB8fCAobC5taW5pbXVtICE9IG51bGwgJiYgbC5tYXhpbXVtICE9IG51bGwgPyBgJHtsLm1pbmltdW19IOKAkyAke2wubWF4aW11bX1gIDogbC5taW5pbXVtICE9IG51bGwgPyBg4omlICR7bC5taW5pbXVtfWAgOiBsLm1heGltdW0gIT0gbnVsbCA/IGDiiaQgJHtsLm1heGltdW19YCA6ICfigJQnKTtcbiAgICByZXR1cm4gcmFuZ2UgKyAobC5ub21pbmFsICE9IG51bGwgPyBgIMK3IE5vbWluYWw6ICR7bC5ub21pbmFsfWAgOiAnJyk7XG4gIH1cbiAgaW5wdXRTdGVwKHA6IFF1YWxpdHlQYXJhbWV0ZXIpOiBudW1iZXIgeyByZXR1cm4gTWF0aC5wb3coMTAsIC1wLmRlY2ltYWxQbGFjZXMpOyB9XG4gIGNoYW5nZWQoY29tcG9zaXRlID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCBpID0gdGhpcy5mb3JtPy5pbnNwZWN0aW9uOyBpZiAoIWk/LnRlbXBsYXRlU25hcHNob3QpIHJldHVybjtcbiAgICB0cnkgeyByZWNhbGN1bGF0ZSh0aGlzLnBhcmFtZXRlcnMsIGNvbXBvc2l0ZSA/IHRoaXMuY29tcG9zaXRlTWVhc3VyZW1lbnRzIDogaS5tZWFzdXJlbWVudHMsIGkudGVtcGxhdGVTbmFwc2hvdC5saW1pdHMsIGkuaW5zcGVjdGVkQXQuc2xpY2UoMCwgMTApLCBpLm9pbFR5cGUsIGkub3JpZ2luKTsgdGhpcy5lcnJvciA9ICcnOyB9XG4gICAgY2F0Y2ggKGUpIHsgdGhpcy5lcnJvciA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6ICdIZXNhcGxhbWEgeWFwxLFsYW1hZMSxLic7IH1cbiAgfVxuICBwYXlsb2FkKCk6IG9iamVjdCB7XG4gICAgY29uc3QgaSA9IHRoaXMuZm9ybSEuaW5zcGVjdGlvbjtcbiAgICByZXR1cm4geyB2ZWhpY2xlRW50cnlJZDogaS52ZWhpY2xlRW50cnlJZCwgbW92ZW1lbnREZXRhaWxDb2RlOiBpLm1vdmVtZW50RGV0YWlsQ29kZSwgb3JpZ2luOiBpLm9yaWdpbiB8fCAnJywgdGFua0NvZGU6IGkudGFua0NvZGUgfHwgJycsIG9pbFR5cGU6IGkub2lsVHlwZSB8fCAnJyxcbiAgICAgIGJhdGNoTnVtYmVyOiBpLmJhdGNoTnVtYmVyIHx8ICcnLCBub3RlczogaS5ub3RlcyB8fCAnJywgYW5hbHlzdDogaS5hbmFseXN0LCBpbnNwZWN0ZWRBdDogbmV3IERhdGUoaS5pbnNwZWN0ZWRBdCkudG9JU09TdHJpbmcoKSwgcmV2aXNpb246IGkucmV2aXNpb24sXG4gICAgICBtZWFzdXJlbWVudHM6IGkubWVhc3VyZW1lbnRzLCBkZWNpc2lvbjogdGhpcy5kZWNpc2lvbiB8fCB1bmRlZmluZWQgfTtcbiAgfVxuICBzYXZlKGFwcHJvdmU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9ybSB8fCAhdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5mb3JtLmluc3BlY3Rpb24uaW5zcGVjdGVkQXQgfHwgTnVtYmVyLmlzTmFOKERhdGUucGFyc2UodGhpcy5mb3JtLmluc3BlY3Rpb24uaW5zcGVjdGVkQXQpKSkgeyB0aGlzLnZhbGlkYXRpb25FcnJvciA9ICdLb250cm9sIHRhcmloaSB2ZSBzYWF0aW5pIGdpcmluLic7IHRoaXMuZXJyb3IgPSB0aGlzLnZhbGlkYXRpb25FcnJvcjsgcmV0dXJuOyB9XG4gICAgaWYgKGFwcHJvdmUgJiYgIXRoaXMuZGVjaXNpb24pIHsgdGhpcy52YWxpZGF0aW9uRXJyb3IgPSAnS2FidWwgdmV5YSBSZXQgc2XDp2luLic7IHRoaXMuZXJyb3IgPSB0aGlzLnZhbGlkYXRpb25FcnJvcjsgcmV0dXJuOyB9XG4gICAgaWYgKGFwcHJvdmUgJiYgdGhpcy5kZWNpc2lvbiA9PT0gJ1JlamVjdGVkJyAmJiAhdGhpcy5mb3JtLmluc3BlY3Rpb24ubm90ZXM/LnRyaW0oKSkgeyB0aGlzLnZhbGlkYXRpb25FcnJvciA9ICdSZXQgZ2VyZWvDp2VzaSBnaXJpbi4nOyB0aGlzLmVycm9yID0gdGhpcy52YWxpZGF0aW9uRXJyb3I7IHJldHVybjsgfVxuICAgIGlmICghYXBwcm92ZSkgdGhpcy5kZWNpc2lvbiA9ICcnO1xuICAgIHRoaXMuYnVzeSA9IHRydWU7IHRoaXMuZXJyb3IgPSAnJzsgdGhpcy52YWxpZGF0aW9uRXJyb3IgPSAnJztcbiAgICB0aGlzLmFwaS5zYXZlSW50YWtlKHRoaXMucGF5bG9hZCgpKS5zdWJzY3JpYmUoeyBuZXh0OiBpID0+IHsgdGhpcy5zdWNjZXNzID0gYXBwcm92ZSA/ICdLYWxpdGUga2FyYXLEsSBrYXlkZWRpbGRpLicgOiAnVGFzbGFrIGtheWRlZGlsZGkuJzsgdGhpcy5mb3JtIS5pbnNwZWN0aW9uID0gaTsgaS5pbnNwZWN0ZWRBdCA9IHRoaXMubG9jYWxUaW1lKGkuaW5zcGVjdGVkQXQpOyB0aGlzLmJ1c3kgPSBmYWxzZTsgfSwgZXJyb3I6IGUgPT4geyB0aGlzLmVycm9yID0gZXJyb3JNZXNzYWdlKGUpOyB0aGlzLmJ1c3kgPSBmYWxzZTsgfSB9KTtcbiAgfVxuICBiZWdpbkNvbXBvc2l0ZSgpOiB2b2lkIHsgdGhpcy5jb21wb3NpdGVFZGl0b3IgPSB0cnVlOyB0aGlzLmNvbXBvc2l0ZU1lYXN1cmVtZW50cyA9IFtdOyB9XG4gIHNhdmVDb21wb3NpdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZvcm0pIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZm9ybS5pbnNwZWN0aW9uLmluc3BlY3RlZEF0IHx8IE51bWJlci5pc05hTihEYXRlLnBhcnNlKHRoaXMuZm9ybS5pbnNwZWN0aW9uLmluc3BlY3RlZEF0KSkpIHsgdGhpcy5lcnJvciA9ICdOdW11bmUgdGFyaWhpIHZlIHNhYXRpbmkgZ2lyaW4uJzsgcmV0dXJuOyB9XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICB0aGlzLmFwaS5zYXZlQ29tcG9zaXRlKHsgLi4udGhpcy5wYXlsb2FkKCksIHJldmlzaW9uOiAwLCBtZWFzdXJlbWVudHM6IHRoaXMuY29tcG9zaXRlTWVhc3VyZW1lbnRzIH0pLnN1YnNjcmliZSh7IG5leHQ6IHNhbXBsZSA9PiB7IHRoaXMuZm9ybSEuY29tcG9zaXRlU2FtcGxlID0gc2FtcGxlOyB0aGlzLmNvbXBvc2l0ZUVkaXRvciA9IGZhbHNlOyB0aGlzLmJ1c3kgPSBmYWxzZTsgfSwgZXJyb3I6IGUgPT4geyB0aGlzLmVycm9yID0gZXJyb3JNZXNzYWdlKGUpOyB0aGlzLmJ1c3kgPSBmYWxzZTsgfSB9KTtcbiAgfVxuICByZWZyZXNoQ29tcG9zaXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mb3JtKSByZXR1cm47XG4gICAgY29uc3QgaSA9IHRoaXMuZm9ybS5pbnNwZWN0aW9uO1xuICAgIHRoaXMuYXBpLmludGFrZShpLnZlaGljbGVFbnRyeUlkLCBpLm1vdmVtZW50RGV0YWlsQ29kZSwgaS5iYXRjaE51bWJlcikuc3Vic2NyaWJlKHsgbmV4dDogcmVzdWx0ID0+IHRoaXMuZm9ybSEuY29tcG9zaXRlU2FtcGxlID0gcmVzdWx0LmNvbXBvc2l0ZVNhbXBsZSwgZXJyb3I6IGUgPT4gdGhpcy5lcnJvciA9IGVycm9yTWVzc2FnZShlKSB9KTtcbiAgfVxuICBhc3luYyBwcmludCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZm9ybSB8fCAhdGhpcy5wcmludEFyZWEgfHwgdGhpcy5idXN5IHx8ICF0aGlzLmFsbG93ZWQoJ1ByaW50JykpIHJldHVybjtcbiAgICB0cnkgeyBhd2FpdCBwcmludEZvcm0odGhpcy5wcmludEFyZWEubmF0aXZlRWxlbWVudCwgYEdpcmRpLUtvbnRyb2wtJHt0aGlzLmZvcm0udmVoaWNsZS5kb2NFbnRyeX1gKTsgfVxuICAgIGNhdGNoIChlKSB7IHRoaXMuZXJyb3IgPSBlcnJvck1lc3NhZ2UoZSk7IH1cbiAgfVxuICBiYWNrKCk6IHZvaWQgeyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9rYWxpdGUvaW50YWtlJ10pOyB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgI3ByaW50QXJlYT5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPjxoMz5IYW0gWWHEnyBHaXJpxZ8gS2FsaXRlIEtvbnRyb2w8L2gzPjxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImJhY2soKVwiPkxpc3RleWUgRMO2bjwvYnV0dG9uPjwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiIHJvbGU9XCJhbGVydFwiPnt7IGVycm9yIH19PC9kaXY+PGRpdiAqbmdJZj1cInN1Y2Nlc3NcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIj57eyBzdWNjZXNzIH19PC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJidXN5XCIgY2xhc3M9XCJxdWFsaXR5LWxvYWRpbmdcIiByb2xlPVwic3RhdHVzXCI+PHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbSBtci0yXCI+PC9zcGFuPiDEsMWfbGVtIHPDvHLDvHlvcuKApjwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybSBhcyBmXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQgbWItM1wiPjxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj48aDU+QXJhw6cgLyBTZXZraXlhdCBCaWxnaWxlcmk8L2g1PlxuICAgICAgPGRpdiBjbGFzcz1cInZlaGljbGUtaW5mb1wiPlxuICAgICAgICA8ZGl2PjxsYWJlbD5TxLFyYSAvIEJlbGdlIE5vPC9sYWJlbD48cD57eyBmLnZlaGljbGUuc2VxdWVuY2VOdW1iZXIgfX0gLyB7eyBmLnZlaGljbGUuZG9jTnVtIH19PC9wPjwvZGl2PjxkaXY+PGxhYmVsPkdpcmnFnyBUYXJpaGkgLyBTYWF0aTwvbGFiZWw+PHA+e3sgZi52ZWhpY2xlLmVudHJ5RGF0ZSB8IGRhdGU6J2RkLk1NLnl5eXkgSEg6bW0nIH19PC9wPjwvZGl2PlxuICAgICAgICA8ZGl2PjxsYWJlbD5LYXDEsSAvIEhhcmVrZXQgVMO8csO8PC9sYWJlbD48cD57eyBmLnZlaGljbGUuZ2F0ZUNvZGUgfX0gLyB7eyBmLnZlaGljbGUubW92ZW1lbnRUeXBlTmFtZSB9fTwvcD48L2Rpdj48ZGl2PjxsYWJlbD5LYW15b24gLyBEb3JzZTwvbGFiZWw+PHA+e3sgZi52ZWhpY2xlLnBsYXRlIH19IC8ge3sgZi52ZWhpY2xlLnRyYWlsZXJQbGF0ZSB8fCAn4oCUJyB9fTwvcD48L2Rpdj5cbiAgICAgICAgPGRpdj48bGFiZWw+xZ5vZsO2ciAvIFRlbGVmb248L2xhYmVsPjxwPnt7IGYudmVoaWNsZS5kcml2ZXIgfX0gLyB7eyBmLnZlaGljbGUuZHJpdmVyUGhvbmUgfHwgJ+KAlCcgfX08L3A+PC9kaXY+PGRpdj48bGFiZWw+VC5DLiBLaW1saWsgLyBNw7xow7xyPC9sYWJlbD48cD57eyBmLnZlaGljbGUuaWRlbnRpdHlOdW1iZXIgfHwgJ+KAlCcgfX0gLyB7eyBmLnZlaGljbGUuc2VhbE51bWJlciB8fCAn4oCUJyB9fTwvcD48L2Rpdj5cbiAgICAgICAgPGRpdj48bGFiZWw+TXVoYXRhcCAvIEdlbWk8L2xhYmVsPjxwPnt7IGYudmVoaWNsZS5wYXJ0bmVyTmFtZSB8fCAn4oCUJyB9fSAvIHt7IGYudmVoaWNsZS5zaGlwTmFtZSB8fCAn4oCUJyB9fTwvcD48L2Rpdj48ZGl2PjxsYWJlbD5TdG9rIE5ha2xpIC8gTWFsIEdpcmnFn2kgLyBTaXBhcmnFnzwvbGFiZWw+PHA+e3sgZi52ZWhpY2xlLnN0b2NrVHJhbnNmZXJOdW1iZXIgfHwgJ+KAlCcgfX0gLyB7eyBmLnZlaGljbGUucmVjZWlwdE51bWJlciB8fCAn4oCUJyB9fSAvIHt7IGYudmVoaWNsZS5vcmRlck51bWJlciB8fCAn4oCUJyB9fTwvcD48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj48bGFiZWw+QXJhw6cgSGFyZWtldCBUw7xyw7wgRGV0YXnEsTwvbGFiZWw+PHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiZi5pbnNwZWN0aW9uLm1vdmVtZW50RGV0YWlsQ29kZVwiIChjaGFuZ2UpPVwiZGV0YWlsQ2hhbmdlZCgpXCIgW2Rpc2FibGVkXT1cIiFlZGl0YWJsZSB8fCBidXN5IHx8IChmLmRldGFpbHMubGVuZ3RoID09PSAxICYmICFmLmRldGFpbHNbMF0uZGV0YWlsQ29kZSlcIj48b3B0aW9uIHZhbHVlPVwiXCI+U2XDp2luPC9vcHRpb24+PG9wdGlvbiAqbmdGb3I9XCJsZXQgZCBvZiBmLmRldGFpbHNcIiBbdmFsdWVdPVwiZC5jb2RlXCI+e3sgZC5uYW1lIHx8IGYudmVoaWNsZS5tb3ZlbWVudFR5cGVOYW1lIH19e3sgIWQuZGV0YWlsQ29kZSA/ICcgKGRldGF5c8SxeiknIDogJycgfX08L29wdGlvbj48L3NlbGVjdD48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+PGxhYmVsPk1lbsWfZWk8L2xhYmVsPjxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImYuaW5zcGVjdGlvbi5vcmlnaW5cIiAoY2hhbmdlKT1cImNoYW5nZWQoKVwiIFtkaXNhYmxlZF09XCIhZWRpdGFibGUgfHwgYnVzeVwiPjxvcHRpb24gdmFsdWU9XCJcIj5TZcOnaW48L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiRG9tZXN0aWNcIj7EsMOnIFBpeWFzYTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJJbXBvcnRlZFwiPsSwdGhhbDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj48bGFiZWw+S2FsaXRlIER1cnVtdTwvbGFiZWw+PHAgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWFsaXR5LXN0YXR1c1wiIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgICAgICAgW2NsYXNzLnF1YWxpdHktc3RhdHVzLWFjY2VwdGVkXT1cImYuaW5zcGVjdGlvbi5yZXZpc2lvbiAmJiBmLmluc3BlY3Rpb24uc3RhdHVzID09PSAnQWNjZXB0ZWQnXCJcbiAgICAgICAgICAgIFtjbGFzcy5xdWFsaXR5LXN0YXR1cy1yZWplY3RlZF09XCJmLmluc3BlY3Rpb24ucmV2aXNpb24gJiYgZi5pbnNwZWN0aW9uLnN0YXR1cyA9PT0gJ1JlamVjdGVkJ1wiXG4gICAgICAgICAgICBbY2xhc3MucXVhbGl0eS1zdGF0dXMtZHJhZnRdPVwiZi5pbnNwZWN0aW9uLnJldmlzaW9uICYmIGYuaW5zcGVjdGlvbi5zdGF0dXMgPT09ICdEcmFmdCdcIlxuICAgICAgICAgICAgW2NsYXNzLnF1YWxpdHktc3RhdHVzLXdhaXRpbmddPVwiIWYuaW5zcGVjdGlvbi5yZXZpc2lvbiB8fCBmLmluc3BlY3Rpb24uc3RhdHVzID09PSAnV2FpdGluZydcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICBbY2xhc3MuZmEtY2hlY2stY2lyY2xlXT1cImYuaW5zcGVjdGlvbi5yZXZpc2lvbiAmJiBmLmluc3BlY3Rpb24uc3RhdHVzID09PSAnQWNjZXB0ZWQnXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmZhLXRpbWVzLWNpcmNsZV09XCJmLmluc3BlY3Rpb24ucmV2aXNpb24gJiYgZi5pbnNwZWN0aW9uLnN0YXR1cyA9PT0gJ1JlamVjdGVkJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5mYS1lZGl0XT1cImYuaW5zcGVjdGlvbi5yZXZpc2lvbiAmJiBmLmluc3BlY3Rpb24uc3RhdHVzID09PSAnRHJhZnQnXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmZhLWNsb2NrXT1cIiFmLmluc3BlY3Rpb24ucmV2aXNpb24gfHwgZi5pbnNwZWN0aW9uLnN0YXR1cyA9PT0gJ1dhaXRpbmcnXCI+PC9pPlxuICAgICAgICAgICAge3sgc3RhdHVzTGFiZWwoZi5pbnNwZWN0aW9uLnJldmlzaW9uID8gZi5pbnNwZWN0aW9uLnN0YXR1cyA6ICdXYWl0aW5nJykgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvcD48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTNcIj48ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICA8aDU+e3sgZi5pbnNwZWN0aW9uLnRlbXBsYXRlU25hcHNob3Q/LmZvcm0/Lm5hbWUgfHwgJ8OWbMOnw7xtIC8gUGFyYW1ldHJlbGVyJyB9fSA8c21hbGw+e3sgZi5pbnNwZWN0aW9uLnRlbXBsYXRlU25hcHNob3Q/LmZvcm0/LmRvY3VtZW50Q29kZSB9fTwvc21hbGw+PC9oNT5cbiAgICAgIDxwIGNsYXNzPVwicHJpbnQtb25seSB0ZXh0LW11dGVkXCI+WWF5xLFuOiB7eyBmLmluc3BlY3Rpb24udGVtcGxhdGVTbmFwc2hvdD8uZm9ybT8ucHVibGljYXRpb25EYXRlIHwgZGF0ZTonZGQuTU0ueXl5eScgfX0gwrcgUmV2aXp5b246IHt7IGYuaW5zcGVjdGlvbi50ZW1wbGF0ZVNuYXBzaG90Py5mb3JtPy5yZXZpc2lvbkRhdGUgfCBkYXRlOidkZC5NTS55eXl5JyB9fSAvIHt7IGYuaW5zcGVjdGlvbi50ZW1wbGF0ZVNuYXBzaG90Py5mb3JtPy5yZXZpc2lvbk51bWJlciB9fTwvcD5cbiAgICAgIDxwICpuZ0lmPVwiIXBhcmFtZXRlcnMubGVuZ3RoXCIgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+RGV0YXkgc2XDp2luLiBCdSBrYWxlbWUgYWl0IGZvcm0gdmUgc29ydWxhciBLYWxpdGUgUGFyYW1ldHJlbGVyaSBla3JhbsSxbmRhbiB0YW7EsW1sYW5tYWzEsWTEsXIuPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj48dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1zbSBtZWFzdXJlbWVudC10YWJsZVwiICpuZ0lmPVwicGFyYW1ldGVycy5sZW5ndGhcIj5cbiAgICAgICAgPHRoZWFkPjx0cj48dGg+U29ydSAvIFBhcmFtZXRyZTwvdGg+PHRoPkJpcmltPC90aD48dGg+Tm9taW5hbCAvIExpbWl0PC90aD48dGg+w5Zsw6fDvG0gRGXEn2VyaSAvIFlhbsSxdDwvdGg+PHRoPlV5Z3VubHVrPC90aD48L3RyPjwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT48dHIgKm5nRm9yPVwibGV0IHAgb2YgcGFyYW1ldGVyc1wiIFtjbGFzcy5vdXQtb2YtbGltaXRdPVwibWVhc3VyZW1lbnQocCkub3V0T2ZMaW1pdFwiPlxuICAgICAgICAgIDx0ZD57eyBwLm5hbWUgfX08c3BhbiAqbmdJZj1cInAucmVxdWlyZWRcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+ICo8L3NwYW4+PC90ZD48dGQ+e3sgcC51bml0IHx8ICfigJQnIH19PC90ZD48dGQ+e3sgbGltaXRMYWJlbChwKSB9fTwvdGQ+XG4gICAgICAgICAgPHRkPjxpbnB1dCAqbmdJZj1cInAudmFsdWVUeXBlID09PSAnTnVtYmVyJ1wiIHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBbKG5nTW9kZWwpXT1cIm1lYXN1cmVtZW50KHApLm51bWJlclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZWQoKVwiIFthdHRyLnN0ZXBdPVwiaW5wdXRTdGVwKHApXCIgW2Rpc2FibGVkXT1cIiFlZGl0YWJsZSB8fCBwLmNhbGN1bGF0ZWQgfHwgYnVzeVwiIFthdHRyLmFyaWEtbGFiZWxdPVwicC5uYW1lXCIgLz5cbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJwLnZhbHVlVHlwZSA9PT0gJ0Nob2ljZSdcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBbKG5nTW9kZWwpXT1cIm1lYXN1cmVtZW50KHApLnRleHRcIiAoY2hhbmdlKT1cImNoYW5nZWQoKVwiIFtkaXNhYmxlZF09XCIhZWRpdGFibGUgfHwgYnVzeVwiPjxvcHRpb24gdmFsdWU9XCJcIj5TZcOnaW48L29wdGlvbj48b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcC5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7IG9wdGlvbiB9fTwvb3B0aW9uPjwvc2VsZWN0PlxuICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwicC52YWx1ZVR5cGUgPT09ICdUZXh0J1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIFsobmdNb2RlbCldPVwibWVhc3VyZW1lbnQocCkudGV4dFwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZWQoKVwiIFtkaXNhYmxlZF09XCIhZWRpdGFibGUgfHwgYnVzeVwiIFthdHRyLmFyaWEtbGFiZWxdPVwicC5uYW1lXCIgLz5cbiAgICAgICAgICA8L3RkPjx0ZD48c3BhbiAqbmdJZj1cIm1lYXN1cmVtZW50KHApLm91dE9mTGltaXRcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWRhbmdlclwiPkxpbWl0IETEscWfxLE8L3NwYW4+PHNwYW4gKm5nSWY9XCIhbWVhc3VyZW1lbnQocCkub3V0T2ZMaW1pdCAmJiAobWVhc3VyZW1lbnQocCkubnVtYmVyICE9IG51bGwgfHwgbWVhc3VyZW1lbnQocCkudGV4dClcIiBjbGFzcz1cImJhZGdlIGJhZGdlLXN1Y2Nlc3NcIj57eyBwLmNhbGN1bGF0ZWQgPyAnT3RvbWF0aWsnIDogJ1V5Z3VuJyB9fTwvc3Bhbj48L3RkPlxuICAgICAgICA8L3RyPjwvdGJvZHk+XG4gICAgICA8L3RhYmxlPjwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cInBhbG1cIiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtdC0zXCI+XG4gICAgICAgIDxoNj5HZW1pIC8gUGFydGkgS29tcG96aXQgTnVtdW5lc2k8L2g2PjxsYWJlbD5QYXJ0aSBLb2R1PC9sYWJlbD48ZGl2IGNsYXNzPVwiZC1mbGV4XCI+PGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJmLmluc3BlY3Rpb24uYmF0Y2hOdW1iZXJcIiBbZGlzYWJsZWRdPVwiIWVkaXRhYmxlIHx8IGJ1c3lcIiAvPjxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IG1sLTJcIiAoY2xpY2spPVwicmVmcmVzaENvbXBvc2l0ZSgpXCI+TnVtdW5leWkgR2V0aXI8L2J1dHRvbj48L2Rpdj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIG10LTJcIj5LYXluYWsgbWFsIGdpcmnFn2kgdmV5YSBwYXJ0aSBrb2R1eWxhIGlsacWfa2lsZW5kaXJpbGVuIG51bXVuZSBkacSfZXIgYXJhw6dsYXJkYSBzYWx0IG9rdW51ciBnw7ZzdGVyaWxpci48L3A+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLmNvbXBvc2l0ZVNhbXBsZSBhcyBzYW1wbGVcIj48cD57eyBzYW1wbGUuYW5hbHlzdCB9fSDCtyB7eyBzYW1wbGUuc2FtcGxlZEF0IHwgZGF0ZTonZGQuTU0ueXl5eSBISDptbScgfX08L3A+PGRpdiBjbGFzcz1cInJvd1wiPjxkaXYgY2xhc3M9XCJjb2wtbWQtMyBtYi0yXCIgKm5nRm9yPVwibGV0IHZhbHVlIG9mIHNhbXBsZS5tZWFzdXJlbWVudHNcIj48c3Ryb25nPnt7IHZhbHVlLnBhcmFtZXRlck5hbWUgfX08L3N0cm9uZz46IHt7IHZhbHVlLm51bWJlciAhPSBudWxsID8gdmFsdWUubnVtYmVyIDogdmFsdWUudGV4dCB9fSB7eyB2YWx1ZS51bml0IH19PC9kaXY+PC9kaXY+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhZi5jb21wb3NpdGVTYW1wbGUgJiYgZWRpdGFibGUgJiYgYWxsb3dlZCgnQ29tcG9zaXRlJykgJiYgIWNvbXBvc2l0ZUVkaXRvclwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiAoY2xpY2spPVwiYmVnaW5Db21wb3NpdGUoKVwiPktvbXBveml0IE51bXVuZSBHaXI8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImNvbXBvc2l0ZUVkaXRvclwiIGNsYXNzPVwicHJpbnQtZXhjbHVkZVwiPjxkaXYgY2xhc3M9XCJyb3dcIj48ZGl2IGNsYXNzPVwiY29sLW1kLTMgbWItMlwiICpuZ0Zvcj1cImxldCBwIG9mIHBhcmFtZXRlcnNcIj48bGFiZWw+e3sgcC5uYW1lIH19PC9sYWJlbD48aW5wdXQgKm5nSWY9XCJwLnZhbHVlVHlwZSA9PT0gJ051bWJlcidcIiB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cIm1lYXN1cmVtZW50KHAsIHRydWUpLm51bWJlclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZWQodHJ1ZSlcIiBbZGlzYWJsZWRdPVwicC5jYWxjdWxhdGVkIHx8IGJ1c3lcIiAvPjxzZWxlY3QgKm5nSWY9XCJwLnZhbHVlVHlwZSA9PT0gJ0Nob2ljZSdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwibWVhc3VyZW1lbnQocCwgdHJ1ZSkudGV4dFwiIChjaGFuZ2UpPVwiY2hhbmdlZCh0cnVlKVwiPjxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj48b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcC5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7IG9wdGlvbiB9fTwvb3B0aW9uPjwvc2VsZWN0PjxpbnB1dCAqbmdJZj1cInAudmFsdWVUeXBlID09PSAnVGV4dCdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwibWVhc3VyZW1lbnQocCwgdHJ1ZSkudGV4dFwiIC8+PC9kaXY+PC9kaXY+PGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzYXZlQ29tcG9zaXRlKClcIiBbZGlzYWJsZWRdPVwiYnVzeVwiPk51bXVuZXlpIEtheWRldDwvYnV0dG9uPjxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBtbC0yXCIgKGNsaWNrKT1cImNvbXBvc2l0ZUVkaXRvciA9IGZhbHNlXCI+VmF6Z2XDpzwvYnV0dG9uPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhcmRcIj48ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+PGg1PkRlxJ9lcmxlbmRpcm1lPC9oNT48ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj48bGFiZWw+R2VuZWwgRGXEn2VybGVuZGlybWU8L2xhYmVsPjxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImRlY2lzaW9uXCIgW2F0dHIuZGF0YS1wcmludC12YWx1ZV09XCJzdGF0dXNMYWJlbChkZWNpc2lvbiB8fCAoZi5pbnNwZWN0aW9uLnJldmlzaW9uID8gZi5pbnNwZWN0aW9uLnN0YXR1cyA6ICdXYWl0aW5nJykpXCIgW2Rpc2FibGVkXT1cIiFlZGl0YWJsZSB8fCBidXN5XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPlNlw6dpbjwvb3B0aW9uPjxvcHRpb24gKm5nSWY9XCJhbGxvd2VkKCdBY2NlcHQnKVwiIHZhbHVlPVwiQWNjZXB0ZWRcIj5LYWJ1bDwvb3B0aW9uPjxvcHRpb24gKm5nSWY9XCJhbGxvd2VkKCdSZWplY3QnKVwiIHZhbHVlPVwiUmVqZWN0ZWRcIj5SZXQ8L29wdGlvbj48L3NlbGVjdD48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPjxsYWJlbD5BbmFsaXppIFlhcGFuICo8L2xhYmVsPjxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiZi5pbnNwZWN0aW9uLmFuYWx5c3RcIiBbZGlzYWJsZWRdPVwiIWVkaXRhYmxlIHx8IGJ1c3lcIiAvPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+PGxhYmVsPktvbnRyb2wgVGFyaWhpIC8gU2FhdGkgKjwvbGFiZWw+PGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJmLmluc3BlY3Rpb24uaW5zcGVjdGVkQXRcIiAoY2hhbmdlKT1cImNoYW5nZWQoKVwiIFtkaXNhYmxlZF09XCIhZWRpdGFibGUgfHwgYnVzeVwiIC8+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj48bGFiZWw+TWlrdGFyIChrZyk8L2xhYmVsPjxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFt2YWx1ZV09XCJmLmluc3BlY3Rpb24ucXVhbnRpdHlLZyA9PSBudWxsID8gJ1RhcnTEsW0gc29ucmFzxLEgZ2VsaXInIDogZi5pbnNwZWN0aW9uLnF1YW50aXR5S2dcIiBkaXNhYmxlZCAvPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IG10LTNcIj48bGFiZWw+VGFuayBObzwvbGFiZWw+PHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiZi5pbnNwZWN0aW9uLnRhbmtDb2RlXCIgW2Rpc2FibGVkXT1cIiFlZGl0YWJsZSB8fCBidXN5XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPlNlw6dpbjwvb3B0aW9uPjxvcHRpb24gKm5nRm9yPVwibGV0IHRhbmsgb2YgdGFua3NcIiBbdmFsdWVdPVwidGFuay5jb2RlXCI+e3sgdGFuay5uYW1lIH19PC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgbXQtM1wiPjxsYWJlbD5ZYcSfIENpbnNpPC9sYWJlbD48c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJmLmluc3BlY3Rpb24ub2lsVHlwZVwiIChjaGFuZ2UpPVwiY2hhbmdlZCgpXCIgW2Rpc2FibGVkXT1cIiFlZGl0YWJsZSB8fCBidXN5XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPlNlw6dpbjwvb3B0aW9uPjxvcHRpb24+QXnDp2nDp2VrPC9vcHRpb24+PG9wdGlvbj5SYWZpbmUgQXnDp2nDp2VrPC9vcHRpb24+PG9wdGlvbj5QYWxtIE9pbDwvb3B0aW9uPjxvcHRpb24+UGFsbSBPbGVpbjwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBtdC0zXCI+PGxhYmVsPkHDp8Sxa2xhbWEgLyBEacSfZXIgPHNwYW4gKm5nSWY9XCJkZWNpc2lvbiA9PT0gJ1JlamVjdGVkJ1wiPio8L3NwYW4+PC9sYWJlbD48dGV4dGFyZWEgcm93cz1cIjNcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiZi5pbnNwZWN0aW9uLm5vdGVzXCIgW2Rpc2FibGVkXT1cIiFlZGl0YWJsZSB8fCBidXN5XCI+PC90ZXh0YXJlYT48L2Rpdj5cbiAgICA8L2Rpdj48ZGl2ICpuZ0lmPVwidmFsaWRhdGlvbkVycm9yXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgbXQtMyBtYi0yXCIgcm9sZT1cImFsZXJ0XCI+e3sgdmFsaWRhdGlvbkVycm9yIH19PC9kaXY+PGRpdiBjbGFzcz1cIm10LTNcIj48YnV0dG9uICpuZ0lmPVwiZWRpdGFibGVcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IG1yLTJcIiAoY2xpY2spPVwic2F2ZShmYWxzZSlcIiBbZGlzYWJsZWRdPVwiYnVzeSB8fCAhcGFyYW1ldGVycy5sZW5ndGhcIj5LYXlkZXQ8L2J1dHRvbj48YnV0dG9uICpuZ0lmPVwiZWRpdGFibGUgJiYgKGFsbG93ZWQoJ0FjY2VwdCcpIHx8IGFsbG93ZWQoJ1JlamVjdCcpKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiAoY2xpY2spPVwic2F2ZSh0cnVlKVwiIFtkaXNhYmxlZF09XCJidXN5IHx8ICFwYXJhbWV0ZXJzLmxlbmd0aFwiPktheWRldCB2ZSBPbmF5bGE8L2J1dHRvbj48YnV0dG9uICpuZ0lmPVwiYWxsb3dlZCgnUHJpbnQnKVwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBtci0yXCIgKGNsaWNrKT1cInByaW50KClcIiBbZGlzYWJsZWRdPVwiYnVzeSB8fCAhZi5pbnNwZWN0aW9uLnJldmlzaW9uXCI+Rm9ybXUgWWF6ZMSxcjwvYnV0dG9uPjxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJiYWNrKClcIj5WYXpnZcOnPC9idXR0b24+PC9kaXY+XG4gICAgPHAgKm5nSWY9XCIhZi5jYW5FZGl0XCIgY2xhc3M9XCJ0ZXh0LW11dGVkIG10LTNcIj5BcmHDpyB0YXJ0xLFtYSBnaXJkacSfaSwgw6fEsWt0xLHEn8SxIHZleWEgaXB0YWwgZWRpbGRpxJ9pIGnDp2luIGthecSxdCBzYWx0IG9rdW51ci48L3A+XG4gICAgPC9kaXY+PC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=