@almatar/smart-booking-dashboard 0.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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +132 -0
  3. package/esm2022/almatar-smart-booking-dashboard.mjs +5 -0
  4. package/esm2022/lib/components/action-card/action-card.component.mjs +19 -0
  5. package/esm2022/lib/components/action-dialog/action-dialog.component.mjs +177 -0
  6. package/esm2022/lib/components/action-grid/action-grid.component.mjs +18 -0
  7. package/esm2022/lib/components/add-note-dialog/add-note-dialog.component.mjs +62 -0
  8. package/esm2022/lib/components/booking-input/booking-input.component.mjs +43 -0
  9. package/esm2022/lib/components/cancel-dialog/cancel-dialog.component.mjs +1441 -0
  10. package/esm2022/lib/components/data-search/data-search.component.mjs +84 -0
  11. package/esm2022/lib/components/flight-itinerary-card/flight-itinerary-card.component.mjs +73 -0
  12. package/esm2022/lib/components/result-panel/result-panel.component.mjs +46 -0
  13. package/esm2022/lib/components/workflow-actions/workflow-actions.component.mjs +19 -0
  14. package/esm2022/lib/config/dashboard.config.mjs +16 -0
  15. package/esm2022/lib/config/flight-actions.config.mjs +906 -0
  16. package/esm2022/lib/config/hotel-actions.config.mjs +53 -0
  17. package/esm2022/lib/config/labels.ar.mjs +116 -0
  18. package/esm2022/lib/models/action.types.mjs +2 -0
  19. package/esm2022/lib/models/booking.types.mjs +2 -0
  20. package/esm2022/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.mjs +145 -0
  21. package/esm2022/lib/services/booking.service.mjs +65 -0
  22. package/esm2022/lib/services/toast.service.mjs +19 -0
  23. package/esm2022/lib/smart-booking-dashboard.module.mjs +17 -0
  24. package/esm2022/lib/smart-booking-dashboard.routes.mjs +7 -0
  25. package/esm2022/public-api.mjs +9 -0
  26. package/fesm2022/almatar-smart-booking-dashboard.mjs +3259 -0
  27. package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -0
  28. package/index.d.ts +5 -0
  29. package/lib/components/action-card/action-card.component.d.ts +10 -0
  30. package/lib/components/action-dialog/action-dialog.component.d.ts +26 -0
  31. package/lib/components/action-grid/action-grid.component.d.ts +10 -0
  32. package/lib/components/add-note-dialog/add-note-dialog.component.d.ts +25 -0
  33. package/lib/components/booking-input/booking-input.component.d.ts +23 -0
  34. package/lib/components/cancel-dialog/cancel-dialog.component.d.ts +395 -0
  35. package/lib/components/data-search/data-search.component.d.ts +21 -0
  36. package/lib/components/flight-itinerary-card/flight-itinerary-card.component.d.ts +17 -0
  37. package/lib/components/result-panel/result-panel.component.d.ts +14 -0
  38. package/lib/components/workflow-actions/workflow-actions.component.d.ts +7 -0
  39. package/lib/config/dashboard.config.d.ts +15 -0
  40. package/lib/config/flight-actions.config.d.ts +2 -0
  41. package/lib/config/hotel-actions.config.d.ts +2 -0
  42. package/lib/config/labels.ar.d.ts +2 -0
  43. package/lib/models/action.types.d.ts +34 -0
  44. package/lib/models/booking.types.d.ts +6 -0
  45. package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +43 -0
  46. package/lib/services/booking.service.d.ts +22 -0
  47. package/lib/services/toast.service.d.ts +10 -0
  48. package/lib/smart-booking-dashboard.module.d.ts +7 -0
  49. package/lib/smart-booking-dashboard.routes.d.ts +2 -0
  50. package/package.json +50 -0
  51. package/public-api.d.ts +5 -0
