@sidekick-coder/zenith-kit 0.0.12 → 0.0.14
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.
- package/bin/zenith.js +27 -0
- package/bin/zkit.js +26 -0
- package/cli/commands/build.js +49 -0
- package/cli/commands/generateLegacyFolder.js +38 -0
- package/cli/commands/generatePluginId.js +17 -0
- package/cli/config.js +23 -0
- package/cli/utils/createWrapper.js +17 -0
- package/dist/client/index.d.mts +513 -0
- package/dist/client/index.mjs +2 -0
- package/dist/components/index.es.js +63946 -0
- package/dist/components/styles.css +4833 -0
- package/dist/server/index.d.mts +1780 -1314
- package/dist/server/index.mjs +5 -7754
- package/dist/shared/chunk-0Lt9GpW0.mjs +1 -0
- package/dist/shared/index.d.mts +472 -19
- package/dist/shared/index.mjs +2 -841
- package/legacy/client/components/Alert.vue +3 -0
- package/legacy/client/components/AlertButton.vue +3 -0
- package/legacy/client/components/Button.vue +3 -0
- package/legacy/client/components/ClientOnly.vue +3 -0
- package/legacy/client/components/ColorPicker.vue +3 -0
- package/legacy/client/components/ColorWheel.vue +3 -0
- package/legacy/client/components/Component.vue +3 -0
- package/legacy/client/components/DataTable.vue +4 -0
- package/legacy/client/components/DataTablePagination.vue +3 -0
- package/legacy/client/components/DatePicker.vue +3 -0
- package/legacy/client/components/DialogForm.vue +4 -0
- package/legacy/client/components/FileUploader.vue +3 -0
- package/legacy/client/components/FormAutoFieldList.vue +3 -0
- package/legacy/client/components/FormAutocomplete.vue +3 -0
- package/legacy/client/components/FormColorPicker.vue +3 -0
- package/legacy/client/components/FormDatePicker.vue +3 -0
- package/legacy/client/components/FormFilePicker.vue +3 -0
- package/legacy/client/components/FormFileUploader.vue +3 -0
- package/legacy/client/components/FormImageUploader.vue +3 -0
- package/legacy/client/components/FormJsonInput.vue +3 -0
- package/legacy/client/components/FormSelect.vue +3 -0
- package/legacy/client/components/FormStringListInput.vue +3 -0
- package/legacy/client/components/FormSwitch.vue +3 -0
- package/legacy/client/components/FormTextField.vue +3 -0
- package/legacy/client/components/FormTextarea.vue +3 -0
- package/legacy/client/components/Icon.vue +3 -0
- package/legacy/client/components/Image.vue +3 -0
- package/legacy/client/components/JsonInput.vue +3 -0
- package/legacy/client/components/Logo.vue +3 -0
- package/legacy/client/components/LogoIcon.vue +3 -0
- package/legacy/client/components/ObjectInspect.vue +3 -0
- package/legacy/client/components/PageCrud.vue +3 -0
- package/legacy/client/components/PageSubtitle.vue +3 -0
- package/legacy/client/components/PageTable.vue +3 -0
- package/legacy/client/components/PageTitle.vue +3 -0
- package/legacy/client/components/Pagination.vue +3 -0
- package/legacy/client/components/Select.vue +3 -0
- package/legacy/client/components/StringListInput.vue +3 -0
- package/legacy/client/components/Switch.vue +3 -0
- package/legacy/client/components/TextField.vue +3 -0
- package/legacy/client/components/Textarea.vue +3 -0
- package/legacy/client/components/UserMenu.vue +3 -0
- package/legacy/client/components/index.ts +349 -0
- package/legacy/client/components/ui/accordion/Accordion.vue +3 -0
- package/legacy/client/components/ui/accordion/AccordionContent.vue +3 -0
- package/legacy/client/components/ui/accordion/AccordionItem.vue +3 -0
- package/legacy/client/components/ui/accordion/AccordionTrigger.vue +3 -0
- package/legacy/client/components/ui/accordion/index.ts +1 -0
- package/legacy/client/components/ui/alert/Alert.vue +3 -0
- package/legacy/client/components/ui/alert/AlertDescription.vue +3 -0
- package/legacy/client/components/ui/alert/AlertTitle.vue +3 -0
- package/legacy/client/components/ui/alert/index.ts +1 -0
- package/legacy/client/components/ui/alert-dialog/AlertDialog.vue +3 -0
- package/legacy/client/components/ui/alert-dialog/AlertDialogAction.vue +3 -0
- package/legacy/client/components/ui/alert-dialog/AlertDialogCancel.vue +3 -0
- package/legacy/client/components/ui/alert-dialog/AlertDialogContent.vue +3 -0
- package/legacy/client/components/ui/alert-dialog/AlertDialogDescription.vue +3 -0
- package/legacy/client/components/ui/alert-dialog/AlertDialogFooter.vue +3 -0
- package/legacy/client/components/ui/alert-dialog/AlertDialogHeader.vue +3 -0
- package/legacy/client/components/ui/alert-dialog/AlertDialogTitle.vue +3 -0
- package/legacy/client/components/ui/alert-dialog/AlertDialogTrigger.vue +3 -0
- package/legacy/client/components/ui/alert-dialog/index.ts +1 -0
- package/legacy/client/components/ui/aspect-ratio/AspectRatio.vue +3 -0
- package/legacy/client/components/ui/aspect-ratio/index.ts +1 -0
- package/legacy/client/components/ui/avatar/Avatar.vue +3 -0
- package/legacy/client/components/ui/avatar/AvatarFallback.vue +3 -0
- package/legacy/client/components/ui/avatar/AvatarImage.vue +3 -0
- package/legacy/client/components/ui/avatar/index.ts +1 -0
- package/legacy/client/components/ui/badge/Badge.vue +3 -0
- package/legacy/client/components/ui/badge/index.ts +1 -0
- package/legacy/client/components/ui/breadcrumb/Breadcrumb.vue +3 -0
- package/legacy/client/components/ui/breadcrumb/BreadcrumbEllipsis.vue +3 -0
- package/legacy/client/components/ui/breadcrumb/BreadcrumbItem.vue +3 -0
- package/legacy/client/components/ui/breadcrumb/BreadcrumbLink.vue +3 -0
- package/legacy/client/components/ui/breadcrumb/BreadcrumbList.vue +3 -0
- package/legacy/client/components/ui/breadcrumb/BreadcrumbPage.vue +3 -0
- package/legacy/client/components/ui/breadcrumb/BreadcrumbSeparator.vue +3 -0
- package/legacy/client/components/ui/breadcrumb/index.ts +1 -0
- package/legacy/client/components/ui/button/Button.vue +3 -0
- package/legacy/client/components/ui/button/index.ts +1 -0
- package/legacy/client/components/ui/calendar/Calendar.vue +3 -0
- package/legacy/client/components/ui/calendar/CalendarCell.vue +3 -0
- package/legacy/client/components/ui/calendar/CalendarCellTrigger.vue +3 -0
- package/legacy/client/components/ui/calendar/CalendarGrid.vue +3 -0
- package/legacy/client/components/ui/calendar/CalendarGridBody.vue +3 -0
- package/legacy/client/components/ui/calendar/CalendarGridHead.vue +3 -0
- package/legacy/client/components/ui/calendar/CalendarGridRow.vue +3 -0
- package/legacy/client/components/ui/calendar/CalendarHeadCell.vue +3 -0
- package/legacy/client/components/ui/calendar/CalendarHeader.vue +3 -0
- package/legacy/client/components/ui/calendar/CalendarHeading.vue +3 -0
- package/legacy/client/components/ui/calendar/CalendarNextButton.vue +3 -0
- package/legacy/client/components/ui/calendar/CalendarPrevButton.vue +3 -0
- package/legacy/client/components/ui/calendar/index.ts +1 -0
- package/legacy/client/components/ui/card/Card.vue +3 -0
- package/legacy/client/components/ui/card/CardAction.vue +3 -0
- package/legacy/client/components/ui/card/CardContent.vue +3 -0
- package/legacy/client/components/ui/card/CardDescription.vue +3 -0
- package/legacy/client/components/ui/card/CardFooter.vue +3 -0
- package/legacy/client/components/ui/card/CardHeader.vue +3 -0
- package/legacy/client/components/ui/card/CardTitle.vue +3 -0
- package/legacy/client/components/ui/card/index.ts +1 -0
- package/legacy/client/components/ui/carousel/Carousel.vue +3 -0
- package/legacy/client/components/ui/carousel/CarouselContent.vue +3 -0
- package/legacy/client/components/ui/carousel/CarouselItem.vue +3 -0
- package/legacy/client/components/ui/carousel/CarouselNext.vue +3 -0
- package/legacy/client/components/ui/carousel/CarouselPrevious.vue +3 -0
- package/legacy/client/components/ui/carousel/index.ts +1 -0
- package/legacy/client/components/ui/checkbox/Checkbox.vue +3 -0
- package/legacy/client/components/ui/checkbox/index.ts +1 -0
- package/legacy/client/components/ui/collapsible/Collapsible.vue +3 -0
- package/legacy/client/components/ui/collapsible/CollapsibleContent.vue +3 -0
- package/legacy/client/components/ui/collapsible/CollapsibleTrigger.vue +3 -0
- package/legacy/client/components/ui/collapsible/index.ts +1 -0
- package/legacy/client/components/ui/combobox/Combobox.vue +3 -0
- package/legacy/client/components/ui/combobox/ComboboxAnchor.vue +3 -0
- package/legacy/client/components/ui/combobox/ComboboxEmpty.vue +3 -0
- package/legacy/client/components/ui/combobox/ComboboxGroup.vue +3 -0
- package/legacy/client/components/ui/combobox/ComboboxInput.vue +3 -0
- package/legacy/client/components/ui/combobox/ComboboxItem.vue +3 -0
- package/legacy/client/components/ui/combobox/ComboboxItemIndicator.vue +3 -0
- package/legacy/client/components/ui/combobox/ComboboxList.vue +3 -0
- package/legacy/client/components/ui/combobox/ComboboxSeparator.vue +3 -0
- package/legacy/client/components/ui/combobox/ComboboxTrigger.vue +3 -0
- package/legacy/client/components/ui/combobox/ComboboxViewport.vue +3 -0
- package/legacy/client/components/ui/combobox/index.ts +1 -0
- package/legacy/client/components/ui/command/Command.vue +3 -0
- package/legacy/client/components/ui/command/CommandDialog.vue +3 -0
- package/legacy/client/components/ui/command/CommandEmpty.vue +3 -0
- package/legacy/client/components/ui/command/CommandGroup.vue +3 -0
- package/legacy/client/components/ui/command/CommandInput.vue +3 -0
- package/legacy/client/components/ui/command/CommandItem.vue +3 -0
- package/legacy/client/components/ui/command/CommandList.vue +3 -0
- package/legacy/client/components/ui/command/CommandSeparator.vue +3 -0
- package/legacy/client/components/ui/command/CommandShortcut.vue +3 -0
- package/legacy/client/components/ui/command/index.ts +1 -0
- package/legacy/client/components/ui/context-menu/ContextMenu.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuCheckboxItem.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuContent.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuGroup.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuItem.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuLabel.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuPortal.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuRadioGroup.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuRadioItem.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuSeparator.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuShortcut.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuSub.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuSubContent.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuSubTrigger.vue +3 -0
- package/legacy/client/components/ui/context-menu/ContextMenuTrigger.vue +3 -0
- package/legacy/client/components/ui/context-menu/index.ts +1 -0
- package/legacy/client/components/ui/dialog/Dialog.vue +3 -0
- package/legacy/client/components/ui/dialog/DialogClose.vue +3 -0
- package/legacy/client/components/ui/dialog/DialogContent.vue +3 -0
- package/legacy/client/components/ui/dialog/DialogDescription.vue +3 -0
- package/legacy/client/components/ui/dialog/DialogFooter.vue +3 -0
- package/legacy/client/components/ui/dialog/DialogHeader.vue +3 -0
- package/legacy/client/components/ui/dialog/DialogOverlay.vue +3 -0
- package/legacy/client/components/ui/dialog/DialogScrollContent.vue +3 -0
- package/legacy/client/components/ui/dialog/DialogTitle.vue +3 -0
- package/legacy/client/components/ui/dialog/DialogTrigger.vue +3 -0
- package/legacy/client/components/ui/dialog/index.ts +1 -0
- package/legacy/client/components/ui/drawer/Drawer.vue +3 -0
- package/legacy/client/components/ui/drawer/DrawerClose.vue +3 -0
- package/legacy/client/components/ui/drawer/DrawerContent.vue +3 -0
- package/legacy/client/components/ui/drawer/DrawerDescription.vue +3 -0
- package/legacy/client/components/ui/drawer/DrawerFooter.vue +3 -0
- package/legacy/client/components/ui/drawer/DrawerHeader.vue +3 -0
- package/legacy/client/components/ui/drawer/DrawerOverlay.vue +3 -0
- package/legacy/client/components/ui/drawer/DrawerTitle.vue +3 -0
- package/legacy/client/components/ui/drawer/DrawerTrigger.vue +3 -0
- package/legacy/client/components/ui/drawer/index.ts +1 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenu.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuContent.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuGroup.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuItem.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuLabel.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuSeparator.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuShortcut.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuSub.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuSubContent.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuTrigger.vue +3 -0
- package/legacy/client/components/ui/dropdown-menu/index.ts +1 -0
- package/legacy/client/components/ui/form/FormControl.vue +3 -0
- package/legacy/client/components/ui/form/FormDescription.vue +3 -0
- package/legacy/client/components/ui/form/FormItem.vue +3 -0
- package/legacy/client/components/ui/form/FormLabel.vue +3 -0
- package/legacy/client/components/ui/form/FormMessage.vue +3 -0
- package/legacy/client/components/ui/form/index.ts +1 -0
- package/legacy/client/components/ui/hover-card/HoverCard.vue +3 -0
- package/legacy/client/components/ui/hover-card/HoverCardContent.vue +3 -0
- package/legacy/client/components/ui/hover-card/HoverCardTrigger.vue +3 -0
- package/legacy/client/components/ui/hover-card/index.ts +1 -0
- package/legacy/client/components/ui/input/Input.vue +3 -0
- package/legacy/client/components/ui/input/index.ts +1 -0
- package/legacy/client/components/ui/label/Label.vue +3 -0
- package/legacy/client/components/ui/label/index.ts +1 -0
- package/legacy/client/components/ui/menubar/Menubar.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarCheckboxItem.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarContent.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarGroup.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarItem.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarLabel.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarMenu.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarRadioGroup.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarRadioItem.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarSeparator.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarShortcut.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarSub.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarSubContent.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarSubTrigger.vue +3 -0
- package/legacy/client/components/ui/menubar/MenubarTrigger.vue +3 -0
- package/legacy/client/components/ui/menubar/index.ts +1 -0
- package/legacy/client/components/ui/navigation-menu/NavigationMenu.vue +3 -0
- package/legacy/client/components/ui/navigation-menu/NavigationMenuContent.vue +3 -0
- package/legacy/client/components/ui/navigation-menu/NavigationMenuIndicator.vue +3 -0
- package/legacy/client/components/ui/navigation-menu/NavigationMenuItem.vue +3 -0
- package/legacy/client/components/ui/navigation-menu/NavigationMenuLink.vue +3 -0
- package/legacy/client/components/ui/navigation-menu/NavigationMenuList.vue +3 -0
- package/legacy/client/components/ui/navigation-menu/NavigationMenuTrigger.vue +3 -0
- package/legacy/client/components/ui/navigation-menu/NavigationMenuViewport.vue +3 -0
- package/legacy/client/components/ui/navigation-menu/index.ts +1 -0
- package/legacy/client/components/ui/number-field/NumberField.vue +3 -0
- package/legacy/client/components/ui/number-field/NumberFieldContent.vue +3 -0
- package/legacy/client/components/ui/number-field/NumberFieldDecrement.vue +3 -0
- package/legacy/client/components/ui/number-field/NumberFieldIncrement.vue +3 -0
- package/legacy/client/components/ui/number-field/NumberFieldInput.vue +3 -0
- package/legacy/client/components/ui/number-field/index.ts +1 -0
- package/legacy/client/components/ui/pagination/Pagination.vue +3 -0
- package/legacy/client/components/ui/pagination/PaginationContent.vue +3 -0
- package/legacy/client/components/ui/pagination/PaginationEllipsis.vue +3 -0
- package/legacy/client/components/ui/pagination/PaginationFirst.vue +3 -0
- package/legacy/client/components/ui/pagination/PaginationItem.vue +3 -0
- package/legacy/client/components/ui/pagination/PaginationLast.vue +3 -0
- package/legacy/client/components/ui/pagination/PaginationNext.vue +3 -0
- package/legacy/client/components/ui/pagination/PaginationPrevious.vue +3 -0
- package/legacy/client/components/ui/pagination/index.ts +1 -0
- package/legacy/client/components/ui/pin-input/PinInput.vue +3 -0
- package/legacy/client/components/ui/pin-input/PinInputGroup.vue +3 -0
- package/legacy/client/components/ui/pin-input/PinInputSeparator.vue +3 -0
- package/legacy/client/components/ui/pin-input/PinInputSlot.vue +3 -0
- package/legacy/client/components/ui/pin-input/index.ts +1 -0
- package/legacy/client/components/ui/popover/Popover.vue +3 -0
- package/legacy/client/components/ui/popover/PopoverAnchor.vue +3 -0
- package/legacy/client/components/ui/popover/PopoverContent.vue +3 -0
- package/legacy/client/components/ui/popover/PopoverTrigger.vue +3 -0
- package/legacy/client/components/ui/popover/index.ts +1 -0
- package/legacy/client/components/ui/progress/Progress.vue +3 -0
- package/legacy/client/components/ui/progress/index.ts +1 -0
- package/legacy/client/components/ui/radio-group/RadioGroup.vue +3 -0
- package/legacy/client/components/ui/radio-group/RadioGroupItem.vue +3 -0
- package/legacy/client/components/ui/radio-group/index.ts +1 -0
- package/legacy/client/components/ui/range-calendar/RangeCalendar.vue +3 -0
- package/legacy/client/components/ui/range-calendar/RangeCalendarCell.vue +3 -0
- package/legacy/client/components/ui/range-calendar/RangeCalendarCellTrigger.vue +3 -0
- package/legacy/client/components/ui/range-calendar/RangeCalendarGrid.vue +3 -0
- package/legacy/client/components/ui/range-calendar/RangeCalendarGridBody.vue +3 -0
- package/legacy/client/components/ui/range-calendar/RangeCalendarGridHead.vue +3 -0
- package/legacy/client/components/ui/range-calendar/RangeCalendarGridRow.vue +3 -0
- package/legacy/client/components/ui/range-calendar/RangeCalendarHeadCell.vue +3 -0
- package/legacy/client/components/ui/range-calendar/RangeCalendarHeader.vue +3 -0
- package/legacy/client/components/ui/range-calendar/RangeCalendarHeading.vue +3 -0
- package/legacy/client/components/ui/range-calendar/RangeCalendarNextButton.vue +3 -0
- package/legacy/client/components/ui/range-calendar/RangeCalendarPrevButton.vue +3 -0
- package/legacy/client/components/ui/range-calendar/index.ts +1 -0
- package/legacy/client/components/ui/resizable/ResizableHandle.vue +3 -0
- package/legacy/client/components/ui/resizable/ResizablePanel.vue +3 -0
- package/legacy/client/components/ui/resizable/ResizablePanelGroup.vue +3 -0
- package/legacy/client/components/ui/resizable/index.ts +1 -0
- package/legacy/client/components/ui/scroll-area/ScrollArea.vue +3 -0
- package/legacy/client/components/ui/scroll-area/ScrollBar.vue +3 -0
- package/legacy/client/components/ui/scroll-area/index.ts +1 -0
- package/legacy/client/components/ui/select/Select.vue +3 -0
- package/legacy/client/components/ui/select/SelectContent.vue +3 -0
- package/legacy/client/components/ui/select/SelectGroup.vue +3 -0
- package/legacy/client/components/ui/select/SelectItem.vue +3 -0
- package/legacy/client/components/ui/select/SelectItemText.vue +3 -0
- package/legacy/client/components/ui/select/SelectLabel.vue +3 -0
- package/legacy/client/components/ui/select/SelectScrollDownButton.vue +3 -0
- package/legacy/client/components/ui/select/SelectScrollUpButton.vue +3 -0
- package/legacy/client/components/ui/select/SelectSeparator.vue +3 -0
- package/legacy/client/components/ui/select/SelectTrigger.vue +3 -0
- package/legacy/client/components/ui/select/SelectValue.vue +3 -0
- package/legacy/client/components/ui/select/index.ts +1 -0
- package/legacy/client/components/ui/separator/Separator.vue +3 -0
- package/legacy/client/components/ui/separator/index.ts +1 -0
- package/legacy/client/components/ui/sheet/Sheet.vue +3 -0
- package/legacy/client/components/ui/sheet/SheetClose.vue +3 -0
- package/legacy/client/components/ui/sheet/SheetContent.vue +3 -0
- package/legacy/client/components/ui/sheet/SheetDescription.vue +3 -0
- package/legacy/client/components/ui/sheet/SheetFooter.vue +3 -0
- package/legacy/client/components/ui/sheet/SheetHeader.vue +3 -0
- package/legacy/client/components/ui/sheet/SheetOverlay.vue +3 -0
- package/legacy/client/components/ui/sheet/SheetTitle.vue +3 -0
- package/legacy/client/components/ui/sheet/SheetTrigger.vue +3 -0
- package/legacy/client/components/ui/sheet/index.ts +1 -0
- package/legacy/client/components/ui/sidebar/Sidebar.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarContent.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarFooter.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarGroup.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarGroupAction.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarGroupContent.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarGroupLabel.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarHeader.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarInput.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarInset.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarMenu.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarMenuAction.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarMenuBadge.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarMenuButton.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarMenuButtonChild.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarMenuItem.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarMenuSkeleton.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarMenuSub.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarMenuSubButton.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarMenuSubItem.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarProvider.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarRail.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarSeparator.vue +3 -0
- package/legacy/client/components/ui/sidebar/SidebarTrigger.vue +3 -0
- package/legacy/client/components/ui/sidebar/index.ts +1 -0
- package/legacy/client/components/ui/skeleton/Skeleton.vue +3 -0
- package/legacy/client/components/ui/skeleton/index.ts +1 -0
- package/legacy/client/components/ui/slider/Slider.vue +3 -0
- package/legacy/client/components/ui/slider/index.ts +1 -0
- package/legacy/client/components/ui/sonner/Sonner.vue +3 -0
- package/legacy/client/components/ui/sonner/index.ts +1 -0
- package/legacy/client/components/ui/stepper/Stepper.vue +3 -0
- package/legacy/client/components/ui/stepper/StepperDescription.vue +3 -0
- package/legacy/client/components/ui/stepper/StepperIndicator.vue +3 -0
- package/legacy/client/components/ui/stepper/StepperItem.vue +3 -0
- package/legacy/client/components/ui/stepper/StepperSeparator.vue +3 -0
- package/legacy/client/components/ui/stepper/StepperTitle.vue +3 -0
- package/legacy/client/components/ui/stepper/StepperTrigger.vue +3 -0
- package/legacy/client/components/ui/stepper/index.ts +1 -0
- package/legacy/client/components/ui/switch/Switch.vue +3 -0
- package/legacy/client/components/ui/switch/index.ts +1 -0
- package/legacy/client/components/ui/table/Table.vue +3 -0
- package/legacy/client/components/ui/table/TableBody.vue +3 -0
- package/legacy/client/components/ui/table/TableCaption.vue +3 -0
- package/legacy/client/components/ui/table/TableCell.vue +3 -0
- package/legacy/client/components/ui/table/TableEmpty.vue +3 -0
- package/legacy/client/components/ui/table/TableFooter.vue +3 -0
- package/legacy/client/components/ui/table/TableHead.vue +3 -0
- package/legacy/client/components/ui/table/TableHeader.vue +3 -0
- package/legacy/client/components/ui/table/TableRow.vue +3 -0
- package/legacy/client/components/ui/table/index.ts +1 -0
- package/legacy/client/components/ui/tabs/Tabs.vue +3 -0
- package/legacy/client/components/ui/tabs/TabsContent.vue +3 -0
- package/legacy/client/components/ui/tabs/TabsList.vue +3 -0
- package/legacy/client/components/ui/tabs/TabsTrigger.vue +3 -0
- package/legacy/client/components/ui/tabs/index.ts +1 -0
- package/legacy/client/components/ui/tags-input/TagsInput.vue +3 -0
- package/legacy/client/components/ui/tags-input/TagsInputInput.vue +3 -0
- package/legacy/client/components/ui/tags-input/TagsInputItem.vue +3 -0
- package/legacy/client/components/ui/tags-input/TagsInputItemDelete.vue +3 -0
- package/legacy/client/components/ui/tags-input/TagsInputItemText.vue +3 -0
- package/legacy/client/components/ui/tags-input/index.ts +1 -0
- package/legacy/client/components/ui/textarea/Textarea.vue +3 -0
- package/legacy/client/components/ui/textarea/index.ts +1 -0
- package/legacy/client/components/ui/toggle/Toggle.vue +3 -0
- package/legacy/client/components/ui/toggle/index.ts +1 -0
- package/legacy/client/components/ui/toggle-group/ToggleGroup.vue +3 -0
- package/legacy/client/components/ui/toggle-group/ToggleGroupItem.vue +3 -0
- package/legacy/client/components/ui/toggle-group/index.ts +1 -0
- package/legacy/client/components/ui/tooltip/Tooltip.vue +3 -0
- package/legacy/client/components/ui/tooltip/TooltipContent.vue +3 -0
- package/legacy/client/components/ui/tooltip/TooltipProvider.vue +3 -0
- package/legacy/client/components/ui/tooltip/TooltipTrigger.vue +3 -0
- package/legacy/client/components/ui/tooltip/index.ts +1 -0
- package/legacy/client/facades/acl.facade.ts +1 -0
- package/legacy/client/facades/app.facade.ts +6 -0
- package/legacy/client/facades/auth.facade.ts +1 -0
- package/legacy/client/facades/config.facade.ts +1 -0
- package/legacy/client/facades/fetch.facade.ts +1 -0
- package/legacy/client/facades/logger.facade.ts +1 -0
- package/legacy/client/facades/menu.facade.ts +1 -0
- package/legacy/client/facades/router.facade.ts +1 -0
- package/legacy/client/facades/translator.facade.ts +10 -0
- package/legacy/client/utils/autoPages.ts +1 -0
- package/legacy/client/utils/createId.ts +1 -0
- package/legacy/client/utils/di.ts +1 -0
- package/legacy/client/utils/fetcher.ts +1 -0
- package/legacy/client/utils/file.ts +1 -0
- package/legacy/client/utils/index.ts +7 -0
- package/legacy/client/utils/logger.ts +1 -0
- package/legacy/client/utils/toast.ts +1 -0
- package/legacy/server/entities/file.entity.ts +4 -0
- package/legacy/server/exceptions/base.ts +4 -0
- package/legacy/server/facades/arte.facade.ts +6 -0
- package/legacy/server/facades/config.facade.ts +4 -0
- package/legacy/server/facades/db.facade.ts +4 -0
- package/legacy/server/facades/download.facade.ts +4 -0
- package/legacy/server/facades/drive.facade.ts +4 -0
- package/legacy/server/facades/logger.facade.ts +4 -0
- package/legacy/server/facades/router.facade.ts +4 -0
- package/legacy/server/middlewares/auth.middleware.ts +6 -0
- package/legacy/server/middlewares/authorization.middleware.ts +8 -0
- package/legacy/server/mixins/hooks.mixin.ts +6 -0
- package/legacy/server/mixins/model.mixin.ts +6 -0
- package/legacy/server/mixins/modelConfig.mixin.ts +4 -0
- package/legacy/server/queries/index.ts +6 -0
- package/legacy/server/services/metadataQuery.service.ts +6 -0
- package/legacy/server/services/routerResourceConfig.service.ts +5 -0
- package/legacy/shared/services/validator.service.ts +4 -0
- package/legacy/shared/utils/compose.ts +8 -0
- package/legacy/shared/utils/tryCatch.ts +7 -0
- package/package.json +57 -13
- package/tsconfig.client.json +3 -3
- package/tsconfig.server.json +1 -1
- package/tsdown/createTsdownConfig.js +29 -0
- package/tsdown.config.ts +55 -2
- package/vite/createViteConfig.js +55 -0
- package/vite/plugins/zenith.js +143 -0
- package/vite.config.ts +72 -0
- package/dist/shared/chunk-CfYAbeIz.mjs +0 -13
package/dist/shared/index.d.mts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import * as v from "valibot";
|
|
2
|
+
import * as _$_casl_ability0 from "@casl/ability";
|
|
3
|
+
import { defineAbility } from "@casl/ability";
|
|
2
4
|
|
|
3
5
|
//#region src/shared/services/ConfigService.d.ts
|
|
4
6
|
interface Entry {
|
|
@@ -7,6 +9,7 @@ interface Entry {
|
|
|
7
9
|
source: string;
|
|
8
10
|
}
|
|
9
11
|
declare class ConfigService {
|
|
12
|
+
static __container_entry_key: string;
|
|
10
13
|
entries: Map<string, Entry>;
|
|
11
14
|
constructor();
|
|
12
15
|
list(): Entry[];
|
|
@@ -20,6 +23,7 @@ declare class ConfigService {
|
|
|
20
23
|
set(key: string, value: any, source?: string): void;
|
|
21
24
|
unset(key: string): void;
|
|
22
25
|
clear(): void;
|
|
26
|
+
dump(): Record<string, any>;
|
|
23
27
|
}
|
|
24
28
|
//#endregion
|
|
25
29
|
//#region src/shared/services/ContainerService.d.ts
|
|
@@ -29,6 +33,7 @@ declare class ContainerService {
|
|
|
29
33
|
private entries;
|
|
30
34
|
loadFromRecord(record: Record<string, any>): void;
|
|
31
35
|
toRecord(): Record<string, any>;
|
|
36
|
+
private getKey;
|
|
32
37
|
set(payload: EntryKey, value: any): this;
|
|
33
38
|
has(payload: EntryKey): boolean;
|
|
34
39
|
get<T>(payload: EntryKey): T;
|
|
@@ -38,19 +43,9 @@ declare class ContainerService {
|
|
|
38
43
|
keys(): EntryKey[];
|
|
39
44
|
}
|
|
40
45
|
//#endregion
|
|
41
|
-
//#region src/shared/services/CookieService.d.ts
|
|
42
|
-
declare class CookieService {
|
|
43
|
-
cookies: Map<string, string>;
|
|
44
|
-
prefix: string;
|
|
45
|
-
constructor(data?: Partial<CookieService>);
|
|
46
|
-
load(cookies: Record<string, string> | Map<string, string>): void;
|
|
47
|
-
get(name: string, defaultValue?: string | null): string | null;
|
|
48
|
-
set(name: string, value: string, options?: any): void;
|
|
49
|
-
toRecord(): Record<string, string>;
|
|
50
|
-
}
|
|
51
|
-
//#endregion
|
|
52
46
|
//#region src/shared/services/LoggerService.d.ts
|
|
53
47
|
declare class LoggerService {
|
|
48
|
+
static __container_entry_key: string;
|
|
54
49
|
info(message: string, meta?: any): void;
|
|
55
50
|
debug(message: string, meta?: any): void;
|
|
56
51
|
warn(message: string, meta?: any): void;
|
|
@@ -77,10 +72,14 @@ interface EmmitterServiceOptions {
|
|
|
77
72
|
logger?: LoggerService;
|
|
78
73
|
}
|
|
79
74
|
declare class EmmitterService<Events extends Record<string, any> = Record<string, any>> {
|
|
75
|
+
static __container_entry_key: string;
|
|
80
76
|
private handlers;
|
|
81
77
|
private debug;
|
|
82
78
|
private logger;
|
|
83
|
-
|
|
79
|
+
constructor(options?: EmmitterServiceOptions);
|
|
80
|
+
static create<Events extends Record<string, any> = Record<string, any>>(options?: EmmitterServiceOptions): EmmitterService<Events>;
|
|
81
|
+
setDebug(debug: boolean): void;
|
|
82
|
+
setLogger(logger: LoggerService): void;
|
|
84
83
|
on<K extends keyof Events>(event: K, listener: (args: Events[K]) => void, options?: OnOptions): EmmitterHandler;
|
|
85
84
|
on(event: string, listener: (args: any) => void, options?: OnOptions): EmmitterHandler;
|
|
86
85
|
once<K extends keyof Events>(event: K, listener: (args: Events[K]) => void, options?: OnOptions): EmmitterHandler;
|
|
@@ -104,12 +103,20 @@ declare class EmmitterService<Events extends Record<string, any> = Record<string
|
|
|
104
103
|
//#region src/shared/entities/LifecycleHook.d.ts
|
|
105
104
|
declare class LifecycleHook {
|
|
106
105
|
hook_id: string;
|
|
106
|
+
hook_aliases?: string[];
|
|
107
107
|
order?: number;
|
|
108
108
|
subhooks?: LifecycleHook[];
|
|
109
|
-
|
|
109
|
+
register(): Promise<void>;
|
|
110
|
+
load(): Promise<void>;
|
|
111
|
+
boot(): Promise<void>;
|
|
112
|
+
shutdown(): Promise<void>;
|
|
113
|
+
/** @deprecated Use register */
|
|
110
114
|
onRegister(): Promise<void>;
|
|
115
|
+
/** @deprecated Use load */
|
|
111
116
|
onLoad(): Promise<void>;
|
|
117
|
+
/** @deprecated Use boot */
|
|
112
118
|
onBoot(): Promise<void>;
|
|
119
|
+
/** @deprecated Use shutdown */
|
|
113
120
|
onShutdown(): Promise<void>;
|
|
114
121
|
}
|
|
115
122
|
//#endregion
|
|
@@ -159,17 +166,35 @@ declare function composeWith<TBase extends Constructor, M extends Array<(base: C
|
|
|
159
166
|
declare function mixin<TBase extends Constructor>(Source: TBase): <TTarget extends Constructor>(Target: TTarget) => TTarget & TBase;
|
|
160
167
|
//#endregion
|
|
161
168
|
//#region src/shared/services/LifecycleService.d.ts
|
|
169
|
+
type LifecycleMethod = 'register' | 'load' | 'boot' | 'shutdown';
|
|
162
170
|
interface ListOptions {
|
|
163
|
-
|
|
171
|
+
include?: string | string[];
|
|
172
|
+
exclude?: string | string[];
|
|
173
|
+
}
|
|
174
|
+
interface LifecycleServiceOptions {
|
|
175
|
+
debug?: boolean;
|
|
176
|
+
hooks?: Map<string, LifecycleHook>;
|
|
177
|
+
logger?: LoggerService;
|
|
178
|
+
onError?: (error: Error, context: {
|
|
179
|
+
hookId: string;
|
|
180
|
+
method: LifecycleMethod;
|
|
181
|
+
}) => void;
|
|
164
182
|
}
|
|
165
183
|
declare class LifecycleService {
|
|
184
|
+
static __container_entry_key: string;
|
|
166
185
|
hooks: Map<string, LifecycleHook>;
|
|
167
186
|
logger: LoggerService;
|
|
168
187
|
debug: boolean;
|
|
169
|
-
constructor(data?:
|
|
170
|
-
|
|
188
|
+
constructor(data?: LifecycleServiceOptions);
|
|
189
|
+
onError(error: Error, context: {
|
|
190
|
+
hookId: string;
|
|
191
|
+
method: LifecycleMethod;
|
|
192
|
+
}): void;
|
|
193
|
+
mapAliases(args: string[]): string[];
|
|
171
194
|
list(options?: ListOptions): LifecycleHook[];
|
|
172
195
|
add(...payload: (LifecycleHook | Constructor<LifecycleHook>)[]): void;
|
|
196
|
+
emitMethod(method: LifecycleMethod, options?: ListOptions): Promise<void>;
|
|
197
|
+
emit(payload: LifecycleMethod | LifecycleMethod[], options?: ListOptions): Promise<void>;
|
|
173
198
|
register(options?: ListOptions): Promise<void>;
|
|
174
199
|
load(options?: ListOptions): Promise<void>;
|
|
175
200
|
boot(options?: ListOptions): Promise<void>;
|
|
@@ -179,6 +204,7 @@ declare class LifecycleService {
|
|
|
179
204
|
//#endregion
|
|
180
205
|
//#region src/shared/services/TranslatorService.d.ts
|
|
181
206
|
declare class TranslatorService {
|
|
207
|
+
static __container_entry_key: string;
|
|
182
208
|
entries: Map<string, string>;
|
|
183
209
|
locale: string;
|
|
184
210
|
localeLoaders: Map<string, () => Promise<Record<string, string>>>;
|
|
@@ -200,10 +226,11 @@ declare class TranslatorService {
|
|
|
200
226
|
//#endregion
|
|
201
227
|
//#region src/shared/services/UploadService.d.ts
|
|
202
228
|
declare class UploadService {
|
|
229
|
+
static __container_entry_key: string;
|
|
203
230
|
single(name: string): void;
|
|
204
231
|
multiple(name: string): void;
|
|
205
232
|
}
|
|
206
|
-
declare namespace
|
|
233
|
+
declare namespace urlValidator_d_exports {
|
|
207
234
|
export { array, arrayNumber, boolean, date, datetime, number, object };
|
|
208
235
|
}
|
|
209
236
|
declare const number: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>;
|
|
@@ -219,10 +246,24 @@ declare const object: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSc
|
|
|
219
246
|
}>, v.TransformAction<{
|
|
220
247
|
[x: string]: any;
|
|
221
248
|
}, Record<string, any>>]>;
|
|
249
|
+
declare namespace paginationValidator_d_exports {
|
|
250
|
+
export { PaginationParams, base };
|
|
251
|
+
}
|
|
252
|
+
interface PaginationParams {
|
|
253
|
+
maxLimit?: number;
|
|
254
|
+
orderFields?: string[];
|
|
255
|
+
}
|
|
256
|
+
declare const base: (options?: PaginationParams) => v.ObjectSchema<{
|
|
257
|
+
readonly page: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>, 1>;
|
|
258
|
+
readonly limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>, number>;
|
|
259
|
+
readonly orderBy: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.PicklistSchema<string[], undefined>, undefined>]> | v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.StringSchema<undefined>, undefined>]>, readonly []>;
|
|
260
|
+
readonly orderDirection: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.UnionSchema<[v.LiteralSchema<"asc", undefined>, v.LiteralSchema<"desc", undefined>], undefined>, undefined>]>, readonly []>;
|
|
261
|
+
}, undefined>;
|
|
222
262
|
//#endregion
|
|
223
263
|
//#region src/shared/services/ValidatorService.d.ts
|
|
224
264
|
declare const extras: {
|
|
225
|
-
url: typeof
|
|
265
|
+
url: typeof urlValidator_d_exports;
|
|
266
|
+
pagination: typeof paginationValidator_d_exports;
|
|
226
267
|
};
|
|
227
268
|
type Valibot = typeof v & {
|
|
228
269
|
extras: typeof extras;
|
|
@@ -239,6 +280,7 @@ type ValidatorResult<T extends v.ObjectEntries> = v.InferOutput<v.ObjectSchema<T
|
|
|
239
280
|
type ValidatePayload<T extends ValibotSchema = ValibotSchema> = ValidatorCallback<T> | T;
|
|
240
281
|
type ValidateResult<T extends ValidatePayload> = T extends ValibotSchema ? v.InferOutput<T> : T extends ValidatorCallback<infer U> ? v.InferOutput<U> : unknown;
|
|
241
282
|
declare class ValidatorService {
|
|
283
|
+
static __container_entry_key: string;
|
|
242
284
|
v: Valibot;
|
|
243
285
|
create<T extends ValibotSchema>(cb: ValidatorCallback<T>): T;
|
|
244
286
|
validate<T extends ValibotSchema>(payload: any, cb: ValidatePayload<T>): v.InferOutput<T>;
|
|
@@ -256,6 +298,10 @@ declare function unflatten(obj: any): Record<string, any>;
|
|
|
256
298
|
//#region src/shared/utils/formatBytes.d.ts
|
|
257
299
|
declare function formatBytes(bytes: number, decimals?: number): string;
|
|
258
300
|
//#endregion
|
|
301
|
+
//#region src/shared/utils/parseRouteUrl.d.ts
|
|
302
|
+
declare function parseUrlParams(routePath: string, requestPath: string): Record<string, string>;
|
|
303
|
+
declare function parseUrlQuery(requestPath: string): Record<string, any>;
|
|
304
|
+
//#endregion
|
|
259
305
|
//#region src/shared/utils/tryCatch.d.ts
|
|
260
306
|
interface Tryer {
|
|
261
307
|
(...args: any[]): any;
|
|
@@ -326,6 +372,240 @@ declare class ShellException extends BaseException {
|
|
|
326
372
|
//#region src/shared/facades/validator.d.ts
|
|
327
373
|
declare const validator: ValidatorService;
|
|
328
374
|
//#endregion
|
|
375
|
+
//#region src/shared/mixins/BaseEntityMixin.d.ts
|
|
376
|
+
interface CreateBaseEntityOptions {
|
|
377
|
+
parse?: (data: any) => any;
|
|
378
|
+
}
|
|
379
|
+
declare function createBaseEntity(options?: CreateBaseEntityOptions): <TBase extends Constructor>(Base: TBase) => {
|
|
380
|
+
new (...args: any[]): {
|
|
381
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
382
|
+
};
|
|
383
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
384
|
+
} & TBase;
|
|
385
|
+
declare function BaseEntity<TBase extends Constructor>(Base: TBase): {
|
|
386
|
+
new (...args: any[]): {
|
|
387
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
388
|
+
};
|
|
389
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
390
|
+
} & TBase;
|
|
391
|
+
//#endregion
|
|
392
|
+
//#region src/shared/mixins/HooksMixin.d.ts
|
|
393
|
+
interface Listener {
|
|
394
|
+
event: string;
|
|
395
|
+
listener: (...args: any[]) => void;
|
|
396
|
+
}
|
|
397
|
+
declare function emitHook(constructor: any, event: string, ...args: any[]): Promise<void>;
|
|
398
|
+
declare function onHook(constructor: any, event: string, listener: (...args: any[]) => void): void;
|
|
399
|
+
declare function HooksStatic<TBase extends Constructor>(Base: TBase): {
|
|
400
|
+
new (...args: any[]): {};
|
|
401
|
+
listeners: Array<(...args: any[]) => void>;
|
|
402
|
+
on(event: string, listener: (...args: any[]) => void): void;
|
|
403
|
+
emit(event: string, ...args: any[]): Promise<void>;
|
|
404
|
+
} & TBase;
|
|
405
|
+
declare namespace HooksStatic {
|
|
406
|
+
var emit: typeof emitHook;
|
|
407
|
+
var on: typeof onHook;
|
|
408
|
+
}
|
|
409
|
+
declare function Hooks<TBase extends Constructor>(Base: TBase): {
|
|
410
|
+
new (...args: any[]): {
|
|
411
|
+
listeners: Listener[];
|
|
412
|
+
on(event: string, listener: (...args: any[]) => void): void;
|
|
413
|
+
off(event: string, listener: (...args: any[]) => void): void;
|
|
414
|
+
emit(event: string, ...args: any[]): void;
|
|
415
|
+
emitAsync(event: string, ...args: any[]): Promise<void>;
|
|
416
|
+
};
|
|
417
|
+
} & TBase;
|
|
418
|
+
//#endregion
|
|
419
|
+
//#region src/shared/mixins/SoftDeleteMixin.d.ts
|
|
420
|
+
declare function SoftDeleteMixin<T extends Constructor>(base: T): {
|
|
421
|
+
new (...args: any[]): {
|
|
422
|
+
deleted_at: Date | string | null;
|
|
423
|
+
};
|
|
424
|
+
} & T;
|
|
425
|
+
//#endregion
|
|
426
|
+
//#region src/shared/mixins/TimestampMixin.d.ts
|
|
427
|
+
declare function TimestampMixin<T extends Constructor>(base: T): {
|
|
428
|
+
new (...args: any[]): {
|
|
429
|
+
created_at: Date | string;
|
|
430
|
+
updated_at: Date | string;
|
|
431
|
+
};
|
|
432
|
+
} & T;
|
|
433
|
+
//#endregion
|
|
434
|
+
//#region src/shared/entities/PermissionEntity.d.ts
|
|
435
|
+
declare const PermissionEntity_base: {
|
|
436
|
+
new (...args: any[]): {
|
|
437
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
438
|
+
};
|
|
439
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
440
|
+
} & Constructor;
|
|
441
|
+
declare class PermissionEntity extends PermissionEntity_base {
|
|
442
|
+
id: number;
|
|
443
|
+
name: string;
|
|
444
|
+
description: string | null;
|
|
445
|
+
origin: string;
|
|
446
|
+
subject: string;
|
|
447
|
+
action: string;
|
|
448
|
+
conditions: string | null | Record<string, any>;
|
|
449
|
+
get editable(): boolean;
|
|
450
|
+
get parsedConditions(): any;
|
|
451
|
+
}
|
|
452
|
+
//#endregion
|
|
453
|
+
//#region src/shared/entities/AclEntity.d.ts
|
|
454
|
+
declare class AclEntity {
|
|
455
|
+
static __container_entry_key: string;
|
|
456
|
+
ability: ReturnType<typeof defineAbility>;
|
|
457
|
+
permissions: PermissionEntity[];
|
|
458
|
+
debug: boolean;
|
|
459
|
+
logger: LoggerService;
|
|
460
|
+
constructor(data?: Partial<AclEntity>);
|
|
461
|
+
can(action: string, subject: any, object?: Record<string, any>): boolean;
|
|
462
|
+
cannot(action: string, subject: any, object?: Record<string, any>): boolean;
|
|
463
|
+
subject(subject: string, object: Record<string, any>): Record<string, any> & _$_casl_ability0.ForcedSubject<string>;
|
|
464
|
+
}
|
|
465
|
+
//#endregion
|
|
466
|
+
//#region src/shared/entities/CookieMapEntity.d.ts
|
|
467
|
+
interface CookieMapEntityOptions$1 {
|
|
468
|
+
cookies?: Map<string, string>;
|
|
469
|
+
prefix?: string;
|
|
470
|
+
}
|
|
471
|
+
declare class CookieMapEntity {
|
|
472
|
+
static __container_entry_key: string;
|
|
473
|
+
cookies: Map<string, string>;
|
|
474
|
+
prefix: string;
|
|
475
|
+
constructor(data?: CookieMapEntityOptions$1);
|
|
476
|
+
load(cookies: Record<string, string> | Map<string, string>): void;
|
|
477
|
+
get(name: string, defaultValue?: string | null): string | null;
|
|
478
|
+
set(name: string, value: string, options?: any): void;
|
|
479
|
+
toRecord(): Record<string, string>;
|
|
480
|
+
}
|
|
481
|
+
//#endregion
|
|
482
|
+
//#region src/shared/entities/DriveConfigEntity.d.ts
|
|
483
|
+
declare const TYPES: () => ({
|
|
484
|
+
id: string;
|
|
485
|
+
label: any;
|
|
486
|
+
description: any;
|
|
487
|
+
config_fields: {
|
|
488
|
+
directory: {
|
|
489
|
+
component: string;
|
|
490
|
+
label: any;
|
|
491
|
+
description: any;
|
|
492
|
+
hint: any;
|
|
493
|
+
};
|
|
494
|
+
accessKeyId?: undefined;
|
|
495
|
+
secretAccessKey?: undefined;
|
|
496
|
+
bucket?: undefined;
|
|
497
|
+
region?: undefined;
|
|
498
|
+
prefix?: undefined;
|
|
499
|
+
endpoint?: undefined;
|
|
500
|
+
};
|
|
501
|
+
} | {
|
|
502
|
+
id: string;
|
|
503
|
+
label: string;
|
|
504
|
+
description: any;
|
|
505
|
+
config_fields: {
|
|
506
|
+
accessKeyId: {
|
|
507
|
+
component: string;
|
|
508
|
+
label: any;
|
|
509
|
+
hint: any;
|
|
510
|
+
type: string;
|
|
511
|
+
};
|
|
512
|
+
secretAccessKey: {
|
|
513
|
+
component: string;
|
|
514
|
+
label: any;
|
|
515
|
+
hint: any;
|
|
516
|
+
type: string;
|
|
517
|
+
};
|
|
518
|
+
bucket: {
|
|
519
|
+
component: string;
|
|
520
|
+
label: any;
|
|
521
|
+
hint: any;
|
|
522
|
+
};
|
|
523
|
+
region: {
|
|
524
|
+
component: string;
|
|
525
|
+
label: any;
|
|
526
|
+
hint: any;
|
|
527
|
+
};
|
|
528
|
+
prefix: {
|
|
529
|
+
component: string;
|
|
530
|
+
label: any;
|
|
531
|
+
hint: any;
|
|
532
|
+
};
|
|
533
|
+
endpoint: {
|
|
534
|
+
component: string;
|
|
535
|
+
label: any;
|
|
536
|
+
hint: any;
|
|
537
|
+
};
|
|
538
|
+
directory?: undefined;
|
|
539
|
+
};
|
|
540
|
+
})[];
|
|
541
|
+
declare class DriveConfig {
|
|
542
|
+
static get TYPES(): ({
|
|
543
|
+
id: string;
|
|
544
|
+
label: any;
|
|
545
|
+
description: any;
|
|
546
|
+
config_fields: {
|
|
547
|
+
directory: {
|
|
548
|
+
component: string;
|
|
549
|
+
label: any;
|
|
550
|
+
description: any;
|
|
551
|
+
hint: any;
|
|
552
|
+
};
|
|
553
|
+
accessKeyId?: undefined;
|
|
554
|
+
secretAccessKey?: undefined;
|
|
555
|
+
bucket?: undefined;
|
|
556
|
+
region?: undefined;
|
|
557
|
+
prefix?: undefined;
|
|
558
|
+
endpoint?: undefined;
|
|
559
|
+
};
|
|
560
|
+
} | {
|
|
561
|
+
id: string;
|
|
562
|
+
label: string;
|
|
563
|
+
description: any;
|
|
564
|
+
config_fields: {
|
|
565
|
+
accessKeyId: {
|
|
566
|
+
component: string;
|
|
567
|
+
label: any;
|
|
568
|
+
hint: any;
|
|
569
|
+
type: string;
|
|
570
|
+
};
|
|
571
|
+
secretAccessKey: {
|
|
572
|
+
component: string;
|
|
573
|
+
label: any;
|
|
574
|
+
hint: any;
|
|
575
|
+
type: string;
|
|
576
|
+
};
|
|
577
|
+
bucket: {
|
|
578
|
+
component: string;
|
|
579
|
+
label: any;
|
|
580
|
+
hint: any;
|
|
581
|
+
};
|
|
582
|
+
region: {
|
|
583
|
+
component: string;
|
|
584
|
+
label: any;
|
|
585
|
+
hint: any;
|
|
586
|
+
};
|
|
587
|
+
prefix: {
|
|
588
|
+
component: string;
|
|
589
|
+
label: any;
|
|
590
|
+
hint: any;
|
|
591
|
+
};
|
|
592
|
+
endpoint: {
|
|
593
|
+
component: string;
|
|
594
|
+
label: any;
|
|
595
|
+
hint: any;
|
|
596
|
+
};
|
|
597
|
+
directory?: undefined;
|
|
598
|
+
};
|
|
599
|
+
})[];
|
|
600
|
+
id: string;
|
|
601
|
+
name: string;
|
|
602
|
+
type: string;
|
|
603
|
+
is_default: boolean;
|
|
604
|
+
config: Record<string, any>;
|
|
605
|
+
constructor(data: DriveConfig);
|
|
606
|
+
get config_fields(): {};
|
|
607
|
+
}
|
|
608
|
+
//#endregion
|
|
329
609
|
//#region src/shared/entities/DriveEntryEntity.d.ts
|
|
330
610
|
declare class DriveEntry {
|
|
331
611
|
name: string;
|
|
@@ -335,6 +615,102 @@ declare class DriveEntry {
|
|
|
335
615
|
constructor(data: DriveEntry);
|
|
336
616
|
}
|
|
337
617
|
//#endregion
|
|
618
|
+
//#region src/shared/entities/FileEntity.d.ts
|
|
619
|
+
declare const FileEntity_base: {
|
|
620
|
+
new (...args: any[]): {
|
|
621
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
622
|
+
};
|
|
623
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
624
|
+
} & Constructor & {
|
|
625
|
+
new (...args: any[]): {
|
|
626
|
+
created_at: Date | string;
|
|
627
|
+
updated_at: Date | string;
|
|
628
|
+
};
|
|
629
|
+
} & {
|
|
630
|
+
new (...args: any[]): {
|
|
631
|
+
deleted_at: Date | string | null;
|
|
632
|
+
};
|
|
633
|
+
};
|
|
634
|
+
declare class FileEntity extends FileEntity_base {
|
|
635
|
+
id: number;
|
|
636
|
+
drive: string;
|
|
637
|
+
mimetype: string;
|
|
638
|
+
purpose: string;
|
|
639
|
+
client_name: string;
|
|
640
|
+
filename: string;
|
|
641
|
+
public: boolean;
|
|
642
|
+
url?: string;
|
|
643
|
+
metas?: Record<string, any>;
|
|
644
|
+
isImage(): boolean;
|
|
645
|
+
}
|
|
646
|
+
//#endregion
|
|
647
|
+
//#region src/shared/entities/FileMetaEntity.d.ts
|
|
648
|
+
declare const FileMeta_base: {
|
|
649
|
+
new (...args: any[]): {
|
|
650
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
651
|
+
};
|
|
652
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
653
|
+
} & Constructor & {
|
|
654
|
+
new (...args: any[]): {
|
|
655
|
+
created_at: Date | string;
|
|
656
|
+
updated_at: Date | string;
|
|
657
|
+
};
|
|
658
|
+
} & {
|
|
659
|
+
new (...args: any[]): {
|
|
660
|
+
deleted_at: Date | string | null;
|
|
661
|
+
};
|
|
662
|
+
};
|
|
663
|
+
declare class FileMeta extends FileMeta_base {
|
|
664
|
+
id: number;
|
|
665
|
+
file_id: number;
|
|
666
|
+
name: string;
|
|
667
|
+
value: string | null;
|
|
668
|
+
}
|
|
669
|
+
//#endregion
|
|
670
|
+
//#region src/shared/entities/FileUploadSessionEntity.d.ts
|
|
671
|
+
declare const UploadSession_base: {
|
|
672
|
+
new (...args: any[]): {
|
|
673
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
674
|
+
};
|
|
675
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
676
|
+
} & Constructor & {
|
|
677
|
+
new (...args: any[]): {
|
|
678
|
+
created_at: Date | string;
|
|
679
|
+
updated_at: Date | string;
|
|
680
|
+
};
|
|
681
|
+
} & {
|
|
682
|
+
new (...args: any[]): {
|
|
683
|
+
deleted_at: Date | string | null;
|
|
684
|
+
};
|
|
685
|
+
};
|
|
686
|
+
declare class UploadSession extends UploadSession_base {
|
|
687
|
+
id: number;
|
|
688
|
+
purpose: string;
|
|
689
|
+
mime_types: string;
|
|
690
|
+
max_size: number;
|
|
691
|
+
upload_url?: string;
|
|
692
|
+
create_file_url?: string;
|
|
693
|
+
getParsedMimeTypes(): string[];
|
|
694
|
+
isAllowedMimeType(mimeType: string): boolean;
|
|
695
|
+
isAllowedSize(size: number): boolean;
|
|
696
|
+
}
|
|
697
|
+
//#endregion
|
|
698
|
+
//#region src/shared/entities/HeaderMapEntity.d.ts
|
|
699
|
+
interface CookieMapEntityOptions {
|
|
700
|
+
headers?: Record<string, string>;
|
|
701
|
+
setHeader?: (name: string, value: string) => void;
|
|
702
|
+
}
|
|
703
|
+
declare class HeaderMapEntity {
|
|
704
|
+
static __container_entry_key: string;
|
|
705
|
+
entries: Map<string, string>;
|
|
706
|
+
setHeader?: (name: string, value: string) => void;
|
|
707
|
+
constructor(data?: CookieMapEntityOptions);
|
|
708
|
+
loadFromRecord(cookies: Record<string, string>): void;
|
|
709
|
+
get(name: string, defaultValue?: string | null): string | null;
|
|
710
|
+
set(name: string, value: string): void;
|
|
711
|
+
toRecord(): Record<string, string>;
|
|
712
|
+
}
|
|
713
|
+
//#endregion
|
|
338
714
|
//#region src/shared/entities/ModuleManifestEntity.d.ts
|
|
339
715
|
interface ModuleManifestBuildImport {
|
|
340
716
|
from: string;
|
|
@@ -384,4 +760,81 @@ declare class Module extends Module_base {
|
|
|
384
760
|
setData(data: Partial<Module | ModuleManifest>): void;
|
|
385
761
|
}
|
|
386
762
|
//#endregion
|
|
387
|
-
|
|
763
|
+
//#region src/shared/entities/PaginationEntity.d.ts
|
|
764
|
+
declare class PaginationEntity<T = Record<string, any>> {
|
|
765
|
+
items: T[];
|
|
766
|
+
total: number;
|
|
767
|
+
page: number;
|
|
768
|
+
per_page: number;
|
|
769
|
+
total_pages: number;
|
|
770
|
+
constructor(data: Partial<PaginationEntity>);
|
|
771
|
+
static from<T = Record<string, string>>(payload: Partial<PaginationEntity<T>>): PaginationEntity<T>;
|
|
772
|
+
}
|
|
773
|
+
//#endregion
|
|
774
|
+
//#region src/shared/entities/PluginEntity.d.ts
|
|
775
|
+
declare const PluginEntity_base: {
|
|
776
|
+
new (...args: any[]): {
|
|
777
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
778
|
+
};
|
|
779
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
780
|
+
} & Constructor;
|
|
781
|
+
declare class PluginEntity extends PluginEntity_base {
|
|
782
|
+
id: string;
|
|
783
|
+
name: string;
|
|
784
|
+
version: string;
|
|
785
|
+
enabled: boolean;
|
|
786
|
+
aliases: string[];
|
|
787
|
+
}
|
|
788
|
+
//#endregion
|
|
789
|
+
//#region src/shared/entities/RoleEntity.d.ts
|
|
790
|
+
declare const Role_base: {
|
|
791
|
+
new (...args: any[]): {
|
|
792
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
793
|
+
};
|
|
794
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
795
|
+
} & Constructor & {
|
|
796
|
+
new (...args: any[]): {
|
|
797
|
+
created_at: Date | string;
|
|
798
|
+
updated_at: Date | string;
|
|
799
|
+
};
|
|
800
|
+
} & {
|
|
801
|
+
new (...args: any[]): {
|
|
802
|
+
deleted_at: Date | string | null;
|
|
803
|
+
};
|
|
804
|
+
};
|
|
805
|
+
declare class Role extends Role_base {
|
|
806
|
+
id: number;
|
|
807
|
+
name: string;
|
|
808
|
+
description?: string;
|
|
809
|
+
}
|
|
810
|
+
//#endregion
|
|
811
|
+
//#region src/shared/entities/UserEntity.d.ts
|
|
812
|
+
declare const UserEntity_base: {
|
|
813
|
+
new (...args: any[]): {
|
|
814
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
815
|
+
};
|
|
816
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
817
|
+
} & Constructor & {
|
|
818
|
+
new (...args: any[]): {
|
|
819
|
+
created_at: Date | string;
|
|
820
|
+
updated_at: Date | string;
|
|
821
|
+
};
|
|
822
|
+
} & {
|
|
823
|
+
new (...args: any[]): {
|
|
824
|
+
deleted_at: Date | string | null;
|
|
825
|
+
};
|
|
826
|
+
};
|
|
827
|
+
declare class UserEntity extends UserEntity_base {
|
|
828
|
+
id: number;
|
|
829
|
+
email: string;
|
|
830
|
+
name: string;
|
|
831
|
+
username: string;
|
|
832
|
+
password?: string;
|
|
833
|
+
verified_at?: Date | string | null;
|
|
834
|
+
permissions?: PermissionEntity[];
|
|
835
|
+
roles?: Role[];
|
|
836
|
+
get initials(): string;
|
|
837
|
+
}
|
|
838
|
+
//#endregion
|
|
839
|
+
export { AclEntity, AnyClass, BaseEntity as BaseEntityMixin, BaseException, ConfigService, Constructor, ContainerService, CookieMapEntity, DriveConfig as DriveConfigEntity, DriveEntry as DriveEntryEntity, EmmitterService, EmmitterServiceOptions, FileEntity, FileMeta as FileMetaEntity, UploadSession as FileUploadSessionEntity, HeaderMapEntity, Hooks as HooksMixin, HooksStatic, LifecycleHook, LifecycleService, LifecycleServiceOptions, Listener, LoggerService, Mixin, Module as ModuleEntity, ModuleManifestBuild, ModuleManifestBuildImport, ModuleManifest as ModuleManifestEntity, PaginationEntity, PartialBy, Permission, PermissionAssignment, PermissionEntity, PluginEntity, PublicData, Role as RoleEntity, ShellException, SoftDeleteMixin, TYPES, TimestampMixin, Token, TranslatorService, UnionToIntersection, UploadService, UserEntity, Valibot, ValibotSchema, ValibotSchemaAsync, ValidatePayload, ValidateResult, ValidatorCallback, ValidatorCallbackAsync, ValidatorResult, ValidatorService, compose, composeWith, createBaseEntity, createId, emitHook, flatten, formatBytes, mixin, onHook, parseUrlParams, parseUrlQuery, permissionAssignmentSchema, permissionSchema, tokenSchema, tryCatch, unflatten, validator };
|
|
840
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9Db25maWdTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL0NvbnRhaW5lclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9FbW1pdHRlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvTGlmZWN5Y2xlSG9vay5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC91dGlscy90eXBpbmcuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvdXRpbHMvY29tcG9zZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9MaWZlY3ljbGVTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL1RyYW5zbGF0b3JTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL1VwbG9hZFNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvdmFsaWRhdG9ycy91cmxWYWxpZGF0b3IuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvdmFsaWRhdG9ycy9wYWdpbmF0aW9uVmFsaWRhdG9yLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL1ZhbGlkYXRvclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvdXRpbHMvY3JlYXRlSWQuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvdXRpbHMvZmxhdHRlbi5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC91dGlscy9mb3JtYXRCeXRlcy5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC91dGlscy9wYXJzZVJvdXRlVXJsLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3V0aWxzL3RyeUNhdGNoLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NjaGVtYXMvcGVybWlzc2lvbkFzc2lnbm1lbnRTY2hlbWEuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2NoZW1hcy9wZXJtaXNzaW9uU2NoZW1hLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NjaGVtYXMvdG9rZW5TY2hlbWEuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZXhjZXB0aW9ucy9CYXNlRXhjZXB0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2V4Y2VwdGlvbnMvU2hlbGxFeGNlcHRpb24uZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZmFjYWRlcy92YWxpZGF0b3IuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvbWl4aW5zL0Jhc2VFbnRpdHlNaXhpbi5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9taXhpbnMvSG9va3NNaXhpbi5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9taXhpbnMvU29mdERlbGV0ZU1peGluLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL21peGlucy9UaW1lc3RhbXBNaXhpbi5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9QZXJtaXNzaW9uRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0FjbEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Db29raWVNYXBFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvRHJpdmVDb25maWdFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvRHJpdmVFbnRyeUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9GaWxlRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0ZpbGVNZXRhRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0ZpbGVVcGxvYWRTZXNzaW9uRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0hlYWRlck1hcEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Nb2R1bGVNYW5pZmVzdEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Nb2R1bGVFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUGFnaW5hdGlvbkVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9QbHVnaW5FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUm9sZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Vc2VyRW50aXR5LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW50ZXJmYWNlIEVudHJ5IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICAgIHNvdXJjZTogc3RyaW5nO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlnU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGVudHJpZXM6IE1hcDxzdHJpbmcsIEVudHJ5PjtcbiAgICBjb25zdHJ1Y3RvcigpO1xuICAgIGxpc3QoKTogRW50cnlbXTtcbiAgICBwYXJzZVZhbHVlKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgbG9hZEZyb21SZWNvcmQocmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzb3VyY2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIGxvYWRGcm9tRW50cmllcyhlbnRyaWVzOiBbc3RyaW5nLCBhbnldW10sIHNvdXJjZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgdG9SZWNvcmQoKTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuO1xuICAgIGdldDxUID0gYW55IHwgdW5kZWZpbmVkPihrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogYW55KTogVDtcbiAgICBnZXRPbmU8VCA9IGFueSB8IHVuZGVmaW5lZD4oa2V5czogc3RyaW5nW10sIGRlZmF1bHRWYWx1ZT86IGFueSk6IFQ7XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBzb3VyY2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIHVuc2V0KGtleTogc3RyaW5nKTogdm9pZDtcbiAgICBjbGVhcigpOiB2b2lkO1xuICAgIGR1bXAoKTogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cbmV4cG9ydCB7fTtcbiIsInR5cGUgQ29uc3RydWN0b3I8VCA9IG9iamVjdD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xudHlwZSBFbnRyeUtleSA9IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGFpbmVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSBlbnRyaWVzO1xuICAgIGxvYWRGcm9tUmVjb3JkKHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQ7XG4gICAgdG9SZWNvcmQoKTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBwcml2YXRlIGdldEtleTtcbiAgICBzZXQocGF5bG9hZDogRW50cnlLZXksIHZhbHVlOiBhbnkpOiB0aGlzO1xuICAgIGhhcyhwYXlsb2FkOiBFbnRyeUtleSk6IGJvb2xlYW47XG4gICAgZ2V0PFQ+KHBheWxvYWQ6IEVudHJ5S2V5KTogVDtcbiAgICBzaW5nbGV0b248VD4oY2xhc3NDb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8VD4pOiBUO1xuICAgIGxvYWQoZW50cmllczogUmVjb3JkPGFueSwgYW55Pik6IHZvaWQ7XG4gICAgcHJveHk8VCA9IHVua25vd24+KGtleTogRW50cnlLZXkpOiBUO1xuICAgIGtleXMoKTogRW50cnlLZXlbXTtcbn1cbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlclNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgbWV0YT86IGFueSk6IHZvaWQ7XG4gICAgZGVidWcobWVzc2FnZTogc3RyaW5nLCBtZXRhPzogYW55KTogdm9pZDtcbiAgICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgbWV0YT86IGFueSk6IHZvaWQ7XG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBtZXRhPzogYW55KTogdm9pZDtcbiAgICBjaGlsZChvcHRpb25zOiBhbnkpOiBMb2dnZXJTZXJ2aWNlO1xufVxuIiwiaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnLi9Mb2dnZXJTZXJ2aWNlLnRzJztcbmludGVyZmFjZSBFbW1pdHRlckhhbmRsZXIge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZXZlbnQ6IHN0cmluZztcbiAgICBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG4gICAgb3JpZ2luYWxMaXN0ZW5lcj86ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xufVxuaW50ZXJmYWNlIE9uT3B0aW9ucyB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgdW5pcXVlPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBPbkRlYm91bmNlT3B0aW9ucyBleHRlbmRzIE9uT3B0aW9ucyB7XG4gICAgZGVib3VuY2U/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEVtbWl0dGVyU2VydmljZU9wdGlvbnMge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW1taXR0ZXJTZXJ2aWNlPEV2ZW50cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIHByaXZhdGUgaGFuZGxlcnM7XG4gICAgcHJpdmF0ZSBkZWJ1ZztcbiAgICBwcml2YXRlIGxvZ2dlcjtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zPzogRW1taXR0ZXJTZXJ2aWNlT3B0aW9ucyk7XG4gICAgc3RhdGljIGNyZWF0ZTxFdmVudHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4ob3B0aW9ucz86IEVtbWl0dGVyU2VydmljZU9wdGlvbnMpOiBFbW1pdHRlclNlcnZpY2U8RXZlbnRzPjtcbiAgICBzZXREZWJ1ZyhkZWJ1ZzogYm9vbGVhbik6IHZvaWQ7XG4gICAgc2V0TG9nZ2VyKGxvZ2dlcjogTG9nZ2VyU2VydmljZSk6IHZvaWQ7XG4gICAgb248SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnQ6IEssIGxpc3RlbmVyOiAoYXJnczogRXZlbnRzW0tdKSA9PiB2b2lkLCBvcHRpb25zPzogT25PcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoYXJnczogYW55KSA9PiB2b2lkLCBvcHRpb25zPzogT25PcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uY2U8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnQ6IEssIGxpc3RlbmVyOiAoYXJnczogRXZlbnRzW0tdKSA9PiB2b2lkLCBvcHRpb25zPzogT25PcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uY2UoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IChhcmdzOiBhbnkpID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb25EZWJvdW5jZTxLIGV4dGVuZHMga2V5b2YgRXZlbnRzPihldmVudDogSywgbGlzdGVuZXI6IChhcmdzOiBFdmVudHNbS10pID0+IHZvaWQsIG9wdGlvbnM/OiBPbkRlYm91bmNlT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbkRlYm91bmNlKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoYXJnczogYW55KSA9PiB2b2lkLCBvcHRpb25zPzogT25EZWJvdW5jZU9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb25BbnlPZjxLIGV4dGVuZHMga2V5b2YgRXZlbnRzPihldmVudHM6IEtbXSwgbGlzdGVuZXI6IChhcmdzOiBFdmVudHNbS10pID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXJbXTtcbiAgICBvbkFueU9mKGV2ZW50czogc3RyaW5nW10sIGxpc3RlbmVyOiAoYXJnczogYW55KSA9PiB2b2lkLCBvcHRpb25zPzogT25PcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgb2ZmKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiBGdW5jdGlvbik6IHZvaWQ7XG4gICAgZW1pdDxLIGV4dGVuZHMga2V5b2YgRXZlbnRzPihldmVudDogSywgYXJnczogRXZlbnRzW0tdKTogdm9pZDtcbiAgICBlbWl0KGV2ZW50OiBzdHJpbmcsIGFyZ3M/OiBhbnkpOiB2b2lkO1xuICAgIGVtaXRBbmRXYWl0PEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBhcmdzOiBFdmVudHNbS10pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGVtaXRBbmRXYWl0KGV2ZW50OiBzdHJpbmcsIGFyZ3M/OiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxpc3QoKTogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgbGlzdEJ5RXZlbnQoZXZlbnQ6IHN0cmluZyk6IEVtbWl0dGVySGFuZGxlcltdO1xuICAgIHJlbW92ZShwYXlsb2FkOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQ7XG4gICAgY2xlYXIoKTogdm9pZDtcbiAgICBoYXNIYW5kbGVycygpOiBib29sZWFuO1xufVxuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlmZWN5Y2xlSG9vayB7XG4gICAgaG9va19pZDogc3RyaW5nO1xuICAgIGhvb2tfYWxpYXNlcz86IHN0cmluZ1tdO1xuICAgIG9yZGVyPzogbnVtYmVyO1xuICAgIHN1Ymhvb2tzPzogTGlmZWN5Y2xlSG9va1tdO1xuICAgIHJlZ2lzdGVyKCk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGJvb3QoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBVc2UgcmVnaXN0ZXIgKi9cbiAgICBvblJlZ2lzdGVyKCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSBsb2FkICovXG4gICAgb25Mb2FkKCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSBib290ICovXG4gICAgb25Cb290KCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSBzaHV0ZG93biAqL1xuICAgIG9uU2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImV4cG9ydCB0eXBlIFVuaW9uVG9JbnRlcnNlY3Rpb248VT4gPSAoVSBleHRlbmRzIGFueSA/IChrOiBVKSA9PiB2b2lkIDogbmV2ZXIpIGV4dGVuZHMgKGs6IGluZmVyIEkpID0+IHZvaWQgPyBJIDogbmV2ZXI7XG5leHBvcnQgdHlwZSBQYXJ0aWFsQnk8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gT21pdDxULCBLPiAmIFBhcnRpYWw8UGljazxULCBLPj47XG5leHBvcnQgdHlwZSBQdWJsaWNEYXRhPFQ+ID0ge1xuICAgIFtLIGluIGtleW9mIFQgYXMgVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLXTogVFtLXTtcbn07XG4iLCJpbXBvcnQgdHlwZSB7IFVuaW9uVG9JbnRlcnNlY3Rpb24gfSBmcm9tICcuL3R5cGluZy50cyc7XG5leHBvcnQgdHlwZSBBbnlDbGFzcyA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueTtcbmV4cG9ydCB0eXBlIENvbnN0cnVjdG9yPFQgPSB7fT4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuZXhwb3J0IHR5cGUgTWl4aW48VD4gPSAoYmFzZTogQ29uc3RydWN0b3IpID0+IENvbnN0cnVjdG9yPFQ+O1xuLyoqXG4gKiBDb21wb3NlcyBtdWx0aXBsZSBtaXhpbnMgaW50byBhIHNpbmdsZSBjbGFzcyB0aGF0IGNhbiBiZSBleHRlbmRlZC5cbiAqIEFsbG93cyBmb3IgbXVsdGlwbGUgaW5oZXJpdGFuY2UtbGlrZSBiZWhhdmlvciBieSBhcHBseWluZyBtaXhpbnMgc2VxdWVudGlhbGx5LlxuICpcbiAqIEBwYXJhbSBtaXhpbnMgLSBBcnJheSBvZiBtaXhpbiBmdW5jdGlvbnMgdG8gY29tcG9zZVxuICogQHJldHVybnMgQSBjbGFzcyBjb25zdHJ1Y3RvciB0aGF0IGluY2x1ZGVzIGFsbCBtaXhpbiBmdW5jdGlvbmFsaXR5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIFVzZXIgZXh0ZW5kcyBjb21wb3NlKFRpbWVzdGFtcCwgU29mdERlbGV0ZSkge1xuICogICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XG4gKiAgICAgc3VwZXIoKVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29tcG9zZTxNIGV4dGVuZHMgQXJyYXk8KGJhc2U6IENvbnN0cnVjdG9yPGFueT4pID0+IENvbnN0cnVjdG9yPGFueT4+PiguLi5taXhpbnM6IE0pOiBVbmlvblRvSW50ZXJzZWN0aW9uPFJldHVyblR5cGU8TVtudW1iZXJdPj47XG4vKipcbiAqIEFsdGVybmF0aXZlIGNvbXBvc2UgZnVuY3Rpb24gdGhhdCBzdGFydHMgd2l0aCBhIGJhc2UgY2xhc3NcbiAqXG4gKiBAcGFyYW0gYmFzZUNsYXNzIC0gVGhlIGJhc2UgY2xhc3MgdG8gc3RhcnQgd2l0aFxuICogQHBhcmFtIG1peGlucyAtIEFycmF5IG9mIG1peGluIGZ1bmN0aW9ucyB0byBhcHBseVxuICogQHJldHVybnMgQSBjbGFzcyBjb25zdHJ1Y3RvciB0aGF0IGV4dGVuZHMgdGhlIGJhc2UgY2xhc3Mgd2l0aCBhbGwgbWl4aW4gZnVuY3Rpb25hbGl0eVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBVc2VyIGV4dGVuZHMgY29tcG9zZVdpdGgoQmFzZUVudGl0eSwgVGltZXN0YW1wLCBTb2Z0RGVsZXRlKSB7XG4gKiAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcbiAqICAgICBzdXBlcigpXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb21wb3NlV2l0aDxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yLCBNIGV4dGVuZHMgQXJyYXk8KGJhc2U6IENvbnN0cnVjdG9yKSA9PiBDb25zdHJ1Y3Rvcjxhbnk+Pj4oYmFzZUNsYXNzOiBUQmFzZSwgLi4ubWl4aW5zOiBNKTogVEJhc2UgJiBVbmlvblRvSW50ZXJzZWN0aW9uPFJldHVyblR5cGU8TVtudW1iZXJdPj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBtaXhpbjxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPihTb3VyY2U6IFRCYXNlKTogPFRUYXJnZXQgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oVGFyZ2V0OiBUVGFyZ2V0KSA9PiBUVGFyZ2V0ICYgVEJhc2U7XG4iLCJpbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcuL0xvZ2dlclNlcnZpY2UudHMnO1xuaW1wb3J0IHR5cGUgTGlmZWN5Y2xlSG9vayBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0xpZmVjeWNsZUhvb2sudHMnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJyNzaGFyZWQvdXRpbHMvY29tcG9zZS50cyc7XG50eXBlIExpZmVjeWNsZU1ldGhvZCA9ICdyZWdpc3RlcicgfCAnbG9hZCcgfCAnYm9vdCcgfCAnc2h1dGRvd24nO1xuaW50ZXJmYWNlIExpc3RPcHRpb25zIHtcbiAgICBpbmNsdWRlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgZXhjbHVkZT86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBMaWZlY3ljbGVTZXJ2aWNlT3B0aW9ucyB7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGhvb2tzPzogTWFwPHN0cmluZywgTGlmZWN5Y2xlSG9vaz47XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbiAgICBvbkVycm9yPzogKGVycm9yOiBFcnJvciwgY29udGV4dDoge1xuICAgICAgICBob29rSWQ6IHN0cmluZztcbiAgICAgICAgbWV0aG9kOiBMaWZlY3ljbGVNZXRob2Q7XG4gICAgfSkgPT4gdm9pZDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZmVjeWNsZVNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBob29rczogTWFwPHN0cmluZywgTGlmZWN5Y2xlSG9vaz47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBMaWZlY3ljbGVTZXJ2aWNlT3B0aW9ucyk7XG4gICAgb25FcnJvcihlcnJvcjogRXJyb3IsIGNvbnRleHQ6IHtcbiAgICAgICAgaG9va0lkOiBzdHJpbmc7XG4gICAgICAgIG1ldGhvZDogTGlmZWN5Y2xlTWV0aG9kO1xuICAgIH0pOiB2b2lkO1xuICAgIG1hcEFsaWFzZXMoYXJnczogc3RyaW5nW10pOiBzdHJpbmdbXTtcbiAgICBsaXN0KG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IExpZmVjeWNsZUhvb2tbXTtcbiAgICBhZGQoLi4ucGF5bG9hZDogKExpZmVjeWNsZUhvb2sgfCBDb25zdHJ1Y3RvcjxMaWZlY3ljbGVIb29rPilbXSk6IHZvaWQ7XG4gICAgZW1pdE1ldGhvZChtZXRob2Q6IExpZmVjeWNsZU1ldGhvZCwgb3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBlbWl0KHBheWxvYWQ6IExpZmVjeWNsZU1ldGhvZCB8IExpZmVjeWNsZU1ldGhvZFtdLCBvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHJlZ2lzdGVyKG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZChvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGJvb3Qob3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzaHV0ZG93bihvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGNsZWFyKCk6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcuL0xvZ2dlclNlcnZpY2UudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHJhbnNsYXRvclNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBlbnRyaWVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGxvY2FsZTogc3RyaW5nO1xuICAgIGxvY2FsZUxvYWRlcnM6IE1hcDxzdHJpbmcsICgpID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4+O1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBjYWNoZTogTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4gICAgY29uc3RydWN0b3IoZGF0YT86IFBhcnRpYWw8VHJhbnNsYXRvclNlcnZpY2U+KTtcbiAgICBnZXQgbG9jYWxlcygpOiBzdHJpbmdbXTtcbiAgICBsaXN0KCk6IHtcbiAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgfVtdO1xuICAgIGdldEVudHJpZXMobG9jYWxlOiBzdHJpbmcpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICAgIGxvYWQobG9jYWxlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHQoa2V5OiBzdHJpbmcsIGFyZ3M/OiBhbnkpOiBzdHJpbmc7XG4gICAgZGF0ZShkYXRhOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlKTogc3RyaW5nO1xuICAgIGRhdGV0aW1lKGRhdGE6IHN0cmluZyB8IG51bWJlciB8IERhdGUpOiBzdHJpbmc7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBVcGxvYWRTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgc2luZ2xlKG5hbWU6IHN0cmluZyk6IHZvaWQ7XG4gICAgbXVsdGlwbGUobmFtZTogc3RyaW5nKTogdm9pZDtcbn1cbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBudW1iZXI6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxhbnksIG51bWJlcj4sIHYuSW50ZWdlckFjdGlvbjxudW1iZXIsIHVuZGVmaW5lZD5dPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGJvb2xlYW46ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQm9vbGVhblNjaGVtYTx1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgYm9vbGVhbiwgYm9vbGVhbj5dPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGRhdGU6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuRGF0ZVNjaGVtYTx1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgRGF0ZSwgRGF0ZT4sIHYuVHJhbnNmb3JtQWN0aW9uPERhdGUsIHN0cmluZyB8IERhdGU+XT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBkYXRldGltZTogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5EYXRlU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBEYXRlLCBzdHJpbmcgfCBEYXRlPl0+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgYXJyYXk6IDxUIGV4dGVuZHMgdi5CYXNlU2NoZW1hPGFueSwgYW55LCBhbnk+PihzY2hlbWE/OiBUKSA9PiB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSwgc3RyaW5nW10+LCB2LkFycmF5U2NoZW1hPFQsIHVuZGVmaW5lZD5dPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGFycmF5TnVtYmVyOiAoKSA9PiB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSwgc3RyaW5nW10+LCB2LkFycmF5U2NoZW1hPHYuQmFzZVNjaGVtYTxhbnksIGFueSwgYW55PiwgdW5kZWZpbmVkPl0+LCB2LlRyYW5zZm9ybUFjdGlvbjxhbnlbXSwgbnVtYmVyW10+XT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBvYmplY3Q6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuUmVjb3JkU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQW55U2NoZW1hLCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwge1xuICAgIFt4OiBzdHJpbmddOiBhbnk7XG59LCB7XG4gICAgW3g6IHN0cmluZ106IGFueTtcbn0+LCB2LlRyYW5zZm9ybUFjdGlvbjx7XG4gICAgW3g6IHN0cmluZ106IGFueTtcbn0sIFJlY29yZDxzdHJpbmcsIGFueT4+XT47XG4iLCJpbXBvcnQgKiBhcyB2IGZyb20gJ3ZhbGlib3QnO1xuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uUGFyYW1zIHtcbiAgICBtYXhMaW1pdD86IG51bWJlcjtcbiAgICBvcmRlckZpZWxkcz86IHN0cmluZ1tdO1xufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgYmFzZTogKG9wdGlvbnM/OiBQYWdpbmF0aW9uUGFyYW1zKSA9PiB2Lk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgcGFnZTogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2Lk51bWJlclNjaGVtYTx1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248YW55LCBudW1iZXI+LCB2LkludGVnZXJBY3Rpb248bnVtYmVyLCB1bmRlZmluZWQ+XT4sIDE+O1xuICAgIHJlYWRvbmx5IGxpbWl0OiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxhbnksIG51bWJlcj4sIHYuSW50ZWdlckFjdGlvbjxudW1iZXIsIHVuZGVmaW5lZD5dPiwgbnVtYmVyPjtcbiAgICByZWFkb25seSBvcmRlckJ5OiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8di5QaWNrbGlzdFNjaGVtYTxzdHJpbmdbXSwgdW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0+IHwgdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgc3RyaW5nW10sIHN0cmluZ1tdPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XT4sIHJlYWRvbmx5IFtdPjtcbiAgICByZWFkb25seSBvcmRlckRpcmVjdGlvbjogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSwgc3RyaW5nW10+LCB2LkFycmF5U2NoZW1hPHYuVW5pb25TY2hlbWE8W3YuTGl0ZXJhbFNjaGVtYTxcImFzY1wiLCB1bmRlZmluZWQ+LCB2LkxpdGVyYWxTY2hlbWE8XCJkZXNjXCIsIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XT4sIHJlYWRvbmx5IFtdPjtcbn0sIHVuZGVmaW5lZD47XG4iLCJpbXBvcnQgKiBhcyB2IGZyb20gJ3ZhbGlib3QnO1xuaW1wb3J0ICogYXMgdXJsIGZyb20gJyNzaGFyZWQvdmFsaWRhdG9ycy91cmxWYWxpZGF0b3IudHMnO1xuaW1wb3J0ICogYXMgcGFnaW5hdGlvbiBmcm9tICcjc2hhcmVkL3ZhbGlkYXRvcnMvcGFnaW5hdGlvblZhbGlkYXRvci50cyc7XG5kZWNsYXJlIGNvbnN0IGV4dHJhczoge1xuICAgIHVybDogdHlwZW9mIHVybDtcbiAgICBwYWdpbmF0aW9uOiB0eXBlb2YgcGFnaW5hdGlvbjtcbn07XG5leHBvcnQgdHlwZSBWYWxpYm90ID0gdHlwZW9mIHYgJiB7XG4gICAgZXh0cmFzOiB0eXBlb2YgZXh0cmFzO1xufTtcbmV4cG9ydCB0eXBlIFZhbGlib3RTY2hlbWEgPSB2LkJhc2VTY2hlbWE8dW5rbm93biwgdW5rbm93biwgdi5CYXNlSXNzdWU8dW5rbm93bj4+O1xuZXhwb3J0IHR5cGUgVmFsaWJvdFNjaGVtYUFzeW5jID0gdi5CYXNlU2NoZW1hQXN5bmM8dW5rbm93biwgdW5rbm93biwgdi5CYXNlSXNzdWU8dW5rbm93bj4+O1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0b3JDYWxsYmFjazxUIGV4dGVuZHMgVmFsaWJvdFNjaGVtYT4ge1xuICAgIChfdjogVmFsaWJvdCk6IFQ7XG59XG5leHBvcnQgdHlwZSBWYWxpZGF0b3JDYWxsYmFja0FzeW5jPFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hQXN5bmM+ID0ge1xuICAgIChfdjogVmFsaWJvdCk6IFQ7XG59O1xuZXhwb3J0IHR5cGUgVmFsaWRhdG9yUmVzdWx0PFQgZXh0ZW5kcyB2Lk9iamVjdEVudHJpZXM+ID0gdi5JbmZlck91dHB1dDx2Lk9iamVjdFNjaGVtYTxULCB1bmRlZmluZWQ+PjtcbmV4cG9ydCB0eXBlIFZhbGlkYXRlUGF5bG9hZDxUIGV4dGVuZHMgVmFsaWJvdFNjaGVtYSA9IFZhbGlib3RTY2hlbWE+ID0gVmFsaWRhdG9yQ2FsbGJhY2s8VD4gfCBUO1xuZXhwb3J0IHR5cGUgVmFsaWRhdGVSZXN1bHQ8VCBleHRlbmRzIFZhbGlkYXRlUGF5bG9hZD4gPSBUIGV4dGVuZHMgVmFsaWJvdFNjaGVtYSA/IHYuSW5mZXJPdXRwdXQ8VD4gOiBUIGV4dGVuZHMgVmFsaWRhdG9yQ2FsbGJhY2s8aW5mZXIgVT4gPyB2LkluZmVyT3V0cHV0PFU+IDogdW5rbm93bjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbGlkYXRvclNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICB2OiBWYWxpYm90O1xuICAgIGNyZWF0ZTxUIGV4dGVuZHMgVmFsaWJvdFNjaGVtYT4oY2I6IFZhbGlkYXRvckNhbGxiYWNrPFQ+KTogVDtcbiAgICB2YWxpZGF0ZTxUIGV4dGVuZHMgVmFsaWJvdFNjaGVtYT4ocGF5bG9hZDogYW55LCBjYjogVmFsaWRhdGVQYXlsb2FkPFQ+KTogdi5JbmZlck91dHB1dDxUPjtcbiAgICB2YWxpZGF0ZUFzeW5jPFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hQXN5bmM+KHBheWxvYWQ6IGFueSwgY2I6IFZhbGlkYXRvckNhbGxiYWNrQXN5bmM8VD4gfCBUKTogUHJvbWlzZTx2LkluZmVyT3V0cHV0PFQ+PjtcbiAgICBpc1ZhbGlkPFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hPihwYXlsb2FkOiBhbnksIGNiOiBWYWxpZGF0ZVBheWxvYWQ8VD4pOiBib29sZWFuO1xufVxuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlSWQocHJlZml4Pzogc3RyaW5nKTogc3RyaW5nO1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZmxhdHRlbihvYmo6IGFueSwgcHJlZml4Pzogc3RyaW5nLCByZXM/OiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdW5mbGF0dGVuKG9iajogYW55KTogUmVjb3JkPHN0cmluZywgYW55PjtcbiIsImV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGZvcm1hdEJ5dGVzKGJ5dGVzOiBudW1iZXIsIGRlY2ltYWxzPzogbnVtYmVyKTogc3RyaW5nO1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFyc2VVcmxQYXJhbXMocm91dGVQYXRoOiBzdHJpbmcsIHJlcXVlc3RQYXRoOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFyc2VVcmxRdWVyeShyZXF1ZXN0UGF0aDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgYW55PjtcbiIsImludGVyZmFjZSBUcnllciB7XG4gICAgKC4uLmFyZ3M6IGFueVtdKTogYW55O1xufVxuaW50ZXJmYWNlIFRyeWVyQXN5bmMge1xuICAgICguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8YW55PiB8IGFueTtcbn1cbnR5cGUgVHJ5Q2F0Y2hSZXN1bHQ8VCBleHRlbmRzIFRyeWVyPiA9IFtudWxsLCBSZXR1cm5UeXBlPFQ+XSB8IFtFcnJvciwgbnVsbF07XG50eXBlIFRyeUNhdGNoQXN5bmNSZXN1bHQ8VCBleHRlbmRzIFRyeWVyQXN5bmM+ID0gW251bGwsIEF3YWl0ZWQ8UmV0dXJuVHlwZTxUPj5dIHwgW0Vycm9yLCBudWxsXTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHRyeUNhdGNoPFQgZXh0ZW5kcyBUcnllckFzeW5jPih0cnllcjogVCk6IFByb21pc2U8VHJ5Q2F0Y2hBc3luY1Jlc3VsdDxUPj47XG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgdHJ5Q2F0Y2gge1xuICAgIHZhciBzeW5jOiA8VCBleHRlbmRzIFRyeWVyPih0cnllcjogVCkgPT4gVHJ5Q2F0Y2hSZXN1bHQ8VD47XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgKiBhcyB2IGZyb20gJ3ZhbGlib3QnO1xuZXhwb3J0IHR5cGUgUGVybWlzc2lvbkFzc2lnbm1lbnQgPSB2LkluZmVyT3V0cHV0PHR5cGVvZiBwZXJtaXNzaW9uQXNzaWdubWVudFNjaGVtYT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBwZXJtaXNzaW9uQXNzaWdubWVudFNjaGVtYTogdi5PYmplY3RTY2hlbWE8e1xuICAgIHJlYWRvbmx5IGlkOiB2Lk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHBlcm1pc3Npb25faWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgYXNzaWduYWJsZV90eXBlOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGFzc2lnbmFibGVfaWQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgY3JlYXRlZF9hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSB1cGRhdGVkX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgdHlwZSBQZXJtaXNzaW9uID0gdi5JbmZlck91dHB1dDx0eXBlb2YgcGVybWlzc2lvblNjaGVtYT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBwZXJtaXNzaW9uU2NoZW1hOiB2Lk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgaWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgbmFtZTogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiB2Lk51bGxhYmxlU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgYWN0aW9uOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHN1YmplY3Q6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgY29uZGl0aW9uczogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGNyZWF0ZWRfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdXBkYXRlZF9hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBleHBpcmVzX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgdHlwZSBUb2tlbiA9IHYuSW5mZXJPdXRwdXQ8dHlwZW9mIHRva2VuU2NoZW1hPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHRva2VuU2NoZW1hOiB2Lk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgaWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgbmFtZTogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHR5cGU6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdXNlcl9pZDogdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSB0b2tlbjogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBjcmVhdGVkX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZWRfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgZXhwaXJlc19hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbn0sIHVuZGVmaW5lZD47XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige1xuICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1c0NvZGU/OiBudW1iZXIpO1xuICAgIHN0YXRpYyBmcm9tRXJyb3IoZXJyb3I6IEVycm9yKTogQmFzZUV4Y2VwdGlvbjtcbn1cbiIsImltcG9ydCBCYXNlRXhjZXB0aW9uIGZyb20gJy4vQmFzZUV4Y2VwdGlvbi50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGVsbEV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24ge1xuICAgIG91dHB1dDogc3RyaW5nO1xuICAgIGJpbjogc3RyaW5nO1xuICAgIGFyZ3M6IHN0cmluZ1tdO1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgb3V0cHV0OiBzdHJpbmcsIGJpbjogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSk7XG59XG4iLCJpbXBvcnQgVmFsaWRhdG9yU2VydmljZSBmcm9tIFwiLi4vc2VydmljZXMvVmFsaWRhdG9yU2VydmljZVwiO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdG9yOiBWYWxpZGF0b3JTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdG9yO1xuIiwiaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJyNzaGFyZWQvdXRpbHMvY29tcG9zZS50cyc7XG5pbnRlcmZhY2UgQ3JlYXRlQmFzZUVudGl0eU9wdGlvbnMge1xuICAgIHBhcnNlPzogKGRhdGE6IGFueSkgPT4gYW55O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQmFzZUVudGl0eShvcHRpb25zPzogQ3JlYXRlQmFzZUVudGl0eU9wdGlvbnMpOiA8VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oQmFzZTogVEJhc2UpID0+IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgVEJhc2U7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCYXNlRW50aXR5PFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBUQmFzZTtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgQ29uc3RydWN0b3IgfSBmcm9tICcjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHMnO1xuZXhwb3J0IGludGVyZmFjZSBMaXN0ZW5lciB7XG4gICAgZXZlbnQ6IHN0cmluZztcbiAgICBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZW1pdEhvb2soY29uc3RydWN0b3I6IGFueSwgZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gb25Ib29rKGNvbnN0cnVjdG9yOiBhbnksIGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gSG9va3NTdGF0aWM8VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oQmFzZTogVEJhc2UpOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHt9O1xuICAgIGxpc3RlbmVyczogQXJyYXk8KC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPjtcbiAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICBlbWl0KGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbn0gJiBUQmFzZTtcbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBIb29rc1N0YXRpYyB7XG4gICAgdmFyIGVtaXQ6IHR5cGVvZiBlbWl0SG9vaztcbiAgICB2YXIgb246IHR5cGVvZiBvbkhvb2s7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBIb29rczxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPihCYXNlOiBUQmFzZSk6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBsaXN0ZW5lcnM6IExpc3RlbmVyW107XG4gICAgICAgIG9uKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkO1xuICAgICAgICBvZmYoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgICAgIGVtaXQoZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICBlbWl0QXN5bmMoZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xuICAgIH07XG59ICYgVEJhc2U7XG4iLCJpbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNvZnREZWxldGVNaXhpbjxUIGV4dGVuZHMgQ29uc3RydWN0b3I+KGJhc2U6IFQpOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZGVsZXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbn0gJiBUO1xuIiwiaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJyNzaGFyZWQvdXRpbHMvY29tcG9zZS50cyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUaW1lc3RhbXBNaXhpbjxUIGV4dGVuZHMgQ29uc3RydWN0b3I+KGJhc2U6IFQpOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgY3JlYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICAgICAgdXBkYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICB9O1xufSAmIFQ7XG4iLCJkZWNsYXJlIGNvbnN0IFBlcm1pc3Npb25FbnRpdHlfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZXJtaXNzaW9uRW50aXR5IGV4dGVuZHMgUGVybWlzc2lvbkVudGl0eV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBvcmlnaW46IHN0cmluZztcbiAgICBzdWJqZWN0OiBzdHJpbmc7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgY29uZGl0aW9uczogc3RyaW5nIHwgbnVsbCB8IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW47XG4gICAgZ2V0IHBhcnNlZENvbmRpdGlvbnMoKTogYW55O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgZGVmaW5lQWJpbGl0eSB9IGZyb20gJ0BjYXNsL2FiaWxpdHknO1xuaW1wb3J0IFBlcm1pc3Npb24gZnJvbSAnLi9QZXJtaXNzaW9uRW50aXR5LnRzJztcbmltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2xFbnRpdHkge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBhYmlsaXR5OiBSZXR1cm5UeXBlPHR5cGVvZiBkZWZpbmVBYmlsaXR5PjtcbiAgICBwZXJtaXNzaW9uczogUGVybWlzc2lvbltdO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogUGFydGlhbDxBY2xFbnRpdHk+KTtcbiAgICBjYW4oYWN0aW9uOiBzdHJpbmcsIHN1YmplY3Q6IGFueSwgb2JqZWN0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW47XG4gICAgY2Fubm90KGFjdGlvbjogc3RyaW5nLCBzdWJqZWN0OiBhbnksIG9iamVjdD86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFuO1xuICAgIHN1YmplY3Qoc3ViamVjdDogc3RyaW5nLCBvYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ICYgaW1wb3J0KFwiQGNhc2wvYWJpbGl0eVwiKS5Gb3JjZWRTdWJqZWN0PHN0cmluZz47XG59XG4iLCJleHBvcnQgaW50ZXJmYWNlIENvb2tpZU1hcEVudGl0eU9wdGlvbnMge1xuICAgIGNvb2tpZXM/OiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHByZWZpeD86IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvb2tpZU1hcEVudGl0eSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGNvb2tpZXM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJlZml4OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoZGF0YT86IENvb2tpZU1hcEVudGl0eU9wdGlvbnMpO1xuICAgIGxvYWQoY29va2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IE1hcDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkO1xuICAgIGdldChuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgfCBudWxsO1xuICAgIHNldChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiB2b2lkO1xuICAgIHRvUmVjb3JkKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG4iLCJleHBvcnQgZGVjbGFyZSBjb25zdCBUWVBFUzogKCkgPT4gKHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGxhYmVsOiBhbnk7XG4gICAgZGVzY3JpcHRpb246IGFueTtcbiAgICBjb25maWdfZmllbGRzOiB7XG4gICAgICAgIGRpcmVjdG9yeToge1xuICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGFueTtcbiAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgfTtcbiAgICAgICAgYWNjZXNzS2V5SWQ/OiB1bmRlZmluZWQ7XG4gICAgICAgIHNlY3JldEFjY2Vzc0tleT86IHVuZGVmaW5lZDtcbiAgICAgICAgYnVja2V0PzogdW5kZWZpbmVkO1xuICAgICAgICByZWdpb24/OiB1bmRlZmluZWQ7XG4gICAgICAgIHByZWZpeD86IHVuZGVmaW5lZDtcbiAgICAgICAgZW5kcG9pbnQ/OiB1bmRlZmluZWQ7XG4gICAgfTtcbn0gfCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgY29uZmlnX2ZpZWxkczoge1xuICAgICAgICBhY2Nlc3NLZXlJZDoge1xuICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgICAgYnVja2V0OiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgIH07XG4gICAgICAgIHJlZ2lvbjoge1xuICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICB9O1xuICAgICAgICBwcmVmaXg6IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgfTtcbiAgICAgICAgZW5kcG9pbnQ6IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgfTtcbiAgICAgICAgZGlyZWN0b3J5PzogdW5kZWZpbmVkO1xuICAgIH07XG59KVtdO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJpdmVDb25maWcge1xuICAgIHN0YXRpYyBnZXQgVFlQRVMoKTogKHtcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgZGVzY3JpcHRpb246IGFueTtcbiAgICAgICAgY29uZmlnX2ZpZWxkczoge1xuICAgICAgICAgICAgZGlyZWN0b3J5OiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYW55O1xuICAgICAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2Nlc3NLZXlJZD86IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHNlY3JldEFjY2Vzc0tleT86IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGJ1Y2tldD86IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJlZ2lvbj86IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHByZWZpeD86IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGVuZHBvaW50PzogdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgIH0gfCB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgICAgIGNvbmZpZ19maWVsZHM6IHtcbiAgICAgICAgICAgIGFjY2Vzc0tleUlkOiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNlY3JldEFjY2Vzc0tleToge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBidWNrZXQ6IHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWdpb246IHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwcmVmaXg6IHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbmRwb2ludDoge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRpcmVjdG9yeT86IHVuZGVmaW5lZDtcbiAgICAgICAgfTtcbiAgICB9KVtdO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBpc19kZWZhdWx0OiBib29sZWFuO1xuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBEcml2ZUNvbmZpZyk7XG4gICAgZ2V0IGNvbmZpZ19maWVsZHMoKToge307XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBEcml2ZUVudHJ5IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHR5cGU6ICdmaWxlJyB8ICdkaXJlY3RvcnknO1xuICAgIG1ldGFzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IERyaXZlRW50cnkpO1xufVxuIiwiZGVjbGFyZSBjb25zdCBGaWxlRW50aXR5X2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgfTtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZGVsZXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlRW50aXR5IGV4dGVuZHMgRmlsZUVudGl0eV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGRyaXZlOiBzdHJpbmc7XG4gICAgbWltZXR5cGU6IHN0cmluZztcbiAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgY2xpZW50X25hbWU6IHN0cmluZztcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYzogYm9vbGVhbjtcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgbWV0YXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGlzSW1hZ2UoKTogYm9vbGVhbjtcbn1cbmV4cG9ydCB7fTtcbiIsImRlY2xhcmUgY29uc3QgRmlsZU1ldGFfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3IgJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgY3JlYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICAgICAgdXBkYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICB9O1xufSAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBkZWxldGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbGVNZXRhIGV4dGVuZHMgRmlsZU1ldGFfYmFzZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBmaWxlX2lkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IHt9O1xuIiwiZGVjbGFyZSBjb25zdCBVcGxvYWRTZXNzaW9uX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgfTtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZGVsZXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGxvYWRTZXNzaW9uIGV4dGVuZHMgVXBsb2FkU2Vzc2lvbl9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIHB1cnBvc2U6IHN0cmluZztcbiAgICBtaW1lX3R5cGVzOiBzdHJpbmc7XG4gICAgbWF4X3NpemU6IG51bWJlcjtcbiAgICB1cGxvYWRfdXJsPzogc3RyaW5nO1xuICAgIGNyZWF0ZV9maWxlX3VybD86IHN0cmluZztcbiAgICBnZXRQYXJzZWRNaW1lVHlwZXMoKTogc3RyaW5nW107XG4gICAgaXNBbGxvd2VkTWltZVR5cGUobWltZVR5cGU6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgaXNBbGxvd2VkU2l6ZShzaXplOiBudW1iZXIpOiBib29sZWFuO1xufVxuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGludGVyZmFjZSBDb29raWVNYXBFbnRpdHlPcHRpb25zIHtcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBzZXRIZWFkZXI/OiAobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGVhZGVyTWFwRW50aXR5IHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgZW50cmllczogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgICBzZXRIZWFkZXI/OiAobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBDb29raWVNYXBFbnRpdHlPcHRpb25zKTtcbiAgICBsb2FkRnJvbVJlY29yZChjb29raWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZDtcbiAgICBnZXQobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbDtcbiAgICBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbiAgICB0b1JlY29yZCgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuIiwiZXhwb3J0IGludGVyZmFjZSBNb2R1bGVNYW5pZmVzdEJ1aWxkSW1wb3J0IHtcbiAgICBmcm9tOiBzdHJpbmc7XG4gICAgdG8/OiBzdHJpbmc7XG4gICAgdHlwZTogJ2dsb2JhbF9pbXBvcnQnO1xufVxuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVNYW5pZmVzdEJ1aWxkIHtcbiAgICBpbXBvcnRzPzogTW9kdWxlTWFuaWZlc3RCdWlsZEltcG9ydFtdO1xufVxuZGVjbGFyZSBjb25zdCBNb2R1bGVNYW5pZmVzdF9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvcjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZHVsZU1hbmlmZXN0IGV4dGVuZHMgTW9kdWxlTWFuaWZlc3RfYmFzZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgYXV0aG9yPzogc3RyaW5nO1xuICAgIGRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgYnVpbGQ/OiBNb2R1bGVNYW5pZmVzdEJ1aWxkO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIE1vZHVsZU1hbmlmZXN0IGZyb20gJy4vTW9kdWxlTWFuaWZlc3RFbnRpdHkudHMnO1xuaW1wb3J0IExpZmVjeWNsZUhvb2sgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9MaWZlY3ljbGVIb29rLnRzJztcbmludGVyZmFjZSBNb2R1bGVVcGdyYWRlSW5mbyB7XG4gICAgc291cmNlOiAnZ2l0JyB8ICd6aXAnO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmRlY2xhcmUgY29uc3QgTW9kdWxlX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yPHt9PiAmIHR5cGVvZiBMaWZlY3ljbGVIb29rO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kdWxlIGV4dGVuZHMgTW9kdWxlX2Jhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgZGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGJ1aWxkOiBNb2R1bGVNYW5pZmVzdFsnYnVpbGQnXTtcbiAgICBkaXJlY3Rvcnk6IHN0cmluZztcbiAgICB1cGdyYWRlX2luZm8/OiBNb2R1bGVVcGdyYWRlSW5mbztcbiAgICBzZXREYXRhKGRhdGE6IFBhcnRpYWw8TW9kdWxlIHwgTW9kdWxlTWFuaWZlc3Q+KTogdm9pZDtcbn1cbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhZ2luYXRpb25FbnRpdHk8VCA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBpdGVtczogVFtdO1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgcGFnZTogbnVtYmVyO1xuICAgIHBlcl9wYWdlOiBudW1iZXI7XG4gICAgdG90YWxfcGFnZXM6IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBQYXJ0aWFsPFBhZ2luYXRpb25FbnRpdHk+KTtcbiAgICBzdGF0aWMgZnJvbTxUID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPj4ocGF5bG9hZDogUGFydGlhbDxQYWdpbmF0aW9uRW50aXR5PFQ+Pik6IFBhZ2luYXRpb25FbnRpdHk8VD47XG59XG4iLCJkZWNsYXJlIGNvbnN0IFBsdWdpbkVudGl0eV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvcjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsdWdpbkVudGl0eSBleHRlbmRzIFBsdWdpbkVudGl0eV9iYXNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBhbGlhc2VzOiBzdHJpbmdbXTtcbn1cbmV4cG9ydCB7fTtcbiIsImRlY2xhcmUgY29uc3QgUm9sZV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBjcmVhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgICAgICB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgIH07XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGRlbGV0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm9sZSBleHRlbmRzIFJvbGVfYmFzZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSBQZXJtaXNzaW9uIGZyb20gJy4vUGVybWlzc2lvbkVudGl0eS50cyc7XG5pbXBvcnQgdHlwZSBSb2xlIGZyb20gJy4vUm9sZUVudGl0eS50cyc7XG5kZWNsYXJlIGNvbnN0IFVzZXJFbnRpdHlfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3IgJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgY3JlYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICAgICAgdXBkYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICB9O1xufSAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBkZWxldGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVzZXJFbnRpdHkgZXh0ZW5kcyBVc2VyRW50aXR5X2Jhc2Uge1xuICAgIGlkOiBudW1iZXI7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICB2ZXJpZmllZF9hdD86IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAgIHBlcm1pc3Npb25zPzogUGVybWlzc2lvbltdO1xuICAgIHJvbGVzPzogUm9sZVtdO1xuICAgIGdldCBpbml0aWFscygpOiBzdHJpbmc7XG59XG5leHBvcnQge307XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUEsUUFBVTtDQUFBO09BQU0sRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNoQixJQUFJLGdCQUFXO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRGYsSUFBSSxnQkFBYztDQUFDO0VBQUUsTUFBTSxDQUFDLEVBQUU7Q0FBQztFQUFBO0VBQU07RUFBRTtFQUFLO0NBQUM7QUFDN0MsSUFBSSxXQUFXO0NBQUM7T0FBUyxDQUFBLGNBQVM7Q0FBQSxDQUFBLEdBQUE7Q0FBVztBQUM3QyxJQUFBLG1CQUFxQjtDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQWlCO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0Z0QyxJQUFBLGdCQUFvQjtDQUFDO09BQUEsQ0FBQSxjQUFjO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDbkMsSUFBQSxrQkFBVTtDQUFBO09BQWdCLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUIsSUFBSSxZQUFVO0NBQUE7T0FBQSxFQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNkLElBQUksb0JBQWE7Q0FBQTtPQUFBLENBQUEsVUFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFDakIsSUFBSSx5QkFBOEI7Q0FBRztPQUFBLENBQUEsY0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNyQyxJQUFJLGtCQUFrQjtDQUFDO0VBQUksUUFBUyxNQUFNO0VBQUM7RUFBRztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0w5QyxJQUFBLGdCQUFvQjtDQUFDO09BQUE7RUFBQTtFQUFjO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0FuQyxJQUFXLHNCQUFzQjtDQUFDO0VBQUksTUFBRSxDQUFBLEdBQU8sRUFBQztDQUFHO0VBQUM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFHO0VBQUs7RUFBRTtDQUFBO0FBQzlFLElBQVcsWUFBWTtDQUFDO0VBQUcsR0FBQSxNQUFRO0VBQUE7RUFBTztFQUFHO0VBQUM7RUFBUTtFQUFHO0VBQUU7RUFBTztFQUFRO0NBQUU7RUFBQztFQUFDO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDOUUsSUFBVyxhQUFhO0NBQUM7RUFBRyxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0Q1QixJQUFXLFdBQVc7Q0FBQztPQUFRLEVBQUk7Q0FBRSxDQUFBLEdBQUk7Q0FBQztBQUMxQyxJQUFXLGNBQWM7Q0FBQztFQUFJLE1BQUksQ0FBQSxFQUFJO0NBQUU7RUFBQztFQUFDO0VBQU07RUFBSTtDQUFDO0FBQ3JELElBQVcsUUFBUTtDQUFDO0VBQUksTUFBSztFQUFDO0VBQWE7RUFBRztFQUFZO0NBQUU7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM1RCxJQUFFLFVBQUE7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDRixJQUFXLGNBQVU7Q0FBQTtFQUFPLE9BQU8sTUFBTztFQUFBO0VBQWU7RUFBVztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDcEUsSUFBVSxRQUFJO0NBQUE7RUFBUyxTQUFXLFVBQU07RUFBQTtFQUFZO0VBQVM7RUFBTztFQUFZO0VBQUE7RUFBQTtDQUFB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RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FD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QTtFQUFBO0NBQUE7Ozs7QUNKeEMsSUFBTywyQkFBVTtDQUFBO09BQXVCLENBQUEsSUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN4QyxJQUFJLGtCQUFjO0NBQUE7T0FBZTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEakMsSUFBTyxRQUFRO0NBQUs7T0FBVSxFQUFFO0NBQUU7RUFBQztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDbkMsSUFBSSxjQUFVO0NBQUE7T0FBQSxDQUFBLFFBQUEsWUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RkLElBQUEsYUFBZTtDQUFBO09B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
|