@@ -0,0 +1,53 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2
+ const na = (v) => v ?? 'Not available';
3
+ export const HOTEL_ACTIONS = [
4
+ { key: 'booking_info', type: 'hotel', label: 'Booking Overview', subtitle: 'Summary · Status', icon: 'pi pi-file',
5
+ apiField: 'booking_info',
6
+ formatter: (data) => ({ title: `Booking ${na(data?.booking_info?.reference)}`, subtitle: `Created ${na(data?.booking_info?.created_at)}`,
7
+ points: [{ label: 'Status', value: na(data?.booking_info?.status) }, { label: 'Total paid', value: na(data?.booking_info?.total) }, { label: 'Source', value: na(data?.booking_info?.source) }, { label: 'Currency', value: na(data?.booking_info?.currency) }] }) },
8
+ { key: 'room_information', type: 'hotel', label: 'Room Information', subtitle: 'Type · Beds · View', icon: 'pi pi-home',
9
+ apiField: 'room_information',
10
+ formatter: (data) => ({ title: na(data?.room_information?.type), subtitle: na(data?.room_information?.description),
11
+ points: [{ label: 'Room type', value: na(data?.room_information?.type) }, { label: 'Beds', value: na(data?.room_information?.beds) }, { label: 'View', value: na(data?.room_information?.view) }, { label: 'Floor', value: na(data?.room_information?.floor) }, { label: 'Size', value: na(data?.room_information?.size) }] }) },
12
+ { key: 'checkin_checkout', type: 'hotel', label: 'Check-in / Check-out', subtitle: 'Dates · Times', icon: 'pi pi-calendar',
13
+ apiField: 'checkin_checkout',
14
+ formatter: (data) => ({ title: `${na(data?.checkin_checkout?.checkin_date)} → ${na(data?.checkin_checkout?.checkout_date)}`, subtitle: 'Stay dates and times',
15
+ points: [{ label: 'Check-in date', value: na(data?.checkin_checkout?.checkin_date) }, { label: 'Check-in time', value: na(data?.checkin_checkout?.checkin_time) }, { label: 'Check-out date', value: na(data?.checkin_checkout?.checkout_date) }, { label: 'Check-out time', value: na(data?.checkin_checkout?.checkout_time) }, { label: 'Nights', value: na(data?.checkin_checkout?.nights) }] }) },
16
+ { key: 'hotel_information', type: 'hotel', label: 'Hotel Information', subtitle: 'Name · Stars · Contact', icon: 'pi pi-building',
17
+ apiField: 'hotel_information',
18
+ formatter: (data) => ({ title: na(data?.hotel_information?.name), subtitle: `${na(data?.hotel_information?.stars)}★ · ${na(data?.hotel_information?.city)}`,
19
+ points: [{ label: 'Hotel', value: na(data?.hotel_information?.name) }, { label: 'Stars', value: na(data?.hotel_information?.stars) }, { label: 'Phone', value: na(data?.hotel_information?.phone) }, { label: 'Email', value: na(data?.hotel_information?.email) }, { label: 'Website', value: na(data?.hotel_information?.website) }] }) },
20
+ { key: 'location_info', type: 'hotel', label: 'Location Info', subtitle: 'Address · Map', icon: 'pi pi-map-marker',
21
+ apiField: 'location_info',
22
+ formatter: (data) => ({ title: na(data?.location_info?.address), subtitle: na(data?.location_info?.city),
23
+ points: [{ label: 'Address', value: na(data?.location_info?.address) }, { label: 'City', value: na(data?.location_info?.city) }, { label: 'Country', value: na(data?.location_info?.country) }, { label: 'Zip code', value: na(data?.location_info?.zip) }, { label: 'Landmark', value: na(data?.location_info?.landmark) }] }) },
24
+ { key: 'hotel_amenities', type: 'hotel', label: 'Hotel Amenities', subtitle: 'Pool · Gym · Wi-Fi', icon: 'pi pi-star',
25
+ apiField: 'hotel_amenities',
26
+ formatter: (data) => { const amenities = data?.hotel_amenities?.list ?? []; return { title: 'Amenities', subtitle: `${amenities.length} amenities available`, points: amenities.length > 0 ? amenities.map((a) => ({ label: '✓', value: a })) : [{ label: 'Amenities', value: 'Not available' }] }; } },
27
+ { key: 'nearby_places', type: 'hotel', label: 'Nearby Places', subtitle: 'Airport · Attractions', icon: 'pi pi-compass',
28
+ apiField: 'nearby_places',
29
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
+ formatter: (data) => { const places = data?.nearby_places?.places ?? []; return { title: 'Nearby Places', points: places.length > 0 ? places.flatMap((p) => [{ label: na(p?.type), value: `${na(p?.name)} (${na(p?.distance)})` }]) : [{ label: 'Places', value: 'Not available' }] }; } },
31
+ { key: 'experiences', type: 'hotel', label: 'Experiences', subtitle: 'Tours · Activities', icon: 'pi pi-star-fill',
32
+ apiField: 'experiences',
33
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
+ formatter: (data) => { const items = data?.experiences?.list ?? []; return { title: 'Available Experiences', points: items.length > 0 ? items.map((e) => ({ label: na(e?.name), value: na(e?.price) })) : [{ label: 'Experiences', value: 'Not available' }] }; } },
35
+ { key: 'payment_status', type: 'hotel', label: 'Payment Status', subtitle: 'Charges · Receipt', icon: 'pi pi-credit-card',
36
+ apiField: 'payment_status',
37
+ formatter: (data) => ({ title: 'Payment Details', subtitle: na(data?.payment_status?.method),
38
+ points: [{ label: 'Status', value: na(data?.payment_status?.status) }, { label: 'Amount paid', value: na(data?.payment_status?.amount) }, { label: 'Currency', value: na(data?.payment_status?.currency) }, { label: 'Transaction', value: na(data?.payment_status?.transaction_id) }, { label: 'Date', value: na(data?.payment_status?.date) }] }) },
39
+ { key: 'wallet', type: 'hotel', label: 'Wallet & Credits', subtitle: 'Balance · Cashback', icon: 'pi pi-wallet',
40
+ apiField: 'wallet',
41
+ formatter: (data) => ({ title: 'Wallet Summary',
42
+ points: [{ label: 'Balance', value: na(data?.wallet?.balance) }, { label: 'Cashback', value: na(data?.wallet?.cashback) }, { label: 'Promo credit', value: na(data?.wallet?.promo_credit) }, { label: 'Last updated', value: na(data?.wallet?.updated_at) }] }) },
43
+ { key: 'cancellation_policy', type: 'hotel', label: 'Cancellation Policy', subtitle: 'Fees · Deadline', icon: 'pi pi-ban',
44
+ apiField: 'cancellation_policy',
45
+ formatter: (data) => ({ title: 'Cancellation Rules', subtitle: data?.cancellation_policy?.refundable ? 'Refundable' : 'Non-refundable',
46
+ points: [{ label: 'Refundable', value: data?.cancellation_policy?.refundable ? 'Yes' : 'No' }, { label: 'Cancel fee', value: na(data?.cancellation_policy?.fee) }, { label: 'Deadline', value: na(data?.cancellation_policy?.deadline) }, { label: 'Policy', value: na(data?.cancellation_policy?.description) }],
47
+ callout: { type: 'warning', message: data?.cancellation_policy?.warning ?? 'Always verify cancellation terms with the hotel.' } }) },
48
+ { key: 'breakfast', type: 'hotel', label: 'Meals & Breakfast', subtitle: 'Board basis', icon: 'pi pi-list',
49
+ apiField: 'meals',
50
+ formatter: (data) => ({ title: na(data?.meals?.board_basis), subtitle: 'Meal inclusions',
51
+ points: [{ label: 'Board basis', value: na(data?.meals?.board_basis) }, { label: 'Breakfast', value: na(data?.meals?.breakfast) }, { label: 'Lunch', value: na(data?.meals?.lunch) }, { label: 'Dinner', value: na(data?.meals?.dinner) }] }) },
52
+ ];
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90ZWwtYWN0aW9ucy5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL2NvbmZpZy9ob3RlbC1hY3Rpb25zLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSw4REFBOEQ7QUFDOUQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxlQUFlLENBQUM7QUFFNUMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFtQjtJQUMzQyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxZQUFZO1FBQy9HLFFBQVEsRUFBRSxjQUFjO1FBQ3hCLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDdEksTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxF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QUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCO1lBQ3RGLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtDQUNwUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2FjdGlvbi50eXBlcyc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5jb25zdCBuYSA9ICh2OiBhbnkpID0+IHYgPz8gJ05vdCBhdmFpbGFibGUnO1xuXG5leHBvcnQgY29uc3QgSE9URUxfQUNUSU9OUzogQWN0aW9uQ29uZmlnW10gPSBbXG4gIHsga2V5OiAnYm9va2luZ19pbmZvJywgdHlwZTogJ2hvdGVsJywgbGFiZWw6ICdCb29raW5nIE92ZXJ2aWV3Jywgc3VidGl0bGU6ICdTdW1tYXJ5IMK3IFN0YXR1cycsIGljb246ICdwaSBwaS1maWxlJyxcbiAgICBhcGlGaWVsZDogJ2Jvb2tpbmdfaW5mbycsXG4gICAgZm9ybWF0dGVyOiAoZGF0YSkgPT4gKHsgdGl0bGU6IGBCb29raW5nICR7bmEoZGF0YT8uYm9va2luZ19pbmZvPy5yZWZlcmVuY2UpfWAsIHN1YnRpdGxlOiBgQ3JlYXRlZCAke25hKGRhdGE/LmJvb2tpbmdfaW5mbz8uY3JlYXRlZF9hdCl9YCxcbiAgICAgIHBvaW50czogW3sgbGFiZWw6ICdTdGF0dXMnLCB2YWx1ZTogbmEoZGF0YT8uYm9va2luZ19pbmZvPy5zdGF0dXMpIH0sIHsgbGFiZWw6ICdUb3RhbCBwYWlkJywgdmFsdWU6IG5hKGRhdGE/LmJvb2tpbmdfaW5mbz8udG90YWwpIH0sIHsgbGFiZWw6ICdTb3VyY2UnLCB2YWx1ZTogbmEoZGF0YT8uYm9va2luZ19pbmZvPy5zb3VyY2UpIH0sIHsgbGFiZWw6ICdDdXJyZW5jeScsIHZhbHVlOiBuYShkYXRhPy5ib29raW5nX2luZm8/LmN1cnJlbmN5KSB9XSB9KSB9LFxuICB7IGtleTogJ3Jvb21faW5mb3JtYXRpb24nLCB0eXBlOiAnaG90ZWwnLCBsYWJlbDogJ1Jvb20gSW5mb3JtYXRpb24nLCBzdWJ0aXRsZTogJ1R5cGUgwrcgQmVkcyDCtyBWaWV3JywgaWNvbjogJ3BpIHBpLWhvbWUnLFxuICAgIGFwaUZpZWxkOiAncm9vbV9pbmZvcm1hdGlvbicsXG4gICAgZm9ybWF0dGVyOiAoZGF0YSkgPT4gKHsgdGl0bGU6IG5hKGRhdGE/LnJvb21faW5mb3JtYXRpb24/LnR5cGUpLCBzdWJ0aXRsZTogbmEoZGF0YT8ucm9vbV9pbmZvcm1hdGlvbj8uZGVzY3JpcHRpb24pLFxuICAgICAgcG9pbnRzOiBbeyBsYWJlbDogJ1Jvb20gdHlwZScsIHZhbHVlOiBuYShkYXRhPy5yb29tX2luZm9ybWF0aW9uPy50eXBlKSB9LCB7IGxhYmVsOiAnQmVkcycsIHZhbHVlOiBuYShkYXRhPy5yb29tX2luZm9ybWF0aW9uPy5iZWRzKSB9LCB7IGxhYmVsOiAnVmlldycsIHZhbHVlOiBuYShkYXRhPy5yb29tX2luZm9ybWF0aW9uPy52aWV3KSB9LCB7IGxhYmVsOiAnRmxvb3InLCB2YWx1ZTogbmEoZGF0YT8ucm9vbV9pbmZvcm1hdGlvbj8uZmxvb3IpIH0sIHsgbGFiZWw6ICdTaXplJywgdmFsdWU6IG5hKGRhdGE/LnJvb21faW5mb3JtYXRpb24/LnNpemUpIH1dIH0pIH0sXG4gIHsga2V5OiAnY2hlY2tpbl9jaGVja291dCcsIHR5cGU6ICdob3RlbCcsIGxhYmVsOiAnQ2hlY2staW4gLyBDaGVjay1vdXQnLCBzdWJ0aXRsZTogJ0RhdGVzIMK3IFRpbWVzJywgaWNvbjogJ3BpIHBpLWNhbGVuZGFyJyxcbiAgICBhcGlGaWVsZDogJ2NoZWNraW5fY2hlY2tvdXQnLFxuICAgIGZvcm1hdHRlcjogKGRhdGEpID0+ICh7IHRpdGxlOiBgJHtuYShkYXRhPy5jaGVja2luX2NoZWNrb3V0Py5jaGVja2luX2RhdGUpfSDihpIgJHtuYShkYXRhPy5jaGVja2luX2NoZWNrb3V0Py5jaGVja291dF9kYXRlKX1gLCBzdWJ0aXRsZTogJ1N0YXkgZGF0ZXMgYW5kIHRpbWVzJyxcbiAgICAgIHBvaW50czogW3sgbGFiZWw6ICdDaGVjay1pbiBkYXRlJywgdmFsdWU6IG5hKGRhdGE/LmNoZWNraW5fY2hlY2tvdXQ/LmNoZWNraW5fZGF0ZSkgfSwgeyBsYWJlbDogJ0NoZWNrLWluIHRpbWUnLCB2YWx1ZTogbmEoZGF0YT8uY2hlY2tpbl9jaGVja291dD8uY2hlY2tpbl90aW1lKSB9LCB7IGxhYmVsOiAnQ2hlY2stb3V0IGRhdGUnLCB2YWx1ZTogbmEoZGF0YT8uY2hlY2tpbl9jaGVja291dD8uY2hlY2tvdXRfZGF0ZSkgfSwgeyBsYWJlbDogJ0NoZWNrLW91dCB0aW1lJywgdmFsdWU6IG5hKGRhdGE/LmNoZWNraW5fY2hlY2tvdXQ/LmNoZWNrb3V0X3RpbWUpIH0sIHsgbGFiZWw6ICdOaWdodHMnLCB2YWx1ZTogbmEoZGF0YT8uY2hlY2tpbl9jaGVja291dD8ubmlnaHRzKSB9XSB9KSB9LFxuICB7IGtleTogJ2hvdGVsX2luZm9ybWF0aW9uJywgdHlwZTogJ2hvdGVsJywgbGFiZWw6ICdIb3RlbCBJbmZvcm1hdGlvbicsIHN1YnRpdGxlOiAnTmFtZSDCtyBTdGFycyDCtyBDb250YWN0JywgaWNvbjogJ3BpIHBpLWJ1aWxkaW5nJyxcbiAgICBhcGlGaWVsZDogJ2hvdGVsX2luZm9ybWF0aW9uJyxcbiAgICBmb3JtYXR0ZXI6IChkYXRhKSA9PiAoeyB0aXRsZTogbmEoZGF0YT8uaG90ZWxfaW5mb3JtYXRpb24/Lm5hbWUpLCBzdWJ0aXRsZTogYCR7bmEoZGF0YT8uaG90ZWxfaW5mb3JtYXRpb24/LnN0YXJzKX3imIUgwrcgJHtuYShkYXRhPy5ob3RlbF9pbmZvcm1hdGlvbj8uY2l0eSl9YCxcbiAgICAgIHBvaW50czogW3sgbGFiZWw6ICdIb3RlbCcsIHZhbHVlOiBuYShkYXRhPy5ob3RlbF9pbmZvcm1hdGlvbj8ubmFtZSkgfSwgeyBsYWJlbDogJ1N0YXJzJywgdmFsdWU6IG5hKGRhdGE/LmhvdGVsX2luZm9ybWF0aW9uPy5zdGFycykgfSwgeyBsYWJlbDogJ1Bob25lJywgdmFsdWU6IG5hKGRhdGE/LmhvdGVsX2luZm9ybWF0aW9uPy5waG9uZSkgfSwgeyBsYWJlbDogJ0VtYWlsJywgdmFsdWU6IG5hKGRhdGE/LmhvdGVsX2luZm9ybWF0aW9uPy5lbWFpbCkgfSwgeyBsYWJlbDogJ1dlYnNpdGUnLCB2YWx1ZTogbmEoZGF0YT8uaG90ZWxfaW5mb3JtYXRpb24/LndlYnNpdGUpIH1dIH0pIH0sXG4gIHsga2V5OiAnbG9jYXRpb25faW5mbycsIHR5cGU6ICdob3RlbCcsIGxhYmVsOiAnTG9jYXRpb24gSW5mbycsIHN1YnRpdGxlOiAnQWRkcmVzcyDCtyBNYXAnLCBpY29uOiAncGkgcGktbWFwLW1hcmtlcicsXG4gICAgYXBpRmllbGQ6ICdsb2NhdGlvbl9pbmZvJyxcbiAgICBmb3JtYXR0ZXI6IChkYXRhKSA9PiAoeyB0aXRsZTogbmEoZGF0YT8ubG9jYXRpb25faW5mbz8uYWRkcmVzcyksIHN1YnRpdGxlOiBuYShkYXRhPy5sb2NhdGlvbl9pbmZvPy5jaXR5KSxcbiAgICAgIHBvaW50czogW3sgbGFiZWw6ICdBZGRyZXNzJywgdmFsdWU6IG5hKGRhdGE/LmxvY2F0aW9uX2luZm8/LmFkZHJlc3MpIH0sIHsgbGFiZWw6ICdDaXR5JywgdmFsdWU6IG5hKGRhdGE/LmxvY2F0aW9uX2luZm8/LmNpdHkpIH0sIHsgbGFiZWw6ICdDb3VudHJ5JywgdmFsdWU6IG5hKGRhdGE/LmxvY2F0aW9uX2luZm8/LmNvdW50cnkpIH0sIHsgbGFiZWw6ICdaaXAgY29kZScsIHZhbHVlOiBuYShkYXRhPy5sb2NhdGlvbl9pbmZvPy56aXApIH0sIHsgbGFiZWw6ICdMYW5kbWFyaycsIHZhbHVlOiBuYShkYXRhPy5sb2NhdGlvbl9pbmZvPy5sYW5kbWFyaykgfV0gfSkgfSxcbiAgeyBrZXk6ICdob3RlbF9hbWVuaXRpZXMnLCB0eXBlOiAnaG90ZWwnLCBsYWJlbDogJ0hvdGVsIEFtZW5pdGllcycsIHN1YnRpdGxlOiAnUG9vbCDCtyBHeW0gwrcgV2ktRmknLCBpY29uOiAncGkgcGktc3RhcicsXG4gICAgYXBpRmllbGQ6ICdob3RlbF9hbWVuaXRpZXMnLFxuICAgIGZvcm1hdHRlcjogKGRhdGEpID0+IHsgY29uc3QgYW1lbml0aWVzOiBzdHJpbmdbXSA9IGRhdGE/LmhvdGVsX2FtZW5pdGllcz8ubGlzdCA/PyBbXTsgcmV0dXJuIHsgdGl0bGU6ICdBbWVuaXRpZXMnLCBzdWJ0aXRsZTogYCR7YW1lbml0aWVzLmxlbmd0aH0gYW1lbml0aWVzIGF2YWlsYWJsZWAsIHBvaW50czogYW1lbml0aWVzLmxlbmd0aCA+IDAgPyBhbWVuaXRpZXMubWFwKChhKSA9PiAoeyBsYWJlbDogJ+KckycsIHZhbHVlOiBhIH0pKSA6IFt7IGxhYmVsOiAnQW1lbml0aWVzJywgdmFsdWU6ICdOb3QgYXZhaWxhYmxlJyB9XSB9OyB9IH0sXG4gIHsga2V5OiAnbmVhcmJ5X3BsYWNlcycsIHR5cGU6ICdob3RlbCcsIGxhYmVsOiAnTmVhcmJ5IFBsYWNlcycsIHN1YnRpdGxlOiAnQWlycG9ydCDCtyBBdHRyYWN0aW9ucycsIGljb246ICdwaSBwaS1jb21wYXNzJyxcbiAgICBhcGlGaWVsZDogJ25lYXJieV9wbGFjZXMnLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZm9ybWF0dGVyOiAoZGF0YSkgPT4geyBjb25zdCBwbGFjZXM6IGFueVtdID0gZGF0YT8ubmVhcmJ5X3BsYWNlcz8ucGxhY2VzID8/IFtdOyByZXR1cm4geyB0aXRsZTogJ05lYXJieSBQbGFjZXMnLCBwb2ludHM6IHBsYWNlcy5sZW5ndGggPiAwID8gcGxhY2VzLmZsYXRNYXAoKHA6IGFueSkgPT4gW3sgbGFiZWw6IG5hKHA/LnR5cGUpLCB2YWx1ZTogYCR7bmEocD8ubmFtZSl9ICgke25hKHA/LmRpc3RhbmNlKX0pYCB9XSkgOiBbeyBsYWJlbDogJ1BsYWNlcycsIHZhbHVlOiAnTm90IGF2YWlsYWJsZScgfV0gfTsgfSB9LFxuICB7IGtleTogJ2V4cGVyaWVuY2VzJywgdHlwZTogJ2hvdGVsJywgbGFiZWw6ICdFeHBlcmllbmNlcycsIHN1YnRpdGxlOiAnVG91cnMgwrcgQWN0aXZpdGllcycsIGljb246ICdwaSBwaS1zdGFyLWZpbGwnLFxuICAgIGFwaUZpZWxkOiAnZXhwZXJpZW5jZXMnLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZm9ybWF0dGVyOiAoZGF0YSkgPT4geyBjb25zdCBpdGVtczogYW55W10gPSBkYXRhPy5leHBlcmllbmNlcz8ubGlzdCA/PyBbXTsgcmV0dXJuIHsgdGl0bGU6ICdBdmFpbGFibGUgRXhwZXJpZW5jZXMnLCBwb2ludHM6IGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtcy5tYXAoKGU6IGFueSkgPT4gKHsgbGFiZWw6IG5hKGU/Lm5hbWUpLCB2YWx1ZTogbmEoZT8ucHJpY2UpIH0pKSA6IFt7IGxhYmVsOiAnRXhwZXJpZW5jZXMnLCB2YWx1ZTogJ05vdCBhdmFpbGFibGUnIH1dIH07IH0gfSxcbiAgeyBrZXk6ICdwYXltZW50X3N0YXR1cycsIHR5cGU6ICdob3RlbCcsIGxhYmVsOiAnUGF5bWVudCBTdGF0dXMnLCBzdWJ0aXRsZTogJ0NoYXJnZXMgwrcgUmVjZWlwdCcsIGljb246ICdwaSBwaS1jcmVkaXQtY2FyZCcsXG4gICAgYXBpRmllbGQ6ICdwYXltZW50X3N0YXR1cycsXG4gICAgZm9ybWF0dGVyOiAoZGF0YSkgPT4gKHsgdGl0bGU6ICdQYXltZW50IERldGFpbHMnLCBzdWJ0aXRsZTogbmEoZGF0YT8ucGF5bWVudF9zdGF0dXM/Lm1ldGhvZCksXG4gICAgICBwb2ludHM6IFt7IGxhYmVsOiAnU3RhdHVzJywgdmFsdWU6IG5hKGRhdGE/LnBheW1lbnRfc3RhdHVzPy5zdGF0dXMpIH0sIHsgbGFiZWw6ICdBbW91bnQgcGFpZCcsIHZhbHVlOiBuYShkYXRhPy5wYXltZW50X3N0YXR1cz8uYW1vdW50KSB9LCB7IGxhYmVsOiAnQ3VycmVuY3knLCB2YWx1ZTogbmEoZGF0YT8ucGF5bWVudF9zdGF0dXM/LmN1cnJlbmN5KSB9LCB7IGxhYmVsOiAnVHJhbnNhY3Rpb24nLCB2YWx1ZTogbmEoZGF0YT8ucGF5bWVudF9zdGF0dXM/LnRyYW5zYWN0aW9uX2lkKSB9LCB7IGxhYmVsOiAnRGF0ZScsIHZhbHVlOiBuYShkYXRhPy5wYXltZW50X3N0YXR1cz8uZGF0ZSkgfV0gfSkgfSxcbiAgeyBrZXk6ICd3YWxsZXQnLCB0eXBlOiAnaG90ZWwnLCBsYWJlbDogJ1dhbGxldCAmIENyZWRpdHMnLCBzdWJ0aXRsZTogJ0JhbGFuY2UgwrcgQ2FzaGJhY2snLCBpY29uOiAncGkgcGktd2FsbGV0JyxcbiAgICBhcGlGaWVsZDogJ3dhbGxldCcsXG4gICAgZm9ybWF0dGVyOiAoZGF0YSkgPT4gKHsgdGl0bGU6ICdXYWxsZXQgU3VtbWFyeScsXG4gICAgICBwb2ludHM6IFt7IGxhYmVsOiAnQmFsYW5jZScsIHZhbHVlOiBuYShkYXRhPy53YWxsZXQ/LmJhbGFuY2UpIH0sIHsgbGFiZWw6ICdDYXNoYmFjaycsIHZhbHVlOiBuYShkYXRhPy53YWxsZXQ/LmNhc2hiYWNrKSB9LCB7IGxhYmVsOiAnUHJvbW8gY3JlZGl0JywgdmFsdWU6IG5hKGRhdGE/LndhbGxldD8ucHJvbW9fY3JlZGl0KSB9LCB7IGxhYmVsOiAnTGFzdCB1cGRhdGVkJywgdmFsdWU6IG5hKGRhdGE/LndhbGxldD8udXBkYXRlZF9hdCkgfV0gfSkgfSxcbiAgeyBrZXk6ICdjYW5jZWxsYXRpb25fcG9saWN5JywgdHlwZTogJ2hvdGVsJywgbGFiZWw6ICdDYW5jZWxsYXRpb24gUG9saWN5Jywgc3VidGl0bGU6ICdGZWVzIMK3IERlYWRsaW5lJywgaWNvbjogJ3BpIHBpLWJhbicsXG4gICAgYXBpRmllbGQ6ICdjYW5jZWxsYXRpb25fcG9saWN5JyxcbiAgICBmb3JtYXR0ZXI6IChkYXRhKSA9PiAoeyB0aXRsZTogJ0NhbmNlbGxhdGlvbiBSdWxlcycsIHN1YnRpdGxlOiBkYXRhPy5jYW5jZWxsYXRpb25fcG9saWN5Py5yZWZ1bmRhYmxlID8gJ1JlZnVuZGFibGUnIDogJ05vbi1yZWZ1bmRhYmxlJyxcbiAgICAgIHBvaW50czogW3sgbGFiZWw6ICdSZWZ1bmRhYmxlJywgdmFsdWU6IGRhdGE/LmNhbmNlbGxhdGlvbl9wb2xpY3k/LnJlZnVuZGFibGUgPyAnWWVzJyA6ICdObycgfSwgeyBsYWJlbDogJ0NhbmNlbCBmZWUnLCB2YWx1ZTogbmEoZGF0YT8uY2FuY2VsbGF0aW9uX3BvbGljeT8uZmVlKSB9LCB7IGxhYmVsOiAnRGVhZGxpbmUnLCB2YWx1ZTogbmEoZGF0YT8uY2FuY2VsbGF0aW9uX3BvbGljeT8uZGVhZGxpbmUpIH0sIHsgbGFiZWw6ICdQb2xpY3knLCB2YWx1ZTogbmEoZGF0YT8uY2FuY2VsbGF0aW9uX3BvbGljeT8uZGVzY3JpcHRpb24pIH1dLFxuICAgICAgY2FsbG91dDogeyB0eXBlOiAnd2FybmluZycsIG1lc3NhZ2U6IGRhdGE/LmNhbmNlbGxhdGlvbl9wb2xpY3k/Lndhcm5pbmcgPz8gJ0Fsd2F5cyB2ZXJpZnkgY2FuY2VsbGF0aW9uIHRlcm1zIHdpdGggdGhlIGhvdGVsLicgfSB9KSB9LFxuICB7IGtleTogJ2JyZWFrZmFzdCcsIHR5cGU6ICdob3RlbCcsIGxhYmVsOiAnTWVhbHMgJiBCcmVha2Zhc3QnLCBzdWJ0aXRsZTogJ0JvYXJkIGJhc2lzJywgaWNvbjogJ3BpIHBpLWxpc3QnLFxuICAgIGFwaUZpZWxkOiAnbWVhbHMnLFxuICAgIGZvcm1hdHRlcjogKGRhdGEpID0+ICh7IHRpdGxlOiBuYShkYXRhPy5tZWFscz8uYm9hcmRfYmFzaXMpLCBzdWJ0aXRsZTogJ01lYWwgaW5jbHVzaW9ucycsXG4gICAgICBwb2ludHM6IFt7IGxhYmVsOiAnQm9hcmQgYmFzaXMnLCB2YWx1ZTogbmEoZGF0YT8ubWVhbHM/LmJvYXJkX2Jhc2lzKSB9LCB7IGxhYmVsOiAnQnJlYWtmYXN0JywgdmFsdWU6IG5hKGRhdGE/Lm1lYWxzPy5icmVha2Zhc3QpIH0sIHsgbGFiZWw6ICdMdW5jaCcsIHZhbHVlOiBuYShkYXRhPy5tZWFscz8ubHVuY2gpIH0sIHsgbGFiZWw6ICdEaW5uZXInLCB2YWx1ZTogbmEoZGF0YT8ubWVhbHM/LmRpbm5lcikgfV0gfSkgfSxcbl07XG4iXX0=
@@ -0,0 +1,116 @@
1
+ export const AR_LABELS = {
2
+ 'PNR': 'رقم الحجز',
3
+ 'Booking ID': 'معرف الحجز',
4
+ 'Supplier ref': 'مرجع المورد',
5
+ 'Supplier': 'المورد',
6
+ 'Cross-seller': 'حجز متقاطع',
7
+ 'Departure': 'المغادرة',
8
+ 'Arrival': 'الوصول',
9
+ 'Duration': 'المدة',
10
+ 'Direction': 'الاتجاه',
11
+ 'Departure time': 'وقت المغادرة',
12
+ 'Arrival time': 'وقت الوصول',
13
+ 'Stops': 'التوقفات',
14
+ 'Journey duration': 'مدة الرحلة',
15
+ 'Airline(s)': 'شركة الطيران',
16
+ 'Flight no.': 'رقم الرحلة',
17
+ 'Flight': 'الرحلة',
18
+ 'IATA code': 'رمز IATA',
19
+ 'Aircraft': 'نوع الطائرة',
20
+ 'Operating code': 'رمز التشغيل',
21
+ 'Route': 'المسار',
22
+ 'Cabin': 'درجة المقصورة',
23
+ 'Fare brand': 'نوع التعرفة',
24
+ 'Fare desc.': 'وصف التعرفة',
25
+ 'Departure airport': 'مطار المغادرة',
26
+ 'Dep. terminal': 'صالة المغادرة',
27
+ 'Arrival airport': 'مطار الوصول',
28
+ 'Arr. terminal': 'صالة الوصول',
29
+ 'Type': 'النوع',
30
+ 'Gender': 'الجنس',
31
+ 'Date of birth': 'تاريخ الميلاد',
32
+ 'Passport': 'جواز السفر',
33
+ 'Nationality': 'الجنسية',
34
+ 'Passport exp.': 'انتهاء الجواز',
35
+ 'Issue country': 'بلد الإصدار',
36
+ 'Doc type': 'نوع الوثيقة',
37
+ 'Email': 'البريد الإلكتروني',
38
+ 'Phone': 'الهاتف',
39
+ 'Total': 'الإجمالي',
40
+ 'Adults (ADT)': 'بالغون',
41
+ 'Children (CNN)': 'أطفال',
42
+ 'Infants (INF)': 'رضع',
43
+ 'Status': 'الحالة',
44
+ 'Amount': 'المبلغ',
45
+ 'Paid amount': 'المبلغ المدفوع',
46
+ 'Payment method': 'طريقة الدفع',
47
+ 'Date': 'التاريخ',
48
+ 'Currency': 'العملة',
49
+ 'Transaction ref': 'مرجع المعاملة',
50
+ 'Amount paid': 'المبلغ المدفوع',
51
+ 'Source': 'المصدر',
52
+ 'Total paid': 'إجمالي المدفوع',
53
+ 'Adult · Cabin': 'بالغ · حقيبة مقصورة',
54
+ 'Adult · Checked': 'بالغ · حقيبة مسجلة',
55
+ 'Child · Cabin': 'طفل · حقيبة مقصورة',
56
+ 'Child · Checked': 'طفل · حقيبة مسجلة',
57
+ 'Infant · Cabin': 'رضيع · حقيبة مقصورة',
58
+ 'Infant · Checked': 'رضيع · حقيبة مسجلة',
59
+ 'Checked': 'حقيبة مسجلة',
60
+ 'Original amount': 'المبلغ الأصلي',
61
+ 'Cancellation fee': 'رسوم الإلغاء',
62
+ 'Total refund': 'إجمالي الاسترداد',
63
+ 'Refundable': 'قابل للاسترداد',
64
+ 'Cancel fee': 'رسوم الإلغاء',
65
+ 'Deadline': 'الموعد النهائي',
66
+ 'Policy': 'السياسة',
67
+ 'Penalty': 'الغرامة',
68
+ 'Non-refundable charge': 'رسوم غير قابلة للاسترداد',
69
+ 'Non-refundable ancillary': 'خدمات إضافية غير قابلة للاسترداد',
70
+ 'Gift deduction': 'خصم الهدية',
71
+ 'Coupon deduction': 'خصم القسيمة',
72
+ 'Loyalty deduction': 'خصم نقاط الولاء',
73
+ 'Card refund': 'استرداد البطاقة',
74
+ 'Credit refund': 'استرداد الرصيد',
75
+ 'Wallet refund': 'استرداد المحفظة',
76
+ 'Loyalty points refund': 'استرداد نقاط الولاء',
77
+ 'Leg total refund': 'إجمالي استرداد هذا الاتجاه',
78
+ 'Room type': 'نوع الغرفة',
79
+ 'Beds': 'الأسرّة',
80
+ 'View': 'الإطلالة',
81
+ 'Floor': 'الطابق',
82
+ 'Size': 'المساحة',
83
+ 'Check-in date': 'تاريخ الوصول',
84
+ 'Check-in time': 'وقت الوصول',
85
+ 'Check-out date': 'تاريخ المغادرة',
86
+ 'Check-out time': 'وقت المغادرة',
87
+ 'Nights': 'عدد الليالي',
88
+ 'Hotel': 'الفندق',
89
+ 'Stars': 'النجوم',
90
+ 'Address': 'العنوان',
91
+ 'City': 'المدينة',
92
+ 'Country': 'الدولة',
93
+ 'Zip code': 'الرمز البريدي',
94
+ 'Landmark': 'معلم قريب',
95
+ 'Balance': 'الرصيد',
96
+ 'Cashback': 'كاش باك',
97
+ 'Promo credit': 'رصيد ترويجي',
98
+ 'Last updated': 'آخر تحديث',
99
+ 'Board basis': 'أساس الإقامة',
100
+ 'Breakfast': 'الإفطار',
101
+ 'Lunch': 'الغداء',
102
+ 'Dinner': 'العشاء',
103
+ };
104
+ export const AR_SECTION_TITLES = {
105
+ 'Booking Reference': 'مرجع الحجز',
106
+ 'Payment': 'الدفع',
107
+ 'Summary': 'ملخص',
108
+ 'Transaction': 'المعاملة',
109
+ 'References': 'المراجع',
110
+ 'Total': 'الإجمالي',
111
+ 'Info': 'معلومات',
112
+ 'Status': 'الحالة',
113
+ 'Add-on Baggage': 'أمتعة إضافية',
114
+ 'Change History': 'سجل التغييرات',
115
+ };
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWxzLmFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb25maWcvbGFiZWxzLmFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBMkI7SUFDL0MsS0FBSyxFQUEyQixXQUFXO0lBQzNDLFlBQVksRUFBb0IsWUFBWTtJQUM1QyxjQUFjLEVBQWtCLGFBQWE7SUFDN0MsVUFBVSxFQUFzQixRQUFRO0lBQ3hDLGNBQWMsRUFBa0IsWUFBWTtJQUM1QyxXQUFXLEVBQXFCLFVBQVU7SUFDMUMsU0FBUyxFQUF1QixRQUFRO0lBQ3hDLFVBQVUsRUFBc0IsT0FBTztJQUN2QyxXQUFXLEVBQXFCLFNBQVM7SUFDekMsZ0JBQWdCLEVBQWdCLGNBQWM7SUFDOUMsY0FBYyxFQUFrQixZQUFZO0lBQzVDLE9BQU8sRUFBeUIsVUFBVTtJQUMxQyxrQkFBa0IsRUFBYyxZQUFZO0lBQzVDLFlBQVksRUFBb0IsY0FBYztJQUM5QyxZQUFZLEVBQW9CLFlBQVk7SUFDNUMsUUFBUSxFQUF3QixRQUFRO0lBQ3hDLFdBQVcsRUFBcUIsVUFBVTtJQUMxQyxVQUFVLEVBQXNCLGFBQWE7SUFDN0MsZ0JBQWdCLEVBQWdCLGFBQWE7SUFDN0MsT0FBTyxFQUF5QixRQUFRO0lBQ3hDLE9BQU8sRUFBeUIsZUFBZTtJQUMvQyxZQUFZLEVBQW9CLGFBQWE7SUFDN0MsWUFBWSxFQUFvQixhQUFhO0lBQzdDLG1CQUFtQixFQUFhLGVBQWU7SUFDL0MsZUFBZSxFQUFpQixlQUFlO0lBQy9DLGlCQUFpQixFQUFlLGFBQWE7SUFDN0MsZUFBZSxFQUFpQixhQUFhO0lBQzdDLE1BQU0sRUFBMEIsT0FBTztJQUN2QyxRQUFRLEVBQXdCLE9BQU87SUFDdkMsZUFBZSxFQUFpQixlQUFlO0lBQy9DLFVBQVUsRUFBc0IsWUFBWTtJQUM1QyxhQUFhLEVBQW1CLFNBQVM7SUFDekMsZUFBZSxFQUFpQixlQUFlO0lBQy9DLGVBQWUsRUFBaUIsYUFBYTtJQUM3QyxVQUFVLEVBQXNCLGFBQWE7SUFDN0MsT0FBTyxFQUF5QixtQkFBbUI7SUFDbkQsT0FBTyxFQUF5QixRQUFRO0lBQ3hDLE9BQU8sRUFBeUIsVUFBVTtJQUMxQyxjQUFjLEVBQWtCLFFBQVE7SUFDeEMsZ0JBQWdCLEVBQWdCLE9BQU87SUFDdkMsZUFBZSxFQUFpQixLQUFLO0lBQ3JDLFFBQVEsRUFBd0IsUUFBUTtJQUN4QyxRQUFRLEVBQXdCLFFBQVE7SUFDeEMsYUFBYSxFQUFtQixnQkFBZ0I7SUFDaEQsZ0JBQWdCLEVBQWdCLGFBQWE7SUFDN0MsTUFBTSxFQUEwQixTQUFTO0lBQ3pDLFVBQVUsRUFBc0IsUUFBUTtJQUN4QyxpQkFBaUIsRUFBZSxlQUFlO0lBQy9DLGFBQWEsRUFBbUIsZ0JBQWdCO0lBQ2hELFFBQVEsRUFBd0IsUUFBUTtJQUN4QyxZQUFZLEVBQW9CLGdCQUFnQjtJQUNoRCxlQUFlLEVBQWlCLHFCQUFxQjtJQUNyRCxpQkFBaUIsRUFBZSxvQkFBb0I7SUFDcEQsZUFBZSxFQUFpQixvQkFBb0I7SUFDcEQsaUJBQWlCLEVBQWUsbUJBQW1CO0lBQ25ELGdCQUFnQixFQUFnQixxQkFBcUI7SUFDckQsa0JBQWtCLEVBQWMsb0JBQW9CO0lBQ3BELFNBQVMsRUFBdUIsYUFBYTtJQUM3QyxpQkFBaUIsRUFBZSxlQUFlO0lBQy9DLGtCQUFrQixFQUFjLGNBQWM7SUFDOUMsY0FBYyxFQUFrQixrQkFBa0I7SUFDbEQsWUFBWSxFQUFvQixnQkFBZ0I7SUFDaEQsWUFBWSxFQUFvQixjQUFjO0lBQzlDLFVBQVUsRUFBc0IsZ0JBQWdCO0lBQ2hELFFBQVEsRUFBd0IsU0FBUztJQUN6QyxTQUFTLEVBQXVCLFNBQVM7SUFDekMsdUJBQXVCLEVBQVMsMEJBQTBCO0lBQzFELDBCQUEwQixFQUFNLGtDQUFrQztJQUNsRSxnQkFBZ0IsRUFBZ0IsWUFBWTtJQUM1QyxrQkFBa0IsRUFBYyxhQUFhO0lBQzdDLG1CQUFtQixFQUFhLGlCQUFpQjtJQUNqRCxhQUFhLEVBQW1CLGlCQUFpQjtJQUNqRCxlQUFlLEVBQWlCLGdCQUFnQjtJQUNoRCxlQUFlLEVBQWlCLGlCQUFpQjtJQUNqRCx1QkFBdUIsRUFBUyxxQkFBcUI7SUFDckQsa0JBQWtCLEVBQWMsNEJBQTRCO0lBQzVELFdBQVcsRUFBcUIsWUFBWTtJQUM1QyxNQUFNLEVBQTBCLFNBQVM7SUFDekMsTUFBTSxFQUEwQixVQUFVO0lBQzFDLE9BQU8sRUFBeUIsUUFBUTtJQUN4QyxNQUFNLEVBQTBCLFNBQVM7SUFDekMsZUFBZSxFQUFpQixjQUFjO0lBQzlDLGVBQWUsRUFBaUIsWUFBWTtJQUM1QyxnQkFBZ0IsRUFBZ0IsZ0JBQWdCO0lBQ2hELGdCQUFnQixFQUFnQixjQUFjO0lBQzlDLFFBQVEsRUFBd0IsYUFBYTtJQUM3QyxPQUFPLEVBQXlCLFFBQVE7SUFDeEMsT0FBTyxFQUF5QixRQUFRO0lBQ3hDLFNBQVMsRUFBdUIsU0FBUztJQUN6QyxNQUFNLEVBQTBCLFNBQVM7SUFDekMsU0FBUyxFQUF1QixRQUFRO0lBQ3hDLFVBQVUsRUFBc0IsZUFBZTtJQUMvQyxVQUFVLEVBQXNCLFdBQVc7SUFDM0MsU0FBUyxFQUF1QixRQUFRO0lBQ3hDLFVBQVUsRUFBc0IsU0FBUztJQUN6QyxjQUFjLEVBQWtCLGFBQWE7SUFDN0MsY0FBYyxFQUFrQixXQUFXO0lBQzNDLGFBQWEsRUFBbUIsY0FBYztJQUM5QyxXQUFXLEVBQXFCLFNBQVM7SUFDekMsT0FBTyxFQUF5QixRQUFRO0lBQ3hDLFFBQVEsRUFBd0IsUUFBUTtDQUN6QyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQTJCO0lBQ3ZELG1CQUFtQixFQUFLLFlBQVk7SUFDcEMsU0FBUyxFQUFlLE9BQU87SUFDL0IsU0FBUyxFQUFlLE1BQU07SUFDOUIsYUFBYSxFQUFXLFVBQVU7SUFDbEMsWUFBWSxFQUFZLFNBQVM7SUFDakMsT0FBTyxFQUFpQixVQUFVO0lBQ2xDLE1BQU0sRUFBa0IsU0FBUztJQUNqQyxRQUFRLEVBQWdCLFFBQVE7SUFDaEMsZ0JBQWdCLEVBQVEsY0FBYztJQUN0QyxnQkFBZ0IsRUFBUSxlQUFlO0NBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQVJfTEFCRUxTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnUE5SJzogICAgICAgICAgICAgICAgICAgICAgICAgICfYsdmC2YUg2KfZhNit2KzYsicsXG4gICdCb29raW5nIElEJzogICAgICAgICAgICAgICAgICAgJ9mF2LnYsdmBINin2YTYrdis2LInLFxuICAnU3VwcGxpZXIgcmVmJzogICAgICAgICAgICAgICAgICfZhdix2KzYuSDYp9mE2YXZiNix2K8nLFxuICAnU3VwcGxpZXInOiAgICAgICAgICAgICAgICAgICAgICfYp9mE2YXZiNix2K8nLFxuICAnQ3Jvc3Mtc2VsbGVyJzogICAgICAgICAgICAgICAgICfYrdis2LIg2YXYqtmC2KfYt9i5JyxcbiAgJ0RlcGFydHVyZSc6ICAgICAgICAgICAgICAgICAgICAn2KfZhNmF2LrYp9iv2LHYqScsXG4gICdBcnJpdmFsJzogICAgICAgICAgICAgICAgICAgICAgJ9in2YTZiNi12YjZhCcsXG4gICdEdXJhdGlvbic6ICAgICAgICAgICAgICAgICAgICAgJ9in2YTZhdiv2KknLFxuICAnRGlyZWN0aW9uJzogICAgICAgICAgICAgICAgICAgICfYp9mE2KfYqtis2KfZhycsXG4gICdEZXBhcnR1cmUgdGltZSc6ICAgICAgICAgICAgICAgJ9mI2YLYqiDYp9mE2YXYutin2K/YsdipJyxcbiAgJ0Fycml2YWwgdGltZSc6ICAgICAgICAgICAgICAgICAn2YjZgtiqINin2YTZiNi12YjZhCcsXG4gICdTdG9wcyc6ICAgICAgICAgICAgICAgICAgICAgICAgJ9in2YTYqtmI2YLZgdin2KonLFxuICAnSm91cm5leSBkdXJhdGlvbic6ICAgICAgICAgICAgICfZhdiv2Kkg2KfZhNix2K3ZhNipJyxcbiAgJ0FpcmxpbmUocyknOiAgICAgICAgICAgICAgICAgICAn2LTYsdmD2Kkg2KfZhNi32YrYsdin2YYnLFxuICAnRmxpZ2h0IG5vLic6ICAgICAgICAgICAgICAgICAgICfYsdmC2YUg2KfZhNix2K3ZhNipJyxcbiAgJ0ZsaWdodCc6ICAgICAgICAgICAgICAgICAgICAgICAn2KfZhNix2K3ZhNipJyxcbiAgJ0lBVEEgY29kZSc6ICAgICAgICAgICAgICAgICAgICAn2LHZhdiyIElBVEEnLFxuICAnQWlyY3JhZnQnOiAgICAgICAgICAgICAgICAgICAgICfZhtmI2Lkg2KfZhNi32KfYptix2KknLFxuICAnT3BlcmF0aW5nIGNvZGUnOiAgICAgICAgICAgICAgICfYsdmF2LIg2KfZhNiq2LTYutmK2YQnLFxuICAnUm91dGUnOiAgICAgICAgICAgICAgICAgICAgICAgICfYp9mE2YXYs9in2LEnLFxuICAnQ2FiaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICfYr9ix2KzYqSDYp9mE2YXZgti12YjYsdipJyxcbiAgJ0ZhcmUgYnJhbmQnOiAgICAgICAgICAgICAgICAgICAn2YbZiNi5INin2YTYqti52LHZgdipJyxcbiAgJ0ZhcmUgZGVzYy4nOiAgICAgICAgICAgICAgICAgICAn2YjYtdmBINin2YTYqti52LHZgdipJyxcbiAgJ0RlcGFydHVyZSBhaXJwb3J0JzogICAgICAgICAgICAn2YXYt9in2LEg2KfZhNmF2LrYp9iv2LHYqScsXG4gICdEZXAuIHRlcm1pbmFsJzogICAgICAgICAgICAgICAgJ9i12KfZhNipINin2YTZhdi62KfYr9ix2KknLFxuICAnQXJyaXZhbCBhaXJwb3J0JzogICAgICAgICAgICAgICfZhdi32KfYsSDYp9mE2YjYtdmI2YQnLFxuICAnQXJyLiB0ZXJtaW5hbCc6ICAgICAgICAgICAgICAgICfYtdin2YTYqSDYp9mE2YjYtdmI2YQnLFxuICAnVHlwZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICfYp9mE2YbZiNi5JyxcbiAgJ0dlbmRlcic6ICAgICAgICAgICAgICAgICAgICAgICAn2KfZhNis2YbYsycsXG4gICdEYXRlIG9mIGJpcnRoJzogICAgICAgICAgICAgICAgJ9iq2KfYsdmK2K4g2KfZhNmF2YrZhNin2K8nLFxuICAnUGFzc3BvcnQnOiAgICAgICAgICAgICAgICAgICAgICfYrNmI2KfYsiDYp9mE2LPZgdixJyxcbiAgJ05hdGlvbmFsaXR5JzogICAgICAgICAgICAgICAgICAn2KfZhNis2YbYs9mK2KknLFxuICAnUGFzc3BvcnQgZXhwLic6ICAgICAgICAgICAgICAgICfYp9mG2KrZh9in2KEg2KfZhNis2YjYp9iyJyxcbiAgJ0lzc3VlIGNvdW50cnknOiAgICAgICAgICAgICAgICAn2KjZhNivINin2YTYpdi12K/Yp9ixJyxcbiAgJ0RvYyB0eXBlJzogICAgICAgICAgICAgICAgICAgICAn2YbZiNi5INin2YTZiNir2YrZgtipJyxcbiAgJ0VtYWlsJzogICAgICAgICAgICAgICAgICAgICAgICAn2KfZhNio2LHZitivINin2YTYpdmE2YPYqtix2YjZhtmKJyxcbiAgJ1Bob25lJzogICAgICAgICAgICAgICAgICAgICAgICAn2KfZhNmH2KfYqtmBJyxcbiAgJ1RvdGFsJzogICAgICAgICAgICAgICAgICAgICAgICAn2KfZhNil2KzZhdin2YTZiicsXG4gICdBZHVsdHMgKEFEVCknOiAgICAgICAgICAgICAgICAgJ9io2KfZhNi62YjZhicsXG4gICdDaGlsZHJlbiAoQ05OKSc6ICAgICAgICAgICAgICAgJ9ij2LfZgdin2YQnLFxuICAnSW5mYW50cyAoSU5GKSc6ICAgICAgICAgICAgICAgICfYsdi22LknLFxuICAnU3RhdHVzJzogICAgICAgICAgICAgICAgICAgICAgICfYp9mE2K3Yp9mE2KknLFxuICAnQW1vdW50JzogICAgICAgICAgICAgICAgICAgICAgICfYp9mE2YXYqNmE2LonLFxuICAnUGFpZCBhbW91bnQnOiAgICAgICAgICAgICAgICAgICfYp9mE2YXYqNmE2Log2KfZhNmF2K/ZgdmI2LknLFxuICAnUGF5bWVudCBtZXRob2QnOiAgICAgICAgICAgICAgICfYt9ix2YrZgtipINin2YTYr9mB2LknLFxuICAnRGF0ZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICfYp9mE2KrYp9ix2YrYricsXG4gICdDdXJyZW5jeSc6ICAgICAgICAgICAgICAgICAgICAgJ9in2YTYudmF2YTYqScsXG4gICdUcmFuc2FjdGlvbiByZWYnOiAgICAgICAgICAgICAgJ9mF2LHYrNi5INin2YTZhdi52KfZhdmE2KknLFxuICAnQW1vdW50IHBhaWQnOiAgICAgICAgICAgICAgICAgICfYp9mE2YXYqNmE2Log2KfZhNmF2K/ZgdmI2LknLFxuICAnU291cmNlJzogICAgICAgICAgICAgICAgICAgICAgICfYp9mE2YXYtdiv2LEnLFxuICAnVG90YWwgcGFpZCc6ICAgICAgICAgICAgICAgICAgICfYpdis2YXYp9mE2Yog2KfZhNmF2K/ZgdmI2LknLFxuICAnQWR1bHQgwrcgQ2FiaW4nOiAgICAgICAgICAgICAgICAn2KjYp9mE2Logwrcg2K3ZgtmK2KjYqSDZhdmC2LXZiNix2KknLFxuICAnQWR1bHQgwrcgQ2hlY2tlZCc6ICAgICAgICAgICAgICAn2KjYp9mE2Logwrcg2K3ZgtmK2KjYqSDZhdiz2KzZhNipJyxcbiAgJ0NoaWxkIMK3IENhYmluJzogICAgICAgICAgICAgICAgJ9i32YHZhCDCtyDYrdmC2YrYqNipINmF2YLYtdmI2LHYqScsXG4gICdDaGlsZCDCtyBDaGVja2VkJzogICAgICAgICAgICAgICfYt9mB2YQgwrcg2K3ZgtmK2KjYqSDZhdiz2KzZhNipJyxcbiAgJ0luZmFudCDCtyBDYWJpbic6ICAgICAgICAgICAgICAgJ9ix2LbZiti5IMK3INit2YLZitio2Kkg2YXZgti12YjYsdipJyxcbiAgJ0luZmFudCDCtyBDaGVja2VkJzogICAgICAgICAgICAgJ9ix2LbZiti5IMK3INit2YLZitio2Kkg2YXYs9is2YTYqScsXG4gICdDaGVja2VkJzogICAgICAgICAgICAgICAgICAgICAgJ9it2YLZitio2Kkg2YXYs9is2YTYqScsXG4gICdPcmlnaW5hbCBhbW91bnQnOiAgICAgICAgICAgICAgJ9in2YTZhdio2YTYuiDYp9mE2KPYtdmE2YonLFxuICAnQ2FuY2VsbGF0aW9uIGZlZSc6ICAgICAgICAgICAgICfYsdiz2YjZhSDYp9mE2KXZhNi62KfYoScsXG4gICdUb3RhbCByZWZ1bmQnOiAgICAgICAgICAgICAgICAgJ9il2KzZhdin2YTZiiDYp9mE2KfYs9iq2LHYr9in2K8nLFxuICAnUmVmdW5kYWJsZSc6ICAgICAgICAgICAgICAgICAgICfZgtin2KjZhCDZhNmE2KfYs9iq2LHYr9in2K8nLFxuICAnQ2FuY2VsIGZlZSc6ICAgICAgICAgICAgICAgICAgICfYsdiz2YjZhSDYp9mE2KXZhNi62KfYoScsXG4gICdEZWFkbGluZSc6ICAgICAgICAgICAgICAgICAgICAgJ9in2YTZhdmI2LnYryDYp9mE2YbZh9in2KbZiicsXG4gICdQb2xpY3knOiAgICAgICAgICAgICAgICAgICAgICAgJ9in2YTYs9mK2KfYs9ipJyxcbiAgJ1BlbmFsdHknOiAgICAgICAgICAgICAgICAgICAgICAn2KfZhNi62LHYp9mF2KknLFxuICAnTm9uLXJlZnVuZGFibGUgY2hhcmdlJzogICAgICAgICfYsdiz2YjZhSDYutmK2LEg2YLYp9io2YTYqSDZhNmE2KfYs9iq2LHYr9in2K8nLFxuICAnTm9uLXJlZnVuZGFibGUgYW5jaWxsYXJ5JzogICAgICfYrtiv2YXYp9iqINil2LbYp9mB2YrYqSDYutmK2LEg2YLYp9io2YTYqSDZhNmE2KfYs9iq2LHYr9in2K8nLFxuICAnR2lmdCBkZWR1Y3Rpb24nOiAgICAgICAgICAgICAgICfYrti12YUg2KfZhNmH2K/ZitipJyxcbiAgJ0NvdXBvbiBkZWR1Y3Rpb24nOiAgICAgICAgICAgICAn2K7YtdmFINin2YTZgtiz2YrZhdipJyxcbiAgJ0xveWFsdHkgZGVkdWN0aW9uJzogICAgICAgICAgICAn2K7YtdmFINmG2YLYp9i3INin2YTZiNmE2KfYoScsXG4gICdDYXJkIHJlZnVuZCc6ICAgICAgICAgICAgICAgICAgJ9in2LPYqtix2K/Yp9ivINin2YTYqNi32KfZgtipJyxcbiAgJ0NyZWRpdCByZWZ1bmQnOiAgICAgICAgICAgICAgICAn2KfYs9iq2LHYr9in2K8g2KfZhNix2LXZitivJyxcbiAgJ1dhbGxldCByZWZ1bmQnOiAgICAgICAgICAgICAgICAn2KfYs9iq2LHYr9in2K8g2KfZhNmF2K3Zgdi42KknLFxuICAnTG95YWx0eSBwb2ludHMgcmVmdW5kJzogICAgICAgICfYp9iz2KrYsdiv2KfYryDZhtmC2KfYtyDYp9mE2YjZhNin2KEnLFxuICAnTGVnIHRvdGFsIHJlZnVuZCc6ICAgICAgICAgICAgICfYpdis2YXYp9mE2Yog2KfYs9iq2LHYr9in2K8g2YfYsNinINin2YTYp9iq2KzYp9mHJyxcbiAgJ1Jvb20gdHlwZSc6ICAgICAgICAgICAgICAgICAgICAn2YbZiNi5INin2YTYutix2YHYqScsXG4gICdCZWRzJzogICAgICAgICAgICAgICAgICAgICAgICAgJ9in2YTYo9iz2LHZkdipJyxcbiAgJ1ZpZXcnOiAgICAgICAgICAgICAgICAgICAgICAgICAn2KfZhNil2LfZhNin2YTYqScsXG4gICdGbG9vcic6ICAgICAgICAgICAgICAgICAgICAgICAgJ9in2YTYt9in2KjZgicsXG4gICdTaXplJzogICAgICAgICAgICAgICAgICAgICAgICAgJ9in2YTZhdiz2KfYrdipJyxcbiAgJ0NoZWNrLWluIGRhdGUnOiAgICAgICAgICAgICAgICAn2KrYp9ix2YrYriDYp9mE2YjYtdmI2YQnLFxuICAnQ2hlY2staW4gdGltZSc6ICAgICAgICAgICAgICAgICfZiNmC2Kog2KfZhNmI2LXZiNmEJyxcbiAgJ0NoZWNrLW91dCBkYXRlJzogICAgICAgICAgICAgICAn2KrYp9ix2YrYriDYp9mE2YXYutin2K/YsdipJyxcbiAgJ0NoZWNrLW91dCB0aW1lJzogICAgICAgICAgICAgICAn2YjZgtiqINin2YTZhdi62KfYr9ix2KknLFxuICAnTmlnaHRzJzogICAgICAgICAgICAgICAgICAgICAgICfYudiv2K8g2KfZhNmE2YrYp9mE2YonLFxuICAnSG90ZWwnOiAgICAgICAgICAgICAgICAgICAgICAgICfYp9mE2YHZhtiv2YInLFxuICAnU3RhcnMnOiAgICAgICAgICAgICAgICAgICAgICAgICfYp9mE2YbYrNmI2YUnLFxuICAnQWRkcmVzcyc6ICAgICAgICAgICAgICAgICAgICAgICfYp9mE2LnZhtmI2KfZhicsXG4gICdDaXR5JzogICAgICAgICAgICAgICAgICAgICAgICAgJ9in2YTZhdiv2YrZhtipJyxcbiAgJ0NvdW50cnknOiAgICAgICAgICAgICAgICAgICAgICAn2KfZhNiv2YjZhNipJyxcbiAgJ1ppcCBjb2RlJzogICAgICAgICAgICAgICAgICAgICAn2KfZhNix2YXYsiDYp9mE2KjYsdmK2K/ZiicsXG4gICdMYW5kbWFyayc6ICAgICAgICAgICAgICAgICAgICAgJ9mF2LnZhNmFINmC2LHZitioJyxcbiAgJ0JhbGFuY2UnOiAgICAgICAgICAgICAgICAgICAgICAn2KfZhNix2LXZitivJyxcbiAgJ0Nhc2hiYWNrJzogICAgICAgICAgICAgICAgICAgICAn2YPYp9i0INio2KfZgycsXG4gICdQcm9tbyBjcmVkaXQnOiAgICAgICAgICAgICAgICAgJ9ix2LXZitivINiq2LHZiNmK2KzZiicsXG4gICdMYXN0IHVwZGF0ZWQnOiAgICAgICAgICAgICAgICAgJ9ii2K7YsSDYqtit2K/ZitirJyxcbiAgJ0JvYXJkIGJhc2lzJzogICAgICAgICAgICAgICAgICAn2KPYs9in2LMg2KfZhNil2YLYp9mF2KknLFxuICAnQnJlYWtmYXN0JzogICAgICAgICAgICAgICAgICAgICfYp9mE2KXZgdi32KfYsScsXG4gICdMdW5jaCc6ICAgICAgICAgICAgICAgICAgICAgICAgJ9in2YTYutiv2KfYoScsXG4gICdEaW5uZXInOiAgICAgICAgICAgICAgICAgICAgICAgJ9in2YTYudi02KfYoScsXG59O1xuXG5leHBvcnQgY29uc3QgQVJfU0VDVElPTl9USVRMRVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdCb29raW5nIFJlZmVyZW5jZSc6ICAgICfZhdix2KzYuSDYp9mE2K3YrNiyJyxcbiAgJ1BheW1lbnQnOiAgICAgICAgICAgICAgJ9in2YTYr9mB2LknLFxuICAnU3VtbWFyeSc6ICAgICAgICAgICAgICAn2YXZhNiu2LUnLFxuICAnVHJhbnNhY3Rpb24nOiAgICAgICAgICAn2KfZhNmF2LnYp9mF2YTYqScsXG4gICdSZWZlcmVuY2VzJzogICAgICAgICAgICfYp9mE2YXYsdin2KzYuScsXG4gICdUb3RhbCc6ICAgICAgICAgICAgICAgICfYp9mE2KXYrNmF2KfZhNmKJyxcbiAgJ0luZm8nOiAgICAgICAgICAgICAgICAgJ9mF2LnZhNmI2YXYp9iqJyxcbiAgJ1N0YXR1cyc6ICAgICAgICAgICAgICAgJ9in2YTYrdin2YTYqScsXG4gICdBZGQtb24gQmFnZ2FnZSc6ICAgICAgICfYo9mF2KrYudipINil2LbYp9mB2YrYqScsXG4gICdDaGFuZ2UgSGlzdG9yeSc6ICAgICAgICfYs9is2YQg2KfZhNiq2LrZitmK2LHYp9iqJyxcbn07XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9tb2RlbHMvYWN0aW9uLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFJlc3VsdFBvaW50IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXN1bHRDYWxsb3V0IHtcbiAgdHlwZTogJ2luZm8nIHwgJ3dhcm5pbmcnIHwgJ3RpcCc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXN1bHRSb3cge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICB2YWx1ZUNsYXNzPzogJ3Bvc2l0aXZlJyB8ICduZWdhdGl2ZScgfCAnbmV1dHJhbCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdWx0U2VjdGlvbiB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvd3M6IFJlc3VsdFJvd1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3VsdENvbnRlbnQge1xuICB0aXRsZTogc3RyaW5nO1xuICBzdWJ0aXRsZT86IHN0cmluZztcbiAgcG9pbnRzPzogUmVzdWx0UG9pbnRbXTtcbiAgc2VjdGlvbnM/OiBSZXN1bHRTZWN0aW9uW107XG4gIGNhbGxvdXQ/OiBSZXN1bHRDYWxsb3V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNvbmZpZyB7XG4gIGtleTogc3RyaW5nO1xuICB0eXBlOiAnZmxpZ2h0JyB8ICdob3RlbCc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHN1YnRpdGxlOiBzdHJpbmc7XG4gIGljb246IHN0cmluZzsgLy8gUHJpbWVJY29ucyBjbGFzcyBlLmcuIFwicGkgcGktZmlsZVwiXG4gIGFwaUZpZWxkOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgaGlkZGVuPzogYm9vbGVhbjsgLy8gc2V0IHRydWUgdG8gdGVtcG9yYXJpbHkgaGlkZSBmcm9tIHRoZSBncmlkIHdpdGhvdXQgZGVsZXRpbmdcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgZm9ybWF0dGVyOiAoZGF0YTogYW55KSA9PiBSZXN1bHRDb250ZW50O1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvbW9kZWxzL2Jvb2tpbmcudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFByb2R1Y3RUeXBlID0gJ2ZsaWdodCcgfCAnaG90ZWwnO1xuXG5leHBvcnQgdHlwZSBCb29raW5nU3RhdHVzID0gJ2lkbGUnIHwgJ2xvYWRpbmcnIHwgJ3N1Y2Nlc3MnIHwgJ2Vycm9yJztcblxuZXhwb3J0IGludGVyZmFjZSBCb29raW5nUmVzcG9uc2Uge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBkYXRhOiBhbnk7XG4gIGVsYXBzZWRNczogbnVtYmVyO1xufVxuIl19
@@ -0,0 +1,145 @@
1
+ import { Component, computed, inject, signal, HostListener } from '@angular/core';
2
+ import { LowerCasePipe } from '@angular/common';
3
+ import { ButtonModule } from 'primeng/button';
4
+ import { SbdBookingService } from '../../services/booking.service';
5
+ import { SbdToastService } from '../../services/toast.service';
6
+ import { FLIGHT_ACTIONS } from '../../config/flight-actions.config';
7
+ import { HOTEL_ACTIONS } from '../../config/hotel-actions.config';
8
+ import { SbdBookingInputComponent } from '../../components/booking-input/booking-input.component';
9
+ import { SbdWorkflowActionsComponent } from '../../components/workflow-actions/workflow-actions.component';
10
+ import { SbdActionGridComponent } from '../../components/action-grid/action-grid.component';
11
+ import { SbdCancelDialogComponent } from '../../components/cancel-dialog/cancel-dialog.component';
12
+ import { SbdFlightItineraryCardComponent } from '../../components/flight-itinerary-card/flight-itinerary-card.component';
13
+ import { SbdDataSearchComponent } from '../../components/data-search/data-search.component';
14
+ import { SbdActionDialogComponent } from '../../components/action-dialog/action-dialog.component';
15
+ import { SbdAddNoteDialogComponent } from '../../components/add-note-dialog/add-note-dialog.component';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "primeng/button";
18
+ export class SmartBookingDashboardComponent {
19
+ constructor() {
20
+ this.bookingService = inject(SbdBookingService);
21
+ this.toast = inject(SbdToastService);
22
+ this.product = signal('flight');
23
+ this.bookingId = signal('');
24
+ this.bookingStatus = signal('idle');
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ this.bookingData = signal(null);
27
+ this.cancelDialogOpen = signal(false);
28
+ this.actionDialogOpen = signal(false);
29
+ this.addNoteDialogOpen = signal(false);
30
+ this.selectedActionKey = signal(null);
31
+ this.activeContextTab = signal('changes');
32
+ this.availableActions = computed(() => (this.product() === 'flight' ? FLIGHT_ACTIONS : HOTEL_ACTIONS).filter(a => !a.hidden));
33
+ // Handle both correct spelling (dataVerified) and BE typo (dataVerfied)
34
+ this.dataVerified = computed(() => {
35
+ const bi = this.bookingData()?.data?.booking_info;
36
+ return bi?.dataVerified === true || bi?.dataVerfied === true;
37
+ });
38
+ // PNR list for the active booking, normalized to a flat array regardless of BE shape.
39
+ this.cancelPnrInfo = computed(() => {
40
+ const raw = this.bookingData()?.data?.booking_info?.pnr_info;
41
+ if (Array.isArray(raw))
42
+ return raw;
43
+ if (raw?.pnr)
44
+ return [{ pnr: raw.pnr, LegDirectionality: 'Departure' }];
45
+ return [];
46
+ });
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
+ this.bookingHistory = computed(() => (this.bookingData()?.data?.booking_info?.history ?? []));
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ this.bookingNotes = computed(() => (this.bookingData()?.data?.booking_info?.notes ?? []));
51
+ this.historyGroups = computed(() => {
52
+ const groups = new Map();
53
+ for (const e of this.bookingHistory()) {
54
+ if (!groups.has(e.changedAt))
55
+ groups.set(e.changedAt, { changedBy: e.changedBy, changedAt: e.changedAt, entries: [] });
56
+ const rawField = e.field.split('.').pop() ?? e.field;
57
+ groups.get(e.changedAt).entries.push({
58
+ field: rawField.replace(/\[.*?\]/g, ''),
59
+ from: e.previousValue,
60
+ to: e.newValue,
61
+ });
62
+ }
63
+ return [...groups.values()];
64
+ });
65
+ }
66
+ fmtNoteDate(date) {
67
+ if (!date?.sec)
68
+ return '—';
69
+ try {
70
+ return new Date(date.sec * 1000).toLocaleString('en-GB', {
71
+ day: '2-digit', month: 'short', year: 'numeric',
72
+ hour: '2-digit', minute: '2-digit',
73
+ });
74
+ }
75
+ catch {
76
+ return '—';
77
+ }
78
+ }
79
+ formatField(field) {
80
+ return field
81
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
82
+ .replace(/([a-z\d])([A-Z])/g, '$1 $2')
83
+ .trim();
84
+ }
85
+ fmtDate(dt) {
86
+ if (!dt)
87
+ return '—';
88
+ try {
89
+ return new Date(dt).toLocaleString('en-GB', {
90
+ day: '2-digit', month: 'short', hour: '2-digit', minute: '2-digit',
91
+ });
92
+ }
93
+ catch {
94
+ return dt;
95
+ }
96
+ }
97
+ openAction(key) {
98
+ this.selectedActionKey.set(key);
99
+ this.actionDialogOpen.set(true);
100
+ }
101
+ onKeydown(event) {
102
+ if ((event.metaKey || event.ctrlKey) && event.key === 'k') {
103
+ event.preventDefault();
104
+ document.querySelector('.sbd-booking-input__field')?.focus();
105
+ }
106
+ }
107
+ lookupBooking() {
108
+ const id = this.bookingId().trim();
109
+ if (!id)
110
+ return;
111
+ this.bookingStatus.set('loading');
112
+ this.bookingService.getBooking(id, this.product(), 'booking_info').subscribe({
113
+ next: ({ data }) => {
114
+ this.bookingData.set(data);
115
+ this.bookingStatus.set('success');
116
+ },
117
+ error: () => {
118
+ this.bookingStatus.set('error');
119
+ this.bookingData.set(null);
120
+ this.toast.error('Booking not found. Check the ID and try again.');
121
+ },
122
+ });
123
+ }
124
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SmartBookingDashboardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
125
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SmartBookingDashboardComponent, isStandalone: true, selector: "app-smart-booking-dashboard", host: { listeners: { "document:keydown": "onKeydown($event)" } }, ngImport: i0, template: "<div class=\"sbd-page\">\n\n <!-- Search bar full-width at top -->\n <div class=\"sbd-page__search\">\n <app-sbd-booking-input\n [(product)]=\"product\"\n [(bookingId)]=\"bookingId\"\n [loading]=\"bookingStatus() === 'loading'\"\n (lookup)=\"lookupBooking()\"\n />\n </div>\n\n <!-- 2-column layout -->\n <div class=\"sbd-page__content\">\n\n <!-- Left: booking context -->\n <aside class=\"sbd-page__aside\">\n\n <!-- Data search at the top of the sidebar -->\n @if (bookingStatus() === 'success') {\n <app-sbd-data-search [data]=\"bookingData()\" />\n <app-sbd-flight-itinerary-card [product]=\"product()\" [data]=\"bookingData()\" [verified]=\"dataVerified()\" />\n }\n\n <!-- Loading skeleton for aside -->\n @if (bookingStatus() === 'loading') {\n <div class=\"sbd-page__skeleton-card\">\n <div class=\"sbd-page__skeleton-row\" style=\"width:60%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:40%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:80%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:50%\"></div>\n </div>\n }\n\n </aside>\n\n <!-- Right: agent workspace -->\n <main class=\"sbd-page__main\">\n\n <!-- Error state -->\n @if (bookingStatus() === 'error') {\n <div class=\"sbd-page__error\">\n <i class=\"pi pi-exclamation-circle\"></i>\n <span>Booking not found. Double-check the ID and product type, then try again.</span>\n </div>\n }\n\n <!-- Content once loaded -->\n @if (bookingStatus() === 'success') {\n\n <!-- Quick actions -->\n <div class=\"sbd-page__quick-actions\">\n <span class=\"sbd-page__quick-label\">Quick actions</span>\n <app-sbd-workflow-actions\n [bookingId]=\"bookingId()\"\n (cancelBooking)=\"cancelDialogOpen.set(true)\"\n />\n </div>\n\n <!-- Action grid -->\n <app-sbd-action-grid\n [actions]=\"availableActions()\"\n [activeKey]=\"selectedActionKey()\"\n (actionSelected)=\"openAction($event)\"\n />\n\n <!-- Context: Notes + Changes tabbed -->\n <div class=\"sbd-page__context\">\n\n <!-- Tab bar -->\n <div class=\"sbd-page__context-tabs\">\n <button class=\"sbd-page__context-tab\"\n [class.sbd-page__context-tab--active]=\"activeContextTab() === 'changes'\"\n (click)=\"activeContextTab.set('changes')\">\n <i class=\"pi pi-history\"></i>\n Changes\n @if (bookingHistory().length > 0) {\n <span class=\"sbd-page__context-pill sbd-page__context-pill--changes\">{{ bookingHistory().length }}</span>\n }\n </button>\n <button class=\"sbd-page__context-tab\"\n [class.sbd-page__context-tab--active]=\"activeContextTab() === 'notes'\"\n (click)=\"activeContextTab.set('notes')\">\n <i class=\"pi pi-comments\"></i>\n Notes\n <span class=\"sbd-page__context-pill sbd-page__context-pill--notes\">{{ bookingNotes().length }}</span>\n </button>\n @if (activeContextTab() === 'notes') {\n <button pButton label=\"Add Note\" icon=\"pi pi-plus\" class=\"p-button-sm p-button-outlined sbd-page__context-add\"\n (click)=\"addNoteDialogOpen.set(true)\">\n </button>\n }\n </div>\n\n <!-- Notes tab -->\n @if (activeContextTab() === 'notes') {\n <div class=\"sbd-page__notes-list\">\n @if (bookingNotes().length === 0) {\n <div class=\"sbd-page__context-empty\">\n <i class=\"pi pi-inbox\"></i> No notes yet\n </div>\n }\n @for (note of bookingNotes(); track $index) {\n <div class=\"sbd-page__note\">\n <div class=\"sbd-page__note-top\">\n <span class=\"sbd-page__note-badge sbd-page__note-badge--{{ note.action | lowercase }}\">\n {{ note.action }}\n </span>\n <span class=\"sbd-page__note-author\">\n {{ note.writtenBy?.firstName }} {{ note.writtenBy?.lastName }}\n </span>\n <span class=\"sbd-page__note-date\">{{ fmtNoteDate(note.date) }}</span>\n </div>\n <p class=\"sbd-page__note-msg\">{{ note.message }}</p>\n </div>\n }\n </div>\n }\n\n <!-- Changes tab -->\n @if (activeContextTab() === 'changes') {\n <div class=\"sbd-page__changes-groups\">\n @if (historyGroups().length === 0) {\n <div class=\"sbd-page__context-empty\">\n <i class=\"pi pi-check\"></i> No changes recorded\n </div>\n }\n @for (group of historyGroups(); track group.changedAt) {\n <div class=\"sbd-page__changes-group\">\n <div class=\"sbd-page__changes-meta\">\n <i class=\"pi pi-user\"></i>\n <strong>{{ group.changedBy }}</strong>\n <span class=\"sbd-page__changes-sep\">\u00B7</span>\n <span>{{ fmtDate(group.changedAt) }}</span>\n </div>\n <table class=\"sbd-page__changes-table\">\n <thead>\n <tr>\n <th>Field</th>\n <th><i class=\"pi pi-times-circle\"></i> Before</th>\n <th><i class=\"pi pi-check-circle\"></i> After</th>\n </tr>\n </thead>\n <tbody>\n @for (entry of group.entries; track entry.field) {\n <tr>\n <td class=\"sbd-page__changes-field\">{{ formatField(entry.field) }}</td>\n <td class=\"sbd-page__changes-old\">{{ entry.from }}</td>\n <td class=\"sbd-page__changes-new\">{{ entry.to }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n </div>\n\n }\n\n <!-- Loading skeleton for main -->\n @if (bookingStatus() === 'loading') {\n <div class=\"sbd-page__skeleton-card\">\n <div class=\"sbd-page__skeleton-row\" style=\"width:40%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:25%\"></div>\n </div>\n }\n\n </main>\n\n </div>\n\n</div>\n\n<app-sbd-cancel-dialog\n [visible]=\"cancelDialogOpen()\"\n [bookingId]=\"bookingId()\"\n [product]=\"product()\"\n [pnrInfo]=\"cancelPnrInfo()\"\n [bookingInfo]=\"bookingData()\"\n (closed)=\"cancelDialogOpen.set(false)\"\n (confirmed)=\"bookingStatus.set('idle'); bookingData.set(null)\"\n/>\n\n<app-sbd-action-dialog\n [visible]=\"actionDialogOpen()\"\n [bookingId]=\"bookingId()\"\n [product]=\"product()\"\n [actions]=\"availableActions()\"\n [initialKey]=\"selectedActionKey()\"\n [preloadedData]=\"bookingData()\"\n (closed)=\"actionDialogOpen.set(false)\"\n/>\n\n<app-sbd-add-note-dialog\n [visible]=\"addNoteDialogOpen()\"\n [bookingId]=\"bookingId()\"\n [product]=\"product()\"\n (closed)=\"addNoteDialogOpen.set(false)\"\n/>\n", styles: [".sbd-page{display:flex;flex-direction:column;gap:20px;padding:24px;max-width:1400px;min-height:100%}.sbd-page__search{width:100%}.sbd-page__error{display:flex;align-items:center;gap:10px;padding:16px 20px;background:#fef2f2;border:1px solid rgba(239,68,68,.2);border-radius:10px;color:#ef4444;font-size:13.5px;font-weight:500}.sbd-page__error i{font-size:18px}.sbd-page__content{display:grid;grid-template-columns:320px 1fr;gap:20px;align-items:start}@media (max-width: 960px){.sbd-page__content{grid-template-columns:1fr}}.sbd-page__aside{display:flex;flex-direction:column;gap:16px;position:sticky;top:20px}.sbd-page__main{display:flex;flex-direction:column;gap:16px}.sbd-page__quick-actions{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#fff;border:1px solid #e2e8f0;border-radius:10px;flex-wrap:wrap}.sbd-page__quick-label{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#94a3b8;flex-shrink:0}.sbd-page__context{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden}.sbd-page__context-tabs{display:flex;align-items:center;border-bottom:1px solid #e2e8f0;background:#f8fafc}.sbd-page__context-add{margin-left:auto;margin-right:10px}.sbd-page__context-tab{display:flex;align-items:center;gap:7px;padding:11px 20px;font-size:13px;font-weight:600;color:#64748b;background:transparent;border:none;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .15s,border-color .15s}.sbd-page__context-tab .pi{font-size:13px}.sbd-page__context-tab:hover{color:#334155}.sbd-page__context-tab--active{color:#1e2e4a;border-bottom-color:#3b82f6;background:#fff}.sbd-page__context-pill{font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:10px}.sbd-page__context-pill--notes{background:#e0e7ff;color:#4338ca}.sbd-page__context-pill--changes{background:#fef3c7;color:#b45309}.sbd-page__context-empty{display:flex;align-items:center;gap:8px;padding:24px 20px;font-size:13px;color:#94a3b8}.sbd-page__context-empty .pi{font-size:16px}.sbd-page__notes-list{display:flex;flex-direction:column}.sbd-page__note{padding:12px 16px;border-bottom:1px solid #f1f5f9;display:flex;flex-direction:column;gap:6px}.sbd-page__note:last-child{border-bottom:none}.sbd-page__note-top{display:flex;align-items:center;gap:8px}.sbd-page__note-badge{font-size:10px;font-weight:800;letter-spacing:.05em;padding:2px 8px;border-radius:10px;text-transform:uppercase;flex-shrink:0}.sbd-page__note-badge--general{background:#dbeafe;color:#1d4ed8}.sbd-page__note-badge--remark{background:#fef3c7;color:#b45309}.sbd-page__note-badge--feedback{background:#f3e8ff;color:#7e22ce}.sbd-page__note-author{font-size:12px;font-weight:700;color:#1e2e4a}.sbd-page__note-date{margin-left:auto;font-size:11px;color:#94a3b8;white-space:nowrap}.sbd-page__note-msg{margin:0;font-size:13px;color:#334155;line-height:1.55}.sbd-page__changes-groups{display:flex;flex-direction:column}.sbd-page__changes-group{border-bottom:1px solid #f1f5f9}.sbd-page__changes-group:last-child{border-bottom:none}.sbd-page__changes-meta{display:flex;align-items:center;gap:6px;padding:8px 16px;background:#fafafa;border-bottom:1px solid #f1f5f9;font-size:11.5px;color:#64748b}.sbd-page__changes-meta strong{font-weight:700;color:#334155}.sbd-page__changes-meta .pi{font-size:11px;color:#94a3b8}.sbd-page__changes-sep{color:#cbd5e1}.sbd-page__changes-table{width:100%;border-collapse:collapse;font-size:12.5px}.sbd-page__changes-table thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}.sbd-page__changes-table thead th{padding:7px 14px;text-align:left;font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:#64748b;white-space:nowrap}.sbd-page__changes-table thead th .pi{margin-right:4px;font-size:10px}.sbd-page__changes-table thead th:nth-child(2){color:#dc2626}.sbd-page__changes-table thead th:nth-child(3){color:#16a34a}.sbd-page__changes-table tbody tr{border-bottom:1px solid #f1f5f9}.sbd-page__changes-table tbody tr:last-child{border-bottom:none}.sbd-page__changes-table tbody tr:hover{background:#f8fafc}.sbd-page__changes-table tbody td{padding:8px 14px;vertical-align:top;word-break:break-word}.sbd-page__changes-field{font-size:12px;font-weight:600;color:#475569;width:28%}.sbd-page__changes-old{color:#dc2626;font-weight:500;text-decoration:line-through;opacity:.8;width:36%}.sbd-page__changes-new{color:#16a34a;font-weight:700;width:36%}.sbd-page__content--loading{opacity:.6;pointer-events:none}.sbd-page__skeleton-card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:20px;display:flex;flex-direction:column;gap:12px}.sbd-page__skeleton-row{height:13px;background:#f1f5f9;border-radius:6px;animation:sbd-shimmer 1.4s ease-in-out infinite}.sbd-page__skeleton-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-top:8px}.sbd-page__skeleton-chip{height:56px;background:#f1f5f9;border-radius:8px;animation:sbd-shimmer 1.4s ease-in-out infinite}@keyframes sbd-shimmer{0%,to{opacity:1}50%{opacity:.45}}@keyframes sbd-fadein{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "component", type: SbdBookingInputComponent, selector: "app-sbd-booking-input", inputs: ["loading", "product", "bookingId"], outputs: ["productChange", "bookingIdChange", "lookup"] }, { kind: "component", type: SbdWorkflowActionsComponent, selector: "app-sbd-workflow-actions", inputs: ["bookingId"], outputs: ["cancelBooking"] }, { kind: "component", type: SbdActionGridComponent, selector: "app-sbd-action-grid", inputs: ["actions", "activeKey", "loadingKey"], outputs: ["actionSelected"] }, { kind: "component", type: SbdCancelDialogComponent, selector: "app-sbd-cancel-dialog", inputs: ["visible", "bookingId", "product", "pnrInfo", "bookingInfo"], outputs: ["closed", "confirmed"] }, { kind: "component", type: SbdFlightItineraryCardComponent, selector: "app-sbd-flight-itinerary-card", inputs: ["data", "product", "verified"] }, { kind: "component", type: SbdDataSearchComponent, selector: "app-sbd-data-search", inputs: ["data"] }, { kind: "component", type: SbdActionDialogComponent, selector: "app-sbd-action-dialog", inputs: ["visible", "bookingId", "product", "actions", "initialKey", "preloadedData"], outputs: ["closed"] }, { kind: "component", type: SbdAddNoteDialogComponent, selector: "app-sbd-add-note-dialog", inputs: ["visible", "bookingId", "product"], outputs: ["closed"] }, { kind: "pipe", type: LowerCasePipe, name: "lowercase" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }] }); }
126
+ }
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SmartBookingDashboardComponent, decorators: [{
128
+ type: Component,
129
+ args: [{ selector: 'app-smart-booking-dashboard', standalone: true, imports: [
130
+ SbdBookingInputComponent,
131
+ SbdWorkflowActionsComponent,
132
+ SbdActionGridComponent,
133
+ SbdCancelDialogComponent,
134
+ SbdFlightItineraryCardComponent,
135
+ SbdDataSearchComponent,
136
+ SbdActionDialogComponent,
137
+ SbdAddNoteDialogComponent,
138
+ LowerCasePipe,
139
+ ButtonModule,
140
+ ], template: "<div class=\"sbd-page\">\n\n <!-- Search bar full-width at top -->\n <div class=\"sbd-page__search\">\n <app-sbd-booking-input\n [(product)]=\"product\"\n [(bookingId)]=\"bookingId\"\n [loading]=\"bookingStatus() === 'loading'\"\n (lookup)=\"lookupBooking()\"\n />\n </div>\n\n <!-- 2-column layout -->\n <div class=\"sbd-page__content\">\n\n <!-- Left: booking context -->\n <aside class=\"sbd-page__aside\">\n\n <!-- Data search at the top of the sidebar -->\n @if (bookingStatus() === 'success') {\n <app-sbd-data-search [data]=\"bookingData()\" />\n <app-sbd-flight-itinerary-card [product]=\"product()\" [data]=\"bookingData()\" [verified]=\"dataVerified()\" />\n }\n\n <!-- Loading skeleton for aside -->\n @if (bookingStatus() === 'loading') {\n <div class=\"sbd-page__skeleton-card\">\n <div class=\"sbd-page__skeleton-row\" style=\"width:60%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:40%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:80%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:50%\"></div>\n </div>\n }\n\n </aside>\n\n <!-- Right: agent workspace -->\n <main class=\"sbd-page__main\">\n\n <!-- Error state -->\n @if (bookingStatus() === 'error') {\n <div class=\"sbd-page__error\">\n <i class=\"pi pi-exclamation-circle\"></i>\n <span>Booking not found. Double-check the ID and product type, then try again.</span>\n </div>\n }\n\n <!-- Content once loaded -->\n @if (bookingStatus() === 'success') {\n\n <!-- Quick actions -->\n <div class=\"sbd-page__quick-actions\">\n <span class=\"sbd-page__quick-label\">Quick actions</span>\n <app-sbd-workflow-actions\n [bookingId]=\"bookingId()\"\n (cancelBooking)=\"cancelDialogOpen.set(true)\"\n />\n </div>\n\n <!-- Action grid -->\n <app-sbd-action-grid\n [actions]=\"availableActions()\"\n [activeKey]=\"selectedActionKey()\"\n (actionSelected)=\"openAction($event)\"\n />\n\n <!-- Context: Notes + Changes tabbed -->\n <div class=\"sbd-page__context\">\n\n <!-- Tab bar -->\n <div class=\"sbd-page__context-tabs\">\n <button class=\"sbd-page__context-tab\"\n [class.sbd-page__context-tab--active]=\"activeContextTab() === 'changes'\"\n (click)=\"activeContextTab.set('changes')\">\n <i class=\"pi pi-history\"></i>\n Changes\n @if (bookingHistory().length > 0) {\n <span class=\"sbd-page__context-pill sbd-page__context-pill--changes\">{{ bookingHistory().length }}</span>\n }\n </button>\n <button class=\"sbd-page__context-tab\"\n [class.sbd-page__context-tab--active]=\"activeContextTab() === 'notes'\"\n (click)=\"activeContextTab.set('notes')\">\n <i class=\"pi pi-comments\"></i>\n Notes\n <span class=\"sbd-page__context-pill sbd-page__context-pill--notes\">{{ bookingNotes().length }}</span>\n </button>\n @if (activeContextTab() === 'notes') {\n <button pButton label=\"Add Note\" icon=\"pi pi-plus\" class=\"p-button-sm p-button-outlined sbd-page__context-add\"\n (click)=\"addNoteDialogOpen.set(true)\">\n </button>\n }\n </div>\n\n <!-- Notes tab -->\n @if (activeContextTab() === 'notes') {\n <div class=\"sbd-page__notes-list\">\n @if (bookingNotes().length === 0) {\n <div class=\"sbd-page__context-empty\">\n <i class=\"pi pi-inbox\"></i> No notes yet\n </div>\n }\n @for (note of bookingNotes(); track $index) {\n <div class=\"sbd-page__note\">\n <div class=\"sbd-page__note-top\">\n <span class=\"sbd-page__note-badge sbd-page__note-badge--{{ note.action | lowercase }}\">\n {{ note.action }}\n </span>\n <span class=\"sbd-page__note-author\">\n {{ note.writtenBy?.firstName }} {{ note.writtenBy?.lastName }}\n </span>\n <span class=\"sbd-page__note-date\">{{ fmtNoteDate(note.date) }}</span>\n </div>\n <p class=\"sbd-page__note-msg\">{{ note.message }}</p>\n </div>\n }\n </div>\n }\n\n <!-- Changes tab -->\n @if (activeContextTab() === 'changes') {\n <div class=\"sbd-page__changes-groups\">\n @if (historyGroups().length === 0) {\n <div class=\"sbd-page__context-empty\">\n <i class=\"pi pi-check\"></i> No changes recorded\n </div>\n }\n @for (group of historyGroups(); track group.changedAt) {\n <div class=\"sbd-page__changes-group\">\n <div class=\"sbd-page__changes-meta\">\n <i class=\"pi pi-user\"></i>\n <strong>{{ group.changedBy }}</strong>\n <span class=\"sbd-page__changes-sep\">\u00B7</span>\n <span>{{ fmtDate(group.changedAt) }}</span>\n </div>\n <table class=\"sbd-page__changes-table\">\n <thead>\n <tr>\n <th>Field</th>\n <th><i class=\"pi pi-times-circle\"></i> Before</th>\n <th><i class=\"pi pi-check-circle\"></i> After</th>\n </tr>\n </thead>\n <tbody>\n @for (entry of group.entries; track entry.field) {\n <tr>\n <td class=\"sbd-page__changes-field\">{{ formatField(entry.field) }}</td>\n <td class=\"sbd-page__changes-old\">{{ entry.from }}</td>\n <td class=\"sbd-page__changes-new\">{{ entry.to }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n </div>\n\n }\n\n <!-- Loading skeleton for main -->\n @if (bookingStatus() === 'loading') {\n <div class=\"sbd-page__skeleton-card\">\n <div class=\"sbd-page__skeleton-row\" style=\"width:40%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:25%\"></div>\n </div>\n }\n\n </main>\n\n </div>\n\n</div>\n\n<app-sbd-cancel-dialog\n [visible]=\"cancelDialogOpen()\"\n [bookingId]=\"bookingId()\"\n [product]=\"product()\"\n [pnrInfo]=\"cancelPnrInfo()\"\n [bookingInfo]=\"bookingData()\"\n (closed)=\"cancelDialogOpen.set(false)\"\n (confirmed)=\"bookingStatus.set('idle'); bookingData.set(null)\"\n/>\n\n<app-sbd-action-dialog\n [visible]=\"actionDialogOpen()\"\n [bookingId]=\"bookingId()\"\n [product]=\"product()\"\n [actions]=\"availableActions()\"\n [initialKey]=\"selectedActionKey()\"\n [preloadedData]=\"bookingData()\"\n (closed)=\"actionDialogOpen.set(false)\"\n/>\n\n<app-sbd-add-note-dialog\n [visible]=\"addNoteDialogOpen()\"\n [bookingId]=\"bookingId()\"\n [product]=\"product()\"\n (closed)=\"addNoteDialogOpen.set(false)\"\n/>\n", styles: [".sbd-page{display:flex;flex-direction:column;gap:20px;padding:24px;max-width:1400px;min-height:100%}.sbd-page__search{width:100%}.sbd-page__error{display:flex;align-items:center;gap:10px;padding:16px 20px;background:#fef2f2;border:1px solid rgba(239,68,68,.2);border-radius:10px;color:#ef4444;font-size:13.5px;font-weight:500}.sbd-page__error i{font-size:18px}.sbd-page__content{display:grid;grid-template-columns:320px 1fr;gap:20px;align-items:start}@media (max-width: 960px){.sbd-page__content{grid-template-columns:1fr}}.sbd-page__aside{display:flex;flex-direction:column;gap:16px;position:sticky;top:20px}.sbd-page__main{display:flex;flex-direction:column;gap:16px}.sbd-page__quick-actions{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#fff;border:1px solid #e2e8f0;border-radius:10px;flex-wrap:wrap}.sbd-page__quick-label{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#94a3b8;flex-shrink:0}.sbd-page__context{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden}.sbd-page__context-tabs{display:flex;align-items:center;border-bottom:1px solid #e2e8f0;background:#f8fafc}.sbd-page__context-add{margin-left:auto;margin-right:10px}.sbd-page__context-tab{display:flex;align-items:center;gap:7px;padding:11px 20px;font-size:13px;font-weight:600;color:#64748b;background:transparent;border:none;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .15s,border-color .15s}.sbd-page__context-tab .pi{font-size:13px}.sbd-page__context-tab:hover{color:#334155}.sbd-page__context-tab--active{color:#1e2e4a;border-bottom-color:#3b82f6;background:#fff}.sbd-page__context-pill{font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:10px}.sbd-page__context-pill--notes{background:#e0e7ff;color:#4338ca}.sbd-page__context-pill--changes{background:#fef3c7;color:#b45309}.sbd-page__context-empty{display:flex;align-items:center;gap:8px;padding:24px 20px;font-size:13px;color:#94a3b8}.sbd-page__context-empty .pi{font-size:16px}.sbd-page__notes-list{display:flex;flex-direction:column}.sbd-page__note{padding:12px 16px;border-bottom:1px solid #f1f5f9;display:flex;flex-direction:column;gap:6px}.sbd-page__note:last-child{border-bottom:none}.sbd-page__note-top{display:flex;align-items:center;gap:8px}.sbd-page__note-badge{font-size:10px;font-weight:800;letter-spacing:.05em;padding:2px 8px;border-radius:10px;text-transform:uppercase;flex-shrink:0}.sbd-page__note-badge--general{background:#dbeafe;color:#1d4ed8}.sbd-page__note-badge--remark{background:#fef3c7;color:#b45309}.sbd-page__note-badge--feedback{background:#f3e8ff;color:#7e22ce}.sbd-page__note-author{font-size:12px;font-weight:700;color:#1e2e4a}.sbd-page__note-date{margin-left:auto;font-size:11px;color:#94a3b8;white-space:nowrap}.sbd-page__note-msg{margin:0;font-size:13px;color:#334155;line-height:1.55}.sbd-page__changes-groups{display:flex;flex-direction:column}.sbd-page__changes-group{border-bottom:1px solid #f1f5f9}.sbd-page__changes-group:last-child{border-bottom:none}.sbd-page__changes-meta{display:flex;align-items:center;gap:6px;padding:8px 16px;background:#fafafa;border-bottom:1px solid #f1f5f9;font-size:11.5px;color:#64748b}.sbd-page__changes-meta strong{font-weight:700;color:#334155}.sbd-page__changes-meta .pi{font-size:11px;color:#94a3b8}.sbd-page__changes-sep{color:#cbd5e1}.sbd-page__changes-table{width:100%;border-collapse:collapse;font-size:12.5px}.sbd-page__changes-table thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}.sbd-page__changes-table thead th{padding:7px 14px;text-align:left;font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:#64748b;white-space:nowrap}.sbd-page__changes-table thead th .pi{margin-right:4px;font-size:10px}.sbd-page__changes-table thead th:nth-child(2){color:#dc2626}.sbd-page__changes-table thead th:nth-child(3){color:#16a34a}.sbd-page__changes-table tbody tr{border-bottom:1px solid #f1f5f9}.sbd-page__changes-table tbody tr:last-child{border-bottom:none}.sbd-page__changes-table tbody tr:hover{background:#f8fafc}.sbd-page__changes-table tbody td{padding:8px 14px;vertical-align:top;word-break:break-word}.sbd-page__changes-field{font-size:12px;font-weight:600;color:#475569;width:28%}.sbd-page__changes-old{color:#dc2626;font-weight:500;text-decoration:line-through;opacity:.8;width:36%}.sbd-page__changes-new{color:#16a34a;font-weight:700;width:36%}.sbd-page__content--loading{opacity:.6;pointer-events:none}.sbd-page__skeleton-card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:20px;display:flex;flex-direction:column;gap:12px}.sbd-page__skeleton-row{height:13px;background:#f1f5f9;border-radius:6px;animation:sbd-shimmer 1.4s ease-in-out infinite}.sbd-page__skeleton-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-top:8px}.sbd-page__skeleton-chip{height:56px;background:#f1f5f9;border-radius:8px;animation:sbd-shimmer 1.4s ease-in-out infinite}@keyframes sbd-shimmer{0%,to{opacity:1}50%{opacity:.45}}@keyframes sbd-fadein{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
141
+ }], propDecorators: { onKeydown: [{
142
+ type: HostListener,
143
+ args: ['document:keydown', ['$event']]
144
+ }] } });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtYm9va2luZy1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9wYWdlcy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zbWFydC1ib29raW5nLWRhc2hib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL3BhZ2VzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDbEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDM0csT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDNUYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDbEcsT0FBTyxF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QUF3Qjt3QkFDeEIsK0JBQStCO3dCQUMvQixzQkFBc0I7d0JBQ3RCLHdCQUF3Qjt3QkFDeEIseUJBQXlCO3dCQUN6QixhQUFhO3dCQUNiLFlBQVk7cUJBQ2I7OEJBMkZELFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvd2VyQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuXG5cbmltcG9ydCB7IFNiZEJvb2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYm9va2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNiZFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRkxJR0hUX0FDVElPTlMgfSBmcm9tICcuLi8uLi9jb25maWcvZmxpZ2h0LWFjdGlvbnMuY29uZmlnJztcbmltcG9ydCB7IEhPVEVMX0FDVElPTlMgfSBmcm9tICcuLi8uLi9jb25maWcvaG90ZWwtYWN0aW9ucy5jb25maWcnO1xuaW1wb3J0IHsgUHJvZHVjdFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvYm9va2luZy50eXBlcyc7XG5cbmltcG9ydCB7IFNiZEJvb2tpbmdJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYm9va2luZy1pbnB1dC9ib29raW5nLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTYmRXb3JrZmxvd0FjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93LWFjdGlvbnMvd29ya2Zsb3ctYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2JkQWN0aW9uR3JpZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYWN0aW9uLWdyaWQvYWN0aW9uLWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IFNiZENhbmNlbERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY2FuY2VsLWRpYWxvZy9jYW5jZWwtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTYmRGbGlnaHRJdGluZXJhcnlDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQvZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTYmREYXRhU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9kYXRhLXNlYXJjaC9kYXRhLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2JkQWN0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hY3Rpb24tZGlhbG9nL2FjdGlvbi1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFNiZEFkZE5vdGVEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FkZC1ub3RlLWRpYWxvZy9hZGQtbm90ZS1kaWFsb2cuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXNtYXJ0LWJvb2tpbmctZGFzaGJvYXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFNiZEJvb2tpbmdJbnB1dENvbXBvbmVudCxcbiAgICBTYmRXb3JrZmxvd0FjdGlvbnNDb21wb25lbnQsXG4gICAgU2JkQWN0aW9uR3JpZENvbXBvbmVudCxcbiAgICBTYmRDYW5jZWxEaWFsb2dDb21wb25lbnQsXG4gICAgU2JkRmxpZ2h0SXRpbmVyYXJ5Q2FyZENvbXBvbmVudCxcbiAgICBTYmREYXRhU2VhcmNoQ29tcG9uZW50LFxuICAgIFNiZEFjdGlvbkRpYWxvZ0NvbXBvbmVudCxcbiAgICBTYmRBZGROb3RlRGlhbG9nQ29tcG9uZW50LFxuICAgIExvd2VyQ2FzZVBpcGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtYm9va2luZy1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc21hcnQtYm9va2luZy1kYXNoYm9hcmQuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBTbWFydEJvb2tpbmdEYXNoYm9hcmRDb21wb25lbnQge1xuICBwcml2YXRlIGJvb2tpbmdTZXJ2aWNlID0gaW5qZWN0KFNiZEJvb2tpbmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdCA9IGluamVjdChTYmRUb2FzdFNlcnZpY2UpO1xuXG4gIHByb2R1Y3QgPSBzaWduYWw8UHJvZHVjdFR5cGU+KCdmbGlnaHQnKTtcbiAgYm9va2luZ0lkID0gc2lnbmFsKCcnKTtcblxuICBib29raW5nU3RhdHVzID0gc2lnbmFsPCdpZGxlJyB8ICdsb2FkaW5nJyB8ICdzdWNjZXNzJyB8ICdlcnJvcic+KCdpZGxlJyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGJvb2tpbmdEYXRhID0gc2lnbmFsPGFueSB8IG51bGw+KG51bGwpO1xuXG4gIGNhbmNlbERpYWxvZ09wZW4gICAgPSBzaWduYWwoZmFsc2UpO1xuICBhY3Rpb25EaWFsb2dPcGVuICAgID0gc2lnbmFsKGZhbHNlKTtcbiAgYWRkTm90ZURpYWxvZ09wZW4gICA9IHNpZ25hbChmYWxzZSk7XG4gIHNlbGVjdGVkQWN0aW9uS2V5ICAgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGFjdGl2ZUNvbnRleHRUYWIgICAgPSBzaWduYWw8J25vdGVzJyB8ICdjaGFuZ2VzJz4oJ2NoYW5nZXMnKTtcblxuICBhdmFpbGFibGVBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT5cbiAgICAodGhpcy5wcm9kdWN0KCkgPT09ICdmbGlnaHQnID8gRkxJR0hUX0FDVElPTlMgOiBIT1RFTF9BQ1RJT05TKS5maWx0ZXIoYSA9PiAhYS5oaWRkZW4pXG4gICk7XG5cbiAgLy8gSGFuZGxlIGJvdGggY29ycmVjdCBzcGVsbGluZyAoZGF0YVZlcmlmaWVkKSBhbmQgQkUgdHlwbyAoZGF0YVZlcmZpZWQpXG4gIGRhdGFWZXJpZmllZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiaSA9IHRoaXMuYm9va2luZ0RhdGEoKT8uZGF0YT8uYm9va2luZ19pbmZvO1xuICAgIHJldHVybiBiaT8uZGF0YVZlcmlmaWVkID09PSB0cnVlIHx8IGJpPy5kYXRhVmVyZmllZCA9PT0gdHJ1ZTtcbiAgfSk7XG5cbiAgLy8gUE5SIGxpc3QgZm9yIHRoZSBhY3RpdmUgYm9va2luZywgbm9ybWFsaXplZCB0byBhIGZsYXQgYXJyYXkgcmVnYXJkbGVzcyBvZiBCRSBzaGFwZS5cbiAgY2FuY2VsUG5ySW5mbyA9IGNvbXB1dGVkPHsgcG5yPzogc3RyaW5nOyBMZWdEaXJlY3Rpb25hbGl0eT86IHN0cmluZyB9W10+KCgpID0+IHtcbiAgICBjb25zdCByYXcgPSB0aGlzLmJvb2tpbmdEYXRhKCk/LmRhdGE/LmJvb2tpbmdfaW5mbz8ucG5yX2luZm87XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmF3KSkgcmV0dXJuIHJhdztcbiAgICBpZiAocmF3Py5wbnIpIHJldHVybiBbeyBwbnI6IHJhdy5wbnIsIExlZ0RpcmVjdGlvbmFsaXR5OiAnRGVwYXJ0dXJlJyB9XTtcbiAgICByZXR1cm4gW107XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGJvb2tpbmdIaXN0b3J5ID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuYm9va2luZ0RhdGEoKT8uZGF0YT8uYm9va2luZ19pbmZvPy5oaXN0b3J5ID8/IFtdKSBhcyBhbnlbXSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgYm9va2luZ05vdGVzID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuYm9va2luZ0RhdGEoKT8uZGF0YT8uYm9va2luZ19pbmZvPy5ub3RlcyA/PyBbXSkgYXMgYW55W10pO1xuXG4gIGhpc3RvcnlHcm91cHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIHsgY2hhbmdlZEJ5OiBzdHJpbmc7IGNoYW5nZWRBdDogc3RyaW5nOyBlbnRyaWVzOiB7IGZpZWxkOiBzdHJpbmc7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9W10gfT4oKTtcbiAgICBmb3IgKGNvbnN0IGUgb2YgdGhpcy5ib29raW5nSGlzdG9yeSgpKSB7XG4gICAgICBpZiAoIWdyb3Vwcy5oYXMoZS5jaGFuZ2VkQXQpKSBncm91cHMuc2V0KGUuY2hhbmdlZEF0LCB7IGNoYW5nZWRCeTogZS5jaGFuZ2VkQnksIGNoYW5nZWRBdDogZS5jaGFuZ2VkQXQsIGVudHJpZXM6IFtdIH0pO1xuICAgICAgY29uc3QgcmF3RmllbGQgPSAoZS5maWVsZCBhcyBzdHJpbmcpLnNwbGl0KCcuJykucG9wKCkgPz8gZS5maWVsZDtcbiAgICAgIGdyb3Vwcy5nZXQoZS5jaGFuZ2VkQXQpIS5lbnRyaWVzLnB1c2goe1xuICAgICAgICBmaWVsZDogcmF3RmllbGQucmVwbGFjZSgvXFxbLio/XFxdL2csICcnKSxcbiAgICAgICAgZnJvbTogZS5wcmV2aW91c1ZhbHVlLFxuICAgICAgICB0bzogZS5uZXdWYWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLmdyb3Vwcy52YWx1ZXMoKV07XG4gIH0pO1xuXG4gIGZtdE5vdGVEYXRlKGRhdGU6IHsgc2VjOiBudW1iZXI7IHVzZWM/OiBudW1iZXIgfSk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlPy5zZWMpIHJldHVybiAn4oCUJztcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuc2VjICogMTAwMCkudG9Mb2NhbGVTdHJpbmcoJ2VuLUdCJywge1xuICAgICAgICBkYXk6ICcyLWRpZ2l0JywgbW9udGg6ICdzaG9ydCcsIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggeyByZXR1cm4gJ+KAlCc7IH1cbiAgfVxuXG4gIGZvcm1hdEZpZWxkKGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBmaWVsZFxuICAgICAgLnJlcGxhY2UoLyhbQS1aXSspKFtBLVpdW2Etel0pL2csICckMSAkMicpXG4gICAgICAucmVwbGFjZSgvKFthLXpcXGRdKShbQS1aXSkvZywgJyQxICQyJylcbiAgICAgIC50cmltKCk7XG4gIH1cblxuICBmbXREYXRlKGR0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghZHQpIHJldHVybiAn4oCUJztcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKGR0KS50b0xvY2FsZVN0cmluZygnZW4tR0InLCB7XG4gICAgICAgIGRheTogJzItZGlnaXQnLCBtb250aDogJ3Nob3J0JywgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggeyByZXR1cm4gZHQ7IH1cbiAgfVxuXG4gIG9wZW5BY3Rpb24oa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkQWN0aW9uS2V5LnNldChrZXkpO1xuICAgIHRoaXMuYWN0aW9uRGlhbG9nT3Blbi5zZXQodHJ1ZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkpICYmIGV2ZW50LmtleSA9PT0gJ2snKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PignLnNiZC1ib29raW5nLWlucHV0X19maWVsZCcpPy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGxvb2t1cEJvb2tpbmcoKTogdm9pZCB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmJvb2tpbmdJZCgpLnRyaW0oKTtcbiAgICBpZiAoIWlkKSByZXR1cm47XG5cbiAgICB0aGlzLmJvb2tpbmdTdGF0dXMuc2V0KCdsb2FkaW5nJyk7XG5cbiAgICB0aGlzLmJvb2tpbmdTZXJ2aWNlLmdldEJvb2tpbmcoaWQsIHRoaXMucHJvZHVjdCgpLCAnYm9va2luZ19pbmZvJykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgICB0aGlzLmJvb2tpbmdEYXRhLnNldChkYXRhKTtcbiAgICAgICAgdGhpcy5ib29raW5nU3RhdHVzLnNldCgnc3VjY2VzcycpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuYm9va2luZ1N0YXR1cy5zZXQoJ2Vycm9yJyk7XG4gICAgICAgIHRoaXMuYm9va2luZ0RhdGEuc2V0KG51bGwpO1xuICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdCb29raW5nIG5vdCBmb3VuZC4gQ2hlY2sgdGhlIElEIGFuZCB0cnkgYWdhaW4uJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJzYmQtcGFnZVwiPlxuXG4gIDwhLS0gU2VhcmNoIGJhciBmdWxsLXdpZHRoIGF0IHRvcCAtLT5cbiAgPGRpdiBjbGFzcz1cInNiZC1wYWdlX19zZWFyY2hcIj5cbiAgICA8YXBwLXNiZC1ib29raW5nLWlucHV0XG4gICAgICBbKHByb2R1Y3QpXT1cInByb2R1Y3RcIlxuICAgICAgWyhib29raW5nSWQpXT1cImJvb2tpbmdJZFwiXG4gICAgICBbbG9hZGluZ109XCJib29raW5nU3RhdHVzKCkgPT09ICdsb2FkaW5nJ1wiXG4gICAgICAobG9va3VwKT1cImxvb2t1cEJvb2tpbmcoKVwiXG4gICAgLz5cbiAgPC9kaXY+XG5cbiAgPCEtLSAyLWNvbHVtbiBsYXlvdXQgLS0+XG4gIDxkaXYgY2xhc3M9XCJzYmQtcGFnZV9fY29udGVudFwiPlxuXG4gICAgPCEtLSBMZWZ0OiBib29raW5nIGNvbnRleHQgLS0+XG4gICAgPGFzaWRlIGNsYXNzPVwic2JkLXBhZ2VfX2FzaWRlXCI+XG5cbiAgICAgIDwhLS0gRGF0YSBzZWFyY2ggYXQgdGhlIHRvcCBvZiB0aGUgc2lkZWJhciAtLT5cbiAgICAgIEBpZiAoYm9va2luZ1N0YXR1cygpID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgPGFwcC1zYmQtZGF0YS1zZWFyY2ggW2RhdGFdPVwiYm9va2luZ0RhdGEoKVwiIC8+XG4gICAgICAgIDxhcHAtc2JkLWZsaWdodC1pdGluZXJhcnktY2FyZCBbcHJvZHVjdF09XCJwcm9kdWN0KClcIiBbZGF0YV09XCJib29raW5nRGF0YSgpXCIgW3ZlcmlmaWVkXT1cImRhdGFWZXJpZmllZCgpXCIgLz5cbiAgICAgIH1cblxuICAgICAgPCEtLSBMb2FkaW5nIHNrZWxldG9uIGZvciBhc2lkZSAtLT5cbiAgICAgIEBpZiAoYm9va2luZ1N0YXR1cygpID09PSAnbG9hZGluZycpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNiZC1wYWdlX19za2VsZXRvbi1jYXJkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiZC1wYWdlX19za2VsZXRvbi1yb3dcIiBzdHlsZT1cIndpZHRoOjYwJVwiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcGFnZV9fc2tlbGV0b24tcm93XCIgc3R5bGU9XCJ3aWR0aDo0MCVcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JkLXBhZ2VfX3NrZWxldG9uLXJvd1wiIHN0eWxlPVwid2lkdGg6ODAlXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiZC1wYWdlX19za2VsZXRvbi1yb3dcIiBzdHlsZT1cIndpZHRoOjUwJVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgIDwvYXNpZGU+XG5cbiAgICA8IS0tIFJpZ2h0OiBhZ2VudCB3b3Jrc3BhY2UgLS0+XG4gICAgPG1haW4gY2xhc3M9XCJzYmQtcGFnZV9fbWFpblwiPlxuXG4gICAgICA8IS0tIEVycm9yIHN0YXRlIC0tPlxuICAgICAgQGlmIChib29raW5nU3RhdHVzKCkgPT09ICdlcnJvcicpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNiZC1wYWdlX19lcnJvclwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktZXhjbGFtYXRpb24tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgIDxzcGFuPkJvb2tpbmcgbm90IGZvdW5kLiBEb3VibGUtY2hlY2sgdGhlIElEIGFuZCBwcm9kdWN0IHR5cGUsIHRoZW4gdHJ5IGFnYWluLjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gQ29udGVudCBvbmNlIGxvYWRlZCAtLT5cbiAgICAgIEBpZiAoYm9va2luZ1N0YXR1cygpID09PSAnc3VjY2VzcycpIHtcblxuICAgICAgICA8IS0tIFF1aWNrIGFjdGlvbnMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcGFnZV9fcXVpY2stYWN0aW9uc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JkLXBhZ2VfX3F1aWNrLWxhYmVsXCI+UXVpY2sgYWN0aW9uczwvc3Bhbj5cbiAgICAgICAgICA8YXBwLXNiZC13b3JrZmxvdy1hY3Rpb25zXG4gICAgICAgICAgICBbYm9va2luZ0lkXT1cImJvb2tpbmdJZCgpXCJcbiAgICAgICAgICAgIChjYW5jZWxCb29raW5nKT1cImNhbmNlbERpYWxvZ09wZW4uc2V0KHRydWUpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEFjdGlvbiBncmlkIC0tPlxuICAgICAgICA8YXBwLXNiZC1hY3Rpb24tZ3JpZFxuICAgICAgICAgIFthY3Rpb25zXT1cImF2YWlsYWJsZUFjdGlvbnMoKVwiXG4gICAgICAgICAgW2FjdGl2ZUtleV09XCJzZWxlY3RlZEFjdGlvbktleSgpXCJcbiAgICAgICAgICAoYWN0aW9uU2VsZWN0ZWQpPVwib3BlbkFjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8IS0tIENvbnRleHQ6IE5vdGVzICsgQ2hhbmdlcyB0YWJiZWQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcGFnZV9fY29udGV4dFwiPlxuXG4gICAgICAgICAgPCEtLSBUYWIgYmFyIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcGFnZV9fY29udGV4dC10YWJzXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2JkLXBhZ2VfX2NvbnRleHQtdGFiXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNiZC1wYWdlX19jb250ZXh0LXRhYi0tYWN0aXZlXT1cImFjdGl2ZUNvbnRleHRUYWIoKSA9PT0gJ2NoYW5nZXMnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUNvbnRleHRUYWIuc2V0KCdjaGFuZ2VzJylcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1oaXN0b3J5XCI+PC9pPlxuICAgICAgICAgICAgICBDaGFuZ2VzXG4gICAgICAgICAgICAgIEBpZiAoYm9va2luZ0hpc3RvcnkoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmQtcGFnZV9fY29udGV4dC1waWxsIHNiZC1wYWdlX19jb250ZXh0LXBpbGwtLWNoYW5nZXNcIj57eyBib29raW5nSGlzdG9yeSgpLmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2JkLXBhZ2VfX2NvbnRleHQtdGFiXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNiZC1wYWdlX19jb250ZXh0LXRhYi0tYWN0aXZlXT1cImFjdGl2ZUNvbnRleHRUYWIoKSA9PT0gJ25vdGVzJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVDb250ZXh0VGFiLnNldCgnbm90ZXMnKVwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNvbW1lbnRzXCI+PC9pPlxuICAgICAgICAgICAgICBOb3Rlc1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiZC1wYWdlX19jb250ZXh0LXBpbGwgc2JkLXBhZ2VfX2NvbnRleHQtcGlsbC0tbm90ZXNcIj57eyBib29raW5nTm90ZXMoKS5sZW5ndGggfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIEBpZiAoYWN0aXZlQ29udGV4dFRhYigpID09PSAnbm90ZXMnKSB7XG4gICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBsYWJlbD1cIkFkZCBOb3RlXCIgaWNvbj1cInBpIHBpLXBsdXNcIiBjbGFzcz1cInAtYnV0dG9uLXNtIHAtYnV0dG9uLW91dGxpbmVkIHNiZC1wYWdlX19jb250ZXh0LWFkZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5vdGVEaWFsb2dPcGVuLnNldCh0cnVlKVwiPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gTm90ZXMgdGFiIC0tPlxuICAgICAgICAgIEBpZiAoYWN0aXZlQ29udGV4dFRhYigpID09PSAnbm90ZXMnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JkLXBhZ2VfX25vdGVzLWxpc3RcIj5cbiAgICAgICAgICAgICAgQGlmIChib29raW5nTm90ZXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JkLXBhZ2VfX2NvbnRleHQtZW1wdHlcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5ib3hcIj48L2k+IE5vIG5vdGVzIHlldFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBmb3IgKG5vdGUgb2YgYm9va2luZ05vdGVzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcGFnZV9fbm90ZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiZC1wYWdlX19ub3RlLXRvcFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiZC1wYWdlX19ub3RlLWJhZGdlIHNiZC1wYWdlX19ub3RlLWJhZGdlLS17eyBub3RlLmFjdGlvbiB8IGxvd2VyY2FzZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IG5vdGUuYWN0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmQtcGFnZV9fbm90ZS1hdXRob3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBub3RlLndyaXR0ZW5CeT8uZmlyc3ROYW1lIH19IHt7IG5vdGUud3JpdHRlbkJ5Py5sYXN0TmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JkLXBhZ2VfX25vdGUtZGF0ZVwiPnt7IGZtdE5vdGVEYXRlKG5vdGUuZGF0ZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwic2JkLXBhZ2VfX25vdGUtbXNnXCI+e3sgbm90ZS5tZXNzYWdlIH19PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIENoYW5nZXMgdGFiIC0tPlxuICAgICAgICAgIEBpZiAoYWN0aXZlQ29udGV4dFRhYigpID09PSAnY2hhbmdlcycpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcGFnZV9fY2hhbmdlcy1ncm91cHNcIj5cbiAgICAgICAgICAgICAgQGlmIChoaXN0b3J5R3JvdXBzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiZC1wYWdlX19jb250ZXh0LWVtcHR5XCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNoZWNrXCI+PC9pPiBObyBjaGFuZ2VzIHJlY29yZGVkXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGZvciAoZ3JvdXAgb2YgaGlzdG9yeUdyb3VwcygpOyB0cmFjayBncm91cC5jaGFuZ2VkQXQpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JkLXBhZ2VfX2NoYW5nZXMtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcGFnZV9fY2hhbmdlcy1tZXRhXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdXNlclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBncm91cC5jaGFuZ2VkQnkgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmQtcGFnZV9fY2hhbmdlcy1zZXBcIj7Ctzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZm10RGF0ZShncm91cC5jaGFuZ2VkQXQpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJzYmQtcGFnZV9fY2hhbmdlcy10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkZpZWxkPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48aSBjbGFzcz1cInBpIHBpLXRpbWVzLWNpcmNsZVwiPjwvaT4gQmVmb3JlPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48aSBjbGFzcz1cInBpIHBpLWNoZWNrLWNpcmNsZVwiPjwvaT4gQWZ0ZXI8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICBAZm9yIChlbnRyeSBvZiBncm91cC5lbnRyaWVzOyB0cmFjayBlbnRyeS5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzYmQtcGFnZV9fY2hhbmdlcy1maWVsZFwiPnt7IGZvcm1hdEZpZWxkKGVudHJ5LmZpZWxkKSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNiZC1wYWdlX19jaGFuZ2VzLW9sZFwiPnt7IGVudHJ5LmZyb20gfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzYmQtcGFnZV9fY2hhbmdlcy1uZXdcIj57eyBlbnRyeS50byB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgfVxuXG4gICAgICA8IS0tIExvYWRpbmcgc2tlbGV0b24gZm9yIG1haW4gLS0+XG4gICAgICBAaWYgKGJvb2tpbmdTdGF0dXMoKSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcGFnZV9fc2tlbGV0b24tY2FyZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcGFnZV9fc2tlbGV0b24tcm93XCIgc3R5bGU9XCJ3aWR0aDo0MCVcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JkLXBhZ2VfX3NrZWxldG9uLXJvd1wiIHN0eWxlPVwid2lkdGg6MjUlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgPC9tYWluPlxuXG4gIDwvZGl2PlxuXG48L2Rpdj5cblxuPGFwcC1zYmQtY2FuY2VsLWRpYWxvZ1xuICBbdmlzaWJsZV09XCJjYW5jZWxEaWFsb2dPcGVuKClcIlxuICBbYm9va2luZ0lkXT1cImJvb2tpbmdJZCgpXCJcbiAgW3Byb2R1Y3RdPVwicHJvZHVjdCgpXCJcbiAgW3BuckluZm9dPVwiY2FuY2VsUG5ySW5mbygpXCJcbiAgW2Jvb2tpbmdJbmZvXT1cImJvb2tpbmdEYXRhKClcIlxuICAoY2xvc2VkKT1cImNhbmNlbERpYWxvZ09wZW4uc2V0KGZhbHNlKVwiXG4gIChjb25maXJtZWQpPVwiYm9va2luZ1N0YXR1cy5zZXQoJ2lkbGUnKTsgYm9va2luZ0RhdGEuc2V0KG51bGwpXCJcbi8+XG5cbjxhcHAtc2JkLWFjdGlvbi1kaWFsb2dcbiAgW3Zpc2libGVdPVwiYWN0aW9uRGlhbG9nT3BlbigpXCJcbiAgW2Jvb2tpbmdJZF09XCJib29raW5nSWQoKVwiXG4gIFtwcm9kdWN0XT1cInByb2R1Y3QoKVwiXG4gIFthY3Rpb25zXT1cImF2YWlsYWJsZUFjdGlvbnMoKVwiXG4gIFtpbml0aWFsS2V5XT1cInNlbGVjdGVkQWN0aW9uS2V5KClcIlxuICBbcHJlbG9hZGVkRGF0YV09XCJib29raW5nRGF0YSgpXCJcbiAgKGNsb3NlZCk9XCJhY3Rpb25EaWFsb2dPcGVuLnNldChmYWxzZSlcIlxuLz5cblxuPGFwcC1zYmQtYWRkLW5vdGUtZGlhbG9nXG4gIFt2aXNpYmxlXT1cImFkZE5vdGVEaWFsb2dPcGVuKClcIlxuICBbYm9va2luZ0lkXT1cImJvb2tpbmdJZCgpXCJcbiAgW3Byb2R1Y3RdPVwicHJvZHVjdCgpXCJcbiAgKGNsb3NlZCk9XCJhZGROb3RlRGlhbG9nT3Blbi5zZXQoZmFsc2UpXCJcbi8+XG4iXX0=